summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/apprentice.c42
-rwxr-xr-xsrc/battle_anim_effects_3.c8
-rw-r--r--src/battle_anim_mons.c8
-rw-r--r--src/battle_anim_status_effects.c62
-rwxr-xr-xsrc/battle_anim_throw.c5
-rw-r--r--src/battle_factory_screen.c4
-rw-r--r--src/battle_main.c4
-rw-r--r--src/battle_pyramid_bag.c976
-rw-r--r--src/battle_script_commands.c2
-rw-r--r--src/battle_tower.c1
-rw-r--r--src/contest.c80
-rw-r--r--src/contest_painting.c255
-rw-r--r--src/contest_util.c300
-rw-r--r--src/data.c277
-rw-r--r--src/data/contest_opponents.h16
-rw-r--r--src/data/pokemon_graphics/unknown_table.h444
-rw-r--r--src/data/trade.h502
-rw-r--r--src/data/wallpapers.h393
-rw-r--r--src/daycare.c12
-rw-r--r--src/decoration.c4
-rw-r--r--src/easy_chat.c4
-rw-r--r--src/egg_hatch.c6
-rwxr-xr-xsrc/ereader_helpers.c510
-rwxr-xr-xsrc/ereader_screen.c10
-rw-r--r--src/field_specials.c3
-rw-r--r--src/fldeff_misc.c1
-rw-r--r--src/frontier_util.c26
-rw-r--r--src/graphics.c64
-rw-r--r--src/international_string_util.c2
-rw-r--r--src/item.c3
-rwxr-xr-xsrc/item_menu.c15
-rwxr-xr-xsrc/item_use.c18
-rw-r--r--src/librfu_intr.c16
-rw-r--r--src/librfu_rfu.c14
-rw-r--r--src/librfu_sio32id.c29
-rw-r--r--src/m4a.c13
-rw-r--r--src/mauville_old_man.c48
-rw-r--r--src/menu.c25
-rw-r--r--src/menu_helpers.c2
-rw-r--r--src/new_game.c8
-rwxr-xr-xsrc/party_menu.c10
-rw-r--r--src/pokeball.c100
-rw-r--r--src/pokemon.c10
-rw-r--r--src/pokemon_size_record.c2
-rw-r--r--src/pokemon_storage_system.c8458
-rw-r--r--src/pokemon_summary_screen.c54
-rw-r--r--src/pokenav_conditions_1.c2
-rw-r--r--src/post_battle_event_funcs.c1
-rw-r--r--src/record_mixing.c106
-rw-r--r--src/roulette.c36
-rw-r--r--src/safari_zone.c2
-rw-r--r--src/scrcmd.c6
-rw-r--r--src/script_menu.c2
-rwxr-xr-xsrc/script_pokemon_util.c1
-rw-r--r--src/secret_base.c1
-rwxr-xr-xsrc/shop.c5
-rw-r--r--src/slot_machine.c2
-rw-r--r--src/strings.c13
-rw-r--r--src/trade.c1248
-rwxr-xr-xsrc/trainer_card.c4
-rw-r--r--src/trainer_hill.c11
-rw-r--r--src/trainer_pokemon_sprites.c2
-rw-r--r--src/tv.c6068
63 files changed, 10523 insertions, 9833 deletions
diff --git a/src/apprentice.c b/src/apprentice.c
index 7053a8b63..f93a3e30b 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -322,17 +322,12 @@ static void SetRandomQuestionData(void)
FREE_AND_SET_NULL(gApprenticePartyMovesData);
}
-// No idea why a do-while loop is needed, but it will not match without it.
+#define APPRENTICE_SPECIES_ID(monId) \
+ ((monId < MULTI_PARTY_SIZE) ? (PLAYER_APPRENTICE.speciesIds[monId] >> (((PLAYER_APPRENTICE.party >> monId) & 1) << 2) & 0xF) : 0)
-#define APPRENTICE_SPECIES_ID(speciesArrId, monId) speciesArrId = (PLAYER_APPRENTICE.speciesIds[monId] >> \
- (((PLAYER_APPRENTICE.party >> monId) & 1) << 2)) & 0xF; \
- do {} while (0)
-
-// Why the need to have two macros do the exact thing differently?
-#define APPRENTICE_SPECIES_ID_2(speciesArrId, monId) { u8 a0 = ((PLAYER_APPRENTICE.party >> monId) & 1);\
- speciesArrId = PLAYER_APPRENTICE.speciesIds[monId]; \
- speciesArrId = ((speciesArrId) >> (a0 << 2)) & 0xF; \
- }
+#define APPRENTICE_SPECIES_ID_NO_COND(monId, count) \
+ monId = ((PLAYER_APPRENTICE.party >> count) & 1); \
+ monId = ((PLAYER_APPRENTICE.speciesIds[count]) >> (monId << 2)) & 0xF; \
// Get the second move choice for the "Which move" question
// Unlike the first move choice, this can be either a level up move or a TM/HM move
@@ -348,15 +343,7 @@ static u16 GetRandomAlternateMove(u8 monId)
bool32 shouldUseMove;
u8 level;
- if (monId < MULTI_PARTY_SIZE)
- {
- APPRENTICE_SPECIES_ID(id, monId);
- }
- else
- {
- id = 0;
- }
-
+ id = APPRENTICE_SPECIES_ID(monId);
species = gApprentices[PLAYER_APPRENTICE.id].species[id];
learnset = gLevelUpLearnsets[species];
j = 0;
@@ -551,7 +538,7 @@ static void SaveApprenticeParty(u8 numQuestions)
// Save party species
for (i = 0; i < MULTI_PARTY_SIZE; i++)
{
- APPRENTICE_SPECIES_ID(speciesTableId, i);
+ speciesTableId = APPRENTICE_SPECIES_ID(i);
apprenticeMons[i]->species = gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId];
GetLatestLearnedMoves(apprenticeMons[i]->species, apprenticeMons[i]->moves);
}
@@ -605,7 +592,7 @@ static void CreateApprenticeMenu(u8 menu)
u16 species;
u32 speciesTableId;
- APPRENTICE_SPECIES_ID(speciesTableId, i);
+ speciesTableId = APPRENTICE_SPECIES_ID(i);
species = gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId];
strings[i] = gSpeciesNames[species];
}
@@ -1016,7 +1003,7 @@ static void InitQuestionData(void)
{
// count re-used as monId
count = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].monId;
- APPRENTICE_SPECIES_ID_2(id1, count);
+ APPRENTICE_SPECIES_ID_NO_COND(id1, count);
gApprenticeQuestionData->speciesId = gApprentices[PLAYER_APPRENTICE.id].species[id1];
gApprenticeQuestionData->moveId1 = GetDefaultMove(count, id1, PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].moveSlot);
gApprenticeQuestionData->moveId2 = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data;
@@ -1030,7 +1017,7 @@ static void InitQuestionData(void)
{
// count re-used as monId
count = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].monId;
- APPRENTICE_SPECIES_ID_2(id2, count);
+ APPRENTICE_SPECIES_ID_NO_COND(id2, count);
gApprenticeQuestionData->speciesId = gApprentices[PLAYER_APPRENTICE.id].species[id2];
}
}
@@ -1097,14 +1084,7 @@ static void ApprenticeBufferString(void)
StringCopy(stringDst, gStringVar4);
break;
case APPRENTICE_BUFF_LEAD_MON_SPECIES:
- if (PLAYER_APPRENTICE.leadMonId < MULTI_PARTY_SIZE)
- {
- APPRENTICE_SPECIES_ID(speciesArrayId, PLAYER_APPRENTICE.leadMonId);
- }
- else
- {
- speciesArrayId = 0;
- }
+ speciesArrayId = APPRENTICE_SPECIES_ID(PLAYER_APPRENTICE.leadMonId);
StringCopy(stringDst, gSpeciesNames[gApprentices[PLAYER_APPRENTICE.id].species[speciesArrayId]]);
break;
}
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index 800431c6a..5aaf45f19 100755
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -2319,11 +2319,11 @@ void AnimTask_TransformMon(u8 taskId)
}
if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
- gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteContest;
else
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteOpponentSide;
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], BATTLER_AFFINE_NORMAL);
}
gTasks[taskId].data[0]++;
@@ -4733,8 +4733,8 @@ void AnimTask_MonToSubstitute(u8 taskId)
LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, 0, spriteId);
if (IsContest())
{
- gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteContest;
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], BATTLER_AFFINE_NORMAL);
}
for (i = 0; i < NUM_TASK_DATA; i++)
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index 6fd8cd621..2082512ff 100644
--- a/src/battle_anim_mons.c
+++ b/src/battle_anim_mons.c
@@ -2078,8 +2078,8 @@ u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16
if (IsContest())
{
- gSprites[spriteId].affineAnims = gUnknown_082FF6C0;
- StartSpriteAffineAnim(&gSprites[spriteId], 0);
+ gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest;
+ StartSpriteAffineAnim(&gSprites[spriteId], BATTLER_AFFINE_NORMAL);
}
return spriteId;
}
@@ -2273,7 +2273,7 @@ u8 CreateInvisibleSpriteCopy(int battlerId, u8 spriteId, int species)
return newSpriteId;
}
-void AnimUnused_80A8A6C(struct Sprite *sprite)
+void AnimTranslateLinearAndFlicker_Flipped(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
@@ -2296,7 +2296,7 @@ void AnimUnused_80A8A6C(struct Sprite *sprite)
}
// Used by three different unused battle anim sprite templates.
-void AnimUnused_80A8AEC(struct Sprite *sprite)
+void AnimTranslateLinearAndFlicker(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c
index e7ef05673..e859bed62 100644
--- a/src/battle_anim_status_effects.c
+++ b/src/battle_anim_status_effects.c
@@ -26,7 +26,7 @@ static void Task_DoStatusAnimation(u8 taskId);
static void AnimFlashingCircleImpact(struct Sprite *sprite);
static void AnimFlashingCircleImpact_Step(struct Sprite *sprite);
-static const union AnimCmd sAnim_Unused_853EDE4[] =
+static const union AnimCmd sAnim_FlickeringOrb[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(4, 3),
@@ -35,33 +35,33 @@ static const union AnimCmd sAnim_Unused_853EDE4[] =
ANIMCMD_JUMP(0)
};
-static const union AnimCmd *const sAnims_Unused_853EDF8[] =
+static const union AnimCmd *const sAnims_FlickeringOrb[] =
{
- sAnim_Unused_853EDE4
+ sAnim_FlickeringOrb
};
// Unused
-const struct SpriteTemplate gUnusedSpriteTemplate_0853EDFC =
+static const struct SpriteTemplate sFlickeringOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORB,
.paletteTag = ANIM_TAG_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
- .anims = sAnims_Unused_853EDF8,
+ .anims = sAnims_FlickeringOrb,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimUnused_80A8AEC,
+ .callback = AnimTranslateLinearAndFlicker,
};
// Unused
-const struct SpriteTemplate gUnusedSpriteTemplate_0853EE14 =
+static const struct SpriteTemplate sFlickeringOrbFlippedSpriteTemplate =
{
.tileTag = ANIM_TAG_ORB,
.paletteTag = ANIM_TAG_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
- .anims = sAnims_Unused_853EDF8,
+ .anims = sAnims_FlickeringOrb,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimUnused_80A8A6C,
+ .callback = AnimTranslateLinearAndFlicker_Flipped,
};
static const union AnimCmd sAnim_WeatherBallNormal[] =
@@ -124,7 +124,7 @@ const struct SpriteTemplate gSpinningSparkleSpriteTemplate =
};
// Unused
-const struct SpriteTemplate gUnusedSpriteTemplate_0853EE9C =
+static const struct SpriteTemplate sFlickeringFootSpriteTemplate =
{
.tileTag = ANIM_TAG_MONSTER_FOOT,
.paletteTag = ANIM_TAG_MONSTER_FOOT,
@@ -132,79 +132,79 @@ const struct SpriteTemplate gUnusedSpriteTemplate_0853EE9C =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimUnused_80A8AEC,
+ .callback = AnimTranslateLinearAndFlicker,
};
-static const union AnimCmd sAnim_Unused_853EEB4[] =
+static const union AnimCmd sAnim_FlickeringImpact_0[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd sAnim_Unused_853EEBC[] =
+static const union AnimCmd sAnim_FlickeringImpact_1[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd sAnim_Unused_853EEC4[] =
+static const union AnimCmd sAnim_FlickeringImpact_2[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd *const sAnims_Unused_853EECC[] =
+static const union AnimCmd *const sAnims_FlickeringImpact[] =
{
- sAnim_Unused_853EEB4,
- sAnim_Unused_853EEBC,
- sAnim_Unused_853EEC4,
+ sAnim_FlickeringImpact_0,
+ sAnim_FlickeringImpact_1,
+ sAnim_FlickeringImpact_2,
};
// Unused
-const struct SpriteTemplate gUnusedSpriteTemplate_0853EED8 =
+static const struct SpriteTemplate sFlickeringImpactSpriteTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_Unused_853EECC,
+ .anims = sAnims_FlickeringImpact,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimUnused_80A8AEC,
+ .callback = AnimTranslateLinearAndFlicker,
};
-static const union AnimCmd sAnim_Unused_853EEF0[] =
+static const union AnimCmd sAnim_FlickeringShrinkOrb[] =
{
ANIMCMD_FRAME(0, 15),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd *const sAnims_Unused_853EEF8[] =
+static const union AnimCmd *const sAnims_FlickeringShrinkOrb[] =
{
- sAnim_Unused_853EEF0
+ sAnim_FlickeringShrinkOrb
};
-static const union AffineAnimCmd sAffineAnim_Unused_853EEFC[] =
+static const union AffineAnimCmd sAffineAnim_FlickeringShrinkOrb[] =
{
AFFINEANIMCMD_FRAME(96, 96, 0, 0),
AFFINEANIMCMD_FRAME(2, 2, 0, 1),
AFFINEANIMCMD_JUMP(1)
};
-static const union AffineAnimCmd *const sAffineAnims_Unused_853EEF8[] =
+static const union AffineAnimCmd *const sAffineAnims_FlickeringShrinkOrb[] =
{
- sAffineAnim_Unused_853EEFC
+ sAffineAnim_FlickeringShrinkOrb
};
// Unused
-const struct SpriteTemplate gUnusedSpriteTemplate_0853EF18 =
+static const struct SpriteTemplate sFlickeringShrinkOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORB,
.paletteTag = ANIM_TAG_ORB,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
- .anims = sAnims_Unused_853EEF8,
+ .anims = sAnims_FlickeringShrinkOrb,
.images = NULL,
- .affineAnims = sAffineAnims_Unused_853EEF8,
- .callback = AnimUnused_80A8A6C,
+ .affineAnims = sAffineAnims_FlickeringShrinkOrb,
+ .callback = AnimTranslateLinearAndFlicker_Flipped,
};
static const struct Subsprite sFrozenIceCubeSubsprites[] =
diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c
index f6a48cf69..83768b476 100755
--- a/src/battle_anim_throw.c
+++ b/src/battle_anim_throw.c
@@ -16,6 +16,7 @@
#include "task.h"
#include "trig.h"
#include "util.h"
+#include "data.h"
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/songs.h"
@@ -1471,7 +1472,7 @@ static void SpriteCB_Ball_Release_Step(struct Sprite *sprite)
// Animate Pokémon emerging from Poké Ball
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = FALSE;
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 1);
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], BATTLER_AFFINE_EMERGE);
AnimateSprite(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]]);
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].sOffsetY = 4096;
}
@@ -1485,7 +1486,7 @@ static void SpriteCB_Ball_Release_Wait(struct Sprite *sprite)
if (gSprites[gBattlerSpriteIds[gBattleAnimTarget]].affineAnimEnded)
{
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 0);
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], BATTLER_AFFINE_NORMAL);
released = TRUE;
}
else
diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c
index 5be53a8b3..680c6e81c 100644
--- a/src/battle_factory_screen.c
+++ b/src/battle_factory_screen.c
@@ -1476,7 +1476,7 @@ static void Select_Task_OpenSummaryScreen(u8 taskId)
sFactorySelectMons = AllocZeroed(sizeof(struct Pokemon) * SELECTABLE_MONS_COUNT);
for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
sFactorySelectMons[i] = sFactorySelectScreen->mons[i].monData;
- ShowPokemonSummaryScreen(PSS_MODE_LOCK_MOVES, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, CB2_InitSelectScreen);
+ ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, CB2_InitSelectScreen);
break;
}
}
@@ -2390,7 +2390,7 @@ static void Swap_Task_OpenSummaryScreen(u8 taskId)
DestroyTask(taskId);
sFactorySwapScreen->fromSummaryScreen = TRUE;
sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[244];
- ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, sFactorySwapScreen->cursorPos, FRONTIER_PARTY_SIZE - 1, CB2_InitSwapScreen);
+ ShowPokemonSummaryScreen(SUMMARY_MODE_NORMAL, gPlayerParty, sFactorySwapScreen->cursorPos, FRONTIER_PARTY_SIZE - 1, CB2_InitSwapScreen);
break;
}
}
diff --git a/src/battle_main.c b/src/battle_main.c
index 741461b0b..c74de896e 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -5039,7 +5039,7 @@ static void HandleEndTurn_FinishBattle(void)
}
}
}
- PutPokemonTodayCaughtOnAir();
+ TryPutPokemonTodayOnAir();
}
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK
@@ -5052,7 +5052,7 @@ static void HandleEndTurn_FinishBattle(void)
| BATTLE_TYPE_WALLY_TUTORIAL))
&& gBattleResults.shinyWildMon)
{
- sub_80EE184();
+ TryPutBreakingNewsOnAir();
}
sub_8186444();
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index 23f2f9653..0b13512ec 100644
--- a/src/battle_pyramid_bag.c
+++ b/src/battle_pyramid_bag.c
@@ -34,71 +34,83 @@
#include "constants/rgb.h"
#include "constants/songs.h"
-EWRAM_DATA struct PyramidBagResources *gPyramidBagResources = NULL;
-EWRAM_DATA struct PyramidBagCursorData gPyramidBagCursorData = {0};
-
-// This file's functions.
-static void Task_HandlePyramidBagInput(u8 taskId);
-static void Task_ChooseItemsToTossFromPyramidBag(u8 taskId);
-static void sub_81C5B4C(u8 taskId);
-static void Task_BeginItemSwap(u8 taskId);
-static void sub_81C5D20(u8 taskId);
-static void sub_81C674C(u8 taskId);
-static void HandleMenuActionInput(u8 taskId);
-static void HandleFewMenuActionsInput(u8 taskId);
-static void sub_81C66EC(u8 taskId);
-static void SetTaskToMainPyramidBagInputHandler(u8 taskId);
-static void sub_81C6350(u8 taskId);
-static void sub_81C64B4(u8 taskId);
-static void sub_81C65CC(u8 taskId);
-static void sub_81C66AC(u8 taskId);
-static void PerformItemSwap(u8 taskId);
-static void Task_ItemSwapHandleInput(u8 taskId);
-static void sub_81C6A14(u8 taskId);
+#define TAG_SCROLL_ARROW 2910
+#define TAG_PYRAMID_BAG 4132
+#define TAG_ITEM_ICON 4133
+#define TAG_ITEM_ICON_ALT 4134
+
+#define POS_NONE ((u8)-1)
+
+enum {
+ WIN_LIST,
+ WIN_INFO,
+ WIN_MSG,
+ WIN_TOSS_NUM,
+};
+
+EWRAM_DATA struct PyramidBagMenu *gPyramidBagMenu = NULL;
+EWRAM_DATA struct PyramidBagMenuState gPyramidBagMenuState = {0};
+
+static void Task_HandlePyramidBagInput(u8);
+static void Task_ChooseItemsToTossFromPyramidBag(u8);
+static void Task_ClosePyramidBag(u8);
+static void Task_BeginItemSwap(u8);
+static void OpenContextMenu(u8);
+static void TryCloseBagToGiveItem(u8);
+static void HandleMenuActionInput_2x2(u8);
+static void HandleMenuActionInput_SingleRow(u8);
+static void Task_WaitCloseErrorMessage(u8);
+static void SetTaskToMainPyramidBagInputHandler(u8);
+static void AskConfirmToss(u8);
+static void Task_ChooseHowManyToToss(u8);
+static void Task_TossItem(u8);
+static void ShowCantHoldMessage(u8);
+static void PerformItemSwap(u8);
+static void Task_ItemSwapHandleInput(u8);
+static void CancelItemSwap(u8);
static void SetBagItemsListTemplate(void);
-static void sub_81C504C(void);
-static void sub_81C51DC(void);
-static void AddScrollArrow(void);
-static void sub_81C56F8(void);
-static void sub_81C5A20(void);
-static void sub_81C6BD8(void);
-static void sub_81C6EF4(void);
+static void CB2_LoadPyramidBagMenu(void);
+static void InitPyramidBagBgs(void);
+static void AddScrollArrows(void);
+static void CreatePyramidBagInputTask(void);
+static void InitPyramidBagScroll(void);
+static void InitPyramidBagWindows(void);
+static void CreatePyramidBagSprite(void);
static void CreateSwapLine(void);
-static void sub_81C6E98(void);
-static void sub_81C6F20(void);
-static void sub_81C6404(void);
+static void LoadPyramidBagPalette(void);
+static void ShakePyramidBag(void);
+static void ShowNumToToss(void);
static void CloseBattlePyramidBagTextWindow(void);
-static bool8 sub_81C5238(void);
-static bool8 sub_81C5078(void);
-static void ShowItemImage(u16 itemId, u8 itemSpriteArrayId);
-static void PyramidBag_CopyItemName(u8 *dst, u16 itemId);
-static void sub_81C6FF8(u8 arg0);
-static void PrintItemDescription(s32 listMenuId);
-static void sub_81C5AB8(u8 y, u8 arg1);
-static void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId);
-static void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId);
-static u8 sub_81C6D24(u8 windowArrayId);
-static void sub_81C6D6C(u8 windowArrayId);
-static void sub_81C5EAC(u8 windowId);
-static void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount);
-static bool8 IsValidMenuAction(s8 arg0);
-static void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable);
-static void sub_81C6CEC(u8 windowId);
-static void UpdateSwapLinePos(u8 y);
-static void SetSwapLineInvisibility(bool8 invisible);
-static void sub_81C6F68(struct Sprite *sprite);
-static void BagAction_UseOnField(u8 taskId);
-static void BagAction_Toss(u8 taskId);
-static void BagAction_Give(u8 taskId);
-static void BagAction_Cancel(u8 taskId);
-static void BagAction_UseInBattle(u8 taskId);
-static void PyramidBagMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list);
-static void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y);
-static void TossItem(u8 taskId);
-static void DontTossItem(u8 taskId);
-
-// Const rom data.
-static const struct BgTemplate gUnknown_0861F2B4[] =
+static bool8 LoadPyramidBagGfx(void);
+static bool8 LoadPyramidBagMenu(void);
+static void ShowItemIcon(u16, u8);
+static void CopyBagItemName(u8 *, u16);
+static void FreeItemIconSpriteByAltId(u8);
+static void PrintItemDescription(s32);
+static void PrintSelectorArrowAtPos(u8, u8);
+static void PrintOnWindow_Font1(u8, const u8 *, u8, u8, u8, u8, u8, u8);
+static void PrintOnWindow_Font7(u8, const u8 *, u8, u8, u8, u8, u8, u8);
+static u8 OpenMenuActionWindowById(u8);
+static void CloseMenuActionWindowById(u8);
+static void PrintMenuActionText_SingleRow(u8);
+static void PrintMenuActionText_MultiRow(u8, u8, u8);
+static bool8 IsValidMenuAction(s8);
+static void CreatePyramidBagYesNo(u8, const struct YesNoFuncTable *);
+static void DrawTossNumberWindow(u8);
+static void UpdateSwapLinePos(u8);
+static void SetSwapLineInvisibility(bool8);
+static void SpriteCB_BagWaitForShake(struct Sprite *);
+static void BagAction_UseOnField(u8);
+static void BagAction_Toss(u8);
+static void BagAction_Give(u8);
+static void BagAction_Cancel(u8);
+static void BagAction_UseInBattle(u8);
+static void BagCursorMoved(s32, bool8, struct ListMenu *);
+static void PrintItemQuantity(u8, s32, u8);
+static void TossItem(u8);
+static void DontTossItem(u8);
+
+static const struct BgTemplate sBgTemplates[] =
{
{
.bg = 0,
@@ -129,14 +141,14 @@ static const struct BgTemplate gUnknown_0861F2B4[] =
},
};
-static const struct ListMenuTemplate gUnknown_0861F2C0 =
+static const struct ListMenuTemplate sListMenuTemplate =
{
.items = NULL,
- .moveCursorFunc = PyramidBagMoveCursorFunc,
+ .moveCursorFunc = BagCursorMoved,
.itemPrintFunc = PrintItemQuantity,
.totalItems = 0,
.maxShowed = 0,
- .windowId = 0,
+ .windowId = WIN_LIST,
.header_X = 0,
.item_X = 8,
.cursor_X = 0,
@@ -151,12 +163,14 @@ static const struct ListMenuTemplate gUnknown_0861F2C0 =
.cursorKind = 0
};
-#define ACTION_USE_FIELD 0
-#define ACTION_TOSS 1
-#define ACTION_GIVE 2
-#define ACTION_CANCEL 3
-#define ACTION_USE_BATTLE 4
-#define ACTION_DUMMY 5
+enum {
+ ACTION_USE_FIELD,
+ ACTION_TOSS,
+ ACTION_GIVE,
+ ACTION_CANCEL,
+ ACTION_USE_BATTLE,
+ ACTION_DUMMY,
+};
static const struct MenuAction sMenuActions[] =
{
@@ -168,26 +182,33 @@ static const struct MenuAction sMenuActions[] =
[ACTION_DUMMY] = { gText_EmptyString2, NULL },
};
-static const u8 sFieldMenuActionIds[] = {ACTION_USE_FIELD, ACTION_GIVE, ACTION_TOSS, ACTION_CANCEL};
-static const u8 gUnknown_0861F30C[] = {ACTION_TOSS, ACTION_CANCEL};
-static const u8 sBattleMenuActionIds[] = {ACTION_USE_BATTLE, ACTION_CANCEL};
-static const u8 gUnknown_0861F310[] = {ACTION_CANCEL};
+static const u8 sMenuActionIds_Field[] = {ACTION_USE_FIELD, ACTION_GIVE, ACTION_TOSS, ACTION_CANCEL};
+static const u8 sMenuActionIds_ChooseToss[] = {ACTION_TOSS, ACTION_CANCEL};
+static const u8 sMenuActionIds_Battle[] = {ACTION_USE_BATTLE, ACTION_CANCEL};
+static const u8 sMenuActionIds_BattleCannotUse[] = {ACTION_CANCEL};
static const struct YesNoFuncTable sYesNoTossFuncions =
{
TossItem, DontTossItem
};
-static const u8 sColorTable[][3] =
+enum {
+ COLORID_DARK_GRAY,
+ COLORID_LIGHT_GRAY,
+ COLORID_WHITE_BG,
+ COLORID_NONE = 0xFF
+};
+
+static const u8 sTextColors[][3] =
{
- {0, 2, 3},
- {0, 3, 1},
- {1, 2, 3},
+ [COLORID_DARK_GRAY] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY},
+ [COLORID_LIGHT_GRAY] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GRAY, TEXT_COLOR_WHITE},
+ [COLORID_WHITE_BG] = {TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}, // Unused
};
-static const struct WindowTemplate gUnknown_0861F328[] =
+static const struct WindowTemplate sWindowTemplates[] =
{
- {
+ [WIN_LIST] = {
.bg = 0,
.tilemapLeft = 14,
.tilemapTop = 2,
@@ -196,7 +217,7 @@ static const struct WindowTemplate gUnknown_0861F328[] =
.paletteNum = 15,
.baseBlock = 30
},
- {
+ [WIN_INFO] = {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 13,
@@ -205,7 +226,7 @@ static const struct WindowTemplate gUnknown_0861F328[] =
.paletteNum = 15,
.baseBlock = 270
},
- {
+ [WIN_MSG] = {
.bg = 1,
.tilemapLeft = 2,
.tilemapTop = 15,
@@ -214,7 +235,7 @@ static const struct WindowTemplate gUnknown_0861F328[] =
.paletteNum = 15,
.baseBlock = 354
},
- {
+ [WIN_TOSS_NUM] = {
.bg = 1,
.tilemapLeft = 24,
.tilemapTop = 17,
@@ -226,9 +247,17 @@ static const struct WindowTemplate gUnknown_0861F328[] =
DUMMY_WIN_TEMPLATE,
};
-static const struct WindowTemplate gUnknown_0861F350[] =
+enum {
+ MENU_WIN_1x1,
+ MENU_WIN_1x2,
+ MENU_WIN_2x2,
+ MENU_WIN_2x3,
+ MENU_WIN_YESNO,
+};
+
+static const struct WindowTemplate sWindowTemplates_MenuActions[] =
{
- {
+ [MENU_WIN_1x1] = {
.bg = 1,
.tilemapLeft = 22,
.tilemapTop = 17,
@@ -237,7 +266,7 @@ static const struct WindowTemplate gUnknown_0861F350[] =
.paletteNum = 15,
.baseBlock = 472
},
- {
+ [MENU_WIN_1x2] = {
.bg = 1,
.tilemapLeft = 22,
.tilemapTop = 15,
@@ -246,7 +275,7 @@ static const struct WindowTemplate gUnknown_0861F350[] =
.paletteNum = 15,
.baseBlock = 472
},
- {
+ [MENU_WIN_2x2] = {
.bg = 1,
.tilemapLeft = 15,
.tilemapTop = 15,
@@ -255,7 +284,7 @@ static const struct WindowTemplate gUnknown_0861F350[] =
.paletteNum = 15,
.baseBlock = 472
},
- {
+ [MENU_WIN_2x3] = { // Unused
.bg = 1,
.tilemapLeft = 15,
.tilemapTop = 13,
@@ -264,7 +293,7 @@ static const struct WindowTemplate gUnknown_0861F350[] =
.paletteNum = 15,
.baseBlock = 472
},
- {
+ [MENU_WIN_YESNO] = {
.bg = 1,
.tilemapLeft = 24,
.tilemapTop = 15,
@@ -275,7 +304,7 @@ static const struct WindowTemplate gUnknown_0861F350[] =
},
};
-static const struct OamData gOamData_861F378 =
+static const struct OamData sOamData_PyramidBag =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -292,24 +321,24 @@ static const struct OamData gOamData_861F378 =
.affineParam = 0,
};
-static const union AnimCmd gSpriteAnim_861F380[] =
+static const union AnimCmd sAnim_PyramidBag[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_END,
};
-static const union AnimCmd * const gSpriteAnimTable_861F388[] =
+static const union AnimCmd * const sAnims_PyramidBag[] =
{
- gSpriteAnim_861F380,
+ sAnim_PyramidBag,
};
-static const union AffineAnimCmd gSpriteAffineAnim_861F38C[] =
+static const union AffineAnimCmd sAffineAnim_PyramidBag_Still[] =
{
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gSpriteAffineAnim_861F39C[] =
+static const union AffineAnimCmd sAffineAnim_PyramidBag_Shake[] =
{
AFFINEANIMCMD_FRAME(0, 0, 254, 2),
AFFINEANIMCMD_FRAME(0, 0, 2, 4),
@@ -318,42 +347,50 @@ static const union AffineAnimCmd gSpriteAffineAnim_861F39C[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd * const gSpriteAffineAnimTable_861F3C4[] =
+enum {
+ ANIM_BAG_STILL,
+ ANIM_BAG_SHAKE,
+};
+
+static const union AffineAnimCmd * const sAffineAnims_PyramidBag[] =
{
- gSpriteAffineAnim_861F38C,
- gSpriteAffineAnim_861F39C,
+ [ANIM_BAG_STILL] = sAffineAnim_PyramidBag_Still,
+ [ANIM_BAG_SHAKE] = sAffineAnim_PyramidBag_Shake,
};
-static const struct CompressedSpriteSheet gPyramidBagSpriteSheet = {gBattleFrontierGfx_PyramidBag, 0x0800, 0x1024};
+static const struct CompressedSpriteSheet sSpriteSheet_PyramidBag = {gBattleFrontierGfx_PyramidBag, 0x0800, TAG_PYRAMID_BAG};
-static const struct SpriteTemplate gUnknown_0861F3D4 =
+static const struct SpriteTemplate sSpriteTemplate_PyramidBag =
{
- .tileTag = 0x1024,
- .paletteTag = 0x1024,
- .oam = &gOamData_861F378,
- .anims = gSpriteAnimTable_861F388,
+ .tileTag = TAG_PYRAMID_BAG,
+ .paletteTag = TAG_PYRAMID_BAG,
+ .oam = &sOamData_PyramidBag,
+ .anims = sAnims_PyramidBag,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_861F3C4,
+ .affineAnims = sAffineAnims_PyramidBag,
.callback = SpriteCallbackDummy
};
-// code
void InitBattlePyramidBagCursorPosition(void)
{
- gPyramidBagCursorData.cursorPosition = 0;
- gPyramidBagCursorData.scrollPosition = 0;
+ gPyramidBagMenuState.cursorPosition = 0;
+ gPyramidBagMenuState.scrollPosition = 0;
}
void CB2_PyramidBagMenuFromStartMenu(void)
{
- GoToBattlePyramidBagMenu(0, CB2_ReturnToFieldWithOpenMenu);
+ GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_FIELD, CB2_ReturnToFieldWithOpenMenu);
}
-static void sub_81C4F10(void)
+// Unused, CB2_BagMenuFromBattle is used instead
+static void OpenBattlePyramidBagInBattle(void)
{
- GoToBattlePyramidBagMenu(1, CB2_SetUpReshowBattleScreenAfterMenu2);
+ GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_BATTLE, CB2_SetUpReshowBattleScreenAfterMenu2);
}
+// If the player finishes a round at the Battle Pyramid with insufficient space in their
+// Pyramid Bag to store the party's held items, they may choose items to toss in order to
+// make room.
void ChooseItemsToTossFromPyramidBag(void)
{
ScriptContext2_Enable();
@@ -367,37 +404,37 @@ static void Task_ChooseItemsToTossFromPyramidBag(u8 taskId)
{
CleanupOverworldWindowsAndTilemaps();
gFieldCallback2 = CB2_FadeFromPartyMenu;
- GoToBattlePyramidBagMenu(3, CB2_ReturnToField);
+ GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_CHOOSE_TOSS, CB2_ReturnToField);
DestroyTask(taskId);
}
}
void CB2_ReturnToPyramidBagMenu(void)
{
- GoToBattlePyramidBagMenu(4, gPyramidBagCursorData.callback);
+ GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PREV, gPyramidBagMenuState.callback);
}
-void GoToBattlePyramidBagMenu(u8 a0, void (*callback)(void))
+void GoToBattlePyramidBagMenu(u8 location, void (*callback)(void))
{
- gPyramidBagResources = AllocZeroed(sizeof(*gPyramidBagResources));
+ gPyramidBagMenu = AllocZeroed(sizeof(*gPyramidBagMenu));
- if (a0 != 4)
- gPyramidBagCursorData.unk4 = a0;
+ if (location != PYRAMIDBAG_LOC_PREV)
+ gPyramidBagMenuState.location = location;
if (callback != NULL)
- gPyramidBagCursorData.callback = callback;
+ gPyramidBagMenuState.callback = callback;
- gPyramidBagResources->callback2 = NULL;
- gPyramidBagResources->unk814 = 0xFF;
- gPyramidBagResources->scrollIndicatorsTaskId = TASK_NONE;
+ gPyramidBagMenu->exitCallback = NULL;
+ gPyramidBagMenu->toSwapPos = POS_NONE;
+ gPyramidBagMenu->scrollIndicatorsTaskId = TASK_NONE;
- memset(gPyramidBagResources->itemsSpriteIds, 0xFF, sizeof(gPyramidBagResources->itemsSpriteIds));
- memset(gPyramidBagResources->windowIds, WINDOW_NONE, sizeof(gPyramidBagResources->windowIds));
+ memset(gPyramidBagMenu->spriteIds, SPRITE_NONE, sizeof(gPyramidBagMenu->spriteIds));
+ memset(gPyramidBagMenu->windowIds, WINDOW_NONE, sizeof(gPyramidBagMenu->windowIds));
- SetMainCallback2(sub_81C504C);
+ SetMainCallback2(CB2_LoadPyramidBagMenu);
}
-static void sub_81C501C(void)
+static void CB2_PyramidBag(void)
{
RunTasks();
AnimateSprites();
@@ -406,19 +443,21 @@ static void sub_81C501C(void)
UpdatePaletteFade();
}
-static void sub_81C5038(void)
+static void VBlankCB_PyramidBag(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-static void sub_81C504C(void)
+static void CB2_LoadPyramidBagMenu(void)
{
- while (MenuHelpers_CallLinkSomething() != TRUE && sub_81C5078() != TRUE && MenuHelpers_LinkSomething() != TRUE);
+ while (MenuHelpers_CallLinkSomething() != TRUE
+ && LoadPyramidBagMenu() != TRUE
+ && MenuHelpers_LinkSomething() != TRUE);
}
-static bool8 sub_81C5078(void)
+static bool8 LoadPyramidBagMenu(void)
{
switch (gMain.state)
{
@@ -446,30 +485,26 @@ static bool8 sub_81C5078(void)
break;
case 5:
if (!MenuHelpers_LinkSomething())
- {
ResetTasks();
- }
gMain.state++;
break;
case 6:
- sub_81C51DC();
- gPyramidBagResources->state = 0;
+ InitPyramidBagBgs();
+ gPyramidBagMenu->state = 0;
gMain.state++;
break;
case 7:
- if (sub_81C5238())
- {
+ if (LoadPyramidBagGfx())
gMain.state++;
- }
break;
case 8:
- sub_81C6BD8();
+ InitPyramidBagWindows();
gMain.state++;
break;
case 9:
- sub_81C5924();
- sub_81C59BC();
- sub_81C5A20();
+ UpdatePyramidBagList();
+ UpdatePyramidBagCursorPos();
+ InitPyramidBagScroll();
gMain.state++;
break;
case 10:
@@ -477,15 +512,15 @@ static bool8 sub_81C5078(void)
gMain.state++;
break;
case 11:
- sub_81C56F8();
+ CreatePyramidBagInputTask();
gMain.state++;
break;
case 12:
- sub_81C6EF4();
+ CreatePyramidBagSprite();
gMain.state++;
break;
case 13:
- AddScrollArrow();
+ AddScrollArrows();
gMain.state++;
break;
case 14:
@@ -493,28 +528,28 @@ static bool8 sub_81C5078(void)
gMain.state++;
break;
case 15:
- BlendPalettes(PALETTES_ALL, 0x10, 0);
+ BlendPalettes(PALETTES_ALL, 16, 0);
gMain.state++;
break;
case 16:
- BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK);
+ BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
gPaletteFade.bufferTransferDisabled = FALSE;
gMain.state++;
break;
default:
- SetVBlankCallback(sub_81C5038);
- SetMainCallback2(sub_81C501C);
+ SetVBlankCallback(VBlankCB_PyramidBag);
+ SetMainCallback2(CB2_PyramidBag);
return TRUE;
}
return FALSE;
}
-static void sub_81C51DC(void)
+static void InitPyramidBagBgs(void)
{
ResetVramOamAndBgCntRegs();
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0861F2B4, ARRAY_COUNT(gUnknown_0861F2B4));
- SetBgTilemapBuffer(2, gPyramidBagResources->tilemapBuffer);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ SetBgTilemapBuffer(2, gPyramidBagMenu->tilemapBuffer);
ResetAllBgsCoordinates();
ScheduleBgCopyTilemapToVram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
@@ -526,37 +561,37 @@ static void sub_81C51DC(void)
SetGpuReg(REG_OFFSET_BLDCNT, 0);
}
-static bool8 sub_81C5238(void)
+static bool8 LoadPyramidBagGfx(void)
{
- switch (gPyramidBagResources->state)
+ switch (gPyramidBagMenu->state)
{
case 0:
ResetTempTileDataBuffers();
DecompressAndCopyTileDataToVram(2, gBagScreen_Gfx, 0, 0, 0);
- gPyramidBagResources->state++;
+ gPyramidBagMenu->state++;
break;
case 1:
if (FreeTempTileDataBuffersIfPossible() != TRUE)
{
- LZDecompressWram(gBattleFrontierGfx_PyramidBagTileMap, gPyramidBagResources->tilemapBuffer);
- gPyramidBagResources->state++;
+ LZDecompressWram(gBattleFrontierGfx_PyramidBagTileMap, gPyramidBagMenu->tilemapBuffer);
+ gPyramidBagMenu->state++;
}
break;
case 2:
- LoadCompressedPalette(gUnknown_08D9AF44, 0, 0x20);
- gPyramidBagResources->state++;
+ LoadCompressedPalette(gUnknown_08D9AF44, 0, 32);
+ gPyramidBagMenu->state++;
break;
case 3:
- LoadCompressedSpriteSheet(&gPyramidBagSpriteSheet);
- gPyramidBagResources->state++;
+ LoadCompressedSpriteSheet(&sSpriteSheet_PyramidBag);
+ gPyramidBagMenu->state++;
break;
case 4:
- sub_81C6E98();
- gPyramidBagResources->state++;
+ LoadPyramidBagPalette();
+ gPyramidBagMenu->state++;
break;
default:
LoadListMenuSwapLineGfx();
- gPyramidBagResources->state = 0;
+ gPyramidBagMenu->state = 0;
return TRUE;
}
@@ -566,24 +601,24 @@ static bool8 sub_81C5238(void)
static void SetBagItemsListTemplate(void)
{
u16 i;
- u16 *pyramidItems = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
+ u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
- for (i = 0; i < gPyramidBagResources->listMenuCount - 1; i++)
+ for (i = 0; i < gPyramidBagMenu->listMenuCount - 1; i++)
{
- PyramidBag_CopyItemName(gPyramidBagResources->itemStrings[i], pyramidItems[i]);
- gPyramidBagResources->bagListItems[i].name = gPyramidBagResources->itemStrings[i];
- gPyramidBagResources->bagListItems[i].id = i;
+ CopyBagItemName(gPyramidBagMenu->itemStrings[i], itemIds[i]);
+ gPyramidBagMenu->bagListItems[i].name = gPyramidBagMenu->itemStrings[i];
+ gPyramidBagMenu->bagListItems[i].id = i;
}
- StringCopy(gPyramidBagResources->itemStrings[i], gText_CloseBag);
- gPyramidBagResources->bagListItems[i].name = gPyramidBagResources->itemStrings[i];
- gPyramidBagResources->bagListItems[i].id = LIST_CANCEL;
- gMultiuseListMenuTemplate = gUnknown_0861F2C0;
- gMultiuseListMenuTemplate.totalItems = gPyramidBagResources->listMenuCount;
- gMultiuseListMenuTemplate.items = gPyramidBagResources->bagListItems;
- gMultiuseListMenuTemplate.maxShowed = gPyramidBagResources->listMenuMaxShown;
+ StringCopy(gPyramidBagMenu->itemStrings[i], gText_CloseBag);
+ gPyramidBagMenu->bagListItems[i].name = gPyramidBagMenu->itemStrings[i];
+ gPyramidBagMenu->bagListItems[i].id = LIST_CANCEL;
+ gMultiuseListMenuTemplate = sListMenuTemplate;
+ gMultiuseListMenuTemplate.totalItems = gPyramidBagMenu->listMenuCount;
+ gMultiuseListMenuTemplate.items = gPyramidBagMenu->bagListItems;
+ gMultiuseListMenuTemplate.maxShowed = gPyramidBagMenu->listMenuMaxShown;
}
-static void PyramidBag_CopyItemName(u8 *dst, u16 itemId)
+static void CopyBagItemName(u8 *dst, u16 itemId)
{
if (ItemId_GetPocket(itemId) == POCKET_BERRIES)
{
@@ -597,21 +632,21 @@ static void PyramidBag_CopyItemName(u8 *dst, u16 itemId)
}
}
-static void PyramidBagMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list)
+static void BagCursorMoved(s32 itemIndex, bool8 onInit, struct ListMenu *list)
{
if (onInit != TRUE)
{
PlaySE(SE_SELECT);
- sub_81C6F20();
+ ShakePyramidBag();
}
- if (gPyramidBagResources->unk814 == 0xFF)
+ if (gPyramidBagMenu->toSwapPos == POS_NONE)
{
- sub_81C6FF8(gPyramidBagResources->unk815 ^ 1);
+ FreeItemIconSpriteByAltId(gPyramidBagMenu->isAltIcon ^ 1);
if (itemIndex != LIST_CANCEL)
- ShowItemImage(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][itemIndex], gPyramidBagResources->unk815);
+ ShowItemIcon(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][itemIndex], gPyramidBagMenu->isAltIcon);
else
- ShowItemImage(0xFFFF, gPyramidBagResources->unk815);
- gPyramidBagResources->unk815 ^= 1;
+ ShowItemIcon(0xFFFF, gPyramidBagMenu->isAltIcon); // Show exit arrow if on Cancel
+ gPyramidBagMenu->isAltIcon ^= 1;
PrintItemDescription(itemIndex);
}
}
@@ -622,20 +657,23 @@ static void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y)
if (itemIndex == LIST_CANCEL)
return;
- if (gPyramidBagResources->unk814 != 0xFF)
+ if (gPyramidBagMenu->toSwapPos != POS_NONE)
{
- if (gPyramidBagResources->unk814 == (u8)(itemIndex))
- sub_81C5AB8(y, 1);
+ // Performing a swap. Keep a gray selector arrow on the position to swap to
+ // and erase the selector arrow anywhere else
+ if (gPyramidBagMenu->toSwapPos == (u8)(itemIndex))
+ PrintSelectorArrowAtPos(y, COLORID_LIGHT_GRAY);
else
- sub_81C5AB8(y, 0xFF);
+ PrintSelectorArrowAtPos(y, COLORID_NONE);
}
+
ConvertIntToDecimalStringN(gStringVar1,
gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode][itemIndex],
STR_CONV_MODE_RIGHT_ALIGN,
2);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
- xAlign = GetStringRightAlignXOffset(7, gStringVar4, 0x77);
- PrintOnWindow_Font7(windowId, gStringVar4, xAlign, y, 0, 0, TEXT_SPEED_FF, 0);
+ xAlign = GetStringRightAlignXOffset(7, gStringVar4, 119);
+ PrintOnWindow_Font7(windowId, gStringVar4, xAlign, y, 0, 0, TEXT_SPEED_FF, COLORID_DARK_GRAY);
}
static void PrintItemDescription(s32 listMenuId)
@@ -647,34 +685,42 @@ static void PrintItemDescription(s32 listMenuId)
}
else
{
- StringCopy(gStringVar1, gReturnToXStringsTable2[gPyramidBagCursorData.unk4]);
+ StringCopy(gStringVar1, gPyramidBagMenu_ReturnToStrings[gPyramidBagMenuState.location]);
StringExpandPlaceholders(gStringVar4, gText_ReturnToVar1);
desc = gStringVar4;
}
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- PrintOnWindow_Font1(1, desc, 3, 0, 0, 1, 0, 0);
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PrintOnWindow_Font1(WIN_INFO, desc, 3, 0, 0, 1, 0, COLORID_DARK_GRAY);
}
-static void AddScrollArrow(void)
+static void AddScrollArrows(void)
{
- if (gPyramidBagResources->scrollIndicatorsTaskId == TASK_NONE)
- gPyramidBagResources->scrollIndicatorsTaskId = AddScrollIndicatorArrowPairParameterized(2, 172, 12, 148, gPyramidBagResources->listMenuCount - gPyramidBagResources->listMenuMaxShown, 0xB5E, 0xB5E, &gPyramidBagCursorData.scrollPosition);
+ if (gPyramidBagMenu->scrollIndicatorsTaskId == TASK_NONE)
+ gPyramidBagMenu->scrollIndicatorsTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 172, 12, 148,
+ gPyramidBagMenu->listMenuCount - gPyramidBagMenu->listMenuMaxShown,
+ TAG_SCROLL_ARROW, TAG_SCROLL_ARROW,
+ &gPyramidBagMenuState.scrollPosition);
}
static void RemoveScrollArrow(void)
{
- if (gPyramidBagResources->scrollIndicatorsTaskId != TASK_NONE)
+ if (gPyramidBagMenu->scrollIndicatorsTaskId != TASK_NONE)
{
- RemoveScrollIndicatorArrowPair(gPyramidBagResources->scrollIndicatorsTaskId);
- gPyramidBagResources->scrollIndicatorsTaskId = TASK_NONE;
+ RemoveScrollIndicatorArrowPair(gPyramidBagMenu->scrollIndicatorsTaskId);
+ gPyramidBagMenu->scrollIndicatorsTaskId = TASK_NONE;
}
}
-static void sub_81C56F8(void)
+#define tListTaskId data[0]
+#define tListPos data[1]
+#define tQuantity data[2]
+#define tNumToToss data[8]
+
+static void CreatePyramidBagInputTask(void)
{
u8 taskId = CreateTask(Task_HandlePyramidBagInput, 0);
s16 *data = gTasks[taskId].data;
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gPyramidBagCursorData.scrollPosition, gPyramidBagCursorData.cursorPosition);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, gPyramidBagMenuState.scrollPosition, gPyramidBagMenuState.cursorPosition);
}
static void SwapItems(u8 id1, u8 id2)
@@ -728,9 +774,9 @@ static void CompactItems(void)
for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
{
- if (itemIds[i] == 0 || quantities[i] == 0)
+ if (itemIds[i] == ITEM_NONE || quantities[i] == 0)
{
- itemIds[i] = 0;
+ itemIds[i] = ITEM_NONE;
quantities[i] = 0;
}
}
@@ -738,98 +784,97 @@ static void CompactItems(void)
{
for (j = i + 1; j < PYRAMID_BAG_ITEMS_COUNT; j++)
{
- if (itemIds[i] == 0 || quantities[i] == 0)
+ if (itemIds[i] == ITEM_NONE || quantities[i] == 0)
SwapItems(i, j);
}
}
}
-void sub_81C5924(void)
+void UpdatePyramidBagList(void)
{
u16 i;
u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
CompactItems();
- gPyramidBagResources->listMenuCount = 0;
+ gPyramidBagMenu->listMenuCount = 0;
for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
{
- if (itemIds[i] != 0)
- gPyramidBagResources->listMenuCount++;
+ if (itemIds[i] != ITEM_NONE)
+ gPyramidBagMenu->listMenuCount++;
}
- gPyramidBagResources->listMenuCount++;
- if (gPyramidBagResources->listMenuCount > 8)
- gPyramidBagResources->listMenuMaxShown = 8;
+ gPyramidBagMenu->listMenuCount++;
+ if (gPyramidBagMenu->listMenuCount > 8)
+ gPyramidBagMenu->listMenuMaxShown = 8;
else
- gPyramidBagResources->listMenuMaxShown = gPyramidBagResources->listMenuCount;
+ gPyramidBagMenu->listMenuMaxShown = gPyramidBagMenu->listMenuCount;
}
-void sub_81C59BC(void)
+void UpdatePyramidBagCursorPos(void)
{
- if (gPyramidBagCursorData.scrollPosition != 0 && gPyramidBagCursorData.scrollPosition + gPyramidBagResources->listMenuMaxShown > gPyramidBagResources->listMenuCount)
- gPyramidBagCursorData.scrollPosition = gPyramidBagResources->listMenuCount - gPyramidBagResources->listMenuMaxShown;
- if (gPyramidBagCursorData.scrollPosition + gPyramidBagCursorData.cursorPosition >= gPyramidBagResources->listMenuCount)
+ if (gPyramidBagMenuState.scrollPosition != 0 && gPyramidBagMenuState.scrollPosition + gPyramidBagMenu->listMenuMaxShown > gPyramidBagMenu->listMenuCount)
+ gPyramidBagMenuState.scrollPosition = gPyramidBagMenu->listMenuCount - gPyramidBagMenu->listMenuMaxShown;
+
+ if (gPyramidBagMenuState.scrollPosition + gPyramidBagMenuState.cursorPosition >= gPyramidBagMenu->listMenuCount)
{
- if (gPyramidBagResources->listMenuCount == 0)
- gPyramidBagCursorData.cursorPosition = 0;
+ if (gPyramidBagMenu->listMenuCount == 0)
+ gPyramidBagMenuState.cursorPosition = 0;
else
- gPyramidBagCursorData.cursorPosition = gPyramidBagResources->listMenuCount - 1;
+ gPyramidBagMenuState.cursorPosition = gPyramidBagMenu->listMenuCount - 1;
}
}
-static void sub_81C5A20(void)
+static void InitPyramidBagScroll(void)
{
u8 i;
- if (gPyramidBagCursorData.cursorPosition > 4)
+ if (gPyramidBagMenuState.cursorPosition > 4)
{
- for (i = 0; i <= gPyramidBagCursorData.cursorPosition - 4; i++)
+ for (i = 0; i <= gPyramidBagMenuState.cursorPosition - 4; i++)
{
- if (gPyramidBagCursorData.scrollPosition + gPyramidBagResources->listMenuMaxShown == gPyramidBagResources->listMenuCount)
- {
- // daycare.c sends its regards.
+ if (gPyramidBagMenuState.scrollPosition + gPyramidBagMenu->listMenuMaxShown == gPyramidBagMenu->listMenuCount)
break;
- }
- gPyramidBagCursorData.cursorPosition--;
- gPyramidBagCursorData.scrollPosition++;
+
+ gPyramidBagMenuState.cursorPosition--;
+ gPyramidBagMenuState.scrollPosition++;
}
}
}
-static void sub_81C5A98(u8 listMenuTaskId, u8 arg1)
+static void PrintSelectorArrow(u8 listMenuTaskId, u8 colorId)
{
u8 y = ListMenuGetYCoordForPrintingArrowCursor(listMenuTaskId);
- sub_81C5AB8(y, arg1);
+ PrintSelectorArrowAtPos(y, colorId);
}
-static void sub_81C5AB8(u8 y, u8 arg1)
+static void PrintSelectorArrowAtPos(u8 y, u8 colorId)
{
- if (arg1 == 0xFF)
- FillWindowPixelRect(0, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
+ if (colorId == COLORID_NONE) // If 'no color', erase arrow
+ FillWindowPixelRect(WIN_LIST, PIXEL_FILL(0), 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
else
- PrintOnWindow_Font1(0, gText_SelectorArrow2, 0, y, 0, 0, 0, arg1);
+ PrintOnWindow_Font1(WIN_LIST, gText_SelectorArrow2, 0, y, 0, 0, 0, colorId);
}
-void CloseBattlePyramidBagAndSetCallback(u8 taskId)
+void CloseBattlePyramidBag(u8 taskId)
{
- BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].func = sub_81C5B4C;
+ BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = Task_ClosePyramidBag;
}
-static void sub_81C5B4C(u8 taskId)
+static void Task_ClosePyramidBag(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
- DestroyListMenuTask(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
- if (gPyramidBagResources->callback2 != NULL)
- SetMainCallback2(gPyramidBagResources->callback2);
+ DestroyListMenuTask(tListTaskId, &gPyramidBagMenuState.scrollPosition, &gPyramidBagMenuState.cursorPosition);
+ if (gPyramidBagMenu->exitCallback != NULL)
+ SetMainCallback2(gPyramidBagMenu->exitCallback);
else
- SetMainCallback2(gPyramidBagCursorData.callback);
+ SetMainCallback2(gPyramidBagMenuState.callback);
RemoveScrollArrow();
ResetSpriteData();
FreeAllSpritePalettes();
FreeAllWindowBuffers();
- Free(gPyramidBagResources);
+ Free(gPyramidBagMenu);
DestroyTask(taskId);
}
}
@@ -837,108 +882,110 @@ static void sub_81C5B4C(u8 taskId)
static void Task_HandlePyramidBagInput(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active)
+ if (MenuHelpers_CallLinkSomething() == TRUE || gPaletteFade.active)
+ return;
+
+ if (JOY_NEW(SELECT_BUTTON))
{
- if (JOY_NEW(SELECT_BUTTON))
+ if (gPyramidBagMenuState.location != PYRAMIDBAG_LOC_PARTY)
{
- if (gPyramidBagCursorData.unk4 != 2)
+ ListMenuGetScrollAndRow(tListTaskId, &gPyramidBagMenuState.scrollPosition, &gPyramidBagMenuState.cursorPosition);
+ if (gPyramidBagMenuState.scrollPosition + gPyramidBagMenuState.cursorPosition != gPyramidBagMenu->listMenuCount - 1)
{
- ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
- if (gPyramidBagCursorData.scrollPosition + gPyramidBagCursorData.cursorPosition != gPyramidBagResources->listMenuCount - 1)
- {
- PlaySE(SE_SELECT);
- Task_BeginItemSwap(taskId);
- }
+ PlaySE(SE_SELECT);
+ Task_BeginItemSwap(taskId);
}
}
- else
+ }
+ else
+ {
+ s32 listId = ListMenu_ProcessInput(tListTaskId);
+ ListMenuGetScrollAndRow(tListTaskId, &gPyramidBagMenuState.scrollPosition, &gPyramidBagMenuState.cursorPosition);
+ switch (listId)
{
- s32 listId = ListMenu_ProcessInput(data[0]);
- ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
- switch (listId)
- {
- case LIST_NOTHING_CHOSEN:
- break;
- case LIST_CANCEL:
- PlaySE(SE_SELECT);
- gSpecialVar_ItemId = 0;
- CloseBattlePyramidBagAndSetCallback(taskId);
- break;
- default:
- PlaySE(SE_SELECT);
- gSpecialVar_ItemId = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][listId];
- data[1] = listId;
- data[2] = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode][listId];
- if (gPyramidBagCursorData.unk4 == 2)
- sub_81C674C(taskId);
- else
- sub_81C5D20(taskId);
- break;
- }
+ case LIST_NOTHING_CHOSEN:
+ break;
+ case LIST_CANCEL:
+ PlaySE(SE_SELECT);
+ gSpecialVar_ItemId = ITEM_NONE;
+ CloseBattlePyramidBag(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ gSpecialVar_ItemId = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][listId];
+ tListPos = listId;
+ tQuantity = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode][listId];
+ if (gPyramidBagMenuState.location == PYRAMIDBAG_LOC_PARTY)
+ TryCloseBagToGiveItem(taskId);
+ else
+ OpenContextMenu(taskId);
+ break;
}
}
}
-static void sub_81C5D20(u8 taskId)
+static void OpenContextMenu(u8 taskId)
{
s16 *data = gTasks[taskId].data;
RemoveScrollArrow();
- sub_81C5A98(data[0], 1);
- switch (gPyramidBagCursorData.unk4)
+ PrintSelectorArrow(tListTaskId, COLORID_LIGHT_GRAY);
+ switch (gPyramidBagMenuState.location)
{
default:
- gPyramidBagResources->menuActionIds = sFieldMenuActionIds;
- gPyramidBagResources->menuActionsCount = ARRAY_COUNT(sFieldMenuActionIds);
+// case PYRAMIDBAG_LOC_FIELD:
+// case PYRAMIDBAG_LOC_PARTY:
+ gPyramidBagMenu->menuActionIds = sMenuActionIds_Field;
+ gPyramidBagMenu->menuActionsCount = ARRAY_COUNT(sMenuActionIds_Field);
break;
- case 1:
+ case PYRAMIDBAG_LOC_BATTLE:
if (ItemId_GetBattleUsage(gSpecialVar_ItemId))
{
- gPyramidBagResources->menuActionIds = sBattleMenuActionIds;
- gPyramidBagResources->menuActionsCount = ARRAY_COUNT(sBattleMenuActionIds);
+ gPyramidBagMenu->menuActionIds = sMenuActionIds_Battle;
+ gPyramidBagMenu->menuActionsCount = ARRAY_COUNT(sMenuActionIds_Battle);
}
else
{
- gPyramidBagResources->menuActionIds = gUnknown_0861F310;
- gPyramidBagResources->menuActionsCount = ARRAY_COUNT(gUnknown_0861F310);
+ gPyramidBagMenu->menuActionIds = sMenuActionIds_BattleCannotUse;
+ gPyramidBagMenu->menuActionsCount = ARRAY_COUNT(sMenuActionIds_BattleCannotUse);
}
break;
- case 3:
- gPyramidBagResources->menuActionIds = gUnknown_0861F30C;
- gPyramidBagResources->menuActionsCount = ARRAY_COUNT(gUnknown_0861F30C);
+ case PYRAMIDBAG_LOC_CHOOSE_TOSS:
+ gPyramidBagMenu->menuActionIds = sMenuActionIds_ChooseToss;
+ gPyramidBagMenu->menuActionsCount = ARRAY_COUNT(sMenuActionIds_ChooseToss);
break;
}
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0);
- if (gPyramidBagResources->menuActionsCount == 1)
- sub_81C5EAC(sub_81C6D24(0));
- else if (gPyramidBagResources->menuActionsCount == 2)
- sub_81C5EAC(sub_81C6D24(1));
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY);
+ if (gPyramidBagMenu->menuActionsCount == 1)
+ PrintMenuActionText_SingleRow(OpenMenuActionWindowById(MENU_WIN_1x1));
+ else if (gPyramidBagMenu->menuActionsCount == 2)
+ PrintMenuActionText_SingleRow(OpenMenuActionWindowById(MENU_WIN_1x2));
else
- sub_81C5F08(sub_81C6D24(2), 2, 2);
+ PrintMenuActionText_MultiRow(OpenMenuActionWindowById(MENU_WIN_2x2), 2, 2);
- if (gPyramidBagResources->menuActionsCount == 4)
- gTasks[taskId].func = HandleMenuActionInput;
+ if (gPyramidBagMenu->menuActionsCount == 2 * 2) // Assumes any non 2x2 menu is single-row
+ gTasks[taskId].func = HandleMenuActionInput_2x2;
else
- gTasks[taskId].func = HandleFewMenuActionsInput;
+ gTasks[taskId].func = HandleMenuActionInput_SingleRow;
}
-static void sub_81C5EAC(u8 windowId)
+static void PrintMenuActionText_SingleRow(u8 windowId)
{
- AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 0x10, gPyramidBagResources->menuActionsCount, sMenuActions, gPyramidBagResources->menuActionIds);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gPyramidBagResources->menuActionsCount, 0);
+ AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 0x10, gPyramidBagMenu->menuActionsCount, sMenuActions, gPyramidBagMenu->menuActionIds);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gPyramidBagMenu->menuActionsCount, 0);
}
-static void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount)
+static void PrintMenuActionText_MultiRow(u8 windowId, u8 horizontalCount, u8 verticalCount)
{
- sub_8198DBC(windowId, 7, 8, 1, 0x38, horizontalCount, verticalCount, sMenuActions, gPyramidBagResources->menuActionIds);
- sub_8199944(windowId, 0x38, horizontalCount, verticalCount, 0);
+ PrintMenuActionGrid(windowId, 7, 8, 1, 56, horizontalCount, verticalCount, sMenuActions, gPyramidBagMenu->menuActionIds);
+ InitMenuActionGrid(windowId, 56, horizontalCount, verticalCount, 0);
}
-static void HandleFewMenuActionsInput(u8 taskId)
+static void HandleMenuActionInput_SingleRow(u8 taskId)
{
if (MenuHelpers_CallLinkSomething() != TRUE)
{
@@ -953,14 +1000,14 @@ static void HandleFewMenuActionsInput(u8 taskId)
break;
default:
PlaySE(SE_SELECT);
- if (sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8 != NULL)
- sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8(taskId);
+ if (sMenuActions[gPyramidBagMenu->menuActionIds[id]].func.void_u8 != NULL)
+ sMenuActions[gPyramidBagMenu->menuActionIds[id]].func.void_u8(taskId);
break;
}
}
}
-static void HandleMenuActionInput(u8 taskId)
+static void HandleMenuActionInput_2x2(u8 taskId)
{
if (MenuHelpers_CallLinkSomething() != TRUE)
{
@@ -975,7 +1022,7 @@ static void HandleMenuActionInput(u8 taskId)
}
else if (JOY_NEW(DPAD_DOWN))
{
- if (id < gPyramidBagResources->menuActionsCount - 2 && IsValidMenuAction(id + 2))
+ if (id < gPyramidBagMenu->menuActionsCount - 2 && IsValidMenuAction(id + 2))
{
PlaySE(SE_SELECT);
ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN);
@@ -1000,8 +1047,8 @@ static void HandleMenuActionInput(u8 taskId)
else if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- if (sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8 != NULL)
- sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8(taskId);
+ if (sMenuActions[gPyramidBagMenu->menuActionIds[id]].func.void_u8 != NULL)
+ sMenuActions[gPyramidBagMenu->menuActionIds[id]].func.void_u8(taskId);
}
else if (JOY_NEW(B_BUTTON))
{
@@ -1015,22 +1062,22 @@ static bool8 IsValidMenuAction(s8 actionTableId)
{
if (actionTableId < 0)
return FALSE;
- else if (actionTableId > gPyramidBagResources->menuActionsCount)
+ else if (actionTableId > gPyramidBagMenu->menuActionsCount)
return FALSE;
- else if (gPyramidBagResources->menuActionIds[actionTableId] == ACTION_DUMMY)
+ else if (gPyramidBagMenu->menuActionIds[actionTableId] == ACTION_DUMMY)
return FALSE;
else
return TRUE;
}
-static void sub_81C61A8(void)
+static void CloseMenuActionWindow(void)
{
- if (gPyramidBagResources->menuActionsCount == 1)
- sub_81C6D6C(0);
- else if (gPyramidBagResources->menuActionsCount == 2)
- sub_81C6D6C(1);
+ if (gPyramidBagMenu->menuActionsCount == 1)
+ CloseMenuActionWindowById(MENU_WIN_1x1);
+ else if (gPyramidBagMenu->menuActionsCount == 2)
+ CloseMenuActionWindowById(MENU_WIN_1x2);
else
- sub_81C6D6C(2);
+ CloseMenuActionWindowById(MENU_WIN_2x2);
}
static void BagAction_UseOnField(u8 taskId)
@@ -1042,13 +1089,13 @@ static void BagAction_UseOnField(u8 taskId)
|| pocketId == POCKET_TM_HM
|| ItemIsMail(gSpecialVar_ItemId) == TRUE)
{
- sub_81C61A8();
+ CloseMenuActionWindow();
DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage);
}
else if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL)
{
- sub_81C61A8();
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ CloseMenuActionWindow();
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
ScheduleBgCopyTilemapToVram(0);
ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
}
@@ -1058,17 +1105,17 @@ static void BagAction_Cancel(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81C61A8();
- PrintItemDescription(data[1]);
+ CloseMenuActionWindow();
+ PrintItemDescription(tListPos);
ScheduleBgCopyTilemapToVram(0);
ScheduleBgCopyTilemapToVram(1);
- sub_81C5A98(data[0], 0);
+ PrintSelectorArrow(tListTaskId, COLORID_DARK_GRAY);
SetTaskToMainPyramidBagInputHandler(taskId);
}
static void SetTaskToMainPyramidBagInputHandler(u8 taskId)
{
- AddScrollArrow();
+ AddScrollArrows();
gTasks[taskId].func = Task_HandlePyramidBagInput;
}
@@ -1076,86 +1123,86 @@ static void BagAction_Toss(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81C61A8();
- data[8] = 1;
- if (data[2] == 1)
+ CloseMenuActionWindow();
+ tNumToToss = 1;
+ if (tQuantity == 1)
{
- sub_81C6350(taskId);
+ AskConfirmToss(taskId);
}
else
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_TossHowManyVar1s);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0);
- sub_81C6404();
- gTasks[taskId].func = sub_81C64B4;
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY);
+ ShowNumToToss();
+ gTasks[taskId].func = Task_ChooseHowManyToToss;
}
}
-static void sub_81C6350(u8 taskId)
+static void AskConfirmToss(u8 taskId)
{
s16 *data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar2, tNumToToss, STR_CONV_MODE_LEFT_ALIGN, 2);
StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0);
- sub_81C6DAC(taskId, &sYesNoTossFuncions);
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY);
+ CreatePyramidBagYesNo(taskId, &sYesNoTossFuncions);
}
static void DontTossItem(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- PrintItemDescription(data[1]);
- sub_81C5A98(data[0], 0);
+ PrintItemDescription(tListPos);
+ PrintSelectorArrow(tListTaskId, COLORID_DARK_GRAY);
SetTaskToMainPyramidBagInputHandler(taskId);
}
-static void sub_81C6404(void)
+static void ShowNumToToss(void)
{
s32 x;
-
ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
- sub_81C6CEC(3);
+ DrawTossNumberWindow(WIN_TOSS_NUM);
x = GetStringCenterAlignXOffset(1, gStringVar4, 0x28);
- AddTextPrinterParameterized(3, 1, gStringVar4, x, 2, 0, NULL);
+ AddTextPrinterParameterized(WIN_TOSS_NUM, 1, gStringVar4, x, 2, 0, NULL);
}
-static void sub_81C645C(s16 value)
+static void UpdateNumToToss(s16 num)
{
s32 x;
-
- ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, 2);
+ ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
x = GetStringCenterAlignXOffset(1, gStringVar4, 0x28);
- AddTextPrinterParameterized(3, 1, gStringVar4, x, 2, 0, NULL);
+ AddTextPrinterParameterized(WIN_TOSS_NUM, 1, gStringVar4, x, 2, 0, NULL);
}
-static void sub_81C64B4(u8 taskId)
+static void Task_ChooseHowManyToToss(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
+ if (AdjustQuantityAccordingToDPadInput(&tNumToToss, tQuantity) == TRUE)
{
- sub_81C645C(data[8]);
+ UpdateNumToToss(tNumToToss);
}
else if (JOY_NEW(A_BUTTON))
{
+ // Toss
PlaySE(SE_SELECT);
- ClearStdWindowAndFrameToTransparent(3, 0);
- ClearWindowTilemap(3);
+ ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, 0);
+ ClearWindowTilemap(WIN_TOSS_NUM);
ScheduleBgCopyTilemapToVram(1);
- sub_81C6350(taskId);
+ AskConfirmToss(taskId);
}
else if (JOY_NEW(B_BUTTON))
{
+ // Cancel tossing
PlaySE(SE_SELECT);
- ClearStdWindowAndFrameToTransparent(3, 0);
- ClearWindowTilemap(3);
+ ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, 0);
+ ClearWindowTilemap(WIN_TOSS_NUM);
ScheduleBgCopyTilemapToVram(1);
DontTossItem(taskId);
}
@@ -1166,28 +1213,28 @@ static void TossItem(u8 taskId)
s16 *data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar2, tNumToToss, STR_CONV_MODE_LEFT_ALIGN, 2);
StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0);
- gTasks[taskId].func = sub_81C65CC;
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY);
+ gTasks[taskId].func = Task_TossItem;
}
-static void sub_81C65CC(u8 taskId)
+static void Task_TossItem(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition;
- u16 *selectedRow = &gPyramidBagCursorData.cursorPosition;
+ u16 *scrollOffset = &gPyramidBagMenuState.scrollPosition;
+ u16 *selectedRow = &gPyramidBagMenuState.cursorPosition;
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
PlaySE(SE_SELECT);
- RemovePyramidBagItem(gSpecialVar_ItemId, data[8]);
- DestroyListMenuTask(data[0], scrollOffset, selectedRow);
- sub_81C5924();
- sub_81C59BC();
+ RemovePyramidBagItem(gSpecialVar_ItemId, tNumToToss);
+ DestroyListMenuTask(tListTaskId, scrollOffset, selectedRow);
+ UpdatePyramidBagList();
+ UpdatePyramidBagCursorPos();
SetBagItemsListTemplate();
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
ScheduleBgCopyTilemapToVram(0);
SetTaskToMainPyramidBagInputHandler(taskId);
}
@@ -1195,30 +1242,30 @@ static void sub_81C65CC(u8 taskId)
static void BagAction_Give(u8 taskId)
{
- sub_81C61A8();
+ CloseMenuActionWindow();
if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
{
- DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, sub_81C66EC);
+ DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, Task_WaitCloseErrorMessage);
}
else if (!ItemId_GetImportance(gSpecialVar_ItemId))
{
- gPyramidBagResources->callback2 = CB2_ChooseMonToGiveItem;
- CloseBattlePyramidBagAndSetCallback(taskId);
+ gPyramidBagMenu->exitCallback = CB2_ChooseMonToGiveItem;
+ CloseBattlePyramidBag(taskId);
}
else
{
- sub_81C66AC(taskId);
+ ShowCantHoldMessage(taskId);
}
}
-static void sub_81C66AC(u8 taskId)
+static void ShowCantHoldMessage(u8 taskId)
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld);
- DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C66EC);
+ DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_WaitCloseErrorMessage);
}
-static void sub_81C66EC(u8 taskId)
+static void Task_WaitCloseErrorMessage(u8 taskId)
{
if (JOY_NEW(A_BUTTON))
{
@@ -1232,26 +1279,26 @@ void Task_CloseBattlePyramidBagMessage(u8 taskId)
s16 *data = gTasks[taskId].data;
CloseBattlePyramidBagTextWindow();
- PrintItemDescription(data[1]);
- sub_81C5A98(data[0], 0);
+ PrintItemDescription(tListPos);
+ PrintSelectorArrow(tListTaskId, COLORID_DARK_GRAY);
SetTaskToMainPyramidBagInputHandler(taskId);
}
-static void sub_81C674C(u8 taskId)
+static void TryCloseBagToGiveItem(u8 taskId)
{
- if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
- DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, sub_81C66EC);
+ if (!IsWritingMailAllowed(gSpecialVar_ItemId))
+ DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, Task_WaitCloseErrorMessage);
else if (!ItemId_GetImportance(gSpecialVar_ItemId))
- CloseBattlePyramidBagAndSetCallback(taskId);
+ CloseBattlePyramidBag(taskId);
else
- sub_81C66AC(taskId);
+ ShowCantHoldMessage(taskId);
}
static void BagAction_UseInBattle(u8 taskId)
{
if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL)
{
- sub_81C61A8();
+ CloseMenuActionWindow();
ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId);
}
}
@@ -1260,15 +1307,15 @@ static void Task_BeginItemSwap(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- data[1] = gPyramidBagCursorData.scrollPosition + gPyramidBagCursorData.cursorPosition;
- gPyramidBagResources->unk814 = data[1];
- ListMenuSetUnkIndicatorsStructField(data[0], 0x10, 1);
- CopyItemName(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][data[1]], gStringVar1);
+ tListPos = gPyramidBagMenuState.scrollPosition + gPyramidBagMenuState.cursorPosition;
+ gPyramidBagMenu->toSwapPos = tListPos;
+ ListMenuSetUnkIndicatorsStructField(tListTaskId, 0x10, 1);
+ CopyItemName(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][tListPos], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where);
- FillWindowPixelBuffer(1, PIXEL_FILL(0));
- PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0);
- sub_81C5A98(data[0], 1);
- UpdateSwapLinePos(data[1]);
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PrintOnWindow_Font1(WIN_INFO, gStringVar4, 3, 0, 0, 1, 0, COLORID_DARK_GRAY);
+ PrintSelectorArrow(tListTaskId, COLORID_LIGHT_GRAY);
+ UpdateSwapLinePos(tListPos);
gTasks[taskId].func = Task_ItemSwapHandleInput;
}
@@ -1280,15 +1327,15 @@ static void Task_ItemSwapHandleInput(u8 taskId)
if (JOY_NEW(SELECT_BUTTON))
{
PlaySE(SE_SELECT);
- ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
+ ListMenuGetScrollAndRow(tListTaskId, &gPyramidBagMenuState.scrollPosition, &gPyramidBagMenuState.cursorPosition);
PerformItemSwap(taskId);
}
else
{
- s32 id = ListMenu_ProcessInput(data[0]);
- ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
+ s32 id = ListMenu_ProcessInput(tListTaskId);
+ ListMenuGetScrollAndRow(tListTaskId, &gPyramidBagMenuState.scrollPosition, &gPyramidBagMenuState.cursorPosition);
SetSwapLineInvisibility(FALSE);
- UpdateSwapLinePos(gPyramidBagCursorData.cursorPosition);
+ UpdateSwapLinePos(gPyramidBagMenuState.cursorPosition);
switch (id)
{
case LIST_NOTHING_CHOSEN:
@@ -1298,7 +1345,7 @@ static void Task_ItemSwapHandleInput(u8 taskId)
if (JOY_NEW(A_BUTTON))
PerformItemSwap(taskId);
else
- sub_81C6A14(taskId);
+ CancelItemSwap(taskId);
break;
default:
PlaySE(SE_SELECT);
@@ -1312,41 +1359,41 @@ static void Task_ItemSwapHandleInput(u8 taskId)
static void PerformItemSwap(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition;
- u16 *selectedRow = &gPyramidBagCursorData.cursorPosition;
- u16 var = *scrollOffset + *selectedRow;
+ u16 *scrollOffset = &gPyramidBagMenuState.scrollPosition;
+ u16 *selectedRow = &gPyramidBagMenuState.cursorPosition;
+ u16 swapPos = *scrollOffset + *selectedRow;
- if (data[1] == var || data[1] == var - 1)
+ if (tListPos == swapPos || tListPos == swapPos - 1)
{
- sub_81C6A14(taskId);
+ CancelItemSwap(taskId);
}
else
{
- MovePyramidBagItemSlotInList(data[1], var);
- gPyramidBagResources->unk814 = 0xFF;
+ MovePyramidBagItemSlotInList(tListPos, swapPos);
+ gPyramidBagMenu->toSwapPos = POS_NONE;
SetSwapLineInvisibility(TRUE);
- DestroyListMenuTask(data[0], scrollOffset, selectedRow);
- if (data[1] < var)
- gPyramidBagCursorData.cursorPosition--;
+ DestroyListMenuTask(tListTaskId, scrollOffset, selectedRow);
+ if (tListPos < swapPos)
+ gPyramidBagMenuState.cursorPosition--;
SetBagItemsListTemplate();
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
SetTaskToMainPyramidBagInputHandler(taskId);
}
}
-static void sub_81C6A14(u8 taskId)
+static void CancelItemSwap(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition;
- u16 *selectedRow = &gPyramidBagCursorData.cursorPosition;
+ u16 *scrollOffset = &gPyramidBagMenuState.scrollPosition;
+ u16 *selectedRow = &gPyramidBagMenuState.cursorPosition;
- gPyramidBagResources->unk814 = 0xFF;
+ gPyramidBagMenu->toSwapPos = POS_NONE;
SetSwapLineInvisibility(TRUE);
- DestroyListMenuTask(data[0], scrollOffset, selectedRow);
- if (data[1] < *scrollOffset + *selectedRow)
- gPyramidBagCursorData.cursorPosition--;
+ DestroyListMenuTask(tListTaskId, scrollOffset, selectedRow);
+ if (tListPos < *scrollOffset + *selectedRow)
+ gPyramidBagMenuState.cursorPosition--;
SetBagItemsListTemplate();
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
+ tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow);
SetTaskToMainPyramidBagInputHandler(taskId);
}
@@ -1385,61 +1432,62 @@ void TryStoreHeldItemsInPyramidBag(void)
Free(newQuantities);
}
-static void sub_81C6BD8(void)
+static void InitPyramidBagWindows(void)
{
u8 i;
- InitWindows(gUnknown_0861F328);
+ InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x1, 0xE0);
LoadMessageBoxGfx(0, 0xA, 0xD0);
LoadPalette(gUnknown_0860F074, 0xF0, 0x20);
- for (i = 0; i < 5; i++)
+ for (i = 0; i < ARRAY_COUNT(sWindowTemplates); i++)
FillWindowPixelBuffer(i, PIXEL_FILL(0));
- PutWindowTilemap(0);
- PutWindowTilemap(1);
+ PutWindowTilemap(WIN_LIST);
+ PutWindowTilemap(WIN_INFO);
ScheduleBgCopyTilemapToVram(0);
ScheduleBgCopyTilemapToVram(1);
}
static void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId)
{
- AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src);
+ AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, sTextColors[colorTableId], speed, src);
}
static void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId)
{
- AddTextPrinterParameterized4(windowId, 7, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src);
+ AddTextPrinterParameterized4(windowId, 7, x, y, letterSpacing, lineSpacing, sTextColors[colorTableId], speed, src);
}
-static void sub_81C6CEC(u8 windowId)
+static void DrawTossNumberWindow(u8 windowId)
{
DrawStdFrameWithCustomTileAndPalette(windowId, 0, 1, 0xE);
ScheduleBgCopyTilemapToVram(1);
}
-static u8 sub_81C6D08(u8 windowArrayId)
+// Unused
+static u8 GetMenuActionWindowId(u8 windowArrayId)
{
- return gPyramidBagResources->windowIds[windowArrayId];
+ return gPyramidBagMenu->windowIds[windowArrayId];
}
-static u8 sub_81C6D24(u8 windowArrayId)
+static u8 OpenMenuActionWindowById(u8 windowArrayId)
{
- u8 *windowId = &gPyramidBagResources->windowIds[windowArrayId];
+ u8 *windowId = &gPyramidBagMenu->windowIds[windowArrayId];
if (*windowId == WINDOW_NONE)
{
- *windowId = AddWindow(&gUnknown_0861F350[windowArrayId]);
+ *windowId = AddWindow(&sWindowTemplates_MenuActions[windowArrayId]);
DrawStdFrameWithCustomTileAndPalette(*windowId, FALSE, 1, 0xE);
ScheduleBgCopyTilemapToVram(1);
}
return *windowId;
}
-static void sub_81C6D6C(u8 windowArrayId)
+static void CloseMenuActionWindowById(u8 windowArrayId)
{
- u8 *windowId = &gPyramidBagResources->windowIds[windowArrayId];
+ u8 *windowId = &gPyramidBagMenu->windowIds[windowArrayId];
if (*windowId != WINDOW_NONE)
{
ClearStdWindowAndFrameToTransparent(*windowId, FALSE);
@@ -1450,87 +1498,87 @@ static void sub_81C6D6C(u8 windowArrayId)
}
}
-static void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable)
+static void CreatePyramidBagYesNo(u8 taskId, const struct YesNoFuncTable *yesNoTable)
{
- CreateYesNoMenuWithCallbacks(taskId, &gUnknown_0861F350[4], 1, 0, 2, 1, 0xE, yesNoTable);
+ CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_MenuActions[MENU_WIN_YESNO], 1, 0, 2, 1, 0xE, yesNoTable);
}
void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback)(u8 taskId))
{
- FillWindowPixelBuffer(2, PIXEL_FILL(1));
- DisplayMessageAndContinueTask(taskId, 2, 0xA, 0xD, 1, GetPlayerTextSpeedDelay(), str, callback);
+ FillWindowPixelBuffer(WIN_MSG, PIXEL_FILL(1));
+ DisplayMessageAndContinueTask(taskId, WIN_MSG, 0xA, 0xD, 1, GetPlayerTextSpeedDelay(), str, callback);
ScheduleBgCopyTilemapToVram(1);
}
static void CloseBattlePyramidBagTextWindow(void)
{
- ClearDialogWindowAndFrameToTransparent(2, FALSE);
+ ClearDialogWindowAndFrameToTransparent(WIN_MSG, FALSE);
// This ClearWindowTilemap call is redundant, since ClearDialogWindowAndFrameToTransparent already calls it.
- ClearWindowTilemap(2);
+ ClearWindowTilemap(WIN_MSG);
ScheduleBgCopyTilemapToVram(1);
}
-#define ITEM_IMAGE_TAG 0x1024
-
-static void sub_81C6E38(u8 itemSpriteArrayId)
+static void FreeItemIconSprite(u8 spriteArrId)
{
- u8 *spriteId = &gPyramidBagResources->itemsSpriteIds[itemSpriteArrayId];
+ u8 *spriteId = &gPyramidBagMenu->spriteIds[spriteArrId];
if (*spriteId != SPRITE_NONE)
{
- FreeSpriteTilesByTag(ITEM_IMAGE_TAG + itemSpriteArrayId);
- FreeSpritePaletteByTag(ITEM_IMAGE_TAG + itemSpriteArrayId);
+ // spriteArrId is PBAG_SPRITE_ITEM_ICON / PBAG_SPRITE_ITEM_ICON_ALT here (1-2)
+ // so tag will be TAG_ITEM_ICON / TAG_ITEM_ICON_ALT
+ FreeSpriteTilesByTag(TAG_ITEM_ICON - 1 + spriteArrId);
+ FreeSpritePaletteByTag(TAG_ITEM_ICON - 1 + spriteArrId);
FreeSpriteOamMatrix(&gSprites[*spriteId]);
DestroySprite(&gSprites[*spriteId]);
*spriteId = SPRITE_NONE;
}
}
-static void sub_81C6E98(void)
+static void LoadPyramidBagPalette(void)
{
struct SpritePalette spritePalette;
u16 *palPtr = Alloc(0x40);
LZDecompressWram(gBattleFrontierGfx_PyramidBag_Pal, palPtr);
spritePalette.data = palPtr + (gSaveBlock2Ptr->frontier.lvlMode * 16);
- spritePalette.tag = ITEM_IMAGE_TAG;
+ spritePalette.tag = TAG_PYRAMID_BAG;
LoadSpritePalette(&spritePalette);
Free(palPtr);
}
-static void sub_81C6EF4(void)
+static void CreatePyramidBagSprite(void)
{
- u8 *spriteId = &gPyramidBagResources->itemsSpriteIds[0];
- *spriteId = CreateSprite(&gUnknown_0861F3D4, 0x44, 0x38, 0);
+ u8 *spriteId = &gPyramidBagMenu->spriteIds[PBAG_SPRITE_BAG];
+ *spriteId = CreateSprite(&sSpriteTemplate_PyramidBag, 68, 56, 0);
}
-static void sub_81C6F20(void)
+static void ShakePyramidBag(void)
{
- struct Sprite *sprite = &gSprites[gPyramidBagResources->itemsSpriteIds[0]];
+ struct Sprite *sprite = &gSprites[gPyramidBagMenu->spriteIds[PBAG_SPRITE_BAG]];
if (sprite->affineAnimEnded)
{
- StartSpriteAffineAnim(sprite, 1);
- sprite->callback = sub_81C6F68;
+ StartSpriteAffineAnim(sprite, ANIM_BAG_SHAKE);
+ sprite->callback = SpriteCB_BagWaitForShake;
}
}
-static void sub_81C6F68(struct Sprite *sprite)
+static void SpriteCB_BagWaitForShake(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
- StartSpriteAffineAnim(sprite, 0);
+ StartSpriteAffineAnim(sprite, ANIM_BAG_STILL);
sprite->callback = SpriteCallbackDummy;
}
}
-static void ShowItemImage(u16 itemId, u8 itemSpriteArrayId)
+static void ShowItemIcon(u16 itemId, bool8 isAlt)
{
u8 itemSpriteId;
- u8 *spriteId = &gPyramidBagResources->itemsSpriteIds[itemSpriteArrayId + 1];
+ u8 *spriteId = &gPyramidBagMenu->spriteIds[isAlt + PBAG_SPRITE_ITEM_ICON];
if (*spriteId == SPRITE_NONE)
{
- FreeSpriteTilesByTag(ITEM_IMAGE_TAG + 1 + itemSpriteArrayId);
- FreeSpritePaletteByTag(ITEM_IMAGE_TAG + 1 + itemSpriteArrayId);
- itemSpriteId = AddItemIconSprite(ITEM_IMAGE_TAG + 1 + itemSpriteArrayId, ITEM_IMAGE_TAG + 1 + itemSpriteArrayId, itemId);
+ FreeSpriteTilesByTag(TAG_ITEM_ICON + isAlt);
+ FreeSpritePaletteByTag(TAG_ITEM_ICON + isAlt);
+ itemSpriteId = AddItemIconSprite(TAG_ITEM_ICON + isAlt, TAG_ITEM_ICON + isAlt, itemId);
if (itemSpriteId != MAX_SPRITES)
{
*spriteId = itemSpriteId;
@@ -1540,22 +1588,22 @@ static void ShowItemImage(u16 itemId, u8 itemSpriteArrayId)
}
}
-static void sub_81C6FF8(u8 itemSpriteArrayId)
+static void FreeItemIconSpriteByAltId(bool8 isAlt)
{
- sub_81C6E38(itemSpriteArrayId + 1);
+ FreeItemIconSprite(isAlt + PBAG_SPRITE_ITEM_ICON);
}
static void CreateSwapLine(void)
{
- CreateSwapLineSprites(&gPyramidBagResources->itemsSpriteIds[3], 8);
+ CreateSwapLineSprites(&gPyramidBagMenu->spriteIds[PBAG_SPRITE_SWAP_LINE_START], NUM_SWAP_LINE_SPRITES);
}
static void SetSwapLineInvisibility(bool8 invisible)
{
- SetSwapLineSpritesInvisibility(&gPyramidBagResources->itemsSpriteIds[3], 8, invisible);
+ SetSwapLineSpritesInvisibility(&gPyramidBagMenu->spriteIds[PBAG_SPRITE_SWAP_LINE_START], NUM_SWAP_LINE_SPRITES, invisible);
}
static void UpdateSwapLinePos(u8 y)
{
- UpdateSwapLineSpritesPos(&gPyramidBagResources->itemsSpriteIds[3], 8 | 0x80, 120, (y + 1) * 16);
+ UpdateSwapLineSpritesPos(&gPyramidBagMenu->spriteIds[PBAG_SPRITE_SWAP_LINE_START], NUM_SWAP_LINE_SPRITES | 0x80, 120, (y + 1) * 16);
}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 33c6ce0e5..0492caeb5 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -6045,7 +6045,7 @@ static void PutLevelAndGenderOnLvlUpBox(void)
var = (u32)(txtPtr);
txtPtr = ConvertIntToDecimalStringN(txtPtr, monLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
var = (u32)(txtPtr) - var;
- txtPtr = StringFill(txtPtr, CHAR_UNK_SPACER, 4 - var);
+ txtPtr = StringFill(txtPtr, CHAR_GENDERLESS, 4 - var);
if (monGender != MON_GENDERLESS)
{
diff --git a/src/battle_tower.c b/src/battle_tower.c
index b1e5d7817..082ea6822 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -36,7 +36,6 @@
#include "constants/event_objects.h"
#include "constants/moves.h"
#include "constants/easy_chat.h"
-#include "constants/tv.h"
extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_MaxieTrainer[];
extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_TabithaTrainer[];
diff --git a/src/contest.c b/src/contest.c
index 246fc1e50..dbbd6ef63 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -42,7 +42,6 @@
#include "constants/moves.h"
#include "constants/rgb.h"
#include "constants/songs.h"
-#include "constants/tv.h"
// This file's functions.
static void LoadContestPalettes(void);
@@ -350,8 +349,8 @@ EWRAM_DATA u8 gHighestRibbonRank = 0;
EWRAM_DATA struct ContestResources *gContestResources = NULL;
EWRAM_DATA u8 sContestBgCopyFlags = 0;
EWRAM_DATA struct ContestWinner gCurContestWinner = {0};
-EWRAM_DATA bool8 gUnknown_02039F5C = 0;
-EWRAM_DATA u8 gUnknown_02039F5D = 0;
+EWRAM_DATA bool8 gCurContestWinnerIsForArtist = 0;
+EWRAM_DATA u8 gCurContestWinnerSaveIdx = 0;
// IWRAM common vars.
u32 gContestRngValue;
@@ -1034,7 +1033,7 @@ void LoadContestBgAfterMoveAnim(void)
{
u32 contestantWindowId = 5 + i;
- LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId], 16 * (5 + gContestantTurnOrder[i]), sizeof((eUnknownHeap1A004.cachedWindowPalettes[contestantWindowId])));
+ LoadPalette(eContestTempSave.cachedWindowPalettes[contestantWindowId], 16 * (5 + gContestantTurnOrder[i]), sizeof((eContestTempSave.cachedWindowPalettes[contestantWindowId])));
}
}
@@ -1320,7 +1319,7 @@ static bool8 SetupContestGraphics(u8 *stateVar)
CopyToBgTilemapBuffer(2, gUnknown_08C17170, 0, 0);
CopyBgTilemapBufferToVram(2);
// This is a bug, and copies random junk. savedJunk is never read.
- DmaCopy32Defvars(3, gContestResources->contestBgTilemaps[2], eUnknownHeap1A004.savedJunk, sizeof(eUnknownHeap1A004.savedJunk));
+ DmaCopy32Defvars(3, gContestResources->contestBgTilemaps[2], eContestTempSave.savedJunk, sizeof(eContestTempSave.savedJunk));
break;
case 5:
LoadCompressedPalette(gOldContestPalette, 0, 0x200);
@@ -1328,7 +1327,7 @@ static bool8 SetupContestGraphics(u8 *stateVar)
CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, tempPalette2, 16 * sizeof(u16));
CpuCopy32(tempPalette2, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
CpuCopy32(tempPalette1, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
- DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.cachedWindowPalettes, sizeof(eUnknownHeap1A004.cachedWindowPalettes));
+ DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedWindowPalettes, sizeof(eContestTempSave.cachedWindowPalettes));
LoadContestPalettes();
break;
case 6:
@@ -1468,7 +1467,7 @@ static void Task_DisplayAppealNumberText(u8 taskId)
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
ContestDebugDoPrint();
- DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18204, PLTT_BUFFER_SIZE * 2);
+ DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2);
ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed);
@@ -1667,8 +1666,8 @@ static void Task_HideMoveSelectScreen(u8 taskId)
}
Contest_SetBgCopyFlags(0);
// This seems to be a bug; it should have just copied PLTT_BUFFER_SIZE.
- DmaCopy32Defvars(3, gPlttBufferFaded, eUnknownHeap1A004.unk18604, PLTT_BUFFER_SIZE * 2);
- LoadPalette(eUnknownHeap1A004.unk18204, 0, PLTT_BUFFER_SIZE * 2);
+ DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, PLTT_BUFFER_SIZE * 2);
+ LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].func = Task_HideApplauseMeterForAppealStart;
@@ -2554,7 +2553,7 @@ static void Task_WaitForHeartSliders(u8 taskId)
static void sub_80DA348(u8 taskId)
{
- DmaCopy32Defvars(3, eUnknownHeap1A004.unk18204, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2);
+ DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 2;
gTasks[taskId].func = Task_WaitPrintRoundResult;
@@ -3133,10 +3132,10 @@ static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 ind
gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum;
gSprites[spriteId].data[2] = species;
if (IsSpeciesNotUnown(species))
- gSprites[spriteId].affineAnims = gUnknown_082FF6C0;
+ gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest;
else
gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteOpponentSide;
- StartSpriteAffineAnim(gSprites + spriteId, 0);
+ StartSpriteAffineAnim(&gSprites[spriteId], BATTLER_AFFINE_NORMAL);
return spriteId;
}
@@ -4412,7 +4411,7 @@ static void DrawContestantWindows(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
s32 windowId = i + 5;
- LoadPalette(eUnknownHeap1A004.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, sizeof(eUnknownHeap1A004.cachedWindowPalettes[0]));
+ LoadPalette(eContestTempSave.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, sizeof(eContestTempSave.cachedWindowPalettes[0]));
}
DrawContestantWindowText();
}
@@ -5516,40 +5515,46 @@ void ResetContestLinkResults(void)
gSaveBlock2Ptr->contestLinkResults[i][j] = 0;
}
-bool8 sub_80DEDA8(u8 rank)
+bool8 SaveContestWinner(u8 rank)
{
s32 i;
- u8 r7 = Random() % 3;
+ u8 captionId = Random() % NUM_PAINTING_CAPTIONS;
+ // Get the index of the winner among the contestants
for (i = 0; i < CONTESTANT_COUNT - 1; i++)
- {
if (gContestFinalStandings[i] == 0)
break;
- }
- if (rank == 0xFF && i != gContestPlayerMonIndex)
+
+ // Exit if attempting to save a Pokémon other than the player's to the museum
+ if (rank == CONTEST_SAVE_FOR_MUSEUM && i != gContestPlayerMonIndex)
return FALSE;
+
+ // Adjust the random painting caption depending on the category
switch (gSpecialVar_ContestCategory)
{
case CONTEST_CATEGORY_COOL:
- r7 += 0;
+ captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL;
break;
case CONTEST_CATEGORY_BEAUTY:
- r7 += 3;
+ captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY;
break;
case CONTEST_CATEGORY_CUTE:
- r7 += 6;
+ captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE;
break;
case CONTEST_CATEGORY_SMART:
- r7 += 9;
+ captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART;
break;
case CONTEST_CATEGORY_TOUGH:
- r7 += 12;
+ captionId += NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH;
break;
}
- if (rank != 0xFE)
- {
- u8 id = sub_80DEFA8(rank, 1);
+ if (rank != CONTEST_SAVE_FOR_ARTIST)
+ {
+ // Save winner in the saveblock
+ // Used to save any winner for the Contest Hall or the Museum
+ // but excludes the temporary save used by the artist
+ u8 id = GetContestWinnerSaveIdx(rank, TRUE);
gSaveBlock1Ptr->contestWinners[id].personality = gContestMons[i].personality;
gSaveBlock1Ptr->contestWinners[id].species = gContestMons[i].species;
gSaveBlock1Ptr->contestWinners[id].trainerId = gContestMons[i].otId;
@@ -5560,24 +5565,29 @@ bool8 sub_80DEDA8(u8 rank)
else
gSaveBlock1Ptr->contestWinners[id].contestRank = gSpecialVar_ContestRank;
- if (rank != 0xFF)
+ if (rank != CONTEST_SAVE_FOR_MUSEUM)
gSaveBlock1Ptr->contestWinners[id].contestCategory = gSpecialVar_ContestCategory;
else
- gSaveBlock1Ptr->contestWinners[id].contestCategory = r7;
+ gSaveBlock1Ptr->contestWinners[id].contestCategory = captionId;
}
else
{
+ // Set the most recent winner so the artist can show the player their painting
gCurContestWinner.personality = gContestMons[i].personality;
gCurContestWinner.trainerId = gContestMons[i].otId;
gCurContestWinner.species = gContestMons[i].species;
StringCopy(gCurContestWinner.monName, gContestMons[i].nickname);
StringCopy(gCurContestWinner.trainerName, gContestMons[i].trainerName);
- gCurContestWinner.contestCategory = r7;
+ gCurContestWinner.contestCategory = captionId;
}
return TRUE;
}
-u8 sub_80DEFA8(u8 rank, u8 b)
+// Rank is either a regular contest rank (for saving winners to show in the Contest Hall)
+// Or one of two special IDs listed below (for saving winners to show in Museum, or from the artist)
+// If just retrieving the index where the winner *would* go, shift is FALSE
+// If actually preparing to insert the winner into the saveblock, shift is TRUE
+u8 GetContestWinnerSaveIdx(u8 rank, bool8 shift)
{
s32 i;
@@ -5587,13 +5597,15 @@ u8 sub_80DEFA8(u8 rank, u8 b)
case CONTEST_RANK_SUPER:
case CONTEST_RANK_HYPER:
case CONTEST_RANK_MASTER:
- if (b != 0)
+ if (shift)
{
- for (i = NUM_CONTEST_HALL_WINNERS - 1; i >= 1; i--)
+ for (i = NUM_CONTEST_HALL_WINNERS - 1; i > 0; i--)
memcpy(&gSaveBlock1Ptr->contestWinners[i], &gSaveBlock1Ptr->contestWinners[i - 1], sizeof(struct ContestWinner));
}
- return 0;
+ return CONTEST_WINNER_HALL_1 - 1;
default:
+// case CONTEST_SAVE_FOR_MUSEUM:
+// case CONTEST_SAVE_FOR_ARTIST:
switch (gSpecialVar_ContestCategory)
{
case CONTEST_CATEGORY_COOL:
@@ -5615,7 +5627,7 @@ void ClearContestWinnerPicsInContestHall(void)
{
s32 i;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < MUSEUM_CONTEST_WINNERS_START; i++)
gSaveBlock1Ptr->contestWinners[i] = gDefaultContestWinners[i];
}
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 4f0bf9245..d4bc8ca04 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -21,18 +21,16 @@
#include "window.h"
#include "constants/rgb.h"
-// IWRAM common
u16 (*gContestMonPixels)[][32];
struct ImageProcessingContext gImageProcessingContext;
struct ContestWinner *gContestPaintingWinner;
u16 *gContestPaintingMonPalette;
-// IWRAM bss
-static u8 gContestPaintingState;
-static u16 gContestPaintingMosaicVal;
-static u16 gContestPaintingFadeCounter;
-static bool8 gUnknown_030011F6;
-static u8 gContestPaintingWindowId;
+static u8 sHoldState;
+static u16 sMosaicVal;
+static u16 sFadeCounter;
+static bool8 sVarsInitialized;
+static u8 sWindowId;
static void ShowContestPainting(void);
static void HoldContestPainting(void);
@@ -44,7 +42,7 @@ static void PrintContestPaintingCaption(u8, u8);
static void VBlankCB_ContestPainting(void);
static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]);
-extern const u8 gContestPaintingCaption[];
+extern const u8 gContestHallPaintingCaption[];
extern const u8 gContestCoolness[];
extern const u8 gContestBeauty[];
extern const u8 gContestCuteness[];
@@ -71,39 +69,39 @@ extern const u8 gContestPaintingTough1[];
extern const u8 gContestPaintingTough2[];
extern const u8 gContestPaintingTough3[];
-const u16 gPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal");
-const u8 gPictureFrameTiles_0[] = INCBIN_U8("graphics/picture_frame/frame0.4bpp.rl");
-const u8 gPictureFrameTiles_1[] = INCBIN_U8("graphics/picture_frame/frame1.4bpp.rl");
-const u8 gPictureFrameTiles_2[] = INCBIN_U8("graphics/picture_frame/frame2.4bpp.rl");
-const u8 gPictureFrameTiles_3[] = INCBIN_U8("graphics/picture_frame/frame3.4bpp.rl");
-const u8 gPictureFrameTiles_4[] = INCBIN_U8("graphics/picture_frame/frame4.4bpp.rl");
-const u8 gPictureFrameTiles_5[] = INCBIN_U8("graphics/picture_frame/frame5.4bpp.rl");
-const u8 gPictureFrameTilemap_0[] = INCBIN_U8("graphics/picture_frame/frame0_map.bin.rl");
-const u8 gPictureFrameTilemap_1[] = INCBIN_U8("graphics/picture_frame/frame1_map.bin.rl");
-const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map.bin.rl");
-const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl");
-const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl");
-const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl");
+static const u16 sPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal");
+static const u8 sPictureFrameTiles_Cool[] = INCBIN_U8("graphics/picture_frame/cool.4bpp.rl");
+static const u8 sPictureFrameTiles_Beauty[] = INCBIN_U8("graphics/picture_frame/beauty.4bpp.rl");
+static const u8 sPictureFrameTiles_Cute[] = INCBIN_U8("graphics/picture_frame/cute.4bpp.rl");
+static const u8 sPictureFrameTiles_Smart[] = INCBIN_U8("graphics/picture_frame/smart.4bpp.rl");
+static const u8 sPictureFrameTiles_Tough[] = INCBIN_U8("graphics/picture_frame/tough.4bpp.rl");
+static const u8 sPictureFrameTiles_HallLobby[] = INCBIN_U8("graphics/picture_frame/lobby.4bpp.rl");
+static const u8 sPictureFrameTilemap_Cool[] = INCBIN_U8("graphics/picture_frame/cool_map.bin.rl");
+static const u8 sPictureFrameTilemap_Beauty[] = INCBIN_U8("graphics/picture_frame/beauty_map.bin.rl");
+static const u8 sPictureFrameTilemap_Cute[] = INCBIN_U8("graphics/picture_frame/cute_map.bin.rl");
+static const u8 sPictureFrameTilemap_Smart[] = INCBIN_U8("graphics/picture_frame/smart_map.bin.rl");
+static const u8 sPictureFrameTilemap_Tough[] = INCBIN_U8("graphics/picture_frame/tough_map.bin.rl");
+static const u8 sPictureFrameTilemap_HallLobby[] = INCBIN_U8("graphics/picture_frame/lobby_map.bin.rl");
static const u8 *const sContestCategoryNames_Unused[] =
{
- gContestCoolness,
- gContestBeauty,
- gContestCuteness,
- gContestSmartness,
- gContestToughness,
+ [CONTEST_CATEGORY_COOL] = gContestCoolness,
+ [CONTEST_CATEGORY_BEAUTY] = gContestBeauty,
+ [CONTEST_CATEGORY_CUTE] = gContestCuteness,
+ [CONTEST_CATEGORY_SMART] = gContestSmartness,
+ [CONTEST_CATEGORY_TOUGH] = gContestToughness,
};
static const u8 *const sContestRankNames[] =
{
- gContestRankNormal,
- gContestRankSuper,
- gContestRankHyper,
- gContestRankMaster,
- gContestLink,
+ [CONTEST_RANK_NORMAL] = gContestRankNormal,
+ [CONTEST_RANK_SUPER] = gContestRankSuper,
+ [CONTEST_RANK_HYPER] = gContestRankHyper,
+ [CONTEST_RANK_MASTER] = gContestRankMaster,
+ [CONTEST_RANK_LINK] = gContestLink,
};
-static const struct BgTemplate sContestPaintingBgTemplates[] =
+static const struct BgTemplate sBgTemplates[] =
{
{
.bg = 1,
@@ -116,7 +114,7 @@ static const struct BgTemplate sContestPaintingBgTemplates[] =
},
};
-static const struct WindowTemplate sContestPaintingWindowTemplate =
+static const struct WindowTemplate sWindowTemplate =
{
.bg = 1,
.tilemapLeft = 2,
@@ -127,23 +125,23 @@ static const struct WindowTemplate sContestPaintingWindowTemplate =
.baseBlock = 1,
};
-static const u8 *const sContestPaintingDescriptionPointers[] =
+static const u8 *const sMuseumCaptions[NUM_PAINTING_CAPTIONS * CONTEST_CATEGORIES_COUNT] =
{
- gContestPaintingCool1,
- gContestPaintingCool2,
- gContestPaintingCool3,
- gContestPaintingBeauty1,
- gContestPaintingBeauty2,
- gContestPaintingBeauty3,
- gContestPaintingCute1,
- gContestPaintingCute2,
- gContestPaintingCute3,
- gContestPaintingSmart1,
- gContestPaintingSmart2,
- gContestPaintingSmart3,
- gContestPaintingTough1,
- gContestPaintingTough2,
- gContestPaintingTough3,
+ [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = gContestPaintingCool1,
+ [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = gContestPaintingCool2,
+ [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = gContestPaintingCool3,
+ [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = gContestPaintingBeauty1,
+ [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = gContestPaintingBeauty2,
+ [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = gContestPaintingBeauty3,
+ [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = gContestPaintingCute1,
+ [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = gContestPaintingCute2,
+ [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = gContestPaintingCute3,
+ [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = gContestPaintingSmart1,
+ [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = gContestPaintingSmart2,
+ [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = gContestPaintingSmart3,
+ [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = gContestPaintingTough1,
+ [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = gContestPaintingTough2,
+ [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = gContestPaintingTough3,
};
static const struct OamData sContestPaintingMonOamData =
@@ -161,15 +159,15 @@ static const struct OamData sContestPaintingMonOamData =
.paletteNum = 0,
};
-const u16 gUnknown_085B0838[] = {RGB(0, 0, 0), RGB(0, 0, 0)};
+static const u16 sBgPalette[] = {RGB_BLACK, RGB_BLACK};
void SetContestWinnerForPainting(int contestWinnerId)
{
- u8 *ptr1 = &gUnknown_02039F5D;
- u8 *ptr2 = &gUnknown_02039F5C;
+ u8 *saveIdx = &gCurContestWinnerSaveIdx;
+ u8 *isForArtist = &gCurContestWinnerIsForArtist;
gCurContestWinner = gSaveBlock1Ptr->contestWinners[contestWinnerId - 1];
- *ptr1 = contestWinnerId - 1;
- *ptr2 = FALSE;
+ *saveIdx = contestWinnerId - 1;
+ *isForArtist = FALSE;
}
void CB2_ContestPainting(void)
@@ -189,7 +187,7 @@ static void CB2_QuitContestPainting(void)
SetMainCallback2(gMain.savedCallback);
FREE_AND_SET_NULL(gContestPaintingMonPalette);
FREE_AND_SET_NULL(gContestMonPixels);
- RemoveWindow(gContestPaintingWindowId);
+ RemoveWindow(sWindowId);
Free(GetBgTilemapBuffer(1));
FreeMonSpritesGfx();
}
@@ -203,13 +201,13 @@ static void ShowContestPainting(void)
SetVBlankCallback(NULL);
AllocateMonSpritesGfx();
gContestPaintingWinner = &gCurContestWinner;
- InitContestPaintingVars(1);
+ InitContestPaintingVars(TRUE);
InitContestPaintingBg();
gMain.state++;
break;
case 1:
ResetPaletteFade();
- DmaFillLarge32(3, 0, (void *)BG_VRAM, 0x18000, 0x1000);
+ DmaFillLarge32(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
ResetSpriteData();
gMain.state++;
break;
@@ -220,16 +218,16 @@ static void ShowContestPainting(void)
gMain.state++;
break;
case 3:
- CreateContestPaintingPicture(gUnknown_02039F5D, gUnknown_02039F5C);
+ CreateContestPaintingPicture(gCurContestWinnerSaveIdx, gCurContestWinnerIsForArtist);
gMain.state++;
break;
case 4:
- PrintContestPaintingCaption(gUnknown_02039F5D, gUnknown_02039F5C);
- LoadPalette(gUnknown_085B0838, 0, 1 * 2);
+ PrintContestPaintingCaption(gCurContestWinnerSaveIdx, gCurContestWinnerIsForArtist);
+ LoadPalette(sBgPalette, 0, 1 * 2);
DmaClear32(3, PLTT, PLTT_SIZE);
BeginFastPaletteFade(2);
SetVBlankCallback(VBlankCB_ContestPainting);
- gContestPaintingState = 0;
+ sHoldState = 0;
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON);
SetMainCallback2(CB2_HoldContestPainting);
break;
@@ -238,29 +236,29 @@ static void ShowContestPainting(void)
static void HoldContestPainting(void)
{
- switch (gContestPaintingState)
+ switch (sHoldState)
{
case 0:
if (!gPaletteFade.active)
- gContestPaintingState = 1;
- if (gUnknown_030011F6 && gContestPaintingFadeCounter)
- gContestPaintingFadeCounter--;
+ sHoldState = 1;
+ if (sVarsInitialized && sFadeCounter)
+ sFadeCounter--;
break;
case 1:
if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))
{
- gContestPaintingState++;
+ sHoldState++;
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0));
}
- if (gUnknown_030011F6)
- gContestPaintingFadeCounter = 0;
+ if (sVarsInitialized)
+ sFadeCounter = 0;
break;
case 2:
if (!gPaletteFade.active)
SetMainCallback2(CB2_QuitContestPainting);
- if (gUnknown_030011F6 && gContestPaintingFadeCounter < 30)
- gContestPaintingFadeCounter++;
+ if (sVarsInitialized && sFadeCounter < 30)
+ sFadeCounter++;
break;
}
}
@@ -268,45 +266,48 @@ static void HoldContestPainting(void)
static void InitContestPaintingWindow(void)
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, sContestPaintingBgTemplates, ARRAY_COUNT(sContestPaintingBgTemplates));
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE));
- gContestPaintingWindowId = AddWindow(&sContestPaintingWindowTemplate);
+ sWindowId = AddWindow(&sWindowTemplate);
DeactivateAllTextPrinters();
- FillWindowPixelBuffer(gContestPaintingWindowId, PIXEL_FILL(0));
- PutWindowTilemap(gContestPaintingWindowId);
- CopyWindowToVram(gContestPaintingWindowId, 3);
+ FillWindowPixelBuffer(sWindowId, PIXEL_FILL(0));
+ PutWindowTilemap(sWindowId);
+ CopyWindowToVram(sWindowId, 3);
ShowBg(1);
}
-static void PrintContestPaintingCaption(u8 contestType, bool8 arg1)
+static void PrintContestPaintingCaption(u8 contestType, bool8 isForArtist)
{
int x;
u8 category;
- if (arg1 == TRUE)
+ // Artist's painting has no caption
+ if (isForArtist == TRUE)
return;
category = gContestPaintingWinner->contestCategory;
- if (contestType < 8)
+ if (contestType < MUSEUM_CONTEST_WINNERS_START)
{
+ // Contest Hall caption
BufferContestName(gStringVar1, category);
StringAppend(gStringVar1, gText_Space);
StringAppend(gStringVar1, sContestRankNames[gContestPaintingWinner->contestRank]);
StringCopy(gStringVar2, gContestPaintingWinner->trainerName);
- sub_81DB5AC(gStringVar2);
+ ConvertInternationalContestantName(gStringVar2);
StringCopy(gStringVar3, gContestPaintingWinner->monName);
- StringExpandPlaceholders(gStringVar4, gContestPaintingCaption);
+ StringExpandPlaceholders(gStringVar4, gContestHallPaintingCaption);
}
else
{
+ // Museum caption
StringCopy(gStringVar1, gContestPaintingWinner->monName);
- StringExpandPlaceholders(gStringVar4, sContestPaintingDescriptionPointers[category]);
+ StringExpandPlaceholders(gStringVar4, sMuseumCaptions[category]);
}
x = GetStringCenterAlignXOffset(1, gStringVar4, 208);
- AddTextPrinterParameterized(gContestPaintingWindowId, 1, gStringVar4, x, 1, 0, 0);
+ AddTextPrinterParameterized(sWindowId, 1, gStringVar4, x, 1, 0, 0);
CopyBgTilemapBufferToVram(1);
}
@@ -321,33 +322,34 @@ static void InitContestPaintingBg(void)
SetGpuReg(REG_OFFSET_BLDY, 0);
}
-static void InitContestPaintingVars(bool8 arg0)
+static void InitContestPaintingVars(bool8 reset)
{
- if (arg0 == FALSE)
+ if (reset == FALSE)
{
- gUnknown_030011F6 = FALSE;
- gContestPaintingMosaicVal = 0;
- gContestPaintingFadeCounter = 0;
+ // Never reached
+ sVarsInitialized = FALSE;
+ sMosaicVal = 0;
+ sFadeCounter = 0;
}
else
{
- gUnknown_030011F6 = TRUE;
- gContestPaintingMosaicVal = 15;
- gContestPaintingFadeCounter = 30;
+ sVarsInitialized = TRUE;
+ sMosaicVal = 15;
+ sFadeCounter = 30;
}
}
static void UpdateContestPaintingMosaicEffect(void)
{
- if (!gUnknown_030011F6)
+ if (!sVarsInitialized)
{
SetGpuReg(REG_OFFSET_MOSAIC, 0);
}
else
{
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
- gContestPaintingMosaicVal = gContestPaintingFadeCounter / 2;
- SetGpuReg(REG_OFFSET_MOSAIC, (gContestPaintingMosaicVal << 12) | (gContestPaintingMosaicVal << 8) | (gContestPaintingMosaicVal << 4) | (gContestPaintingMosaicVal << 0));
+ sMosaicVal = sFadeCounter / 2;
+ SetGpuReg(REG_OFFSET_MOSAIC, (sMosaicVal << 12) | (sMosaicVal << 8) | (sMosaicVal << 4) | (sMosaicVal << 0));
}
}
@@ -414,34 +416,35 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)
#define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)])
-static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 arg1)
+static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 isForArtist)
{
u8 x, y;
- LoadPalette(gPictureFramePalettes, 0, 0x100);
- if (arg1 == TRUE)
+ LoadPalette(sPictureFramePalettes, 0, 0x100);
+ if (isForArtist == TRUE)
{
- switch (gContestPaintingWinner->contestCategory / 3)
+ // Load Artist's frame
+ switch (gContestPaintingWinner->contestCategory / NUM_PAINTING_CAPTIONS)
{
case CONTEST_CATEGORY_COOL:
- RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_0, gContestMonPixels);
+ RLUnCompVram(sPictureFrameTiles_Cool, (void *)VRAM);
+ RLUnCompWram(sPictureFrameTilemap_Cool, gContestMonPixels);
break;
case CONTEST_CATEGORY_BEAUTY:
- RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_1, gContestMonPixels);
+ RLUnCompVram(sPictureFrameTiles_Beauty, (void *)VRAM);
+ RLUnCompWram(sPictureFrameTilemap_Beauty, gContestMonPixels);
break;
case CONTEST_CATEGORY_CUTE:
- RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_2, gContestMonPixels);
+ RLUnCompVram(sPictureFrameTiles_Cute, (void *)VRAM);
+ RLUnCompWram(sPictureFrameTilemap_Cute, gContestMonPixels);
break;
case CONTEST_CATEGORY_SMART:
- RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_3, gContestMonPixels);
+ RLUnCompVram(sPictureFrameTiles_Smart, (void *)VRAM);
+ RLUnCompWram(sPictureFrameTilemap_Smart, gContestMonPixels);
break;
case CONTEST_CATEGORY_TOUGH:
- RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_4, gContestMonPixels);
+ RLUnCompVram(sPictureFrameTiles_Tough, (void *)VRAM);
+ RLUnCompWram(sPictureFrameTilemap_Tough, gContestMonPixels);
break;
}
@@ -463,34 +466,36 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 arg1)
for (x = 0; x < 16; x++)
VRAM_PICTURE_DATA(x + 7, 2) = (*gContestMonPixels)[2][7];
}
- else if (contestWinnerId < 8)
+ else if (contestWinnerId < MUSEUM_CONTEST_WINNERS_START)
{
- RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_5, (void *)(BG_SCREEN_ADDR(12)));
+ // Load Contest Hall lobby frame
+ RLUnCompVram(sPictureFrameTiles_HallLobby, (void *)VRAM);
+ RLUnCompVram(sPictureFrameTilemap_HallLobby, (void *)(BG_SCREEN_ADDR(12)));
}
else
{
- switch (gContestPaintingWinner->contestCategory / 3)
+ // Load Museum frame
+ switch (gContestPaintingWinner->contestCategory / NUM_PAINTING_CAPTIONS)
{
case CONTEST_CATEGORY_COOL:
- RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_0, (void *)(BG_SCREEN_ADDR(12)));
+ RLUnCompVram(sPictureFrameTiles_Cool, (void *)VRAM);
+ RLUnCompVram(sPictureFrameTilemap_Cool, (void *)(BG_SCREEN_ADDR(12)));
break;
case CONTEST_CATEGORY_BEAUTY:
- RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_1, (void *)(BG_SCREEN_ADDR(12)));
+ RLUnCompVram(sPictureFrameTiles_Beauty, (void *)VRAM);
+ RLUnCompVram(sPictureFrameTilemap_Beauty, (void *)(BG_SCREEN_ADDR(12)));
break;
case CONTEST_CATEGORY_CUTE:
- RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_2, (void *)(BG_SCREEN_ADDR(12)));
+ RLUnCompVram(sPictureFrameTiles_Cute, (void *)VRAM);
+ RLUnCompVram(sPictureFrameTilemap_Cute, (void *)(BG_SCREEN_ADDR(12)));
break;
case CONTEST_CATEGORY_SMART:
- RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_3, (void *)(BG_SCREEN_ADDR(12)));
+ RLUnCompVram(sPictureFrameTiles_Smart, (void *)VRAM);
+ RLUnCompVram(sPictureFrameTilemap_Smart, (void *)(BG_SCREEN_ADDR(12)));
break;
case CONTEST_CATEGORY_TOUGH:
- RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_4, (void *)(BG_SCREEN_ADDR(12)));
+ RLUnCompVram(sPictureFrameTiles_Tough, (void *)VRAM);
+ RLUnCompVram(sPictureFrameTilemap_Tough, (void *)(BG_SCREEN_ADDR(12)));
break;
}
}
@@ -519,10 +524,10 @@ static u8 GetImageEffectForContestWinner(u8 contestWinnerId)
{
u8 contestCategory;
- if (contestWinnerId < 8)
+ if (contestWinnerId < MUSEUM_CONTEST_WINNERS_START)
contestCategory = gContestPaintingWinner->contestCategory;
else
- contestCategory = gContestPaintingWinner->contestCategory / 3;
+ contestCategory = gContestPaintingWinner->contestCategory / NUM_PAINTING_CAPTIONS;
switch (contestCategory)
{
@@ -584,12 +589,12 @@ static void DoContestPaintingImageProcessing(u8 imageEffect)
LoadPalette(gContestPaintingMonPalette, 0x100, 0x200);
}
-static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 arg1)
+static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 isForArtist)
{
AllocPaintingResources();
InitContestMonPixels(gContestPaintingWinner->species, 0);
DoContestPaintingImageProcessing(GetImageEffectForContestWinner(contestWinnerId));
InitPaintingMonOamData(contestWinnerId);
- LoadContestPaintingFrame(contestWinnerId, arg1);
+ LoadContestPaintingFrame(contestWinnerId, isForArtist);
}
diff --git a/src/contest_util.c b/src/contest_util.c
index 98854c4c6..decbded2c 100644
--- a/src/contest_util.c
+++ b/src/contest_util.c
@@ -44,7 +44,6 @@
#include "constants/game_stat.h"
#include "constants/rgb.h"
#include "constants/songs.h"
-#include "constants/tv.h"
#include "contest.h"
enum {
@@ -61,10 +60,29 @@ enum {
#define GET_CONTEST_WINNER_ID(i) { for ((i) = 0; (i) < CONTESTANT_COUNT && gContestFinalStandings[(i)] != 0; (i)++); }
+// Gfx/pal tags for the text window sprites on the contest results screen.
+// Both types of text windows are made up of 4 individual sprites
+// These tags are used by the spritesheets, and implicitly in the loop in CreateResultsTextWindowSprites
+#define TAG_TEXT_WINDOW_BASE 3009
+enum {
+ TAG_RESULTS_TEXT_WINDOW_LEFT = TAG_TEXT_WINDOW_BASE,
+ TAG_RESULTS_TEXT_WINDOW_MIDLEFT,
+ TAG_RESULTS_TEXT_WINDOW_MIDRIGHT,
+ TAG_RESULTS_TEXT_WINDOW_RIGHT,
+ TAG_LINK_TEXT_WINDOW_LEFT,
+ TAG_LINK_TEXT_WINDOW_MIDLEFT,
+ TAG_LINK_TEXT_WINDOW_MIDRIGHT,
+ TAG_LINK_TEXT_WINDOW_RIGHT, // 3016
+};
#define TAG_CONFETTI 3017
+#define TAG_WIRELESS_INDICATOR_WINDOW 22222
#define MAX_BAR_LENGTH 87
+// Starting x/y for the sliding results screen text box
+#define TEXT_BOX_X (DISPLAY_WIDTH + 32)
+#define TEXT_BOX_Y (DISPLAY_HEIGHT - 16)
+
struct ContestResultsInternal
{
u8 slidingTextBoxSpriteId;
@@ -105,14 +123,14 @@ struct ContestResults
static EWRAM_DATA struct ContestResults *sContestResults = NULL;
static void LoadAllContestMonIconPalettes(void);
-static void LoadContestResultsTilemaps(void);
+static void LoadContestResultsTitleBarTilemaps(void);
static u8 GetNumPreliminaryPoints(u8, bool8);
static s8 GetNumRound2Points(u8, bool8);
static void AddContestTextPrinter(int, u8 *, int);
static void AllocContestResults(void);
static void FreeContestResults(void);
static void LoadAllContestMonIcons(u8, u8);
-static void LoadContestResultSprites(void);
+static void CreateResultsTextWindowSprites(void);
static void TryCreateWirelessSprites(void);
static void Task_StartShowContestResults(u8 taskId);
static void CB2_StartShowContestResults(void);
@@ -166,11 +184,11 @@ static void SpriteCB_Confetti(struct Sprite *sprite);
static void Task_ShowContestEntryMonPic(u8 taskId);
static void Task_LinkContestWaitForConnection(u8 taskId);
-static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal");
-static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp");
+static const u16 sResultsTextWindow_Pal[] = INCBIN_U16("graphics/contest/results_screen/text_window.gbapal");
+static const u8 sResultsTextWindow_Gfx[] = INCBIN_U8("graphics/contest/results_screen/text_window.4bpp");
static const u16 sMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal");
-static const struct OamData sOamData_858D7F0 =
+static const struct OamData sOamData_ResultsTextWindow =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -187,33 +205,33 @@ static const struct OamData sOamData_858D7F0 =
.affineParam = 0,
};
-static const struct SpriteTemplate sSpriteTemplate_858D7F8 =
+static const struct SpriteTemplate sSpriteTemplate_ResultsTextWindow =
{
- .tileTag = 3009,
- .paletteTag = 3009,
- .oam = &sOamData_858D7F0,
+ .tileTag = TAG_TEXT_WINDOW_BASE,
+ .paletteTag = TAG_TEXT_WINDOW_BASE,
+ .oam = &sOamData_ResultsTextWindow,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteSheet sUnknown_0858D810[] =
+static const struct SpriteSheet sSpriteSheets_ResultsTextWindow[] =
{
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3009 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3010 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3011 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3012 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3013 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3014 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3015 },
- { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3016 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_RESULTS_TEXT_WINDOW_LEFT },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_RESULTS_TEXT_WINDOW_MIDLEFT },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_RESULTS_TEXT_WINDOW_MIDRIGHT },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_RESULTS_TEXT_WINDOW_RIGHT },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_LINK_TEXT_WINDOW_LEFT },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_LINK_TEXT_WINDOW_MIDLEFT },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_LINK_TEXT_WINDOW_MIDRIGHT },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = TAG_LINK_TEXT_WINDOW_RIGHT },
};
-static const struct SpritePalette sUnknown_0858D850 =
+static const struct SpritePalette sSpritePalette_ResultsTextWindow =
{
.data = sMiscBlank_Pal,
- .tag = 3009,
+ .tag = TAG_TEXT_WINDOW_BASE,
};
static const struct OamData sOamData_Confetti =
@@ -339,7 +357,7 @@ static const struct WindowTemplate sWindowTemplates[] =
DUMMY_WIN_TEMPLATE,
};
-static const struct OamData sUnknown_0858D8C0 =
+static const struct OamData sOamData_WirelessIndicatorWindow =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -357,22 +375,22 @@ static const struct OamData sUnknown_0858D8C0 =
};
-static const struct SpriteTemplate sSpriteTemplate_858D8C8 =
+static const struct SpriteTemplate sSpriteTemplate_WirelessIndicatorWindow =
{
- .tileTag = 22222,
+ .tileTag = TAG_WIRELESS_INDICATOR_WINDOW,
.paletteTag = 0,
- .oam = &sUnknown_0858D8C0,
+ .oam = &sOamData_WirelessIndicatorWindow,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const struct SpriteSheet sUnknown_0858D8E0 =
+static const struct SpriteSheet sSpriteSheet_WirelessIndicatorWindow =
{
.data = gMiscBlank_Gfx,
.size = 0x200,
- .tag = 22222
+ .tag = TAG_WIRELESS_INDICATOR_WINDOW
};
static const u8 sContestLinkTextColors[4] = {TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5};
@@ -430,12 +448,12 @@ static void LoadContestResultsBgGfx(void)
u16 tile1, tile2;
LZDecompressVram(gContestResults_Gfx, (void *)BG_CHAR_ADDR(0));
- CopyToBgTilemapBuffer(3, gUnknown_08C1A12C, 0, 0);
- CopyToBgTilemapBuffer(2, gUnknown_08C1A000, 0, 0);
- CopyToBgTilemapBuffer(0, gUnknown_08C19EEC, 0, 0);
- LoadContestResultsTilemaps();
+ CopyToBgTilemapBuffer(3, gContestResults_Bg_Tilemap, 0, 0);
+ CopyToBgTilemapBuffer(2, gContestResults_Interface_Tilemap, 0, 0);
+ CopyToBgTilemapBuffer(0, gContestResults_WinnerBanner_Tilemap, 0, 0);
+ LoadContestResultsTitleBarTilemaps();
LoadCompressedPalette(gContestResults_Pal, 0, 0x200);
- LoadPalette(sUnknown_0858D6B0, 0xF0, 0x20);
+ LoadPalette(sResultsTextWindow_Pal, 0xF0, sizeof(sResultsTextWindow_Pal));
for (i = 0; i < CONTESTANT_COUNT; i++)
{
@@ -515,14 +533,14 @@ static void CB2_StartShowContestResults(void)
LoadAllContestMonNames();
memset(sContestResults->data, 0, sizeof(*sContestResults->data));
memset(sContestResults->monResults, 0, sizeof(*sContestResults->monResults));
- LoadContestResultSprites();
+ CreateResultsTextWindowSprites();
TryCreateWirelessSprites();
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
gPaletteFade.bufferTransferDisabled = FALSE;
sContestResults->data->showResultsTaskId = CreateTask(Task_ShowContestResults, 5);
SetMainCallback2(CB2_ShowContestResults);
gBattle_WIN1H = WIN_RANGE(0, DISPLAY_WIDTH);
- gBattle_WIN1V = WIN_RANGE(128, DISPLAY_HEIGHT);
+ gBattle_WIN1V = WIN_RANGE(DISPLAY_HEIGHT - 32, DISPLAY_HEIGHT);
CreateTask(Task_SlideContestResultsBg, 20);
CalculateContestantsResultData();
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
@@ -587,10 +605,10 @@ static void Task_ShowContestResults(u8 taskId)
}
TryGainNewFanFromCounter(FANCOUNTER_FINISHED_CONTEST);
- sub_80DEDA8(gSpecialVar_ContestRank);
- sub_80DEDA8(0xFE);
- gUnknown_02039F5C = TRUE;
- gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
+ SaveContestWinner(gSpecialVar_ContestRank); // Save for lobby painting
+ SaveContestWinner(CONTEST_SAVE_FOR_ARTIST);
+ gCurContestWinnerIsForArtist = TRUE;
+ gCurContestWinnerSaveIdx = GetContestWinnerSaveIdx(CONTEST_SAVE_FOR_ARTIST, FALSE);
var = VarGet(VAR_CONTEST_HALL_STATE);
VarSet(VAR_CONTEST_HALL_STATE, 0);
SetContinueGameWarpStatusToDynamicWarp();
@@ -637,10 +655,10 @@ static void Task_ShowContestResults(u8 taskId)
if (gContestFinalStandings[gContestPlayerMonIndex] == 0)
IncrementGameStat(GAME_STAT_WON_CONTEST);
- sub_80DEDA8(gSpecialVar_ContestRank);
- sub_80DEDA8(0xFE);
- gUnknown_02039F5C = TRUE;
- gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
+ SaveContestWinner(gSpecialVar_ContestRank); // Save for lobby painting
+ SaveContestWinner(CONTEST_SAVE_FOR_ARTIST);
+ gCurContestWinnerIsForArtist = TRUE;
+ gCurContestWinnerSaveIdx = GetContestWinnerSaveIdx(CONTEST_SAVE_FOR_ARTIST, FALSE);
TryGainNewFanFromCounter(FANCOUNTER_FINISHED_CONTEST);
gTasks[taskId].func = Task_AnnouncePreliminaryResults;
}
@@ -679,7 +697,7 @@ static void Task_AnnouncePreliminaryResults(u8 taskId)
{
CreateTask(Task_FlashStarsAndHearts, 20);
x = DrawResultsTextWindow(gText_AnnouncingResults, sContestResults->data->slidingTextBoxSpriteId);
- StartTextBoxSlideIn(x, DISPLAY_HEIGHT - 16, 120, 1088);
+ StartTextBoxSlideIn(x, TEXT_BOX_Y, 120, 1088);
gTasks[taskId].tState++;
}
else if (gTasks[taskId].tState == 1)
@@ -702,7 +720,7 @@ static void Task_AnnouncePreliminaryResults(u8 taskId)
else if (gTasks[taskId].tState == 3)
{
x = DrawResultsTextWindow(gText_PreliminaryResults, sContestResults->data->slidingTextBoxSpriteId);
- StartTextBoxSlideIn(x, DISPLAY_HEIGHT - 16, -1, 1088);
+ StartTextBoxSlideIn(x, TEXT_BOX_Y, -1, 1088);
gTasks[taskId].tState++;
}
else if (gTasks[taskId].tState == 4)
@@ -752,7 +770,7 @@ static void Task_AnnounceRound2Results(u8 taskId)
{
gTasks[taskId].tTimer = 0;
x = DrawResultsTextWindow(gText_Round2Results, sContestResults->data->slidingTextBoxSpriteId);
- StartTextBoxSlideIn(x, DISPLAY_HEIGHT - 16, -1, 1088);
+ StartTextBoxSlideIn(x, TEXT_BOX_Y, -1, 1088);
}
}
else if (sContestResults->data->slidingTextBoxState == SLIDING_TEXT_ARRIVED)
@@ -837,11 +855,11 @@ static void Task_AnnounceWinner(u8 taskId)
gTasks[taskId].tTimer = 0;
GET_CONTEST_WINNER_ID(i);
StringCopy(gStringVar1, gContestMons[i].trainerName);
- sub_81DB5AC(gStringVar1);
+ ConvertInternationalContestantName(gStringVar1);
StringCopy(gStringVar2, gContestMons[i].nickname);
StringExpandPlaceholders(winnerTextBuffer, gText_ContestantsMonWon);
x = DrawResultsTextWindow(winnerTextBuffer, sContestResults->data->slidingTextBoxSpriteId);
- StartTextBoxSlideIn(x, DISPLAY_HEIGHT - 16, -1, 1088);
+ StartTextBoxSlideIn(x, TEXT_BOX_Y, -1, 1088);
gTasks[taskId].tState++;
}
break;
@@ -892,7 +910,7 @@ static void Task_ShowWinnerMonBanner(u8 taskId)
LoadCompressedSpritePalette(pokePal);
SetMultiuseSpriteTemplateToPokemon(species, B_POSITION_OPPONENT_LEFT);
gMultiuseSpriteTemplate.paletteTag = pokePal->tag;
- spriteId = CreateSprite(&gMultiuseSpriteTemplate, DISPLAY_WIDTH + 32, 80, 10);
+ spriteId = CreateSprite(&gMultiuseSpriteTemplate, DISPLAY_WIDTH + 32, DISPLAY_HEIGHT / 2, 10);
gSprites[spriteId].data[1] = species;
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].callback = SpriteCB_WinnerMonSlideIn;
@@ -1136,9 +1154,9 @@ static void TryCreateWirelessSprites(void)
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(8, 8);
gSprites[gWirelessStatusIndicatorSpriteId].subpriority = 1;
- sheet = LoadSpriteSheet(&sUnknown_0858D8E0);
+ sheet = LoadSpriteSheet(&sSpriteSheet_WirelessIndicatorWindow);
RequestDma3Fill(0xFFFFFFFF, (void *)BG_CHAR_ADDR(4) + sheet * 0x20, 0x80, 1);
- spriteId = CreateSprite(&sSpriteTemplate_858D8C8, 8, 8, 0);
+ spriteId = CreateSprite(&sSpriteTemplate_WirelessIndicatorWindow, 8, 8, 0);
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
}
}
@@ -1150,14 +1168,13 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
int strWidth;
u8 *spriteTilePtrs[4];
u8 *dst;
- {
- struct WindowTemplate windowTemplate;
- memset(&windowTemplate, 0, sizeof(windowTemplate));
- windowTemplate.width = 30;
- windowTemplate.height = 2;
- windowId = AddWindow(&windowTemplate);
- FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
- }
+
+ struct WindowTemplate windowTemplate;
+ memset(&windowTemplate, 0, sizeof(windowTemplate));
+ windowTemplate.width = 30;
+ windowTemplate.height = 2;
+ windowId = AddWindow(&windowTemplate);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
origWidth = GetStringWidth(1, text, 0);
strWidth = (origWidth + 9) / 8;
@@ -1169,16 +1186,16 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
s32 i;
struct Sprite *sprite;
const u8 *src, *windowTilesPtr;
- windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA));
- src = (u8 *)(sUnknown_0858D6D0);
+ windowTilesPtr = (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA);
+ src = (u8 *)sResultsTextWindow_Gfx;
sprite = &gSprites[spriteId];
spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + OBJ_VRAM0);
- for (i = 1; i < 4; i++)
+ for (i = 1; i < (int)ARRAY_COUNT(spriteTilePtrs); i++)
spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(spriteTilePtrs); i++)
CpuFill32(0, spriteTilePtrs[i], 0x400);
dst = spriteTilePtrs[0];
@@ -1208,27 +1225,31 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
return (DISPLAY_WIDTH - (strWidth + 2) * 8) / 2;
}
-static void LoadContestResultSprites(void)
+static void CreateResultsTextWindowSprites(void)
{
int i;
struct SpriteTemplate template;
- u8 spriteIds[ARRAY_COUNT(sUnknown_0858D810)];
+ u8 spriteIds[ARRAY_COUNT(sSpriteSheets_ResultsTextWindow)];
- template = sSpriteTemplate_858D7F8;
- for (i = 0; i < (int)ARRAY_COUNT(sUnknown_0858D810); i++)
- LoadSpriteSheet(&sUnknown_0858D810[i]);
+ template = sSpriteTemplate_ResultsTextWindow;
+ for (i = 0; i < (int)ARRAY_COUNT(sSpriteSheets_ResultsTextWindow); i++)
+ LoadSpriteSheet(&sSpriteSheets_ResultsTextWindow[i]);
- LoadSpritePalette(&sUnknown_0858D850);
- for (i = 0; i < (int)ARRAY_COUNT(sUnknown_0858D810); i++)
+ LoadSpritePalette(&sSpritePalette_ResultsTextWindow);
+
+ // Create sprites for the two window types, each made up of 4 sprites
+ for (i = 0; i < (int)ARRAY_COUNT(sSpriteSheets_ResultsTextWindow); i++)
{
- spriteIds[i] = CreateSprite(&template, DISPLAY_WIDTH + 32, DISPLAY_HEIGHT - 16, 10);
+ spriteIds[i] = CreateSprite(&template, TEXT_BOX_X, TEXT_BOX_Y, 10);
template.tileTag++;
}
+ // Save sprite ids of the sliding text box onto its leftmost sprite
gSprites[spriteIds[0]].data[0] = spriteIds[1];
gSprites[spriteIds[0]].data[1] = spriteIds[2];
gSprites[spriteIds[0]].data[2] = spriteIds[3];
+ // Save sprite ids of the link text box onto its leftmost sprite
gSprites[spriteIds[4]].data[0] = spriteIds[5];
gSprites[spriteIds[4]].data[1] = spriteIds[6];
gSprites[spriteIds[4]].data[2] = spriteIds[7];
@@ -1248,7 +1269,7 @@ static void LoadContestResultSprites(void)
static void StartTextBoxSlideIn(s16 x, u16 y, u16 slideOutTimer, u16 slideIncrement)
{
struct Sprite *sprite = &gSprites[sContestResults->data->slidingTextBoxSpriteId];
- sprite->pos1.x = DISPLAY_WIDTH + 32;
+ sprite->pos1.x = TEXT_BOX_X;
sprite->pos1.y = y;
sprite->pos2.x = 0;
sprite->pos2.y = 0;
@@ -1275,8 +1296,8 @@ static void StartTextBoxSlideOut(u16 slideIncrement)
static void EndTextBoxSlideOut(struct Sprite *sprite)
{
- sprite->pos1.x = DISPLAY_WIDTH + 32;
- sprite->pos1.y = DISPLAY_HEIGHT - 16;
+ sprite->pos1.x = TEXT_BOX_X;
+ sprite->pos1.y = TEXT_BOX_Y;
sprite->pos2.y = 0;
sprite->pos2.x = 0;
sprite->callback = SpriteCallbackDummy;
@@ -1377,7 +1398,7 @@ static void HideLinkResultsTextBox(void)
| WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
}
-static void LoadContestResultsTilemaps(void)
+static void LoadContestResultsTitleBarTilemaps(void)
{
u8 palette;
int x, y;
@@ -1386,58 +1407,58 @@ static void LoadContestResultsTilemaps(void)
y = 1;
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
- CopyToBgTilemapBufferRect(2, gLinkContestResults_Tilemap, 5, 1, 5, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Link_Tilemap, 5, 1, 5, 2);
x = 10;
}
else if (gSpecialVar_ContestRank == CONTEST_RANK_NORMAL)
{
- CopyToBgTilemapBufferRect(2, gNormalContestResults_Tilemap, 5, 1, 10, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Normal_Tilemap, 5, 1, 10, 2);
x = 15;
}
else if (gSpecialVar_ContestRank == CONTEST_RANK_SUPER)
{
- CopyToBgTilemapBufferRect(2, gSuperContestResults_Tilemap, 5, 1, 10, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Super_Tilemap, 5, 1, 10, 2);
x = 15;
}
else if (gSpecialVar_ContestRank == CONTEST_RANK_HYPER)
{
- CopyToBgTilemapBufferRect(2, gHyperContestResults_Tilemap, 5, 1, 10, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Hyper_Tilemap, 5, 1, 10, 2);
x = 15;
}
else // CONTEST_RANK_MASTER
{
- CopyToBgTilemapBufferRect(2, gMasterContestResults_Tilemap, 5, 1, 10, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Master_Tilemap, 5, 1, 10, 2);
x = 15;
}
if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_COOL)
{
palette = 0;
- CopyToBgTilemapBufferRect(2, gCoolContestResults_Tilemap, x, y, 5, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Cool_Tilemap, x, y, 5, 2);
}
else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_BEAUTY)
{
palette = 1;
- CopyToBgTilemapBufferRect(2, gBeautyContestResults_Tilemap, x, y, 5, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Beauty_Tilemap, x, y, 5, 2);
}
else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_CUTE)
{
palette = 2;
- CopyToBgTilemapBufferRect(2, gCuteContestResults_Tilemap, x, y, 5, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Cute_Tilemap, x, y, 5, 2);
}
else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_SMART)
{
palette = 3;
- CopyToBgTilemapBufferRect(2, gSmartContestResults_Tilemap, x, y, 5, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Smart_Tilemap, x, y, 5, 2);
}
else // CONTEST_CATEGORY_TOUGH
{
palette = 4;
- CopyToBgTilemapBufferRect(2, gToughContestResults_Tilemap, x, y, 5, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Tough_Tilemap, x, y, 5, 2);
}
x += 5;
- CopyToBgTilemapBufferRect(2, gContestResults_Tilemap, x, y, 6, 2);
+ CopyToBgTilemapBufferRect(2, gContestResultsTitle_Tilemap, x, y, 6, 2);
CopyToBgTilemapBufferRect_ChangePalette(2, sContestResults->tilemapBuffers[2], 0, 0, 32, 4, palette);
}
@@ -1567,10 +1588,10 @@ static void SpriteCB_WinnerMonSlideIn(struct Sprite *sprite)
sprite->pos1.x -= delta >> 8;
sprite->data[1] += 0x600;
sprite->data[1] &= 0xFF;
- if (sprite->pos1.x < 120)
- sprite->pos1.x = 120;
+ if (sprite->pos1.x < DISPLAY_WIDTH / 2)
+ sprite->pos1.x = DISPLAY_WIDTH / 2;
- if (sprite->pos1.x == 120)
+ if (sprite->pos1.x == DISPLAY_WIDTH / 2)
{
sprite->callback = SpriteCallbackDummy;
sprite->data[1] = 0;
@@ -1628,7 +1649,7 @@ static void SpriteCB_Confetti(struct Sprite *sprite)
if (sContestResults->data->destroyConfetti)
sprite->invisible = TRUE;
- if (sprite->pos1.x > 248 || sprite->pos1.y > 116)
+ if (sprite->pos1.x > DISPLAY_WIDTH + 8 || sprite->pos1.y > 116)
{
DestroySprite(sprite);
sContestResults->data->confettiCount--;
@@ -2035,7 +2056,7 @@ void GiveMonContestRibbon(void)
void BufferContestantTrainerName(void)
{
StringCopy(gStringVar1, gContestMons[gSpecialVar_0x8006].trainerName);
- sub_81DB5AC(gStringVar1);
+ ConvertInternationalContestantName(gStringVar1);
}
void BufferContestantMonNickname(void)
@@ -2074,7 +2095,7 @@ void BufferContestWinnerTrainerName(void)
u8 i;
GET_CONTEST_WINNER_ID(i);
StringCopy(gStringVar3, gContestMons[i].trainerName);
- sub_81DB5AC(gStringVar3);
+ ConvertInternationalContestantName(gStringVar3);
}
void BufferContestWinnerMonName(void)
@@ -2257,6 +2278,10 @@ static void Task_LinkContest_WaitDisconnect(u8 taskId)
}
}
+/*
+ A section of contest script functions starts here
+*/
+
void SetContestTrainerGfxIds(void)
{
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
@@ -2265,27 +2290,27 @@ void SetContestTrainerGfxIds(void)
}
// Unused
-void sub_80F8814(void)
+void GetNpcContestantLocalId(void)
{
- u16 var1;
- u8 var0 = gSpecialVar_0x8005;
- switch (var0)
+ u16 localId;
+ u8 contestant = gSpecialVar_0x8005;
+ switch (contestant)
{
case 0:
- var1 = 3;
+ localId = 3;
break;
case 1:
- var1 = 4;
+ localId = 4;
break;
case 2:
- var1 = 5;
+ localId = 5;
break;
- default:
- var1 = 100;
+ default: // Invalid
+ localId = 100;
break;
}
- gSpecialVar_0x8004 = var1;
+ gSpecialVar_0x8004 = localId;
}
void BufferContestTrainerAndMonNames(void)
@@ -2296,26 +2321,26 @@ void BufferContestTrainerAndMonNames(void)
}
// Unused
-void DoesContestCategoryHaveWinner(void)
+void DoesContestCategoryHaveMuseumPainting(void)
{
int contestWinner;
switch (gSpecialVar_ContestCategory)
{
case CONTEST_CATEGORY_COOL:
- contestWinner = 8;
+ contestWinner = CONTEST_WINNER_MUSEUM_COOL - 1;
break;
case CONTEST_CATEGORY_BEAUTY:
- contestWinner = 9;
+ contestWinner = CONTEST_WINNER_MUSEUM_BEAUTY - 1;
break;
case CONTEST_CATEGORY_CUTE:
- contestWinner = 10;
+ contestWinner = CONTEST_WINNER_MUSEUM_CUTE - 1;
break;
case CONTEST_CATEGORY_SMART:
- contestWinner = 11;
+ contestWinner = CONTEST_WINNER_MUSEUM_SMART - 1;
break;
case CONTEST_CATEGORY_TOUGH:
default:
- contestWinner = 12;
+ contestWinner = CONTEST_WINNER_MUSEUM_TOUGH - 1;
break;
}
@@ -2327,7 +2352,7 @@ void DoesContestCategoryHaveWinner(void)
void SaveMuseumContestPainting(void)
{
- sub_80DEDA8(0xFF);
+ SaveContestWinner(CONTEST_SAVE_FOR_MUSEUM);
}
void ShouldReadyContestArtist(void)
@@ -2344,14 +2369,14 @@ void ShouldReadyContestArtist(void)
}
}
-u8 CountPlayerContestPaintings(void)
+u8 CountPlayerMuseumPaintings(void)
{
int i;
u8 count = 0;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < NUM_CONTEST_WINNERS - MUSEUM_CONTEST_WINNERS_START; i++)
{
- if (gSaveBlock1Ptr->contestWinners[8 + i].species)
+ if (gSaveBlock1Ptr->contestWinners[MUSEUM_CONTEST_WINNERS_START + i].species)
count++;
}
@@ -2359,19 +2384,21 @@ u8 CountPlayerContestPaintings(void)
}
// Unused
-void sub_80F8970(void)
+void GetContestantNamesAtRank(void)
{
s16 conditions[CONTESTANT_COUNT];
int i, j;
s16 condition;
- s8 var0;
- u8 var2;
- u8 r8;
- u8 r7;
+ s8 numAtCondition;
+ u8 contestantOffset;
+ u8 tieRank;
+ u8 rank;
+ // Get round 1 points
for (i = 0; i < CONTESTANT_COUNT; i++)
conditions[i] = gContestMonRound1Points[i];
+ // Sort round 1 points
for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
for (j = CONTESTANT_COUNT - 1; j > i; j--)
@@ -2384,58 +2411,65 @@ void sub_80F8970(void)
}
}
+ // Get round 1 points at specified rank
condition = conditions[gSpecialVar_0x8006];
- var0 = 0;
- r8 = 0;
+
+ // Count number of contestants with the same number of points
+ numAtCondition = 0;
+ tieRank = 0;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (conditions[i] == condition)
{
- var0++;
+ numAtCondition++;
if (i == gSpecialVar_0x8006)
- r8 = var0;
+ tieRank = numAtCondition;
}
}
+ // Get rank of first contestant with the same number of points
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (conditions[i] == condition)
break;
}
+ rank = i;
- r7 = i;
- var2 = r8;
+ // Get contestant id of player at rank (taking ties into account)
+ contestantOffset = tieRank;
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (condition == gContestMonRound1Points[i])
{
- if (var2 == 1)
+ if (contestantOffset == 1)
break;
- var2--;
+ contestantOffset--;
}
}
+ // Use contestant id to get names
StringCopy(gStringVar1, gContestMons[i].nickname);
StringCopy(gStringVar2, gContestMons[i].trainerName);
- sub_81DB5AC(gStringVar2);
+ ConvertInternationalContestantName(gStringVar2);
- if (var0 == 1)
- gSpecialVar_0x8006 = r7;
- else if (r8 == var0)
- gSpecialVar_0x8006 = r7;
+ // Return adjusted rank
+ if (numAtCondition == 1)
+ gSpecialVar_0x8006 = rank;
+ else if (tieRank == numAtCondition)
+ gSpecialVar_0x8006 = rank;
else
- gSpecialVar_0x8006 = r7 + 4;
+ gSpecialVar_0x8006 = rank + CONTESTANT_COUNT;
}
-static void ExitContestWinnerPainting(void)
+static void ExitContestPainting(void)
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
-void ShowContestWinnerPainting(void)
+void ShowContestPainting(void)
{
SetMainCallback2(CB2_ContestPainting);
- gMain.savedCallback = ExitContestWinnerPainting;
+ gMain.savedCallback = ExitContestPainting;
}
void SetLinkContestPlayerGfx(void)
diff --git a/src/data.c b/src/data.c
index 30672f7c4..5856d17b8 100644
--- a/src/data.c
+++ b/src/data.c
@@ -124,172 +124,178 @@ static const union AnimCmd sAnim_GeneralFrame3[] =
ANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF548[] =
+// Many of these affine anims seem to go unused, and
+// instead SetSpriteRotScale is used to manipulate
+// the battler sprites directly (for instance, in AnimTask_SwitchOutShrinkMon).
+// Those with explicit indexes are referenced elsewhere.
+
+static const union AffineAnimCmd sAffineAnim_Battler_Normal[] =
{
- AFFINEANIMCMD_FRAME(0x0100, 0x0100, 0x00, 0x00),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF558[] =
+static const union AffineAnimCmd sAffineAnim_Battler_Flipped[] =
{
- AFFINEANIMCMD_FRAME(0xff00, 0x0100, 0x00, 0x00),
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF568[] =
+static const union AffineAnimCmd sAffineAnim_Battler_Emerge[] =
{
- AFFINEANIMCMD_FRAME(0x0028, 0x0028, 0x00, 0x00),
- AFFINEANIMCMD_FRAME(0x0012, 0x0012, 0x00, 0x0c),
+ AFFINEANIMCMD_FRAME(0x28, 0x28, 0, 0),
+ AFFINEANIMCMD_FRAME(0x12, 0x12, 0, 12),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF580[] =
+static const union AffineAnimCmd sAffineAnim_Battler_Return[] =
{
- AFFINEANIMCMD_FRAME(0xfffe, 0xfffe, 0x00, 0x12),
- AFFINEANIMCMD_FRAME(0xfff0, 0xfff0, 0x00, 0x0f),
+ AFFINEANIMCMD_FRAME( -0x2, -0x2, 0, 18),
+ AFFINEANIMCMD_FRAME(-0x10, -0x10, 0, 15),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF598[] =
+static const union AffineAnimCmd sAffineAnim_Battler_HorizontalSquishLoop[] =
{
- AFFINEANIMCMD_FRAME(0x00a0, 0x0100, 0x00, 0x00),
- AFFINEANIMCMD_FRAME(0x0004, 0x0000, 0x00, 0x08),
- AFFINEANIMCMD_FRAME(0xfffc, 0x0000, 0x00, 0x08),
+ AFFINEANIMCMD_FRAME(0xA0, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME( 0x4, 0x0, 0, 8),
+ AFFINEANIMCMD_FRAME(-0x4, 0x0, 0, 8),
AFFINEANIMCMD_JUMP(1),
};
-static const union AffineAnimCmd gUnknown_082FF5B8[] =
+static const union AffineAnimCmd sAffineAnim_Battler_Grow[] =
{
- AFFINEANIMCMD_FRAME(0x0002, 0x0002, 0x00, 0x14),
+ AFFINEANIMCMD_FRAME(0x2, 0x2, 0, 20),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF5C8[] =
+static const union AffineAnimCmd sAffineAnim_Battler_Shrink[] =
{
- AFFINEANIMCMD_FRAME(0xfffe, 0xfffe, 0x00, 0x14),
+ AFFINEANIMCMD_FRAME(-0x2, -0x2, 0, 20),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF5D8[] =
+static const union AffineAnimCmd sAffineAnim_Battler_BigToSmall[] =
{
- AFFINEANIMCMD_FRAME(0x0100, 0x0100, 0x00, 0000),
- AFFINEANIMCMD_FRAME(0xfff0, 0xfff0, 0x00, 0x09),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x10, -0x10, 0, 9),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF5F0[] =
+static const union AffineAnimCmd sAffineAnim_Battler_GrowLarge[] =
{
- AFFINEANIMCMD_FRAME(0x0004, 0x0004, 0x00, 0x3f),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 63),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF600[] =
+static const union AffineAnimCmd sAffineAnim_Battler_TipRight[] =
{
- AFFINEANIMCMD_FRAME(0x0000, 0x0000, 0xfd, 0x05),
- AFFINEANIMCMD_FRAME(0x0000, 0x0000, 0x03, 0x05),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -3, 5),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 3, 5),
AFFINEANIMCMD_END,
};
const union AffineAnimCmd *const gAffineAnims_BattleSpritePlayerSide[] =
{
- gUnknown_082FF548,
- gUnknown_082FF568,
- gUnknown_082FF580,
- gUnknown_082FF598,
- gUnknown_082FF5B8,
- gUnknown_082FF5C8,
- gUnknown_082FF5F0,
- gUnknown_082FF600,
- gUnknown_082FF5D8,
+ [BATTLER_AFFINE_NORMAL] = sAffineAnim_Battler_Normal,
+ [BATTLER_AFFINE_EMERGE] = sAffineAnim_Battler_Emerge,
+ [BATTLER_AFFINE_RETURN] = sAffineAnim_Battler_Return,
+ sAffineAnim_Battler_HorizontalSquishLoop,
+ sAffineAnim_Battler_Grow,
+ sAffineAnim_Battler_Shrink,
+ sAffineAnim_Battler_GrowLarge,
+ sAffineAnim_Battler_TipRight,
+ sAffineAnim_Battler_BigToSmall,
};
-static const union AffineAnimCmd gUnknown_082FF63C[] =
+static const union AffineAnimCmd sAffineAnim_Battler_SpinShrink[] =
{
- AFFINEANIMCMD_FRAME(0xfffc, 0xfffc, 0x04, 0x3f),
+ AFFINEANIMCMD_FRAME(-0x4, -0x4, 4, 63),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF64C[] =
+static const union AffineAnimCmd sAffineAnim_Battler_TipLeft[] =
{
- AFFINEANIMCMD_FRAME(0x0000, 0x0000, 0x03, 0x05),
- AFFINEANIMCMD_FRAME(0x0000, 0x0000, 0xfd, 0x05),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 3, 5),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -3, 5),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF664[] =
+static const union AffineAnimCmd sAffineAnim_Battler_RotateUpAndBack[] =
{
- AFFINEANIMCMD_FRAME(0x0000, 0x0000, 0xfb, 0x14),
- AFFINEANIMCMD_FRAME(0x0000, 0x0000, 0x00, 0x14),
- AFFINEANIMCMD_FRAME(0x0000, 0x0000, 0x05, 0x14),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -5, 20),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 20),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_082FF684[] =
+static const union AffineAnimCmd sAffineAnim_Battler_Spin[] =
{
- AFFINEANIMCMD_FRAME(0x0000, 0x0000, 0x09, 0x6e),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 9, 110),
AFFINEANIMCMD_END,
};
const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[] =
{
- gUnknown_082FF548,
- gUnknown_082FF568,
- gUnknown_082FF580,
- gUnknown_082FF598,
- gUnknown_082FF5B8,
- gUnknown_082FF5C8,
- gUnknown_082FF63C,
- gUnknown_082FF64C,
- gUnknown_082FF664,
- gUnknown_082FF5D8,
- gUnknown_082FF684,
+ [BATTLER_AFFINE_NORMAL] = sAffineAnim_Battler_Normal,
+ [BATTLER_AFFINE_EMERGE] = sAffineAnim_Battler_Emerge,
+ [BATTLER_AFFINE_RETURN] = sAffineAnim_Battler_Return,
+ sAffineAnim_Battler_HorizontalSquishLoop,
+ sAffineAnim_Battler_Grow,
+ sAffineAnim_Battler_Shrink,
+ sAffineAnim_Battler_SpinShrink,
+ sAffineAnim_Battler_TipLeft,
+ sAffineAnim_Battler_RotateUpAndBack,
+ sAffineAnim_Battler_BigToSmall,
+ sAffineAnim_Battler_Spin,
};
-const union AffineAnimCmd *const gUnknown_082FF6C0[] =
+const union AffineAnimCmd *const gAffineAnims_BattleSpriteContest[] =
{
- gUnknown_082FF558,
- gUnknown_082FF568,
- gUnknown_082FF580,
- gUnknown_082FF598,
- gUnknown_082FF5B8,
- gUnknown_082FF5C8,
- gUnknown_082FF63C,
- gUnknown_082FF64C,
- gUnknown_082FF664,
- gUnknown_082FF5D8,
- gUnknown_082FF684,
+ [BATTLER_AFFINE_NORMAL] = sAffineAnim_Battler_Flipped,
+ [BATTLER_AFFINE_EMERGE] = sAffineAnim_Battler_Emerge,
+ [BATTLER_AFFINE_RETURN] = sAffineAnim_Battler_Return,
+ sAffineAnim_Battler_HorizontalSquishLoop,
+ sAffineAnim_Battler_Grow,
+ sAffineAnim_Battler_Shrink,
+ sAffineAnim_Battler_SpinShrink,
+ sAffineAnim_Battler_TipLeft,
+ sAffineAnim_Battler_RotateUpAndBack,
+ sAffineAnim_Battler_BigToSmall,
+ sAffineAnim_Battler_Spin,
};
-static const union AnimCmd gUnknown_082FF6EC[] =
+
+static const union AnimCmd sAnim_MonPic_0[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_END,
};
-static const union AnimCmd gUnknown_082FF6F4[] =
+static const union AnimCmd sAnim_MonPic_1[] =
{
ANIMCMD_FRAME(1, 0),
ANIMCMD_END,
};
-static const union AnimCmd gUnknown_082FF6FC[] =
+static const union AnimCmd sAnim_MonPic_2[] =
{
ANIMCMD_FRAME(2, 0),
ANIMCMD_END,
};
-static const union AnimCmd gUnknown_082FF704[] =
+static const union AnimCmd sAnim_MonPic_3[] =
{
ANIMCMD_FRAME(3, 0),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_082FF70C[] =
+const union AnimCmd *const gAnims_MonPic[] =
{
- gUnknown_082FF6EC,
- gUnknown_082FF6F4,
- gUnknown_082FF6FC,
- gUnknown_082FF704,
+ sAnim_MonPic_0,
+ sAnim_MonPic_1,
+ sAnim_MonPic_2,
+ sAnim_MonPic_3,
};
#define SPECIES_SPRITE(species, sprite) [SPECIES_##species] = {sprite, MON_PIC_SIZE, SPECIES_##species}
@@ -313,120 +319,7 @@ const union AnimCmd *const gUnknown_082FF70C[] =
#include "data/pokemon_graphics/enemy_mon_elevation.h"
#include "data/pokemon_graphics/front_pic_anims.h"
#include "data/pokemon_graphics/front_pic_table.h"
-
-static const u32 sUnused[] =
-{
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000088, 0x00000888, 0x00000888, 0x00000886,
- 0x00000888, 0x00000886, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000886, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000886, 0x00000886,
- 0x00000888, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000888, 0x00000886, 0x00000888,
- 0x00000888, 0x00000888, 0x00000886, 0x00000886,
- 0x00000888, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000886, 0x00000886, 0x00000088,
- 0x00000886, 0x00000886, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000886, 0x00000888, 0x00000088, 0x00000088,
- 0x00000888, 0x00000888, 0x00000888, 0x00000886,
- 0x00000888, 0x00000888, 0x00000888, 0x00000886,
- 0x00000886, 0x00000886, 0x00000886, 0x00000886,
- 0x00000886, 0x00000886, 0x00000888, 0x00000888,
- 0x00000886, 0x00000886, 0x00000886, 0x00000886,
- 0x00000886, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000886, 0x00000886, 0x00000888,
- 0x00000886, 0x00000886, 0x00000888, 0x00000888,
- 0x00000088, 0x00000088, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000886, 0x00000886, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000088, 0x00000886,
- 0x00000888, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000888, 0x00000886, 0x00000888,
- 0x00000088, 0x00000088, 0x00000886, 0x00000886,
- 0x00000088, 0x00000088, 0x00000888, 0x00000886,
- 0x00000886, 0x00000888, 0x00000888, 0x00000088,
- 0x00000888, 0x00000886, 0x00000886, 0x00000888,
- 0x00000886, 0x00000888, 0x00000888, 0x00000886,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000088, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000088, 0x00000888, 0x00000888, 0x00000886,
- 0x00000886, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000886,
- 0x00000888, 0x00000886, 0x00000088, 0x00000088,
- 0x00000088, 0x00000888, 0x00000088, 0x00000888,
- 0x00000888, 0x00000088, 0x00000088, 0x00000888,
- 0x00000886, 0x00000888, 0x00000886, 0x00000886,
- 0x00000886, 0x00000888, 0x00000888, 0x00000888,
- 0x00000088, 0x00000888, 0x00000888, 0x00000888,
- 0x00000088, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000088, 0x00000088,
- 0x00000886, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000088, 0x00000888,
- 0x00000886, 0x00000888, 0x00000088, 0x00000088,
- 0x00000888, 0x00000888, 0x00000088, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000088,
- 0x00000888, 0x00000888, 0x00000088, 0x00000088,
- 0x00000088, 0x00000888, 0x00000088, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000886, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000886, 0x00000886, 0x00000886,
- 0x00000088, 0x00000088, 0x00000088, 0x00000886,
- 0x00000088, 0x00000886, 0x00000886, 0x00000886,
- 0x00000088, 0x00000886, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000886,
- 0x00000886, 0x00000886, 0x00000888, 0x00000888,
- 0x00000886, 0x00000886, 0x00000886, 0x00000886,
- 0x00000088, 0x00000088, 0x00000886, 0x00000886,
- 0x00001882, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000886, 0x00000886, 0x00000886,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000886, 0x00000088, 0x00000886, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000886, 0x00000886,
- 0x00000088, 0x00000088, 0x00000088, 0x00000886,
- 0x00000886, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000886, 0x00000088,
- 0x00000088, 0x00000886, 0x00000886, 0x00000886,
- 0x00000886, 0x00000886, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000886,
- 0x00000886, 0x00000886, 0x00000886, 0x00000088,
- 0x00000886, 0x00000088, 0x00000886, 0x00000886,
- 0x00000886, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000886, 0x00000886,
- 0x00000886, 0x00000888, 0x00000886, 0x00000886,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000886, 0x00000886, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000088, 0x00000088, 0x00000088,
- 0x00000088, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
- 0x00000888, 0x00000888, 0x00000888, 0x00000888,
-};
+#include "data/pokemon_graphics/unknown_table.h"
#include "data/trainer_parties.h"
#include "data/text/trainer_class_names.h"
diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h
index 127457bbe..b5466904b 100644
--- a/src/data/contest_opponents.h
+++ b/src/data/contest_opponents.h
@@ -138,7 +138,7 @@
const struct ContestWinner gDefaultContestWinners[] =
{
- {
+ [CONTEST_WINNER_HALL_1 - 1] = {
.personality = 0,
.trainerId = 0xFFFF,
.species = SPECIES_ELECTRIKE,
@@ -147,7 +147,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("EZRA"),
.contestRank = CONTEST_RANK_NORMAL
},
- {
+ [CONTEST_WINNER_HALL_2 - 1] = {
.personality = 0,
.trainerId = 0xFFFF,
.species = SPECIES_TROPIUS,
@@ -156,7 +156,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("ALLAN"),
.contestRank = CONTEST_RANK_HYPER
},
- {
+ [CONTEST_WINNER_HALL_3 - 1] = {
.personality = 0,
.trainerId = 0xFFFF,
.species = SPECIES_XATU,
@@ -165,7 +165,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("JULIET"),
.contestRank = CONTEST_RANK_NORMAL
},
- {
+ [CONTEST_WINNER_HALL_4 - 1] = {
.personality = 0,
.trainerId = 0xFFFF,
.species = SPECIES_PLUSLE,
@@ -174,7 +174,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("BAILY"),
.contestRank = CONTEST_RANK_MASTER
},
- {
+ [CONTEST_WINNER_HALL_5 - 1] = {
.personality = 0,
.trainerId = 0xFFFF,
.species = SPECIES_SHUPPET,
@@ -183,7 +183,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("MELANY"),
.contestRank = CONTEST_RANK_SUPER
},
- {
+ [CONTEST_WINNER_HALL_6 - 1] = {
.personality = 0,
.trainerId = 0xFFFF,
.species = SPECIES_ZANGOOSE,
@@ -192,7 +192,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("HANA"),
.contestRank = CONTEST_RANK_HYPER
},
- {
+ [CONTEST_WINNER_HALL_UNUSED_1 - 1] = {
.personality = 0,
.trainerId = 0xFFFF,
.species = SPECIES_LOUDRED,
@@ -201,7 +201,7 @@ const struct ContestWinner gDefaultContestWinners[] =
.trainerName = _("BRYANT"),
.contestRank = CONTEST_RANK_HYPER
},
- {
+ [CONTEST_WINNER_HALL_UNUSED_2 - 1] = {
.personality = 0,
.trainerId = 0xFFFF,
.species = SPECIES_DELCATTY,
diff --git a/src/data/pokemon_graphics/unknown_table.h b/src/data/pokemon_graphics/unknown_table.h
new file mode 100644
index 000000000..737b79c1b
--- /dev/null
+++ b/src/data/pokemon_graphics/unknown_table.h
@@ -0,0 +1,444 @@
+// Unknown and unused
+static const u32 sUnused[] =
+{
+ [SPECIES_NONE] = 0x888,
+ [SPECIES_BULBASAUR] = 0x888,
+ [SPECIES_IVYSAUR] = 0x888,
+ [SPECIES_VENUSAUR] = 0x888,
+ [SPECIES_CHARMANDER] = 0x88,
+ [SPECIES_CHARMELEON] = 0x888,
+ [SPECIES_CHARIZARD] = 0x888,
+ [SPECIES_SQUIRTLE] = 0x886,
+ [SPECIES_WARTORTLE] = 0x888,
+ [SPECIES_BLASTOISE] = 0x886,
+ [SPECIES_CATERPIE] = 0x888,
+ [SPECIES_METAPOD] = 0x888,
+ [SPECIES_BUTTERFREE] = 0x888,
+ [SPECIES_WEEDLE] = 0x888,
+ [SPECIES_KAKUNA] = 0x888,
+ [SPECIES_BEEDRILL] = 0x888,
+ [SPECIES_PIDGEY] = 0x886,
+ [SPECIES_PIDGEOTTO] = 0x888,
+ [SPECIES_PIDGEOT] = 0x888,
+ [SPECIES_RATTATA] = 0x888,
+ [SPECIES_RATICATE] = 0x888,
+ [SPECIES_SPEAROW] = 0x888,
+ [SPECIES_FEAROW] = 0x886,
+ [SPECIES_EKANS] = 0x886,
+ [SPECIES_ARBOK] = 0x888,
+ [SPECIES_PIKACHU] = 0x88,
+ [SPECIES_RAICHU] = 0x88,
+ [SPECIES_SANDSHREW] = 0x88,
+ [SPECIES_SANDSLASH] = 0x88,
+ [SPECIES_NIDORAN_F] = 0x888,
+ [SPECIES_NIDORINA] = 0x886,
+ [SPECIES_NIDOQUEEN] = 0x888,
+ [SPECIES_NIDORAN_M] = 0x888,
+ [SPECIES_NIDORINO] = 0x888,
+ [SPECIES_NIDOKING] = 0x886,
+ [SPECIES_CLEFAIRY] = 0x886,
+ [SPECIES_CLEFABLE] = 0x888,
+ [SPECIES_VULPIX] = 0x88,
+ [SPECIES_NINETALES] = 0x88,
+ [SPECIES_JIGGLYPUFF] = 0x88,
+ [SPECIES_WIGGLYTUFF] = 0x88,
+ [SPECIES_ZUBAT] = 0x886,
+ [SPECIES_GOLBAT] = 0x886,
+ [SPECIES_ODDISH] = 0x88,
+ [SPECIES_GLOOM] = 0x886,
+ [SPECIES_VILEPLUME] = 0x886,
+ [SPECIES_PARAS] = 0x888,
+ [SPECIES_PARASECT] = 0x888,
+ [SPECIES_VENONAT] = 0x888,
+ [SPECIES_VENOMOTH] = 0x888,
+ [SPECIES_DIGLETT] = 0x888,
+ [SPECIES_DUGTRIO] = 0x888,
+ [SPECIES_MEOWTH] = 0x886,
+ [SPECIES_PERSIAN] = 0x888,
+ [SPECIES_PSYDUCK] = 0x88,
+ [SPECIES_GOLDUCK] = 0x88,
+ [SPECIES_MANKEY] = 0x888,
+ [SPECIES_PRIMEAPE] = 0x888,
+ [SPECIES_GROWLITHE] = 0x888,
+ [SPECIES_ARCANINE] = 0x886,
+ [SPECIES_POLIWAG] = 0x888,
+ [SPECIES_POLIWHIRL] = 0x888,
+ [SPECIES_POLIWRATH] = 0x888,
+ [SPECIES_ABRA] = 0x886,
+ [SPECIES_KADABRA] = 0x886,
+ [SPECIES_ALAKAZAM] = 0x886,
+ [SPECIES_MACHOP] = 0x886,
+ [SPECIES_MACHOKE] = 0x886,
+ [SPECIES_MACHAMP] = 0x886,
+ [SPECIES_BELLSPROUT] = 0x886,
+ [SPECIES_WEEPINBELL] = 0x888,
+ [SPECIES_VICTREEBEL] = 0x888,
+ [SPECIES_TENTACOOL] = 0x886,
+ [SPECIES_TENTACRUEL] = 0x886,
+ [SPECIES_GEODUDE] = 0x886,
+ [SPECIES_GRAVELER] = 0x886,
+ [SPECIES_GOLEM] = 0x886,
+ [SPECIES_PONYTA] = 0x888,
+ [SPECIES_RAPIDASH] = 0x888,
+ [SPECIES_SLOWPOKE] = 0x888,
+ [SPECIES_SLOWBRO] = 0x888,
+ [SPECIES_MAGNEMITE] = 0x886,
+ [SPECIES_MAGNETON] = 0x886,
+ [SPECIES_FARFETCHD] = 0x888,
+ [SPECIES_DODUO] = 0x886,
+ [SPECIES_DODRIO] = 0x886,
+ [SPECIES_SEEL] = 0x888,
+ [SPECIES_DEWGONG] = 0x888,
+ [SPECIES_GRIMER] = 0x88,
+ [SPECIES_MUK] = 0x88,
+ [SPECIES_SHELLDER] = 0x888,
+ [SPECIES_CLOYSTER] = 0x888,
+ [SPECIES_GASTLY] = 0x888,
+ [SPECIES_HAUNTER] = 0x888,
+ [SPECIES_GENGAR] = 0x888,
+ [SPECIES_ONIX] = 0x888,
+ [SPECIES_DROWZEE] = 0x888,
+ [SPECIES_HYPNO] = 0x888,
+ [SPECIES_KRABBY] = 0x888,
+ [SPECIES_KINGLER] = 0x888,
+ [SPECIES_VOLTORB] = 0x886,
+ [SPECIES_ELECTRODE] = 0x886,
+ [SPECIES_EXEGGCUTE] = 0x888,
+ [SPECIES_EXEGGUTOR] = 0x888,
+ [SPECIES_CUBONE] = 0x888,
+ [SPECIES_MAROWAK] = 0x888,
+ [SPECIES_HITMONLEE] = 0x88,
+ [SPECIES_HITMONCHAN] = 0x886,
+ [SPECIES_LICKITUNG] = 0x888,
+ [SPECIES_KOFFING] = 0x88,
+ [SPECIES_WEEZING] = 0x88,
+ [SPECIES_RHYHORN] = 0x88,
+ [SPECIES_RHYDON] = 0x88,
+ [SPECIES_CHANSEY] = 0x888,
+ [SPECIES_TANGELA] = 0x886,
+ [SPECIES_KANGASKHAN] = 0x888,
+ [SPECIES_HORSEA] = 0x88,
+ [SPECIES_SEADRA] = 0x88,
+ [SPECIES_GOLDEEN] = 0x886,
+ [SPECIES_SEAKING] = 0x886,
+ [SPECIES_STARYU] = 0x88,
+ [SPECIES_STARMIE] = 0x88,
+ [SPECIES_MR_MIME] = 0x888,
+ [SPECIES_SCYTHER] = 0x886,
+ [SPECIES_JYNX] = 0x886,
+ [SPECIES_ELECTABUZZ] = 0x888,
+ [SPECIES_MAGMAR] = 0x888,
+ [SPECIES_PINSIR] = 0x88,
+ [SPECIES_TAUROS] = 0x888,
+ [SPECIES_MAGIKARP] = 0x886,
+ [SPECIES_GYARADOS] = 0x886,
+ [SPECIES_LAPRAS] = 0x888,
+ [SPECIES_DITTO] = 0x886,
+ [SPECIES_EEVEE] = 0x888,
+ [SPECIES_VAPOREON] = 0x888,
+ [SPECIES_JOLTEON] = 0x886,
+ [SPECIES_FLAREON] = 0x888,
+ [SPECIES_PORYGON] = 0x888,
+ [SPECIES_OMANYTE] = 0x888,
+ [SPECIES_OMASTAR] = 0x888,
+ [SPECIES_KABUTO] = 0x888,
+ [SPECIES_KABUTOPS] = 0x888,
+ [SPECIES_AERODACTYL] = 0x888,
+ [SPECIES_SNORLAX] = 0x888,
+ [SPECIES_ARTICUNO] = 0x888,
+ [SPECIES_ZAPDOS] = 0x888,
+ [SPECIES_MOLTRES] = 0x888,
+ [SPECIES_DRATINI] = 0x888,
+ [SPECIES_DRAGONAIR] = 0x888,
+ [SPECIES_DRAGONITE] = 0x888,
+ [SPECIES_MEWTWO] = 0x88,
+ [SPECIES_MEW] = 0x888,
+ [SPECIES_CHIKORITA] = 0x888,
+ [SPECIES_BAYLEEF] = 0x888,
+ [SPECIES_MEGANIUM] = 0x888,
+ [SPECIES_CYNDAQUIL] = 0x888,
+ [SPECIES_QUILAVA] = 0x88,
+ [SPECIES_TYPHLOSION] = 0x888,
+ [SPECIES_TOTODILE] = 0x888,
+ [SPECIES_CROCONAW] = 0x886,
+ [SPECIES_FERALIGATR] = 0x886,
+ [SPECIES_SENTRET] = 0x888,
+ [SPECIES_FURRET] = 0x888,
+ [SPECIES_HOOTHOOT] = 0x888,
+ [SPECIES_NOCTOWL] = 0x888,
+ [SPECIES_LEDYBA] = 0x888,
+ [SPECIES_LEDIAN] = 0x888,
+ [SPECIES_SPINARAK] = 0x886,
+ [SPECIES_ARIADOS] = 0x888,
+ [SPECIES_CROBAT] = 0x886,
+ [SPECIES_CHINCHOU] = 0x88,
+ [SPECIES_LANTURN] = 0x88,
+ [SPECIES_PICHU] = 0x88,
+ [SPECIES_CLEFFA] = 0x888,
+ [SPECIES_IGGLYBUFF] = 0x88,
+ [SPECIES_TOGEPI] = 0x888,
+ [SPECIES_TOGETIC] = 0x888,
+ [SPECIES_NATU] = 0x88,
+ [SPECIES_XATU] = 0x88,
+ [SPECIES_MAREEP] = 0x888,
+ [SPECIES_FLAAFFY] = 0x886,
+ [SPECIES_AMPHAROS] = 0x888,
+ [SPECIES_BELLOSSOM] = 0x886,
+ [SPECIES_MARILL] = 0x886,
+ [SPECIES_AZUMARILL] = 0x886,
+ [SPECIES_SUDOWOODO] = 0x888,
+ [SPECIES_POLITOED] = 0x888,
+ [SPECIES_HOPPIP] = 0x888,
+ [SPECIES_SKIPLOOM] = 0x88,
+ [SPECIES_JUMPLUFF] = 0x888,
+ [SPECIES_AIPOM] = 0x888,
+ [SPECIES_SUNKERN] = 0x888,
+ [SPECIES_SUNFLORA] = 0x88,
+ [SPECIES_YANMA] = 0x888,
+ [SPECIES_WOOPER] = 0x888,
+ [SPECIES_QUAGSIRE] = 0x888,
+ [SPECIES_ESPEON] = 0x888,
+ [SPECIES_UMBREON] = 0x888,
+ [SPECIES_MURKROW] = 0x888,
+ [SPECIES_SLOWKING] = 0x888,
+ [SPECIES_MISDREAVUS] = 0x888,
+ [SPECIES_UNOWN] = 0x888,
+ [SPECIES_WOBBUFFET] = 0x88,
+ [SPECIES_GIRAFARIG] = 0x88,
+ [SPECIES_PINECO] = 0x886,
+ [SPECIES_FORRETRESS] = 0x888,
+ [SPECIES_DUNSPARCE] = 0x888,
+ [SPECIES_GLIGAR] = 0x888,
+ [SPECIES_STEELIX] = 0x888,
+ [SPECIES_SNUBBULL] = 0x888,
+ [SPECIES_GRANBULL] = 0x888,
+ [SPECIES_QWILFISH] = 0x888,
+ [SPECIES_SCIZOR] = 0x888,
+ [SPECIES_SHUCKLE] = 0x888,
+ [SPECIES_HERACROSS] = 0x88,
+ [SPECIES_SNEASEL] = 0x888,
+ [SPECIES_TEDDIURSA] = 0x886,
+ [SPECIES_URSARING] = 0x888,
+ [SPECIES_SLUGMA] = 0x88,
+ [SPECIES_MAGCARGO] = 0x88,
+ [SPECIES_SWINUB] = 0x888,
+ [SPECIES_PILOSWINE] = 0x888,
+ [SPECIES_CORSOLA] = 0x88,
+ [SPECIES_REMORAID] = 0x888,
+ [SPECIES_OCTILLERY] = 0x888,
+ [SPECIES_DELIBIRD] = 0x888,
+ [SPECIES_MANTINE] = 0x888,
+ [SPECIES_SKARMORY] = 0x88,
+ [SPECIES_HOUNDOUR] = 0x888,
+ [SPECIES_HOUNDOOM] = 0x888,
+ [SPECIES_KINGDRA] = 0x88,
+ [SPECIES_PHANPY] = 0x88,
+ [SPECIES_DONPHAN] = 0x88,
+ [SPECIES_PORYGON2] = 0x888,
+ [SPECIES_STANTLER] = 0x88,
+ [SPECIES_SMEARGLE] = 0x888,
+ [SPECIES_TYROGUE] = 0x888,
+ [SPECIES_HITMONTOP] = 0x888,
+ [SPECIES_SMOOCHUM] = 0x888,
+ [SPECIES_ELEKID] = 0x888,
+ [SPECIES_MAGBY] = 0x888,
+ [SPECIES_MILTANK] = 0x888,
+ [SPECIES_BLISSEY] = 0x888,
+ [SPECIES_RAIKOU] = 0x888,
+ [SPECIES_ENTEI] = 0x888,
+ [SPECIES_SUICUNE] = 0x888,
+ [SPECIES_LARVITAR] = 0x888,
+ [SPECIES_PUPITAR] = 0x888,
+ [SPECIES_TYRANITAR] = 0x888,
+ [SPECIES_LUGIA] = 0x886,
+ [SPECIES_HO_OH] = 0x888,
+ [SPECIES_CELEBI] = 0x888,
+ [SPECIES_OLD_UNOWN_B] = 0x888,
+ [SPECIES_OLD_UNOWN_C] = 0x888,
+ [SPECIES_OLD_UNOWN_D] = 0x888,
+ [SPECIES_OLD_UNOWN_E] = 0x888,
+ [SPECIES_OLD_UNOWN_F] = 0x888,
+ [SPECIES_OLD_UNOWN_G] = 0x888,
+ [SPECIES_OLD_UNOWN_H] = 0x888,
+ [SPECIES_OLD_UNOWN_I] = 0x888,
+ [SPECIES_OLD_UNOWN_J] = 0x888,
+ [SPECIES_OLD_UNOWN_K] = 0x888,
+ [SPECIES_OLD_UNOWN_L] = 0x888,
+ [SPECIES_OLD_UNOWN_M] = 0x888,
+ [SPECIES_OLD_UNOWN_N] = 0x888,
+ [SPECIES_OLD_UNOWN_O] = 0x888,
+ [SPECIES_OLD_UNOWN_P] = 0x888,
+ [SPECIES_OLD_UNOWN_Q] = 0x888,
+ [SPECIES_OLD_UNOWN_R] = 0x888,
+ [SPECIES_OLD_UNOWN_S] = 0x888,
+ [SPECIES_OLD_UNOWN_T] = 0x888,
+ [SPECIES_OLD_UNOWN_U] = 0x888,
+ [SPECIES_OLD_UNOWN_V] = 0x888,
+ [SPECIES_OLD_UNOWN_W] = 0x888,
+ [SPECIES_OLD_UNOWN_X] = 0x888,
+ [SPECIES_OLD_UNOWN_Y] = 0x888,
+ [SPECIES_OLD_UNOWN_Z] = 0x888,
+ [SPECIES_TREECKO] = 0x886,
+ [SPECIES_GROVYLE] = 0x886,
+ [SPECIES_SCEPTILE] = 0x886,
+ [SPECIES_TORCHIC] = 0x88,
+ [SPECIES_COMBUSKEN] = 0x88,
+ [SPECIES_BLAZIKEN] = 0x88,
+ [SPECIES_MUDKIP] = 0x886,
+ [SPECIES_MARSHTOMP] = 0x88,
+ [SPECIES_SWAMPERT] = 0x886,
+ [SPECIES_POOCHYENA] = 0x886,
+ [SPECIES_MIGHTYENA] = 0x886,
+ [SPECIES_ZIGZAGOON] = 0x88,
+ [SPECIES_LINOONE] = 0x886,
+ [SPECIES_WURMPLE] = 0x88,
+ [SPECIES_SILCOON] = 0x88,
+ [SPECIES_BEAUTIFLY] = 0x88,
+ [SPECIES_CASCOON] = 0x88,
+ [SPECIES_DUSTOX] = 0x88,
+ [SPECIES_LOTAD] = 0x886,
+ [SPECIES_LOMBRE] = 0x886,
+ [SPECIES_LUDICOLO] = 0x886,
+ [SPECIES_SEEDOT] = 0x888,
+ [SPECIES_NUZLEAF] = 0x888,
+ [SPECIES_SHIFTRY] = 0x886,
+ [SPECIES_NINCADA] = 0x886,
+ [SPECIES_NINJASK] = 0x886,
+ [SPECIES_SHEDINJA] = 0x886,
+ [SPECIES_TAILLOW] = 0x88,
+ [SPECIES_SWELLOW] = 0x88,
+ [SPECIES_SHROOMISH] = 0x886,
+ [SPECIES_BRELOOM] = 0x886,
+ [SPECIES_SPINDA] = 0x1882,
+ [SPECIES_WINGULL] = 0x88,
+ [SPECIES_PELIPPER] = 0x88,
+ [SPECIES_SURSKIT] = 0x88,
+ [SPECIES_MASQUERAIN] = 0x88,
+ [SPECIES_WAILMER] = 0x886,
+ [SPECIES_WAILORD] = 0x886,
+ [SPECIES_SKITTY] = 0x886,
+ [SPECIES_DELCATTY] = 0x88,
+ [SPECIES_KECLEON] = 0x88,
+ [SPECIES_BALTOY] = 0x88,
+ [SPECIES_CLAYDOL] = 0x88,
+ [SPECIES_NOSEPASS] = 0x886,
+ [SPECIES_TORKOAL] = 0x88,
+ [SPECIES_SABLEYE] = 0x886,
+ [SPECIES_BARBOACH] = 0x88,
+ [SPECIES_WHISCASH] = 0x88,
+ [SPECIES_LUVDISC] = 0x88,
+ [SPECIES_CORPHISH] = 0x88,
+ [SPECIES_CRAWDAUNT] = 0x88,
+ [SPECIES_FEEBAS] = 0x88,
+ [SPECIES_MILOTIC] = 0x88,
+ [SPECIES_CARVANHA] = 0x886,
+ [SPECIES_SHARPEDO] = 0x886,
+ [SPECIES_TRAPINCH] = 0x88,
+ [SPECIES_VIBRAVA] = 0x88,
+ [SPECIES_FLYGON] = 0x88,
+ [SPECIES_MAKUHITA] = 0x886,
+ [SPECIES_HARIYAMA] = 0x886,
+ [SPECIES_ELECTRIKE] = 0x88,
+ [SPECIES_MANECTRIC] = 0x88,
+ [SPECIES_NUMEL] = 0x88,
+ [SPECIES_CAMERUPT] = 0x88,
+ [SPECIES_SPHEAL] = 0x88,
+ [SPECIES_SEALEO] = 0x88,
+ [SPECIES_WALREIN] = 0x88,
+ [SPECIES_CACNEA] = 0x88,
+ [SPECIES_CACTURNE] = 0x88,
+ [SPECIES_SNORUNT] = 0x88,
+ [SPECIES_GLALIE] = 0x88,
+ [SPECIES_LUNATONE] = 0x88,
+ [SPECIES_SOLROCK] = 0x88,
+ [SPECIES_AZURILL] = 0x886,
+ [SPECIES_SPOINK] = 0x88,
+ [SPECIES_GRUMPIG] = 0x88,
+ [SPECIES_PLUSLE] = 0x886,
+ [SPECIES_MINUN] = 0x886,
+ [SPECIES_MAWILE] = 0x886,
+ [SPECIES_MEDITITE] = 0x886,
+ [SPECIES_MEDICHAM] = 0x886,
+ [SPECIES_SWABLU] = 0x88,
+ [SPECIES_ALTARIA] = 0x88,
+ [SPECIES_WYNAUT] = 0x88,
+ [SPECIES_DUSKULL] = 0x88,
+ [SPECIES_DUSCLOPS] = 0x88,
+ [SPECIES_ROSELIA] = 0x886,
+ [SPECIES_SLAKOTH] = 0x886,
+ [SPECIES_VIGOROTH] = 0x886,
+ [SPECIES_SLAKING] = 0x886,
+ [SPECIES_GULPIN] = 0x88,
+ [SPECIES_SWALOT] = 0x886,
+ [SPECIES_TROPIUS] = 0x88,
+ [SPECIES_WHISMUR] = 0x886,
+ [SPECIES_LOUDRED] = 0x886,
+ [SPECIES_EXPLOUD] = 0x886,
+ [SPECIES_CLAMPERL] = 0x88,
+ [SPECIES_HUNTAIL] = 0x88,
+ [SPECIES_GOREBYSS] = 0x88,
+ [SPECIES_ABSOL] = 0x88,
+ [SPECIES_SHUPPET] = 0x88,
+ [SPECIES_BANETTE] = 0x88,
+ [SPECIES_SEVIPER] = 0x88,
+ [SPECIES_ZANGOOSE] = 0x88,
+ [SPECIES_RELICANTH] = 0x88,
+ [SPECIES_ARON] = 0x886,
+ [SPECIES_LAIRON] = 0x886,
+ [SPECIES_AGGRON] = 0x886,
+ [SPECIES_CASTFORM] = 0x888,
+ [SPECIES_VOLBEAT] = 0x886,
+ [SPECIES_ILLUMISE] = 0x886,
+ [SPECIES_LILEEP] = 0x88,
+ [SPECIES_CRADILY] = 0x88,
+ [SPECIES_ANORITH] = 0x88,
+ [SPECIES_ARMALDO] = 0x88,
+ [SPECIES_RALTS] = 0x886,
+ [SPECIES_KIRLIA] = 0x886,
+ [SPECIES_GARDEVOIR] = 0x88,
+ [SPECIES_BAGON] = 0x88,
+ [SPECIES_SHELGON] = 0x88,
+ [SPECIES_SALAMENCE] = 0x88,
+ [SPECIES_BELDUM] = 0x88,
+ [SPECIES_METANG] = 0x88,
+ [SPECIES_METAGROSS] = 0x88,
+ [SPECIES_REGIROCK] = 0x88,
+ [SPECIES_REGICE] = 0x88,
+ [SPECIES_REGISTEEL] = 0x88,
+ [SPECIES_KYOGRE] = 0x88,
+ [SPECIES_GROUDON] = 0x88,
+ [SPECIES_RAYQUAZA] = 0x88,
+ [SPECIES_LATIAS] = 0x88,
+ [SPECIES_LATIOS] = 0x88,
+ [SPECIES_JIRACHI] = 0x88,
+ [SPECIES_DEOXYS] = 0x88,
+ [SPECIES_CHIMECHO] = 0x88,
+ [SPECIES_EGG] = 0x88,
+ [SPECIES_UNOWN_B] = 0x888,
+ [SPECIES_UNOWN_C] = 0x888,
+ [SPECIES_UNOWN_D] = 0x888,
+ [SPECIES_UNOWN_E] = 0x888,
+ [SPECIES_UNOWN_F] = 0x888,
+ [SPECIES_UNOWN_G] = 0x888,
+ [SPECIES_UNOWN_H] = 0x888,
+ [SPECIES_UNOWN_I] = 0x888,
+ [SPECIES_UNOWN_J] = 0x888,
+ [SPECIES_UNOWN_K] = 0x888,
+ [SPECIES_UNOWN_L] = 0x888,
+ [SPECIES_UNOWN_M] = 0x888,
+ [SPECIES_UNOWN_N] = 0x888,
+ [SPECIES_UNOWN_O] = 0x888,
+ [SPECIES_UNOWN_P] = 0x888,
+ [SPECIES_UNOWN_Q] = 0x888,
+ [SPECIES_UNOWN_R] = 0x888,
+ [SPECIES_UNOWN_S] = 0x888,
+ [SPECIES_UNOWN_T] = 0x888,
+ [SPECIES_UNOWN_U] = 0x888,
+ [SPECIES_UNOWN_V] = 0x888,
+ [SPECIES_UNOWN_W] = 0x888,
+ [SPECIES_UNOWN_X] = 0x888,
+ [SPECIES_UNOWN_Y] = 0x888,
+ [SPECIES_UNOWN_Z] = 0x888,
+ [SPECIES_UNOWN_EMARK] = 0x888,
+ [SPECIES_UNOWN_QMARK] = 0x888,
+};
diff --git a/src/data/trade.h b/src/data/trade.h
index b29e7c3d1..752971c11 100644
--- a/src/data/trade.h
+++ b/src/data/trade.h
@@ -1,3 +1,17 @@
+#define GFXTAG_MENU_TEXT 200 // Used as a base tag in CB2_CreateTradeMenu and CB2_ReturnToTradeMenu
+#define GFXTAG_CURSOR 300
+#define GFXTAG_LINK_MON_GLOW 5550
+#define GFXTAG_LINK_MON_SHADOW 5552
+#define GFXTAG_CABLE_END 5554
+#define GFXTAG_GBA_SCREEN 5556
+#define GFXTAG_POKEBALL 5557
+
+#define PALTAG_CURSOR 2345
+#define PALTAG_MENU_TEXT 4925
+#define PALTAG_LINK_MON 5551
+#define PALTAG_GBA 5555
+#define PALTAG_POKEBALL 5558
+
// Exists unused in RS as well
static const u32 sUnusedStructSizes[] =
{
@@ -25,7 +39,7 @@ static const u8 sText_Slash[] = _("/");
static const u8 sText_Lv[] = _("Lv. ");
static const u8 sText_ThreeDashes[] = _("---");
static const u8 sText_FourQuestionMarks[] = _("????");
-static const u8 sText_832DAE4[] = _("");
+static const u8 sText_UnusedEmpty[] = _("");
static const u8 sText_IsThisTradeOkay[] = _("Is this trade okay?");
static const u8 sText_Cancel[] = _("CANCEL");
static const u8 sText_ChooseAPkmn[] = _("Choose a POKéMON.");
@@ -48,107 +62,113 @@ static const struct OamData sTradeOamData_32x16 =
.priority = 1
};
-static const struct OamData sTradeOamData_64x32 =
+static const struct OamData sOamData_Cursor =
{
.shape = SPRITE_SHAPE(64x32),
.size = SPRITE_SIZE(64x32),
.priority = 1
};
-static const union AnimCmd gSpriteAnim_832DC24[] =
+static const union AnimCmd sAnim_Cursor_Normal[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_832DC2C[] =
+static const union AnimCmd sAnim_Cursor_OnCancel[] =
{
ANIMCMD_FRAME(32, 5),
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_832DC34[] =
+enum {
+ CURSOR_ANIM_NORMAL,
+ CURSOR_ANIM_ON_CANCEL,
+};
+
+static const union AnimCmd *const sAnims_Cursor[] =
{
- gSpriteAnim_832DC24,
- gSpriteAnim_832DC2C
+ [CURSOR_ANIM_NORMAL] = sAnim_Cursor_Normal,
+ [CURSOR_ANIM_ON_CANCEL] = sAnim_Cursor_OnCancel
};
-static const struct SpriteSheet sTradeButtonsSpriteSheet =
+static const struct SpriteSheet sCursor_SpriteSheet =
{
- .data = gTradeButtons_Gfx,
+ .data = gTradeCursor_Gfx,
.size = 0x800,
- .tag = 300
+ .tag = GFXTAG_CURSOR
};
-static const struct SpritePalette gUnknown_0832DC44 =
+static const struct SpritePalette sCursor_SpritePalette =
{
- .data = gUnknown_08DDB444,
- .tag = 2345
+ .data = gTradeCursor_Pal,
+ .tag = PALTAG_CURSOR
};
-static const union AnimCmd gSpriteAnim_832DC4C[] =
+static const union AnimCmd sAnim_MenuText_0[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_832DC54[] =
+static const union AnimCmd sAnim_MenuText_1[] =
{
ANIMCMD_FRAME(8, 5),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_832DC5C[] =
+static const union AnimCmd sAnim_MenuText_2[] =
{
ANIMCMD_FRAME(16, 5),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_832DC64[] =
+static const union AnimCmd sAnim_MenuText_3[] =
{
ANIMCMD_FRAME(24, 5),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_832DC6C[] =
+static const union AnimCmd sAnim_MenuText_4[] =
{
ANIMCMD_FRAME(32, 5),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_832DC74[] =
+static const union AnimCmd sAnim_MenuText_5[] =
{
ANIMCMD_FRAME(40, 5),
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_832DC7C[] =
+// These anims are not used
+static const union AnimCmd *const sAnims_MenuText[] =
{
- gSpriteAnim_832DC4C,
- gSpriteAnim_832DC54,
- gSpriteAnim_832DC5C,
- gSpriteAnim_832DC64,
- gSpriteAnim_832DC6C,
- gSpriteAnim_832DC74
+ sAnim_MenuText_0,
+ sAnim_MenuText_1,
+ sAnim_MenuText_2,
+ sAnim_MenuText_3,
+ sAnim_MenuText_4,
+ sAnim_MenuText_5
};
-static const struct SpriteTemplate gSpriteTemplate_832DC94 =
+static const struct SpriteTemplate sSpriteTemplate_Cursor =
{
- .tileTag = 300,
- .paletteTag = 2345,
- .oam = &sTradeOamData_64x32,
- .anims = gSpriteAnimTable_832DC34,
+ .tileTag = GFXTAG_CURSOR,
+ .paletteTag = PALTAG_CURSOR,
+ .oam = &sOamData_Cursor,
+ .anims = sAnims_Cursor,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct SpriteTemplate gSpriteTemplate_832DCAC =
+static const struct SpriteTemplate sSpriteTemplate_MenuText =
{
- .tileTag = 200,
- .paletteTag = 4925,
+ .tileTag = GFXTAG_MENU_TEXT,
+ .paletteTag = PALTAG_MENU_TEXT,
.oam = &sTradeOamData_32x16,
- .anims = gSpriteAnimTable_832DC7C,
+ .anims = sAnims_MenuText,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
@@ -158,7 +178,7 @@ static const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbap
static const struct SpritePalette gSpritePalette_TradeScreenText =
{
.data = TradeScreenTextPalette,
- .tag = 4925
+ .tag = PALTAG_MENU_TEXT
};
// This is used to determine the next mon to select when the D-Pad is
@@ -337,26 +357,26 @@ static const u8 sTradeMonBoxCoords[][2][2] =
},
};
-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 sUnusedCoords[][2] =
+{
+ { 0, 14},
+ {15, 29},
+ { 3, 5},
+ { 3, 7},
+ {18, 5},
+ {18, 7},
+ { 8, 7},
+ {22, 12},
+ { 8, 7},
+ {22, 12},
+ { 6, 7},
+ {24, 12},
+ { 6, 7},
+ {24, 12},
+ { 8, 7},
+ {22, 12},
+ { 7, 7},
+ {23, 12}
};
static const u8 *const sTradeActionTexts[] =
@@ -620,42 +640,42 @@ static const u8 sTradeMenuPartyMonBoxDimensions[3][2] =
[TRADE_PARTNER] = {19, 3}
};
-static const u16 sTradePal_PokeBall[] = INCBIN_U16("graphics/trade/pokeball.gbapal");
-static const u8 sTradeGfx_PokeBall[] = INCBIN_U8("graphics/trade/pokeball.4bpp");
-static const u8 sTradeGfx_PokeBallSymbol[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); // unused?
-static const u16 sTradeTilemap_Cable[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin");
+static const u16 sPokeball_Pal[] = INCBIN_U16("graphics/trade/pokeball.gbapal");
+static const u8 sPokeball_Gfx[] = INCBIN_U8("graphics/trade/pokeball.4bpp");
+static const u8 sPokeballSymbol_Gfx[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); // unused
+static const u16 sCrossingHighlightCable_Tilemap[] = INCBIN_U16("graphics/trade/crossing_highlight_cable.bin");
static const u16 sTradeTilemap_PokeBallSymbol[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); // unused?
-static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal");
-static const u16 sTradePal_Gba[] = INCBIN_U16("graphics/trade/gba.gbapal");
-static const u16 sTradePal_ShadowUnused[] = INCBIN_U16("graphics/trade/shadow.gbapal");
-static const u16 sTradePal_BlackUnused[] = INCBIN_U16("graphics/trade/black.gbapal");
-static const u16 sTradePal_Misc[] = INCBIN_U16("graphics/trade/misc.gbapal");
-static const u8 sTradeGfx_Glow1[] = INCBIN_U8("graphics/trade/glow1.4bpp");
-static const u8 sTradeGfx_Glow2[] = INCBIN_U8("graphics/trade/glow2.4bpp");
-static const u8 sTradeGfx_CableEnd[] = INCBIN_U8("graphics/trade/cable_end.4bpp");
-static const u8 sTradeGfx_GbaScreen[] = INCBIN_U8("graphics/trade/gba_screen.4bpp");
-const u16 gUnknown_08331F60[] = INCBIN_U16("graphics/trade/shadow_map.bin");
-static const u8 sTradeAffine_Gba[] = INCBIN_U8("graphics/trade/gba_affine.8bpp");
-static const u8 sFiller_08335760[64] = {};
-static const u8 sTradeAffineMap_GbaCable[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin");
-static const u8 sTradeAffineMap_GbaWireless[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin");
-static const u16 sTradeTilemap_GbaWireless[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin");
-static const u16 sTradeTilemap_GbaCable[] = INCBIN_U16("graphics/trade/gba_map_cable.bin");
-static const u32 gUnknown_083379A0[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); //some wireless tilemap
-static const u16 sTradePal_WirelessSignalSend[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal");
-static const u16 sTradePal_WirelessSignalReceive[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal");
-static const u16 sTradePal_Black[] = INCBIN_U16("graphics/trade/black.gbapal");
-static const u32 sTradeGfx_WirelessSignal[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz");
-static const u32 sTradeTilemap_WirelessSignal[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz");
-
-static const struct OamData sTradeOamData_16x16 =
+static const u16 sUnusedPal1[] = INCBIN_U16("graphics/trade/unused1.gbapal");
+static const u16 sGba_Pal[] = INCBIN_U16("graphics/trade/gba.gbapal");
+static const u16 sUnusedPal2[] = INCBIN_U16("graphics/trade/unused2.gbapal");
+static const u16 sWirelessSignalNone_Pal_Unused[] = INCBIN_U16("graphics/trade/wireless_signal_none.gbapal");
+static const u16 sLinkMon_Pal[] = INCBIN_U16("graphics/trade/link_mon.gbapal");
+static const u8 sLinkMonGlow_Gfx[] = INCBIN_U8("graphics/trade/link_mon_glow.4bpp");
+static const u8 sLinkMonShadow_Gfx[] = INCBIN_U8("graphics/trade/link_mon_shadow.4bpp");
+static const u8 sCableEnd_Gfx[] = INCBIN_U8("graphics/trade/cable_end.4bpp");
+static const u8 sGbaScreen_Gfx[] = INCBIN_U8("graphics/trade/gba_screen.4bpp");
+const u16 gTradePlatform_Tilemap[] = INCBIN_U16("graphics/trade/platform.bin");
+static const u8 sGbaAffine_Gfx[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); // Only the gfx for when the GBA is zooming in/out
+static const u8 sEmptyGfx[64] = {};
+static const u8 sGbaCable_AffineTilemap[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin");
+static const u8 sGbaWireless_AffineTilemap[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin");
+static const u16 sGbaWireless_Tilemap[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin");
+static const u16 sGbaCable_Tilemap[] = INCBIN_U16("graphics/trade/gba_map_cable.bin");
+static const u32 sCrossingHighlightWireless_Tilemap[] = INCBIN_U32("graphics/trade/crossing_highlight_wireless.bin.lz");
+static const u16 sWirelessSignalSend_Pal[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal");
+static const u16 sWirelessSignalRecv_Pal[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal");
+static const u16 sWirelessSignalNone_Pal[] = INCBIN_U16("graphics/trade/wireless_signal_none.gbapal");
+static const u32 sWirelessSignal_Gfx[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz");
+static const u32 sWirelessSignal_Tilemap[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz");
+
+static const struct OamData sOamData_Pokeball =
{
.affineMode = ST_OAM_AFFINE_NORMAL,
.shape = SPRITE_SHAPE(16x16),
.size = SPRITE_SIZE(16x16)
};
-static const union AnimCmd gSpriteAnim_8338C4C[] =
+static const union AnimCmd sAnim_Pokeball_SpinOnce[] =
{
ANIMCMD_FRAME( 0, 3),
ANIMCMD_FRAME( 4, 3),
@@ -674,7 +694,7 @@ static const union AnimCmd gSpriteAnim_8338C4C[] =
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_8338C88[] =
+static const union AnimCmd sAnim_Pokeball_SpinTwice[] =
{
ANIMCMD_FRAME( 0, 3),
ANIMCMD_FRAME( 4, 3),
@@ -693,25 +713,25 @@ static const union AnimCmd gSpriteAnim_8338C88[] =
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_8338C88[] =
+static const union AnimCmd *const sAnims_Pokeball[] =
{
- gSpriteAnim_8338C4C,
- gSpriteAnim_8338C88
+ sAnim_Pokeball_SpinOnce,
+ sAnim_Pokeball_SpinTwice
};
-static const union AffineAnimCmd gSpriteAffineAnim_8338CCC[] =
+static const union AffineAnimCmd sAffineAnim_Pokeball_Normal[] =
{
AFFINEANIMCMD_FRAME(0, 0, 0, 1),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd gSpriteAffineAnim_8338CDC[] =
+static const union AffineAnimCmd sAffineAnim_Pokeball_Squish[] =
{
AFFINEANIMCMD_FRAME(-8, 0, 0, 20),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd gSpriteAffineAnim_8338CEC[] =
+static const union AffineAnimCmd sAffineAnim_Pokeball_Unsquish[] =
{
AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0),
AFFINEANIMCMD_FRAME( 0, 0, 0, 5),
@@ -719,38 +739,38 @@ static const union AffineAnimCmd gSpriteAffineAnim_8338CEC[] =
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D0C[] =
+static const union AffineAnimCmd *const sAffineAnims_Pokeball[] =
{
- gSpriteAffineAnim_8338CCC,
- gSpriteAffineAnim_8338CDC,
- gSpriteAffineAnim_8338CEC
+ sAffineAnim_Pokeball_Normal,
+ sAffineAnim_Pokeball_Squish,
+ sAffineAnim_Pokeball_Unsquish
};
static const struct SpriteSheet sPokeBallSpriteSheet =
{
- .data = sTradeGfx_PokeBall,
+ .data = sPokeball_Gfx,
.size = 0x600,
- .tag = 5557
+ .tag = GFXTAG_POKEBALL
};
static const struct SpritePalette sPokeBallSpritePalette =
{
- .data = sTradePal_PokeBall,
- .tag = 5558
+ .data = sPokeball_Pal,
+ .tag = PALTAG_POKEBALL
};
-static const struct SpriteTemplate gSpriteTemplate_8338D28 =
+static const struct SpriteTemplate sSpriteTemplate_Pokeball =
{
- .tileTag = 5557,
- .paletteTag = 5558,
- .oam = &sTradeOamData_16x16,
- .anims = gSpriteAnimTable_8338C88,
+ .tileTag = GFXTAG_POKEBALL,
+ .paletteTag = PALTAG_POKEBALL,
+ .oam = &sOamData_Pokeball,
+ .anims = sAnims_Pokeball,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8338D0C,
- .callback = sub_807E55C
+ .affineAnims = sAffineAnims_Pokeball,
+ .callback = SpriteCB_BouncingPokeball
};
-static const struct OamData sTradeOamData_32x32 =
+static const struct OamData sOamData_LinkMonGlow =
{
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = ST_OAM_OBJ_BLEND,
@@ -759,146 +779,151 @@ static const struct OamData sTradeOamData_32x32 =
.priority = 1
};
-static const union AnimCmd gSpriteAnim_8338D48[] =
+static const union AnimCmd sAnim_LinkMonGlow[] =
{
- ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE),
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), // ? The graphic is a perfect circle, no need to flip
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_8338D50[] =
+static const union AnimCmd *const sAnims_LinkMonGlow[] =
{
- gSpriteAnim_8338D48
+ sAnim_LinkMonGlow
};
-static const union AffineAnimCmd gSpriteAffineAnim_8338D54[] =
+static const union AffineAnimCmd sAffineAnim_LinkMonGlow[] =
{
AFFINEANIMCMD_FRAME(-10, -10, 0, 5),
AFFINEANIMCMD_FRAME(10, 10, 0, 5),
AFFINEANIMCMD_JUMP(0)
};
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D6C[] =
+static const union AffineAnimCmd *const sAffineAnims_LinkMonGlow[] =
{
- gSpriteAffineAnim_8338D54
+ sAffineAnim_LinkMonGlow
};
-static const struct SpriteSheet sGlow1SpriteSheet =
+static const struct SpriteSheet sSpriteSheet_LinkMonGlow =
{
- .data = sTradeGfx_Glow1,
+ .data = sLinkMonGlow_Gfx,
.size = 0x200,
- .tag = 5550
+ .tag = GFXTAG_LINK_MON_GLOW
};
-static const struct SpritePalette sMiscTradeSpritePalette =
+static const struct SpritePalette sSpritePalette_LinkMon =
{
- .data = sTradePal_Misc,
- .tag = 5551
+ .data = sLinkMon_Pal,
+ .tag = PALTAG_LINK_MON
};
-static const struct SpritePalette sGbaSpritePalette =
+static const struct SpritePalette sSpritePalette_Gba =
{
- .data = sTradePal_Gba,
- .tag = 5555
+ .data = sGba_Pal,
+ .tag = PALTAG_GBA
};
-static const struct SpriteTemplate gUnknown_08338D88 =
+static const struct SpriteTemplate sSpriteTemplate_LinkMonGlow =
{
- .tileTag = 5550,
- .paletteTag = 5551,
- .oam = &sTradeOamData_32x32,
- .anims = gSpriteAnimTable_8338D50,
+ .tileTag = GFXTAG_LINK_MON_GLOW,
+ .paletteTag = PALTAG_LINK_MON,
+ .oam = &sOamData_LinkMonGlow,
+ .anims = sAnims_LinkMonGlow,
.images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8338D6C,
- .callback = sub_807AA28
+ .affineAnims = sAffineAnims_LinkMonGlow,
+ .callback = SpriteCB_LinkMonGlow
};
-static const struct OamData sTradeOamData_16x32 =
+static const struct OamData sOamData_LinkMonShadow =
{
.shape = SPRITE_SHAPE(16x32),
.size = SPRITE_SIZE(16x32),
.priority = 1
};
-static const union AnimCmd gSpriteAnim_8338DA8[] =
+static const union AnimCmd sAnim_LinkMonShadow_Big[] =
{
ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_8338DB0[] =
+static const union AnimCmd sAnim_LinkMonShadow_Small[] =
{
ANIMCMD_FRAME(8, 5, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_8338DB8[] =
+enum {
+ ANIM_LINKMON_BIG,
+ ANIM_LINKMON_SMALL,
+};
+
+static const union AnimCmd *const sAnims_LinkMonShadow[] =
{
- gSpriteAnim_8338DA8,
- gSpriteAnim_8338DB0
+ [ANIM_LINKMON_BIG] = sAnim_LinkMonShadow_Big,
+ [ANIM_LINKMON_SMALL] = sAnim_LinkMonShadow_Small
};
-static const struct SpriteSheet sGlow2SpriteSheet =
+static const struct SpriteSheet sSpriteSheet_LinkMonShadow =
{
- .data = sTradeGfx_Glow2,
+ .data = sLinkMonShadow_Gfx,
.size = 0x300,
- .tag = 5552
+ .tag = GFXTAG_LINK_MON_SHADOW
};
-static const struct SpriteTemplate sGlowBallSpriteTemplate =
+static const struct SpriteTemplate sSpriteTemplate_LinkMonShadow =
{
- .tileTag = 5552,
- .paletteTag = 5551,
- .oam = &sTradeOamData_16x32,
- .anims = gSpriteAnimTable_8338DB8,
+ .tileTag = GFXTAG_LINK_MON_SHADOW,
+ .paletteTag = PALTAG_LINK_MON,
+ .oam = &sOamData_LinkMonShadow,
+ .anims = sAnims_LinkMonShadow,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807AA7C
+ .callback = SpriteCB_LinkMonShadow
};
-static const struct OamData sTradeOamData_16x32_2 =
+static const struct OamData sOamData_CableEnd =
{
.shape = SPRITE_SHAPE(16x32),
.size = SPRITE_SIZE(16x32),
.priority = 1
};
-static const union AnimCmd gSpriteAnim_8338DE8[] =
+static const union AnimCmd sAnim_CableEnd[] =
{
ANIMCMD_FRAME(0, 10),
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_8338DF0[] =
+static const union AnimCmd *const sAnims_CableEnd[] =
{
- gSpriteAnim_8338DE8
+ sAnim_CableEnd
};
-static const struct SpriteSheet sCableEndSpriteSheet =
+static const struct SpriteSheet sSpriteSheet_CableEnd =
{
- .data = sTradeGfx_CableEnd,
+ .data = sCableEnd_Gfx,
.size = 0x100,
- .tag = 5554
+ .tag = GFXTAG_CABLE_END
};
-static const struct SpriteTemplate gSpriteTemplate_8338DFC =
+static const struct SpriteTemplate sSpriteTemplate_CableEnd =
{
- .tileTag = 5554,
- .paletteTag = 5555,
- .oam = &sTradeOamData_16x32_2,
- .anims = gSpriteAnimTable_8338DF0,
+ .tileTag = GFXTAG_CABLE_END,
+ .paletteTag = PALTAG_GBA,
+ .oam = &sOamData_CableEnd,
+ .anims = sAnims_CableEnd,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807AABC
+ .callback = SpriteCB_CableEndSending
};
-static const struct OamData sTradeOamData_64x32_2 =
+static const struct OamData sOamData_GbaScreen =
{
.shape = SPRITE_SHAPE(64x32),
.size = SPRITE_SIZE(64x32),
.priority = 1
};
-static const union AnimCmd gSpriteAnim_8338E1C[] =
+static const union AnimCmd sAnim_GbaScreen_Long[] =
{
ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
@@ -911,7 +936,7 @@ static const union AnimCmd gSpriteAnim_8338E1C[] =
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_8338E40[] =
+static const union AnimCmd sAnim_GbaScreen_Short[] =
{
ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
@@ -924,56 +949,56 @@ static const union AnimCmd gSpriteAnim_8338E40[] =
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_8338E64[] =
+static const union AnimCmd *const sAnims_GbaScreen_Long[] =
{
- gSpriteAnim_8338E1C
+ sAnim_GbaScreen_Long
};
-static const union AnimCmd *const gSpriteAnimTable_8338E68[] =
+static const union AnimCmd *const sAnims_GbaScreen_Short[] =
{
- gSpriteAnim_8338E40
+ sAnim_GbaScreen_Short
};
-static const struct SpriteSheet sGbaScreenSpriteSheet =
+static const struct SpriteSheet sSpriteSheet_GbaScreen =
{
- .data = sTradeGfx_GbaScreen,
+ .data = sGbaScreen_Gfx,
.size = 0x1000,
- .tag = 5556
+ .tag = GFXTAG_GBA_SCREEN
};
-static const struct SpriteTemplate gSpriteTemplate_8338E74 =
+static const struct SpriteTemplate sSpriteTemplate_GbaScreenFlash_Long =
{
- .tileTag = 5556,
- .paletteTag = 5555,
- .oam = &sTradeOamData_64x32_2,
- .anims = gSpriteAnimTable_8338E64,
+ .tileTag = GFXTAG_GBA_SCREEN,
+ .paletteTag = PALTAG_GBA,
+ .oam = &sOamData_GbaScreen,
+ .anims = sAnims_GbaScreen_Long,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807AB04
+ .callback = SpriteCB_GbaScreen
};
-static const struct SpriteTemplate gSpriteTemplate_8338E8C =
+static const struct SpriteTemplate sSpriteTemplate_GbaScreenFlash_Short =
{
- .tileTag = 5556,
- .paletteTag = 5555,
- .oam = &sTradeOamData_64x32_2,
- .anims = gSpriteAnimTable_8338E68,
+ .tileTag = GFXTAG_GBA_SCREEN,
+ .paletteTag = PALTAG_GBA,
+ .oam = &sOamData_GbaScreen,
+ .anims = sAnims_GbaScreen_Short,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807AB04
+ .callback = SpriteCB_GbaScreen
};
-static const u16 gUnknown_08338EA4[] = INCBIN_U16("graphics/trade/unknown_338EA4.gbapal");
+static const u16 sLinkMonShadow_Pal[] = INCBIN_U16("graphics/trade/link_mon_shadow.gbapal");
-static const union AffineAnimCmd gSpriteAffineAnim_8338EBC[] =
+static const union AffineAnimCmd sAffineAnim_CrossingMonPic[] =
{
AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
AFFINEANIMCMD_JUMP(0)
};
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338ECC[] =
+static const union AffineAnimCmd *const sAffineAnims_CrossingMonPics[] =
{
- gSpriteAffineAnim_8338EBC
+ sAffineAnim_CrossingMonPic
};
static const struct InGameTrade sIngameTrades[] =
@@ -1146,69 +1171,54 @@ static const struct BgTemplate sTradeSequenceBgTemplates[] =
static const s8 sTradeBallVerticalVelocityTable[] =
{
- 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
+ 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 sWirelessSignalTiming[][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, 255},
- {0, 0}
+ { 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},
+ {}
};
diff --git a/src/data/wallpapers.h b/src/data/wallpapers.h
new file mode 100644
index 000000000..64c61fe2d
--- /dev/null
+++ b/src/data/wallpapers.h
@@ -0,0 +1,393 @@
+enum {
+ WALLPAPER_FOREST,
+ WALLPAPER_CITY,
+ WALLPAPER_DESERT,
+ WALLPAPER_SAVANNA,
+ WALLPAPER_CRAG,
+ WALLPAPER_VOLCANO,
+ WALLPAPER_SNOW,
+ WALLPAPER_CAVE,
+ WALLPAPER_BEACH,
+ WALLPAPER_SEAFLOOR,
+ WALLPAPER_RIVER,
+ WALLPAPER_SKY,
+ WALLPAPER_POLKADOT,
+ WALLPAPER_POKECENTER,
+ WALLPAPER_MACHINE,
+ WALLPAPER_PLAIN,
+ WALLPAPER_FRIENDS, // The one received as a gift from Walda's parents.
+ WALLPAPER_COUNT
+};
+#define MAX_DEFAULT_WALLPAPER WALLPAPER_SAVANNA
+
+static const u16 sWallpaperPalettes_Forest[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/forest/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/forest/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Forest[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/forest/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Forest[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/forest/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_City[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/city/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/city/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_City[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/city/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_City[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/city/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Desert[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/desert/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/desert/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Desert[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/desert/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Desert[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/desert/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Savanna[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/savanna/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/savanna/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Savanna[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/savanna/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Savanna[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/savanna/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Crag[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/crag/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/crag/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Crag[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/crag/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Crag[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/crag/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Volcano[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/volcano/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/volcano/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Volcano[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/volcano/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Volcano[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/volcano/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Snow[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/snow/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/snow/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Snow[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/snow/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Snow[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/snow/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Cave[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/cave/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/cave/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Cave[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/cave/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Cave[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/cave/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Beach[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/beach/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/beach/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Beach[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/beach/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Beach[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/beach/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Seafloor[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/seafloor/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/seafloor/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Seafloor[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/seafloor/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Seafloor[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/seafloor/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_River[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/river/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/river/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_River[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/river/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_River[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/river/tilemap.bin.lz");
+static const u16 sWallpaperPalettes_Sky[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/sky/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/sky/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Sky[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/sky/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Sky[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/sky/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_PolkaDot[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/polkadot/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/polkadot/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_PolkaDot[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/polkadot/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_PolkaDot[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/polkadot/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Pokecenter[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/pokecenter/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/pokecenter/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Pokecenter[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/pokecenter/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Pokecenter[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/pokecenter/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Machine[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/machine/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/machine/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Machine[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/machine/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Machine[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/machine/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Plain[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/plain/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/plain/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Plain[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/plain/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Plain[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/plain/tilemap.bin.lz");
+
+// 12x18 tilemap
+static const u32 sWallpaperTilemap_Unused[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/unused.bin");
+
+// Shadow color, text color
+static const u16 sBoxTitleColors[WALLPAPER_COUNT][2] =
+{
+ [WALLPAPER_FOREST] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_CITY] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_DESERT] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_SAVANNA] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_CRAG] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_VOLCANO] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_SNOW] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_CAVE] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_BEACH] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_SEAFLOOR] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_RIVER] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_SKY] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_POLKADOT] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_POKECENTER] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_MACHINE] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_PLAIN] = {RGB(7, 7, 7), RGB_WHITE},
+ [WALLPAPER_FRIENDS] = {RGB(7, 7, 7), RGB_WHITE}
+};
+
+#define WALLPAPER_ENTRY(name) {sWallpaperTiles_##name, sWallpaperTilemap_##name, sWallpaperPalettes_##name[0]}
+// A few wallpapers are not defined in this file
+#define WALLPAPER_ENTRY_G(name) {gWallpaperTiles_##name, gWallpaperTilemap_##name, gWallpaperPalettes_##name[0]}
+
+static const struct Wallpaper sWallpapers[WALLPAPER_COUNT - 1] =
+{
+ [WALLPAPER_FOREST] = WALLPAPER_ENTRY(Forest),
+ [WALLPAPER_CITY] = WALLPAPER_ENTRY(City),
+ [WALLPAPER_DESERT] = WALLPAPER_ENTRY(Desert),
+ [WALLPAPER_SAVANNA] = WALLPAPER_ENTRY(Savanna),
+ [WALLPAPER_CRAG] = WALLPAPER_ENTRY(Crag),
+ [WALLPAPER_VOLCANO] = WALLPAPER_ENTRY(Volcano),
+ [WALLPAPER_SNOW] = WALLPAPER_ENTRY(Snow),
+ [WALLPAPER_CAVE] = WALLPAPER_ENTRY(Cave),
+ [WALLPAPER_BEACH] = WALLPAPER_ENTRY(Beach),
+ [WALLPAPER_SEAFLOOR] = WALLPAPER_ENTRY(Seafloor),
+ [WALLPAPER_RIVER] = WALLPAPER_ENTRY(River),
+ [WALLPAPER_SKY] = WALLPAPER_ENTRY(Sky),
+ [WALLPAPER_POLKADOT] = WALLPAPER_ENTRY(PolkaDot),
+ [WALLPAPER_POKECENTER] = WALLPAPER_ENTRY(Pokecenter),
+ [WALLPAPER_MACHINE] = WALLPAPER_ENTRY(Machine),
+ [WALLPAPER_PLAIN] = WALLPAPER_ENTRY(Plain),
+};
+
+static const u8 sArrow_Gfx[] = INCBIN_U8("graphics/pokemon_storage/arrow.4bpp");
+
+static const u16 sWallpaperPalettes_Zigzagoon[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame1.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/zigzagoon/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Zigzagoon[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/zigzagoon/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Zigzagoon[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/zigzagoon/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Screen[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame1.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/screen/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Screen[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/screen/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Screen[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/screen/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Diagonal[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame1.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/diagonal/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Diagonal[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/diagonal/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Diagonal[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/diagonal/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Block[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/block/bg.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/block/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Block[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/block/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Block[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/block/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Pokecenter2[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/pokecenter2/bg.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/pokecenter2/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Pokecenter2[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/pokecenter2/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Pokecenter2[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/pokecenter2/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Frame[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/frame/bg.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/frame/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Frame[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/frame/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Frame[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/frame/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Blank[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame1.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/zigzagoon/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Blank[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/blank/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Blank[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/blank/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Circles[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame2.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/circles/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Circles[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/circles/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Circles[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/circles/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Azumarill[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame2.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/azumarill/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Azumarill[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/azumarill/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Azumarill[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/azumarill/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Pikachu[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame2.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/pikachu/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Pikachu[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/pikachu/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Pikachu[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/pikachu/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Legendary[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame2.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/legendary/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Legendary[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/legendary/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Legendary[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/legendary/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Dusclops[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame2.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/dusclops/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Dusclops[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/dusclops/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Dusclops[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/dusclops/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Ludicolo[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame2.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/ludicolo/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Ludicolo[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/ludicolo/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Ludicolo[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/ludicolo/tilemap.bin.lz");
+
+static const u16 sWallpaperPalettes_Whiscash[][16] =
+{
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame2.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/whiscash/bg.gbapal"),
+};
+static const u32 sWallpaperTiles_Whiscash[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/whiscash/tiles.4bpp.lz");
+static const u32 sWallpaperTilemap_Whiscash[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/whiscash/tilemap.bin.lz");
+
+static const u32 sWallpaperIcon_Aqua[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/aqua.4bpp.lz");
+static const u32 sWallpaperIcon_Heart[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/heart.4bpp.lz");
+static const u32 sWallpaperIcon_FiveStar[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/five_star.4bpp.lz");
+static const u32 sWallpaperIcon_Brick[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/brick.4bpp.lz");
+static const u32 sWallpaperIcon_FourStar[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/four_star.4bpp.lz");
+static const u32 sWallpaperIcon_Asterisk[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/asterisk.4bpp.lz");
+static const u32 sWallpaperIcon_Dot[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/dot.4bpp.lz");
+static const u32 sWallpaperIcon_LineCircle[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/line_circle.4bpp.lz");
+static const u32 sWallpaperIcon_PokeBall[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/pokeball.4bpp.lz");
+static const u32 sWallpaperIcon_Maze[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/maze.4bpp.lz");
+static const u32 sWallpaperIcon_Footprint[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/footprint.4bpp.lz");
+static const u32 sWallpaperIcon_BigAsterisk[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/big_asterisk.4bpp.lz");
+static const u32 sWallpaperIcon_Circle[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/circle.4bpp.lz");
+static const u32 sWallpaperIcon_Koffing[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/koffing.4bpp.lz");
+static const u32 sWallpaperIcon_Ribbon[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/ribbon.4bpp.lz");
+static const u32 sWallpaperIcon_FourCircles[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/four_circles.4bpp.lz");
+static const u32 sWallpaperIcon_Lotad[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/lotad.4bpp.lz");
+static const u32 sWallpaperIcon_Crystal[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/crystal.4bpp.lz");
+static const u32 sWallpaperIcon_Pichu[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/pichu.4bpp.lz");
+static const u32 sWallpaperIcon_Diglett[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/diglett.4bpp.lz");
+static const u32 sWallpaperIcon_Luvdisc[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/luvdisc.4bpp.lz");
+static const u32 sWallpaperIcon_StarInCircle[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/star_in_circle.4bpp.lz");
+static const u32 sWallpaperIcon_Spinda[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/spinda.4bpp.lz");
+static const u32 sWallpaperIcon_Latis[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/latis.4bpp.lz");
+static const u32 sWallpaperIcon_Minun[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/minun.4bpp.lz");
+static const u32 sWallpaperIcon_Togepi[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/togepi.4bpp.lz");
+static const u32 sWallpaperIcon_Magma[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/magma.4bpp.lz");
+
+static const struct Wallpaper sWaldaWallpapers[] =
+{
+ WALLPAPER_ENTRY(Zigzagoon),
+ WALLPAPER_ENTRY(Screen),
+ WALLPAPER_ENTRY_G(Horizontal),
+ WALLPAPER_ENTRY(Diagonal),
+ WALLPAPER_ENTRY(Block),
+ WALLPAPER_ENTRY_G(Ribbon),
+ WALLPAPER_ENTRY(Pokecenter2),
+ WALLPAPER_ENTRY(Frame),
+ WALLPAPER_ENTRY(Blank),
+ WALLPAPER_ENTRY(Circles),
+ WALLPAPER_ENTRY(Azumarill),
+ WALLPAPER_ENTRY(Pikachu),
+ WALLPAPER_ENTRY(Legendary),
+ WALLPAPER_ENTRY(Dusclops),
+ WALLPAPER_ENTRY(Ludicolo),
+ WALLPAPER_ENTRY(Whiscash),
+};
+
+static const u32 *const sWaldaWallpaperIcons[] =
+{
+ sWallpaperIcon_Aqua,
+ sWallpaperIcon_Heart,
+ sWallpaperIcon_FiveStar,
+ sWallpaperIcon_Brick,
+ sWallpaperIcon_FourStar,
+ sWallpaperIcon_Asterisk,
+ sWallpaperIcon_Dot,
+ gWallpaperIcon_Cross,
+ sWallpaperIcon_LineCircle,
+ sWallpaperIcon_PokeBall,
+ sWallpaperIcon_Maze,
+ sWallpaperIcon_Footprint,
+ sWallpaperIcon_BigAsterisk,
+ sWallpaperIcon_Circle,
+ sWallpaperIcon_Koffing,
+ sWallpaperIcon_Ribbon,
+ gWallpaperIcon_Bolt,
+ sWallpaperIcon_FourCircles,
+ sWallpaperIcon_Lotad,
+ sWallpaperIcon_Crystal,
+ sWallpaperIcon_Pichu,
+ sWallpaperIcon_Diglett,
+ sWallpaperIcon_Luvdisc,
+ sWallpaperIcon_StarInCircle,
+ sWallpaperIcon_Spinda,
+ sWallpaperIcon_Latis,
+ gWallpaperIcon_Plusle,
+ sWallpaperIcon_Minun,
+ sWallpaperIcon_Togepi,
+ sWallpaperIcon_Magma,
+};
diff --git a/src/daycare.c b/src/daycare.c
index 14cf57806..34b864981 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -24,7 +24,7 @@
#include "constants/region_map_sections.h"
// this file's functions
-static void ClearDaycareMonMail(struct DayCareMail *mail);
+static void ClearDaycareMonMail(struct DaycareMail *mail);
static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
static u8 GetDaycareCompatibilityScore(struct DayCare *daycare);
static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y);
@@ -120,7 +120,7 @@ u8 CountPokemonInDaycare(struct DayCare *daycare)
return count;
}
-void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDayCareMail *daycareMail)
+void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDaycareMail *daycareMail)
{
u8 i;
u8 numDaycareMons = 0;
@@ -131,13 +131,9 @@ void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDay
{
numDaycareMons++;
if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_HELD_ITEM) == ITEM_NONE)
- {
daycareMail->holdsItem[i] = FALSE;
- }
else
- {
daycareMail->holdsItem[i] = TRUE;
- }
}
else
{
@@ -154,7 +150,7 @@ static s8 Daycare_FindEmptySpot(struct DayCare *daycare)
for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
- if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES) == 0)
+ if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES) == SPECIES_NONE)
return i;
}
@@ -349,7 +345,7 @@ u8 GetNumLevelsGainedFromDaycare(void)
return 0;
}
-static void ClearDaycareMonMail(struct DayCareMail *mail)
+static void ClearDaycareMonMail(struct DaycareMail *mail)
{
s32 i;
diff --git a/src/decoration.c b/src/decoration.c
index b9a243708..6b6cf21e8 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -1652,7 +1652,7 @@ static void PlaceDecoration(u8 taskId)
gSprites[sDecor_CameraSpriteObjectIdx1].pos1.y += 2;
if (gMapHeader.regionMapSectionId == MAPSEC_SECRET_BASE)
- TV_PutSecretBaseVisitOnTheAir();
+ TryPutSecretBaseVisitOnAir();
CancelDecorating_(taskId);
}
@@ -2260,7 +2260,7 @@ static void Task_PutAwayDecoration(u8 taskId)
StringExpandPlaceholders(gStringVar4, gText_DecorationReturnedToPC);
DisplayItemMessageOnField(taskId, gStringVar4, ContinuePuttingAwayDecorationsPrompt);
if (gMapHeader.regionMapSectionId == MAPSEC_SECRET_BASE)
- TV_PutSecretBaseVisitOnTheAir();
+ TryPutSecretBaseVisitOnAir();
}
break;
}
diff --git a/src/easy_chat.c b/src/easy_chat.c
index 96d680840..753c2df76 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -1474,8 +1474,8 @@ void ShowEasyChatScreen(void)
words = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].fanclubOpinions.words[gSpecialVar_0x8006];
displayedPersonType = EASY_CHAT_PERSON_REPORTER_FEMALE;
break;
- case EASY_CHAT_TYPE_UNK_8:
- words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].unkShow04.words;
+ case EASY_CHAT_TYPE_DUMMY_SHOW:
+ words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].dummy.words;
displayedPersonType = EASY_CHAT_PERSON_REPORTER_MALE;
break;
case EASY_CHAT_TYPE_TRENDY_PHRASE:
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 0ae0e1323..7a3019f56 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -54,7 +54,7 @@ struct EggHatchData
u8 textColor[3];
};
-extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
+extern const u32 gTradePlatform_Tilemap[];
extern const u8 gText_HatchedFromEgg[];
extern const u8 gText_NicknameHatchPrompt[];
@@ -546,7 +546,7 @@ static void CB2_EggHatch_0(void)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
LoadPalette(gTradeGba2_Pal, 0x10, 0xA0);
LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0);
- CopyToBgTilemapBuffer(1, gUnknown_08331F60, 0x1000, 0);
+ CopyToBgTilemapBuffer(1, gTradePlatform_Tilemap, 0x1000, 0);
CopyBgTilemapBufferToVram(1);
gMain.state++;
break;
@@ -811,7 +811,7 @@ static void SpriteCB_Egg_5(struct Sprite* sprite)
if (sprite->data[0] == 0)
{
gSprites[sEggHatchData->pokeSpriteID].invisible = FALSE;
- StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1);
+ StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], BATTLER_AFFINE_EMERGE);
}
if (sprite->data[0] == 8)
BeginNormalPaletteFade(PALETTES_ALL, -1, 0x10, 0, RGB_WHITEALPHA);
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index 5edfc120c..eef2a15d8 100755
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -14,34 +14,64 @@
#include "constants/trainers.h"
#include "constants/moves.h"
#include "constants/items.h"
+#include "constants/trainer_hill.h"
+
+enum {
+ EREADER_XFR_STATE_INIT = 0,
+ EREADER_XFR_STATE_HANDSHAKE,
+ EREADER_XFR_STATE_START,
+ EREADER_XFR_STATE_TRANSFER,
+ EREADER_XFR_STATE_TRANSFER_DONE,
+ EREADER_XFR_STATE_CHECKSUM,
+ EREADER_XFR_STATE_DONE
+};
+
+#define EREADER_XFER_EXE 1
+#define EREADER_XFER_CHK 2
+#define EREADER_XFER_SHIFT 0
+#define EREADER_XFER_MASK 3
+
+#define EREADER_CANCEL_TIMEOUT 1
+#define EREADER_CANCEL_KEY 2
+#define EREADER_CANCEL_MASK 0xC
+#define EREADER_CANCEL_SHIFT 2
-struct Unknown030012C8
+#define EREADER_CHECKSUM_OK 1
+#define EREADER_CHECKSUM_ERR 2
+#define EREADER_CHECKSUM_MASK 0x30
+#define EREADER_CHECKSUM_SHIFT 4
+
+struct SendRecvMgr
{
- u8 unk0[8];
- u32 *unk8;
- int unkC;
- int unk10;
- int unk14;
+ bool8 isParent;
+ u8 state; // EREADER_XFR_STATE_*
+ u8 xferState; // EREADER_XFER_*
+ u8 checksumResult; // EREADER_CHECKSUM_*
+ u8 cancellationReason; // EREADER_CANCEL_*
+ u32 *data; // Payload source or destination
+ int cursor; // Index of the next word
+ int size; // Last word index
+ int checksum;
};
-static void sub_81D4170(void);
-static u16 sub_81D3EE8(u8);
-static void sub_81D413C(void);
-static void sub_81D414C(void);
-static void sub_81D3F1C(u32, u32*, u32*);
-static void sub_81D3F68(void);
-
-static struct Unknown030012C8 gUnknown_030012C8;
-static u16 gUnknown_030012E0;
-static u16 gUnknown_030012E2;
-static u16 gUnknown_030012E4;
-static u16 gUnknown_030012E6;
-static u32 gUnknown_030012E8;
-static u16 gUnknown_030012EC;
-static u16 gUnknown_030012EE;
-static u16 gUnknown_030012F0;
-static u16 gUnknown_030012F2;
-static u16 gUnknown_030012F4;
+static void GetKeyInput(void);
+static u16 DetermineSendRecvState(u8);
+static void EnableSio(void);
+static void DisableTm3(void);
+static void SetUpTransferManager(size_t, const void *, void *);
+static void StartTm3(void);
+
+static struct SendRecvMgr sSendRecvMgr;
+static u16 sJoyNewOrRepeated;
+static u16 sJoyNew;
+static u16 sSendRecvStatus;
+static u16 sCounter1;
+static u32 sCounter2;
+static u16 sSavedIme;
+static u16 sSavedIe;
+static u16 sSavedTm3Cnt;
+static u16 sSavedSioCnt;
+static u16 sSavedRCnt;
static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
[0] = {
@@ -390,217 +420,217 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
},
};
-static u8 sub_81D38D4(void)
+static u8 GetTrainerHillUnkVal(void)
{
return (gSaveBlock1Ptr->trainerHill.unused + 1) % 256;
}
-static bool32 Struct_EReaderTrainerHillTrainer_ValidateChecksum(struct EReaderTrainerHillTrainer *arg0)
+static bool32 ValidateTrainerChecksum(struct EReaderTrainerHillTrainer * hillTrainer)
{
- int checksum = CalcByteArraySum((u8 *)arg0, 0x270);
- if (checksum != arg0->checksum)
+ int checksum = CalcByteArraySum((u8 *)hillTrainer, offsetof(typeof(*hillTrainer), checksum));
+ if (checksum != hillTrainer->checksum)
return FALSE;
return TRUE;
}
-bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer)
+bool8 ValidateTrainerHillData(struct EReaderTrainerHillSet * hillSet)
{
u32 i;
u32 checksum;
- int var0 = buffer->count;
- if (var0 < 1 || var0 > 8)
+ int numTrainers = hillSet->numTrainers;
+
+ // Validate number of trainers
+ if (numTrainers < 1 || numTrainers > NUM_TRAINER_HILL_TRAINERS)
return FALSE;
- for (i = 0; i < var0; i++)
+ // Validate trainers
+ for (i = 0; i < numTrainers; i++)
{
- if (!Struct_EReaderTrainerHillTrainer_ValidateChecksum(&buffer->unk_8[i]))
+ if (!ValidateTrainerChecksum(&hillSet->trainers[i]))
return FALSE;
}
- checksum = CalcByteArraySum((u8 *)buffer->unk_8, var0 * sizeof(struct EReaderTrainerHillTrainer));
- if (checksum != buffer->checksum)
+ // Validate checksum
+ checksum = CalcByteArraySum((u8 *)hillSet->trainers, numTrainers * sizeof(struct EReaderTrainerHillTrainer));
+ if (checksum != hillSet->checksum)
return FALSE;
return TRUE;
}
-static bool32 TrainerHill_VerifyChecksum(struct EReaderTrainerHillSet *buffer)
+static bool32 ValidateTrainerHillChecksum(struct EReaderTrainerHillSet *hillSet)
{
u32 checksum;
- int var0 = buffer->count;
- if (var0 < 1 || var0 > 8)
+ int numTrainers = hillSet->numTrainers;
+ if (numTrainers < 1 || numTrainers > NUM_TRAINER_HILL_TRAINERS)
return FALSE;
- checksum = CalcByteArraySum((u8 *)buffer->unk_8, sizeof(struct EReaderTrainerHillSet) - offsetof(struct EReaderTrainerHillSet, unk_8));
- if (checksum != buffer->checksum)
+ checksum = CalcByteArraySum((u8 *)hillSet->trainers, sizeof(struct EReaderTrainerHillSet) - offsetof(struct EReaderTrainerHillSet, trainers));
+ if (checksum != hillSet->checksum)
return FALSE;
return TRUE;
}
-static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct TrHillTag *buffer2)
+static bool32 TryWriteTrainerHill_Internal(struct EReaderTrainerHillSet * hillSet, struct TrHillTag * hillTag)
{
int i;
- AGB_ASSERT_EX(ttdata->dummy == 0, "cereader_tool.c", 450);
- AGB_ASSERT_EX(ttdata->id == 0, "cereader_tool.c", 452);
+ AGB_ASSERT_EX(hillSet->dummy == 0, "cereader_tool.c", 450);
+ AGB_ASSERT_EX(hillSet->id == 0, "cereader_tool.c", 452);
- memset(buffer2, 0, 0x1000);
- buffer2->numTrainers = ttdata->count;
- buffer2->unused1 = sub_81D38D4();
- buffer2->numFloors = (ttdata->count + 1) / 2;
+ memset(hillTag, 0, SECTOR_SIZE);
+ hillTag->numTrainers = hillSet->numTrainers;
+ hillTag->unused1 = GetTrainerHillUnkVal();
+ hillTag->numFloors = (hillSet->numTrainers + 1) / TRAINER_HILL_TRAINERS_PER_FLOOR;
- for (i = 0; i < ttdata->count; i++)
+ for (i = 0; i < hillSet->numTrainers; i++)
{
if (!(i & 1))
{
- buffer2->floors[i / 2].trainerNum1 = ttdata->unk_8[i].unk0;
- buffer2->floors[i / 2].display = ttdata->unk_8[i].unk14C;
- buffer2->floors[i / 2].trainers[0] = ttdata->unk_8[i].unk4;
+ hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainerNum1 = hillSet->trainers[i].trainerNum;
+ hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].display = hillSet->trainers[i].display;
+ hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[0] = hillSet->trainers[i].trainer;
}
else
{
- buffer2->floors[i / 2].trainerNum2 = ttdata->unk_8[i].unk0;
- buffer2->floors[i / 2].trainers[1] = ttdata->unk_8[i].unk4;
+ hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainerNum2 = hillSet->trainers[i].trainerNum;
+ hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[1] = hillSet->trainers[i].trainer;
}
}
if (i & 1)
{
- buffer2->floors[i / 2].trainers[1] = sTrainerHillTrainerTemplates_JP[i / 2];
+ hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[1] = sTrainerHillTrainerTemplates_JP[i / TRAINER_HILL_TRAINERS_PER_FLOOR];
}
- buffer2->checksum = CalcByteArraySum((u8 *)buffer2->floors, 4 * sizeof(struct TrHillFloor));
- if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)buffer2) != SAVE_STATUS_OK)
+ hillTag->checksum = CalcByteArraySum((u8 *)hillTag->floors, NUM_TRAINER_HILL_FLOORS * sizeof(struct TrHillFloor));
+ if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)hillTag) != SAVE_STATUS_OK)
return FALSE;
return TRUE;
}
-bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *arg0)
+bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet * hillSet)
{
- void *var0 = AllocZeroed(0x1000);
- bool32 result = TryWriteTrainerHill_r(arg0, var0);
- Free(var0);
+ void *buffer = AllocZeroed(SECTOR_SIZE);
+ bool32 result = TryWriteTrainerHill_Internal(hillSet, buffer);
+ Free(buffer);
return result;
}
-static bool32 TryReadTrainerHill_r(struct EReaderTrainerHillSet *dst, u8 *buffer)
+static bool32 TryReadTrainerHill_Internal(struct EReaderTrainerHillSet * dest, u8 * buffer)
{
if (TryReadSpecialSaveSection(SECTOR_ID_TRAINER_HILL, buffer) != SAVE_STATUS_OK)
return FALSE;
- memcpy(dst, buffer, sizeof(struct EReaderTrainerHillSet));
- if (!TrainerHill_VerifyChecksum(dst))
+ memcpy(dest, buffer, sizeof(struct EReaderTrainerHillSet));
+ if (!ValidateTrainerHillChecksum(dest))
return FALSE;
return TRUE;
}
-static bool32 TryReadTrainerHill(struct EReaderTrainerHillSet *arg0)
+static bool32 TryReadTrainerHill(struct EReaderTrainerHillSet * hillSet)
{
- u8 *var0 = AllocZeroed(0x1000);
- bool32 result = TryReadTrainerHill_r(arg0, var0);
- Free(var0);
+ u8 *buffer = AllocZeroed(SECTOR_SIZE);
+ bool32 result = TryReadTrainerHill_Internal(hillSet, buffer);
+ Free(buffer);
return result;
}
bool32 ReadTrainerHillAndValidate(void)
{
- struct EReaderTrainerHillSet *var0 = AllocZeroed(0x1000);
- bool32 result = TryReadTrainerHill(var0);
- Free(var0);
+ struct EReaderTrainerHillSet *hillSet = AllocZeroed(SECTOR_SIZE);
+ bool32 result = TryReadTrainerHill(hillSet);
+ Free(hillSet);
return result;
}
-int EReader_Send(int arg0, u32 *arg1)
+int EReader_Send(int size, const void * src)
{
int result;
- u16 var0;
- int var1;
+ int sendStatus;
EReaderHelper_SaveRegsState();
while (1)
{
- sub_81D4170();
- if (gUnknown_030012E2 & 2)
+ GetKeyInput();
+ if (sJoyNew & B_BUTTON)
gShouldAdvanceLinkState = 2;
- var1 = EReaderHandleTransfer(1, arg0, arg1, NULL);
- gUnknown_030012E4 = var1;
- if ((gUnknown_030012E4 & 0x13) == 0x10)
+ sendStatus = EReaderHandleTransfer(1, size, src, NULL);
+ sSendRecvStatus = sendStatus;
+ if ((sSendRecvStatus & 0x13) == 0x10)
{
result = 0;
break;
}
-
- if (gUnknown_030012E4 & 0x8)
+ else if (sSendRecvStatus & 0x8)
{
result = 1;
break;
}
-
- var0 = gUnknown_030012E4 & 0x4;
- if (var0)
+ else if (sSendRecvStatus & 0x4)
{
result = 2;
break;
}
-
- gShouldAdvanceLinkState = var0;
- VBlankIntrWait();
+ else
+ {
+ gShouldAdvanceLinkState = 0;
+ VBlankIntrWait();
+ }
}
- CpuFill32(0, &gUnknown_030012C8, sizeof(struct Unknown030012C8));
+ CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr));
EReaderHelper_RestoreRegsState();
return result;
}
-int EReader_Recv(u32 *arg0)
+int EReader_Recv(void * dest)
{
int result;
- u16 var0;
- int var1;
+ int recvStatus;
EReaderHelper_SaveRegsState();
while (1)
{
- sub_81D4170();
- if (gUnknown_030012E2 & 2)
+ GetKeyInput();
+ if (sJoyNew & B_BUTTON)
gShouldAdvanceLinkState = 2;
- var1 = EReaderHandleTransfer(0, 0, NULL, arg0);
- gUnknown_030012E4 = var1;
- if ((gUnknown_030012E4 & 0x13) == 0x10)
+ recvStatus = EReaderHandleTransfer(0, 0, NULL, dest);
+ sSendRecvStatus = recvStatus;
+ if ((sSendRecvStatus & 0x13) == 0x10)
{
result = 0;
break;
}
-
- if (gUnknown_030012E4 & 0x8)
+ else if (sSendRecvStatus & 0x8)
{
result = 1;
break;
}
-
- var0 = gUnknown_030012E4 & 0x4;
- if (var0)
+ else if (sSendRecvStatus & 0x4)
{
result = 2;
break;
}
-
- gShouldAdvanceLinkState = var0;
- VBlankIntrWait();
+ else
+ {
+ gShouldAdvanceLinkState = 0;
+ VBlankIntrWait();
+ }
}
- CpuFill32(0, &gUnknown_030012C8, sizeof(struct Unknown030012C8));
+ CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr));
EReaderHelper_RestoreRegsState();
return result;
}
-static void sub_81D3C7C(void)
+static void CloseSerial(void)
{
REG_IME = 0;
REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
@@ -610,7 +640,7 @@ static void sub_81D3C7C(void)
REG_IF = INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL;
}
-static void sub_81D3CBC(void)
+static void OpenSerialMulti(void)
{
REG_IME = 0;
REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
@@ -622,273 +652,271 @@ static void sub_81D3CBC(void)
REG_IE |= INTR_FLAG_SERIAL;
REG_IME = 1;
- if (!gUnknown_030012C8.unk0[1])
- CpuFill32(0, &gUnknown_030012C8, sizeof(struct Unknown030012C8));
+ if (sSendRecvMgr.state == 0)
+ CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr));
}
-static void sub_81D3D34(void)
+static void OpenSerial32(void)
{
REG_RCNT = 0;
REG_SIOCNT = SIO_32BIT_MODE | SIO_INTR_ENABLE;
REG_SIOCNT |= SIO_MULTI_SD;
gShouldAdvanceLinkState = 0;
- gUnknown_030012E6 = 0;
- gUnknown_030012E8 = 0;
+ sCounter1 = 0;
+ sCounter2 = 0;
}
-int EReaderHandleTransfer(u8 arg0, u32 arg1, u32 *arg2, u32 *arg3)
+int EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBuffer)
{
- switch (gUnknown_030012C8.unk0[1])
+ switch (sSendRecvMgr.state)
{
- case 0:
- sub_81D3CBC();
- gUnknown_030012C8.unk0[2] = 1;
- gUnknown_030012C8.unk0[1] = 1;
+ case EREADER_XFR_STATE_INIT:
+ OpenSerialMulti();
+ sSendRecvMgr.xferState = EREADER_XFER_EXE;
+ sSendRecvMgr.state = EREADER_XFR_STATE_HANDSHAKE;
break;
- case 1:
- if (sub_81D3EE8(arg0))
- sub_81D413C();
+ case EREADER_XFR_STATE_HANDSHAKE:
+ if (DetermineSendRecvState(mode))
+ EnableSio();
if (gShouldAdvanceLinkState == 2)
{
- gUnknown_030012C8.unk0[4] = 2;
- gUnknown_030012C8.unk0[1] = 6;
+ sSendRecvMgr.cancellationReason = EREADER_CANCEL_KEY;
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
break;
- case 2:
- sub_81D3D34();
- sub_81D3F1C(arg1, arg2, arg3);
- gUnknown_030012C8.unk0[1] = 3;
+ case EREADER_XFR_STATE_START:
+ OpenSerial32();
+ SetUpTransferManager(size, data, recvBuffer);
+ sSendRecvMgr.state = EREADER_XFR_STATE_TRANSFER;
// fall through
- case 3:
+ case EREADER_XFR_STATE_TRANSFER:
if (gShouldAdvanceLinkState == 2)
{
- gUnknown_030012C8.unk0[4] = 2;
- gUnknown_030012C8.unk0[1] = 6;
+ sSendRecvMgr.cancellationReason = EREADER_CANCEL_KEY;
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
else
{
- gUnknown_030012E6++;
- gUnknown_030012E8++;
- if (!gUnknown_030012C8.unk0[0] && gUnknown_030012E8 > 60)
+ sCounter1++;
+ sCounter2++;
+ if (!sSendRecvMgr.isParent && sCounter2 > 60)
{
- gUnknown_030012C8.unk0[4] = 1;
- gUnknown_030012C8.unk0[1] = 6;
+ sSendRecvMgr.cancellationReason = EREADER_CANCEL_TIMEOUT;
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
- if (gUnknown_030012C8.unk0[2] != 2)
+ if (sSendRecvMgr.xferState != EREADER_XFER_CHK)
{
- if (gUnknown_030012C8.unk0[0] && gUnknown_030012E6 > 2)
+ if (sSendRecvMgr.isParent && sCounter1 > 2)
{
- sub_81D413C();
- gUnknown_030012C8.unk0[2] = 2;
+ EnableSio();
+ sSendRecvMgr.xferState = EREADER_XFER_CHK;
}
else
{
- sub_81D413C();
- gUnknown_030012C8.unk0[2] = 2;
+ EnableSio();
+ sSendRecvMgr.xferState = EREADER_XFER_CHK;
}
}
}
break;
- case 4:
- sub_81D3CBC();
- gUnknown_030012C8.unk0[1] = 5;
+ case EREADER_XFR_STATE_TRANSFER_DONE:
+ OpenSerialMulti();
+ sSendRecvMgr.state = EREADER_XFR_STATE_CHECKSUM;
break;
- case 5:
- if (gUnknown_030012C8.unk0[0] == 1 && gUnknown_030012E6 > 2)
- sub_81D413C();
+ case EREADER_XFR_STATE_CHECKSUM:
+ if (sSendRecvMgr.isParent == TRUE && sCounter1 > 2)
+ EnableSio();
- if (++gUnknown_030012E6 > 60)
+ if (++sCounter1 > 60)
{
- gUnknown_030012C8.unk0[4] = 1;
- gUnknown_030012C8.unk0[1] = 6;
+ sSendRecvMgr.cancellationReason = EREADER_CANCEL_TIMEOUT;
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
break;
- case 6:
- if (gUnknown_030012C8.unk0[2])
+ case EREADER_XFR_STATE_DONE:
+ if (sSendRecvMgr.xferState)
{
- sub_81D3C7C();
- gUnknown_030012C8.unk0[2] = 0;
+ CloseSerial();
+ sSendRecvMgr.xferState = 0;
}
break;
}
- return gUnknown_030012C8.unk0[2] | (gUnknown_030012C8.unk0[4] << 2) | (gUnknown_030012C8.unk0[3] << 4);
+ return (sSendRecvMgr.xferState << EREADER_XFER_SHIFT)
+ | (sSendRecvMgr.cancellationReason << EREADER_CANCEL_SHIFT)
+ | (sSendRecvMgr.checksumResult << EREADER_CHECKSUM_SHIFT);
}
-static u16 sub_81D3EE8(u8 arg0)
+static u16 DetermineSendRecvState(u8 mode)
{
- u16 terminal = (*(vu32 *)REG_ADDR_SIOCNT) & (SIO_MULTI_SI | SIO_MULTI_SD);
- if (terminal == SIO_MULTI_SD && arg0)
- {
- gUnknown_030012C8.unk0[0] = 1;
- return 1;
- }
+ bool16 resp;
+ if ((*(vu32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SI | SIO_MULTI_SD)) == SIO_MULTI_SD && mode)
+ resp = sSendRecvMgr.isParent = TRUE;
else
- {
- gUnknown_030012C8.unk0[0] = 0;
- return 0;
- }
+ resp = sSendRecvMgr.isParent = FALSE;
+ return resp;
}
-static void sub_81D3F1C(u32 arg0, u32 *arg1, u32 *arg2)
+static void SetUpTransferManager(size_t size, const void * data, void * recvBuffer)
{
- if (gUnknown_030012C8.unk0[0])
+ if (sSendRecvMgr.isParent)
{
REG_SIOCNT |= SIO_38400_BPS;
- gUnknown_030012C8.unk8 = arg1;
- REG_SIODATA32 = arg0;
- gUnknown_030012C8.unk10 = arg0 / 4 + 1;
- sub_81D3F68();
+ sSendRecvMgr.data = (void *)data;
+ REG_SIODATA32 = size;
+ sSendRecvMgr.size = size / 4 + 1;
+ StartTm3();
}
else
{
REG_SIOCNT = REG_SIOCNT;
- gUnknown_030012C8.unk8 = arg2;
+ sSendRecvMgr.data = recvBuffer;
}
}
-static void sub_81D3F68(void)
+static void StartTm3(void)
{
- REG_TM3CNT_L = 0xFDA7;
+ REG_TM3CNT_L = -601;
REG_TM3CNT_H = TIMER_INTR_ENABLE;
REG_IME = 0;
REG_IE |= INTR_FLAG_TIMER3;
REG_IME = 1;
}
-void sub_81D3F9C(void)
+void EReaderHelper_Timer3Callback(void)
{
- sub_81D414C();
- sub_81D413C();
+ DisableTm3();
+ EnableSio();
}
-void sub_81D3FAC(void)
+void EReaderHelper_SerialCallback(void)
{
- u16 i, playerCount, k;
- u32 value;
- u16 var0;
- u16 recvBuffer[4];
+ u16 i, cnt1, cnt2;
+ u32 recv32;
+ u16 recv[4];
- switch (gUnknown_030012C8.unk0[1])
+ switch (sSendRecvMgr.state)
{
- case 1:
+ case EREADER_XFR_STATE_HANDSHAKE:
REG_SIOMLT_SEND = 0xCCD0; // Handshake id
- *(u64 *)recvBuffer = REG_SIOMLT_RECV;
- for (i = 0, playerCount = 0, k = 0; i < 4; i++)
+ *(u64 *)recv = REG_SIOMLT_RECV;
+ for (i = 0, cnt1 = 0, cnt2 = 0; i < 4; i++)
{
- if (recvBuffer[i] == 0xCCD0)
- playerCount++;
- else if (recvBuffer[i] != 0xFFFF)
- k++;
+ if (recv[i] == 0xCCD0)
+ cnt1++;
+ else if (recv[i] != 0xFFFF)
+ cnt2++;
}
- if (playerCount == 2 && k == 0)
- gUnknown_030012C8.unk0[1] = 2;
+ if (cnt1 == 2 && cnt2 == 0)
+ sSendRecvMgr.state = 2;
break;
- case 3:
- value = REG_SIODATA32;
- if (!gUnknown_030012C8.unkC && !gUnknown_030012C8.unk0[0])
- gUnknown_030012C8.unk10 = value / 4 + 1;
+ case EREADER_XFR_STATE_TRANSFER:
+ recv32 = REG_SIODATA32;
+ // The first value sent by the EReader is the payload size
+ if (!sSendRecvMgr.cursor && !sSendRecvMgr.isParent)
+ sSendRecvMgr.size = recv32 / 4 + 1;
- if (gUnknown_030012C8.unk0[0] == 1)
+ if (sSendRecvMgr.isParent == TRUE)
{
- if (gUnknown_030012C8.unkC < gUnknown_030012C8.unk10)
+ // Send mode
+ if (sSendRecvMgr.cursor < sSendRecvMgr.size)
{
- REG_SIODATA32 = gUnknown_030012C8.unk8[gUnknown_030012C8.unkC];
- gUnknown_030012C8.unk14 += gUnknown_030012C8.unk8[gUnknown_030012C8.unkC];
+ REG_SIODATA32 = sSendRecvMgr.data[sSendRecvMgr.cursor];
+ sSendRecvMgr.checksum += sSendRecvMgr.data[sSendRecvMgr.cursor];
}
else
{
- REG_SIODATA32 = gUnknown_030012C8.unk14;
+ REG_SIODATA32 = sSendRecvMgr.checksum;
}
}
else
{
- if (gUnknown_030012C8.unkC > 0 && gUnknown_030012C8.unkC < gUnknown_030012C8.unk10 + 1)
+ // Receive mode
+ if (sSendRecvMgr.cursor > 0 && sSendRecvMgr.cursor < sSendRecvMgr.size + 1)
{
- gUnknown_030012C8.unk8[gUnknown_030012C8.unkC - 1] = value;
- gUnknown_030012C8.unk14 += value;
+ sSendRecvMgr.data[sSendRecvMgr.cursor - 1] = recv32;
+ sSendRecvMgr.checksum += recv32;
}
- else if (gUnknown_030012C8.unkC)
+ else if (sSendRecvMgr.cursor)
{
- if (gUnknown_030012C8.unk14 == value)
- gUnknown_030012C8.unk0[3] = 1;
+ if (sSendRecvMgr.checksum == recv32)
+ sSendRecvMgr.checksumResult = EREADER_CHECKSUM_OK;
else
- gUnknown_030012C8.unk0[3] = 2;
+ sSendRecvMgr.checksumResult = EREADER_CHECKSUM_ERR;
}
- gUnknown_030012E8 = 0;
+ sCounter2 = 0;
}
- if (++gUnknown_030012C8.unkC < gUnknown_030012C8.unk10 + 2)
+ if (++sSendRecvMgr.cursor < sSendRecvMgr.size + 2)
{
- if (gUnknown_030012C8.unk0[0])
+ if (sSendRecvMgr.isParent)
REG_TM3CNT_H |= TIMER_ENABLE;
else
- sub_81D413C();
+ EnableSio();
}
else
{
- gUnknown_030012C8.unk0[1] = 4;
- gUnknown_030012E6 = 0;
+ sSendRecvMgr.state = EREADER_XFR_STATE_TRANSFER_DONE;
+ sCounter1 = 0;
}
break;
- case 5:
- if (!gUnknown_030012C8.unk0[0])
- REG_SIOMLT_SEND = gUnknown_030012C8.unk0[3];
+ case EREADER_XFR_STATE_CHECKSUM:
+ if (!sSendRecvMgr.isParent)
+ REG_SIOMLT_SEND = sSendRecvMgr.checksumResult;
- *(u64 *)recvBuffer = REG_SIOMLT_RECV;
- var0 = recvBuffer[1] - 1;
- if (var0 < 2)
+ *(vu64 *)recv = REG_SIOMLT_RECV;
+ if (recv[1] == EREADER_CHECKSUM_OK || recv[1] == EREADER_CHECKSUM_ERR)
{
- if (gUnknown_030012C8.unk0[0] == 1)
- gUnknown_030012C8.unk0[3] = recvBuffer[1];
+ if (sSendRecvMgr.isParent == TRUE)
+ sSendRecvMgr.checksumResult = recv[1]; // EReader has (in)validated the payload
- gUnknown_030012C8.unk0[1] = 6;
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
break;
}
}
-static void sub_81D413C(void)
+static void EnableSio(void)
{
REG_SIOCNT |= SIO_ENABLE;
}
-static void sub_81D414C(void)
+static void DisableTm3(void)
{
REG_TM3CNT_H &= ~TIMER_ENABLE;
REG_TM3CNT_L = 0xFDA7;
}
-static void sub_81D4170(void)
+static void GetKeyInput(void)
{
- int keysMask = REG_KEYINPUT ^ KEYS_MASK;
- gUnknown_030012E2 = keysMask & ~gUnknown_030012E0;
- gUnknown_030012E0 = keysMask;
+ int rawKeys = REG_KEYINPUT ^ KEYS_MASK;
+ sJoyNew = rawKeys & ~sJoyNewOrRepeated;
+ sJoyNewOrRepeated = rawKeys;
}
void EReaderHelper_SaveRegsState(void)
{
- gUnknown_030012EC = REG_IME;
- gUnknown_030012EE = REG_IE;
- gUnknown_030012F0 = REG_TM3CNT_H;
- gUnknown_030012F2 = REG_SIOCNT;
- gUnknown_030012F4 = REG_RCNT;
+ sSavedIme = REG_IME;
+ sSavedIe = REG_IE;
+ sSavedTm3Cnt = REG_TM3CNT_H;
+ sSavedSioCnt = REG_SIOCNT;
+ sSavedRCnt = REG_RCNT;
}
void EReaderHelper_RestoreRegsState(void)
{
- REG_IME = gUnknown_030012EC;
- REG_IE = gUnknown_030012EE;
- REG_TM3CNT_H = gUnknown_030012F0;
- REG_SIOCNT = gUnknown_030012F2;
- REG_RCNT = gUnknown_030012F4;
+ REG_IME = sSavedIme;
+ REG_IE = sSavedIe;
+ REG_TM3CNT_H = sSavedTm3Cnt;
+ REG_SIOCNT = sSavedSioCnt;
+ REG_RCNT = sSavedRCnt;
}
-void sub_81D4238(void)
+void EReaderHelper_ClearSendRecvMgr(void)
{
- CpuFill32(0, &gUnknown_030012C8, sizeof(struct Unknown030012C8));
+ CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr));
}
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index d27605c1d..438c4bec9 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -47,10 +47,10 @@ static void sub_81D4D50(struct Unk03006370 *arg0, int arg1, u32 *arg2)
{
volatile u16 backupIME = REG_IME;
REG_IME = 0;
- gIntrTable[1] = sub_81D3FAC;
- gIntrTable[2] = sub_81D3F9C;
+ gIntrTable[1] = EReaderHelper_SerialCallback;
+ gIntrTable[2] = EReaderHelper_Timer3Callback;
EReaderHelper_SaveRegsState();
- sub_81D4238();
+ EReaderHelper_ClearSendRecvMgr();
REG_IE |= INTR_FLAG_VCOUNT;
REG_IME = backupIME;
arg0->unk0 = 0;
@@ -62,7 +62,7 @@ static void sub_81D4DB8(struct Unk03006370 *arg0)
{
volatile u16 backupIME = REG_IME;
REG_IME = 0;
- sub_81D4238();
+ EReaderHelper_ClearSendRecvMgr();
EReaderHelper_RestoreRegsState();
RestoreSerialTimer3IntrHandlers();
REG_IME = backupIME;
@@ -401,7 +401,7 @@ static void sub_81D5084(u8 taskId)
}
break;
case 15:
- data->unkE = EReader_IsReceivedDataValid((struct EReaderTrainerHillSet *)gDecompressionBuffer);
+ data->unkE = ValidateTrainerHillData((struct EReaderTrainerHillSet *)gDecompressionBuffer);
SetCloseLinkCallbackAndType(data->unkE);
data->unk8 = 16;
break;
diff --git a/src/field_specials.c b/src/field_specials.c
index df16583ed..13fad83b1 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -57,7 +57,6 @@
#include "constants/map_types.h"
#include "constants/maps.h"
#include "constants/mevent.h"
-#include "constants/tv.h"
#include "constants/script_menu.h"
#include "constants/slot_machine.h"
#include "constants/songs.h"
@@ -1622,7 +1621,7 @@ void BufferLottoTicketNumber(void)
{
if (gSpecialVar_Result >= 10000)
{
- TV_PrintIntToStringVar(0, gSpecialVar_Result);
+ ConvertIntToDecimalString(0, gSpecialVar_Result);
}
else if (gSpecialVar_Result >= 1000)
{
diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c
index 914ba2880..3d3b83fef 100644
--- a/src/fldeff_misc.c
+++ b/src/fldeff_misc.c
@@ -22,7 +22,6 @@
#include "constants/metatile_behaviors.h"
#include "constants/metatile_labels.h"
#include "constants/songs.h"
-#include "constants/tv.h"
EWRAM_DATA struct MapPosition gPlayerFacingPosition = {0};
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 491aef936..4aec27944 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -1552,16 +1552,16 @@ static void CheckPutFrontierTVShowOnAir(void)
switch (battleMode)
{
case FRONTIER_MODE_SINGLES:
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_TOWER_SINGLES);
break;
case FRONTIER_MODE_DOUBLES:
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_TOWER_DOUBLES);
break;
case FRONTIER_MODE_MULTIS:
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_TOWER_MULTIS);
break;
case FRONTIER_MODE_LINK_MULTIS:
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_TOWER_LINK_MULTIS);
break;
}
}
@@ -1575,9 +1575,9 @@ static void CheckPutFrontierTVShowOnAir(void)
&& ShouldAirFrontierTVShow())
{
if (battleMode == FRONTIER_MODE_SINGLES)
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_DOME_SINGLES);
else
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_DOME_DOUBLES);
}
}
break;
@@ -1589,9 +1589,9 @@ static void CheckPutFrontierTVShowOnAir(void)
&& ShouldAirFrontierTVShow())
{
if (battleMode == FRONTIER_MODE_SINGLES)
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_PALACE_SINGLES);
else
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_PALACE_DOUBLES);
}
}
break;
@@ -1602,7 +1602,7 @@ static void CheckPutFrontierTVShowOnAir(void)
if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 1
&& ShouldAirFrontierTVShow())
{
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], FRONTIER_SHOW_ARENA);
}
}
break;
@@ -1615,9 +1615,9 @@ static void CheckPutFrontierTVShowOnAir(void)
&& ShouldAirFrontierTVShow())
{
if (battleMode == FRONTIER_MODE_SINGLES)
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_FACTORY_SINGLES);
else
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], FRONTIER_SHOW_FACTORY_DOUBLES);
}
}
break;
@@ -1628,7 +1628,7 @@ static void CheckPutFrontierTVShowOnAir(void)
if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > 1
&& ShouldAirFrontierTVShow())
{
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], FRONTIER_SHOW_PIKE);
}
}
break;
@@ -1639,7 +1639,7 @@ static void CheckPutFrontierTVShowOnAir(void)
if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > 1
&& ShouldAirFrontierTVShow())
{
- TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], FRONTIER_SHOW_PYRAMID);
}
}
break;
diff --git a/src/graphics.c b/src/graphics.c
index 09779eab7..c3ac6c2df 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -471,11 +471,11 @@ const u8 gContestSliderHeart_Gfx[] = INCBIN_U8("graphics/contest/slider_heart.4b
const u32 gUnknownGfx_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.4bpp.lz");
const u32 gUnknownPal_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.gbapal.lz");
-const u32 gContestResults_Gfx[] = INCBIN_U32("graphics/contest/results_screen.4bpp.lz");
-const u32 gUnknown_08C19EEC[] = INCBIN_U32("graphics/contest/misc_2_tilemap_1.bin.lz");
-const u32 gUnknown_08C1A000[] = INCBIN_U32("graphics/contest/misc_2_tilemap_2.bin.lz");
-const u32 gUnknown_08C1A12C[] = INCBIN_U32("graphics/contest/misc_2_tilemap_3.bin.lz");
-const u32 gContestResults_Pal[] = INCBIN_U32("graphics/contest/results_screen.gbapal.lz");
+const u32 gContestResults_Gfx[] = INCBIN_U32("graphics/contest/results_screen/tiles.4bpp.lz");
+const u32 gContestResults_WinnerBanner_Tilemap[] = INCBIN_U32("graphics/contest/results_screen/winner_banner.bin.lz");
+const u32 gContestResults_Interface_Tilemap[] = INCBIN_U32("graphics/contest/results_screen/interface.bin.lz");
+const u32 gContestResults_Bg_Tilemap[] = INCBIN_U32("graphics/contest/results_screen/bg.bin.lz");
+const u32 gContestResults_Pal[] = INCBIN_U32("graphics/contest/results_screen/tiles.gbapal.lz");
const u32 gBattleAnimSpriteGfx_Impact[] = INCBIN_U32("graphics/battle_anims/sprites/impact.4bpp.lz");
const u32 gBattleAnimSpritePal_Impact[] = INCBIN_U32("graphics/battle_anims/sprites/impact.gbapal.lz");
@@ -1296,17 +1296,17 @@ const u8 gBagMenuHMIcon_Gfx[] = INCBIN_U8("graphics/interface/hm.4bpp");
// contest results screen
-const u16 gNormalContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_normal.bin");
-const u16 gSuperContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_super.bin");
-const u16 gHyperContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_hyper.bin");
-const u16 gMasterContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_master.bin");
-const u16 gLinkContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_link.bin");
-const u16 gCoolContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_cool.bin");
-const u16 gBeautyContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_beauty.bin");
-const u16 gCuteContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_cute.bin");
-const u16 gSmartContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_smart.bin");
-const u16 gToughContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen_tough.bin");
-const u16 gContestResults_Tilemap[] = INCBIN_U16("graphics/contest/results_screen.bin");
+const u16 gContestResultsTitle_Normal_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_normal.bin");
+const u16 gContestResultsTitle_Super_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_super.bin");
+const u16 gContestResultsTitle_Hyper_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_hyper.bin");
+const u16 gContestResultsTitle_Master_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_master.bin");
+const u16 gContestResultsTitle_Link_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_link.bin");
+const u16 gContestResultsTitle_Cool_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_cool.bin");
+const u16 gContestResultsTitle_Beauty_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_beauty.bin");
+const u16 gContestResultsTitle_Cute_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_cute.bin");
+const u16 gContestResultsTitle_Smart_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_smart.bin");
+const u16 gContestResultsTitle_Tough_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_tough.bin");
+const u16 gContestResultsTitle_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title.bin");
// pokenav
@@ -1411,9 +1411,9 @@ const u32 gKantoTrainerCardFrontLink_Tilemap[] = INCBIN_U32("graphics/trainer_ca
// pokemon storage system
-const u32 gPSSMenu_Gfx[] = INCBIN_U32("graphics/pokemon_storage/menu.4bpp.lz");
-const u16 gPSSMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/menu.gbapal");
-const u32 gUnknown_08DD36C8[] = INCBIN_U32("graphics/unknown/unknown_DD36C8.bin.lz");
+const u32 gStorageSystemMenu_Gfx[] = INCBIN_U32("graphics/pokemon_storage/menu.4bpp.lz");
+const u16 gStorageSystemPartyMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/menu.gbapal"); // Only used by party menu, but generated from all menu gfx
+const u32 gStorageSystemPartyMenu_Tilemap[] = INCBIN_U32("graphics/pokemon_storage/party_menu.bin.lz");
// naming screen
@@ -1474,9 +1474,9 @@ static const u16 sEmptyPal[16] = {0};
// Trade
const u16 gTradeMenu_Pal[] = INCBIN_U16("graphics/trade/menu.gbapal");
-const u16 gUnknown_08DDB444[] = INCBIN_U16("graphics/trade/unknown_DDB444.gbapal");
+const u16 gTradeCursor_Pal[] = INCBIN_U16("graphics/trade/cursor.gbapal");
const u8 gTradeMenu_Gfx[] = INCBIN_U8("graphics/trade/menu.4bpp");
-const u8 gTradeButtons_Gfx[] = INCBIN_U8("graphics/trade/buttons.4bpp");
+const u8 gTradeCursor_Gfx[] = INCBIN_U8("graphics/trade/cursor.4bpp");
const u16 gUnused_DDCEE4[] = INCBIN_U16("graphics/unused/unused_DDCEE4.bin");
const u16 gUnknown_08DDCF04[] = INCBIN_U16("graphics/trade/unknown_DDCF04.bin");
const u16 gTradeMenuMonBox_Tilemap[] = INCBIN_U16("graphics/trade/menu_mon_box.bin");
@@ -1484,27 +1484,27 @@ const u16 gTradeMenuMonBox_Tilemap[] = INCBIN_U16("graphics/trade/menu_mon_box.b
const u16 gMessageBox_Pal[] = INCBIN_U16("graphics/text_window/message_box.gbapal");
const u8 gMessageBox_Gfx[] = INCBIN_U8("graphics/text_window/message_box.4bpp");
-const u32 gWallpaperIcon_Cross[] = INCBIN_U32("graphics/pokemon_storage/cross_icon.4bpp.lz");
-const u32 gWallpaperIcon_Bolt[] = INCBIN_U32("graphics/pokemon_storage/bolt_icon.4bpp.lz");
-const u32 gWallpaperIcon_Plusle[] = INCBIN_U32("graphics/pokemon_storage/plusle_icon.4bpp.lz");
+const u32 gWallpaperIcon_Cross[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/cross.4bpp.lz");
+const u32 gWallpaperIcon_Bolt[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/bolt.4bpp.lz");
+const u32 gWallpaperIcon_Plusle[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/plusle.4bpp.lz");
const u16 gWallpaperPalettes_Horizontal[][16] =
{
- INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/horizontal_bg.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/friends_frame2.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/horizontal/bg.gbapal"),
};
-const u32 gWallpaperTiles_Horizontal[] = INCBIN_U32("graphics/pokemon_storage/horizontal.4bpp.lz");
-const u32 gWallpaperTilemap_Horizontal[] = INCBIN_U32("graphics/pokemon_storage/horizontal.bin.lz");
+const u32 gWallpaperTiles_Horizontal[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/horizontal/tiles.4bpp.lz");
+const u32 gWallpaperTilemap_Horizontal[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/horizontal/tilemap.bin.lz");
const u16 gWallpaperPalettes_Ribbon[][16] =
{
- INCBIN_U16("graphics/pokemon_storage/ribbon_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/ribbon_bg.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/ribbon/frame.gbapal"),
+ INCBIN_U16("graphics/pokemon_storage/wallpapers/ribbon/bg.gbapal"),
};
-const u32 gWallpaperTiles_Ribbon[] = INCBIN_U32("graphics/pokemon_storage/ribbon.4bpp.lz");
-const u32 gWallpaperTilemap_Ribbon[] = INCBIN_U32("graphics/pokemon_storage/ribbon.bin.lz");
+const u32 gWallpaperTiles_Ribbon[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/ribbon/tiles.4bpp.lz");
+const u32 gWallpaperTilemap_Ribbon[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/ribbon/tilemap.bin.lz");
const u16 gPokenavRibbonsSummaryBg_Pal[] = INCBIN_U16("graphics/pokenav/ribbons/summary_bg.gbapal");
const u32 gPokenavRibbonsSummaryBg_Gfx[] = INCBIN_U32("graphics/pokenav/ribbons/summary_bg.4bpp.lz");
diff --git a/src/international_string_util.c b/src/international_string_util.c
index ed1e17816..ab812de89 100644
--- a/src/international_string_util.c
+++ b/src/international_string_util.c
@@ -185,7 +185,7 @@ void ConvertInternationalPlayerNameStripChar(u8 *str, u8 removeChar)
}
}
-void sub_81DB5AC(u8 *str)
+void ConvertInternationalContestantName(u8 *str)
{
if (*str++ == EXT_CTRL_CODE_BEGIN && *str++ == EXT_CTRL_CODE_JPN)
{
diff --git a/src/item.c b/src/item.c
index 892092184..cc9a09ee0 100644
--- a/src/item.c
+++ b/src/item.c
@@ -14,7 +14,6 @@
#include "battle_pyramid_bag.h"
#include "constants/items.h"
#include "constants/hold_effects.h"
-#include "constants/tv.h"
extern u16 gUnknown_0203CF30[];
@@ -820,7 +819,7 @@ bool8 RemovePyramidBagItem(u16 itemId, u16 count)
u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode];
u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode];
- i = gPyramidBagCursorData.cursorPosition + gPyramidBagCursorData.scrollPosition;
+ i = gPyramidBagMenuState.cursorPosition + gPyramidBagMenuState.scrollPosition;
if (items[i] == itemId && quantities[i] >= count)
{
quantities[i] -= count;
diff --git a/src/item_menu.c b/src/item_menu.c
index 865f8d8d1..de4d82e9b 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -509,7 +509,6 @@ EWRAM_DATA u16 gSpecialVar_ItemId = 0;
static EWRAM_DATA struct TempWallyStruct *sTempWallyBag = 0;
extern u8 *const gPocketNamesStringsTable[];
-extern u8* gReturnToXStringsTable[];
extern const u8 EventScript_SelectWithoutRegisteredItem[];
extern const u16 gUnknown_0860F074[];
@@ -530,7 +529,7 @@ void CB2_BagMenuFromBattle(void)
if (!InBattlePyramid())
GoToBagMenu(ITEMMENULOCATION_BATTLE, POCKETS_COUNT, CB2_SetUpReshowBattleScreenAfterMenu2);
else
- GoToBattlePyramidBagMenu(1, CB2_SetUpReshowBattleScreenAfterMenu2);
+ GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_BATTLE, CB2_SetUpReshowBattleScreenAfterMenu2);
}
// Choosing berry to plant
@@ -947,7 +946,7 @@ void BagMenu_PrintDescription(int itemIndex)
}
else
{
- StringCopy(gStringVar1, gReturnToXStringsTable[gBagPositionStruct.location]);
+ StringCopy(gStringVar1, gBagMenu_ReturnToStrings[gBagPositionStruct.location]);
StringExpandPlaceholders(gStringVar4, gText_ReturnToVar1);
str = gStringVar4;
}
@@ -1458,7 +1457,7 @@ void sub_81AC590(u8 taskId)
gTasks[taskId].func = Task_BagMenu_HandleInput;
}
-void OpenContextMenu(u8 unused)
+static void OpenContextMenu(u8 unused)
{
switch (gBagPositionStruct.location)
{
@@ -1604,8 +1603,8 @@ void sub_81ACAF8(u8 a)
void sub_81ACB54(u8 a, u8 b, u8 c)
{
- sub_8198DBC(a, 7, 8, 1, 0x38, b, c, sItemMenuActions, gBagMenu->contextMenuItemsPtr);
- sub_8199944(a, 0x38, b, c, 0);
+ PrintMenuActionGrid(a, 7, 8, 1, 0x38, b, c, sItemMenuActions, gBagMenu->contextMenuItemsPtr);
+ InitMenuActionGrid(a, 0x38, b, c, 0);
}
void Task_ItemContext_FieldOrBattle(u8 taskId)
@@ -1850,7 +1849,7 @@ void ItemMenu_Register(u8 taskId)
void ItemMenu_Give(u8 taskId)
{
BagMenu_RemoveSomeWindow();
- if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
+ if (!IsWritingMailAllowed(gSpecialVar_ItemId))
{
DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
}
@@ -1925,7 +1924,7 @@ void CB2_ReturnToBagMenuPocket(void)
void Task_ItemContext_FieldGive(u8 taskId)
{
- if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
+ if (!IsWritingMailAllowed(gSpecialVar_ItemId))
{
DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
}
diff --git a/src/item_use.c b/src/item_use.c
index af0ca9ee5..19f50549e 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -109,8 +109,8 @@ static void SetUpItemUseCallback(u8 taskId)
}
else
{
- gPyramidBagResources->callback2 = sItemUseCallbacks[type];
- CloseBattlePyramidBagAndSetCallback(taskId);
+ gPyramidBagMenu->exitCallback = sItemUseCallbacks[type];
+ CloseBattlePyramidBag(taskId);
}
}
@@ -822,8 +822,8 @@ static void RemoveUsedItem(void)
}
else
{
- sub_81C5924();
- sub_81C59BC();
+ UpdatePyramidBagList();
+ UpdatePyramidBagCursorPos();
}
}
@@ -943,7 +943,7 @@ void ItemUseInBattle_PokeBall(u8 taskId)
if (!InBattlePyramid())
Task_FadeAndCloseBagMenu(taskId);
else
- CloseBattlePyramidBagAndSetCallback(taskId);
+ CloseBattlePyramidBag(taskId);
}
else if (!InBattlePyramid())
{
@@ -960,7 +960,7 @@ static void Task_CloseStatIncreaseMessage(u8 taskId)
if (!InBattlePyramid())
Task_FadeAndCloseBagMenu(taskId);
else
- CloseBattlePyramidBagAndSetCallback(taskId);
+ CloseBattlePyramidBag(taskId);
}
}
@@ -1005,8 +1005,8 @@ static void ItemUseInBattle_ShowPartyMenu(u8 taskId)
}
else
{
- gPyramidBagResources->callback2 = ChooseMonForInBattleItem;
- CloseBattlePyramidBagAndSetCallback(taskId);
+ gPyramidBagMenu->exitCallback = ChooseMonForInBattleItem;
+ CloseBattlePyramidBag(taskId);
}
}
@@ -1039,7 +1039,7 @@ void ItemUseInBattle_Escape(u8 taskId)
if (!InBattlePyramid())
DisplayItemMessage(taskId, 1, gStringVar4, Task_FadeAndCloseBagMenu);
else
- DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBagAndSetCallback);
+ DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBag);
}
else
{
diff --git a/src/librfu_intr.c b/src/librfu_intr.c
index 1361be40e..19ea60b06 100644
--- a/src/librfu_intr.c
+++ b/src/librfu_intr.c
@@ -148,11 +148,7 @@ static void sio32intr_clock_slave(void)
{
u32 regSIODATA32;
u32 r0;
- #ifndef NONMATCHING
- register u32 reqLen asm("r2");
- #else
- u32 reqLen;
- #endif
+ u32 reqLen;
gSTWIStatus->timerActive = 0;
STWI_set_timer_in_RAM(100);
@@ -165,10 +161,14 @@ static void sio32intr_clock_slave(void)
((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32;
gSTWIStatus->reqNext = 1;
r0 = 0x99660000;
- if ((regSIODATA32 >> 16) == (r0 >> 16))
+ // variable reuse required
+ reqLen = (regSIODATA32 >> 16);
+ if (reqLen == (r0 >> 16))
{
- gSTWIStatus->reqLength = reqLen = regSIODATA32 >> 8;
- gSTWIStatus->reqActiveCommand = regSIODATA32;
+ // only reqLen = regSIODATA32 >> 8 is needed to match, but it looks a bit
+ // more consistent when both lines update the variables. Might have been a macro?
+ gSTWIStatus->reqLength = reqLen = (regSIODATA32 >> 8);
+ gSTWIStatus->reqActiveCommand = reqLen = (regSIODATA32 >> 0);
if (gSTWIStatus->reqLength == 0)
{
if (
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
index f39ccb74c..309fc4ead 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -1550,21 +1550,20 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
u16 rfu_NI_stopReceivingData(u8 slotStatusIndex)
{
- struct NIComm *NI_comm;
u16 imeBak;
+ struct NIComm *NI_comm;
if (slotStatusIndex >= RFU_CHILD_MAX)
return ERR_SLOT_NO;
NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->recv;
imeBak = REG_IME;
- ++imeBak; --imeBak; // fix imeBak, NI_comm register swap
REG_IME = 0;
- if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & SLOT_BUSY_FLAG)
+ if (NI_comm->state & SLOT_BUSY_FLAG)
{
- if (gRfuSlotStatusNI[slotStatusIndex]->recv.state == SLOT_STATE_RECV_LAST)
- gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN;
+ if (NI_comm->state == SLOT_STATE_RECV_LAST)
+ NI_comm->state = SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN;
else
- gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_FAILED;
+ NI_comm->state = SLOT_STATE_RECV_FAILED;
gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex);
rfu_STC_releaseFrame(slotStatusIndex, 1, NI_comm);
}
@@ -1758,9 +1757,6 @@ static void rfu_constructSendLLFrame(void)
{
u8 *maxSize = llf_p - offsetof(struct RfuFixed, LLFBuffer[1]);
- // Does the volatile qualifier make sense?
- // It's the same as:
- // asm("":::"memory");
pakcketSize = maxSize - *(u8 *volatile *)&gRfuFixed;
}
}
diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c
index b6623540f..1c02840e8 100644
--- a/src/librfu_sio32id.c
+++ b/src/librfu_sio32id.c
@@ -123,34 +123,29 @@ static void Sio32IDIntr(void)
{
u32 regSIODATA32;
u16 delay;
-#ifndef NONMATCHING
- register u32 rfuSIO32IdUnk0_times_16 asm("r1");
- register u16 negRfuSIO32IdUnk6 asm("r0");
-#else
u32 rfuSIO32IdUnk0_times_16;
- u16 negRfuSIO32IdUnk6;
-#endif
regSIODATA32 = REG_SIODATA32;
if (gRfuSIO32Id.MS_mode != AGB_CLK_MASTER)
REG_SIOCNT |= SIO_ENABLE;
- rfuSIO32IdUnk0_times_16 = 16 * gRfuSIO32Id.MS_mode; // to handle side effect of inline asm
- rfuSIO32IdUnk0_times_16 = (regSIODATA32 << rfuSIO32IdUnk0_times_16) >> 16;
+ rfuSIO32IdUnk0_times_16 = (regSIODATA32 << (16 * gRfuSIO32Id.MS_mode)) >> 16;
regSIODATA32 = (regSIODATA32 << 16 * (1 - gRfuSIO32Id.MS_mode)) >> 16;
if (gRfuSIO32Id.lastId == 0)
{
- if (rfuSIO32IdUnk0_times_16 == gRfuSIO32Id.recv_id)
+ u16 backup = rfuSIO32IdUnk0_times_16;
+ if (backup == gRfuSIO32Id.recv_id)
{
- if (gRfuSIO32Id.count > 3)
+ if (gRfuSIO32Id.count < 4)
{
- gRfuSIO32Id.lastId = regSIODATA32;
- }
- else if (rfuSIO32IdUnk0_times_16 == (u16)~gRfuSIO32Id.send_id)
- {
- negRfuSIO32IdUnk6 = ~gRfuSIO32Id.recv_id;
- if (regSIODATA32 == negRfuSIO32IdUnk6)
- ++gRfuSIO32Id.count;
+ backup = (u16)~gRfuSIO32Id.send_id;
+ if (gRfuSIO32Id.recv_id == backup)
+ {
+ if (regSIODATA32 == (u16)~gRfuSIO32Id.recv_id)
+ ++gRfuSIO32Id.count;
+ }
}
+ else
+ gRfuSIO32Id.lastId = regSIODATA32;
}
else
{
diff --git a/src/m4a.c b/src/m4a.c
index 7d7193334..3bb440f65 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -887,18 +887,13 @@ void CgbModVol(struct CgbChannel *chan)
if ((soundInfo->mode & 1) || !CgbPan(chan))
{
chan->pan = 0xFF;
- chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ chan->envelopeGoal = (u32)(chan->leftVolume + chan->rightVolume);
+ chan->envelopeGoal /= 16;
}
else
{
- // Force chan->rightVolume and chan->leftVolume to be read from memory again,
- // even though there is no reason to do so.
- // The command line option "-fno-gcse" achieves the same result as this.
- #ifndef NONMATCHING
- asm("" : : : "memory");
- #endif
-
- chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ chan->envelopeGoal = (u32)(chan->leftVolume + chan->rightVolume);
+ chan->envelopeGoal /= 16;
if (chan->envelopeGoal > 15)
chan->envelopeGoal = 15;
}
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 228415628..239639e0b 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -680,45 +680,43 @@ void ScrSpecial_SetMauvilleOldManObjEventGfx(void)
// Language fixers?
-void sub_8120B70(union OldMan * oldMan)
+void SanitizeMauvilleOldManForRuby(union OldMan * oldMan)
{
s32 i;
u8 playerName[PLAYER_NAME_LENGTH + 1];
switch (oldMan->common.id)
{
- case MAUVILLE_MAN_TRADER:
+ case MAUVILLE_MAN_TRADER:
+ {
+ struct MauvilleOldManTrader * trader = &oldMan->trader;
+ for (i = 0; i < NUM_TRADER_ITEMS; i++)
{
- struct MauvilleOldManTrader * trader = &oldMan->trader;
- for (i = 0; i < NUM_TRADER_ITEMS; i++)
- {
- if (trader->language[i] == LANGUAGE_JAPANESE)
- {
- ConvertInternationalString(trader->playerNames[i], LANGUAGE_JAPANESE);
- }
- }
+ if (trader->language[i] == LANGUAGE_JAPANESE)
+ ConvertInternationalString(trader->playerNames[i], LANGUAGE_JAPANESE);
}
- break;
- case MAUVILLE_MAN_STORYTELLER:
+ break;
+ }
+ case MAUVILLE_MAN_STORYTELLER:
+ {
+ struct MauvilleManStoryteller * storyteller = &oldMan->storyteller;
+ for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
- struct MauvilleManStoryteller * storyteller = &oldMan->storyteller;
- for (i = 0; i < NUM_STORYTELLER_TALES; i++)
+ if (storyteller->gameStatIDs[i] != 0)
{
- if (storyteller->gameStatIDs[i] != 0)
+ memcpy(playerName, storyteller->trainerNames[i], PLAYER_NAME_LENGTH);
+ playerName[PLAYER_NAME_LENGTH] = EOS;
+ if (IsStringJapanese(playerName))
{
- memcpy(playerName, storyteller->trainerNames[i], PLAYER_NAME_LENGTH);
- playerName[PLAYER_NAME_LENGTH] = EOS;
- if (IsStringJapanese(playerName))
- {
- memset(playerName, CHAR_SPACE, PLAYER_NAME_LENGTH + 1);
- StringCopy(playerName, gText_Friend);
- memcpy(storyteller->trainerNames[i], playerName, PLAYER_NAME_LENGTH);
- storyteller->language[i] = GAME_LANGUAGE;
- }
+ memset(playerName, CHAR_SPACE, PLAYER_NAME_LENGTH + 1);
+ StringCopy(playerName, gText_Friend);
+ memcpy(storyteller->trainerNames[i], playerName, PLAYER_NAME_LENGTH);
+ storyteller->language[i] = GAME_LANGUAGE;
}
}
}
- break;
+ break;
+ }
}
}
diff --git a/src/menu.c b/src/menu.c
index 44b39d762..90e7d8c75 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -509,12 +509,14 @@ void RemoveStartMenuWindow(void)
}
}
-u16 sub_8197A30(void)
+// Unused
+static u16 GetDialogFrameBaseTileNum(void)
{
return DLG_WINDOW_BASE_TILE_NUM;
}
-u16 sub_8197A38(void)
+// Unused
+static u16 GetStandardFrameBaseTileNum(void)
{
return STD_WINDOW_BASE_TILE_NUM;
}
@@ -1241,7 +1243,7 @@ void sub_8198D54(u8 windowId, u8 fontId, u8 a2, u8 a3, u8 a4, u8 a5, const struc
sub_8198C94(windowId, fontId, GetFontAttribute(fontId, 0), 0, a2, a3, a4, a5, strs);
}
-void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *strs, const u8 *a8)
+void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 horizontalCount, u8 verticalCount, const struct MenuAction *strs, const u8 *strIds)
{
u8 i;
u8 j;
@@ -1256,13 +1258,13 @@ void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u
printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING);
printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING);
- for (i = 0; i < itemCount2; i++)
+ for (i = 0; i < verticalCount; i++)
{
- for (j = 0; j < itemCount; j++)
+ for (j = 0; j < horizontalCount; j++)
{
- printer.currentChar = strs[a8[(itemCount * i) + j]].text;
- printer.x = (a4 * j) + left;
- printer.y = (GetFontAttribute(fontId, 1) * i) + top;
+ printer.currentChar = strs[strIds[(horizontalCount * i) + j]].text;
+ printer.x = (optionWidth * j) + left;
+ printer.y = (GetFontAttribute(fontId, FONTATTR_MAX_LETTER_HEIGHT) * i) + top;
printer.currentX = printer.x;
printer.currentY = printer.y;
AddTextPrinter(&printer, 0xFF, NULL);
@@ -1272,9 +1274,10 @@ void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u
CopyWindowToVram(windowId, 2);
}
-void sub_8198EF8(u8 windowId, u8 fontId, u8 a2, u8 a3, u8 a4, u8 a5, const struct MenuAction *strs, const u8 *a8)
+// Unused
+static void PrintMenuActionGrid_TopLeft(u8 windowId, u8 fontId, u8 optionWidth, u8 unused, u8 horizontalCount, u8 verticalCount, const struct MenuAction *strs, const u8 *strIds)
{
- sub_8198DBC(windowId, fontId, GetFontAttribute(fontId, 0), 0, a2, a4, a5, strs, a8);
+ PrintMenuActionGrid(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, optionWidth, horizontalCount, verticalCount, strs, strIds);
}
u8 sub_8198F58(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 cursorHeight, u8 a6, u8 a7, u8 numChoices, u8 a9)
@@ -1701,7 +1704,7 @@ void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct M
CopyWindowToVram(windowId, 2);
}
-u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos)
+u8 InitMenuActionGrid(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos)
{
s32 pos;
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index 5a6ac8394..151de0bd4 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -287,7 +287,7 @@ bool8 sub_8122148(u16 itemId)
return FALSE;
}
-bool8 itemid_80BF6D8_mail_related(u16 itemId)
+bool8 IsWritingMailAllowed(u16 itemId)
{
if (IsUpdateLinkStateCBActive() != TRUE && InUnionRoom() != TRUE)
return TRUE;
diff --git a/src/new_game.c b/src/new_game.c
index 05d86aa8c..2a950efbc 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -48,23 +48,19 @@
extern const u8 EventScript_ResetAllMapFlags[];
-// this file's functions
static void ClearFrontierRecord(void);
static void WarpToTruck(void);
static void ResetMiniGamesRecords(void);
-// EWRAM vars
EWRAM_DATA bool8 gDifferentSaveFile = FALSE;
EWRAM_DATA bool8 gEnableContestDebugging = FALSE;
-// const rom data
static const struct ContestWinner sContestWinnerPicDummy =
{
.monName = _(""),
.trainerName = _("")
};
-// code
void SetTrainerId(u32 trainerId, u8 *dst)
{
dst[0] = trainerId;
@@ -114,7 +110,9 @@ void ClearAllContestWinnerPics(void)
s32 i;
ClearContestWinnerPicsInContestHall();
- for (i = 8; i < 13; i++)
+
+ // Clear Museum paintings
+ for (i = MUSEUM_CONTEST_WINNERS_START; i < NUM_CONTEST_WINNERS; i++)
gSaveBlock1Ptr->contestWinners[i] = sContestWinnerPicDummy;
}
diff --git a/src/party_menu.c b/src/party_menu.c
index 8a0c01e25..681dc5f93 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -2703,11 +2703,11 @@ static void CB2_ShowPokemonSummaryScreen(void)
if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
{
UpdatePartyToBattleOrder();
- ShowPokemonSummaryScreen(PSS_MODE_LOCK_MOVES, gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen);
+ ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen);
}
else
{
- ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen);
+ ShowPokemonSummaryScreen(SUMMARY_MODE_NORMAL, gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen);
}
}
@@ -3020,7 +3020,7 @@ static void CB2_SelectBagItemToGive(void)
if (InBattlePyramid() == FALSE)
GoToBagMenu(ITEMMENULOCATION_PARTY, POCKETS_COUNT, CB2_GiveHoldItem);
else
- GoToBattlePyramidBagMenu(2, CB2_GiveHoldItem);
+ GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PARTY, CB2_GiveHoldItem);
}
static void CB2_GiveHoldItem(void)
@@ -4203,7 +4203,7 @@ static void CB2_ReturnToBagMenu(void)
if (InBattlePyramid() == FALSE)
GoToBagMenu(ITEMMENULOCATION_LAST, POCKETS_COUNT, NULL);
else
- GoToBattlePyramidBagMenu(4, gPyramidBagCursorData.callback);
+ GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PREV, gPyramidBagMenuState.callback);
}
static void Task_SetSacredAshCB(u8 taskId)
@@ -6265,7 +6265,7 @@ static void Task_BattlePyramidChooseMonHeldItems(u8 taskId)
void MoveDeleterChooseMoveToForget(void)
{
- ShowPokemonSummaryScreen(PSS_MODE_SELECT_MOVE, gPlayerParty, gSpecialVar_0x8004, gPlayerPartyCount - 1, CB2_ReturnToField);
+ ShowPokemonSummaryScreen(SUMMARY_MODE_SELECT_MOVE, gPlayerParty, gSpecialVar_0x8004, gPlayerPartyCount - 1, CB2_ReturnToField);
gFieldCallback = FieldCB_ContinueScriptHandleMusic;
}
diff --git a/src/pokeball.c b/src/pokeball.c
index 77d2b119c..3671e6a35 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -12,28 +12,29 @@
#include "task.h"
#include "trig.h"
#include "util.h"
+#include "data.h"
#include "constants/songs.h"
extern struct MusicPlayerInfo gMPlayInfo_BGM;
// this file's functions
static void Task_DoPokeballSendOutAnim(u8 taskId);
-static void SpriteCB_TestBallThrow(struct Sprite *sprite);
static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite);
static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite);
static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite);
-static void sub_80756D4(struct Sprite *sprite);
-static void sub_80756E0(struct Sprite *sprite);
-static void sub_807574C(struct Sprite *sprite);
-static void sub_80757E4(struct Sprite *sprite);
-static void sub_8075838(struct Sprite *sprite);
-static void sub_8075930(struct Sprite *sprite);
+static void SpriteCB_BallThrow(struct Sprite *sprite);
+static void SpriteCB_BallThrow_ReachMon(struct Sprite *sprite);
+static void SpriteCB_BallThrow_StartShrinkMon(struct Sprite *sprite);
+static void SpriteCB_BallThrow_ShrinkMon(struct Sprite *sprite);
+static void SpriteCB_BallThrow_Close(struct Sprite *sprite);
+static void SpriteCB_BallThrow_FallToGround(struct Sprite *sprite);
+static void SpriteCB_BallThrow_StartShakes(struct Sprite *sprite);
+static void SpriteCB_BallThrow_Shake(struct Sprite *sprite);
+static void SpriteCB_BallThrow_StartCaptureMon(struct Sprite *sprite);
+static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite);
static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite);
static void SpriteCB_ReleaseMon2FromBall(struct Sprite *sprite);
-static void sub_8075970(struct Sprite *sprite);
static void HandleBallAnimEnd(struct Sprite *sprite);
-static void sub_8075FB4(struct Sprite *sprite);
-static void sub_80760F8(struct Sprite *sprite);
static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite);
static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite);
static void SpriteCB_TradePokeball(struct Sprite *sprite);
@@ -213,7 +214,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_GREATBALL,
@@ -222,7 +223,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_SAFARIBALL,
@@ -231,7 +232,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_ULTRABALL,
@@ -240,7 +241,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_MASTERBALL,
@@ -249,7 +250,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_NETBALL,
@@ -258,7 +259,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_DIVEBALL,
@@ -267,7 +268,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_NESTBALL,
@@ -276,7 +277,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_REPEATBALL,
@@ -285,7 +286,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_TIMERBALL,
@@ -294,7 +295,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_LUXURYBALL,
@@ -303,7 +304,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
{
.tileTag = GFX_TAG_PREMIERBALL,
@@ -312,7 +313,7 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
.anims = sBallAnimSequences,
.images = NULL,
.affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_TestBallThrow,
+ .callback = SpriteCB_BallThrow,
},
};
@@ -408,7 +409,10 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
PlaySE(SE_BALL_THROW);
}
-static void SpriteCB_TestBallThrow(struct Sprite *sprite)
+// This sequence of functions is very similar to those that get run when
+// a Pokéball gets thrown at a wild Pokémon, starting at SpriteCB_Ball_Arc.
+// These do not seem to get run.
+static void SpriteCB_BallThrow(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
{
@@ -430,7 +434,7 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
sprite->sBattler = opponentBattler;
sprite->data[7] = noOfShakes;
DestroyTask(taskId);
- sprite->callback = sub_80756D4;
+ sprite->callback = SpriteCB_BallThrow_ReachMon;
}
}
@@ -440,26 +444,24 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
#undef tBattler
#undef tOpponentBattler
-static void sub_80756D4(struct Sprite *sprite)
+static void SpriteCB_BallThrow_ReachMon(struct Sprite *sprite)
{
- sprite->callback = sub_80756E0;
+ sprite->callback = SpriteCB_BallThrow_StartShrinkMon;
}
-// Start something for battler
-static void sub_80756E0(struct Sprite *sprite)
+static void SpriteCB_BallThrow_StartShrinkMon(struct Sprite *sprite)
{
if (++sprite->data[5] == 10)
{
sprite->data[5] = 0;
- sprite->callback = sub_807574C;
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 2);
+ sprite->callback = SpriteCB_BallThrow_ShrinkMon;
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], BATTLER_AFFINE_RETURN);
AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0;
}
}
-// Shrink player
-static void sub_807574C(struct Sprite *sprite)
+static void SpriteCB_BallThrow_ShrinkMon(struct Sprite *sprite)
{
sprite->data[5]++;
if (sprite->data[5] == 11)
@@ -469,7 +471,7 @@ static void sub_807574C(struct Sprite *sprite)
StartSpriteAnim(sprite, 2);
gSprites[gBattlerSpriteIds[sprite->sBattler]].invisible = TRUE;
sprite->data[5] = 0;
- sprite->callback = sub_80757E4;
+ sprite->callback = SpriteCB_BallThrow_Close;
}
else
{
@@ -478,7 +480,7 @@ static void sub_807574C(struct Sprite *sprite)
}
}
-static void sub_80757E4(struct Sprite *sprite)
+static void SpriteCB_BallThrow_Close(struct Sprite *sprite)
{
if (sprite->animEnded)
{
@@ -490,12 +492,12 @@ static void sub_80757E4(struct Sprite *sprite)
sprite->data[5] = 0;
sprite->pos1.y += Cos(0, 32);
sprite->pos2.y = -Cos(0, sprite->data[4]);
- sprite->callback = sub_8075838;
+ sprite->callback = SpriteCB_BallThrow_FallToGround;
}
}
}
-static void sub_8075838(struct Sprite *sprite)
+static void SpriteCB_BallThrow_FallToGround(struct Sprite *sprite)
{
bool8 r5 = FALSE;
@@ -548,14 +550,14 @@ static void sub_8075838(struct Sprite *sprite)
}
else
{
- sprite->callback = sub_8075930;
+ sprite->callback = SpriteCB_BallThrow_StartShakes;
sprite->data[4] = 1;
sprite->data[5] = 0;
}
}
}
-static void sub_8075930(struct Sprite *sprite)
+static void SpriteCB_BallThrow_StartShakes(struct Sprite *sprite)
{
sprite->data[3]++;
if (sprite->data[3] == 31)
@@ -563,12 +565,12 @@ static void sub_8075930(struct Sprite *sprite)
sprite->data[3] = 0;
sprite->affineAnimPaused = TRUE;
StartSpriteAffineAnim(sprite, 1);
- sprite->callback = sub_8075970;
+ sprite->callback = SpriteCB_BallThrow_Shake;
PlaySE(SE_BALL);
}
}
-static void sub_8075970(struct Sprite *sprite)
+static void SpriteCB_BallThrow_Shake(struct Sprite *sprite)
{
switch (sprite->data[3] & 0xFF)
{
@@ -611,7 +613,7 @@ static void sub_8075970(struct Sprite *sprite)
{
if (sprite->data[7] == 4 && sprite->data[3] >> 8 == 3)
{
- sprite->callback = sub_8075FB4;
+ sprite->callback = SpriteCB_BallThrow_StartCaptureMon;
sprite->affineAnimPaused = TRUE;
}
else
@@ -796,7 +798,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
gTasks[taskId].tCryTaskState = 0;
}
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1);
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], BATTLER_AFFINE_EMERGE);
if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT)
gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCb_OpponentMonFromBall;
@@ -817,10 +819,10 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
#undef tCryTaskFrames
#undef tCryTaskState
-static void sub_8075FB4(struct Sprite *sprite)
+static void SpriteCB_BallThrow_StartCaptureMon(struct Sprite *sprite)
{
sprite->animPaused = TRUE;
- sprite->callback = sub_80760F8;
+ sprite->callback = SpriteCB_BallThrow_CaptureMon;
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->data[5] = 0;
@@ -836,7 +838,7 @@ static void HandleBallAnimEnd(struct Sprite *sprite)
sprite->invisible = TRUE;
if (gSprites[gBattlerSpriteIds[battlerId]].affineAnimEnded)
{
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], BATTLER_AFFINE_NORMAL);
affineAnimEnded = TRUE;
}
else
@@ -867,7 +869,7 @@ static void HandleBallAnimEnd(struct Sprite *sprite)
}
}
-static void sub_80760F8(struct Sprite *sprite)
+static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite)
{
u8 battlerId = sprite->sBattler;
@@ -1042,7 +1044,7 @@ static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite)
sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4);
sprite->callback = SpriteCB_ReleasedMonFlyOut;
gSprites[r7].invisible = FALSE;
- StartSpriteAffineAnim(&gSprites[r7], 1);
+ StartSpriteAffineAnim(&gSprites[r7], BATTLER_AFFINE_EMERGE);
AnimateSprite(&gSprites[r7]);
gSprites[r7].data[1] = 0x1000;
sprite->data[7] = 0;
@@ -1065,7 +1067,7 @@ static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite)
sprite->invisible = TRUE;
if (gSprites[monSpriteId].affineAnimEnded)
{
- StartSpriteAffineAnim(&gSprites[monSpriteId], 0);
+ StartSpriteAffineAnim(&gSprites[monSpriteId], BATTLER_AFFINE_NORMAL);
r12 = TRUE;
}
var1 = (sprite->data[5] - sprite->pos1.x) * sprite->data[7] / 128 + sprite->pos1.x;
@@ -1139,7 +1141,7 @@ static void SpriteCB_TradePokeball(struct Sprite *sprite)
// play the shrink anim properly due to being paused. Works together with the fix to `sub_817F77C`.
gSprites[monSpriteId].affineAnimPaused = FALSE;
#endif // BUGFIX
- StartSpriteAffineAnim(&gSprites[monSpriteId], 2);
+ StartSpriteAffineAnim(&gSprites[monSpriteId], BATTLER_AFFINE_RETURN);
AnimateSprite(&gSprites[monSpriteId]);
gSprites[monSpriteId].data[1] = 0;
}
diff --git a/src/pokemon.c b/src/pokemon.c
index 0b50a72f3..b4eb6f01a 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -3433,7 +3433,7 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition)
gMultiuseSpriteTemplate.paletteTag = speciesTag;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
- gMultiuseSpriteTemplate.anims = gUnknown_082FF70C;
+ gMultiuseSpriteTemplate.anims = gAnims_MonPic;
else if (speciesTag > SPECIES_SHINY_TAG)
gMultiuseSpriteTemplate.anims = gMonFrontAnimsPtrTable[speciesTag - SPECIES_SHINY_TAG];
else
@@ -3926,9 +3926,9 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
{
u16 move = moves[i];
if (substruct1->moves[0] == move
- || substruct1->moves[1] == move
- || substruct1->moves[2] == move
- || substruct1->moves[3] == move)
+ || substruct1->moves[1] == move
+ || substruct1->moves[2] == move
+ || substruct1->moves[3] == move)
retVal |= gBitTable[i];
i++;
}
@@ -6826,7 +6826,7 @@ static void sub_806F1FC(struct Unknown_806F160_Struct* structPtr)
structPtr->frameImages[i * structPtr->field_0_0 + j].data = &structPtr->byteArrays[i][j * 0x800];
}
structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_0_0];
- structPtr->templates[i].anims = gUnknown_082FF70C;
+ structPtr->templates[i].anims = gAnims_MonPic;
structPtr->templates[i].paletteTag = i;
}
}
diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c
index 4beb9c83f..7c88e5bf1 100644
--- a/src/pokemon_size_record.c
+++ b/src/pokemon_size_record.c
@@ -97,7 +97,7 @@ static void FormatMonSizeRecord(u8 *string, u32 size)
{
#ifdef UNITS_IMPERIAL
//Convert size from centimeters to inches
- size = (double)(size * 10) / (CM_PER_INCH * 10);
+ size = (f64)(size * 10) / (CM_PER_INCH * 10);
#endif
string = ConvertIntToDecimalStringN(string, size / 10, STR_CONV_MODE_LEFT_ALIGN, 8);
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index d3ec36c9e..e5720d914 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -42,20 +42,304 @@
#include "constants/rgb.h"
#include "constants/songs.h"
-struct WallpaperTable
-{
- const u32 *tiles;
- const u32 *tileMap;
- const u16 *palettes;
+/*
+ NOTE: This file is large. Some general groups of functions have
+ been labeled with commented headers to make navigation easier.
+ Search for "SECTION:" to locate them. These sections are not
+ hard and fast rules, but give a basic idea of where certain
+ types of functions are likely located.
+*/
+
+// PC main menu options
+enum {
+ OPTION_WITHDRAW,
+ OPTION_DEPOSIT,
+ OPTION_MOVE_MONS,
+ OPTION_MOVE_ITEMS,
+ OPTION_EXIT,
+ OPTIONS_COUNT
+};
+
+// IDs for messages to print with PrintMessage
+enum {
+ MSG_EXIT_BOX,
+ MSG_WHAT_YOU_DO,
+ MSG_PICK_A_THEME,
+ MSG_PICK_A_WALLPAPER,
+ MSG_IS_SELECTED,
+ MSG_JUMP_TO_WHICH_BOX,
+ MSG_DEPOSIT_IN_WHICH_BOX,
+ MSG_WAS_DEPOSITED,
+ MSG_BOX_IS_FULL,
+ MSG_RELEASE_POKE,
+ MSG_WAS_RELEASED,
+ MSG_BYE_BYE,
+ MSG_MARK_POKE,
+ MSG_LAST_POKE,
+ MSG_PARTY_FULL,
+ MSG_HOLDING_POKE,
+ MSG_WHICH_ONE_WILL_TAKE,
+ MSG_CANT_RELEASE_EGG,
+ MSG_CONTINUE_BOX,
+ MSG_CAME_BACK,
+ MSG_WORRIED,
+ MSG_SURPRISE,
+ MSG_PLEASE_REMOVE_MAIL,
+ MSG_IS_SELECTED2,
+ MSG_GIVE_TO_MON,
+ MSG_PLACED_IN_BAG,
+ MSG_BAG_FULL,
+ MSG_PUT_IN_BAG,
+ MSG_ITEM_IS_HELD,
+ MSG_CHANGED_TO_ITEM,
+ MSG_CANT_STORE_MAIL,
+};
+
+// IDs for how to resolve variables in the above messages
+enum {
+ MSG_VAR_NONE,
+ MSG_VAR_MON_NAME_1,
+ MSG_VAR_MON_NAME_2, // Unused
+ MSG_VAR_MON_NAME_3, // Unused
+ MSG_VAR_RELEASE_MON_1,
+ MSG_VAR_RELEASE_MON_2, // Unused
+ MSG_VAR_RELEASE_MON_3,
+ MSG_VAR_ITEM_NAME,
+};
+
+// IDs for menu selection items. See SetMenuText, HandleMenuInput, etc
+enum {
+ MENU_CANCEL,
+ MENU_STORE,
+ MENU_WITHDRAW,
+ MENU_MOVE,
+ MENU_SHIFT,
+ MENU_PLACE,
+ MENU_SUMMARY,
+ MENU_RELEASE,
+ MENU_MARK,
+ MENU_JUMP,
+ MENU_WALLPAPER,
+ MENU_NAME,
+ MENU_TAKE,
+ MENU_GIVE,
+ MENU_GIVE_2,
+ MENU_SWITCH,
+ MENU_BAG,
+ MENU_INFO,
+ MENU_SCENERY_1,
+ MENU_SCENERY_2,
+ MENU_SCENERY_3,
+ MENU_ETCETERA,
+ MENU_FRIENDS,
+ MENU_FOREST,
+ MENU_CITY,
+ MENU_DESERT,
+ MENU_SAVANNA,
+ MENU_CRAG,
+ MENU_VOLCANO,
+ MENU_SNOW,
+ MENU_CAVE,
+ MENU_BEACH,
+ MENU_SEAFLOOR,
+ MENU_RIVER,
+ MENU_SKY,
+ MENU_POLKADOT,
+ MENU_POKECENTER,
+ MENU_MACHINE,
+ MENU_SIMPLE,
+};
+#define MENU_WALLPAPER_SETS_START MENU_SCENERY_1
+#define MENU_WALLPAPERS_START MENU_FOREST
+
+// Return IDs for input handlers
+enum {
+ INPUT_NONE,
+ INPUT_MOVE_CURSOR,
+ INPUT_2, // Unused
+ INPUT_3, // Unused
+ INPUT_CLOSE_BOX,
+ INPUT_SHOW_PARTY,
+ INPUT_HIDE_PARTY,
+ INPUT_BOX_OPTIONS,
+ INPUT_IN_MENU,
+ INPUT_SCROLL_RIGHT,
+ INPUT_SCROLL_LEFT,
+ INPUT_DEPOSIT,
+ INPUT_WITHDRAW,
+ INPUT_MOVE_MON,
+ INPUT_SHIFT_MON,
+ INPUT_PLACE_MON,
+ INPUT_TAKE_ITEM,
+ INPUT_GIVE_ITEM,
+ INPUT_SWITCH_ITEMS,
+ INPUT_PRESSED_B,
+ INPUT_MULTIMOVE_START,
+ INPUT_MULTIMOVE_CHANGE_SELECTION,
+ INPUT_MULTIMOVE_SINGLE,
+ INPUT_MULTIMOVE_GRAB_SELECTION,
+ INPUT_MULTIMOVE_UNABLE,
+ INPUT_MULTIMOVE_MOVE_MONS,
+ INPUT_MULTIMOVE_PLACE_MONS,
+};
+
+enum {
+ SCREEN_CHANGE_EXIT_BOX,
+ SCREEN_CHANGE_SUMMARY_SCREEN,
+ SCREEN_CHANGE_NAME_BOX,
+ SCREEN_CHANGE_ITEM_FROM_BAG,
+};
+
+enum {
+ MODE_PARTY,
+ MODE_BOX,
+ MODE_MOVE,
+};
+
+enum {
+ CURSOR_AREA_IN_BOX,
+ CURSOR_AREA_IN_PARTY,
+ CURSOR_AREA_BOX_TITLE,
+ CURSOR_AREA_BUTTONS, // Party Pokemon and Close Box
+};
+#define CURSOR_AREA_IN_HAND CURSOR_AREA_BOX_TITLE // Alt name for cursor area used by Move Items
+
+enum {
+ CURSOR_ANIM_BOUNCE,
+ CURSOR_ANIM_STILL,
+ CURSOR_ANIM_OPEN,
+ CURSOR_ANIM_FIST,
+};
+
+// Special box ids for the choose box menu
+#define BOXID_NONE_CHOSEN 200
+#define BOXID_CANCELED 201
+
+enum {
+ PALTAG_MON_ICON_0 = 56000,
+ PALTAG_MON_ICON_1, // Used implicitly in CreateMonIconSprite
+ PALTAG_MON_ICON_2, // Used implicitly in CreateMonIconSprite
+ PALTAG_3, // Unused
+ PALTAG_4, // Unused
+ PALTAG_5, // Unused
+ PALTAG_DISPLAY_MON,
+ PALTAG_MISC_1,
+ PALTAG_MARKING_COMBO,
+ PALTAG_BOX_TITLE,
+ PALTAG_MISC_2,
+ PALTAG_ITEM_ICON_0,
+ PALTAG_ITEM_ICON_1, // Used implicitly in CreateItemIconSprites
+ PALTAG_ITEM_ICON_2, // Used implicitly in CreateItemIconSprites
+ PALTAG_MARKING_MENU,
+};
+
+enum {
+ GFXTAG_CURSOR,
+ GFXTAG_CURSOR_SHADOW,
+ GFXTAG_DISPLAY_MON,
+ GFXTAG_BOX_TITLE,
+ GFXTAG_BOX_TITLE_ALT,
+ GFXTAG_WAVEFORM,
+ GFXTAG_ARROW,
+ GFXTAG_ITEM_ICON_0,
+ GFXTAG_ITEM_ICON_1, // Used implicitly in CreateItemIconSprites
+ GFXTAG_ITEM_ICON_2, // Used implicitly in CreateItemIconSprites
+ GFXTAG_CHOOSE_BOX_MENU,
+ GFXTAG_CHOOSE_BOX_MENU_SIDES, // Used implicitly in LoadChooseBoxMenuGfx
+ GFXTAG_12, // Unused
+ GFXTAG_MARKING_MENU,
+ GFXTAG_14, // Unused
+ GFXTAG_15, // Unused
+ GFXTAG_MARKING_COMBO,
+ GFXTAG_17, // Unused
+ GFXTAG_MON_ICON,
};
-struct PokemonStorageSystemFunc
+// The maximum number of Pokémon icons that can appear on-screen.
+// By default the limit is 40 (though in practice only 37 can be).
+#define MAX_MON_ICONS (IN_BOX_COUNT + PARTY_SIZE + 1 >= 40 ? IN_BOX_COUNT + PARTY_SIZE + 1 : 40)
+
+// The maximum number of item icons that can appear on-screen while
+// moving held items. 1 in the cursor, and 2 more while switching
+// between 2 Pokémon with held items
+#define MAX_ITEM_ICONS 3
+
+// IDs for the item icons affine anims
+enum {
+ ITEM_ANIM_NONE,
+ ITEM_ANIM_APPEAR,
+ ITEM_ANIM_DISAPPEAR,
+ ITEM_ANIM_PICK_UP,
+ ITEM_ANIM_PUT_DOWN,
+ ITEM_ANIM_PUT_AWAY,
+ ITEM_ANIM_LARGE,
+};
+
+// IDs for the item icon sprite callbacks
+enum {
+ ITEM_CB_WAIT_ANIM,
+ ITEM_CB_TO_HAND,
+ ITEM_CB_TO_MON,
+ ITEM_CB_SWAP_TO_HAND,
+ ITEM_CB_SWAP_TO_MON,
+ ITEM_CB_UNUSED_1,
+ ITEM_CB_UNUSED_2,
+ ITEM_CB_HIDE_PARTY,
+};
+
+enum {
+ RELEASE_ANIM_RELEASE,
+ RELEASE_ANIM_CAME_BACK,
+};
+
+// IDs for InitMonPlaceChange
+enum {
+ CHANGE_GRAB,
+ CHANGE_PLACE,
+ CHANGE_SHIFT,
+};
+
+// Modes for selecting and moving Pokémon in the box.
+// "MULTIPLE" mode allows up to an entire box to be
+// picked up at once by pressing Select then holding
+// down the A button. While holding A down, the player
+// may move the cursor around to select multiple Pokémon.
+// This is MOVE_MODE_MULTIPLE_SELECTING. After releasing A
+// those Pokémon will be picked up and can be moved around
+// as a single unit. This is MOVE_MODE_MULTIPLE_MOVING
+enum {
+ MOVE_MODE_NORMAL,
+ MOVE_MODE_MULTIPLE_SELECTING,
+ MOVE_MODE_MULTIPLE_MOVING,
+};
+
+// IDs for the main functions for moving multiple Pokémon.
+// Given as arguments to MultiMove_SetFunction
+enum {
+ MULTIMOVE_START,
+ MULTIMOVE_CANCEL, // If only 1 Pokémon is grabbed
+ MULTIMOVE_CHANGE_SELECTION,
+ MULTIMOVE_GRAB_SELECTION,
+ MULTIMOVE_MOVE_MONS,
+ MULTIMOVE_PLACE_MONS,
+};
+
+// IDs for TilemapUtil
+enum {
+ TILEMAPID_PKMN_DATA, // The "Pkmn Data" text at the top of the display
+ TILEMAPID_PARTY_MENU,
+ TILEMAPID_CLOSE_BUTTON,
+ TILEMAPID_COUNT
+};
+
+struct Wallpaper
{
- u8 (*func)(void);
- s8 unk4;
+ const u32 *tiles;
+ const u32 *tilemap;
+ const u16 *palettes;
};
-struct StorageAction
+struct StorageMessage
{
const u8 *text;
u8 format;
@@ -67,52 +351,46 @@ struct StorageMenu
int textId;
};
-struct PSS_MenuStringPtrs
+struct UnkUtilData
{
- const u8 *text;
- const u8 *desc;
-};
-
-struct UnkStruct_2000028
-{
- const u8 *unk_00;
- u8 *unk_04;
- u16 unk_08;
- u16 unk_0a;
- u16 newField;
- void (*unk_0c)(struct UnkStruct_2000028 *data);
+ const u8 *src;
+ u8 *dest;
+ u16 size;
+ u16 unk;
+ u16 height;
+ void (*func)(struct UnkUtilData *data);
};
-struct UnkStruct_2000020
+struct UnkUtil
{
- struct UnkStruct_2000028 *unk_00;
- u8 unk_04;
- u8 unk_05;
+ struct UnkUtilData *data;
+ u8 numActive;
+ u8 max;
};
-struct UnkPSSStruct_2002370
+struct ChooseBoxMenu
{
- struct Sprite *unk_0000;
- struct Sprite *unk_0004[4];
- u32 unk_0014[3];
- struct Sprite *unk_0020[2];
- u8 filler_0028[0x214];
- u32 unk_023c;
- u16 unk_0240;
- u16 unk_0242;
+ struct Sprite *menuSprite;
+ struct Sprite *menuSideSprites[4];
+ u32 unused1[3];
+ struct Sprite *arrowSprites[2];
+ u8 unused2[0x214];
+ bool32 loadedPalette;
+ u16 tileTag;
+ u16 paletteTag;
u8 curBox;
- u8 unk_0245;
- u8 unk_0246;
+ u8 unused3;
+ u8 subpriority;
};
-struct UnkStorageStruct
+struct ItemIcon
{
struct Sprite *sprite;
u8 *tiles;
u16 palIndex;
- u8 unk8;
- u8 unk9;
- u8 unk10;
+ u8 area;
+ u8 pos;
+ bool8 active;
};
struct PokemonStorageSystemData
@@ -120,611 +398,491 @@ struct PokemonStorageSystemData
u8 state;
u8 boxOption;
u8 screenChangeType;
- bool8 isReshowingPSS;
+ bool8 isReopening;
u8 taskId;
- struct UnkStruct_2000020 unk_0020;
- struct UnkStruct_2000028 unk_0028[8];
- u16 field_B0[528 / 2];
- u16 field_2C0;
- u16 field_2C2;
- u8 field_2C4; // Unused
- u8 field_2C5;
+ struct UnkUtil unkUtil;
+ struct UnkUtilData unkUtilData[8];
+ u16 partyMenuTilemapBuffer[0x108];
+ u16 partyMenuUnused1; // Never read
+ u16 partyMenuY;
+ u8 partyMenuUnused2; // Unused
+ u8 partyMenuMoveTimer;
u8 showPartyMenuState;
- u8 unk_02C7;
- u8 unk_02C8;
- bool8 unk_02C9;
+ bool8 closeBoxFlashing;
+ u8 closeBoxFlashTimer;
+ bool8 closeBoxFlashState;
s16 newCurrBoxId;
u16 bg2_X;
- s16 wallpaperScrollSpeed;
- u16 field_2D0;
- u8 field_2D2;
- u8 field_2D3; // Written to, but never read.
- u8 field_2D4; // Written to, but never read.
- u16 field_2D6; // Written to, but never read.
- s16 field_2D8; // Written to, but never read.
- u16 field_2DA; // Written to, but never read.
- u16 field_2DC; // Written to, but never read.
- u16 field_2DE; // Written to, but never read.
- u16 field_2E0; // Written to, but never read.
- u8 filler[22];
- u8 field_2F8[1024];
- u8 field_6F8;
- u8 field_6F9; // Written to, but never read.
- u8 field_6FA;
- s8 field_6FB;
- u16 field_6FC[16];
- u16 field_71C;
- u16 field_71E;
- struct Sprite *field_720[2];
- struct Sprite *field_728[2];
- struct Sprite *field_730[2];
- u32 field_738;
- u8 field_73C[80]; // Unused
- u16 field_78C; // Written to, but never read.
+ s16 scrollSpeed;
+ u16 scrollTimer;
+ u8 wallpaperOffset;
+ u8 scrollUnused1; // Never read
+ u8 scrollToBoxIdUnused; // Never read
+ u16 scrollUnused2; // Never read
+ s16 scrollDirectionUnused; // Never read.
+ u16 scrollUnused3; // Never read
+ u16 scrollUnused4; // Never read
+ u16 scrollUnused5; // Never read
+ u16 scrollUnused6; // Never read
+ u8 filler1[22];
+ u8 boxTitleTiles[1024];
+ u8 boxTitleCycleId;
+ u8 wallpaperLoadState; // Written to, but never read.
+ u8 wallpaperLoadBoxId;
+ s8 wallpaperLoadDir;
+ u16 boxTitlePal[16];
+ u16 boxTitlePalOffset;
+ u16 boxTitleAltPalOffset;
+ struct Sprite *curBoxTitleSprites[2];
+ struct Sprite *nextBoxTitleSprites[2];
+ struct Sprite *arrowSprites[2];
+ u32 wallpaperPalBits;
+ u8 filler2[80]; // Unused
+ u16 unkUnused1; // Never read.
s16 wallpaperSetId;
s16 wallpaperId;
- u16 field_792[360];
+ u16 wallpaperTilemap[360];
u8 wallpaperChangeState;
- u8 field_A63;
- u8 boxScrollDestination;
- s8 field_A65;
+ u8 scrollState;
+ u8 scrollToBoxId;
+ s8 scrollDirection;
u8 *wallpaperTiles;
struct Sprite *movingMonSprite;
struct Sprite *partySprites[PARTY_SIZE];
struct Sprite *boxMonsSprites[IN_BOX_COUNT];
- struct Sprite **field_B00;
- struct Sprite **field_B04;
- u16 field_B08[40];
- u16 field_B58[40];
+ struct Sprite **shiftMonSpritePtr;
+ struct Sprite **releaseMonSpritePtr;
+ u16 numIconsPerSpecies[MAX_MON_ICONS];
+ u16 iconSpeciesList[MAX_MON_ICONS];
u16 boxSpecies[IN_BOX_COUNT];
u32 boxPersonalities[IN_BOX_COUNT];
- u8 field_C5C;
- u8 field_C5D;
- u8 field_C5E;
- u16 field_C60;
- s16 field_C62;
- s16 field_C64;
- u16 field_C66;
- u8 field_C68;
- s8 field_C69;
- u8 field_C6A;
- u8 field_C6B; // Written to, but never read.
+ u8 incomingBoxId;
+ u8 shiftTimer;
+ u8 numPartyToCompact;
+ u16 iconScrollDistance;
+ s16 iconScrollPos;
+ s16 iconScrollSpeed;
+ u16 iconScrollNumIncoming;
+ u8 iconScrollCurColumn;
+ s8 iconScrollDirection; // Unnecessary duplicate of scrollDirection
+ u8 iconScrollState;
+ u8 iconScrollToBoxId; // Unnecessary duplicate of scrollToBoxId
struct WindowTemplate menuWindow;
struct StorageMenu menuItems[7];
u8 menuItemsCount;
u8 menuWidth;
- u8 field_CAE; // Written to, but never read.
- u16 field_CB0;
- struct Sprite *field_CB4;
- struct Sprite *field_CB8;
- s32 field_CBC;
- s32 field_CC0;
- u32 field_CC4;
- u32 field_CC8;
- s16 field_CCC;
- s16 field_CCE;
- u16 field_CD0;
- s8 field_CD2;
- s8 field_CD3;
- u8 field_CD4;
- u8 field_CD5;
- u8 field_CD6;
- u8 field_CD7;
- u8 field_CD8[2];
- const u32 *cursorMonPalette;
- u32 cursorMonPersonality;
- u16 cursorMonSpecies;
- u16 cursorMonItem;
- u16 field_CE8;
+ u8 menuUnusedField; // Never read.
+ u16 menuWindowId;
+ struct Sprite *cursorSprite;
+ struct Sprite *cursorShadowSprite;
+ s32 cursorNewX;
+ s32 cursorNewY;
+ u32 cursorSpeedX;
+ u32 cursorSpeedY;
+ s16 cursorTargetX;
+ s16 cursorTargetY;
+ u16 cursorMoveSteps;
+ s8 cursorVerticalWrap;
+ s8 cursorHorizontalWrap;
+ u8 newCursorArea;
+ u8 newCursorPosition;
+ u8 cursorPrevHorizPos;
+ u8 cursorFlipTimer;
+ u8 cursorPalNums[2];
+ const u32 *displayMonPalette;
+ u32 displayMonPersonality;
+ u16 displayMonSpecies;
+ u16 displayMonItemId;
+ u16 displayUnusedVar;
bool8 setMosaic;
- u8 cursorMonMarkings;
- u8 cursorMonLevel;
- bool8 cursorMonIsEgg;
- u8 cursorMonNick[POKEMON_NAME_LENGTH + 1];
- u8 cursorMonNickText[36];
- u8 cursorMonSpeciesName[36];
- u8 cursorMonGenderLvlText[36];
- u8 cursorMonItemName[36];
+ u8 displayMonMarkings;
+ u8 displayMonLevel;
+ bool8 displayMonIsEgg;
+ u8 displayMonName[POKEMON_NAME_LENGTH + 1];
+ u8 displayMonNameText[36];
+ u8 displayMonSpeciesName[36];
+ u8 displayMonGenderLvlText[36];
+ u8 displayMonItemName[36];
bool8 (*monPlaceChangeFunc)(void);
u8 monPlaceChangeState;
- u8 field_D91;
- struct Sprite *field_D94;
- struct Sprite *field_D98[2];
- u16 *field_DA0;
+ u8 shiftBoxId;
+ struct Sprite *markingComboSprite;
+ struct Sprite *waveformSprites[2];
+ u16 *markingComboTilesPtr;
struct MonMarkingsMenu markMenu;
- struct UnkPSSStruct_2002370 field_1E5C;
+ struct ChooseBoxMenu chooseBoxMenu;
struct Pokemon movingMon;
- struct Pokemon field_2108;
- s8 field_216C;
- u8 field_216D;
- s8 field_216E;
- s8 field_216F;
- s8 field_2170;
- s8 field_2171;
- u16 field_2172;
- u16 field_2174;
- u16 field_2176[8];
- u8 field_2186;
- u8 field_2187;
- u8 pokemonSummaryScreenMode;
+ struct Pokemon tempMon;
+ s8 canReleaseMon;
+ bool8 releaseStatusResolved;
+ s8 releaseCheckBoxId;
+ s8 releaseCheckBoxPos;
+ s8 releaseBoxId;
+ s8 releaseBoxPos;
+ u16 releaseCheckState;
+ u16 restrictedReleaseMonMoves;
+ u16 restrictedMoveList[8];
+ u8 summaryMaxPos;
+ u8 summaryStartPos;
+ u8 summaryScreenMode;
union
{
struct Pokemon *mon;
struct BoxPokemon *box;
- } field_218C;
- u8 field_2190[40];
- u8 field_21B8[40];
- u8 field_21E0[POKEMON_NAME_LENGTH + 1];
+ } summaryMon;
+ u8 messageText[40];
+ u8 boxTitleText[40];
+ u8 releaseMonName[POKEMON_NAME_LENGTH + 1];
u8 itemName[20];
u8 inBoxMovingMode;
- u16 field_2200;
- struct UnkStorageStruct field_2204[3];
- u16 movingItem;
- u16 field_2236;
- u8 field_2238; // Unused
- u16 field_223A;
- u16 *field_223C;
- struct Sprite *cursorMonSprite;
- u16 field_2244[0x40];
- u8 field_22C4[0x800];
- u8 field_2AC4[0x1800]; // Unused
- u8 field_42C4[0x800];
- u8 field_4AC4[0x1000];
- u8 field_5AC4[0x800];
+ u16 multiMoveWindowId;
+ struct ItemIcon itemIcons[MAX_ITEM_ICONS];
+ u16 movingItemId;
+ u16 itemInfoWindowOffset;
+ u8 unkUnused2; // Unused
+ u16 displayMonPalOffset;
+ u16 *displayMonTilePtr;
+ struct Sprite *displayMonSprite;
+ u16 displayMonPalBuffer[0x40];
+ u8 tileBuffer[0x800];
+ u8 unusedBuffer[0x1800]; // Unused
+ u8 itemIconBuffer[0x800];
+ u8 wallpaperBgTilemapBuffer[0x1000];
+ u8 displayMenuTilemapBuffer[0x800];
};
-struct UnkSubStruct_2039D84
-{
- s16 field_0;
- s16 field_2;
- u16 field_4;
- u16 field_6;
- s16 field_8;
- s16 field_A;
-};
+static u32 sItemIconGfxBuffer[98];
-struct UnkStruct_2039D84
-{
- struct UnkSubStruct_2039D84 field_0[2];
- const void *field_18;
- const void *field_1C;
- u16 field_20;
- u16 field_22;
- u16 field_24;
- u16 field_26;
- u16 field_28;
- u8 field_2A;
- u8 field_2B;
- u8 field_2C;
- u8 field_2D;
-};
-
-enum
-{
- BOX_OPTION_WITHDRAW,
- BOX_OPTION_DEPOSIT,
- BOX_OPTION_MOVE_MONS,
- BOX_OPTION_MOVE_ITEMS,
- BOX_OPTION_EXIT,
-};
-
-enum
-{
- PC_TEXT_EXIT_BOX,
- PC_TEXT_WHAT_YOU_DO,
- PC_TEXT_PICK_A_THEME,
- PC_TEXT_PICK_A_WALLPAPER,
- PC_TEXT_IS_SELECTED,
- PC_TEXT_JUMP_TO_WHICH_BOX,
- PC_TEXT_DEPOSIT_IN_WHICH_BOX,
- PC_TEXT_WAS_DEPOSITED,
- PC_TEXT_BOX_IS_FULL,
- PC_TEXT_RELEASE_POKE,
- PC_TEXT_WAS_RELEASED,
- PC_TEXT_BYE_BYE,
- PC_TEXT_MARK_POKE,
- PC_TEXT_LAST_POKE,
- PC_TEXT_PARTY_FULL,
- PC_TEXT_HOLDING_POKE,
- PC_TEXT_WHICH_ONE_WILL_TAKE,
- PC_TEXT_CANT_RELEASE_EGG,
- PC_TEXT_CONTINUE_BOX,
- PC_TEXT_CAME_BACK,
- PC_TEXT_WORRIED,
- PC_TEXT_SURPRISE,
- PC_TEXT_PLEASE_REMOVE_MAIL,
- PC_TEXT_IS_SELECTED2,
- PC_TEXT_GIVE_TO_MON,
- PC_TEXT_PLACED_IN_BAG,
- PC_TEXT_BAG_FULL,
- PC_TEXT_PUT_IN_BAG,
- PC_TEXT_ITEM_IS_HELD,
- PC_TEXT_CHANGED_TO_ITEM,
- PC_TEXT_CANT_STORE_MAIL,
-};
-
-enum
-{
- PC_TEXT_FMT_NORMAL,
- PC_TEXT_FMT_MON_NAME_1,
- PC_TEXT_FMT_MON_NAME_2,
- PC_TEXT_FMT_MON_NAME_3,
- PC_TEXT_FMT_MON_NAME_4,
- PC_TEXT_FMT_MON_NAME_5,
- PC_TEXT_FMT_MON_NAME_6,
- PC_TEXT_FMT_ITEM_NAME,
-};
-
-enum
-{
- SCREEN_CHANGE_EXIT_BOX,
- SCREEN_CHANGE_SUMMARY_SCREEN,
- SCREEN_CHANGE_NAME_BOX,
- SCREEN_CHANGE_ITEM_FROM_BAG,
-};
-
-enum
-{
- MODE_PARTY,
- MODE_BOX,
- MODE_MOVE,
-};
-
-enum
-{
- WALLPAPER_FOREST,
- WALLPAPER_CITY,
- WALLPAPER_DESERT,
- WALLPAPER_SAVANNA,
- WALLPAPER_CRAG,
- WALLPAPER_VOLCANO,
- WALLPAPER_SNOW,
- WALLPAPER_CAVE,
- WALLPAPER_BEACH,
- WALLPAPER_SEAFLOOR,
- WALLPAPER_RIVER,
- WALLPAPER_SKY,
- WALLPAPER_POLKADOT,
- WALLPAPER_POKECENTER,
- WALLPAPER_MACHINE,
- WALLPAPER_PLAIN,
- WALLPAPER_FRIENDS, // The one received as a gift from Walda's parents.
- WALLPAPER_COUNT
-};
-
-enum
-{
- FRIENDS_ZIGZAGOON,
- FRIENDS_SCREEN,
- FRIENDS_HORIZONTAL,
- FRIENDS_DIAGONAL,
- FRIENDS_BLOCK,
- FRIENDS_RIBBON,
- FRIENDS_POKECENTER2,
- FRIENDS_FRAME,
- FRIENDS_BLANK,
- FRIENDS_CIRCLES,
- FRIENDS_AZUMARILL,
- FRIENDS_PIKACHU,
- FRIENDS_LEGENDARY,
- FRIENDS_DUSCLOPS,
- FRIENDS_LUDICOLO,
- FRIENDS_WHISCASH,
- FRIENDS_WALLPAPERS_COUNT
-};
-
-enum
-{
- CURSOR_AREA_IN_BOX,
- CURSOR_AREA_IN_PARTY,
- CURSOR_AREA_BOX,
- CURSOR_AREA_BUTTONS, // Party Pokemon and Close Box
-};
-
-#define TAG_PAL_WAVEFORM 0xDACA
-#define TAG_PAL_DAC8 0xDAC8
-#define TAG_PAL_DAC6 0xDAC6
-#define TAG_PAL_DACE 0xDACE
-#define TAG_PAL_DAC7 0xDAC7
-#define TAG_PAL_DAC9 0xDAC9
-#define TAG_PAL_DAC0 0xDAC0
-#define TAG_PAL_DACB 0xDACB
-
-#define TAG_TILE_WAVEFORM 0x5
-#define TAG_TILE_10 0x10
-#define TAG_TILE_2 0x2
-#define TAG_TILE_D 0xD
-#define TAG_TILE_A 0xA
-#define TAG_TILE_3 0x3
-#define TAG_TILE_4 0x4
-#define TAG_TILE_12 0x12
-#define TAG_TILE_7 0x7
-#define TAG_TILE_0 0x0
-#define TAG_TILE_1 0x1
-
-// IWRAM bss
-static u32 gUnknown_03000F78[98];
-
-// EWRAM DATA
EWRAM_DATA static u8 sPreviousBoxOption = 0;
-EWRAM_DATA static struct UnkPSSStruct_2002370 *gUnknown_02039D04 = NULL;
-EWRAM_DATA static struct PokemonStorageSystemData *sPSSData = NULL;
+EWRAM_DATA static struct ChooseBoxMenu *sChooseBoxMenu = NULL;
+EWRAM_DATA static struct PokemonStorageSystemData *sStorage = NULL;
EWRAM_DATA static bool8 sInPartyMenu = 0;
EWRAM_DATA static u8 sCurrentBoxOption = 0;
-EWRAM_DATA static u8 gUnknown_02039D0E = 0;
+EWRAM_DATA static u8 sDepositBoxId = 0;
EWRAM_DATA static u8 sWhichToReshow = 0;
EWRAM_DATA static u8 sLastUsedBox = 0;
EWRAM_DATA static u16 sMovingItemId = 0;
-EWRAM_DATA static struct Pokemon gUnknown_02039D14 = {0};
-EWRAM_DATA static s8 sBoxCursorArea = 0;
-EWRAM_DATA static s8 sBoxCursorPosition = 0;
+EWRAM_DATA static struct Pokemon sSavedMovingMon = {0};
+EWRAM_DATA static s8 sCursorArea = 0;
+EWRAM_DATA static s8 sCursorPosition = 0;
EWRAM_DATA static bool8 sIsMonBeingMoved = 0;
EWRAM_DATA static u8 sMovingMonOrigBoxId = 0;
EWRAM_DATA static u8 sMovingMonOrigBoxPos = 0;
-EWRAM_DATA static bool8 sCanOnlyMove = 0;
+EWRAM_DATA static bool8 sAutoActionOn = 0;
+
+// Main tasks
+static void EnterPokeStorage(u8);
+static void Task_InitPokeStorage(u8);
+static void Task_PlaceMon(u8);
+static void Task_ChangeScreen(u8);
+static void Task_ShowPokeStorage(u8);
+static void Task_OnBPressed(u8);
+static void Task_HandleBoxOptions(u8);
+static void Task_OnSelectedMon(u8);
+static void Task_OnCloseBoxPressed(u8);
+static void Task_HidePartyPokemon(u8);
+static void Task_DepositMenu(u8);
+static void Task_MoveMon(u8);
+static void Task_GiveMovingItemToMon(u8);
+static void Task_SwitchSelectedItem(u8);
+static void Task_TakeItemForMoving(u8);
+static void Task_WithdrawMon(u8);
+static void Task_ShiftMon(u8);
+static void Task_ShowPartyPokemon(u8);
+static void Task_ShowItemInfo(u8);
+static void Task_GiveItemFromBag(u8);
+static void Task_ItemToBag(u8);
+static void Task_TakeItemForMoving(u8);
+static void Task_ShowMarkMenu(u8);
+static void Task_ShowMonSummary(u8);
+static void Task_ReleaseMon(u8);
+static void Task_ReshowPokeStorage(u8);
+static void Task_PokeStorageMain(u8);
+static void Task_JumpBox(u8);
+static void Task_HandleWallpapers(u8);
+static void Task_NameBox(u8);
+static void Task_PrintCantStoreMail(u8);
+static void Task_HandleMovingMonFromParty(u8);
+
+// Input handlers
+static u8 InBoxInput_Normal(void);
+static u8 InBoxInput_MovingMultiple(void);
+static u8 InBoxInput_SelectingMultiple(void);
+static u8 HandleInput(void);
+static void AddBoxOptionsMenu(void);
+static u8 SetSelectionMenuTexts(void);
+static bool8 SetMenuTexts_Mon(void);
+static bool8 SetMenuTexts_Item(void);
+
+// Choose box menu
+static void ChooseBoxMenu_CreateSprites(u8);
+static void ChooseBoxMenu_DestroySprites(void);
+static void ChooseBoxMenu_MoveLeft(void);
+static void ChooseBoxMenu_MoveRight(void);
+static void ChooseBoxMenu_PrintInfo(void);
+static void SpriteCB_ChooseBoxArrow(struct Sprite *);
+
+// Options menus
+static void InitMenu(void);
+static void SetMenuText(u8);
+static s8 GetMenuItemTextId(u8);
+static void AddMenu(void);
+static bool8 IsMenuLoading(void);
+static s16 HandleMenuInput(void);
+static void RemoveMenu(void);
+
+// Pokémon sprites
+static void InitMonIconFields(void);
+static void SpriteCB_BoxMonIconScrollOut(struct Sprite *);
+static void GetIncomingBoxMonData(u8);
+static void CreatePartyMonsSprites(bool8);
+static void CompactPartySprites(void);
+static u8 GetNumPartySpritesCompacting(void);
+static void MovePartySpriteToNextSlot(struct Sprite *, u16);
+static void SpriteCB_MovePartyMonToNextSlot(struct Sprite *);
+static void MovePartySprites(s16);
+static void DestroyAllPartyMonIcons(void);
+static void ReshowReleaseMon(void);
+static bool8 ResetReleaseMonSpritePtr(void);
+static void SetMovingMonPriority(u8);
+static void SpriteCB_HeldMon(struct Sprite *);
+static struct Sprite *CreateMonIconSprite(u16, u32, s16, s16, u8, u8);
+static void DestroyBoxMonIcon(struct Sprite *);
+
+// Pokémon data
+static void MoveMon(void);
+static void PlaceMon(void);
+static void RefreshDisplayMon(void);
+static void SetMovingMonData(u8, u8);
+static void SetPlacedMonData(u8, u8);
+static void PurgeMonOrBoxMon(u8, u8);
+static void SetShiftedMonData(u8, u8);
+static bool8 TryStorePartyMonInBox(u8);
+static void ResetSelectionAfterDeposit(void);
+static void InitReleaseMon(void);
+static bool8 TryHideReleaseMon(void);
+static void InitCanReleaseMonVars(void);
+static void ReleaseMon(void);
+static bool32 AtLeastThreeUsableMons(void);
+static s8 RunCanReleaseMon(void);
+static void SaveMovingMon(void);
+static void LoadSavedMovingMon(void);
+static void InitSummaryScreenData(void);
+static void SetSelectionAfterSummaryScreen(void);
+static void SetMonMarkings(u8);
+static bool8 IsRemovingLastPartyMon(void);
+static bool8 CanShiftMon(void);
+static bool8 IsMonBeingMoved(void);
+static void TryRefreshDisplayMon(void);
+static void ReshowDisplayMon(void);
+static void SetDisplayMonData(void *, u8);
+
+// Moving multiple Pokémon at once
+static void MultiMove_Free(void);
+static bool8 MultiMove_Init(void);
+static bool8 MultiMove_RunFunction(void);
+static bool8 MultiMove_TryMoveGroup(u8);
+static bool8 MultiMove_CanPlaceSelection(void);
+static void MultiMove_SetFunction(u8);
+static u8 MultiMove_GetOrigin(void);
+static bool8 MultiMove_Start(void);
+static bool8 MultiMove_Cancel(void);
+static bool8 MultiMove_ChangeSelection(void);
+static bool8 MultiMove_GrabSelection(void);
+static bool8 MultiMove_MoveMons(void);
+static bool8 MultiMove_PlaceMons(void);
+static void MultiMove_SetIconToBg(u8, u8);
+static void MultiMove_ClearIconFromBg(u8, u8);
+static void MultiMove_ResetBg(void);
+static void MultiMove_UpdateSelectedIcons(void);
+static void MultiMove_InitMove(u16, u16, u16);
+static void MultiMove_GetMonsFromSelection(void);
+static void MultiMove_RemoveMonsFromBox(void);
+static void MultiMove_CreatePlacedMonIcons(void);
+static void MultiMove_SetPlacedMonData(void);
+static u8 MultiMove_UpdateMove(void);
+static void MultiMove_DeselectRow(u8, u8, u8);
+static void MultiMove_SelectRow(u8, u8, u8);
+static void MultiMove_SelectColumn(u8, u8, u8);
+static void MultiMove_DeselectColumn(u8, u8, u8);
+
+// Move Items mode
+static bool32 IsItemIconAtPosition(u8, u8);
+static const u32 *GetItemIconPic(u16);
+static const u32 *GetItemIconPalette(u16);
+static u8 GetNewItemIconIdx(void);
+static void SetItemIconPosition(u8, u8, u8);
+static void LoadItemIconGfx(u8, const u32 *, const u32 *);
+static void SetItemIconAffineAnim(u8, u8);
+static void SetItemIconActive(u8, bool8);
+static u8 GetItemIconIdxByPosition(u8, u8);
+static void CreateItemIconSprites(void);
+static void TryLoadItemIconAtPos(u8, u8);
+static void TryHideItemIconAtPos(u8, u8);
+static void TakeItemFromMon(u8, u8);
+static void InitItemIconInCursor(u16);
+static void SwapItemsWithMon(u8, u8);
+static void GiveItemToMon(u8, u8);
+static void MoveItemFromMonToBag(u8, u8);
+static void MoveItemFromCursorToBag(void);
+static void MoveHeldItemWithPartyMenu(void);
+static bool8 IsItemIconAnimActive(void);
+static bool8 IsMovingItem(void);
+static const u8 *GetMovingItemName(void);
+static u16 GetMovingItemId(void);
+static void PrintItemDescription(void);
+static void InitItemInfoWindow(void);
+static bool8 UpdateItemInfoWindowSlideIn(void);
+static bool8 UpdateItemInfoWindowSlideOut(void);
+static void DrawItemInfoWindow(u32);
+static void SetItemIconCallback(u8, u8, u8, u8);
+static void SpriteCB_ItemIcon_SetPosToCursor(struct Sprite *);
+static void SpriteCB_ItemIcon_WaitAnim(struct Sprite *);
+static void SpriteCB_ItemIcon_ToHand(struct Sprite *);
+static void SpriteCB_ItemIcon_ToMon(struct Sprite *);
+static void SpriteCB_ItemIcon_SwapToHand(struct Sprite *);
+static void SpriteCB_ItemIcon_HideParty(struct Sprite *);
+static void SpriteCB_ItemIcon_SwapToMon(struct Sprite *);
+
+// Cursor
+static void CreateCursorSprites(void);
+static void ToggleCursorAutoAction(void);
+static u8 GetCursorPosition(void);
+static void StartCursorAnim(u8);
+static void TryHideItemAtCursor(void);
+static void TryShowItemAtCursor(void);
+static void InitCursor(void);
+static void InitCursorOnReopen(void);
+static void GetCursorCoordsByPos(u8, u8, u16 *, u16 *);
+static bool8 UpdateCursorPos(void);
+static void DoCursorNewPosUpdate(void);
+static void SetCursorInParty(void);
+static void SetCursorBoxPosition(u8);
+static void ClearSavedCursorPos(void);
+static void SaveCursorPos(void);
+static u8 GetSavedCursorPos(void);
+static void InitMonPlaceChange(u8);
+static bool8 DoMonPlaceChange(void);
+static bool8 MonPlaceChange_Shift(void);
+static bool8 MonPlaceChange_Grab(void);
+static bool8 MonPlaceChange_Place(void);
+static bool8 MultiMonPlaceChange_Up(void);
+static bool8 MultiMonPlaceChange_Down(void);
+static bool8 MonPlaceChange_CursorDown(void);
+static bool8 MonPlaceChange_CursorUp(void);
+static void TrySetCursorFistAnim(void);
+static bool8 IsCursorOnCloseBox(void);
+static bool8 IsCursorOnBoxTitle(void);
+static bool8 IsCursorInBox(void);
-// This file's functions.
-static void CreatePCMenu(u8 whichMenu, s16 *windowIdPtr);
-static void Cb2_EnterPSS(u8 boxOption);
+// Scroll arrows
+static void CreateBoxScrollArrows(void);
+static void StartBoxScrollArrowsSlide(s8);
+static void StopBoxScrollArrowsSlide(void);
+static void AnimateBoxScrollArrows(bool8);
+static void SpriteCB_Arrow(struct Sprite *);
+static struct Sprite *CreateChooseBoxArrows(u16, u16, u8, u8, u8);
+
+// Box title
+static void InitBoxTitle(u8);
+static void CreateIncomingBoxTitle(u8, s8);
+static void CycleBoxTitleSprites(void);
+static void SpriteCB_IncomingBoxTitle(struct Sprite *);
+static void SpriteCB_OutgoingBoxTitle(struct Sprite *);
+static void CycleBoxTitleColor(void);
+static s16 GetBoxTitleBaseX(const u8 *);
+
+// Wallpaper
+static void SetWallpaperForCurrentBox(u8);
+static bool8 DoWallpaperGfxChange(void);
+static void LoadWallpaperGfx(u8, s8);
+static bool32 WaitForWallpaperGfxLoad(void);
+static void DrawWallpaper(const void *, s8, u8);
+static void TrimOldWallpaper(void *);
+static void AddWallpaperSetsMenu(void);
+static void AddWallpapersMenu(u8);
+static u8 GetBoxWallpaper(u8);
+static void SetBoxWallpaper(u8, u8);
+
+// General box
+static void CreateInitBoxTask(u8);
+static bool8 IsInitBoxActive(void);
+static void Task_InitBox(u8);
+static void SetUpScrollToBox(u8);
+static bool8 ScrollToBox(void);
+static s8 DetermineBoxScrollDirection(u8);
+static void SetCurrentBox(u8);
+
+// Misc
+static void CreateMainMenu(u8, s16 *);
static u8 GetCurrentBoxOption(void);
-static u8 HandleInput(void);
-static u8 sub_80CDC2C(void);
-static u8 sub_80CB9BC(void);
-static void LoadWallpaperGfx(u8 boxId, s8 direction);
-static void sub_80CCCFC(u8 boxId, s8 direction);
-static void sub_80CD0B8(s8 direction);
-static void SetCurrentBox(u8 boxId);
-static void sub_80CC32C(u8 boxId);
-static void sub_80C7958(u8 curBox);
-static void sub_80CCAE0(void *arg0);
-static void sub_80C7B14(void);
-static void sub_80C7BB4(void);
static void ScrollBackground(void);
-static void sub_80C7B80(void);
-static void sub_80C7BE4(void);
-static void sub_80CAA14(void);
-static void sub_80CFDC4(void);
-static void sub_80CE790(void);
-static void sub_80CE8E4(void);
+static void UpdateCloseBoxButtonFlash(void);
static void GiveChosenBagItem(void);
static void SetUpHidePartyMenu(void);
-static void DestroyAllPartyMonIcons(void);
-static void sub_80D11CC(void);
-static void LoadPSSMenuGfx(void);
+static void LoadPokeStorageMenuGfx(void);
static void LoadWaveformSpritePalette(void);
-static void sub_80CDC18(void);
-static void sub_80CD36C(void);
-static void sub_80CD3EC(void);
-static void sub_80CAC1C(void);
-static void sub_80CEBDC(void);
+static void InitPokeStorageBg0(void);
static void SetScrollingBackground(void);
-static void sub_80CABE0(void);
-static void sub_80CAEAC(void);
-static void sub_80D0C60(void);
-static void sub_80CFEA8(void);
-static void sub_80CDC0C(void);
-static void sub_80CAF04(void);
-static void sub_80CA0D8(void);
-static void AddMenu(void);
-static void sub_80CE250(void);
-static void InitCanRelaseMonVars(void);
-static void sub_80D01B8(void);
-static void ReleaseMon(void);
-static void RefreshCursorMonData(void);
-static void LoadCursorMonSprite(void);
-static void sub_80CA154(void);
-static void sub_80CA1C4(void);
-static void sub_80CC064(void);
-static void sub_80CE324(void);
+static void UpdateBoxToSendMons(void);
+static void InitCursorItemIcon(void);
+static void InitPalettesAndSprites(void);
+static void RefreshDisplayMonData(void);
+static void CreateDisplayMonSprite(void);
+static void CreateMarkingComboSprite(void);
+static void CreateWaveformSprites(void);
static void ClearBottomWindow(void);
-static void sub_80CA704(void);
-static void sub_80D013C(void);
-static void sub_80CE00C(void);
-static void sub_80D1194(void);
-static void PrintCursorMonInfo(void);
-static void sub_80CA65C(void);
-static void AddWallpaperSetsMenu(void);
-static void sub_80CD02C(void);
-static void InitMenu(void);
-static void sub_80CD158(void);
-static void sub_80CFC14(void);
-static void sub_80CEB40(void);
-static void sub_80CCEE0(void);
-static void sub_80D1818(void);
-static void sub_80D19B4(u32 arg0);
-static void sub_80CAA74(void);
-static void PrintItemDescription(void);
-static void sub_80CE760(void);
-static void sub_80CDBA0(void);
-static void sub_80CE7E8(void);
-static void sub_80CFECC(void);
-static void sub_80CA9EC(void);
-static void FreePSSData(void);
-static void AddBoxMenu(void);
-static void sub_80CCF9C(void);
-static void MoveMon(void);
-static void PlaceMon(void);
-static void sub_80CAB20(void);
-static void sub_80CE22C(void);
-static void sub_80CDA68(void);
-static void sub_80CB950(void);
-static void sub_80CA9C0(void);
+static void InitSupplementalTilemaps(void);
+static void PrintDisplayMonInfo(void);
+static void UpdateWaveformAnimation(void);
+static void SetPartySlotTilemaps(void);
+static void StopFlashingCloseBoxButton(void);
+static void FreePokeStorageData(void);
+static void UpdatePartySlotColors(void);
+static void StartFlashingCloseBoxButton(void);
static void SetUpDoShowPartyMenu(void);
-static void BoxSetMosaic(void);
-static void sub_80C7CF4(struct Sprite *sprite);
-static void sub_80CC100(struct Sprite *sprite);
-static void sub_80CB278(struct Sprite *sprite);
-static void sub_80CD210(struct Sprite *sprite);
-static bool32 WaitForWallpaperGfxLoad(void);
-static bool8 InitPSSWindows(void);
-static bool8 sub_80CC0A0(void);
-static bool8 sub_80CE2A8(void);
-static bool8 sub_80D0164(void);
-static bool8 sub_80CC35C(void);
-static bool8 sub_80D01E4(void);
-static bool8 sub_80CDED4(void);
-static bool8 sub_80CDF08(void);
-static bool8 sub_80D184C(void);
-static bool8 sub_80D18E4(void);
+static void StartDisplayMonMosaicEffect(void);
+static bool8 InitPokeStorageWindows(void);
static bool8 DoShowPartyMenu(void);
-static bool8 sub_80D1218(void);
-static bool8 ScrollToBox(void);
-static bool8 sub_80CD554(void);
static bool8 HidePartyMenu(void);
-static bool8 IsActiveItemMoving(void);
-static bool8 sub_80D0580(u8 arg0);
-static bool8 sub_80D0BC0(void);
-static bool8 sub_80CA2B8(void);
-static bool8 DoWallpaperGfxChange(void);
-static bool8 DoMonPlaceChange(void);
-static bool8 sub_80D00A8(void);
-static bool8 CanMovePartyMon(void);
-static bool8 CanShiftMon(void);
-static bool8 IsCursorOnCloseBox(void);
-static bool8 IsCursorOnBox(void);
-static bool8 IsCursorInBox(void);
-static bool8 IsMonBeingMoved(void);
-static bool8 TryStorePartyMonInBox(u8 boxId);
-static void Cb_InitPSS(u8 taskId);
-static void Cb_PlaceMon(u8 taskId);
-static void Cb_ChangeScreen(u8 taskId);
-static void Cb_ShowPSS(u8 taskId);
-static void Cb_OnBPressed(u8 taskId);
-static void Cb_HandleBoxOptions(u8 taskId);
-static void Cb_OnSelectedMon(u8 taskId);
-static void Cb_OnCloseBoxPressed(u8 taskId);
-static void Cb_HidePartyPokemon(u8 taskId);
-static void Cb_DepositMenu(u8 taskId);
-static void Cb_MoveMon(u8 taskId);
-static void Cb_GiveMovingItemToMon(u8 taskId);
-static void Cb_SwitchSelectedItem(u8 taskId);
-static void Cb_TakeItemForMoving(u8 taskId);
-static void Cb_WithdrawMon(u8 taskId);
-static void Cb_ShiftMon(u8 taskId);
-static void Cb_ShowPartyPokemon(u8 taskId);
-static void Cb_ShowItemInfo(u8 taskId);
-static void Cb_GiveItemFromBag(u8 taskId);
-static void Cb_ItemToBag(u8 taskId);
-static void Cb_TakeItemForMoving(u8 taskId);
-static void Cb_ShowMarkMenu(u8 taskId);
-static void Cb_ShowMonSummary(u8 taskId);
-static void Cb_ReleaseMon(u8 taskId);
-static void Cb_ReshowPSS(u8 taskId);
-static void Cb_MainPSS(u8 taskId);
-static void Cb_JumpBox(u8 taskId);
-static void Cb_HandleWallpapers(u8 taskId);
-static void Cb_NameBox(u8 taskId);
-static void Cb_PrintCantStoreMail(u8 taskId);
-static void Cb_HandleMovingMonFromParty(u8 taskId);
-static void SetUpScrollToBox(u8 boxId);
-static void sub_80CFE54(u8 animNum);
-static void SetMovingMonPriority(u8 priority);
-static void InitMonPlaceChange(u8 arg0);
-static void SetMonMarkings(u8 markings);
-static void ShowYesNoWindow(s8 cursorPos);
-static void sub_80CDBF8(u8 cursorBoxPosition);
-static void sub_80D01D0(u8 arg0);
-static void sub_80CD1A8(bool8 arg0);
-static void sub_80CA984(bool8 arg0);
-static void CreatePartyMonsSprites(bool8 arg0);
-static void PrintStorageActionText(u8 id);
-static s16 sub_80D00AC(void);
-static s8 RunCanReleaseMon(void);
-static u8 GetBoxCursorPosition(void);
-static void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos);
-static void Item_GiveMovingToMon(u8 cursorArea, u8 cursorPos);
-static void Item_TakeMons(u8 cursorArea, u8 cursorPos);
-static void Item_SwitchMonsWithMoving(u8 cursorArea, u8 cursorPos);
-static struct Sprite *sub_80CD2E8(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority);
-static void SetWallpaperForCurrentBox(u8 wallpaperId);
-static void AddWallpapersMenu(u8 wallpaperSet);
-static u16 GetMovingItem(void);
-static void LoadCursorMonGfx(u16 species, u32 pid);
-static void sub_80CA2D0(struct Sprite *sprite);
-static void sub_80CCF64(struct Sprite *sprite);
-static void sub_80CBA3C(struct Sprite *sprite);
-static void sub_80CCF30(struct Sprite *sprite);
-static void sub_80CBAF0(s16 yDelta);
-static void sub_80CAAA8(u8 arg0, bool8 isPartyMon);
-static const u8 *GetMovingItemName(void);
-static void SetMenuText(u8 textId);
-static void sub_80D0D8C(u8 cursorArea, u8 cursorPos);
-static void sub_80D0E50(u8 cursorArea, u8 cursorPos);
-static void sub_80D0F38(u16 item);
-static struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s16 y, u8 oamPriority, u8 subpriority);
-static void DestroyBoxMonIcon(struct Sprite *sprite);
-static void SetBoxSpeciesAndPersonalities(u8 boxId);
-static void sub_80CB9D0(struct Sprite *sprite, u16 partyId);
-static void sub_80CC370(u8 taskId);
-static void sub_80CCB50(u8 boxId);
-static s8 DetermineBoxScrollDirection(u8 boxId);
-static void sub_80CCA3C(const void *tilemap, s8 direction, u8 arg2);
-static s16 sub_80CD00C(const u8 *string);
-static bool8 MonPlaceChange_Shift(void);
-static bool8 MonPlaceChange_Move(void);
-static bool8 MonPlaceChange_Place(void);
-static bool8 sub_80CDEC4(void);
-static bool8 sub_80CDEB4(void);
-static void sub_80CD444(u8 cursorArea, u8 cursorPosition, u16 *x, u16 *y);
-static void SetShiftedMonData(u8 boxId, u8 position);
-static void SetMovedMonData(u8 boxId, u8 position);
-static void SetPlacedMonData(u8 boxId, u8 position);
-static void PurgeMonOrBoxMon(u8 boxId, u8 position);
-static void SetCursorMonData(void *pokemon, u8 mode);
-static bool32 AtLeastThreeUsableMons(void);
-static u8 InBoxInput_Normal(void);
-static u8 InBoxInput_MovingMultiple(void);
-static u8 InBoxInput_GrabbingMultiple(void);
-static s8 sub_80CFF98(u8 arg0);
-static u8 sub_80CFA5C(void);
-static u8 sub_80D0BA4(void);
-static bool8 sub_80CFA84(void);
-static bool8 sub_80CFB44(void);
-static bool8 sub_80D024C(void);
-static bool8 sub_80D0344(void);
-static bool8 sub_80D03B0(void);
-static bool8 sub_80D0420(void);
-static bool8 sub_80D04A0(void);
-static bool8 sub_80D04C8(void);
-static void sub_80D07B0(u8 arg0, u8 arg1);
-static void sub_80D0834(u8 arg0, u8 arg1);
-static void sub_80D0B5C(void);
-static void sub_80D062C(void);
-static void sub_80D0884(u16 arg0, u16 arg1, u16 arg2);
-static void sub_80D08CC(void);
-static void sub_80D09A4(void);
-static void sub_80D0A1C(void);
-static void sub_80D0AAC(void);
-static u8 sub_80D0894(void);
-static void sub_80D0778(u8 arg0, u8 arg1, u8 arg2);
-static void sub_80D0708(u8 arg0, u8 arg1, u8 arg2);
-static void sub_80D06D0(u8 arg0, u8 arg1, u8 arg2);
-static void sub_80D0740(u8 arg0, u8 arg1, u8 arg2);
-static void sub_80D27AC(u8 id, u16 arg1, u16 arg2, u16 arg3, u16 arg4);
-static void sub_80D27F4(u8 id, u8 arg1, s8 arg2);
-static void sub_80D2644(u8 id, u8 bg, const void *arg2, u16 arg3, u16 arg4);
-static void sub_80D2770(u8 id, u16 arg1, u16 arg2);
-static void sub_80D259C(u8 count);
-static void sub_80D25F0(void);
-static void sub_80D2918(u8 id);
-static void sub_80D2960(u8 id);
-static void sub_80D29F8(u8 id);
-static void sub_80D2A90(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u32 arg2);
-static void sub_80D2AA4(void);
-static void sub_80D2B88(struct UnkStruct_2000028 *unkStruct);
-static void sub_80D2C1C(struct UnkStruct_2000028 *unkStruct);
-
-// static const rom data
-static const struct PSS_MenuStringPtrs gUnknown_085716C0[] =
-{
- {gText_WithdrawPokemon, gText_WithdrawMonDescription},
- {gText_DepositPokemon, gText_DepositMonDescription},
- {gText_MovePokemon, gText_MoveMonDescription},
- {gText_MoveItems, gText_MoveItemsDescription},
- {gText_SeeYa, gText_SeeYaDescription}
+static bool8 IsDisplayMosaicActive(void);
+static void ShowYesNoWindow(s8);
+static void UpdateCloseBoxButtonTilemap(bool8);
+static void PrintMessage(u8 id);
+static void LoadDisplayMonGfx(u16, u32);
+static void SpriteCB_DisplayMonMosaic(struct Sprite *);
+static void SetPartySlotTilemap(u8, bool8);
+
+// Tilemap utility
+static void TilemapUtil_SetRect(u8, u16, u16, u16, u16);
+static void TilemapUtil_Move(u8, u8, s8);
+static void TilemapUtil_SetMap(u8, u8, const void *, u16, u16);
+static void TilemapUtil_SetPos(u8, u16, u16);
+static void TilemapUtil_Init(u8);
+static void TilemapUtil_Free(void);
+static void TilemapUtil_Update(u8);
+static void TilemapUtil_DrawPrev(u8);
+static void TilemapUtil_Draw(u8);
+
+// Unknown utility
+static void UnkUtil_Init(struct UnkUtil *, struct UnkUtilData *, u32);
+static void UnkUtil_Run(void);
+static void UnkUtil_CpuRun(struct UnkUtilData *);
+static void UnkUtil_DmaRun(struct UnkUtilData *);
+
+struct {
+ const u8 *text;
+ const u8 *desc;
+} static const sMainMenuTexts[OPTIONS_COUNT] =
+{
+ [OPTION_WITHDRAW] = {gText_WithdrawPokemon, gText_WithdrawMonDescription},
+ [OPTION_DEPOSIT] = {gText_DepositPokemon, gText_DepositMonDescription},
+ [OPTION_MOVE_MONS] = {gText_MovePokemon, gText_MoveMonDescription},
+ [OPTION_MOVE_ITEMS] = {gText_MoveItems, gText_MoveItemsDescription},
+ [OPTION_EXIT] = {gText_SeeYa, gText_SeeYaDescription}
};
-static const struct WindowTemplate gUnknown_085716E8 =
+static const struct WindowTemplate sWindowTemplate_MainMenu =
{
.bg = 0,
.tilemapLeft = 1,
@@ -735,94 +893,96 @@ static const struct WindowTemplate gUnknown_085716E8 =
.baseBlock = 0x1,
};
-static const union AnimCmd sSpriteAnim_85716F0[] =
+static const union AnimCmd sAnim_ChooseBoxMenu_TopLeft[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_85716F8[] =
+static const union AnimCmd sAnim_ChooseBoxMenu_BottomLeft[] =
{
ANIMCMD_FRAME(4, 5),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8571700[] =
+static const union AnimCmd sAnim_ChooseBoxMenu_TopRight[] =
{
ANIMCMD_FRAME(6, 5),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8571708[] =
+static const union AnimCmd sAnim_ChooseBoxMenu_BottomRight[] =
{
ANIMCMD_FRAME(10, 5),
ANIMCMD_END
};
-static const union AnimCmd *const sSpriteAnimTable_8571710[] =
+static const union AnimCmd *const sAnims_ChooseBoxMenu[] =
{
- sSpriteAnim_85716F0,
- sSpriteAnim_85716F8,
- sSpriteAnim_8571700,
- sSpriteAnim_8571708
+ sAnim_ChooseBoxMenu_TopLeft,
+ sAnim_ChooseBoxMenu_BottomLeft,
+ sAnim_ChooseBoxMenu_TopRight,
+ sAnim_ChooseBoxMenu_BottomRight
};
-static const union AffineAnimCmd sSpriteAffineAnim_8571720[] =
+static const union AffineAnimCmd sAffineAnim_ChooseBoxMenu[] =
{
AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_8571730[] =
+// Unused
+static const union AffineAnimCmd *const sAffineAnims_ChooseBoxMenu[] =
{
- sSpriteAffineAnim_8571720
+ sAffineAnim_ChooseBoxMenu
};
-static const u8 sBoxInfoTextColors[] = {TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5};
+static const u8 sChooseBoxMenu_TextColors[] = {TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5};
static const u8 sText_OutOf30[] = _("/30");
-static const u16 gBoxSelectionPopupPalette[] = INCBIN_U16("graphics/unknown/unknown_57173C.gbapal");
-static const u8 gBoxSelectionPopupCenterTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_center.4bpp");
-static const u8 gBoxSelectionPopupSidesTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp");
-static const u32 gPokemonStorageScrollingBGTileset[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.4bpp.lz");
-static const u32 gPokemonStorageScrollingBGTilemap[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.bin.lz");
-static const u32 gUnknown_08572280[] = INCBIN_U32("graphics/unknown/unknown_572280.gbapal");
-static const u32 gUnknown_085722A0[] = INCBIN_U32("graphics/unknown/unknown_5722A0.bin.lz");
+static const u16 sChooseBoxMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/box_selection_popup.gbapal");
+static const u8 sChooseBoxMenuCenter_Gfx[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_center.4bpp");
+static const u8 sChooseBoxMenuSides_Gfx[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp");
+static const u32 sScrollingBg_Gfx[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.4bpp.lz");
+static const u32 sScrollingBg_Tilemap[] = INCBIN_U32("graphics/pokemon_storage/scrolling_bg.bin.lz");
+static const u16 sDisplayMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/display_menu.gbapal"); // Unused
+static const u32 sDisplayMenu_Tilemap[] = INCBIN_U32("graphics/pokemon_storage/display_menu.bin.lz");
-static const u16 gUnknown_0857239C[] =
+static const u16 sPkmnData_Tilemap[] =
{
0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118,
0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, 0x2108, 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117, 0x2118,
};
-static const u16 gUnknown_085723DC[] = INCBIN_U16("graphics/unknown/unknown_5723DC.gbapal"); // Left-most part and Close Box.
-static const u16 gUnknown_085723FC[] = INCBIN_U16("graphics/unknown/unknown_5723FC.gbapal");
-static const u16 gUnknown_0857241C[] = INCBIN_U16("graphics/unknown/unknown_57241C.gbapal");
-static const u16 gUnknown_0857243C[] = INCBIN_U16("graphics/unknown/unknown_57243C.gbapal");
+// sInterface_Pal - parts of the display frame, "PkmnData"'s normal color, Close Box
+static const u16 sInterface_Pal[] = INCBIN_U16("graphics/pokemon_storage/interface.gbapal");
+static const u16 sPkmnDataGray_Pal[] = INCBIN_U16("graphics/pokemon_storage/pkmn_data_gray.gbapal");
+static const u16 sBg_Pal[] = INCBIN_U16("graphics/pokemon_storage/bg.gbapal");
+static const u16 sBgMoveItems_Pal[] = INCBIN_U16("graphics/pokemon_storage/bg_move_items.gbapal");
-static const u16 gUnknown_0857245C[] =
+static const u16 sCloseBoxButton_Tilemap[] =
{
0x014c, 0x014d, 0x014e, 0x014f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x015c, 0x015d, 0x015e, 0x015f, 0x0180, 0x0181, 0x0182,
0x0183, 0x0184, 0x0175, 0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189,
0x018a, 0x018b, 0x018c, 0x018d
};
-static const u16 gUnknown_085724A4[] =
+static const u16 sPartySlotFilled_Tilemap[] =
{
0x1140, 0x1141, 0x1141, 0x1142, 0x1150, 0x1151, 0x1151, 0x1152, 0x1160, 0x1161, 0x1161, 0x1162,
};
-static const u16 gUnknown_085724BC[] =
+static const u16 sPartySlotEmpty_Tilemap[] =
{
0x1143, 0x1144, 0x1144, 0x1145, 0x1153, 0x1154, 0x1154, 0x1155, 0x1163, 0x1164, 0x1164, 0x1165,
};
-static const u16 gWaveformPalette[] = INCBIN_U16("graphics/pokemon_storage/waveform.gbapal");
-static const u32 gWaveformTiles[] = INCBIN_U32("graphics/pokemon_storage/waveform.4bpp");
-static const u32 gUnknown_085726B4[] = INCBIN_U32("graphics/unused/unknown_5726B4.gbapal");
-static const u32 gUnknown_085726F4[] = INCBIN_U32("graphics/unknown/unknown_5726F4.gbapal");
+static const u16 sWaveform_Pal[] = INCBIN_U16("graphics/pokemon_storage/waveform.gbapal");
+static const u32 sWaveform_Gfx[] = INCBIN_U32("graphics/pokemon_storage/waveform.4bpp");
+static const u16 sUnused_Pal[] = INCBIN_U16("graphics/pokemon_storage/unused.gbapal");
+static const u16 sUnknown_Pal[] = INCBIN_U16("graphics/pokemon_storage/unknown.gbapal");
-static const struct WindowTemplate gUnknown_08572714[] =
+static const struct WindowTemplate sWindowTemplates[] =
{
- { // 0
+ {
.bg = 1,
.tilemapLeft = 0,
.tilemapTop = 11,
@@ -831,7 +991,7 @@ static const struct WindowTemplate gUnknown_08572714[] =
.paletteNum = 3,
.baseBlock = 0xC0,
},
- { // 1
+ {
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 17,
@@ -840,7 +1000,7 @@ static const struct WindowTemplate gUnknown_08572714[] =
.paletteNum = 15,
.baseBlock = 0x14,
},
- { // 2
+ {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 13,
@@ -852,7 +1012,7 @@ static const struct WindowTemplate gUnknown_08572714[] =
DUMMY_WIN_TEMPLATE
};
-static const struct BgTemplate gUnknown_08572734[] =
+static const struct BgTemplate sBgTemplates[] =
{
{
.bg = 0,
@@ -894,59 +1054,59 @@ static const struct BgTemplate gUnknown_08572734[] =
static const struct SpritePalette gWaveformSpritePalette =
{
- gWaveformPalette, TAG_PAL_WAVEFORM
+ sWaveform_Pal, PALTAG_MISC_2
};
-static const struct SpriteSheet gWaveformSpriteSheet =
+static const struct SpriteSheet sSpriteSheet_Waveform =
{
- gWaveformTiles, sizeof(gWaveformTiles), TAG_TILE_WAVEFORM
+ sWaveform_Gfx, sizeof(sWaveform_Gfx), GFXTAG_WAVEFORM
};
-static const struct OamData sOamData_857286C;
-static const struct SpriteTemplate sSpriteTemplate_CursorMon =
+static const struct OamData sOamData_DisplayMon;
+static const struct SpriteTemplate sSpriteTemplate_DisplayMon =
{
- .tileTag = TAG_TILE_2,
- .paletteTag = TAG_PAL_DAC6,
- .oam = &sOamData_857286C,
+ .tileTag = GFXTAG_DISPLAY_MON,
+ .paletteTag = PALTAG_DISPLAY_MON,
+ .oam = &sOamData_DisplayMon,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct StorageAction gPCStorageActionTexts[] =
-{
- [PC_TEXT_EXIT_BOX] = {gText_ExitFromBox, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_WHAT_YOU_DO] = {gText_WhatDoYouWantToDo, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_PICK_A_THEME] = {gText_PleasePickATheme, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_PICK_A_WALLPAPER] = {gText_PickTheWallpaper, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_IS_SELECTED] = {gText_PkmnIsSelected, PC_TEXT_FMT_MON_NAME_1},
- [PC_TEXT_JUMP_TO_WHICH_BOX] = {gText_JumpToWhichBox, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_DEPOSIT_IN_WHICH_BOX] = {gText_DepositInWhichBox, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_WAS_DEPOSITED] = {gText_PkmnWasDeposited, PC_TEXT_FMT_MON_NAME_1},
- [PC_TEXT_BOX_IS_FULL] = {gText_BoxIsFull2, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_RELEASE_POKE] = {gText_ReleaseThisPokemon, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_WAS_RELEASED] = {gText_PkmnWasReleased, PC_TEXT_FMT_MON_NAME_4},
- [PC_TEXT_BYE_BYE] = {gText_ByeByePkmn, PC_TEXT_FMT_MON_NAME_6},
- [PC_TEXT_MARK_POKE] = {gText_MarkYourPkmn, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_LAST_POKE] = {gText_ThatsYourLastPkmn, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_PARTY_FULL] = {gText_YourPartysFull, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_HOLDING_POKE] = {gText_YoureHoldingAPkmn, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_WHICH_ONE_WILL_TAKE] = {gText_WhichOneWillYouTake, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_CANT_RELEASE_EGG] = {gText_YouCantReleaseAnEgg, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_CONTINUE_BOX] = {gText_ContinueBoxOperations, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_CAME_BACK] = {gText_PkmnCameBack, PC_TEXT_FMT_MON_NAME_1},
- [PC_TEXT_WORRIED] = {gText_WasItWorriedAboutYou, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_SURPRISE] = {gText_FourEllipsesExclamation, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_PLEASE_REMOVE_MAIL] = {gText_PleaseRemoveTheMail, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_IS_SELECTED2] = {gText_PkmnIsSelected, PC_TEXT_FMT_ITEM_NAME},
- [PC_TEXT_GIVE_TO_MON] = {gText_GiveToAPkmn, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_PLACED_IN_BAG] = {gText_PlacedItemInBag, PC_TEXT_FMT_ITEM_NAME},
- [PC_TEXT_BAG_FULL] = {gText_BagIsFull2, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_PUT_IN_BAG] = {gText_PutItemInBag, PC_TEXT_FMT_NORMAL},
- [PC_TEXT_ITEM_IS_HELD] = {gText_ItemIsNowHeld, PC_TEXT_FMT_ITEM_NAME},
- [PC_TEXT_CHANGED_TO_ITEM] = {gText_ChangedToNewItem, PC_TEXT_FMT_ITEM_NAME},
- [PC_TEXT_CANT_STORE_MAIL] = {gText_MailCantBeStored, PC_TEXT_FMT_NORMAL},
+static const struct StorageMessage sMessages[] =
+{
+ [MSG_EXIT_BOX] = {gText_ExitFromBox, MSG_VAR_NONE},
+ [MSG_WHAT_YOU_DO] = {gText_WhatDoYouWantToDo, MSG_VAR_NONE},
+ [MSG_PICK_A_THEME] = {gText_PleasePickATheme, MSG_VAR_NONE},
+ [MSG_PICK_A_WALLPAPER] = {gText_PickTheWallpaper, MSG_VAR_NONE},
+ [MSG_IS_SELECTED] = {gText_PkmnIsSelected, MSG_VAR_MON_NAME_1},
+ [MSG_JUMP_TO_WHICH_BOX] = {gText_JumpToWhichBox, MSG_VAR_NONE},
+ [MSG_DEPOSIT_IN_WHICH_BOX] = {gText_DepositInWhichBox, MSG_VAR_NONE},
+ [MSG_WAS_DEPOSITED] = {gText_PkmnWasDeposited, MSG_VAR_MON_NAME_1},
+ [MSG_BOX_IS_FULL] = {gText_BoxIsFull2, MSG_VAR_NONE},
+ [MSG_RELEASE_POKE] = {gText_ReleaseThisPokemon, MSG_VAR_NONE},
+ [MSG_WAS_RELEASED] = {gText_PkmnWasReleased, MSG_VAR_RELEASE_MON_1},
+ [MSG_BYE_BYE] = {gText_ByeByePkmn, MSG_VAR_RELEASE_MON_3},
+ [MSG_MARK_POKE] = {gText_MarkYourPkmn, MSG_VAR_NONE},
+ [MSG_LAST_POKE] = {gText_ThatsYourLastPkmn, MSG_VAR_NONE},
+ [MSG_PARTY_FULL] = {gText_YourPartysFull, MSG_VAR_NONE},
+ [MSG_HOLDING_POKE] = {gText_YoureHoldingAPkmn, MSG_VAR_NONE},
+ [MSG_WHICH_ONE_WILL_TAKE] = {gText_WhichOneWillYouTake, MSG_VAR_NONE},
+ [MSG_CANT_RELEASE_EGG] = {gText_YouCantReleaseAnEgg, MSG_VAR_NONE},
+ [MSG_CONTINUE_BOX] = {gText_ContinueBoxOperations, MSG_VAR_NONE},
+ [MSG_CAME_BACK] = {gText_PkmnCameBack, MSG_VAR_MON_NAME_1},
+ [MSG_WORRIED] = {gText_WasItWorriedAboutYou, MSG_VAR_NONE},
+ [MSG_SURPRISE] = {gText_FourEllipsesExclamation, MSG_VAR_NONE},
+ [MSG_PLEASE_REMOVE_MAIL] = {gText_PleaseRemoveTheMail, MSG_VAR_NONE},
+ [MSG_IS_SELECTED2] = {gText_PkmnIsSelected, MSG_VAR_ITEM_NAME},
+ [MSG_GIVE_TO_MON] = {gText_GiveToAPkmn, MSG_VAR_NONE},
+ [MSG_PLACED_IN_BAG] = {gText_PlacedItemInBag, MSG_VAR_ITEM_NAME},
+ [MSG_BAG_FULL] = {gText_BagIsFull2, MSG_VAR_NONE},
+ [MSG_PUT_IN_BAG] = {gText_PutItemInBag, MSG_VAR_NONE},
+ [MSG_ITEM_IS_HELD] = {gText_ItemIsNowHeld, MSG_VAR_ITEM_NAME},
+ [MSG_CHANGED_TO_ITEM] = {gText_ChangedToNewItem, MSG_VAR_ITEM_NAME},
+ [MSG_CANT_STORE_MAIL] = {gText_MailCantBeStored, MSG_VAR_NONE},
};
static const struct WindowTemplate sYesNoWindowTemplate =
@@ -960,7 +1120,7 @@ static const struct WindowTemplate sYesNoWindowTemplate =
.baseBlock = 0x5C,
};
-static const struct OamData sOamData_857286C =
+static const struct OamData sOamData_DisplayMon =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -977,7 +1137,7 @@ static const struct OamData sOamData_857286C =
.affineParam = 0
};
-static const struct OamData sOamData_8572874 =
+static const struct OamData sOamData_Waveform =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -994,13 +1154,13 @@ static const struct OamData sOamData_8572874 =
.affineParam = 0
};
-static const union AnimCmd sSpriteAnim_857287C[] =
+static const union AnimCmd sAnim_Waveform_LeftOff[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_8572884[] =
+static const union AnimCmd sAnim_Waveform_LeftOn[] =
{
ANIMCMD_FRAME(2, 8),
ANIMCMD_FRAME(4, 8),
@@ -1008,13 +1168,13 @@ static const union AnimCmd sSpriteAnim_8572884[] =
ANIMCMD_JUMP(0)
};
-static const union AnimCmd sSpriteAnim_8572894[] =
+static const union AnimCmd sAnim_Waveform_RightOff[] =
{
ANIMCMD_FRAME(8, 5),
ANIMCMD_END
};
-static const union AnimCmd sSpriteAnim_857289C[] =
+static const union AnimCmd sAnim_Waveform_RightOn[] =
{
ANIMCMD_FRAME(10, 8),
ANIMCMD_FRAME(4, 8),
@@ -1022,38 +1182,38 @@ static const union AnimCmd sSpriteAnim_857289C[] =
ANIMCMD_JUMP(0)
};
-static const union AnimCmd *const sSpriteAnimTable_85728AC[] =
+static const union AnimCmd *const sAnims_Waveform[] =
{
- sSpriteAnim_857287C,
- sSpriteAnim_8572884,
- sSpriteAnim_8572894,
- sSpriteAnim_857289C
+ sAnim_Waveform_LeftOff,
+ sAnim_Waveform_LeftOn,
+ sAnim_Waveform_RightOff,
+ sAnim_Waveform_RightOn
};
static const struct SpriteTemplate sSpriteTemplate_Waveform =
{
- .tileTag = TAG_TILE_WAVEFORM,
- .paletteTag = TAG_PAL_WAVEFORM,
- .oam = &sOamData_8572874,
- .anims = sSpriteAnimTable_85728AC,
+ .tileTag = GFXTAG_WAVEFORM,
+ .paletteTag = PALTAG_MISC_2,
+ .oam = &sOamData_Waveform,
+ .anims = sAnims_Waveform,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct OamData sOamData_85728EC;
-static const struct SpriteTemplate gUnknown_085728D4 =
+static const struct OamData sOamData_MonIcon;
+static const struct SpriteTemplate sSpriteTemplate_MonIcon =
{
- .tileTag = TAG_TILE_12,
- .paletteTag = TAG_PAL_DAC0,
- .oam = &sOamData_85728EC,
+ .tileTag = GFXTAG_MON_ICON,
+ .paletteTag = PALTAG_MON_ICON_0,
+ .oam = &sOamData_MonIcon,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-static const struct OamData sOamData_85728EC =
+static const struct OamData sOamData_MonIcon =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -1070,476 +1230,113 @@ static const struct OamData sOamData_85728EC =
.affineParam = 0
};
-static const union AffineAnimCmd gSpriteAffineAnim_85728F4[] =
+static const union AffineAnimCmd sAffineAnim_ReleaseMon_Release[] =
{
AFFINEANIMCMD_FRAME(-2, -2, 0, 120),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd gSpriteAffineAnim_8572904[] =
+static const union AffineAnimCmd sAffineAnim_ReleaseMon_CameBack[] =
{
AFFINEANIMCMD_FRAME(16, 16, 0, 0),
AFFINEANIMCMD_FRAME(16, 16, 0, 15),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_857291C[] =
-{
- gSpriteAffineAnim_85728F4,
- gSpriteAffineAnim_8572904
-};
-
-static const u16 gWallpaperPalettes_Forest[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/forest_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/forest_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Forest[] = INCBIN_U32("graphics/pokemon_storage/forest.4bpp.lz");
-static const u32 gWallpaperTilemap_Forest[] = INCBIN_U32("graphics/pokemon_storage/forest.bin.lz");
-
-static const u16 gWallpaperPalettes_City[][16] =
+static const union AffineAnimCmd *const sAffineAnims_ReleaseMon[] =
{
- INCBIN_U16("graphics/pokemon_storage/city_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/city_bg.gbapal"),
+ [RELEASE_ANIM_RELEASE] = sAffineAnim_ReleaseMon_Release,
+ [RELEASE_ANIM_CAME_BACK] = sAffineAnim_ReleaseMon_CameBack
};
-static const u32 gWallpaperTiles_City[] = INCBIN_U32("graphics/pokemon_storage/city.4bpp.lz");
-static const u32 gWallpaperTilemap_City[] = INCBIN_U32("graphics/pokemon_storage/city.bin.lz");
-static const u16 gWallpaperPalettes_Desert[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/desert_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/desert_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Desert[] = INCBIN_U32("graphics/pokemon_storage/desert.4bpp.lz");
-static const u32 gWallpaperTilemap_Desert[] = INCBIN_U32("graphics/pokemon_storage/desert.bin.lz");
+#include "data/wallpapers.h"
-static const u16 gWallpaperPalettes_Savanna[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/savanna_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/savanna_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Savanna[] = INCBIN_U32("graphics/pokemon_storage/savanna.4bpp.lz");
-static const u32 gWallpaperTilemap_Savanna[] = INCBIN_U32("graphics/pokemon_storage/savanna.bin.lz");
+static const u16 sUnusedColor = RGB(26, 29, 8);
-static const u16 gWallpaperPalettes_Crag[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/crag_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/crag_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Crag[] = INCBIN_U32("graphics/pokemon_storage/crag.4bpp.lz");
-static const u32 gWallpaperTilemap_Crag[] = INCBIN_U32("graphics/pokemon_storage/crag.bin.lz");
+static const struct SpriteSheet sSpriteSheet_Arrow = {sArrow_Gfx, 0x80, GFXTAG_ARROW};
-static const u16 gWallpaperPalettes_Volcano[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/volcano_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/volcano_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Volcano[] = INCBIN_U32("graphics/pokemon_storage/volcano.4bpp.lz");
-static const u32 gWallpaperTilemap_Volcano[] = INCBIN_U32("graphics/pokemon_storage/volcano.bin.lz");
-
-static const u16 gWallpaperPalettes_Snow[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/snow_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/snow_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Snow[] = INCBIN_U32("graphics/pokemon_storage/snow.4bpp.lz");
-static const u32 gWallpaperTilemap_Snow[] = INCBIN_U32("graphics/pokemon_storage/snow.bin.lz");
-
-static const u16 gWallpaperPalettes_Cave[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/cave_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/cave_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Cave[] = INCBIN_U32("graphics/pokemon_storage/cave.4bpp.lz");
-static const u32 gWallpaperTilemap_Cave[] = INCBIN_U32("graphics/pokemon_storage/cave.bin.lz");
-
-static const u16 gWallpaperPalettes_Beach[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/beach_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/beach_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Beach[] = INCBIN_U32("graphics/pokemon_storage/beach.4bpp.lz");
-static const u32 gWallpaperTilemap_Beach[] = INCBIN_U32("graphics/pokemon_storage/beach.bin.lz");
-
-static const u16 gWallpaperPalettes_Seafloor[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/seafloor_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/seafloor_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Seafloor[] = INCBIN_U32("graphics/pokemon_storage/seafloor.4bpp.lz");
-static const u32 gWallpaperTilemap_Seafloor[] = INCBIN_U32("graphics/pokemon_storage/seafloor.bin.lz");
-
-static const u16 gWallpaperPalettes_River[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/river_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/river_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_River[] = INCBIN_U32("graphics/pokemon_storage/river.4bpp.lz");
-static const u32 gWallpaperTilemap_River[] = INCBIN_U32("graphics/pokemon_storage/river.bin.lz");
-static const u16 gWallpaperPalettes_Sky[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/sky_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/sky_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Sky[] = INCBIN_U32("graphics/pokemon_storage/sky.4bpp.lz");
-static const u32 gWallpaperTilemap_Sky[] = INCBIN_U32("graphics/pokemon_storage/sky.bin.lz");
-
-static const u16 gWallpaperPalettes_PolkaDot[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/polkadot_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/polkadot_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_PolkaDot[] = INCBIN_U32("graphics/pokemon_storage/polkadot.4bpp.lz");
-static const u32 gWallpaperTilemap_PolkaDot[] = INCBIN_U32("graphics/pokemon_storage/polkadot.bin.lz");
-
-static const u16 gWallpaperPalettes_Pokecenter[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/pokecenter_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/pokecenter_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Pokecenter[] = INCBIN_U32("graphics/pokemon_storage/pokecenter.4bpp.lz");
-static const u32 gWallpaperTilemap_Pokecenter[] = INCBIN_U32("graphics/pokemon_storage/pokecenter.bin.lz");
-
-static const u16 gWallpaperPalettes_Machine[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/machine_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/machine_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Machine[] = INCBIN_U32("graphics/pokemon_storage/machine.4bpp.lz");
-static const u32 gWallpaperTilemap_Machine[] = INCBIN_U32("graphics/pokemon_storage/machine.bin.lz");
-
-static const u16 gWallpaperPalettes_Plain[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/plain_frame.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/plain_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Plain[] = INCBIN_U32("graphics/pokemon_storage/plain.4bpp.lz");
-static const u32 gWallpaperTilemap_Plain[] = INCBIN_U32("graphics/pokemon_storage/plain.bin.lz");
-
-// 12x18 tilemap
-static const u32 gUnknown_085773C4[] = INCBIN_U32("graphics/unused/tilemap_5773C4.bin");
-
-static const u16 gUnknown_08577574[][2] =
-{
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF},
- {0x1CE7, 0x7FFF}
-};
-
-#define WALLPAPER_ENTRY(name) {gWallpaperTiles_##name, gWallpaperTilemap_##name, gWallpaperPalettes_##name[0]}
-
-static const struct WallpaperTable gWallpaperTable[] =
-{
- [WALLPAPER_FOREST] = WALLPAPER_ENTRY(Forest),
- [WALLPAPER_CITY] = WALLPAPER_ENTRY(City),
- [WALLPAPER_DESERT] = WALLPAPER_ENTRY(Desert),
- [WALLPAPER_SAVANNA] = WALLPAPER_ENTRY(Savanna),
- [WALLPAPER_CRAG] = WALLPAPER_ENTRY(Crag),
- [WALLPAPER_VOLCANO] = WALLPAPER_ENTRY(Volcano),
- [WALLPAPER_SNOW] = WALLPAPER_ENTRY(Snow),
- [WALLPAPER_CAVE] = WALLPAPER_ENTRY(Cave),
- [WALLPAPER_BEACH] = WALLPAPER_ENTRY(Beach),
- [WALLPAPER_SEAFLOOR] = WALLPAPER_ENTRY(Seafloor),
- [WALLPAPER_RIVER] = WALLPAPER_ENTRY(River),
- [WALLPAPER_SKY] = WALLPAPER_ENTRY(Sky),
- [WALLPAPER_POLKADOT] = WALLPAPER_ENTRY(PolkaDot),
- [WALLPAPER_POKECENTER] = WALLPAPER_ENTRY(Pokecenter),
- [WALLPAPER_MACHINE] = WALLPAPER_ENTRY(Machine),
- [WALLPAPER_PLAIN] = WALLPAPER_ENTRY(Plain),
-};
-
-static const u8 gPCGfx_Arrow[] = INCBIN_U8("graphics/pokemon_storage/arrow.4bpp");
-
-static const u16 gWallpaperPalettes_Zigzagoon[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame1.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/zigzagoon_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Zigzagoon[] = INCBIN_U32("graphics/pokemon_storage/zigzagoon.4bpp.lz");
-static const u32 gWallpaperTilemap_Zigzagoon[] = INCBIN_U32("graphics/pokemon_storage/zigzagoon.bin.lz");
-
-static const u16 gWallpaperPalettes_Screen[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame1.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/screen_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Screen[] = INCBIN_U32("graphics/pokemon_storage/screen.4bpp.lz");
-static const u32 gWallpaperTilemap_Screen[] = INCBIN_U32("graphics/pokemon_storage/screen.bin.lz");
-
-static const u16 gWallpaperPalettes_Diagonal[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame1.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/diagonal_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Diagonal[] = INCBIN_U32("graphics/pokemon_storage/diagonal.4bpp.lz");
-static const u32 gWallpaperTilemap_Diagonal[] = INCBIN_U32("graphics/pokemon_storage/diagonal.bin.lz");
-
-static const u16 gWallpaperPalettes_Block[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/block_bg.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/block_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Block[] = INCBIN_U32("graphics/pokemon_storage/block.4bpp.lz");
-static const u32 gWallpaperTilemap_Block[] = INCBIN_U32("graphics/pokemon_storage/block.bin.lz");
-
-static const u16 gWallpaperPalettes_Pokecenter2[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/pokecenter2_bg.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/pokecenter2_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Pokecenter2[] = INCBIN_U32("graphics/pokemon_storage/pokecenter2.4bpp.lz");
-static const u32 gWallpaperTilemap_Pokecenter2[] = INCBIN_U32("graphics/pokemon_storage/pokecenter2.bin.lz");
-
-static const u16 gWallpaperPalettes_Frame[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/frame_bg.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/frame_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Frame[] = INCBIN_U32("graphics/pokemon_storage/frame.4bpp.lz");
-static const u32 gWallpaperTilemap_Frame[] = INCBIN_U32("graphics/pokemon_storage/frame.bin.lz");
-
-static const u16 gWallpaperPalettes_Blank[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame1.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/zigzagoon_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Blank[] = INCBIN_U32("graphics/pokemon_storage/blank.4bpp.lz");
-static const u32 gWallpaperTilemap_Blank[] = INCBIN_U32("graphics/pokemon_storage/blank.bin.lz");
-
-static const u16 gWallpaperPalettes_Circles[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/circles_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Circles[] = INCBIN_U32("graphics/pokemon_storage/circles.4bpp.lz");
-static const u32 gWallpaperTilemap_Circles[] = INCBIN_U32("graphics/pokemon_storage/circles.bin.lz");
-
-static const u16 gWallpaperPalettes_Azumarill[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/azumarill_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Azumarill[] = INCBIN_U32("graphics/pokemon_storage/azumarill.4bpp.lz");
-static const u32 gWallpaperTilemap_Azumarill[] = INCBIN_U32("graphics/pokemon_storage/azumarill.bin.lz");
-
-static const u16 gWallpaperPalettes_Pikachu[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/pikachu_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Pikachu[] = INCBIN_U32("graphics/pokemon_storage/pikachu.4bpp.lz");
-static const u32 gWallpaperTilemap_Pikachu[] = INCBIN_U32("graphics/pokemon_storage/pikachu.bin.lz");
-
-static const u16 gWallpaperPalettes_Legendary[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/legendary_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Legendary[] = INCBIN_U32("graphics/pokemon_storage/legendary.4bpp.lz");
-static const u32 gWallpaperTilemap_Legendary[] = INCBIN_U32("graphics/pokemon_storage/legendary.bin.lz");
-
-static const u16 gWallpaperPalettes_Dusclops[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/dusclops_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Dusclops[] = INCBIN_U32("graphics/pokemon_storage/dusclops.4bpp.lz");
-static const u32 gWallpaperTilemap_Dusclops[] = INCBIN_U32("graphics/pokemon_storage/dusclops.bin.lz");
-
-static const u16 gWallpaperPalettes_Ludicolo[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/ludicolo_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Ludicolo[] = INCBIN_U32("graphics/pokemon_storage/ludicolo.4bpp.lz");
-static const u32 gWallpaperTilemap_Ludicolo[] = INCBIN_U32("graphics/pokemon_storage/ludicolo.bin.lz");
-
-static const u16 gWallpaperPalettes_Whiscash[][16] =
-{
- INCBIN_U16("graphics/pokemon_storage/friends_frame2.gbapal"),
- INCBIN_U16("graphics/pokemon_storage/whiscash_bg.gbapal"),
-};
-static const u32 gWallpaperTiles_Whiscash[] = INCBIN_U32("graphics/pokemon_storage/whiscash.4bpp.lz");
-static const u32 gWallpaperTilemap_Whiscash[] = INCBIN_U32("graphics/pokemon_storage/whiscash.bin.lz");
-
-static const u32 gWallpaperIcon_Aqua[] = INCBIN_U32("graphics/pokemon_storage/aqua_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Heart[] = INCBIN_U32("graphics/pokemon_storage/heart_icon.4bpp.lz");
-static const u32 gWallpaperIcon_FiveStar[] = INCBIN_U32("graphics/pokemon_storage/five_star_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Brick[] = INCBIN_U32("graphics/pokemon_storage/brick_icon.4bpp.lz");
-static const u32 gWallpaperIcon_FourStar[] = INCBIN_U32("graphics/pokemon_storage/four_star_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Asterisk[] = INCBIN_U32("graphics/pokemon_storage/asterisk_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Dot[] = INCBIN_U32("graphics/pokemon_storage/dot_icon.4bpp.lz");
-static const u32 gWallpaperIcon_LineCircle[] = INCBIN_U32("graphics/pokemon_storage/line_circle_icon.4bpp.lz");
-static const u32 gWallpaperIcon_PokeBall[] = INCBIN_U32("graphics/pokemon_storage/pokeball_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Maze[] = INCBIN_U32("graphics/pokemon_storage/maze_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Footprint[] = INCBIN_U32("graphics/pokemon_storage/footprint_icon.4bpp.lz");
-static const u32 gWallpaperIcon_BigAsterisk[] = INCBIN_U32("graphics/pokemon_storage/big_asterisk_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Circle[] = INCBIN_U32("graphics/pokemon_storage/circle_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Koffing[] = INCBIN_U32("graphics/pokemon_storage/koffing_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Ribbon[] = INCBIN_U32("graphics/pokemon_storage/ribbon_icon.4bpp.lz");
-static const u32 gWallpaperIcon_FourCircles[] = INCBIN_U32("graphics/pokemon_storage/four_circles_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Lotad[] = INCBIN_U32("graphics/pokemon_storage/lotad_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Crystal[] = INCBIN_U32("graphics/pokemon_storage/crystal_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Pichu[] = INCBIN_U32("graphics/pokemon_storage/pichu_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Diglett[] = INCBIN_U32("graphics/pokemon_storage/diglett_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Luvdisc[] = INCBIN_U32("graphics/pokemon_storage/luvdisc_icon.4bpp.lz");
-static const u32 gWallpaperIcon_StarInCircle[] = INCBIN_U32("graphics/pokemon_storage/star_in_circle_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Spinda[] = INCBIN_U32("graphics/pokemon_storage/spinda_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Latis[] = INCBIN_U32("graphics/pokemon_storage/latis_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Minun[] = INCBIN_U32("graphics/pokemon_storage/minun_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Togepi[] = INCBIN_U32("graphics/pokemon_storage/togepi_icon.4bpp.lz");
-static const u32 gWallpaperIcon_Magma[] = INCBIN_U32("graphics/pokemon_storage/magma_icon.4bpp.lz");
-
-static const struct WallpaperTable gFriendsWallpaperTable[] =
-{
- WALLPAPER_ENTRY(Zigzagoon),
- WALLPAPER_ENTRY(Screen),
- WALLPAPER_ENTRY(Horizontal),
- WALLPAPER_ENTRY(Diagonal),
- WALLPAPER_ENTRY(Block),
- WALLPAPER_ENTRY(Ribbon),
- WALLPAPER_ENTRY(Pokecenter2),
- WALLPAPER_ENTRY(Frame),
- WALLPAPER_ENTRY(Blank),
- WALLPAPER_ENTRY(Circles),
- WALLPAPER_ENTRY(Azumarill),
- WALLPAPER_ENTRY(Pikachu),
- WALLPAPER_ENTRY(Legendary),
- WALLPAPER_ENTRY(Dusclops),
- WALLPAPER_ENTRY(Ludicolo),
- WALLPAPER_ENTRY(Whiscash),
-};
-
-static const u32 *const gFriendsIcons[] =
-{
- gWallpaperIcon_Aqua,
- gWallpaperIcon_Heart,
- gWallpaperIcon_FiveStar,
- gWallpaperIcon_Brick,
- gWallpaperIcon_FourStar,
- gWallpaperIcon_Asterisk,
- gWallpaperIcon_Dot,
- gWallpaperIcon_Cross,
- gWallpaperIcon_LineCircle,
- gWallpaperIcon_PokeBall,
- gWallpaperIcon_Maze,
- gWallpaperIcon_Footprint,
- gWallpaperIcon_BigAsterisk,
- gWallpaperIcon_Circle,
- gWallpaperIcon_Koffing,
- gWallpaperIcon_Ribbon,
- gWallpaperIcon_Bolt,
- gWallpaperIcon_FourCircles,
- gWallpaperIcon_Lotad,
- gWallpaperIcon_Crystal,
- gWallpaperIcon_Pichu,
- gWallpaperIcon_Diglett,
- gWallpaperIcon_Luvdisc,
- gWallpaperIcon_StarInCircle,
- gWallpaperIcon_Spinda,
- gWallpaperIcon_Latis,
- gWallpaperIcon_Plusle,
- gWallpaperIcon_Minun,
- gWallpaperIcon_Togepi,
- gWallpaperIcon_Magma,
-};
-
-// Unknown Unused data.
-static const u16 gUnknown_0857B07C = 0x23BA;
-
-static const struct SpriteSheet gUnknown_0857B080 = {gPCGfx_Arrow, 0x80, 6};
-
-static const struct OamData gOamData_83BB298 =
+static const struct OamData sOamData_BoxTitle =
{
.shape = SPRITE_SHAPE(32x16),
.size = SPRITE_SIZE(32x16),
.priority = 2
};
-static const union AnimCmd gSpriteAnim_83BB2A0[] =
+static const union AnimCmd sAnim_BoxTitle_Left[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_83BB2A8[] =
+static const union AnimCmd sAnim_BoxTitle_Right[] =
{
ANIMCMD_FRAME(8, 5),
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_83BB2B0[] =
+static const union AnimCmd *const sAnims_BoxTitle[] =
{
- gSpriteAnim_83BB2A0,
- gSpriteAnim_83BB2A8
+ sAnim_BoxTitle_Left,
+ sAnim_BoxTitle_Right
};
-static const struct SpriteTemplate gSpriteTemplate_857B0A8 =
+static const struct SpriteTemplate sSpriteTemplate_BoxTitle =
{
- TAG_TILE_3,
- TAG_PAL_DAC9,
- &gOamData_83BB298,
- gSpriteAnimTable_83BB2B0,
- NULL,
- gDummySpriteAffineAnimTable,
- SpriteCallbackDummy
+ .tileTag = GFXTAG_BOX_TITLE,
+ .paletteTag = PALTAG_BOX_TITLE,
+ .oam = &sOamData_BoxTitle,
+ .anims = sAnims_BoxTitle,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
};
-static const struct OamData gOamData_83BB2D0 =
+static const struct OamData sOamData_Arrow =
{
.shape = SPRITE_SHAPE(8x16),
.size = SPRITE_SIZE(8x16),
.priority = 2
};
-static const union AnimCmd gSpriteAnim_83BB2D8[] =
+static const union AnimCmd sAnim_Arrow_Left[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_83BB2E0[] =
+static const union AnimCmd sAnim_Arrow_Right[] =
{
ANIMCMD_FRAME(2, 5),
ANIMCMD_END
};
-static const union AnimCmd *const gSpriteAnimTable_83BB2E8[] =
+static const union AnimCmd *const sAnims_Arrow[] =
{
- gSpriteAnim_83BB2D8,
- gSpriteAnim_83BB2E0
+ sAnim_Arrow_Left,
+ sAnim_Arrow_Right
};
-static const struct SpriteTemplate gUnknown_0857B0E0 =
+static const struct SpriteTemplate sSpriteTemplate_Arrow =
{
- 6,
- TAG_PAL_WAVEFORM,
- &gOamData_83BB2D0,
- gSpriteAnimTable_83BB2E8,
- NULL,
- gDummySpriteAffineAnimTable,
- sub_80CD210
+ .tileTag = GFXTAG_ARROW,
+ .paletteTag = PALTAG_MISC_2,
+ .oam = &sOamData_Arrow,
+ .anims = sAnims_Arrow,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_Arrow
};
-static const u16 gHandCursorPalette[] = INCBIN_U16("graphics/pokemon_storage/hand_cursor.gbapal");
-static const u8 gHandCursorTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor.4bpp");
-static const u8 gHandCursorShadowTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor_shadow.4bpp");
+static const u16 sHandCursor_Pal[] = INCBIN_U16("graphics/pokemon_storage/hand_cursor.gbapal");
+static const u8 sHandCursor_Gfx[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor.4bpp");
+static const u8 sHandCursorShadow_Gfx[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor_shadow.4bpp");
+
+
+//------------------------------------------------------------------------------
+// SECTION: Misc utility
+//------------------------------------------------------------------------------
+
-// code
void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, s32 bytesToBuffer)
{
s32 i, tileBytesToBuffer, remainingBytes;
@@ -1587,9 +1384,9 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero
}
// Unused
-void sub_80C6EAC(const u8 *string, void *dst, u16 arg2, u8 arg3, u8 clr2, u8 clr3)
+static void UnusedDrawTextWindow(const u8 *string, void *dst, u16 offset, u8 bgColor, u8 fgColor, u8 shadowColor)
{
- u32 var;
+ u32 tileSize;
u8 windowId;
u8 txtColor[3];
u8 *tileData1, *tileData2;
@@ -1597,17 +1394,17 @@ void sub_80C6EAC(const u8 *string, void *dst, u16 arg2, u8 arg3, u8 clr2, u8 clr
winTemplate.width = StringLength_Multibyte(string);
winTemplate.height = 2;
- var = winTemplate.width * 32;
+ tileSize = winTemplate.width * 32;
windowId = AddWindow(&winTemplate);
- FillWindowPixelBuffer(windowId, PIXEL_FILL(arg3));
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(bgColor));
tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA);
tileData2 = (winTemplate.width * 32) + tileData1;
- txtColor[0] = arg3;
- txtColor[1] = clr2;
- txtColor[2] = clr3;
+ txtColor[0] = bgColor;
+ txtColor[1] = fgColor;
+ txtColor[2] = shadowColor;
AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, txtColor, -1, string);
- CpuCopy16(tileData1, dst, var);
- CpuCopy16(tileData2, dst + arg2, var);
+ CpuCopy16(tileData1, dst, tileSize);
+ CpuCopy16(tileData2, dst + offset, tileSize);
RemoveWindow(windowId);
}
@@ -1702,7 +1499,8 @@ u8 *StringCopyAndFillWithSpaces(u8 *dst, const u8 *src, u16 n)
return str;
}
-static void sub_80C7128(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width)
+// Unused
+static void UnusedWriteRectCpu(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width)
{
u16 i;
@@ -1717,7 +1515,8 @@ static void sub_80C7128(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src,
}
}
-static void sub_80C71A4(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height)
+// Unused
+static void UnusedWriteRectDma(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height)
{
u16 i;
@@ -1727,109 +1526,136 @@ static void sub_80C71A4(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 h
Dma3FillLarge16_(0, dest, width);
}
-static void Task_PokemonStorageSystemPC(u8 taskId)
+
+//------------------------------------------------------------------------------
+// SECTION: Main menu
+//
+// The below functions generally handle the PC main menu where the main
+// options can be selected (Withdraw, Deposit, etc.), as well as exiting
+// Pokémon Storage back to this menu.
+//------------------------------------------------------------------------------
+
+
+enum {
+ STATE_LOAD,
+ STATE_FADE_IN,
+ STATE_HANDLE_INPUT,
+ STATE_ERROR_MSG,
+ STATE_ENTER_PC,
+};
+
+#define tState data[0]
+#define tSelectedOption data[1]
+#define tInput data[2]
+#define tNextOption data[3]
+#define tWindowId data[15]
+
+static void Task_PCMainMenu(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
- case 0:
- CreatePCMenu(task->data[1], &task->data[15]);
+ case STATE_LOAD:
+ CreateMainMenu(task->tSelectedOption, &task->tWindowId);
LoadMessageBoxAndBorderGfx();
DrawDialogueFrame(0, 0);
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, TEXT_SPEED_FF, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SPEED_FF, NULL, 2, 1, 3);
CopyWindowToVram(0, 3);
- CopyWindowToVram(task->data[15], 3);
- task->data[0]++;
+ CopyWindowToVram(task->tWindowId, 3);
+ task->tState++;
break;
- case 1:
+ case STATE_FADE_IN:
if (IsWeatherNotFadingIn())
- {
- task->data[0]++;
- }
+ task->tState++;
break;
- case 2:
- task->data[2] = Menu_ProcessInput();
- switch(task->data[2])
+ case STATE_HANDLE_INPUT:
+ task->tInput = Menu_ProcessInput();
+ switch(task->tInput)
{
case MENU_NOTHING_CHOSEN:
- task->data[3] = task->data[1];
- if (JOY_NEW(DPAD_UP) && --task->data[3] < 0)
- task->data[3] = 4;
+ task->tNextOption = task->tSelectedOption;
+ if (JOY_NEW(DPAD_UP) && --task->tNextOption < 0)
+ task->tNextOption = OPTIONS_COUNT - 1;
+ if (JOY_NEW(DPAD_DOWN) && ++task->tNextOption > OPTIONS_COUNT - 1)
+ task->tNextOption = 0;
- if (JOY_NEW(DPAD_DOWN) && ++task->data[3] > 4)
- task->data[3] = 0;
- if (task->data[1] != task->data[3])
+ if (task->tSelectedOption != task->tNextOption)
{
- task->data[1] = task->data[3];
+ task->tSelectedOption = task->tNextOption;
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3);
}
break;
case MENU_B_PRESSED:
- case 4:
- ClearStdWindowAndFrame(task->data[15], TRUE);
+ case OPTION_EXIT:
+ ClearStdWindowAndFrame(task->tWindowId, TRUE);
ScriptContext2_Disable();
EnableBothScriptContexts();
- RemoveWindow(task->data[15]);
+ RemoveWindow(task->tWindowId);
DestroyTask(taskId);
break;
default:
- if (task->data[2] == 0 && CountPartyMons() == PARTY_SIZE)
+ if (task->tInput == OPTION_WITHDRAW && CountPartyMons() == PARTY_SIZE)
{
+ // Can't withdraw
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 1, gText_PartyFull, 0, NULL, 2, 1, 3);
- task->data[0] = 3;
+ task->tState = STATE_ERROR_MSG;
}
- else if (task->data[2] == 1 && CountPartyMons() == 1)
+ else if (task->tInput == OPTION_DEPOSIT && CountPartyMons() == 1)
{
+ // Can't deposit
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 1, gText_JustOnePkmn, 0, NULL, 2, 1, 3);
- task->data[0] = 3;
+ task->tState = STATE_ERROR_MSG;
}
else
{
+ // Enter PC
FadeScreen(FADE_TO_BLACK, 0);
- task->data[0] = 4;
+ task->tState = STATE_ENTER_PC;
}
break;
}
break;
- case 3:
+ case STATE_ERROR_MSG:
+ // Printed "can't do PC option message"
+ // Wait for new input after message
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3);
- task->data[0] = 2;
+ AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3);
+ task->tState = STATE_HANDLE_INPUT;
}
else if (JOY_NEW(DPAD_UP))
{
- if (--task->data[1] < 0)
- task->data[1] = 4;
+ if (--task->tSelectedOption < 0)
+ task->tSelectedOption = OPTIONS_COUNT - 1;
Menu_MoveCursor(-1);
- task->data[1] = Menu_GetCursorPos();
+ task->tSelectedOption = Menu_GetCursorPos();
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3);
- task->data[0] = 2;
+ AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3);
+ task->tState = STATE_HANDLE_INPUT;
}
else if (JOY_NEW(DPAD_DOWN))
{
- if (++task->data[1] > 3)
- task->data[1] = 0;
+ if (++task->tSelectedOption >= OPTIONS_COUNT - 1)
+ task->tSelectedOption = 0;
Menu_MoveCursor(1);
- task->data[1] = Menu_GetCursorPos();
+ task->tSelectedOption = Menu_GetCursorPos();
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3);
- task->data[0] = 2;
+ AddTextPrinterParameterized2(0, 1, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3);
+ task->tState = STATE_HANDLE_INPUT;
}
break;
- case 4:
+ case STATE_ENTER_PC:
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
- Cb2_EnterPSS(task->data[2]);
- RemoveWindow(task->data[15]);
+ EnterPokeStorage(task->tInput);
+ RemoveWindow(task->tWindowId);
DestroyTask(taskId);
}
break;
@@ -1838,46 +1664,53 @@ static void Task_PokemonStorageSystemPC(u8 taskId)
void ShowPokemonStorageSystemPC(void)
{
- u8 taskId = CreateTask(Task_PokemonStorageSystemPC, 80);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 0;
+ u8 taskId = CreateTask(Task_PCMainMenu, 80);
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tSelectedOption = 0;
ScriptContext2_Enable();
}
-static void FieldCb_ReturnToPcMenu(void)
+static void FieldTask_ReturnToPcMenu(void)
{
u8 taskId;
MainCallback vblankCb = gMain.vblankCallback;
SetVBlankCallback(NULL);
- taskId = CreateTask(Task_PokemonStorageSystemPC, 80);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = sPreviousBoxOption;
- Task_PokemonStorageSystemPC(taskId);
+ taskId = CreateTask(Task_PCMainMenu, 80);
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tSelectedOption = sPreviousBoxOption;
+ Task_PCMainMenu(taskId);
SetVBlankCallback(vblankCb);
FadeInFromBlack();
}
-static void CreatePCMenu(u8 whichMenu, s16 *windowIdPtr)
+#undef tState
+#undef tSelectedOption
+#undef tInput
+#undef tNextOption
+#undef tWindowId
+
+static void CreateMainMenu(u8 whichMenu, s16 *windowIdPtr)
{
s16 windowId;
- struct WindowTemplate winTemplate = gUnknown_085716E8;
- winTemplate.width = GetMaxWidthInMenuTable((void *)gUnknown_085716C0, ARRAY_COUNT(gUnknown_085716C0));
- windowId = AddWindow(&winTemplate);
+ struct WindowTemplate template = sWindowTemplate_MainMenu;
+ template.width = GetMaxWidthInMenuTable((void *)sMainMenuTexts, OPTIONS_COUNT);
+ windowId = AddWindow(&template);
DrawStdWindowFrame(windowId, FALSE);
- PrintMenuTable(windowId, ARRAY_COUNT(gUnknown_085716C0), (void *)gUnknown_085716C0);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, ARRAY_COUNT(gUnknown_085716C0), whichMenu);
+ PrintMenuTable(windowId, OPTIONS_COUNT, (void *)sMainMenuTexts);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, OPTIONS_COUNT, whichMenu);
*windowIdPtr = windowId;
}
-static void Cb2_ExitPSS(void)
+static void CB2_ExitPokeStorage(void)
{
sPreviousBoxOption = GetCurrentBoxOption();
- gFieldCallback = FieldCb_ReturnToPcMenu;
+ gFieldCallback = FieldTask_ReturnToPcMenu;
SetMainCallback2(CB2_ReturnToField);
}
+// Unused
static s16 StorageSystemGetNextMonIndex(struct BoxPokemon *box, s8 startIdx, u8 stopIdx, u8 mode)
{
s16 i;
@@ -1924,81 +1757,92 @@ void ResetPokemonStorageSystem(void)
u8 *dest = StringCopy(GetBoxNamePtr(boxId), gText_Box);
ConvertIntToDecimalStringN(dest, boxId + 1, STR_CONV_MODE_LEFT_ALIGN, 2);
}
+
for (boxId = 0; boxId < TOTAL_BOXES_COUNT; boxId++)
- {
- SetBoxWallpaper(boxId, boxId % 4);
- }
+ SetBoxWallpaper(boxId, boxId % (MAX_DEFAULT_WALLPAPER + 1));
+
ResetWaldaWallpaper();
}
-static void sub_80C77E8(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal)
+
+//------------------------------------------------------------------------------
+// SECTION: Choose Box menu
+//
+// The below functions handle the popup menu that allows the player to cycle
+// through the boxes and select one. Used when storing Pokémon in Deposit mode
+// and for the Jump feature.
+//------------------------------------------------------------------------------
+
+
+static void LoadChooseBoxMenuGfx(struct ChooseBoxMenu *menu, u16 tileTag, u16 palTag, u8 subpriority, bool32 loadPal)
{
struct SpritePalette palette =
{
- gBoxSelectionPopupPalette, palTag
+ sChooseBoxMenu_Pal, palTag
};
struct SpriteSheet sheets[] =
{
- {gBoxSelectionPopupCenterTiles, 0x800, tileTag},
- {gBoxSelectionPopupSidesTiles, 0x180, tileTag + 1},
+ {sChooseBoxMenuCenter_Gfx, 0x800, tileTag},
+ {sChooseBoxMenuSides_Gfx, 0x180, tileTag + 1},
{}
};
- if (loadPal)
+ if (loadPal) // Always false
LoadSpritePalette(&palette);
LoadSpriteSheets(sheets);
- gUnknown_02039D04 = a0;
- a0->unk_0240 = tileTag;
- a0->unk_0242 = palTag;
- a0->unk_0246 = a3;
- a0->unk_023c = loadPal;
+ sChooseBoxMenu = menu;
+ menu->tileTag = tileTag;
+ menu->paletteTag = palTag;
+ menu->subpriority = subpriority;
+ menu->loadedPalette = loadPal;
}
-static void sub_80C7890(void)
+static void FreeChooseBoxMenu(void)
{
- if (gUnknown_02039D04->unk_023c)
- FreeSpritePaletteByTag(gUnknown_02039D04->unk_0242);
- FreeSpriteTilesByTag(gUnknown_02039D04->unk_0240);
- FreeSpriteTilesByTag(gUnknown_02039D04->unk_0240 + 1);
+ if (sChooseBoxMenu->loadedPalette)
+ FreeSpritePaletteByTag(sChooseBoxMenu->paletteTag);
+ FreeSpriteTilesByTag(sChooseBoxMenu->tileTag);
+ FreeSpriteTilesByTag(sChooseBoxMenu->tileTag + 1);
}
-static void sub_80C78D4(u8 curBox)
+static void CreateChooseBoxMenuSprites(u8 curBox)
{
- sub_80C7958(curBox);
+ ChooseBoxMenu_CreateSprites(curBox);
}
-static void sub_80C78E4(void)
+static void DestroyChooseBoxMenuSprites(void)
{
- sub_80C7B14();
+ ChooseBoxMenu_DestroySprites();
}
-static u8 HandleBoxChooseSelectionInput(void)
+// For the popout window when choosing a box to deposit in or jump to
+static u8 HandleChooseBoxMenuInput(void)
{
if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- return 201;
+ return BOXID_CANCELED;
}
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- return gUnknown_02039D04->curBox;
+ return sChooseBoxMenu->curBox;
}
if (JOY_NEW(DPAD_LEFT))
{
PlaySE(SE_SELECT);
- sub_80C7BB4();
+ ChooseBoxMenu_MoveLeft();
}
else if (JOY_NEW(DPAD_RIGHT))
{
PlaySE(SE_SELECT);
- sub_80C7B80();
+ ChooseBoxMenu_MoveRight();
}
- return 200;
+ return BOXID_NONE_CHOSEN;
}
-static void sub_80C7958(u8 curBox)
+static void ChooseBoxMenu_CreateSprites(u8 curBox)
{
u16 i;
u8 spriteId;
@@ -2010,116 +1854,118 @@ static void sub_80C7958(u8 curBox)
0, 0, &oamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
};
- gUnknown_02039D04->curBox = curBox;
- template.tileTag = gUnknown_02039D04->unk_0240;
- template.paletteTag = gUnknown_02039D04->unk_0242;
+ sChooseBoxMenu->curBox = curBox;
+ template.tileTag = sChooseBoxMenu->tileTag;
+ template.paletteTag = sChooseBoxMenu->paletteTag;
spriteId = CreateSprite(&template, 160, 96, 0);
- gUnknown_02039D04->unk_0000 = gSprites + spriteId;
+ sChooseBoxMenu->menuSprite = &gSprites[spriteId];
oamData.shape = SPRITE_SHAPE(8x32);
oamData.size = SPRITE_SIZE(8x32);
- template.tileTag = gUnknown_02039D04->unk_0240 + 1;
- template.anims = sSpriteAnimTable_8571710;
- for (i = 0; i < 4; i++)
- {
- u16 r5;
- spriteId = CreateSprite(&template, 124, 80, gUnknown_02039D04->unk_0246);
- gUnknown_02039D04->unk_0004[i] = gSprites + spriteId;
- r5 = 0;
+ template.tileTag = sChooseBoxMenu->tileTag + 1;
+ template.anims = sAnims_ChooseBoxMenu;
+ for (i = 0; i < ARRAY_COUNT(sChooseBoxMenu->menuSideSprites); i++)
+ {
+ u16 anim;
+ spriteId = CreateSprite(&template, 124, 80, sChooseBoxMenu->subpriority);
+ sChooseBoxMenu->menuSideSprites[i] = &gSprites[spriteId];
+ anim = 0;
if (i & 2)
{
- gUnknown_02039D04->unk_0004[i]->pos1.x = 196;
- r5 = 2;
+ sChooseBoxMenu->menuSideSprites[i]->pos1.x = 196;
+ anim = 2;
}
if (i & 1)
{
- gUnknown_02039D04->unk_0004[i]->pos1.y = 112;
- gUnknown_02039D04->unk_0004[i]->oam.size = 0;
- r5++;
+ sChooseBoxMenu->menuSideSprites[i]->pos1.y = 112;
+ sChooseBoxMenu->menuSideSprites[i]->oam.size = 0;
+ anim++;
}
- StartSpriteAnim(gUnknown_02039D04->unk_0004[i], r5);
+ StartSpriteAnim(sChooseBoxMenu->menuSideSprites[i], anim);
}
- for (i = 0; i < 2; i++)
+ for (i = 0; i < ARRAY_COUNT(sChooseBoxMenu->arrowSprites); i++)
{
- gUnknown_02039D04->unk_0020[i] = sub_80CD2E8(72 * i + 0x7c, 0x58, i, 0, gUnknown_02039D04->unk_0246);
- if (gUnknown_02039D04->unk_0020[i])
+ sChooseBoxMenu->arrowSprites[i] = CreateChooseBoxArrows(72 * i + 124, 88, i, 0, sChooseBoxMenu->subpriority);
+ if (sChooseBoxMenu->arrowSprites[i])
{
- gUnknown_02039D04->unk_0020[i]->data[0] = (i == 0 ? -1 : 1);
- gUnknown_02039D04->unk_0020[i]->callback = sub_80C7CF4;
+ sChooseBoxMenu->arrowSprites[i]->data[0] = (i == 0 ? -1 : 1);
+ sChooseBoxMenu->arrowSprites[i]->callback = SpriteCB_ChooseBoxArrow;
}
}
- sub_80C7BE4();
+ ChooseBoxMenu_PrintInfo();
}
-static void sub_80C7B14(void)
+static void ChooseBoxMenu_DestroySprites(void)
{
u16 i;
- if (gUnknown_02039D04->unk_0000)
+ if (sChooseBoxMenu->menuSprite)
{
- DestroySprite(gUnknown_02039D04->unk_0000);
- gUnknown_02039D04->unk_0000 = NULL;
+ DestroySprite(sChooseBoxMenu->menuSprite);
+ sChooseBoxMenu->menuSprite = NULL;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < ARRAY_COUNT(sChooseBoxMenu->menuSideSprites); i++)
{
- if (gUnknown_02039D04->unk_0004[i])
+ if (sChooseBoxMenu->menuSideSprites[i])
{
- DestroySprite(gUnknown_02039D04->unk_0004[i]);
- gUnknown_02039D04->unk_0004[i] = NULL;
+ DestroySprite(sChooseBoxMenu->menuSideSprites[i]);
+ sChooseBoxMenu->menuSideSprites[i] = NULL;
}
}
- for (i = 0; i < 2; i++)
+ for (i = 0; i < ARRAY_COUNT(sChooseBoxMenu->arrowSprites); i++)
{
- if (gUnknown_02039D04->unk_0020[i])
- DestroySprite(gUnknown_02039D04->unk_0020[i]);
+ if (sChooseBoxMenu->arrowSprites[i])
+ DestroySprite(sChooseBoxMenu->arrowSprites[i]);
}
}
-static void sub_80C7B80(void)
+static void ChooseBoxMenu_MoveRight(void)
{
- if (++gUnknown_02039D04->curBox >= TOTAL_BOXES_COUNT)
- gUnknown_02039D04->curBox = 0;
- sub_80C7BE4();
+ if (++sChooseBoxMenu->curBox >= TOTAL_BOXES_COUNT)
+ sChooseBoxMenu->curBox = 0;
+ ChooseBoxMenu_PrintInfo();
}
-static void sub_80C7BB4(void)
+static void ChooseBoxMenu_MoveLeft(void)
{
- gUnknown_02039D04->curBox = (gUnknown_02039D04->curBox == 0 ? TOTAL_BOXES_COUNT - 1 : gUnknown_02039D04->curBox - 1);
- sub_80C7BE4();
+ sChooseBoxMenu->curBox = (sChooseBoxMenu->curBox == 0 ? TOTAL_BOXES_COUNT - 1 : sChooseBoxMenu->curBox - 1);
+ ChooseBoxMenu_PrintInfo();
}
-static void sub_80C7BE4(void)
+static void ChooseBoxMenu_PrintInfo(void)
{
u8 numBoxMonsText[16];
- struct WindowTemplate winTemplate;
+ struct WindowTemplate template;
u8 windowId;
- u8 *boxName = GetBoxNamePtr(gUnknown_02039D04->curBox);
- u8 nPokemonInBox = CountMonsInBox(gUnknown_02039D04->curBox);
+ u8 *boxName = GetBoxNamePtr(sChooseBoxMenu->curBox);
+ u8 numInBox = CountMonsInBox(sChooseBoxMenu->curBox);
u32 winTileData;
s32 center;
- memset(&winTemplate, 0, sizeof(winTemplate));
- winTemplate.width = 8;
- winTemplate.height = 4;
+ memset(&template, 0, sizeof(template));
+ template.width = 8;
+ template.height = 4;
- windowId = AddWindow(&winTemplate);
+ windowId = AddWindow(&template);
FillWindowPixelBuffer(windowId, PIXEL_FILL(4));
+ // Print box name
center = GetStringCenterAlignXOffset(1, boxName, 64);
- AddTextPrinterParameterized3(windowId, 1, center, 1, sBoxInfoTextColors, TEXT_SPEED_FF, boxName);
+ AddTextPrinterParameterized3(windowId, 1, center, 1, sChooseBoxMenu_TextColors, TEXT_SPEED_FF, boxName);
- ConvertIntToDecimalStringN(numBoxMonsText, nPokemonInBox, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ // Print #/30 for number of Pokémon in the box
+ ConvertIntToDecimalStringN(numBoxMonsText, numInBox, STR_CONV_MODE_RIGHT_ALIGN, 2);
StringAppend(numBoxMonsText, sText_OutOf30);
center = GetStringCenterAlignXOffset(1, numBoxMonsText, 64);
- AddTextPrinterParameterized3(windowId, 1, center, 17, sBoxInfoTextColors, TEXT_SPEED_FF, numBoxMonsText);
+ AddTextPrinterParameterized3(windowId, 1, center, 17, sChooseBoxMenu_TextColors, TEXT_SPEED_FF, numBoxMonsText);
winTileData = GetWindowAttribute(windowId, WINDOW_TILE_DATA);
- CpuCopy32((void *)winTileData, (void *)OBJ_VRAM0 + 0x100 + (GetSpriteTileStartByTag(gUnknown_02039D04->unk_0240) * 32), 0x400);
+ CpuCopy32((void *)winTileData, (void *)OBJ_VRAM0 + 0x100 + (GetSpriteTileStartByTag(sChooseBoxMenu->tileTag) * 32), 0x400);
RemoveWindow(windowId);
}
-static void sub_80C7CF4(struct Sprite *sprite)
+static void SpriteCB_ChooseBoxArrow(struct Sprite *sprite)
{
if (++sprite->data[1] > 3)
{
@@ -2133,61 +1979,72 @@ static void sub_80C7CF4(struct Sprite *sprite)
}
}
-static void VblankCb_PSS(void)
+
+//------------------------------------------------------------------------------
+// SECTION: Main tasks
+//
+// Below are the main task callbacks that handle the primary actions the
+// player can take in the PC. The most 'important' of these tasks is the
+// primary one, Task_PokeStorageMain. Also included are some basic
+// initialization functions.
+//------------------------------------------------------------------------------
+
+
+static void VBlankCB_PokeStorage(void)
{
LoadOam();
ProcessSpriteCopyRequests();
- sub_80D2AA4();
+ UnkUtil_Run();
TransferPlttBuffer();
- SetGpuReg(REG_OFFSET_BG2HOFS, sPSSData->bg2_X);
+ SetGpuReg(REG_OFFSET_BG2HOFS, sStorage->bg2_X);
}
-static void Cb2_PSS(void)
+static void CB2_PokeStorage(void)
{
RunTasks();
DoScheduledBgTilemapCopiesToVram();
ScrollBackground();
- sub_80CAA14();
+ UpdateCloseBoxButtonFlash();
AnimateSprites();
BuildOamBuffer();
}
-static void Cb2_EnterPSS(u8 boxOption)
+static void EnterPokeStorage(u8 boxOption)
{
ResetTasks();
sCurrentBoxOption = boxOption;
- sPSSData = Alloc(sizeof(*sPSSData));
- if (sPSSData == NULL)
+ sStorage = Alloc(sizeof(*sStorage));
+ if (sStorage == NULL)
{
- SetMainCallback2(Cb2_ExitPSS);
+ SetMainCallback2(CB2_ExitPokeStorage);
}
else
{
- sPSSData->boxOption = boxOption;
- sPSSData->isReshowingPSS = FALSE;
+ sStorage->boxOption = boxOption;
+ sStorage->isReopening = FALSE;
sMovingItemId = ITEM_NONE;
- sPSSData->state = 0;
- sPSSData->taskId = CreateTask(Cb_InitPSS, 3);
+ sStorage->state = 0;
+ sStorage->taskId = CreateTask(Task_InitPokeStorage, 3);
sLastUsedBox = StorageGetCurrentBox();
- SetMainCallback2(Cb2_PSS);
+ SetMainCallback2(CB2_PokeStorage);
}
}
-static void Cb2_ReturnToPSS(void)
+static void CB2_ReturnToPokeStorage(void)
{
ResetTasks();
- sPSSData = Alloc(sizeof(*sPSSData));
- if (sPSSData == NULL)
+ sStorage = Alloc(sizeof(*sStorage));
+ if (sStorage == NULL)
{
- SetMainCallback2(Cb2_ExitPSS);
+ SetMainCallback2(CB2_ExitPokeStorage);
}
else
{
- sPSSData->boxOption = sCurrentBoxOption;
- sPSSData->isReshowingPSS = TRUE;
- sPSSData->state = 0;
- sPSSData->taskId = CreateTask(Cb_InitPSS, 3);
- SetMainCallback2(Cb2_PSS);
+ sStorage->boxOption = sCurrentBoxOption;
+ sStorage->isReopening = TRUE;
+ sStorage->state = 0;
+ sStorage->taskId = CreateTask(Task_InitPokeStorage, 3);
+ SetMainCallback2(CB2_PokeStorage);
}
}
@@ -2203,7 +2060,7 @@ static void ResetAllBgCoords(void)
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
}
-static void sub_80C7E98(void)
+static void ResetForPokeStorage(void)
{
ResetPaletteFade();
ResetSpriteData();
@@ -2211,25 +2068,25 @@ static void sub_80C7E98(void)
FreeAllSpritePalettes();
ClearDma3Requests();
gReservedSpriteTileCount = 0x280;
- sub_80D2A90(&sPSSData->unk_0020, sPSSData->unk_0028, 8);
+ UnkUtil_Init(&sStorage->unkUtil, sStorage->unkUtilData, ARRAY_COUNT(sStorage->unkUtilData));
gKeyRepeatStartDelay = 20;
ClearScheduledBgCopiesToVram();
- sub_80D259C(3);
- sub_80D2644(0, 1, gUnknown_0857239C, 8, 4);
- sub_80D2770(0, 1, 0);
- sPSSData->unk_02C7 = 0;
+ TilemapUtil_Init(TILEMAPID_COUNT);
+ TilemapUtil_SetMap(TILEMAPID_PKMN_DATA, 1, sPkmnData_Tilemap, 8, 4);
+ TilemapUtil_SetPos(TILEMAPID_PKMN_DATA, 1, 0);
+ sStorage->closeBoxFlashing = FALSE;
}
-static void sub_80C7F1C(void)
+static void InitStartingPosData(void)
{
- sub_80CDC0C();
- sInPartyMenu = (sPSSData->boxOption == BOX_OPTION_DEPOSIT);
- gUnknown_02039D0E = 0;
+ ClearSavedCursorPos();
+ sInPartyMenu = (sStorage->boxOption == OPTION_DEPOSIT);
+ sDepositBoxId = 0;
}
static void SetMonIconTransparency(void)
{
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(7, 11));
@@ -2237,42 +2094,45 @@ static void SetMonIconTransparency(void)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP);
}
-static void SetPSSCallback(TaskFunc newFunc)
+static void SetPokeStorageTask(TaskFunc newFunc)
{
- gTasks[sPSSData->taskId].func = newFunc;
- sPSSData->state = 0;
+ gTasks[sStorage->taskId].func = newFunc;
+ sStorage->state = 0;
}
-static void Cb_InitPSS(u8 taskId)
+static void Task_InitPokeStorage(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
SetVBlankCallback(NULL);
SetGpuReg(REG_OFFSET_DISPCNT, 0);
- sub_80C7E98();
- if (sPSSData->isReshowingPSS)
+ ResetForPokeStorage();
+ if (sStorage->isReopening)
{
switch (sWhichToReshow)
{
- case 1:
- sub_80CE790();
+ case SCREEN_CHANGE_NAME_BOX - 1:
+ // Return from naming box
+ LoadSavedMovingMon();
break;
- case 0:
- sub_80CE8E4();
+ case SCREEN_CHANGE_SUMMARY_SCREEN - 1:
+ // Return from summary screen
+ SetSelectionAfterSummaryScreen();
break;
- case 2:
+ case SCREEN_CHANGE_ITEM_FROM_BAG - 1:
+ // Return from bag menu
GiveChosenBagItem();
break;
}
}
- LoadPSSMenuGfx();
+ LoadPokeStorageMenuGfx();
LoadWaveformSpritePalette();
break;
case 1:
- if (!InitPSSWindows())
+ if (!InitPokeStorageWindows())
{
- SetPSSCallback(Cb_ChangeScreen);
+ SetPokeStorageTask(Task_ChangeScreen);
return;
}
break;
@@ -2284,110 +2144,110 @@ static void Cb_InitPSS(u8 taskId)
break;
case 3:
ResetAllBgCoords();
- if (!sPSSData->isReshowingPSS)
- sub_80C7F1C();
+ if (!sStorage->isReopening)
+ InitStartingPosData();
break;
case 4:
- sub_80CAF04();
- if (!sPSSData->isReshowingPSS)
- sub_80CD36C();
+ InitMonIconFields();
+ if (!sStorage->isReopening)
+ InitCursor();
else
- sub_80CD3EC();
+ InitCursorOnReopen();
break;
case 5:
- if (!sub_80D0164())
+ if (!MultiMove_Init())
{
- SetPSSCallback(Cb_ChangeScreen);
+ SetPokeStorageTask(Task_ChangeScreen);
return;
}
else
{
SetScrollingBackground();
- sub_80CAC1C();
+ InitPokeStorageBg0();
}
break;
case 6:
- sub_80CA0D8();
+ InitPalettesAndSprites();
break;
case 7:
- sub_80CA704();
+ InitSupplementalTilemaps();
break;
case 8:
- sub_80CC32C(StorageGetCurrentBox());
+ CreateInitBoxTask(StorageGetCurrentBox());
break;
case 9:
- if (sub_80CC35C())
+ if (IsInitBoxActive())
return;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
{
- sPSSData->markMenu.baseTileTag = TAG_TILE_D;
- sPSSData->markMenu.basePaletteTag = TAG_PAL_DACE;
- InitMonMarkingsMenu(&sPSSData->markMenu);
+ sStorage->markMenu.baseTileTag = GFXTAG_MARKING_MENU;
+ sStorage->markMenu.basePaletteTag = PALTAG_MARKING_MENU;
+ InitMonMarkingsMenu(&sStorage->markMenu);
BufferMonMarkingsMenuTiles();
}
else
{
- sub_80D0C60();
- sub_80CAEAC();
+ CreateItemIconSprites();
+ InitCursorItemIcon();
}
break;
case 10:
SetMonIconTransparency();
- if (!sPSSData->isReshowingPSS)
+ if (!sStorage->isReopening)
{
- BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK);
- SetPSSCallback(Cb_ShowPSS);
+ BlendPalettes(PALETTES_ALL, 16, RGB_BLACK);
+ SetPokeStorageTask(Task_ShowPokeStorage);
}
else
{
- BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK);
- SetPSSCallback(Cb_ReshowPSS);
+ BlendPalettes(PALETTES_ALL, 16, RGB_BLACK);
+ SetPokeStorageTask(Task_ReshowPokeStorage);
}
- SetVBlankCallback(VblankCb_PSS);
+ SetVBlankCallback(VBlankCB_PokeStorage);
return;
default:
return;
}
- sPSSData->state++;
+ sStorage->state++;
}
-static void Cb_ShowPSS(u8 taskId)
+static void Task_ShowPokeStorage(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
PlaySE(SE_PC_LOGIN);
ComputerScreenOpenEffect(20, 0, 1);
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
if (!IsComputerScreenOpenEffectActive())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
}
}
-static void Cb_ReshowPSS(u8 taskId)
+static void Task_ReshowPokeStorage(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
BeginNormalPaletteFade(PALETTES_ALL, -1, 0x10, 0, RGB_BLACK);
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
if (!UpdatePaletteFade())
{
- if (sWhichToReshow == 2 && gSpecialVar_ItemId != 0)
+ if (sWhichToReshow == SCREEN_CHANGE_ITEM_FROM_BAG - 1 && gSpecialVar_ItemId != ITEM_NONE)
{
- PrintStorageActionText(PC_TEXT_ITEM_IS_HELD);
- sPSSData->state++;
+ PrintMessage(MSG_ITEM_IS_HELD);
+ sStorage->state++;
}
else
{
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
}
break;
@@ -2395,557 +2255,579 @@ static void Cb_ReshowPSS(u8 taskId)
if (!IsDma3ManagerBusyWithBgCopy() && JOY_NEW(A_BUTTON | B_BUTTON))
{
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
}
}
-static void Cb_MainPSS(u8 taskId)
+// States for the outer switch in Task_PokeStorageMain
+enum {
+ MSTATE_HANDLE_INPUT,
+ MSTATE_MOVE_CURSOR,
+ MSTATE_SCROLL_BOX,
+ MSTATE_WAIT_MSG,
+ MSTATE_ERROR_LAST_PARTY_MON,
+ MSTATE_ERROR_HAS_MAIL,
+ MSTATE_WAIT_ERROR_MSG,
+ MSTATE_MULTIMOVE_RUN,
+ MSTATE_MULTIMOVE_RUN_CANCEL,
+ MSTATE_MULTIMOVE_RUN_MOVED,
+ MSTATE_SCROLL_BOX_ITEM,
+ MSTATE_WAIT_ITEM_ANIM,
+};
+
+static void Task_PokeStorageMain(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
- case 0:
+ case MSTATE_HANDLE_INPUT:
switch (HandleInput())
{
- case 1:
+ case INPUT_MOVE_CURSOR:
PlaySE(SE_SELECT);
- sPSSData->state = 1;
+ sStorage->state = MSTATE_MOVE_CURSOR;
break;
- case 5:
- if (sPSSData->boxOption != BOX_OPTION_MOVE_MONS && sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ case INPUT_SHOW_PARTY:
+ if (sStorage->boxOption != OPTION_MOVE_MONS && sStorage->boxOption != OPTION_MOVE_ITEMS)
{
- PrintStorageActionText(PC_TEXT_WHICH_ONE_WILL_TAKE);
- sPSSData->state = 3;
+ PrintMessage(MSG_WHICH_ONE_WILL_TAKE);
+ sStorage->state = MSTATE_WAIT_MSG;
}
else
{
- sub_80CDC0C();
- SetPSSCallback(Cb_ShowPartyPokemon);
+ ClearSavedCursorPos();
+ SetPokeStorageTask(Task_ShowPartyPokemon);
}
break;
- case 6:
- if (sPSSData->boxOption == BOX_OPTION_MOVE_MONS)
+ case INPUT_HIDE_PARTY:
+ if (sStorage->boxOption == OPTION_MOVE_MONS)
{
- if (IsMonBeingMoved() && ItemIsMail(sPSSData->cursorMonItem))
- sPSSData->state = 5;
+ if (IsMonBeingMoved() && ItemIsMail(sStorage->displayMonItemId))
+ sStorage->state = MSTATE_ERROR_HAS_MAIL;
else
- SetPSSCallback(Cb_HidePartyPokemon);
+ SetPokeStorageTask(Task_HidePartyPokemon);
}
- else if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ else if (sStorage->boxOption == OPTION_MOVE_ITEMS)
{
- SetPSSCallback(Cb_HidePartyPokemon);
+ SetPokeStorageTask(Task_HidePartyPokemon);
}
break;
- case 4:
- SetPSSCallback(Cb_OnCloseBoxPressed);
+ case INPUT_CLOSE_BOX:
+ SetPokeStorageTask(Task_OnCloseBoxPressed);
break;
- case 19:
- SetPSSCallback(Cb_OnBPressed);
+ case INPUT_PRESSED_B:
+ SetPokeStorageTask(Task_OnBPressed);
break;
- case 7:
+ case INPUT_BOX_OPTIONS:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_HandleBoxOptions);
+ SetPokeStorageTask(Task_HandleBoxOptions);
break;
- case 8:
- SetPSSCallback(Cb_OnSelectedMon);
+ case INPUT_IN_MENU:
+ SetPokeStorageTask(Task_OnSelectedMon);
break;
- case 9:
+ case INPUT_SCROLL_RIGHT:
PlaySE(SE_SELECT);
- sPSSData->newCurrBoxId = StorageGetCurrentBox() + 1;
- if (sPSSData->newCurrBoxId >= TOTAL_BOXES_COUNT)
- sPSSData->newCurrBoxId = 0;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ sStorage->newCurrBoxId = StorageGetCurrentBox() + 1;
+ if (sStorage->newCurrBoxId >= TOTAL_BOXES_COUNT)
+ sStorage->newCurrBoxId = 0;
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
{
- SetUpScrollToBox(sPSSData->newCurrBoxId);
- sPSSData->state = 2;
+ SetUpScrollToBox(sStorage->newCurrBoxId);
+ sStorage->state = MSTATE_SCROLL_BOX;
}
else
{
- sub_80CFEA8();
- sPSSData->state = 10;
+ TryHideItemAtCursor();
+ sStorage->state = MSTATE_SCROLL_BOX_ITEM;
}
break;
- case 10:
+ case INPUT_SCROLL_LEFT:
PlaySE(SE_SELECT);
- sPSSData->newCurrBoxId = StorageGetCurrentBox() - 1;
- if (sPSSData->newCurrBoxId < 0)
- sPSSData->newCurrBoxId = TOTAL_BOXES_COUNT - 1;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ sStorage->newCurrBoxId = StorageGetCurrentBox() - 1;
+ if (sStorage->newCurrBoxId < 0)
+ sStorage->newCurrBoxId = TOTAL_BOXES_COUNT - 1;
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
{
- SetUpScrollToBox(sPSSData->newCurrBoxId);
- sPSSData->state = 2;
+ SetUpScrollToBox(sStorage->newCurrBoxId);
+ sStorage->state = MSTATE_SCROLL_BOX;
}
else
{
- sub_80CFEA8();
- sPSSData->state = 10;
+ TryHideItemAtCursor();
+ sStorage->state = MSTATE_SCROLL_BOX_ITEM;
}
break;
- case 11:
- if (!CanMovePartyMon())
+ case INPUT_DEPOSIT:
+ if (!IsRemovingLastPartyMon())
{
- if (ItemIsMail(sPSSData->cursorMonItem))
+ if (ItemIsMail(sStorage->displayMonItemId))
{
- sPSSData->state = 5;
+ sStorage->state = MSTATE_ERROR_HAS_MAIL;
}
else
{
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_DepositMenu);
+ SetPokeStorageTask(Task_DepositMenu);
}
}
else
{
- sPSSData->state = 4;
+ sStorage->state = MSTATE_ERROR_LAST_PARTY_MON;
}
break;
- case 13:
- if (CanMovePartyMon())
+ case INPUT_MOVE_MON:
+ if (IsRemovingLastPartyMon())
{
- sPSSData->state = 4;
+ sStorage->state = MSTATE_ERROR_LAST_PARTY_MON;
}
else
{
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_MoveMon);
+ SetPokeStorageTask(Task_MoveMon);
}
break;
- case 14:
+ case INPUT_SHIFT_MON:
if (!CanShiftMon())
{
- sPSSData->state = 4;
+ sStorage->state = MSTATE_ERROR_LAST_PARTY_MON;
}
else
{
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_ShiftMon);
+ SetPokeStorageTask(Task_ShiftMon);
}
break;
- case 12:
+ case INPUT_WITHDRAW:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_WithdrawMon);
+ SetPokeStorageTask(Task_WithdrawMon);
break;
- case 15:
+ case INPUT_PLACE_MON:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_PlaceMon);
+ SetPokeStorageTask(Task_PlaceMon);
break;
- case 16:
+ case INPUT_TAKE_ITEM:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_TakeItemForMoving);
+ SetPokeStorageTask(Task_TakeItemForMoving);
break;
- case 17:
+ case INPUT_GIVE_ITEM:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_GiveMovingItemToMon);
+ SetPokeStorageTask(Task_GiveMovingItemToMon);
break;
- case 18:
+ case INPUT_SWITCH_ITEMS:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_SwitchSelectedItem);
+ SetPokeStorageTask(Task_SwitchSelectedItem);
break;
- case 20:
+ case INPUT_MULTIMOVE_START:
PlaySE(SE_SELECT);
- sub_80D01D0(0);
- sPSSData->state = 7;
+ MultiMove_SetFunction(MULTIMOVE_START);
+ sStorage->state = MSTATE_MULTIMOVE_RUN;
break;
- case 22:
- sub_80D01D0(1);
- sPSSData->state = 8;
+ case INPUT_MULTIMOVE_SINGLE:
+ MultiMove_SetFunction(MULTIMOVE_CANCEL);
+ sStorage->state = MSTATE_MULTIMOVE_RUN_CANCEL;
break;
- case 21:
+ case INPUT_MULTIMOVE_CHANGE_SELECTION:
PlaySE(SE_SELECT);
- sub_80D01D0(2);
- sPSSData->state = 9;
+ MultiMove_SetFunction(MULTIMOVE_CHANGE_SELECTION);
+ sStorage->state = MSTATE_MULTIMOVE_RUN_MOVED;
break;
- case 23:
- sub_80D01D0(3);
- sPSSData->state = 7;
+ case INPUT_MULTIMOVE_GRAB_SELECTION:
+ MultiMove_SetFunction(MULTIMOVE_GRAB_SELECTION);
+ sStorage->state = MSTATE_MULTIMOVE_RUN;
break;
- case 25:
+ case INPUT_MULTIMOVE_MOVE_MONS:
PlaySE(SE_SELECT);
- sub_80D01D0(4);
- sPSSData->state = 9;
+ MultiMove_SetFunction(MULTIMOVE_MOVE_MONS);
+ sStorage->state = MSTATE_MULTIMOVE_RUN_MOVED;
break;
- case 26:
+ case INPUT_MULTIMOVE_PLACE_MONS:
PlaySE(SE_SELECT);
- sub_80D01D0(5);
- sPSSData->state = 7;
+ MultiMove_SetFunction(MULTIMOVE_PLACE_MONS);
+ sStorage->state = MSTATE_MULTIMOVE_RUN;
break;
- case 24:
+ case INPUT_MULTIMOVE_UNABLE:
+ // When selecting/moving multiple Pokémon the
+ // cursor may not wrap around the edges.
PlaySE(SE_FAILURE);
break;
}
break;
- case 1:
- if (!sub_80CD554())
+ case MSTATE_MOVE_CURSOR:
+ if (!UpdateCursorPos())
{
if (IsCursorOnCloseBox())
- sub_80CA9C0();
+ StartFlashingCloseBoxButton();
else
- sub_80CA9EC();
+ StopFlashingCloseBoxButton();
- if (sPSSData->setMosaic)
- BoxSetMosaic();
- sPSSData->state = 0;
+ if (sStorage->setMosaic)
+ StartDisplayMonMosaicEffect();
+ sStorage->state = MSTATE_HANDLE_INPUT;
}
break;
- case 2:
+ case MSTATE_SCROLL_BOX:
if (!ScrollToBox())
{
- SetCurrentBox(sPSSData->newCurrBoxId);
+ SetCurrentBox(sStorage->newCurrBoxId);
if (!sInPartyMenu && !IsMonBeingMoved())
{
- sub_80CE00C();
- BoxSetMosaic();
+ RefreshDisplayMon();
+ StartDisplayMonMosaicEffect();
}
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
{
- sub_80CFECC();
- sPSSData->state = 11;
+ TryShowItemAtCursor();
+ sStorage->state = MSTATE_WAIT_ITEM_ANIM;
}
else
{
- sPSSData->state = 0;
+ sStorage->state = MSTATE_HANDLE_INPUT;
}
}
break;
- case 3:
+ case MSTATE_WAIT_MSG:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- sPSSData->state = 0;
+ sStorage->state = MSTATE_HANDLE_INPUT;
}
break;
- case 4:
+ case MSTATE_ERROR_LAST_PARTY_MON:
PlaySE(SE_FAILURE);
- PrintStorageActionText(PC_TEXT_LAST_POKE);
- sPSSData->state = 6;
+ PrintMessage(MSG_LAST_POKE);
+ sStorage->state = MSTATE_WAIT_ERROR_MSG;
break;
- case 5:
+ case MSTATE_ERROR_HAS_MAIL:
PlaySE(SE_FAILURE);
- PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL);
- sPSSData->state = 6;
+ PrintMessage(MSG_PLEASE_REMOVE_MAIL);
+ sStorage->state = MSTATE_WAIT_ERROR_MSG;
break;
- case 6:
+ case MSTATE_WAIT_ERROR_MSG:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
- case 7:
- if (!sub_80D01E4())
- sPSSData->state = 0;
+ case MSTATE_MULTIMOVE_RUN:
+ if (!MultiMove_RunFunction())
+ sStorage->state = MSTATE_HANDLE_INPUT;
break;
- case 8:
- if (!sub_80D01E4())
- SetPSSCallback(Cb_MoveMon);
+ case MSTATE_MULTIMOVE_RUN_CANCEL:
+ // Began a multiple Pokémon selection but
+ // ended up selecting a single Pokémon.
+ // Wait for multi move to cancel, then
+ // do a normal move.
+ if (!MultiMove_RunFunction())
+ SetPokeStorageTask(Task_MoveMon);
break;
- case 9:
- if (!sub_80D01E4())
+ case MSTATE_MULTIMOVE_RUN_MOVED:
+ if (!MultiMove_RunFunction())
{
- if (sPSSData->setMosaic)
- BoxSetMosaic();
- sPSSData->state = 0;
+ if (sStorage->setMosaic)
+ StartDisplayMonMosaicEffect();
+ sStorage->state = MSTATE_HANDLE_INPUT;
}
break;
- case 10:
- if (!sub_80D1218())
+ case MSTATE_SCROLL_BOX_ITEM:
+ if (!IsItemIconAnimActive())
{
- SetUpScrollToBox(sPSSData->newCurrBoxId);
- sPSSData->state = 2;
+ SetUpScrollToBox(sStorage->newCurrBoxId);
+ sStorage->state = MSTATE_SCROLL_BOX;
}
break;
- case 11:
- if (!sub_80D1218())
- sPSSData->state = 0;
+ case MSTATE_WAIT_ITEM_ANIM:
+ if (!IsItemIconAnimActive())
+ sStorage->state = MSTATE_HANDLE_INPUT;
break;
}
}
-static void Cb_ShowPartyPokemon(u8 taskId)
+static void Task_ShowPartyPokemon(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
SetUpDoShowPartyMenu();
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
if (!DoShowPartyMenu())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
}
}
-static void Cb_HidePartyPokemon(u8 taskId)
+static void Task_HidePartyPokemon(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
PlaySE(SE_SELECT);
SetUpHidePartyMenu();
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
if (!HidePartyMenu())
{
- sub_80CDBF8(sub_80CDC2C());
- sPSSData->state++;
+ SetCursorBoxPosition(GetSavedCursorPos());
+ sStorage->state++;
}
break;
case 2:
- if (!sub_80CD554())
+ if (!UpdateCursorPos())
{
- if (sPSSData->setMosaic)
- BoxSetMosaic();
- SetPSSCallback(Cb_MainPSS);
+ if (sStorage->setMosaic)
+ StartDisplayMonMosaicEffect();
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_OnSelectedMon(u8 taskId)
+static void Task_OnSelectedMon(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- if (!sub_80CA2B8())
+ if (!IsDisplayMosaicActive())
{
PlaySE(SE_SELECT);
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
- PrintStorageActionText(PC_TEXT_IS_SELECTED);
- else if (IsActiveItemMoving() || sPSSData->cursorMonItem != 0)
- PrintStorageActionText(PC_TEXT_IS_SELECTED2);
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
+ PrintMessage(MSG_IS_SELECTED);
+ else if (IsMovingItem() || sStorage->displayMonItemId != ITEM_NONE)
+ PrintMessage(MSG_IS_SELECTED2);
else
- PrintStorageActionText(PC_TEXT_GIVE_TO_MON);
+ PrintMessage(MSG_GIVE_TO_MON);
AddMenu();
- sPSSData->state = 1;
+ sStorage->state = 1;
}
break;
- case 1: // debug?
- if (!sub_80D00A8())
- sPSSData->state = 2;
+ case 1:
+ if (!IsMenuLoading())
+ sStorage->state = 2;
break;
case 2:
- switch (sub_80D00AC())
+ switch (HandleMenuInput())
{
- case -1:
- case 0:
+ case MENU_B_PRESSED:
+ case MENU_CANCEL:
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
- case 3:
- if (CanMovePartyMon())
+ case MENU_MOVE:
+ if (IsRemovingLastPartyMon())
{
- sPSSData->state = 3;
+ sStorage->state = 3;
}
else
{
PlaySE(SE_SELECT);
ClearBottomWindow();
- SetPSSCallback(Cb_MoveMon);
+ SetPokeStorageTask(Task_MoveMon);
}
break;
- case 5:
+ case MENU_PLACE:
PlaySE(SE_SELECT);
ClearBottomWindow();
- SetPSSCallback(Cb_PlaceMon);
+ SetPokeStorageTask(Task_PlaceMon);
break;
- case 4:
+ case MENU_SHIFT:
if (!CanShiftMon())
{
- sPSSData->state = 3;
+ sStorage->state = 3;
}
else
{
PlaySE(SE_SELECT);
ClearBottomWindow();
- SetPSSCallback(Cb_ShiftMon);
+ SetPokeStorageTask(Task_ShiftMon);
}
break;
- case 2:
+ case MENU_WITHDRAW:
PlaySE(SE_SELECT);
ClearBottomWindow();
- SetPSSCallback(Cb_WithdrawMon);
+ SetPokeStorageTask(Task_WithdrawMon);
break;
- case 1:
- if (CanMovePartyMon())
+ case MENU_STORE:
+ if (IsRemovingLastPartyMon())
{
- sPSSData->state = 3;
+ sStorage->state = 3;
}
- else if (ItemIsMail(sPSSData->cursorMonItem))
+ else if (ItemIsMail(sStorage->displayMonItemId))
{
- sPSSData->state = 4;
+ sStorage->state = 4;
}
else
{
PlaySE(SE_SELECT);
ClearBottomWindow();
- SetPSSCallback(Cb_DepositMenu);
+ SetPokeStorageTask(Task_DepositMenu);
}
break;
- case 7:
- if (CanMovePartyMon())
+ case MENU_RELEASE:
+ if (IsRemovingLastPartyMon())
{
- sPSSData->state = 3;
+ sStorage->state = 3;
}
- else if (sPSSData->cursorMonIsEgg)
+ else if (sStorage->displayMonIsEgg)
{
- sPSSData->state = 5; // Cannot release an Egg.
+ sStorage->state = 5; // Cannot release an Egg.
}
- else if (ItemIsMail(sPSSData->cursorMonItem))
+ else if (ItemIsMail(sStorage->displayMonItemId))
{
- sPSSData->state = 4;
+ sStorage->state = 4;
}
else
{
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_ReleaseMon);
+ SetPokeStorageTask(Task_ReleaseMon);
}
break;
- case 6:
+ case MENU_SUMMARY:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_ShowMonSummary);
+ SetPokeStorageTask(Task_ShowMonSummary);
break;
- case 8:
+ case MENU_MARK:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_ShowMarkMenu);
+ SetPokeStorageTask(Task_ShowMarkMenu);
break;
- case 12:
+ case MENU_TAKE:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_TakeItemForMoving);
+ SetPokeStorageTask(Task_TakeItemForMoving);
break;
- case 13:
+ case MENU_GIVE:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_GiveMovingItemToMon);
+ SetPokeStorageTask(Task_GiveMovingItemToMon);
break;
- case 16:
- SetPSSCallback(Cb_ItemToBag);
+ case MENU_BAG:
+ SetPokeStorageTask(Task_ItemToBag);
break;
- case 15:
+ case MENU_SWITCH:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_SwitchSelectedItem);
+ SetPokeStorageTask(Task_SwitchSelectedItem);
break;
- case 14:
+ case MENU_GIVE_2:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_GiveItemFromBag);
+ SetPokeStorageTask(Task_GiveItemFromBag);
break;
- case 17:
- SetPSSCallback(Cb_ShowItemInfo);
+ case MENU_INFO:
+ SetPokeStorageTask(Task_ShowItemInfo);
break;
}
break;
case 3:
PlaySE(SE_FAILURE);
- PrintStorageActionText(PC_TEXT_LAST_POKE);
- sPSSData->state = 6;
+ PrintMessage(MSG_LAST_POKE);
+ sStorage->state = 6;
break;
case 5:
PlaySE(SE_FAILURE);
- PrintStorageActionText(PC_TEXT_CANT_RELEASE_EGG);
- sPSSData->state = 6;
+ PrintMessage(MSG_CANT_RELEASE_EGG);
+ sStorage->state = 6;
break;
case 4:
PlaySE(SE_FAILURE);
- PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL);
- sPSSData->state = 6;
+ PrintMessage(MSG_PLEASE_REMOVE_MAIL);
+ sStorage->state = 6;
break;
case 6:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_MoveMon(u8 taskId)
+static void Task_MoveMon(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- InitMonPlaceChange(0);
- sPSSData->state++;
+ InitMonPlaceChange(CHANGE_GRAB);
+ sStorage->state++;
break;
case 1:
if (!DoMonPlaceChange())
{
if (sInPartyMenu)
- SetPSSCallback(Cb_HandleMovingMonFromParty);
+ SetPokeStorageTask(Task_HandleMovingMonFromParty);
else
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_PlaceMon(u8 taskId)
+static void Task_PlaceMon(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- InitMonPlaceChange(1);
- sPSSData->state++;
+ InitMonPlaceChange(CHANGE_PLACE);
+ sStorage->state++;
break;
case 1:
if (!DoMonPlaceChange())
{
if (sInPartyMenu)
- SetPSSCallback(Cb_HandleMovingMonFromParty);
+ SetPokeStorageTask(Task_HandleMovingMonFromParty);
else
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_ShiftMon(u8 taskId)
+static void Task_ShiftMon(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- InitMonPlaceChange(2);
- sPSSData->state++;
+ InitMonPlaceChange(CHANGE_SHIFT);
+ sStorage->state++;
break;
case 1:
if (!DoMonPlaceChange())
{
- BoxSetMosaic();
- SetPSSCallback(Cb_MainPSS);
+ StartDisplayMonMosaicEffect();
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_WithdrawMon(u8 taskId)
+static void Task_WithdrawMon(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
if (CalculatePlayerPartyCount() == PARTY_SIZE)
{
- PrintStorageActionText(PC_TEXT_PARTY_FULL);
- sPSSData->state = 1;
+ PrintMessage(MSG_PARTY_FULL);
+ sStorage->state = 1;
}
else
{
- sub_80CDC18();
- InitMonPlaceChange(0);
- sPSSData->state = 2;
+ SaveCursorPos();
+ InitMonPlaceChange(CHANGE_GRAB);
+ sStorage->state = 2;
}
break;
case 1:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
case 2:
@@ -2953,135 +2835,134 @@ static void Cb_WithdrawMon(u8 taskId)
{
SetMovingMonPriority(1);
SetUpDoShowPartyMenu();
- sPSSData->state++;
+ sStorage->state++;
}
break;
case 3:
if (!DoShowPartyMenu())
{
- InitMonPlaceChange(1);
- sPSSData->state++;
+ InitMonPlaceChange(CHANGE_PLACE);
+ sStorage->state++;
}
break;
case 4:
if (!DoMonPlaceChange())
{
- sub_80CAB20();
- sPSSData->state++;
+ UpdatePartySlotColors();
+ sStorage->state++;
}
break;
case 5:
- SetPSSCallback(Cb_HidePartyPokemon);
+ SetPokeStorageTask(Task_HidePartyPokemon);
break;
}
}
-static void Cb_DepositMenu(u8 taskId)
+static void Task_DepositMenu(u8 taskId)
{
u8 boxId;
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX);
- sub_80C77E8(&sPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE);
- sub_80C78D4(gUnknown_02039D0E);
- sPSSData->state++;
+ PrintMessage(MSG_DEPOSIT_IN_WHICH_BOX);
+ LoadChooseBoxMenuGfx(&sStorage->chooseBoxMenu, GFXTAG_CHOOSE_BOX_MENU, PALTAG_MISC_1, 3, FALSE);
+ CreateChooseBoxMenuSprites(sDepositBoxId);
+ sStorage->state++;
break;
case 1:
- boxId = HandleBoxChooseSelectionInput();
- if (boxId == 200)
- {
- // no box chosen yet
- }
- else if (boxId == 201)
+ boxId = HandleChooseBoxMenuInput();
+ switch (boxId)
{
+ case BOXID_NONE_CHOSEN:
+ break;
+ case BOXID_CANCELED:
ClearBottomWindow();
- sub_80C78E4();
- sub_80C7890();
- SetPSSCallback(Cb_MainPSS);
- }
- else
- {
+ DestroyChooseBoxMenuSprites();
+ FreeChooseBoxMenu();
+ SetPokeStorageTask(Task_PokeStorageMain);
+ break;
+ default:
if (TryStorePartyMonInBox(boxId))
{
- gUnknown_02039D0E = boxId;
+ sDepositBoxId = boxId;
ClearBottomWindow();
- sub_80C78E4();
- sub_80C7890();
- sPSSData->state = 2;
+ DestroyChooseBoxMenuSprites();
+ FreeChooseBoxMenu();
+ sStorage->state = 2;
}
else
{
- PrintStorageActionText(PC_TEXT_BOX_IS_FULL);
- sPSSData->state = 4;
+ PrintMessage(MSG_BOX_IS_FULL);
+ sStorage->state = 4;
}
+ break;
}
break;
case 2:
CompactPartySlots();
- sub_80CB950();
- sPSSData->state++;
+ CompactPartySprites();
+ sStorage->state++;
break;
case 3:
- if (!sub_80CB9BC())
+ if (GetNumPartySpritesCompacting() == 0)
{
- sub_80CE22C();
- BoxSetMosaic();
- sub_80CAB20();
- SetPSSCallback(Cb_MainPSS);
+ ResetSelectionAfterDeposit();
+ StartDisplayMonMosaicEffect();
+ UpdatePartySlotColors();
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
case 4:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
- PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX);
- sPSSData->state = 1;
+ PrintMessage(MSG_DEPOSIT_IN_WHICH_BOX);
+ sStorage->state = 1;
}
break;
}
}
-static void Cb_ReleaseMon(u8 taskId)
+static void Task_ReleaseMon(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- PrintStorageActionText(PC_TEXT_RELEASE_POKE);
+ PrintMessage(MSG_RELEASE_POKE);
ShowYesNoWindow(1);
- sPSSData->state++;
+ sStorage->state++;
// fallthrough
case 1:
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case MENU_B_PRESSED:
- case 1:
+ case 1: // No
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
- case 0:
+ case 0: // Yes
ClearBottomWindow();
- InitCanRelaseMonVars();
- sub_80CE250();
- sPSSData->state++;
+ InitCanReleaseMonVars();
+ InitReleaseMon();
+ sStorage->state++;
break;
}
break;
case 2:
RunCanReleaseMon();
- if (!sub_80CE2A8())
+ if (!TryHideReleaseMon())
{
while (1)
{
- s8 r0 = RunCanReleaseMon();
- if (r0 == 1)
+ s8 canRelease = RunCanReleaseMon();
+ if (canRelease == TRUE)
{
- sPSSData->state++;
+ sStorage->state++;
break;
}
- else if (r0 == 0)
+ else if (!canRelease)
{
- sPSSData->state = 8; // Can't release the mon.
+ sStorage->state = 8;
break;
}
}
@@ -3089,15 +2970,15 @@ static void Cb_ReleaseMon(u8 taskId)
break;
case 3:
ReleaseMon();
- RefreshCursorMonData();
- PrintStorageActionText(PC_TEXT_WAS_RELEASED);
- sPSSData->state++;
+ RefreshDisplayMonData();
+ PrintMessage(MSG_WAS_RELEASED);
+ sStorage->state++;
break;
case 4:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
- PrintStorageActionText(PC_TEXT_BYE_BYE);
- sPSSData->state++;
+ PrintMessage(MSG_BYE_BYE);
+ sStorage->state++;
}
break;
case 5:
@@ -3107,331 +2988,332 @@ static void Cb_ReleaseMon(u8 taskId)
if (sInPartyMenu)
{
CompactPartySlots();
- sub_80CB950();
- sPSSData->state++;
+ CompactPartySprites();
+ sStorage->state++;
}
else
{
- sPSSData->state = 7;
+ sStorage->state = 7;
}
}
break;
case 6:
- if (!sub_80CB9BC())
+ if (GetNumPartySpritesCompacting() == 0)
{
- sub_80CE00C();
- BoxSetMosaic();
- sub_80CAB20();
- sPSSData->state++;
+ RefreshDisplayMon();
+ StartDisplayMonMosaicEffect();
+ UpdatePartySlotColors();
+ sStorage->state++;
}
break;
case 7:
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
case 8:
- PrintStorageActionText(PC_TEXT_WAS_RELEASED);
- sPSSData->state++;
+ // Start "can't release" sequence
+ PrintMessage(MSG_WAS_RELEASED);
+ sStorage->state++;
break;
case 9:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
- PrintStorageActionText(PC_TEXT_SURPRISE);
- sPSSData->state++;
+ PrintMessage(MSG_SURPRISE);
+ sStorage->state++;
}
break;
case 10:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- sub_80CC064();
- sPSSData->state++;
+ ReshowReleaseMon();
+ sStorage->state++;
}
break;
case 11:
- if (!sub_80CC0A0())
+ if (!ResetReleaseMonSpritePtr())
{
- sub_80CE324();
- PrintStorageActionText(PC_TEXT_CAME_BACK);
- sPSSData->state++;
+ TrySetCursorFistAnim();
+ PrintMessage(MSG_CAME_BACK);
+ sStorage->state++;
}
break;
case 12:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
- PrintStorageActionText(PC_TEXT_WORRIED);
- sPSSData->state++;
+ PrintMessage(MSG_WORRIED);
+ sStorage->state++;
}
break;
case 13:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_ShowMarkMenu(u8 taskId)
+static void Task_ShowMarkMenu(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- PrintStorageActionText(PC_TEXT_MARK_POKE);
- sPSSData->markMenu.markings = sPSSData->cursorMonMarkings;
- OpenMonMarkingsMenu(sPSSData->cursorMonMarkings, 0xb0, 0x10);
- sPSSData->state++;
+ PrintMessage(MSG_MARK_POKE);
+ sStorage->markMenu.markings = sStorage->displayMonMarkings;
+ OpenMonMarkingsMenu(sStorage->displayMonMarkings, 0xb0, 0x10);
+ sStorage->state++;
break;
case 1:
if (!HandleMonMarkingsMenuInput())
{
FreeMonMarkingsMenu();
ClearBottomWindow();
- SetMonMarkings(sPSSData->markMenu.markings);
- RefreshCursorMonData();
- SetPSSCallback(Cb_MainPSS);
+ SetMonMarkings(sStorage->markMenu.markings);
+ RefreshDisplayMonData();
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_TakeItemForMoving(u8 taskId)
+static void Task_TakeItemForMoving(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- if (!ItemIsMail(sPSSData->cursorMonItem))
+ if (!ItemIsMail(sStorage->displayMonItemId))
{
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
}
else
{
- SetPSSCallback(Cb_PrintCantStoreMail);
+ SetPokeStorageTask(Task_PrintCantStoreMail);
}
break;
case 1:
- sub_80CFE54(2);
- Item_FromMonToMoving((sInPartyMenu != FALSE) ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
- sPSSData->state++;
+ StartCursorAnim(CURSOR_ANIM_OPEN);
+ TakeItemFromMon(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetCursorPosition());
+ sStorage->state++;
break;
case 2:
- if (!sub_80D1218())
+ if (!IsItemIconAnimActive())
{
- sub_80CFE54(3);
+ StartCursorAnim(CURSOR_ANIM_FIST);
ClearBottomWindow();
- sub_80CE00C();
- PrintCursorMonInfo();
- sPSSData->state++;
+ RefreshDisplayMon();
+ PrintDisplayMonInfo();
+ sStorage->state++;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
}
}
-static void Cb_GiveMovingItemToMon(u8 taskId)
+static void Task_GiveMovingItemToMon(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
- sub_80CFE54(2);
- Item_GiveMovingToMon((sInPartyMenu != FALSE) ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
- sPSSData->state++;
+ StartCursorAnim(CURSOR_ANIM_OPEN);
+ GiveItemToMon(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetCursorPosition());
+ sStorage->state++;
break;
case 2:
- if (!sub_80D1218())
+ if (!IsItemIconAnimActive())
{
- sub_80CFE54(0);
- sub_80CE00C();
- PrintCursorMonInfo();
- PrintStorageActionText(PC_TEXT_ITEM_IS_HELD);
- sPSSData->state++;
+ StartCursorAnim(CURSOR_ANIM_BOUNCE);
+ RefreshDisplayMon();
+ PrintDisplayMonInfo();
+ PrintMessage(MSG_ITEM_IS_HELD);
+ sStorage->state++;
}
break;
case 3:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
}
break;
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
}
}
-static void Cb_ItemToBag(u8 taskId)
+static void Task_ItemToBag(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- if (!AddBagItem(sPSSData->cursorMonItem, 1))
+ if (!AddBagItem(sStorage->displayMonItemId, 1))
{
PlaySE(SE_FAILURE);
- PrintStorageActionText(PC_TEXT_BAG_FULL);
- sPSSData->state = 3;
+ PrintMessage(MSG_BAG_FULL);
+ sStorage->state = 3;
}
else
{
PlaySE(SE_SELECT);
- Item_TakeMons((sInPartyMenu != FALSE) ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
- sPSSData->state = 1;
+ MoveItemFromMonToBag(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetCursorPosition());
+ sStorage->state = 1;
}
break;
case 1:
- if (!sub_80D1218())
+ if (!IsItemIconAnimActive())
{
- PrintStorageActionText(PC_TEXT_PLACED_IN_BAG);
- sPSSData->state = 2;
+ PrintMessage(MSG_PLACED_IN_BAG);
+ sStorage->state = 2;
}
break;
case 2:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- sub_80CE00C();
- PrintCursorMonInfo();
- sPSSData->state = 4;
+ RefreshDisplayMon();
+ PrintDisplayMonInfo();
+ sStorage->state = 4;
}
break;
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
case 3:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_SwitchSelectedItem(u8 taskId)
+static void Task_SwitchSelectedItem(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- if (!ItemIsMail(sPSSData->cursorMonItem))
+ if (!ItemIsMail(sStorage->displayMonItemId))
{
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
}
else
{
- SetPSSCallback(Cb_PrintCantStoreMail);
+ SetPokeStorageTask(Task_PrintCantStoreMail);
}
break;
case 1:
- sub_80CFE54(2);
- Item_SwitchMonsWithMoving((sInPartyMenu != FALSE) ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
- sPSSData->state++;
+ StartCursorAnim(CURSOR_ANIM_OPEN);
+ SwapItemsWithMon(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetCursorPosition());
+ sStorage->state++;
break;
case 2:
- if (!sub_80D1218())
+ if (!IsItemIconAnimActive())
{
- sub_80CFE54(3);
- sub_80CE00C();
- PrintCursorMonInfo();
- PrintStorageActionText(PC_TEXT_CHANGED_TO_ITEM);
- sPSSData->state++;
+ StartCursorAnim(CURSOR_ANIM_FIST);
+ RefreshDisplayMon();
+ PrintDisplayMonInfo();
+ PrintMessage(MSG_CHANGED_TO_ITEM);
+ sStorage->state++;
}
break;
case 3:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
}
break;
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
}
}
-static void Cb_ShowItemInfo(u8 taskId)
+static void Task_ShowItemInfo(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
PlaySE(SE_WIN_OPEN);
PrintItemDescription();
- sub_80D1818();
- sPSSData->state++;
+ InitItemInfoWindow();
+ sStorage->state++;
}
break;
case 2:
- if (!sub_80D184C())
- sPSSData->state++;
+ if (!UpdateItemInfoWindowSlideIn())
+ sStorage->state++;
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
- sPSSData->state++;
+ sStorage->state++;
break;
case 4:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
PlaySE(SE_WIN_OPEN);
- sPSSData->state++;
+ sStorage->state++;
}
break;
case 5:
- if (!sub_80D18E4())
- sPSSData->state++;
+ if (!UpdateItemInfoWindowSlideOut())
+ sStorage->state++;
break;
case 6:
if (!IsDma3ManagerBusyWithBgCopy())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
}
}
-static void Cb_CloseBoxWhileHoldingItem(u8 taskId)
+static void Task_CloseBoxWhileHoldingItem(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
PlaySE(SE_SELECT);
- PrintStorageActionText(PC_TEXT_PUT_IN_BAG);
+ PrintMessage(MSG_PUT_IN_BAG);
ShowYesNoWindow(0);
- sPSSData->state = 1;
+ sStorage->state = 1;
break;
case 1:
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case MENU_B_PRESSED:
- case 1:
+ case 1: // No
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
- case 0:
- if (AddBagItem(sPSSData->movingItem, 1) == TRUE)
+ case 0:// Yes
+ if (AddBagItem(sStorage->movingItemId, 1) == TRUE)
{
ClearBottomWindow();
- sPSSData->state = 3;
+ sStorage->state = 3;
}
else
{
- PrintStorageActionText(PC_TEXT_BAG_FULL);
- sPSSData->state = 2;
+ PrintMessage(MSG_BAG_FULL);
+ sStorage->state = 2;
}
break;
}
@@ -3440,328 +3322,332 @@ static void Cb_CloseBoxWhileHoldingItem(u8 taskId)
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- sPSSData->state = 5;
+ sStorage->state = 5;
}
break;
case 3:
- sub_80D1194();
- sPSSData->state = 4;
+ MoveItemFromCursorToBag();
+ sStorage->state = 4;
break;
case 4:
- if (!sub_80D1218())
+ if (!IsItemIconAnimActive())
{
- sub_80CFE54(0);
- SetPSSCallback(Cb_MainPSS);
+ StartCursorAnim(CURSOR_ANIM_BOUNCE);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
case 5:
if (!IsDma3ManagerBusyWithBgCopy())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
}
}
-static void Cb_HandleMovingMonFromParty(u8 taskId)
+static void Task_HandleMovingMonFromParty(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
CompactPartySlots();
- sub_80CB950();
- sPSSData->state++;
+ CompactPartySprites();
+ sStorage->state++;
break;
case 1:
- if (!sub_80CB9BC())
+ if (GetNumPartySpritesCompacting() == 0)
{
- sub_80CAB20();
- SetPSSCallback(Cb_MainPSS);
+ UpdatePartySlotColors();
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_PrintCantStoreMail(u8 taskId)
+static void Task_PrintCantStoreMail(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- PrintStorageActionText(PC_TEXT_CANT_STORE_MAIL);
- sPSSData->state++;
+ PrintMessage(MSG_CANT_STORE_MAIL);
+ sStorage->state++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
- sPSSData->state++;
+ sStorage->state++;
break;
case 2:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
}
}
-static void Cb_HandleBoxOptions(u8 taskId)
+// Handle options menu that shows when the box title bar is selected
+static void Task_HandleBoxOptions(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- PrintStorageActionText(PC_TEXT_WHAT_YOU_DO);
+ PrintMessage(MSG_WHAT_YOU_DO);
AddMenu();
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
- if (sub_80D00A8())
+ if (IsMenuLoading())
return;
- sPSSData->state++;
+ sStorage->state++;
case 2:
- switch (sub_80D00AC())
+ switch (HandleMenuInput())
{
- case -1:
- case 0:
- sub_80CD1A8(TRUE);
+ case MENU_B_PRESSED:
+ case MENU_CANCEL:
+ AnimateBoxScrollArrows(TRUE);
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
- case 11:
+ case MENU_NAME:
PlaySE(SE_SELECT);
- SetPSSCallback(Cb_NameBox);
+ SetPokeStorageTask(Task_NameBox);
break;
- case 10:
+ case MENU_WALLPAPER:
PlaySE(SE_SELECT);
ClearBottomWindow();
- SetPSSCallback(Cb_HandleWallpapers);
+ SetPokeStorageTask(Task_HandleWallpapers);
break;
- case 9:
+ case MENU_JUMP:
PlaySE(SE_SELECT);
ClearBottomWindow();
- SetPSSCallback(Cb_JumpBox);
+ SetPokeStorageTask(Task_JumpBox);
break;
}
break;
}
}
-static void Cb_HandleWallpapers(u8 taskId)
+static void Task_HandleWallpapers(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
AddWallpaperSetsMenu();
- PrintStorageActionText(PC_TEXT_PICK_A_THEME);
- sPSSData->state++;
+ PrintMessage(MSG_PICK_A_THEME);
+ sStorage->state++;
break;
case 1:
- if (!sub_80D00A8())
- sPSSData->state++;
+ if (!IsMenuLoading())
+ sStorage->state++;
break;
case 2:
- sPSSData->wallpaperSetId = sub_80D00AC();
- switch (sPSSData->wallpaperSetId)
+ sStorage->wallpaperSetId = HandleMenuInput();
+ switch (sStorage->wallpaperSetId)
{
- case -1:
- sub_80CD1A8(TRUE);
+ case MENU_B_PRESSED:
+ AnimateBoxScrollArrows(TRUE);
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
- case 18 ... 21:
+ case MENU_SCENERY_1:
+ case MENU_SCENERY_2:
+ case MENU_SCENERY_3:
+ case MENU_ETCETERA:
PlaySE(SE_SELECT);
- sub_80D013C();
- sPSSData->wallpaperSetId -= 18;
- sPSSData->state++;
+ RemoveMenu();
+ sStorage->wallpaperSetId -= MENU_WALLPAPER_SETS_START;
+ sStorage->state++;
break;
- // New wallpaper from Walda.
- case 22:
+ case MENU_FRIENDS:
+ // New wallpaper from Walda.
PlaySE(SE_SELECT);
- sPSSData->wallpaperId = 16;
- sub_80D013C();
+ sStorage->wallpaperId = WALLPAPER_FRIENDS;
+ RemoveMenu();
ClearBottomWindow();
- sPSSData->state = 6;
+ sStorage->state = 6;
break;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
{
- AddWallpapersMenu(sPSSData->wallpaperSetId);
- PrintStorageActionText(PC_TEXT_PICK_A_WALLPAPER);
- sPSSData->state++;
+ AddWallpapersMenu(sStorage->wallpaperSetId);
+ PrintMessage(MSG_PICK_A_WALLPAPER);
+ sStorage->state++;
}
break;
case 4:
- sPSSData->wallpaperId = sub_80D00AC();
- switch (sPSSData->wallpaperId)
+ sStorage->wallpaperId = HandleMenuInput();
+ switch (sStorage->wallpaperId)
{
- case -2:
+ case MENU_NOTHING_CHOSEN:
break;
- case -1:
+ case MENU_B_PRESSED:
ClearBottomWindow();
- sPSSData->state = 0;
+ sStorage->state = 0;
break;
default:
PlaySE(SE_SELECT);
ClearBottomWindow();
- sPSSData->wallpaperId -= 23;
- SetWallpaperForCurrentBox(sPSSData->wallpaperId);
- sPSSData->state++;
+ sStorage->wallpaperId -= MENU_WALLPAPERS_START;
+ SetWallpaperForCurrentBox(sStorage->wallpaperId);
+ sStorage->state++;
break;
}
break;
case 5:
if (!DoWallpaperGfxChange())
{
- sub_80CD1A8(TRUE);
- SetPSSCallback(Cb_MainPSS);
+ AnimateBoxScrollArrows(TRUE);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
case 6:
if (!IsDma3ManagerBusyWithBgCopy())
{
- SetWallpaperForCurrentBox(sPSSData->wallpaperId);
- sPSSData->state = 5;
+ SetWallpaperForCurrentBox(sStorage->wallpaperId);
+ sStorage->state = 5;
}
break;
}
}
-static void Cb_JumpBox(u8 taskId)
+static void Task_JumpBox(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX);
- sub_80C77E8(&sPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE);
- sub_80C78D4(StorageGetCurrentBox());
- sPSSData->state++;
+ PrintMessage(MSG_JUMP_TO_WHICH_BOX);
+ LoadChooseBoxMenuGfx(&sStorage->chooseBoxMenu, GFXTAG_CHOOSE_BOX_MENU, PALTAG_MISC_1, 3, FALSE);
+ CreateChooseBoxMenuSprites(StorageGetCurrentBox());
+ sStorage->state++;
break;
case 1:
- sPSSData->newCurrBoxId = HandleBoxChooseSelectionInput();
- switch (sPSSData->newCurrBoxId)
+ sStorage->newCurrBoxId = HandleChooseBoxMenuInput();
+ switch (sStorage->newCurrBoxId)
{
- case 200:
+ case BOXID_NONE_CHOSEN:
break;
default:
ClearBottomWindow();
- sub_80C78E4();
- sub_80C7890();
- if (sPSSData->newCurrBoxId == 201 || sPSSData->newCurrBoxId == StorageGetCurrentBox())
+ DestroyChooseBoxMenuSprites();
+ FreeChooseBoxMenu();
+ if (sStorage->newCurrBoxId == BOXID_CANCELED || sStorage->newCurrBoxId == StorageGetCurrentBox())
{
- sub_80CD1A8(TRUE);
- SetPSSCallback(Cb_MainPSS);
+ AnimateBoxScrollArrows(TRUE);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
else
{
- sPSSData->state++;
+ sStorage->state++;
}
break;
}
break;
case 2:
- SetUpScrollToBox(sPSSData->newCurrBoxId);
- sPSSData->state++;
+ SetUpScrollToBox(sStorage->newCurrBoxId);
+ sStorage->state++;
break;
case 3:
if (!ScrollToBox())
{
- SetCurrentBox(sPSSData->newCurrBoxId);
- SetPSSCallback(Cb_MainPSS);
+ SetCurrentBox(sStorage->newCurrBoxId);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
}
}
-static void Cb_NameBox(u8 taskId)
+static void Task_NameBox(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- sub_80CE760();
+ SaveMovingMon();
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
if (!UpdatePaletteFade())
{
- sWhichToReshow = 1;
- sPSSData->screenChangeType = SCREEN_CHANGE_NAME_BOX;
- SetPSSCallback(Cb_ChangeScreen);
+ sWhichToReshow = SCREEN_CHANGE_NAME_BOX - 1;
+ sStorage->screenChangeType = SCREEN_CHANGE_NAME_BOX;
+ SetPokeStorageTask(Task_ChangeScreen);
}
break;
}
}
-static void Cb_ShowMonSummary(u8 taskId)
+static void Task_ShowMonSummary(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
- sub_80CE7E8();
+ InitSummaryScreenData();
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
if (!UpdatePaletteFade())
{
- sWhichToReshow = 0;
- sPSSData->screenChangeType = SCREEN_CHANGE_SUMMARY_SCREEN;
- SetPSSCallback(Cb_ChangeScreen);
+ sWhichToReshow = SCREEN_CHANGE_SUMMARY_SCREEN - 1;
+ sStorage->screenChangeType = SCREEN_CHANGE_SUMMARY_SCREEN;
+ SetPokeStorageTask(Task_ChangeScreen);
}
break;
}
}
-static void Cb_GiveItemFromBag(u8 taskId)
+static void Task_GiveItemFromBag(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
- sPSSData->state++;
+ sStorage->state++;
break;
case 1:
if (!UpdatePaletteFade())
{
- sWhichToReshow = 2;
- sPSSData->screenChangeType = SCREEN_CHANGE_ITEM_FROM_BAG;
- SetPSSCallback(Cb_ChangeScreen);
+ sWhichToReshow = SCREEN_CHANGE_ITEM_FROM_BAG - 1;
+ sStorage->screenChangeType = SCREEN_CHANGE_ITEM_FROM_BAG;
+ SetPokeStorageTask(Task_ChangeScreen);
}
break;
}
}
-static void Cb_OnCloseBoxPressed(u8 taskId)
+static void Task_OnCloseBoxPressed(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
if (IsMonBeingMoved())
{
PlaySE(SE_FAILURE);
- PrintStorageActionText(PC_TEXT_HOLDING_POKE);
- sPSSData->state = 1;
+ PrintMessage(MSG_HOLDING_POKE);
+ sStorage->state = 1;
}
- else if (IsActiveItemMoving())
+ else if (IsMovingItem())
{
- SetPSSCallback(Cb_CloseBoxWhileHoldingItem);
+ SetPokeStorageTask(Task_CloseBoxWhileHoldingItem);
}
else
{
PlaySE(SE_SELECT);
- PrintStorageActionText(PC_TEXT_EXIT_BOX);
+ PrintMessage(MSG_EXIT_BOX);
ShowYesNoWindow(0);
- sPSSData->state = 2;
+ sStorage->state = 2;
}
break;
case 1:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
case 2:
@@ -3770,59 +3656,59 @@ static void Cb_OnCloseBoxPressed(u8 taskId)
case MENU_B_PRESSED:
case 1:
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
case 0:
PlaySE(SE_PC_OFF);
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
break;
}
break;
case 3:
ComputerScreenCloseEffect(20, 0, 1);
- sPSSData->state++;
+ sStorage->state++;
break;
case 4:
if (!IsComputerScreenCloseEffectActive())
{
- sub_80CABE0();
+ UpdateBoxToSendMons();
gPlayerPartyCount = CalculatePlayerPartyCount();
- sPSSData->screenChangeType = SCREEN_CHANGE_EXIT_BOX;
- SetPSSCallback(Cb_ChangeScreen);
+ sStorage->screenChangeType = SCREEN_CHANGE_EXIT_BOX;
+ SetPokeStorageTask(Task_ChangeScreen);
}
break;
}
}
-static void Cb_OnBPressed(u8 taskId)
+static void Task_OnBPressed(u8 taskId)
{
- switch (sPSSData->state)
+ switch (sStorage->state)
{
case 0:
if (IsMonBeingMoved())
{
PlaySE(SE_FAILURE);
- PrintStorageActionText(PC_TEXT_HOLDING_POKE);
- sPSSData->state = 1;
+ PrintMessage(MSG_HOLDING_POKE);
+ sStorage->state = 1;
}
- else if (IsActiveItemMoving())
+ else if (IsMovingItem())
{
- SetPSSCallback(Cb_CloseBoxWhileHoldingItem);
+ SetPokeStorageTask(Task_CloseBoxWhileHoldingItem);
}
else
{
PlaySE(SE_SELECT);
- PrintStorageActionText(PC_TEXT_CONTINUE_BOX);
+ PrintMessage(MSG_CONTINUE_BOX);
ShowYesNoWindow(0);
- sPSSData->state = 2;
+ sStorage->state = 2;
}
break;
case 1:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
}
break;
case 2:
@@ -3830,40 +3716,40 @@ static void Cb_OnBPressed(u8 taskId)
{
case 0:
ClearBottomWindow();
- SetPSSCallback(Cb_MainPSS);
+ SetPokeStorageTask(Task_PokeStorageMain);
break;
case 1:
case MENU_B_PRESSED:
PlaySE(SE_PC_OFF);
ClearBottomWindow();
- sPSSData->state++;
+ sStorage->state++;
break;
}
break;
case 3:
ComputerScreenCloseEffect(20, 0, 0);
- sPSSData->state++;
+ sStorage->state++;
break;
case 4:
if (!IsComputerScreenCloseEffectActive())
{
- sub_80CABE0();
+ UpdateBoxToSendMons();
gPlayerPartyCount = CalculatePlayerPartyCount();
- sPSSData->screenChangeType = SCREEN_CHANGE_EXIT_BOX;
- SetPSSCallback(Cb_ChangeScreen);
+ sStorage->screenChangeType = SCREEN_CHANGE_EXIT_BOX;
+ SetPokeStorageTask(Task_ChangeScreen);
}
break;
}
}
-static void Cb_ChangeScreen(u8 taskId)
+static void Task_ChangeScreen(u8 taskId)
{
struct BoxPokemon *boxMons;
u8 mode, monIndex, maxMonIndex;
- u8 screenChangeType = sPSSData->screenChangeType;
+ u8 screenChangeType = sStorage->screenChangeType;
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS && IsActiveItemMoving() == TRUE)
- sMovingItemId = GetMovingItem();
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS && IsMovingItem() == TRUE)
+ sMovingItemId = GetMovingItemId();
else
sMovingItemId = ITEM_NONE;
@@ -3871,27 +3757,27 @@ static void Cb_ChangeScreen(u8 taskId)
{
case SCREEN_CHANGE_EXIT_BOX:
default:
- FreePSSData();
- SetMainCallback2(Cb2_ExitPSS);
+ FreePokeStorageData();
+ SetMainCallback2(CB2_ExitPokeStorage);
break;
case SCREEN_CHANGE_SUMMARY_SCREEN:
- boxMons = sPSSData->field_218C.box;
- monIndex = sPSSData->field_2187;
- maxMonIndex = sPSSData->field_2186;
- mode = sPSSData->pokemonSummaryScreenMode;
- FreePSSData();
- if (mode == PSS_MODE_NORMAL && boxMons == &gUnknown_02039D14.box)
- ShowPokemonSummaryScreenSet40EF(mode, boxMons, monIndex, maxMonIndex, Cb2_ReturnToPSS);
+ boxMons = sStorage->summaryMon.box;
+ monIndex = sStorage->summaryStartPos;
+ maxMonIndex = sStorage->summaryMaxPos;
+ mode = sStorage->summaryScreenMode;
+ FreePokeStorageData();
+ if (mode == SUMMARY_MODE_NORMAL && boxMons == &sSavedMovingMon.box)
+ ShowPokemonSummaryScreenSet40EF(mode, boxMons, monIndex, maxMonIndex, CB2_ReturnToPokeStorage);
else
- ShowPokemonSummaryScreen(mode, boxMons, monIndex, maxMonIndex, Cb2_ReturnToPSS);
+ ShowPokemonSummaryScreen(mode, boxMons, monIndex, maxMonIndex, CB2_ReturnToPokeStorage);
break;
case SCREEN_CHANGE_NAME_BOX:
- FreePSSData();
- DoNamingScreen(NAMING_SCREEN_BOX, GetBoxNamePtr(StorageGetCurrentBox()), 0, 0, 0, Cb2_ReturnToPSS);
+ FreePokeStorageData();
+ DoNamingScreen(NAMING_SCREEN_BOX, GetBoxNamePtr(StorageGetCurrentBox()), 0, 0, 0, CB2_ReturnToPokeStorage);
break;
case SCREEN_CHANGE_ITEM_FROM_BAG:
- FreePSSData();
- GoToBagMenu(ITEMMENULOCATION_PCBOX, 0, Cb2_ReturnToPSS);
+ FreePokeStorageData();
+ GoToBagMenu(ITEMMENULOCATION_PCBOX, 0, CB2_ReturnToPokeStorage);
break;
}
@@ -3900,34 +3786,43 @@ static void Cb_ChangeScreen(u8 taskId)
static void GiveChosenBagItem(void)
{
- u16 item = gSpecialVar_ItemId;
+ u16 itemId = gSpecialVar_ItemId;
- if (item != 0)
+ if (itemId != ITEM_NONE)
{
- u8 id = GetBoxCursorPosition();
-
+ u8 pos = GetCursorPosition();
if (sInPartyMenu)
- SetMonData(&gPlayerParty[id], MON_DATA_HELD_ITEM, &item);
+ SetMonData(&gPlayerParty[pos], MON_DATA_HELD_ITEM, &itemId);
else
- SetCurrentBoxMonData(id, MON_DATA_HELD_ITEM, &item);
+ SetCurrentBoxMonData(pos, MON_DATA_HELD_ITEM, &itemId);
- RemoveBagItem(item, 1);
+ RemoveBagItem(itemId, 1);
}
}
-static void FreePSSData(void)
+static void FreePokeStorageData(void)
{
- sub_80D25F0();
- sub_80D01B8();
- FREE_AND_SET_NULL(sPSSData);
+ TilemapUtil_Free();
+ MultiMove_Free();
+ FREE_AND_SET_NULL(sStorage);
FreeAllWindowBuffers();
}
+
+//------------------------------------------------------------------------------
+// SECTION: Misc
+//
+// No real uniform section below. Misc functions including more initialization,
+// showing/hiding the party menu, updating the Close Box button, printing
+// messages, doing the mosaic effect when transitioning between Pokémon, etc.
+//------------------------------------------------------------------------------
+
+
static void SetScrollingBackground(void)
{
SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(31));
- DecompressAndLoadBgGfxUsingHeap(3, gPokemonStorageScrollingBGTileset, 0, 0, 0);
- LZ77UnCompVram(gPokemonStorageScrollingBGTilemap, (void *)BG_SCREEN_ADDR(31));
+ DecompressAndLoadBgGfxUsingHeap(3, sScrollingBg_Gfx, 0, 0, 0);
+ LZ77UnCompVram(sScrollingBg_Tilemap, (void *)BG_SCREEN_ADDR(31));
}
static void ScrollBackground(void)
@@ -3936,19 +3831,19 @@ static void ScrollBackground(void)
ChangeBgY(3, 128, 2);
}
-static void LoadPSSMenuGfx(void)
+static void LoadPokeStorageMenuGfx(void)
{
- InitBgsFromTemplates(0, gUnknown_08572734, ARRAY_COUNT(gUnknown_08572734));
- DecompressAndLoadBgGfxUsingHeap(1, gPSSMenu_Gfx, 0, 0, 0);
- LZ77UnCompWram(gUnknown_085722A0, sPSSData->field_5AC4);
- SetBgTilemapBuffer(1, sPSSData->field_5AC4);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ DecompressAndLoadBgGfxUsingHeap(1, gStorageSystemMenu_Gfx, 0, 0, 0);
+ LZ77UnCompWram(sDisplayMenu_Tilemap, sStorage->displayMenuTilemapBuffer);
+ SetBgTilemapBuffer(1, sStorage->displayMenuTilemapBuffer);
ShowBg(1);
ScheduleBgCopyTilemapToVram(1);
}
-static bool8 InitPSSWindows(void)
+static bool8 InitPokeStorageWindows(void)
{
- if (!InitWindows(gUnknown_08572714))
+ if (!InitWindows(sWindowTemplates))
{
return FALSE;
}
@@ -3964,73 +3859,73 @@ static void LoadWaveformSpritePalette(void)
LoadSpritePalette(&gWaveformSpritePalette);
}
-static void sub_80CA0D8(void)
+static void InitPalettesAndSprites(void)
{
- LoadPalette(gUnknown_085723DC, 0, 0x20);
- LoadPalette(gUnknown_085723FC, 0x20, 0x20);
- LoadPalette(gUnknown_085726F4, 0xF0, 0x20);
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
- LoadPalette(gUnknown_0857241C, 0x30, 0x20);
+ LoadPalette(sInterface_Pal, 0, sizeof(sInterface_Pal));
+ LoadPalette(sPkmnDataGray_Pal, 0x20, sizeof(sPkmnDataGray_Pal));
+ LoadPalette(sUnknown_Pal, 0xF0, sizeof(sUnknown_Pal));
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
+ LoadPalette(sBg_Pal, 0x30, sizeof(sBg_Pal));
else
- LoadPalette(gUnknown_0857243C, 0x30, 0x20);
+ LoadPalette(sBgMoveItems_Pal, 0x30, sizeof(sBgMoveItems_Pal));
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_16COLOR | BGCNT_SCREENBASE(30));
- LoadCursorMonSprite();
- sub_80CA154();
- sub_80CA1C4();
- RefreshCursorMonData();
+ CreateDisplayMonSprite();
+ CreateMarkingComboSprite();
+ CreateWaveformSprites();
+ RefreshDisplayMonData();
}
-static void sub_80CA154(void)
+static void CreateMarkingComboSprite(void)
{
- sPSSData->field_D94 = CreateMonMarkingComboSprite(TAG_TILE_10, TAG_PAL_DAC8, NULL);
- sPSSData->field_D94->oam.priority = 1;
- sPSSData->field_D94->subpriority = 1;
- sPSSData->field_D94->pos1.x = 40;
- sPSSData->field_D94->pos1.y = 150;
- sPSSData->field_DA0 = (void*) OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(TAG_TILE_10);
+ sStorage->markingComboSprite = CreateMonMarkingComboSprite(GFXTAG_MARKING_COMBO, PALTAG_MARKING_COMBO, NULL);
+ sStorage->markingComboSprite->oam.priority = 1;
+ sStorage->markingComboSprite->subpriority = 1;
+ sStorage->markingComboSprite->pos1.x = 40;
+ sStorage->markingComboSprite->pos1.y = 150;
+ sStorage->markingComboTilesPtr = (void*) OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(GFXTAG_MARKING_COMBO);
}
-static void sub_80CA1C4(void)
+static void CreateWaveformSprites(void)
{
u16 i;
- struct SpriteSheet sheet = gWaveformSpriteSheet;
+ struct SpriteSheet sheet = sSpriteSheet_Waveform;
LoadSpriteSheet(&sheet);
- for (i = 0; i < 2; i++)
+ for (i = 0; i < ARRAY_COUNT(sStorage->waveformSprites); i++)
{
u8 spriteId = CreateSprite(&sSpriteTemplate_Waveform, i * 63 + 8, 9, 2);
- sPSSData->field_D98[i] = &gSprites[spriteId];
+ sStorage->waveformSprites[i] = &gSprites[spriteId];
}
}
-static void RefreshCursorMonData(void)
+static void RefreshDisplayMonData(void)
{
- LoadCursorMonGfx(sPSSData->cursorMonSpecies, sPSSData->cursorMonPersonality);
- PrintCursorMonInfo();
- sub_80CA65C();
+ LoadDisplayMonGfx(sStorage->displayMonSpecies, sStorage->displayMonPersonality);
+ PrintDisplayMonInfo();
+ UpdateWaveformAnimation();
ScheduleBgCopyTilemapToVram(0);
}
-static void BoxSetMosaic(void)
+static void StartDisplayMonMosaicEffect(void)
{
- RefreshCursorMonData();
- if (sPSSData->cursorMonSprite)
+ RefreshDisplayMonData();
+ if (sStorage->displayMonSprite)
{
- sPSSData->cursorMonSprite->oam.mosaic = TRUE;
- sPSSData->cursorMonSprite->data[0] = 10;
- sPSSData->cursorMonSprite->data[1] = 1;
- sPSSData->cursorMonSprite->callback = sub_80CA2D0;
- SetGpuReg(REG_OFFSET_MOSAIC, (sPSSData->cursorMonSprite->data[0] << 12) | (sPSSData->cursorMonSprite->data[0] << 8));
+ sStorage->displayMonSprite->oam.mosaic = TRUE;
+ sStorage->displayMonSprite->data[0] = 10;
+ sStorage->displayMonSprite->data[1] = 1;
+ sStorage->displayMonSprite->callback = SpriteCB_DisplayMonMosaic;
+ SetGpuReg(REG_OFFSET_MOSAIC, (sStorage->displayMonSprite->data[0] << 12) | (sStorage->displayMonSprite->data[0] << 8));
}
}
-static u8 sub_80CA2B8(void)
+static u8 IsDisplayMosaicActive(void)
{
- return sPSSData->cursorMonSprite->oam.mosaic;
+ return sStorage->displayMonSprite->oam.mosaic;
}
-static void sub_80CA2D0(struct Sprite *sprite)
+static void SpriteCB_DisplayMonMosaic(struct Sprite *sprite)
{
sprite->data[0] -= sprite->data[1];
if (sprite->data[0] < 0)
@@ -4043,22 +3938,22 @@ static void sub_80CA2D0(struct Sprite *sprite)
}
}
-static void LoadCursorMonSprite(void)
+static void CreateDisplayMonSprite(void)
{
u16 i;
u16 tileStart;
u8 palSlot;
u8 spriteId;
- struct SpriteSheet sheet = {sPSSData->field_22C4, MON_PIC_SIZE, TAG_TILE_2};
- struct SpritePalette palette = {sPSSData->field_2244, TAG_PAL_DAC6};
- struct SpriteTemplate template = sSpriteTemplate_CursorMon;
+ struct SpriteSheet sheet = {sStorage->tileBuffer, MON_PIC_SIZE, GFXTAG_DISPLAY_MON};
+ struct SpritePalette palette = {sStorage->displayMonPalBuffer, PALTAG_DISPLAY_MON};
+ struct SpriteTemplate template = sSpriteTemplate_DisplayMon;
for (i = 0; i < MON_PIC_SIZE; i++)
- sPSSData->field_22C4[i] = 0;
- for (i = 0; i < 0x10; i++)
- sPSSData->field_2244[i] = 0;
+ sStorage->tileBuffer[i] = 0;
+ for (i = 0; i < 16; i++)
+ sStorage->displayMonPalBuffer[i] = 0;
- sPSSData->cursorMonSprite = NULL;
+ sStorage->displayMonSprite = NULL;
do
{
@@ -4074,136 +3969,139 @@ static void LoadCursorMonSprite(void)
if (spriteId == MAX_SPRITES)
break;
- sPSSData->cursorMonSprite = &gSprites[spriteId];
- sPSSData->field_223A = palSlot * 16 + 0x100;
- sPSSData->field_223C = (void*) OBJ_VRAM0 + tileStart * 32;
+ sStorage->displayMonSprite = &gSprites[spriteId];
+ sStorage->displayMonPalOffset = palSlot * 16 + 0x100;
+ sStorage->displayMonTilePtr = (void*) OBJ_VRAM0 + tileStart * 32;
} while (0);
- if (sPSSData->cursorMonSprite == NULL)
+ if (sStorage->displayMonSprite == NULL)
{
- FreeSpriteTilesByTag(TAG_TILE_2);
- FreeSpritePaletteByTag(TAG_PAL_DAC6);
+ FreeSpriteTilesByTag(GFXTAG_DISPLAY_MON);
+ FreeSpritePaletteByTag(PALTAG_DISPLAY_MON);
}
}
-static void LoadCursorMonGfx(u16 species, u32 pid)
+static void LoadDisplayMonGfx(u16 species, u32 pid)
{
- if (sPSSData->cursorMonSprite == NULL)
+ if (sStorage->displayMonSprite == NULL)
return;
if (species != SPECIES_NONE)
{
- LoadSpecialPokePic(&gMonFrontPicTable[species], sPSSData->field_22C4, species, pid, TRUE);
- LZ77UnCompWram(sPSSData->cursorMonPalette, sPSSData->field_2244);
- CpuCopy32(sPSSData->field_22C4, sPSSData->field_223C, MON_PIC_SIZE);
- LoadPalette(sPSSData->field_2244, sPSSData->field_223A, 0x20);
- sPSSData->cursorMonSprite->invisible = FALSE;
+ LoadSpecialPokePic(&gMonFrontPicTable[species], sStorage->tileBuffer, species, pid, TRUE);
+ LZ77UnCompWram(sStorage->displayMonPalette, sStorage->displayMonPalBuffer);
+ CpuCopy32(sStorage->tileBuffer, sStorage->displayMonTilePtr, MON_PIC_SIZE);
+ LoadPalette(sStorage->displayMonPalBuffer, sStorage->displayMonPalOffset, 0x20);
+ sStorage->displayMonSprite->invisible = FALSE;
}
else
{
- sPSSData->cursorMonSprite->invisible = TRUE;
+ sStorage->displayMonSprite->invisible = TRUE;
}
}
-static void PrintCursorMonInfo(void)
+static void PrintDisplayMonInfo(void)
{
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
{
- AddTextPrinterParameterized(0, 1, sPSSData->cursorMonNickText, 6, 0, TEXT_SPEED_FF, NULL);
- AddTextPrinterParameterized(0, 2, sPSSData->cursorMonSpeciesName, 6, 15, TEXT_SPEED_FF, NULL);
- AddTextPrinterParameterized(0, 2, sPSSData->cursorMonGenderLvlText, 10, 29, TEXT_SPEED_FF, NULL);
- AddTextPrinterParameterized(0, 0, sPSSData->cursorMonItemName, 6, 43, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 1, sStorage->displayMonNameText, 6, 0, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 2, sStorage->displayMonSpeciesName, 6, 15, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 2, sStorage->displayMonGenderLvlText, 10, 29, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 0, sStorage->displayMonItemName, 6, 43, TEXT_SPEED_FF, NULL);
}
else
{
- AddTextPrinterParameterized(0, 0, sPSSData->cursorMonItemName, 6, 0, TEXT_SPEED_FF, NULL);
- AddTextPrinterParameterized(0, 1, sPSSData->cursorMonNickText, 6, 13, TEXT_SPEED_FF, NULL);
- AddTextPrinterParameterized(0, 2, sPSSData->cursorMonSpeciesName, 6, 28, TEXT_SPEED_FF, NULL);
- AddTextPrinterParameterized(0, 2, sPSSData->cursorMonGenderLvlText, 10, 42, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 0, sStorage->displayMonItemName, 6, 0, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 1, sStorage->displayMonNameText, 6, 13, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 2, sStorage->displayMonSpeciesName, 6, 28, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 2, sStorage->displayMonGenderLvlText, 10, 42, TEXT_SPEED_FF, NULL);
}
CopyWindowToVram(0, 2);
- if (sPSSData->cursorMonSpecies != SPECIES_NONE)
+ if (sStorage->displayMonSpecies != SPECIES_NONE)
{
- UpdateMonMarkingTiles(sPSSData->cursorMonMarkings, sPSSData->field_DA0);
- sPSSData->field_D94->invisible = FALSE;
+ UpdateMonMarkingTiles(sStorage->displayMonMarkings, sStorage->markingComboTilesPtr);
+ sStorage->markingComboSprite->invisible = FALSE;
}
else
{
- sPSSData->field_D94->invisible = TRUE;
+ sStorage->markingComboSprite->invisible = TRUE;
}
}
-static void sub_80CA65C(void)
+// Turn the wave animation on the sides of "Pkmn Data" on/off
+static void UpdateWaveformAnimation(void)
{
u16 i;
- if (sPSSData->cursorMonSpecies != SPECIES_NONE)
+ if (sStorage->displayMonSpecies != SPECIES_NONE)
{
- sub_80D27AC(0, 0, 0, 8, 2);
- for (i = 0; i < 2; i++)
- StartSpriteAnimIfDifferent(sPSSData->field_D98[i], i * 2 + 1);
+ // Start waveform animation and color "Pkmn Data"
+ TilemapUtil_SetRect(TILEMAPID_PKMN_DATA, 0, 0, 8, 2);
+ for (i = 0; i < ARRAY_COUNT(sStorage->waveformSprites); i++)
+ StartSpriteAnimIfDifferent(sStorage->waveformSprites[i], i * 2 + 1);
}
else
{
- sub_80D27AC(0, 0, 2, 8, 2);
- for (i = 0; i < 2; i++)
- StartSpriteAnim(sPSSData->field_D98[i], i * 2);
+ // Stop waveform animation and gray out "Pkmn Data"
+ TilemapUtil_SetRect(TILEMAPID_PKMN_DATA, 0, 2, 8, 2);
+ for (i = 0; i < ARRAY_COUNT(sStorage->waveformSprites); i++)
+ StartSpriteAnim(sStorage->waveformSprites[i], i * 2);
}
- sub_80D2918(0);
+ TilemapUtil_Update(TILEMAPID_PKMN_DATA);
ScheduleBgCopyTilemapToVram(1);
}
-static void sub_80CA704(void)
+static void InitSupplementalTilemaps(void)
{
- LZ77UnCompWram(gUnknown_08DD36C8, sPSSData->field_B0);
- LoadPalette(gPSSMenu_Pal, 0x10, 0x20);
- sub_80D2644(1, 1, sPSSData->field_B0, 12, 22);
- sub_80D2644(2, 1, gUnknown_0857245C, 9, 4);
- sub_80D2770(1, 10, 0);
- sub_80D2770(2, 21, 0);
- sub_80CAA74();
+ LZ77UnCompWram(gStorageSystemPartyMenu_Tilemap, sStorage->partyMenuTilemapBuffer);
+ LoadPalette(gStorageSystemPartyMenu_Pal, 0x10, 0x20);
+ TilemapUtil_SetMap(TILEMAPID_PARTY_MENU, 1, sStorage->partyMenuTilemapBuffer, 12, 22);
+ TilemapUtil_SetMap(TILEMAPID_CLOSE_BUTTON, 1, sCloseBoxButton_Tilemap, 9, 4);
+ TilemapUtil_SetPos(TILEMAPID_PARTY_MENU, 10, 0);
+ TilemapUtil_SetPos(TILEMAPID_CLOSE_BUTTON, 21, 0);
+ SetPartySlotTilemaps();
if (sInPartyMenu)
{
- sub_80CA984(TRUE);
+ UpdateCloseBoxButtonTilemap(TRUE);
CreatePartyMonsSprites(TRUE);
- sub_80D2918(2);
- sub_80D2918(1);
+ TilemapUtil_Update(TILEMAPID_CLOSE_BUTTON);
+ TilemapUtil_Update(TILEMAPID_PARTY_MENU);
}
else
{
- sub_80D27AC(1, 0, 20, 12, 2);
- sub_80CA984(TRUE);
- sub_80D2918(1);
- sub_80D2918(2);
+ TilemapUtil_SetRect(TILEMAPID_PARTY_MENU, 0, 20, 12, 2);
+ UpdateCloseBoxButtonTilemap(TRUE);
+ TilemapUtil_Update(TILEMAPID_PARTY_MENU);
+ TilemapUtil_Update(TILEMAPID_CLOSE_BUTTON);
}
ScheduleBgCopyTilemapToVram(1);
- sPSSData->unk_02C7 = 0;
+ sStorage->closeBoxFlashing = FALSE;
}
static void SetUpShowPartyMenu(void)
{
- sPSSData->field_2C0 = 20;
- sPSSData->field_2C2 = 2;
- sPSSData->field_2C5 = 0;
+ sStorage->partyMenuUnused1 = 20;
+ sStorage->partyMenuY = 2;
+ sStorage->partyMenuMoveTimer = 0;
CreatePartyMonsSprites(FALSE);
}
static bool8 ShowPartyMenu(void)
{
- if (sPSSData->field_2C5 == 20)
+ if (sStorage->partyMenuMoveTimer == 20)
return FALSE;
- sPSSData->field_2C0--;
- sPSSData->field_2C2++;
- sub_80D27F4(1, 3, 1);
- sub_80D2918(1);
+ sStorage->partyMenuUnused1--;
+ sStorage->partyMenuY++;
+ TilemapUtil_Move(TILEMAPID_PARTY_MENU, 3, 1);
+ TilemapUtil_Update(TILEMAPID_PARTY_MENU);
ScheduleBgCopyTilemapToVram(1);
- sub_80CBAF0(8);
- if (++sPSSData->field_2C5 == 20)
+ MovePartySprites(8);
+ if (++sStorage->partyMenuMoveTimer == 20)
{
sInPartyMenu = TRUE;
return FALSE;
@@ -4216,24 +4114,24 @@ static bool8 ShowPartyMenu(void)
static void SetUpHidePartyMenu(void)
{
- sPSSData->field_2C0 = 0;
- sPSSData->field_2C2 = 22;
- sPSSData->field_2C5 = 0;
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
- sub_80D11CC();
+ sStorage->partyMenuUnused1 = 0;
+ sStorage->partyMenuY = 22;
+ sStorage->partyMenuMoveTimer = 0;
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
+ MoveHeldItemWithPartyMenu();
}
static bool8 HidePartyMenu(void)
{
- if (sPSSData->field_2C5 != 20)
+ if (sStorage->partyMenuMoveTimer != 20)
{
- sPSSData->field_2C0++;
- sPSSData->field_2C2--;
- sub_80D27F4(1, 3, -1);
- sub_80D2918(1);
- FillBgTilemapBufferRect_Palette0(1, 0x100, 10, sPSSData->field_2C2, 12, 1);
- sub_80CBAF0(-8);
- if (++sPSSData->field_2C5 != 20)
+ sStorage->partyMenuUnused1++;
+ sStorage->partyMenuY--;
+ TilemapUtil_Move(TILEMAPID_PARTY_MENU, 3, -1);
+ TilemapUtil_Update(TILEMAPID_PARTY_MENU);
+ FillBgTilemapBufferRect_Palette0(1, 0x100, 10, sStorage->partyMenuY, 12, 1);
+ MovePartySprites(-8);
+ if (++sStorage->partyMenuMoveTimer != 20)
{
ScheduleBgCopyTilemapToVram(1);
return TRUE;
@@ -4243,8 +4141,11 @@ static bool8 HidePartyMenu(void)
sInPartyMenu = FALSE;
DestroyAllPartyMonIcons();
CompactPartySlots();
- sub_80D27AC(2, 0, 0, 9, 2);
- sub_80D2918(2);
+
+ // The close box button gets partially covered by
+ // the party menu, restore it
+ TilemapUtil_SetRect(TILEMAPID_CLOSE_BUTTON, 0, 0, 9, 2);
+ TilemapUtil_Update(TILEMAPID_CLOSE_BUTTON);
ScheduleBgCopyTilemapToVram(1);
return FALSE;
}
@@ -4253,110 +4154,111 @@ static bool8 HidePartyMenu(void)
return FALSE;
}
-static void sub_80CA984(bool8 arg0)
+static void UpdateCloseBoxButtonTilemap(bool8 normal)
{
- if (arg0)
- sub_80D27AC(2, 0, 0, 9, 2);
- else
- sub_80D27AC(2, 0, 2, 9, 2);
+ if (normal)
+ TilemapUtil_SetRect(TILEMAPID_CLOSE_BUTTON, 0, 0, 9, 2);
+ else // flashing
+ TilemapUtil_SetRect(TILEMAPID_CLOSE_BUTTON, 0, 2, 9, 2);
- sub_80D2918(2);
+ TilemapUtil_Update(TILEMAPID_CLOSE_BUTTON);
ScheduleBgCopyTilemapToVram(1);
}
-static void sub_80CA9C0(void)
+static void StartFlashingCloseBoxButton(void)
{
- sPSSData->unk_02C7 = 1;
- sPSSData->unk_02C8 = 30;
- sPSSData->unk_02C9 = TRUE;
+ sStorage->closeBoxFlashing = TRUE;
+ sStorage->closeBoxFlashTimer = 30;
+ sStorage->closeBoxFlashState = TRUE;
}
-static void sub_80CA9EC(void)
+static void StopFlashingCloseBoxButton(void)
{
- if (sPSSData->unk_02C7)
+ if (sStorage->closeBoxFlashing)
{
- sPSSData->unk_02C7 = 0;
- sub_80CA984(TRUE);
+ sStorage->closeBoxFlashing = FALSE;
+ UpdateCloseBoxButtonTilemap(TRUE);
}
}
-static void sub_80CAA14(void)
+static void UpdateCloseBoxButtonFlash(void)
{
- if (sPSSData->unk_02C7 && ++sPSSData->unk_02C8 > 30)
+ if (sStorage->closeBoxFlashing && ++sStorage->closeBoxFlashTimer > 30)
{
- sPSSData->unk_02C8 = 0;
- sPSSData->unk_02C9 = (sPSSData->unk_02C9 == FALSE);
- sub_80CA984(sPSSData->unk_02C9);
+ sStorage->closeBoxFlashTimer = 0;
+ sStorage->closeBoxFlashState = (sStorage->closeBoxFlashState == FALSE);
+ UpdateCloseBoxButtonTilemap(sStorage->closeBoxFlashState);
}
}
-static void sub_80CAA74(void)
+static void SetPartySlotTilemaps(void)
{
u8 i;
+ // Skips first party slot, it should always be drawn
+ // as if it has a Pokémon in it
for (i = 1; i < PARTY_SIZE; i++)
{
- s32 species = GetMonData(gPlayerParty + i, MON_DATA_SPECIES);
- sub_80CAAA8(i, (species != SPECIES_NONE));
+ s32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
+ SetPartySlotTilemap(i, species != SPECIES_NONE);
}
}
-static void sub_80CAAA8(u8 arg0, bool8 isPartyMon)
+static void SetPartySlotTilemap(u8 partyId, bool8 hasMon)
{
u16 i, j, index;
const u16 *data;
- if (isPartyMon)
- data = gUnknown_085724A4;
+ if (hasMon)
+ data = sPartySlotFilled_Tilemap;
else
- data = gUnknown_085724BC;
+ data = sPartySlotEmpty_Tilemap;
- index = 3 * (3 * (arg0 - 1) + 1);
+ index = 3 * (3 * (partyId - 1) + 1);
index *= 4;
index += 7;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
- {
- sPSSData->field_B0[index + j] = data[j];
- }
+ sStorage->partyMenuTilemapBuffer[index + j] = data[j];
+
data += 4;
index += 12;
}
}
-static void sub_80CAB20(void)
+static void UpdatePartySlotColors(void)
{
- sub_80CAA74();
- sub_80D27AC(1, 0, 0, 12, 22);
- sub_80D2918(1);
+ SetPartySlotTilemaps();
+ TilemapUtil_SetRect(TILEMAPID_PARTY_MENU, 0, 0, 12, 22);
+ TilemapUtil_Update(TILEMAPID_PARTY_MENU);
ScheduleBgCopyTilemapToVram(1);
}
static void SetUpDoShowPartyMenu(void)
{
- sPSSData->showPartyMenuState = 0;
+ sStorage->showPartyMenuState = 0;
PlaySE(SE_WIN_OPEN);
SetUpShowPartyMenu();
}
static bool8 DoShowPartyMenu(void)
{
- switch (sPSSData->showPartyMenuState)
+ switch (sStorage->showPartyMenuState)
{
case 0:
if (!ShowPartyMenu())
{
- sub_80CDBA0();
- sPSSData->showPartyMenuState++;
+ SetCursorInParty();
+ sStorage->showPartyMenuState++;
}
break;
case 1:
- if (!sub_80CD554())
+ if (!UpdateCursorPos())
{
- if (sPSSData->setMosaic)
- BoxSetMosaic();
- sPSSData->showPartyMenuState++;
+ if (sStorage->setMosaic)
+ StartDisplayMonMosaicEffect();
+ sStorage->showPartyMenuState++;
}
break;
case 2:
@@ -4365,7 +4267,7 @@ static bool8 DoShowPartyMenu(void)
return TRUE;
}
-static void sub_80CABE0(void)
+static void UpdateBoxToSendMons(void)
{
if (sLastUsedBox != StorageGetCurrentBox())
{
@@ -4374,7 +4276,7 @@ static void sub_80CABE0(void)
}
}
-static void sub_80CAC1C(void)
+static void InitPokeStorageBg0(void)
{
SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(29));
LoadUserWindowBorderGfx(1, 2, 208);
@@ -4382,42 +4284,42 @@ static void sub_80CAC1C(void)
CopyBgTilemapBufferToVram(0);
}
-static void PrintStorageActionText(u8 id)
+static void PrintMessage(u8 id)
{
u8 *txtPtr;
DynamicPlaceholderTextUtil_Reset();
- switch (gPCStorageActionTexts[id].format)
+ switch (sMessages[id].format)
{
- case PC_TEXT_FMT_NORMAL:
+ case MSG_VAR_NONE:
break;
- case PC_TEXT_FMT_MON_NAME_1:
- case PC_TEXT_FMT_MON_NAME_2:
- case PC_TEXT_FMT_MON_NAME_3:
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sPSSData->cursorMonNick);
+ case MSG_VAR_MON_NAME_1:
+ case MSG_VAR_MON_NAME_2:
+ case MSG_VAR_MON_NAME_3:
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sStorage->displayMonName);
break;
- case PC_TEXT_FMT_MON_NAME_4:
- case PC_TEXT_FMT_MON_NAME_5:
- case PC_TEXT_FMT_MON_NAME_6:
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sPSSData->field_21E0);
+ case MSG_VAR_RELEASE_MON_1:
+ case MSG_VAR_RELEASE_MON_2:
+ case MSG_VAR_RELEASE_MON_3:
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sStorage->releaseMonName);
break;
- case PC_TEXT_FMT_ITEM_NAME:
- if (IsActiveItemMoving())
- txtPtr = StringCopy(sPSSData->itemName, GetMovingItemName());
+ case MSG_VAR_ITEM_NAME:
+ if (IsMovingItem())
+ txtPtr = StringCopy(sStorage->itemName, GetMovingItemName());
else
- txtPtr = StringCopy(sPSSData->itemName, sPSSData->cursorMonItemName);
+ txtPtr = StringCopy(sStorage->itemName, sStorage->displayMonItemName);
while (*(txtPtr - 1) == CHAR_SPACE)
txtPtr--;
*txtPtr = EOS;
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sPSSData->itemName);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sStorage->itemName);
break;
}
- DynamicPlaceholderTextUtil_ExpandPlaceholders(sPSSData->field_2190, gPCStorageActionTexts[id].text);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(sStorage->messageText, sMessages[id].text);
FillWindowPixelBuffer(1, PIXEL_FILL(1));
- AddTextPrinterParameterized(1, 1, sPSSData->field_2190, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(1, 1, sStorage->messageText, 0, 1, TEXT_SPEED_FF, NULL);
DrawTextBorderOuter(1, 2, 14);
PutWindowTilemap(1);
CopyWindowToVram(1, 2);
@@ -4439,12 +4341,12 @@ static void ClearBottomWindow(void)
static void AddWallpaperSetsMenu(void)
{
InitMenu();
- SetMenuText(18);
- SetMenuText(19);
- SetMenuText(20);
- SetMenuText(21);
+ SetMenuText(MENU_SCENERY_1);
+ SetMenuText(MENU_SCENERY_2);
+ SetMenuText(MENU_SCENERY_3);
+ SetMenuText(MENU_ETCETERA);
if (IsWaldaWallpaperUnlocked())
- SetMenuText(22);
+ SetMenuText(MENU_FRIENDS);
AddMenu();
}
@@ -4453,29 +4355,29 @@ static void AddWallpapersMenu(u8 wallpaperSet)
InitMenu();
switch (wallpaperSet)
{
- case 0:
- SetMenuText(23);
- SetMenuText(24);
- SetMenuText(25);
- SetMenuText(26);
+ case MENU_SCENERY_1 - MENU_WALLPAPER_SETS_START:
+ SetMenuText(MENU_FOREST);
+ SetMenuText(MENU_CITY);
+ SetMenuText(MENU_DESERT);
+ SetMenuText(MENU_SAVANNA);
break;
- case 1:
- SetMenuText(27);
- SetMenuText(28);
- SetMenuText(29);
- SetMenuText(30);
+ case MENU_SCENERY_2 - MENU_WALLPAPER_SETS_START:
+ SetMenuText(MENU_CRAG);
+ SetMenuText(MENU_VOLCANO);
+ SetMenuText(MENU_SNOW);
+ SetMenuText(MENU_CAVE);
break;
- case 2:
- SetMenuText(31);
- SetMenuText(32);
- SetMenuText(33);
- SetMenuText(34);
+ case MENU_SCENERY_3 - MENU_WALLPAPER_SETS_START:
+ SetMenuText(MENU_BEACH);
+ SetMenuText(MENU_SEAFLOOR);
+ SetMenuText(MENU_RIVER);
+ SetMenuText(MENU_SKY);
break;
- case 3:
- SetMenuText(35);
- SetMenuText(36);
- SetMenuText(37);
- SetMenuText(38);
+ case MENU_ETCETERA - MENU_WALLPAPER_SETS_START:
+ SetMenuText(MENU_POLKADOT);
+ SetMenuText(MENU_POKECENTER);
+ SetMenuText(MENU_MACHINE);
+ SetMenuText(MENU_SIMPLE);
break;
}
AddMenu();
@@ -4486,57 +4388,67 @@ static u8 GetCurrentBoxOption(void)
return sCurrentBoxOption;
}
-static void sub_80CAEAC(void)
+static void InitCursorItemIcon(void)
{
- if (!IsCursorOnBox())
+ if (!IsCursorOnBoxTitle())
{
if (sInPartyMenu)
- sub_80D0D8C(CURSOR_AREA_IN_PARTY, GetBoxCursorPosition());
+ TryLoadItemIconAtPos(CURSOR_AREA_IN_PARTY, GetCursorPosition());
else
- sub_80D0D8C(CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
+ TryLoadItemIconAtPos(CURSOR_AREA_IN_BOX, GetCursorPosition());
}
if (sMovingItemId != ITEM_NONE)
{
- sub_80D0F38(sMovingItemId);
- sub_80CFE54(3);
+ InitItemIconInCursor(sMovingItemId);
+ StartCursorAnim(CURSOR_ANIM_FIST);
}
}
-static void sub_80CAF04(void)
+
+//------------------------------------------------------------------------------
+// SECTION: Pokémon sprites
+//
+// The below functions generally handle the Pokémon icon sprites, including
+// moving them with a scrolling box, shifting the party sprites, and
+// animating released Pokémon.
+//------------------------------------------------------------------------------
+
+
+static void InitMonIconFields(void)
{
u16 i;
LoadMonIconPalettes();
- for (i = 0; i < 40; i++)
- sPSSData->field_B08[i] = 0;
- for (i = 0; i < 40; i++)
- sPSSData->field_B58[i] = 0;
+ for (i = 0; i < MAX_MON_ICONS; i++)
+ sStorage->numIconsPerSpecies[i] = 0;
+ for (i = 0; i < MAX_MON_ICONS; i++)
+ sStorage->iconSpeciesList[i] = SPECIES_NONE;
for (i = 0; i < PARTY_SIZE; i++)
- sPSSData->partySprites[i] = NULL;
+ sStorage->partySprites[i] = NULL;
for (i = 0; i < IN_BOX_COUNT; i++)
- sPSSData->boxMonsSprites[i] = NULL;
+ sStorage->boxMonsSprites[i] = NULL;
- sPSSData->movingMonSprite = NULL;
- sPSSData->field_78C = 0;
+ sStorage->movingMonSprite = NULL;
+ sStorage->unkUnused1 = 0;
}
-static u8 sub_80CAFAC(void)
+static u8 GetMonIconPriorityByCursorPos(void)
{
return (IsCursorInBox() ? 2 : 1);
}
static void CreateMovingMonIcon(void)
{
- u32 personality = GetMonData(&sPSSData->movingMon, MON_DATA_PERSONALITY);
- u16 species = GetMonData(&sPSSData->movingMon, MON_DATA_SPECIES2);
- u8 priority = sub_80CAFAC();
+ u32 personality = GetMonData(&sStorage->movingMon, MON_DATA_PERSONALITY);
+ u16 species = GetMonData(&sStorage->movingMon, MON_DATA_SPECIES2);
+ u8 priority = GetMonIconPriorityByCursorPos();
- sPSSData->movingMonSprite = CreateMonIconSprite(species, personality, 0, 0, priority, 7);
- sPSSData->movingMonSprite->callback = sub_80CC100;
+ sStorage->movingMonSprite = CreateMonIconSprite(species, personality, 0, 0, priority, 7);
+ sStorage->movingMonSprite->callback = SpriteCB_HeldMon;
}
-static void sub_80CB028(u8 boxId)
+static void InitBoxMonSprites(u8 boxId)
{
u8 boxPosition;
u16 i, j, count;
@@ -4545,224 +4457,255 @@ static void sub_80CB028(u8 boxId)
count = 0;
boxPosition = 0;
- for (i = 0; i < IN_BOX_COLUMNS; i++)
+
+ // For each box slot, create a Pokémon icon if a species is present
+ for (i = 0; i < IN_BOX_ROWS; i++)
{
- for (j = 0; j < IN_BOX_ROWS; j++)
+ for (j = 0; j < IN_BOX_COLUMNS; j++)
{
species = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2);
if (species != SPECIES_NONE)
{
personality = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY);
- sPSSData->boxMonsSprites[count] = CreateMonIconSprite(species, personality, 8 * (3 * j) + 100, 8 * (3 * i) + 44, 2, 19 - j);
+ sStorage->boxMonsSprites[count] = CreateMonIconSprite(species, personality, 8 * (3 * j) + 100, 8 * (3 * i) + 44, 2, 19 - j);
}
else
{
- sPSSData->boxMonsSprites[count] = NULL;
+ sStorage->boxMonsSprites[count] = NULL;
}
boxPosition++;
count++;
}
}
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ // If in item mode, set all Pokémon icons with no item to be transparent
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
{
for (boxPosition = 0; boxPosition < IN_BOX_COUNT; boxPosition++)
{
- if (GetBoxMonDataAt(boxId, boxPosition, MON_DATA_HELD_ITEM) == 0)
- sPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
+ if (GetBoxMonDataAt(boxId, boxPosition, MON_DATA_HELD_ITEM) == ITEM_NONE)
+ sStorage->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
}
}
}
-static void sub_80CB140(u8 boxPosition)
+static void CreateBoxMonIconAtPos(u8 boxPosition)
{
u16 species = GetCurrentBoxMonData(boxPosition, MON_DATA_SPECIES2);
if (species != SPECIES_NONE)
{
- s16 x = 8 * (3 * (boxPosition % IN_BOX_ROWS)) + 100;
- s16 y = 8 * (3 * (boxPosition / IN_BOX_ROWS)) + 44;
+ s16 x = 8 * (3 * (boxPosition % IN_BOX_COLUMNS)) + 100;
+ s16 y = 8 * (3 * (boxPosition / IN_BOX_COLUMNS)) + 44;
u32 personality = GetCurrentBoxMonData(boxPosition, MON_DATA_PERSONALITY);
- sPSSData->boxMonsSprites[boxPosition] = CreateMonIconSprite(species, personality, x, y, 2, 19 - (boxPosition % IN_BOX_ROWS));
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
- sPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
+ sStorage->boxMonsSprites[boxPosition] = CreateMonIconSprite(species, personality, x, y, 2, 19 - (boxPosition % IN_BOX_COLUMNS));
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
+ sStorage->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
}
}
-static void sub_80CB1F0(s16 arg0)
+#define sDistance data[1]
+#define sSpeed data[2]
+#define sScrollInDestX data[3]
+#define sDelay data[4]
+#define sScrollOutX data[5]
+
+static void StartBoxMonIconsScrollOut(s16 speed)
{
u16 i;
for (i = 0; i < IN_BOX_COUNT; i++)
{
- if (sPSSData->boxMonsSprites[i] != NULL)
+ if (sStorage->boxMonsSprites[i] != NULL)
{
- sPSSData->boxMonsSprites[i]->data[2] = arg0;
- sPSSData->boxMonsSprites[i]->data[4] = 1;
- sPSSData->boxMonsSprites[i]->callback = sub_80CB278;
+ sStorage->boxMonsSprites[i]->sSpeed = speed;
+ sStorage->boxMonsSprites[i]->sDelay = 1;
+ sStorage->boxMonsSprites[i]->callback = SpriteCB_BoxMonIconScrollOut;
}
}
}
-static void sub_80CB234(struct Sprite *sprite)
+static void SpriteCB_BoxMonIconScrollIn(struct Sprite *sprite)
{
- if (sprite->data[1] != 0)
+ if (sprite->sDistance != 0)
{
- sprite->data[1]--;
- sprite->pos1.x += sprite->data[2];
+ // Icon moving
+ sprite->sDistance--;
+ sprite->pos1.x += sprite->sSpeed;
}
else
{
- sPSSData->field_C66--;
- sprite->pos1.x = sprite->data[3];
+ // Icon arrived
+ sStorage->iconScrollNumIncoming--;
+ sprite->pos1.x = sprite->sScrollInDestX;
sprite->callback = SpriteCallbackDummy;
}
}
-static void sub_80CB278(struct Sprite *sprite)
+static void SpriteCB_BoxMonIconScrollOut(struct Sprite *sprite)
{
- if (sprite->data[4] != 0)
+ if (sprite->sDelay != 0)
{
- sprite->data[4]--;
+ sprite->sDelay--;
}
else
{
- sprite->pos1.x += sprite->data[2];
- sprite->data[5] = sprite->pos1.x + sprite->pos2.x;
- if (sprite->data[5] <= 68 || sprite->data[5] >= 252)
+ // Icon moving
+ sprite->pos1.x += sprite->sSpeed;
+ sprite->sScrollOutX = sprite->pos1.x + sprite->pos2.x;
+
+ // Check if icon offscreen
+ if (sprite->sScrollOutX <= 68 || sprite->sScrollOutX >= 252)
sprite->callback = SpriteCallbackDummy;
}
}
-static void DestroyAllIconsInRow(u8 row)
+// Sprites for Pokémon icons are destroyed during
+// the box scroll once they've gone offscreen
+static void DestroyBoxMonIconsInColumn(u8 column)
{
- u16 column;
- u8 boxPosition = row;
+ u16 row;
+ u8 boxPosition = column;
- for (column = 0; column < IN_BOX_COLUMNS; column++)
+ for (row = 0; row < IN_BOX_ROWS; row++)
{
- if (sPSSData->boxMonsSprites[boxPosition] != NULL)
+ if (sStorage->boxMonsSprites[boxPosition] != NULL)
{
- DestroyBoxMonIcon(sPSSData->boxMonsSprites[boxPosition]);
- sPSSData->boxMonsSprites[boxPosition] = NULL;
+ DestroyBoxMonIcon(sStorage->boxMonsSprites[boxPosition]);
+ sStorage->boxMonsSprites[boxPosition] = NULL;
}
- boxPosition += IN_BOX_ROWS;
+ boxPosition += IN_BOX_COLUMNS;
}
}
-static u8 sub_80CB2F8(u8 row, u16 times, s16 xDelta)
+// Create the appearing icons for the incoming scrolling box
+static u8 CreateBoxMonIconsInColumn(u8 column, u16 distance, s16 speed)
{
s32 i;
u16 y = 44;
- s16 xDest = 8 * (3 * row) + 100;
- u16 x = xDest - ((times + 1) * xDelta);
- u8 subpriority = 19 - row;
- u8 count = 0;
- u8 boxPosition = row;
+ s16 xDest = 8 * (3 * column) + 100;
+ u16 x = xDest - ((distance + 1) * speed);
+ u8 subpriority = 19 - column;
+ u8 iconsCreated = 0;
+ u8 boxPosition = column;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
{
- for (i = 0; i < IN_BOX_COLUMNS; i++)
+ for (i = 0; i < IN_BOX_ROWS; i++)
{
- if (sPSSData->boxSpecies[boxPosition] != SPECIES_NONE)
+ if (sStorage->boxSpecies[boxPosition] != SPECIES_NONE)
{
- sPSSData->boxMonsSprites[boxPosition] = CreateMonIconSprite(sPSSData->boxSpecies[boxPosition],
- sPSSData->boxPersonalities[boxPosition],
+ sStorage->boxMonsSprites[boxPosition] = CreateMonIconSprite(sStorage->boxSpecies[boxPosition],
+ sStorage->boxPersonalities[boxPosition],
x, y, 2, subpriority);
- if (sPSSData->boxMonsSprites[boxPosition] != NULL)
+ if (sStorage->boxMonsSprites[boxPosition] != NULL)
{
- sPSSData->boxMonsSprites[boxPosition]->data[1] = times;
- sPSSData->boxMonsSprites[boxPosition]->data[2] = xDelta;
- sPSSData->boxMonsSprites[boxPosition]->data[3] = xDest;
- sPSSData->boxMonsSprites[boxPosition]->callback = sub_80CB234;
- count++;
+ sStorage->boxMonsSprites[boxPosition]->sDistance = distance;
+ sStorage->boxMonsSprites[boxPosition]->sSpeed = speed;
+ sStorage->boxMonsSprites[boxPosition]->sScrollInDestX = xDest;
+ sStorage->boxMonsSprites[boxPosition]->callback = SpriteCB_BoxMonIconScrollIn;
+ iconsCreated++;
}
}
- boxPosition += IN_BOX_ROWS;
+ boxPosition += IN_BOX_COLUMNS;
y += 24;
}
}
else
{
- for (i = 0; i < IN_BOX_COLUMNS; i++)
+ // Separate case for Move Items mode is used
+ // to create the icons with the proper blend
+ for (i = 0; i < IN_BOX_ROWS; i++)
{
- if (sPSSData->boxSpecies[boxPosition] != SPECIES_NONE)
+ if (sStorage->boxSpecies[boxPosition] != SPECIES_NONE)
{
- sPSSData->boxMonsSprites[boxPosition] = CreateMonIconSprite(sPSSData->boxSpecies[boxPosition],
- sPSSData->boxPersonalities[boxPosition],
+ sStorage->boxMonsSprites[boxPosition] = CreateMonIconSprite(sStorage->boxSpecies[boxPosition],
+ sStorage->boxPersonalities[boxPosition],
x, y, 2, subpriority);
- if (sPSSData->boxMonsSprites[boxPosition] != NULL)
+ if (sStorage->boxMonsSprites[boxPosition] != NULL)
{
- sPSSData->boxMonsSprites[boxPosition]->data[1] = times;
- sPSSData->boxMonsSprites[boxPosition]->data[2] = xDelta;
- sPSSData->boxMonsSprites[boxPosition]->data[3] = xDest;
- sPSSData->boxMonsSprites[boxPosition]->callback = sub_80CB234;
- if (GetBoxMonDataAt(sPSSData->field_C5C, boxPosition, MON_DATA_HELD_ITEM) == 0)
- sPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
- count++;
+ sStorage->boxMonsSprites[boxPosition]->sDistance = distance;
+ sStorage->boxMonsSprites[boxPosition]->sSpeed = speed;
+ sStorage->boxMonsSprites[boxPosition]->sScrollInDestX = xDest;
+ sStorage->boxMonsSprites[boxPosition]->callback = SpriteCB_BoxMonIconScrollIn;
+ if (GetBoxMonDataAt(sStorage->incomingBoxId, boxPosition, MON_DATA_HELD_ITEM) == ITEM_NONE)
+ sStorage->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
+ iconsCreated++;
}
}
- boxPosition += IN_BOX_ROWS;
+ boxPosition += IN_BOX_COLUMNS;
y += 24;
}
}
- return count;
+ return iconsCreated;
}
-static void sub_80CB4CC(u8 boxId, s8 direction)
+#undef sDistance
+#undef sSpeed
+#undef sScrollInDestX
+#undef sDelay
+#undef sScrollOutX
+
+static void InitBoxMonIconScroll(u8 boxId, s8 direction)
{
- sPSSData->field_C6A = 0;
- sPSSData->field_C6B = boxId;
- sPSSData->field_C69 = direction;
- sPSSData->field_C60 = 32;
- sPSSData->field_C64 = -(6 * direction);
- sPSSData->field_C66 = 0;
- SetBoxSpeciesAndPersonalities(boxId);
+ sStorage->iconScrollState = 0;
+ sStorage->iconScrollToBoxId = boxId;
+ sStorage->iconScrollDirection = direction;
+ sStorage->iconScrollDistance = 32;
+ sStorage->iconScrollSpeed = -(6 * direction);
+ sStorage->iconScrollNumIncoming = 0;
+ GetIncomingBoxMonData(boxId);
if (direction > 0)
- sPSSData->field_C68 = 0;
+ sStorage->iconScrollCurColumn = 0;
else
- sPSSData->field_C68 = IN_BOX_ROWS - 1;
+ sStorage->iconScrollCurColumn = IN_BOX_COLUMNS - 1;
- sPSSData->field_C62 = (24 * sPSSData->field_C68) + 100;
- sub_80CB1F0(sPSSData->field_C64);
+ sStorage->iconScrollPos = (24 * sStorage->iconScrollCurColumn) + 100;
+ StartBoxMonIconsScrollOut(sStorage->iconScrollSpeed);
}
-static bool8 sub_80CB584(void)
+static bool8 UpdateBoxMonIconScroll(void)
{
- if (sPSSData->field_C60 != 0)
- sPSSData->field_C60--;
+ if (sStorage->iconScrollDistance != 0)
+ sStorage->iconScrollDistance--;
- switch (sPSSData->field_C6A)
+ switch (sStorage->iconScrollState)
{
case 0:
- sPSSData->field_C62 += sPSSData->field_C64;
- if (sPSSData->field_C62 <= 64 || sPSSData->field_C62 >= 252)
+ sStorage->iconScrollPos += sStorage->iconScrollSpeed;
+ if (sStorage->iconScrollPos <= 64 || sStorage->iconScrollPos >= 252)
{
- DestroyAllIconsInRow(sPSSData->field_C68);
- sPSSData->field_C62 += sPSSData->field_C69 * 24;
- sPSSData->field_C6A++;
+ // A column of icons has gone offscreen, destroy them
+ DestroyBoxMonIconsInColumn(sStorage->iconScrollCurColumn);
+ sStorage->iconScrollPos += sStorage->iconScrollDirection * 24;
+ sStorage->iconScrollState++;
}
break;
case 1:
- sPSSData->field_C62 += sPSSData->field_C64;
- sPSSData->field_C66 += sub_80CB2F8(sPSSData->field_C68, sPSSData->field_C60, sPSSData->field_C64);
- if ((sPSSData->field_C69 > 0 && sPSSData->field_C68 == IN_BOX_ROWS - 1)
- || (sPSSData->field_C69 < 0 && sPSSData->field_C68 == 0))
+ // Create the new incoming column of icons
+ sStorage->iconScrollPos += sStorage->iconScrollSpeed;
+ sStorage->iconScrollNumIncoming += CreateBoxMonIconsInColumn(sStorage->iconScrollCurColumn, sStorage->iconScrollDistance, sStorage->iconScrollSpeed);
+
+ if ((sStorage->iconScrollDirection > 0 && sStorage->iconScrollCurColumn == IN_BOX_COLUMNS - 1)
+ || (sStorage->iconScrollDirection < 0 && sStorage->iconScrollCurColumn == 0))
{
- sPSSData->field_C6A++;
+ // Scroll has reached final column
+ sStorage->iconScrollState++;
}
else
{
- sPSSData->field_C68 += sPSSData->field_C69;
- sPSSData->field_C6A = 0;
+ // Continue scrolling
+ sStorage->iconScrollCurColumn += sStorage->iconScrollDirection;
+ sStorage->iconScrollState = 0;
}
break;
case 2:
- if (sPSSData->field_C66 == 0)
+ // Wait to make sure all icons have arrived
+ if (sStorage->iconScrollNumIncoming == 0)
{
- sPSSData->field_C60++;
+ sStorage->iconScrollDistance++;
return FALSE;
}
break;
@@ -4773,49 +4716,47 @@ static bool8 sub_80CB584(void)
return TRUE;
}
-static void SetBoxSpeciesAndPersonalities(u8 boxId)
+static void GetIncomingBoxMonData(u8 boxId)
{
s32 i, j, boxPosition;
boxPosition = 0;
- for (i = 0; i < IN_BOX_COLUMNS; i++)
+ for (i = 0; i < IN_BOX_ROWS; i++)
{
- for (j = 0; j < IN_BOX_ROWS; j++)
+ for (j = 0; j < IN_BOX_COLUMNS; j++)
{
- sPSSData->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2);
- if (sPSSData->boxSpecies[boxPosition] != SPECIES_NONE)
- sPSSData->boxPersonalities[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY);
+ sStorage->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2);
+ if (sStorage->boxSpecies[boxPosition] != SPECIES_NONE)
+ sStorage->boxPersonalities[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY);
boxPosition++;
}
}
- sPSSData->field_C5C = boxId;
+ sStorage->incomingBoxId = boxId;
}
static void DestroyBoxMonIconAtPosition(u8 boxPosition)
{
- if (sPSSData->boxMonsSprites[boxPosition] != NULL)
+ if (sStorage->boxMonsSprites[boxPosition] != NULL)
{
- DestroyBoxMonIcon(sPSSData->boxMonsSprites[boxPosition]);
- sPSSData->boxMonsSprites[boxPosition] = NULL;
+ DestroyBoxMonIcon(sStorage->boxMonsSprites[boxPosition]);
+ sStorage->boxMonsSprites[boxPosition] = NULL;
}
}
static void SetBoxMonIconObjMode(u8 boxPosition, u8 objMode)
{
- if (sPSSData->boxMonsSprites[boxPosition] != NULL)
- {
- sPSSData->boxMonsSprites[boxPosition]->oam.objMode = objMode;
- }
+ if (sStorage->boxMonsSprites[boxPosition] != NULL)
+ sStorage->boxMonsSprites[boxPosition]->oam.objMode = objMode;
}
-static void CreatePartyMonsSprites(bool8 arg0)
+static void CreatePartyMonsSprites(bool8 visible)
{
u16 i, count;
u16 species = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES2);
u32 personality = GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY);
- sPSSData->partySprites[0] = CreateMonIconSprite(species, personality, 104, 64, 1, 12);
+ sStorage->partySprites[0] = CreateMonIconSprite(species, personality, 104, 64, 1, 12);
count = 1;
for (i = 1; i < PARTY_SIZE; i++)
{
@@ -4823,90 +4764,97 @@ static void CreatePartyMonsSprites(bool8 arg0)
if (species != SPECIES_NONE)
{
personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
- sPSSData->partySprites[i] = CreateMonIconSprite(species, personality, 152, 8 * (3 * (i - 1)) + 16, 1, 12);
+ sStorage->partySprites[i] = CreateMonIconSprite(species, personality, 152, 8 * (3 * (i - 1)) + 16, 1, 12);
count++;
}
else
{
- sPSSData->partySprites[i] = NULL;
+ sStorage->partySprites[i] = NULL;
}
}
- if (!arg0)
+ if (!visible)
{
for (i = 0; i < count; i++)
{
- sPSSData->partySprites[i]->pos1.y -= DISPLAY_HEIGHT;
- sPSSData->partySprites[i]->invisible = TRUE;
+ sStorage->partySprites[i]->pos1.y -= DISPLAY_HEIGHT;
+ sStorage->partySprites[i]->invisible = TRUE;
}
}
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
{
for (i = 0; i < PARTY_SIZE; i++)
{
- if (sPSSData->partySprites[i] != NULL && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == 0)
- sPSSData->partySprites[i]->oam.objMode = ST_OAM_OBJ_BLEND;
+ if (sStorage->partySprites[i] != NULL && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == ITEM_NONE)
+ sStorage->partySprites[i]->oam.objMode = ST_OAM_OBJ_BLEND;
}
}
}
-static void sub_80CB950(void)
+static void CompactPartySprites(void)
{
- u16 i, count;
+ u16 i, targetSlot;
- sPSSData->field_C5E = 0;
- for (i = 0, count = 0; i < PARTY_SIZE; i++)
+ sStorage->numPartyToCompact = 0;
+ for (i = 0, targetSlot = 0; i < PARTY_SIZE; i++)
{
- if (sPSSData->partySprites[i] != NULL)
+ if (sStorage->partySprites[i] != NULL)
{
- if (i != count)
+ if (i != targetSlot)
{
- sub_80CB9D0(sPSSData->partySprites[i], count);
- sPSSData->partySprites[i] = NULL;
- sPSSData->field_C5E++;
+ MovePartySpriteToNextSlot(sStorage->partySprites[i], targetSlot);
+ sStorage->partySprites[i] = NULL;
+ sStorage->numPartyToCompact++;
}
- count++;
+ targetSlot++;
}
}
}
-static u8 sub_80CB9BC(void)
+static u8 GetNumPartySpritesCompacting(void)
{
- return sPSSData->field_C5E;
+ return sStorage->numPartyToCompact;
}
-static void sub_80CB9D0(struct Sprite *sprite, u16 partyId)
+#define sPartyId data[1]
+#define sMonX data[2]
+#define sMonY data[3]
+#define sSpeedX data[4]
+#define sSpeedY data[5]
+#define sMoveSteps data[6]
+
+static void MovePartySpriteToNextSlot(struct Sprite *sprite, u16 partyId)
{
s16 x, y;
- sprite->data[1] = partyId;
+ sprite->sPartyId = partyId;
if (partyId == 0)
x = 104, y = 64;
else
x = 152, y = 8 * (3 * (partyId - 1)) + 16;
- sprite->data[2] = (u16)(sprite->pos1.x) * 8;
- sprite->data[3] = (u16)(sprite->pos1.y) * 8;
- sprite->data[4] = ((x * 8) - sprite->data[2]) / 8;
- sprite->data[5] = ((y * 8) - sprite->data[3]) / 8;
+ sprite->sMonX = (u16)(sprite->pos1.x) * 8;
+ sprite->sMonY = (u16)(sprite->pos1.y) * 8;
+ sprite->sSpeedX = ((x * 8) - sprite->sMonX) / 8;
+ sprite->sSpeedY = ((y * 8) - sprite->sMonY) / 8;
sprite->data[6] = 8;
- sprite->callback = sub_80CBA3C;
+ sprite->callback = SpriteCB_MovePartyMonToNextSlot;
}
-static void sub_80CBA3C(struct Sprite *sprite)
+static void SpriteCB_MovePartyMonToNextSlot(struct Sprite *sprite)
{
- if (sprite->data[6] != 0)
+ if (sprite->sMoveSteps != 0)
{
- s16 x = sprite->data[2] += sprite->data[4];
- s16 y = sprite->data[3] += sprite->data[5];
+ s16 x = sprite->sMonX += sprite->sSpeedX;
+ s16 y = sprite->sMonY += sprite->sSpeedY;
sprite->pos1.x = x / 8u;
sprite->pos1.y = y / 8u;
- sprite->data[6]--;
+ sprite->sMoveSteps--;
}
else
{
- if (sprite->data[1] == 0)
+ if (sprite->sPartyId == 0)
{
sprite->pos1.x = 104;
sprite->pos1.y = 64;
@@ -4914,48 +4862,55 @@ static void sub_80CBA3C(struct Sprite *sprite)
else
{
sprite->pos1.x = 152;
- sprite->pos1.y = 8 * (3 * (sprite->data[1] - 1)) + 16;
+ sprite->pos1.y = 8 * (3 * (sprite->sPartyId - 1)) + 16;
}
sprite->callback = SpriteCallbackDummy;
- sPSSData->partySprites[sprite->data[1]] = sprite;
- sPSSData->field_C5E--;
+ sStorage->partySprites[sprite->sPartyId] = sprite;
+ sStorage->numPartyToCompact--;
}
}
+#undef sPartyId
+#undef sMonX
+#undef sMonY
+#undef sSpeedX
+#undef sSpeedY
+#undef sMoveSteps
+
static void DestroyMovingMonIcon(void)
{
- if (sPSSData->movingMonSprite != NULL)
+ if (sStorage->movingMonSprite != NULL)
{
- DestroyBoxMonIcon(sPSSData->movingMonSprite);
- sPSSData->movingMonSprite = NULL;
+ DestroyBoxMonIcon(sStorage->movingMonSprite);
+ sStorage->movingMonSprite = NULL;
}
}
-static void sub_80CBAF0(s16 yDelta)
+static void MovePartySprites(s16 yDelta)
{
u16 i, posY;
for (i = 0; i < PARTY_SIZE; i++)
{
- if (sPSSData->partySprites[i] != NULL)
+ if (sStorage->partySprites[i] != NULL)
{
- sPSSData->partySprites[i]->pos1.y += yDelta;
- posY = sPSSData->partySprites[i]->pos1.y + sPSSData->partySprites[i]->pos2.y + sPSSData->partySprites[i]->centerToCornerVecY;
+ sStorage->partySprites[i]->pos1.y += yDelta;
+ posY = sStorage->partySprites[i]->pos1.y + sStorage->partySprites[i]->pos2.y + sStorage->partySprites[i]->centerToCornerVecY;
posY += 16;
if (posY > 192)
- sPSSData->partySprites[i]->invisible = TRUE;
+ sStorage->partySprites[i]->invisible = TRUE;
else
- sPSSData->partySprites[i]->invisible = FALSE;
+ sStorage->partySprites[i]->invisible = FALSE;
}
}
}
static void DestroyPartyMonIcon(u8 partyId)
{
- if (sPSSData->partySprites[partyId] != NULL)
+ if (sStorage->partySprites[partyId] != NULL)
{
- DestroyBoxMonIcon(sPSSData->partySprites[partyId]);
- sPSSData->partySprites[partyId] = NULL;
+ DestroyBoxMonIcon(sStorage->partySprites[partyId]);
+ sStorage->partySprites[partyId] = NULL;
}
}
@@ -4965,225 +4920,232 @@ static void DestroyAllPartyMonIcons(void)
for (i = 0; i < PARTY_SIZE; i++)
{
- if (sPSSData->partySprites[i] != NULL)
+ if (sStorage->partySprites[i] != NULL)
{
- DestroyBoxMonIcon(sPSSData->partySprites[i]);
- sPSSData->partySprites[i] = NULL;
+ DestroyBoxMonIcon(sStorage->partySprites[i]);
+ sStorage->partySprites[i] = NULL;
}
}
}
static void SetPartyMonIconObjMode(u8 partyId, u8 objMode)
{
- if (sPSSData->partySprites[partyId] != NULL)
+ if (sStorage->partySprites[partyId] != NULL)
{
- sPSSData->partySprites[partyId]->oam.objMode = objMode;
+ sStorage->partySprites[partyId]->oam.objMode = objMode;
}
}
-static void sub_80CBC14(u8 mode, u8 id)
+static void SetMovingMonSprite(u8 mode, u8 id)
{
if (mode == MODE_PARTY)
{
- sPSSData->movingMonSprite = sPSSData->partySprites[id];
- sPSSData->partySprites[id] = NULL;
+ sStorage->movingMonSprite = sStorage->partySprites[id];
+ sStorage->partySprites[id] = NULL;
}
else if (mode == MODE_BOX)
{
- sPSSData->movingMonSprite = sPSSData->boxMonsSprites[id];
- sPSSData->boxMonsSprites[id] = NULL;
+ sStorage->movingMonSprite = sStorage->boxMonsSprites[id];
+ sStorage->boxMonsSprites[id] = NULL;
}
else
{
return;
}
- sPSSData->movingMonSprite->callback = sub_80CC100;
- sPSSData->movingMonSprite->oam.priority = sub_80CAFAC();
- sPSSData->movingMonSprite->subpriority = 7;
+ sStorage->movingMonSprite->callback = SpriteCB_HeldMon;
+ sStorage->movingMonSprite->oam.priority = GetMonIconPriorityByCursorPos();
+ sStorage->movingMonSprite->subpriority = 7;
}
-static void sub_80CBCAC(u8 boxId, u8 position)
+static void SetPlacedMonSprite(u8 boxId, u8 position)
{
if (boxId == TOTAL_BOXES_COUNT) // party mon
{
- sPSSData->partySprites[position] = sPSSData->movingMonSprite;
- sPSSData->partySprites[position]->oam.priority = 1;
- sPSSData->partySprites[position]->subpriority = 12;
+ sStorage->partySprites[position] = sStorage->movingMonSprite;
+ sStorage->partySprites[position]->oam.priority = 1;
+ sStorage->partySprites[position]->subpriority = 12;
}
else
{
- sPSSData->boxMonsSprites[position] = sPSSData->movingMonSprite;
- sPSSData->boxMonsSprites[position]->oam.priority = 2;
- sPSSData->boxMonsSprites[position]->subpriority = 19 - (position % IN_BOX_ROWS);
+ sStorage->boxMonsSprites[position] = sStorage->movingMonSprite;
+ sStorage->boxMonsSprites[position]->oam.priority = 2;
+ sStorage->boxMonsSprites[position]->subpriority = 19 - (position % IN_BOX_COLUMNS);
}
- sPSSData->movingMonSprite->callback = SpriteCallbackDummy;
- sPSSData->movingMonSprite = NULL;
+ sStorage->movingMonSprite->callback = SpriteCallbackDummy;
+ sStorage->movingMonSprite = NULL;
}
-static void sub_80CBD5C(u8 boxId, u8 position)
+static void SaveMonSpriteAtPos(u8 boxId, u8 position)
{
if (boxId == TOTAL_BOXES_COUNT) // party mon
- sPSSData->field_B00 = &sPSSData->partySprites[position];
+ sStorage->shiftMonSpritePtr = &sStorage->partySprites[position];
else
- sPSSData->field_B00 = &sPSSData->boxMonsSprites[position];
+ sStorage->shiftMonSpritePtr = &sStorage->boxMonsSprites[position];
- sPSSData->movingMonSprite->callback = SpriteCallbackDummy;
- sPSSData->field_C5D = 0;
+ sStorage->movingMonSprite->callback = SpriteCallbackDummy;
+ sStorage->shiftTimer = 0;
}
-static bool8 sub_80CBDC4(void)
+static bool8 MoveShiftingMons(void)
{
- if (sPSSData->field_C5D == 16)
+ if (sStorage->shiftTimer == 16)
return FALSE;
- sPSSData->field_C5D++;
- if (sPSSData->field_C5D & 1)
+ sStorage->shiftTimer++;
+ if (sStorage->shiftTimer & 1)
{
- (*sPSSData->field_B00)->pos1.y--;
- sPSSData->movingMonSprite->pos1.y++;
+ (*sStorage->shiftMonSpritePtr)->pos1.y--;
+ sStorage->movingMonSprite->pos1.y++;
}
- (*sPSSData->field_B00)->pos2.x = gSineTable[sPSSData->field_C5D * 8] / 16;
- sPSSData->movingMonSprite->pos2.x = -(gSineTable[sPSSData->field_C5D * 8] / 16);
- if (sPSSData->field_C5D == 8)
+ (*sStorage->shiftMonSpritePtr)->pos2.x = gSineTable[sStorage->shiftTimer * 8] / 16;
+ sStorage->movingMonSprite->pos2.x = -(gSineTable[sStorage->shiftTimer * 8] / 16);
+ if (sStorage->shiftTimer == 8)
{
- sPSSData->movingMonSprite->oam.priority = (*sPSSData->field_B00)->oam.priority;
- sPSSData->movingMonSprite->subpriority = (*sPSSData->field_B00)->subpriority;
- (*sPSSData->field_B00)->oam.priority = sub_80CAFAC();
- (*sPSSData->field_B00)->subpriority = 7;
+ sStorage->movingMonSprite->oam.priority = (*sStorage->shiftMonSpritePtr)->oam.priority;
+ sStorage->movingMonSprite->subpriority = (*sStorage->shiftMonSpritePtr)->subpriority;
+ (*sStorage->shiftMonSpritePtr)->oam.priority = GetMonIconPriorityByCursorPos();
+ (*sStorage->shiftMonSpritePtr)->subpriority = 7;
}
- if (sPSSData->field_C5D == 16)
+ if (sStorage->shiftTimer == 16)
{
- struct Sprite *sprite = sPSSData->movingMonSprite;
- sPSSData->movingMonSprite = (*sPSSData->field_B00);
- *sPSSData->field_B00 = sprite;
+ struct Sprite *sprite = sStorage->movingMonSprite;
+ sStorage->movingMonSprite = (*sStorage->shiftMonSpritePtr);
+ *sStorage->shiftMonSpritePtr = sprite;
- sPSSData->movingMonSprite->callback = sub_80CC100;
- (*sPSSData->field_B00)->callback = SpriteCallbackDummy;
+ sStorage->movingMonSprite->callback = SpriteCB_HeldMon;
+ (*sStorage->shiftMonSpritePtr)->callback = SpriteCallbackDummy;
}
return TRUE;
}
-static void sub_80CBF14(u8 mode, u8 position)
+static void SetReleaseMon(u8 mode, u8 position)
{
switch (mode)
{
case MODE_PARTY:
- sPSSData->field_B04 = &sPSSData->partySprites[position];
+ sStorage->releaseMonSpritePtr = &sStorage->partySprites[position];
break;
case MODE_BOX:
- sPSSData->field_B04 = &sPSSData->boxMonsSprites[position];
+ sStorage->releaseMonSpritePtr = &sStorage->boxMonsSprites[position];
break;
case MODE_MOVE:
- sPSSData->field_B04 = &sPSSData->movingMonSprite;
+ sStorage->releaseMonSpritePtr = &sStorage->movingMonSprite;
break;
default:
return;
}
- if (*sPSSData->field_B04 != NULL)
+ if (*sStorage->releaseMonSpritePtr != NULL)
{
- InitSpriteAffineAnim(*sPSSData->field_B04);
- (*sPSSData->field_B04)->oam.affineMode = ST_OAM_AFFINE_NORMAL;
- (*sPSSData->field_B04)->affineAnims = gSpriteAffineAnimTable_857291C;
- StartSpriteAffineAnim(*sPSSData->field_B04, 0);
+ InitSpriteAffineAnim(*sStorage->releaseMonSpritePtr);
+ (*sStorage->releaseMonSpritePtr)->oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ (*sStorage->releaseMonSpritePtr)->affineAnims = sAffineAnims_ReleaseMon;
+ StartSpriteAffineAnim(*sStorage->releaseMonSpritePtr, RELEASE_ANIM_RELEASE);
}
}
-static bool8 sub_80CBFD8(void)
+static bool8 TryHideReleaseMonSprite(void)
{
- if (*sPSSData->field_B04 == NULL || (*sPSSData->field_B04)->invisible)
+ if (*sStorage->releaseMonSpritePtr == NULL
+ || (*sStorage->releaseMonSpritePtr)->invisible)
return FALSE;
- if ((*sPSSData->field_B04)->affineAnimEnded)
- (*sPSSData->field_B04)->invisible = TRUE;
+ if ((*sStorage->releaseMonSpritePtr)->affineAnimEnded)
+ (*sStorage->releaseMonSpritePtr)->invisible = TRUE;
return TRUE;
}
-static void sub_80CC020(void)
+static void DestroyReleaseMonIcon(void)
{
- if (*sPSSData->field_B04 != NULL)
+ if (*sStorage->releaseMonSpritePtr != NULL)
{
- FreeOamMatrix((*sPSSData->field_B04)->oam.matrixNum);
- DestroyBoxMonIcon(*sPSSData->field_B04);
- *sPSSData->field_B04 = NULL;
+ FreeOamMatrix((*sStorage->releaseMonSpritePtr)->oam.matrixNum);
+ DestroyBoxMonIcon(*sStorage->releaseMonSpritePtr);
+ *sStorage->releaseMonSpritePtr = NULL;
}
}
-static void sub_80CC064(void)
+static void ReshowReleaseMon(void)
{
- if (*sPSSData->field_B04 != NULL)
+ if (*sStorage->releaseMonSpritePtr != NULL)
{
- (*sPSSData->field_B04)->invisible = FALSE;
- StartSpriteAffineAnim(*sPSSData->field_B04, 1);
+ (*sStorage->releaseMonSpritePtr)->invisible = FALSE;
+ StartSpriteAffineAnim(*sStorage->releaseMonSpritePtr, RELEASE_ANIM_CAME_BACK);
}
}
-static bool8 sub_80CC0A0(void)
+static bool8 ResetReleaseMonSpritePtr(void)
{
- if (sPSSData->field_B04 == NULL)
+ if (sStorage->releaseMonSpritePtr == NULL)
return FALSE;
- if ((*sPSSData->field_B04)->affineAnimEnded)
- sPSSData->field_B04 = NULL;
+ if ((*sStorage->releaseMonSpritePtr)->affineAnimEnded)
+ sStorage->releaseMonSpritePtr = NULL;
return TRUE;
}
static void SetMovingMonPriority(u8 priority)
{
- sPSSData->movingMonSprite->oam.priority = priority;
+ sStorage->movingMonSprite->oam.priority = priority;
}
-static void sub_80CC100(struct Sprite *sprite)
+static void SpriteCB_HeldMon(struct Sprite *sprite)
{
- sprite->pos1.x = sPSSData->field_CB4->pos1.x;
- sprite->pos1.y = sPSSData->field_CB4->pos1.y + sPSSData->field_CB4->pos2.y + 4;
+ sprite->pos1.x = sStorage->cursorSprite->pos1.x;
+ sprite->pos1.y = sStorage->cursorSprite->pos1.y + sStorage->cursorSprite->pos2.y + 4;
}
-static u16 sub_80CC124(u16 species)
+static u16 TryLoadMonIconTiles(u16 species)
{
- u16 i, var;
+ u16 i, offset;
- for (i = 0; i < 40; i++)
+ // Search icon list for this species
+ for (i = 0; i < MAX_MON_ICONS; i++)
{
- if (sPSSData->field_B58[i] == species)
+ if (sStorage->iconSpeciesList[i] == species)
break;
}
- if (i == 40)
+ if (i == MAX_MON_ICONS)
{
- for (i = 0; i < 40; i++)
+ // Species not present in the list
+ // Find first empty spot in the list to put it
+ for (i = 0; i < MAX_MON_ICONS; i++)
{
- if (sPSSData->field_B58[i] == 0)
+ if (sStorage->iconSpeciesList[i] == 0)
break;
}
- if (i == 40)
+
+ // Failed to find an empty spot
+ if (i == MAX_MON_ICONS)
return 0xFFFF;
}
- sPSSData->field_B58[i] = species;
- sPSSData->field_B08[i]++;
- var = 16 * i;
- CpuCopy32(GetMonIconTiles(species, TRUE), (void*)(OBJ_VRAM0) + var * 32, 0x200);
+ // Add species to icon list and load tiles
+ sStorage->iconSpeciesList[i] = species;
+ sStorage->numIconsPerSpecies[i]++;
+ offset = 16 * i;
+ CpuCopy32(GetMonIconTiles(species, TRUE), (void*)(OBJ_VRAM0) + offset * 32, 0x200);
- return var;
+ return offset;
}
-static void sub_80CC1E0(u16 species)
+static void RemoveSpeciesFromIconList(u16 species)
{
u16 i;
- for (i = 0; i < 40; i++)
+ for (i = 0; i < MAX_MON_ICONS; i++)
{
- if (sPSSData->field_B58[i] == species)
+ if (sStorage->iconSpeciesList[i] == species)
{
- if (--sPSSData->field_B08[i] == 0)
- sPSSData->field_B58[i] = 0;
+ if (--sStorage->numIconsPerSpecies[i] == 0)
+ sStorage->iconSpeciesList[i] = SPECIES_NONE;
break;
}
}
@@ -5193,18 +5155,18 @@ static struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s
{
u16 tileNum;
u8 spriteId;
- struct SpriteTemplate tempalte = gUnknown_085728D4;
+ struct SpriteTemplate template = sSpriteTemplate_MonIcon;
species = GetIconSpecies(species, personality);
- tempalte.paletteTag = 0xDAC0 + gMonIconPaletteIndices[species];
- tileNum = sub_80CC124(species);
+ template.paletteTag = PALTAG_MON_ICON_0 + gMonIconPaletteIndices[species];
+ tileNum = TryLoadMonIconTiles(species);
if (tileNum == 0xFFFF)
return NULL;
- spriteId = CreateSprite(&tempalte, x, y, subpriority);
+ spriteId = CreateSprite(&template, x, y, subpriority);
if (spriteId == MAX_SPRITES)
{
- sub_80CC1E0(species);
+ RemoveSpeciesFromIconList(species);
return NULL;
}
@@ -5216,113 +5178,130 @@ static struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s
static void DestroyBoxMonIcon(struct Sprite *sprite)
{
- sub_80CC1E0(sprite->data[0]);
+ RemoveSpeciesFromIconList(sprite->data[0]);
DestroySprite(sprite);
}
-static void sub_80CC32C(u8 boxId)
+
+//------------------------------------------------------------------------------
+// SECTION: General box
+//
+// Some basic box functions, including initializing the box and scrolling.
+//------------------------------------------------------------------------------
+
+
+#define tState data[0]
+#define tDmaIdx data[1]
+#define tBoxId data[2]
+
+static void CreateInitBoxTask(u8 boxId)
{
- u8 taskId = CreateTask(sub_80CC370, 2);
+ u8 taskId = CreateTask(Task_InitBox, 2);
- gTasks[taskId].data[2] = boxId;
+ gTasks[taskId].tBoxId = boxId;
}
-static bool8 sub_80CC35C(void)
+static bool8 IsInitBoxActive(void)
{
- return FuncIsActiveTask(sub_80CC370);
+ return FuncIsActiveTask(Task_InitBox);
}
-static void sub_80CC370(u8 taskId)
+static void Task_InitBox(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
- sPSSData->field_2D2 = 0;
- sPSSData->bg2_X = 0;
- task->data[1] = RequestDma3Fill(0, sPSSData->field_4AC4, 0x1000, 1);
+ sStorage->wallpaperOffset = 0;
+ sStorage->bg2_X = 0;
+ task->tDmaIdx = RequestDma3Fill(0, sStorage->wallpaperBgTilemapBuffer, sizeof(sStorage->wallpaperBgTilemapBuffer), 1);
break;
case 1:
- if (CheckForSpaceForDma3Request(task->data[1]) == -1)
+ if (CheckForSpaceForDma3Request(task->tDmaIdx) == -1)
return;
- SetBgTilemapBuffer(2, sPSSData->field_4AC4);
+ SetBgTilemapBuffer(2, sStorage->wallpaperBgTilemapBuffer);
ShowBg(2);
break;
case 2:
- LoadWallpaperGfx(task->data[2], 0);
+ LoadWallpaperGfx(task->tBoxId, 0);
break;
case 3:
if (!WaitForWallpaperGfxLoad())
return;
- sub_80CCB50(task->data[2]);
- sub_80CD02C();
- sub_80CB028(task->data[2]);
+ InitBoxTitle(task->tBoxId);
+ CreateBoxScrollArrows();
+ InitBoxMonSprites(task->tBoxId);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(27) | BGCNT_TXT512x256);
break;
case 4:
DestroyTask(taskId);
break;
default:
- task->data[0] = 0;
+ task->tState = 0;
return;
}
- task->data[0]++;
+ task->tState++;
}
+#undef tState
+#undef tDmaIdx
+#undef tBoxId
+
static void SetUpScrollToBox(u8 boxId)
{
s8 direction = DetermineBoxScrollDirection(boxId);
- sPSSData->wallpaperScrollSpeed = (direction > 0) ? 6 : -6;
- sPSSData->field_2D3 = (direction > 0) ? 1 : 2;
- sPSSData->field_2D0 = 32;
- sPSSData->field_2D4 = boxId;
- sPSSData->field_2D6 = (direction <= 0) ? 5 : 0;
- sPSSData->field_2D8 = direction;
- sPSSData->field_2DA = (direction > 0) ? 264 : 56;
- sPSSData->field_2DC = (direction <= 0) ? 5 : 0;
- sPSSData->field_2DE = 0;
- sPSSData->field_2E0 = 2;
- sPSSData->boxScrollDestination = boxId;
- sPSSData->field_A65 = direction;
- sPSSData->field_A63 = 0;
+ sStorage->scrollSpeed = (direction > 0) ? 6 : -6;
+ sStorage->scrollUnused1 = (direction > 0) ? 1 : 2;
+ sStorage->scrollTimer = 32;
+ sStorage->scrollToBoxIdUnused = boxId;
+ sStorage->scrollUnused2 = (direction <= 0) ? 5 : 0;
+ sStorage->scrollDirectionUnused = direction;
+
+ sStorage->scrollUnused3 = (direction > 0) ? 264 : 56;
+ sStorage->scrollUnused4 = (direction <= 0) ? 5 : 0;
+ sStorage->scrollUnused5 = 0;
+ sStorage->scrollUnused6 = 2;
+ sStorage->scrollToBoxId = boxId;
+ sStorage->scrollDirection = direction;
+ sStorage->scrollState = 0;
}
static bool8 ScrollToBox(void)
{
- bool8 var;
+ bool8 iconsScrolling;
- switch (sPSSData->field_A63)
+ switch (sStorage->scrollState)
{
case 0:
- LoadWallpaperGfx(sPSSData->boxScrollDestination, sPSSData->field_A65);
- sPSSData->field_A63++;
+ LoadWallpaperGfx(sStorage->scrollToBoxId, sStorage->scrollDirection);
+ sStorage->scrollState++;
case 1:
if (!WaitForWallpaperGfxLoad())
return TRUE;
- sub_80CB4CC(sPSSData->boxScrollDestination, sPSSData->field_A65);
- sub_80CCCFC(sPSSData->boxScrollDestination, sPSSData->field_A65);
- sub_80CD0B8(sPSSData->field_A65);
+ InitBoxMonIconScroll(sStorage->scrollToBoxId, sStorage->scrollDirection);
+ CreateIncomingBoxTitle(sStorage->scrollToBoxId, sStorage->scrollDirection);
+ StartBoxScrollArrowsSlide(sStorage->scrollDirection);
break;
case 2:
- var = sub_80CB584();
- if (sPSSData->field_2D0 != 0)
+ iconsScrolling = UpdateBoxMonIconScroll();
+ if (sStorage->scrollTimer != 0)
{
- sPSSData->bg2_X += sPSSData->wallpaperScrollSpeed;
- if (--sPSSData->field_2D0 != 0)
+ sStorage->bg2_X += sStorage->scrollSpeed;
+ if (--sStorage->scrollTimer != 0)
return TRUE;
- sub_80CCEE0();
- sub_80CD158();
+ CycleBoxTitleSprites();
+ StopBoxScrollArrowsSlide();
}
- return var;
+ return iconsScrolling;
}
- sPSSData->field_A63++;
+ sStorage->scrollState++;
return TRUE;
}
@@ -5341,40 +5320,46 @@ static s8 DetermineBoxScrollDirection(u8 boxId)
return (i < TOTAL_BOXES_COUNT / 2) ? 1 : -1;
}
+
+//------------------------------------------------------------------------------
+// SECTION: Wallpaper gfx
+//------------------------------------------------------------------------------
+
+
static void SetWallpaperForCurrentBox(u8 wallpaperId)
{
u8 boxId = StorageGetCurrentBox();
SetBoxWallpaper(boxId, wallpaperId);
- sPSSData->wallpaperChangeState = 0;
+ sStorage->wallpaperChangeState = 0;
}
static bool8 DoWallpaperGfxChange(void)
{
- switch (sPSSData->wallpaperChangeState)
+ switch (sStorage->wallpaperChangeState)
{
case 0:
- BeginNormalPaletteFade(sPSSData->field_738, 1, 0, 16, RGB_WHITEALPHA);
- sPSSData->wallpaperChangeState++;
+ BeginNormalPaletteFade(sStorage->wallpaperPalBits, 1, 0, 16, RGB_WHITEALPHA);
+ sStorage->wallpaperChangeState++;
break;
case 1:
if (!UpdatePaletteFade())
{
u8 curBox = StorageGetCurrentBox();
LoadWallpaperGfx(curBox, 0);
- sPSSData->wallpaperChangeState++;
+ sStorage->wallpaperChangeState++;
}
break;
case 2:
if (WaitForWallpaperGfxLoad() == TRUE)
{
- sub_80CCF9C();
- BeginNormalPaletteFade(sPSSData->field_738, 1, 16, 0, RGB_WHITEALPHA);
- sPSSData->wallpaperChangeState++;
+ CycleBoxTitleColor();
+ BeginNormalPaletteFade(sStorage->wallpaperPalBits, 1, 16, 0, RGB_WHITEALPHA);
+ sStorage->wallpaperChangeState++;
}
break;
case 3:
if (!UpdatePaletteFade())
- sPSSData->wallpaperChangeState++;
+ sStorage->wallpaperChangeState++;
break;
case 4:
return FALSE;
@@ -5386,54 +5371,54 @@ static bool8 DoWallpaperGfxChange(void)
static void LoadWallpaperGfx(u8 boxId, s8 direction)
{
u8 wallpaperId;
- const struct WallpaperTable *wallpaperGfx;
+ const struct Wallpaper *wallpaper;
void *iconGfx;
- u32 size1, size2;
+ u32 tilesSize, iconSize;
- sPSSData->field_6F9 = 0;
- sPSSData->field_6FA = boxId;
- sPSSData->field_6FB = direction;
- if (sPSSData->field_6FB != 0)
+ sStorage->wallpaperLoadState = 0;
+ sStorage->wallpaperLoadBoxId = boxId;
+ sStorage->wallpaperLoadDir = direction;
+ if (sStorage->wallpaperLoadDir != 0)
{
- sPSSData->field_2D2 = (sPSSData->field_2D2 == 0);
- sub_80CCAE0(sPSSData->field_4AC4);
+ sStorage->wallpaperOffset = (sStorage->wallpaperOffset == 0);
+ TrimOldWallpaper(sStorage->wallpaperBgTilemapBuffer);
}
- wallpaperId = GetBoxWallpaper(sPSSData->field_6FA);
+ wallpaperId = GetBoxWallpaper(sStorage->wallpaperLoadBoxId);
if (wallpaperId != WALLPAPER_FRIENDS)
{
- wallpaperGfx = &gWallpaperTable[wallpaperId];
- LZ77UnCompWram(wallpaperGfx->tileMap, sPSSData->field_792);
- sub_80CCA3C(sPSSData->field_792, sPSSData->field_6FB, sPSSData->field_2D2);
+ wallpaper = &sWallpapers[wallpaperId];
+ LZ77UnCompWram(wallpaper->tilemap, sStorage->wallpaperTilemap);
+ DrawWallpaper(sStorage->wallpaperTilemap, sStorage->wallpaperLoadDir, sStorage->wallpaperOffset);
- if (sPSSData->field_6FB != 0)
- LoadPalette(wallpaperGfx->palettes, (sPSSData->field_2D2 * 32) + 0x40, 0x40);
+ if (sStorage->wallpaperLoadDir != 0)
+ LoadPalette(wallpaper->palettes, (sStorage->wallpaperOffset * 32) + 0x40, 0x40);
else
- CpuCopy16(wallpaperGfx->palettes, &gPlttBufferUnfaded[(sPSSData->field_2D2 * 32) + 0x40], 0x40);
+ CpuCopy16(wallpaper->palettes, &gPlttBufferUnfaded[(sStorage->wallpaperOffset * 32) + 0x40], 0x40);
- sPSSData->wallpaperTiles = malloc_and_decompress(wallpaperGfx->tiles, &size1);
- LoadBgTiles(2, sPSSData->wallpaperTiles, size1, sPSSData->field_2D2 << 8);
+ sStorage->wallpaperTiles = malloc_and_decompress(wallpaper->tiles, &tilesSize);
+ LoadBgTiles(2, sStorage->wallpaperTiles, tilesSize, sStorage->wallpaperOffset << 8);
}
else
{
- wallpaperGfx = &gFriendsWallpaperTable[GetWaldaWallpaperPatternId()];
- LZ77UnCompWram(wallpaperGfx->tileMap, sPSSData->field_792);
- sub_80CCA3C(sPSSData->field_792, sPSSData->field_6FB, sPSSData->field_2D2);
+ wallpaper = &sWaldaWallpapers[GetWaldaWallpaperPatternId()];
+ LZ77UnCompWram(wallpaper->tilemap, sStorage->wallpaperTilemap);
+ DrawWallpaper(sStorage->wallpaperTilemap, sStorage->wallpaperLoadDir, sStorage->wallpaperOffset);
- CpuCopy16(wallpaperGfx->palettes, sPSSData->field_792, 0x40);
- CpuCopy16(GetWaldaWallpaperColorsPtr(), &sPSSData->field_792[1], 4);
- CpuCopy16(GetWaldaWallpaperColorsPtr(), &sPSSData->field_792[17], 4);
+ CpuCopy16(wallpaper->palettes, sStorage->wallpaperTilemap, 0x40);
+ CpuCopy16(GetWaldaWallpaperColorsPtr(), &sStorage->wallpaperTilemap[1], 4);
+ CpuCopy16(GetWaldaWallpaperColorsPtr(), &sStorage->wallpaperTilemap[17], 4);
- if (sPSSData->field_6FB != 0)
- LoadPalette(sPSSData->field_792, (sPSSData->field_2D2 * 32) + 0x40, 0x40);
+ if (sStorage->wallpaperLoadDir != 0)
+ LoadPalette(sStorage->wallpaperTilemap, (sStorage->wallpaperOffset * 32) + 0x40, 0x40);
else
- CpuCopy16(sPSSData->field_792, &gPlttBufferUnfaded[(sPSSData->field_2D2 * 32) + 0x40], 0x40);
+ CpuCopy16(sStorage->wallpaperTilemap, &gPlttBufferUnfaded[(sStorage->wallpaperOffset * 32) + 0x40], 0x40);
- sPSSData->wallpaperTiles = malloc_and_decompress(wallpaperGfx->tiles, &size1);
- iconGfx = malloc_and_decompress(gFriendsIcons[GetWaldaWallpaperIconId()], &size2);
- CpuCopy32(iconGfx, sPSSData->wallpaperTiles + 0x800, size2);
+ sStorage->wallpaperTiles = malloc_and_decompress(wallpaper->tiles, &tilesSize);
+ iconGfx = malloc_and_decompress(sWaldaWallpaperIcons[GetWaldaWallpaperIconId()], &iconSize);
+ CpuCopy32(iconGfx, sStorage->wallpaperTiles + 0x800, iconSize);
Free(iconGfx);
- LoadBgTiles(2, sPSSData->wallpaperTiles, size1, sPSSData->field_2D2 << 8);
+ LoadBgTiles(2, sStorage->wallpaperTiles, tilesSize, sStorage->wallpaperOffset << 8);
}
CopyBgTilemapBufferToVram(2);
@@ -5444,20 +5429,18 @@ static bool32 WaitForWallpaperGfxLoad(void)
if (IsDma3ManagerBusyWithBgCopy())
return FALSE;
- if (sPSSData->wallpaperTiles != NULL)
- {
- Free(sPSSData->wallpaperTiles);
- sPSSData->wallpaperTiles = NULL;
- }
+ if (sStorage->wallpaperTiles != NULL)
+ FREE_AND_SET_NULL(sStorage->wallpaperTiles);
+
return TRUE;
}
-static void sub_80CCA3C(const void *tilemap, s8 direction, u8 arg2)
+static void DrawWallpaper(const void *tilemap, s8 direction, u8 offset)
{
- s16 var = (arg2 * 2) + 3;
- s16 x = ((sPSSData->bg2_X / 8 + 10) + (direction * 24)) & 0x3F;
+ s16 var = (offset * 2) + 3;
+ s16 x = ((sStorage->bg2_X / 8 + 10) + (direction * 24)) & 0x3F;
- CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, arg2 << 8, var);
+ CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, offset << 8, var);
if (direction == 0)
return;
@@ -5469,11 +5452,11 @@ static void sub_80CCA3C(const void *tilemap, s8 direction, u8 arg2)
FillBgTilemapBufferRect(2, 0, x, 2, 4, 0x12, 0x11);
}
-static void sub_80CCAE0(void *arg0)
+static void TrimOldWallpaper(void *tilemap)
{
u16 i;
- u16 *dest = arg0;
- s16 r3 = ((sPSSData->bg2_X / 8) + 30) & 0x3F;
+ u16 *dest = tilemap;
+ s16 r3 = ((sStorage->bg2_X / 8) + 30) & 0x3F;
if (r3 <= 31)
dest += r3 + 0x260;
@@ -5491,238 +5474,278 @@ static void sub_80CCAE0(void *arg0)
}
}
-static void sub_80CCB50(u8 boxId)
+
+//------------------------------------------------------------------------------
+// SECTION: Box Title
+//------------------------------------------------------------------------------
+
+
+static void InitBoxTitle(u8 boxId)
{
u8 tagIndex;
- s16 r6;
+ s16 x;
u16 i;
- struct SpriteSheet spriteSheet = {sPSSData->field_2F8, 0x200, TAG_TILE_3};
+ struct SpriteSheet spriteSheet = {sStorage->boxTitleTiles, 0x200, GFXTAG_BOX_TITLE};
struct SpritePalette palettes[] = {
- {sPSSData->field_6FC, TAG_PAL_DAC9},
+ {sStorage->boxTitlePal, PALTAG_BOX_TITLE},
{}
};
u16 wallpaperId = GetBoxWallpaper(boxId);
- sPSSData->field_6FC[14] = gUnknown_08577574[wallpaperId][0];
- sPSSData->field_6FC[15] = gUnknown_08577574[wallpaperId][1];
+ sStorage->boxTitlePal[14] = sBoxTitleColors[wallpaperId][0]; // Shadow color
+ sStorage->boxTitlePal[15] = sBoxTitleColors[wallpaperId][1]; // Text Color
LoadSpritePalettes(palettes);
- sPSSData->field_738 = 0x3f0;
-
- tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9);
- sPSSData->field_71C = 0x10e + 16 * tagIndex;
- sPSSData->field_738 |= 0x10000 << tagIndex;
-
- tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9);
- sPSSData->field_71E = 0x10e + 16 * tagIndex;
- sPSSData->field_738 |= 0x10000 << tagIndex;
-
- StringCopyPadded(sPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8);
- DrawTextWindowAndBufferTiles(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2);
+ sStorage->wallpaperPalBits = 0x3f0;
+
+ tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE);
+ sStorage->boxTitlePalOffset = 0x10e + 16 * tagIndex;
+ sStorage->wallpaperPalBits |= 0x10000 << tagIndex;
+
+ // The below seems intended to have separately tracked
+ // the incoming wallpaper title's palette, but as they now
+ // share a palette tag, all colors (and fields in some cases)
+ // this is redundant along with the use of boxTitleAltPalOffset
+ tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE);
+ sStorage->boxTitleAltPalOffset = 0x10e + 16 * tagIndex;
+ sStorage->wallpaperPalBits |= 0x10000 << tagIndex;
+
+ StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, 8);
+ DrawTextWindowAndBufferTiles(sStorage->boxTitleText, sStorage->boxTitleTiles, 0, 0, 2);
LoadSpriteSheet(&spriteSheet);
- r6 = sub_80CD00C(GetBoxNamePtr(boxId));
+ x = GetBoxTitleBaseX(GetBoxNamePtr(boxId));
+ // Title is split across two sprites
for (i = 0; i < 2; i++)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_857B0A8, r6 + i * 32, 28, 24);
- sPSSData->field_720[i] = &gSprites[spriteId];
- StartSpriteAnim(sPSSData->field_720[i], i);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_BoxTitle, x + i * 32, 28, 24);
+ sStorage->curBoxTitleSprites[i] = &gSprites[spriteId];
+ StartSpriteAnim(sStorage->curBoxTitleSprites[i], i);
}
- sPSSData->field_6F8 = 0;
+ sStorage->boxTitleCycleId = 0;
}
-static void sub_80CCCFC(u8 boxId, s8 direction)
+// Sprite data for moving title text
+#define sSpeed data[0]
+// Flipped between incoming/outgoing for some reason
+#define sIncomingX data[1]
+#define sIncomingDelay data[2]
+#define sOutgoingDelay data[1]
+#define sOutgoingX data[2]
+
+static void CreateIncomingBoxTitle(u8 boxId, s8 direction)
{
- u16 r8;
- s16 x, x2;
+ u16 palOffset;
+ s16 x, adjustedX;
u16 i;
- struct SpriteSheet spriteSheet = {sPSSData->field_2F8, 0x200, TAG_TILE_3};
- struct SpriteTemplate template = gSpriteTemplate_857B0A8;
+ struct SpriteSheet spriteSheet = {sStorage->boxTitleTiles, 0x200, GFXTAG_BOX_TITLE};
+ struct SpriteTemplate template = sSpriteTemplate_BoxTitle;
- sPSSData->field_6F8 = (sPSSData->field_6F8 == 0);
- if (sPSSData->field_6F8 == 0)
+ sStorage->boxTitleCycleId = (sStorage->boxTitleCycleId == 0);
+ if (sStorage->boxTitleCycleId == 0)
{
- spriteSheet.tag = TAG_TILE_3;
- r8 = sPSSData->field_71C;
+ spriteSheet.tag = GFXTAG_BOX_TITLE;
+ palOffset = sStorage->boxTitlePalOffset;
}
else
{
- spriteSheet.tag = TAG_TILE_4;
- r8 = sPSSData->field_71C;
- template.tileTag = TAG_TILE_4;
- template.paletteTag = TAG_PAL_DAC9;
+ spriteSheet.tag = GFXTAG_BOX_TITLE_ALT;
+ palOffset = sStorage->boxTitlePalOffset;
+ template.tileTag = GFXTAG_BOX_TITLE_ALT;
+ template.paletteTag = PALTAG_BOX_TITLE;
}
- StringCopyPadded(sPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8);
- DrawTextWindowAndBufferTiles(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2);
+ StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, 8);
+ DrawTextWindowAndBufferTiles(sStorage->boxTitleText, sStorage->boxTitleTiles, 0, 0, 2);
LoadSpriteSheet(&spriteSheet);
- LoadPalette(gUnknown_08577574[GetBoxWallpaper(boxId)], r8, 4);
- x = sub_80CD00C(GetBoxNamePtr(boxId));
- x2 = x;
- x2 += direction * 192;
+ LoadPalette(sBoxTitleColors[GetBoxWallpaper(boxId)], palOffset, sizeof(sBoxTitleColors[0]));
+ x = GetBoxTitleBaseX(GetBoxNamePtr(boxId));
+ adjustedX = x;
+ adjustedX += direction * 192;
+ // Title is split across two sprites
for (i = 0; i < 2; i++)
{
- u8 spriteId = CreateSprite(&template, i * 32 + x2, 28, 24);
+ u8 spriteId = CreateSprite(&template, i * 32 + adjustedX, 28, 24);
- sPSSData->field_728[i] = &gSprites[spriteId];
- sPSSData->field_728[i]->data[0] = (-direction) * 6;
- sPSSData->field_728[i]->data[1] = i * 32 + x;
- sPSSData->field_728[i]->data[2] = 0;
- sPSSData->field_728[i]->callback = sub_80CCF30;
- StartSpriteAnim(sPSSData->field_728[i], i);
+ sStorage->nextBoxTitleSprites[i] = &gSprites[spriteId];
+ sStorage->nextBoxTitleSprites[i]->sSpeed = (-direction) * 6;
+ sStorage->nextBoxTitleSprites[i]->sIncomingX = i * 32 + x;
+ sStorage->nextBoxTitleSprites[i]->sIncomingDelay = 0;
+ sStorage->nextBoxTitleSprites[i]->callback = SpriteCB_IncomingBoxTitle;
+ StartSpriteAnim(sStorage->nextBoxTitleSprites[i], i);
- sPSSData->field_720[i]->data[0] = (-direction) * 6;
- sPSSData->field_720[i]->data[1] = 1;
- sPSSData->field_720[i]->callback = sub_80CCF64;
+ sStorage->curBoxTitleSprites[i]->sSpeed = (-direction) * 6;
+ sStorage->curBoxTitleSprites[i]->sOutgoingDelay = 1;
+ sStorage->curBoxTitleSprites[i]->callback = SpriteCB_OutgoingBoxTitle;
}
}
-static void sub_80CCEE0(void)
+static void CycleBoxTitleSprites(void)
{
- if (sPSSData->field_6F8 == 0)
- FreeSpriteTilesByTag(TAG_TILE_4);
+ if (sStorage->boxTitleCycleId == 0)
+ FreeSpriteTilesByTag(GFXTAG_BOX_TITLE_ALT);
else
- FreeSpriteTilesByTag(TAG_TILE_3);
+ FreeSpriteTilesByTag(GFXTAG_BOX_TITLE);
- sPSSData->field_720[0] = sPSSData->field_728[0];
- sPSSData->field_720[1] = sPSSData->field_728[1];
+ sStorage->curBoxTitleSprites[0] = sStorage->nextBoxTitleSprites[0];
+ sStorage->curBoxTitleSprites[1] = sStorage->nextBoxTitleSprites[1];
}
-static void sub_80CCF30(struct Sprite *sprite)
+static void SpriteCB_IncomingBoxTitle(struct Sprite *sprite)
{
- if (sprite->data[2] != 0)
- sprite->data[2]--;
- else if ((sprite->pos1.x += sprite->data[0]) == sprite->data[1])
+ if (sprite->sIncomingDelay != 0)
+ sprite->sIncomingDelay--;
+ else if ((sprite->pos1.x += sprite->sSpeed) == sprite->sIncomingX)
sprite->callback = SpriteCallbackDummy;
}
-static void sub_80CCF64(struct Sprite *sprite)
+static void SpriteCB_OutgoingBoxTitle(struct Sprite *sprite)
{
- if (sprite->data[1] != 0)
+ if (sprite->sOutgoingDelay != 0)
{
- sprite->data[1]--;
+ sprite->sOutgoingDelay--;
}
else
{
- sprite->pos1.x += sprite->data[0];
- sprite->data[2] = sprite->pos1.x + sprite->pos2.x;
- if (sprite->data[2] < 0x40 || sprite->data[2] > 0x100)
+ sprite->pos1.x += sprite->sSpeed;
+ sprite->sOutgoingX = sprite->pos1.x + sprite->pos2.x;
+ if (sprite->sOutgoingX < 64 || sprite->sOutgoingX > DISPLAY_WIDTH + 16)
DestroySprite(sprite);
}
}
-static void sub_80CCF9C(void)
+#undef sSpeed
+#undef sIncomingX
+#undef sIncomingDelay
+#undef sOutgoingDelay
+#undef sOutgoingX
+
+static void CycleBoxTitleColor(void)
{
u8 boxId = StorageGetCurrentBox();
u8 wallpaperId = GetBoxWallpaper(boxId);
- if (sPSSData->field_6F8 == 0)
- CpuCopy16(gUnknown_08577574[wallpaperId], gPlttBufferUnfaded + sPSSData->field_71C, 4);
+ if (sStorage->boxTitleCycleId == 0)
+ CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + sStorage->boxTitlePalOffset, 4);
else
- CpuCopy16(gUnknown_08577574[wallpaperId], gPlttBufferUnfaded + sPSSData->field_71E, 4);
+ CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + sStorage->boxTitleAltPalOffset, 4);
}
-static s16 sub_80CD00C(const u8 *string)
+static s16 GetBoxTitleBaseX(const u8 *string)
{
- return 0xB0 - GetStringWidth(1, string, 0) / 2;
+ return DISPLAY_WIDTH - 64 - GetStringWidth(1, string, 0) / 2;
}
-static void sub_80CD02C(void)
+
+//------------------------------------------------------------------------------
+// SECTION: Scroll arrows
+//------------------------------------------------------------------------------
+
+
+// Sprite data for box scroll arrows
+#define sState data[0]
+#define sTimer data[1]
+#define sSpeed data[3]
+
+static void CreateBoxScrollArrows(void)
{
u16 i;
- LoadSpriteSheet(&gUnknown_0857B080);
+ LoadSpriteSheet(&sSpriteSheet_Arrow);
for (i = 0; i < 2; i++)
{
- u8 spriteId = CreateSprite(&gUnknown_0857B0E0, 0x5c + i * 0x88, 28, 22);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_Arrow, 92 + i * 136, 28, 22);
if (spriteId != MAX_SPRITES)
{
struct Sprite *sprite = &gSprites[spriteId];
StartSpriteAnim(sprite, i);
- sprite->data[3] = (i == 0) ? -1 : 1;
- sPSSData->field_730[i] = sprite;
+ sprite->sSpeed = (i == 0) ? -1 : 1;
+ sStorage->arrowSprites[i] = sprite;
}
}
- if (IsCursorOnBox())
- sub_80CD1A8(TRUE);
+ if (IsCursorOnBoxTitle())
+ AnimateBoxScrollArrows(TRUE);
}
-static void sub_80CD0B8(s8 direction)
+// Slide box scroll arrows horizontally for box change
+static void StartBoxScrollArrowsSlide(s8 direction)
{
u16 i;
for (i = 0; i < 2; i++)
{
- sPSSData->field_730[i]->pos2.x = 0;
- sPSSData->field_730[i]->data[0] = 2;
+ sStorage->arrowSprites[i]->pos2.x = 0;
+ sStorage->arrowSprites[i]->sState = 2;
}
if (direction < 0)
{
- sPSSData->field_730[0]->data[1] = 29;
- sPSSData->field_730[1]->data[1] = 5;
- sPSSData->field_730[0]->data[2] = 0x48;
- sPSSData->field_730[1]->data[2] = 0x48;
+ sStorage->arrowSprites[0]->sTimer = 29;
+ sStorage->arrowSprites[1]->sTimer = 5;
+ sStorage->arrowSprites[0]->data[2] = 72;
+ sStorage->arrowSprites[1]->data[2] = 72;
}
else
{
- sPSSData->field_730[0]->data[1] = 5;
- sPSSData->field_730[1]->data[1] = 29;
- sPSSData->field_730[0]->data[2] = 0xF8;
- sPSSData->field_730[1]->data[2] = 0xF8;
+ sStorage->arrowSprites[0]->sTimer = 5;
+ sStorage->arrowSprites[1]->sTimer = 29;
+ sStorage->arrowSprites[0]->data[2] = DISPLAY_WIDTH + 8;
+ sStorage->arrowSprites[1]->data[2] = DISPLAY_WIDTH + 8;
}
- sPSSData->field_730[0]->data[7] = 0;
- sPSSData->field_730[1]->data[7] = 1;
+ sStorage->arrowSprites[0]->data[7] = 0;
+ sStorage->arrowSprites[1]->data[7] = 1;
}
-static void sub_80CD158(void)
+// New box's scroll arrows have entered, stop sliding and set their position
+static void StopBoxScrollArrowsSlide(void)
{
u16 i;
for (i = 0; i < 2; i++)
{
- sPSSData->field_730[i]->pos1.x = 0x88 * i + 0x5c;
- sPSSData->field_730[i]->pos2.x = 0;
- sPSSData->field_730[i]->invisible = FALSE;
+ sStorage->arrowSprites[i]->pos1.x = 136 * i + 92;
+ sStorage->arrowSprites[i]->pos2.x = 0;
+ sStorage->arrowSprites[i]->invisible = FALSE;
}
- sub_80CD1A8(TRUE);
+ AnimateBoxScrollArrows(TRUE);
}
-static void sub_80CD1A8(bool8 a0)
+// Bounce scroll arrows while title is selected
+static void AnimateBoxScrollArrows(bool8 animate)
{
u16 i;
- if (a0)
+ if (animate)
{
+ // Start arrows moving
for (i = 0; i < 2; i++)
{
- sPSSData->field_730[i]->data[0] = 1;
- sPSSData->field_730[i]->data[1] = 0;
- sPSSData->field_730[i]->data[2] = 0;
- sPSSData->field_730[i]->data[4] = 0;
+ sStorage->arrowSprites[i]->sState = 1;
+ sStorage->arrowSprites[i]->sTimer = 0;
+ sStorage->arrowSprites[i]->data[2] = 0;
+ sStorage->arrowSprites[i]->data[4] = 0;
}
}
else
{
+ // Stop arrows moving
for (i = 0; i < 2; i++)
- {
- sPSSData->field_730[i]->data[0] = 0;
- }
+ sStorage->arrowSprites[i]->sState = 0;
}
}
-static void sub_80CD210(struct Sprite *sprite)
+static void SpriteCB_Arrow(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->pos2.x = 0;
break;
case 1:
- if (++sprite->data[1] > 3)
+ if (++sprite->sTimer > 3)
{
- sprite->data[1] = 0;
- sprite->pos2.x += sprite->data[3];
+ sprite->sTimer = 0;
+ sprite->pos2.x += sprite->sSpeed;
if (++sprite->data[2] > 5)
{
sprite->data[2] = 0;
@@ -5731,28 +5754,32 @@ static void sub_80CD210(struct Sprite *sprite)
}
break;
case 2:
- sprite->data[0] = 3;
+ sprite->sState = 3;
break;
case 3:
- sprite->pos1.x -= sPSSData->wallpaperScrollSpeed;
- if (sprite->pos1.x < 73 || sprite->pos1.x > 247)
+ sprite->pos1.x -= sStorage->scrollSpeed;
+ if (sprite->pos1.x <= 72 || sprite->pos1.x >= DISPLAY_WIDTH + 8)
sprite->invisible = TRUE;
- if (--sprite->data[1] == 0)
+ if (--sprite->sTimer == 0)
{
sprite->pos1.x = sprite->data[2];
sprite->invisible = FALSE;
- sprite->data[0] = 4;
+ sprite->sState = 4;
}
break;
case 4:
- sprite->pos1.x -= sPSSData->wallpaperScrollSpeed;
+ sprite->pos1.x -= sStorage->scrollSpeed;
break;
}
}
-static struct Sprite *sub_80CD2E8(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority)
+#undef sState
+#undef sSpeed
+
+// Arrows for Deposit/Jump Box selection
+static struct Sprite *CreateChooseBoxArrows(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority)
{
- u8 spriteId = CreateSprite(&gUnknown_0857B0E0, x, y, subpriority);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_Arrow, x, y, subpriority);
if (spriteId == MAX_SPRITES)
return NULL;
@@ -5763,299 +5790,320 @@ static struct Sprite *sub_80CD2E8(u16 x, u16 y, u8 animId, u8 priority, u8 subpr
return &gSprites[spriteId];
}
-static void sub_80CD36C(void)
+
+//------------------------------------------------------------------------------
+// SECTION: Cursor movement
+//
+// The functions below generally handle the cursor's movement, including
+// moving around the box and picking up/putting down Pokémon.
+//------------------------------------------------------------------------------
+
+
+static void InitCursor(void)
{
- if (sPSSData->boxOption != BOX_OPTION_DEPOSIT)
- sBoxCursorArea = CURSOR_AREA_IN_BOX;
+ if (sStorage->boxOption != OPTION_DEPOSIT)
+ sCursorArea = CURSOR_AREA_IN_BOX;
else
- sBoxCursorArea = CURSOR_AREA_IN_PARTY;
+ sCursorArea = CURSOR_AREA_IN_PARTY;
- sBoxCursorPosition = 0;
+ sCursorPosition = 0;
sIsMonBeingMoved = FALSE;
sMovingMonOrigBoxId = 0;
sMovingMonOrigBoxPos = 0;
- sCanOnlyMove = FALSE;
- sub_80CDC0C();
- sub_80CFC14();
- sPSSData->field_CD6 = 1;
- sPSSData->inBoxMovingMode = 0;
- sub_80CEB40();
+ sAutoActionOn = FALSE;
+ ClearSavedCursorPos();
+ CreateCursorSprites();
+ sStorage->cursorPrevHorizPos = 1;
+ sStorage->inBoxMovingMode = MOVE_MODE_NORMAL;
+ TryRefreshDisplayMon();
}
-static void sub_80CD3EC(void)
+static void InitCursorOnReopen(void)
{
- sub_80CFC14();
- sub_80CEBDC();
- sPSSData->field_CD6 = 1;
- sPSSData->inBoxMovingMode = 0;
+ CreateCursorSprites();
+ ReshowDisplayMon();
+ sStorage->cursorPrevHorizPos = 1;
+ sStorage->inBoxMovingMode = MOVE_MODE_NORMAL;
if (sIsMonBeingMoved)
{
- sPSSData->movingMon = gUnknown_02039D14;
+ sStorage->movingMon = sSavedMovingMon;
CreateMovingMonIcon();
}
}
-static void sub_80CD444(u8 cursorArea, u8 cursorPosition, u16 *x, u16 *y)
+static void GetCursorCoordsByPos(u8 cursorArea, u8 cursorPosition, u16 *x, u16 *y)
{
switch (cursorArea)
{
case CURSOR_AREA_IN_BOX:
- *x = (cursorPosition % IN_BOX_ROWS) * 24 + 100;
- *y = (cursorPosition / IN_BOX_ROWS) * 24 + 32;
+ *x = (cursorPosition % IN_BOX_COLUMNS) * 24 + 100;
+ *y = (cursorPosition / IN_BOX_COLUMNS) * 24 + 32;
break;
case CURSOR_AREA_IN_PARTY:
if (cursorPosition == 0)
{
- *x = 0x68;
- *y = 0x34;
+ *x = 104;
+ *y = 52;
}
else if (cursorPosition == PARTY_SIZE)
{
- *x = 0x98;
- *y = 0x84;
+ *x = 152;
+ *y = 132;
}
else
{
- *x = 0x98;
+ *x = 152;
*y = (cursorPosition - 1) * 24 + 4;
}
break;
- case CURSOR_AREA_BOX:
- *x = 0xa2;
- *y = 0x0c;
+ case CURSOR_AREA_BOX_TITLE:
+ *x = 162;
+ *y = 12;
break;
case CURSOR_AREA_BUTTONS:
*y = sIsMonBeingMoved ? 8 : 14;
- *x = cursorPosition * 0x58 + 0x78;
+ *x = cursorPosition * 88 + 120;
break;
case 4:
- *x = 0xa0;
- *y = 0x60;
+ *x = 160;
+ *y = 96;
break;
}
}
-static u16 sub_80CD504(void)
+static u16 GetSpeciesAtCursorPosition(void)
{
- switch (sBoxCursorArea)
+ switch (sCursorArea)
{
case CURSOR_AREA_IN_PARTY:
- return GetMonData(&gPlayerParty[sBoxCursorPosition], MON_DATA_SPECIES);
+ return GetMonData(&gPlayerParty[sCursorPosition], MON_DATA_SPECIES);
case CURSOR_AREA_IN_BOX:
- return GetCurrentBoxMonData(sBoxCursorPosition, MON_DATA_SPECIES);
+ return GetCurrentBoxMonData(sCursorPosition, MON_DATA_SPECIES);
default:
return SPECIES_NONE;
}
}
-static bool8 sub_80CD554(void)
+static bool8 UpdateCursorPos(void)
{
s16 tmp;
- if (sPSSData->field_CD0 == 0)
+ if (sStorage->cursorMoveSteps == 0)
{
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
return FALSE;
else
- return sub_80D1218();
+ return IsItemIconAnimActive();
}
- else if (--sPSSData->field_CD0 != 0)
+ else if (--sStorage->cursorMoveSteps != 0)
{
- sPSSData->field_CBC += sPSSData->field_CC4;
- sPSSData->field_CC0 += sPSSData->field_CC8;
- sPSSData->field_CB4->pos1.x = sPSSData->field_CBC >> 8;
- sPSSData->field_CB4->pos1.y = sPSSData->field_CC0 >> 8;
- if (sPSSData->field_CB4->pos1.x > 0x100)
+ // Update position toward target
+ sStorage->cursorNewX += sStorage->cursorSpeedX;
+ sStorage->cursorNewY += sStorage->cursorSpeedY;
+ sStorage->cursorSprite->pos1.x = sStorage->cursorNewX >> 8;
+ sStorage->cursorSprite->pos1.y = sStorage->cursorNewY >> 8;
+
+ // Limit cursor on right
+ if (sStorage->cursorSprite->pos1.x > DISPLAY_WIDTH + 16)
{
- tmp = sPSSData->field_CB4->pos1.x - 0x100;
- sPSSData->field_CB4->pos1.x = tmp + 0x40;
+ tmp = sStorage->cursorSprite->pos1.x - (DISPLAY_WIDTH + 16);
+ sStorage->cursorSprite->pos1.x = tmp + 64;
}
- if (sPSSData->field_CB4->pos1.x < 0x40)
+
+ // Limit cursor on left
+ if (sStorage->cursorSprite->pos1.x < 64)
{
- tmp = 0x40 - sPSSData->field_CB4->pos1.x;
- sPSSData->field_CB4->pos1.x = 0x100 - tmp;
+ tmp = 64 - sStorage->cursorSprite->pos1.x;
+ sStorage->cursorSprite->pos1.x = DISPLAY_WIDTH + 16 - tmp;
}
- if (sPSSData->field_CB4->pos1.y > 0xb0)
+
+ // Limit cursor on bottom
+ if (sStorage->cursorSprite->pos1.y > DISPLAY_HEIGHT + 16)
{
- tmp = sPSSData->field_CB4->pos1.y - 0xb0;
- sPSSData->field_CB4->pos1.y = tmp - 0x10;
+ tmp = sStorage->cursorSprite->pos1.y - (DISPLAY_HEIGHT + 16);
+ sStorage->cursorSprite->pos1.y = tmp - 16;
}
- if (sPSSData->field_CB4->pos1.y < -0x10)
+
+ // Limit cursor on top
+ if (sStorage->cursorSprite->pos1.y < -16)
{
- tmp = -0x10 - sPSSData->field_CB4->pos1.y;
- sPSSData->field_CB4->pos1.y = 0xb0 - tmp;
+ tmp = -16 - sStorage->cursorSprite->pos1.y;
+ sStorage->cursorSprite->pos1.y = DISPLAY_HEIGHT + 16 - tmp;
}
- if (sPSSData->field_CD7 && --sPSSData->field_CD7 == 0)
- sPSSData->field_CB4->vFlip = (sPSSData->field_CB4->vFlip == FALSE);
+
+ // Cursor flips vertically when moving on/off the top buttons
+ if (sStorage->cursorFlipTimer && --sStorage->cursorFlipTimer == 0)
+ sStorage->cursorSprite->vFlip = (sStorage->cursorSprite->vFlip == FALSE);
}
else
{
- sPSSData->field_CB4->pos1.x = sPSSData->field_CCC;
- sPSSData->field_CB4->pos1.y = sPSSData->field_CCE;
- sub_80CDA68();
+ // Time is up for cursor movement, make sure it's exactly at target
+ sStorage->cursorSprite->pos1.x = sStorage->cursorTargetX;
+ sStorage->cursorSprite->pos1.y = sStorage->cursorTargetY;
+ DoCursorNewPosUpdate();
}
return TRUE;
}
-static void sub_80CD6AC(u8 newCursorArea, u8 newCursorPosition)
+static void InitNewCursorPos(u8 newCursorArea, u8 newCursorPosition)
{
u16 x, y;
- sub_80CD444(newCursorArea, newCursorPosition, &x, &y);
- sPSSData->field_CD4 = newCursorArea;
- sPSSData->field_CD5 = newCursorPosition;
- sPSSData->field_CCC = x;
- sPSSData->field_CCE = y;
+ GetCursorCoordsByPos(newCursorArea, newCursorPosition, &x, &y);
+ sStorage->newCursorArea = newCursorArea;
+ sStorage->newCursorPosition = newCursorPosition;
+ sStorage->cursorTargetX = x;
+ sStorage->cursorTargetY = y;
}
-static void sub_80CD70C(void)
+static void InitCursorMove(void)
{
- int r7, r0;
+ int yDistance, xDistance;
- if (sPSSData->field_CD2 != 0 || sPSSData->field_CD3 != 0)
- sPSSData->field_CD0 = 12;
+ if (sStorage->cursorVerticalWrap != 0 || sStorage->cursorHorizontalWrap != 0)
+ sStorage->cursorMoveSteps = 12;
else
- sPSSData->field_CD0 = 6;
+ sStorage->cursorMoveSteps = 6;
- if (sPSSData->field_CD7)
- sPSSData->field_CD7 = sPSSData->field_CD0 >> 1;
+ if (sStorage->cursorFlipTimer)
+ sStorage->cursorFlipTimer = sStorage->cursorMoveSteps >> 1;
- switch (sPSSData->field_CD2)
+ switch (sStorage->cursorVerticalWrap)
{
- default:
- r7 = sPSSData->field_CCE - sPSSData->field_CB4->pos1.y;
+ default: // No wrap
+ yDistance = sStorage->cursorTargetY - sStorage->cursorSprite->pos1.y;
break;
- case -1:
- r7 = sPSSData->field_CCE - 0xc0 - sPSSData->field_CB4->pos1.y;
+ case -1: // Wrap from top to bottom
+ yDistance = sStorage->cursorTargetY - 192 - sStorage->cursorSprite->pos1.y;
break;
- case 1:
- r7 = sPSSData->field_CCE + 0xc0 - sPSSData->field_CB4->pos1.y;
+ case 1: // Wrap from bottom to top
+ yDistance = sStorage->cursorTargetY + 192 - sStorage->cursorSprite->pos1.y;
break;
}
- switch (sPSSData->field_CD3)
+ switch (sStorage->cursorHorizontalWrap)
{
- default:
- r0 = sPSSData->field_CCC - sPSSData->field_CB4->pos1.x;
+ default: // No Wrap
+ xDistance = sStorage->cursorTargetX - sStorage->cursorSprite->pos1.x;
break;
- case -1:
- r0 = sPSSData->field_CCC - 0xc0 - sPSSData->field_CB4->pos1.x;
+ case -1: // Wrap from left to right
+ xDistance = sStorage->cursorTargetX - 192 - sStorage->cursorSprite->pos1.x;
break;
- case 1:
- r0 = sPSSData->field_CCC + 0xc0 - sPSSData->field_CB4->pos1.x;
+ case 1: // Wrap from right to left
+ xDistance = sStorage->cursorTargetX + 192 - sStorage->cursorSprite->pos1.x;
break;
}
- r7 <<= 8;
- r0 <<= 8;
- sPSSData->field_CC4 = r0 / sPSSData->field_CD0;
- sPSSData->field_CC8 = r7 / sPSSData->field_CD0;
- sPSSData->field_CBC = sPSSData->field_CB4->pos1.x << 8;
- sPSSData->field_CC0 = sPSSData->field_CB4->pos1.y << 8;
+ yDistance <<= 8;
+ xDistance <<= 8;
+ sStorage->cursorSpeedX = xDistance / sStorage->cursorMoveSteps;
+ sStorage->cursorSpeedY = yDistance / sStorage->cursorMoveSteps;
+ sStorage->cursorNewX = sStorage->cursorSprite->pos1.x << 8;
+ sStorage->cursorNewY = sStorage->cursorSprite->pos1.y << 8;
}
-static void sub_80CD894(u8 newCursorArea, u8 newCursorPosition)
+static void SetCursorPosition(u8 newCursorArea, u8 newCursorPosition)
{
- sub_80CD6AC(newCursorArea, newCursorPosition);
- sub_80CD70C();
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ InitNewCursorPos(newCursorArea, newCursorPosition);
+ InitCursorMove();
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
{
- if (sPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved)
- StartSpriteAnim(sPSSData->field_CB4, 1);
+ if (sStorage->inBoxMovingMode == MOVE_MODE_NORMAL && !sIsMonBeingMoved)
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_STILL);
}
else
{
- if (!IsActiveItemMoving())
- StartSpriteAnim(sPSSData->field_CB4, 1);
+ if (!IsMovingItem())
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_STILL);
}
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
{
- if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
- sub_80D0E50(CURSOR_AREA_IN_BOX, sBoxCursorPosition);
- else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
- sub_80D0E50(CURSOR_AREA_IN_PARTY, sBoxCursorPosition);
+ if (sCursorArea == CURSOR_AREA_IN_BOX)
+ TryHideItemIconAtPos(CURSOR_AREA_IN_BOX, sCursorPosition);
+ else if (sCursorArea == CURSOR_AREA_IN_PARTY)
+ TryHideItemIconAtPos(CURSOR_AREA_IN_PARTY, sCursorPosition);
if (newCursorArea == CURSOR_AREA_IN_BOX)
- sub_80D0D8C(newCursorArea, newCursorPosition);
+ TryLoadItemIconAtPos(newCursorArea, newCursorPosition);
else if (newCursorArea == CURSOR_AREA_IN_PARTY)
- sub_80D0D8C(newCursorArea, newCursorPosition);
+ TryLoadItemIconAtPos(newCursorArea, newCursorPosition);
}
- if (newCursorArea == CURSOR_AREA_IN_PARTY && sBoxCursorArea != CURSOR_AREA_IN_PARTY)
+ if (newCursorArea == CURSOR_AREA_IN_PARTY && sCursorArea != CURSOR_AREA_IN_PARTY)
{
- sPSSData->field_CD6 = newCursorArea;
- sPSSData->field_CB8->invisible = TRUE;
+ sStorage->cursorPrevHorizPos = 1;
+ sStorage->cursorShadowSprite->invisible = TRUE;
}
switch (newCursorArea)
{
case CURSOR_AREA_IN_PARTY:
- case CURSOR_AREA_BOX:
+ case CURSOR_AREA_BOX_TITLE:
case CURSOR_AREA_BUTTONS:
- sPSSData->field_CB4->oam.priority = 1;
- sPSSData->field_CB8->invisible = TRUE;
- sPSSData->field_CB8->oam.priority = 1;
+ sStorage->cursorSprite->oam.priority = 1;
+ sStorage->cursorShadowSprite->invisible = TRUE;
+ sStorage->cursorShadowSprite->oam.priority = 1;
break;
case CURSOR_AREA_IN_BOX:
- if (sPSSData->inBoxMovingMode != 0)
+ if (sStorage->inBoxMovingMode != MOVE_MODE_NORMAL)
{
- sPSSData->field_CB4->oam.priority = 0;
- sPSSData->field_CB8->invisible = TRUE;
+ sStorage->cursorSprite->oam.priority = 0;
+ sStorage->cursorShadowSprite->invisible = TRUE;
}
else
{
- sPSSData->field_CB4->oam.priority = 2;
- if (sBoxCursorArea == CURSOR_AREA_IN_BOX && sIsMonBeingMoved)
+ sStorage->cursorSprite->oam.priority = 2;
+ if (sCursorArea == CURSOR_AREA_IN_BOX && sIsMonBeingMoved)
SetMovingMonPriority(2);
}
break;
}
}
-static void sub_80CDA68(void)
+static void DoCursorNewPosUpdate(void)
{
- sBoxCursorArea = sPSSData->field_CD4;
- sBoxCursorPosition = sPSSData->field_CD5;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ sCursorArea = sStorage->newCursorArea;
+ sCursorPosition = sStorage->newCursorPosition;
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
{
- if (sPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved)
- StartSpriteAnim(sPSSData->field_CB4, 0);
+ if (sStorage->inBoxMovingMode == MOVE_MODE_NORMAL && !sIsMonBeingMoved)
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_BOUNCE);
}
else
{
- if (!IsActiveItemMoving())
- StartSpriteAnim(sPSSData->field_CB4, 0);
+ if (!IsMovingItem())
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_BOUNCE);
}
- sub_80CEB40();
- switch (sBoxCursorArea)
+ TryRefreshDisplayMon();
+ switch (sCursorArea)
{
case CURSOR_AREA_BUTTONS:
SetMovingMonPriority(1);
break;
- case CURSOR_AREA_BOX:
- sub_80CD1A8(TRUE);
+ case CURSOR_AREA_BOX_TITLE:
+ AnimateBoxScrollArrows(TRUE);
break;
case CURSOR_AREA_IN_PARTY:
- sPSSData->field_CB8->subpriority = 13;
+ sStorage->cursorShadowSprite->subpriority = 13;
SetMovingMonPriority(1);
break;
case CURSOR_AREA_IN_BOX:
- if (sPSSData->inBoxMovingMode == 0)
+ if (sStorage->inBoxMovingMode == MOVE_MODE_NORMAL)
{
- sPSSData->field_CB4->oam.priority = 1;
- sPSSData->field_CB8->oam.priority = 2;
- sPSSData->field_CB8->subpriority = 21;
- sPSSData->field_CB8->invisible = FALSE;
+ sStorage->cursorSprite->oam.priority = 1;
+ sStorage->cursorShadowSprite->oam.priority = 2;
+ sStorage->cursorShadowSprite->subpriority = 21;
+ sStorage->cursorShadowSprite->invisible = FALSE;
SetMovingMonPriority(2);
}
break;
}
}
-static void sub_80CDBA0(void)
+static void SetCursorInParty(void)
{
u8 partyCount;
@@ -6069,82 +6117,84 @@ static void sub_80CDBA0(void)
if (partyCount >= PARTY_SIZE)
partyCount = PARTY_SIZE - 1;
}
- if (sPSSData->field_CB4->vFlip)
- sPSSData->field_CD7 = 1;
- sub_80CD894(CURSOR_AREA_IN_PARTY, partyCount);
+ if (sStorage->cursorSprite->vFlip)
+ sStorage->cursorFlipTimer = 1;
+ SetCursorPosition(CURSOR_AREA_IN_PARTY, partyCount);
}
-static void sub_80CDBF8(u8 cursorBoxPosition)
+static void SetCursorBoxPosition(u8 cursorBoxPosition)
{
- sub_80CD894(CURSOR_AREA_IN_BOX, cursorBoxPosition);
+ SetCursorPosition(CURSOR_AREA_IN_BOX, cursorBoxPosition);
}
-EWRAM_DATA static u8 gUnknown_02039D7E = 0;
+EWRAM_DATA static u8 sSavedCursorPosition = 0;
-static void sub_80CDC0C(void)
+static void ClearSavedCursorPos(void)
{
- gUnknown_02039D7E = 0;
+ sSavedCursorPosition = 0;
}
-static void sub_80CDC18(void)
+static void SaveCursorPos(void)
{
- gUnknown_02039D7E = sBoxCursorPosition;
+ sSavedCursorPosition = sCursorPosition;
}
-static u8 sub_80CDC2C(void)
+static u8 GetSavedCursorPos(void)
{
- return gUnknown_02039D7E;
+ return sSavedCursorPosition;
}
-static void InitMonPlaceChange(u8 a0)
+static void InitMonPlaceChange(u8 type)
{
static bool8 (*const placeChangeFuncs[])(void) =
{
- MonPlaceChange_Move,
- MonPlaceChange_Place,
- MonPlaceChange_Shift,
+ [CHANGE_GRAB] = MonPlaceChange_Grab,
+ [CHANGE_PLACE] = MonPlaceChange_Place,
+ [CHANGE_SHIFT] = MonPlaceChange_Shift,
};
- sPSSData->monPlaceChangeFunc = placeChangeFuncs[a0];
- sPSSData->monPlaceChangeState = 0;
+ sStorage->monPlaceChangeFunc = placeChangeFuncs[type];
+ sStorage->monPlaceChangeState = 0;
}
-static void sub_80CDC64(bool8 arg0)
+// No Shift while moving multiple Pokémon, only grab and place
+// For both grab/place, the cursor moves down, then up
+static void InitMultiMonPlaceChange(bool8 up)
{
- if (!arg0)
- sPSSData->monPlaceChangeFunc = sub_80CDEB4;
+ if (!up)
+ sStorage->monPlaceChangeFunc = MultiMonPlaceChange_Down;
else
- sPSSData->monPlaceChangeFunc = sub_80CDEC4;
+ sStorage->monPlaceChangeFunc = MultiMonPlaceChange_Up;
- sPSSData->monPlaceChangeState = 0;
+ sStorage->monPlaceChangeState = 0;
}
static bool8 DoMonPlaceChange(void)
{
- return sPSSData->monPlaceChangeFunc();
+ return sStorage->monPlaceChangeFunc();
}
-static bool8 MonPlaceChange_Move(void)
+static bool8 MonPlaceChange_Grab(void)
{
- switch (sPSSData->monPlaceChangeState)
+ switch (sStorage->monPlaceChangeState)
{
case 0:
if (sIsMonBeingMoved)
return FALSE;
- StartSpriteAnim(sPSSData->field_CB4, 2);
- sPSSData->monPlaceChangeState++;
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_OPEN);
+ sStorage->monPlaceChangeState++;
break;
case 1:
- if (!sub_80CDED4())
+ if (!MonPlaceChange_CursorDown())
{
- StartSpriteAnim(sPSSData->field_CB4, 3);
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_FIST);
MoveMon();
- sPSSData->monPlaceChangeState++;
+ sStorage->monPlaceChangeState++;
}
break;
case 2:
- if (!sub_80CDF08())
- sPSSData->monPlaceChangeState++;
+ if (!MonPlaceChange_CursorUp())
+ sStorage->monPlaceChangeState++;
break;
case 3:
return FALSE;
@@ -6155,21 +6205,21 @@ static bool8 MonPlaceChange_Move(void)
static bool8 MonPlaceChange_Place(void)
{
- switch (sPSSData->monPlaceChangeState)
+ switch (sStorage->monPlaceChangeState)
{
case 0:
- if (!sub_80CDED4())
+ if (!MonPlaceChange_CursorDown())
{
- StartSpriteAnim(sPSSData->field_CB4, 2);
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_OPEN);
PlaceMon();
- sPSSData->monPlaceChangeState++;
+ sStorage->monPlaceChangeState++;
}
break;
case 1:
- if (!sub_80CDF08())
+ if (!MonPlaceChange_CursorUp())
{
- StartSpriteAnim(sPSSData->field_CB4, 0);
- sPSSData->monPlaceChangeState++;
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_BOUNCE);
+ sStorage->monPlaceChangeState++;
}
break;
case 2:
@@ -6181,30 +6231,30 @@ static bool8 MonPlaceChange_Place(void)
static bool8 MonPlaceChange_Shift(void)
{
- switch (sPSSData->monPlaceChangeState)
+ switch (sStorage->monPlaceChangeState)
{
case 0:
- switch (sBoxCursorArea)
+ switch (sCursorArea)
{
case CURSOR_AREA_IN_PARTY:
- sPSSData->field_D91 = TOTAL_BOXES_COUNT;
+ sStorage->shiftBoxId = TOTAL_BOXES_COUNT;
break;
case CURSOR_AREA_IN_BOX:
- sPSSData->field_D91 = StorageGetCurrentBox();
+ sStorage->shiftBoxId = StorageGetCurrentBox();
break;
default:
return FALSE;
}
- StartSpriteAnim(sPSSData->field_CB4, 2);
- sub_80CBD5C(sPSSData->field_D91, sBoxCursorPosition);
- sPSSData->monPlaceChangeState++;
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_OPEN);
+ SaveMonSpriteAtPos(sStorage->shiftBoxId, sCursorPosition);
+ sStorage->monPlaceChangeState++;
break;
case 1:
- if (!sub_80CBDC4())
+ if (!MoveShiftingMons())
{
- StartSpriteAnim(sPSSData->field_CB4, 3);
- SetShiftedMonData(sPSSData->field_D91, sBoxCursorPosition);
- sPSSData->monPlaceChangeState++;
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_FIST);
+ SetShiftedMonData(sStorage->shiftBoxId, sCursorPosition);
+ sStorage->monPlaceChangeState++;
}
break;
case 2:
@@ -6214,60 +6264,70 @@ static bool8 MonPlaceChange_Shift(void)
return TRUE;
}
-static bool8 sub_80CDEB4(void)
+static bool8 MultiMonPlaceChange_Down(void)
{
- return sub_80CDED4();
+ return MonPlaceChange_CursorDown();
}
-static bool8 sub_80CDEC4(void)
+static bool8 MultiMonPlaceChange_Up(void)
{
- return sub_80CDF08();
+ return MonPlaceChange_CursorUp();
}
-static bool8 sub_80CDED4(void)
+static bool8 MonPlaceChange_CursorDown(void)
{
- switch (sPSSData->field_CB4->pos2.y)
+ switch (sStorage->cursorSprite->pos2.y)
{
default:
- sPSSData->field_CB4->pos2.y++;
+ sStorage->cursorSprite->pos2.y++;
break;
case 0:
- sPSSData->field_CB4->pos2.y++;
+ sStorage->cursorSprite->pos2.y++;
break;
- case 8:
+ case 8: // Cursor has reached bottom
return FALSE;
}
return TRUE;
}
-static bool8 sub_80CDF08(void)
+static bool8 MonPlaceChange_CursorUp(void)
{
- switch (sPSSData->field_CB4->pos2.y)
+ switch (sStorage->cursorSprite->pos2.y)
{
- case 0:
+ case 0: // Cursor has reached top
return FALSE;
default:
- sPSSData->field_CB4->pos2.y--;
+ sStorage->cursorSprite->pos2.y--;
break;
}
return TRUE;
}
+
+//------------------------------------------------------------------------------
+// SECTION: Pokémon data
+//
+// The functions below handle moving Pokémon data around while using the PC,
+// including changing the positions of Pokémon, releasing Pokémon, viewing the
+// summary screen, and updating the display of the currently selected Pokémon.
+//------------------------------------------------------------------------------
+
+
static void MoveMon(void)
{
- switch (sBoxCursorArea)
+ switch (sCursorArea)
{
case CURSOR_AREA_IN_PARTY:
- SetMovedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition);
- sub_80CBC14(MODE_PARTY, sBoxCursorPosition);
+ SetMovingMonData(TOTAL_BOXES_COUNT, sCursorPosition);
+ SetMovingMonSprite(MODE_PARTY, sCursorPosition);
break;
case CURSOR_AREA_IN_BOX:
- if (sPSSData->inBoxMovingMode == 0)
+ if (sStorage->inBoxMovingMode == MOVE_MODE_NORMAL)
{
- SetMovedMonData(StorageGetCurrentBox(), sBoxCursorPosition);
- sub_80CBC14(MODE_BOX, sBoxCursorPosition);
+ SetMovingMonData(StorageGetCurrentBox(), sCursorPosition);
+ SetMovingMonSprite(MODE_BOX, sCursorPosition);
}
break;
default:
@@ -6281,16 +6341,16 @@ static void PlaceMon(void)
{
u8 boxId;
- switch (sBoxCursorArea)
+ switch (sCursorArea)
{
case CURSOR_AREA_IN_PARTY:
- SetPlacedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition);
- sub_80CBCAC(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ SetPlacedMonData(TOTAL_BOXES_COUNT, sCursorPosition);
+ SetPlacedMonSprite(TOTAL_BOXES_COUNT, sCursorPosition);
break;
case CURSOR_AREA_IN_BOX:
boxId = StorageGetCurrentBox();
- SetPlacedMonData(boxId, sBoxCursorPosition);
- sub_80CBCAC(boxId, sBoxCursorPosition);
+ SetPlacedMonData(boxId, sCursorPosition);
+ SetPlacedMonSprite(boxId, sCursorPosition);
break;
default:
return;
@@ -6299,17 +6359,17 @@ static void PlaceMon(void)
sIsMonBeingMoved = FALSE;
}
-static void sub_80CE00C(void)
+static void RefreshDisplayMon(void)
{
- sub_80CEB40();
+ TryRefreshDisplayMon();
}
-static void SetMovedMonData(u8 boxId, u8 position)
+static void SetMovingMonData(u8 boxId, u8 position)
{
if (boxId == TOTAL_BOXES_COUNT)
- sPSSData->movingMon = gPlayerParty[sBoxCursorPosition];
+ sStorage->movingMon = gPlayerParty[sCursorPosition];
else
- BoxMonAtToMon(boxId, position, &sPSSData->movingMon);
+ BoxMonAtToMon(boxId, position, &sStorage->movingMon);
PurgeMonOrBoxMon(boxId, position);
sMovingMonOrigBoxId = boxId;
@@ -6320,12 +6380,12 @@ static void SetPlacedMonData(u8 boxId, u8 position)
{
if (boxId == TOTAL_BOXES_COUNT)
{
- gPlayerParty[position] = sPSSData->movingMon;
+ gPlayerParty[position] = sStorage->movingMon;
}
else
{
- BoxMonRestorePP(&sPSSData->movingMon.box);
- SetBoxMonAt(boxId, position, &sPSSData->movingMon.box);
+ BoxMonRestorePP(&sStorage->movingMon.box);
+ SetBoxMonAt(boxId, position, &sStorage->movingMon.box);
}
}
@@ -6340,13 +6400,13 @@ static void PurgeMonOrBoxMon(u8 boxId, u8 position)
static void SetShiftedMonData(u8 boxId, u8 position)
{
if (boxId == TOTAL_BOXES_COUNT)
- sPSSData->field_2108 = gPlayerParty[position];
+ sStorage->tempMon = gPlayerParty[position];
else
- BoxMonAtToMon(boxId, position, &sPSSData->field_2108);
+ BoxMonAtToMon(boxId, position, &sStorage->tempMon);
SetPlacedMonData(boxId, position);
- sPSSData->movingMon = sPSSData->field_2108;
- SetCursorMonData(&sPSSData->movingMon, MODE_PARTY);
+ sStorage->movingMon = sStorage->tempMon;
+ SetDisplayMonData(&sStorage->movingMon, MODE_PARTY);
sMovingMonOrigBoxId = boxId;
sMovingMonOrigBoxPos = position;
}
@@ -6365,44 +6425,44 @@ static bool8 TryStorePartyMonInBox(u8 boxId)
}
else
{
- SetMovedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ SetMovingMonData(TOTAL_BOXES_COUNT, sCursorPosition);
SetPlacedMonData(boxId, boxPosition);
- DestroyPartyMonIcon(sBoxCursorPosition);
+ DestroyPartyMonIcon(sCursorPosition);
}
if (boxId == StorageGetCurrentBox())
- sub_80CB140(boxPosition);
+ CreateBoxMonIconAtPos(boxPosition);
- StartSpriteAnim(sPSSData->field_CB4, 1);
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_STILL);
return TRUE;
}
-static void sub_80CE22C(void)
+static void ResetSelectionAfterDeposit(void)
{
- StartSpriteAnim(sPSSData->field_CB4, 0);
- sub_80CEB40();
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_BOUNCE);
+ TryRefreshDisplayMon();
}
-static void sub_80CE250(void)
+static void InitReleaseMon(void)
{
u8 mode;
if (sIsMonBeingMoved)
mode = MODE_MOVE;
- else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ else if (sCursorArea == CURSOR_AREA_IN_PARTY)
mode = MODE_PARTY;
else
mode = MODE_BOX;
- sub_80CBF14(mode, sBoxCursorPosition);
- StringCopy(sPSSData->field_21E0, sPSSData->cursorMonNick);
+ SetReleaseMon(mode, sCursorPosition);
+ StringCopy(sStorage->releaseMonName, sStorage->displayMonName);
}
-static bool8 sub_80CE2A8(void)
+static bool8 TryHideReleaseMon(void)
{
- if (!sub_80CBFD8())
+ if (!TryHideReleaseMonSprite())
{
- StartSpriteAnim(sPSSData->field_CB4, 0);
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_BOUNCE);
return FALSE;
}
else
@@ -6415,35 +6475,39 @@ static void ReleaseMon(void)
{
u8 boxId;
- sub_80CC020();
+ DestroyReleaseMonIcon();
if (sIsMonBeingMoved)
{
sIsMonBeingMoved = FALSE;
}
else
{
- if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ if (sCursorArea == CURSOR_AREA_IN_PARTY)
boxId = TOTAL_BOXES_COUNT;
else
boxId = StorageGetCurrentBox();
- PurgeMonOrBoxMon(boxId, sBoxCursorPosition);
+ PurgeMonOrBoxMon(boxId, sCursorPosition);
}
- sub_80CEB40();
+ TryRefreshDisplayMon();
}
-static void sub_80CE324(void)
+static void TrySetCursorFistAnim(void)
{
if (sIsMonBeingMoved)
- StartSpriteAnim(sPSSData->field_CB4, 3);
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_FIST);
}
+// If the player is on the listed map (or any map, if none is specified),
+// they may not release their last Pokémon that knows the specified move.
+// This is to stop the player from softlocking themselves by not having
+// a Pokémon that knows a required field move.
struct
{
s8 mapGroup;
s8 mapNum;
u16 move;
-} static const gUnknown_0857B9A4[] =
+} static const sRestrictedReleaseMoves[] =
{
{MAP_GROUPS_COUNT, 0, MOVE_SURF},
{MAP_GROUPS_COUNT, 0, MOVE_DIVE},
@@ -6453,73 +6517,79 @@ struct
{MAP_GROUP(EVER_GRANDE_CITY_POKEMON_LEAGUE_2F), MAP_NUM(EVER_GRANDE_CITY_POKEMON_LEAGUE_2F), MOVE_ROCK_SMASH},
};
-static void sub_80CE350(u16 *moves)
+static void GetRestrictedReleaseMoves(u16 *moves)
{
s32 i;
- for (i = 0; i < ARRAY_COUNT(gUnknown_0857B9A4); i++)
+ for (i = 0; i < ARRAY_COUNT(sRestrictedReleaseMoves); i++)
{
- if (gUnknown_0857B9A4[i].mapGroup == MAP_GROUPS_COUNT
- || (gUnknown_0857B9A4[i].mapGroup == gSaveBlock1Ptr->location.mapGroup && gUnknown_0857B9A4[i].mapNum == gSaveBlock1Ptr->location.mapNum))
+ if (sRestrictedReleaseMoves[i].mapGroup == MAP_GROUPS_COUNT
+ || (sRestrictedReleaseMoves[i].mapGroup == gSaveBlock1Ptr->location.mapGroup
+ && sRestrictedReleaseMoves[i].mapNum == gSaveBlock1Ptr->location.mapNum))
{
- *moves = gUnknown_0857B9A4[i].move;
+ *moves = sRestrictedReleaseMoves[i].move;
moves++;
}
}
-
*moves = MOVES_COUNT;
}
-static void InitCanRelaseMonVars(void)
+static void InitCanReleaseMonVars(void)
{
if (!AtLeastThreeUsableMons())
{
- sPSSData->field_216D = 1;
- sPSSData->field_216C = 0;
+ // The player only has 1 or 2 usable
+ // Pokémon, this one can't be released
+ sStorage->releaseStatusResolved = TRUE;
+ sStorage->canReleaseMon = FALSE;
return;
}
if (sIsMonBeingMoved)
{
- sPSSData->field_2108 = sPSSData->movingMon;
- sPSSData->field_2170 = -1;
- sPSSData->field_2171 = -1;
+ sStorage->tempMon = sStorage->movingMon;
+ sStorage->releaseBoxId = -1;
+ sStorage->releaseBoxPos = -1;
}
else
{
- if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ if (sCursorArea == CURSOR_AREA_IN_PARTY)
{
- sPSSData->field_2108 = gPlayerParty[sBoxCursorPosition];
- sPSSData->field_2170 = TOTAL_BOXES_COUNT;
+ sStorage->tempMon = gPlayerParty[sCursorPosition];
+ sStorage->releaseBoxId = TOTAL_BOXES_COUNT;
}
else
{
- BoxMonAtToMon(StorageGetCurrentBox(), sBoxCursorPosition, &sPSSData->field_2108);
- sPSSData->field_2170 = StorageGetCurrentBox();
+ BoxMonAtToMon(StorageGetCurrentBox(), sCursorPosition, &sStorage->tempMon);
+ sStorage->releaseBoxId = StorageGetCurrentBox();
}
- sPSSData->field_2171 = sBoxCursorPosition;
+ sStorage->releaseBoxPos = sCursorPosition;
}
- sub_80CE350(sPSSData->field_2176);
- sPSSData->field_2174 = GetMonData(&sPSSData->field_2108, MON_DATA_KNOWN_MOVES, (u8*)sPSSData->field_2176);
- if (sPSSData->field_2174 != 0)
+ GetRestrictedReleaseMoves(sStorage->restrictedMoveList);
+ sStorage->restrictedReleaseMonMoves = GetMonData(&sStorage->tempMon, MON_DATA_KNOWN_MOVES, (u8*)sStorage->restrictedMoveList);
+ if (sStorage->restrictedReleaseMonMoves != 0)
{
- sPSSData->field_216D = 0;
+ // Pokémon knows at least one restricted release move
+ // Need to check if another Pokémon has this move first
+ sStorage->releaseStatusResolved = FALSE;
}
else
{
- sPSSData->field_216D = 1;
- sPSSData->field_216C = 1;
+ // Pokémon knows no restricted moves, can be released
+ sStorage->releaseStatusResolved = TRUE;
+ sStorage->canReleaseMon = TRUE;
}
- sPSSData->field_2172 = 0;
+ sStorage->releaseCheckState = 0;
}
static bool32 AtLeastThreeUsableMons(void)
{
- s32 i, j, count;
-
- count = (sIsMonBeingMoved != FALSE);
+ s32 i, j;
+ s32 count = (sIsMonBeingMoved != FALSE);
+
+ // Check party for usable Pokémon
for (j = 0; j < PARTY_SIZE; j++)
{
if (GetMonData(&gPlayerParty[j], MON_DATA_SANITY_HAS_SPECIES))
@@ -6529,6 +6599,7 @@ static bool32 AtLeastThreeUsableMons(void)
if (count >= 3)
return TRUE;
+ // Check PC for usable Pokémon
for (i = 0; i < TOTAL_BOXES_COUNT; i++)
{
for (j = 0; j < IN_BOX_COUNT; j++)
@@ -6549,54 +6620,69 @@ static s8 RunCanReleaseMon(void)
u16 i;
u16 knownMoves;
- if (sPSSData->field_216D)
- return sPSSData->field_216C;
+ if (sStorage->releaseStatusResolved)
+ return sStorage->canReleaseMon;
- switch (sPSSData->field_2172)
+ switch (sStorage->releaseCheckState)
{
case 0:
+ // Check party for other Pokémon that know any restricted
+ // moves the release Pokémon knows
for (i = 0; i < PARTY_SIZE; i++)
{
- if (sPSSData->field_2170 != TOTAL_BOXES_COUNT || sPSSData->field_2171 != i)
+ // Make sure party Pokémon isn't the one we're releasing first
+ if (sStorage->releaseBoxId != TOTAL_BOXES_COUNT || sStorage->releaseBoxPos != i)
{
- knownMoves = GetMonData(gPlayerParty + i, MON_DATA_KNOWN_MOVES, (u8*)sPSSData->field_2176);
- sPSSData->field_2174 &= ~(knownMoves);
+ knownMoves = GetMonData(&gPlayerParty[i], MON_DATA_KNOWN_MOVES, (u8*)sStorage->restrictedMoveList);
+ sStorage->restrictedReleaseMonMoves &= ~(knownMoves);
}
}
- if (sPSSData->field_2174 == 0)
+ if (sStorage->restrictedReleaseMonMoves == 0)
{
- sPSSData->field_216D = 1;
- sPSSData->field_216C = 1;
+ // No restricted moves on release Pokémon that
+ // aren't resolved by the party, it can be released.
+ sStorage->releaseStatusResolved = TRUE;
+ sStorage->canReleaseMon = TRUE;
}
else
{
- sPSSData->field_216E = 0;
- sPSSData->field_216F = 0;
- sPSSData->field_2172++;
+ // Release Pokémon has restricted moves not resolved by the party.
+ // Continue and check the PC next
+ sStorage->releaseCheckBoxId = 0;
+ sStorage->releaseCheckBoxPos = 0;
+ sStorage->releaseCheckState++;
}
break;
case 1:
+ // Check PC for other Pokémon that know any restricted
+ // moves the release Pokémon knows
for (i = 0; i < IN_BOX_COUNT; i++)
{
- knownMoves = GetAndCopyBoxMonDataAt(sPSSData->field_216E, sPSSData->field_216F, MON_DATA_KNOWN_MOVES, (u8*)sPSSData->field_2176);
- if (knownMoves != 0
- && !(sPSSData->field_2170 == sPSSData->field_216E && sPSSData->field_2171 == sPSSData->field_216F))
+ knownMoves = GetAndCopyBoxMonDataAt(sStorage->releaseCheckBoxId, sStorage->releaseCheckBoxPos, MON_DATA_KNOWN_MOVES, (u8*)sStorage->restrictedMoveList);
+ if (knownMoves != 0 && !(sStorage->releaseBoxId == sStorage->releaseCheckBoxId
+ && sStorage->releaseBoxPos == sStorage->releaseCheckBoxPos))
{
- sPSSData->field_2174 &= ~(knownMoves);
- if (sPSSData->field_2174 == 0)
+ // Found PC Pokémon with restricted move, clear move from list
+ sStorage->restrictedReleaseMonMoves &= ~(knownMoves);
+ if (sStorage->restrictedReleaseMonMoves == 0)
{
- sPSSData->field_216D = 1;
- sPSSData->field_216C = 1;
+ // No restricted moves on release Pokémon that
+ // aren't resolved, it can be released.
+ sStorage->releaseStatusResolved = TRUE;
+ sStorage->canReleaseMon = TRUE;
break;
}
}
- if (++sPSSData->field_216F >= IN_BOX_COUNT)
+ if (++sStorage->releaseCheckBoxPos >= IN_BOX_COUNT)
{
- sPSSData->field_216F = 0;
- if (++sPSSData->field_216E >= TOTAL_BOXES_COUNT)
+ sStorage->releaseCheckBoxPos = 0;
+ if (++sStorage->releaseCheckBoxId >= TOTAL_BOXES_COUNT)
{
- sPSSData->field_216D = 1;
- sPSSData->field_216C = 0;
+ // Checked every Pokémon in the PC, release Pokémon is
+ // the sole owner of at least one restricted move.
+ // It cannot be released.
+ sStorage->releaseStatusResolved = TRUE;
+ sStorage->canReleaseMon = FALSE;
}
}
}
@@ -6606,55 +6692,57 @@ static s8 RunCanReleaseMon(void)
return -1;
}
-static void sub_80CE760(void)
+static void SaveMovingMon(void)
{
if (sIsMonBeingMoved)
- gUnknown_02039D14 = sPSSData->movingMon;
+ sSavedMovingMon = sStorage->movingMon;
}
-static void sub_80CE790(void)
+static void LoadSavedMovingMon(void)
{
if (sIsMonBeingMoved)
{
+ // If it came from the party load a struct Pokemon,
+ // otherwise load a BoxPokemon
if (sMovingMonOrigBoxId == TOTAL_BOXES_COUNT)
- sPSSData->movingMon = gUnknown_02039D14;
+ sStorage->movingMon = sSavedMovingMon;
else
- sPSSData->movingMon.box = gUnknown_02039D14.box;
+ sStorage->movingMon.box = sSavedMovingMon.box;
}
}
-static void sub_80CE7E8(void)
+static void InitSummaryScreenData(void)
{
if (sIsMonBeingMoved)
{
- sub_80CE760();
- sPSSData->field_218C.mon = &gUnknown_02039D14;
- sPSSData->field_2187 = 0;
- sPSSData->field_2186 = 0;
- sPSSData->pokemonSummaryScreenMode = PSS_MODE_NORMAL;
+ SaveMovingMon();
+ sStorage->summaryMon.mon = &sSavedMovingMon;
+ sStorage->summaryStartPos = 0;
+ sStorage->summaryMaxPos = 0;
+ sStorage->summaryScreenMode = SUMMARY_MODE_NORMAL;
}
- else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ else if (sCursorArea == CURSOR_AREA_IN_PARTY)
{
- sPSSData->field_218C.mon = gPlayerParty;
- sPSSData->field_2187 = sBoxCursorPosition;
- sPSSData->field_2186 = CountPartyMons() - 1;
- sPSSData->pokemonSummaryScreenMode = PSS_MODE_NORMAL;
+ sStorage->summaryMon.mon = gPlayerParty;
+ sStorage->summaryStartPos = sCursorPosition;
+ sStorage->summaryMaxPos = CountPartyMons() - 1;
+ sStorage->summaryScreenMode = SUMMARY_MODE_NORMAL;
}
else
{
- sPSSData->field_218C.box = GetBoxedMonPtr(StorageGetCurrentBox(), 0);
- sPSSData->field_2187 = sBoxCursorPosition;
- sPSSData->field_2186 = IN_BOX_COUNT - 1;
- sPSSData->pokemonSummaryScreenMode = PSS_MODE_BOX;
+ sStorage->summaryMon.box = GetBoxedMonPtr(StorageGetCurrentBox(), 0);
+ sStorage->summaryStartPos = sCursorPosition;
+ sStorage->summaryMaxPos = IN_BOX_COUNT - 1;
+ sStorage->summaryScreenMode = SUMMARY_MODE_BOX;
}
}
-static void sub_80CE8E4(void)
+static void SetSelectionAfterSummaryScreen(void)
{
if (sIsMonBeingMoved)
- sub_80CE790();
+ LoadSavedMovingMon();
else
- sBoxCursorPosition = gLastViewedMonIndex;
+ sCursorPosition = gLastViewedMonIndex;
}
s16 CompactPartySlots(void)
@@ -6664,7 +6752,7 @@ s16 CompactPartySlots(void)
for (i = 0, last = 0; i < PARTY_SIZE; i++)
{
- u16 species = GetMonData(gPlayerParty + i, MON_DATA_SPECIES);
+ u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
if (species != SPECIES_NONE)
{
if (i != last)
@@ -6677,30 +6765,30 @@ s16 CompactPartySlots(void)
}
}
for (; last < PARTY_SIZE; last++)
- ZeroMonData(gPlayerParty + last);
+ ZeroMonData(&gPlayerParty[last]);
return retVal;
}
static void SetMonMarkings(u8 markings)
{
- sPSSData->cursorMonMarkings = markings;
+ sStorage->displayMonMarkings = markings;
if (sIsMonBeingMoved)
{
- SetMonData(&sPSSData->movingMon, MON_DATA_MARKINGS, &markings);
+ SetMonData(&sStorage->movingMon, MON_DATA_MARKINGS, &markings);
}
else
{
- if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
- SetMonData(gPlayerParty + sBoxCursorPosition, MON_DATA_MARKINGS, &markings);
- if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
- SetCurrentBoxMonData(sBoxCursorPosition, MON_DATA_MARKINGS, &markings);
+ if (sCursorArea == CURSOR_AREA_IN_PARTY)
+ SetMonData(&gPlayerParty[sCursorPosition], MON_DATA_MARKINGS, &markings);
+ if (sCursorArea == CURSOR_AREA_IN_BOX)
+ SetCurrentBoxMonData(sCursorPosition, MON_DATA_MARKINGS, &markings);
}
}
-static bool8 CanMovePartyMon(void)
+static bool8 IsRemovingLastPartyMon(void)
{
- if (sBoxCursorArea == CURSOR_AREA_IN_PARTY && !sIsMonBeingMoved && CountPartyAliveNonEggMonsExcept(sBoxCursorPosition) == 0)
+ if (sCursorArea == CURSOR_AREA_IN_PARTY && !sIsMonBeingMoved && CountPartyAliveNonEggMonsExcept(sCursorPosition) == 0)
return TRUE;
else
return FALSE;
@@ -6710,9 +6798,9 @@ static bool8 CanShiftMon(void)
{
if (sIsMonBeingMoved)
{
- if (sBoxCursorArea == CURSOR_AREA_IN_PARTY && CountPartyAliveNonEggMonsExcept(sBoxCursorPosition) == 0)
+ if (sCursorArea == CURSOR_AREA_IN_PARTY && CountPartyAliveNonEggMonsExcept(sCursorPosition) == 0)
{
- if (sPSSData->cursorMonIsEgg || GetMonData(&sPSSData->movingMon, MON_DATA_HP) == 0)
+ if (sStorage->displayMonIsEgg || GetMonData(&sStorage->movingMon, MON_DATA_HP) == 0)
return FALSE;
}
return TRUE;
@@ -6725,148 +6813,152 @@ static bool8 IsMonBeingMoved(void)
return sIsMonBeingMoved;
}
-static bool8 IsCursorOnBox(void)
+static bool8 IsCursorOnBoxTitle(void)
{
- return (sBoxCursorArea == CURSOR_AREA_BOX);
+ return (sCursorArea == CURSOR_AREA_BOX_TITLE);
}
static bool8 IsCursorOnCloseBox(void)
{
- return (sBoxCursorArea == CURSOR_AREA_BUTTONS && sBoxCursorPosition == 1);
+ return (sCursorArea == CURSOR_AREA_BUTTONS && sCursorPosition == 1);
}
static bool8 IsCursorInBox(void)
{
- return (sBoxCursorArea == CURSOR_AREA_IN_BOX);
+ return (sCursorArea == CURSOR_AREA_IN_BOX);
}
-static void sub_80CEB40(void)
+static void TryRefreshDisplayMon(void)
{
- sPSSData->setMosaic = (sIsMonBeingMoved == FALSE);
+ // If a Pokémon is currently being moved, don't start
+ // mosaic or update display. Keep displaying the
+ // currently held Pokémon.
+ sStorage->setMosaic = (sIsMonBeingMoved == FALSE);
if (!sIsMonBeingMoved)
{
- switch (sBoxCursorArea)
+ // Update display Pokémon
+ switch (sCursorArea)
{
case CURSOR_AREA_IN_PARTY:
- if (sBoxCursorPosition < PARTY_SIZE)
+ if (sCursorPosition < PARTY_SIZE)
{
- SetCursorMonData(&gPlayerParty[sBoxCursorPosition], MODE_PARTY);
+ SetDisplayMonData(&gPlayerParty[sCursorPosition], MODE_PARTY);
break;
}
// fallthrough
case CURSOR_AREA_BUTTONS:
- case CURSOR_AREA_BOX:
- SetCursorMonData(NULL, MODE_MOVE);
+ case CURSOR_AREA_BOX_TITLE:
+ SetDisplayMonData(NULL, MODE_MOVE);
break;
case CURSOR_AREA_IN_BOX:
- SetCursorMonData(GetBoxedMonPtr(StorageGetCurrentBox(), sBoxCursorPosition), MODE_BOX);
+ SetDisplayMonData(GetBoxedMonPtr(StorageGetCurrentBox(), sCursorPosition), MODE_BOX);
break;
}
}
}
-static void sub_80CEBDC(void)
+static void ReshowDisplayMon(void)
{
if (sIsMonBeingMoved)
- SetCursorMonData(&gUnknown_02039D14, MODE_PARTY);
+ SetDisplayMonData(&sSavedMovingMon, MODE_PARTY);
else
- sub_80CEB40();
+ TryRefreshDisplayMon();
}
-static void SetCursorMonData(void *pokemon, u8 mode)
+static void SetDisplayMonData(void *pokemon, u8 mode)
{
u8 *txtPtr;
u16 gender;
bool8 sanityIsBadEgg;
- sPSSData->cursorMonItem = 0;
+ sStorage->displayMonItemId = ITEM_NONE;
gender = MON_MALE;
sanityIsBadEgg = FALSE;
if (mode == MODE_PARTY)
{
struct Pokemon *mon = (struct Pokemon *)pokemon;
- sPSSData->cursorMonSpecies = GetMonData(mon, MON_DATA_SPECIES2);
- if (sPSSData->cursorMonSpecies != SPECIES_NONE)
+ sStorage->displayMonSpecies = GetMonData(mon, MON_DATA_SPECIES2);
+ if (sStorage->displayMonSpecies != SPECIES_NONE)
{
sanityIsBadEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG);
if (sanityIsBadEgg)
- sPSSData->cursorMonIsEgg = TRUE;
+ sStorage->displayMonIsEgg = TRUE;
else
- sPSSData->cursorMonIsEgg = GetMonData(mon, MON_DATA_IS_EGG);
-
- GetMonData(mon, MON_DATA_NICKNAME, sPSSData->cursorMonNick);
- StringGetEnd10(sPSSData->cursorMonNick);
- sPSSData->cursorMonLevel = GetMonData(mon, MON_DATA_LEVEL);
- sPSSData->cursorMonMarkings = GetMonData(mon, MON_DATA_MARKINGS);
- sPSSData->cursorMonPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
- sPSSData->cursorMonPalette = GetMonFrontSpritePal(mon);
+ sStorage->displayMonIsEgg = GetMonData(mon, MON_DATA_IS_EGG);
+
+ GetMonData(mon, MON_DATA_NICKNAME, sStorage->displayMonName);
+ StringGetEnd10(sStorage->displayMonName);
+ sStorage->displayMonLevel = GetMonData(mon, MON_DATA_LEVEL);
+ sStorage->displayMonMarkings = GetMonData(mon, MON_DATA_MARKINGS);
+ sStorage->displayMonPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
+ sStorage->displayMonPalette = GetMonFrontSpritePal(mon);
gender = GetMonGender(mon);
- sPSSData->cursorMonItem = GetMonData(mon, MON_DATA_HELD_ITEM);
+ sStorage->displayMonItemId = GetMonData(mon, MON_DATA_HELD_ITEM);
}
}
else if (mode == MODE_BOX)
{
struct BoxPokemon *boxMon = (struct BoxPokemon *)pokemon;
- sPSSData->cursorMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES2);
- if (sPSSData->cursorMonSpecies != SPECIES_NONE)
+ sStorage->displayMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES2);
+ if (sStorage->displayMonSpecies != SPECIES_NONE)
{
u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID);
sanityIsBadEgg = GetBoxMonData(boxMon, MON_DATA_SANITY_IS_BAD_EGG);
if (sanityIsBadEgg)
- sPSSData->cursorMonIsEgg = TRUE;
+ sStorage->displayMonIsEgg = TRUE;
else
- sPSSData->cursorMonIsEgg = GetBoxMonData(boxMon, MON_DATA_IS_EGG);
+ sStorage->displayMonIsEgg = GetBoxMonData(boxMon, MON_DATA_IS_EGG);
- GetBoxMonData(boxMon, MON_DATA_NICKNAME, sPSSData->cursorMonNick);
- StringGetEnd10(sPSSData->cursorMonNick);
- sPSSData->cursorMonLevel = GetLevelFromBoxMonExp(boxMon);
- sPSSData->cursorMonMarkings = GetBoxMonData(boxMon, MON_DATA_MARKINGS);
- sPSSData->cursorMonPersonality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY);
- sPSSData->cursorMonPalette = GetMonSpritePalFromSpeciesAndPersonality(sPSSData->cursorMonSpecies, otId, sPSSData->cursorMonPersonality);
- gender = GetGenderFromSpeciesAndPersonality(sPSSData->cursorMonSpecies, sPSSData->cursorMonPersonality);
- sPSSData->cursorMonItem = GetBoxMonData(boxMon, MON_DATA_HELD_ITEM);
+ GetBoxMonData(boxMon, MON_DATA_NICKNAME, sStorage->displayMonName);
+ StringGetEnd10(sStorage->displayMonName);
+ sStorage->displayMonLevel = GetLevelFromBoxMonExp(boxMon);
+ sStorage->displayMonMarkings = GetBoxMonData(boxMon, MON_DATA_MARKINGS);
+ sStorage->displayMonPersonality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY);
+ sStorage->displayMonPalette = GetMonSpritePalFromSpeciesAndPersonality(sStorage->displayMonSpecies, otId, sStorage->displayMonPersonality);
+ gender = GetGenderFromSpeciesAndPersonality(sStorage->displayMonSpecies, sStorage->displayMonPersonality);
+ sStorage->displayMonItemId = GetBoxMonData(boxMon, MON_DATA_HELD_ITEM);
}
}
else
{
- sPSSData->cursorMonSpecies = SPECIES_NONE;
- sPSSData->cursorMonItem = 0;
+ sStorage->displayMonSpecies = SPECIES_NONE;
+ sStorage->displayMonItemId = ITEM_NONE;
}
- if (sPSSData->cursorMonSpecies == SPECIES_NONE)
+ if (sStorage->displayMonSpecies == SPECIES_NONE)
{
- StringFill(sPSSData->cursorMonNick, CHAR_SPACE, 5);
- StringFill(sPSSData->cursorMonNickText, CHAR_SPACE, 8);
- StringFill(sPSSData->cursorMonSpeciesName, CHAR_SPACE, 8);
- StringFill(sPSSData->cursorMonGenderLvlText, CHAR_SPACE, 8);
- StringFill(sPSSData->cursorMonItemName, CHAR_SPACE, 8);
+ StringFill(sStorage->displayMonName, CHAR_SPACE, 5);
+ StringFill(sStorage->displayMonNameText, CHAR_SPACE, 8);
+ StringFill(sStorage->displayMonSpeciesName, CHAR_SPACE, 8);
+ StringFill(sStorage->displayMonGenderLvlText, CHAR_SPACE, 8);
+ StringFill(sStorage->displayMonItemName, CHAR_SPACE, 8);
}
- else if (sPSSData->cursorMonIsEgg)
+ else if (sStorage->displayMonIsEgg)
{
if (sanityIsBadEgg)
- StringCopyPadded(sPSSData->cursorMonNickText, sPSSData->cursorMonNick, CHAR_SPACE, 5);
+ StringCopyPadded(sStorage->displayMonNameText, sStorage->displayMonName, CHAR_SPACE, 5);
else
- StringCopyPadded(sPSSData->cursorMonNickText, gText_EggNickname, CHAR_SPACE, 8);
+ StringCopyPadded(sStorage->displayMonNameText, gText_EggNickname, CHAR_SPACE, 8);
- StringFill(sPSSData->cursorMonSpeciesName, CHAR_SPACE, 8);
- StringFill(sPSSData->cursorMonGenderLvlText, CHAR_SPACE, 8);
- StringFill(sPSSData->cursorMonItemName, CHAR_SPACE, 8);
+ StringFill(sStorage->displayMonSpeciesName, CHAR_SPACE, 8);
+ StringFill(sStorage->displayMonGenderLvlText, CHAR_SPACE, 8);
+ StringFill(sStorage->displayMonItemName, CHAR_SPACE, 8);
}
else
{
- if (sPSSData->cursorMonSpecies == SPECIES_NIDORAN_F || sPSSData->cursorMonSpecies == SPECIES_NIDORAN_M)
+ if (sStorage->displayMonSpecies == SPECIES_NIDORAN_F || sStorage->displayMonSpecies == SPECIES_NIDORAN_M)
gender = MON_GENDERLESS;
- StringCopyPadded(sPSSData->cursorMonNickText, sPSSData->cursorMonNick, CHAR_SPACE, 5);
+ StringCopyPadded(sStorage->displayMonNameText, sStorage->displayMonName, CHAR_SPACE, 5);
- txtPtr = sPSSData->cursorMonSpeciesName;
+ txtPtr = sStorage->displayMonSpeciesName;
*(txtPtr)++ = CHAR_SLASH;
- StringCopyPadded(txtPtr, gSpeciesNames[sPSSData->cursorMonSpecies], CHAR_SPACE, 5);
+ StringCopyPadded(txtPtr, gSpeciesNames[sStorage->displayMonSpecies], CHAR_SPACE, 5);
- txtPtr = sPSSData->cursorMonGenderLvlText;
+ txtPtr = sStorage->displayMonGenderLvlText;
*(txtPtr)++ = EXT_CTRL_CODE_BEGIN;
*(txtPtr)++ = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
switch (gender)
@@ -6887,7 +6979,7 @@ static void SetCursorMonData(void *pokemon, u8 mode)
*(txtPtr)++ = TEXT_COLOR_DARK_GRAY;
*(txtPtr)++ = TEXT_COLOR_WHITE;
*(txtPtr)++ = TEXT_COLOR_LIGHT_GRAY;
- *(txtPtr)++ = CHAR_UNK_SPACER;
+ *(txtPtr)++ = CHAR_GENDERLESS;
break;
}
@@ -6900,27 +6992,35 @@ static void SetCursorMonData(void *pokemon, u8 mode)
*(txtPtr++) = CHAR_EXTRA_SYMBOL;
*(txtPtr++) = CHAR_LV_2;
- txtPtr = ConvertIntToDecimalStringN(txtPtr, sPSSData->cursorMonLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, sStorage->displayMonLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
txtPtr[0] = CHAR_SPACE;
txtPtr[1] = EOS;
- if (sPSSData->cursorMonItem != 0)
- StringCopyPadded(sPSSData->cursorMonItemName, ItemId_GetName(sPSSData->cursorMonItem), CHAR_SPACE, 8);
+ if (sStorage->displayMonItemId != ITEM_NONE)
+ StringCopyPadded(sStorage->displayMonItemName, ItemId_GetName(sStorage->displayMonItemId), CHAR_SPACE, 8);
else
- StringFill(sPSSData->cursorMonItemName, CHAR_SPACE, 8);
+ StringFill(sStorage->displayMonItemName, CHAR_SPACE, 8);
}
}
+
+//------------------------------------------------------------------------------
+// SECTION: Input handlers
+//
+// The functions below process context-dependent input
+//------------------------------------------------------------------------------
+
+
static u8 HandleInput_InBox(void)
{
- switch (sPSSData->inBoxMovingMode)
+ switch (sStorage->inBoxMovingMode)
{
- case 0:
+ case MOVE_MODE_NORMAL:
default:
return InBoxInput_Normal();
- case 1:
- return InBoxInput_GrabbingMultiple();
- case 2:
+ case MOVE_MODE_MULTIPLE_SELECTING:
+ return InBoxInput_SelectingMultiple();
+ case MOVE_MODE_MULTIPLE_MOVING:
return InBoxInput_MovingMultiple();
}
}
@@ -6933,208 +7033,209 @@ static u8 InBoxInput_Normal(void)
do
{
- cursorArea = sBoxCursorArea;
- cursorPosition = sBoxCursorPosition;
- sPSSData->field_CD2 = 0;
- sPSSData->field_CD3 = 0;
- sPSSData->field_CD7 = 0;
+ cursorArea = sCursorArea;
+ cursorPosition = sCursorPosition;
+ sStorage->cursorVerticalWrap = 0;
+ sStorage->cursorHorizontalWrap = 0;
+ sStorage->cursorFlipTimer = 0;
if (JOY_REPEAT(DPAD_UP))
{
- retVal = TRUE;
- if (sBoxCursorPosition >= IN_BOX_ROWS)
+ retVal = INPUT_MOVE_CURSOR;
+ if (sCursorPosition >= IN_BOX_COLUMNS)
{
- cursorPosition -= IN_BOX_ROWS;
+ cursorPosition -= IN_BOX_COLUMNS;
}
else
{
- cursorArea = CURSOR_AREA_BOX;
+ cursorArea = CURSOR_AREA_BOX_TITLE;
cursorPosition = 0;
}
break;
}
else if (JOY_REPEAT(DPAD_DOWN))
{
- retVal = TRUE;
- cursorPosition += IN_BOX_ROWS;
+ retVal = INPUT_MOVE_CURSOR;
+ cursorPosition += IN_BOX_COLUMNS;
if (cursorPosition >= IN_BOX_COUNT)
{
cursorArea = CURSOR_AREA_BUTTONS;
cursorPosition -= IN_BOX_COUNT;
cursorPosition /= 3;
- sPSSData->field_CD2 = 1;
- sPSSData->field_CD7 = 1;
+ sStorage->cursorVerticalWrap = 1;
+ sStorage->cursorFlipTimer = 1;
}
break;
}
else if (JOY_REPEAT(DPAD_LEFT))
{
- retVal = TRUE;
- if (sBoxCursorPosition % IN_BOX_ROWS != 0)
+ retVal = INPUT_MOVE_CURSOR;
+ if (sCursorPosition % IN_BOX_COLUMNS != 0)
{
cursorPosition--;
}
else
{
- sPSSData->field_CD3 = -1;
- cursorPosition += (IN_BOX_ROWS - 1);
+ sStorage->cursorHorizontalWrap = -1;
+ cursorPosition += (IN_BOX_COLUMNS - 1);
}
break;
}
else if (JOY_REPEAT(DPAD_RIGHT))
{
- retVal = TRUE;
- if ((sBoxCursorPosition + 1) % IN_BOX_ROWS != 0)
+ retVal = INPUT_MOVE_CURSOR;
+ if ((sCursorPosition + 1) % IN_BOX_COLUMNS != 0)
{
cursorPosition++;
}
else
{
- sPSSData->field_CD3 = 1;
- cursorPosition -= (IN_BOX_ROWS - 1);
+ sStorage->cursorHorizontalWrap = 1;
+ cursorPosition -= (IN_BOX_COLUMNS - 1);
}
break;
}
else if (JOY_NEW(START_BUTTON))
{
- retVal = TRUE;
- cursorArea = CURSOR_AREA_BOX;
+ retVal = INPUT_MOVE_CURSOR;
+ cursorArea = CURSOR_AREA_BOX_TITLE;
cursorPosition = 0;
break;
}
- if ((JOY_NEW(A_BUTTON)) && sub_80CFA5C())
+ if ((JOY_NEW(A_BUTTON)) && SetSelectionMenuTexts())
{
- if (!sCanOnlyMove)
- return 8;
+ if (!sAutoActionOn)
+ return INPUT_IN_MENU;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_MONS || sIsMonBeingMoved == TRUE)
+ if (sStorage->boxOption != OPTION_MOVE_MONS || sIsMonBeingMoved == TRUE)
{
- switch (sub_80CFF98(0))
+ switch (GetMenuItemTextId(0))
{
- case 1:
- return 11;
- case 2:
- return 12;
- case 3:
- return 13;
- case 4:
- return 14;
- case 5:
- return 15;
- case 12:
- return 16;
- case 13:
- return 17;
- case 15:
- return 18;
+ case MENU_STORE:
+ return INPUT_DEPOSIT;
+ case MENU_WITHDRAW:
+ return INPUT_WITHDRAW;
+ case MENU_MOVE:
+ return INPUT_MOVE_MON;
+ case MENU_SHIFT:
+ return INPUT_SHIFT_MON;
+ case MENU_PLACE:
+ return INPUT_PLACE_MON;
+ case MENU_TAKE:
+ return INPUT_TAKE_ITEM;
+ case MENU_GIVE:
+ return INPUT_GIVE_ITEM;
+ case MENU_SWITCH:
+ return INPUT_SWITCH_ITEMS;
}
}
else
{
- sPSSData->inBoxMovingMode = 1;
- return 20;
+ sStorage->inBoxMovingMode = MOVE_MODE_MULTIPLE_SELECTING;
+ return INPUT_MULTIMOVE_START;
}
}
if (JOY_NEW(B_BUTTON))
- return 19;
+ return INPUT_PRESSED_B;
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
{
if (JOY_HELD(L_BUTTON))
- return 10;
+ return INPUT_SCROLL_LEFT;
if (JOY_HELD(R_BUTTON))
- return 9;
+ return INPUT_SCROLL_RIGHT;
}
if (JOY_NEW(SELECT_BUTTON))
{
- sub_80CFDC4();
- return 0;
+ ToggleCursorAutoAction();
+ return INPUT_NONE;
}
- retVal = 0;
+ retVal = INPUT_NONE;
} while (0);
if (retVal)
- sub_80CD894(cursorArea, cursorPosition);
+ SetCursorPosition(cursorArea, cursorPosition);
return retVal;
}
-static u8 InBoxInput_GrabbingMultiple(void)
+static u8 InBoxInput_SelectingMultiple(void)
{
if (JOY_HELD(A_BUTTON))
{
if (JOY_REPEAT(DPAD_UP))
{
- if (sBoxCursorPosition / IN_BOX_ROWS != 0)
+ if (sCursorPosition / IN_BOX_COLUMNS != 0)
{
- sub_80CD894(CURSOR_AREA_IN_BOX, sBoxCursorPosition - IN_BOX_ROWS);
- return 21;
+ SetCursorPosition(CURSOR_AREA_IN_BOX, sCursorPosition - IN_BOX_COLUMNS);
+ return INPUT_MULTIMOVE_CHANGE_SELECTION;
}
else
{
- return 24;
+ return INPUT_MULTIMOVE_UNABLE;
}
}
else if (JOY_REPEAT(DPAD_DOWN))
{
- if (sBoxCursorPosition + IN_BOX_ROWS < IN_BOX_COUNT)
+ if (sCursorPosition + IN_BOX_COLUMNS < IN_BOX_COUNT)
{
- sub_80CD894(CURSOR_AREA_IN_BOX, sBoxCursorPosition + IN_BOX_ROWS);
- return 21;
+ SetCursorPosition(CURSOR_AREA_IN_BOX, sCursorPosition + IN_BOX_COLUMNS);
+ return INPUT_MULTIMOVE_CHANGE_SELECTION;
}
else
{
- return 24;
+ return INPUT_MULTIMOVE_UNABLE;
}
}
else if (JOY_REPEAT(DPAD_LEFT))
{
- if (sBoxCursorPosition % IN_BOX_ROWS != 0)
+ if (sCursorPosition % IN_BOX_COLUMNS != 0)
{
- sub_80CD894(CURSOR_AREA_IN_BOX, sBoxCursorPosition - 1);
- return 21;
+ SetCursorPosition(CURSOR_AREA_IN_BOX, sCursorPosition - 1);
+ return INPUT_MULTIMOVE_CHANGE_SELECTION;
}
else
{
- return 24;
+ return INPUT_MULTIMOVE_UNABLE;
}
}
else if (JOY_REPEAT(DPAD_RIGHT))
{
- if ((sBoxCursorPosition + 1) % IN_BOX_ROWS != 0)
+ if ((sCursorPosition + 1) % IN_BOX_COLUMNS != 0)
{
- sub_80CD894(CURSOR_AREA_IN_BOX, sBoxCursorPosition + 1);
- return 21;
+ SetCursorPosition(CURSOR_AREA_IN_BOX, sCursorPosition + 1);
+ return INPUT_MULTIMOVE_CHANGE_SELECTION;
}
else
{
- return 24;
+ return INPUT_MULTIMOVE_UNABLE;
}
}
else
{
- return 0;
+ return INPUT_NONE;
}
}
else
{
- if (sub_80D0BA4() == sBoxCursorPosition)
+ if (MultiMove_GetOrigin() == sCursorPosition)
{
- sPSSData->inBoxMovingMode = 0;
- sPSSData->field_CB8->invisible = FALSE;
- return 22;
+ // Doing a multiple mon selection but only chose 1 mon
+ sStorage->inBoxMovingMode = MOVE_MODE_NORMAL;
+ sStorage->cursorShadowSprite->invisible = FALSE;
+ return INPUT_MULTIMOVE_SINGLE;
}
else
{
- sIsMonBeingMoved = (sPSSData->cursorMonSpecies != SPECIES_NONE);
- sPSSData->inBoxMovingMode = 2;
+ sIsMonBeingMoved = (sStorage->displayMonSpecies != SPECIES_NONE);
+ sStorage->inBoxMovingMode = MOVE_MODE_MULTIPLE_MOVING;
sMovingMonOrigBoxId = StorageGetCurrentBox();
- return 23;
+ return INPUT_MULTIMOVE_GRAB_SELECTION;
}
}
}
@@ -7143,80 +7244,80 @@ static u8 InBoxInput_MovingMultiple(void)
{
if (JOY_REPEAT(DPAD_UP))
{
- if (sub_80D0580(0))
+ if (MultiMove_TryMoveGroup(0))
{
- sub_80CD894(CURSOR_AREA_IN_BOX, sBoxCursorPosition - IN_BOX_ROWS);
- return 25;
+ SetCursorPosition(CURSOR_AREA_IN_BOX, sCursorPosition - IN_BOX_COLUMNS);
+ return INPUT_MULTIMOVE_MOVE_MONS;
}
else
{
- return 24;
+ return INPUT_MULTIMOVE_UNABLE;
}
}
else if (JOY_REPEAT(DPAD_DOWN))
{
- if (sub_80D0580(1))
+ if (MultiMove_TryMoveGroup(1))
{
- sub_80CD894(CURSOR_AREA_IN_BOX, sBoxCursorPosition + IN_BOX_ROWS);
- return 25;
+ SetCursorPosition(CURSOR_AREA_IN_BOX, sCursorPosition + IN_BOX_COLUMNS);
+ return INPUT_MULTIMOVE_MOVE_MONS;
}
else
{
- return 24;
+ return INPUT_MULTIMOVE_UNABLE;
}
}
else if (JOY_REPEAT(DPAD_LEFT))
{
- if (sub_80D0580(2))
+ if (MultiMove_TryMoveGroup(2))
{
- sub_80CD894(CURSOR_AREA_IN_BOX, sBoxCursorPosition - 1);
- return 25;
+ SetCursorPosition(CURSOR_AREA_IN_BOX, sCursorPosition - 1);
+ return INPUT_MULTIMOVE_MOVE_MONS;
}
else
{
- return 10;
+ return INPUT_SCROLL_LEFT;
}
}
else if (JOY_REPEAT(DPAD_RIGHT))
{
- if (sub_80D0580(3))
+ if (MultiMove_TryMoveGroup(3))
{
- sub_80CD894(CURSOR_AREA_IN_BOX, sBoxCursorPosition + 1);
- return 25;
+ SetCursorPosition(CURSOR_AREA_IN_BOX, sCursorPosition + 1);
+ return INPUT_MULTIMOVE_MOVE_MONS;
}
else
{
- return 9;
+ return INPUT_SCROLL_RIGHT;
}
}
else if (JOY_NEW(A_BUTTON))
{
- if (sub_80D0BC0())
+ if (MultiMove_CanPlaceSelection())
{
sIsMonBeingMoved = FALSE;
- sPSSData->inBoxMovingMode = 0;
- return 26;
+ sStorage->inBoxMovingMode = MOVE_MODE_NORMAL;
+ return INPUT_MULTIMOVE_PLACE_MONS;
}
else
{
- return 24;
+ return INPUT_MULTIMOVE_UNABLE;
}
}
else if (JOY_NEW(B_BUTTON))
{
- return 24;
+ return INPUT_MULTIMOVE_UNABLE;
}
else
{
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
{
if (JOY_HELD(L_BUTTON))
- return 10;
+ return INPUT_SCROLL_LEFT;
if (JOY_HELD(R_BUTTON))
- return 9;
+ return INPUT_SCROLL_RIGHT;
}
- return 0;
+ return INPUT_NONE;
}
}
@@ -7229,47 +7330,47 @@ static u8 HandleInput_InParty(void)
do
{
- cursorArea = sBoxCursorArea;
- cursorPosition = sBoxCursorPosition;
- sPSSData->field_CD3 = 0;
- sPSSData->field_CD2 = 0;
- sPSSData->field_CD7 = 0;
+ cursorArea = sCursorArea;
+ cursorPosition = sCursorPosition;
+ sStorage->cursorHorizontalWrap = 0;
+ sStorage->cursorVerticalWrap = 0;
+ sStorage->cursorFlipTimer = 0;
gotoBox = FALSE;
- retVal = 0;
+ retVal = INPUT_NONE;
if (JOY_REPEAT(DPAD_UP))
{
if (--cursorPosition < 0)
cursorPosition = PARTY_SIZE;
- if (cursorPosition != sBoxCursorPosition)
- retVal = 1;
+ if (cursorPosition != sCursorPosition)
+ retVal = INPUT_MOVE_CURSOR;
break;
}
else if (JOY_REPEAT(DPAD_DOWN))
{
if (++cursorPosition > PARTY_SIZE)
cursorPosition = 0;
- if (cursorPosition != sBoxCursorPosition)
- retVal = 1;
+ if (cursorPosition != sCursorPosition)
+ retVal = INPUT_MOVE_CURSOR;
break;
}
- else if (JOY_REPEAT(DPAD_LEFT) && sBoxCursorPosition != 0)
+ else if (JOY_REPEAT(DPAD_LEFT) && sCursorPosition != 0)
{
- retVal = 1;
- sPSSData->field_CD6 = sBoxCursorPosition;
+ retVal = INPUT_MOVE_CURSOR;
+ sStorage->cursorPrevHorizPos = sCursorPosition;
cursorPosition = 0;
break;
}
else if (JOY_REPEAT(DPAD_RIGHT))
{
- if (sBoxCursorPosition == 0)
+ if (sCursorPosition == 0)
{
- retVal = 1;
- cursorPosition = sPSSData->field_CD6;
+ retVal = INPUT_MOVE_CURSOR;
+ cursorPosition = sStorage->cursorPrevHorizPos;
}
else
{
- retVal = 6;
+ retVal = INPUT_HIDE_PARTY;
cursorArea = CURSOR_AREA_IN_BOX;
cursorPosition = 0;
}
@@ -7278,66 +7379,66 @@ static u8 HandleInput_InParty(void)
if (JOY_NEW(A_BUTTON))
{
- if (sBoxCursorPosition == PARTY_SIZE)
+ if (sCursorPosition == PARTY_SIZE)
{
- if (sPSSData->boxOption == BOX_OPTION_DEPOSIT)
- return 4;
+ if (sStorage->boxOption == OPTION_DEPOSIT)
+ return INPUT_CLOSE_BOX;
gotoBox = TRUE;
}
- else if (sub_80CFA5C())
+ else if (SetSelectionMenuTexts())
{
- if (!sCanOnlyMove)
- return 8;
+ if (!sAutoActionOn)
+ return INPUT_IN_MENU;
- switch (sub_80CFF98(0))
+ switch (GetMenuItemTextId(0))
{
- case 1:
- return 11;
- case 2:
- return 12;
- case 3:
- return 13;
- case 4:
- return 14;
- case 5:
- return 15;
- case 12:
- return 16;
- case 13:
- return 17;
- case 15:
- return 18;
+ case MENU_STORE:
+ return INPUT_DEPOSIT;
+ case MENU_WITHDRAW:
+ return INPUT_WITHDRAW;
+ case MENU_MOVE:
+ return INPUT_MOVE_MON;
+ case MENU_SHIFT:
+ return INPUT_SHIFT_MON;
+ case MENU_PLACE:
+ return INPUT_PLACE_MON;
+ case MENU_TAKE:
+ return INPUT_TAKE_ITEM;
+ case MENU_GIVE:
+ return INPUT_GIVE_ITEM;
+ case MENU_SWITCH:
+ return INPUT_SWITCH_ITEMS;
}
}
}
if (JOY_NEW(B_BUTTON))
{
- if (sPSSData->boxOption == BOX_OPTION_DEPOSIT)
- return 19;
+ if (sStorage->boxOption == OPTION_DEPOSIT)
+ return INPUT_PRESSED_B;
gotoBox = TRUE;
}
if (gotoBox)
{
- retVal = 6;
+ retVal = INPUT_HIDE_PARTY;
cursorArea = CURSOR_AREA_IN_BOX;
cursorPosition = 0;
}
else if (JOY_NEW(SELECT_BUTTON))
{
- sub_80CFDC4();
- return 0;
+ ToggleCursorAutoAction();
+ return INPUT_NONE;
}
} while (0);
- if (retVal != 0)
+ if (retVal != INPUT_NONE)
{
- if (retVal != 6)
- sub_80CD894(cursorArea, cursorPosition);
+ if (retVal != INPUT_HIDE_PARTY)
+ SetCursorPosition(cursorArea, cursorPosition);
}
return retVal;
@@ -7351,64 +7452,64 @@ static u8 HandleInput_OnBox(void)
do
{
- sPSSData->field_CD3 = 0;
- sPSSData->field_CD2 = 0;
- sPSSData->field_CD7 = 0;
+ sStorage->cursorHorizontalWrap = 0;
+ sStorage->cursorVerticalWrap = 0;
+ sStorage->cursorFlipTimer = 0;
if (JOY_REPEAT(DPAD_UP))
{
- retVal = 1;
+ retVal = INPUT_MOVE_CURSOR;
cursorArea = CURSOR_AREA_BUTTONS;
cursorPosition = 0;
- sPSSData->field_CD7 = 1;
+ sStorage->cursorFlipTimer = 1;
break;
}
else if (JOY_REPEAT(DPAD_DOWN))
{
- retVal = 1;
+ retVal = INPUT_MOVE_CURSOR;
cursorArea = CURSOR_AREA_IN_BOX;
cursorPosition = 2;
break;
}
if (JOY_HELD(DPAD_LEFT))
- return 10;
+ return INPUT_SCROLL_LEFT;
if (JOY_HELD(DPAD_RIGHT))
- return 9;
+ return INPUT_SCROLL_RIGHT;
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
{
if (JOY_HELD(L_BUTTON))
- return 10;
+ return INPUT_SCROLL_LEFT;
if (JOY_HELD(R_BUTTON))
- return 9;
+ return INPUT_SCROLL_RIGHT;
}
if (JOY_NEW(A_BUTTON))
{
- sub_80CD1A8(FALSE);
- AddBoxMenu();
- return 7;
+ AnimateBoxScrollArrows(FALSE);
+ AddBoxOptionsMenu();
+ return INPUT_BOX_OPTIONS;
}
if (JOY_NEW(B_BUTTON))
- return 19;
+ return INPUT_PRESSED_B;
if (JOY_NEW(SELECT_BUTTON))
{
- sub_80CFDC4();
- return 0;
+ ToggleCursorAutoAction();
+ return INPUT_NONE;
}
- retVal = 0;
+ retVal = INPUT_NONE;
} while (0);
- if (retVal)
+ if (retVal != INPUT_NONE)
{
- if (cursorArea != CURSOR_AREA_BOX)
- sub_80CD1A8(FALSE);
- sub_80CD894(cursorArea, cursorPosition);
+ if (cursorArea != CURSOR_AREA_BOX_TITLE)
+ AnimateBoxScrollArrows(FALSE);
+ SetCursorPosition(cursorArea, cursorPosition);
}
return retVal;
@@ -7422,65 +7523,67 @@ static u8 HandleInput_OnButtons(void)
do
{
- cursorArea = sBoxCursorArea;
- cursorPosition = sBoxCursorPosition;
- sPSSData->field_CD3 = 0;
- sPSSData->field_CD2 = 0;
- sPSSData->field_CD7 = 0;
+ cursorArea = sCursorArea;
+ cursorPosition = sCursorPosition;
+ sStorage->cursorHorizontalWrap = 0;
+ sStorage->cursorVerticalWrap = 0;
+ sStorage->cursorFlipTimer = 0;
if (JOY_REPEAT(DPAD_UP))
{
- retVal = 1;
+ retVal = INPUT_MOVE_CURSOR;
cursorArea = CURSOR_AREA_IN_BOX;
- sPSSData->field_CD2 = -1;
- if (sBoxCursorPosition == 0)
+ sStorage->cursorVerticalWrap = -1;
+ if (sCursorPosition == 0)
cursorPosition = IN_BOX_COUNT - 1 - 5;
else
cursorPosition = IN_BOX_COUNT - 1;
- sPSSData->field_CD7 = 1;
+ sStorage->cursorFlipTimer = 1;
break;
}
if (JOY_REPEAT(DPAD_DOWN | START_BUTTON))
{
- retVal = 1;
- cursorArea = CURSOR_AREA_BOX;
+ retVal = INPUT_MOVE_CURSOR;
+ cursorArea = CURSOR_AREA_BOX_TITLE;
cursorPosition = 0;
- sPSSData->field_CD7 = 1;
+ sStorage->cursorFlipTimer = 1;
break;
}
if (JOY_REPEAT(DPAD_LEFT))
{
- retVal = 1;
+ retVal = INPUT_MOVE_CURSOR;
if (--cursorPosition < 0)
cursorPosition = 1;
break;
}
else if (JOY_REPEAT(DPAD_RIGHT))
{
- retVal = 1;
+ retVal = INPUT_MOVE_CURSOR;
if (++cursorPosition > 1)
cursorPosition = 0;
break;
}
+ // Button was pressed, determine which
if (JOY_NEW(A_BUTTON))
- return (cursorPosition == 0) ? 5 : 4;
+ return (cursorPosition == 0) ? INPUT_SHOW_PARTY : INPUT_CLOSE_BOX;
+
if (JOY_NEW(B_BUTTON))
- return 19;
+ return INPUT_PRESSED_B;
if (JOY_NEW(SELECT_BUTTON))
{
- sub_80CFDC4();
- return 0;
+ ToggleCursorAutoAction();
+ return INPUT_NONE;
}
- retVal = 0;
+ retVal = INPUT_NONE;
} while (0);
- if (retVal != 0)
- sub_80CD894(cursorArea, cursorPosition);
+ if (retVal != INPUT_NONE)
+ SetCursorPosition(cursorArea, cursorPosition);
return retVal;
}
@@ -7491,255 +7594,262 @@ static u8 HandleInput(void)
{
u8 (*func)(void);
s8 area;
- }
- static const inputFuncs[] =
+ } static const inputFuncs[] =
{
- {HandleInput_InBox, CURSOR_AREA_IN_BOX},
- {HandleInput_InParty, CURSOR_AREA_IN_PARTY},
- {HandleInput_OnBox, CURSOR_AREA_BOX},
+ {HandleInput_InBox, CURSOR_AREA_IN_BOX},
+ {HandleInput_InParty, CURSOR_AREA_IN_PARTY},
+ {HandleInput_OnBox, CURSOR_AREA_BOX_TITLE},
{HandleInput_OnButtons, CURSOR_AREA_BUTTONS},
- {NULL, 0},
+ {},
};
u16 i = 0;
while (inputFuncs[i].func != NULL)
{
- if (inputFuncs[i].area == sBoxCursorArea)
+ if (inputFuncs[i].area == sCursorArea)
return inputFuncs[i].func();
i++;
}
- return 0;
+ return INPUT_NONE;
}
-static void AddBoxMenu(void)
+static void AddBoxOptionsMenu(void)
{
InitMenu();
- SetMenuText(9);
- SetMenuText(10);
- SetMenuText(11);
- SetMenuText(0);
+ SetMenuText(MENU_JUMP);
+ SetMenuText(MENU_WALLPAPER);
+ SetMenuText(MENU_NAME);
+ SetMenuText(MENU_CANCEL);
}
-static u8 sub_80CFA5C(void)
+static u8 SetSelectionMenuTexts(void)
{
InitMenu();
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
- return sub_80CFA84();
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
+ return SetMenuTexts_Mon();
else
- return sub_80CFB44();
+ return SetMenuTexts_Item();
}
-static bool8 sub_80CFA84(void)
+static bool8 SetMenuTexts_Mon(void)
{
- u16 var0 = sub_80CD504();
+ u16 species = GetSpeciesAtCursorPosition();
- switch (sPSSData->boxOption)
+ switch (sStorage->boxOption)
{
- case BOX_OPTION_DEPOSIT:
- if (var0)
- SetMenuText(1);
+ case OPTION_DEPOSIT:
+ if (species != SPECIES_NONE)
+ SetMenuText(MENU_STORE);
else
return FALSE;
break;
- case BOX_OPTION_WITHDRAW:
- if (var0)
- SetMenuText(2);
+ case OPTION_WITHDRAW:
+ if (species != SPECIES_NONE)
+ SetMenuText(MENU_WITHDRAW);
else
return FALSE;
break;
- case BOX_OPTION_MOVE_MONS:
+ case OPTION_MOVE_MONS:
if (sIsMonBeingMoved)
{
- if (var0)
- SetMenuText(4);
+ if (species != SPECIES_NONE)
+ SetMenuText(MENU_SHIFT);
else
- SetMenuText(5);
+ SetMenuText(MENU_PLACE);
}
else
{
- if (var0)
- SetMenuText(3);
+ if (species != SPECIES_NONE)
+ SetMenuText(MENU_MOVE);
else
return FALSE;
}
break;
- case BOX_OPTION_MOVE_ITEMS:
+ case OPTION_MOVE_ITEMS:
default:
return FALSE;
}
- SetMenuText(6);
- if (sPSSData->boxOption == BOX_OPTION_MOVE_MONS)
+ SetMenuText(MENU_SUMMARY);
+ if (sStorage->boxOption == OPTION_MOVE_MONS)
{
- if (!sBoxCursorArea)
- SetMenuText(2);
+ if (sCursorArea == CURSOR_AREA_IN_BOX)
+ SetMenuText(MENU_WITHDRAW);
else
- SetMenuText(1);
+ SetMenuText(MENU_STORE);
}
- SetMenuText(8);
- SetMenuText(7);
- SetMenuText(0);
+ SetMenuText(MENU_MARK);
+ SetMenuText(MENU_RELEASE);
+ SetMenuText(MENU_CANCEL);
return TRUE;
}
-static bool8 sub_80CFB44(void)
+static bool8 SetMenuTexts_Item(void)
{
- if (sPSSData->cursorMonSpecies == SPECIES_EGG)
+ if (sStorage->displayMonSpecies == SPECIES_EGG)
return FALSE;
- if (!IsActiveItemMoving())
+ if (!IsMovingItem())
{
- if (sPSSData->cursorMonItem == 0)
+ if (sStorage->displayMonItemId == ITEM_NONE)
{
- if (sPSSData->cursorMonSpecies == SPECIES_NONE)
+ if (sStorage->displayMonSpecies == SPECIES_NONE)
return FALSE;
- SetMenuText(14);
+ SetMenuText(MENU_GIVE_2);
}
else
{
- if (!ItemIsMail(sPSSData->cursorMonItem))
+ if (!ItemIsMail(sStorage->displayMonItemId))
{
- SetMenuText(12);
- SetMenuText(16);
+ SetMenuText(MENU_TAKE);
+ SetMenuText(MENU_BAG);
}
- SetMenuText(17);
+ SetMenuText(MENU_INFO);
}
}
else
{
- if (sPSSData->cursorMonItem == 0)
+ if (sStorage->displayMonItemId == ITEM_NONE)
{
- if (sPSSData->cursorMonSpecies == SPECIES_NONE)
+ if (sStorage->displayMonSpecies == SPECIES_NONE)
return FALSE;
- SetMenuText(13);
+ SetMenuText(MENU_GIVE);
}
else
{
- if (ItemIsMail(sPSSData->cursorMonItem) == TRUE)
+ if (ItemIsMail(sStorage->displayMonItemId) == TRUE)
return FALSE;
- SetMenuText(15);
+ SetMenuText(MENU_SWITCH);
}
}
- SetMenuText(0);
+ SetMenuText(MENU_CANCEL);
return TRUE;
}
-static void sub_80CFBF4(struct Sprite *sprite)
+
+//------------------------------------------------------------------------------
+// SECTION: Cursor
+//
+// The functions below handle a few of the generic cursor features.
+//------------------------------------------------------------------------------
+
+
+static void SpriteCB_CursorShadow(struct Sprite *sprite)
{
- sprite->pos1.x = sPSSData->field_CB4->pos1.x;
- sprite->pos1.y = sPSSData->field_CB4->pos1.y + 20;
+ sprite->pos1.x = sStorage->cursorSprite->pos1.x;
+ sprite->pos1.y = sStorage->cursorSprite->pos1.y + 20;
}
-static void sub_80CFC14(void)
+static void CreateCursorSprites(void)
{
u16 x, y;
u8 spriteId;
u8 priority, subpriority;
struct SpriteSheet spriteSheets[] =
{
- {gHandCursorTiles, 0x800, 0},
- {gHandCursorShadowTiles, 0x80, 1},
+ {sHandCursor_Gfx, 0x800, GFXTAG_CURSOR},
+ {sHandCursorShadow_Gfx, 0x80, GFXTAG_CURSOR_SHADOW},
{}
};
struct SpritePalette spritePalettes[] =
{
- {gHandCursorPalette, TAG_PAL_DAC7},
+ {sHandCursor_Pal, PALTAG_MISC_1},
{}
};
- static const struct OamData sOamData_857BA0C =
+ static const struct OamData sOamData_Cursor =
{
.shape = SPRITE_SHAPE(32x32),
.size = SPRITE_SIZE(32x32),
.priority = 1,
};
- static const struct OamData sOamData_857BA14 =
+ static const struct OamData sOamData_CursorShadow =
{
.shape = SPRITE_SHAPE(16x16),
.size = SPRITE_SIZE(16x16),
.priority = 1,
};
- static const union AnimCmd sSpriteAnim_857BA1C[] =
+ static const union AnimCmd sAnim_Cursor_Bouncing[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_FRAME(16, 30),
ANIMCMD_JUMP(0)
};
- static const union AnimCmd sSpriteAnim_857BA28[] =
+ static const union AnimCmd sAnim_Cursor_Still[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
- static const union AnimCmd sSpriteAnim_857BA30[] =
+ static const union AnimCmd sAnim_Cursor_Open[] =
{
ANIMCMD_FRAME(32, 5),
ANIMCMD_END
};
- static const union AnimCmd sSpriteAnim_857BA38[] =
+ static const union AnimCmd sAnim_Cursor_Fist[] =
{
ANIMCMD_FRAME(48, 5),
ANIMCMD_END
};
- static const union AnimCmd *const sSpriteAnimTable_857BA40[] =
+ static const union AnimCmd *const sAnims_Cursor[] =
{
- sSpriteAnim_857BA1C,
- sSpriteAnim_857BA28,
- sSpriteAnim_857BA30,
- sSpriteAnim_857BA38
+ [CURSOR_ANIM_BOUNCE] = sAnim_Cursor_Bouncing,
+ [CURSOR_ANIM_STILL] = sAnim_Cursor_Still,
+ [CURSOR_ANIM_OPEN] = sAnim_Cursor_Open,
+ [CURSOR_ANIM_FIST] = sAnim_Cursor_Fist
};
- static const struct SpriteTemplate gSpriteTemplate_857BA50 =
+ static const struct SpriteTemplate sSpriteTemplate_Cursor =
{
- .tileTag = TAG_TILE_0,
- .paletteTag = TAG_PAL_WAVEFORM,
- .oam = &sOamData_857BA0C,
- .anims = sSpriteAnimTable_857BA40,
+ .tileTag = GFXTAG_CURSOR,
+ .paletteTag = PALTAG_MISC_2,
+ .oam = &sOamData_Cursor,
+ .anims = sAnims_Cursor,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
- static const struct SpriteTemplate gSpriteTemplate_857BA68 =
+ static const struct SpriteTemplate sSpriteTemplate_CursorShadow =
{
- .tileTag = TAG_TILE_1,
- .paletteTag = TAG_PAL_WAVEFORM,
- .oam = &sOamData_857BA14,
+ .tileTag = GFXTAG_CURSOR_SHADOW,
+ .paletteTag = PALTAG_MISC_2,
+ .oam = &sOamData_CursorShadow,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80CFBF4,
+ .callback = SpriteCB_CursorShadow,
};
LoadSpriteSheets(spriteSheets);
LoadSpritePalettes(spritePalettes);
- sPSSData->field_CD8[0] = IndexOfSpritePaletteTag(TAG_PAL_WAVEFORM);
- sPSSData->field_CD8[1] = IndexOfSpritePaletteTag(TAG_PAL_DAC7);
+ sStorage->cursorPalNums[0] = IndexOfSpritePaletteTag(PALTAG_MISC_2); // White hand, normal
+ sStorage->cursorPalNums[1] = IndexOfSpritePaletteTag(PALTAG_MISC_1); // Yellow hand, when auto-action is on
- sub_80CD444(sBoxCursorArea, sBoxCursorPosition, &x, &y);
- spriteId = CreateSprite(&gSpriteTemplate_857BA50, x, y, 6);
+ GetCursorCoordsByPos(sCursorArea, sCursorPosition, &x, &y);
+ spriteId = CreateSprite(&sSpriteTemplate_Cursor, x, y, 6);
if (spriteId != MAX_SPRITES)
{
- sPSSData->field_CB4 = &gSprites[spriteId];
- sPSSData->field_CB4->oam.paletteNum = sPSSData->field_CD8[sCanOnlyMove];
- sPSSData->field_CB4->oam.priority = 1;
+ sStorage->cursorSprite = &gSprites[spriteId];
+ sStorage->cursorSprite->oam.paletteNum = sStorage->cursorPalNums[sAutoActionOn];
+ sStorage->cursorSprite->oam.priority = 1;
if (sIsMonBeingMoved)
- StartSpriteAnim(sPSSData->field_CB4, 3);
+ StartSpriteAnim(sStorage->cursorSprite, CURSOR_ANIM_FIST);
}
else
{
- sPSSData->field_CB4 = NULL;
+ sStorage->cursorSprite = NULL;
}
- if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ if (sCursorArea == CURSOR_AREA_IN_PARTY)
{
subpriority = 13;
priority = 1;
@@ -7750,184 +7860,197 @@ static void sub_80CFC14(void)
priority = 2;
}
- spriteId = CreateSprite(&gSpriteTemplate_857BA68, 0, 0, subpriority);
+ spriteId = CreateSprite(&sSpriteTemplate_CursorShadow, 0, 0, subpriority);
if (spriteId != MAX_SPRITES)
{
- sPSSData->field_CB8 = &gSprites[spriteId];
- sPSSData->field_CB8->oam.priority = priority;
- if (sBoxCursorArea)
- sPSSData->field_CB8->invisible = 1;
+ sStorage->cursorShadowSprite = &gSprites[spriteId];
+ sStorage->cursorShadowSprite->oam.priority = priority;
+ if (sCursorArea)
+ sStorage->cursorShadowSprite->invisible = TRUE;
}
else
{
- sPSSData->field_CB8 = NULL;
+ sStorage->cursorShadowSprite = NULL;
}
}
-static void sub_80CFDC4(void)
+static void ToggleCursorAutoAction(void)
{
- sCanOnlyMove = !sCanOnlyMove;
- sPSSData->field_CB4->oam.paletteNum = sPSSData->field_CD8[sCanOnlyMove];
+ sAutoActionOn = !sAutoActionOn;
+ sStorage->cursorSprite->oam.paletteNum = sStorage->cursorPalNums[sAutoActionOn];
}
-static u8 GetBoxCursorPosition(void)
+static u8 GetCursorPosition(void)
{
- return sBoxCursorPosition;
+ return sCursorPosition;
}
-static void sub_80CFE14(u8 *arg0, u8 *arg1)
+static void GetCursorBoxColumnAndRow(u8 *column, u8 *row)
{
- if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
+ if (sCursorArea == CURSOR_AREA_IN_BOX)
{
- *arg0 = sBoxCursorPosition % IN_BOX_ROWS;
- *arg1 = sBoxCursorPosition / IN_BOX_ROWS;
+ *column = sCursorPosition % IN_BOX_COLUMNS;
+ *row = sCursorPosition / IN_BOX_COLUMNS;
}
else
{
- *arg0 = 0;
- *arg1 = 0;
+ *column = 0;
+ *row = 0;
}
}
-static void sub_80CFE54(u8 animNum)
+static void StartCursorAnim(u8 animNum)
{
- StartSpriteAnim(sPSSData->field_CB4, animNum);
+ StartSpriteAnim(sStorage->cursorSprite, animNum);
}
-static u8 sub_80CFE78(void)
+// Unused
+static u8 GetMovingMonOriginalBoxId(void)
{
return sMovingMonOrigBoxId;
}
-static void sub_80CFE84(void)
+static void SetCursorPriorityTo1(void)
{
- sPSSData->field_CB4->oam.priority = 1;
+ sStorage->cursorSprite->oam.priority = 1;
}
-static void sub_80CFEA8(void)
+static void TryHideItemAtCursor(void)
{
- if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
- sub_80D0E50(CURSOR_AREA_IN_BOX, sBoxCursorPosition);
+ if (sCursorArea == CURSOR_AREA_IN_BOX)
+ TryHideItemIconAtPos(CURSOR_AREA_IN_BOX, sCursorPosition);
}
-static void sub_80CFECC(void)
+static void TryShowItemAtCursor(void)
{
- if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
- sub_80D0D8C(CURSOR_AREA_IN_BOX, sBoxCursorPosition);
+ if (sCursorArea == CURSOR_AREA_IN_BOX)
+ TryLoadItemIconAtPos(CURSOR_AREA_IN_BOX, sCursorPosition);
}
+
+//------------------------------------------------------------------------------
+// SECTION: Menu
+//
+// The functions below handle the generic options menu that comes up whenever
+// something in the PC is selected.
+//------------------------------------------------------------------------------
+
+
static void InitMenu(void)
{
- sPSSData->menuItemsCount = 0;
- sPSSData->menuWidth = 0;
- sPSSData->menuWindow.bg = 0;
- sPSSData->menuWindow.paletteNum = 15;
- sPSSData->menuWindow.baseBlock = 92;
-}
-
-static const u8 *const gUnknown_0857BA80[] =
-{
- gPCText_Cancel,
- gPCText_Store,
- gPCText_Withdraw,
- gPCText_Move,
- gPCText_Shift,
- gPCText_Place,
- gPCText_Summary,
- gPCText_Release,
- gPCText_Mark,
- gPCText_Jump,
- gPCText_Wallpaper,
- gPCText_Name,
- gPCText_Take,
- gPCText_Give,
- gPCText_Give,
- gPCText_Switch,
- gPCText_Bag,
- gPCText_Info,
- gPCText_Scenery1,
- gPCText_Scenery2,
- gPCText_Scenery3,
- gPCText_Etcetera,
- gPCText_Friends,
- gPCText_Forest,
- gPCText_City,
- gPCText_Desert,
- gPCText_Savanna,
- gPCText_Crag,
- gPCText_Volcano,
- gPCText_Snow,
- gPCText_Cave,
- gPCText_Beach,
- gPCText_Seafloor,
- gPCText_River,
- gPCText_Sky,
- gPCText_PolkaDot,
- gPCText_Pokecenter,
- gPCText_Machine,
- gPCText_Simple,
+ sStorage->menuItemsCount = 0;
+ sStorage->menuWidth = 0;
+ sStorage->menuWindow.bg = 0;
+ sStorage->menuWindow.paletteNum = 15;
+ sStorage->menuWindow.baseBlock = 92;
+}
+
+static const u8 *const sMenuTexts[] =
+{
+ [MENU_CANCEL] = gPCText_Cancel,
+ [MENU_STORE] = gPCText_Store,
+ [MENU_WITHDRAW] = gPCText_Withdraw,
+ [MENU_MOVE] = gPCText_Move,
+ [MENU_SHIFT] = gPCText_Shift,
+ [MENU_PLACE] = gPCText_Place,
+ [MENU_SUMMARY] = gPCText_Summary,
+ [MENU_RELEASE] = gPCText_Release,
+ [MENU_MARK] = gPCText_Mark,
+ [MENU_JUMP] = gPCText_Jump,
+ [MENU_WALLPAPER] = gPCText_Wallpaper,
+ [MENU_NAME] = gPCText_Name,
+ [MENU_TAKE] = gPCText_Take,
+ [MENU_GIVE] = gPCText_Give,
+ [MENU_GIVE_2] = gPCText_Give,
+ [MENU_SWITCH] = gPCText_Switch,
+ [MENU_BAG] = gPCText_Bag,
+ [MENU_INFO] = gPCText_Info,
+ [MENU_SCENERY_1] = gPCText_Scenery1,
+ [MENU_SCENERY_2] = gPCText_Scenery2,
+ [MENU_SCENERY_3] = gPCText_Scenery3,
+ [MENU_ETCETERA] = gPCText_Etcetera,
+ [MENU_FRIENDS] = gPCText_Friends,
+ [MENU_FOREST] = gPCText_Forest,
+ [MENU_CITY] = gPCText_City,
+ [MENU_DESERT] = gPCText_Desert,
+ [MENU_SAVANNA] = gPCText_Savanna,
+ [MENU_CRAG] = gPCText_Crag,
+ [MENU_VOLCANO] = gPCText_Volcano,
+ [MENU_SNOW] = gPCText_Snow,
+ [MENU_CAVE] = gPCText_Cave,
+ [MENU_BEACH] = gPCText_Beach,
+ [MENU_SEAFLOOR] = gPCText_Seafloor,
+ [MENU_RIVER] = gPCText_River,
+ [MENU_SKY] = gPCText_Sky,
+ [MENU_POLKADOT] = gPCText_PolkaDot,
+ [MENU_POKECENTER] = gPCText_Pokecenter,
+ [MENU_MACHINE] = gPCText_Machine,
+ [MENU_SIMPLE] = gPCText_Simple,
};
static void SetMenuText(u8 textId)
{
- if (sPSSData->menuItemsCount < 7)
+ if (sStorage->menuItemsCount < ARRAY_COUNT(sStorage->menuItems))
{
u8 len;
- struct StorageMenu *menu = &sPSSData->menuItems[sPSSData->menuItemsCount];
+ struct StorageMenu *menu = &sStorage->menuItems[sStorage->menuItemsCount];
- menu->text = gUnknown_0857BA80[textId];
+ menu->text = sMenuTexts[textId];
menu->textId = textId;
len = StringLength(menu->text);
- if (len > sPSSData->menuWidth)
- sPSSData->menuWidth = len;
+ if (len > sStorage->menuWidth)
+ sStorage->menuWidth = len;
- sPSSData->menuItemsCount++;
+ sStorage->menuItemsCount++;
}
}
-static s8 sub_80CFF98(u8 arg0)
+static s8 GetMenuItemTextId(u8 menuIdx)
{
- if (arg0 >= sPSSData->menuItemsCount)
+ if (menuIdx >= sStorage->menuItemsCount)
return -1;
else
- return sPSSData->menuItems[arg0].textId;
+ return sStorage->menuItems[menuIdx].textId;
}
static void AddMenu(void)
{
- sPSSData->menuWindow.width = sPSSData->menuWidth + 2;
- sPSSData->menuWindow.height = 2 * sPSSData->menuItemsCount;
- sPSSData->menuWindow.tilemapLeft = 29 - sPSSData->menuWindow.width;
- sPSSData->menuWindow.tilemapTop = 15 - sPSSData->menuWindow.height;
- sPSSData->field_CB0 = AddWindow(&sPSSData->menuWindow);
- ClearWindowTilemap(sPSSData->field_CB0);
- DrawStdFrameWithCustomTileAndPalette(sPSSData->field_CB0, FALSE, 11, 14);
- PrintMenuTable(sPSSData->field_CB0, sPSSData->menuItemsCount, (void*)sPSSData->menuItems);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sPSSData->field_CB0, sPSSData->menuItemsCount, 0);
+ sStorage->menuWindow.width = sStorage->menuWidth + 2;
+ sStorage->menuWindow.height = 2 * sStorage->menuItemsCount;
+ sStorage->menuWindow.tilemapLeft = 29 - sStorage->menuWindow.width;
+ sStorage->menuWindow.tilemapTop = 15 - sStorage->menuWindow.height;
+ sStorage->menuWindowId = AddWindow(&sStorage->menuWindow);
+ ClearWindowTilemap(sStorage->menuWindowId);
+ DrawStdFrameWithCustomTileAndPalette(sStorage->menuWindowId, FALSE, 11, 14);
+ PrintMenuTable(sStorage->menuWindowId, sStorage->menuItemsCount, (void*)sStorage->menuItems);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sStorage->menuWindowId, sStorage->menuItemsCount, 0);
ScheduleBgCopyTilemapToVram(0);
- sPSSData->field_CAE = 0;
+ sStorage->menuUnusedField = 0;
}
-static bool8 sub_80D00A8(void)
+// Called after AddMenu to determine whether or not the handler callback should
+// wait to move on to the next state. Evidently there was no need to wait, and
+// now it always returns FALSE
+static bool8 IsMenuLoading(void)
{
return FALSE;
}
-static s16 sub_80D00AC(void)
+static s16 HandleMenuInput(void)
{
- s32 textId = -2;
+ s32 input = MENU_NOTHING_CHOSEN;
do
{
if (JOY_NEW(A_BUTTON))
{
- textId = Menu_GetCursorPos();
+ input = Menu_GetCursorPos();
break;
}
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- textId = -1;
+ input = MENU_B_PRESSED;
}
if (JOY_NEW(DPAD_UP))
@@ -7942,26 +8065,32 @@ static s16 sub_80D00AC(void)
}
} while (0);
- if (textId != -2)
- sub_80D013C();
+ if (input != MENU_NOTHING_CHOSEN)
+ RemoveMenu();
- if (textId >= 0)
- textId = sPSSData->menuItems[textId].textId;
+ if (input >= 0)
+ input = sStorage->menuItems[input].textId;
- return textId;
+ return input;
}
-static void sub_80D013C(void)
+static void RemoveMenu(void)
{
- ClearStdWindowAndFrameToTransparent(sPSSData->field_CB0, TRUE);
- RemoveWindow(sPSSData->field_CB0);
+ ClearStdWindowAndFrameToTransparent(sStorage->menuWindowId, TRUE);
+ RemoveWindow(sStorage->menuWindowId);
}
-// The functions below handle moving and grabbing multiple mons at once.
-// The icons are converted to background 0 which coordinates are changed while moving mons.
-// There is also a bit of math involved in determining how many column/rows of mons to grab/move.
-static const struct WindowTemplate gUnknown_0857BB1C =
+//------------------------------------------------------------------------------
+// SECTION: MultiMove
+//
+// The functions below handle moving and selecting multiple Pokémon at once.
+// The icon sprites are moved to bg 0, and this bg is manipulated to move
+// them as a group.
+//------------------------------------------------------------------------------
+
+
+static const struct WindowTemplate sWindowTemplate_MultiMove =
{
.bg = 0,
.tilemapLeft = 10,
@@ -7974,34 +8103,33 @@ static const struct WindowTemplate gUnknown_0857BB1C =
EWRAM_DATA static struct
{
- u8 field_0;
+ u8 funcId;
u8 state;
- u8 fromRow;
u8 fromColumn;
- u8 toRow;
+ u8 fromRow;
u8 toColumn;
- u8 field_6;
- u8 field_7;
- u8 minRow;
+ u8 toRow;
+ u8 cursorColumn;
+ u8 cursorRow;
u8 minColumn;
+ u8 minRow;
+ u8 columnsTotal;
u8 rowsTotal;
- u8 columsTotal;
u16 bgX;
u16 bgY;
- u16 field_10;
+ u16 bgMoveSteps;
struct BoxPokemon boxMons[IN_BOX_COUNT];
-}
-*sMoveMonsPtr = NULL;
+} *sMultiMove = NULL;
-static bool8 sub_80D0164(void)
+static bool8 MultiMove_Init(void)
{
- sMoveMonsPtr = Alloc(sizeof(*sMoveMonsPtr));
- if (sMoveMonsPtr != NULL)
+ sMultiMove = Alloc(sizeof(*sMultiMove));
+ if (sMultiMove != NULL)
{
- sPSSData->field_2200 = AddWindow8Bit(&gUnknown_0857BB1C);
- if (sPSSData->field_2200 != 0xFF)
+ sStorage->multiMoveWindowId = AddWindow8Bit(&sWindowTemplate_MultiMove);
+ if (sStorage->multiMoveWindowId != WINDOW_NONE)
{
- FillWindowPixelBuffer(sPSSData->field_2200, PIXEL_FILL(0));
+ FillWindowPixelBuffer(sStorage->multiMoveWindowId, PIXEL_FILL(0));
return TRUE;
}
}
@@ -8009,64 +8137,64 @@ static bool8 sub_80D0164(void)
return FALSE;
}
-static void sub_80D01B8(void)
+static void MultiMove_Free(void)
{
- if (sMoveMonsPtr != NULL)
- Free(sMoveMonsPtr);
+ if (sMultiMove != NULL)
+ Free(sMultiMove);
}
-static void sub_80D01D0(u8 arg0)
+static void MultiMove_SetFunction(u8 id)
{
- sMoveMonsPtr->field_0 = arg0;
- sMoveMonsPtr->state = 0;
+ sMultiMove->funcId = id;
+ sMultiMove->state = 0;
}
-static bool8 sub_80D01E4(void)
+// Returns TRUE if the called function has more to do, FALSE otherwise
+static bool8 MultiMove_RunFunction(void)
{
- switch (sMoveMonsPtr->field_0)
+ switch (sMultiMove->funcId)
{
- case 0:
- return sub_80D024C();
- case 1:
- return sub_80D0344();
- case 2:
- return sub_80D03B0();
- case 3:
- return sub_80D0420();
- case 4:
- return sub_80D04A0();
- case 5:
- return sub_80D04C8();
+ case MULTIMOVE_START:
+ return MultiMove_Start();
+ case MULTIMOVE_CANCEL:
+ return MultiMove_Cancel();
+ case MULTIMOVE_CHANGE_SELECTION:
+ return MultiMove_ChangeSelection();
+ case MULTIMOVE_GRAB_SELECTION:
+ return MultiMove_GrabSelection();
+ case MULTIMOVE_MOVE_MONS:
+ return MultiMove_MoveMons();
+ case MULTIMOVE_PLACE_MONS:
+ return MultiMove_PlaceMons();
}
-
return FALSE;
}
-static bool8 sub_80D024C(void)
+static bool8 MultiMove_Start(void)
{
- switch (sMoveMonsPtr->state)
+ switch (sMultiMove->state)
{
case 0:
HideBg(0);
sub_80D304C(0x80);
- sMoveMonsPtr->state++;
+ sMultiMove->state++;
break;
case 1:
- sub_80CFE14(&sMoveMonsPtr->fromRow, &sMoveMonsPtr->fromColumn);
- sMoveMonsPtr->toRow = sMoveMonsPtr->fromRow;
- sMoveMonsPtr->toColumn = sMoveMonsPtr->fromColumn;
+ GetCursorBoxColumnAndRow(&sMultiMove->fromColumn, &sMultiMove->fromRow);
+ sMultiMove->toColumn = sMultiMove->fromColumn;
+ sMultiMove->toRow = sMultiMove->fromRow;
ChangeBgX(0, -1024, 0);
ChangeBgY(0, -1024, 0);
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
- FillWindowPixelBuffer8Bit(sPSSData->field_2200, PIXEL_FILL(0));
- sub_80D07B0(sMoveMonsPtr->fromRow, sMoveMonsPtr->fromColumn);
+ FillWindowPixelBuffer8Bit(sStorage->multiMoveWindowId, PIXEL_FILL(0));
+ MultiMove_SetIconToBg(sMultiMove->fromColumn, sMultiMove->fromRow);
SetBgAttribute(0, BG_ATTR_PALETTEMODE, 1);
- PutWindowTilemap(sPSSData->field_2200);
- CopyWindowToVram8Bit(sPSSData->field_2200, 3);
+ PutWindowTilemap(sStorage->multiMoveWindowId);
+ CopyWindowToVram8Bit(sStorage->multiMoveWindowId, 3);
BlendPalettes(0x3F00, 8, RGB_WHITE);
- sub_80CFE54(2);
+ StartCursorAnim(CURSOR_ANIM_OPEN);
SetGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR);
- sMoveMonsPtr->state++;
+ sMultiMove->state++;
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
@@ -8080,23 +8208,23 @@ static bool8 sub_80D024C(void)
return TRUE;
}
-static bool8 sub_80D0344(void)
+static bool8 MultiMove_Cancel(void)
{
- switch (sMoveMonsPtr->state)
+ switch (sMultiMove->state)
{
case 0:
HideBg(0);
- sMoveMonsPtr->state++;
+ sMultiMove->state++;
break;
case 1:
- sub_80D0B5C();
- sub_80CFE54(0);
- sMoveMonsPtr->state++;
+ MultiMove_ResetBg();
+ StartCursorAnim(CURSOR_ANIM_BOUNCE);
+ sMultiMove->state++;
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_80CFE84();
+ SetCursorPriorityTo1();
LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20);
ShowBg(0);
return FALSE;
@@ -8107,19 +8235,19 @@ static bool8 sub_80D0344(void)
return TRUE;
}
-static bool8 sub_80D03B0(void)
+static bool8 MultiMove_ChangeSelection(void)
{
- switch (sMoveMonsPtr->state)
+ switch (sMultiMove->state)
{
case 0:
- if (!sub_80CD554())
+ if (!UpdateCursorPos())
{
- sub_80CFE14(&sMoveMonsPtr->field_6, &sMoveMonsPtr->field_7);
- sub_80D062C();
- sMoveMonsPtr->toRow = sMoveMonsPtr->field_6;
- sMoveMonsPtr->toColumn = sMoveMonsPtr->field_7;
- CopyWindowToVram8Bit(sPSSData->field_2200, 2);
- sMoveMonsPtr->state++;
+ GetCursorBoxColumnAndRow(&sMultiMove->cursorColumn, &sMultiMove->cursorRow);
+ MultiMove_UpdateSelectedIcons();
+ sMultiMove->toColumn = sMultiMove->cursorColumn;
+ sMultiMove->toRow = sMultiMove->cursorRow;
+ CopyWindowToVram8Bit(sStorage->multiMoveWindowId, 2);
+ sMultiMove->state++;
}
break;
case 1:
@@ -8129,207 +8257,198 @@ static bool8 sub_80D03B0(void)
return TRUE;
}
-static bool8 sub_80D0420(void)
+static bool8 MultiMove_GrabSelection(void)
{
- u8 var1, var2;
+ bool8 movingBg, movingMon;
- switch (sMoveMonsPtr->state)
+ switch (sMultiMove->state)
{
case 0:
- sub_80D08CC();
- sub_80D09A4();
- sub_80CDC64(FALSE);
- sMoveMonsPtr->state++;
+ MultiMove_GetMonsFromSelection();
+ MultiMove_RemoveMonsFromBox();
+ InitMultiMonPlaceChange(FALSE);
+ sMultiMove->state++;
break;
case 1:
if (!DoMonPlaceChange())
{
- sub_80CFE54(3);
- sub_80D0884(0, 256, 8);
- sub_80CDC64(TRUE);
- sMoveMonsPtr->state++;
+ StartCursorAnim(CURSOR_ANIM_FIST);
+ MultiMove_InitMove(0, 256, 8);
+ InitMultiMonPlaceChange(TRUE);
+ sMultiMove->state++;
}
break;
case 2:
- var1 = sub_80D0894();
- var2 = DoMonPlaceChange();
- if (!var1 && !var2)
- return FALSE;
+ movingBg = MultiMove_UpdateMove();
+ movingMon = DoMonPlaceChange();
+ if (!movingBg && !movingMon)
+ return FALSE; // Finished
break;
}
return TRUE;
}
-static bool8 sub_80D04A0(void)
+static bool8 MultiMove_MoveMons(void)
{
- u8 var1 = sub_80CD554();
- u8 var2 = sub_80D0894();
+ bool8 movingCursor = UpdateCursorPos();
+ bool8 movingBg = MultiMove_UpdateMove();
- if (!var1 && !var2)
+ if (!movingCursor && !movingBg)
return FALSE;
else
return TRUE;
}
-static bool8 sub_80D04C8(void)
+static bool8 MultiMove_PlaceMons(void)
{
- switch (sMoveMonsPtr->state)
+ switch (sMultiMove->state)
{
case 0:
- sub_80D0AAC();
- sub_80D0884(0, -256, 8);
- sub_80CDC64(FALSE);
- sMoveMonsPtr->state++;
+ MultiMove_SetPlacedMonData();
+ MultiMove_InitMove(0, -256, 8);
+ InitMultiMonPlaceChange(FALSE);
+ sMultiMove->state++;
break;
case 1:
- if (!DoMonPlaceChange() && !sub_80D0894())
+ if (!DoMonPlaceChange() && !MultiMove_UpdateMove())
{
- sub_80D0A1C();
- sub_80CFE54(2);
- sub_80CDC64(TRUE);
+ MultiMove_CreatePlacedMonIcons();
+ StartCursorAnim(CURSOR_ANIM_OPEN);
+ InitMultiMonPlaceChange(TRUE);
HideBg(0);
- sMoveMonsPtr->state++;
+ sMultiMove->state++;
}
break;
case 2:
if (!DoMonPlaceChange())
{
- sub_80CFE54(0);
- sub_80D0B5C();
- sMoveMonsPtr->state++;
+ StartCursorAnim(CURSOR_ANIM_BOUNCE);
+ MultiMove_ResetBg();
+ sMultiMove->state++;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
{
LoadPalette(GetTextWindowPalette(3), 0xD0, 0x20);
- sub_80CFE84();
+ SetCursorPriorityTo1();
ShowBg(0);
return FALSE;
}
break;
}
-
return TRUE;
}
-static bool8 sub_80D0580(u8 arg0)
+// Returns TRUE if the movement was successful, FALSE otherwise
+static bool8 MultiMove_TryMoveGroup(u8 dir)
{
- switch (arg0)
+ switch (dir)
{
- case 0:
- if (sMoveMonsPtr->minColumn == 0)
+ case 0: // Up
+ if (sMultiMove->minRow == 0)
return FALSE;
- sMoveMonsPtr->minColumn--;
- sub_80D0884(0, 1024, 6);
+ sMultiMove->minRow--;
+ MultiMove_InitMove(0, 1024, 6);
break;
- case 1:
- if (sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal >= 5)
+ case 1: // Down
+ if (sMultiMove->minRow + sMultiMove->rowsTotal >= IN_BOX_ROWS)
return FALSE;
- sMoveMonsPtr->minColumn++;
- sub_80D0884(0, -1024, 6);
+ sMultiMove->minRow++;
+ MultiMove_InitMove(0, -1024, 6);
break;
- case 2:
- if (sMoveMonsPtr->minRow == 0)
+ case 2: // Left
+ if (sMultiMove->minColumn == 0)
return FALSE;
- sMoveMonsPtr->minRow--;
- sub_80D0884(1024, 0, 6);
+ sMultiMove->minColumn--;
+ MultiMove_InitMove(1024, 0, 6);
break;
- case 3:
- if (sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal > 5)
+ case 3: // Right
+ if (sMultiMove->minColumn + sMultiMove->columnsTotal >= IN_BOX_COLUMNS)
return FALSE;
- sMoveMonsPtr->minRow++;
- sub_80D0884(-1024, 0, 6);
+ sMultiMove->minColumn++;
+ MultiMove_InitMove(-1024, 0, 6);
break;
}
-
return TRUE;
}
-static void sub_80D062C(void)
+static void MultiMove_UpdateSelectedIcons(void)
{
- s16 var = (abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->field_6)) - (abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->toRow));
- s16 var2 = (abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->field_7)) - (abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->toColumn));
+ s16 columnChange = (abs(sMultiMove->fromColumn - sMultiMove->cursorColumn)) - (abs(sMultiMove->fromColumn - sMultiMove->toColumn));
+ s16 rowChange = (abs(sMultiMove->fromRow - sMultiMove->cursorRow)) - (abs(sMultiMove->fromRow - sMultiMove->toRow));
- if (var > 0)
- sub_80D06D0(sMoveMonsPtr->field_6, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+ if (columnChange > 0)
+ MultiMove_SelectColumn(sMultiMove->cursorColumn, sMultiMove->fromRow, sMultiMove->toRow);
- if (var < 0)
+ if (columnChange < 0)
{
- sub_80D0740(sMoveMonsPtr->toRow, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
- sub_80D06D0(sMoveMonsPtr->field_6, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+ MultiMove_DeselectColumn(sMultiMove->toColumn, sMultiMove->fromRow, sMultiMove->toRow);
+ MultiMove_SelectColumn(sMultiMove->cursorColumn, sMultiMove->fromRow, sMultiMove->toRow);
}
- if (var2 > 0)
- sub_80D0708(sMoveMonsPtr->field_7, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+ if (rowChange > 0)
+ MultiMove_SelectRow(sMultiMove->cursorRow, sMultiMove->fromColumn, sMultiMove->toColumn);
- if (var2 < 0)
+ if (rowChange < 0)
{
- sub_80D0778(sMoveMonsPtr->toColumn, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
- sub_80D0708(sMoveMonsPtr->field_7, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+ MultiMove_DeselectRow(sMultiMove->toRow, sMultiMove->fromColumn, sMultiMove->toColumn);
+ MultiMove_SelectRow(sMultiMove->cursorRow, sMultiMove->fromColumn, sMultiMove->toColumn);
}
}
-static void sub_80D06D0(u8 arg0, u8 arg1, u8 arg2)
+static void MultiMove_SelectColumn(u8 column, u8 minRow, u8 maxRow)
{
- u8 var1 = arg1;
-
- if (arg1 > arg2)
+ if (minRow > maxRow)
{
- arg1 = arg2;
- arg2 = var1;
+ u8 temp;
+ SWAP(minRow, maxRow, temp);
}
- while (arg1 <= arg2)
- sub_80D07B0(arg0, arg1++);
+ while (minRow <= maxRow)
+ MultiMove_SetIconToBg(column, minRow++);
}
-static void sub_80D0708(u8 arg0, u8 arg1, u8 arg2)
+static void MultiMove_SelectRow(u8 row, u8 minColumn, u8 maxColumn)
{
- u8 var1 = arg1;
-
- if (arg1 > arg2)
+ if (minColumn > maxColumn)
{
- arg1 = arg2;
- arg2 = var1;
+ u8 temp;
+ SWAP(minColumn, maxColumn, temp);
}
- while (arg1 <= arg2)
- sub_80D07B0(arg1++, arg0);
+ while (minColumn <= maxColumn)
+ MultiMove_SetIconToBg(minColumn++, row);
}
-static void sub_80D0740(u8 arg0, u8 arg1, u8 arg2)
+static void MultiMove_DeselectColumn(u8 column, u8 minRow, u8 maxRow)
{
- u8 var1 = arg1;
-
- if (arg1 > arg2)
+ if (minRow > maxRow)
{
- arg1 = arg2;
- arg2 = var1;
+ u8 temp;
+ SWAP(minRow, maxRow, temp);
}
- while (arg1 <= arg2)
- sub_80D0834(arg0, arg1++);
+ while (minRow <= maxRow)
+ MultiMove_ClearIconFromBg(column, minRow++);
}
-static void sub_80D0778(u8 arg0, u8 arg1, u8 arg2)
+static void MultiMove_DeselectRow(u8 row, u8 minColumn, u8 maxColumn)
{
- u8 var1 = arg1;
-
- if (arg1 > arg2)
+ if (minColumn > maxColumn)
{
- arg1 = arg2;
- arg2 = var1;
+ u8 temp;
+ SWAP(minColumn, maxColumn, temp);
}
- while (arg1 <= arg2)
- sub_80D0834(arg1++, arg0);
+ while (minColumn <= maxColumn)
+ MultiMove_ClearIconFromBg(minColumn++, row);
}
-static void sub_80D07B0(u8 arg0, u8 arg1)
+static void MultiMove_SetIconToBg(u8 x, u8 y)
{
- u8 position = arg0 + (6 * arg1);
+ u8 position = x + (IN_BOX_COLUMNS * y);
u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2);
u32 personality = GetCurrentBoxMonData(position, MON_DATA_PERSONALITY);
@@ -8338,100 +8457,102 @@ static void sub_80D07B0(u8 arg0, u8 arg1)
const u8 *iconGfx = GetMonIconPtr(species, personality, 1);
u8 index = GetValidMonIconPalIndex(species) + 8;
- BlitBitmapRectToWindow4BitTo8Bit(sPSSData->field_2200,
+ BlitBitmapRectToWindow4BitTo8Bit(sStorage->multiMoveWindowId,
iconGfx,
0,
0,
32,
32,
- 24 * arg0,
- 24 * arg1,
+ 24 * x,
+ 24 * y,
32,
32,
index);
}
}
-static void sub_80D0834(u8 arg0, u8 arg1)
+static void MultiMove_ClearIconFromBg(u8 x, u8 y)
{
- u8 position = arg0 + (6 * arg1);
+ u8 position = x + (IN_BOX_COLUMNS * y);
u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2);
if (species != SPECIES_NONE)
{
- FillWindowPixelRect8Bit(sPSSData->field_2200,
+ FillWindowPixelRect8Bit(sStorage->multiMoveWindowId,
PIXEL_FILL(0),
- 24 * arg0,
- 24 * arg1,
+ 24 * x,
+ 24 * y,
32,
32);
}
}
-static void sub_80D0884(u16 arg0, u16 arg1, u16 arg2)
+static void MultiMove_InitMove(u16 x, u16 y, u16 arg2)
{
- sMoveMonsPtr->bgX = arg0;
- sMoveMonsPtr->bgY = arg1;
- sMoveMonsPtr->field_10 = arg2;
+ sMultiMove->bgX = x;
+ sMultiMove->bgY = y;
+ sMultiMove->bgMoveSteps = arg2;
}
-static u8 sub_80D0894(void)
+static u8 MultiMove_UpdateMove(void)
{
- if (sMoveMonsPtr->field_10 != 0)
+ if (sMultiMove->bgMoveSteps != 0)
{
- ChangeBgX(0, sMoveMonsPtr->bgX, 1);
- ChangeBgY(0, sMoveMonsPtr->bgY, 1);
- sMoveMonsPtr->field_10--;
+ ChangeBgX(0, sMultiMove->bgX, 1);
+ ChangeBgY(0, sMultiMove->bgY, 1);
+ sMultiMove->bgMoveSteps--;
}
- return sMoveMonsPtr->field_10;
+ return sMultiMove->bgMoveSteps;
}
-static void sub_80D08CC(void)
+// Store the Pokémon that the player is picking up
+static void MultiMove_GetMonsFromSelection(void)
{
s32 i, j;
- s32 rowCount, columnCount;
+ s32 columnCount, rowCount;
u8 boxId;
u8 monArrayId;
- sMoveMonsPtr->minRow = min(sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
- sMoveMonsPtr->minColumn = min(sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
- sMoveMonsPtr->rowsTotal = abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->toRow) + 1;
- sMoveMonsPtr->columsTotal = abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->toColumn) + 1;
+ sMultiMove->minColumn = min(sMultiMove->fromColumn, sMultiMove->toColumn);
+ sMultiMove->minRow = min(sMultiMove->fromRow, sMultiMove->toRow);
+ sMultiMove->columnsTotal = abs(sMultiMove->fromColumn - sMultiMove->toColumn) + 1;
+ sMultiMove->rowsTotal = abs(sMultiMove->fromRow - sMultiMove->toRow) + 1;
boxId = StorageGetCurrentBox();
monArrayId = 0;
- rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
- columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
- for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ columnCount = sMultiMove->minColumn + sMultiMove->columnsTotal;
+ rowCount = sMultiMove->minRow + sMultiMove->rowsTotal;
+ for (i = sMultiMove->minRow; i < rowCount; i++)
{
- u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
- for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ u8 boxPosition = (IN_BOX_COLUMNS * i) + sMultiMove->minColumn;
+ for (j = sMultiMove->minColumn; j < columnCount; j++)
{
struct BoxPokemon *boxMon = GetBoxedMonPtr(boxId, boxPosition);
// UB: possible null dereference
#ifdef UBFIX
if (boxMon != NULL)
- sMoveMonsPtr->boxMons[monArrayId] = *boxMon;
-#else
- sMoveMonsPtr->boxMons[monArrayId] = *boxMon;
#endif
+ sMultiMove->boxMons[monArrayId] = *boxMon;
+
monArrayId++;
boxPosition++;
}
}
}
-static void sub_80D09A4(void)
+// The Pokémon the player has picked up have been stored, now delete
+// them from their original positions
+static void MultiMove_RemoveMonsFromBox(void)
{
s32 i, j;
- s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
- s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ s32 columnCount = sMultiMove->minColumn + sMultiMove->columnsTotal;
+ s32 rowCount = sMultiMove->minRow + sMultiMove->rowsTotal;
u8 boxId = StorageGetCurrentBox();
- for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ for (i = sMultiMove->minRow; i < rowCount; i++)
{
- u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
- for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ u8 boxPosition = (IN_BOX_COLUMNS * i) + sMultiMove->minColumn;
+ for (j = sMultiMove->minColumn; j < columnCount; j++)
{
DestroyBoxMonIconAtPosition(boxPosition);
ZeroBoxMonAt(boxId, boxPosition);
@@ -8440,48 +8561,48 @@ static void sub_80D09A4(void)
}
}
-static void sub_80D0A1C(void)
+static void MultiMove_CreatePlacedMonIcons(void)
{
s32 i, j;
- s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
- s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ s32 columnCount = sMultiMove->minColumn + sMultiMove->columnsTotal;
+ s32 rowCount = sMultiMove->minRow + sMultiMove->rowsTotal;
u8 monArrayId = 0;
- for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ for (i = sMultiMove->minRow; i < rowCount; i++)
{
- u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
- for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ u8 boxPosition = (IN_BOX_COLUMNS * i) + sMultiMove->minColumn;
+ for (j = sMultiMove->minColumn; j < columnCount; j++)
{
- if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
- sub_80CB140(boxPosition);
+ if (GetBoxMonData(&sMultiMove->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
+ CreateBoxMonIconAtPos(boxPosition);
monArrayId++;
boxPosition++;
}
}
}
-static void sub_80D0AAC(void)
+static void MultiMove_SetPlacedMonData(void)
{
s32 i, j;
- s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
- s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ s32 columnCount = sMultiMove->minColumn + sMultiMove->columnsTotal;
+ s32 rowCount = sMultiMove->minRow + sMultiMove->rowsTotal;
u8 boxId = StorageGetCurrentBox();
u8 monArrayId = 0;
- for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ for (i = sMultiMove->minRow; i < rowCount; i++)
{
- u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
- for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ u8 boxPosition = (IN_BOX_COLUMNS * i) + sMultiMove->minColumn;
+ for (j = sMultiMove->minColumn; j < columnCount; j++)
{
- if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
- SetBoxMonAt(boxId, boxPosition, &sMoveMonsPtr->boxMons[monArrayId]);
+ if (GetBoxMonData(&sMultiMove->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
+ SetBoxMonAt(boxId, boxPosition, &sMultiMove->boxMons[monArrayId]);
boxPosition++;
monArrayId++;
}
}
}
-static void sub_80D0B5C(void)
+static void MultiMove_ResetBg(void)
{
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
@@ -8491,24 +8612,24 @@ static void sub_80D0B5C(void)
CopyBgTilemapBufferToVram(0);
}
-static u8 sub_80D0BA4(void)
+static u8 MultiMove_GetOrigin(void)
{
- return (IN_BOX_ROWS * sMoveMonsPtr->fromColumn) + sMoveMonsPtr->fromRow;
+ return (IN_BOX_COLUMNS * sMultiMove->fromRow) + sMultiMove->fromColumn;
}
-static bool8 sub_80D0BC0(void)
+static bool8 MultiMove_CanPlaceSelection(void)
{
s32 i, j;
- s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
- s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ s32 columnCount = sMultiMove->minColumn + sMultiMove->columnsTotal;
+ s32 rowCount = sMultiMove->minRow + sMultiMove->rowsTotal;
u8 monArrayId = 0;
- for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ for (i = sMultiMove->minRow; i < rowCount; i++)
{
- u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
- for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ u8 boxPosition = (IN_BOX_COLUMNS * i) + sMultiMove->minColumn;
+ for (j = sMultiMove->minColumn; j < columnCount; j++)
{
- if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES)
+ if (GetBoxMonData(&sMultiMove->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES)
&& GetCurrentBoxMonData(boxPosition, MON_DATA_SANITY_HAS_SPECIES))
return FALSE;
@@ -8516,13 +8637,20 @@ static bool8 sub_80D0BC0(void)
boxPosition++;
}
}
-
return TRUE;
}
-static const u32 gUnknown_0857BB24[] = INCBIN_U32("graphics/pokemon_storage/unknown_frame.4bpp");
-static const struct OamData sOamData_857BBA4 =
+//------------------------------------------------------------------------------
+// SECTION: Item mode
+//
+// The functions below handle the Move Items mode
+//------------------------------------------------------------------------------
+
+
+static const u32 sItemInfoFrame_Gfx[] = INCBIN_U32("graphics/pokemon_storage/item_info_frame.4bpp");
+
+static const struct OamData sOamData_ItemIcon =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -8539,27 +8667,27 @@ static const struct OamData sOamData_857BBA4 =
.affineParam = 0
};
-static const union AffineAnimCmd sSpriteAffineAnim_857BBAC[] =
+static const union AffineAnimCmd sAffineAnim_ItemIcon_Small[] =
{
AFFINEANIMCMD_FRAME(128, 128, 0, 0),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd sSpriteAffineAnim_857BBBC[] =
+static const union AffineAnimCmd sAffineAnim_ItemIcon_Appear[] =
{
AFFINEANIMCMD_FRAME(88, 88, 0, 0),
AFFINEANIMCMD_FRAME(5, 5, 0, 8),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd sSpriteAffineAnim_857BBD4[] =
+static const union AffineAnimCmd sAffineAnim_ItemIcon_Disappear[] =
{
AFFINEANIMCMD_FRAME(128, 128, 0, 0),
AFFINEANIMCMD_FRAME(-5, -5, 0, 8),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd sSpriteAffineAnim_857BBEC[] =
+static const union AffineAnimCmd sAffineAnim_ItemIcon_PickUp[] =
{
AFFINEANIMCMD_FRAME(128, 128, 0, 0),
AFFINEANIMCMD_FRAME(10, 10, 0, 12),
@@ -8567,7 +8695,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_857BBEC[] =
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd sSpriteAffineAnim_857BC0C[] =
+static const union AffineAnimCmd sAffineAnim_ItemIcon_PutDown[] =
{
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_FRAME(-10, -10, 0, 12),
@@ -8575,99 +8703,82 @@ static const union AffineAnimCmd sSpriteAffineAnim_857BC0C[] =
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd sSpriteAffineAnim_857BC2C[] =
+static const union AffineAnimCmd sAffineAnim_ItemIcon_PutAway[] =
{
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_FRAME(-5, -5, 0, 16),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd sSpriteAffineAnim_857BC44[] =
+static const union AffineAnimCmd sAffineAnim_ItemIcon_Large[] =
{
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_END
};
-static const union AffineAnimCmd *const sSpriteAffineAnimTable_857BC44[] =
+static const union AffineAnimCmd *const sAffineAnims_ItemIcon[] =
{
- sSpriteAffineAnim_857BBAC,
- sSpriteAffineAnim_857BBBC,
- sSpriteAffineAnim_857BBD4,
- sSpriteAffineAnim_857BBEC,
- sSpriteAffineAnim_857BC0C,
- sSpriteAffineAnim_857BC2C,
- sSpriteAffineAnim_857BC44
+ [ITEM_ANIM_NONE] = sAffineAnim_ItemIcon_Small,
+ [ITEM_ANIM_APPEAR] = sAffineAnim_ItemIcon_Appear,
+ [ITEM_ANIM_DISAPPEAR] = sAffineAnim_ItemIcon_Disappear,
+ [ITEM_ANIM_PICK_UP] = sAffineAnim_ItemIcon_PickUp,
+ [ITEM_ANIM_PUT_DOWN] = sAffineAnim_ItemIcon_PutDown,
+ [ITEM_ANIM_PUT_AWAY] = sAffineAnim_ItemIcon_PutAway,
+ [ITEM_ANIM_LARGE] = sAffineAnim_ItemIcon_Large
};
-static const struct SpriteTemplate gSpriteTemplate_857BC70 =
+static const struct SpriteTemplate sSpriteTemplate_ItemIcon =
{
- .tileTag = TAG_TILE_7,
- .paletteTag = TAG_PAL_DACB,
- .oam = &sOamData_857BBA4,
+ .tileTag = GFXTAG_ITEM_ICON_0,
+ .paletteTag = PALTAG_ITEM_ICON_0,
+ .oam = &sOamData_ItemIcon,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sSpriteAffineAnimTable_857BC44,
+ .affineAnims = sAffineAnims_ItemIcon,
.callback = SpriteCallbackDummy,
};
-static void sub_80D0C60(void)
+static void CreateItemIconSprites(void)
{
s32 i;
u8 spriteId;
struct CompressedSpriteSheet spriteSheet;
struct SpriteTemplate spriteTemplate;
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
{
- spriteSheet.data = gUnknown_03000F78;
+ spriteSheet.data = sItemIconGfxBuffer;
spriteSheet.size = 0x200;
- spriteTemplate = gSpriteTemplate_857BC70;
+ spriteTemplate = sSpriteTemplate_ItemIcon;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
{
- spriteSheet.tag = TAG_TILE_7 + i;
+ spriteSheet.tag = GFXTAG_ITEM_ICON_0 + i;
LoadCompressedSpriteSheet(&spriteSheet);
- sPSSData->field_2204[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * 32 + (void*)(OBJ_VRAM0);
- sPSSData->field_2204[i].palIndex = AllocSpritePalette(TAG_PAL_DACB + i);
- sPSSData->field_2204[i].palIndex *= 16;
- sPSSData->field_2204[i].palIndex += 0x100;
- spriteTemplate.tileTag = TAG_TILE_7 + i;
- spriteTemplate.paletteTag = TAG_PAL_DACB + i;
+ sStorage->itemIcons[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * 32 + (void*)(OBJ_VRAM0);
+ sStorage->itemIcons[i].palIndex = AllocSpritePalette(PALTAG_ITEM_ICON_0 + i);
+ sStorage->itemIcons[i].palIndex *= 16;
+ sStorage->itemIcons[i].palIndex += 0x100;
+ spriteTemplate.tileTag = GFXTAG_ITEM_ICON_0 + i;
+ spriteTemplate.paletteTag = PALTAG_ITEM_ICON_0 + i;
spriteId = CreateSprite(&spriteTemplate, 0, 0, 11);
- sPSSData->field_2204[i].sprite = &gSprites[spriteId];
- sPSSData->field_2204[i].sprite->invisible = TRUE;
- sPSSData->field_2204[i].unk10 = 0;
- }
- }
- sPSSData->movingItem = 0;
-}
-
-// The functions below handle new features of MOVE_ITEMS box option.
-static bool32 sub_80D1324(u8 cursorArea, u8 cursorPos);
-static const u32 *GetItemIconPic(u16 itemId);
-static const u32 *GetItemIconPalette(u16 itemId);
-static u8 sub_80D12E8(void);
-static void sub_80D140C(u8 id, u8 cursorArea, u8 cursorPos);
-static void sub_80D1524(u8 id, const u32 *itemTiles, const u32 *itemPal);
-static void sub_80D15D4(u8 id, u8 animNum);
-static void sub_80D1740(u8 id, bool8 arg1);
-static u8 sub_80D1370(u8 cursorArea, u8 cursorPos);
-static void sub_80D1604(u8 id, u8 arg1, u8 arg2, u8 arg3);
-static void sub_80D1AD8(struct Sprite *sprite);
-static void sub_80D1A48(struct Sprite *sprite);
-static void sub_80D1A74(struct Sprite *sprite);
-static void sub_80D1B14(struct Sprite *sprite);
-static void sub_80D1B94(struct Sprite *sprite);
-static void sub_80D1CCC(struct Sprite *sprite);
-static void sub_80D1C30(struct Sprite *sprite);
-
-static void sub_80D0D8C(u8 cursorArea, u8 cursorPos)
+ sStorage->itemIcons[i].sprite = &gSprites[spriteId];
+ sStorage->itemIcons[i].sprite->invisible = TRUE;
+ sStorage->itemIcons[i].active = FALSE;
+ }
+ }
+ sStorage->movingItemId = ITEM_NONE;
+}
+
+static void TryLoadItemIconAtPos(u8 cursorArea, u8 cursorPos)
{
u16 heldItem;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
return;
- if (sub_80D1324(cursorArea, cursorPos))
+
+ // If we've already loaded the item here, stop
+ if (IsItemIconAtPosition(cursorArea, cursorPos))
return;
switch (cursorArea)
@@ -8686,381 +8797,389 @@ static void sub_80D0D8C(u8 cursorArea, u8 cursorPos)
return;
}
- if (heldItem != 0)
+ if (heldItem != ITEM_NONE)
{
const u32 *tiles = GetItemIconPic(heldItem);
const u32 *pal = GetItemIconPalette(heldItem);
- u8 id = sub_80D12E8();
+ u8 id = GetNewItemIconIdx();
- sub_80D140C(id, cursorArea, cursorPos);
- sub_80D1524(id, tiles, pal);
- sub_80D15D4(id, 1);
- sub_80D1740(id, TRUE);
+ SetItemIconPosition(id, cursorArea, cursorPos);
+ LoadItemIconGfx(id, tiles, pal);
+ SetItemIconAffineAnim(id, ITEM_ANIM_APPEAR);
+ SetItemIconActive(id, TRUE);
}
}
-static void sub_80D0E50(u8 cursorArea, u8 cursorPos)
+static void TryHideItemIconAtPos(u8 cursorArea, u8 cursorPos)
{
u8 id;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
return;
- id = sub_80D1370(cursorArea, cursorPos);
- sub_80D15D4(id, 2);
- sub_80D1604(id, 0, cursorArea, cursorPos);
+ id = GetItemIconIdxByPosition(cursorArea, cursorPos);
+ SetItemIconAffineAnim(id, ITEM_ANIM_DISAPPEAR);
+ SetItemIconCallback(id, ITEM_CB_WAIT_ANIM, cursorArea, cursorPos);
}
-static void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos)
+static void TakeItemFromMon(u8 cursorArea, u8 cursorPos)
{
u8 id;
- u16 item;
+ u16 itemId;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
return;
- id = sub_80D1370(cursorArea, cursorPos);
- item = 0;
- sub_80D15D4(id, 3);
- sub_80D1604(id, 1, cursorArea, cursorPos);
- sub_80D140C(id, 2, 0);
- if (cursorArea == CURSOR_AREA_IN_BOX)
+ id = GetItemIconIdxByPosition(cursorArea, cursorPos);
+ itemId = ITEM_NONE;
+ SetItemIconAffineAnim(id, ITEM_ANIM_PICK_UP);
+ SetItemIconCallback(id, ITEM_CB_TO_HAND, cursorArea, cursorPos);
+ SetItemIconPosition(id, CURSOR_AREA_IN_HAND, 0);
+ if (cursorArea == CURSOR_AREA_IN_BOX)
{
- SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &item);
+ SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &itemId);
SetBoxMonIconObjMode(cursorPos, 1);
}
else
{
- SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &item);
+ SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &itemId);
SetPartyMonIconObjMode(cursorPos, 1);
}
- sPSSData->movingItem = sPSSData->cursorMonItem;
+ sStorage->movingItemId = sStorage->displayMonItemId;
}
-static void sub_80D0F38(u16 item)
+static void InitItemIconInCursor(u16 itemId)
{
- const u32 *tiles = GetItemIconPic(item);
- const u32 *pal = GetItemIconPalette(item);
- u8 id = sub_80D12E8();
-
- sub_80D1524(id, tiles, pal);
- sub_80D15D4(id, 6);
- sub_80D1604(id, 1, 0, 0);
- sub_80D140C(id, 2, 0);
- sub_80D1740(id, TRUE);
- sPSSData->movingItem = item;
+ const u32 *tiles = GetItemIconPic(itemId);
+ const u32 *pal = GetItemIconPalette(itemId);
+ u8 id = GetNewItemIconIdx();
+ LoadItemIconGfx(id, tiles, pal);
+ SetItemIconAffineAnim(id, ITEM_ANIM_LARGE);
+ SetItemIconCallback(id, ITEM_CB_TO_HAND, CURSOR_AREA_IN_BOX, 0);
+ SetItemIconPosition(id, CURSOR_AREA_IN_HAND, 0);
+ SetItemIconActive(id, TRUE);
+ sStorage->movingItemId = itemId;
}
-static void Item_SwitchMonsWithMoving(u8 cursorArea, u8 cursorPos)
+static void SwapItemsWithMon(u8 cursorArea, u8 cursorPos)
{
u8 id;
- u16 item;
+ u16 itemId;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
return;
- id = sub_80D1370(cursorArea, cursorPos);
- sub_80D15D4(id, 3);
- sub_80D1604(id, 3, 2, 0);
+ id = GetItemIconIdxByPosition(cursorArea, cursorPos);
+ SetItemIconAffineAnim(id, ITEM_ANIM_PICK_UP);
+ SetItemIconCallback(id, ITEM_CB_SWAP_TO_HAND, CURSOR_AREA_IN_HAND, 0);
if (cursorArea == CURSOR_AREA_IN_BOX)
{
- item = GetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM);
- SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &sPSSData->movingItem);
- sPSSData->movingItem = item;
+ itemId = GetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM);
+ SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &sStorage->movingItemId);
+ sStorage->movingItemId = itemId;
}
else
{
- item = GetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM);
- SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &sPSSData->movingItem);
- sPSSData->movingItem = item;
+ itemId = GetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM);
+ SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &sStorage->movingItemId);
+ sStorage->movingItemId = itemId;
}
- id = sub_80D1370(2, 0);
- sub_80D15D4(id, 4);
- sub_80D1604(id, 4, cursorArea, cursorPos);
+ id = GetItemIconIdxByPosition(CURSOR_AREA_IN_HAND, 0);
+ SetItemIconAffineAnim(id, ITEM_ANIM_PUT_DOWN);
+ SetItemIconCallback(id, ITEM_CB_SWAP_TO_MON, cursorArea, cursorPos);
}
-static void Item_GiveMovingToMon(u8 cursorArea, u8 cursorPos)
+static void GiveItemToMon(u8 cursorArea, u8 cursorPos)
{
u8 id;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
return;
- id = sub_80D1370(2, 0);
- sub_80D15D4(id, 4);
- sub_80D1604(id, 2, cursorArea, cursorPos);
+ id = GetItemIconIdxByPosition(CURSOR_AREA_IN_HAND, 0);
+ SetItemIconAffineAnim(id, ITEM_ANIM_PUT_DOWN);
+ SetItemIconCallback(id, ITEM_CB_TO_MON, cursorArea, cursorPos);
if (cursorArea == CURSOR_AREA_IN_BOX)
{
- SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &sPSSData->movingItem);
+ SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &sStorage->movingItemId);
SetBoxMonIconObjMode(cursorPos, 0);
}
else
{
- SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &sPSSData->movingItem);
+ SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &sStorage->movingItemId);
SetPartyMonIconObjMode(cursorPos, 0);
}
}
-static void Item_TakeMons(u8 cursorArea, u8 cursorPos)
+static void MoveItemFromMonToBag(u8 cursorArea, u8 cursorPos)
{
u8 id;
- u16 item;
+ u16 itemId;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
return;
- item = 0;
- id = sub_80D1370(cursorArea, cursorPos);
- sub_80D15D4(id, 2);
- sub_80D1604(id, 0, cursorArea, cursorPos);
- if (cursorArea == CURSOR_AREA_IN_BOX)
+ itemId = ITEM_NONE;
+ id = GetItemIconIdxByPosition(cursorArea, cursorPos);
+ SetItemIconAffineAnim(id, ITEM_ANIM_DISAPPEAR);
+ SetItemIconCallback(id, ITEM_CB_WAIT_ANIM, cursorArea, cursorPos);
+ if (cursorArea == CURSOR_AREA_IN_BOX)
{
- SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &item);
+ SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &itemId);
SetBoxMonIconObjMode(cursorPos, 1);
}
else
{
- SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &item);
+ SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &itemId);
SetPartyMonIconObjMode(cursorPos, 1);
}
}
-static void sub_80D1194(void)
+static void MoveItemFromCursorToBag(void)
{
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
{
- u8 id = sub_80D1370(2, 0);
- sub_80D15D4(id, 5);
- sub_80D1604(id, 0, 2, 0);
+ u8 id = GetItemIconIdxByPosition(CURSOR_AREA_IN_HAND, 0);
+ SetItemIconAffineAnim(id, ITEM_ANIM_PUT_AWAY);
+ SetItemIconCallback(id, ITEM_CB_WAIT_ANIM, CURSOR_AREA_IN_HAND, 0);
}
}
-static void sub_80D11CC(void)
+// The party menu is being closed, if the cursor is on
+// a Pokémon that has a held item make sure it slides
+// up along with the closing menu.
+static void MoveHeldItemWithPartyMenu(void)
{
s32 i;
- if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption != OPTION_MOVE_ITEMS)
return;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
{
- if (sPSSData->field_2204[i].unk10 && sPSSData->field_2204[i].unk8 == 1)
- sub_80D1604(i, 7, 2, 0);
+ if (sStorage->itemIcons[i].active
+ && sStorage->itemIcons[i].area == CURSOR_AREA_IN_PARTY)
+ SetItemIconCallback(i, ITEM_CB_HIDE_PARTY, CURSOR_AREA_IN_HAND, 0);
}
}
-static bool8 sub_80D1218(void)
+static bool8 IsItemIconAnimActive(void)
{
s32 i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
{
- if (sPSSData->field_2204[i].unk10)
+ if (sStorage->itemIcons[i].active)
{
- if (!sPSSData->field_2204[i].sprite->affineAnimEnded && sPSSData->field_2204[i].sprite->affineAnimBeginning)
+ if (!sStorage->itemIcons[i].sprite->affineAnimEnded
+ && sStorage->itemIcons[i].sprite->affineAnimBeginning)
return TRUE;
- if (sPSSData->field_2204[i].sprite->callback != SpriteCallbackDummy && sPSSData->field_2204[i].sprite->callback != sub_80D1AD8)
+ if (sStorage->itemIcons[i].sprite->callback != SpriteCallbackDummy
+ && sStorage->itemIcons[i].sprite->callback != SpriteCB_ItemIcon_SetPosToCursor)
return TRUE;
}
}
-
return FALSE;
}
-static bool8 IsActiveItemMoving(void)
+static bool8 IsMovingItem(void)
{
s32 i;
- if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ if (sStorage->boxOption == OPTION_MOVE_ITEMS)
{
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
{
- if (sPSSData->field_2204[i].unk10 && sPSSData->field_2204[i].unk8 == 2)
+ if (sStorage->itemIcons[i].active
+ && sStorage->itemIcons[i].area == CURSOR_AREA_IN_HAND)
return TRUE;
}
}
-
return FALSE;
}
static const u8 *GetMovingItemName(void)
{
- return ItemId_GetName(sPSSData->movingItem);
+ return ItemId_GetName(sStorage->movingItemId);
}
-static u16 GetMovingItem(void)
+static u16 GetMovingItemId(void)
{
- return sPSSData->movingItem;
+ return sStorage->movingItemId;
}
-static u8 sub_80D12E8(void)
+static u8 GetNewItemIconIdx(void)
{
u8 i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
{
- if (sPSSData->field_2204[i].unk10 == 0)
+ if (!sStorage->itemIcons[i].active)
{
- sPSSData->field_2204[i].unk10 = 1;
+ sStorage->itemIcons[i].active = TRUE;
return i;
}
}
-
- return 3;
+ return MAX_ITEM_ICONS;
}
-static bool32 sub_80D1324(u8 cursorArea, u8 cursorPos)
+static bool32 IsItemIconAtPosition(u8 cursorArea, u8 cursorPos)
{
s32 i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
{
- if (sPSSData->field_2204[i].unk10
- && sPSSData->field_2204[i].unk8 == cursorArea
- && sPSSData->field_2204[i].unk9 == cursorPos)
+ if (sStorage->itemIcons[i].active
+ && sStorage->itemIcons[i].area == cursorArea
+ && sStorage->itemIcons[i].pos == cursorPos)
return TRUE;
}
-
return FALSE;
}
-static u8 sub_80D1370(u8 cursorArea, u8 cursorPos)
+static u8 GetItemIconIdxByPosition(u8 cursorArea, u8 cursorPos)
{
u8 i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
{
- if (sPSSData->field_2204[i].unk10
- && sPSSData->field_2204[i].unk8 == cursorArea
- && sPSSData->field_2204[i].unk9 == cursorPos)
+ if (sStorage->itemIcons[i].active
+ && sStorage->itemIcons[i].area == cursorArea
+ && sStorage->itemIcons[i].pos == cursorPos)
return i;
}
-
- return 3;
+ return MAX_ITEM_ICONS;
}
-static u8 sub_80D13C4(struct Sprite *sprite)
+static u8 GetItemIconIdxBySprite(struct Sprite *sprite)
{
u8 i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
{
- if (sPSSData->field_2204[i].unk10
- && sPSSData->field_2204[i].sprite == sprite)
+ if (sStorage->itemIcons[i].active
+ && sStorage->itemIcons[i].sprite == sprite)
return i;
}
-
- return 3;
+ return MAX_ITEM_ICONS;
}
-static void sub_80D140C(u8 id, u8 cursorArea, u8 cursorPos)
+static void SetItemIconPosition(u8 id, u8 cursorArea, u8 cursorPos)
{
- u8 row, column;
+ u8 x, y;
- if (id >= 3)
+ if (id >= MAX_ITEM_ICONS)
return;
switch (cursorArea)
{
case CURSOR_AREA_IN_BOX:
- row = cursorPos % IN_BOX_ROWS;
- column = cursorPos / IN_BOX_ROWS;
- sPSSData->field_2204[id].sprite->pos1.x = (24 * row) + 112;
- sPSSData->field_2204[id].sprite->pos1.y = (24 * column) + 56;
- sPSSData->field_2204[id].sprite->oam.priority = 2;
+ x = cursorPos % IN_BOX_COLUMNS;
+ y = cursorPos / IN_BOX_COLUMNS;
+ sStorage->itemIcons[id].sprite->pos1.x = (24 * x) + 112;
+ sStorage->itemIcons[id].sprite->pos1.y = (24 * y) + 56;
+ sStorage->itemIcons[id].sprite->oam.priority = 2;
break;
case CURSOR_AREA_IN_PARTY:
if (cursorPos == 0)
{
- sPSSData->field_2204[id].sprite->pos1.x = 116;
- sPSSData->field_2204[id].sprite->pos1.y = 76;
+ sStorage->itemIcons[id].sprite->pos1.x = 116;
+ sStorage->itemIcons[id].sprite->pos1.y = 76;
}
else
{
- sPSSData->field_2204[id].sprite->pos1.x = 164;
- sPSSData->field_2204[id].sprite->pos1.y = 24 * (cursorPos - 1) + 28;
+ sStorage->itemIcons[id].sprite->pos1.x = 164;
+ sStorage->itemIcons[id].sprite->pos1.y = 24 * (cursorPos - 1) + 28;
}
- sPSSData->field_2204[id].sprite->oam.priority = 1;
+ sStorage->itemIcons[id].sprite->oam.priority = 1;
break;
}
- sPSSData->field_2204[id].unk8 = cursorArea;
- sPSSData->field_2204[id].unk9 = cursorPos;
+ sStorage->itemIcons[id].area = cursorArea;
+ sStorage->itemIcons[id].pos = cursorPos;
}
-static void sub_80D1524(u8 id, const u32 *itemTiles, const u32 *itemPal)
+static void LoadItemIconGfx(u8 id, const u32 *itemTiles, const u32 *itemPal)
{
s32 i;
- if (id >= 3)
+ if (id >= MAX_ITEM_ICONS)
return;
- CpuFastFill(0, sPSSData->field_42C4, 0x200);
- LZ77UnCompWram(itemTiles, sPSSData->field_22C4);
+ CpuFastFill(0, sStorage->itemIconBuffer, 0x200);
+ LZ77UnCompWram(itemTiles, sStorage->tileBuffer);
for (i = 0; i < 3; i++)
- CpuFastCopy(sPSSData->field_22C4 + (i * 0x60), sPSSData->field_42C4 + (i * 0x80), 0x60);
+ CpuFastCopy(&sStorage->tileBuffer[i * 0x60], &sStorage->itemIconBuffer[i * 0x80], 0x60);
- CpuFastCopy(sPSSData->field_42C4, sPSSData->field_2204[id].tiles, 0x200);
- LZ77UnCompWram(itemPal, sPSSData->field_42C4);
- LoadPalette(sPSSData->field_42C4, sPSSData->field_2204[id].palIndex, 0x20);
+ CpuFastCopy(sStorage->itemIconBuffer, sStorage->itemIcons[id].tiles, 0x200);
+ LZ77UnCompWram(itemPal, sStorage->itemIconBuffer);
+ LoadPalette(sStorage->itemIconBuffer, sStorage->itemIcons[id].palIndex, 0x20);
}
-static void sub_80D15D4(u8 id, u8 animNum)
+static void SetItemIconAffineAnim(u8 id, u8 animNum)
{
- if (id >= 3)
+ if (id >= MAX_ITEM_ICONS)
return;
- StartSpriteAffineAnim(sPSSData->field_2204[id].sprite, animNum);
+ StartSpriteAffineAnim(sStorage->itemIcons[id].sprite, animNum);
}
-static void sub_80D1604(u8 id, u8 arg1, u8 arg2, u8 arg3)
+#define sItemIconId data[0]
+#define sState data[0]
+#define sCursorArea data[6]
+#define sCursorPos data[7]
+
+static void SetItemIconCallback(u8 id, u8 callbackId, u8 cursorArea, u8 cursorPos)
{
- if (id >= 3)
+ if (id >= MAX_ITEM_ICONS)
return;
- switch (arg1)
+ switch (callbackId)
{
- case 0:
- sPSSData->field_2204[id].sprite->data[0] = id;
- sPSSData->field_2204[id].sprite->callback = sub_80D1A48;
+ case ITEM_CB_WAIT_ANIM:
+ sStorage->itemIcons[id].sprite->sItemIconId = id;
+ sStorage->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_WaitAnim;
break;
- case 1:
- sPSSData->field_2204[id].sprite->data[0] = 0;
- sPSSData->field_2204[id].sprite->callback = sub_80D1A74;
+ case ITEM_CB_TO_HAND:
+ sStorage->itemIcons[id].sprite->sState = 0;
+ sStorage->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_ToHand;
break;
- case 2:
- sPSSData->field_2204[id].sprite->data[0] = 0;
- sPSSData->field_2204[id].sprite->data[6] = arg2;
- sPSSData->field_2204[id].sprite->data[7] = arg3;
- sPSSData->field_2204[id].sprite->callback = sub_80D1B14;
+ case ITEM_CB_TO_MON:
+ sStorage->itemIcons[id].sprite->sState = 0;
+ sStorage->itemIcons[id].sprite->sCursorArea = cursorArea;
+ sStorage->itemIcons[id].sprite->sCursorPos = cursorPos;
+ sStorage->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_ToMon;
break;
- case 3:
- sPSSData->field_2204[id].sprite->data[0] = 0;
- sPSSData->field_2204[id].sprite->callback = sub_80D1B94;
- sPSSData->field_2204[id].sprite->data[6] = arg2;
- sPSSData->field_2204[id].sprite->data[7] = arg3;
+ case ITEM_CB_SWAP_TO_HAND:
+ sStorage->itemIcons[id].sprite->sState = 0;
+ sStorage->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_SwapToHand;
+ sStorage->itemIcons[id].sprite->sCursorArea = cursorArea;
+ sStorage->itemIcons[id].sprite->sCursorPos = cursorPos;
break;
- case 4:
- sPSSData->field_2204[id].sprite->data[0] = 0;
- sPSSData->field_2204[id].sprite->data[6] = arg2;
- sPSSData->field_2204[id].sprite->data[7] = arg3;
- sPSSData->field_2204[id].sprite->callback = sub_80D1C30;
+ case ITEM_CB_SWAP_TO_MON:
+ sStorage->itemIcons[id].sprite->sState = 0;
+ sStorage->itemIcons[id].sprite->sCursorArea = cursorArea;
+ sStorage->itemIcons[id].sprite->sCursorPos = cursorPos;
+ sStorage->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_SwapToMon;
break;
- case 7:
- sPSSData->field_2204[id].sprite->callback = sub_80D1CCC;
+ case ITEM_CB_HIDE_PARTY:
+ // If cursor is on a Pokémon with a held item and
+ // the player closes the party menu, have the held
+ // item follow the Pokémon as the menu slides out
+ sStorage->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_HideParty;
break;
}
}
-static void sub_80D1740(u8 id, bool8 arg1)
+static void SetItemIconActive(u8 id, bool8 active)
{
- if (id >= 3)
+ if (id >= MAX_ITEM_ICONS)
return;
- sPSSData->field_2204[id].unk10 = arg1;
- sPSSData->field_2204[id].sprite->invisible = (arg1 == FALSE);
+ sStorage->itemIcons[id].active = active;
+ sStorage->itemIcons[id].sprite->invisible = (active == FALSE);
}
static const u32 *GetItemIconPic(u16 itemId)
@@ -9077,90 +9196,88 @@ static void PrintItemDescription(void)
{
const u8 *description;
- if (IsActiveItemMoving())
- description = ItemId_GetDescription(sPSSData->movingItem);
+ if (IsMovingItem())
+ description = ItemId_GetDescription(sStorage->movingItemId);
else
- description = ItemId_GetDescription(sPSSData->cursorMonItem);
+ description = ItemId_GetDescription(sStorage->displayMonItemId);
FillWindowPixelBuffer(2, PIXEL_FILL(1));
AddTextPrinterParameterized5(2, 1, description, 4, 0, 0, NULL, 0, 1);
}
-static void sub_80D1818(void)
+static void InitItemInfoWindow(void)
{
- sPSSData->field_2236 = 0x15;
- LoadBgTiles(0, gUnknown_0857BB24, 0x80, 0x13A);
- sub_80D19B4(0);
+ sStorage->itemInfoWindowOffset = 21;
+ LoadBgTiles(0, sItemInfoFrame_Gfx, 0x80, 0x13A);
+ DrawItemInfoWindow(0);
}
-static bool8 sub_80D184C(void)
+static bool8 UpdateItemInfoWindowSlideIn(void)
{
- s32 i, var;
+ s32 i, pos;
- if (sPSSData->field_2236 == 0)
+ if (sStorage->itemInfoWindowOffset == 0)
return FALSE;
- sPSSData->field_2236--;
- var = 0x15 - sPSSData->field_2236;
- for (i = 0; i < var; i++)
- {
- WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + sPSSData->field_2236 + i, i, 13, 1, 7, 15, 21);
- }
+ sStorage->itemInfoWindowOffset--;
+ pos = 21 - sStorage->itemInfoWindowOffset;
+ for (i = 0; i < pos; i++)
+ WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + sStorage->itemInfoWindowOffset + i, i, 13, 1, 7, 15, 21);
- sub_80D19B4(var);
- return (sPSSData->field_2236 != 0);
+ DrawItemInfoWindow(pos);
+ return (sStorage->itemInfoWindowOffset != 0);
}
-static bool8 sub_80D18E4(void)
+static bool8 UpdateItemInfoWindowSlideOut(void)
{
- s32 i, var;
+ s32 i, pos;
- if (sPSSData->field_2236 == 0x16)
+ if (sStorage->itemInfoWindowOffset == 22)
return FALSE;
- if (sPSSData->field_2236 == 0)
+ if (sStorage->itemInfoWindowOffset == 0)
FillBgTilemapBufferRect(0, 0, 21, 12, 1, 9, 17);
- sPSSData->field_2236++;
- var = 0x15 - sPSSData->field_2236;
- for (i = 0; i < var; i++)
+ sStorage->itemInfoWindowOffset++;
+ pos = 21 - sStorage->itemInfoWindowOffset;
+ for (i = 0; i < pos; i++)
{
- WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + sPSSData->field_2236 + i, i, 13, 1, 7, 15, 21);
+ WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + sStorage->itemInfoWindowOffset + i, i, 13, 1, 7, 15, 21);
}
- if (var >= 0)
- sub_80D19B4(var);
+ if (pos >= 0)
+ DrawItemInfoWindow(pos);
- FillBgTilemapBufferRect(0, 0, var + 1, 12, 1, 9, 0x11);
+ FillBgTilemapBufferRect(0, 0, pos + 1, 12, 1, 9, 0x11);
ScheduleBgCopyTilemapToVram(0);
return TRUE;
}
-static void sub_80D19B4(u32 arg0)
+static void DrawItemInfoWindow(u32 pos)
{
- if (arg0 != 0)
+ if (pos != 0)
{
- FillBgTilemapBufferRect(0, 0x13A, 0, 0xC, arg0, 1, 0xFu);
- FillBgTilemapBufferRect(0, 0x93A, 0, 0x14, arg0, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x13A, 0, 0xC, pos, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x93A, 0, 0x14, pos, 1, 0xFu);
}
- FillBgTilemapBufferRect(0, 0x13B, arg0, 0xD, 1, 7, 0xFu);
- FillBgTilemapBufferRect(0, 0x13C, arg0, 0xC, 1, 1, 0xFu);
- FillBgTilemapBufferRect(0, 0x13D, arg0, 0x14, 1, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x13B, pos, 0xD, 1, 7, 0xFu);
+ FillBgTilemapBufferRect(0, 0x13C, pos, 0xC, 1, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x13D, pos, 0x14, 1, 1, 0xFu);
ScheduleBgCopyTilemapToVram(0);
}
-static void sub_80D1A48(struct Sprite *sprite)
+static void SpriteCB_ItemIcon_WaitAnim(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
- sub_80D1740(sprite->data[0], FALSE);
+ SetItemIconActive(sprite->sItemIconId, FALSE);
sprite->callback = SpriteCallbackDummy;
}
}
-static void sub_80D1A74(struct Sprite *sprite)
+static void SpriteCB_ItemIcon_ToHand(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->data[1] = sprite->pos1.x << 4;
@@ -9168,28 +9285,28 @@ static void sub_80D1A74(struct Sprite *sprite)
sprite->data[3] = 10;
sprite->data[4] = 21;
sprite->data[5] = 0;
- sprite->data[0]++;
+ sprite->sState++;
case 1:
sprite->data[1] -= sprite->data[3];
sprite->data[2] -= sprite->data[4];
sprite->pos1.x = sprite->data[1] >> 4;
sprite->pos1.y = sprite->data[2] >> 4;
if (++sprite->data[5] > 11)
- sprite->callback = sub_80D1AD8;
+ sprite->callback = SpriteCB_ItemIcon_SetPosToCursor;
break;
}
}
-static void sub_80D1AD8(struct Sprite *sprite)
+static void SpriteCB_ItemIcon_SetPosToCursor(struct Sprite *sprite)
{
- sprite->pos1.x = sPSSData->field_CB4->pos1.x + 4;
- sprite->pos1.y = sPSSData->field_CB4->pos1.y + sPSSData->field_CB4->pos2.y + 8;
- sprite->oam.priority = sPSSData->field_CB4->oam.priority;
+ sprite->pos1.x = sStorage->cursorSprite->pos1.x + 4;
+ sprite->pos1.y = sStorage->cursorSprite->pos1.y + sStorage->cursorSprite->pos2.y + 8;
+ sprite->oam.priority = sStorage->cursorSprite->oam.priority;
}
-static void sub_80D1B14(struct Sprite *sprite)
+static void SpriteCB_ItemIcon_ToMon(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->data[1] = sprite->pos1.x << 4;
@@ -9197,7 +9314,7 @@ static void sub_80D1B14(struct Sprite *sprite)
sprite->data[3] = 10;
sprite->data[4] = 21;
sprite->data[5] = 0;
- sprite->data[0]++;
+ sprite->sState++;
case 1:
sprite->data[1] += sprite->data[3];
sprite->data[2] += sprite->data[4];
@@ -9205,16 +9322,16 @@ static void sub_80D1B14(struct Sprite *sprite)
sprite->pos1.y = sprite->data[2] >> 4;
if (++sprite->data[5] > 11)
{
- sub_80D140C(sub_80D13C4(sprite), sprite->data[6], sprite->data[7]);
+ SetItemIconPosition(GetItemIconIdxBySprite(sprite), sprite->sCursorArea, sprite->sCursorPos);
sprite->callback = SpriteCallbackDummy;
}
break;
}
}
-static void sub_80D1B94(struct Sprite *sprite)
+static void SpriteCB_ItemIcon_SwapToHand(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->data[1] = sprite->pos1.x << 4;
@@ -9222,7 +9339,7 @@ static void sub_80D1B94(struct Sprite *sprite)
sprite->data[3] = 10;
sprite->data[4] = 21;
sprite->data[5] = 0;
- sprite->data[0]++;
+ sprite->sState++;
case 1:
sprite->data[1] -= sprite->data[3];
sprite->data[2] -= sprite->data[4];
@@ -9231,17 +9348,17 @@ static void sub_80D1B94(struct Sprite *sprite)
sprite->pos2.x = gSineTable[sprite->data[5] * 8] >> 4;
if (++sprite->data[5] > 11)
{
- sub_80D140C(sub_80D13C4(sprite), sprite->data[6], sprite->data[7]);
+ SetItemIconPosition(GetItemIconIdxBySprite(sprite), sprite->sCursorArea, sprite->sCursorPos);
sprite->pos2.x = 0;
- sprite->callback = sub_80D1AD8;
+ sprite->callback = SpriteCB_ItemIcon_SetPosToCursor;
}
break;
}
}
-static void sub_80D1C30(struct Sprite *sprite)
+static void SpriteCB_ItemIcon_SwapToMon(struct Sprite *sprite)
{
- switch (sprite->data[0])
+ switch (sprite->sState)
{
case 0:
sprite->data[1] = sprite->pos1.x << 4;
@@ -9249,7 +9366,7 @@ static void sub_80D1C30(struct Sprite *sprite)
sprite->data[3] = 10;
sprite->data[4] = 21;
sprite->data[5] = 0;
- sprite->data[0]++;
+ sprite->sState++;
case 1:
sprite->data[1] += sprite->data[3];
sprite->data[2] += sprite->data[4];
@@ -9258,7 +9375,7 @@ static void sub_80D1C30(struct Sprite *sprite)
sprite->pos2.x = -(gSineTable[sprite->data[5] * 8] >> 4);
if (++sprite->data[5] > 11)
{
- sub_80D140C(sub_80D13C4(sprite), sprite->data[6], sprite->data[7]);
+ SetItemIconPosition(GetItemIconIdxBySprite(sprite), sprite->sCursorArea, sprite->sCursorPos);
sprite->callback = SpriteCallbackDummy;
sprite->pos2.x = 0;
}
@@ -9266,24 +9383,37 @@ static void sub_80D1C30(struct Sprite *sprite)
}
}
-static void sub_80D1CCC(struct Sprite *sprite)
+static void SpriteCB_ItemIcon_HideParty(struct Sprite *sprite)
{
sprite->pos1.y -= 8;
if (sprite->pos1.y + sprite->pos2.y < -16)
{
sprite->callback = SpriteCallbackDummy;
- sub_80D1740(sub_80D13C4(sprite), FALSE);
+ SetItemIconActive(GetItemIconIdxBySprite(sprite), FALSE);
}
}
-void nullsub_pss(void)
-{
+#undef sState
+#undef sItemIconId
+#undef sCursorArea
+#undef sCursorPos
+
+
+//------------------------------------------------------------------------------
+// SECTION: General utility
+//------------------------------------------------------------------------------
-}
-void nullsub_98(void)
+// Unused, leftover from FRLG
+static void BackupPokemonStorage(void/*struct PokemonStorage * dest*/)
{
+ //*dest = *gPokemonStoragePtr;
+}
+// Unused, leftover from FRLG
+static void RestorePokemonStorage(void/*struct PokemonStorage * src*/)
+{
+ //*gPokemonStoragePtr = *src;
}
// Functions here are general utility functions.
@@ -9336,9 +9466,9 @@ u32 GetBoxMonLevelAt(u8 boxId, u8 boxPosition)
if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT && GetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], MON_DATA_SANITY_HAS_SPECIES))
lvl = GetLevelFromBoxMonExp(&gPokemonStoragePtr->boxes[boxId][boxPosition]);
- #ifdef BUGFIX
+#ifdef BUGFIX
else
- #endif
+#endif
lvl = 0;
return lvl;
@@ -9411,7 +9541,7 @@ u8 *GetBoxNamePtr(u8 boxId)
return NULL;
}
-u8 GetBoxWallpaper(u8 boxId)
+static u8 GetBoxWallpaper(u8 boxId)
{
if (boxId < TOTAL_BOXES_COUNT)
return gPokemonStoragePtr->boxWallpapers[boxId];
@@ -9419,23 +9549,24 @@ u8 GetBoxWallpaper(u8 boxId)
return 0;
}
-void SetBoxWallpaper(u8 boxId, u8 wallpaperId)
+static void SetBoxWallpaper(u8 boxId, u8 wallpaperId)
{
if (boxId < TOTAL_BOXES_COUNT && wallpaperId < WALLPAPER_COUNT)
gPokemonStoragePtr->boxWallpapers[boxId] = wallpaperId;
}
-s16 sub_80D214C(struct BoxPokemon *boxMons, u8 currIndex, u8 maxIndex, u8 arg3)
+// For moving to the next Pokémon while viewing the summary screen
+s16 AdvanceStorageMonIndex(struct BoxPokemon *boxMons, u8 currIndex, u8 maxIndex, u8 mode)
{
s16 i;
- s16 adder = -1;
+ s16 direction = -1;
- if (arg3 < 2)
- adder = 1;
+ if (mode == 0 || mode == 1)
+ direction = 1;
- if (arg3 == 1 || arg3 == 3)
+ if (mode == 1 || mode == 3)
{
- for (i = (s8)currIndex + adder; i >= 0 && i <= maxIndex; i += adder)
+ for (i = (s8)currIndex + direction; i >= 0 && i <= maxIndex; i += direction)
{
if (GetBoxMonData(&boxMons[i], MON_DATA_SPECIES) != SPECIES_NONE)
return i;
@@ -9443,7 +9574,7 @@ s16 sub_80D214C(struct BoxPokemon *boxMons, u8 currIndex, u8 maxIndex, u8 arg3)
}
else
{
- for (i = (s8)currIndex + adder; i >= 0 && i <= maxIndex; i += adder)
+ for (i = (s8)currIndex + direction; i >= 0 && i <= maxIndex; i += direction)
{
if (GetBoxMonData(&boxMons[i], MON_DATA_SPECIES) != SPECIES_NONE
&& !GetBoxMonData(&boxMons[i], MON_DATA_IS_EGG))
@@ -9537,6 +9668,12 @@ bool32 AnyStorageMonWithMove(u16 moveId)
return FALSE;
}
+
+//------------------------------------------------------------------------------
+// SECTION: Walda
+//------------------------------------------------------------------------------
+
+
void ResetWaldaWallpaper(void)
{
gSaveBlock1Ptr->waldaPhrase.iconId = 0;
@@ -9564,7 +9701,7 @@ u32 GetWaldaWallpaperPatternId(void)
void SetWaldaWallpaperPatternId(u8 id)
{
- if (id < FRIENDS_WALLPAPERS_COUNT)
+ if (id < ARRAY_COUNT(sWaldaWallpapers))
gSaveBlock1Ptr->waldaPhrase.patternId = id;
}
@@ -9575,7 +9712,7 @@ u32 GetWaldaWallpaperIconId(void)
void SetWaldaWallpaperIconId(u8 id)
{
- if (id < 30)
+ if (id < ARRAY_COUNT(sWaldaWallpaperIcons))
gSaveBlock1Ptr->waldaPhrase.iconId = id;
}
@@ -9605,287 +9742,338 @@ bool32 IsWaldaPhraseEmpty(void)
return (gSaveBlock1Ptr->waldaPhrase.text[0] == EOS);
}
-// Not sure what the purpose of these functions is.
-// They seem to only be called while PSS is initialized.
-EWRAM_DATA static struct UnkStruct_2039D84 *gUnknown_02039D84 = NULL;
-EWRAM_DATA static u16 gUnknown_02039D88 = 0;
+//------------------------------------------------------------------------------
+// SECTION: TilemapUtil
+//
+// Handles 3 particular tilemaps in a somewhat unusual way.
+// For example, while the cursor is on the Close Box button it flashes between
+// two states alternately. Both these states are their own part of the same
+// tilemap that's always present. The utility shifts the tilemap up and down
+// to show/hide the states, and limits the view with a rectangle that only
+// reveals one at a time.
+// Each tilemap is tracked with a TILEMAPID that can be used to reference it.
+//------------------------------------------------------------------------------
+
-static void sub_80D259C(u8 count)
+struct TilemapUtil_RectData
+{
+ s16 x;
+ s16 y;
+ u16 width;
+ u16 height;
+ s16 destX;
+ s16 destY;
+};
+
+struct TilemapUtil
+{
+ struct TilemapUtil_RectData prev; // Only read in unused function
+ struct TilemapUtil_RectData cur;
+ const void *savedTilemap; // Only written in unused function
+ const void *tilemap;
+ u16 altWidth;
+ u16 altHeight; // Never read
+ u16 width;
+ u16 height; // Never read
+ u16 rowSize; // Never read
+ u8 tileSize;
+ u8 bg;
+ bool8 active;
+};
+
+EWRAM_DATA static struct TilemapUtil *sTilemapUtil = NULL;
+EWRAM_DATA static u16 sNumTilemapUtilIds = 0;
+
+static void TilemapUtil_Init(u8 count)
{
u16 i;
- gUnknown_02039D84 = Alloc(sizeof(*gUnknown_02039D84) * count);
- gUnknown_02039D88 = (gUnknown_02039D84 == NULL) ? 0 : count;
- for (i = 0; i < gUnknown_02039D88; i++)
+ sTilemapUtil = Alloc(sizeof(*sTilemapUtil) * count);
+ sNumTilemapUtilIds = (sTilemapUtil == NULL) ? 0 : count;
+ for (i = 0; i < sNumTilemapUtilIds; i++)
{
- gUnknown_02039D84[i].field_18 = NULL;
- gUnknown_02039D84[i].field_2C = 0;
+ sTilemapUtil[i].savedTilemap = NULL;
+ sTilemapUtil[i].active = FALSE;
}
}
-static void sub_80D25F0(void)
+static void TilemapUtil_Free(void)
{
- Free(gUnknown_02039D84);
+ Free(sTilemapUtil);
}
-static void sub_80D2604(void)
+// Unused
+static void TilemapUtil_UpdateAll(void)
{
s32 i;
- for (i = 0; i < gUnknown_02039D88; i++)
+ for (i = 0; i < sNumTilemapUtilIds; i++)
{
- if (gUnknown_02039D84[i].field_2C == 1)
- sub_80D2918(i);
+ if (sTilemapUtil[i].active == TRUE)
+ TilemapUtil_Update(i);
}
}
struct
{
- u16 a;
- u16 b;
-}
-static const sUnkVars[][4] =
+ u16 width;
+ u16 height;
+} static const sTilemapDimensions[][4] =
{
{
- {0x0100, 0x0100},
- {0x0200, 0x0100},
- {0x0100, 0x0200},
- {0x0200, 0x0200},
+ { 256, 256},
+ { 512, 256},
+ { 256, 512},
+ { 512, 512},
},
{
- {0x0080, 0x0080},
- {0x0100, 0x0100},
- {0x0200, 0x0200},
- {0x0400, 0x0400},
+ { 128, 128},
+ { 256, 256},
+ { 512, 512},
+ {1024, 1024},
},
};
-static void sub_80D2644(u8 id, u8 bg, const void *arg2, u16 arg3, u16 arg4)
+static void TilemapUtil_SetMap(u8 id, u8 bg, const void *tilemap, u16 width, u16 height)
{
u16 bgScreenSize, bgType;
- if (id >= gUnknown_02039D88)
+ if (id >= sNumTilemapUtilIds)
return;
- gUnknown_02039D84[id].field_18 = NULL;
- gUnknown_02039D84[id].field_1C = arg2;
- gUnknown_02039D84[id].field_2B = bg;
- gUnknown_02039D84[id].field_24 = arg3;
- gUnknown_02039D84[id].field_26 = arg4;
+ sTilemapUtil[id].savedTilemap = NULL;
+ sTilemapUtil[id].tilemap = tilemap;
+ sTilemapUtil[id].bg = bg;
+ sTilemapUtil[id].width = width;
+ sTilemapUtil[id].height = height;
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;
+ sTilemapUtil[id].altWidth = sTilemapDimensions[bgType][bgScreenSize].width;
+ sTilemapUtil[id].altHeight = sTilemapDimensions[bgType][bgScreenSize].height;
if (bgType != 0)
- gUnknown_02039D84[id].field_2A = 1;
+ sTilemapUtil[id].tileSize = 1;
else
- gUnknown_02039D84[id].field_2A = 2;
+ sTilemapUtil[id].tileSize = 2;
- gUnknown_02039D84[id].field_28 = gUnknown_02039D84[id].field_2A * arg3;
- gUnknown_02039D84[id].field_0[1].field_4 = arg3;
- gUnknown_02039D84[id].field_0[1].field_6 = arg4;
- gUnknown_02039D84[id].field_0[1].field_0 = 0;
- gUnknown_02039D84[id].field_0[1].field_2 = 0;
- gUnknown_02039D84[id].field_0[1].field_8 = 0;
- gUnknown_02039D84[id].field_0[1].field_A = 0;
- gUnknown_02039D84[id].field_0[0] = gUnknown_02039D84[id].field_0[1];
- gUnknown_02039D84[id].field_2C = 1;
+ sTilemapUtil[id].rowSize = sTilemapUtil[id].tileSize * width;
+ sTilemapUtil[id].cur.width = width;
+ sTilemapUtil[id].cur.height = height;
+ sTilemapUtil[id].cur.x = 0;
+ sTilemapUtil[id].cur.y = 0;
+ sTilemapUtil[id].cur.destX = 0;
+ sTilemapUtil[id].cur.destY = 0;
+ sTilemapUtil[id].prev = sTilemapUtil[id].cur;
+ sTilemapUtil[id].active = TRUE;
}
-static void sub_80D2740(u8 id, const void *arg1)
+// Unused
+static void TilemapUtil_SetSavedMap(u8 id, const void *tilemap)
{
- if (id >= gUnknown_02039D88)
+ if (id >= sNumTilemapUtilIds)
return;
- gUnknown_02039D84[id].field_18 = arg1;
- gUnknown_02039D84[id].field_2C = 1;
+ sTilemapUtil[id].savedTilemap = tilemap;
+ sTilemapUtil[id].active = TRUE;
}
-static void sub_80D2770(u8 id, u16 arg1, u16 arg2)
+static void TilemapUtil_SetPos(u8 id, u16 x, u16 y)
{
- if (id >= gUnknown_02039D88)
+ if (id >= sNumTilemapUtilIds)
return;
- gUnknown_02039D84[id].field_0[1].field_8 = arg1;
- gUnknown_02039D84[id].field_0[1].field_A = arg2;
- gUnknown_02039D84[id].field_2C = 1;
+ sTilemapUtil[id].cur.destX = x;
+ sTilemapUtil[id].cur.destY = y;
+ sTilemapUtil[id].active = TRUE;
}
-static void sub_80D27AC(u8 id, u16 arg1, u16 arg2, u16 arg3, u16 arg4)
+static void TilemapUtil_SetRect(u8 id, u16 x, u16 y, u16 width, u16 height)
{
- if (id >= gUnknown_02039D88)
+ if (id >= sNumTilemapUtilIds)
return;
- gUnknown_02039D84[id].field_0[1].field_0 = arg1;
- gUnknown_02039D84[id].field_0[1].field_2 = arg2;
- gUnknown_02039D84[id].field_0[1].field_4 = arg3;
- gUnknown_02039D84[id].field_0[1].field_6 = arg4;
- gUnknown_02039D84[id].field_2C = 1;
+ sTilemapUtil[id].cur.x = x;
+ sTilemapUtil[id].cur.y = y;
+ sTilemapUtil[id].cur.width = width;
+ sTilemapUtil[id].cur.height = height;
+ sTilemapUtil[id].active = TRUE;
}
-static void sub_80D27F4(u8 id, u8 arg1, s8 arg2)
+static void TilemapUtil_Move(u8 id, u8 mode, s8 val)
{
- if (id >= gUnknown_02039D88)
+ if (id >= sNumTilemapUtilIds)
return;
- switch (arg1)
+ switch (mode)
{
case 0:
- gUnknown_02039D84[id].field_0[1].field_8 += arg2;
- gUnknown_02039D84[id].field_0[1].field_4 -= arg2;
+ sTilemapUtil[id].cur.destX += val;
+ sTilemapUtil[id].cur.width -= val;
break;
case 1:
- gUnknown_02039D84[id].field_0[1].field_0 += arg2;
- gUnknown_02039D84[id].field_0[1].field_4 += arg2;
+ sTilemapUtil[id].cur.x += val;
+ sTilemapUtil[id].cur.width += val;
break;
case 2:
- gUnknown_02039D84[id].field_0[1].field_A += arg2;
- gUnknown_02039D84[id].field_0[1].field_6 -= arg2;
+ sTilemapUtil[id].cur.destY += val;
+ sTilemapUtil[id].cur.height -= val;
break;
case 3:
- gUnknown_02039D84[id].field_0[1].field_2 -= arg2;
- gUnknown_02039D84[id].field_0[1].field_6 += arg2;
+ sTilemapUtil[id].cur.y -= val;
+ sTilemapUtil[id].cur.height += val;
break;
case 4:
- gUnknown_02039D84[id].field_0[1].field_8 += arg2;
+ sTilemapUtil[id].cur.destX += val;
break;
case 5:
- gUnknown_02039D84[id].field_0[1].field_A += arg2;
+ sTilemapUtil[id].cur.destY += val;
break;
}
- gUnknown_02039D84[id].field_2C = 1;
+ sTilemapUtil[id].active = TRUE;
}
-static void sub_80D2918(u8 id)
+static void TilemapUtil_Update(u8 id)
{
- if (id >= gUnknown_02039D88)
+ if (id >= sNumTilemapUtilIds)
return;
- if (gUnknown_02039D84[id].field_18 != NULL)
- sub_80D2960(id);
+ if (sTilemapUtil[id].savedTilemap != NULL)
+ TilemapUtil_DrawPrev(id); // Never called, above always FALSE
- sub_80D29F8(id);
- gUnknown_02039D84[id].field_0[0] = gUnknown_02039D84[id].field_0[1];
+ TilemapUtil_Draw(id);
+ sTilemapUtil[id].prev = sTilemapUtil[id].cur;
}
-static void sub_80D2960(u8 id)
+static void TilemapUtil_DrawPrev(u8 id)
{
s32 i;
- u32 adder = gUnknown_02039D84[id].field_2A * gUnknown_02039D84[id].field_20;
- const void *tiles = (gUnknown_02039D84[id].field_18 + (adder * gUnknown_02039D84[id].field_0[0].field_A))
- + (gUnknown_02039D84[id].field_2A * gUnknown_02039D84[id].field_0[0].field_8);
+ u32 adder = sTilemapUtil[id].tileSize * sTilemapUtil[id].altWidth;
+ const void *tiles = (sTilemapUtil[id].savedTilemap + (adder * sTilemapUtil[id].prev.destY))
+ + (sTilemapUtil[id].tileSize * sTilemapUtil[id].prev.destX);
- for (i = 0; i < gUnknown_02039D84[id].field_0[0].field_6; i++)
+ for (i = 0; i < sTilemapUtil[id].prev.height; i++)
{
- CopyToBgTilemapBufferRect(gUnknown_02039D84[id].field_2B,
+ CopyToBgTilemapBufferRect(sTilemapUtil[id].bg,
tiles,
- gUnknown_02039D84[id].field_0[0].field_8,
- gUnknown_02039D84[id].field_0[0].field_A + i,
- gUnknown_02039D84[id].field_0[0].field_4,
+ sTilemapUtil[id].prev.destX,
+ sTilemapUtil[id].prev.destY + i,
+ sTilemapUtil[id].prev.width,
1);
tiles += adder;
}
}
-static void sub_80D29F8(u8 id)
+static void TilemapUtil_Draw(u8 id)
{
s32 i;
- u32 adder = gUnknown_02039D84[id].field_2A * gUnknown_02039D84[id].field_24;
- const void *tiles = (gUnknown_02039D84[id].field_1C + (adder * gUnknown_02039D84[id].field_0[1].field_2))
- + (gUnknown_02039D84[id].field_2A * gUnknown_02039D84[id].field_0[1].field_0);
+ u32 adder = sTilemapUtil[id].tileSize * sTilemapUtil[id].width;
+ const void *tiles = (sTilemapUtil[id].tilemap + (adder * sTilemapUtil[id].cur.y))
+ + (sTilemapUtil[id].tileSize * sTilemapUtil[id].cur.x);
- for (i = 0; i < gUnknown_02039D84[id].field_0[1].field_6; i++)
+ for (i = 0; i < sTilemapUtil[id].cur.height; i++)
{
- CopyToBgTilemapBufferRect(gUnknown_02039D84[id].field_2B,
+ CopyToBgTilemapBufferRect(sTilemapUtil[id].bg,
tiles,
- gUnknown_02039D84[id].field_0[1].field_8,
- gUnknown_02039D84[id].field_0[1].field_A + i,
- gUnknown_02039D84[id].field_0[1].field_4,
+ sTilemapUtil[id].cur.destX,
+ sTilemapUtil[id].cur.destY + i,
+ sTilemapUtil[id].cur.width,
1);
tiles += adder;
}
}
-EWRAM_DATA static struct UnkStruct_2000020 *gUnknown_02039D8C = NULL;
-static void sub_80D2A90(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u32 arg2)
+//------------------------------------------------------------------------------
+// SECTION: UnkUtil
+//
+// Some data transfer utility that goes functionally unused.
+// It gets initialized with UnkUtil_Init, and run every vblank in Pokémon
+// Storage with UnkUtil_Run, but neither of the Add functions are ever used,
+// so UnkUtil_Run performs no actions.
+//------------------------------------------------------------------------------
+
+
+EWRAM_DATA static struct UnkUtil *sUnkUtil = NULL;
+
+static void UnkUtil_Init(struct UnkUtil *util, struct UnkUtilData *data, u32 max)
{
- gUnknown_02039D8C = arg0;
- arg0->unk_00 = arg1;
- arg0->unk_05 = arg2;
- arg0->unk_04 = 0;
+ sUnkUtil = util;
+ util->data = data;
+ util->max = max;
+ util->numActive = 0;
}
-static void sub_80D2AA4(void)
+static void UnkUtil_Run(void)
{
u16 i;
-
- if (gUnknown_02039D8C->unk_04)
+ if (sUnkUtil->numActive)
{
- for (i = 0; i < gUnknown_02039D8C->unk_04; i++)
+ for (i = 0; i < sUnkUtil->numActive; i++)
{
- struct UnkStruct_2000028 *unkStruct = &gUnknown_02039D8C->unk_00[i];
- unkStruct->unk_0c(unkStruct);
+ struct UnkUtilData *data = &sUnkUtil->data[i];
+ data->func(data);
}
-
- gUnknown_02039D8C->unk_04 = 0;
+ sUnkUtil->numActive = 0;
}
}
-static bool8 sub_80D2AEC(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height, u16 unkArg)
+// Unused
+static bool8 UnkUtil_CpuAdd(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height, u16 unkArg)
{
- struct UnkStruct_2000028 *unkStruct;
+ struct UnkUtilData *data;
- if (gUnknown_02039D8C->unk_04 >= gUnknown_02039D8C->unk_05)
+ if (sUnkUtil->numActive >= sUnkUtil->max)
return FALSE;
- unkStruct = &gUnknown_02039D8C->unk_00[gUnknown_02039D8C->unk_04++];
- unkStruct->unk_08 = width * 2;
- unkStruct->unk_04 = dest + 2 * (dTop * 32 + dLeft);
- unkStruct->unk_00 = src + 2 * (sTop * unkArg + sLeft);
- unkStruct->newField = height;
- unkStruct->unk_0a = unkArg;
- unkStruct->unk_0c = sub_80D2B88;
+ data = &sUnkUtil->data[sUnkUtil->numActive++];
+ data->size = width * 2;
+ data->dest = dest + 2 * (dTop * 32 + dLeft);
+ data->src = src + 2 * (sTop * unkArg + sLeft);
+ data->height = height;
+ data->unk = unkArg;
+ data->func = UnkUtil_CpuRun;
return TRUE;
}
-static void sub_80D2B88(struct UnkStruct_2000028 *unkStruct)
+// Functionally unused
+static void UnkUtil_CpuRun(struct UnkUtilData *data)
{
u16 i;
- for (i = 0; i < unkStruct->newField; i++)
+ for (i = 0; i < data->height; i++)
{
- CpuSet(unkStruct->unk_00, unkStruct->unk_04, (unkStruct->unk_08 / 2));
- unkStruct->unk_04 += 64;
- unkStruct->unk_00 += (unkStruct->unk_0a * 2);
+ CpuSet(data->src, data->dest, data->size / 2);
+ data->dest += 64;
+ data->src += data->unk * 2;
}
}
-static bool8 sub_80D2BC0(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height)
+// Unused
+static bool8 UnkUtil_DmaAdd(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height)
{
- struct UnkStruct_2000028 *unkStruct;
+ struct UnkUtilData *data;
- if (gUnknown_02039D8C->unk_04 >= gUnknown_02039D8C->unk_05)
+ if (sUnkUtil->numActive >= sUnkUtil->max)
return FALSE;
- unkStruct = &gUnknown_02039D8C->unk_00[gUnknown_02039D8C->unk_04++];
- unkStruct->unk_08 = width * 2;
- unkStruct->unk_04 = dest + ((dTop * 32) + dLeft) * 2;
- unkStruct->newField = height;
- unkStruct->unk_0c = sub_80D2C1C;
+ data = &sUnkUtil->data[sUnkUtil->numActive++];
+ data->size = width * 2;
+ data->dest = dest + (dTop * 32 + dLeft) * 2;
+ data->height = height;
+ data->func = UnkUtil_DmaRun;
return TRUE;
}
-static void sub_80D2C1C(struct UnkStruct_2000028 *unkStruct)
+// Functionally unused
+static void UnkUtil_DmaRun(struct UnkUtilData *data)
{
u16 i;
- for (i = 0; i < unkStruct->newField; i++)
+ for (i = 0; i < data->height; i++)
{
- Dma3FillLarge_(0, unkStruct->unk_04, unkStruct->unk_08, 16);
- unkStruct->unk_04 += 64;
+ Dma3FillLarge16_(0, data->dest, data->size);
+ data->dest += 64;
}
}
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 6adf95ca1..8f16321b2 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -47,6 +47,14 @@
#include "constants/rgb.h"
#include "constants/songs.h"
+enum {
+ PSS_PAGE_INFO,
+ PSS_PAGE_SKILLS,
+ PSS_PAGE_BATTLE_MOVES,
+ PSS_PAGE_CONTEST_MOVES,
+ PSS_PAGE_COUNT,
+};
+
// Screen titles (upper left)
#define PSS_LABEL_WINDOW_POKEMON_INFO_TITLE 0
#define PSS_LABEL_WINDOW_POKEMON_SKILLS_TITLE 1
@@ -1070,24 +1078,24 @@ void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex,
sMonSummaryScreen->maxMonIndex = maxMonIndex;
sMonSummaryScreen->callback = callback;
- if (mode == PSS_MODE_BOX)
+ if (mode == SUMMARY_MODE_BOX)
sMonSummaryScreen->isBoxMon = TRUE;
else
sMonSummaryScreen->isBoxMon = FALSE;
switch (mode)
{
- case PSS_MODE_NORMAL:
- case PSS_MODE_BOX:
+ case SUMMARY_MODE_NORMAL:
+ case SUMMARY_MODE_BOX:
sMonSummaryScreen->minPageIndex = 0;
sMonSummaryScreen->maxPageIndex = PSS_PAGE_COUNT - 1;
break;
- case PSS_MODE_LOCK_MOVES:
+ case SUMMARY_MODE_LOCK_MOVES:
sMonSummaryScreen->minPageIndex = 0;
sMonSummaryScreen->maxPageIndex = PSS_PAGE_COUNT - 1;
sMonSummaryScreen->lockMovesFlag = TRUE;
break;
- case PSS_MODE_SELECT_MOVE:
+ case SUMMARY_MODE_SELECT_MOVE:
sMonSummaryScreen->minPageIndex = PSS_PAGE_BATTLE_MOVES;
sMonSummaryScreen->maxPageIndex = PSS_PAGE_COUNT - 1;
sMonSummaryScreen->lockMonFlag = TRUE;
@@ -1105,7 +1113,7 @@ void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex,
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove)
{
- ShowPokemonSummaryScreen(PSS_MODE_SELECT_MOVE, mons, monIndex, maxMonIndex, callback);
+ ShowPokemonSummaryScreen(SUMMARY_MODE_SELECT_MOVE, mons, monIndex, maxMonIndex, callback);
sMonSummaryScreen->newMove = newMove;
}
@@ -1240,7 +1248,7 @@ static bool8 LoadGraphics(void)
gMain.state++;
break;
case 22:
- if (sMonSummaryScreen->mode != PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode != SUMMARY_MODE_SELECT_MOVE)
CreateTask(Task_HandleInput, 0);
else
CreateTask(Task_SetHandleReplaceMoveInput, 0);
@@ -1393,7 +1401,7 @@ static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *mon)
sum->ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
break;
case 2:
- if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == PSS_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
+ if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == SUMMARY_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
{
sum->nature = GetNature(mon);
sum->currentHP = GetMonData(mon, MON_DATA_HP);
@@ -1561,7 +1569,7 @@ static void ChangeSummaryPokemon(u8 taskId, s8 delta)
else
delta = 3;
}
- monId = sub_80D214C(sMonSummaryScreen->monList.boxMons, sMonSummaryScreen->curMonIndex, sMonSummaryScreen->maxMonIndex, delta);
+ monId = AdvanceStorageMonIndex(sMonSummaryScreen->monList.boxMons, sMonSummaryScreen->curMonIndex, sMonSummaryScreen->maxMonIndex, delta);
}
else if (IsMultiBattle() == TRUE)
{
@@ -2859,7 +2867,7 @@ static void PutPageWindowTilemaps(u8 page)
break;
case PSS_PAGE_BATTLE_MOVES:
PutWindowTilemap(PSS_LABEL_WINDOW_BATTLE_MOVES_TITLE);
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
@@ -2871,7 +2879,7 @@ static void PutPageWindowTilemaps(u8 page)
break;
case PSS_PAGE_CONTEST_MOVES:
PutWindowTilemap(PSS_LABEL_WINDOW_CONTEST_MOVES_TITLE);
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
@@ -2907,7 +2915,7 @@ static void ClearPageWindowTilemaps(u8 page)
ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_EXP);
break;
case PSS_PAGE_BATTLE_MOVES:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
@@ -2918,7 +2926,7 @@ static void ClearPageWindowTilemaps(u8 page)
}
break;
case PSS_PAGE_CONTEST_MOVES:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
@@ -3413,7 +3421,7 @@ static void PrintBattleMoves(void)
PrintMoveNameAndPP(2);
PrintMoveNameAndPP(3);
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
PrintNewMoveDetailsOrCancelText();
if (sMonSummaryScreen->firstMoveIndex == MAX_MON_MOVES)
@@ -3447,11 +3455,11 @@ static void Task_PrintBattleMoves(u8 taskId)
PrintMoveNameAndPP(3);
break;
case 5:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
PrintNewMoveDetailsOrCancelText();
break;
case 6:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->firstMoveIndex == MAX_MON_MOVES)
data[1] = sMonSummaryScreen->newMove;
@@ -3460,7 +3468,7 @@ static void Task_PrintBattleMoves(u8 taskId)
}
break;
case 7:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
PrintMoveDetails(data[1]);
@@ -3548,7 +3556,7 @@ static void PrintContestMoves(void)
PrintMoveNameAndPP(2);
PrintMoveNameAndPP(3);
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
PrintNewMoveDetailsOrCancelText();
PrintContestMoveDescription(sMonSummaryScreen->firstMoveIndex);
@@ -3574,11 +3582,11 @@ static void Task_PrintContestMoves(u8 taskId)
PrintMoveNameAndPP(3);
break;
case 5:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
PrintNewMoveDetailsOrCancelText();
break;
case 6:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
PrintContestMoveDescription(sMonSummaryScreen->firstMoveIndex);
@@ -3613,7 +3621,7 @@ static void PrintMoveDetails(u16 move)
FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
if (move != MOVE_NONE)
{
- if (sMonSummaryScreen->currPageIndex == PSS_MODE_BOX)
+ if (sMonSummaryScreen->currPageIndex == SUMMARY_MODE_BOX)
{
PrintMovePowerAndAccuracy(move);
PrintTextOnWindow(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0);
@@ -3867,14 +3875,14 @@ static u8 LoadMonGfxAndSprite(struct Pokemon *mon, s16 *state)
{
if (gMonSpritesGfxPtr != NULL)
{
- if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == PSS_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
+ if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == SUMMARY_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid);
else
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid);
}
else
{
- if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == PSS_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
+ if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == SUMMARY_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], sub_806F4F8(0, 1), summary->species2, summary->pid);
else
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], sub_806F4F8(0, 1), summary->species2, summary->pid);
diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c
index ebe870f80..61b289ae1 100644
--- a/src/pokenav_conditions_1.c
+++ b/src/pokenav_conditions_1.c
@@ -372,7 +372,7 @@ u8 *CopyMonConditionNameGender(u8 *str, u16 id, bool8 arg3)
switch (gender)
{
default:
- *(str_++) = CHAR_UNK_SPACER;
+ *(str_++) = CHAR_GENDERLESS;
break;
case MON_MALE:
*(str_++) = EXT_CTRL_CODE_BEGIN;
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 78ebe02e4..081a40218 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -8,7 +8,6 @@
#include "script_pokemon_util.h"
#include "tv.h"
#include "constants/heal_locations.h"
-#include "constants/tv.h"
int GameClear(void)
{
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 7cc88a54c..aa6e4eef2 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -51,7 +51,7 @@ struct PlayerRecordsRS
PokeNews pokeNews[POKE_NEWS_COUNT];
OldMan oldMan;
struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT];
- struct RecordMixingDayCareMail dayCareMail;
+ struct RecordMixingDaycareMail daycareMail;
struct RSBattleTowerRecord battleTowerRecord;
u16 giftItem;
u16 filler11C8[0x32];
@@ -64,7 +64,7 @@ struct PlayerRecordsEmerald
/* 0x1004 */ PokeNews pokeNews[POKE_NEWS_COUNT];
/* 0x1044 */ OldMan oldMan;
/* 0x1084 */ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT];
- /* 0x10ac */ struct RecordMixingDayCareMail dayCareMail;
+ /* 0x10ac */ struct RecordMixingDaycareMail daycareMail;
/* 0x1124 */ struct EmeraldBattleTowerRecord battleTowerRecord;
/* 0x1210 */ u16 giftItem;
/* 0x1214 */ LilycoveLady lilycoveLady;
@@ -87,7 +87,7 @@ static TVShow *sTvShowsSave;
static PokeNews *sPokeNewsSave;
static OldMan *sOldManSave;
static struct DewfordTrend *sDewfordTrendsSave;
-static struct RecordMixingDayCareMail *gUnknown_03001148;
+static struct RecordMixingDaycareMail *sDaycareMailSave;
static void *sBattleTowerSave;
static LilycoveLady *sLilycoveLadySave;
static void *sApprenticesSave;
@@ -96,7 +96,7 @@ static u32 sRecordStructSize;
static u8 gUnknown_03001160;
static struct PlayerHallRecords *gUnknown_03001168[3];
-static EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02039F9C = {0};
+static EWRAM_DATA struct RecordMixingDaycareMail sDaycareMail = {0};
static EWRAM_DATA union PlayerRecords *sReceivedRecords = NULL;
static EWRAM_DATA union PlayerRecords *sSentRecord = NULL;
@@ -115,14 +115,14 @@ static void ReceiveOldManData(OldMan *, size_t, u8);
static void ReceiveBattleTowerData(void *battleTowerRecord, size_t, u8);
static void ReceiveLilycoveLadyData(LilycoveLady *, size_t, u8);
static void sub_80E7B2C(const u8 *);
-static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *, size_t, u8, TVShow *);
+static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *, size_t, u8, TVShow *);
static void ReceiveGiftItem(u16 *item, u8 which);
static void Task_DoRecordMixing(u8 taskId);
static void GetSavedApprentices(struct Apprentice *dst, struct Apprentice *src);
static void ReceiveApprenticeData(struct Apprentice *mixApprentice, size_t recordSize, u32 multiplayerId);
static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2);
-static void sub_80E89F8(struct RecordMixingDayCareMail *dst);
-static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src);
+static void GetRecordMixingDaycareMail(struct RecordMixingDaycareMail *dst);
+static void SanitizeDaycareMailForRuby(struct RecordMixingDaycareMail *src);
static void SanitizeEmeraldBattleTowerRecord(struct EmeraldBattleTowerRecord *arg0);
static void SanitizeRubyBattleTowerRecord(struct RSBattleTowerRecord *src);
@@ -180,7 +180,7 @@ static void SetSrcLookupPointers(void)
sPokeNewsSave = gSaveBlock1Ptr->pokeNews;
sOldManSave = &gSaveBlock1Ptr->oldMan;
sDewfordTrendsSave = gSaveBlock1Ptr->dewfordTrends;
- gUnknown_03001148 = &gUnknown_02039F9C;
+ sDaycareMailSave = &sDaycareMail;
sBattleTowerSave = &gSaveBlock2Ptr->frontier.towerPlayer;
sLilycoveLadySave = &gSaveBlock1Ptr->lilycoveLady;
sApprenticesSave = gSaveBlock2Ptr->apprentices;
@@ -191,11 +191,11 @@ static void PrepareUnknownExchangePacket(struct PlayerRecordsRS *dest)
{
memcpy(dest->secretBases, sSecretBasesSave, sizeof(dest->secretBases));
memcpy(dest->tvShows, sTvShowsSave, sizeof(dest->tvShows));
- sub_80F14F8(dest->tvShows);
+ SanitizeTVShowLocationsForRuby(dest->tvShows);
memcpy(dest->pokeNews, sPokeNewsSave, sizeof(dest->pokeNews));
memcpy(&dest->oldMan, sOldManSave, sizeof(dest->oldMan));
memcpy(dest->dewfordTrends, sDewfordTrendsSave, sizeof(dest->dewfordTrends));
- sub_80E89F8(&dest->dayCareMail);
+ GetRecordMixingDaycareMail(&dest->daycareMail);
EmeraldBattleTowerRecordToRuby(sBattleTowerSave, &dest->battleTowerRecord);
if (GetMultiplayerId() == 0)
@@ -207,13 +207,13 @@ static void PrepareExchangePacketForRubySapphire(struct PlayerRecordsRS *dest)
memcpy(dest->secretBases, sSecretBasesSave, sizeof(dest->secretBases));
ClearJapaneseSecretBases(dest->secretBases);
memcpy(dest->tvShows, sTvShowsSave, sizeof(dest->tvShows));
- sub_80F1208(dest->tvShows);
+ SanitizeTVShowsForRuby(dest->tvShows);
memcpy(dest->pokeNews, sPokeNewsSave, sizeof(dest->pokeNews));
memcpy(&dest->oldMan, sOldManSave, sizeof(dest->oldMan));
- sub_8120B70(&dest->oldMan);
+ SanitizeMauvilleOldManForRuby(&dest->oldMan);
memcpy(dest->dewfordTrends, sDewfordTrendsSave, sizeof(dest->dewfordTrends));
- sub_80E89F8(&dest->dayCareMail);
- SanitizeDayCareMailForRuby(&dest->dayCareMail);
+ GetRecordMixingDaycareMail(&dest->daycareMail);
+ SanitizeDaycareMailForRuby(&dest->daycareMail);
EmeraldBattleTowerRecordToRuby(sBattleTowerSave, &dest->battleTowerRecord);
SanitizeRubyBattleTowerRecord(&dest->battleTowerRecord);
@@ -224,7 +224,7 @@ static void PrepareExchangePacketForRubySapphire(struct PlayerRecordsRS *dest)
static void PrepareExchangePacket(void)
{
SetPlayerSecretBaseParty();
- sub_80F0BB8();
+ DeactivateAllNormalTVShows();
SetSrcLookupPointers();
if (Link_AnyPartnersPlayingRubyOrSapphire())
@@ -242,7 +242,7 @@ static void PrepareExchangePacket(void)
memcpy(&sSentRecord->emerald.oldMan, sOldManSave, sizeof(sSentRecord->emerald.oldMan));
memcpy(&sSentRecord->emerald.lilycoveLady, sLilycoveLadySave, sizeof(sSentRecord->emerald.lilycoveLady));
memcpy(sSentRecord->emerald.dewfordTrends, sDewfordTrendsSave, sizeof(sSentRecord->emerald.dewfordTrends));
- sub_80E89F8(&sSentRecord->emerald.dayCareMail);
+ GetRecordMixingDaycareMail(&sSentRecord->emerald.daycareMail);
memcpy(&sSentRecord->emerald.battleTowerRecord, sBattleTowerSave, sizeof(sSentRecord->emerald.battleTowerRecord));
SanitizeEmeraldBattleTowerRecord(&sSentRecord->emerald.battleTowerRecord);
@@ -261,7 +261,7 @@ static void ReceiveExchangePacket(u32 which)
// Ruby/Sapphire
sub_80E7B2C((void *)sReceivedRecords->ruby.tvShows);
ReceiveSecretBasesData(sReceivedRecords->ruby.secretBases, sizeof(struct PlayerRecordsRS), which);
- ReceiveDaycareMailData(&sReceivedRecords->ruby.dayCareMail, sizeof(struct PlayerRecordsRS), which, sReceivedRecords->ruby.tvShows);
+ ReceiveDaycareMailData(&sReceivedRecords->ruby.daycareMail, sizeof(struct PlayerRecordsRS), which, sReceivedRecords->ruby.tvShows);
ReceiveBattleTowerData(&sReceivedRecords->ruby.battleTowerRecord, sizeof(struct PlayerRecordsRS), which);
ReceiveTvShowsData(sReceivedRecords->ruby.tvShows, sizeof(struct PlayerRecordsRS), which);
ReceivePokeNewsData(sReceivedRecords->ruby.pokeNews, sizeof(struct PlayerRecordsRS), which);
@@ -278,7 +278,7 @@ static void ReceiveExchangePacket(u32 which)
ReceivePokeNewsData(sReceivedRecords->emerald.pokeNews, sizeof(struct PlayerRecordsEmerald), which);
ReceiveOldManData(&sReceivedRecords->emerald.oldMan, sizeof(struct PlayerRecordsEmerald), which);
ReceiveDewfordTrendData(sReceivedRecords->emerald.dewfordTrends, sizeof(struct PlayerRecordsEmerald), which);
- ReceiveDaycareMailData(&sReceivedRecords->emerald.dayCareMail, sizeof(struct PlayerRecordsEmerald), which, sReceivedRecords->emerald.tvShows);
+ ReceiveDaycareMailData(&sReceivedRecords->emerald.daycareMail, sizeof(struct PlayerRecordsEmerald), which, sReceivedRecords->emerald.tvShows);
ReceiveBattleTowerData(&sReceivedRecords->emerald.battleTowerRecord, sizeof(struct PlayerRecordsEmerald), which);
ReceiveGiftItem(&sReceivedRecords->emerald.giftItem, which);
ReceiveLilycoveLadyData(&sReceivedRecords->emerald.lilycoveLady, sizeof(struct PlayerRecordsEmerald), which);
@@ -319,7 +319,7 @@ static void Task_RecordMixing_Main(u8 taskId)
{
case 0: // init
sSentRecord = malloc(sizeof(union PlayerRecords));
- sReceivedRecords = malloc(sizeof(union PlayerRecords) * 4);
+ sReceivedRecords = malloc(sizeof(union PlayerRecords) * MAX_LINK_PLAYERS);
SetLocalLinkPlayerId(gSpecialVar_0x8005);
VarSet(VAR_TEMP_0, 1);
gUnknown_03001130 = FALSE;
@@ -665,7 +665,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u
{
memcpy((void *)battleTowerRecord + recordSize * which, (void *)battleTowerRecord + recordSize * mixIndices[which], sizeof(struct EmeraldBattleTowerRecord));
dest = (void *)battleTowerRecord + recordSize * which;
- for (i = 0; i < 4; i ++)
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
{
btPokemon = &dest->party[i];
if (btPokemon->species != SPECIES_NONE && IsStringJapanese(btPokemon->nickname))
@@ -706,22 +706,22 @@ static void ReceiveLilycoveLadyData(LilycoveLady *lilycoveLady, size_t recordSiz
}
}
-static u8 sub_80E7A9C(struct DayCareMail *rmMail)
+static u8 sub_80E7A9C(struct DaycareMail *rmMail)
{
return rmMail->message.itemId;
}
-static void sub_80E7AA4(struct RecordMixingDayCareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1)
+static void sub_80E7AA4(struct RecordMixingDaycareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1)
{
- struct DayCareMail buffer;
- struct RecordMixingDayCareMail *mail1;
- struct RecordMixingDayCareMail *mail2;
+ struct DaycareMail buffer;
+ struct RecordMixingDaycareMail *mail1;
+ struct RecordMixingDaycareMail *mail2;
mail1 = (void *)src + recordSize * idxs[which0][0];
- memcpy(&buffer, &mail1->mail[idxs[which0][1]], sizeof(struct DayCareMail));
+ memcpy(&buffer, &mail1->mail[idxs[which0][1]], sizeof(struct DaycareMail));
mail2 = (void *)src + recordSize * idxs[which1][0];
- memcpy(&mail1->mail[idxs[which0][1]], &mail2->mail[idxs[which1][1]], sizeof(struct DayCareMail));
- memcpy(&mail2->mail[idxs[which1][1]], &buffer, sizeof(struct DayCareMail));
+ memcpy(&mail1->mail[idxs[which0][1]], &mail2->mail[idxs[which1][1]], sizeof(struct DaycareMail));
+ memcpy(&mail2->mail[idxs[which1][1]], &buffer, sizeof(struct DaycareMail));
}
static void sub_80E7B2C(const u8 *src)
@@ -730,7 +730,7 @@ static void sub_80E7B2C(const u8 *src)
s32 i;
sum = 0;
- for (i = 0; i < 256; i ++)
+ for (i = 0; i < 256; i++)
sum += src[i];
gUnknown_03001160 = sum;
@@ -741,17 +741,17 @@ static u8 sub_80E7B54(void)
return gUnknown_03001160;
}
-static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t recordSize, u8 which, TVShow *shows)
+static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *src, size_t recordSize, u8 which, TVShow *shows)
{
u16 i, j;
u8 linkPlayerCount;
u8 tableId;
- struct RecordMixingDayCareMail *_src;
+ struct RecordMixingDaycareMail *_src;
u8 which0, which1;
void *ptr;
u8 sp04[4];
u8 sp08[4];
- struct RecordMixingDayCareMail *sp0c[4];
+ struct RecordMixingDaycareMail *sp0c[4];
u8 sp1c[4][2];
u8 sp24[4][2];
u8 sp34;
@@ -777,10 +777,10 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r
_src = (void *)src + i * recordSize;
language = gLinkPlayers[i].language;
version = gLinkPlayers[i].version & 0xFF;
- for (j = 0; j < _src->numDaycareMons; j ++)
+ for (j = 0; j < _src->numDaycareMons; j++)
{
u16 otNameLanguage, nicknameLanguage;
- struct DayCareMail *recordMixingMail = &_src->mail[j];
+ struct DaycareMail *recordMixingMail = &_src->mail[j];
if (!recordMixingMail->message.itemId)
continue;
@@ -835,7 +835,7 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r
if (_src->numDaycareMons == 0)
continue;
- for (j = 0; j < _src->numDaycareMons; j ++)
+ for (j = 0; j < _src->numDaycareMons; j++)
{
if (!_src->holdsItem[j])
sp1c[i][j] = 1;
@@ -913,8 +913,8 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r
}
_src = (void *)src + which * recordSize;
- memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &_src->mail[0], sizeof(struct DayCareMail));
- memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &_src->mail[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);
}
@@ -957,7 +957,7 @@ static void Task_DoRecordMixing(u8 taskId)
case 2:
SetContinueGameWarpStatusToDynamicWarp();
FullSaveGame();
- task->data[0] ++;
+ task->data[0]++;
break;
case 3:
if (CheckSaveFile())
@@ -971,7 +971,7 @@ static void Task_DoRecordMixing(u8 taskId)
if (++task->data[1] > 10)
{
SetCloseLinkCallback();
- task->data[0] ++;
+ task->data[0]++;
}
break;
case 5:
@@ -984,7 +984,7 @@ static void Task_DoRecordMixing(u8 taskId)
if (!sub_801048C(FALSE))
{
CreateTask(Task_LinkSave, 5);
- task->data[0] ++;
+ task->data[0]++;
}
break;
case 7: // wait for Task_LinkSave to finish.
@@ -1003,7 +1003,7 @@ static void Task_DoRecordMixing(u8 taskId)
break;
case 8:
SetLinkStandbyCallback();
- task->data[0] ++;
+ task->data[0]++;
break;
case 9:
if (IsLinkTaskFinished())
@@ -1061,13 +1061,9 @@ static void GetSavedApprentices(struct Apprentice *dst, struct Apprentice *src)
break;
case 2:
if (Random2() > 0x3333)
- {
dst[1] = src[gSaveBlock2Ptr->playerApprentice.saveId + 1];
- }
else
- {
dst[1] = src[((gSaveBlock2Ptr->playerApprentice.saveId + 1) % (APPRENTICE_COUNT - 1) + 1)];
- }
break;
}
}
@@ -1221,7 +1217,7 @@ static void sub_80E8578(struct RecordMixingHallRecords *dst, void *hallRecords,
for (l = 0; l < 3; l++)
{
if (GetTrainerId(dst->hallRecords2P[j][l].id1) == GetTrainerId(gUnknown_03001168[k]->twoPlayers[j].id1)
- && GetTrainerId(dst->hallRecords2P[j][l].id2) == GetTrainerId(gUnknown_03001168[k]->twoPlayers[j].id2))
+ && GetTrainerId(dst->hallRecords2P[j][l].id2) == GetTrainerId(gUnknown_03001168[k]->twoPlayers[j].id2))
{
var_68++;
if (dst->hallRecords2P[j][l].winStreak < gUnknown_03001168[k]->twoPlayers[j].winStreak)
@@ -1308,21 +1304,21 @@ static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, siz
Free(largeStructPtr);
}
-static void sub_80E89F8(struct RecordMixingDayCareMail *dst)
+static void GetRecordMixingDaycareMail(struct RecordMixingDaycareMail *dst)
{
- gUnknown_02039F9C.mail[0] = gSaveBlock1Ptr->daycare.mons[0].mail;
- gUnknown_02039F9C.mail[1] = gSaveBlock1Ptr->daycare.mons[1].mail;
- InitDaycareMailRecordMixing(&gSaveBlock1Ptr->daycare, &gUnknown_02039F9C);
- *dst = *gUnknown_03001148;
+ sDaycareMail.mail[0] = gSaveBlock1Ptr->daycare.mons[0].mail;
+ sDaycareMail.mail[1] = gSaveBlock1Ptr->daycare.mons[1].mail;
+ InitDaycareMailRecordMixing(&gSaveBlock1Ptr->daycare, &sDaycareMail);
+ *dst = *sDaycareMailSave;
}
-static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src)
+static void SanitizeDaycareMailForRuby(struct RecordMixingDaycareMail *src)
{
s32 i;
for (i = 0; i < src->numDaycareMons; i++)
{
- struct DayCareMail *mail = &src->mail[i];
+ struct DaycareMail *mail = &src->mail[i];
if (mail->message.itemId != 0)
{
if (mail->gameLanguage != LANGUAGE_JAPANESE)
@@ -1342,10 +1338,10 @@ static void SanitizeEmeraldBattleTowerRecord(struct EmeraldBattleTowerRecord *ds
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
{
struct BattleTowerPokemon *towerMon = &dst->party[i];
- if (towerMon->species != 0)
+ if (towerMon->species != SPECIES_NONE)
StripExtCtrlCodes(towerMon->nickname);
}
diff --git a/src/roulette.c b/src/roulette.c
index f0b484fe8..1ea69dc2e 100644
--- a/src/roulette.c
+++ b/src/roulette.c
@@ -275,7 +275,7 @@ struct RouletteTable
struct Taillow taillow;
u16 ballSpeed;
u16 baseTravelDist;
- float var1C;
+ f32 var1C;
};
struct GridSelection
@@ -340,13 +340,13 @@ static EWRAM_DATA struct Roulette
s16 ballTravelDistFast;
u16 ballTravelDistMed;
u16 ballTravelDistSlow;
- float ballAngle;
- float ballAngleSpeed;
- float ballAngleAccel;
- float ballDistToCenter;
- float ballFallSpeed;
- float ballFallAccel;
- float varA0;
+ f32 ballAngle;
+ f32 ballAngleSpeed;
+ f32 ballAngleAccel;
+ f32 ballDistToCenter;
+ f32 ballFallSpeed;
+ f32 ballFallAccel;
+ f32 varA0;
u8 playTaskId;
u8 spinTaskId;
u8 filler_1[2];
@@ -1968,7 +1968,7 @@ static void ExitRoulette(u8 taskId)
gSpecialVar_0x8004 = TRUE;
else
gSpecialVar_0x8004 = FALSE;
- AlertTVOfNewCoinTotal(GetCoins());
+ TryPutFindThatGamerOnAir(GetCoins());
BeginHardwarePaletteFade(0xFF, 0, 0, 16, 0);
gTasks[taskId].func = Task_ExitRoulette;
}
@@ -3948,7 +3948,7 @@ static s16 UpdateBallRelativeWheelAngle(struct Sprite *sprite)
static u8 UpdateSlotBelowBall(struct Sprite *sprite)
{
- sRoulette->hitSlot = UpdateBallRelativeWheelAngle(sprite) / (float) DEGREES_PER_SLOT;
+ sRoulette->hitSlot = UpdateBallRelativeWheelAngle(sprite) / (f32)DEGREES_PER_SLOT;
return sRoulette->hitSlot;
}
@@ -4050,7 +4050,7 @@ static void SpriteCB_UnstickBall_ShroomishBallFall(struct Sprite *sprite)
static void SpriteCB_UnstickBall_Shroomish(struct Sprite *sprite)
{
- float slotOffset, ballFallDist, ballFallSpeed;
+ f32 slotOffset, ballFallDist, ballFallSpeed;
UpdateBallPos(sprite);
switch (sprite->sBallAngle)
@@ -4233,7 +4233,7 @@ static void SpriteCB_RollBall_TryLand(struct Sprite *sprite)
}
else // fall left
{
- float temp;
+ f32 temp;
sRoulette->ballAngleSpeed = (temp = sRouletteTables[sRoulette->tableId].var1C) * 2.0f;
slotId = (sRoulette->hitSlot + NUM_ROULETTE_SLOTS - 1) % NUM_ROULETTE_SLOTS;
sRoulette->stuckHitSlot = sRoulette->hitSlot;
@@ -4279,7 +4279,7 @@ static void SpriteCB_RollBall_Slow(struct Sprite *sprite)
{
// Reached slot to land in
sRoulette->ballAngleAccel = 0.0f;
- sRoulette->ballAngleSpeed -= (float)(sRouletteTables[sRoulette->tableId].wheelSpeed)
+ sRoulette->ballAngleSpeed -= (f32)(sRouletteTables[sRoulette->tableId].wheelSpeed)
/ (sRouletteTables[sRoulette->tableId].wheelDelay + 1);
sprite->sState = 4;
sprite->callback = SpriteCB_RollBall_TryLand;
@@ -4304,8 +4304,8 @@ static void SpriteCB_RollBall_Medium(struct Sprite *sprite)
if (sRoulette->ballDistToCenter > 40.0f)
return;
- sRoulette->ballFallSpeed = -(4.0f / (float)(sRoulette->ballTravelDistSlow));
- sRoulette->ballAngleAccel = -(sRoulette->ballAngleSpeed / (float)(sRoulette->ballTravelDistSlow));
+ sRoulette->ballFallSpeed = -(4.0f / (f32)(sRoulette->ballTravelDistSlow));
+ sRoulette->ballAngleAccel = -(sRoulette->ballAngleSpeed / (f32)(sRoulette->ballTravelDistSlow));
sprite->animNum = 2;
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
@@ -4320,8 +4320,8 @@ static void SpriteCB_RollBall_Fast(struct Sprite *sprite)
return;
m4aSongNumStartOrChange(SE_ROULETTE_BALL2);
- sRoulette->ballFallSpeed = -(20.0f / (float)(sRoulette->ballTravelDistMed));
- sRoulette->ballAngleAccel = ((1.0f - sRoulette->ballAngleSpeed) / (float)(sRoulette->ballTravelDistMed));
+ sRoulette->ballFallSpeed = -(20.0f / (f32)(sRoulette->ballTravelDistMed));
+ sRoulette->ballAngleAccel = ((1.0f - sRoulette->ballAngleSpeed) / (f32)(sRoulette->ballTravelDistMed));
sprite->animNum = 1;
sprite->animBeginning = TRUE;
sprite->animEnded = FALSE;
@@ -4558,7 +4558,7 @@ static void SpriteCB_ShroomishShakeScreen(struct Sprite *sprite)
static void SpriteCB_ShroomishFall(struct Sprite *sprite)
{
- float timer;
+ f32 timer;
sprite->data[1]++;
timer = sprite->data[1];
sprite->pos2.y = timer * 0.039f * timer;
diff --git a/src/safari_zone.c b/src/safari_zone.c
index 3b86bc464..1f1397656 100644
--- a/src/safari_zone.c
+++ b/src/safari_zone.c
@@ -65,7 +65,7 @@ void EnterSafariMode(void)
void ExitSafariMode(void)
{
- sub_80EE44C(sSafariZoneCaughtMons, sSafariZonePkblkUses);
+ TryPutSafariFanClubOnAir(sSafariZoneCaughtMons, sSafariZonePkblkUses);
ResetSafariZoneFlag();
ClearAllPokeblockFeeders();
gNumSafariBalls = 0;
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 7dc02b6a8..0ee20d1c6 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1466,15 +1466,15 @@ bool8 ScrCmd_hidemonpic(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
+bool8 ScrCmd_showcontestpainting(struct ScriptContext *ctx)
{
u8 contestWinnerId = ScriptReadByte(ctx);
- // Don't save artist's painting yet
+ // Artist's painting is temporary and already has its data loaded
if (contestWinnerId != CONTEST_WINNER_ARTIST)
SetContestWinnerForPainting(contestWinnerId);
- ShowContestWinnerPainting();
+ ShowContestPainting();
ScriptContext1_Stop();
return TRUE;
}
diff --git a/src/script_menu.c b/src/script_menu.c
index 51c37b5b6..f3317773a 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -279,7 +279,7 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignore
gTasks[taskId].tWindowId = CreateWindowFromRect(left, top, columnCount * newWidth, rowCount * 2);
SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 0);
PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, sMultichoiceLists[multichoiceId].list);
- sub_8199944(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, 0);
+ InitMenuActionGrid(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, 0);
CopyWindowToVram(gTasks[taskId].tWindowId, 3);
return TRUE;
}
diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c
index ad1a55230..93a747772 100755
--- a/src/script_pokemon_util.c
+++ b/src/script_pokemon_util.c
@@ -22,7 +22,6 @@
#include "string_util.h"
#include "tv.h"
#include "constants/items.h"
-#include "constants/tv.h"
#include "constants/battle_frontier.h"
static void CB2_ReturnFromChooseHalfParty(void);
diff --git a/src/secret_base.c b/src/secret_base.c
index ddc051dca..e1c62e2f2 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -47,7 +47,6 @@
#include "constants/secret_bases.h"
#include "constants/songs.h"
#include "constants/trainers.h"
-#include "constants/tv.h"
// Values for registryStatus
enum {
diff --git a/src/shop.c b/src/shop.c
index dac43c96d..55b421928 100755
--- a/src/shop.c
+++ b/src/shop.c
@@ -38,7 +38,6 @@
#include "constants/metatile_behaviors.h"
#include "constants/rgb.h"
#include "constants/songs.h"
-#include "constants/tv.h"
#define TAG_SCROLL_ARROW 2100
#define TAG_ITEM_ICON_BASE 2110
@@ -48,7 +47,7 @@ static EWRAM_DATA struct ShopData *sShopData = NULL;
static EWRAM_DATA struct ListMenuItem *sListMenuItems = NULL;
static EWRAM_DATA u8 (*sItemNames)[16] = {0};
static EWRAM_DATA u8 sPurchaseHistoryId = 0;
-EWRAM_DATA struct ItemSlot gMartPurchaseHistory[3] = {0};
+EWRAM_DATA struct ItemSlot gMartPurchaseHistory[SMARTSHOPPER_NUM_ITEMS] = {0};
static void Task_ShopMenu(u8 taskId);
static void Task_HandleShopMenuQuit(u8 taskId);
@@ -373,7 +372,7 @@ static void Task_HandleShopMenuQuit(u8 taskId)
{
ClearStdWindowAndFrameToTransparent(sMartInfo.windowId, 2);
RemoveWindow(sMartInfo.windowId);
- SaveRecordedItemPurchasesForTVShow();
+ TryPutSmartShopperOnAir();
ScriptContext2_Disable();
DestroyTask(taskId);
diff --git a/src/slot_machine.c b/src/slot_machine.c
index aa32d5d95..9a3a9ee06 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -1592,7 +1592,7 @@ static bool8 SlotAction_WaitMsg_NoMoreCoins(struct Task *task)
static bool8 SlotAction_EndGame(struct Task *task)
{
SetCoins(sSlotMachine->coins);
- AlertTVOfNewCoinTotal(GetCoins());
+ TryPutFindThatGamerOnAir(GetCoins());
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0));
sSlotMachine->state++; // SLOT_ACTION_FREE
return FALSE;
diff --git a/src/strings.c b/src/strings.c
index 5c9b09c83..18cf31fb7 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "strings.h"
+#include "battle_pyramid_bag.h"
ALIGNED(4)
const u8 gText_ExpandedPlaceholder_Empty[] = _("");
@@ -252,7 +253,7 @@ const u8 gText_ThePokemonList[] = _("the POKéMON LIST");
const u8 gText_TheShop[] = _("the shop");
const u8 gText_ThePC[] = _("the PC");
-const u8 *const gReturnToXStringsTable[] =
+const u8 *const gBagMenu_ReturnToStrings[] =
{
gText_TheField,
gText_TheBattle,
@@ -268,12 +269,12 @@ const u8 *const gReturnToXStringsTable[] =
gText_ThePC
};
-const u8 *const gReturnToXStringsTable2[] =
+const u8 *const gPyramidBagMenu_ReturnToStrings[] =
{
- gText_TheField,
- gText_TheBattle,
- gText_ThePokemonList,
- gText_TheField
+ [PYRAMIDBAG_LOC_FIELD] = gText_TheField,
+ [PYRAMIDBAG_LOC_BATTLE] = gText_TheBattle,
+ [PYRAMIDBAG_LOC_PARTY] = gText_ThePokemonList,
+ [PYRAMIDBAG_LOC_CHOOSE_TOSS] = gText_TheField
};
const u8 gText_ReturnToVar1[] = _("Return to\n{STR_VAR_1}.");
diff --git a/src/trade.c b/src/trade.c
index cb3db3c18..78d7399fa 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -52,7 +52,29 @@
#include "constants/songs.h"
#include "constants/union_room.h"
-#define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20))
+// The following tags are offsets from GFXTAG_MENU_TEXT
+// They're looped over in CB2_CreateTradeMenu and CB2_ReturnToTradeMenu
+// and used as indexes into sMenuTextTileBuffers
+enum {
+ GFXTAG_PLAYER_NAME_L,
+ GFXTAG_PLAYER_NAME_M,
+ GFXTAG_PLAYER_NAME_R,
+ GFXTAG_PARTNER_NAME_L,
+ GFXTAG_PARTNER_NAME_M,
+ GFXTAG_PARTNER_NAME_R,
+ GFXTAG_CANCEL_L,
+ GFXTAG_CANCEL_R,
+ GFXTAG_CHOOSE_PKMN_L,
+ GFXTAG_CHOOSE_PKMN_M,
+ GFXTAG_CHOOSE_PKMN_R,
+ GFXTAG_CHOOSE_PKMN_EMPTY_1, // 6 sprites to cover the full bottom bar, but only first 3 are needed
+ GFXTAG_CHOOSE_PKMN_EMPTY_2,
+ GFXTAG_CHOOSE_PKMN_EMPTY_3,
+ GFXTAG_MENU_TEXT_COUNT
+};
+#define GFXTAG_PLAYER_NAME (1 + GFXTAG_PLAYER_NAME_R - GFXTAG_PLAYER_NAME_L)
+#define GFXTAG_PARTNER_NAME (1 + GFXTAG_PARTNER_NAME_R - GFXTAG_PARTNER_NAME_L)
+#define GFXTAG_CHOOSE_PKMN (1 + GFXTAG_CHOOSE_PKMN_EMPTY_3 - GFXTAG_CHOOSE_PKMN_L)
struct InGameTrade {
/*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
@@ -70,22 +92,23 @@ struct InGameTrade {
/*0x38*/ u16 requestedSpecies;
};
-static EWRAM_DATA u8 *sMessageBoxAllocBuffer = NULL;
+static EWRAM_DATA u8 *sMenuTextAllocBuffer = NULL;
-// Bytes 0-2 are used for the player's name box
-// Bytes 3-5 are used for the partner's name box
-// Bytes 6-7 are used for the Cancel box
-// Bytes 8-13 are used for the Choose a Pokemon box
-static EWRAM_DATA u8 *sMessageBoxTileBuffers[14] = {NULL};
+// Bytes 0-2 are used for the player's name text
+// Bytes 3-5 are used for the partner's name text
+// Bytes 6-7 are used for the Cancel text
+// Bytes 8-13 are used for the Choose a Pokemon text
+// See the corresponding GFXTAGs in src/data/trade.h
+static EWRAM_DATA u8 *sMenuTextTileBuffers[GFXTAG_MENU_TEXT_COUNT] = {NULL};
EWRAM_DATA struct MailStruct gTradeMail[PARTY_SIZE] = {0};
EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0};
static EWRAM_DATA struct {
/*0x0000*/ u8 bg2hofs;
/*0x0001*/ u8 bg3hofs;
- /*0x0002*/ u8 filler_2[0x28 - 2];
+ /*0x0002*/ u8 filler_2[38];
/*0x0028*/ u8 partySpriteIds[2][PARTY_SIZE];
- /*0x0034*/ u8 cursorSpriteIdx;
+ /*0x0034*/ u8 cursorSpriteId;
/*0x0035*/ u8 cursorPosition;
/*0x0036*/ u8 partyCounts[2];
/*0x0038*/ bool8 monPresent[PARTY_SIZE * 2];
@@ -94,7 +117,7 @@ static EWRAM_DATA struct {
/*0x0051*/ bool8 isEgg[2][PARTY_SIZE];
/*0x005D*/ u8 hpBarLevels[2][PARTY_SIZE];
/*0x0069*/ u8 bufferPartyState;
- /*0x006A*/ u8 filler_6A[0x6F - 0x6A];
+ /*0x006A*/ u8 filler_6A[5];
/*0x006F*/ u8 tradeMenuFunc;
/*0x0070*/ u8 neverRead_70;
/*0x0071*/ u8 filler_71;
@@ -105,13 +128,13 @@ static EWRAM_DATA struct {
/*0x0079*/ u8 partnerLinkFlagChoseAction;
/*0x007A*/ u8 playerLinkFlagStatus;
/*0x007B*/ u8 partnerLinkFlagStatus;
- /*0x007C*/ u8 filler_7C[0x7E - 0x7C];
+ /*0x007C*/ u8 filler_7C[2];
/*0x007E*/ u8 partnerCursorPosition;
/*0x007F*/ u8 unused_7F;
/*0x0080*/ u16 linkData[20];
/*0x00A8*/ u8 timer;
/*0x00A9*/ u8 giftRibbons[GIFT_RIBBONS_COUNT];
- /*0x00B4*/ u8 filler_B4[0x8D0-0xB4];
+ /*0x00B4*/ u8 filler_B4[0x81C];
/*0x08D0*/ struct {
bool8 queued;
u16 queueDelay;
@@ -119,6 +142,7 @@ static EWRAM_DATA struct {
} queuedActions[4];
/*0x08F0*/ u16 tilemapBuffer[0x400];
} *sTradeMenuData = {NULL};
+
static EWRAM_DATA struct {
/*0x00*/ struct Pokemon mon;
/*0x64*/ u32 timer;
@@ -127,19 +151,19 @@ static EWRAM_DATA struct {
/*0x72*/ u8 playerLinkFlagFinishTrade;
/*0x73*/ u8 partnerLinkFlagFinishTrade;
/*0x74*/ u16 linkData[10];
- /*0x88*/ u8 alwaysZero_88;
- /*0x89*/ u8 alwaysZero_89;
+ /*0x88*/ u8 linkTimeoutZero1;
+ /*0x89*/ u8 linkTimeoutZero2;
/*0x8A*/ u16 linkTimeoutCounter;
/*0x8C*/ u16 neverRead_8C;
- /*0x8E*/ u8 pokePicSpriteIdxs[2];
- /*0x90*/ u8 unk_90; //sprite id
- /*0x91*/ u8 unk_91; //sprite id
- /*0x92*/ u8 unk_92; //sprite id
+ /*0x8E*/ u8 monSpriteIds[2];
+ /*0x90*/ u8 connectionSpriteId1; // Multi-purpose sprite ids used during the transfer sequence
+ /*0x91*/ u8 connectionSpriteId2;
+ /*0x92*/ u8 cableEndSpriteId;
/*0x93*/ u8 sendTradeFinishState;
/*0x94*/ u16 state;
/*0x96*/ u8 filler_96[0xD2 - 0x96];
- /*0xD2*/ u8 pokeballSpriteId;
- /*0xD3*/ u8 unk_D3; //sprite id
+ /*0xD2*/ u8 releasePokeballSpriteId;
+ /*0xD3*/ u8 bouncingPokeballSpriteId;
/*0xD4*/ u16 texX;
/*0xD6*/ u16 texY;
/*0xD8*/ u16 neverRead_D8;
@@ -151,7 +175,7 @@ static EWRAM_DATA struct {
/*0xE4*/ s16 bg2vofs;
/*0xE6*/ s16 bg2hofs;
/*0xE8*/ u16 sXY;
- /*0xEA*/ u16 unk_EA; //sXY divisor
+ /*0xEA*/ u16 gbaScale;
/*0xEC*/ u16 alpha;
/*0xEE*/ bool8 isLinkTrade;
/*0xF0*/ u16 monSpecies[2];
@@ -183,24 +207,24 @@ static void DrawTradeMenuPartyMonInfo(u8, u8, u8, u8, u8, u8);
static void DrawTradeMenuPartyInfo(u8);
static void PrintNicknamesForTradeMenu(void);
static void RedrawTradeMenuParty(u8);
-static void Task_DrawSelectionSummary(u8 taskId);
-static void Task_DrawSelectionTrade(u8 taskId);
+static void Task_DrawSelectionSummary(u8);
+static void Task_DrawSelectionTrade(u8);
static void QueueAction(u16, u8);
static u32 GetNumQueuedActions(void);
static void DoQueuedActions(void);
static void PrintTradeMessage(u8);
static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void);
-static void DrawTextWindowAndBuffer6Bytes(const u8 *, u8 *, u8);
+static void DrawBottomRowText(const u8 *, u8 *, u8);
static void SetTradePartyLiveStatuses(u8);
static void GetTradePartyHPBarLevels(u8);
static void SetTradePartyHPBarSprites(void);
static void SaveTradeGiftRibbons(void);
static u32 CanTradeSelectedMon(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 SpriteCB_LinkMonGlow(struct Sprite *);
+static void SpriteCB_LinkMonShadow(struct Sprite *);
+static void SpriteCB_CableEndSending(struct Sprite *);
+static void SpriteCB_CableEndReceiving(struct Sprite *);
+static void SpriteCB_GbaScreen(struct Sprite *);
static void InitTradeBgInternal(void);
static void CB2_UpdateInGameTrade(void);
static void SetTradeSequenceBgGpuRegs(u8);
@@ -209,12 +233,12 @@ static void BufferTradeSceneStrings(void);
static bool8 AnimateTradeSequence(void);
static bool8 AnimateTradeSequenceCable(void);
static bool8 AnimateTradeSequenceWireless(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 SpriteCB_BouncingPokeball(struct Sprite *);
+static void SpriteCB_BouncingPokeballDepart(struct Sprite *);
+static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *);
+static void SpriteCB_BouncingPokeballArrive(struct Sprite *);
static void BufferInGameTradeMonName(void);
-static void SetInGameTradeMail(struct MailStruct *mail, const struct InGameTrade *trade);
+static void SetInGameTradeMail(struct MailStruct *, const struct InGameTrade *);
static void CB2_UpdateLinkTrade(void);
static void CB2_TryFinishTrade(void);
static void CB2_SaveAndEndTrade(void);
@@ -222,8 +246,8 @@ static void CB2_FreeTradeData(void);
static void Task_InGameTrade(u8);
static void CheckPartnersMonForRibbons(void);
static void Task_AnimateWirelessSignal(u8);
-static void c3_0805465C(u8);
-static void sub_807F39C(u8);
+static void Task_NarrowWindowForCrossing_Wireless(u8);
+static void Task_NarrowWindowForCrossing_Cable(u8);
static void CB2_SaveAndEndWirelessTrade(void);
#include "data/trade.h"
@@ -246,7 +270,7 @@ static void RequestLinkData(u8 type)
SendBlockRequest(type);
}
-static bool32 sub_80771BC(void)
+static bool32 IsLinkTradeTaskFinished(void)
{
if (gPlayerCurrActivity == ACTIVITY_29)
{
@@ -362,12 +386,10 @@ static void CB2_CreateTradeMenu(void)
case 0:
sTradeMenuData = AllocZeroed(sizeof(*sTradeMenuData));
InitTradeMenu();
- sMessageBoxAllocBuffer = AllocZeroed(ARRAY_COUNT(sMessageBoxTileBuffers) * 256);
+ sMenuTextAllocBuffer = AllocZeroed(GFXTAG_MENU_TEXT_COUNT * 256);
- for (i = 0; i < (int)ARRAY_COUNT(sMessageBoxTileBuffers); i++)
- {
- sMessageBoxTileBuffers[i] = &sMessageBoxAllocBuffer[i * 256];
- }
+ for (i = 0; i < GFXTAG_MENU_TEXT_COUNT; i++)
+ sMenuTextTileBuffers[i] = &sMenuTextAllocBuffer[i * 256];
gMain.state++;
break;
@@ -375,9 +397,7 @@ static void CB2_CreateTradeMenu(void)
gPaletteFade.bufferTransferDisabled = FALSE;
for (i = 0; i < PARTY_SIZE; i++)
- {
CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0);
- }
PrintTradeMessage(TRADE_MSG_STANDBY);
ShowBg(0);
@@ -508,11 +528,11 @@ static void CB2_CreateTradeMenu(void)
gMain.state++;
break;
case 10:
- DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMessageBoxTileBuffers[0], 0, 0, 3);
+ DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMenuTextTileBuffers[GFXTAG_PLAYER_NAME_L], 0, 0, 3);
id = GetMultiplayerId();
- DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMessageBoxTileBuffers[3], 0, 0, 3);
- DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMessageBoxTileBuffers[6], 0, 0, 2);
- DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMessageBoxTileBuffers[8], 24);
+ DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMenuTextTileBuffers[GFXTAG_PARTNER_NAME_L], 0, 0, 3);
+ DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2);
+ DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24);
gMain.state++;
sTradeMenuData->timer = 0;
break;
@@ -521,39 +541,43 @@ static void CB2_CreateTradeMenu(void)
gMain.state++;
break;
case 12:
+ // Create player's name text sprites
xPos = GetStringCenterAlignXOffset(1, gSaveBlock2Ptr->playerName, 120);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < GFXTAG_PLAYER_NAME; i++)
{
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += i;
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += i + GFXTAG_PLAYER_NAME_L;
CreateSprite(&temp, xPos + (i * 32) + 16, 10, 1);
}
+ // Create partner's name text sprites
xPos = GetStringCenterAlignXOffset(1, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < GFXTAG_PARTNER_NAME; i++)
{
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += i + 3;
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += i + GFXTAG_PARTNER_NAME_L;
CreateSprite(&temp, xPos + (i * 32) + 136, 10, 1);
}
gMain.state++;
break;
case 13:
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += 6;
+ // Create Cancel text sprites
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += GFXTAG_CANCEL_L;
CreateSprite(&temp, 215, 152, 1);
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += 7;
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += GFXTAG_CANCEL_R;
CreateSprite(&temp, 247, 152, 1);
- for (i = 0; i < PARTY_SIZE; i++)
+ // Create Choose a Pokémon text sprites (only 3 are needed, other 3 are empty)
+ for (i = 0; i < GFXTAG_CHOOSE_PKMN; i++)
{
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += i + 8;
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += i + GFXTAG_CHOOSE_PKMN_L;
CreateSprite(&temp, (i * 32) + 24, 150, 1);
}
- sTradeMenuData->cursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2);
+ sTradeMenuData->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2);
sTradeMenuData->cursorPosition = 0;
gMain.state++;
rbox_fill_rectangle(0);
@@ -695,11 +719,11 @@ static void CB2_ReturnToTradeMenu(void)
gMain.state++;
break;
case 10:
- DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMessageBoxTileBuffers[0], 0, 0, 3);
+ DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMenuTextTileBuffers[GFXTAG_PLAYER_NAME_L], 0, 0, 3);
id = GetMultiplayerId();
- DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMessageBoxTileBuffers[3], 0, 0, 3);
- DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMessageBoxTileBuffers[6], 0, 0, 2);
- DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMessageBoxTileBuffers[8], 24);
+ DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMenuTextTileBuffers[GFXTAG_PARTNER_NAME_L], 0, 0, 3);
+ DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2);
+ DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24);
gMain.state++;
sTradeMenuData->timer = 0;
break;
@@ -708,35 +732,39 @@ static void CB2_ReturnToTradeMenu(void)
gMain.state++;
break;
case 12:
+ // Create player's name text sprites
xPos = GetStringCenterAlignXOffset(1, gSaveBlock2Ptr->playerName, 120);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < GFXTAG_PLAYER_NAME; i++)
{
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += i;
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += i + GFXTAG_PLAYER_NAME_L;
CreateSprite(&temp, xPos + (i * 32) + 16, 10, 1);
}
+ // Create partner's name text sprites
xPos = GetStringCenterAlignXOffset(1, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < GFXTAG_PARTNER_NAME; i++)
{
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += i + 3;
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += i + GFXTAG_PARTNER_NAME_L;
CreateSprite(&temp, xPos + (i * 32) + 136, 10, 1);
}
gMain.state++;
break;
case 13:
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += 6;
+ // Create Cancel text sprites
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += GFXTAG_CANCEL_L;
CreateSprite(&temp, 215, 152, 1);
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += 7;
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += GFXTAG_CANCEL_R;
CreateSprite(&temp, 247, 152, 1);
- for (i = 0; i < PARTY_SIZE; i++)
+ // Create Choose a Pokémon text sprites
+ for (i = 0; i < GFXTAG_CHOOSE_PKMN; i++)
{
- temp = gSpriteTemplate_832DCAC;
- temp.tileTag += i + 8;
+ temp = sSpriteTemplate_MenuText;
+ temp.tileTag += i + GFXTAG_CHOOSE_PKMN_L;
CreateSprite(&temp, (i * 32) + 24, 150, 1);
}
@@ -745,7 +773,9 @@ static void CB2_ReturnToTradeMenu(void)
else
sTradeMenuData->cursorPosition = gLastViewedMonIndex + PARTY_SIZE;
- sTradeMenuData->cursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][0] * 8 + 32, sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][1] * 8, 2);
+ sTradeMenuData->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor,
+ sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][0] * 8 + 32,
+ sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][1] * 8, 2);
gMain.state = 16;
break;
case 16:
@@ -835,7 +865,7 @@ static void SetLinkTradeCallbacks(void)
{
if (IsLinkRfuTaskFinished())
{
- Free(sMessageBoxAllocBuffer);
+ Free(sMenuTextAllocBuffer);
FreeAllWindowBuffers();
Free(sTradeMenuData);
gMain.callback1 = NULL;
@@ -848,7 +878,7 @@ static void SetLinkTradeCallbacks(void)
{
if (!gReceivedRemoteLinkPlayers)
{
- Free(sMessageBoxAllocBuffer);
+ Free(sMenuTextAllocBuffer);
FreeAllWindowBuffers();
Free(sTradeMenuData);
gMain.callback1 = NULL;
@@ -957,12 +987,13 @@ static bool8 BufferTradeParties(void)
switch (sTradeMenuData->bufferPartyState)
{
case 0:
+ // The parties are sent in pairs rather than all at once
Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon));
sTradeMenuData->bufferPartyState++;
sTradeMenuData->timer = 0;
break;
case 1:
- if (sub_80771BC())
+ if (IsLinkTradeTaskFinished())
{
if (_GetBlockReceivedStatus() == 0)
{
@@ -1004,13 +1035,13 @@ static bool8 BufferTradeParties(void)
case 8:
if (_GetBlockReceivedStatus() == 3)
{
- Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 200);
+ Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon));
TradeResetReceivedFlags();
sTradeMenuData->bufferPartyState++;
}
break;
case 9:
- Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 200);
+ Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 2 * sizeof(struct Pokemon));
sTradeMenuData->bufferPartyState++;
break;
case 11:
@@ -1023,13 +1054,13 @@ static bool8 BufferTradeParties(void)
case 12:
if (_GetBlockReceivedStatus() == 3)
{
- Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 200);
+ Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon));
TradeResetReceivedFlags();
sTradeMenuData->bufferPartyState++;
}
break;
case 13:
- Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, 220);
+ Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, PARTY_SIZE * sizeof(struct MailStruct) + 4);
sTradeMenuData->bufferPartyState++;
break;
case 15:
@@ -1042,13 +1073,13 @@ static bool8 BufferTradeParties(void)
case 16:
if (_GetBlockReceivedStatus() == 3)
{
- Trade_Memcpy(gTradeMail, gBlockRecvBuffer[id ^ 1], 216);
+ Trade_Memcpy(gTradeMail, gBlockRecvBuffer[id ^ 1], PARTY_SIZE * sizeof(struct MailStruct));
TradeResetReceivedFlags();
sTradeMenuData->bufferPartyState++;
}
break;
case 17:
- Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, ARRAY_COUNT(sTradeMenuData->giftRibbons));
+ Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, sizeof(sTradeMenuData->giftRibbons));
sTradeMenuData->bufferPartyState++;
break;
case 19:
@@ -1061,7 +1092,7 @@ static bool8 BufferTradeParties(void)
case 20:
if (_GetBlockReceivedStatus() == 3)
{
- Trade_Memcpy(sTradeMenuData->giftRibbons, gBlockRecvBuffer[id ^ 1], ARRAY_COUNT(sTradeMenuData->giftRibbons));
+ Trade_Memcpy(sTradeMenuData->giftRibbons, gBlockRecvBuffer[id ^ 1], sizeof(sTradeMenuData->giftRibbons));
TradeResetReceivedFlags();
sTradeMenuData->bufferPartyState++;
}
@@ -1103,9 +1134,9 @@ static bool8 BufferTradeParties(void)
return FALSE;
}
-static void PrintAndBufferIsThisTradeOkay(void)
+static void DrawIsThisTradeOkay(void)
{
- DrawTextWindowAndBuffer6Bytes(sText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24);
+ DrawBottomRowText(sText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24);
}
// mpId is unused
@@ -1317,15 +1348,15 @@ static void TradeMenuMoveCursor(u8 *cursorPosition, u8 direction)
if (newPosition == (PARTY_SIZE * 2)) // CANCEL
{
- StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteIdx], 1);
- gSprites[sTradeMenuData->cursorSpriteIdx].pos1.x = DISPLAY_WIDTH - 16;
- gSprites[sTradeMenuData->cursorSpriteIdx].pos1.y = DISPLAY_HEIGHT;
+ StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteId], CURSOR_ANIM_ON_CANCEL);
+ gSprites[sTradeMenuData->cursorSpriteId].pos1.x = DISPLAY_WIDTH - 16;
+ gSprites[sTradeMenuData->cursorSpriteId].pos1.y = DISPLAY_HEIGHT;
}
else
{
- StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteIdx], 0);
- gSprites[sTradeMenuData->cursorSpriteIdx].pos1.x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32;
- gSprites[sTradeMenuData->cursorSpriteIdx].pos1.y = sTradeMonSpriteCoords[newPosition][1] * 8;
+ StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteId], CURSOR_ANIM_NORMAL);
+ gSprites[sTradeMenuData->cursorSpriteId].pos1.x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32;
+ gSprites[sTradeMenuData->cursorSpriteId].pos1.y = sTradeMonSpriteCoords[newPosition][1] * 8;
}
if (*cursorPosition != newPosition)
@@ -1392,7 +1423,7 @@ static void TradeMenuProcessInput(void)
{
CreateYesNoMenu(&sTradeYesNoWindowTemplate, 1, 14, 0);
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_PROMPT;
- DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CANCEL_TRADE], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24);
+ DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CANCEL_TRADE], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24);
}
}
}
@@ -1401,8 +1432,8 @@ static void TradeMenuChooseMon(void)
{
PrintNicknamesForTradeMenu();
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU;
- gSprites[sTradeMenuData->cursorSpriteIdx].invisible = FALSE;
- DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24);
+ gSprites[sTradeMenuData->cursorSpriteId].invisible = FALSE;
+ DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24);
}
static void TradeMenuProcessInput_SelectedMon(void)
@@ -1424,7 +1455,7 @@ static void TradeMenuProcessInput_SelectedMon(void)
{
case CAN_TRADE_MON:
SetReadyToTrade();
- gSprites[sTradeMenuData->cursorSpriteIdx].invisible = TRUE;
+ gSprites[sTradeMenuData->cursorSpriteId].invisible = TRUE;
break;
case CANT_TRADE_LAST_MON:
QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2);
@@ -1460,10 +1491,10 @@ static void TradeMenuShowMonSummaryScreen(void)
{
// Player's party
if (sTradeMenuData->cursorPosition < PARTY_SIZE)
- ShowPokemonSummaryScreen(PSS_MODE_LOCK_MOVES, gPlayerParty, sTradeMenuData->cursorPosition, sTradeMenuData->partyCounts[TRADE_PLAYER] - 1, CB2_ReturnToTradeMenu);
+ ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gPlayerParty, sTradeMenuData->cursorPosition, sTradeMenuData->partyCounts[TRADE_PLAYER] - 1, CB2_ReturnToTradeMenu);
// Partner's party
else
- ShowPokemonSummaryScreen(PSS_MODE_LOCK_MOVES, gEnemyParty, sTradeMenuData->cursorPosition - PARTY_SIZE, sTradeMenuData->partyCounts[TRADE_PARTNER] - 1, CB2_ReturnToTradeMenu);
+ ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gEnemyParty, sTradeMenuData->cursorPosition - PARTY_SIZE, sTradeMenuData->partyCounts[TRADE_PARTNER] - 1, CB2_ReturnToTradeMenu);
FreeAllWindowBuffers();
}
}
@@ -1514,7 +1545,9 @@ static bool32 CheckMonsBeforeTrade(void)
aliveMons[i] = sTradeMenuData->isLiveMon[TRADE_PLAYER][i];
}
- switch (CheckValidityOfTradeMons(aliveMons, sTradeMenuData->partyCounts[TRADE_PLAYER], sTradeMenuData->cursorPosition, sTradeMenuData->partnerCursorPosition))
+ switch (CheckValidityOfTradeMons(aliveMons, sTradeMenuData->partyCounts[TRADE_PLAYER],
+ sTradeMenuData->cursorPosition,
+ sTradeMenuData->partnerCursorPosition))
{
case PLAYER_MON_INVALID:
QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2);
@@ -1547,7 +1580,7 @@ static void ConfirmOrCancelTrade(void)
case 1: // Cancel Trade
case MENU_B_PRESSED:
QueueAction(QUEUE_DELAY_MSG, QUEUE_STANDBY);
- if (sub_80771BC())
+ if (IsLinkTradeTaskFinished())
SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0);
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY;
PutWindowTilemap(17);
@@ -1555,7 +1588,8 @@ static void ConfirmOrCancelTrade(void)
}
}
-static void sub_807929C(void)
+// Only when choosing Yes to cancel, when No is chosen all are redrawn anyway
+static void RestoreNicknamesCoveredByYesNo(void)
{
int i;
@@ -1573,9 +1607,9 @@ static void CancelTradeYesNo(void)
case 0: // YES, Cancel
PrintTradeMessage(TRADE_MSG_WAITING_FOR_FRIEND);
SetLinkData(LINKCMD_REQUEST_CANCEL, 0);
- gSprites[sTradeMenuData->cursorSpriteIdx].invisible = TRUE;
+ gSprites[sTradeMenuData->cursorSpriteId].invisible = TRUE;
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY;
- sub_807929C();
+ RestoreNicknamesCoveredByYesNo();
break;
case 1: // NO, Continue
case MENU_B_PRESSED:
@@ -1601,7 +1635,7 @@ static void ConfirmTradePrompt(void)
if (sTradeMenuData->drawPartyState[TRADE_PLAYER] == DRAW_PARTY_FINISH
&& sTradeMenuData->drawPartyState[TRADE_PARTNER] == DRAW_PARTY_FINISH)
{
- PrintAndBufferIsThisTradeOkay();
+ DrawIsThisTradeOkay();
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_DELAY_TRADE_CONFIRM;
}
}
@@ -1637,7 +1671,7 @@ static void RedrawTradeMenuAfterPressA(void)
RedrawTradeMenuParty(TRADE_PLAYER);
RedrawTradeMenuParty(TRADE_PARTNER);
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU;
- gSprites[sTradeMenuData->cursorSpriteIdx].invisible = FALSE;
+ gSprites[sTradeMenuData->cursorSpriteId].invisible = FALSE;
}
}
@@ -1662,9 +1696,9 @@ static void CancelTrade_2(void)
{
if (gWirelessCommType)
{
- if (sub_80771BC() && GetNumQueuedActions() == 0)
+ if (IsLinkTradeTaskFinished() && GetNumQueuedActions() == 0)
{
- Free(sMessageBoxAllocBuffer);
+ Free(sMenuTextAllocBuffer);
Free(sTradeMenuData);
FreeAllWindowBuffers();
DestroyWirelessStatusIndicatorSprite();
@@ -1675,7 +1709,7 @@ static void CancelTrade_2(void)
{
if (!gReceivedRemoteLinkPlayers)
{
- Free(sMessageBoxAllocBuffer);
+ Free(sMenuTextAllocBuffer);
Free(sTradeMenuData);
FreeAllWindowBuffers();
SetMainCallback2(CB2_ReturnToFieldFromMultiplayer);
@@ -1803,7 +1837,8 @@ static void DrawTradeMenuParty(u8 whichParty)
gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].invisible = FALSE;
gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[0] = 20;
- gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0]
+ + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[4] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12;
StoreSpriteCallbackInData6(&gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]], SpriteCB_MonIcon);
sTradeMenuData->drawPartyState[whichParty]++;
@@ -1822,7 +1857,8 @@ static void DrawTradeMenuParty(u8 whichParty)
case 3:
CopyToBgTilemapBufferRect_ChangePalette(1, sTradeMovesBoxTilemap, selectedMonParty * 15, 0, 15, 17, 0);
CopyBgTilemapBufferToVram(1);
- gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos1.x = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos1.x = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0]
+ + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos1.y = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12;
gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos2.x = 0;
gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos2.y = 0;
@@ -2035,7 +2071,7 @@ static void RedrawTradeMenuParty(u8 whichParty)
DrawTradeMenuPartyInfo(whichParty);
PrintPartyNicknamesForTradeMenu(whichParty);
ResetTradeMenuPartyPositions(whichParty);
- DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24);
+ DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24);
sTradeMenuData->drawPartyState[whichParty] = 0;
}
@@ -2139,40 +2175,51 @@ static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void)
{
struct SpriteSheet sheet;
- if (sTradeMenuData->timer < (int)ARRAY_COUNT(sMessageBoxTileBuffers))
+ if (sTradeMenuData->timer < GFXTAG_MENU_TEXT_COUNT)
{
- sheet.data = sMessageBoxTileBuffers[sTradeMenuData->timer];
+ sheet.data = sMenuTextTileBuffers[sTradeMenuData->timer];
sheet.size = 0x100;
- sheet.tag = 200 + sTradeMenuData->timer;
+ sheet.tag = GFXTAG_MENU_TEXT + sTradeMenuData->timer;
}
switch (sTradeMenuData->timer)
{
- case 0 ... 7:
+ case GFXTAG_PLAYER_NAME_L:
+ case GFXTAG_PLAYER_NAME_M:
+ case GFXTAG_PLAYER_NAME_R:
+ case GFXTAG_PARTNER_NAME_L:
+ case GFXTAG_PARTNER_NAME_M:
+ case GFXTAG_PARTNER_NAME_R:
+ case GFXTAG_CANCEL_L:
+ case GFXTAG_CANCEL_R:
LoadSpriteSheet(&sheet);
sTradeMenuData->timer++;
break;
- case 8:
+ case GFXTAG_CHOOSE_PKMN_L:
sTradeMenuData->bottomTextTileStart = LoadSpriteSheet(&sheet);
sTradeMenuData->timer++;
break;
- case 9 ... 13:
+ case GFXTAG_CHOOSE_PKMN_M:
+ case GFXTAG_CHOOSE_PKMN_R:
+ case GFXTAG_CHOOSE_PKMN_EMPTY_1:
+ case GFXTAG_CHOOSE_PKMN_EMPTY_2:
+ case GFXTAG_CHOOSE_PKMN_EMPTY_3:
LoadSpriteSheet(&sheet);
sTradeMenuData->timer++;
break;
- case 14:
+ case GFXTAG_MENU_TEXT_COUNT:
LoadSpritePalette(&gSpritePalette_TradeScreenText);
sTradeMenuData->timer++;
break;
- case 15:
- LoadSpritePalette(&gUnknown_0832DC44);
+ case GFXTAG_MENU_TEXT_COUNT + 1:
+ LoadSpritePalette(&sCursor_SpritePalette);
sTradeMenuData->timer++;
break;
- case 16:
- LoadSpriteSheet(&sTradeButtonsSpriteSheet);
+ case GFXTAG_MENU_TEXT_COUNT + 2:
+ LoadSpriteSheet(&sCursor_SpriteSheet);
sTradeMenuData->timer++;
break;
- case 17:
+ case GFXTAG_MENU_TEXT_COUNT + 3:
sTradeMenuData->timer = 0;
return TRUE;
}
@@ -2180,7 +2227,7 @@ static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void)
return FALSE;
}
-static void DrawTextWindowAndBuffer6Bytes(const u8 *str, u8 *dest, u8 unused)
+static void DrawBottomRowText(const u8 *str, u8 *dest, u8 unused)
{
DrawTextWindowAndBufferTiles(str, dest, 0, 0, 6);
}
@@ -2564,7 +2611,7 @@ int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx)
return CAN_TRADE_MON;
}
-static void sub_807AA28(struct Sprite *sprite)
+static void SpriteCB_LinkMonGlow(struct Sprite *sprite)
{
if (++sprite->data[0] == 10)
{
@@ -2573,7 +2620,7 @@ static void sub_807AA28(struct Sprite *sprite)
}
}
-static void sub_807AA4C(struct Sprite *sprite)
+static void SpriteCB_LinkMonGlowWireless(struct Sprite *sprite)
{
if (!sprite->invisible && ++sprite->data[0] == 10)
{
@@ -2582,18 +2629,19 @@ static void sub_807AA4C(struct Sprite *sprite)
}
}
-static void sub_807AA7C(struct Sprite *sprite)
+static void SpriteCB_LinkMonShadow(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);
+ LoadPalette(&sLinkMonShadow_Pal[sprite->data[0]], (sprite->oam.paletteNum + 16) * 16 + 4, 2);
}
}
-static void sub_807AABC(struct Sprite *sprite)
+// Move cable down offscreen
+static void SpriteCB_CableEndSending(struct Sprite *sprite)
{
sprite->data[0]++;
sprite->pos2.y++;
@@ -2602,7 +2650,8 @@ static void sub_807AABC(struct Sprite *sprite)
DestroySprite(sprite);
}
-static void sub_807AAE0(struct Sprite *sprite)
+// Move cable up onscreen
+static void SpriteCB_CableEndReceiving(struct Sprite *sprite)
{
sprite->data[0]++;
sprite->pos2.y--;
@@ -2611,7 +2660,7 @@ static void sub_807AAE0(struct Sprite *sprite)
DestroySprite(sprite);
}
-static void sub_807AB04(struct Sprite *sprite)
+static void SpriteCB_GbaScreen(struct Sprite *sprite)
{
if (++sprite->data[0] == 15)
{
@@ -2665,13 +2714,13 @@ static void VBlankCB_Trade(void)
static void ClearLinkTimeoutCounter(void)
{
sTradeData->linkTimeoutCounter = 0;
- sTradeData->alwaysZero_88 = 0;
- sTradeData->alwaysZero_89 = 0;
+ sTradeData->linkTimeoutZero1 = 0;
+ sTradeData->linkTimeoutZero2 = 0;
}
static void CheckForLinkTimeout(void)
{
- if (sTradeData->alwaysZero_88 == sTradeData->alwaysZero_89)
+ if (sTradeData->linkTimeoutZero1 == sTradeData->linkTimeoutZero2)
sTradeData->linkTimeoutCounter++;
else
sTradeData->linkTimeoutCounter = 0;
@@ -2681,11 +2730,11 @@ static void CheckForLinkTimeout(void)
CloseLink();
SetMainCallback2(CB2_LinkError);
sTradeData->linkTimeoutCounter = 0;
- sTradeData->alwaysZero_89 = 0;
- sTradeData->alwaysZero_88 = 0;
+ sTradeData->linkTimeoutZero2 = 0;
+ sTradeData->linkTimeoutZero1 = 0;
}
- sTradeData->alwaysZero_89 = sTradeData->alwaysZero_88;
+ sTradeData->linkTimeoutZero2 = sTradeData->linkTimeoutZero1;
}
static u32 TradeGetMultiplayerId(void)
@@ -2731,9 +2780,9 @@ static void LoadTradeMonPic(u8 whichParty, u8 state)
break;
case 1:
SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos);
- sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6);
- gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE;
- gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy;
+ sTradeData->monSpriteIds[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6);
+ gSprites[sTradeData->monSpriteIds[whichParty]].invisible = TRUE;
+ gSprites[sTradeData->monSpriteIds[whichParty]].callback = SpriteCallbackDummy;
break;
}
}
@@ -3047,7 +3096,7 @@ static void TrySendTradeFinishData(void)
case 1:
if (IsLinkTaskFinished())
{
- Trade_SendData(sTradeData);
+ SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, sizeof(sTradeData->linkData));
sTradeData->sendTradeFinishState++;
}
// fallthrough
@@ -3086,7 +3135,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
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);
+ DmaCopy16Defvars(3, gTradePlatform_Tilemap, (void *) BG_SCREEN_ADDR(18), 0x1000);
break;
case 1:
sTradeData->bg1hofs = 0;
@@ -3105,11 +3154,11 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
if (sTradeData->isCableTrade)
{
- DmaCopy16Defvars(3, sTradeTilemap_GbaCable, (void *) BG_SCREEN_ADDR(5), 0x1000);
+ DmaCopy16Defvars(3, sGbaCable_Tilemap, (void *) BG_SCREEN_ADDR(5), 0x1000);
}
else
{
- DmaCopy16Defvars(3, sTradeTilemap_GbaWireless, (void *) BG_SCREEN_ADDR(5), 0x1000);
+ DmaCopy16Defvars(3, sGbaWireless_Tilemap, (void *) BG_SCREEN_ADDR(5), 0x1000);
}
DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(0), 0x1420, 0x1000);
@@ -3127,7 +3176,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG1_ON |
DISPCNT_OBJ_ON);
- LZ77UnCompVram(gUnknown_083379A0, (void *) BG_SCREEN_ADDR(5));
+ LZ77UnCompVram(sCrossingHighlightWireless_Tilemap, (void *) BG_SCREEN_ADDR(5));
BlendPalettes(0x8, 16, RGB_BLACK);
}
else
@@ -3136,14 +3185,14 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG1_ON |
DISPCNT_OBJ_ON);
- DmaCopy16Defvars(3, sTradeTilemap_Cable, (void *) BG_SCREEN_ADDR(5), 0x800);
+ DmaCopy16Defvars(3, sCrossingHighlightCable_Tilemap, (void *) BG_SCREEN_ADDR(5), 0x800);
BlendPalettes(0x1, 16, RGB_BLACK);
}
break;
case 3:
- LoadPalette(sTradePal_Black, 48, 0x20);
- LZ77UnCompVram(sTradeGfx_WirelessSignal, (void *) BG_CHAR_ADDR(1));
- LZ77UnCompVram(sTradeTilemap_WirelessSignal, (void *) BG_SCREEN_ADDR(18));
+ LoadPalette(sWirelessSignalNone_Pal, 48, 0x20);
+ LZ77UnCompVram(sWirelessSignal_Gfx, (void *) BG_CHAR_ADDR(1));
+ LZ77UnCompVram(sWirelessSignal_Tilemap, (void *) BG_SCREEN_ADDR(18));
sTradeData->bg2vofs = 80;
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
DISPCNT_OBJ_1D_MAP |
@@ -3164,18 +3213,18 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
sTradeData->texX = 64;
sTradeData->texY = 92;
sTradeData->sXY = 32;
- sTradeData->unk_EA = 1024;
+ sTradeData->gbaScale = 1024;
sTradeData->alpha = 0;
- DmaCopyLarge16(3, sTradeAffine_Gba, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
+ DmaCopyLarge16(3, sGbaAffine_Gfx, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
if (sTradeData->isCableTrade)
{
- DmaCopy16Defvars(3, sTradeAffineMap_GbaCable, (void *) BG_SCREEN_ADDR(18), 0x100);
+ DmaCopy16Defvars(3, sGbaCable_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100);
}
else
{
- DmaCopy16Defvars(3, sTradeAffineMap_GbaWireless, (void *) BG_SCREEN_ADDR(18), 0x100);
+ DmaCopy16Defvars(3, sGbaWireless_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100);
}
break;
case 5:
@@ -3195,20 +3244,20 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
sTradeData->texX = 64;
sTradeData->texY = 92;
sTradeData->sXY = 256;
- sTradeData->unk_EA = 128;
+ sTradeData->gbaScale = 128;
sTradeData->scrX = 120;
sTradeData->scrY = 80;
sTradeData->alpha = 0;
- DmaCopyLarge16(3, sTradeAffine_Gba, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
+ DmaCopyLarge16(3, sGbaAffine_Gfx, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
if (sTradeData->isCableTrade)
{
- DmaCopy16Defvars(3, sTradeAffineMap_GbaCable, (void *) BG_SCREEN_ADDR(18), 0x100);
+ DmaCopy16Defvars(3, sGbaCable_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100);
}
else
{
- DmaCopy16Defvars(3, sTradeAffineMap_GbaWireless, (void *) BG_SCREEN_ADDR(18), 0x100);
+ DmaCopy16Defvars(3, sGbaWireless_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100);
}
break;
case 7:
@@ -3222,19 +3271,19 @@ static void SetTradeSequenceBgGpuRegs(u8 state)
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);
+ DmaCopy16Defvars(3, gTradePlatform_Tilemap, (void *) BG_SCREEN_ADDR(18), 0x1000);
break;
}
}
static void LoadTradeSequenceSpriteSheetsAndPalettes(void)
{
- LoadSpriteSheet(&sGlow1SpriteSheet);
- LoadSpriteSheet(&sGlow2SpriteSheet);
- LoadSpriteSheet(&sCableEndSpriteSheet);
- LoadSpriteSheet(&sGbaScreenSpriteSheet);
- LoadSpritePalette(&sMiscTradeSpritePalette);
- LoadSpritePalette(&sGbaSpritePalette);
+ LoadSpriteSheet(&sSpriteSheet_LinkMonGlow);
+ LoadSpriteSheet(&sSpriteSheet_LinkMonShadow);
+ LoadSpriteSheet(&sSpriteSheet_CableEnd);
+ LoadSpriteSheet(&sSpriteSheet_GbaScreen);
+ LoadSpritePalette(&sSpritePalette_LinkMon);
+ LoadSpritePalette(&sSpritePalette_Gba);
}
// Buffers "[Pokemon] will be sent to [Trainer]" strings
@@ -3263,7 +3312,7 @@ static void BufferTradeSceneStrings(void)
}
}
-// returns TRUE if it was a link trade, FALSE if it was an in-game trade
+// returns TRUE if it finished a link trade, FALSE if it finished an in-game trade or if sequence is still going
static bool8 AnimateTradeSequence(void)
{
if (sTradeData->isCableTrade)
@@ -3272,71 +3321,146 @@ static bool8 AnimateTradeSequence(void)
return AnimateTradeSequenceWireless();
}
+// Below are the states for the main switch in AnimateTradeSequenceCable and AnimateTradeSequenceWireless
+// When AnimateTradeSequenceWireless has a unique version of a
+// state used by AnimateTradeSequenceCable, it adds the below modifier
+#define TS_WIRELESS_STATE 100
+enum {
+ TS_STATE_START,
+ TS_STATE_MON_SLIDE_IN,
+ // 2-9 unused
+ TS_STATE_SEND_MSG = 10,
+ TS_STATE_BYE_BYE,
+ TS_STATE_POKEBALL_DEPART,
+ TS_STATE_POKEBALL_DEPART_WAIT,
+ TS_STATE_FADE_OUT_TO_GBA_SEND,
+ // 15-19 unused
+ TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND = 20,
+ TS_STATE_FADE_IN_TO_GBA_SEND,
+ TS_STATE_WAIT_FADE_IN_TO_GBA_SEND,
+ TS_STATE_GBA_ZOOM_OUT,
+ TS_STATE_GBA_FLASH_SEND,
+ TS_STATE_GBA_STOP_FLASH_SEND,
+ TS_STATE_PAN_AWAY_GBA,
+ TS_STATE_CREATE_LINK_MON_LEAVING,
+ TS_STATE_LINK_MON_TRAVEL_OUT,
+ TS_STATE_FADE_OUT_TO_CROSSING,
+ TS_STATE_WAIT_FADE_OUT_TO_CROSSING,
+ TS_STATE_FADE_IN_TO_CROSSING,
+ TS_STATE_WAIT_FADE_IN_TO_CROSSING,
+ TS_STATE_CROSSING_LINK_MONS_ENTER,
+ TS_STATE_CROSSING_BLEND_WHITE_1,
+ TS_STATE_CROSSING_BLEND_WHITE_2,
+ TS_STATE_CROSSING_BLEND_WHITE_3,
+ TS_STATE_CROSSING_CREATE_MON_PICS,
+ TS_STATE_CROSSING_MON_PICS_MOVE,
+ TS_STATE_CROSSING_LINK_MONS_EXIT,
+ TS_STATE_CREATE_LINK_MON_ARRIVING,
+ TS_STATE_FADE_OUT_TO_GBA_RECV,
+ TS_STATE_WAIT_FADE_OUT_TO_GBA_RECV,
+ TS_STATE_LINK_MON_TRAVEL_IN,
+ TS_STATE_PAN_TO_GBA,
+ TS_STATE_DESTROY_LINK_MON,
+ TS_STATE_LINK_MON_ARRIVED_DELAY,
+ TS_STATE_MOVE_GBA_TO_CENTER,
+ TS_STATE_GBA_FLASH_RECV,
+ TS_STATE_UNUSED,
+ TS_STATE_GBA_STOP_FLASH_RECV,
+ TS_STATE_GBA_ZOOM_IN,
+ TS_STATE_FADE_OUT_TO_NEW_MON,
+ // 53-59 unused
+ TS_STATE_WAIT_FADE_OUT_TO_NEW_MON = 60,
+ TS_STATE_FADE_IN_TO_NEW_MON,
+ TS_STATE_WAIT_FADE_IN_TO_NEW_MON,
+ TS_STATE_POKEBALL_ARRIVE,
+ TS_STATE_FADE_POKEBALL_TO_NORMAL,
+ TS_STATE_POKEBALL_ARRIVE_WAIT,
+ TS_STATE_SHOW_NEW_MON,
+ TS_STATE_NEW_MON_MSG,
+ TS_STATE_TAKE_CARE_OF_MON,
+ TS_STATE_AFTER_NEW_MON_DELAY,
+ TS_STATE_CHECK_RIBBONS,
+ TS_STATE_END_LINK_TRADE,
+ TS_STATE_TRY_EVOLUTION,
+ TS_STATE_FADE_OUT_END,
+ TS_STATE_WAIT_FADE_OUT_END,
+ // Special states
+ TS_STATE_GBA_FLASH_SEND_WIRELESS = TS_STATE_GBA_FLASH_SEND + TS_WIRELESS_STATE,
+ TS_STATE_GBA_STOP_FLASH_SEND_WIRELESS,
+ TS_STATE_WAIT_WIRELESS_SIGNAL_SEND,
+ TS_STATE_PAN_TO_GBA_WIRELESS = TS_STATE_PAN_TO_GBA + TS_WIRELESS_STATE,
+ TS_STATE_DESTROY_LINK_MON_WIRELESS,
+ TS_STATE_WAIT_WIRELESS_SIGNAL_RECV,
+ TS_STATE_DELAY_FOR_MON_ANIM = 167,
+ TS_STATE_LINK_MON_TRAVEL_OFFSCREEN = 200,
+ TS_STATE_WAIT_FOR_MON_CRY = 267,
+};
+
static bool8 AnimateTradeSequenceCable(void)
{
u16 evoTarget;
switch (sTradeData->state)
{
- case 0:
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = -180;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset;
+ case TS_STATE_START:
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.x = -180;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset;
sTradeData->state++;
sTradeData->cachedMapMusic = GetCurrentMapMusic();
PlayNewMapMusic(MUS_EVOLUTION);
break;
- case 1:
+ case TS_STATE_MON_SLIDE_IN:
if (sTradeData->bg2hofs > 0)
{
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x += 3;
+ // Sliding
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.x += 3;
sTradeData->bg2hofs -= 3;
}
else
{
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = 0;
+ // Pokémon has arrived onscreen
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.x = 0;
sTradeData->bg2hofs = 0;
- sTradeData->state = 10;
+ sTradeData->state = TS_STATE_SEND_MSG;
}
break;
- case 10:
+ case TS_STATE_SEND_MSG:
StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY);
DrawTextOnTradeWindow(0, gStringVar4, 0);
if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG)
- {
PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0);
- }
- sTradeData->state = 11;
+ sTradeData->state = TS_STATE_BYE_BYE;
sTradeData->timer = 0;
break;
- case 11:
+ case TS_STATE_BYE_BYE:
if (++sTradeData->timer == 80)
{
- sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
+ sTradeData->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeData->monSpriteIds[0], gSprites[sTradeData->monSpriteIds[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
sTradeData->state++;
StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1);
DrawTextOnTradeWindow(0, gStringVar4, 0);
}
break;
- case 12:
- if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy)
+ case TS_STATE_POKEBALL_DEPART:
+ if (gSprites[sTradeData->releasePokeballSpriteId].callback == SpriteCallbackDummy)
{
- sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0);
- gSprites[sTradeData->unk_D3].callback = sub_807E5D8;
- DestroySprite(&gSprites[sTradeData->pokeballSpriteId]);
+ sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0);
+ gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart;
+ DestroySprite(&gSprites[sTradeData->releasePokeballSpriteId]);
sTradeData->state++;
}
break;
- case 13:
+ case TS_STATE_POKEBALL_DEPART_WAIT:
// The game waits here for the sprite to finish its animation sequence.
break;
- case 14:
+ case TS_STATE_FADE_OUT_TO_GBA_SEND:
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
- sTradeData->state = 20;
+ sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND;
break;
- case 20:
+ case TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND:
if (!gPaletteFade.active)
{
SetTradeSequenceBgGpuRegs(4);
@@ -3345,42 +3469,40 @@ static bool8 AnimateTradeSequenceCable(void)
sTradeData->state++;
}
break;
- case 21:
+ case TS_STATE_FADE_IN_TO_GBA_SEND:
BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK);
sTradeData->state++;
break;
- case 22:
+ case TS_STATE_WAIT_FADE_IN_TO_GBA_SEND:
if (!gPaletteFade.active)
- {
- sTradeData->state = 23;
- }
+ sTradeData->state = TS_STATE_GBA_ZOOM_OUT;
break;
- case 23:
- if (sTradeData->unk_EA > 0x100)
+ case TS_STATE_GBA_ZOOM_OUT:
+ if (sTradeData->gbaScale > 0x100)
{
- sTradeData->unk_EA -= 0x34;
+ sTradeData->gbaScale -= 0x34;
}
else
{
SetTradeSequenceBgGpuRegs(1);
- sTradeData->unk_EA = 0x80;
+ sTradeData->gbaScale = 0x80;
sTradeData->state++;
sTradeData->timer = 0;
}
- sTradeData->sXY = 0x8000 / sTradeData->unk_EA;
+ sTradeData->sXY = 0x8000 / sTradeData->gbaScale;
break;
- case 24:
+ case TS_STATE_GBA_FLASH_SEND:
if (++sTradeData->timer > 20)
{
SetTradeBGAffine();
- sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0);
sTradeData->state++;
}
break;
- case 25:
- if (gSprites[sTradeData->unk_91].animEnded)
+ case TS_STATE_GBA_STOP_FLASH_SEND:
+ if (gSprites[sTradeData->connectionSpriteId2].animEnded)
{
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND |
BLDCNT_TGT2_BG1 |
BLDCNT_TGT2_BG2);
@@ -3388,193 +3510,183 @@ static bool8 AnimateTradeSequenceCable(void)
sTradeData->state++;
}
break;
- case 26:
+ case TS_STATE_PAN_AWAY_GBA:
if (--sTradeData->bg1vofs == 316)
- {
sTradeData->state++;
- }
+
if (sTradeData->bg1vofs == 328)
- {
- sTradeData->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0);
- }
+ sTradeData->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0);
break;
- case 27:
- sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 128, 80, 3);
- sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0);
- StartSpriteAnim(&gSprites[sTradeData->unk_91], 1);
+ case TS_STATE_CREATE_LINK_MON_LEAVING:
+ sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, 80, 3);
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, 80, 0);
+ StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL);
sTradeData->state++;
break;
- case 28:
+ case TS_STATE_LINK_MON_TRAVEL_OUT:
if ((sTradeData->bg1vofs -= 2) == 166)
- {
- sTradeData->state = 200;
- }
+ sTradeData->state = TS_STATE_LINK_MON_TRAVEL_OFFSCREEN;
+
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG1_ON |
DISPCNT_OBJ_ON);
break;
- case 200:
- gSprites[sTradeData->unk_90].pos1.y -= 2;
- gSprites[sTradeData->unk_91].pos1.y -= 2;
- if (gSprites[sTradeData->unk_90].pos1.y < -8)
- {
- sTradeData->state = 29;
- }
+ case TS_STATE_LINK_MON_TRAVEL_OFFSCREEN:
+ gSprites[sTradeData->connectionSpriteId1].pos1.y -= 2;
+ gSprites[sTradeData->connectionSpriteId2].pos1.y -= 2;
+ if (gSprites[sTradeData->connectionSpriteId1].pos1.y < -8)
+ sTradeData->state = TS_STATE_FADE_OUT_TO_CROSSING;
break;
- case 29:
+ case TS_STATE_FADE_OUT_TO_CROSSING:
BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK);
- sTradeData->state = 30;
+ sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_CROSSING;
break;
- case 30:
+ case TS_STATE_WAIT_FADE_OUT_TO_CROSSING:
if (!gPaletteFade.active)
{
- DestroySprite(&gSprites[sTradeData->unk_90]);
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId1]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
SetTradeSequenceBgGpuRegs(2);
sTradeData->state++;
}
break;
- case 31:
+ case TS_STATE_FADE_IN_TO_CROSSING:
BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK);
- sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0);
- sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0);
+ sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0);
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0);
sTradeData->state++;
break;
- case 32:
+ case TS_STATE_WAIT_FADE_IN_TO_CROSSING:
if (!gPaletteFade.active)
{
PlaySE(SE_WARP_OUT);
sTradeData->state++;
}
- gSprites[sTradeData->unk_90].pos2.y -= 3;
- gSprites[sTradeData->unk_91].pos2.y += 3;
+ gSprites[sTradeData->connectionSpriteId1].pos2.y -= 3;
+ gSprites[sTradeData->connectionSpriteId2].pos2.y += 3;
break;
- case 33:
- gSprites[sTradeData->unk_90].pos2.y -= 3;
- gSprites[sTradeData->unk_91].pos2.y += 3;
- if (gSprites[sTradeData->unk_90].pos2.y <= -90)
+ case TS_STATE_CROSSING_LINK_MONS_ENTER:
+ gSprites[sTradeData->connectionSpriteId1].pos2.y -= 3;
+ gSprites[sTradeData->connectionSpriteId2].pos2.y += 3;
+ if (gSprites[sTradeData->connectionSpriteId1].pos2.y <= -90)
{
- gSprites[sTradeData->unk_90].data[1] = 1;
- gSprites[sTradeData->unk_91].data[1] = 1;
+ gSprites[sTradeData->connectionSpriteId1].data[1] = 1;
+ gSprites[sTradeData->connectionSpriteId2].data[1] = 1;
sTradeData->state++;
}
break;
- case 34:
+ case TS_STATE_CROSSING_BLEND_WHITE_1:
BlendPalettes(0x1, 16, RGB_WHITEALPHA);
sTradeData->state++;
break;
- case 35:
+ case TS_STATE_CROSSING_BLEND_WHITE_2:
BlendPalettes(0x1, 0, RGB_WHITEALPHA);
sTradeData->state++;
break;
- case 36:
+ case TS_STATE_CROSSING_BLEND_WHITE_3:
BlendPalettes(0x1, 16, RGB_WHITEALPHA);
sTradeData->state++;
break;
- case 37:
+ case TS_STATE_CROSSING_CREATE_MON_PICS:
if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER]))
{
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].affineAnims = gSpriteAffineAnimTable_8338ECC;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
- CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE);
- StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0);
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ CalcCenterToCornerVec(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE);
+ StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0);
}
else
{
- StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0);
+ StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0);
}
- StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0);
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.x = 60;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 180;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.y = 192;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = -32;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = FALSE;
+ StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0);
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos1.x = 60;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos1.x = 180;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos1.y = 192;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos1.y = -32;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = FALSE;
sTradeData->state++;
break;
- case 38:
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y -= 3;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y += 3;
- if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -DISPLAY_HEIGHT
- && gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y >= -DISPLAY_HEIGHT - 3)
+ case TS_STATE_CROSSING_MON_PICS_MOVE:
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y -= 3;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos2.y += 3;
+ if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y < -DISPLAY_HEIGHT
+ && gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y >= -DISPLAY_HEIGHT - 3)
{
PlaySE(SE_WARP_IN);
}
- if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -222)
+ if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y < -222)
{
- gSprites[sTradeData->unk_90].data[1] = 0;
- gSprites[sTradeData->unk_91].data[1] = 0;
+ gSprites[sTradeData->connectionSpriteId1].data[1] = 0;
+ gSprites[sTradeData->connectionSpriteId2].data[1] = 0;
sTradeData->state++;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = TRUE;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = TRUE;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = TRUE;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = TRUE;
BlendPalettes(0x1, 0, RGB_WHITEALPHA);
}
break;
- case 39:
- gSprites[sTradeData->unk_90].pos2.y -= 3;
- gSprites[sTradeData->unk_91].pos2.y += 3;
- if (gSprites[sTradeData->unk_90].pos2.y <= -222)
+ case TS_STATE_CROSSING_LINK_MONS_EXIT:
+ gSprites[sTradeData->connectionSpriteId1].pos2.y -= 3;
+ gSprites[sTradeData->connectionSpriteId2].pos2.y += 3;
+ if (gSprites[sTradeData->connectionSpriteId1].pos2.y <= -222)
{
BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK);
sTradeData->state++;
- DestroySprite(&gSprites[sTradeData->unk_90]);
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId1]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
}
break;
- case 40:
+ case TS_STATE_CREATE_LINK_MON_ARRIVING:
if (!gPaletteFade.active)
{
sTradeData->state++;
SetTradeSequenceBgGpuRegs(1);
sTradeData->bg1vofs = 166;
- sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 128, -20, 3);
- sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0);
- StartSpriteAnim(&gSprites[sTradeData->unk_91], 1);
+ sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, -20, 3);
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, -20, 0);
+ StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL);
}
break;
- case 41:
+ case TS_STATE_FADE_OUT_TO_GBA_RECV:
BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK);
sTradeData->state++;
break;
- case 42:
+ case TS_STATE_WAIT_FADE_OUT_TO_GBA_RECV:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG1_ON |
DISPCNT_OBJ_ON);
if (!gPaletteFade.active)
- {
sTradeData->state++;
- }
break;
- case 43:
- gSprites[sTradeData->unk_90].pos2.y += 3;
- gSprites[sTradeData->unk_91].pos2.y += 3;
- if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64)
+ case TS_STATE_LINK_MON_TRAVEL_IN:
+ gSprites[sTradeData->connectionSpriteId1].pos2.y += 3;
+ gSprites[sTradeData->connectionSpriteId2].pos2.y += 3;
+ if (gSprites[sTradeData->connectionSpriteId1].pos2.y + gSprites[sTradeData->connectionSpriteId1].pos1.y == 64)
{
sTradeData->state++;
}
break;
- case 44:
+ case TS_STATE_PAN_TO_GBA:
if ((sTradeData->bg1vofs += 2) > 316)
{
sTradeData->bg1vofs = 316;
sTradeData->state++;
}
break;
- case 45:
- DestroySprite(&gSprites[sTradeData->unk_90]);
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ case TS_STATE_DESTROY_LINK_MON:
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId1]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
sTradeData->state++;
sTradeData->timer = 0;
break;
- case 46:
+ case TS_STATE_LINK_MON_ARRIVED_DELAY:
if (++sTradeData->timer == 10)
- {
sTradeData->state++;
- }
break;
- case 47:
+ case TS_STATE_MOVE_GBA_TO_CENTER:
if (++sTradeData->bg1vofs > 348)
{
sTradeData->bg1vofs = 348;
@@ -3582,41 +3694,41 @@ static bool8 AnimateTradeSequenceCable(void)
}
if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade)
{
- sTradeData->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0);
- gSprites[sTradeData->unk_92].callback = sub_807AAE0;
+ sTradeData->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0);
+ gSprites[sTradeData->cableEndSpriteId].callback = SpriteCB_CableEndReceiving;
}
break;
- case 48:
- sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
- sTradeData->state = 50;
+ case TS_STATE_GBA_FLASH_RECV:
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0);
+ sTradeData->state = TS_STATE_GBA_STOP_FLASH_RECV;
break;
- case 50:
- if (gSprites[sTradeData->unk_91].animEnded)
+ case TS_STATE_GBA_STOP_FLASH_RECV:
+ if (gSprites[sTradeData->connectionSpriteId2].animEnded)
{
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
SetTradeSequenceBgGpuRegs(6);
sTradeData->state++;
PlaySE(SE_M_SAND_ATTACK);
}
break;
- case 51:
- if (sTradeData->unk_EA < 0x400)
+ case TS_STATE_GBA_ZOOM_IN:
+ if (sTradeData->gbaScale < 0x400)
{
- sTradeData->unk_EA += 0x34;
+ sTradeData->gbaScale += 0x34;
}
else
{
- sTradeData->unk_EA = 0x400;
+ sTradeData->gbaScale = 0x400;
sTradeData->state++;
}
- sTradeData->sXY = 0x8000 / sTradeData->unk_EA;
+ sTradeData->sXY = 0x8000 / sTradeData->gbaScale;
break;
- case 52:
+ case TS_STATE_FADE_OUT_TO_NEW_MON:
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
- sTradeData->state = 60;
+ sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_NEW_MON;
break;
- case 60:
+ case TS_STATE_WAIT_FADE_OUT_TO_NEW_MON:
if (!gPaletteFade.active)
{
SetTradeSequenceBgGpuRegs(5);
@@ -3625,54 +3737,52 @@ static bool8 AnimateTradeSequenceCable(void)
sTradeData->state++;
}
break;
- case 61:
+ case TS_STATE_FADE_IN_TO_NEW_MON:
gPaletteFade.bufferTransferDisabled = FALSE;
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
sTradeData->state++;
break;
- case 62:
+ case TS_STATE_WAIT_FADE_IN_TO_NEW_MON:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG2_ON |
DISPCNT_OBJ_ON);
if (!gPaletteFade.active)
- {
sTradeData->state++;
- }
break;
- case 63:
- sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0);
- gSprites[sTradeData->unk_D3].data[3] = 74;
- gSprites[sTradeData->unk_D3].callback = sub_807E6AC;
- StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1);
- StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2);
- BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA);
+ case TS_STATE_POKEBALL_ARRIVE:
+ sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0);
+ gSprites[sTradeData->bouncingPokeballSpriteId].data[3] = 74;
+ gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive;
+ StartSpriteAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 1);
+ StartSpriteAffineAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 2);
+ BlendPalettes(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA);
sTradeData->state++;
sTradeData->timer = 0;
break;
- case 64:
- BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
+ case TS_STATE_FADE_POKEBALL_TO_NORMAL:
+ BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
sTradeData->state++;
break;
- case 65:
- if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy)
+ case TS_STATE_POKEBALL_ARRIVE_WAIT:
+ if (gSprites[sTradeData->bouncingPokeballSpriteId].callback == SpriteCallbackDummy)
{
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites.ptr[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]);
sTradeData->state++;
}
break;
- case 66:
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 120;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.x = 0;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y = 0;
- StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0);
- CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]);
- FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]);
- DestroySprite(&gSprites[sTradeData->unk_D3]);
+ case TS_STATE_SHOW_NEW_MON:
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos1.x = 120;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos1.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos2.x = 0;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos2.y = 0;
+ StartSpriteAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0);
+ CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]);
+ FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]);
+ DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]);
sTradeData->state++;
break;
- case 67:
+ case TS_STATE_NEW_MON_MSG:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG0_ON |
@@ -3680,28 +3790,24 @@ static bool8 AnimateTradeSequenceCable(void)
DISPCNT_OBJ_ON);
StringExpandPlaceholders(gStringVar4, gText_XSentOverY);
DrawTextOnTradeWindow(0, gStringVar4, 0);
- sTradeData->state = 167;
+ sTradeData->state = TS_STATE_DELAY_FOR_MON_ANIM;
sTradeData->timer = 0;
break;
- // 167 and 267 are extra cases added in for animations
- case 167:
+ case TS_STATE_DELAY_FOR_MON_ANIM:
if (++sTradeData->timer > 60)
{
- sTradeData->state = 267;
+ sTradeData->state = TS_STATE_WAIT_FOR_MON_CRY;
sTradeData->timer = 0;
}
break;
- case 267:
+ case TS_STATE_WAIT_FOR_MON_CRY:
if (IsCryFinished())
- {
- sTradeData->state = 68;
- }
+ sTradeData->state = TS_STATE_TAKE_CARE_OF_MON;
break;
- case 68:
+ case TS_STATE_TAKE_CARE_OF_MON:
if (++sTradeData->timer == 10)
- {
PlayFanfare(MUS_EVOLVED);
- }
+
if (sTradeData->timer == 250)
{
sTradeData->state++;
@@ -3710,17 +3816,15 @@ static bool8 AnimateTradeSequenceCable(void)
sTradeData->timer = 0;
}
break;
- case 69:
+ case TS_STATE_AFTER_NEW_MON_DELAY:
if (++sTradeData->timer == 60)
- {
sTradeData->state++;
- }
break;
- case 70:
+ case TS_STATE_CHECK_RIBBONS:
CheckPartnersMonForRibbons();
sTradeData->state++;
break;
- case 71:
+ case TS_STATE_END_LINK_TRADE:
if (sTradeData->isLinkTrade)
{
return TRUE;
@@ -3730,21 +3834,21 @@ static bool8 AnimateTradeSequenceCable(void)
sTradeData->state++;
}
break;
- case 72: // Only if in-game trade
+ case TS_STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution
TradeMons(gSpecialVar_0x8005, 0);
gCB2_AfterEvolution = CB2_UpdateInGameTrade;
evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE);
if (evoTarget != SPECIES_NONE)
{
- TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
+ TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
}
sTradeData->state++;
break;
- case 73:
+ case TS_STATE_FADE_OUT_END:
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
sTradeData->state++;
break;
- case 74:
+ case TS_STATE_WAIT_FADE_OUT_END:
if (!gPaletteFade.active)
{
PlayNewMapMusic(sTradeData->cachedMapMusic);
@@ -3771,65 +3875,63 @@ static bool8 AnimateTradeSequenceWireless(void)
switch (sTradeData->state)
{
- case 0:
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = -180;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset;
+ case TS_STATE_START:
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.x = -180;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset;
sTradeData->state++;
sTradeData->cachedMapMusic = GetCurrentMapMusic();
PlayNewMapMusic(MUS_EVOLUTION);
break;
- case 1:
+ case TS_STATE_MON_SLIDE_IN:
if (sTradeData->bg2hofs > 0)
{
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x += 3;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.x += 3;
sTradeData->bg2hofs -= 3;
}
else
{
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = 0;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.x = 0;
sTradeData->bg2hofs = 0;
- sTradeData->state = 10;
+ sTradeData->state = TS_STATE_SEND_MSG;
}
break;
- case 10:
+ case TS_STATE_SEND_MSG:
StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY);
DrawTextOnTradeWindow(0, gStringVar4, 0);
if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG)
- {
PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0);
- }
- sTradeData->state = 11;
+ sTradeData->state = TS_STATE_BYE_BYE;
sTradeData->timer = 0;
break;
- case 11:
+ case TS_STATE_BYE_BYE:
if (++sTradeData->timer == 80)
{
- sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
+ sTradeData->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeData->monSpriteIds[0], gSprites[sTradeData->monSpriteIds[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
sTradeData->state++;
StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1);
DrawTextOnTradeWindow(0, gStringVar4, 0);
}
break;
- case 12:
- if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy)
+ case TS_STATE_POKEBALL_DEPART:
+ if (gSprites[sTradeData->releasePokeballSpriteId].callback == SpriteCallbackDummy)
{
- sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0);
- gSprites[sTradeData->unk_D3].callback = sub_807E5D8;
- DestroySprite(&gSprites[sTradeData->pokeballSpriteId]);
+ sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0);
+ gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart;
+ DestroySprite(&gSprites[sTradeData->releasePokeballSpriteId]);
sTradeData->state++;
}
break;
- case 13:
+ case TS_STATE_POKEBALL_DEPART_WAIT:
// The game waits here for the sprite to finish its animation sequence.
break;
- case 14:
+ case TS_STATE_FADE_OUT_TO_GBA_SEND:
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
- sTradeData->state = 20;
+ sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND;
break;
- case 20:
+ case TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND:
if (!gPaletteFade.active)
{
SetTradeSequenceBgGpuRegs(4);
@@ -3838,190 +3940,185 @@ static bool8 AnimateTradeSequenceWireless(void)
sTradeData->state++;
}
break;
- case 21:
+ case TS_STATE_FADE_IN_TO_GBA_SEND:
BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK);
sTradeData->state++;
break;
- case 22:
+ case TS_STATE_WAIT_FADE_IN_TO_GBA_SEND:
if (!gPaletteFade.active)
- {
- sTradeData->state = 23;
- }
+ sTradeData->state = TS_STATE_GBA_ZOOM_OUT;
break;
- case 23:
- if (sTradeData->unk_EA > 0x100)
+ case TS_STATE_GBA_ZOOM_OUT:
+ if (sTradeData->gbaScale > 0x100)
{
- sTradeData->unk_EA -= 0x34;
+ sTradeData->gbaScale -= 0x34;
}
else
{
SetTradeSequenceBgGpuRegs(1);
- sTradeData->unk_EA = 0x80;
- sTradeData->state = 124;
+ sTradeData->gbaScale = 0x80;
+ sTradeData->state = TS_STATE_GBA_FLASH_SEND_WIRELESS;
sTradeData->timer = 0;
}
- sTradeData->sXY = 0x8000 / sTradeData->unk_EA;
+ sTradeData->sXY = 0x8000 / sTradeData->gbaScale;
break;
- case 124:
+ case TS_STATE_GBA_FLASH_SEND_WIRELESS:
if (++sTradeData->timer > 20)
{
SetTradeSequenceBgGpuRegs(3);
- sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E8C, 120, 80, 0);
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Short, 120, 80, 0);
sTradeData->state++;
}
break;
- case 125:
- if (gSprites[sTradeData->unk_91].animEnded)
+ case TS_STATE_GBA_STOP_FLASH_SEND_WIRELESS:
+ if (gSprites[sTradeData->connectionSpriteId2].animEnded)
{
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 |
BLDCNT_TGT1_OBJ |
BLDCNT_EFFECT_BLEND |
BLDCNT_TGT2_BG2);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4));
+
+ // Start wireless signal effect
CreateTask(Task_AnimateWirelessSignal, 5);
sTradeData->state++;
}
break;
- case 126:
+ case TS_STATE_WAIT_WIRELESS_SIGNAL_SEND:
if (!FuncIsActiveTask(Task_AnimateWirelessSignal))
- {
- sTradeData->state = 26;
- }
+ sTradeData->state = TS_STATE_PAN_AWAY_GBA;
break;
- case 26:
+ case TS_STATE_PAN_AWAY_GBA:
if (--sTradeData->bg1vofs == 316)
- {
sTradeData->state++;
- }
break;
- case 27:
- sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 120, 80, 3);
- gSprites[sTradeData->unk_90].callback = sub_807AA4C;
- sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0);
- StartSpriteAnim(&gSprites[sTradeData->unk_91], 1);
+ case TS_STATE_CREATE_LINK_MON_LEAVING:
+ sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, 80, 3);
+ gSprites[sTradeData->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless;
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, 80, 0);
+ StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL);
sTradeData->state++;
break;
- case 28:
+ case TS_STATE_LINK_MON_TRAVEL_OUT:
if ((sTradeData->bg1vofs -= 3) == 166)
- {
- sTradeData->state = 200;
- }
+ sTradeData->state = TS_STATE_LINK_MON_TRAVEL_OFFSCREEN;
+
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG1_ON |
DISPCNT_OBJ_ON);
break;
- case 200:
- gSprites[sTradeData->unk_90].pos1.y -= 2;
- gSprites[sTradeData->unk_91].pos1.y -= 2;
- if (gSprites[sTradeData->unk_90].pos1.y < -8)
+ case TS_STATE_LINK_MON_TRAVEL_OFFSCREEN:
+ gSprites[sTradeData->connectionSpriteId1].pos1.y -= 2;
+ gSprites[sTradeData->connectionSpriteId2].pos1.y -= 2;
+ if (gSprites[sTradeData->connectionSpriteId1].pos1.y < -8)
{
- sTradeData->state = 29;
+ sTradeData->state = TS_STATE_FADE_OUT_TO_CROSSING;
}
break;
- case 29:
+ case TS_STATE_FADE_OUT_TO_CROSSING:
BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK);
- sTradeData->state = 30;
+ sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_CROSSING;
break;
- case 30:
+ case TS_STATE_WAIT_FADE_OUT_TO_CROSSING:
if (!gPaletteFade.active)
{
- DestroySprite(&gSprites[sTradeData->unk_90]);
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId1]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
SetTradeSequenceBgGpuRegs(2);
sTradeData->state++;
}
break;
- case 31:
+ case TS_STATE_FADE_IN_TO_CROSSING:
BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK);
- sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0);
- sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0);
+ sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0);
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0);
sTradeData->state++;
break;
- case 32:
+ case TS_STATE_WAIT_FADE_IN_TO_CROSSING:
if (!gPaletteFade.active)
{
PlaySE(SE_WARP_OUT);
sTradeData->state++;
}
- gSprites[sTradeData->unk_90].pos2.y -= 3;
- gSprites[sTradeData->unk_91].pos2.y += 3;
+ gSprites[sTradeData->connectionSpriteId1].pos2.y -= 3;
+ gSprites[sTradeData->connectionSpriteId2].pos2.y += 3;
break;
- case 33:
- gSprites[sTradeData->unk_90].pos2.y -= 3;
- gSprites[sTradeData->unk_91].pos2.y += 3;
- if (gSprites[sTradeData->unk_90].pos2.y <= -90)
+ case TS_STATE_CROSSING_LINK_MONS_ENTER:
+ gSprites[sTradeData->connectionSpriteId1].pos2.y -= 3;
+ gSprites[sTradeData->connectionSpriteId2].pos2.y += 3;
+ if (gSprites[sTradeData->connectionSpriteId1].pos2.y <= -90)
{
- gSprites[sTradeData->unk_90].data[1] = 1;
- gSprites[sTradeData->unk_91].data[1] = 1;
+ gSprites[sTradeData->connectionSpriteId1].data[1] = 1;
+ gSprites[sTradeData->connectionSpriteId2].data[1] = 1;
sTradeData->state++;
- CreateTask(c3_0805465C, 5);
+ CreateTask(Task_NarrowWindowForCrossing_Wireless, 5);
}
break;
- case 34:
+ case TS_STATE_CROSSING_BLEND_WHITE_1:
BlendPalettes(0x8, 16, RGB_WHITEALPHA);
sTradeData->state++;
break;
- case 35:
+ case TS_STATE_CROSSING_BLEND_WHITE_2:
BlendPalettes(0x8, 16, RGB_WHITEALPHA);
sTradeData->state++;
break;
- case 36:
+ case TS_STATE_CROSSING_BLEND_WHITE_3:
BlendPalettes(0x8, 16, RGB_WHITEALPHA);
sTradeData->state++;
break;
- case 37:
+ case TS_STATE_CROSSING_CREATE_MON_PICS:
if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER]))
{
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].affineAnims = gSpriteAffineAnimTable_8338ECC;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
- CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE);
- StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0);
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ CalcCenterToCornerVec(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE);
+ StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0);
}
else
{
- StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0);
+ StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0);
}
- StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0);
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.x = 40;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 200;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.y = 192;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = -32;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = FALSE;
+ StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0);
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos1.x = 40;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos1.x = 200;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos1.y = 192;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos1.y = -32;
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = FALSE;
sTradeData->state++;
break;
- case 38:
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y -= 3;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y += 3;
- if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -DISPLAY_HEIGHT
- && gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y >= -DISPLAY_HEIGHT - 3)
+ case TS_STATE_CROSSING_MON_PICS_MOVE:
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y -= 3;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos2.y += 3;
+ if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y < -DISPLAY_HEIGHT
+ && gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y >= -DISPLAY_HEIGHT - 3)
{
PlaySE(SE_WARP_IN);
}
- if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -222)
+ if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].pos2.y < -222)
{
- gSprites[sTradeData->unk_90].data[1] = 0;
- gSprites[sTradeData->unk_91].data[1] = 0;
+ gSprites[sTradeData->connectionSpriteId1].data[1] = 0;
+ gSprites[sTradeData->connectionSpriteId2].data[1] = 0;
sTradeData->state++;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = TRUE;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = TRUE;
- CreateTask(sub_807F39C, 5);
+ gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = TRUE;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = TRUE;
+ CreateTask(Task_NarrowWindowForCrossing_Cable, 5);
}
break;
- case 39:
- gSprites[sTradeData->unk_90].pos2.y -= 3;
- gSprites[sTradeData->unk_91].pos2.y += 3;
- if (gSprites[sTradeData->unk_90].pos2.y <= -222)
+ case TS_STATE_CROSSING_LINK_MONS_EXIT:
+ gSprites[sTradeData->connectionSpriteId1].pos2.y -= 3;
+ gSprites[sTradeData->connectionSpriteId2].pos2.y += 3;
+ if (gSprites[sTradeData->connectionSpriteId1].pos2.y <= -222)
{
BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK);
sTradeData->state++;
- DestroySprite(&gSprites[sTradeData->unk_90]);
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId1]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
}
break;
- case 40:
+ case TS_STATE_CREATE_LINK_MON_ARRIVING:
if (!gPaletteFade.active)
{
sTradeData->state++;
@@ -4029,36 +4126,34 @@ static bool8 AnimateTradeSequenceWireless(void)
sTradeData->bg1vofs = 166;
SetTradeSequenceBgGpuRegs(3);
sTradeData->bg2vofs = 412;
- sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 120, -20, 3);
- gSprites[sTradeData->unk_90].callback = sub_807AA4C;
- sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0);
- StartSpriteAnim(&gSprites[sTradeData->unk_91], 1);
+ sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, -20, 3);
+ gSprites[sTradeData->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless;
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, -20, 0);
+ StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL);
}
break;
- case 41:
+ case TS_STATE_FADE_OUT_TO_GBA_RECV:
BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK);
sTradeData->state++;
break;
- case 42:
+ case TS_STATE_WAIT_FADE_OUT_TO_GBA_RECV:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG1_ON |
DISPCNT_OBJ_ON);
if (!gPaletteFade.active)
- {
sTradeData->state++;
- }
break;
- case 43:
- gSprites[sTradeData->unk_90].pos2.y += 4;
- gSprites[sTradeData->unk_91].pos2.y += 4;
- if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64)
+ case TS_STATE_LINK_MON_TRAVEL_IN:
+ gSprites[sTradeData->connectionSpriteId1].pos2.y += 4;
+ gSprites[sTradeData->connectionSpriteId2].pos2.y += 4;
+ if (gSprites[sTradeData->connectionSpriteId1].pos2.y + gSprites[sTradeData->connectionSpriteId1].pos1.y == 64)
{
- sTradeData->state = 144;
+ sTradeData->state = TS_STATE_PAN_TO_GBA_WIRELESS;
sTradeData->timer = 0;
}
break;
- case 144:
+ case TS_STATE_PAN_TO_GBA_WIRELESS:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG1_ON |
@@ -4077,62 +4172,60 @@ static bool8 AnimateTradeSequenceWireless(void)
sTradeData->state++;
}
break;
- case 145:
- DestroySprite(&gSprites[sTradeData->unk_90]);
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ case TS_STATE_DESTROY_LINK_MON_WIRELESS:
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId1]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
sTradeData->state++;
sTradeData->timer = 0;
break;
- case 146:
+ case TS_STATE_WAIT_WIRELESS_SIGNAL_RECV:
if (!FuncIsActiveTask(Task_AnimateWirelessSignal))
{
- sTradeData->state = 46;
+ sTradeData->state = TS_STATE_LINK_MON_ARRIVED_DELAY;
sTradeData->timer = 0;
}
break;
- case 46:
+ case TS_STATE_LINK_MON_ARRIVED_DELAY:
if (++sTradeData->timer == 10)
- {
sTradeData->state++;
- }
break;
- case 47:
+ case TS_STATE_MOVE_GBA_TO_CENTER:
if (++sTradeData->bg1vofs > 348)
{
sTradeData->bg1vofs = 348;
sTradeData->state++;
}
break;
- case 48:
- sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
- sTradeData->state = 50;
+ case TS_STATE_GBA_FLASH_RECV:
+ sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0);
+ sTradeData->state = TS_STATE_GBA_STOP_FLASH_RECV;
break;
- case 50:
- if (gSprites[sTradeData->unk_91].animEnded)
+ case TS_STATE_GBA_STOP_FLASH_RECV:
+ if (gSprites[sTradeData->connectionSpriteId2].animEnded)
{
- DestroySprite(&gSprites[sTradeData->unk_91]);
+ DestroySprite(&gSprites[sTradeData->connectionSpriteId2]);
SetTradeSequenceBgGpuRegs(6);
sTradeData->state++;
PlaySE(SE_M_SAND_ATTACK);
}
break;
- case 51:
- if (sTradeData->unk_EA < 0x400)
+ case TS_STATE_GBA_ZOOM_IN:
+ if (sTradeData->gbaScale < 0x400)
{
- sTradeData->unk_EA += 0x34;
+ sTradeData->gbaScale += 0x34;
}
else
{
- sTradeData->unk_EA = 0x400;
+ sTradeData->gbaScale = 0x400;
sTradeData->state++;
}
- sTradeData->sXY = 0x8000 / sTradeData->unk_EA;
+ sTradeData->sXY = 0x8000 / sTradeData->gbaScale;
break;
- case 52:
+ case TS_STATE_FADE_OUT_TO_NEW_MON:
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
- sTradeData->state = 60;
+ sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_NEW_MON;
break;
- case 60:
+ case TS_STATE_WAIT_FADE_OUT_TO_NEW_MON:
if (!gPaletteFade.active)
{
SetTradeSequenceBgGpuRegs(5);
@@ -4141,54 +4234,55 @@ static bool8 AnimateTradeSequenceWireless(void)
sTradeData->state++;
}
break;
- case 61:
+ case TS_STATE_FADE_IN_TO_NEW_MON:
gPaletteFade.bufferTransferDisabled = FALSE;
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
sTradeData->state++;
break;
- case 62:
+ case TS_STATE_WAIT_FADE_IN_TO_NEW_MON:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG2_ON |
DISPCNT_OBJ_ON);
if (!gPaletteFade.active)
- {
sTradeData->state++;
- }
break;
- case 63:
- sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0);
- gSprites[sTradeData->unk_D3].data[3] = 74;
- gSprites[sTradeData->unk_D3].callback = sub_807E6AC;
- StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1);
- StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2);
- BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA);
+ case TS_STATE_POKEBALL_ARRIVE:
+ sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0);
+ gSprites[sTradeData->bouncingPokeballSpriteId].data[3] = 74;
+ gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive;
+ StartSpriteAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 1);
+ StartSpriteAffineAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 2);
+ BlendPalettes(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA);
sTradeData->state++;
sTradeData->timer = 0;
break;
- case 64:
- BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
+ case TS_STATE_FADE_POKEBALL_TO_NORMAL:
+ BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
sTradeData->state++;
break;
- case 65:
- if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy)
+ case TS_STATE_POKEBALL_ARRIVE_WAIT:
+ if (gSprites[sTradeData->bouncingPokeballSpriteId].callback == SpriteCallbackDummy)
{
- HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites.ptr[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]);
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]],
+ gMonSpritesGfxPtr->sprites.ptr[3],
+ sTradeData->monSpecies[TRADE_PARTNER],
+ sTradeData->monPersonalities[TRADE_PARTNER]);
sTradeData->state++;
}
break;
- case 66:
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 120;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.x = 0;
- gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y = 0;
- StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0);
- CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]);
- FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]);
- DestroySprite(&gSprites[sTradeData->unk_D3]);
+ case TS_STATE_SHOW_NEW_MON:
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos1.x = 120;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos1.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos2.x = 0;
+ gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].pos2.y = 0;
+ StartSpriteAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0);
+ CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]);
+ FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]);
+ DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]);
sTradeData->state++;
break;
- case 67:
+ case TS_STATE_NEW_MON_MSG:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
DISPCNT_OBJ_1D_MAP |
DISPCNT_BG0_ON |
@@ -4196,28 +4290,24 @@ static bool8 AnimateTradeSequenceWireless(void)
DISPCNT_OBJ_ON);
StringExpandPlaceholders(gStringVar4, gText_XSentOverY);
DrawTextOnTradeWindow(0, gStringVar4, 0);
- sTradeData->state = 167;
+ sTradeData->state = TS_STATE_DELAY_FOR_MON_ANIM;
sTradeData->timer = 0;
break;
- // 167 and 267 are extra cases added in for animations
- case 167:
+ case TS_STATE_DELAY_FOR_MON_ANIM:
if (++sTradeData->timer > 60)
{
- sTradeData->state = 267;
+ sTradeData->state = TS_STATE_WAIT_FOR_MON_CRY;
sTradeData->timer = 0;
}
break;
- case 267:
+ case TS_STATE_WAIT_FOR_MON_CRY:
if (IsCryFinished())
- {
- sTradeData->state = 68;
- }
+ sTradeData->state = TS_STATE_TAKE_CARE_OF_MON;
break;
- case 68:
+ case TS_STATE_TAKE_CARE_OF_MON:
if (++sTradeData->timer == 10)
- {
PlayFanfare(MUS_EVOLVED);
- }
+
if (sTradeData->timer == 250)
{
sTradeData->state++;
@@ -4226,17 +4316,15 @@ static bool8 AnimateTradeSequenceWireless(void)
sTradeData->timer = 0;
}
break;
- case 69:
+ case TS_STATE_AFTER_NEW_MON_DELAY:
if (++sTradeData->timer == 60)
- {
sTradeData->state++;
- }
break;
- case 70:
+ case TS_STATE_CHECK_RIBBONS:
CheckPartnersMonForRibbons();
sTradeData->state++;
break;
- case 71:
+ case TS_STATE_END_LINK_TRADE:
if (sTradeData->isLinkTrade)
{
return TRUE;
@@ -4246,21 +4334,21 @@ static bool8 AnimateTradeSequenceWireless(void)
sTradeData->state++;
}
break;
- case 72: // Only if in-game trade
+ case TS_STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution
TradeMons(gSpecialVar_0x8005, 0);
gCB2_AfterEvolution = CB2_UpdateInGameTrade;
evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE);
if (evoTarget != SPECIES_NONE)
{
- TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
+ TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
}
sTradeData->state++;
break;
- case 73:
+ case TS_STATE_FADE_OUT_END:
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
sTradeData->state++;
break;
- case 74:
+ case TS_STATE_WAIT_FADE_OUT_END:
if (!gPaletteFade.active)
{
PlayNewMapMusic(sTradeData->cachedMapMusic);
@@ -4281,7 +4369,9 @@ static bool8 AnimateTradeSequenceWireless(void)
return FALSE;
}
-static void CB2_TryTradeEvolution(void)
+// Try to evolve a Pokémon received in a link trade
+// In-game trades resolve evolution during the trade sequence, in TS_STATE_TRY_EVOLUTION
+static void CB2_TryLinkTradeEvolution(void)
{
u16 evoTarget;
switch (gMain.state)
@@ -4294,7 +4384,7 @@ static void CB2_TryTradeEvolution(void)
gCB2_AfterEvolution = CB2_SaveAndEndTrade;
evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE);
if (evoTarget != SPECIES_NONE)
- TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
+ TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
else if (IsWirelessTrade())
SetMainCallback2(CB2_SaveAndEndWirelessTrade);
else
@@ -4317,7 +4407,7 @@ static void UpdateTradeFinishFlags(void)
if (blockReceivedStatus & 0x01)
{
if (gBlockRecvBuffer[0][0] == LINKCMD_CONFIRM_FINISH_TRADE)
- SetMainCallback2(CB2_TryTradeEvolution);
+ SetMainCallback2(CB2_TryLinkTradeEvolution);
if (gBlockRecvBuffer[0][0] == LINKCMD_READY_FINISH_TRADE)
sTradeData->playerLinkFlagFinishTrade = READY_FINISH_TRADE;
@@ -4333,7 +4423,7 @@ static void UpdateTradeFinishFlags(void)
}
}
-static void sub_807E55C(struct Sprite *sprite)
+static void SpriteCB_BouncingPokeball(struct Sprite *sprite)
{
sprite->pos1.y += sprite->data[0] / 10;
sprite->data[5] += sprite->data[1];
@@ -4354,7 +4444,7 @@ static void sub_807E55C(struct Sprite *sprite)
}
}
-static void sub_807E5D8(struct Sprite *sprite)
+static void SpriteCB_BouncingPokeballDepart(struct Sprite *sprite)
{
sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]];
if (sprite->data[0] == 22)
@@ -4362,13 +4452,13 @@ static void sub_807E5D8(struct Sprite *sprite)
if (++ sprite->data[0] == 44)
{
PlaySE(SE_M_MEGA_KICK);
- sprite->callback = sub_807E64C;
+ sprite->callback = SpriteCB_BouncingPokeballDepartEnd;
sprite->data[0] = 0;
BeginNormalPaletteFade(1 << (16 + sprite->oam.paletteNum), -1, 0, 16, RGB_WHITEALPHA);
}
}
-static void sub_807E64C(struct Sprite *sprite)
+static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *sprite)
{
if (sprite->data[1] == 20)
StartSpriteAffineAnim(sprite, 1);
@@ -4378,12 +4468,12 @@ static void sub_807E64C(struct Sprite *sprite)
if (++ sprite->data[0] == 23)
{
DestroySprite(sprite);
- sTradeData->state = 14; // Resume the master trade animation
+ sTradeData->state = TS_STATE_FADE_OUT_TO_GBA_SEND; // Resume the master trade animation
}
}
}
-static void sub_807E6AC(struct Sprite *sprite)
+static void SpriteCB_BouncingPokeballArrive(struct Sprite *sprite)
{
if (sprite->data[2] == 0)
{
@@ -4508,8 +4598,8 @@ static void CB2_UpdateLinkTrade(void)
{
if (AnimateTradeSequence() == TRUE)
{
- DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]]);
- FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]]);
+ DestroySprite(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]]);
+ FreeSpriteOamMatrix(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]]);
TradeMons(gSelectedTradeMonPositions[TRADE_PLAYER], gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE);
if (!IsWirelessTrade())
{
@@ -4532,7 +4622,7 @@ static void CB2_TryFinishTrade(void)
u8 mpId = TradeGetMultiplayerId();
if (IsWirelessTrade())
{
- SetMainCallback2(CB2_TryTradeEvolution);
+ SetMainCallback2(CB2_TryLinkTradeEvolution);
}
else
{
@@ -4542,7 +4632,7 @@ static void CB2_TryFinishTrade(void)
&& sTradeData->partnerLinkFlagFinishTrade == READY_FINISH_TRADE)
{
sTradeData->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE;
- Trade_SendData(sTradeData);
+ SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, sizeof(sTradeData->linkData));
sTradeData->playerLinkFlagFinishTrade = FINISH_TRADE;
sTradeData->partnerLinkFlagFinishTrade = FINISH_TRADE;
}
@@ -4793,16 +4883,16 @@ static void Task_AnimateWirelessSignal(u8 taskId)
if (!signalComingBack)
{
if (paletteIdx == 256)
- LoadPalette(sTradePal_Black, 0x30, 32);
+ LoadPalette(sWirelessSignalNone_Pal, 0x30, 32);
else
- LoadPalette(&sTradePal_WirelessSignalSend[paletteIdx], 0x30, 32);
+ LoadPalette(&sWirelessSignalSend_Pal[paletteIdx], 0x30, 32);
}
else
{
if (paletteIdx == 256)
- LoadPalette(sTradePal_Black, 0x30, 32);
+ LoadPalette(sWirelessSignalNone_Pal, 0x30, 32);
else
- LoadPalette(&sTradePal_WirelessSignalReceive[paletteIdx], 0x30, 32);
+ LoadPalette(&sWirelessSignalRecv_Pal[paletteIdx], 0x30, 32);
}
if (sWirelessSignalTiming[idx][0] == 0 && counter == 0)
@@ -4827,13 +4917,13 @@ static void Task_AnimateWirelessSignal(u8 taskId)
#undef counter
#undef signalComingBack
-static void c3_0805465C(u8 taskId)
+static void Task_NarrowWindowForCrossing_Wireless(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (data[0] == 0)
{
- sTradeData->wirelessWinLeft = sTradeData->wirelessWinRight = 120;
+ sTradeData->wirelessWinLeft = sTradeData->wirelessWinRight = DISPLAY_WIDTH / 2;
sTradeData->wirelessWinTop = 0;
sTradeData->wirelessWinBottom = DISPLAY_HEIGHT;
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
@@ -4851,19 +4941,17 @@ static void c3_0805465C(u8 taskId)
sTradeData->wirelessWinRight += 5;
if (sTradeData->wirelessWinLeft < 80)
- {
DestroyTask(taskId);
- }
}
-static void sub_807F39C(u8 taskId)
+static void Task_NarrowWindowForCrossing_Cable(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (data[0] == 0)
{
sTradeData->wirelessWinLeft = 80;
- sTradeData->wirelessWinRight = 160;
+ sTradeData->wirelessWinRight = DISPLAY_WIDTH - 80;
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 |
WININ_WIN0_BG1 |
@@ -4873,13 +4961,13 @@ static void sub_807F39C(u8 taskId)
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->wirelessWinLeft, sTradeData->wirelessWinRight));
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->wirelessWinTop, sTradeData->wirelessWinBottom));
- if (sTradeData->wirelessWinLeft != 120)
+ if (sTradeData->wirelessWinLeft != DISPLAY_WIDTH / 2)
{
data[0]++;
sTradeData->wirelessWinLeft += 5;
sTradeData->wirelessWinRight -= 5;
- if (sTradeData->wirelessWinLeft >= 116)
+ if (sTradeData->wirelessWinLeft > DISPLAY_WIDTH / 2 - 5)
BlendPalettes(0x8, 0, RGB_WHITEALPHA);
}
else
diff --git a/src/trainer_card.c b/src/trainer_card.c
index 03a7b9219..1ec519c90 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -661,7 +661,7 @@ u32 CountPlayerTrainerStars(void)
stars++;
if (HasAllHoennMons())
stars++;
- if (CountPlayerContestPaintings() > 4)
+ if (CountPlayerMuseumPaintings() >= CONTEST_CATEGORIES_COUNT)
stars++;
if (HasAllFrontierSymbols())
stars++;
@@ -735,7 +735,7 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType)
case CARD_TYPE_FRLG:
trainerCard->contestsWithFriends = GetCappedGameStat(GAME_STAT_WON_LINK_CONTEST, 999);
trainerCard->pokeblocksWithFriends = GetCappedGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF);
- if (CountPlayerContestPaintings() > 4)
+ if (CountPlayerMuseumPaintings() >= CONTEST_CATEGORIES_COUNT)
trainerCard->hasAllPaintings = TRUE;
trainerCard->stars = GetRubyTrainerStars(trainerCard);
break;
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index 059773a0b..3ce90c430 100644
--- a/src/trainer_hill.c
+++ b/src/trainer_hill.c
@@ -678,10 +678,10 @@ static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 stride) // stride i
u16 elevation;
impassable = (sHillData->floors[floorId].display.collisionData[y] >> (15 - x) & 1);
- metatile = sHillData->floors[floorId].display.metatileData[stride * y + x] + 0x200;
- elevation = 0x3000;
+ metatile = sHillData->floors[floorId].display.metatileData[stride * y + x] + NUM_METATILES_IN_PRIMARY;
+ elevation = 3 << METATILE_ELEVATION_SHIFT;
- return (((impassable << 10) & METATILE_COLLISION_MASK) | elevation) | (metatile & METATILE_ID_MASK);
+ return ((impassable << METATILE_COLLISION_SHIFT) & METATILE_COLLISION_MASK) | elevation | (metatile & METATILE_ID_MASK);
}
void GenerateTrainerHillFloorLayout(u16 *mapArg)
@@ -710,6 +710,8 @@ void GenerateTrainerHillFloorLayout(u16 *mapArg)
gBackupMapLayout.width = 31;
gBackupMapLayout.height = 35;
dst = mapArg + 224;
+
+ // First 5 rows of the map (Entrance / Exit) are always the same
for (i = 0; i < 5; i++)
{
for (j = 0; j < 16; j++)
@@ -718,10 +720,11 @@ void GenerateTrainerHillFloorLayout(u16 *mapArg)
src += 16;
}
+ // Load the 16x16 floor-specific layout
for (i = 0; i < 16; i++)
{
for (j = 0; j < 16; j++)
- dst[j] = GetMetatileForFloor(mapId, j, i, 0x10);
+ dst[j] = GetMetatileForFloor(mapId, j, i, 16);
dst += 31;
}
diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c
index aab4142db..477c11faf 100644
--- a/src/trainer_pokemon_sprites.c
+++ b/src/trainer_pokemon_sprites.c
@@ -137,7 +137,7 @@ static void LoadPicPaletteBySlot(u16 species, u32 otId, u32 personality, u8 pale
static void AssignSpriteAnimsTable(bool8 isTrainer)
{
if (!isTrainer)
- sCreatingSpriteTemplate.anims = gUnknown_082FF70C;
+ sCreatingSpriteTemplate.anims = gAnims_MonPic;
else
sCreatingSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[0];
}
diff --git a/src/tv.c b/src/tv.c
index 0466ee713..50adde3f4 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -41,18 +41,27 @@
#include "constants/lilycove_lady.h"
#include "constants/maps.h"
#include "constants/metatile_behaviors.h"
+#include "constants/metatile_labels.h"
#include "constants/moves.h"
#include "constants/region_map_sections.h"
#include "constants/script_menu.h"
-#include "constants/tv.h"
-
-// Static type declarations
#define LAST_TVSHOW_IDX (TV_SHOWS_COUNT - 1)
-#define rbernoulli(num, den) TV_BernoulliTrial(0xFFFF * (num) / (den))
+#define rbernoulli(num, den) BernoulliTrial(0xFFFF * (num) / (den))
-// Static RAM declarations
+enum {
+ TVGROUP_NONE,
+ TVGROUP_UNUSED,
+ TVGROUP_NORMAL,
+ TVGROUP_RECORD_MIX,
+ TVGROUP_OUTBREAK,
+};
+
+enum {
+ SLOT_MACHINE,
+ ROULETTE,
+};
s8 sCurTVShowSlot;
u16 sTV_SecretBaseVisitMovesTemp[8];
@@ -67,79 +76,77 @@ static u8 sTVShowMixingNumPlayers;
static u8 sTVShowNewsMixingNumPlayers;
static s8 sTVShowMixingCurSlot;
-EWRAM_DATA u16 sPokemonAnglerSpecies = 0;
-EWRAM_DATA u16 sPokemonAnglerAttemptCounters = 0;
-EWRAM_DATA u16 sFindThatGamerCoinsSpent = 0;
-EWRAM_DATA u8 sFindThatGamerWhichGame = SLOT_MACHINE;
-EWRAM_DATA ALIGNED(4) u8 sRecordMixingPartnersWithoutShowsToShare = 0;
-EWRAM_DATA ALIGNED(4) u8 sTVShowState = 0;
-EWRAM_DATA u8 sTVSecretBaseSecretsRandomValues[3] = {};
-
-// Static ROM declarations
-void ClearPokemonNews(void);
-u8 GetTVChannelByShowType(u8 kind);
-u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void);
-u8 CheckForBigMovieOrEmergencyNewsOnTV(void);
-void SetTVMetatilesOnMap(int width, int height, u16 tileId);
-u8 FindAnyTVNewsOnTheAir(void);
-bool8 IsTVShowInSearchOfTrainersAiring(void);
-void TakeTVShowInSearchOfTrainersOffTheAir(void);
-bool8 TV_BernoulliTrial(u16 ratio);
-s8 FindEmptyTVSlotBeyondFirstFiveShowsOfArray(TVShow *shows);
-bool8 HasMixableShowAlreadyBeenSpawnedWithPlayerID(u8 kind, bool8 flag);
-void tv_store_id_3x(TVShow *show);
-void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx);
-s8 FindEmptyTVSlotWithinFirstFiveShowsOfArray(TVShow *shows);
-void FindActiveBroadcastByShowType_SetScriptResult(u8 kind);
+static EWRAM_DATA u16 sPokemonAnglerSpecies = 0;
+static EWRAM_DATA u16 sPokemonAnglerAttemptCounters = 0;
+static EWRAM_DATA u16 sFindThatGamerCoinsSpent = 0;
+static EWRAM_DATA u8 sFindThatGamerWhichGame = SLOT_MACHINE;
+static EWRAM_DATA ALIGNED(4) u8 sRecordMixingPartnersWithoutShowsToShare = 0;
+static EWRAM_DATA ALIGNED(4) u8 sTVShowState = 0;
+static EWRAM_DATA u8 sTVSecretBaseSecretsRandomValues[3] = {};
+
+static void ClearPokeNews(void);
+static u8 GetTVGroupByShowId(u8);
+static u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void);
+static void SetTVMetatilesOnMap(int, int, u16);
+static u8 FindAnyPokeNewsOnTheAir(void);
+static void TakeGabbyAndTyOffTheAir(void);
+static bool8 BernoulliTrial(u16 ratio);
+static s8 FindFirstEmptyRecordMixTVShowSlot(TVShow *);
+static bool8 IsRecordMixShowAlreadySpawned(u8, bool8);
+static void StorePlayerIdInRecordMixShow(TVShow *);
+static void DeleteTVShowInArrayByIdx(TVShow *, u8);
+static s8 FindFirstEmptyNormalTVShowSlot(TVShow *);
+static void TryReplaceOldTVShowOfKind(u8);
static void InterviewBefore_BravoTrainerPkmnProfile(void);
static void InterviewBefore_NameRater(void);
-u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies);
-static void sub_80EFA88(void);
-static void sub_80EF93C(TVShow *shows);
-s8 sub_80EEE30(PokeNews *pokeNews);
-bool8 sub_80EF0E4(u8 newsKind);
-void ClearPokemonNewsI(u8 i);
-static void sub_80F1254(TVShow *shows);
-static void sub_80F12A4(TVShow *shows);
-static void sub_80F0358(TVShow *player1, TVShow *player2, TVShow *player3, TVShow *player4);
-static void sub_80F0C04(void);
-static void sub_80F0708(void);
-static void sub_80F0B64(void);
-static s8 sub_80F06D0(TVShow *tvShows);
-static bool8 sub_80F049C(TVShow *dest[], TVShow *src[], u8 idx);
-static bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx);
-static bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx);
-static bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx);
-void SetTvShowInactive(u8 showIdx);
-static void sub_80F0B24(u16 species, u8 showIdx);
-static void sub_80F0D60(PokeNews *player1, PokeNews *player2, PokeNews *player3, PokeNews *player4);
-static void sub_80F0EEC(void);
-static void sub_80F0F24(void);
-static s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx);
-static void sub_80F0E58(PokeNews *dest[], PokeNews *src[]);
-static bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot);
-void TVShowDone(void);
+static u16 GetRandomDifferentSpeciesSeenByPlayer(u16);
+static void Script_FindFirstEmptyNormalTVShowSlot(void);
+static void CompactTVShowArray(TVShow *);
+static s8 GetFirstEmptyPokeNewsSlot(PokeNews *);
+static bool8 IsAddingPokeNewsDisallowed(u8);
+static void ClearPokeNewsBySlot(u8);
+static void TranslateRubyShows(TVShow *);
+static void TranslateJapaneseEmeraldShows(TVShow *);
+static void SetMixedTVShows(TVShow *, TVShow *, TVShow *, TVShow *);
+static void DeleteExcessMixedShows(void);
+static void DeactivateShowsWithUnseenSpecies(void);
+static void DeactivateGameCompleteShowsIfNotUnlocked(void);
+static s8 FindInactiveShowInArray(TVShow *);
+static bool8 TryMixTVShow(TVShow *[], TVShow *[], u8);
+static bool8 TryMixNormalTVShow(TVShow *, TVShow *, u8);
+static bool8 TryMixRecordMixTVShow(TVShow *, TVShow *, u8);
+static bool8 TryMixOutbreakTVShow(TVShow *, TVShow *, u8);
+static void DeactivateShow(u8 showIdx);
+static void DeactivateShowIfNotSeenSpecies(u16, u8);
+static void SetMixedPokeNews(PokeNews *, PokeNews *, PokeNews *, PokeNews *);
+static void ClearInvalidPokeNews(void);
+static void ClearPokeNewsIfGameNotComplete(void);
+static s8 GetPokeNewsSlotIfActive(PokeNews *, u8);
+static void InitTryMixPokeNewsShow(PokeNews *[], PokeNews *[]);
+static bool8 TryMixPokeNewsShow(PokeNews *, PokeNews *, s8);
+static void TVShowDone(void);
static void InterviewAfter_FanClubLetter(void);
static void InterviewAfter_RecentHappenings(void);
static void InterviewAfter_PkmnFanClubOpinions(void);
-static void InterviewAfter_DummyShow4(void);
+static void InterviewAfter_Dummy(void);
static void InterviewAfter_BravoTrainerPokemonProfile(void);
static void InterviewAfter_BravoTrainerBattleTowerProfile(void);
static void InterviewAfter_ContestLiveUpdates(void);
-void UpdateWorldOfMastersAndPutItOnTheAir(void);
-void PutPokemonTodayFailedOnTheAir(void);
-static void sub_80ED718(void);
-static void sub_80EED88(void);
-void TV_SortPurchasesByQuantity(void);
-static void UpdateMassOutbreakTimeLeft(u16 days);
-static void TryEndMassOutbreak(u16 days);
-static void sub_80EF120(u16 days);
-static void sub_80EDA48(u16 days);
-static void sub_80EEB98(u16 days);
-void PutFishingAdviceShowOnTheAir(void);
-static u8 MonDataIdxToRibbon(u8 monDataIdx);
-static void sub_80EEBF4(u8 actionIdx);
-bool8 IsPriceDiscounted(u8 newsKind);
+static void InitWorldOfMastersShowAttempt(void);
+static void TryPutPokemonTodayFailedOnTheAir(void);
+static void TryStartRandomMassOutbreak(void);
+static void TryPutRandomPokeNewsOnAir(void);
+static void SortPurchasesByQuantity(void);
+static void UpdateMassOutbreakTimeLeft(u16);
+static void TryEndMassOutbreak(u16);
+static void UpdatePokeNewsTimeLeft(u16);
+static void ResolveWorldOfMastersShow(u16);
+static void ResolveNumberOneShow(u16);
+static void TryPutFishingAdviceOnAir(void);
+static u8 MonDataIdxToRibbon(u8);
+static void TryPutNumberOneOnAir(u8);
+static bool8 IsPriceDiscounted(u8);
+static void TryPutWorldOfMastersOnAir(void);
static void InterviewBefore_FanClubLetter(void);
static void InterviewBefore_RecentHappenings(void);
static void InterviewBefore_PkmnFanClubOpinions(void);
@@ -148,7 +155,7 @@ static void InterviewBefore_BravoTrainerBTProfile(void);
static void InterviewBefore_ContestLiveUpdates(void);
static void InterviewBefore_3CheersForPokeblocks(void);
static void InterviewBefore_FanClubSpecial(void);
-void ChangeBoxPokemonNickname_CB(void);
+static void ChangeBoxPokemonNickname_CB(void);
static void DoTVShowPokemonFanClubLetter(void);
static void DoTVShowRecentHappenings(void);
static void DoTVShowPokemonFanClubOpinions(void);
@@ -182,8 +189,6 @@ static void DoTVShowSecretBaseSecrets(void);
static void DoTVShowSafariFanClub(void);
static void DoTVShowLilycoveContestLady(void);
-// .rodata
-
static const struct {
u16 species;
u16 moves[MAX_MON_MOVES];
@@ -753,23 +758,18 @@ const u8 sTVSecretBaseSecretsActions[NUM_SECRET_BASE_FLAGS] =
SBSECRETS_NUM_STATES // SECRET_BASE_UNUSED_FLAG. Odd that this is included, if it were used it would overflow sTVSecretBaseSecretsTextGroup
};
-// .text
-
void ClearTVShowData(void)
{
- u8 i;
- u8 j;
+ u8 i, j;
- for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->tvShows); i ++)
+ for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->tvShows); i++)
{
gSaveBlock1Ptr->tvShows[i].commonInit.kind = 0;
gSaveBlock1Ptr->tvShows[i].commonInit.active = 0;
- for (j = 0; j < ARRAY_COUNT(gSaveBlock1Ptr->tvShows[i].commonInit.pad02); j ++)
- {
- gSaveBlock1Ptr->tvShows[i].commonInit.pad02[j] = 0;
- }
+ for (j = 0; j < ARRAY_COUNT(gSaveBlock1Ptr->tvShows[i].commonInit.data); j++)
+ gSaveBlock1Ptr->tvShows[i].commonInit.data[j] = 0;
}
- ClearPokemonNews();
+ ClearPokeNews();
}
u8 GetRandomActiveShowIdx(void)
@@ -779,7 +779,8 @@ u8 GetRandomActiveShowIdx(void)
u8 selIdx;
TVShow *show;
- for (i = 5; i < ARRAY_COUNT(gSaveBlock1Ptr->tvShows) - 1; i ++)
+ // Include all normal TV shows, and up through any present Record Mix shows
+ for (i = NUM_NORMAL_TVSHOW_SLOTS; i < LAST_TVSHOW_IDX; i++)
{
if (gSaveBlock1Ptr->tvShows[i].common.kind == TVSHOW_OFF_AIR)
break;
@@ -788,7 +789,7 @@ u8 GetRandomActiveShowIdx(void)
selIdx = j;
do
{
- if (GetTVChannelByShowType(gSaveBlock1Ptr->tvShows[j].common.kind) != 4)
+ if (GetTVGroupByShowId(gSaveBlock1Ptr->tvShows[j].common.kind) != TVGROUP_OUTBREAK)
{
if (gSaveBlock1Ptr->tvShows[j].common.active == TRUE)
return j;
@@ -803,7 +804,7 @@ u8 GetRandomActiveShowIdx(void)
if (j == 0)
j = ARRAY_COUNT(gSaveBlock1Ptr->tvShows) - 2;
else
- j --;
+ j--;
} while (j != selIdx);
return 0xFF;
@@ -811,88 +812,88 @@ u8 GetRandomActiveShowIdx(void)
u8 FindAnyTVShowOnTheAir(void)
{
- u8 show;
-
- show = GetRandomActiveShowIdx();
- if (show == 0xFF)
- {
+ u8 slot = GetRandomActiveShowIdx();
+ if (slot == 0xFF)
return 0xFF;
- }
- if (gSaveBlock1Ptr->outbreakPokemonSpecies != SPECIES_NONE && gSaveBlock1Ptr->tvShows[show].common.kind == TVSHOW_MASS_OUTBREAK)
- {
+
+ if (gSaveBlock1Ptr->outbreakPokemonSpecies != SPECIES_NONE
+ && gSaveBlock1Ptr->tvShows[slot].common.kind == TVSHOW_MASS_OUTBREAK)
return FindFirstActiveTVShowThatIsNotAMassOutbreak();
- }
- return show;
+
+ return slot;
}
void UpdateTVScreensOnMap(int width, int height)
{
FlagSet(FLAG_SYS_TV_WATCH);
- switch (CheckForBigMovieOrEmergencyNewsOnTV())
+ switch (CheckForPlayersHouseNews())
{
- case 1:
- SetTVMetatilesOnMap(width, height, 0x3);
- break;
- case 2:
- break;
- default:
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_COVE_LILY_MOTEL_1F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(LILYCOVE_CITY_COVE_LILY_MOTEL_1F))
- {
- SetTVMetatilesOnMap(width, height, 0x3);
- }
- else if (FlagGet(FLAG_SYS_TV_START) && (FindAnyTVShowOnTheAir() != 0xFF || FindAnyTVNewsOnTheAir() != 0xFF || IsTVShowInSearchOfTrainersAiring()))
- {
- FlagClear(FLAG_SYS_TV_WATCH);
- SetTVMetatilesOnMap(width, height, 0x3);
- }
- break;
+ case PLAYERS_HOUSE_TV_LATI:
+ SetTVMetatilesOnMap(width, height, METATILE_Building_TV_On);
+ break;
+ case PLAYERS_HOUSE_TV_MOVIE:
+ // Don't flash TV for movie text in player's house
+ break;
+// case PLAYERS_HOUSE_TV_NONE:
+ default:
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_COVE_LILY_MOTEL_1F)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(LILYCOVE_CITY_COVE_LILY_MOTEL_1F))
+ {
+ // NPC in Lilycove Hotel is always watching TV
+ SetTVMetatilesOnMap(width, height, METATILE_Building_TV_On);
+ }
+ else if (FlagGet(FLAG_SYS_TV_START) && (FindAnyTVShowOnTheAir() != 0xFF || FindAnyPokeNewsOnTheAir() != 0xFF || IsGabbyAndTyShowOnTheAir()))
+ {
+ FlagClear(FLAG_SYS_TV_WATCH);
+ SetTVMetatilesOnMap(width, height, METATILE_Building_TV_On);
+ }
+ break;
}
}
-void SetTVMetatilesOnMap(int width, int height, u16 tileId)
+static void SetTVMetatilesOnMap(int width, int height, u16 tileId)
{
int x;
int y;
- for (y = 0; y < height; y ++)
+ for (y = 0; y < height; y++)
{
- for (x = 0; x < width; x ++)
+ for (x = 0; x < width; x++)
{
if (MapGridGetMetatileBehaviorAt(x, y) == MB_TELEVISION)
- {
MapGridSetMetatileIdAt(x, y, tileId | METATILE_COLLISION_MASK);
- }
}
}
}
void TurnOffTVScreen(void)
{
- SetTVMetatilesOnMap(gBackupMapLayout.width, gBackupMapLayout.height, 0x0002);
+ SetTVMetatilesOnMap(gBackupMapLayout.width, gBackupMapLayout.height, METATILE_Building_TV_Off);
DrawWholeMapView();
}
void TurnOnTVScreen(void)
{
- SetTVMetatilesOnMap(gBackupMapLayout.width, gBackupMapLayout.height, 0x0003);
+ SetTVMetatilesOnMap(gBackupMapLayout.width, gBackupMapLayout.height, METATILE_Building_TV_On);
DrawWholeMapView();
}
+// gSpecialVar_0x8004 here is set from GetRandomActiveShowIdx in EventScript_TryDoTVShow
u8 GetSelectedTVShow(void)
{
return gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004].common.kind;
}
-u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void)
+static u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void)
{
u8 i;
- for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->tvShows) - 1; i ++)
+ for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->tvShows) - 1; i++)
{
- if (gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_OFF_AIR && gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_MASS_OUTBREAK && gSaveBlock1Ptr->tvShows[i].common.active == TRUE)
- {
+ if (gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_OFF_AIR
+ && gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_MASS_OUTBREAK
+ && gSaveBlock1Ptr->tvShows[i].common.active == TRUE)
return i;
- }
}
return 0xFF;
}
@@ -903,9 +904,8 @@ u8 GetNextActiveShowIfMassOutbreak(void)
tvShow = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004];
if (tvShow->common.kind == TVSHOW_MASS_OUTBREAK && gSaveBlock1Ptr->outbreakPokemonSpecies != SPECIES_NONE)
- {
return FindFirstActiveTVShowThatIsNotAMassOutbreak();
- }
+
return gSpecialVar_0x8004;
}
@@ -941,28 +941,23 @@ void GabbyAndTyBeforeInterview(void)
gSaveBlock1Ptr->gabbyAndTyData.lastMove = gBattleResults.lastUsedMovePlayer;
if (gSaveBlock1Ptr->gabbyAndTyData.battleNum != 0xFF)
{
- gSaveBlock1Ptr->gabbyAndTyData.battleNum ++;
+ gSaveBlock1Ptr->gabbyAndTyData.battleNum++;
}
gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn = gBattleResults.playerMonWasDamaged;
+
if (gBattleResults.playerFaintCounter != 0)
- {
gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon = TRUE;
- }
else
- {
gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon = FALSE;
- }
+
if (gBattleResults.numHealingItemsUsed != 0)
- {
gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem = TRUE;
- }
else
- {
gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem = FALSE;
- }
+
if (!gBattleResults.usedMasterBall)
{
- for (i = 0; i < POKEBALL_COUNT - 1; i ++)
+ for (i = 0; i < POKEBALL_COUNT - 1; i++)
{
if (gBattleResults.catchAttempts[i])
{
@@ -973,9 +968,11 @@ void GabbyAndTyBeforeInterview(void)
}
else
{
+ // Player threw a Master Ball at Gabby and Ty
gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall = TRUE;
}
- TakeTVShowInSearchOfTrainersOffTheAir();
+
+ TakeGabbyAndTyOffTheAir();
if (gSaveBlock1Ptr->gabbyAndTyData.lastMove == MOVE_NONE)
{
FlagSet(FLAG_TEMP_1);
@@ -993,7 +990,7 @@ void GabbyAndTyAfterInterview(void)
IncrementGameStat(GAME_STAT_GOT_INTERVIEWED);
}
-void TakeTVShowInSearchOfTrainersOffTheAir(void)
+static void TakeGabbyAndTyOffTheAir(void)
{
gSaveBlock1Ptr->gabbyAndTyData.onAir = FALSE;
}
@@ -1001,13 +998,12 @@ void TakeTVShowInSearchOfTrainersOffTheAir(void)
u8 GabbyAndTyGetBattleNum(void)
{
if (gSaveBlock1Ptr->gabbyAndTyData.battleNum > 5)
- {
return (gSaveBlock1Ptr->gabbyAndTyData.battleNum % 3) + 6;
- }
+
return gSaveBlock1Ptr->gabbyAndTyData.battleNum;
}
-bool8 IsTVShowInSearchOfTrainersAiring(void)
+bool8 IsGabbyAndTyShowOnTheAir(void)
{
return gSaveBlock1Ptr->gabbyAndTyData.onAir;
}
@@ -1026,60 +1022,56 @@ bool8 GabbyAndTyGetLastQuote(void)
u8 GabbyAndTyGetLastBattleTrivia(void)
{
if (!gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn2)
- {
return 1;
- }
+
if (gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall2)
- {
return 2;
- }
+
if (gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem2)
- {
return 3;
- }
+
if (gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon2)
- {
return 4;
- }
+
return 0;
}
-void GabbyAndTySetScriptVarsToObjectEventLocalIds(void)
+void GetGabbyAndTyLocalIds(void)
{
switch (GabbyAndTyGetBattleNum())
{
- case 1:
- gSpecialVar_0x8004 = 14;
- gSpecialVar_0x8005 = 13;
- break;
- case 2:
- gSpecialVar_0x8004 = 5;
- gSpecialVar_0x8005 = 6;
- break;
- case 3:
- gSpecialVar_0x8004 = 18;
- gSpecialVar_0x8005 = 17;
- break;
- case 4:
- gSpecialVar_0x8004 = 21;
- gSpecialVar_0x8005 = 22;
- break;
- case 5:
- gSpecialVar_0x8004 = 8;
- gSpecialVar_0x8005 = 9;
- break;
- case 6:
- gSpecialVar_0x8004 = 19;
- gSpecialVar_0x8005 = 20;
- break;
- case 7:
- gSpecialVar_0x8004 = 23;
- gSpecialVar_0x8005 = 24;
- break;
- case 8:
- gSpecialVar_0x8004 = 10;
- gSpecialVar_0x8005 = 11;
- break;
+ case 1:
+ gSpecialVar_0x8004 = 14;
+ gSpecialVar_0x8005 = 13;
+ break;
+ case 2:
+ gSpecialVar_0x8004 = 5;
+ gSpecialVar_0x8005 = 6;
+ break;
+ case 3:
+ gSpecialVar_0x8004 = 18;
+ gSpecialVar_0x8005 = 17;
+ break;
+ case 4:
+ gSpecialVar_0x8004 = 21;
+ gSpecialVar_0x8005 = 22;
+ break;
+ case 5:
+ gSpecialVar_0x8004 = 8;
+ gSpecialVar_0x8005 = 9;
+ break;
+ case 6:
+ gSpecialVar_0x8004 = 19;
+ gSpecialVar_0x8005 = 20;
+ break;
+ case 7:
+ gSpecialVar_0x8004 = 23;
+ gSpecialVar_0x8005 = 24;
+ break;
+ case 8:
+ gSpecialVar_0x8004 = 10;
+ gSpecialVar_0x8005 = 11;
+ break;
}
}
@@ -1087,88 +1079,85 @@ void InterviewAfter(void)
{
switch (gSpecialVar_0x8005)
{
- case TVSHOW_FAN_CLUB_LETTER:
- InterviewAfter_FanClubLetter();
- break;
- case TVSHOW_RECENT_HAPPENINGS:
- InterviewAfter_RecentHappenings();
- break;
- case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
- InterviewAfter_PkmnFanClubOpinions();
- break;
- case TVSHOW_UNKN_SHOWTYPE_04:
- InterviewAfter_DummyShow4();
- break;
- case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
- InterviewAfter_BravoTrainerPokemonProfile();
- break;
- case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
- InterviewAfter_BravoTrainerBattleTowerProfile();
- break;
- case TVSHOW_CONTEST_LIVE_UPDATES:
- InterviewAfter_ContestLiveUpdates();
- break;
+ case TVSHOW_FAN_CLUB_LETTER:
+ InterviewAfter_FanClubLetter();
+ break;
+ case TVSHOW_RECENT_HAPPENINGS:
+ InterviewAfter_RecentHappenings();
+ break;
+ case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
+ InterviewAfter_PkmnFanClubOpinions();
+ break;
+ case TVSHOW_DUMMY:
+ InterviewAfter_Dummy();
+ break;
+ case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
+ InterviewAfter_BravoTrainerPokemonProfile();
+ break;
+ case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
+ InterviewAfter_BravoTrainerBattleTowerProfile();
+ break;
+ case TVSHOW_CONTEST_LIVE_UPDATES:
+ InterviewAfter_ContestLiveUpdates();
+ break;
}
}
-void PutPokemonTodayCaughtOnAir(void)
+void TryPutPokemonTodayOnAir(void)
{
u8 i;
- u16 ct;
+ u16 ballsUsed;
TVShow *show;
u32 language2;
u16 itemLastUsed;
- ct = 0;
- sub_80EED88();
- sub_80ED718();
+ ballsUsed = 0;
+ TryPutRandomPokeNewsOnAir();
+ TryStartRandomMassOutbreak();
+
+ // Try either the Failed or Caught version of the show
if (gBattleResults.caughtMonSpecies == SPECIES_NONE)
{
- PutPokemonTodayFailedOnTheAir();
+ TryPutPokemonTodayFailedOnTheAir();
}
else
{
- UpdateWorldOfMastersAndPutItOnTheAir();
+ InitWorldOfMastersShowAttempt();
if (!rbernoulli(1, 1) && StringCompare(gSpeciesNames[gBattleResults.caughtMonSpecies], gBattleResults.caughtMonNick))
{
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_CAUGHT, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_POKEMON_TODAY_CAUGHT, FALSE) != TRUE)
{
- for (i = 0; i < POKEBALL_COUNT - 1; i ++)
- {
- ct += gBattleResults.catchAttempts[i];
- }
- if (ct != 0 || gBattleResults.usedMasterBall)
+ for (i = 0; i < POKEBALL_COUNT - 1; i++)
+ ballsUsed += gBattleResults.catchAttempts[i];
+
+ if (ballsUsed != 0 || gBattleResults.usedMasterBall)
{
- ct = 0;
+ ballsUsed = 0;
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->pokemonToday.kind = TVSHOW_POKEMON_TODAY_CAUGHT;
- show->pokemonToday.active = FALSE;
+ show->pokemonToday.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
if (gBattleResults.usedMasterBall)
{
- ct = 1;
+ ballsUsed = 1;
itemLastUsed = ITEM_MASTER_BALL;
}
else
{
- for (i = 0; i < POKEBALL_COUNT - 1; i ++)
- {
- ct += gBattleResults.catchAttempts[i];
- }
- if (ct > 0xFF)
- {
- ct = 0xFF;
- }
+ for (i = 0; i < POKEBALL_COUNT - 1; i++)
+ ballsUsed += gBattleResults.catchAttempts[i];
+ if (ballsUsed > 255)
+ ballsUsed = 255;
itemLastUsed = gLastUsedItem;
}
- show->pokemonToday.nBallsUsed = ct;
+ show->pokemonToday.nBallsUsed = ballsUsed;
show->pokemonToday.ball = itemLastUsed;
StringCopy(show->pokemonToday.playerName, gSaveBlock2Ptr->playerName);
StringCopy(show->pokemonToday.nickname, gBattleResults.caughtMonNick);
language2 = sub_81DB604(show->pokemonToday.nickname);
StripExtCtrlCodes(show->pokemonToday.nickname);
show->pokemonToday.species = gBattleResults.caughtMonSpecies;
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->pokemonToday.language = gGameLanguage;
show->pokemonToday.language2 = language2;
}
@@ -1177,65 +1166,60 @@ void PutPokemonTodayCaughtOnAir(void)
}
}
-void UpdateWorldOfMastersAndPutItOnTheAir(void)
+// Show is initialized in last slot and updated there until it's
+// either triggered or deleted at the end of the day by ResolveWorldOfMastersShow
+static void InitWorldOfMastersShowAttempt(void)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
- if (show->worldOfMasters.kind != TVSHOW_WORLD_OF_MASTERS)
+ TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
+ if (show->common.kind != TVSHOW_WORLD_OF_MASTERS)
{
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
show->worldOfMasters.steps = GetGameStat(GAME_STAT_STEPS);
show->worldOfMasters.kind = TVSHOW_WORLD_OF_MASTERS;
}
- show->worldOfMasters.numPokeCaught ++;
+ show->worldOfMasters.numPokeCaught++;
show->worldOfMasters.caughtPoke = gBattleResults.caughtMonSpecies;
show->worldOfMasters.species = gBattleResults.playerMon1Species;
show->worldOfMasters.location = gMapHeader.regionMapSectionId;
}
-void PutPokemonTodayFailedOnTheAir(void)
+static void TryPutPokemonTodayFailedOnTheAir(void)
{
- u16 ct;
+ u16 ballsUsed;
u8 i;
TVShow *show;
if (!rbernoulli(1, 1))
{
- for (i = 0, ct = 0; i < POKEBALL_COUNT - 1; i ++)
- {
- ct += gBattleResults.catchAttempts[i];
- }
- if (ct > 0xFF)
- {
- ct = 0xFF;
- }
- if (ct > 2 && (gBattleOutcome == B_OUTCOME_MON_FLED || gBattleOutcome == B_OUTCOME_WON))
+ for (i = 0, ballsUsed = 0; i < POKEBALL_COUNT - 1; i++)
+ ballsUsed += gBattleResults.catchAttempts[i];
+ if (ballsUsed > 255)
+ ballsUsed = 255;
+
+ if (ballsUsed > 2 && (gBattleOutcome == B_OUTCOME_MON_FLED || gBattleOutcome == B_OUTCOME_WON))
{
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_FAILED, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_POKEMON_TODAY_FAILED, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->pokemonTodayFailed.kind = TVSHOW_POKEMON_TODAY_FAILED;
- show->pokemonTodayFailed.active = FALSE;
+ show->pokemonTodayFailed.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
show->pokemonTodayFailed.species = gBattleResults.playerMon1Species;
show->pokemonTodayFailed.species2 = gBattleResults.lastOpponentSpecies;
- show->pokemonTodayFailed.nBallsUsed = ct;
+ show->pokemonTodayFailed.nBallsUsed = ballsUsed;
show->pokemonTodayFailed.outcome = gBattleOutcome;
show->pokemonTodayFailed.location = gMapHeader.regionMapSectionId;
StringCopy(show->pokemonTodayFailed.playerName, gSaveBlock2Ptr->playerName);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->pokemonTodayFailed.language = gGameLanguage;
}
}
}
}
-void tv_store_id_3x(TVShow *show)
+static void StorePlayerIdInRecordMixShow(TVShow *show)
{
- u32 id;
-
- id = GetPlayerIDAsU32();
+ u32 id = GetPlayerIDAsU32();
show->common.srcTrainerId2Lo = id;
show->common.srcTrainerId2Hi = id >> 8;
show->common.srcTrainerIdLo = id;
@@ -1244,11 +1228,9 @@ void tv_store_id_3x(TVShow *show)
show->common.trainerIdHi = id >> 8;
}
-void tv_store_id_2x(TVShow *show)
+static void StorePlayerIdInNormalShow(TVShow *show)
{
- u32 id;
-
- id = GetPlayerIDAsU32();
+ u32 id = GetPlayerIDAsU32();
show->common.srcTrainerIdLo = id;
show->common.srcTrainerIdHi = id >> 8;
show->common.trainerIdLo = id;
@@ -1276,7 +1258,7 @@ static void InterviewAfter_ContestLiveUpdates(void)
show2->contestLiveUpdates.move = show->contestLiveUpdates.move;
show2->contestLiveUpdates.winnerAppealFlag = show->contestLiveUpdates.winnerAppealFlag;
StringCopy(show2->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerName);
- tv_store_id_2x(show2);
+ StorePlayerIdInNormalShow(show2);
show2->contestLiveUpdates.winningTrainerLanguage = gGameLanguage;
show2->contestLiveUpdates.losingTrainerLanguage = show->contestLiveUpdates.losingTrainerLanguage;
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
@@ -1288,44 +1270,36 @@ void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlaye
TVShow *show;
u8 name[32];
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_BATTLE_UPDATE);
- if (gSpecialVar_Result != 1)
+ TryReplaceOldTVShowOfKind(TVSHOW_BATTLE_UPDATE);
+ if (gSpecialVar_Result != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->battleUpdate.kind = TVSHOW_BATTLE_UPDATE;
show->battleUpdate.active = TRUE;
StringCopy(show->battleUpdate.playerName, gSaveBlock2Ptr->playerName);
+
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- {
show->battleUpdate.battleType = 2;
- }
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- {
show->battleUpdate.battleType = 1;
- }
else
- {
show->battleUpdate.battleType = 0;
- }
+
show->battleUpdate.move = move;
show->battleUpdate.speciesPlayer = speciesPlayer;
show->battleUpdate.speciesOpponent = speciesOpponent;
StringCopy(name, gLinkPlayers[opponentLinkPlayerId].name);
StripExtCtrlCodes(name);
StringCopy(show->battleUpdate.linkOpponentName, name);
- tv_store_id_2x(show);
+ StorePlayerIdInNormalShow(show);
show->battleUpdate.language = gGameLanguage;
if (show->battleUpdate.language == LANGUAGE_JAPANESE || gLinkPlayers[opponentLinkPlayerId].language == LANGUAGE_JAPANESE)
- {
show->battleUpdate.linkOpponentLanguage = LANGUAGE_JAPANESE;
- }
else
- {
show->battleUpdate.linkOpponentLanguage = gLinkPlayers[opponentLinkPlayerId].language;
- }
}
}
}
@@ -1335,16 +1309,14 @@ bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 colo
TVShow *show;
u8 name[32];
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot == -1)
- {
return FALSE;
- }
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_3_CHEERS_FOR_POKEBLOCKS);
- if (gSpecialVar_Result == 1)
- {
- return FALSE;
- }
+
+ TryReplaceOldTVShowOfKind(TVSHOW_3_CHEERS_FOR_POKEBLOCKS);
+ if (gSpecialVar_Result == TRUE)
+ return FALSE; // Old show is still active
+
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->threeCheers.kind = TVSHOW_3_CHEERS_FOR_POKEBLOCKS;
show->threeCheers.active = TRUE;
@@ -1355,16 +1327,12 @@ bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 colo
show->threeCheers.flavor = flavor;
show->threeCheers.color = color;
show->threeCheers.sheen = sheen;
- tv_store_id_2x(show);
+ StorePlayerIdInNormalShow(show);
show->threeCheers.language = gGameLanguage;
if (show->threeCheers.language == LANGUAGE_JAPANESE || language == LANGUAGE_JAPANESE)
- {
show->threeCheers.worstBlenderLanguage = LANGUAGE_JAPANESE;
- }
else
- {
show->threeCheers.worstBlenderLanguage = language;
- }
return TRUE;
}
@@ -1385,16 +1353,12 @@ void PutFanClubSpecialOnTheAir(void)
StringCopy(name, gStringVar1);
StripExtCtrlCodes(name);
StringCopy(show->fanClubSpecial.idolName, name);
- tv_store_id_2x(show);
+ StorePlayerIdInNormalShow(show);
show->fanClubSpecial.language = gGameLanguage;
if (show->fanClubSpecial.language == LANGUAGE_JAPANESE || gSaveBlock1Ptr->linkBattleRecords.languages[0] == LANGUAGE_JAPANESE)
- {
show->fanClubSpecial.idolNameLanguage = LANGUAGE_JAPANESE;
- }
else
- {
show->fanClubSpecial.idolNameLanguage = gSaveBlock1Ptr->linkBattleRecords.languages[0];
- }
}
void ContestLiveUpdates_Init(u8 round1Placing)
@@ -1402,7 +1366,7 @@ void ContestLiveUpdates_Init(u8 round1Placing)
TVShow *show;
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
@@ -1413,64 +1377,45 @@ void ContestLiveUpdates_Init(u8 round1Placing)
void ContestLiveUpdates_SetRound2Placing(u8 round2Placing)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
- {
show->contestLiveUpdates.round2Placing = round2Placing;
- }
}
void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
- {
show->contestLiveUpdates.winnerAppealFlag = flag;
- }
}
void ContestLiveUpdates_SetWinnerMoveUsed(u16 move)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
- {
show->contestLiveUpdates.move = move;
- }
}
void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
show->contestLiveUpdates.losingSpecies = gContestMons[loser].species;
StringCopy(show->contestLiveUpdates.losingTrainerName, gContestMons[loser].trainerName);
StripExtCtrlCodes(show->contestLiveUpdates.losingTrainerName);
show->contestLiveUpdates.loserAppealFlag = flag;
+
if (loser + 1 > gNumLinkContestPlayers)
- {
show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[0].language;
- }
else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[loser].language == LANGUAGE_JAPANESE)
- {
show->contestLiveUpdates.losingTrainerLanguage = LANGUAGE_JAPANESE;
- }
else
- {
show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[loser].language;
- }
}
}
@@ -1493,27 +1438,21 @@ static void InterviewAfter_BravoTrainerPokemonProfile(void)
show2->bravoTrainer.move = show->bravoTrainer.move;
show2->bravoTrainer.contestResult = show->bravoTrainer.contestResult;
show2->bravoTrainer.contestCategory = show->bravoTrainer.contestCategory;
- tv_store_id_2x(show2);
+ StorePlayerIdInNormalShow(show2);
show2->bravoTrainer.language = gGameLanguage;
if (show2->bravoTrainer.language == LANGUAGE_JAPANESE || show->bravoTrainer.pokemonNameLanguage == LANGUAGE_JAPANESE)
- {
show2->bravoTrainer.pokemonNameLanguage = LANGUAGE_JAPANESE;
- }
else
- {
show2->bravoTrainer.pokemonNameLanguage = show->bravoTrainer.pokemonNameLanguage;
- }
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
}
}
void BravoTrainerPokemonProfile_BeforeInterview1(u16 a0)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
+ TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
InterviewBefore_BravoTrainerPkmnProfile();
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
@@ -1524,10 +1463,8 @@ void BravoTrainerPokemonProfile_BeforeInterview1(u16 a0)
void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
show->bravoTrainer.contestResult = contestStandingPlace;
@@ -1542,9 +1479,7 @@ void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace)
static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
+ TVShow *show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->bravoTrainerTower.kind = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE;
show->bravoTrainerTower.active = TRUE;
StringCopy(show->bravoTrainerTower.trainerName, gSaveBlock2Ptr->playerName);
@@ -1554,27 +1489,19 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.towerLvlMode, 0);
show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.towerBattleOutcome;
if (gSaveBlock2Ptr->frontier.towerLvlMode == FRONTIER_LVL_50)
- {
show->bravoTrainerTower.btLevel = 50;
- }
else
- {
show->bravoTrainerTower.btLevel = 100;
- }
show->bravoTrainerTower.interviewResponse = gSpecialVar_0x8004;
- tv_store_id_2x(show);
+ StorePlayerIdInNormalShow(show);
show->bravoTrainerTower.language = gGameLanguage;
if (show->bravoTrainerTower.language == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage == LANGUAGE_JAPANESE)
- {
show->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_JAPANESE;
- }
else
- {
show->bravoTrainerTower.pokemonNameLanguage = gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage;
- }
}
-void SaveRecordedItemPurchasesForTVShow(void)
+void TryPutSmartShopperOnAir(void)
{
TVShow *show;
u8 i;
@@ -1583,24 +1510,24 @@ void SaveRecordedItemPurchasesForTVShow(void)
&& !(gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_MART) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_MART))
&& !rbernoulli(1, 3))
{
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_SMART_SHOPPER, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_SMART_SHOPPER, FALSE) != TRUE)
{
- TV_SortPurchasesByQuantity();
+ SortPurchasesByQuantity();
if (gMartPurchaseHistory[0].quantity >= 20)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->smartshopperShow.kind = TVSHOW_SMART_SHOPPER;
- show->smartshopperShow.active = FALSE;
+ show->smartshopperShow.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
show->smartshopperShow.shopLocation = gMapHeader.regionMapSectionId;
- for (i = 0; i < 3; i ++)
+ for (i = 0; i < SMARTSHOPPER_NUM_ITEMS; i++)
{
show->smartshopperShow.itemIds[i] = gMartPurchaseHistory[i].itemId;
show->smartshopperShow.itemAmounts[i] = gMartPurchaseHistory[i].quantity;
}
show->smartshopperShow.priceReduced = GetPriceReduction(POKENEWS_SLATEPORT);
StringCopy(show->smartshopperShow.playerName, gSaveBlock2Ptr->playerName);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->smartshopperShow.language = gGameLanguage;
}
}
@@ -1623,11 +1550,11 @@ void PutNameRaterShowOnTheAir(void)
show->nameRaterShow.species = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL);
show->nameRaterShow.random = Random() % 3;
show->nameRaterShow.random2 = Random() % 2;
- show->nameRaterShow.randomSpecies = TV_GetSomeOtherSpeciesAlreadySeenByPlayer(show->nameRaterShow.species);
+ show->nameRaterShow.randomSpecies = GetRandomDifferentSpeciesSeenByPlayer(show->nameRaterShow.species);
StringCopy(show->nameRaterShow.trainerName, gSaveBlock2Ptr->playerName);
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, show->nameRaterShow.pokemonName);
StripExtCtrlCodes(show->nameRaterShow.pokemonName);
- tv_store_id_2x(show);
+ StorePlayerIdInNormalShow(show);
show->nameRaterShow.language = gGameLanguage;
show->nameRaterShow.pokemonNameLanguage = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_LANGUAGE);
}
@@ -1636,9 +1563,7 @@ void PutNameRaterShowOnTheAir(void)
void StartMassOutbreak(void)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004];
+ TVShow *show = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004];
gSaveBlock1Ptr->outbreakPokemonSpecies = show->massOutbreak.species;
gSaveBlock1Ptr->outbreakLocationMapNum = show->massOutbreak.locationMapNum;
gSaveBlock1Ptr->outbreakLocationMapGroup = show->massOutbreak.locationMapGroup;
@@ -1658,7 +1583,7 @@ void PutLilycoveContestLadyShowOnTheAir(void)
{
TVShow *show;
- sub_80EFA88();
+ Script_FindFirstEmptyNormalTVShowSlot();
if (gSpecialVar_Result != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
@@ -1669,41 +1594,35 @@ void PutLilycoveContestLadyShowOnTheAir(void)
BufferContestLadyPlayerName(show->contestLady.playerName);
BufferContestLadyMonName(&show->contestLady.contestCategory, show->contestLady.nickname);
show->contestLady.pokeblockState = GetContestLadyPokeblockState();
- tv_store_id_2x(show);
+ StorePlayerIdInNormalShow(show);
}
}
static void InterviewAfter_FanClubLetter(void)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
+ TVShow *show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->fanclubLetter.kind = TVSHOW_FAN_CLUB_LETTER;
show->fanclubLetter.active = TRUE;
StringCopy(show->fanclubLetter.playerName, gSaveBlock2Ptr->playerName);
show->fanclubLetter.species = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL);
- tv_store_id_2x(show);
+ StorePlayerIdInNormalShow(show);
show->fanclubLetter.language = gGameLanguage;
}
static void InterviewAfter_RecentHappenings(void)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
+ TVShow *show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->recentHappenings.kind = TVSHOW_RECENT_HAPPENINGS;
show->recentHappenings.active = TRUE;
StringCopy(show->recentHappenings.playerName, gSaveBlock2Ptr->playerName);
- show->recentHappenings.var02 = 0;
- tv_store_id_2x(show);
+ show->recentHappenings.species = SPECIES_NONE;
+ StorePlayerIdInNormalShow(show);
show->recentHappenings.language = gGameLanguage;
}
static void InterviewAfter_PkmnFanClubOpinions(void)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
+ TVShow *show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->fanclubOpinions.kind = TVSHOW_PKMN_FAN_CLUB_OPINIONS;
show->fanclubOpinions.active = TRUE;
show->fanclubOpinions.friendshipHighNybble = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_FRIENDSHIP, NULL) >> 4;
@@ -1712,26 +1631,20 @@ static void InterviewAfter_PkmnFanClubOpinions(void)
GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, show->fanclubOpinions.nickname);
StripExtCtrlCodes(show->fanclubOpinions.nickname);
show->fanclubOpinions.species = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL);
- tv_store_id_2x(show);
+ StorePlayerIdInNormalShow(show);
show->fanclubOpinions.language = gGameLanguage;
if (gGameLanguage == LANGUAGE_JAPANESE || GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE)
- {
show->fanclubOpinions.pokemonNameLanguage = LANGUAGE_JAPANESE;
- }
else
- {
show->fanclubOpinions.pokemonNameLanguage = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_LANGUAGE);
- }
}
-static void InterviewAfter_DummyShow4(void)
+static void InterviewAfter_Dummy(void)
{
- TVShow *show;
-
- show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
+ TVShow *show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
}
-static void sub_80ED718(void)
+static void TryStartRandomMassOutbreak(void)
{
u8 i;
u16 outbreakIdx;
@@ -1739,16 +1652,14 @@ static void sub_80ED718(void)
if (FlagGet(FLAG_SYS_GAME_CLEAR))
{
- for (i = 0; i < LAST_TVSHOW_IDX; i ++)
+ for (i = 0; i < LAST_TVSHOW_IDX; i++)
{
if (gSaveBlock1Ptr->tvShows[i].common.kind == TVSHOW_MASS_OUTBREAK)
- {
return;
- }
}
if (!rbernoulli(1, 200))
{
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
outbreakIdx = Random() % ARRAY_COUNT(sPokeOutbreakSpeciesList);
@@ -1770,7 +1681,7 @@ static void sub_80ED718(void)
show->massOutbreak.probability = 50;
show->massOutbreak.var15 = 0;
show->massOutbreak.daysLeft = 1;
- tv_store_id_2x(show);
+ StorePlayerIdInNormalShow(show);
show->massOutbreak.language = gGameLanguage;
}
}
@@ -1798,9 +1709,9 @@ void UpdateTVShowsPerDay(u16 days)
{
UpdateMassOutbreakTimeLeft(days);
TryEndMassOutbreak(days);
- sub_80EF120(days);
- sub_80EDA48(days);
- sub_80EEB98(days);
+ UpdatePokeNewsTimeLeft(days);
+ ResolveWorldOfMastersShow(days);
+ ResolveNumberOneShow(days);
}
static void UpdateMassOutbreakTimeLeft(u16 days)
@@ -1810,7 +1721,7 @@ static void UpdateMassOutbreakTimeLeft(u16 days)
if (gSaveBlock1Ptr->outbreakPokemonSpecies == SPECIES_NONE)
{
- for (i = 0; i < LAST_TVSHOW_IDX; i ++)
+ for (i = 0; i < LAST_TVSHOW_IDX; i++)
{
if (gSaveBlock1Ptr->tvShows[i].massOutbreak.kind == TVSHOW_MASS_OUTBREAK && gSaveBlock1Ptr->tvShows[i].massOutbreak.active == TRUE)
{
@@ -1839,7 +1750,7 @@ void RecordFishingAttemptForTV(bool8 caughtFish)
if (caughtFish)
{
if (sPokemonAnglerAttemptCounters >> 8 > 4)
- PutFishingAdviceShowOnTheAir();
+ TryPutFishingAdviceOnAir();
sPokemonAnglerAttemptCounters &= 0xFF;
if (sPokemonAnglerAttemptCounters != 0xFF)
@@ -1848,7 +1759,7 @@ void RecordFishingAttemptForTV(bool8 caughtFish)
else
{
if ((u8)sPokemonAnglerAttemptCounters > 4)
- PutFishingAdviceShowOnTheAir();
+ TryPutFishingAdviceOnAir();
sPokemonAnglerAttemptCounters &= 0xFF00;
if (sPokemonAnglerAttemptCounters >> 8 != 0xFF)
@@ -1856,21 +1767,21 @@ void RecordFishingAttemptForTV(bool8 caughtFish)
}
}
-void PutFishingAdviceShowOnTheAir(void)
+static void TryPutFishingAdviceOnAir(void)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_FISHING_ADVICE, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_FISHING_ADVICE, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->pokemonAngler.kind = TVSHOW_FISHING_ADVICE;
- show->pokemonAngler.active = FALSE;
+ show->pokemonAngler.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
show->pokemonAngler.nBites = sPokemonAnglerAttemptCounters;
show->pokemonAngler.nFails = sPokemonAnglerAttemptCounters >> 8;
show->pokemonAngler.species = sPokemonAnglerSpecies;
StringCopy(show->pokemonAngler.playerName, gSaveBlock2Ptr->playerName);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->pokemonAngler.language = gGameLanguage;
}
}
@@ -1880,7 +1791,11 @@ void SetPokemonAnglerSpecies(u16 species)
sPokemonAnglerSpecies = species;
}
-static void sub_80EDA48(u16 days)
+// World of Masters is initialized in the last slot by InitWorldOfMastersShowAttempt
+// If enough Pokémon were caught during the day the show can be put on air (and will
+// be moved out of the last slot).
+// Either way the temporary version of the show in the last slot is deleted.
+static void ResolveWorldOfMastersShow(u16 days)
{
TVShow *show;
@@ -1888,14 +1803,13 @@ static void sub_80EDA48(u16 days)
if (show->worldOfMasters.kind == TVSHOW_WORLD_OF_MASTERS)
{
if (show->worldOfMasters.numPokeCaught >= 20)
- {
- sub_80EDA80();
- }
+ TryPutWorldOfMastersOnAir();
+
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
}
}
-void sub_80EDA80(void)
+static void TryPutWorldOfMastersOnAir(void)
{
TVShow *show;
TVShow *show2;
@@ -1903,19 +1817,19 @@ void sub_80EDA80(void)
show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
if (!rbernoulli(1, 1))
{
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_WORLD_OF_MASTERS, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_WORLD_OF_MASTERS, FALSE) != TRUE)
{
show2 = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show2->worldOfMasters.kind = TVSHOW_WORLD_OF_MASTERS;
- show2->worldOfMasters.active = FALSE;
+ show2->worldOfMasters.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
show2->worldOfMasters.numPokeCaught = show->worldOfMasters.numPokeCaught;
show2->worldOfMasters.steps = GetGameStat(GAME_STAT_STEPS) - show->worldOfMasters.steps;
show2->worldOfMasters.caughtPoke = show->worldOfMasters.caughtPoke;
show2->worldOfMasters.species = show->worldOfMasters.species;
show2->worldOfMasters.location = show->worldOfMasters.location;
StringCopy(show2->worldOfMasters.playerName, gSaveBlock2Ptr->playerName);
- tv_store_id_3x(show2);
+ StorePlayerIdInRecordMixShow(show2);
show2->worldOfMasters.language = gGameLanguage;
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
}
@@ -1928,47 +1842,38 @@ void TryPutTodaysRivalTrainerOnAir(void)
u32 i;
u8 nBadges;
- HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_TODAYS_RIVAL_TRAINER, TRUE);
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ IsRecordMixShowAlreadySpawned(TVSHOW_TODAYS_RIVAL_TRAINER, TRUE); // Delete old version of show
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->rivalTrainer.kind = TVSHOW_TODAYS_RIVAL_TRAINER;
- show->rivalTrainer.active = FALSE;
- for (i = FLAG_BADGE01_GET, nBadges = 0; i < FLAG_BADGE01_GET + NUM_BADGES; i ++)
+ show->rivalTrainer.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
+ for (i = FLAG_BADGE01_GET, nBadges = 0; i < FLAG_BADGE01_GET + NUM_BADGES; i++)
{
if (FlagGet(i))
- {
- nBadges ++;
- }
+ nBadges++;
}
show->rivalTrainer.badgeCount = nBadges;
if (IsNationalPokedexEnabled())
- {
show->rivalTrainer.dexCount = GetNationalPokedexCount(FLAG_GET_CAUGHT);
- }
else
- {
show->rivalTrainer.dexCount = GetHoennPokedexCount(FLAG_GET_CAUGHT);
- }
show->rivalTrainer.location = gMapHeader.regionMapSectionId;
show->rivalTrainer.mapLayoutId = gMapHeader.mapLayoutId;
show->rivalTrainer.nSilverSymbols = 0;
show->rivalTrainer.nGoldSymbols = 0;
- for (i = 0; i < 7; i ++)
+ for (i = 0; i < 7; i++)
{
if (FlagGet(sSilverSymbolFlags[i]) == TRUE)
- {
- show->rivalTrainer.nSilverSymbols ++;
- }
+ show->rivalTrainer.nSilverSymbols++;
+
if (FlagGet(sGoldSymbolFlags[i]) == TRUE)
- {
- show->rivalTrainer.nGoldSymbols ++;
- }
+ show->rivalTrainer.nGoldSymbols++;
}
show->rivalTrainer.battlePoints = gSaveBlock2Ptr->frontier.battlePoints;
StringCopy(show->rivalTrainer.playerName, gSaveBlock2Ptr->playerName);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->rivalTrainer.language = gGameLanguage;
}
}
@@ -1977,17 +1882,17 @@ void TryPutTrendWatcherOnAir(const u16 *words)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_TREND_WATCHER, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_TREND_WATCHER, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->trendWatcher.kind = TVSHOW_TREND_WATCHER;
- show->trendWatcher.active = FALSE;
+ show->trendWatcher.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
show->trendWatcher.gender = gSaveBlock2Ptr->playerGender;
show->trendWatcher.words[0] = words[0];
show->trendWatcher.words[1] = words[1];
StringCopy(show->trendWatcher.playerName, gSaveBlock2Ptr->playerName);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->trendWatcher.language = gGameLanguage;
}
}
@@ -1996,70 +1901,70 @@ void TryPutTreasureInvestigatorsOnAir(void)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_TREASURE_INVESTIGATORS, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_TREASURE_INVESTIGATORS, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->treasureInvestigators.kind = TVSHOW_TREASURE_INVESTIGATORS;
- show->treasureInvestigators.active = FALSE;
+ show->treasureInvestigators.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
show->treasureInvestigators.item = gSpecialVar_0x8005;
show->treasureInvestigators.location = gMapHeader.regionMapSectionId;
show->treasureInvestigators.mapLayoutId = gMapHeader.mapLayoutId;
StringCopy(show->treasureInvestigators.playerName, gSaveBlock2Ptr->playerName);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->treasureInvestigators.language = gGameLanguage;
}
}
-void AlertTVOfNewCoinTotal(u16 nCoinsPaidOut)
+void TryPutFindThatGamerOnAir(u16 nCoinsPaidOut)
{
TVShow *show;
bool8 flag;
u16 nCoinsWon;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_FIND_THAT_GAMER, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_FIND_THAT_GAMER, FALSE) != TRUE)
{
flag = FALSE;
switch (sFindThatGamerWhichGame)
{
- case SLOT_MACHINE:
- if (nCoinsPaidOut >= sFindThatGamerCoinsSpent + 200)
- {
- flag = TRUE;
- nCoinsWon = nCoinsPaidOut - sFindThatGamerCoinsSpent;
- break;
- }
- if (sFindThatGamerCoinsSpent >= 100 && nCoinsPaidOut <= sFindThatGamerCoinsSpent - 100)
- {
- nCoinsWon = sFindThatGamerCoinsSpent - nCoinsPaidOut;
- break;
- }
- return;
- case ROULETTE:
- if (nCoinsPaidOut >= sFindThatGamerCoinsSpent + 50)
- {
- flag = TRUE;
- nCoinsWon = nCoinsPaidOut - sFindThatGamerCoinsSpent;
- break;
- }
- if (sFindThatGamerCoinsSpent >= 50 && nCoinsPaidOut <= sFindThatGamerCoinsSpent - 50)
- {
- nCoinsWon = sFindThatGamerCoinsSpent - nCoinsPaidOut;
- break;
- }
- return;
- default:
- return;
+ case SLOT_MACHINE:
+ if (nCoinsPaidOut >= sFindThatGamerCoinsSpent + 200)
+ {
+ flag = TRUE;
+ nCoinsWon = nCoinsPaidOut - sFindThatGamerCoinsSpent;
+ break;
+ }
+ if (sFindThatGamerCoinsSpent >= 100 && nCoinsPaidOut <= sFindThatGamerCoinsSpent - 100)
+ {
+ nCoinsWon = sFindThatGamerCoinsSpent - nCoinsPaidOut;
+ break;
+ }
+ return;
+ case ROULETTE:
+ if (nCoinsPaidOut >= sFindThatGamerCoinsSpent + 50)
+ {
+ flag = TRUE;
+ nCoinsWon = nCoinsPaidOut - sFindThatGamerCoinsSpent;
+ break;
+ }
+ if (sFindThatGamerCoinsSpent >= 50 && nCoinsPaidOut <= sFindThatGamerCoinsSpent - 50)
+ {
+ nCoinsWon = sFindThatGamerCoinsSpent - nCoinsPaidOut;
+ break;
+ }
+ return;
+ default:
+ return;
}
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->findThatGamer.kind = TVSHOW_FIND_THAT_GAMER;
- show->findThatGamer.active = FALSE;
+ show->findThatGamer.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
show->findThatGamer.nCoins = nCoinsWon;
show->findThatGamer.whichGame = sFindThatGamerWhichGame;
show->findThatGamer.won = flag;
StringCopy(show->findThatGamer.playerName, gSaveBlock2Ptr->playerName);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->findThatGamer.language = gGameLanguage;
}
}
@@ -2076,71 +1981,64 @@ void AlertTVThatPlayerPlayedRoulette(u16 nCoinsSpent)
sFindThatGamerCoinsSpent = nCoinsSpent;
}
-static void sub_80EDE98(TVShow *show)
+static void SecretBaseVisit_CalculateDecorationData(TVShow *show)
{
- u8 i;
- u8 j;
+ u8 i, j;
u16 k;
u8 n;
- u8 deco;
+ u8 decoration;
- for (i = 0; i < DECOR_MAX_SECRET_BASE; i ++)
- {
+ for (i = 0; i < DECOR_MAX_SECRET_BASE; i++)
sTV_DecorationsBuffer[i] = 0;
- }
- for (i = 0, n = 0; i < DECOR_MAX_SECRET_BASE; i ++)
+
+ for (i = 0, n = 0; i < DECOR_MAX_SECRET_BASE; i++)
{
- deco = gSaveBlock1Ptr->secretBases[0].decorations[i];
- if (deco)
+ decoration = gSaveBlock1Ptr->secretBases[0].decorations[i];
+ if (decoration)
{
- for (j = 0; j < DECOR_MAX_SECRET_BASE; j ++)
+ for (j = 0; j < DECOR_MAX_SECRET_BASE; j++)
{
if (sTV_DecorationsBuffer[j] == 0)
{
- sTV_DecorationsBuffer[j] = deco;
- n ++;
+ sTV_DecorationsBuffer[j] = decoration;
+ n++;
break;
}
- if (sTV_DecorationsBuffer[j] == deco)
- {
+ if (sTV_DecorationsBuffer[j] == decoration)
break;
- }
}
}
}
+
if (n > 4)
- {
show->secretBaseVisit.nDecorations = 4;
- }
else
- {
show->secretBaseVisit.nDecorations = n;
- }
+
switch (show->secretBaseVisit.nDecorations)
{
- case 0:
- break;
- case 1:
- show->secretBaseVisit.decorations[0] = sTV_DecorationsBuffer[0];
- break;
- default:
- for (k = 0; k < n * n; k ++)
- {
- deco = Random() % n;
- j = Random() % n;
- i = sTV_DecorationsBuffer[deco];
- sTV_DecorationsBuffer[deco] = sTV_DecorationsBuffer[j];
- sTV_DecorationsBuffer[j] = i;
- }
- for (i = 0; i < show->secretBaseVisit.nDecorations; i ++)
- {
- show->secretBaseVisit.decorations[i] = sTV_DecorationsBuffer[i];
- }
- break;
+ case 0:
+ break;
+ case 1:
+ show->secretBaseVisit.decorations[0] = sTV_DecorationsBuffer[0];
+ break;
+ default:
+ for (k = 0; k < n * n; k++)
+ {
+ decoration = Random() % n;
+ j = Random() % n;
+ i = sTV_DecorationsBuffer[decoration];
+ sTV_DecorationsBuffer[decoration] = sTV_DecorationsBuffer[j];
+ sTV_DecorationsBuffer[j] = i;
+ }
+
+ for (i = 0; i < show->secretBaseVisit.nDecorations; i++)
+ show->secretBaseVisit.decorations[i] = sTV_DecorationsBuffer[i];
+ break;
}
}
-static void sub_80EDFB4(TVShow *show)
+static void SecretBaseVisit_CalculatePartyData(TVShow *show)
{
u8 i;
u16 move;
@@ -2149,7 +2047,7 @@ static void sub_80EDFB4(TVShow *show)
u8 nPokemon;
u16 sum;
- for (i = 0, nPokemon = 0; i < PARTY_SIZE; i ++)
+ for (i = 0, nPokemon = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
{
@@ -2160,128 +2058,119 @@ static void sub_80EDFB4(TVShow *show)
if (move != MOVE_NONE)
{
sTV_SecretBaseVisitMovesTemp[nMoves] = move;
- nMoves ++;
+ nMoves++;
}
move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE2);
if (move != MOVE_NONE)
{
sTV_SecretBaseVisitMovesTemp[nMoves] = move;
- nMoves ++;
+ nMoves++;
}
move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE3);
if (move != MOVE_NONE)
{
sTV_SecretBaseVisitMovesTemp[nMoves] = move;
- nMoves ++;
+ nMoves++;
}
move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE4);
if (move != MOVE_NONE)
{
sTV_SecretBaseVisitMovesTemp[nMoves] = move;
- nMoves ++;
+ nMoves++;
}
sTV_SecretBaseVisitMonsTemp[nPokemon].move = sTV_SecretBaseVisitMovesTemp[Random() % nMoves];
- nPokemon ++;
+ nPokemon++;
}
}
- for (i = 0, sum = 0; i < nPokemon; i ++)
- {
+ for (i = 0, sum = 0; i < nPokemon; i++)
sum += sTV_SecretBaseVisitMonsTemp[i].level;
- }
+
show->secretBaseVisit.avgLevel = sum / nPokemon;
j = Random() % nPokemon;
show->secretBaseVisit.species = sTV_SecretBaseVisitMonsTemp[j].species;
show->secretBaseVisit.move = sTV_SecretBaseVisitMonsTemp[j].move;
}
-void TV_PutSecretBaseVisitOnTheAir(void)
+void TryPutSecretBaseVisitOnAir(void)
{
TVShow *show;
- HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_SECRET_BASE_VISIT, TRUE);
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ IsRecordMixShowAlreadySpawned(TVSHOW_SECRET_BASE_VISIT, TRUE); // Delete old version of show
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->secretBaseVisit.kind = TVSHOW_SECRET_BASE_VISIT;
- show->secretBaseVisit.active = FALSE;
+ show->secretBaseVisit.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->secretBaseVisit.playerName, gSaveBlock2Ptr->playerName);
- sub_80EDE98(show);
- sub_80EDFB4(show);
- tv_store_id_3x(show);
+ SecretBaseVisit_CalculateDecorationData(show);
+ SecretBaseVisit_CalculatePartyData(show);
+ StorePlayerIdInRecordMixShow(show);
show->secretBaseVisit.language = gGameLanguage;
}
}
-void sub_80EE184(void)
+void TryPutBreakingNewsOnAir(void)
{
TVShow *show;
u8 i;
u16 balls;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_BREAKING_NEWS, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_BREAKING_NEWS, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->breakingNews.kind = TVSHOW_BREAKING_NEWS;
- show->breakingNews.active = FALSE;
+ show->breakingNews.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
balls = 0;
- for (i = 0; i < POKEBALL_COUNT - 1; i ++)
- {
+ for (i = 0; i < POKEBALL_COUNT - 1; i++)
balls += gBattleResults.catchAttempts[i];
- }
+
if (gBattleResults.usedMasterBall)
- {
- balls ++;
- }
+ balls++;
show->breakingNews.location = gMapHeader.regionMapSectionId;
StringCopy(show->breakingNews.playerName, gSaveBlock2Ptr->playerName);
show->breakingNews.poke1Species = gBattleResults.playerMon1Species;
switch (gBattleOutcome)
{
- case B_OUTCOME_LOST:
- case B_OUTCOME_DREW:
- show->breakingNews.kind = TVSHOW_OFF_AIR;
- return;
- case B_OUTCOME_CAUGHT:
- show->breakingNews.outcome = 0;
- break;
- case B_OUTCOME_WON:
- show->breakingNews.outcome = 1;
- break;
- case B_OUTCOME_RAN:
- case B_OUTCOME_PLAYER_TELEPORTED:
- case B_OUTCOME_NO_SAFARI_BALLS:
- show->breakingNews.outcome = 2;
- break;
- case B_OUTCOME_MON_FLED:
- case B_OUTCOME_MON_TELEPORTED:
- show->breakingNews.outcome = 3;
- break;
+ case B_OUTCOME_LOST:
+ case B_OUTCOME_DREW:
+ show->breakingNews.kind = TVSHOW_OFF_AIR;
+ return;
+ case B_OUTCOME_CAUGHT:
+ show->breakingNews.outcome = 0;
+ break;
+ case B_OUTCOME_WON:
+ show->breakingNews.outcome = 1;
+ break;
+ case B_OUTCOME_RAN:
+ case B_OUTCOME_PLAYER_TELEPORTED:
+ case B_OUTCOME_NO_SAFARI_BALLS:
+ show->breakingNews.outcome = 2;
+ break;
+ case B_OUTCOME_MON_FLED:
+ case B_OUTCOME_MON_TELEPORTED:
+ show->breakingNews.outcome = 3;
+ break;
}
show->breakingNews.lastOpponentSpecies = gBattleResults.lastOpponentSpecies;
switch (show->breakingNews.outcome)
{
- case 0:
- if (gBattleResults.usedMasterBall)
- {
- show->breakingNews.caughtMonBall = ITEM_MASTER_BALL;
- }
- else
- {
- show->breakingNews.caughtMonBall = gBattleResults.caughtMonBall;
- }
- show->breakingNews.balls = balls;
- break;
- case 1:
- show->breakingNews.lastUsedMove = gBattleResults.lastUsedMovePlayer;
- break;
- case 2:
- break;
- case 3:
- break;
+ case 0:
+ if (gBattleResults.usedMasterBall)
+ show->breakingNews.caughtMonBall = ITEM_MASTER_BALL;
+ else
+ show->breakingNews.caughtMonBall = gBattleResults.caughtMonBall;
+ show->breakingNews.balls = balls;
+ break;
+ case 1:
+ show->breakingNews.lastUsedMove = gBattleResults.lastUsedMovePlayer;
+ break;
+ case 2:
+ case 3:
+ break;
}
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->breakingNews.language = gGameLanguage;
}
}
@@ -2290,16 +2179,16 @@ void TryPutLotteryWinnerReportOnAir(void)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_LOTTO_WINNER, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_LOTTO_WINNER, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->lottoWinner.kind = TVSHOW_LOTTO_WINNER;
- show->lottoWinner.active = FALSE;
+ show->lottoWinner.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->lottoWinner.playerName, gSaveBlock2Ptr->playerName);
show->lottoWinner.whichPrize = 4 - gSpecialVar_0x8004;
show->lottoWinner.item = gSpecialVar_0x8005;
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->lottoWinner.language = gGameLanguage;
}
}
@@ -2310,45 +2199,45 @@ void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIdx, const u16
u8 i;
u8 j;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_BATTLE_SEMINAR, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_BATTLE_SEMINAR, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->battleSeminar.kind = TVSHOW_BATTLE_SEMINAR;
- show->battleSeminar.active = FALSE;
+ show->battleSeminar.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->battleSeminar.playerName, gSaveBlock2Ptr->playerName);
show->battleSeminar.foeSpecies = foeSpecies;
show->battleSeminar.species = species;
show->battleSeminar.move = movePtr[moveIdx];
- for (i = 0, j = 0; i < MAX_MON_MOVES; i ++)
+ for (i = 0, j = 0; i < MAX_MON_MOVES; i++)
{
if (i != moveIdx && movePtr[i])
{
show->battleSeminar.otherMoves[j] = movePtr[i];
- j ++;
+ j++;
}
}
show->battleSeminar.nOtherMoves = j;
show->battleSeminar.betterMove = betterMove;
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->battleSeminar.language = gGameLanguage;
}
}
-void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed)
+void TryPutSafariFanClubOnAir(u8 nMonsCaught, u8 nPkblkUsed)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_SAFARI_FAN_CLUB, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_SAFARI_FAN_CLUB, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->safariFanClub.kind = TVSHOW_SAFARI_FAN_CLUB;
- show->safariFanClub.active = FALSE;
+ show->safariFanClub.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->safariFanClub.playerName, gSaveBlock2Ptr->playerName);
show->safariFanClub.nMonsCaught = nMonsCaught;
show->safariFanClub.nPkblkUsed = nPkblkUsed;
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->safariFanClub.language = gGameLanguage;
}
}
@@ -2357,27 +2246,23 @@ void TryPutSpotTheCutiesOnAir(struct Pokemon *pokemon, u8 ribbonMonDataIdx)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_CUTIES, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_CUTIES, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->cuties.kind = TVSHOW_CUTIES;
- show->cuties.active = FALSE;
+ show->cuties.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->cuties.playerName, gSaveBlock2Ptr->playerName);
GetMonData(pokemon, MON_DATA_NICKNAME, show->cuties.nickname);
StripExtCtrlCodes(show->cuties.nickname);
show->cuties.nRibbons = GetRibbonCount(pokemon);
show->cuties.selectedRibbon = MonDataIdxToRibbon(ribbonMonDataIdx);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->cuties.language = gGameLanguage;
if (show->cuties.language == LANGUAGE_JAPANESE || GetMonData(pokemon, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE)
- {
show->cuties.pokemonNameLanguage = LANGUAGE_JAPANESE;
- }
else
- {
show->cuties.pokemonNameLanguage = GetMonData(pokemon, MON_DATA_LANGUAGE);
- }
}
}
@@ -2428,31 +2313,31 @@ static u8 MonDataIdxToRibbon(u8 monDataIdx)
return CHAMPION_RIBBON;
}
-void TrySetUpTrainerFanClubSpecial(void)
+void TryPutTrainerFanClubOnAir(void)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
- if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_TRAINER_FAN_CLUB, FALSE) != TRUE)
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
+ if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_TRAINER_FAN_CLUB, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->trainerFanClub.kind = TVSHOW_TRAINER_FAN_CLUB;
- show->trainerFanClub.active = FALSE;
+ show->trainerFanClub.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->trainerFanClub.playerName, gSaveBlock2Ptr->playerName);
show->trainerFanClub.words[0] = gSaveBlock1Ptr->easyChatProfile[0];
show->trainerFanClub.words[1] = gSaveBlock1Ptr->easyChatProfile[1];
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->trainerFanClub.language = gGameLanguage;
}
}
bool8 ShouldHideFanClubInterviewer(void)
{
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot == -1)
return TRUE;
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_SPECIAL);
+ TryReplaceOldTVShowOfKind(TVSHOW_FAN_CLUB_SPECIAL);
if (gSpecialVar_Result == TRUE)
return TRUE;
@@ -2468,25 +2353,24 @@ bool8 ShouldAirFrontierTVShow(void)
u8 showIdx;
TVShow *shows;
- if (HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_FRONTIER, FALSE) == TRUE)
+ if (IsRecordMixShowAlreadySpawned(TVSHOW_FRONTIER, FALSE) == TRUE)
{
shows = gSaveBlock1Ptr->tvShows;
playerId = GetPlayerIDAsU32();
- for (showIdx = 5; showIdx < LAST_TVSHOW_IDX; showIdx ++)
+ for (showIdx = NUM_NORMAL_TVSHOW_SLOTS; showIdx < LAST_TVSHOW_IDX; showIdx++)
{
if (shows[showIdx].common.kind == TVSHOW_FRONTIER && (playerId & 0xFF) == shows[showIdx].common.trainerIdLo && ((playerId >> 8) & 0xFF) == shows[showIdx].common.trainerIdHi)
{
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, showIdx);
- sub_80EF93C(gSaveBlock1Ptr->tvShows);
+ CompactTVShowArray(gSaveBlock1Ptr->tvShows);
return TRUE;
}
}
}
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot == -1)
- {
return FALSE;
- }
+
return TRUE;
}
@@ -2494,47 +2378,47 @@ void TryPutFrontierTVShowOnAir(u16 winStreak, u8 facilityAndMode)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->frontier.kind = TVSHOW_FRONTIER;
- show->frontier.active = FALSE;
+ show->frontier.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->frontier.playerName, gSaveBlock2Ptr->playerName);
show->frontier.winStreak = winStreak;
- show->frontier.facility = facilityAndMode;
+ show->frontier.facilityAndMode = facilityAndMode;
switch (facilityAndMode)
{
- case 1:
- case 5:
- case 6:
- case 7:
- case 8:
- case 9:
- case 10:
- case 11:
- case 12:
- case 13:
- show->frontier.species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL);
- show->frontier.species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
- show->frontier.species3 = GetMonData(&gPlayerParty[2], MON_DATA_SPECIES, NULL);
- break;
- case 2:
- show->frontier.species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL);
- show->frontier.species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
- show->frontier.species3 = GetMonData(&gPlayerParty[2], MON_DATA_SPECIES, NULL);
- show->frontier.species4 = GetMonData(&gPlayerParty[3], MON_DATA_SPECIES, NULL);
- break;
- case 3:
- show->frontier.species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL);
- show->frontier.species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
- break;
- case 4:
- show->frontier.species1 = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[0] - 1], MON_DATA_SPECIES, NULL);
- show->frontier.species2 = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[1] - 1], MON_DATA_SPECIES, NULL);
- break;
+ case FRONTIER_SHOW_TOWER_SINGLES:
+ case FRONTIER_SHOW_DOME_SINGLES:
+ case FRONTIER_SHOW_DOME_DOUBLES:
+ case FRONTIER_SHOW_FACTORY_SINGLES:
+ case FRONTIER_SHOW_FACTORY_DOUBLES:
+ case FRONTIER_SHOW_PIKE:
+ case FRONTIER_SHOW_ARENA:
+ case FRONTIER_SHOW_PALACE_SINGLES:
+ case FRONTIER_SHOW_PALACE_DOUBLES:
+ case FRONTIER_SHOW_PYRAMID:
+ show->frontier.species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL);
+ show->frontier.species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
+ show->frontier.species3 = GetMonData(&gPlayerParty[2], MON_DATA_SPECIES, NULL);
+ break;
+ case FRONTIER_SHOW_TOWER_DOUBLES:
+ show->frontier.species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL);
+ show->frontier.species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
+ show->frontier.species3 = GetMonData(&gPlayerParty[2], MON_DATA_SPECIES, NULL);
+ show->frontier.species4 = GetMonData(&gPlayerParty[3], MON_DATA_SPECIES, NULL);
+ break;
+ case FRONTIER_SHOW_TOWER_MULTIS:
+ show->frontier.species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL);
+ show->frontier.species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
+ break;
+ case FRONTIER_SHOW_TOWER_LINK_MULTIS:
+ show->frontier.species1 = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[0] - 1], MON_DATA_SPECIES, NULL);
+ show->frontier.species2 = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[1] - 1], MON_DATA_SPECIES, NULL);
+ break;
}
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->frontier.language = gGameLanguage;
}
}
@@ -2544,14 +2428,14 @@ void TryPutSecretBaseSecretsOnAir(void)
TVShow *show;
u8 strbuf[32];
- if (HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_SECRET_BASE_SECRETS, FALSE) != TRUE)
+ if (IsRecordMixShowAlreadySpawned(TVSHOW_SECRET_BASE_SECRETS, FALSE) != TRUE)
{
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->secretBaseSecrets.kind = TVSHOW_SECRET_BASE_SECRETS;
- show->secretBaseSecrets.active = FALSE;
+ show->secretBaseSecrets.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->secretBaseSecrets.playerName, gSaveBlock2Ptr->playerName);
show->secretBaseSecrets.stepsInBase = VarGet(VAR_SECRET_BASE_STEP_COUNTER);
CopyCurSecretBaseOwnerName_StrVar1();
@@ -2560,53 +2444,50 @@ void TryPutSecretBaseSecretsOnAir(void)
StringCopy(show->secretBaseSecrets.baseOwnersName, strbuf);
show->secretBaseSecrets.item = VarGet(VAR_SECRET_BASE_LAST_ITEM_USED);
show->secretBaseSecrets.flags = VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) + (VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) << 16);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->secretBaseSecrets.language = gGameLanguage;
if (show->secretBaseSecrets.language == LANGUAGE_JAPANESE || gSaveBlock1Ptr->secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].language == LANGUAGE_JAPANESE)
- {
show->secretBaseSecrets.baseOwnersNameLanguage = LANGUAGE_JAPANESE;
- }
else
- {
show->secretBaseSecrets.baseOwnersNameLanguage = gSaveBlock1Ptr->secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].language;
- }
}
}
}
-static void sub_80EEB98(u16 days)
+// Check var thresholds required to trigger the Number One show
+// The vars are reset afterwards regardless
+static void ResolveNumberOneShow(u16 days)
{
u8 i;
- for (i = 0; i < ARRAY_COUNT(sNumberOneVarsAndThresholds); i ++)
+ for (i = 0; i < ARRAY_COUNT(sNumberOneVarsAndThresholds); i++)
{
if (VarGet(sNumberOneVarsAndThresholds[i][0]) >= sNumberOneVarsAndThresholds[i][1])
{
- sub_80EEBF4(i);
+ TryPutNumberOneOnAir(i);
break;
}
}
- for (i = 0; i < ARRAY_COUNT(sNumberOneVarsAndThresholds); i ++)
- {
+
+ for (i = 0; i < ARRAY_COUNT(sNumberOneVarsAndThresholds); i++)
VarSet(sNumberOneVarsAndThresholds[i][0], 0);
- }
}
-static void sub_80EEBF4(u8 actionIdx)
+static void TryPutNumberOneOnAir(u8 actionIdx)
{
TVShow *show;
- HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_NUMBER_ONE, TRUE);
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ IsRecordMixShowAlreadySpawned(TVSHOW_NUMBER_ONE, TRUE); // Delete old version of show
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->numberOne.kind = TVSHOW_NUMBER_ONE;
- show->numberOne.active = FALSE;
+ show->numberOne.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->numberOne.playerName, gSaveBlock2Ptr->playerName);
show->numberOne.actionIdx = actionIdx;
show->numberOne.count = VarGet(sNumberOneVarsAndThresholds[actionIdx][0]);
- tv_store_id_3x(show);
+ StorePlayerIdInRecordMixShow(show);
show->numberOne.language = gGameLanguage;
}
}
@@ -2648,72 +2529,66 @@ void IncrementDailyBattlePoints(u16 delta)
// PokeNews
-static void sub_80EED88(void)
+static void TryPutRandomPokeNewsOnAir(void)
{
- u8 newsKind;
-
if (FlagGet(FLAG_SYS_GAME_CLEAR))
{
- sCurTVShowSlot = sub_80EEE30(gSaveBlock1Ptr->pokeNews);
+ sCurTVShowSlot = GetFirstEmptyPokeNewsSlot(gSaveBlock1Ptr->pokeNews);
if (sCurTVShowSlot != -1 && rbernoulli(1, 100) != TRUE)
{
- newsKind = (Random() % 4) + POKENEWS_SLATEPORT;
- if (sub_80EF0E4(newsKind) != TRUE)
+ u8 newsKind = (Random() % NUM_POKENEWS_TYPES) + POKENEWS_SLATEPORT;
+ if (IsAddingPokeNewsDisallowed(newsKind) != TRUE)
{
gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].kind = newsKind;
gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].days = 4;
- gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].state = TRUE;
+ gSaveBlock1Ptr->pokeNews[sCurTVShowSlot].state = 1;
}
}
}
}
-s8 sub_80EEE30(PokeNews *pokeNews)
+static s8 GetFirstEmptyPokeNewsSlot(PokeNews *pokeNews)
{
s8 i;
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
- if (pokeNews[i].kind == 0)
- {
+ if (pokeNews[i].kind == POKENEWS_NONE)
return i;
- }
}
return -1;
}
-void ClearPokemonNews(void)
+static void ClearPokeNews(void)
{
u8 i;
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
- {
- ClearPokemonNewsI(i);
- }
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
+ ClearPokeNewsBySlot(i);
}
-void ClearPokemonNewsI(u8 i)
+static void ClearPokeNewsBySlot(u8 i)
{
gSaveBlock1Ptr->pokeNews[i].kind = POKENEWS_NONE;
gSaveBlock1Ptr->pokeNews[i].state = FALSE;
gSaveBlock1Ptr->pokeNews[i].days = 0;
}
-static void sub_80EEEB8(void)
+static void CompactPokeNews(void)
{
u8 i;
u8 j;
- for (i = 0; i < POKE_NEWS_COUNT - 1; i ++)
+ for (i = 0; i < POKE_NEWS_COUNT - 1; i++)
{
if (gSaveBlock1Ptr->pokeNews[i].kind == POKENEWS_NONE)
{
- for (j = i + 1; j < POKE_NEWS_COUNT; j ++)
+ for (j = i + 1; j < POKE_NEWS_COUNT; j++)
{
if (gSaveBlock1Ptr->pokeNews[j].kind != POKENEWS_NONE)
{
gSaveBlock1Ptr->pokeNews[i] = gSaveBlock1Ptr->pokeNews[j];
- ClearPokemonNewsI(j);
+ ClearPokeNewsBySlot(j);
break;
}
}
@@ -2721,16 +2596,16 @@ static void sub_80EEEB8(void)
}
}
-u8 FindAnyTVNewsOnTheAir(void)
+static u8 FindAnyPokeNewsOnTheAir(void)
{
u8 i;
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
- if (gSaveBlock1Ptr->pokeNews[i].kind != POKENEWS_NONE && gSaveBlock1Ptr->pokeNews[i].state == TRUE && gSaveBlock1Ptr->pokeNews[i].days < 3)
- {
+ if (gSaveBlock1Ptr->pokeNews[i].kind != POKENEWS_NONE
+ && gSaveBlock1Ptr->pokeNews[i].state == 1
+ && gSaveBlock1Ptr->pokeNews[i].days < 3)
return i;
- }
}
return 0xFF;
}
@@ -2740,7 +2615,7 @@ void DoPokeNews(void)
u8 i;
u16 n;
- i = FindAnyTVNewsOnTheAir();
+ i = FindAnyPokeNewsOnTheAir();
if (i == 0xFF)
{
gSpecialVar_Result = FALSE;
@@ -2751,13 +2626,9 @@ void DoPokeNews(void)
{
gSaveBlock1Ptr->pokeNews[i].state = 2;
if (gLocalTime.hours < 20)
- {
ShowFieldMessage(sPokeNewsTextGroup_Ongoing[gSaveBlock1Ptr->pokeNews[i].kind]);
- }
else
- {
ShowFieldMessage(sPokeNewsTextGroup_Ending[gSaveBlock1Ptr->pokeNews[i].kind]);
- }
}
else
{
@@ -2775,101 +2646,92 @@ bool8 GetPriceReduction(u8 newsKind)
u8 i;
if (newsKind == POKENEWS_NONE)
- {
return FALSE;
- }
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
+
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1Ptr->pokeNews[i].kind == newsKind)
{
if (gSaveBlock1Ptr->pokeNews[i].state == 2 && IsPriceDiscounted(newsKind))
- {
return TRUE;
- }
+
return FALSE;
}
}
return FALSE;
}
-bool8 IsPriceDiscounted(u8 newsKind)
+static bool8 IsPriceDiscounted(u8 newsKind)
{
switch (newsKind)
{
- case POKENEWS_SLATEPORT:
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SLATEPORT_CITY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SLATEPORT_CITY) && gSpecialVar_LastTalked == 25)
- {
- return TRUE;
- }
- return FALSE;
- case POKENEWS_LILYCOVE:
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP))
- {
- return TRUE;
- }
- return FALSE;
+ case POKENEWS_SLATEPORT:
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SLATEPORT_CITY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SLATEPORT_CITY) && gSpecialVar_LastTalked == 25)
+ return TRUE;
+ return FALSE;
+ case POKENEWS_LILYCOVE:
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP))
+ return TRUE;
+ return FALSE;
}
return TRUE;
}
-bool8 sub_80EF0E4(u8 newsKind)
+static bool8 IsAddingPokeNewsDisallowed(u8 newsKind)
{
u8 i;
if (newsKind == POKENEWS_NONE)
- {
return TRUE;
- }
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
+
+ // Check if this type of news is already active
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1Ptr->pokeNews[i].kind == newsKind)
- {
return TRUE;
- }
}
return FALSE;
}
-static void sub_80EF120(u16 days)
+static void UpdatePokeNewsTimeLeft(u16 days)
{
u8 i;
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1Ptr->pokeNews[i].kind != POKENEWS_NONE)
{
if (gSaveBlock1Ptr->pokeNews[i].days < days)
{
- ClearPokemonNewsI(i);
+ ClearPokeNewsBySlot(i);
}
else
{
if (gSaveBlock1Ptr->pokeNews[i].state == 0 && FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE)
- {
gSaveBlock1Ptr->pokeNews[i].state = 1;
- }
+
gSaveBlock1Ptr->pokeNews[i].days -= days;
}
}
}
- sub_80EEEB8();
+ CompactPokeNews();
}
void CopyContestRankToStringVar(u8 varIdx, u8 rank)
{
switch (rank)
{
- case CONTEST_RANK_NORMAL:
- StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_NORMAL]);
- break;
- case CONTEST_RANK_SUPER:
- StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SUPER]);
- break;
- case CONTEST_RANK_HYPER:
- StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_HYPER]);
- break;
- case CONTEST_RANK_MASTER:
- StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_MASTER]);
- break;
+ case CONTEST_RANK_NORMAL:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_NORMAL]);
+ break;
+ case CONTEST_RANK_SUPER:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SUPER]);
+ break;
+ case CONTEST_RANK_HYPER:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_HYPER]);
+ break;
+ case CONTEST_RANK_MASTER:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_MASTER]);
+ break;
}
}
@@ -2877,21 +2739,21 @@ void CopyContestCategoryToStringVar(u8 varIdx, u8 category)
{
switch (category)
{
- case CONTEST_CATEGORY_COOL:
- StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_COOL]);
- break;
- case CONTEST_CATEGORY_BEAUTY:
- StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_BEAUTY]);
- break;
- case CONTEST_CATEGORY_CUTE:
- StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_CUTE]);
- break;
- case CONTEST_CATEGORY_SMART:
- StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SMART]);
- break;
- case CONTEST_CATEGORY_TOUGH:
- StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_TOUGH]);
- break;
+ case CONTEST_CATEGORY_COOL:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_COOL]);
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_BEAUTY]);
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_CUTE]);
+ break;
+ case CONTEST_CATEGORY_SMART:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SMART]);
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_TOUGH]);
+ break;
}
}
@@ -2903,11 +2765,9 @@ void SetContestCategoryStringVarForInterview(void)
CopyContestCategoryToStringVar(1, show->bravoTrainer.contestCategory);
}
-void TV_PrintIntToStringVar(u8 varIdx, int value)
+void ConvertIntToDecimalString(u8 varIdx, int value)
{
- int nDigits;
-
- nDigits = CountDigits(value);
+ int nDigits = CountDigits(value);
ConvertIntToDecimalStringN(gTVStringVarPtrs[varIdx], value, STR_CONV_MODE_LEFT_ALIGN, nDigits);
}
@@ -2931,24 +2791,19 @@ static void sub_80EF40C(u8 varIdx, TVShow *show)
int price;
price = 0;
- for (i = 0; i < 3; i ++)
+ for (i = 0; i < SMARTSHOPPER_NUM_ITEMS; i++)
{
if (show->smartshopperShow.itemIds[i] != ITEM_NONE)
- {
price += ItemId_GetPrice(show->smartshopperShow.itemIds[i]) * show->smartshopperShow.itemAmounts[i];
- }
}
+
if (show->smartshopperShow.priceReduced == TRUE)
- {
- TV_PrintIntToStringVar(varIdx, price >> 1);
- }
+ ConvertIntToDecimalString(varIdx, price >> 1);
else
- {
- TV_PrintIntToStringVar(varIdx, price);
- }
+ ConvertIntToDecimalString(varIdx, price);
}
-bool8 HasMixableShowAlreadyBeenSpawnedWithPlayerID(u8 kind, bool8 flag)
+static bool8 IsRecordMixShowAlreadySpawned(u8 kind, bool8 delete)
{
u32 playerId;
TVShow *shows;
@@ -2956,14 +2811,16 @@ bool8 HasMixableShowAlreadyBeenSpawnedWithPlayerID(u8 kind, bool8 flag)
shows = gSaveBlock1Ptr->tvShows;
playerId = GetPlayerIDAsU32();
- for (i = 5; i < LAST_TVSHOW_IDX; i ++)
+ for (i = NUM_NORMAL_TVSHOW_SLOTS; i < LAST_TVSHOW_IDX; i++)
{
- if (shows[i].common.kind == kind && (playerId & 0xFF) == shows[i].common.trainerIdLo && ((playerId >> 8) & 0xFF) == shows[i].common.trainerIdHi)
+ if (shows[i].common.kind == kind
+ && (playerId & 0xFF) == shows[i].common.trainerIdLo
+ && ((playerId >> 8) & 0xFF) == shows[i].common.trainerIdHi)
{
- if (flag == TRUE)
+ if (delete == TRUE)
{
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, i);
- sub_80EF93C(gSaveBlock1Ptr->tvShows);
+ CompactTVShowArray(gSaveBlock1Ptr->tvShows);
}
return TRUE;
}
@@ -2971,16 +2828,15 @@ bool8 HasMixableShowAlreadyBeenSpawnedWithPlayerID(u8 kind, bool8 flag)
return FALSE;
}
-void TV_SortPurchasesByQuantity(void)
+static void SortPurchasesByQuantity(void)
{
- u8 i;
- u8 j;
+ u8 i, j;
u16 tmpId;
u16 tmpQn;
- for (i = 0; i < 2; i ++)
+ for (i = 0; i < SMARTSHOPPER_NUM_ITEMS - 1; i++)
{
- for (j = i + 1; j < 3; j ++)
+ for (j = i + 1; j < SMARTSHOPPER_NUM_ITEMS; j++)
{
if (gMartPurchaseHistory[i].quantity < gMartPurchaseHistory[j].quantity)
{
@@ -2995,27 +2851,31 @@ void TV_SortPurchasesByQuantity(void)
}
}
-void FindActiveBroadcastByShowType_SetScriptResult(u8 kind)
+static void TryReplaceOldTVShowOfKind(u8 kind)
{
u8 i;
- for (i = 0; i < 5; i ++)
+ for (i = 0; i < NUM_NORMAL_TVSHOW_SLOTS; i++)
{
if (gSaveBlock1Ptr->tvShows[i].common.kind == kind)
{
if (gSaveBlock1Ptr->tvShows[i].common.active == TRUE)
{
+ // Old TV show is still active, don't replace
gSpecialVar_Result = TRUE;
}
else
{
+ // Old TV show is inactive, replace it and get new slot
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, i);
- sub_80EF93C(gSaveBlock1Ptr->tvShows);
- sub_80EFA88();
+ CompactTVShowArray(gSaveBlock1Ptr->tvShows);
+ Script_FindFirstEmptyNormalTVShowSlot();
}
return;
}
}
- sub_80EFA88();
+
+ // Old TV show doesn't exist, just get new slot
+ Script_FindFirstEmptyNormalTVShowSlot();
}
void InterviewBefore(void)
@@ -3023,42 +2883,42 @@ void InterviewBefore(void)
gSpecialVar_Result = FALSE;
switch (gSpecialVar_0x8005)
{
- case TVSHOW_FAN_CLUB_LETTER:
- InterviewBefore_FanClubLetter();
- break;
- case TVSHOW_RECENT_HAPPENINGS:
- InterviewBefore_RecentHappenings();
- break;
- case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
- InterviewBefore_PkmnFanClubOpinions();
- break;
- case TVSHOW_UNKN_SHOWTYPE_04:
- InterviewBefore_Dummy();
- break;
- case TVSHOW_NAME_RATER_SHOW:
- InterviewBefore_NameRater();
- break;
- case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
- InterviewBefore_BravoTrainerPkmnProfile();
- break;
- case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
- InterviewBefore_BravoTrainerBTProfile();
- break;
- case TVSHOW_CONTEST_LIVE_UPDATES:
- InterviewBefore_ContestLiveUpdates();
- break;
- case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
- InterviewBefore_3CheersForPokeblocks();
- break;
- case TVSHOW_FAN_CLUB_SPECIAL:
- InterviewBefore_FanClubSpecial();
- break;
+ case TVSHOW_FAN_CLUB_LETTER:
+ InterviewBefore_FanClubLetter();
+ break;
+ case TVSHOW_RECENT_HAPPENINGS:
+ InterviewBefore_RecentHappenings();
+ break;
+ case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
+ InterviewBefore_PkmnFanClubOpinions();
+ break;
+ case TVSHOW_DUMMY:
+ InterviewBefore_Dummy();
+ break;
+ case TVSHOW_NAME_RATER_SHOW:
+ InterviewBefore_NameRater();
+ break;
+ case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
+ InterviewBefore_BravoTrainerPkmnProfile();
+ break;
+ case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
+ InterviewBefore_BravoTrainerBTProfile();
+ break;
+ case TVSHOW_CONTEST_LIVE_UPDATES:
+ InterviewBefore_ContestLiveUpdates();
+ break;
+ case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
+ InterviewBefore_3CheersForPokeblocks();
+ break;
+ case TVSHOW_FAN_CLUB_SPECIAL:
+ InterviewBefore_FanClubSpecial();
+ break;
}
}
static void InterviewBefore_FanClubLetter(void)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_LETTER);
+ TryReplaceOldTVShowOfKind(TVSHOW_FAN_CLUB_LETTER);
if (!gSpecialVar_Result)
{
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL)]);
@@ -3068,7 +2928,7 @@ static void InterviewBefore_FanClubLetter(void)
static void InterviewBefore_RecentHappenings(void)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_RECENT_HAPPENINGS);
+ TryReplaceOldTVShowOfKind(TVSHOW_RECENT_HAPPENINGS);
if (!gSpecialVar_Result)
{
InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].recentHappenings.words, 6);
@@ -3077,7 +2937,7 @@ static void InterviewBefore_RecentHappenings(void)
static void InterviewBefore_PkmnFanClubOpinions(void)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_PKMN_FAN_CLUB_OPINIONS);
+ TryReplaceOldTVShowOfKind(TVSHOW_PKMN_FAN_CLUB_OPINIONS);
if (!gSpecialVar_Result)
{
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL)]);
@@ -3094,44 +2954,38 @@ static void InterviewBefore_Dummy(void)
static void InterviewBefore_NameRater(void)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_NAME_RATER_SHOW);
+ TryReplaceOldTVShowOfKind(TVSHOW_NAME_RATER_SHOW);
}
static void InterviewBefore_BravoTrainerPkmnProfile(void)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE);
+ TryReplaceOldTVShowOfKind(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE);
if (!gSpecialVar_Result)
- {
InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainer.words, 2);
- }
}
static void InterviewBefore_ContestLiveUpdates(void)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_CONTEST_LIVE_UPDATES);
+ TryReplaceOldTVShowOfKind(TVSHOW_CONTEST_LIVE_UPDATES);
}
static void InterviewBefore_3CheersForPokeblocks(void)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_3_CHEERS_FOR_POKEBLOCKS);
+ TryReplaceOldTVShowOfKind(TVSHOW_3_CHEERS_FOR_POKEBLOCKS);
}
static void InterviewBefore_BravoTrainerBTProfile(void)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE);
+ TryReplaceOldTVShowOfKind(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE);
if (!gSpecialVar_Result)
- {
InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].bravoTrainerTower.words, 1);
- }
}
static void InterviewBefore_FanClubSpecial(void)
{
- FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_SPECIAL);
+ TryReplaceOldTVShowOfKind(TVSHOW_FAN_CLUB_SPECIAL);
if (!gSpecialVar_Result)
- {
InitializeEasyChatWordArray(gSaveBlock1Ptr->tvShows[sCurTVShowSlot].fanClubSpecial.words, 1);
- }
}
static bool8 IsPartyMonNicknamedOrNotEnglish(u8 monIdx)
@@ -3143,9 +2997,8 @@ static bool8 IsPartyMonNicknamedOrNotEnglish(u8 monIdx)
GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1);
language = GetMonData(pokemon, MON_DATA_LANGUAGE, &language);
if (language == GAME_LANGUAGE && !StringCompare(gSpeciesNames[GetMonData(pokemon, MON_DATA_SPECIES, NULL)], gStringVar1))
- {
return FALSE;
- }
+
return TRUE;
}
@@ -3154,28 +3007,27 @@ bool8 IsLeadMonNicknamedOrNotEnglish(void)
return IsPartyMonNicknamedOrNotEnglish(GetLeadMonIndex());
}
-void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx)
+static void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx)
{
u8 i;
shows[idx].commonInit.kind = TVSHOW_OFF_AIR;
shows[idx].commonInit.active = FALSE;
- for (i = 0; i < ARRAY_COUNT(shows[idx].commonInit.pad02); i++)
- {
- shows[idx].commonInit.pad02[i] = 0;
- }
+ for (i = 0; i < ARRAY_COUNT(shows[idx].commonInit.data); i++)
+ shows[idx].commonInit.data[i] = 0;
}
-static void sub_80EF93C(TVShow *shows)
+static void CompactTVShowArray(TVShow *shows)
{
u8 i;
u8 j;
- for (i = 0; i < 4; i ++)
+ // Compact normal TV shows
+ for (i = 0; i < NUM_NORMAL_TVSHOW_SLOTS - 1; i++)
{
if (shows[i].common.kind == TVSHOW_OFF_AIR)
{
- for (j = i + 1; j < 5; j ++)
+ for (j = i + 1; j < NUM_NORMAL_TVSHOW_SLOTS; j++)
{
if (shows[j].common.kind != TVSHOW_OFF_AIR)
{
@@ -3186,11 +3038,13 @@ static void sub_80EF93C(TVShow *shows)
}
}
}
- for (i = 5; i < LAST_TVSHOW_IDX; i ++)
+
+ // Compact Record Mix TV shows
+ for (i = NUM_NORMAL_TVSHOW_SLOTS; i < LAST_TVSHOW_IDX; i++)
{
if (shows[i].common.kind == TVSHOW_OFF_AIR)
{
- for (j = i + 1; j < LAST_TVSHOW_IDX; j ++)
+ for (j = i + 1; j < LAST_TVSHOW_IDX; j++)
{
if (shows[j].common.kind != TVSHOW_OFF_AIR)
{
@@ -3203,16 +3057,16 @@ static void sub_80EF93C(TVShow *shows)
}
}
-u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer_AndPrintName(u8 varIdx, u16 passedSpecies)
+static u16 GetRandomDifferentSpeciesAndNameSeenByPlayer(u8 varIdx, u16 passedSpecies)
{
u16 species;
- species = TV_GetSomeOtherSpeciesAlreadySeenByPlayer(passedSpecies);
+ species = GetRandomDifferentSpeciesSeenByPlayer(passedSpecies);
StringCopy(gTVStringVarPtrs[varIdx], gSpeciesNames[species]);
return species;
}
-u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies)
+static u16 GetRandomDifferentSpeciesSeenByPlayer(u16 passedSpecies)
{
u16 species;
u16 initSpecies;
@@ -3222,13 +3076,10 @@ u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies)
while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN) != TRUE || species == passedSpecies)
{
if (species == SPECIES_NONE + 1)
- {
species = NUM_SPECIES - 1;
- }
else
- {
- species --;
- }
+ species--;
+
if (species == initSpecies)
{
species = passedSpecies;
@@ -3238,65 +3089,60 @@ u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies)
return species;
}
-static void sub_80EFA88(void)
+static void Script_FindFirstEmptyNormalTVShowSlot(void)
{
- sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindFirstEmptyNormalTVShowSlot(gSaveBlock1Ptr->tvShows);
gSpecialVar_0x8006 = sCurTVShowSlot;
if (sCurTVShowSlot == -1)
- {
- gSpecialVar_Result = TRUE;
- }
+ gSpecialVar_Result = TRUE; // Failed to find empty slot
else
- {
- gSpecialVar_Result = FALSE;
- }
+ gSpecialVar_Result = FALSE; // Found empty slot
}
-s8 FindEmptyTVSlotWithinFirstFiveShowsOfArray(TVShow *shows)
+static s8 FindFirstEmptyNormalTVShowSlot(TVShow *shows)
{
u8 i;
- for (i = 0; i < 5; i ++)
+ for (i = 0; i < NUM_NORMAL_TVSHOW_SLOTS; i++)
{
if (shows[i].common.kind == TVSHOW_OFF_AIR)
- {
return i;
- }
}
return -1;
}
-s8 FindEmptyTVSlotBeyondFirstFiveShowsOfArray(TVShow *shows)
+static s8 FindFirstEmptyRecordMixTVShowSlot(TVShow *shows)
{
s8 i;
- for (i = 5; i < LAST_TVSHOW_IDX; i ++)
+ for (i = NUM_NORMAL_TVSHOW_SLOTS; i < LAST_TVSHOW_IDX; i++)
{
if (shows[i].common.kind == TVSHOW_OFF_AIR)
- {
return i;
- }
}
return -1;
}
-bool8 TV_BernoulliTrial(u16 ratio)
+static bool8 BernoulliTrial(u16 ratio)
{
if (Random() <= ratio)
- {
return FALSE;
- }
+
return TRUE;
}
-void TV_FanClubLetter_RandomWordToStringVar3(TVShow *show)
+// For TVSHOW_FAN_CLUB_LETTER / TVSHOW_RECENT_HAPPENINGS
+// Both are assumed to have the same struct layout
+static void GetRandomWordFromShow(TVShow *show)
{
u8 i;
- i = Random() % 6;
+ i = Random() % ARRAY_COUNT(show->fanclubLetter.words);
+
+ // From random point, get first non-empty word
while (TRUE)
{
- if (i == 6)
+ if (i == ARRAY_COUNT(show->fanclubLetter.words))
i = 0;
if (show->fanclubLetter.words[i] != EC_EMPTY_WORD)
@@ -3306,33 +3152,31 @@ void TV_FanClubLetter_RandomWordToStringVar3(TVShow *show)
CopyEasyChatWord(gStringVar3, show->fanclubLetter.words[i]);
}
-u8 TV_GetNicknameSumMod8(TVShow *show)
+static u8 GetRandomNameRaterStateFromName(TVShow *show)
{
u8 i;
- u16 ct;
+ u16 nameSum;
- ct = 0;
- for (i = 0; i < 11; i ++)
+ nameSum = 0;
+ for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
{
if (show->nameRaterShow.pokemonName[i] == EOS)
- {
break;
- }
- ct += show->nameRaterShow.pokemonName[i];
+
+ nameSum += show->nameRaterShow.pokemonName[i];
}
- return ct & 7;
+ return nameSum & 7;
}
-void TV_GetNicknameSubstring(u8 varIdx, u8 whichPosition, u8 charParam, u16 whichString, u16 species, TVShow *show)
+static void GetNicknameSubstring(u8 varIdx, u8 whichPosition, u8 charParam, u16 whichString, u16 species, TVShow *show)
{
u8 buff[16];
u8 i;
u16 strlen;
- for (i = 0; i < 3; i ++)
- {
+ for (i = 0; i < 3; i++)
buff[i] = EOS;
- }
+
if (whichString == 0)
{
strlen = StringLength(show->nameRaterShow.trainerName);
@@ -3404,16 +3248,15 @@ void TV_GetNicknameSubstring(u8 varIdx, u8 whichPosition, u8 charParam, u16 whic
StringCopy(gTVStringVarPtrs[varIdx], buff);
}
-bool8 TV_IsScriptShowKindAlreadyInQueue(void)
+// Unused script special
+bool8 IsTVShowAlreadyInQueue(void)
{
u8 i;
- for (i = 0; i < 5; i ++)
+ for (i = 0; i < NUM_NORMAL_TVSHOW_SLOTS; i++)
{
if (gSaveBlock1Ptr->tvShows[i].common.kind == gSpecialVar_0x8004)
- {
return TRUE;
- }
}
return FALSE;
}
@@ -3455,7 +3298,7 @@ void ChangeBoxPokemonNickname(void)
DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar2, GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL), GetBoxMonGender(boxMon), GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL), ChangeBoxPokemonNickname_CB);
}
-void ChangeBoxPokemonNickname_CB(void)
+static void ChangeBoxPokemonNickname_CB(void)
{
SetBoxMonNickAt(gSpecialVar_MonBoxId, gSpecialVar_MonBoxPos, gStringVar2);
CB2_ReturnToFieldContinueScriptPlayMapMusic();
@@ -3475,25 +3318,21 @@ void IsMonOTIDNotPlayers(void)
gSpecialVar_Result = TRUE;
}
-u8 GetTVChannelByShowType(u8 kind)
+static u8 GetTVGroupByShowId(u8 kind)
{
if (kind == TVSHOW_OFF_AIR)
- {
- return 0;
- }
- if (kind >= TVSHOW_FAN_CLUB_LETTER && kind < TVSHOW_POKEMON_TODAY_CAUGHT)
- {
- return 2;
- }
- if (kind >= TVSHOW_POKEMON_TODAY_CAUGHT && kind < TVSHOW_MASS_OUTBREAK)
- {
- return 3;
- }
- if (kind >= TVSHOW_MASS_OUTBREAK && kind < 61)
- {
- return 4;
- }
- return 0;
+ return TVGROUP_NONE;
+
+ if (kind >= TVGROUP_NORMAL_START && kind <= TVGROUP_NORMAL_END)
+ return TVGROUP_NORMAL;
+
+ if (kind >= TVGROUP_RECORD_MIX_START && kind <= TVGROUP_RECORD_MIX_END)
+ return TVGROUP_RECORD_MIX;
+
+ if (kind >= TVGROUP_OUTBREAK_START && kind <= TVGROUP_OUTBREAK_END)
+ return TVGROUP_OUTBREAK;
+
+ return TVGROUP_NONE;
}
u32 GetPlayerIDAsU32(void)
@@ -3501,35 +3340,31 @@ u32 GetPlayerIDAsU32(void)
return (gSaveBlock2Ptr->playerTrainerId[3] << 24) | (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0];
}
-u8 CheckForBigMovieOrEmergencyNewsOnTV(void)
+u8 CheckForPlayersHouseNews(void)
{
+ // Check if not in Littleroot house map group
if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F))
- {
- return 0;
- }
+ return PLAYERS_HOUSE_TV_NONE;
+
+ // Check if not in player's house (dependent on gender)
if (gSaveBlock2Ptr->playerGender == MALE)
{
if (gSaveBlock1Ptr->location.mapNum != MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F))
- {
- return 0;
- }
+ return PLAYERS_HOUSE_TV_NONE;
}
else
{
if (gSaveBlock1Ptr->location.mapNum != MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F))
- {
- return 0;
- }
+ return PLAYERS_HOUSE_TV_NONE;
}
+
if (FlagGet(FLAG_SYS_TV_LATIAS_LATIOS) == TRUE)
- {
- return 1;
- }
+ return PLAYERS_HOUSE_TV_LATI;
+
if (FlagGet(FLAG_SYS_TV_HOME) == TRUE)
- {
- return 2;
- }
- return 1;
+ return PLAYERS_HOUSE_TV_MOVIE;
+
+ return PLAYERS_HOUSE_TV_LATI;
}
void GetMomOrDadStringForTVMessage(void)
@@ -3590,129 +3425,120 @@ void HideBattleTowerReporter(void)
FlagSet(FLAG_HIDE_BATTLE_TOWER_REPORTER);
}
-void ReceiveTvShowsData(void *src, u32 size, u8 masterIdx)
+void ReceiveTvShowsData(void *src, u32 size, u8 playersLinkId)
{
u8 i;
u16 version;
- TVShow (*rmBuffer2)[4][25];
- TVShow (*rmBuffer)[4][25];
+ TVShow (*rmBuffer2)[MAX_LINK_PLAYERS][TV_SHOWS_COUNT];
+ TVShow (*rmBuffer)[MAX_LINK_PLAYERS][TV_SHOWS_COUNT];
- rmBuffer2 = malloc(4 * 25 * sizeof(TVShow));
+ rmBuffer2 = malloc(MAX_LINK_PLAYERS * TV_SHOWS_COUNT * sizeof(TVShow));
if (rmBuffer2 != NULL)
{
- for (i = 0; i < 4; i ++)
- {
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
memcpy((*rmBuffer2)[i], src + i * size, sizeof((*rmBuffer2)[i]));
- }
+
rmBuffer = rmBuffer2;
- for (i = 0; i < GetLinkPlayerCount(); i ++)
+ for (i = 0; i < GetLinkPlayerCount(); i++)
{
version = (u8)gLinkPlayers[i].version;
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
- {
- sub_80F1254((*rmBuffer)[i]);
- }
+ TranslateRubyShows((*rmBuffer)[i]);
else if (version == VERSION_EMERALD && gLinkPlayers[i].language == LANGUAGE_JAPANESE)
- {
- sub_80F12A4((*rmBuffer)[i]);
- }
+ TranslateJapaneseEmeraldShows((*rmBuffer)[i]);
}
- switch (masterIdx)
+
+ // Position player's TV shows in argument list depending on link id
+ switch (playersLinkId)
{
- case 0:
- sub_80F0358(gSaveBlock1Ptr->tvShows, (*rmBuffer)[1], (*rmBuffer)[2], (*rmBuffer)[3]);
- break;
- case 1:
- sub_80F0358((*rmBuffer)[0], gSaveBlock1Ptr->tvShows, (*rmBuffer)[2], (*rmBuffer)[3]);
- break;
- case 2:
- sub_80F0358((*rmBuffer)[0], (*rmBuffer)[1], gSaveBlock1Ptr->tvShows, (*rmBuffer)[3]);
- break;
- case 3:
- sub_80F0358((*rmBuffer)[0], (*rmBuffer)[1], (*rmBuffer)[2], gSaveBlock1Ptr->tvShows);
- break;
+ case 0:
+ SetMixedTVShows(gSaveBlock1Ptr->tvShows, (*rmBuffer)[1], (*rmBuffer)[2], (*rmBuffer)[3]);
+ break;
+ case 1:
+ SetMixedTVShows((*rmBuffer)[0], gSaveBlock1Ptr->tvShows, (*rmBuffer)[2], (*rmBuffer)[3]);
+ break;
+ case 2:
+ SetMixedTVShows((*rmBuffer)[0], (*rmBuffer)[1], gSaveBlock1Ptr->tvShows, (*rmBuffer)[3]);
+ break;
+ case 3:
+ SetMixedTVShows((*rmBuffer)[0], (*rmBuffer)[1], (*rmBuffer)[2], gSaveBlock1Ptr->tvShows);
+ break;
}
- sub_80EF93C(gSaveBlock1Ptr->tvShows);
- sub_80F0C04();
- sub_80EF93C(gSaveBlock1Ptr->tvShows);
- sub_80F0708();
- sub_80F0B64();
+
+ CompactTVShowArray(gSaveBlock1Ptr->tvShows);
+ DeleteExcessMixedShows();
+ CompactTVShowArray(gSaveBlock1Ptr->tvShows);
+ DeactivateShowsWithUnseenSpecies();
+ DeactivateGameCompleteShowsIfNotUnlocked();
free(rmBuffer2);
}
}
-static void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVShow player4[25])
+static void SetMixedTVShows(TVShow player1[TV_SHOWS_COUNT], TVShow player2[TV_SHOWS_COUNT], TVShow player3[TV_SHOWS_COUNT], TVShow player4[TV_SHOWS_COUNT])
{
u8 i;
u8 j;
- TVShow **argslist[4];
+ TVShow **tvShows[MAX_LINK_PLAYERS];
- argslist[0] = &player1;
- argslist[1] = &player2;
- argslist[2] = &player3;
- argslist[3] = &player4;
+ tvShows[0] = &player1;
+ tvShows[1] = &player2;
+ tvShows[2] = &player3;
+ tvShows[3] = &player4;
sTVShowMixingNumPlayers = GetLinkPlayerCount();
while (1)
{
- for (i = 0; i < sTVShowMixingNumPlayers; i ++)
+ for (i = 0; i < sTVShowMixingNumPlayers; i++)
{
if (i == 0)
- {
- sRecordMixingPartnersWithoutShowsToShare = i;
- }
- sTVShowMixingCurSlot = sub_80F06D0(argslist[i][0]);
+ sRecordMixingPartnersWithoutShowsToShare = 0;
+
+ sTVShowMixingCurSlot = FindInactiveShowInArray(tvShows[i][0]);
if (sTVShowMixingCurSlot == -1)
{
- sRecordMixingPartnersWithoutShowsToShare ++;
+ sRecordMixingPartnersWithoutShowsToShare++;
if (sRecordMixingPartnersWithoutShowsToShare == sTVShowMixingNumPlayers)
- {
return;
- }
}
else
{
- for (j = 0; j < sTVShowMixingNumPlayers - 1; j ++)
+ for (j = 0; j < sTVShowMixingNumPlayers - 1; j++)
{
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(argslist[(i + j + 1) % sTVShowMixingNumPlayers][0]);
+ sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(tvShows[(i + j + 1) % sTVShowMixingNumPlayers][0]);
if (sCurTVShowSlot != -1
- && sub_80F049C(&argslist[(i + j + 1) % sTVShowMixingNumPlayers][0], &argslist[i][0], (i + j + 1) % sTVShowMixingNumPlayers) == 1)
- {
+ && TryMixTVShow(&tvShows[(i + j + 1) % sTVShowMixingNumPlayers][0], &tvShows[i][0], (i + j + 1) % sTVShowMixingNumPlayers) == 1)
break;
- }
}
if (j == sTVShowMixingNumPlayers - 1)
- {
- DeleteTVShowInArrayByIdx(argslist[i][0], sTVShowMixingCurSlot);
- }
+ DeleteTVShowInArrayByIdx(tvShows[i][0], sTVShowMixingCurSlot);
}
}
}
}
-static bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
+static bool8 TryMixTVShow(TVShow *dest[TV_SHOWS_COUNT], TVShow *src[TV_SHOWS_COUNT], u8 idx)
{
- u8 value;
- u8 switchval;
- TVShow *tv1;
- TVShow *tv2;
+ bool8 success;
+ u8 type;
+ TVShow *tv1 = *dest;
+ TVShow *tv2 = *src;
- tv1 = *dest;
- tv2 = *src;
- value = FALSE;
- switchval = GetTVChannelByShowType(tv2[sTVShowMixingCurSlot].common.kind);
- switch (switchval)
+ success = FALSE;
+ type = GetTVGroupByShowId(tv2[sTVShowMixingCurSlot].common.kind);
+ switch (type)
{
- case 2:
- value = sub_80F0580(&tv1[sCurTVShowSlot], &tv2[sTVShowMixingCurSlot], idx);
- break;
- case 3:
- value = sub_80F05E8(&tv1[sCurTVShowSlot], &tv2[sTVShowMixingCurSlot], idx);
- break;
- case 4:
- value = sub_80F0668(&tv1[sCurTVShowSlot], &tv2[sTVShowMixingCurSlot], idx);
- break;
+ case TVGROUP_NORMAL:
+ success = TryMixNormalTVShow(&tv1[sCurTVShowSlot], &tv2[sTVShowMixingCurSlot], idx);
+ break;
+ case TVGROUP_RECORD_MIX:
+ success = TryMixRecordMixTVShow(&tv1[sCurTVShowSlot], &tv2[sTVShowMixingCurSlot], idx);
+ break;
+ case TVGROUP_OUTBREAK:
+ success = TryMixOutbreakTVShow(&tv1[sCurTVShowSlot], &tv2[sTVShowMixingCurSlot], idx);
+ break;
}
- if (value == TRUE)
+
+ // Show was mixed, delete from array
+ if (success == TRUE)
{
DeleteTVShowInArrayByIdx(tv2, sTVShowMixingCurSlot);
return TRUE;
@@ -3720,385 +3546,354 @@ static bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
return FALSE;
}
-static bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 TryMixNormalTVShow(TVShow *dest, TVShow *src, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
- if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi)
- {
+ if ((linkTrainerId & 0xFF) == src->common.trainerIdLo
+ && ((linkTrainerId >> 8) & 0xFF) == src->common.trainerIdHi)
return FALSE;
- }
- tv2->common.trainerIdLo = tv2->common.srcTrainerIdLo;
- tv2->common.trainerIdHi = tv2->common.srcTrainerIdHi;
- tv2->common.srcTrainerIdLo = linkTrainerId & 0xFF;
- tv2->common.srcTrainerIdHi = linkTrainerId >> 8;
- *tv1 = *tv2;
- tv1->common.active = TRUE;
+
+ src->common.trainerIdLo = src->common.srcTrainerIdLo;
+ src->common.trainerIdHi = src->common.srcTrainerIdHi;
+ src->common.srcTrainerIdLo = linkTrainerId & 0xFF;
+ src->common.srcTrainerIdHi = linkTrainerId >> 8;
+ *dest = *src;
+ dest->common.active = TRUE;
return TRUE;
}
-static bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 TryMixRecordMixTVShow(TVShow *dest, TVShow *src, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
- if ((linkTrainerId & 0xFF) == tv2->common.srcTrainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.srcTrainerIdHi)
- {
+
+ if ((linkTrainerId & 0xFF) == src->common.srcTrainerIdLo
+ && ((linkTrainerId >> 8) & 0xFF) == src->common.srcTrainerIdHi)
return FALSE;
- }
- if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi)
- {
+
+ if ((linkTrainerId & 0xFF) == src->common.trainerIdLo
+ && ((linkTrainerId >> 8) & 0xFF) == src->common.trainerIdHi)
return FALSE;
- }
- tv2->common.srcTrainerIdLo = tv2->common.srcTrainerId2Lo;
- tv2->common.srcTrainerIdHi = tv2->common.srcTrainerId2Hi;
- tv2->common.srcTrainerId2Lo = linkTrainerId & 0xFF;
- tv2->common.srcTrainerId2Hi = linkTrainerId >> 8;
- *tv1 = *tv2;
- tv1->common.active = TRUE;
+
+ src->common.srcTrainerIdLo = src->common.srcTrainerId2Lo;
+ src->common.srcTrainerIdHi = src->common.srcTrainerId2Hi;
+ src->common.srcTrainerId2Lo = linkTrainerId & 0xFF;
+ src->common.srcTrainerId2Hi = linkTrainerId >> 8;
+ *dest = *src;
+ dest->common.active = TRUE;
return TRUE;
}
-static bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 TryMixOutbreakTVShow(TVShow *dest, TVShow *src, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
- if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi)
- {
+
+ if ((linkTrainerId & 0xFF) == src->common.trainerIdLo
+ && ((linkTrainerId >> 8) & 0xFF) == src->common.trainerIdHi)
return FALSE;
- }
- tv2->common.trainerIdLo = tv2->common.srcTrainerIdLo;
- tv2->common.trainerIdHi = tv2->common.srcTrainerIdHi;
- tv2->common.srcTrainerIdLo = linkTrainerId & 0xFF;
- tv2->common.srcTrainerIdHi = linkTrainerId >> 8;
- *tv1 = *tv2;
- tv1->common.active = TRUE;
- tv1->massOutbreak.daysLeft = 1;
+
+ src->common.trainerIdLo = src->common.srcTrainerIdLo;
+ src->common.trainerIdHi = src->common.srcTrainerIdHi;
+ src->common.srcTrainerIdLo = linkTrainerId & 0xFF;
+ src->common.srcTrainerIdHi = linkTrainerId >> 8;
+ *dest = *src;
+ dest->common.active = TRUE;
+ dest->massOutbreak.daysLeft = 1;
return TRUE;
}
-static s8 sub_80F06D0(TVShow *tvShows)
+static s8 FindInactiveShowInArray(TVShow *tvShows)
{
u8 i;
- for (i = 0; i < LAST_TVSHOW_IDX; i ++)
+ for (i = 0; i < LAST_TVSHOW_IDX; i++)
{
- if (tvShows[i].common.active == FALSE && (u8)(tvShows[i].common.kind - 1) < 60)
- {
+ // Second check is to make sure its a valid show (not too high, not TVSHOW_OFF_AIR)
+ if (tvShows[i].common.active == FALSE && (u8)(tvShows[i].common.kind - 1) < TVGROUP_OUTBREAK_END)
return i;
- }
}
return -1;
}
-static void sub_80F0708(void) // FIXME: register allocation shenanigans
+static void DeactivateShowsWithUnseenSpecies(void)
{
u16 i;
- u16 j;
+ u16 species;
- for (i = 0; i < LAST_TVSHOW_IDX; i ++)
+ for (i = 0; i < LAST_TVSHOW_IDX; i++)
{
switch (gSaveBlock1Ptr->tvShows[i].common.kind)
{
- case TVSHOW_CONTEST_LIVE_UPDATES:
- j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.winningSpecies;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.losingSpecies;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
- break;
- case TVSHOW_BATTLE_UPDATE:
- j = (&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesPlayer;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesOpponent;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_FAN_CLUB_SPECIAL:
- break;
- case TVSHOW_LILYCOVE_CONTEST_LADY:
- break;
- case TVSHOW_OFF_AIR:
- break;
- case TVSHOW_FAN_CLUB_LETTER:
- j = (&gSaveBlock1Ptr->tvShows[i])->fanclubLetter.species;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_RECENT_HAPPENINGS:
- break;
- case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
- j = (&gSaveBlock1Ptr->tvShows[i])->fanclubOpinions.species;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_UNKN_SHOWTYPE_04:
- j = (&gSaveBlock1Ptr->tvShows[i])->unkShow04.var06;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_NAME_RATER_SHOW:
- j = (&gSaveBlock1Ptr->tvShows[i])->nameRaterShow.species;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->nameRaterShow.randomSpecies;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
- j = (&gSaveBlock1Ptr->tvShows[i])->bravoTrainer.species;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
- j = (&gSaveBlock1Ptr->tvShows[i])->bravoTrainerTower.species;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->bravoTrainerTower.defeatedSpecies;
- sub_80F0B24(j, i);
- break;
-
- case TVSHOW_POKEMON_TODAY_CAUGHT:
- j = (&gSaveBlock1Ptr->tvShows[i])->pokemonToday.species;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_SMART_SHOPPER:
- break;
- case TVSHOW_POKEMON_TODAY_FAILED:
- j = (&gSaveBlock1Ptr->tvShows[i])->pokemonTodayFailed.species;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->pokemonTodayFailed.species2;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_FISHING_ADVICE:
- j = (&gSaveBlock1Ptr->tvShows[i])->pokemonAngler.species;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_WORLD_OF_MASTERS:
- j = (&gSaveBlock1Ptr->tvShows[i])->worldOfMasters.species;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->worldOfMasters.caughtPoke;
- sub_80F0B24(j, i);
- break;
-
- case TVSHOW_TODAYS_RIVAL_TRAINER:
- break;
- case TVSHOW_TREND_WATCHER:
- break;
- case TVSHOW_TREASURE_INVESTIGATORS:
- break;
- case TVSHOW_FIND_THAT_GAMER:
- break;
- case TVSHOW_BREAKING_NEWS:
- j = (&gSaveBlock1Ptr->tvShows[i])->breakingNews.lastOpponentSpecies;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->breakingNews.poke1Species;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_SECRET_BASE_VISIT:
- j = (&gSaveBlock1Ptr->tvShows[i])->secretBaseVisit.species;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_LOTTO_WINNER:
- break;
- case TVSHOW_BATTLE_SEMINAR:
- j = (&gSaveBlock1Ptr->tvShows[i])->battleSeminar.species;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->battleSeminar.foeSpecies;
- sub_80F0B24(j, i);
- break;
- case TVSHOW_TRAINER_FAN_CLUB:
- break;
- case TVSHOW_CUTIES:
- break;
- case TVSHOW_FRONTIER:
- j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species1;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species2;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->frontier.facility;
- switch (j)
- {
- case 3:
- case 4:
- break;
- case 1:
- case 5 ... 13:
- j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species3;
- sub_80F0B24(j, i);
- break;
- case 2:
- j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species3;
- sub_80F0B24(j, i);
- j = (&gSaveBlock1Ptr->tvShows[i])->frontier.species4;
- sub_80F0B24(j, i);
- break;
- }
- break;
- case TVSHOW_NUMBER_ONE:
- break;
- case TVSHOW_SECRET_BASE_SECRETS:
- break;
- case TVSHOW_SAFARI_FAN_CLUB:
- break;
-
- case TVSHOW_MASS_OUTBREAK:
- break;
-
- default:
- SetTvShowInactive(i);
- break;
+ case TVSHOW_CONTEST_LIVE_UPDATES:
+ species = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.winningSpecies;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.losingSpecies;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_BATTLE_UPDATE:
+ species = (&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesPlayer;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesOpponent;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_FAN_CLUB_LETTER:
+ species = (&gSaveBlock1Ptr->tvShows[i])->fanclubLetter.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
+ species = (&gSaveBlock1Ptr->tvShows[i])->fanclubOpinions.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_DUMMY:
+ species = (&gSaveBlock1Ptr->tvShows[i])->dummy.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_NAME_RATER_SHOW:
+ species = (&gSaveBlock1Ptr->tvShows[i])->nameRaterShow.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->nameRaterShow.randomSpecies;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
+ species = (&gSaveBlock1Ptr->tvShows[i])->bravoTrainer.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
+ species = (&gSaveBlock1Ptr->tvShows[i])->bravoTrainerTower.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->bravoTrainerTower.defeatedSpecies;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_POKEMON_TODAY_CAUGHT:
+ species = (&gSaveBlock1Ptr->tvShows[i])->pokemonToday.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_POKEMON_TODAY_FAILED:
+ species = (&gSaveBlock1Ptr->tvShows[i])->pokemonTodayFailed.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->pokemonTodayFailed.species2;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_FISHING_ADVICE:
+ species = (&gSaveBlock1Ptr->tvShows[i])->pokemonAngler.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_WORLD_OF_MASTERS:
+ species = (&gSaveBlock1Ptr->tvShows[i])->worldOfMasters.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->worldOfMasters.caughtPoke;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_BREAKING_NEWS:
+ species = (&gSaveBlock1Ptr->tvShows[i])->breakingNews.lastOpponentSpecies;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->breakingNews.poke1Species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_SECRET_BASE_VISIT:
+ species = (&gSaveBlock1Ptr->tvShows[i])->secretBaseVisit.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_BATTLE_SEMINAR:
+ species = (&gSaveBlock1Ptr->tvShows[i])->battleSeminar.species;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->battleSeminar.foeSpecies;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case TVSHOW_FRONTIER:
+ species = (&gSaveBlock1Ptr->tvShows[i])->frontier.species1;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->frontier.species2;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ // Species var re-used here
+ species = (&gSaveBlock1Ptr->tvShows[i])->frontier.facilityAndMode;
+ switch (species)
+ {
+ case FRONTIER_SHOW_TOWER_MULTIS:
+ case FRONTIER_SHOW_TOWER_LINK_MULTIS:
+ break;
+ case FRONTIER_SHOW_TOWER_SINGLES:
+ case FRONTIER_SHOW_DOME_SINGLES:
+ case FRONTIER_SHOW_DOME_DOUBLES:
+ case FRONTIER_SHOW_FACTORY_SINGLES:
+ case FRONTIER_SHOW_FACTORY_DOUBLES:
+ case FRONTIER_SHOW_PIKE:
+ case FRONTIER_SHOW_ARENA:
+ case FRONTIER_SHOW_PALACE_SINGLES:
+ case FRONTIER_SHOW_PALACE_DOUBLES:
+ case FRONTIER_SHOW_PYRAMID:
+ species = (&gSaveBlock1Ptr->tvShows[i])->frontier.species3;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ case FRONTIER_SHOW_TOWER_DOUBLES:
+ species = (&gSaveBlock1Ptr->tvShows[i])->frontier.species3;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ species = (&gSaveBlock1Ptr->tvShows[i])->frontier.species4;
+ DeactivateShowIfNotSeenSpecies(species, i);
+ break;
+ }
+ break;
+ // Shows with no species
+ case TVSHOW_OFF_AIR:
+ case TVSHOW_RECENT_HAPPENINGS:
+ case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
+ case TVSHOW_TODAYS_RIVAL_TRAINER:
+ case TVSHOW_TREND_WATCHER:
+ case TVSHOW_TREASURE_INVESTIGATORS:
+ case TVSHOW_FIND_THAT_GAMER:
+ case TVSHOW_TRAINER_FAN_CLUB:
+ case TVSHOW_CUTIES:
+ case TVSHOW_SMART_SHOPPER:
+ case TVSHOW_FAN_CLUB_SPECIAL:
+ case TVSHOW_LILYCOVE_CONTEST_LADY:
+ case TVSHOW_LOTTO_WINNER:
+ case TVSHOW_NUMBER_ONE:
+ case TVSHOW_SECRET_BASE_SECRETS:
+ case TVSHOW_SAFARI_FAN_CLUB:
+ case TVSHOW_MASS_OUTBREAK:
+ break;
+ default:
+ DeactivateShow(i);
+ break;
}
}
}
-void SetTvShowInactive(u8 showIdx)
+static void DeactivateShow(u8 showIdx)
{
gSaveBlock1Ptr->tvShows[showIdx].common.active = FALSE;
}
-static void sub_80F0B24(u16 species, u8 showIdx)
+static void DeactivateShowIfNotSeenSpecies(u16 species, u8 showIdx)
{
if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN))
- {
gSaveBlock1Ptr->tvShows[showIdx].common.active = FALSE;
- }
}
-static void sub_80F0B64(void)
+static void DeactivateGameCompleteShowsIfNotUnlocked(void)
{
u16 i;
if (FlagGet(FLAG_SYS_GAME_CLEAR) != TRUE)
{
- for (i = 0; i < LAST_TVSHOW_IDX; i ++)
+ for (i = 0; i < LAST_TVSHOW_IDX; i++)
{
if (gSaveBlock1Ptr->tvShows[i].common.kind == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE)
- {
gSaveBlock1Ptr->tvShows[i].common.active = FALSE;
- }
else if (gSaveBlock1Ptr->tvShows[i].common.kind == TVSHOW_MASS_OUTBREAK)
- {
gSaveBlock1Ptr->tvShows[i].common.active = FALSE;
- }
}
}
}
-void sub_80F0BB8(void)
+void DeactivateAllNormalTVShows(void)
{
u8 i;
- for (i = 0; i < 5; i ++)
+ for (i = 0; i < NUM_NORMAL_TVSHOW_SLOTS; i++)
{
- if (GetTVChannelByShowType(gSaveBlock1Ptr->tvShows[i].common.kind) == 2)
- {
+ if (GetTVGroupByShowId(gSaveBlock1Ptr->tvShows[i].common.kind) == TVGROUP_NORMAL)
gSaveBlock1Ptr->tvShows[i].common.active = FALSE;
- }
}
}
-static void sub_80F0C04(void)
+// Ensures a minimum of 5 empty mixed show slots
+static void DeleteExcessMixedShows(void)
{
s8 i;
- s8 ct;
-
- ct = 0;
- for (i = 5; i < LAST_TVSHOW_IDX; i ++)
+ s8 numEmptyMixSlots = 0;
+ for (i = NUM_NORMAL_TVSHOW_SLOTS; i < LAST_TVSHOW_IDX; i++)
{
if (gSaveBlock1Ptr->tvShows[i].common.kind == TVSHOW_OFF_AIR)
- {
- ct ++;
- }
- }
- for (i = 0; i < 5 - ct; i ++)
- {
- DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, i + 5);
+ numEmptyMixSlots++;
}
+ for (i = 0; i < NUM_NORMAL_TVSHOW_SLOTS - numEmptyMixSlots; i++)
+ DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, i + NUM_NORMAL_TVSHOW_SLOTS);
}
-void ReceivePokeNewsData(void *src, u32 size, u8 masterIdx)
+void ReceivePokeNewsData(void *src, u32 size, u8 playersLinkId)
{
u8 i;
- PokeNews (*rmBuffer2)[4][16];
- PokeNews (*rmBuffer)[4][16];
+ PokeNews (*rmBuffer2)[MAX_LINK_PLAYERS][POKE_NEWS_COUNT];
+ PokeNews (*rmBuffer)[MAX_LINK_PLAYERS][POKE_NEWS_COUNT];
- rmBuffer2 = malloc(4 * 16 * sizeof(PokeNews));
+ rmBuffer2 = malloc(MAX_LINK_PLAYERS * POKE_NEWS_COUNT * sizeof(PokeNews));
if (rmBuffer2 != NULL)
{
- for (i = 0; i < 4; i ++)
- {
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
memcpy((*rmBuffer2)[i], src + i * size, sizeof((*rmBuffer2)[i]));
- }
+
rmBuffer = rmBuffer2;
- switch (masterIdx)
+
+ // Position player's PokeNews in argument list depending on link id
+ switch (playersLinkId)
{
- case 0:
- sub_80F0D60(gSaveBlock1Ptr->pokeNews, (*rmBuffer)[1], (*rmBuffer)[2], (*rmBuffer)[3]);
- break;
- case 1:
- sub_80F0D60((*rmBuffer)[0], gSaveBlock1Ptr->pokeNews, (*rmBuffer)[2], (*rmBuffer)[3]);
- break;
- case 2:
- sub_80F0D60((*rmBuffer)[0], (*rmBuffer)[1], gSaveBlock1Ptr->pokeNews, (*rmBuffer)[3]);
- break;
- case 3:
- sub_80F0D60((*rmBuffer)[0], (*rmBuffer)[1], (*rmBuffer)[2], gSaveBlock1Ptr->pokeNews);
- break;
+ case 0:
+ SetMixedPokeNews(gSaveBlock1Ptr->pokeNews, (*rmBuffer)[1], (*rmBuffer)[2], (*rmBuffer)[3]);
+ break;
+ case 1:
+ SetMixedPokeNews((*rmBuffer)[0], gSaveBlock1Ptr->pokeNews, (*rmBuffer)[2], (*rmBuffer)[3]);
+ break;
+ case 2:
+ SetMixedPokeNews((*rmBuffer)[0], (*rmBuffer)[1], gSaveBlock1Ptr->pokeNews, (*rmBuffer)[3]);
+ break;
+ case 3:
+ SetMixedPokeNews((*rmBuffer)[0], (*rmBuffer)[1], (*rmBuffer)[2], gSaveBlock1Ptr->pokeNews);
+ break;
}
- sub_80F0EEC();
- sub_80F0F24();
+ ClearInvalidPokeNews();
+ ClearPokeNewsIfGameNotComplete();
free(rmBuffer2);
}
}
-static void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16], PokeNews player4[16])
+static void SetMixedPokeNews(PokeNews player1[POKE_NEWS_COUNT], PokeNews player2[POKE_NEWS_COUNT], PokeNews player3[POKE_NEWS_COUNT], PokeNews player4[POKE_NEWS_COUNT])
{
- u8 i;
- u8 j;
- u8 k;
- PokeNews **argslist[4];
+ u8 i, j, k;
+ PokeNews **pokeNews[MAX_LINK_PLAYERS];
- argslist[0] = &player1;
- argslist[1] = &player2;
- argslist[2] = &player3;
- argslist[3] = &player4;
+ pokeNews[0] = &player1;
+ pokeNews[1] = &player2;
+ pokeNews[2] = &player3;
+ pokeNews[3] = &player4;
sTVShowNewsMixingNumPlayers = GetLinkPlayerCount();
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
- for (j = 0; j < sTVShowNewsMixingNumPlayers; j ++)
+ for (j = 0; j < sTVShowNewsMixingNumPlayers; j++)
{
- sTVShowMixingCurSlot = sub_80F0ECC(*argslist[j], i);
+ sTVShowMixingCurSlot = GetPokeNewsSlotIfActive(*pokeNews[j], i);
if (sTVShowMixingCurSlot != -1)
{
for (k = 0; k < sTVShowNewsMixingNumPlayers - 1; k++)
{
- sCurTVShowSlot = sub_80EEE30(*argslist[(j + k + 1) % sTVShowNewsMixingNumPlayers]);
+ sCurTVShowSlot = GetFirstEmptyPokeNewsSlot(*pokeNews[(j + k + 1) % sTVShowNewsMixingNumPlayers]);
if (sCurTVShowSlot != -1)
- {
- sub_80F0E58(argslist[(j + k + 1) % sTVShowNewsMixingNumPlayers], argslist[j]);
- }
+ InitTryMixPokeNewsShow(pokeNews[(j + k + 1) % sTVShowNewsMixingNumPlayers], pokeNews[j]);
}
}
}
}
}
-static void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
+static void InitTryMixPokeNewsShow(PokeNews *dest[POKE_NEWS_COUNT], PokeNews *src[POKE_NEWS_COUNT])
{
- PokeNews *ptr1;
- PokeNews *ptr2;
-
- ptr1 = *dest;
- ptr2 = *src;
+ PokeNews *ptr1 = *dest;
+ PokeNews *ptr2 = *src;
ptr2 += sTVShowMixingCurSlot;
- sub_80F0E84(ptr1, ptr2, sCurTVShowSlot);
+ TryMixPokeNewsShow(ptr1, ptr2, sCurTVShowSlot);
}
-static bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
+static bool8 TryMixPokeNewsShow(PokeNews *dest, PokeNews *src, s8 slot)
{
u8 i;
if (src->kind == POKENEWS_NONE)
- {
return FALSE;
- }
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
+
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (dest[i].kind == src->kind)
- {
return FALSE;
- }
}
dest[slot].kind = src->kind;
dest[slot].state = 1;
@@ -4106,43 +3901,38 @@ static bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
return TRUE;
}
-static s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
+static s8 GetPokeNewsSlotIfActive(PokeNews *pokeNews, u8 idx)
{
if (pokeNews[idx].kind == POKENEWS_NONE)
- {
return -1;
- }
+
return idx;
}
-static void sub_80F0EEC(void)
+static void ClearInvalidPokeNews(void)
{
u8 i;
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1Ptr->pokeNews[i].kind > POKENEWS_BLENDMASTER)
- {
- ClearPokemonNewsI(i);
- }
+ ClearPokeNewsBySlot(i);
}
- sub_80EEEB8();
+ CompactPokeNews();
}
-static void sub_80F0F24(void)
+static void ClearPokeNewsIfGameNotComplete(void)
{
u8 i;
if (FlagGet(FLAG_SYS_GAME_CLEAR) != TRUE)
{
- for (i = 0; i < POKE_NEWS_COUNT; i ++)
- {
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
gSaveBlock1Ptr->pokeNews[i].state = 0;
- }
}
}
-#define tvlangfix(strptr, langptr, langfix) \
+#define SetStrLanguage(strptr, langptr, langfix) \
if (IsStringJapanese(strptr)) \
{ \
(langptr) = LANGUAGE_JAPANESE; \
@@ -4152,348 +3942,341 @@ else \
(langptr) = langfix; \
}
-static void sub_80F0F64(TVShow *show, u32 language)
+// Unused
+static void TranslateShowNames(TVShow *show, u32 language)
{
int i;
- TVShow **r4;
+ TVShow **shows;
- r4 = calloc(11, sizeof(TVShow *));
- for (i = 0; i < LAST_TVSHOW_IDX; i ++)
+ shows = calloc(11, sizeof(TVShow *));
+ for (i = 0; i < LAST_TVSHOW_IDX; i++)
{
switch (show[i].common.kind)
{
- case TVSHOW_FAN_CLUB_LETTER:
- case TVSHOW_RECENT_HAPPENINGS:
- r4[0] = &show[i];
- tvlangfix(r4[0]->fanclubLetter.playerName, r4[0]->fanclubLetter.language, language);
- break;
- case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
- r4[1] = &show[i];
- tvlangfix(r4[1]->fanclubOpinions.playerName, r4[1]->fanclubOpinions.language, language);
- tvlangfix(r4[1]->fanclubOpinions.nickname, r4[1]->fanclubOpinions.pokemonNameLanguage, language);
- break;
- case TVSHOW_POKEMON_TODAY_CAUGHT:
- r4[6] = &show[i];
- tvlangfix(r4[6]->pokemonToday.playerName, r4[6]->pokemonToday.language, language);
- tvlangfix(r4[6]->pokemonToday.nickname, r4[6]->pokemonToday.language2, language);
- break;
- case TVSHOW_SMART_SHOPPER:
- r4[7] = &show[i];
- tvlangfix(r4[7]->smartshopperShow.playerName, r4[7]->smartshopperShow.language, language);
- break;
- case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
- r4[5] = &show[i];
- tvlangfix(r4[5]->bravoTrainerTower.trainerName, r4[5]->bravoTrainerTower.language, language);
- tvlangfix(r4[5]->bravoTrainerTower.pokemonName, r4[5]->bravoTrainerTower.pokemonNameLanguage, language);
- break;
- case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
- r4[4] = &show[i];
- tvlangfix(r4[4]->bravoTrainer.playerName, r4[4]->bravoTrainer.language, language);
- tvlangfix(r4[4]->bravoTrainer.pokemonNickname, r4[4]->bravoTrainer.pokemonNameLanguage, language);
- break;
- case TVSHOW_NAME_RATER_SHOW:
- r4[3] = &show[i];
- tvlangfix(r4[3]->nameRaterShow.trainerName, r4[3]->nameRaterShow.language, language);
- tvlangfix(r4[3]->nameRaterShow.pokemonName, r4[3]->nameRaterShow.pokemonNameLanguage, language);
- break;
- case TVSHOW_POKEMON_TODAY_FAILED:
- r4[2] = &show[i];
- tvlangfix(r4[2]->pokemonTodayFailed.playerName, r4[2]->pokemonTodayFailed.language, language);
- break;
- case TVSHOW_FISHING_ADVICE:
- r4[8] = &show[i];
- tvlangfix(r4[8]->pokemonAngler.playerName, r4[8]->pokemonAngler.language, language);
- break;
- case TVSHOW_WORLD_OF_MASTERS:
- r4[9] = &show[i];
- tvlangfix(r4[9]->worldOfMasters.playerName, r4[9]->worldOfMasters.language, language);
- break;
- case TVSHOW_MASS_OUTBREAK:
- r4[10] = &show[i];
- r4[10]->massOutbreak.language = language;
- break;
+ case TVSHOW_FAN_CLUB_LETTER:
+ case TVSHOW_RECENT_HAPPENINGS: // NOTE: These two shows are assumed to have the same struct layout
+ shows[0] = &show[i];
+ SetStrLanguage(shows[0]->fanclubLetter.playerName, shows[0]->fanclubLetter.language, language);
+ break;
+ case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
+ shows[1] = &show[i];
+ SetStrLanguage(shows[1]->fanclubOpinions.playerName, shows[1]->fanclubOpinions.language, language);
+ SetStrLanguage(shows[1]->fanclubOpinions.nickname, shows[1]->fanclubOpinions.pokemonNameLanguage, language);
+ break;
+ case TVSHOW_POKEMON_TODAY_CAUGHT:
+ shows[6] = &show[i];
+ SetStrLanguage(shows[6]->pokemonToday.playerName, shows[6]->pokemonToday.language, language);
+ SetStrLanguage(shows[6]->pokemonToday.nickname, shows[6]->pokemonToday.language2, language);
+ break;
+ case TVSHOW_SMART_SHOPPER:
+ shows[7] = &show[i];
+ SetStrLanguage(shows[7]->smartshopperShow.playerName, shows[7]->smartshopperShow.language, language);
+ break;
+ case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
+ shows[5] = &show[i];
+ SetStrLanguage(shows[5]->bravoTrainerTower.trainerName, shows[5]->bravoTrainerTower.language, language);
+ SetStrLanguage(shows[5]->bravoTrainerTower.pokemonName, shows[5]->bravoTrainerTower.pokemonNameLanguage, language);
+ break;
+ case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
+ shows[4] = &show[i];
+ SetStrLanguage(shows[4]->bravoTrainer.playerName, shows[4]->bravoTrainer.language, language);
+ SetStrLanguage(shows[4]->bravoTrainer.pokemonNickname, shows[4]->bravoTrainer.pokemonNameLanguage, language);
+ break;
+ case TVSHOW_NAME_RATER_SHOW:
+ shows[3] = &show[i];
+ SetStrLanguage(shows[3]->nameRaterShow.trainerName, shows[3]->nameRaterShow.language, language);
+ SetStrLanguage(shows[3]->nameRaterShow.pokemonName, shows[3]->nameRaterShow.pokemonNameLanguage, language);
+ break;
+ case TVSHOW_POKEMON_TODAY_FAILED:
+ shows[2] = &show[i];
+ SetStrLanguage(shows[2]->pokemonTodayFailed.playerName, shows[2]->pokemonTodayFailed.language, language);
+ break;
+ case TVSHOW_FISHING_ADVICE:
+ shows[8] = &show[i];
+ SetStrLanguage(shows[8]->pokemonAngler.playerName, shows[8]->pokemonAngler.language, language);
+ break;
+ case TVSHOW_WORLD_OF_MASTERS:
+ shows[9] = &show[i];
+ SetStrLanguage(shows[9]->worldOfMasters.playerName, shows[9]->worldOfMasters.language, language);
+ break;
+ case TVSHOW_MASS_OUTBREAK:
+ shows[10] = &show[i];
+ shows[10]->massOutbreak.language = language;
+ break;
}
}
- free(r4);
+ free(shows);
}
-void sub_80F1208(TVShow *shows)
+void SanitizeTVShowsForRuby(TVShow *shows)
{
TVShow *curShow;
- sub_80F14F8(shows);
- for (curShow = shows; curShow < shows + LAST_TVSHOW_IDX; curShow ++)
+ SanitizeTVShowLocationsForRuby(shows);
+ for (curShow = shows; curShow < shows + LAST_TVSHOW_IDX; curShow++)
{
if (curShow->bravoTrainerTower.kind == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE)
{
- if ((curShow->bravoTrainerTower.language == LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage != LANGUAGE_JAPANESE) || (curShow->bravoTrainerTower.language != LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage == LANGUAGE_JAPANESE))
- {
+ if ((curShow->bravoTrainerTower.language == LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage != LANGUAGE_JAPANESE)
+ || (curShow->bravoTrainerTower.language != LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage == LANGUAGE_JAPANESE))
memset(curShow, 0, sizeof(TVShow));
- }
}
}
}
-static void sub_80F1254(TVShow *shows)
+static void TranslateRubyShows(TVShow *shows)
{
TVShow *curShow;
- for (curShow = shows; curShow < shows + LAST_TVSHOW_IDX; curShow ++)
+ for (curShow = shows; curShow < shows + LAST_TVSHOW_IDX; curShow++)
{
if (curShow->bravoTrainerTower.kind == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE)
{
if (IsStringJapanese(curShow->bravoTrainerTower.pokemonName))
- {
curShow->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_JAPANESE;
- }
else
- {
curShow->bravoTrainerTower.pokemonNameLanguage = GAME_LANGUAGE;
- }
}
}
}
-u8 TV_GetStringLanguage(u8 *str)
+static u8 GetStringLanguage(u8 *str)
{
return IsStringJapanese(str) ? LANGUAGE_JAPANESE : GAME_LANGUAGE;
}
-static void sub_80F12A4(TVShow *shows)
+static void TranslateJapaneseEmeraldShows(TVShow *shows)
{
TVShow *curShow;
- for (curShow = shows; curShow < shows + LAST_TVSHOW_IDX; curShow ++)
+ for (curShow = shows; curShow < shows + LAST_TVSHOW_IDX; curShow++)
{
switch(curShow->common.kind)
{
- case TVSHOW_FAN_CLUB_LETTER:
- curShow->fanclubLetter.language = TV_GetStringLanguage(curShow->fanclubLetter.playerName);
- break;
- case TVSHOW_RECENT_HAPPENINGS:
- curShow->recentHappenings.language = TV_GetStringLanguage(curShow->recentHappenings.playerName);
- break;
- case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
- curShow->fanclubOpinions.language = TV_GetStringLanguage(curShow->fanclubOpinions.playerName);
- curShow->fanclubOpinions.pokemonNameLanguage = TV_GetStringLanguage(curShow->fanclubOpinions.nickname);
- break;
- case TVSHOW_UNKN_SHOWTYPE_04:
- curShow->unkShow04.language = TV_GetStringLanguage(curShow->unkShow04.string_0b);
- break;
- case TVSHOW_NAME_RATER_SHOW:
- curShow->nameRaterShow.language = TV_GetStringLanguage(curShow->nameRaterShow.trainerName);
- curShow->nameRaterShow.pokemonNameLanguage = TV_GetStringLanguage(curShow->nameRaterShow.pokemonName);
- break;
- case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
- curShow->bravoTrainer.language = TV_GetStringLanguage(curShow->bravoTrainer.playerName);
- curShow->bravoTrainer.pokemonNameLanguage = TV_GetStringLanguage(curShow->bravoTrainer.pokemonNickname);
- break;
- case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
- curShow->bravoTrainerTower.language = TV_GetStringLanguage(curShow->bravoTrainerTower.trainerName);
- curShow->bravoTrainerTower.pokemonNameLanguage = TV_GetStringLanguage(curShow->bravoTrainerTower.pokemonName);
- break;
- case TVSHOW_CONTEST_LIVE_UPDATES:
- curShow->contestLiveUpdates.winningTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.winningTrainerName);
- curShow->contestLiveUpdates.losingTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.losingTrainerName);
- break;
- case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
- curShow->threeCheers.language = TV_GetStringLanguage(curShow->threeCheers.playerName);
- curShow->threeCheers.worstBlenderLanguage = TV_GetStringLanguage(curShow->threeCheers.worstBlenderName);
- break;
- case TVSHOW_BATTLE_UPDATE:
- curShow->battleUpdate.language = TV_GetStringLanguage(curShow->battleUpdate.playerName);
- curShow->battleUpdate.linkOpponentLanguage = TV_GetStringLanguage(curShow->battleUpdate.linkOpponentName);
- break;
- case TVSHOW_FAN_CLUB_SPECIAL:
- curShow->fanClubSpecial.language = TV_GetStringLanguage(curShow->fanClubSpecial.playerName);
- curShow->fanClubSpecial.idolNameLanguage = TV_GetStringLanguage(curShow->fanClubSpecial.idolName);
- break;
- case TVSHOW_LILYCOVE_CONTEST_LADY:
- curShow->contestLady.language = TV_GetStringLanguage(curShow->contestLady.playerName);
- curShow->contestLady.pokemonNameLanguage = TV_GetStringLanguage(curShow->contestLady.nickname);
- break;
- case TVSHOW_POKEMON_TODAY_CAUGHT:
- curShow->pokemonToday.language = TV_GetStringLanguage(curShow->pokemonToday.playerName);
- curShow->pokemonToday.language2 = TV_GetStringLanguage(curShow->pokemonToday.nickname);
- break;
- case TVSHOW_SMART_SHOPPER:
- curShow->smartshopperShow.language = TV_GetStringLanguage(curShow->smartshopperShow.playerName);
- break;
- case TVSHOW_POKEMON_TODAY_FAILED:
- curShow->pokemonTodayFailed.language = TV_GetStringLanguage(curShow->pokemonTodayFailed.playerName);
- break;
- case TVSHOW_FISHING_ADVICE:
- curShow->pokemonAngler.language = TV_GetStringLanguage(curShow->pokemonAngler.playerName);
- break;
- case TVSHOW_WORLD_OF_MASTERS:
- curShow->worldOfMasters.language = TV_GetStringLanguage(curShow->worldOfMasters.playerName);
- break;
- case TVSHOW_TREND_WATCHER:
- curShow->trendWatcher.language = TV_GetStringLanguage(curShow->trendWatcher.playerName);
- break;
- case TVSHOW_BREAKING_NEWS:
- curShow->breakingNews.language = TV_GetStringLanguage(curShow->breakingNews.playerName);
- break;
- case TVSHOW_BATTLE_SEMINAR:
- curShow->battleSeminar.language = TV_GetStringLanguage(curShow->battleSeminar.playerName);
- break;
- case TVSHOW_FIND_THAT_GAMER:
- case TVSHOW_TRAINER_FAN_CLUB:
- curShow->trainerFanClub.language = TV_GetStringLanguage(curShow->trainerFanClub.playerName);
- break;
- case TVSHOW_CUTIES:
- curShow->cuties.language = TV_GetStringLanguage(curShow->cuties.playerName);
- curShow->cuties.pokemonNameLanguage = TV_GetStringLanguage(curShow->cuties.nickname);
- break;
- case TVSHOW_TODAYS_RIVAL_TRAINER:
- case TVSHOW_SECRET_BASE_VISIT:
- case TVSHOW_FRONTIER:
- curShow->rivalTrainer.language = TV_GetStringLanguage(curShow->rivalTrainer.playerName);
- break;
- case TVSHOW_TREASURE_INVESTIGATORS:
- case TVSHOW_LOTTO_WINNER:
- case TVSHOW_NUMBER_ONE:
- curShow->treasureInvestigators.language = TV_GetStringLanguage(curShow->treasureInvestigators.playerName);
- break;
- case TVSHOW_SECRET_BASE_SECRETS:
- curShow->secretBaseSecrets.language = TV_GetStringLanguage(curShow->secretBaseSecrets.playerName);
- curShow->secretBaseSecrets.baseOwnersNameLanguage = TV_GetStringLanguage(curShow->secretBaseSecrets.baseOwnersName);
- break;
- case TVSHOW_SAFARI_FAN_CLUB:
- curShow->safariFanClub.language = TV_GetStringLanguage(curShow->safariFanClub.playerName);
- break;
- case TVSHOW_MASS_OUTBREAK:
- break;
+ case TVSHOW_FAN_CLUB_LETTER:
+ curShow->fanclubLetter.language = GetStringLanguage(curShow->fanclubLetter.playerName);
+ break;
+ case TVSHOW_RECENT_HAPPENINGS:
+ curShow->recentHappenings.language = GetStringLanguage(curShow->recentHappenings.playerName);
+ break;
+ case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
+ curShow->fanclubOpinions.language = GetStringLanguage(curShow->fanclubOpinions.playerName);
+ curShow->fanclubOpinions.pokemonNameLanguage = GetStringLanguage(curShow->fanclubOpinions.nickname);
+ break;
+ case TVSHOW_DUMMY:
+ curShow->dummy.language = GetStringLanguage(curShow->dummy.name);
+ break;
+ case TVSHOW_NAME_RATER_SHOW:
+ curShow->nameRaterShow.language = GetStringLanguage(curShow->nameRaterShow.trainerName);
+ curShow->nameRaterShow.pokemonNameLanguage = GetStringLanguage(curShow->nameRaterShow.pokemonName);
+ break;
+ case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
+ curShow->bravoTrainer.language = GetStringLanguage(curShow->bravoTrainer.playerName);
+ curShow->bravoTrainer.pokemonNameLanguage = GetStringLanguage(curShow->bravoTrainer.pokemonNickname);
+ break;
+ case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
+ curShow->bravoTrainerTower.language = GetStringLanguage(curShow->bravoTrainerTower.trainerName);
+ curShow->bravoTrainerTower.pokemonNameLanguage = GetStringLanguage(curShow->bravoTrainerTower.pokemonName);
+ break;
+ case TVSHOW_CONTEST_LIVE_UPDATES:
+ curShow->contestLiveUpdates.winningTrainerLanguage = GetStringLanguage(curShow->contestLiveUpdates.winningTrainerName);
+ curShow->contestLiveUpdates.losingTrainerLanguage = GetStringLanguage(curShow->contestLiveUpdates.losingTrainerName);
+ break;
+ case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
+ curShow->threeCheers.language = GetStringLanguage(curShow->threeCheers.playerName);
+ curShow->threeCheers.worstBlenderLanguage = GetStringLanguage(curShow->threeCheers.worstBlenderName);
+ break;
+ case TVSHOW_BATTLE_UPDATE:
+ curShow->battleUpdate.language = GetStringLanguage(curShow->battleUpdate.playerName);
+ curShow->battleUpdate.linkOpponentLanguage = GetStringLanguage(curShow->battleUpdate.linkOpponentName);
+ break;
+ case TVSHOW_FAN_CLUB_SPECIAL:
+ curShow->fanClubSpecial.language = GetStringLanguage(curShow->fanClubSpecial.playerName);
+ curShow->fanClubSpecial.idolNameLanguage = GetStringLanguage(curShow->fanClubSpecial.idolName);
+ break;
+ case TVSHOW_LILYCOVE_CONTEST_LADY:
+ curShow->contestLady.language = GetStringLanguage(curShow->contestLady.playerName);
+ curShow->contestLady.pokemonNameLanguage = GetStringLanguage(curShow->contestLady.nickname);
+ break;
+ case TVSHOW_POKEMON_TODAY_CAUGHT:
+ curShow->pokemonToday.language = GetStringLanguage(curShow->pokemonToday.playerName);
+ curShow->pokemonToday.language2 = GetStringLanguage(curShow->pokemonToday.nickname);
+ break;
+ case TVSHOW_SMART_SHOPPER:
+ curShow->smartshopperShow.language = GetStringLanguage(curShow->smartshopperShow.playerName);
+ break;
+ case TVSHOW_POKEMON_TODAY_FAILED:
+ curShow->pokemonTodayFailed.language = GetStringLanguage(curShow->pokemonTodayFailed.playerName);
+ break;
+ case TVSHOW_FISHING_ADVICE:
+ curShow->pokemonAngler.language = GetStringLanguage(curShow->pokemonAngler.playerName);
+ break;
+ case TVSHOW_WORLD_OF_MASTERS:
+ curShow->worldOfMasters.language = GetStringLanguage(curShow->worldOfMasters.playerName);
+ break;
+ case TVSHOW_TREND_WATCHER:
+ curShow->trendWatcher.language = GetStringLanguage(curShow->trendWatcher.playerName);
+ break;
+ case TVSHOW_BREAKING_NEWS:
+ curShow->breakingNews.language = GetStringLanguage(curShow->breakingNews.playerName);
+ break;
+ case TVSHOW_BATTLE_SEMINAR:
+ curShow->battleSeminar.language = GetStringLanguage(curShow->battleSeminar.playerName);
+ break;
+ case TVSHOW_FIND_THAT_GAMER:
+ case TVSHOW_TRAINER_FAN_CLUB:
+ curShow->trainerFanClub.language = GetStringLanguage(curShow->trainerFanClub.playerName);
+ break;
+ case TVSHOW_CUTIES:
+ curShow->cuties.language = GetStringLanguage(curShow->cuties.playerName);
+ curShow->cuties.pokemonNameLanguage = GetStringLanguage(curShow->cuties.nickname);
+ break;
+ case TVSHOW_TODAYS_RIVAL_TRAINER:
+ case TVSHOW_SECRET_BASE_VISIT:
+ case TVSHOW_FRONTIER:
+ curShow->rivalTrainer.language = GetStringLanguage(curShow->rivalTrainer.playerName);
+ break;
+ case TVSHOW_TREASURE_INVESTIGATORS:
+ case TVSHOW_LOTTO_WINNER:
+ case TVSHOW_NUMBER_ONE:
+ curShow->treasureInvestigators.language = GetStringLanguage(curShow->treasureInvestigators.playerName);
+ break;
+ case TVSHOW_SECRET_BASE_SECRETS:
+ curShow->secretBaseSecrets.language = GetStringLanguage(curShow->secretBaseSecrets.playerName);
+ curShow->secretBaseSecrets.baseOwnersNameLanguage = GetStringLanguage(curShow->secretBaseSecrets.baseOwnersName);
+ break;
+ case TVSHOW_SAFARI_FAN_CLUB:
+ curShow->safariFanClub.language = GetStringLanguage(curShow->safariFanClub.playerName);
+ break;
+ case TVSHOW_MASS_OUTBREAK:
+ break;
}
}
}
-void sub_80F14F8(TVShow *shows)
+void SanitizeTVShowLocationsForRuby(TVShow *shows)
{
int i;
- for (i = 0; i < LAST_TVSHOW_IDX; i ++)
+ for (i = 0; i < LAST_TVSHOW_IDX; i++)
{
switch (shows[i].common.kind)
{
- case TVSHOW_WORLD_OF_MASTERS:
- if (shows[i].worldOfMasters.location > KANTO_MAPSEC_START)
- {
- memset(&shows[i], 0, sizeof(TVShow));
- }
- break;
- case TVSHOW_POKEMON_TODAY_FAILED:
- if (shows[i].pokemonTodayFailed.location > KANTO_MAPSEC_START)
- {
- memset(&shows[i], 0, sizeof(TVShow));
- }
- break;
+ case TVSHOW_WORLD_OF_MASTERS:
+ if (shows[i].worldOfMasters.location > KANTO_MAPSEC_START)
+ memset(&shows[i], 0, sizeof(TVShow));
+ break;
+ case TVSHOW_POKEMON_TODAY_FAILED:
+ if (shows[i].pokemonTodayFailed.location > KANTO_MAPSEC_START)
+ memset(&shows[i], 0, sizeof(TVShow));
+ break;
}
}
}
+// gSpecialVar_0x8004 here is set from GetRandomActiveShowIdx in EventScript_TryDoTVShow
void DoTVShow(void)
{
if (gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004].common.active)
{
switch (gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004].common.kind)
{
- case TVSHOW_FAN_CLUB_LETTER:
- DoTVShowPokemonFanClubLetter();
- break;
- case TVSHOW_RECENT_HAPPENINGS:
- DoTVShowRecentHappenings();
- break;
- case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
- DoTVShowPokemonFanClubOpinions();
- break;
- case TVSHOW_UNKN_SHOWTYPE_04:
- DoTVShowDummiedOut();
- break;
- case TVSHOW_MASS_OUTBREAK:
- DoTVShowPokemonNewsMassOutbreak();
- break;
- case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
- DoTVShowBravoTrainerPokemonProfile();
- break;
- case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
- DoTVShowBravoTrainerBattleTower();
- break;
- case TVSHOW_POKEMON_TODAY_CAUGHT:
- DoTVShowPokemonTodaySuccessfulCapture();
- break;
- case TVSHOW_SMART_SHOPPER:
- DoTVShowTodaysSmartShopper();
- break;
- case TVSHOW_NAME_RATER_SHOW:
- DoTVShowTheNameRaterShow();
- break;
- case TVSHOW_CONTEST_LIVE_UPDATES:
- DoTVShowPokemonContestLiveUpdates();
- break;
- case TVSHOW_BATTLE_UPDATE:
- DoTVShowPokemonBattleUpdate();
- break;
- case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
- DoTVShow3CheersForPokeblocks();
- break;
- case TVSHOW_POKEMON_TODAY_FAILED:
- DoTVShowPokemonTodayFailedCapture();
- break;
- case TVSHOW_FISHING_ADVICE:
- DoTVShowPokemonAngler();
- break;
- case TVSHOW_WORLD_OF_MASTERS:
- DoTVShowTheWorldOfMasters();
- break;
- case TVSHOW_TODAYS_RIVAL_TRAINER:
- DoTVShowTodaysRivalTrainer();
- break;
- case TVSHOW_TREND_WATCHER:
- DoTVShowDewfordTrendWatcherNetwork();
- break;
- case TVSHOW_TREASURE_INVESTIGATORS:
- DoTVShowHoennTreasureInvestigators();
- break;
- case TVSHOW_FIND_THAT_GAMER:
- DoTVShowFindThatGamer();
- break;
- case TVSHOW_BREAKING_NEWS:
- DoTVShowBreakingNewsTV();
- break;
- case TVSHOW_SECRET_BASE_VISIT:
- DoTVShowSecretBaseVisit();
- break;
- case TVSHOW_LOTTO_WINNER:
- DoTVShowPokemonLotteryWinnerFlashReport();
- break;
- case TVSHOW_BATTLE_SEMINAR:
- DoTVShowThePokemonBattleSeminar();
- break;
- case TVSHOW_FAN_CLUB_SPECIAL:
- DoTVShowTrainerFanClubSpecial();
- break;
- case TVSHOW_TRAINER_FAN_CLUB:
- DoTVShowTrainerFanClub();
- break;
- case TVSHOW_CUTIES:
- DoTVShowSpotTheCuties();
- break;
- case TVSHOW_FRONTIER:
- DoTVShowPokemonNewsBattleFrontier();
- break;
- case TVSHOW_NUMBER_ONE:
- DoTVShowWhatsNo1InHoennToday();
- break;
- case TVSHOW_SECRET_BASE_SECRETS:
- DoTVShowSecretBaseSecrets();
- break;
- case TVSHOW_SAFARI_FAN_CLUB:
- DoTVShowSafariFanClub();
- break;
- case TVSHOW_LILYCOVE_CONTEST_LADY:
- DoTVShowLilycoveContestLady();
- break;
+ case TVSHOW_FAN_CLUB_LETTER:
+ DoTVShowPokemonFanClubLetter();
+ break;
+ case TVSHOW_RECENT_HAPPENINGS:
+ DoTVShowRecentHappenings();
+ break;
+ case TVSHOW_PKMN_FAN_CLUB_OPINIONS:
+ DoTVShowPokemonFanClubOpinions();
+ break;
+ case TVSHOW_DUMMY:
+ DoTVShowDummiedOut();
+ break;
+ case TVSHOW_MASS_OUTBREAK:
+ DoTVShowPokemonNewsMassOutbreak();
+ break;
+ case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE:
+ DoTVShowBravoTrainerPokemonProfile();
+ break;
+ case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE:
+ DoTVShowBravoTrainerBattleTower();
+ break;
+ case TVSHOW_POKEMON_TODAY_CAUGHT:
+ DoTVShowPokemonTodaySuccessfulCapture();
+ break;
+ case TVSHOW_SMART_SHOPPER:
+ DoTVShowTodaysSmartShopper();
+ break;
+ case TVSHOW_NAME_RATER_SHOW:
+ DoTVShowTheNameRaterShow();
+ break;
+ case TVSHOW_CONTEST_LIVE_UPDATES:
+ DoTVShowPokemonContestLiveUpdates();
+ break;
+ case TVSHOW_BATTLE_UPDATE:
+ DoTVShowPokemonBattleUpdate();
+ break;
+ case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
+ DoTVShow3CheersForPokeblocks();
+ break;
+ case TVSHOW_POKEMON_TODAY_FAILED:
+ DoTVShowPokemonTodayFailedCapture();
+ break;
+ case TVSHOW_FISHING_ADVICE:
+ DoTVShowPokemonAngler();
+ break;
+ case TVSHOW_WORLD_OF_MASTERS:
+ DoTVShowTheWorldOfMasters();
+ break;
+ case TVSHOW_TODAYS_RIVAL_TRAINER:
+ DoTVShowTodaysRivalTrainer();
+ break;
+ case TVSHOW_TREND_WATCHER:
+ DoTVShowDewfordTrendWatcherNetwork();
+ break;
+ case TVSHOW_TREASURE_INVESTIGATORS:
+ DoTVShowHoennTreasureInvestigators();
+ break;
+ case TVSHOW_FIND_THAT_GAMER:
+ DoTVShowFindThatGamer();
+ break;
+ case TVSHOW_BREAKING_NEWS:
+ DoTVShowBreakingNewsTV();
+ break;
+ case TVSHOW_SECRET_BASE_VISIT:
+ DoTVShowSecretBaseVisit();
+ break;
+ case TVSHOW_LOTTO_WINNER:
+ DoTVShowPokemonLotteryWinnerFlashReport();
+ break;
+ case TVSHOW_BATTLE_SEMINAR:
+ DoTVShowThePokemonBattleSeminar();
+ break;
+ case TVSHOW_FAN_CLUB_SPECIAL:
+ DoTVShowTrainerFanClubSpecial();
+ break;
+ case TVSHOW_TRAINER_FAN_CLUB:
+ DoTVShowTrainerFanClub();
+ break;
+ case TVSHOW_CUTIES:
+ DoTVShowSpotTheCuties();
+ break;
+ case TVSHOW_FRONTIER:
+ DoTVShowPokemonNewsBattleFrontier();
+ break;
+ case TVSHOW_NUMBER_ONE:
+ DoTVShowWhatsNo1InHoennToday();
+ break;
+ case TVSHOW_SECRET_BASE_SECRETS:
+ DoTVShowSecretBaseSecrets();
+ break;
+ case TVSHOW_SAFARI_FAN_CLUB:
+ DoTVShowSafariFanClub();
+ break;
+ case TVSHOW_LILYCOVE_CONTEST_LADY:
+ DoTVShowLilycoveContestLady();
+ break;
}
}
}
@@ -4508,64 +4291,64 @@ static void DoTVShowBravoTrainerPokemonProfile(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
- CopyContestCategoryToStringVar(1, show->bravoTrainer.contestCategory);
- CopyContestRankToStringVar(2, show->bravoTrainer.contestRank);
- if (!StringCompare(gSpeciesNames[show->bravoTrainer.species], show->bravoTrainer.pokemonNickname))
- sTVShowState = 8;
- else
- sTVShowState = 1;
- break;
- case 1:
- StringCopy(gStringVar1, gSpeciesNames[show->bravoTrainer.species]);
- TVShowConvertInternationalString(gStringVar2, show->bravoTrainer.pokemonNickname, show->bravoTrainer.pokemonNameLanguage);
- CopyContestCategoryToStringVar(2, show->bravoTrainer.contestCategory);
- sTVShowState = 2;
- break;
- case 2:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
- if (show->bravoTrainer.contestResult == 0) // placed first
- sTVShowState = 3;
- else
- sTVShowState = 4;
- break;
- case 3:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
- CopyEasyChatWord(gStringVar2, show->bravoTrainer.words[0]);
- TV_PrintIntToStringVar(2, show->bravoTrainer.contestResult + 1);
- sTVShowState = 5;
- break;
- case 4:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
- CopyEasyChatWord(gStringVar2, show->bravoTrainer.words[0]);
- TV_PrintIntToStringVar(2, show->bravoTrainer.contestResult + 1);
- sTVShowState = 5;
- break;
- case 5:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
- CopyContestCategoryToStringVar(1, show->bravoTrainer.contestCategory);
- CopyEasyChatWord(gStringVar3, show->bravoTrainer.words[1]);
- if (show->bravoTrainer.move)
- sTVShowState = 6;
- else
- sTVShowState = 7;
- break;
- case 6:
- StringCopy(gStringVar1, gSpeciesNames[show->bravoTrainer.species]);
- StringCopy(gStringVar2, gMoveNames[show->bravoTrainer.move]);
- CopyEasyChatWord(gStringVar3, show->bravoTrainer.words[1]);
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
+ CopyContestCategoryToStringVar(1, show->bravoTrainer.contestCategory);
+ CopyContestRankToStringVar(2, show->bravoTrainer.contestRank);
+ if (!StringCompare(gSpeciesNames[show->bravoTrainer.species], show->bravoTrainer.pokemonNickname))
+ sTVShowState = 8;
+ else
+ sTVShowState = 1;
+ break;
+ case 1:
+ StringCopy(gStringVar1, gSpeciesNames[show->bravoTrainer.species]);
+ TVShowConvertInternationalString(gStringVar2, show->bravoTrainer.pokemonNickname, show->bravoTrainer.pokemonNameLanguage);
+ CopyContestCategoryToStringVar(2, show->bravoTrainer.contestCategory);
+ sTVShowState = 2;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
+ if (show->bravoTrainer.contestResult == 0) // placed first
+ sTVShowState = 3;
+ else
+ sTVShowState = 4;
+ break;
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
+ CopyEasyChatWord(gStringVar2, show->bravoTrainer.words[0]);
+ ConvertIntToDecimalString(2, show->bravoTrainer.contestResult + 1);
+ sTVShowState = 5;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
+ CopyEasyChatWord(gStringVar2, show->bravoTrainer.words[0]);
+ ConvertIntToDecimalString(2, show->bravoTrainer.contestResult + 1);
+ sTVShowState = 5;
+ break;
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
+ CopyContestCategoryToStringVar(1, show->bravoTrainer.contestCategory);
+ CopyEasyChatWord(gStringVar3, show->bravoTrainer.words[1]);
+ if (show->bravoTrainer.move)
+ sTVShowState = 6;
+ else
sTVShowState = 7;
- break;
- case 7:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
- StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainer.species]);
- TVShowDone();
- break;
- case 8:
- StringCopy(gStringVar1, gSpeciesNames[show->bravoTrainer.species]);
- sTVShowState = 2;
- break;
+ break;
+ case 6:
+ StringCopy(gStringVar1, gSpeciesNames[show->bravoTrainer.species]);
+ StringCopy(gStringVar2, gMoveNames[show->bravoTrainer.move]);
+ CopyEasyChatWord(gStringVar3, show->bravoTrainer.words[1]);
+ sTVShowState = 7;
+ break;
+ case 7:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainer.playerName, show->bravoTrainer.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainer.species]);
+ TVShowDone();
+ break;
+ case 8:
+ StringCopy(gStringVar1, gSpeciesNames[show->bravoTrainer.species]);
+ sTVShowState = 2;
+ break;
}
ShowFieldMessage(sTVBravoTrainerTextGroup[state]);
}
@@ -4580,89 +4363,89 @@ static void DoTVShowBravoTrainerBattleTower(void)
state = sTVShowState;
switch(state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language);
- StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]);
- if (show->bravoTrainerTower.numFights >= 7)
- sTVShowState = 1;
- else
- sTVShowState = 2;
- break;
- case 1:
- if (show->bravoTrainerTower.btLevel == 50)
- {
- StringCopy(gStringVar1, gText_Lv50);
- }
- else
- {
- StringCopy(gStringVar1, gText_OpenLevel);
- }
- TV_PrintIntToStringVar(1, show->bravoTrainerTower.numFights);
- if (show->bravoTrainerTower.wonTheChallenge == TRUE)
- sTVShowState = 3;
- else
- sTVShowState = 4;
- break;
- case 2:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
- TV_PrintIntToStringVar(1, show->bravoTrainerTower.numFights + 1);
- if (show->bravoTrainerTower.interviewResponse == 0)
- sTVShowState = 5;
- else
- sTVShowState = 6;
- break;
- case 3:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
- StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]);
- if (show->bravoTrainerTower.interviewResponse == 0)
- sTVShowState = 5;
- else
- sTVShowState = 6;
- break;
- case 4:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
- StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]);
- if (show->bravoTrainerTower.interviewResponse == 0)
- sTVShowState = 5;
- else
- sTVShowState = 6;
- break;
- case 5:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
- sTVShowState = 11;
- break;
- case 6:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
- sTVShowState = 11;
- break;
- case 7:
- sTVShowState = 11;
- break;
- case 8:
- case 9:
- case 10:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language);
- sTVShowState = 11;
- break;
- case 11:
- CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]);
- if (show->bravoTrainerTower.interviewResponse == 0)
- sTVShowState = 12;
- else
- sTVShowState = 13;
- break;
- case 12:
- case 13:
- CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]);
- TVShowConvertInternationalString(gStringVar2, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language);
- TVShowConvertInternationalString(gStringVar3, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
- sTVShowState = 14;
- break;
- case 14:
- TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language);
- StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]);
- TVShowDone();
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]);
+ if (show->bravoTrainerTower.numFights >= 7)
+ sTVShowState = 1;
+ else
+ sTVShowState = 2;
+ break;
+ case 1:
+ if (show->bravoTrainerTower.btLevel == 50)
+ {
+ StringCopy(gStringVar1, gText_Lv50);
+ }
+ else
+ {
+ StringCopy(gStringVar1, gText_OpenLevel);
+ }
+ ConvertIntToDecimalString(1, show->bravoTrainerTower.numFights);
+ if (show->bravoTrainerTower.wonTheChallenge == TRUE)
+ sTVShowState = 3;
+ else
+ sTVShowState = 4;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
+ ConvertIntToDecimalString(1, show->bravoTrainerTower.numFights + 1);
+ if (show->bravoTrainerTower.interviewResponse == 0)
+ sTVShowState = 5;
+ else
+ sTVShowState = 6;
+ break;
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
+ StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]);
+ if (show->bravoTrainerTower.interviewResponse == 0)
+ sTVShowState = 5;
+ else
+ sTVShowState = 6;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
+ StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]);
+ if (show->bravoTrainerTower.interviewResponse == 0)
+ sTVShowState = 5;
+ else
+ sTVShowState = 6;
+ break;
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
+ sTVShowState = 11;
+ break;
+ case 6:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
+ sTVShowState = 11;
+ break;
+ case 7:
+ sTVShowState = 11;
+ break;
+ case 8:
+ case 9:
+ case 10:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language);
+ sTVShowState = 11;
+ break;
+ case 11:
+ CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]);
+ if (show->bravoTrainerTower.interviewResponse == 0)
+ sTVShowState = 12;
+ else
+ sTVShowState = 13;
+ break;
+ case 12:
+ case 13:
+ CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]);
+ TVShowConvertInternationalString(gStringVar2, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language);
+ TVShowConvertInternationalString(gStringVar3, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage);
+ sTVShowState = 14;
+ break;
+ case 14:
+ TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVBravoTrainerBattleTowerTextGroup[state]);
}
@@ -4677,115 +4460,81 @@ static void DoTVShowTodaysSmartShopper(void)
state = sTVShowState;
switch(state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
- GetMapName(gStringVar2, show->smartshopperShow.shopLocation, 0);
- if (show->smartshopperShow.itemAmounts[0] >= 255)
- {
- sTVShowState = 11;
- }
- else
- {
- sTVShowState = 1;
- }
- break;
- case 1:
- TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
- StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0]));
- TV_PrintIntToStringVar(2, show->smartshopperShow.itemAmounts[0]);
- sTVShowState += 1 + (Random() % 4);
- break;
- case 2:
- case 4:
- case 5:
- if (show->smartshopperShow.itemIds[1] != ITEM_NONE)
- {
- sTVShowState = 6;
- }
- else
- {
- sTVShowState = 10;
- }
- break;
- case 3:
- TV_PrintIntToStringVar(2, show->smartshopperShow.itemAmounts[0] + 1);
- if (show->smartshopperShow.itemIds[1] != ITEM_NONE)
- {
- sTVShowState = 6;
- }
- else
- {
- sTVShowState = 10;
- }
- break;
- case 6:
- StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[1]));
- TV_PrintIntToStringVar(2, show->smartshopperShow.itemAmounts[1]);
- if (show->smartshopperShow.itemIds[2] != ITEM_NONE)
- {
- sTVShowState = 7;
- }
- else if (show->smartshopperShow.priceReduced == TRUE)
- {
- sTVShowState = 8;
- }
- else
- {
- sTVShowState = 9;
- }
- break;
- case 7:
- StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[2]));
- TV_PrintIntToStringVar(2, show->smartshopperShow.itemAmounts[2]);
- if (show->smartshopperShow.priceReduced == TRUE)
- {
- sTVShowState = 8;
- }
- else
- {
- sTVShowState = 9;
- }
- break;
- case 8:
- if (show->smartshopperShow.itemAmounts[0] >= 255)
- {
- sTVShowState = 12;
- }
- else
- {
- sTVShowState = 9;
- }
- break;
- case 9:
- sub_80EF40C(1, show);
- TVShowDone();
- break;
- case 10:
- if (show->smartshopperShow.priceReduced == TRUE)
- {
- sTVShowState = 8;
- }
- else
- {
- sTVShowState = 9;
- }
- break;
- case 11:
- TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
- StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0]));
- if (show->smartshopperShow.priceReduced == TRUE)
- {
- sTVShowState = 8;
- }
- else
- {
- sTVShowState = 12;
- }
- break;
- case 12:
- TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
- TVShowDone();
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
+ GetMapName(gStringVar2, show->smartshopperShow.shopLocation, 0);
+ if (show->smartshopperShow.itemAmounts[0] >= 255)
+ sTVShowState = 11;
+ else
+ sTVShowState = 1;
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
+ StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0]));
+ ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[0]);
+ sTVShowState += 1 + (Random() % 4);
+ break;
+ case 2:
+ case 4:
+ case 5:
+ if (show->smartshopperShow.itemIds[1] != ITEM_NONE)
+ sTVShowState = 6;
+ else
+ sTVShowState = 10;
+ break;
+ case 3:
+ ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[0] + 1);
+ if (show->smartshopperShow.itemIds[1] != ITEM_NONE)
+ sTVShowState = 6;
+ else
+ sTVShowState = 10;
+ break;
+ case 6:
+ StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[1]));
+ ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[1]);
+ if (show->smartshopperShow.itemIds[2] != ITEM_NONE)
+ sTVShowState = 7;
+ else if (show->smartshopperShow.priceReduced == TRUE)
+ sTVShowState = 8;
+ else
+ sTVShowState = 9;
+ break;
+ case 7:
+ StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[2]));
+ ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[2]);
+ if (show->smartshopperShow.priceReduced == TRUE)
+ sTVShowState = 8;
+ else
+ sTVShowState = 9;
+ break;
+ case 8:
+ if (show->smartshopperShow.itemAmounts[0] >= 255)
+ sTVShowState = 12;
+ else
+ sTVShowState = 9;
+ break;
+ case 9:
+ sub_80EF40C(1, show);
+ TVShowDone();
+ break;
+ case 10:
+ if (show->smartshopperShow.priceReduced == TRUE)
+ sTVShowState = 8;
+ else
+ sTVShowState = 9;
+ break;
+ case 11:
+ TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
+ StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0]));
+ if (show->smartshopperShow.priceReduced == TRUE)
+ sTVShowState = 8;
+ else
+ sTVShowState = 12;
+ break;
+ case 12:
+ TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVTodaysSmartShopperTextGroup[state]);
}
@@ -4800,90 +4549,78 @@ static void DoTVShowTheNameRaterShow(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.trainerName, show->nameRaterShow.language);
- StringCopy(gStringVar2, gSpeciesNames[show->nameRaterShow.species]);
- TVShowConvertInternationalString(gStringVar3, show->nameRaterShow.pokemonName, show->nameRaterShow.pokemonNameLanguage);
- sTVShowState = TV_GetNicknameSumMod8(show) + 1;
- break;
- case 1:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- if (show->nameRaterShow.random == 0)
- {
- sTVShowState = 9;
- }
- else if (show->nameRaterShow.random == 1)
- {
- sTVShowState = 10;
- }
- else if (show->nameRaterShow.random == 2)
- {
- sTVShowState = 11;
- }
- break;
- case 2:
- TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.trainerName, show->nameRaterShow.language);
- if (show->nameRaterShow.random == 0)
- {
- sTVShowState = 9;
- }
- else if (show->nameRaterShow.random == 1)
- {
- sTVShowState = 10;
- }
- else if (show->nameRaterShow.random == 2)
- {
- sTVShowState = 11;
- }
- break;
- case 9:
- case 10:
- case 11:
- TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.pokemonName, show->nameRaterShow.pokemonNameLanguage);
- TV_GetNicknameSubstring(1, 0, 0, 1, 0, show);
- TV_GetNicknameSubstring(2, 1, 0, 1, 0, show);
- sTVShowState = 12;
- break;
- case 13:
- TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.trainerName, show->nameRaterShow.language);
- TV_GetNicknameSubstring(1, 0, 2, 0, 0, show);
- TV_GetNicknameSubstring(2, 0, 3, 1, 0, show);
- sTVShowState = 14;
- break;
- case 14:
- TV_GetNicknameSubstring(1, 0, 2, 1, 0, show);
- TV_GetNicknameSubstring(2, 0, 3, 0, 0, show);
- sTVShowState = 18;
- break;
- case 15:
- TV_GetNicknameSubstring(0, 0, 2, 1, 0, show);
- StringCopy(gStringVar2, gSpeciesNames[show->nameRaterShow.species]);
- TV_GetNicknameSubstring(2, 0, 3, 2, show->nameRaterShow.species, show);
- sTVShowState = 16;
- break;
- case 16:
- TV_GetNicknameSubstring(0, 0, 2, 2, show->nameRaterShow.species, show);
- TV_GetNicknameSubstring(2, 0, 3, 1, 0, show);
- sTVShowState = 17;
- break;
- case 17:
- TV_GetNicknameSubstring(0, 0, 2, 1, 0, show);
- StringCopy(gStringVar2, gSpeciesNames[show->nameRaterShow.randomSpecies]);
- TV_GetNicknameSubstring(2, 0, 3, 2, show->nameRaterShow.randomSpecies, show);
- sTVShowState = 18;
- break;
- case 12:
- state = 18;
- sTVShowState = 18;
- case 18:
- TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.pokemonName, show->nameRaterShow.pokemonNameLanguage);
- TVShowDone();
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.trainerName, show->nameRaterShow.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->nameRaterShow.species]);
+ TVShowConvertInternationalString(gStringVar3, show->nameRaterShow.pokemonName, show->nameRaterShow.pokemonNameLanguage);
+ sTVShowState = GetRandomNameRaterStateFromName(show) + 1;
+ break;
+ case 1:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ if (show->nameRaterShow.random == 0)
+ sTVShowState = 9;
+ else if (show->nameRaterShow.random == 1)
+ sTVShowState = 10;
+ else if (show->nameRaterShow.random == 2)
+ sTVShowState = 11;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.trainerName, show->nameRaterShow.language);
+ if (show->nameRaterShow.random == 0)
+ sTVShowState = 9;
+ else if (show->nameRaterShow.random == 1)
+ sTVShowState = 10;
+ else if (show->nameRaterShow.random == 2)
+ sTVShowState = 11;
+ break;
+ case 9:
+ case 10:
+ case 11:
+ TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.pokemonName, show->nameRaterShow.pokemonNameLanguage);
+ GetNicknameSubstring(1, 0, 0, 1, 0, show);
+ GetNicknameSubstring(2, 1, 0, 1, 0, show);
+ sTVShowState = 12;
+ break;
+ case 13:
+ TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.trainerName, show->nameRaterShow.language);
+ GetNicknameSubstring(1, 0, 2, 0, 0, show);
+ GetNicknameSubstring(2, 0, 3, 1, 0, show);
+ sTVShowState = 14;
+ break;
+ case 14:
+ GetNicknameSubstring(1, 0, 2, 1, 0, show);
+ GetNicknameSubstring(2, 0, 3, 0, 0, show);
+ sTVShowState = 18;
+ break;
+ case 15:
+ GetNicknameSubstring(0, 0, 2, 1, 0, show);
+ StringCopy(gStringVar2, gSpeciesNames[show->nameRaterShow.species]);
+ GetNicknameSubstring(2, 0, 3, 2, show->nameRaterShow.species, show);
+ sTVShowState = 16;
+ break;
+ case 16:
+ GetNicknameSubstring(0, 0, 2, 2, show->nameRaterShow.species, show);
+ GetNicknameSubstring(2, 0, 3, 1, 0, show);
+ sTVShowState = 17;
+ break;
+ case 17:
+ GetNicknameSubstring(0, 0, 2, 1, 0, show);
+ StringCopy(gStringVar2, gSpeciesNames[show->nameRaterShow.randomSpecies]);
+ GetNicknameSubstring(2, 0, 3, 2, show->nameRaterShow.randomSpecies, show);
+ sTVShowState = 18;
+ break;
+ case 12:
+ state = 18;
+ sTVShowState = 18;
+ case 18:
+ TVShowConvertInternationalString(gStringVar1, show->nameRaterShow.pokemonName, show->nameRaterShow.pokemonNameLanguage);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVNameRaterTextGroup[state]);
}
@@ -4898,70 +4635,62 @@ static void DoTVShowPokemonTodaySuccessfulCapture(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->pokemonToday.playerName, show->pokemonToday.language);
- StringCopy(gStringVar2, gSpeciesNames[show->pokemonToday.species]);
- TVShowConvertInternationalString(gStringVar3, show->pokemonToday.nickname, show->pokemonToday.language2);
- if (show->pokemonToday.ball == ITEM_MASTER_BALL)
- {
- sTVShowState = 5;
- }
- else
- {
- sTVShowState = 1;
- }
- break;
- case 1:
- sTVShowState = 2;
- break;
- case 2:
- StringCopy(gStringVar2, ItemId_GetName(show->pokemonToday.ball));
- TV_PrintIntToStringVar(2, show->pokemonToday.nBallsUsed);
- if (show->pokemonToday.nBallsUsed < 4)
- {
- sTVShowState = 3;
- }
- else
- {
- sTVShowState = 4;
- }
- break;
- case 3:
- TVShowConvertInternationalString(gStringVar1, show->pokemonToday.playerName, show->pokemonToday.language);
- StringCopy(gStringVar2, gSpeciesNames[show->pokemonToday.species]);
- TVShowConvertInternationalString(gStringVar3, show->pokemonToday.nickname, show->pokemonToday.language2);
- sTVShowState = 6;
- break;
- case 4:
- sTVShowState = 6;
- break;
- case 5:
- TVShowConvertInternationalString(gStringVar1, show->pokemonToday.playerName, show->pokemonToday.language);
- StringCopy(gStringVar2, gSpeciesNames[show->pokemonToday.species]);
- sTVShowState = 6;
- break;
- case 6:
- TVShowConvertInternationalString(gStringVar1, show->pokemonToday.playerName, show->pokemonToday.language);
- StringCopy(gStringVar2, gSpeciesNames[show->pokemonToday.species]);
- TVShowConvertInternationalString(gStringVar3, show->pokemonToday.nickname, show->pokemonToday.language2);
- sTVShowState += 1 + (Random() % 4);
- break;
- case 7:
- case 8:
- StringCopy(gStringVar1, gSpeciesNames[show->pokemonToday.species]);
- TVShowConvertInternationalString(gStringVar2, show->pokemonToday.nickname, show->pokemonToday.language2);
- TV_GetSomeOtherSpeciesAlreadySeenByPlayer_AndPrintName(2, show->pokemonToday.species);
- sTVShowState = 11;
- break;
- case 9:
- case 10:
- StringCopy(gStringVar1, gSpeciesNames[show->pokemonToday.species]);
- TVShowConvertInternationalString(gStringVar2, show->pokemonToday.nickname, show->pokemonToday.language2);
- sTVShowState = 11;
- break;
- case 11:
- TVShowDone();
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonToday.playerName, show->pokemonToday.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->pokemonToday.species]);
+ TVShowConvertInternationalString(gStringVar3, show->pokemonToday.nickname, show->pokemonToday.language2);
+ if (show->pokemonToday.ball == ITEM_MASTER_BALL)
+ sTVShowState = 5;
+ else
+ sTVShowState = 1;
+ break;
+ case 1:
+ sTVShowState = 2;
+ break;
+ case 2:
+ StringCopy(gStringVar2, ItemId_GetName(show->pokemonToday.ball));
+ ConvertIntToDecimalString(2, show->pokemonToday.nBallsUsed);
+ if (show->pokemonToday.nBallsUsed < 4)
+ sTVShowState = 3;
+ else
+ sTVShowState = 4;
+ break;
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonToday.playerName, show->pokemonToday.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->pokemonToday.species]);
+ TVShowConvertInternationalString(gStringVar3, show->pokemonToday.nickname, show->pokemonToday.language2);
+ sTVShowState = 6;
+ break;
+ case 4:
+ sTVShowState = 6;
+ break;
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonToday.playerName, show->pokemonToday.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->pokemonToday.species]);
+ sTVShowState = 6;
+ break;
+ case 6:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonToday.playerName, show->pokemonToday.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->pokemonToday.species]);
+ TVShowConvertInternationalString(gStringVar3, show->pokemonToday.nickname, show->pokemonToday.language2);
+ sTVShowState += 1 + (Random() % 4);
+ break;
+ case 7:
+ case 8:
+ StringCopy(gStringVar1, gSpeciesNames[show->pokemonToday.species]);
+ TVShowConvertInternationalString(gStringVar2, show->pokemonToday.nickname, show->pokemonToday.language2);
+ GetRandomDifferentSpeciesAndNameSeenByPlayer(2, show->pokemonToday.species);
+ sTVShowState = 11;
+ break;
+ case 9:
+ case 10:
+ StringCopy(gStringVar1, gSpeciesNames[show->pokemonToday.species]);
+ TVShowConvertInternationalString(gStringVar2, show->pokemonToday.nickname, show->pokemonToday.language2);
+ sTVShowState = 11;
+ break;
+ case 11:
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVPokemonTodaySuccessfulTextGroup[state]);
}
@@ -4976,45 +4705,37 @@ static void DoTVShowPokemonTodayFailedCapture(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->pokemonTodayFailed.playerName, show->pokemonTodayFailed.language);
- StringCopy(gStringVar2, gSpeciesNames[show->pokemonTodayFailed.species]);
- sTVShowState = 1;
- break;
- case 1:
- TVShowConvertInternationalString(gStringVar1, show->pokemonTodayFailed.playerName, show->pokemonTodayFailed.language);
- GetMapName(gStringVar2, show->pokemonTodayFailed.location, 0);
- StringCopy(gStringVar3, gSpeciesNames[show->pokemonTodayFailed.species2]);
- if (show->pokemonTodayFailed.outcome == 1)
- {
- sTVShowState = 3;
- }
- else
- {
- sTVShowState = 2;
- }
- break;
- case 2:
- case 3:
- TVShowConvertInternationalString(gStringVar1, show->pokemonTodayFailed.playerName, show->pokemonTodayFailed.language);
- TV_PrintIntToStringVar(1, show->pokemonTodayFailed.nBallsUsed);
- if (Random() % 3 == 0)
- {
- sTVShowState = 5;
- }
- else
- {
- sTVShowState = 4;
- }
- break;
- case 4:
- case 5:
- TVShowConvertInternationalString(gStringVar1, show->pokemonTodayFailed.playerName, show->pokemonTodayFailed.language);
- sTVShowState = 6;
- break;
- case 6:
- TVShowDone();
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonTodayFailed.playerName, show->pokemonTodayFailed.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->pokemonTodayFailed.species]);
+ sTVShowState = 1;
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonTodayFailed.playerName, show->pokemonTodayFailed.language);
+ GetMapName(gStringVar2, show->pokemonTodayFailed.location, 0);
+ StringCopy(gStringVar3, gSpeciesNames[show->pokemonTodayFailed.species2]);
+ if (show->pokemonTodayFailed.outcome == 1)
+ sTVShowState = 3;
+ else
+ sTVShowState = 2;
+ break;
+ case 2:
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonTodayFailed.playerName, show->pokemonTodayFailed.language);
+ ConvertIntToDecimalString(1, show->pokemonTodayFailed.nBallsUsed);
+ if (Random() % 3 == 0)
+ sTVShowState = 5;
+ else
+ sTVShowState = 4;
+ break;
+ case 4:
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonTodayFailed.playerName, show->pokemonTodayFailed.language);
+ sTVShowState = 6;
+ break;
+ case 6:
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVPokemonTodayFailedTextGroup[state]);
}
@@ -5030,45 +4751,45 @@ static void DoTVShowPokemonFanClubLetter(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->fanclubLetter.playerName, show->fanclubLetter.language);
- StringCopy(gStringVar2, gSpeciesNames[show->fanclubLetter.species]);
- sTVShowState = 50;
- break;
- case 1:
- rval = (Random() % 4) + 1;
- if (rval == 1)
- sTVShowState = 2;
- else
- sTVShowState = rval + 2;
- break;
- case 2:
- sTVShowState = 51;
- break;
- case 3:
- sTVShowState += (Random() % 3) + 1;
- break;
- case 4:
- case 5:
- case 6:
- TV_FanClubLetter_RandomWordToStringVar3(show);
- sTVShowState = 7;
- break;
- case 7:
- rval = (Random() % 0x1f) + 0x46;
- TV_PrintIntToStringVar(2, rval);
- TVShowDone();
- break;
- case 50:
- ConvertEasyChatWordsToString(gStringVar4, show->fanclubLetter.words, 2, 2);
- ShowFieldMessage(gStringVar4);
- sTVShowState = 1;
- return;
- case 51:
- ConvertEasyChatWordsToString(gStringVar4, show->fanclubLetter.words, 2, 2);
- ShowFieldMessage(gStringVar4);
- sTVShowState = 3;
- return;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->fanclubLetter.playerName, show->fanclubLetter.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->fanclubLetter.species]);
+ sTVShowState = 50;
+ break;
+ case 1:
+ rval = (Random() % 4) + 1;
+ if (rval == 1)
+ sTVShowState = 2;
+ else
+ sTVShowState = rval + 2;
+ break;
+ case 2:
+ sTVShowState = 51;
+ break;
+ case 3:
+ sTVShowState += (Random() % 3) + 1;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ GetRandomWordFromShow(show);
+ sTVShowState = 7;
+ break;
+ case 7:
+ rval = (Random() % 0x1f) + 0x46;
+ ConvertIntToDecimalString(2, rval);
+ TVShowDone();
+ break;
+ case 50:
+ ConvertEasyChatWordsToString(gStringVar4, show->fanclubLetter.words, 2, 2);
+ ShowFieldMessage(gStringVar4);
+ sTVShowState = 1;
+ return;
+ case 51:
+ ConvertEasyChatWordsToString(gStringVar4, show->fanclubLetter.words, 2, 2);
+ ShowFieldMessage(gStringVar4);
+ sTVShowState = 3;
+ return;
}
ShowFieldMessage(sTVFanClubTextGroup[state]);
}
@@ -5083,27 +4804,27 @@ static void DoTVShowRecentHappenings(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->recentHappenings.playerName, show->recentHappenings.language);
- TV_FanClubLetter_RandomWordToStringVar3(show);
- sTVShowState = 50;
- break;
- case 1:
- sTVShowState += 1 + (Random() % 3);
- break;
- case 2:
- case 3:
- case 4:
- sTVShowState = 5;
- break;
- case 5:
- TVShowDone();
- break;
- case 50:
- ConvertEasyChatWordsToString(gStringVar4, show->recentHappenings.words, 2, 2);
- ShowFieldMessage(gStringVar4);
- sTVShowState = 1;
- return;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->recentHappenings.playerName, show->recentHappenings.language);
+ GetRandomWordFromShow(show);
+ sTVShowState = 50;
+ break;
+ case 1:
+ sTVShowState += 1 + (Random() % 3);
+ break;
+ case 2:
+ case 3:
+ case 4:
+ sTVShowState = 5;
+ break;
+ case 5:
+ TVShowDone();
+ break;
+ case 50:
+ ConvertEasyChatWordsToString(gStringVar4, show->recentHappenings.words, 2, 2);
+ ShowFieldMessage(gStringVar4);
+ sTVShowState = 1;
+ return;
}
ShowFieldMessage(sTVRecentHappeninssTextGroup[state]);
}
@@ -5118,25 +4839,25 @@ static void DoTVShowPokemonFanClubOpinions(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->fanclubOpinions.playerName, show->fanclubOpinions.language);
- StringCopy(gStringVar2, gSpeciesNames[show->fanclubOpinions.species]);
- TVShowConvertInternationalString(gStringVar3, show->fanclubOpinions.nickname, show->fanclubOpinions.pokemonNameLanguage);
- sTVShowState = show->fanclubOpinions.questionAsked + 1;
- break;
- case 1:
- case 2:
- case 3:
- TVShowConvertInternationalString(gStringVar1, show->fanclubOpinions.playerName, show->fanclubOpinions.language);
- StringCopy(gStringVar2, gSpeciesNames[show->fanclubOpinions.species]);
- CopyEasyChatWord(gStringVar3, show->fanclubOpinions.words[0]);
- sTVShowState = 4;
- break;
- case 4:
- TVShowConvertInternationalString(gStringVar1, show->fanclubOpinions.playerName, show->fanclubOpinions.language);
- CopyEasyChatWord(gStringVar3, show->fanclubOpinions.words[1]);
- TVShowDone();
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->fanclubOpinions.playerName, show->fanclubOpinions.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->fanclubOpinions.species]);
+ TVShowConvertInternationalString(gStringVar3, show->fanclubOpinions.nickname, show->fanclubOpinions.pokemonNameLanguage);
+ sTVShowState = show->fanclubOpinions.questionAsked + 1;
+ break;
+ case 1:
+ case 2:
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->fanclubOpinions.playerName, show->fanclubOpinions.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->fanclubOpinions.species]);
+ CopyEasyChatWord(gStringVar3, show->fanclubOpinions.words[0]);
+ sTVShowState = 4;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->fanclubOpinions.playerName, show->fanclubOpinions.language);
+ CopyEasyChatWord(gStringVar3, show->fanclubOpinions.words[1]);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVFanClubOpinionsTextGroup[state]);
}
@@ -5181,13 +4902,9 @@ static void DoTVShowPokemonContestLiveUpdates(void)
if (show->contestLiveUpdates.round1Placing == show->contestLiveUpdates.round2Placing)
{
if (show->contestLiveUpdates.round1Placing == 0)
- {
sTVShowState = CONTESTLIVE_STATE_WON_BOTH_ROUNDS;
- }
else
- {
sTVShowState = CONTESTLIVE_STATE_EQUAL_ROUNDS;
- }
}
else if (show->contestLiveUpdates.round1Placing > show->contestLiveUpdates.round2Placing)
{
@@ -5520,64 +5237,64 @@ static void DoTVShowPokemonBattleUpdate(void)
state = sTVShowState;
switch (state)
{
+ case 0:
+ switch (show->battleUpdate.battleType)
+ {
case 0:
- switch (show->battleUpdate.battleType)
- {
- case 0:
- case 1:
- sTVShowState = 1;
- break;
- case 2:
- sTVShowState = 5;
- break;
- }
- break;
case 1:
- TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- if (show->battleUpdate.battleType == 0)
- {
- StringCopy(gStringVar3, gText_Single);
- }
- else
- {
- StringCopy(gStringVar3, gText_Double);
- }
- sTVShowState = 2;
+ sTVShowState = 1;
break;
case 2:
- TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
- StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
- sTVShowState = 3;
- break;
- case 3:
- TVShowConvertInternationalString(gStringVar1, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesOpponent]);
- sTVShowState = 4;
- break;
- case 4:
- TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- TVShowDone();
- break;
- case 5:
- TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- sTVShowState = 6;
- break;
- case 6:
- TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
- StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
- sTVShowState = 7;
- break;
- case 7:
- TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- StringCopy(gStringVar3, gSpeciesNames[show->battleUpdate.speciesOpponent]);
- TVShowDone();
+ sTVShowState = 5;
break;
+ }
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
+ TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
+ if (show->battleUpdate.battleType == 0)
+ {
+ StringCopy(gStringVar3, gText_Single);
+ }
+ else
+ {
+ StringCopy(gStringVar3, gText_Double);
+ }
+ sTVShowState = 2;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
+ StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
+ sTVShowState = 3;
+ break;
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesOpponent]);
+ sTVShowState = 4;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
+ TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
+ TVShowDone();
+ break;
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
+ TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
+ sTVShowState = 6;
+ break;
+ case 6:
+ TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
+ StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
+ sTVShowState = 7;
+ break;
+ case 7:
+ TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
+ TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
+ StringCopy(gStringVar3, gSpeciesNames[show->battleUpdate.speciesOpponent]);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVPokemonBattleUpdateTextGroup[state]);
}
@@ -5592,95 +5309,88 @@ static void DoTVShow3CheersForPokeblocks(void)
state = sTVShowState;
switch (state)
{
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->threeCheers.playerName, show->threeCheers.language);
+ if (show->threeCheers.sheen > 20)
+ sTVShowState = 1;
+ else
+ sTVShowState = 3;
+ break;
+ case 1:
+ switch (show->threeCheers.flavor)
+ {
case 0:
- TVShowConvertInternationalString(gStringVar1, show->threeCheers.playerName, show->threeCheers.language);
- if (show->threeCheers.sheen > 20)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 3;
- }
+ StringCopy(gStringVar1, gText_Spicy2);
break;
case 1:
- switch (show->threeCheers.flavor)
- {
- case 0:
- StringCopy(gStringVar1, gText_Spicy2);
- break;
- case 1:
- StringCopy(gStringVar1, gText_Dry2);
- break;
- case 2:
- StringCopy(gStringVar1, gText_Sweet2);
- break;
- case 3:
- StringCopy(gStringVar1, gText_Bitter2);
- break;
- case 4:
- StringCopy(gStringVar1, gText_Sour2);
- break;
- }
- if (show->threeCheers.sheen > 24)
- {
- StringCopy(gStringVar2, gText_Excellent);
- } else if (show->threeCheers.sheen > 22)
- {
- StringCopy(gStringVar2, gText_VeryGood);
- }
- else
- {
- StringCopy(gStringVar2, gText_Good);
- }
- TVShowConvertInternationalString(gStringVar3, show->threeCheers.playerName, show->threeCheers.language);
- sTVShowState = 2;
+ StringCopy(gStringVar1, gText_Dry2);
break;
case 2:
- TVShowConvertInternationalString(gStringVar1, show->threeCheers.worstBlenderName, show->threeCheers.worstBlenderLanguage);
- sTVShowState = 5;
+ StringCopy(gStringVar1, gText_Sweet2);
break;
case 3:
- switch (show->threeCheers.flavor)
- {
- case 0:
- StringCopy(gStringVar1, gText_Spicy2);
- break;
- case 1:
- StringCopy(gStringVar1, gText_Dry2);
- break;
- case 2:
- StringCopy(gStringVar1, gText_Sweet2);
- break;
- case 3:
- StringCopy(gStringVar1, gText_Bitter2);
- break;
- case 4:
- StringCopy(gStringVar1, gText_Sour2);
- break;
- }
- if (show->threeCheers.sheen > 16)
- {
- StringCopy(gStringVar2, gText_SoSo);
- } else if (show->threeCheers.sheen > 13)
- {
- StringCopy(gStringVar2, gText_Bad);
- }
- else
- {
- StringCopy(gStringVar2, gText_TheWorst);
- }
- TVShowConvertInternationalString(gStringVar3, show->threeCheers.playerName, show->threeCheers.language);
- sTVShowState = 4;
+ StringCopy(gStringVar1, gText_Bitter2);
break;
case 4:
- TVShowConvertInternationalString(gStringVar1, show->threeCheers.worstBlenderName, show->threeCheers.worstBlenderLanguage);
- TVShowConvertInternationalString(gStringVar2, show->threeCheers.playerName, show->threeCheers.language);
- sTVShowState = 5;
+ StringCopy(gStringVar1, gText_Sour2);
break;
- case 5:
- TVShowDone();
+ }
+ if (show->threeCheers.sheen > 24)
+ {
+ StringCopy(gStringVar2, gText_Excellent);
+ } else if (show->threeCheers.sheen > 22)
+ {
+ StringCopy(gStringVar2, gText_VeryGood);
+ }
+ else
+ {
+ StringCopy(gStringVar2, gText_Good);
+ }
+ TVShowConvertInternationalString(gStringVar3, show->threeCheers.playerName, show->threeCheers.language);
+ sTVShowState = 2;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->threeCheers.worstBlenderName, show->threeCheers.worstBlenderLanguage);
+ sTVShowState = 5;
+ break;
+ case 3:
+ switch (show->threeCheers.flavor)
+ {
+ case 0:
+ StringCopy(gStringVar1, gText_Spicy2);
break;
+ case 1:
+ StringCopy(gStringVar1, gText_Dry2);
+ break;
+ case 2:
+ StringCopy(gStringVar1, gText_Sweet2);
+ break;
+ case 3:
+ StringCopy(gStringVar1, gText_Bitter2);
+ break;
+ case 4:
+ StringCopy(gStringVar1, gText_Sour2);
+ break;
+ }
+
+ if (show->threeCheers.sheen > 16)
+ StringCopy(gStringVar2, gText_SoSo);
+ else if (show->threeCheers.sheen > 13)
+ StringCopy(gStringVar2, gText_Bad);
+ else
+ StringCopy(gStringVar2, gText_TheWorst);
+
+ TVShowConvertInternationalString(gStringVar3, show->threeCheers.playerName, show->threeCheers.language);
+ sTVShowState = 4;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->threeCheers.worstBlenderName, show->threeCheers.worstBlenderLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->threeCheers.playerName, show->threeCheers.language);
+ sTVShowState = 5;
+ break;
+ case 5:
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTV3CheersForPokeblocksTextGroup[state]);
}
@@ -5693,62 +5403,48 @@ void DoTVShowInSearchOfTrainers(void)
state = sTVShowState;
switch (state)
{
- case 0:
- GetMapName(gStringVar1, gSaveBlock1Ptr->gabbyAndTyData.mapnum, 0);
- if (gSaveBlock1Ptr->gabbyAndTyData.battleNum > 1)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 2;
- }
- break;
- case 1:
+ case 0:
+ GetMapName(gStringVar1, gSaveBlock1Ptr->gabbyAndTyData.mapnum, 0);
+ if (gSaveBlock1Ptr->gabbyAndTyData.battleNum > 1)
+ sTVShowState = 1;
+ else
sTVShowState = 2;
- break;
- case 2:
- if (!gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn)
- {
- sTVShowState = 4;
- }
- else if (gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall)
- {
- sTVShowState = 5;
- }
- else if (gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem)
- {
- sTVShowState = 6;
- }
- else if (gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon)
- {
- sTVShowState = 7;
- }
- else
- {
- sTVShowState = 3;
- }
- break;
- case 3:
- StringCopy(gStringVar1, gSpeciesNames[gSaveBlock1Ptr->gabbyAndTyData.mon1]);
- StringCopy(gStringVar2, gMoveNames[gSaveBlock1Ptr->gabbyAndTyData.lastMove]);
- StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1Ptr->gabbyAndTyData.mon2]);
- sTVShowState = 8;
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- sTVShowState = 8;
- break;
- case 8:
- CopyEasyChatWord(gStringVar1, gSaveBlock1Ptr->gabbyAndTyData.quote[0]);
- StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1Ptr->gabbyAndTyData.mon1]);
- StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1Ptr->gabbyAndTyData.mon2]);
- gSpecialVar_Result = TRUE;
- sTVShowState = 0;
- TakeTVShowInSearchOfTrainersOffTheAir();
- break;
+ break;
+ case 1:
+ sTVShowState = 2;
+ break;
+ case 2:
+ if (!gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn)
+ sTVShowState = 4;
+ else if (gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall)
+ sTVShowState = 5;
+ else if (gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem)
+ sTVShowState = 6;
+ else if (gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon)
+ sTVShowState = 7;
+ else
+ sTVShowState = 3;
+ break;
+ case 3:
+ StringCopy(gStringVar1, gSpeciesNames[gSaveBlock1Ptr->gabbyAndTyData.mon1]);
+ StringCopy(gStringVar2, gMoveNames[gSaveBlock1Ptr->gabbyAndTyData.lastMove]);
+ StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1Ptr->gabbyAndTyData.mon2]);
+ sTVShowState = 8;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ sTVShowState = 8;
+ break;
+ case 8:
+ CopyEasyChatWord(gStringVar1, gSaveBlock1Ptr->gabbyAndTyData.quote[0]);
+ StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1Ptr->gabbyAndTyData.mon1]);
+ StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1Ptr->gabbyAndTyData.mon2]);
+ gSpecialVar_Result = TRUE;
+ sTVShowState = 0;
+ TakeGabbyAndTyOffTheAir();
+ break;
}
ShowFieldMessage(sTVInSearchOfTrainersTextGroup[state]);
}
@@ -5761,28 +5457,24 @@ static void DoTVShowPokemonAngler(void)
show = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004];
gSpecialVar_Result = FALSE;
if (show->pokemonAngler.nBites < show->pokemonAngler.nFails)
- {
sTVShowState = 0;
- }
else
- {
sTVShowState = 1;
- }
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->pokemonAngler.playerName, show->pokemonAngler.language);
- StringCopy(gStringVar2, gSpeciesNames[show->pokemonAngler.species]);
- TV_PrintIntToStringVar(2, show->pokemonAngler.nFails);
- TVShowDone();
- break;
- case 1:
- TVShowConvertInternationalString(gStringVar1, show->pokemonAngler.playerName, show->pokemonAngler.language);
- StringCopy(gStringVar2, gSpeciesNames[show->pokemonAngler.species]);
- TV_PrintIntToStringVar(2, show->pokemonAngler.nBites);
- TVShowDone();
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonAngler.playerName, show->pokemonAngler.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->pokemonAngler.species]);
+ ConvertIntToDecimalString(2, show->pokemonAngler.nFails);
+ TVShowDone();
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->pokemonAngler.playerName, show->pokemonAngler.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->pokemonAngler.species]);
+ ConvertIntToDecimalString(2, show->pokemonAngler.nBites);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVPokemonAnslerTextGroup[state]);
}
@@ -5797,22 +5489,22 @@ static void DoTVShowTheWorldOfMasters(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->worldOfMasters.playerName, show->worldOfMasters.language);
- TV_PrintIntToStringVar(1, show->worldOfMasters.steps);
- TV_PrintIntToStringVar(2, show->worldOfMasters.numPokeCaught);
- sTVShowState = 1;
- break;
- case 1:
- StringCopy(gStringVar1, gSpeciesNames[show->worldOfMasters.species]);
- sTVShowState = 2;
- break;
- case 2:
- TVShowConvertInternationalString(gStringVar1, show->worldOfMasters.playerName, show->worldOfMasters.language);
- GetMapName(gStringVar2, show->worldOfMasters.location, 0);
- StringCopy(gStringVar3, gSpeciesNames[show->worldOfMasters.caughtPoke]);
- TVShowDone();
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->worldOfMasters.playerName, show->worldOfMasters.language);
+ ConvertIntToDecimalString(1, show->worldOfMasters.steps);
+ ConvertIntToDecimalString(2, show->worldOfMasters.numPokeCaught);
+ sTVShowState = 1;
+ break;
+ case 1:
+ StringCopy(gStringVar1, gSpeciesNames[show->worldOfMasters.species]);
+ sTVShowState = 2;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->worldOfMasters.playerName, show->worldOfMasters.language);
+ GetMapName(gStringVar2, show->worldOfMasters.location, 0);
+ StringCopy(gStringVar3, gSpeciesNames[show->worldOfMasters.caughtPoke]);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVWorldOfMastersTextGroup[state]);
}
@@ -5827,143 +5519,111 @@ static void DoTVShowTodaysRivalTrainer(void)
state = sTVShowState;
switch (state)
{
- case 0:
- switch (show->rivalTrainer.location)
- {
- default:
- sTVShowState = 7;
- break;
- case MAPSEC_SECRET_BASE:
- sTVShowState = 8;
- break;
- case MAPSEC_DYNAMIC:
- switch (show->rivalTrainer.mapLayoutId)
- {
- case LAYOUT_SS_TIDAL_CORRIDOR:
- case LAYOUT_SS_TIDAL_LOWER_DECK:
- case LAYOUT_SS_TIDAL_ROOMS:
- sTVShowState = 10;
- break;
- default:
- sTVShowState = 9;
- break;
- }
- break;
- }
- break;
- case 7:
- TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
- TV_PrintIntToStringVar(1, show->rivalTrainer.dexCount);
- GetMapName(gStringVar3, show->rivalTrainer.location, 0);
- if (show->rivalTrainer.badgeCount != 0)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 2;
- }
- break;
- case 8:
- TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
- TV_PrintIntToStringVar(1, show->rivalTrainer.dexCount);
- if (show->rivalTrainer.badgeCount != 0)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 2;
- }
- break;
- case 9:
- TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
- TV_PrintIntToStringVar(1, show->rivalTrainer.dexCount);
- if (show->rivalTrainer.badgeCount != 0)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 2;
- }
- break;
- case 10:
- TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
- TV_PrintIntToStringVar(1, show->rivalTrainer.dexCount);
- if (show->rivalTrainer.badgeCount != 0)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 2;
- }
+ case 0:
+ switch (show->rivalTrainer.location)
+ {
+ default:
+ sTVShowState = 7;
break;
- case 1:
- TV_PrintIntToStringVar(0, show->rivalTrainer.badgeCount);
- if (FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER))
- {
- if (show->rivalTrainer.nSilverSymbols || show->rivalTrainer.nGoldSymbols)
- {
- sTVShowState = 4;
- }
- else
- {
- sTVShowState = 3;
- }
- }
- else
- {
- sTVShowState = 6;
- }
+ case MAPSEC_SECRET_BASE:
+ sTVShowState = 8;
break;
- case 2:
- if (FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER))
- {
- if (show->rivalTrainer.nSilverSymbols || show->rivalTrainer.nGoldSymbols)
- {
- sTVShowState = 4;
- }
- else
- {
- sTVShowState = 3;
- }
- }
- else
+ case MAPSEC_DYNAMIC:
+ switch (show->rivalTrainer.mapLayoutId)
{
- sTVShowState = 6;
+ case LAYOUT_SS_TIDAL_CORRIDOR:
+ case LAYOUT_SS_TIDAL_LOWER_DECK:
+ case LAYOUT_SS_TIDAL_ROOMS:
+ sTVShowState = 10;
+ break;
+ default:
+ sTVShowState = 9;
+ break;
}
break;
- case 3:
- if (show->rivalTrainer.battlePoints == 0)
- {
- sTVShowState = 6;
- }
+ }
+ break;
+ case 7:
+ TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
+ ConvertIntToDecimalString(1, show->rivalTrainer.dexCount);
+ GetMapName(gStringVar3, show->rivalTrainer.location, 0);
+ if (show->rivalTrainer.badgeCount != 0)
+ sTVShowState = 1;
+ else
+ sTVShowState = 2;
+ break;
+ case 8:
+ TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
+ ConvertIntToDecimalString(1, show->rivalTrainer.dexCount);
+ if (show->rivalTrainer.badgeCount != 0)
+ sTVShowState = 1;
+ else
+ sTVShowState = 2;
+ break;
+ case 9:
+ TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
+ ConvertIntToDecimalString(1, show->rivalTrainer.dexCount);
+ if (show->rivalTrainer.badgeCount != 0)
+ sTVShowState = 1;
+ else
+ sTVShowState = 2;
+ break;
+ case 10:
+ TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
+ ConvertIntToDecimalString(1, show->rivalTrainer.dexCount);
+ if (show->rivalTrainer.badgeCount != 0)
+ sTVShowState = 1;
+ else
+ sTVShowState = 2;
+ break;
+ case 1:
+ ConvertIntToDecimalString(0, show->rivalTrainer.badgeCount);
+ if (FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER))
+ {
+ if (show->rivalTrainer.nSilverSymbols || show->rivalTrainer.nGoldSymbols)
+ sTVShowState = 4;
else
- {
- sTVShowState = 5;
- }
- break;
- case 4:
- TV_PrintIntToStringVar(0, show->rivalTrainer.nGoldSymbols);
- TV_PrintIntToStringVar(1, show->rivalTrainer.nSilverSymbols);
- if (show->rivalTrainer.battlePoints == 0)
- {
- sTVShowState = 6;
- }
+ sTVShowState = 3;
+ }
+ else
+ {
+ sTVShowState = 6;
+ }
+ break;
+ case 2:
+ if (FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER))
+ {
+ if (show->rivalTrainer.nSilverSymbols || show->rivalTrainer.nGoldSymbols)
+ sTVShowState = 4;
else
- {
- sTVShowState = 5;
- }
- break;
- case 5:
- TV_PrintIntToStringVar(0, show->rivalTrainer.battlePoints);
+ sTVShowState = 3;
+ }
+ else
+ {
sTVShowState = 6;
- break;
- case 6:
- TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
- TVShowDone();
+ }
+ break;
+ case 3:
+ if (show->rivalTrainer.battlePoints == 0)
+ sTVShowState = 6;
+ else
+ sTVShowState = 5;
+ break;
+ case 4:
+ ConvertIntToDecimalString(0, show->rivalTrainer.nGoldSymbols);
+ ConvertIntToDecimalString(1, show->rivalTrainer.nSilverSymbols);
+ if (show->rivalTrainer.battlePoints == 0)
+ sTVShowState = 6;
+ else
+ sTVShowState = 5;
+ break;
+ case 5:
+ ConvertIntToDecimalString(0, show->rivalTrainer.battlePoints);
+ sTVShowState = 6;
+ break;
+ case 6:
+ TVShowConvertInternationalString(gStringVar1, show->rivalTrainer.playerName, show->rivalTrainer.language);
+ TVShowDone();
}
ShowFieldMessage(sTVTodaysRivalTrainerTextGroup[state]);
}
@@ -6026,38 +5686,38 @@ static void DoTVShowHoennTreasureInvestigators(void)
state = sTVShowState;
switch (state)
{
- case 0:
- StringCopy(gStringVar1, ItemId_GetName(show->treasureInvestigators.item));
- if (show->treasureInvestigators.location == MAPSEC_DYNAMIC)
- {
- switch (show->treasureInvestigators.mapLayoutId)
- {
- case LAYOUT_SS_TIDAL_CORRIDOR:
- case LAYOUT_SS_TIDAL_LOWER_DECK:
- case LAYOUT_SS_TIDAL_ROOMS:
- sTVShowState = 2;
- break;
- default:
- sTVShowState = 1;
- break;
- }
- }
- else
+ case 0:
+ StringCopy(gStringVar1, ItemId_GetName(show->treasureInvestigators.item));
+ if (show->treasureInvestigators.location == MAPSEC_DYNAMIC)
+ {
+ switch (show->treasureInvestigators.mapLayoutId)
{
+ case LAYOUT_SS_TIDAL_CORRIDOR:
+ case LAYOUT_SS_TIDAL_LOWER_DECK:
+ case LAYOUT_SS_TIDAL_ROOMS:
+ sTVShowState = 2;
+ break;
+ default:
sTVShowState = 1;
+ break;
}
- break;
- case 1:
- StringCopy(gStringVar1, ItemId_GetName(show->treasureInvestigators.item));
- TVShowConvertInternationalString(gStringVar2, show->treasureInvestigators.playerName, show->treasureInvestigators.language);
- GetMapName(gStringVar3, show->treasureInvestigators.location, 0);
- TVShowDone();
- break;
- case 2:
- StringCopy(gStringVar1, ItemId_GetName(show->treasureInvestigators.item));
- TVShowConvertInternationalString(gStringVar2, show->treasureInvestigators.playerName, show->treasureInvestigators.language);
- TVShowDone();
- break;
+ }
+ else
+ {
+ sTVShowState = 1;
+ }
+ break;
+ case 1:
+ StringCopy(gStringVar1, ItemId_GetName(show->treasureInvestigators.item));
+ TVShowConvertInternationalString(gStringVar2, show->treasureInvestigators.playerName, show->treasureInvestigators.language);
+ GetMapName(gStringVar3, show->treasureInvestigators.location, 0);
+ TVShowDone();
+ break;
+ case 2:
+ StringCopy(gStringVar1, ItemId_GetName(show->treasureInvestigators.item));
+ TVShowConvertInternationalString(gStringVar2, show->treasureInvestigators.playerName, show->treasureInvestigators.language);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVHoennTreasureInvestisatorsTextGroup[state]);
}
@@ -6072,66 +5732,62 @@ static void DoTVShowFindThatGamer(void)
state = sTVShowState;
switch (state)
{
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->findThatGamer.playerName, show->findThatGamer.language);
+ switch (show->findThatGamer.whichGame)
+ {
case 0:
- TVShowConvertInternationalString(gStringVar1, show->findThatGamer.playerName, show->findThatGamer.language);
- switch (show->findThatGamer.whichGame)
- {
- case 0:
- StringCopy(gStringVar2, gText_Slots);
- break;
- case 1:
- StringCopy(gStringVar2, gText_Roulette);
- break;
- }
- if (show->findThatGamer.won == TRUE)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 2;
- }
+ StringCopy(gStringVar2, gText_Slots);
break;
case 1:
- TVShowConvertInternationalString(gStringVar1, show->findThatGamer.playerName, show->findThatGamer.language);
- switch (show->findThatGamer.whichGame)
- {
- case 0:
- StringCopy(gStringVar2, gText_Slots);
- break;
- case 1:
- StringCopy(gStringVar2, gText_Roulette);
- break;
- }
- TV_PrintIntToStringVar(2, show->findThatGamer.nCoins);
- TVShowDone(); break;
- case 2:
- TVShowConvertInternationalString(gStringVar1, show->findThatGamer.playerName, show->findThatGamer.language);
- switch (show->findThatGamer.whichGame)
- {
- case 0:
- StringCopy(gStringVar2, gText_Slots);
- break;
- case 1:
- StringCopy(gStringVar2, gText_Roulette);
- break;
- }
- TV_PrintIntToStringVar(2, show->findThatGamer.nCoins);
- sTVShowState = 3;
+ StringCopy(gStringVar2, gText_Roulette);
break;
- case 3:
- TVShowConvertInternationalString(gStringVar1, show->findThatGamer.playerName, show->findThatGamer.language);
- switch (show->findThatGamer.whichGame)
- {
- case 0:
- StringCopy(gStringVar2, gText_Roulette);
- break;
- case 1:
- StringCopy(gStringVar2, gText_Slots);
- break;
- }
- TVShowDone();
+ }
+ if (show->findThatGamer.won == TRUE)
+ sTVShowState = 1;
+ else
+ sTVShowState = 2;
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->findThatGamer.playerName, show->findThatGamer.language);
+ switch (show->findThatGamer.whichGame)
+ {
+ case 0:
+ StringCopy(gStringVar2, gText_Slots);
+ break;
+ case 1:
+ StringCopy(gStringVar2, gText_Roulette);
+ break;
+ }
+ ConvertIntToDecimalString(2, show->findThatGamer.nCoins);
+ TVShowDone(); break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->findThatGamer.playerName, show->findThatGamer.language);
+ switch (show->findThatGamer.whichGame)
+ {
+ case 0:
+ StringCopy(gStringVar2, gText_Slots);
+ break;
+ case 1:
+ StringCopy(gStringVar2, gText_Roulette);
+ break;
+ }
+ ConvertIntToDecimalString(2, show->findThatGamer.nCoins);
+ sTVShowState = 3;
+ break;
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->findThatGamer.playerName, show->findThatGamer.language);
+ switch (show->findThatGamer.whichGame)
+ {
+ case 0:
+ StringCopy(gStringVar2, gText_Roulette);
+ break;
+ case 1:
+ StringCopy(gStringVar2, gText_Slots);
break;
+ }
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVFindThatGamerTextGroup[state]);
}
@@ -6146,95 +5802,87 @@ static void DoTVShowBreakingNewsTV(void)
state = sTVShowState;
switch (state)
{
- case 0:
- if (show->breakingNews.outcome == 0)
- {
- sTVShowState = 1;
- }
- else
- {
- sTVShowState = 5;
- }
- break;
+ case 0:
+ if (show->breakingNews.outcome == 0)
+ sTVShowState = 1;
+ else
+ sTVShowState = 5;
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
+ GetMapName(gStringVar3, show->breakingNews.location, 0);
+ sTVShowState = 2;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
+ StringCopy(gStringVar3, gSpeciesNames[show->breakingNews.poke1Species]);
+ sTVShowState = 3;
+ break;
+ case 3:
+ ConvertIntToDecimalString(0, show->breakingNews.balls);
+ StringCopy(gStringVar2, ItemId_GetName(show->breakingNews.caughtMonBall));
+ sTVShowState = 4;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
+ GetMapName(gStringVar2, show->breakingNews.location, 0);
+ TVShowDone();
+ break;
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
+ GetMapName(gStringVar3, show->breakingNews.location, 0);
+ sTVShowState = 6;
+ break;
+ case 6:
+ TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
+ StringCopy(gStringVar3, gSpeciesNames[show->breakingNews.poke1Species]);
+ switch (show->breakingNews.outcome)
+ {
case 1:
- TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
- StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
- GetMapName(gStringVar3, show->breakingNews.location, 0);
- sTVShowState = 2;
+ if (show->breakingNews.lastUsedMove == MOVE_NONE)
+ sTVShowState = 12;
+ else
+ sTVShowState = 7;
break;
case 2:
- TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
- StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
- StringCopy(gStringVar3, gSpeciesNames[show->breakingNews.poke1Species]);
- sTVShowState = 3;
+ sTVShowState = 9;
break;
case 3:
- TV_PrintIntToStringVar(0, show->breakingNews.balls);
- StringCopy(gStringVar2, ItemId_GetName(show->breakingNews.caughtMonBall));
- sTVShowState = 4;
- break;
- case 4:
- TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
- GetMapName(gStringVar2, show->breakingNews.location, 0);
- TVShowDone();
- break;
- case 5:
- TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
- StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
- GetMapName(gStringVar3, show->breakingNews.location, 0);
- sTVShowState = 6;
- break;
- case 6:
- TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
- StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
- StringCopy(gStringVar3, gSpeciesNames[show->breakingNews.poke1Species]);
- switch (show->breakingNews.outcome)
- {
- case 1:
- if (show->breakingNews.lastUsedMove == MOVE_NONE)
- {
- sTVShowState = 12;
- }
- else
- {
- sTVShowState = 7;
- }
- break;
- case 2:
- sTVShowState = 9;
- break;
- case 3:
- sTVShowState = 10;
- break;
- }
- break;
- case 7:
- StringCopy(gStringVar1, gMoveNames[show->breakingNews.lastUsedMove]);
- StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.poke1Species]);
- sTVShowState = 8;
- break;
- case 12:
- TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
- StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
- StringCopy(gStringVar3, gSpeciesNames[show->breakingNews.poke1Species]);
- sTVShowState = 8;
- break;
- case 8:
- TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
- GetMapName(gStringVar2, show->breakingNews.location, 0);
- sTVShowState = 11;
- break;
- case 9:
- case 10:
- TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
- StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
- GetMapName(gStringVar3, show->breakingNews.location, 0);
- sTVShowState = 11;
- break;
- case 11:
- TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
- TVShowDone();
+ sTVShowState = 10;
break;
+ }
+ break;
+ case 7:
+ StringCopy(gStringVar1, gMoveNames[show->breakingNews.lastUsedMove]);
+ StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.poke1Species]);
+ sTVShowState = 8;
+ break;
+ case 12:
+ TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
+ StringCopy(gStringVar3, gSpeciesNames[show->breakingNews.poke1Species]);
+ sTVShowState = 8;
+ break;
+ case 8:
+ TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
+ GetMapName(gStringVar2, show->breakingNews.location, 0);
+ sTVShowState = 11;
+ break;
+ case 9:
+ case 10:
+ TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->breakingNews.lastOpponentSpecies]);
+ GetMapName(gStringVar3, show->breakingNews.location, 0);
+ sTVShowState = 11;
+ break;
+ case 11:
+ TVShowConvertInternationalString(gStringVar1, show->breakingNews.playerName, show->breakingNews.language);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVBreakingNewsTextGroup[state]);
}
@@ -6249,88 +5897,72 @@ static void DoTVShowSecretBaseVisit(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->secretBaseVisit.playerName, show->secretBaseVisit.language);
- if (show->secretBaseVisit.nDecorations == 0)
- {
- sTVShowState = 2;
- }
- else
- {
- sTVShowState = 1;
- }
- break;
- case 1:
- StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[0]].name);
- if (show->secretBaseVisit.nDecorations == 1)
- {
- sTVShowState = 4;
- }
- else
- {
- sTVShowState = 3;
- }
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->secretBaseVisit.playerName, show->secretBaseVisit.language);
+ if (show->secretBaseVisit.nDecorations == 0)
+ sTVShowState = 2;
+ else
+ sTVShowState = 1;
+ break;
+ case 1:
+ StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[0]].name);
+ if (show->secretBaseVisit.nDecorations == 1)
+ sTVShowState = 4;
+ else
+ sTVShowState = 3;
+ break;
+ case 3:
+ StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[1]].name);
+ switch (show->secretBaseVisit.nDecorations)
+ {
+ case 2:
+ sTVShowState = 7;
break;
case 3:
- StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[1]].name);
- switch (show->secretBaseVisit.nDecorations)
- {
- case 2:
- sTVShowState = 7;
- break;
- case 3:
- sTVShowState = 6;
- break;
- case 4:
- sTVShowState = 5;
- break;
- }
- break;
- case 5:
- StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[2]].name);
- StringCopy(gStringVar3, gDecorations[show->secretBaseVisit.decorations[3]].name);
- sTVShowState = 8;
- break;
- case 6:
- StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[2]].name);
- sTVShowState = 8;
+ sTVShowState = 6;
break;
- case 2:
case 4:
- case 7:
- sTVShowState = 8;
- break;
- case 8:
- TVShowConvertInternationalString(gStringVar1, show->secretBaseVisit.playerName, show->secretBaseVisit.language);
- if (show->secretBaseVisit.avgLevel < 25)
- {
- sTVShowState = 12;
- }
- else if (show->secretBaseVisit.avgLevel < 50)
- {
- sTVShowState = 11;
- }
- else if (show->secretBaseVisit.avgLevel < 70)
- {
- sTVShowState = 10;
- }
- else
- {
- sTVShowState = 9;
- }
- break;
- case 9:
- case 10:
- case 11:
- case 12:
- TVShowConvertInternationalString(gStringVar1, show->secretBaseVisit.playerName, show->secretBaseVisit.language);
- StringCopy(gStringVar2, gSpeciesNames[show->secretBaseVisit.species]);
- StringCopy(gStringVar3, gMoveNames[show->secretBaseVisit.move]);
- sTVShowState = 13;
- break;
- case 13:
- TVShowDone();
+ sTVShowState = 5;
break;
+ }
+ break;
+ case 5:
+ StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[2]].name);
+ StringCopy(gStringVar3, gDecorations[show->secretBaseVisit.decorations[3]].name);
+ sTVShowState = 8;
+ break;
+ case 6:
+ StringCopy(gStringVar2, gDecorations[show->secretBaseVisit.decorations[2]].name);
+ sTVShowState = 8;
+ break;
+ case 2:
+ case 4:
+ case 7:
+ sTVShowState = 8;
+ break;
+ case 8:
+ TVShowConvertInternationalString(gStringVar1, show->secretBaseVisit.playerName, show->secretBaseVisit.language);
+ if (show->secretBaseVisit.avgLevel < 25)
+ sTVShowState = 12;
+ else if (show->secretBaseVisit.avgLevel < 50)
+ sTVShowState = 11;
+ else if (show->secretBaseVisit.avgLevel < 70)
+ sTVShowState = 10;
+ else
+ sTVShowState = 9;
+ break;
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ TVShowConvertInternationalString(gStringVar1, show->secretBaseVisit.playerName, show->secretBaseVisit.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->secretBaseVisit.species]);
+ StringCopy(gStringVar3, gMoveNames[show->secretBaseVisit.move]);
+ sTVShowState = 13;
+ break;
+ case 13:
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVSecretBaseVisitTextGroup[state]);
}
@@ -6375,56 +6007,56 @@ static void DoTVShowThePokemonBattleSeminar(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->battleSeminar.playerName, show->battleSeminar.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleSeminar.species]);
- StringCopy(gStringVar3, gSpeciesNames[show->battleSeminar.foeSpecies]);
- sTVShowState = 1;
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->battleSeminar.playerName, show->battleSeminar.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleSeminar.species]);
+ StringCopy(gStringVar3, gSpeciesNames[show->battleSeminar.foeSpecies]);
+ sTVShowState = 1;
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->battleSeminar.playerName, show->battleSeminar.language);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleSeminar.foeSpecies]);
+ StringCopy(gStringVar3, gMoveNames[show->battleSeminar.move]);
+ sTVShowState = 2;
+ break;
+ case 2:
+ StringCopy(gStringVar1, gSpeciesNames[show->battleSeminar.species]);
+ switch (show->battleSeminar.nOtherMoves)
+ {
case 1:
- TVShowConvertInternationalString(gStringVar1, show->battleSeminar.playerName, show->battleSeminar.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleSeminar.foeSpecies]);
- StringCopy(gStringVar3, gMoveNames[show->battleSeminar.move]);
- sTVShowState = 2;
+ sTVShowState = 5;
break;
case 2:
- StringCopy(gStringVar1, gSpeciesNames[show->battleSeminar.species]);
- switch (show->battleSeminar.nOtherMoves)
- {
- case 1:
- sTVShowState = 5;
- break;
- case 2:
- sTVShowState = 4;
- break;
- case 3:
- sTVShowState = 3;
- break;
- default:
- sTVShowState = 6;
- break;
- }
+ sTVShowState = 4;
break;
case 3:
- StringCopy(gStringVar1, gMoveNames[show->battleSeminar.otherMoves[0]]);
- StringCopy(gStringVar2, gMoveNames[show->battleSeminar.otherMoves[1]]);
- StringCopy(gStringVar3, gMoveNames[show->battleSeminar.otherMoves[2]]);
- sTVShowState = 6;
- break;
- case 4:
- StringCopy(gStringVar1, gMoveNames[show->battleSeminar.otherMoves[0]]);
- StringCopy(gStringVar2, gMoveNames[show->battleSeminar.otherMoves[1]]);
- sTVShowState = 6;
+ sTVShowState = 3;
break;
- case 5:
- StringCopy(gStringVar2, gMoveNames[show->battleSeminar.otherMoves[0]]);
+ default:
sTVShowState = 6;
break;
- case 6:
- StringCopy(gStringVar1, gMoveNames[show->battleSeminar.betterMove]);
- StringCopy(gStringVar2, gMoveNames[show->battleSeminar.move]);
- TVShowDone();
- break;
+ }
+ break;
+ case 3:
+ StringCopy(gStringVar1, gMoveNames[show->battleSeminar.otherMoves[0]]);
+ StringCopy(gStringVar2, gMoveNames[show->battleSeminar.otherMoves[1]]);
+ StringCopy(gStringVar3, gMoveNames[show->battleSeminar.otherMoves[2]]);
+ sTVShowState = 6;
+ break;
+ case 4:
+ StringCopy(gStringVar1, gMoveNames[show->battleSeminar.otherMoves[0]]);
+ StringCopy(gStringVar2, gMoveNames[show->battleSeminar.otherMoves[1]]);
+ sTVShowState = 6;
+ break;
+ case 5:
+ StringCopy(gStringVar2, gMoveNames[show->battleSeminar.otherMoves[0]]);
+ sTVShowState = 6;
+ break;
+ case 6:
+ StringCopy(gStringVar1, gMoveNames[show->battleSeminar.betterMove]);
+ StringCopy(gStringVar2, gMoveNames[show->battleSeminar.move]);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVThePokemonBattleSeminarTextGroup[state]);
}
@@ -6439,57 +6071,49 @@ static void DoTVShowTrainerFanClubSpecial(void)
state = sTVShowState;
switch (state)
{
- case 0:
- TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
- CopyEasyChatWord(gStringVar3, show->fanClubSpecial.words[0]);
- if (show->fanClubSpecial.score >= 90)
- {
- sTVShowState = 1;
- }
- else if (show->fanClubSpecial.score >= 70)
- {
- sTVShowState = 2;
- }
- else if (show->fanClubSpecial.score >= 30)
- {
- sTVShowState = 3;
- }
- else
- {
- sTVShowState = 4;
- }
- break;
- case 1:
- TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
- TV_PrintIntToStringVar(2, show->fanClubSpecial.score);
- sTVShowState = 5;
- break;
- case 2:
- TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
- TV_PrintIntToStringVar(2, show->fanClubSpecial.score);
- sTVShowState = 5;
- break;
- case 3:
- TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
- TV_PrintIntToStringVar(2, show->fanClubSpecial.score);
- sTVShowState = 5;
- break;
- case 4:
- TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
- TV_PrintIntToStringVar(2, show->fanClubSpecial.score);
- sTVShowState = 5;
- break;
- case 5:
- TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
- CopyEasyChatWord(gStringVar3, show->fanClubSpecial.words[0]);
- TVShowDone();
- break;
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
+ CopyEasyChatWord(gStringVar3, show->fanClubSpecial.words[0]);
+ if (show->fanClubSpecial.score >= 90)
+ sTVShowState = 1;
+ else if (show->fanClubSpecial.score >= 70)
+ sTVShowState = 2;
+ else if (show->fanClubSpecial.score >= 30)
+ sTVShowState = 3;
+ else
+ sTVShowState = 4;
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
+ ConvertIntToDecimalString(2, show->fanClubSpecial.score);
+ sTVShowState = 5;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
+ ConvertIntToDecimalString(2, show->fanClubSpecial.score);
+ sTVShowState = 5;
+ break;
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
+ ConvertIntToDecimalString(2, show->fanClubSpecial.score);
+ sTVShowState = 5;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
+ ConvertIntToDecimalString(2, show->fanClubSpecial.score);
+ sTVShowState = 5;
+ break;
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->fanClubSpecial.idolName, show->fanClubSpecial.idolNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->fanClubSpecial.playerName, show->fanClubSpecial.language);
+ CopyEasyChatWord(gStringVar3, show->fanClubSpecial.words[0]);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVTrainerFanClubSpecialTextGroup[state]);
}
@@ -6505,78 +6129,79 @@ static void DoTVShowTrainerFanClub(void)
state = sTVShowState;
switch (state)
{
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->trainerFanClub.playerName, show->trainerFanClub.language);
+ playerId = ((show->common.trainerIdHi << 8) + show->common.trainerIdLo);
+ switch (playerId % 10)
+ {
case 0:
- TVShowConvertInternationalString(gStringVar1, show->trainerFanClub.playerName, show->trainerFanClub.language);
- playerId = ((show->common.trainerIdHi << 8) + show->common.trainerIdLo);
- switch (playerId % 10)
- {
- case 0:
- sTVShowState = 1;
- break;
- case 1:
- sTVShowState = 2;
- break;
- case 2:
- sTVShowState = 3;
- break;
- case 3:
- sTVShowState = 4;
- break;
- case 4:
- sTVShowState = 5;
- break;
- case 5:
- sTVShowState = 6;
- break;
- case 6:
- sTVShowState = 7;
- break;
- case 7:
- sTVShowState = 8;
- break;
- case 8:
- sTVShowState = 9;
- break;
- case 9:
- sTVShowState = 10;
- break;
- }
+ sTVShowState = 1;
break;
case 1:
- sTVShowState = 11;
+ sTVShowState = 2;
break;
case 2:
- sTVShowState = 11;
+ sTVShowState = 3;
break;
case 3:
- sTVShowState = 11;
+ sTVShowState = 4;
break;
case 4:
- sTVShowState = 11;
+ sTVShowState = 5;
break;
case 5:
- sTVShowState = 11;
+ sTVShowState = 6;
break;
case 6:
- sTVShowState = 11;
+ sTVShowState = 7;
break;
case 7:
- sTVShowState = 11;
+ sTVShowState = 8;
break;
case 8:
- sTVShowState = 11;
+ sTVShowState = 9;
break;
case 9:
- sTVShowState = 11;
- break;
- case 10:
- sTVShowState = 11;
+ sTVShowState = 10;
break;
- case 11:
- TVShowConvertInternationalString(gStringVar1, show->trainerFanClub.playerName, show->trainerFanClub.language);
- CopyEasyChatWord(gStringVar2, show->trainerFanClub.words[0]);
- CopyEasyChatWord(gStringVar3, show->trainerFanClub.words[1]);
- TVShowDone();
+ }
+ break;
+ case 1:
+ sTVShowState = 11;
+ break;
+ case 2:
+ sTVShowState = 11;
+ break;
+ case 3:
+ sTVShowState = 11;
+ break;
+ case 4:
+ sTVShowState = 11;
+ break;
+ case 5:
+ sTVShowState = 11;
+ break;
+ case 6:
+ sTVShowState = 11;
+ break;
+ case 7:
+ sTVShowState = 11;
+ break;
+ case 8:
+ sTVShowState = 11;
+ break;
+ case 9:
+ sTVShowState = 11;
+ break;
+ case 10:
+ sTVShowState = 11;
+ break;
+ case 11:
+ TVShowConvertInternationalString(gStringVar1, show->trainerFanClub.playerName, show->trainerFanClub.language);
+ CopyEasyChatWord(gStringVar2, show->trainerFanClub.words[0]);
+ CopyEasyChatWord(gStringVar3, show->trainerFanClub.words[1]);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVTrainerFanClubTextGroup[state]);
}
@@ -6594,95 +6219,95 @@ static void DoTVShowSpotTheCuties(void)
state = sTVShowState;
switch (state)
{
- case SPOTCUTIES_STATE_INTRO:
- TVShowConvertInternationalString(gStringVar1, show->cuties.playerName, show->cuties.language);
- TVShowConvertInternationalString(gStringVar2, show->cuties.nickname, show->cuties.pokemonNameLanguage);
+ case SPOTCUTIES_STATE_INTRO:
+ TVShowConvertInternationalString(gStringVar1, show->cuties.playerName, show->cuties.language);
+ TVShowConvertInternationalString(gStringVar2, show->cuties.nickname, show->cuties.pokemonNameLanguage);
- // Comments following the intro depend on how many ribbons the pokemon has
- if (show->cuties.nRibbons < 10)
- sTVShowState = SPOTCUTIES_STATE_RIBBONS_LOW;
- else if (show->cuties.nRibbons < 20)
- sTVShowState = SPOTCUTIES_STATE_RIBBONS_MID;
- else
- sTVShowState = SPOTCUTIES_STATE_RIBBONS_HIGH;
- break;
- case SPOTCUTIES_STATE_RIBBONS_LOW:
- case SPOTCUTIES_STATE_RIBBONS_MID:
- case SPOTCUTIES_STATE_RIBBONS_HIGH:
- TVShowConvertInternationalString(gStringVar1, show->cuties.playerName, show->cuties.language);
- TVShowConvertInternationalString(gStringVar2, show->cuties.nickname, show->cuties.pokemonNameLanguage);
- TV_PrintIntToStringVar(2, show->cuties.nRibbons);
- sTVShowState = SPOTCUTIES_STATE_RIBBON_INTRO;
- break;
- case SPOTCUTIES_STATE_RIBBON_INTRO:
- TVShowConvertInternationalString(gStringVar2, show->cuties.nickname, show->cuties.pokemonNameLanguage);
- switch (show->cuties.selectedRibbon)
- {
- case CHAMPION_RIBBON:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_CHAMPION;
- break;
- case COOL_RIBBON_NORMAL:
- case COOL_RIBBON_SUPER:
- case COOL_RIBBON_HYPER:
- case COOL_RIBBON_MASTER:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_COOL;
- break;
- case BEAUTY_RIBBON_NORMAL:
- case BEAUTY_RIBBON_SUPER:
- case BEAUTY_RIBBON_HYPER:
- case BEAUTY_RIBBON_MASTER:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_BEAUTY;
- break;
- case CUTE_RIBBON_NORMAL:
- case CUTE_RIBBON_SUPER:
- case CUTE_RIBBON_HYPER:
- case CUTE_RIBBON_MASTER:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_CUTE;
- break;
- case SMART_RIBBON_NORMAL:
- case SMART_RIBBON_SUPER:
- case SMART_RIBBON_HYPER:
- case SMART_RIBBON_MASTER:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_SMART;
- break;
- case TOUGH_RIBBON_NORMAL:
- case TOUGH_RIBBON_SUPER:
- case TOUGH_RIBBON_HYPER:
- case TOUGH_RIBBON_MASTER:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_TOUGH;
- break;
- case WINNING_RIBBON:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_WINNING;
- break;
- case VICTORY_RIBBON:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_VICTORY;
- break;
- case ARTIST_RIBBON:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_ARTIST;
- break;
- case EFFORT_RIBBON:
- sTVShowState = SPOTCUTIES_STATE_RIBBON_EFFORT;
- break;
- // No comment is made for any of the gift ribbons.
- // If the show is created for a gift ribbon
- // then this state will repeat indefinitely
- }
- break;
- case SPOTCUTIES_STATE_RIBBON_CHAMPION:
- case SPOTCUTIES_STATE_RIBBON_COOL:
- case SPOTCUTIES_STATE_RIBBON_BEAUTY:
- case SPOTCUTIES_STATE_RIBBON_CUTE:
- case SPOTCUTIES_STATE_RIBBON_SMART:
- case SPOTCUTIES_STATE_RIBBON_TOUGH:
- case SPOTCUTIES_STATE_RIBBON_WINNING:
- case SPOTCUTIES_STATE_RIBBON_VICTORY:
- case SPOTCUTIES_STATE_RIBBON_ARTIST:
- case SPOTCUTIES_STATE_RIBBON_EFFORT:
- TVShowConvertInternationalString(gStringVar2, show->cuties.nickname, show->cuties.pokemonNameLanguage);
- sTVShowState = SPOTCUTIES_STATE_OUTRO;
- break;
- case SPOTCUTIES_STATE_OUTRO:
- TVShowDone();
+ // Comments following the intro depend on how many ribbons the pokemon has
+ if (show->cuties.nRibbons < 10)
+ sTVShowState = SPOTCUTIES_STATE_RIBBONS_LOW;
+ else if (show->cuties.nRibbons < 20)
+ sTVShowState = SPOTCUTIES_STATE_RIBBONS_MID;
+ else
+ sTVShowState = SPOTCUTIES_STATE_RIBBONS_HIGH;
+ break;
+ case SPOTCUTIES_STATE_RIBBONS_LOW:
+ case SPOTCUTIES_STATE_RIBBONS_MID:
+ case SPOTCUTIES_STATE_RIBBONS_HIGH:
+ TVShowConvertInternationalString(gStringVar1, show->cuties.playerName, show->cuties.language);
+ TVShowConvertInternationalString(gStringVar2, show->cuties.nickname, show->cuties.pokemonNameLanguage);
+ ConvertIntToDecimalString(2, show->cuties.nRibbons);
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_INTRO;
+ break;
+ case SPOTCUTIES_STATE_RIBBON_INTRO:
+ TVShowConvertInternationalString(gStringVar2, show->cuties.nickname, show->cuties.pokemonNameLanguage);
+ switch (show->cuties.selectedRibbon)
+ {
+ case CHAMPION_RIBBON:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_CHAMPION;
+ break;
+ case COOL_RIBBON_NORMAL:
+ case COOL_RIBBON_SUPER:
+ case COOL_RIBBON_HYPER:
+ case COOL_RIBBON_MASTER:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_COOL;
+ break;
+ case BEAUTY_RIBBON_NORMAL:
+ case BEAUTY_RIBBON_SUPER:
+ case BEAUTY_RIBBON_HYPER:
+ case BEAUTY_RIBBON_MASTER:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_BEAUTY;
+ break;
+ case CUTE_RIBBON_NORMAL:
+ case CUTE_RIBBON_SUPER:
+ case CUTE_RIBBON_HYPER:
+ case CUTE_RIBBON_MASTER:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_CUTE;
+ break;
+ case SMART_RIBBON_NORMAL:
+ case SMART_RIBBON_SUPER:
+ case SMART_RIBBON_HYPER:
+ case SMART_RIBBON_MASTER:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_SMART;
+ break;
+ case TOUGH_RIBBON_NORMAL:
+ case TOUGH_RIBBON_SUPER:
+ case TOUGH_RIBBON_HYPER:
+ case TOUGH_RIBBON_MASTER:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_TOUGH;
+ break;
+ case WINNING_RIBBON:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_WINNING;
+ break;
+ case VICTORY_RIBBON:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_VICTORY;
+ break;
+ case ARTIST_RIBBON:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_ARTIST;
+ break;
+ case EFFORT_RIBBON:
+ sTVShowState = SPOTCUTIES_STATE_RIBBON_EFFORT;
+ break;
+ // No comment is made for any of the gift ribbons.
+ // If the show is created for a gift ribbon
+ // then this state will repeat indefinitely
+ }
+ break;
+ case SPOTCUTIES_STATE_RIBBON_CHAMPION:
+ case SPOTCUTIES_STATE_RIBBON_COOL:
+ case SPOTCUTIES_STATE_RIBBON_BEAUTY:
+ case SPOTCUTIES_STATE_RIBBON_CUTE:
+ case SPOTCUTIES_STATE_RIBBON_SMART:
+ case SPOTCUTIES_STATE_RIBBON_TOUGH:
+ case SPOTCUTIES_STATE_RIBBON_WINNING:
+ case SPOTCUTIES_STATE_RIBBON_VICTORY:
+ case SPOTCUTIES_STATE_RIBBON_ARTIST:
+ case SPOTCUTIES_STATE_RIBBON_EFFORT:
+ TVShowConvertInternationalString(gStringVar2, show->cuties.nickname, show->cuties.pokemonNameLanguage);
+ sTVShowState = SPOTCUTIES_STATE_OUTRO;
+ break;
+ case SPOTCUTIES_STATE_OUTRO:
+ TVShowDone();
}
ShowFieldMessage(sTVCutiesTextGroup[state]);
}
@@ -6697,140 +6322,140 @@ static void DoTVShowPokemonNewsBattleFrontier(void)
state = sTVShowState;
switch (state)
{
- case 0:
- switch (show->frontier.facility)
- {
- case 1:
- sTVShowState = 1;
- break;
- case 2:
- sTVShowState = 2;
- break;
- case 3:
- sTVShowState = 3;
- break;
- case 4:
- sTVShowState = 4;
- break;
- case 5:
- sTVShowState = 5;
- break;
- case 6:
- sTVShowState = 6;
- break;
- case 7:
- sTVShowState = 7;
- break;
- case 8:
- sTVShowState = 8;
- break;
- case 9:
- sTVShowState = 9;
- break;
- case 10:
- sTVShowState = 10;
- break;
- case 11:
- sTVShowState = 11;
- break;
- case 12:
- sTVShowState = 12;
- break;
- case 13:
- sTVShowState = 13;
- break;
- }
- break;
+ case 0:
+ switch (show->frontier.facilityAndMode)
+ {
case 1:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
+ sTVShowState = 1;
break;
case 2:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 16;
+ sTVShowState = 2;
break;
case 3:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 15;
+ sTVShowState = 3;
break;
case 4:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 15;
+ sTVShowState = 4;
break;
case 5:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
+ sTVShowState = 5;
break;
case 6:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
+ sTVShowState = 6;
break;
case 7:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
+ sTVShowState = 7;
break;
case 8:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
+ sTVShowState = 8;
break;
case 9:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
+ sTVShowState = 9;
break;
case 10:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
+ sTVShowState = 10;
break;
case 11:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
+ sTVShowState = 11;
break;
case 12:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
+ sTVShowState = 12;
break;
case 13:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TV_PrintIntToStringVar(1, show->frontier.winStreak);
- sTVShowState = 14;
- break;
- case 14:
- StringCopy(gStringVar1, gSpeciesNames[show->frontier.species1]);
- StringCopy(gStringVar2, gSpeciesNames[show->frontier.species2]);
- StringCopy(gStringVar3, gSpeciesNames[show->frontier.species3]);
- sTVShowState = 18;
- break;
- case 15:
- StringCopy(gStringVar1, gSpeciesNames[show->frontier.species1]);
- StringCopy(gStringVar2, gSpeciesNames[show->frontier.species2]);
- sTVShowState = 18;
- break;
- case 16:
- StringCopy(gStringVar1, gSpeciesNames[show->frontier.species1]);
- StringCopy(gStringVar2, gSpeciesNames[show->frontier.species2]);
- StringCopy(gStringVar3, gSpeciesNames[show->frontier.species3]);
- sTVShowState = 17;
- break;
- case 17:
- StringCopy(gStringVar1, gSpeciesNames[show->frontier.species4]);
- sTVShowState = 18;
- break;
- case 18:
- TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
- TVShowDone();
+ sTVShowState = 13;
break;
+ }
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 16;
+ break;
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 15;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 15;
+ break;
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 6:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 7:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 8:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 9:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 10:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 11:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 12:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 13:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ ConvertIntToDecimalString(1, show->frontier.winStreak);
+ sTVShowState = 14;
+ break;
+ case 14:
+ StringCopy(gStringVar1, gSpeciesNames[show->frontier.species1]);
+ StringCopy(gStringVar2, gSpeciesNames[show->frontier.species2]);
+ StringCopy(gStringVar3, gSpeciesNames[show->frontier.species3]);
+ sTVShowState = 18;
+ break;
+ case 15:
+ StringCopy(gStringVar1, gSpeciesNames[show->frontier.species1]);
+ StringCopy(gStringVar2, gSpeciesNames[show->frontier.species2]);
+ sTVShowState = 18;
+ break;
+ case 16:
+ StringCopy(gStringVar1, gSpeciesNames[show->frontier.species1]);
+ StringCopy(gStringVar2, gSpeciesNames[show->frontier.species2]);
+ StringCopy(gStringVar3, gSpeciesNames[show->frontier.species3]);
+ sTVShowState = 17;
+ break;
+ case 17:
+ StringCopy(gStringVar1, gSpeciesNames[show->frontier.species4]);
+ sTVShowState = 18;
+ break;
+ case 18:
+ TVShowConvertInternationalString(gStringVar1, show->frontier.playerName, show->frontier.language);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVPokemonNewsBattleFrontierTextGroup[state]);
}
@@ -6845,72 +6470,72 @@ static void DoTVShowWhatsNo1InHoennToday(void)
state = sTVShowState;
switch (state)
{
+ case 0:
+ TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
+ switch (show->numberOne.actionIdx)
+ {
case 0:
- TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
- switch (show->numberOne.actionIdx)
- {
- case 0:
- sTVShowState = 1;
- break;
- case 1:
- sTVShowState = 2;
- break;
- case 2:
- sTVShowState = 3;
- break;
- case 3:
- sTVShowState = 4;
- break;
- case 4:
- sTVShowState = 5;
- break;
- case 5:
- sTVShowState = 6;
- break;
- case 6:
- sTVShowState = 7;
- break;
- }
+ sTVShowState = 1;
break;
case 1:
- TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
- TV_PrintIntToStringVar(1, show->numberOne.count);
- sTVShowState = 8;
+ sTVShowState = 2;
break;
case 2:
- TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
- TV_PrintIntToStringVar(1, show->numberOne.count);
- sTVShowState = 8;
+ sTVShowState = 3;
break;
case 3:
- TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
- TV_PrintIntToStringVar(1, show->numberOne.count);
- sTVShowState = 8;
+ sTVShowState = 4;
break;
case 4:
- TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
- TV_PrintIntToStringVar(1, show->numberOne.count);
- sTVShowState = 8;
+ sTVShowState = 5;
break;
case 5:
- TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
- TV_PrintIntToStringVar(1, show->numberOne.count);
- sTVShowState = 8;
+ sTVShowState = 6;
break;
case 6:
- TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
- TV_PrintIntToStringVar(1, show->numberOne.count);
- sTVShowState = 8;
- break;
- case 7:
- TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
- TV_PrintIntToStringVar(1, show->numberOne.count);
- sTVShowState = 8;
- break;
- case 8:
- TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
- TVShowDone();
+ sTVShowState = 7;
break;
+ }
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
+ ConvertIntToDecimalString(1, show->numberOne.count);
+ sTVShowState = 8;
+ break;
+ case 2:
+ TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
+ ConvertIntToDecimalString(1, show->numberOne.count);
+ sTVShowState = 8;
+ break;
+ case 3:
+ TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
+ ConvertIntToDecimalString(1, show->numberOne.count);
+ sTVShowState = 8;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
+ ConvertIntToDecimalString(1, show->numberOne.count);
+ sTVShowState = 8;
+ break;
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
+ ConvertIntToDecimalString(1, show->numberOne.count);
+ sTVShowState = 8;
+ break;
+ case 6:
+ TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
+ ConvertIntToDecimalString(1, show->numberOne.count);
+ sTVShowState = 8;
+ break;
+ case 7:
+ TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
+ ConvertIntToDecimalString(1, show->numberOne.count);
+ sTVShowState = 8;
+ break;
+ case 8:
+ TVShowConvertInternationalString(gStringVar1, show->numberOne.playerName, show->numberOne.language);
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVWhatsNo1InHoennTodayTextGroup[state]);
}
@@ -6920,7 +6545,7 @@ u8 SecretBaseSecrets_GetNumActionsTaken(TVShow *show)
u8 i;
u8 flagsSet;
- for (i = 0, flagsSet = 0; i < NUM_SECRET_BASE_FLAGS; i ++)
+ for (i = 0, flagsSet = 0; i < NUM_SECRET_BASE_FLAGS; i++)
{
if ((show->secretBaseSecrets.flags >> i) & 1)
flagsSet++;
@@ -6933,7 +6558,7 @@ static u8 SecretBaseSecrets_GetStateByFlagNumber(TVShow *show, u8 flagId)
u8 i;
u8 flagsSet;
- for (i = 0, flagsSet = 0; i < NUM_SECRET_BASE_FLAGS; i ++)
+ for (i = 0, flagsSet = 0; i < NUM_SECRET_BASE_FLAGS; i++)
{
if ((show->secretBaseSecrets.flags >> i) & 1)
{
@@ -6958,130 +6583,112 @@ static void DoTVShowSecretBaseSecrets(void)
state = sTVShowState;
switch (state)
{
- case SBSECRETS_STATE_INTRO:
- TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- numActions = SecretBaseSecrets_GetNumActionsTaken(show);
- if (numActions == 0)
- {
- sTVShowState = SBSECRETS_STATE_NOTHING_USED1;
- }
- else
- {
- show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT1;
- sTVSecretBaseSecretsRandomValues[0] = Random() % numActions;
- sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[0]);
- }
- break;
- case SBSECRETS_STATE_DO_NEXT1:
- TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- numActions = SecretBaseSecrets_GetNumActionsTaken(show);
- switch (numActions)
- {
- case 1:
- sTVShowState = SBSECRETS_STATE_NOTHING_USED2;
- break;
- case 2:
- show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT2;
- if (sTVSecretBaseSecretsRandomValues[0] == 0)
- {
- sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, 1);
- }
- else
- {
- sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, 0);
- }
- break;
- default:
- for (i = 0; i < 0xFFFF; i ++)
- {
- sTVSecretBaseSecretsRandomValues[1] = Random() % numActions;
- if (sTVSecretBaseSecretsRandomValues[1] != sTVSecretBaseSecretsRandomValues[0])
- {
- break;
- }
- }
- show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT2;
- sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[1]);
- break;
- }
+ case SBSECRETS_STATE_INTRO:
+ TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
+ numActions = SecretBaseSecrets_GetNumActionsTaken(show);
+ if (numActions == 0)
+ {
+ sTVShowState = SBSECRETS_STATE_NOTHING_USED1;
+ }
+ else
+ {
+ show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT1;
+ sTVSecretBaseSecretsRandomValues[0] = Random() % numActions;
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[0]);
+ }
+ break;
+ case SBSECRETS_STATE_DO_NEXT1:
+ TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
+ numActions = SecretBaseSecrets_GetNumActionsTaken(show);
+ switch (numActions)
+ {
+ case 1:
+ sTVShowState = SBSECRETS_STATE_NOTHING_USED2;
break;
- case SBSECRETS_STATE_DO_NEXT2:
- TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- numActions = SecretBaseSecrets_GetNumActionsTaken(show);
- if (numActions == 2)
- {
- sTVShowState = SBSECRETS_STATE_NOTHING_USED2;
- }
+ case 2:
+ show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT2;
+ if (sTVSecretBaseSecretsRandomValues[0] == 0)
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, 1);
else
- {
- for (i = 0; i < 0xFFFF; i ++)
- {
- sTVSecretBaseSecretsRandomValues[2] = Random() % numActions;
- if (sTVSecretBaseSecretsRandomValues[2] != sTVSecretBaseSecretsRandomValues[0] && sTVSecretBaseSecretsRandomValues[2] != sTVSecretBaseSecretsRandomValues[1])
- {
- break;
- }
- }
- show->secretBaseSecrets.savedState = SBSECRETS_STATE_TOOK_X_STEPS;
- sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[2]);
- }
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, 0);
break;
- case SBSECRETS_STATE_TOOK_X_STEPS:
- TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- TV_PrintIntToStringVar(2, show->secretBaseSecrets.stepsInBase);
- if (show->secretBaseSecrets.stepsInBase <= 30)
- {
- sTVShowState = SBSECRETS_STATE_BASE_INTEREST_LOW;
- }
- else if (show->secretBaseSecrets.stepsInBase <= 100)
- {
- sTVShowState = SBSECRETS_STATE_BASE_INTEREST_MED;
- }
- else
+ default:
+ for (i = 0; i < 0xFFFF; i++)
{
- sTVShowState = SBSECRETS_STATE_BASE_INTEREST_HIGH;
+ sTVSecretBaseSecretsRandomValues[1] = Random() % numActions;
+ if (sTVSecretBaseSecretsRandomValues[1] != sTVSecretBaseSecretsRandomValues[0])
+ break;
}
+ show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT2;
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[1]);
break;
- case SBSECRETS_STATE_BASE_INTEREST_LOW ... SBSECRETS_STATE_BASE_INTEREST_HIGH:
- TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- sTVShowState = SBSECRETS_STATE_OUTRO;
- break;
- case SBSECRETS_STATE_OUTRO:
- TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- TVShowDone();
- break;
- // All below states are descriptions of what the player interacted with while in the secret base
- case SBSECRETS_STATE_NOTHING_USED1:
- sTVShowState = SBSECRETS_STATE_TOOK_X_STEPS;
- break;
- case SBSECRETS_STATE_NOTHING_USED2:
- sTVShowState = SBSECRETS_STATE_TOOK_X_STEPS;
- break;
- case SBSECRETS_STATE_USED_CHAIR ... SBSECRETS_STATE_USED_MUD_BALL:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case SBSECRETS_STATE_USED_BAG:
- StringCopy(gStringVar2, ItemId_GetName(show->secretBaseSecrets.item));
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case SBSECRETS_STATE_USED_CUSHION:
- // Randomly decide based on trainer ID if the player hugged or hit the cushion
- if (show->common.trainerIdLo & 1)
- {
- sTVShowState = SBSECRETS_STATE_HUGGED_CUSHION;
- }
- else
+ }
+ break;
+ case SBSECRETS_STATE_DO_NEXT2:
+ TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
+ numActions = SecretBaseSecrets_GetNumActionsTaken(show);
+ if (numActions == 2)
+ {
+ sTVShowState = SBSECRETS_STATE_NOTHING_USED2;
+ }
+ else
+ {
+ for (i = 0; i < 0xFFFF; i++)
{
- sTVShowState = SBSECRETS_STATE_HIT_CUSHION;
+ sTVSecretBaseSecretsRandomValues[2] = Random() % numActions;
+ if (sTVSecretBaseSecretsRandomValues[2] != sTVSecretBaseSecretsRandomValues[0] && sTVSecretBaseSecretsRandomValues[2] != sTVSecretBaseSecretsRandomValues[1])
+ break;
}
- break;
- case SBSECRETS_STATE_HIT_CUSHION ... SBSECRETS_NUM_STATES:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
+ show->secretBaseSecrets.savedState = SBSECRETS_STATE_TOOK_X_STEPS;
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[2]);
+ }
+ break;
+ case SBSECRETS_STATE_TOOK_X_STEPS:
+ TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
+ ConvertIntToDecimalString(2, show->secretBaseSecrets.stepsInBase);
+ if (show->secretBaseSecrets.stepsInBase <= 30)
+ sTVShowState = SBSECRETS_STATE_BASE_INTEREST_LOW;
+ else if (show->secretBaseSecrets.stepsInBase <= 100)
+ sTVShowState = SBSECRETS_STATE_BASE_INTEREST_MED;
+ else
+ sTVShowState = SBSECRETS_STATE_BASE_INTEREST_HIGH;
+ break;
+ case SBSECRETS_STATE_BASE_INTEREST_LOW ... SBSECRETS_STATE_BASE_INTEREST_HIGH:
+ TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
+ sTVShowState = SBSECRETS_STATE_OUTRO;
+ break;
+ case SBSECRETS_STATE_OUTRO:
+ TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
+ TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
+ TVShowDone();
+ break;
+ // All below states are descriptions of what the player interacted with while in the secret base
+ case SBSECRETS_STATE_NOTHING_USED1:
+ sTVShowState = SBSECRETS_STATE_TOOK_X_STEPS;
+ break;
+ case SBSECRETS_STATE_NOTHING_USED2:
+ sTVShowState = SBSECRETS_STATE_TOOK_X_STEPS;
+ break;
+ case SBSECRETS_STATE_USED_CHAIR ... SBSECRETS_STATE_USED_MUD_BALL:
+ sTVShowState = show->secretBaseSecrets.savedState;
+ break;
+ case SBSECRETS_STATE_USED_BAG:
+ StringCopy(gStringVar2, ItemId_GetName(show->secretBaseSecrets.item));
+ sTVShowState = show->secretBaseSecrets.savedState;
+ break;
+ case SBSECRETS_STATE_USED_CUSHION:
+ // Randomly decide based on trainer ID if the player hugged or hit the cushion
+ if (show->common.trainerIdLo & 1)
+ sTVShowState = SBSECRETS_STATE_HUGGED_CUSHION;
+ else
+ sTVShowState = SBSECRETS_STATE_HIT_CUSHION;
+ break;
+ case SBSECRETS_STATE_HIT_CUSHION ... SBSECRETS_NUM_STATES:
+ sTVShowState = show->secretBaseSecrets.savedState;
+ break;
}
ShowFieldMessage(sTVSecretBaseSecretsTextGroup[state]);
}
@@ -7096,79 +6703,62 @@ static void DoTVShowSafariFanClub(void)
state = sTVShowState;
switch (state)
{
- case 0:
- if (show->safariFanClub.nMonsCaught == 0)
- {
- sTVShowState = 6;
- }
- else if (show->safariFanClub.nMonsCaught < 4)
- {
- sTVShowState = 5;
- }
- else
- {
- sTVShowState = 1;
- }
- break;
- case 1:
- TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
- TV_PrintIntToStringVar(1, show->safariFanClub.nMonsCaught);
- if (show->safariFanClub.nPkblkUsed == 0)
- {
- sTVShowState = 3;
- }
- else
- {
- sTVShowState = 2;
- }
- break;
- case 2:
- TV_PrintIntToStringVar(1, show->safariFanClub.nPkblkUsed);
- sTVShowState = 4;
- break;
- case 3:
- sTVShowState = 4;
- break;
- case 4:
- TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
- sTVShowState = 10;
- break;
- case 5:
- TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
- TV_PrintIntToStringVar(1, show->safariFanClub.nMonsCaught);
- if (show->safariFanClub.nPkblkUsed == 0)
- {
- sTVShowState = 8;
- }
- else
- {
- sTVShowState = 7;
- }
- break;
- case 6:
- TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
- if (show->safariFanClub.nPkblkUsed == 0)
- {
- sTVShowState = 8;
- }
- else
- {
- sTVShowState = 7;
- }
- break;
- case 7:
- TV_PrintIntToStringVar(1, show->safariFanClub.nPkblkUsed);
- sTVShowState = 9;
- break;
- case 8:
- sTVShowState = 9;
- break;
- case 9:
- TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
- sTVShowState = 10;
- break;
- case 10:
- TVShowDone();
+ case 0:
+ if (show->safariFanClub.nMonsCaught == 0)
+ sTVShowState = 6;
+ else if (show->safariFanClub.nMonsCaught < 4)
+ sTVShowState = 5;
+ else
+ sTVShowState = 1;
+ break;
+ case 1:
+ TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
+ ConvertIntToDecimalString(1, show->safariFanClub.nMonsCaught);
+ if (show->safariFanClub.nPkblkUsed == 0)
+ sTVShowState = 3;
+ else
+ sTVShowState = 2;
+ break;
+ case 2:
+ ConvertIntToDecimalString(1, show->safariFanClub.nPkblkUsed);
+ sTVShowState = 4;
+ break;
+ case 3:
+ sTVShowState = 4;
+ break;
+ case 4:
+ TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
+ sTVShowState = 10;
+ break;
+ case 5:
+ TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
+ ConvertIntToDecimalString(1, show->safariFanClub.nMonsCaught);
+ if (show->safariFanClub.nPkblkUsed == 0)
+ sTVShowState = 8;
+ else
+ sTVShowState = 7;
+ break;
+ case 6:
+ TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
+ if (show->safariFanClub.nPkblkUsed == 0)
+ sTVShowState = 8;
+ else
+ sTVShowState = 7;
+ break;
+ case 7:
+ ConvertIntToDecimalString(1, show->safariFanClub.nPkblkUsed);
+ sTVShowState = 9;
+ break;
+ case 8:
+ sTVShowState = 9;
+ break;
+ case 9:
+ TVShowConvertInternationalString(gStringVar1, show->safariFanClub.playerName, show->safariFanClub.language);
+ sTVShowState = 10;
+ break;
+ case 10:
+ TVShowDone();
+ break;
}
ShowFieldMessage(sTVSafariFanClubTextGroup[state]);
}
@@ -7187,17 +6777,11 @@ static void DoTVShowLilycoveContestLady(void)
case CONTESTLADYLIVE_STATE_INTRO:
BufferContestName(gStringVar1, show->contestLady.contestCategory);
if (show->contestLady.pokeblockState == CONTEST_LADY_GOOD)
- {
sTVShowState = CONTESTLADYLIVE_STATE_WON;
- }
else if (show->contestLady.pokeblockState == CONTEST_LADY_NORMAL)
- {
sTVShowState = CONTESTLADYLIVE_STATE_LOST;
- }
else // CONTEST_LADY_BAD
- {
sTVShowState = CONTESTLADYLIVE_STATE_LOST_BADLY;
- }
break;
case CONTESTLADYLIVE_STATE_WON:
case CONTESTLADYLIVE_STATE_LOST:
@@ -7210,7 +6794,7 @@ static void DoTVShowLilycoveContestLady(void)
ShowFieldMessage(sTVLilycoveContestLadyTextGroup[state]);
}
-void TVShowDone(void)
+static void TVShowDone(void)
{
gSpecialVar_Result = TRUE;
sTVShowState = 0;