summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDiegoisawesome <diego@domoreaweso.me>2019-02-05 14:35:42 -0600
committerDiegoisawesome <diego@domoreaweso.me>2019-02-05 14:35:42 -0600
commitbc4cc9f78a705636228c39311bb6e3c393f090d3 (patch)
treed2b59408df53676ffb65e217cc1a62cbcba05f97 /src
parent37e86d75788f4ed364db19aabce11e6e054a1084 (diff)
parentb0ee1009759ed1c46da81b1fb8410e2b75e42bb2 (diff)
Merge branch 'master' of github.com:pret/pokeemerald
Diffstat (limited to 'src')
-rw-r--r--src/battle_anim_80A9C70.c176
-rw-r--r--src/battle_bg.c26
-rw-r--r--src/battle_controller_player.c6
-rw-r--r--src/battle_factory.c4
-rw-r--r--src/battle_gfx_sfx_util.c4
-rw-r--r--src/battle_intro.c8
-rw-r--r--src/battle_main.c10
-rw-r--r--src/battle_message.c2
-rw-r--r--src/battle_pike.c7
-rw-r--r--src/battle_pyramid.c8
-rw-r--r--src/battle_pyramid_bag.c8
-rw-r--r--src/battle_script_commands.c32
-rw-r--r--src/battle_tent.c5
-rw-r--r--src/battle_util.c50
-rw-r--r--src/cable_club.c4
-rw-r--r--src/contest.c4920
-rw-r--r--src/contest_link_80F57C4.c16
-rw-r--r--src/contest_painting.c13
-rw-r--r--src/contest_painting_effects.c19
-rw-r--r--src/daycare.c6
-rw-r--r--src/decoration.c14
-rw-r--r--src/dragon.c4
-rw-r--r--src/evolution_scene.c15
-rw-r--r--src/field_player_avatar.c20
-rw-r--r--src/field_specials.c8
-rw-r--r--src/field_weather.c20
-rw-r--r--src/graphics.c4
-rw-r--r--src/ice.c305
-rwxr-xr-xsrc/item_menu.c16
-rwxr-xr-xsrc/item_use.c5
-rw-r--r--src/learn_move.c2
-rw-r--r--src/list_menu.c4
-rw-r--r--src/m4a.c1779
-rw-r--r--src/m4a_2.c912
-rw-r--r--src/m4a_4.c545
-rw-r--r--src/map_name_popup.c7
-rw-r--r--src/mauville_old_man.c20
-rw-r--r--src/overworld.c9
-rw-r--r--src/palette.c6
-rwxr-xr-xsrc/party_menu.c225
-rw-r--r--src/player_pc.c34
-rw-r--r--src/pokeblock.c4
-rw-r--r--src/pokedex.c2
-rwxr-xr-xsrc/pokedex_cry_screen.c5
-rw-r--r--src/pokemon.c19
-rw-r--r--src/pokemon_icon.c6
-rw-r--r--src/pokemon_storage_system.c4
-rw-r--r--src/pokemon_summary_screen.c334
-rw-r--r--src/recorded_battle.c6
-rw-r--r--src/rom_8011DC0.c8
-rw-r--r--src/script_menu.c4
-rw-r--r--src/secret_base.c10
-rwxr-xr-xsrc/shop.c6
-rw-r--r--src/sound.c22
-rw-r--r--src/trader.c4
-rwxr-xr-xsrc/trainer_card.c1
-rw-r--r--src/trainer_hill.c27
-rw-r--r--src/trainer_see.c89
-rw-r--r--src/tv.c25
-rw-r--r--src/wild_encounter.c20
60 files changed, 6397 insertions, 3477 deletions
diff --git a/src/battle_anim_80A9C70.c b/src/battle_anim_80A9C70.c
index 001f99d7f..1271680e0 100644
--- a/src/battle_anim_80A9C70.c
+++ b/src/battle_anim_80A9C70.c
@@ -28,6 +28,182 @@ static void sub_80A9E44(struct Sprite *sprite);
static void sub_80A9E78(struct Sprite *sprite);
// const rom data
+static const union AnimCmd sSpriteAnim_853EDE4[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(12, 3),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd *const sSpriteAnimTable_853EDF8[] =
+{
+ sSpriteAnim_853EDE4
+};
+
+const struct SpriteTemplate gUnknown_0853EDFC =
+{
+ .tileTag = ANIM_TAG_UNUSED_ORB,
+ .paletteTag = ANIM_TAG_UNUSED_ORB,
+ .oam = &gUnknown_0852490C,
+ .anims = sSpriteAnimTable_853EDF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A8AEC,
+};
+
+const struct SpriteTemplate gUnknown_0853EE14 =
+{
+ .tileTag = ANIM_TAG_UNUSED_ORB,
+ .paletteTag = ANIM_TAG_UNUSED_ORB,
+ .oam = &gUnknown_0852490C,
+ .anims = sSpriteAnimTable_853EDF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A8A6C,
+};
+
+static const union AnimCmd sSpriteAnim_853EE2C[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd *const sSpriteAnimTable_853EE34[] =
+{
+ sSpriteAnim_853EE2C
+};
+
+const struct SpriteTemplate gUnknown_0853EE38 =
+{
+ .tileTag = ANIM_TAG_WEATHER_BALL,
+ .paletteTag = ANIM_TAG_WEATHER_BALL,
+ .oam = &gUnknown_08524914,
+ .anims = sSpriteAnimTable_853EE34,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A8E30,
+};
+
+const struct SpriteTemplate gUnknown_0853EE50 =
+{
+ .tileTag = ANIM_TAG_WEATHER_BALL,
+ .paletteTag = ANIM_TAG_WEATHER_BALL,
+ .oam = &gUnknown_08524914,
+ .anims = sSpriteAnimTable_853EE34,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A8EE4,
+};
+
+static const union AnimCmd sSpriteAnim_853EE68[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_853EE80[] =
+{
+ sSpriteAnim_853EE68
+};
+
+const struct SpriteTemplate gUnknown_0853EE84 =
+{
+ .tileTag = ANIM_TAG_SPARKLE_4,
+ .paletteTag = ANIM_TAG_SPARKLE_4,
+ .oam = &gUnknown_08524914,
+ .anims = sSpriteAnimTable_853EE80,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A8B64,
+};
+
+const struct SpriteTemplate gUnknown_0853EE9C =
+{
+ .tileTag = ANIM_TAG_UNUSED_MONSTER_FOOT,
+ .paletteTag = ANIM_TAG_UNUSED_MONSTER_FOOT,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A8AEC,
+};
+
+static const union AnimCmd sSpriteAnim_853EEB4[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd sSpriteAnim_853EEBC[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd sSpriteAnim_853EEC4[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd *const sSpriteAnimTable_853EECC[] =
+{
+ sSpriteAnim_853EEB4,
+ sSpriteAnim_853EEBC,
+ sSpriteAnim_853EEC4
+};
+
+const struct SpriteTemplate gUnknown_0853EED8 =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_IMPACT,
+ .oam = &gUnknown_08524914,
+ .anims = sSpriteAnimTable_853EECC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A8AEC,
+};
+
+static const union AnimCmd sSpriteAnim_853EEF0[] =
+{
+ ANIMCMD_FRAME(0, 15),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd *const sSpriteAnimTable_853EEF8[] =
+{
+ sSpriteAnim_853EEF0
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_853EEFC[] =
+{
+ AFFINEANIMCMD_FRAME(96, 96, 0, 0),
+ AFFINEANIMCMD_FRAME(2, 2, 0, 1),
+ AFFINEANIMCMD_JUMP(1)
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_853EEF8[] =
+{
+ sSpriteAffineAnim_853EEFC
+};
+
+const struct SpriteTemplate gUnknown_0853EF18 =
+{
+ .tileTag = ANIM_TAG_UNUSED_ORB,
+ .paletteTag = ANIM_TAG_UNUSED_ORB,
+ .oam = &gUnknown_085249CC,
+ .anims = sSpriteAnimTable_853EEF8,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_853EEF8,
+ .callback = sub_80A8A6C,
+};
+
static const struct Subsprite gUnknown_0853EF30[] =
{
{.x = -16, .y = -16, .shape = ST_OAM_SQUARE, .size = 3, .tileOffset = 0, .priority = 2},
diff --git a/src/battle_bg.c b/src/battle_bg.c
index a072a2cda..61a914fc9 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -1037,10 +1037,10 @@ void sub_8035D74(u8 taskId)
case 1:
palId = AllocSpritePalette(0x2710);
gPlttBufferUnfaded[palId * 16 + 0x10F] = gPlttBufferFaded[palId * 16 + 0x10F] = 0x7FFF;
- gBattleStruct->field_7D = CreateSprite(&gUnknown_0831A9D0, 111, 80, 0);
- gBattleStruct->field_7E = CreateSprite(&gUnknown_0831A9E8, 129, 80, 0);
- gSprites[gBattleStruct->field_7D].invisible = TRUE;
- gSprites[gBattleStruct->field_7E].invisible = TRUE;
+ gBattleStruct->linkBattleVsSpriteId_V = CreateSprite(&gUnknown_0831A9D0, 111, 80, 0);
+ gBattleStruct->linkBattleVsSpriteId_S = CreateSprite(&gUnknown_0831A9E8, 129, 80, 0);
+ gSprites[gBattleStruct->linkBattleVsSpriteId_V].invisible = TRUE;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_S].invisible = TRUE;
gTasks[taskId].data[0]++;
break;
case 2:
@@ -1071,15 +1071,15 @@ void sub_8035D74(u8 taskId)
PlaySE(SE_W231);
DestroyTask(taskId);
- gSprites[gBattleStruct->field_7D].invisible = FALSE;
- gSprites[gBattleStruct->field_7E].invisible = FALSE;
- gSprites[gBattleStruct->field_7E].oam.tileNum += 0x40;
- gSprites[gBattleStruct->field_7D].data[0] = 0;
- gSprites[gBattleStruct->field_7E].data[0] = 1;
- gSprites[gBattleStruct->field_7D].data[1] = gSprites[gBattleStruct->field_7D].pos1.x;
- gSprites[gBattleStruct->field_7E].data[1] = gSprites[gBattleStruct->field_7E].pos1.x;
- gSprites[gBattleStruct->field_7D].data[2] = 0;
- gSprites[gBattleStruct->field_7E].data[2] = 0;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_V].invisible = FALSE;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_S].invisible = FALSE;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_S].oam.tileNum += 0x40;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_V].data[0] = 0;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_S].data[0] = 1;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_V].data[1] = gSprites[gBattleStruct->linkBattleVsSpriteId_V].pos1.x;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_S].data[1] = gSprites[gBattleStruct->linkBattleVsSpriteId_S].pos1.x;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_V].data[2] = 0;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_S].data[2] = 0;
}
break;
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index a6a6ac0f3..70b0a6160 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -696,10 +696,10 @@ static void HandleMoveSwitching(void)
moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]] = moveInfo->maxPp[gMultiUsePlayerCursor];
moveInfo->maxPp[gMultiUsePlayerCursor] = i;
- if (gDisableStructs[gActiveBattler].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBattler]])
+ if (gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[gMoveSelectionCursor[gActiveBattler]])
{
- gDisableStructs[gActiveBattler].unk18_b &= (~gBitTable[gMoveSelectionCursor[gActiveBattler]]);
- gDisableStructs[gActiveBattler].unk18_b |= gBitTable[gMultiUsePlayerCursor];
+ gDisableStructs[gActiveBattler].mimickedMoves &= (~gBitTable[gMoveSelectionCursor[gActiveBattler]]);
+ gDisableStructs[gActiveBattler].mimickedMoves |= gBitTable[gMultiUsePlayerCursor];
}
MoveSelectionDisplayMoveNames();
diff --git a/src/battle_factory.c b/src/battle_factory.c
index 5793c78e9..c025dc139 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -11,6 +11,7 @@
#include "constants/species.h"
#include "constants/battle_ai.h"
#include "constants/battle_frontier.h"
+#include "constants/layouts.h"
#include "constants/trainers.h"
#include "constants/moves.h"
@@ -662,7 +663,8 @@ static u8 GetStyleForMove(u16 move)
bool8 sub_81A6BF4(void)
{
- return (gMapHeader.mapLayoutId == 347 || gMapHeader.mapLayoutId == 348);
+ return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM
+ || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM;
}
static void sub_81A6C1C(void)
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 3ceaef983..7c6b74304 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -205,13 +205,13 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
if (Random() % 100 > 49)
{
- gProtectStructs[gActiveBattler].flag_x10 = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
return 0;
}
}
else
{
- gProtectStructs[gActiveBattler].flag_x10 = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
return 0;
}
}
diff --git a/src/battle_intro.c b/src/battle_intro.c
index 21e83ed29..043cf855a 100644
--- a/src/battle_intro.c
+++ b/src/battle_intro.c
@@ -463,10 +463,10 @@ static void BattleIntroSlideLink(u8 taskId)
if (--gTasks[taskId].data[2] == 0)
{
gTasks[taskId].data[0]++;
- gSprites[gBattleStruct->field_7D].oam.objMode = ST_OAM_OBJ_WINDOW;
- gSprites[gBattleStruct->field_7D].callback = sub_8038B74;
- gSprites[gBattleStruct->field_7E].oam.objMode = ST_OAM_OBJ_WINDOW;
- gSprites[gBattleStruct->field_7E].callback = sub_8038B74;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_V].oam.objMode = ST_OAM_OBJ_WINDOW;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_V].callback = sub_8038B74;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_S].oam.objMode = ST_OAM_OBJ_WINDOW;
+ gSprites[gBattleStruct->linkBattleVsSpriteId_S].callback = sub_8038B74;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2);
}
diff --git a/src/battle_main.c b/src/battle_main.c
index 1aeaa25ca..043e75808 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -139,7 +139,7 @@ static void HandleAction_ThrowPokeblock(void);
static void HandleAction_GoNear(void);
static void HandleAction_SafariZoneRun(void);
static void HandleAction_WallyBallThrow(void);
-static void HandleAction_Action11(void);
+static void HandleAction_TryFinish(void);
static void HandleAction_NothingIsFainted(void);
static void HandleAction_ActionFinished(void);
@@ -553,7 +553,7 @@ static void (* const sTurnActionsFuncsTable[])(void) =
[B_ACTION_SAFARI_RUN] = HandleAction_SafariZoneRun,
[B_ACTION_WALLY_THROW] = HandleAction_WallyBallThrow,
[B_ACTION_EXEC_SCRIPT] = HandleAction_RunBattleScript,
- [11] = HandleAction_Action11, // not sure about this one
+ [B_ACTION_TRY_FINISH] = HandleAction_TryFinish,
[B_ACTION_FINISHED] = HandleAction_ActionFinished,
[B_ACTION_NOTHING_FAINTED] = HandleAction_NothingIsFainted,
};
@@ -3196,7 +3196,7 @@ void SwitchInClearSetData(void)
gMoveResultFlags = 0;
gDisableStructs[gActiveBattler].isFirstTurn = 2;
- gDisableStructs[gActiveBattler].truantUnknownBit = disableStructCopy.truantUnknownBit;
+ gDisableStructs[gActiveBattler].truantSwitchInHack = disableStructCopy.truantSwitchInHack;
gLastMoves[gActiveBattler] = 0;
gLastLandedMoves[gActiveBattler] = 0;
gLastHitByType[gActiveBattler] = 0;
@@ -5492,7 +5492,7 @@ static void HandleAction_UseMove(void)
// choose battlescript
if (gBattleTypeFlags & BATTLE_TYPE_PALACE
- && gProtectStructs[gBattlerAttacker].flag_x10)
+ && gProtectStructs[gBattlerAttacker].palaceUnableToUseMove)
{
if (gBattleMons[gBattlerAttacker].hp == 0)
{
@@ -5845,7 +5845,7 @@ static void HandleAction_WallyBallThrow(void)
gActionsByTurnOrder[1] = B_ACTION_FINISHED;
}
-static void HandleAction_Action11(void)
+static void HandleAction_TryFinish(void)
{
if (!HandleFaintedMonActions())
{
diff --git a/src/battle_message.c b/src/battle_message.c
index 7b8085219..164108dec 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -37,8 +37,6 @@ struct BattleWindowText
u8 shadowColor;
};
-extern u8 gUnknown_0203C7B4;
-
extern const u8 gTrainerClassNames[][13];
extern const u16 gUnknown_08D85620[];
diff --git a/src/battle_pike.c b/src/battle_pike.c
index c12038efb..bdf6e8027 100644
--- a/src/battle_pike.c
+++ b/src/battle_pike.c
@@ -16,6 +16,7 @@
#include "constants/event_objects.h"
#include "constants/battle_frontier.h"
#include "constants/abilities.h"
+#include "constants/layouts.h"
#include "constants/rgb.h"
#include "constants/trainers.h"
#include "constants/species.h"
@@ -1314,8 +1315,10 @@ static void sub_81A8090(void)
bool8 InBattlePike(void)
{
- return (gMapHeader.mapLayoutId == 351 || gMapHeader.mapLayoutId == 352
- || gMapHeader.mapLayoutId == 358 || gMapHeader.mapLayoutId == 359);
+ return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM
+ || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1
+ || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3
+ || gMapHeader.mapLayoutId == LAYOUT_UNKNOWN_MAP_084693AC;
}
static void sub_81A80DC(void)
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index c0ff1ecf5..ed911d8d9 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -30,6 +30,7 @@
#include "constants/event_objects.h"
#include "constants/event_object_movement_constants.h"
#include "constants/items.h"
+#include "constants/layouts.h"
#include "constants/maps.h"
#include "constants/moves.h"
#include "constants/species.h"
@@ -1380,9 +1381,9 @@ u8 GetPyramidRunMultiplier(void)
u8 InBattlePyramid(void)
{
- if (gMapHeader.mapLayoutId == 361)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
return 1;
- else if (gMapHeader.mapLayoutId == 378)
+ else if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP)
return 2;
else
return FALSE;
@@ -1390,7 +1391,8 @@ u8 InBattlePyramid(void)
bool8 InBattlePyramid_(void)
{
- return (gMapHeader.mapLayoutId == 361 || gMapHeader.mapLayoutId == 378);
+ return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE
+ || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP;
}
void sub_81A9E90(void)
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index 50baf48fd..9bed2ab43 100644
--- a/src/battle_pyramid_bag.c
+++ b/src/battle_pyramid_bag.c
@@ -853,7 +853,7 @@ static void Task_HandlePyramidBagInput(u8 taskId)
}
else
{
- s32 listId = ListMenuHandleInputGetItemId(data[0]);
+ s32 listId = ListMenu_ProcessInput(data[0]);
ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
switch (listId)
{
@@ -945,9 +945,9 @@ static void HandleFewMenuActionsInput(u8 taskId)
s32 id = Menu_ProcessInputNoWrap();
switch (id)
{
- case -2:
+ case MENU_NOTHING_CHOSEN:
break;
- case -1:
+ case MENU_B_PRESSED:
PlaySE(SE_SELECT);
sMenuActions[ACTION_CANCEL].func.void_u8(taskId);
break;
@@ -1285,7 +1285,7 @@ static void Task_ItemSwapHandleInput(u8 taskId)
}
else
{
- s32 id = ListMenuHandleInputGetItemId(data[0]);
+ s32 id = ListMenu_ProcessInput(data[0]);
ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition);
sub_81C7028(FALSE);
sub_81C704C(gPyramidBagCursorData.cursorPosition);
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 0995eec45..6023b2c1b 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -1243,7 +1243,7 @@ static void atk03_ppreduce(void)
gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 0;
if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)
- && !((gDisableStructs[gBattlerAttacker].unk18_b) & gBitTable[gCurrMovePos]))
+ && !((gDisableStructs[gBattlerAttacker].mimickedMoves) & gBitTable[gCurrMovePos]))
{
gActiveBattler = gBattlerAttacker;
BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBattlerAttacker].pp[gCurrMovePos]);
@@ -4233,13 +4233,13 @@ static void atk3D_end(void)
gMoveResultFlags = 0;
gActiveBattler = 0;
- gCurrentActionFuncId = 0xB;
+ gCurrentActionFuncId = B_ACTION_TRY_FINISH;
}
static void atk3E_end2(void)
{
gActiveBattler = 0;
- gCurrentActionFuncId = 0xB;
+ gCurrentActionFuncId = B_ACTION_TRY_FINISH;
}
static void atk3F_end3(void) // pops the main function stack
@@ -5550,10 +5550,12 @@ static void atk52_switchineffects(void)
}
else
{
- if (gBattleMons[gActiveBattler].ability == ABILITY_TRUANT && !gDisableStructs[gActiveBattler].truantUnknownBit)
+ // There is a hack here to ensure the truant counter will be 0 when the battler's next turn starts.
+ // The truant counter is not updated in the case where a mon switches in after a lost judgement in the battle arena.
+ if (gBattleMons[gActiveBattler].ability == ABILITY_TRUANT && !gDisableStructs[gActiveBattler].truantSwitchInHack)
gDisableStructs[gActiveBattler].truantCounter = 1;
- gDisableStructs[gActiveBattler].truantUnknownBit = 0;
+ gDisableStructs[gActiveBattler].truantSwitchInHack = 0;
if (!AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0)
&& !ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE))
@@ -5774,7 +5776,7 @@ static void atk5A_yesnoboxlearnmove(void)
if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId
&& !(gBattleMons[0].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[0].unk18_b & gBitTable[movePosition]))
+ && !(gDisableStructs[0].mimickedMoves & gBitTable[movePosition]))
{
RemoveBattleMonPPBonus(&gBattleMons[0], movePosition);
SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, movePosition);
@@ -5782,7 +5784,7 @@ static void atk5A_yesnoboxlearnmove(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
&& gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId
&& !(gBattleMons[2].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[2].unk18_b & gBitTable[movePosition]))
+ && !(gDisableStructs[2].mimickedMoves & gBitTable[movePosition]))
{
RemoveBattleMonPPBonus(&gBattleMons[2], movePosition);
SetBattleMonMoveSlot(&gBattleMons[2], gMoveToLearn, movePosition);
@@ -6694,14 +6696,14 @@ static void atk76_various(void)
gBattleMons[1].hp = 0;
gHitMarker |= HITMARKER_FAINTED(1);
gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]];
- gDisableStructs[1].truantUnknownBit = 1;
+ gDisableStructs[1].truantSwitchInHack = 1;
break;
case VARIOUS_ARENA_PLAYER_MON_LOST:
gBattleMons[0].hp = 0;
gHitMarker |= HITMARKER_FAINTED(0);
gHitMarker |= HITMARKER_x400000;
gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]];
- gDisableStructs[0].truantUnknownBit = 1;
+ gDisableStructs[0].truantSwitchInHack = 1;
break;
case VARIOUS_ARENA_BOTH_MONS_LOST:
gBattleMons[0].hp = 0;
@@ -6711,8 +6713,8 @@ static void atk76_various(void)
gHitMarker |= HITMARKER_x400000;
gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]];
gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]];
- gDisableStructs[0].truantUnknownBit = 1;
- gDisableStructs[1].truantUnknownBit = 1;
+ gDisableStructs[0].truantSwitchInHack = 1;
+ gDisableStructs[1].truantSwitchInHack = 1;
break;
case VARIOUS_EMIT_YESNOBOX:
BtlController_EmitUnknownYesNoBox(0);
@@ -8021,7 +8023,7 @@ static void atk9B_transformdataexecution(void)
gDisableStructs[gBattlerAttacker].disabledMove = 0;
gDisableStructs[gBattlerAttacker].disableTimer = 0;
gDisableStructs[gBattlerAttacker].transformedMonPersonality = gBattleMons[gBattlerTarget].personality;
- gDisableStructs[gBattlerAttacker].unk18_b = 0;
+ gDisableStructs[gBattlerAttacker].mimickedMoves = 0;
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].species)
@@ -8095,7 +8097,7 @@ static void atk9D_mimicattackcopy(void)
}
else
{
- s32 i;
+ int i;
for (i = 0; i < MAX_MON_MOVES; i++)
{
@@ -8114,7 +8116,7 @@ static void atk9D_mimicattackcopy(void)
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget])
- gDisableStructs[gBattlerAttacker].unk18_b |= gBitTable[gCurrMovePos];
+ gDisableStructs[gBattlerAttacker].mimickedMoves |= gBitTable[gCurrMovePos];
gBattlescriptCurrInstr += 5;
}
else
@@ -8571,7 +8573,7 @@ static void atkAD_tryspiteppreduce(void)
gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct;
gActiveBattler = gBattlerTarget;
- if (!(gDisableStructs[gActiveBattler].unk18_b & gBitTable[i])
+ if (!(gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[i])
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
{
BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBattler].pp[i]);
diff --git a/src/battle_tent.c b/src/battle_tent.c
index de4d9d374..cb8149253 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -12,6 +12,7 @@
#include "frontier_util.h"
#include "string_util.h"
#include "constants/items.h"
+#include "constants/layouts.h"
#include "constants/region_map_sections.h"
#include "constants/species.h"
@@ -270,8 +271,8 @@ static void sub_81B9E88(void)
bool8 sub_81B9E94(void)
{
- return (gMapHeader.regionMapSectionId == MAPSEC_SLATEPORT_CITY
- && ((gMapHeader.mapLayoutId == 385) | (gMapHeader.mapLayoutId == 386)));
+ return gMapHeader.regionMapSectionId == MAPSEC_SLATEPORT_CITY
+ && (gMapHeader.mapLayoutId == LAYOUT_BATTLE_TENT_CORRIDOR || gMapHeader.mapLayoutId == LAYOUT_BATTLE_TENT_BATTLE_ROOM);
}
static void sub_81B9EC0(void)
diff --git a/src/battle_util.c b/src/battle_util.c
index 5d8e42482..2f583a9c7 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -78,38 +78,38 @@ u8 GetBattlerForBattleScript(u8 caseId)
return ret;
}
-void PressurePPLose(u8 defender, u8 attacker, u16 move)
+void PressurePPLose(u8 target, u8 attacker, u16 move)
{
- s32 i;
+ int moveIndex;
- if (gBattleMons[defender].ability != ABILITY_PRESSURE)
+ if (gBattleMons[target].ability != ABILITY_PRESSURE)
return;
- for (i = 0; i < MAX_MON_MOVES; i++)
+ for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
{
- if (gBattleMons[attacker].moves[i] == move)
+ if (gBattleMons[attacker].moves[moveIndex] == move)
break;
}
- if (i == MAX_MON_MOVES) // mons don't share any moves
+ if (moveIndex == MAX_MON_MOVES)
return;
- if (gBattleMons[attacker].pp[i] != 0)
- gBattleMons[attacker].pp[i]--;
+ if (gBattleMons[attacker].pp[moveIndex] != 0)
+ gBattleMons[attacker].pp[moveIndex]--;
if (!(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[attacker].unk18_b & gBitTable[i]))
+ && !(gDisableStructs[attacker].mimickedMoves & gBitTable[moveIndex]))
{
gActiveBattler = attacker;
- BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBattler].pp[i]);
+ BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + moveIndex, 0, 1, &gBattleMons[gActiveBattler].pp[moveIndex]);
MarkBattlerForControllerExec(gActiveBattler);
}
}
void PressurePPLoseOnUsingImprision(u8 attacker)
{
- s32 i, j;
- s32 imprisionPos = 4;
+ int i, j;
+ int imprisionPos = 4;
u8 atkSide = GetBattlerSide(attacker);
for (i = 0; i < gBattlersCount; i++)
@@ -132,7 +132,7 @@ void PressurePPLoseOnUsingImprision(u8 attacker)
if (imprisionPos != 4
&& !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[attacker].unk18_b & gBitTable[imprisionPos]))
+ && !(gDisableStructs[attacker].mimickedMoves & gBitTable[imprisionPos]))
{
gActiveBattler = attacker;
BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + imprisionPos, 0, 1, &gBattleMons[gActiveBattler].pp[imprisionPos]);
@@ -142,8 +142,8 @@ void PressurePPLoseOnUsingImprision(u8 attacker)
void PressurePPLoseOnUsingPerishSong(u8 attacker)
{
- s32 i, j;
- s32 perishSongPos = 4;
+ int i, j;
+ int perishSongPos = 4;
for (i = 0; i < gBattlersCount; i++)
{
@@ -165,7 +165,7 @@ void PressurePPLoseOnUsingPerishSong(u8 attacker)
if (perishSongPos != MAX_MON_MOVES
&& !(gBattleMons[attacker].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[attacker].unk18_b & gBitTable[perishSongPos]))
+ && !(gDisableStructs[attacker].mimickedMoves & gBitTable[perishSongPos]))
{
gActiveBattler = attacker;
BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + perishSongPos, 0, 1, &gBattleMons[gActiveBattler].pp[perishSongPos]);
@@ -175,7 +175,7 @@ void PressurePPLoseOnUsingPerishSong(u8 attacker)
void MarkAllBattlersForControllerExec(void) // unused
{
- s32 i;
+ int i;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
@@ -314,14 +314,14 @@ u8 TrySetCantSelectMoveBattleScript(void)
u8 holdEffect;
u16* choicedMove = &gBattleStruct->choicedMove[gActiveBattler];
- if (gDisableStructs[gActiveBattler].disabledMove == move && move != 0)
+ if (gDisableStructs[gActiveBattler].disabledMove == move && move != MOVE_NONE)
{
gBattleScripting.battler = gActiveBattler;
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingDisabledMoveInPalace;
- gProtectStructs[gActiveBattler].flag_x10 = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
}
else
{
@@ -336,7 +336,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingTormentedMoveInPalace;
- gProtectStructs[gActiveBattler].flag_x10 = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
}
else
{
@@ -351,7 +351,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveTauntInPalace;
- gProtectStructs[gActiveBattler].flag_x10 = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
}
else
{
@@ -366,7 +366,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingImprisionedMoveInPalace;
- gProtectStructs[gActiveBattler].flag_x10 = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
}
else
{
@@ -388,7 +388,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
gLastUsedItem = gBattleMons[gActiveBattler].item;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
- gProtectStructs[gActiveBattler].flag_x10 = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
}
else
{
@@ -401,7 +401,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
- gProtectStructs[gActiveBattler].flag_x10 = 1;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = 1;
}
else
{
@@ -3035,7 +3035,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
MarkBattlerForControllerExec(gActiveBattler);
break;
case ITEM_PP_CHANGE:
- if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[battlerId].unk18_b & gBitTable[i]))
+ if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[battlerId].mimickedMoves & gBitTable[i]))
gBattleMons[battlerId].pp[i] = changedPP;
break;
}
diff --git a/src/cable_club.c b/src/cable_club.c
index ce9b9db05..303b0d016 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -27,12 +27,10 @@
#include "task.h"
#include "trade.h"
#include "trainer_card.h"
+#include "party_menu.h"
#include "window.h"
#include "constants/songs.h"
-extern u8 gUnknown_02032298[2];
-extern u8 gSelectedOrderFromParty[];
-
static const struct WindowTemplate gUnknown_08550594 = {
.bg = 0,
.tilemapLeft = 16,
diff --git a/src/contest.c b/src/contest.c
index 7decf88fc..cf084e35e 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -21,6 +21,7 @@
#include "overworld.h"
#include "palette.h"
#include "random.h"
+#include "new_game.h"
#include "script.h"
#include "sound.h"
#include "sprite.h"
@@ -42,134 +43,157 @@
#include "international_string_util.h"
#include "data2.h"
#include "constants/rgb.h"
-
-extern void (*gFieldCallback)(void);
-
-void sub_80D782C(void);
-void sub_80D7C7C(u8 taskId);
-void sub_80D7CB4(u8 taskId);
-void sub_80D7DAC(u8 taskId);
-void sub_80D7DC8(u8 taskId);
-void sub_80D7DE8(u8 taskId);
-bool8 sub_80D7E44(u8 *);
-void sub_80D80C8(u8 taskId);
-void sub_80D8108(u8 taskId);
-void vblank_cb_battle(void);
-void sub_80D823C(void);
-void sub_80D833C(u8 taskId);
-void sub_80D8424(u8 taskId);
-void sub_80D8610(u8 taskId);
-void sub_80D8490(u8 taskId);
-void sub_80D880C(s8);
-void sub_80D883C(s8);
-void sub_80D8894(u8 taskId);
-void sub_80D892C(u8 taskId);
-void sub_80D895C(u8 taskId);
-void sub_80D8A04(u8 taskId);
-void sub_80D8A50(u8 taskId);
-void sub_80D8A88(u8 taskId);
-void sub_80D8B38(u8 taskId);
-void sub_80DA110(u8);
-void sub_80DA134(struct Sprite *);
-void sub_80DA164(struct Sprite *);
-void sub_80DA198(u8);
-void sub_80DA25C(u8);
-void sub_80DA28C(u8);
-void sub_80DA31C(u8);
-void sub_80DA348(u8);
-void sub_80DA38C(u8);
-void sub_80DA3CC(u8);
-void sub_80DA464(u8);
-void sub_80DA49C(u8);
-void sub_80DA4CC(u8);
-void sub_80DA51C(u8);
-void sub_80DA5B4(u8);
-void sub_80DA5E8(u8);
-void sub_80DA6B4(u8);
-void sub_80DA700(u8);
-void sub_80DA740(u8);
-void sub_80DA7A0(u8);
-void sub_80DA7EC(u8);
-void sub_80DA830(u8);
-void sub_80DA874(void);
-bool8 sub_80DA8A4(void);
-void sub_80DAF04(u8);
-void sub_80DAF1C(u8 a0, u8 a1);
-void sub_80DAF88(u8);
-void sub_80DAFA0(u8, u8);
-u8 sub_80DB0C4(void);
-u8 sub_80DB120(void);
-u8 sub_80DB174(u16, u32, u32, u32);
-void sub_80DB2BC(void);
-void prints_contest_move_description(u16);
-u16 sub_80DE84C(u16);
-void sub_80DB89C(void);
-u16 sub_80DB8B8(u8);
-void sub_80DB918(void);
-bool8 Contest_IsMonsTurnDisabled(u8);
-void sub_80DBF68(void);
-void sub_80DBF90(void);
-void sub_80DC2BC(void);
-void sub_80DC490(bool8);
-void sub_80DC4F0(void);
-void sub_80DC594(void);
-void sub_80DC5E8(void);
-void sub_80DC7EC(void);
-void sub_80DCD48(void);
-void sub_80DCE58(u8);
-void sub_80DD04C(void);
-void sub_80DD590(void);
-void sub_80DDB0C(void);
-void sub_80DDBE8(void);
-bool8 sub_80DE1E8(u8);
-void sub_80DE224(void);
-void sub_80DE350(void);
-void sub_80DE424(u8);
-void sub_80DE69C(u8);
-void sub_80DEA20(void);
-void Contest_PrintTextToBg0WindowAt(u32, u8 *, s32, u8, u8);
-void Contest_StartTextPrinter(const u8 *, u8);
-void ContestBG_FillBoxWithIncrementingTile(u8, u16, u8, u8, u8, u8, u8, u8);
-bool32 Contest_RunTextPrinters(void);
-void Contest_SetBgCopyFlags(u32);
-void sub_80FC9F8(u8);
-bool8 AreMovesContestCombo(u16, u16);
-void sub_80DBD18(void);
-void sub_80DF250(void);
-void sub_80DF4F8(void);
-void sub_80DD080(u8);
-void sub_80DF080(u8);
-void sub_80DF750(void);
-void sub_80DE9DC(u8);
-void sub_80DCBE8(u8, u8);
-u8 sub_80DC9EC(u8);
-u16 sub_80DE834(u16);
-void sub_80DE864(u8);
-void sub_80DEAA8(u16);
-void sub_80DE9B0(u8);
-void sub_80DC674(u8);
-void sub_80DE12C(void);
-void sub_80DD45C(u8, u8);
-void sub_80DD720(u8);
-void sub_80DE008(bool8);
-void sub_80DC028(s16, s16, u8);
-bool8 sub_80DB5B8(u8, u8);
-bool8 sub_80DB798(u8);
-void sub_80DB884(void);
-void sub_80DC9B4(u8);
-void sub_80DDED0(s8, s8);
-void sub_80DDCDC(s8);
-void sub_80DDE0C(void);
-void sub_80DD940(void);
-void sub_80DB944(void);
-void sub_80DBA18(void);
-void sub_80DC3AC(void);
-bool8 sub_80DC3C4(void);
-void sub_80DF9D4(u8 *);
-void sub_80DF9E0(u8 *, s32);
-void ContestBG_FillBoxWithTile(u8, u16, u8, u8, u8, u8, u8);
-void Contest_PrintTextToBg0WindowStd(u8, const u8 *);
-
+#include "contest_ai.h"
+
+extern void sub_80FC9F8(u8); // contest_link_80FC4F4.c
+
+// This file's functions.
+static void sub_80D782C(void);
+static void sub_80D7C7C(u8 taskId);
+static void sub_80D7CB4(u8 taskId);
+static void sub_80D7DAC(u8 taskId);
+static void sub_80D7DC8(u8 taskId);
+static void sub_80D7DE8(u8 taskId);
+static bool8 sub_80D7E44(u8 *);
+static void sub_80D80C8(u8 taskId);
+static void sub_80D8108(u8 taskId);
+static void vblank_cb_battle(void);
+static void sub_80D823C(void);
+static void sub_80D833C(u8 taskId);
+static void sub_80D8424(u8 taskId);
+static void sub_80D8610(u8 taskId);
+static void sub_80D8490(u8 taskId);
+static void sub_80D880C(s8);
+static void sub_80D883C(s8);
+static void sub_80D8894(u8 taskId);
+static void sub_80D892C(u8 taskId);
+static void sub_80D895C(u8 taskId);
+static void sub_80D8A04(u8 taskId);
+static void sub_80D8A50(u8 taskId);
+static void sub_80D8A88(u8 taskId);
+static void sub_80D8B38(u8 taskId);
+static void sub_80DA110(u8);
+static void sub_80DA134(struct Sprite *);
+static void sub_80DA164(struct Sprite *);
+static void sub_80DA198(u8);
+static void sub_80DA25C(u8);
+static void sub_80DA28C(u8);
+static void sub_80DA31C(u8);
+static void sub_80DA348(u8);
+static void sub_80DA38C(u8);
+static void sub_80DA3CC(u8);
+static void sub_80DA464(u8);
+static void sub_80DA49C(u8);
+static void sub_80DA4CC(u8);
+static void sub_80DA51C(u8);
+static void sub_80DA5B4(u8);
+static void sub_80DA5E8(u8);
+static void sub_80DA6B4(u8);
+static void sub_80DA700(u8);
+static void sub_80DA740(u8);
+static void sub_80DA7A0(u8);
+static void sub_80DA7EC(u8);
+static void sub_80DA830(u8);
+static void sub_80DA874(void);
+static bool8 sub_80DA8A4(void);
+static void sub_80DAF04(u8);
+static void sub_80DAF1C(u8 a0, u8 a1);
+static void sub_80DAF88(u8);
+static void sub_80DAFA0(u8, u8);
+static u8 sub_80DB0C4(void);
+static u8 sub_80DB120(void);
+static u8 sub_80DB174(u16, u32, u32, u32);
+static void prints_contest_move_description(u16);
+static u16 SanitizeSpecies(u16);
+static void sub_80DB89C(void);
+static u16 GetChosenMove(u8);
+static void sub_80DB918(void);
+static void sub_80DBF68(void);
+static void sub_80DBF90(void);
+static void sub_80DC2BC(void);
+static void sub_80DC490(bool8);
+static void sub_80DC4F0(void);
+static void CreateApplauseMeterSprite(void);
+static void sub_80DC5E8(void);
+static void sub_80DC7EC(void);
+static void sub_80DCD48(void);
+static void sub_80DD04C(void);
+static void sub_80DD590(void);
+static void sub_80DDB0C(void);
+static void sub_80DDBE8(void);
+static void sub_80DE224(void);
+static void sub_80DE350(void);
+static void sub_80DE424(u8);
+static void sub_80DE69C(u8);
+static void sub_80DEA20(void);
+static void Contest_StartTextPrinter(const u8 *, u32);
+static void ContestBG_FillBoxWithIncrementingTile(u8, u16, u8, u8, u8, u8, u8, s16);
+static bool32 Contest_RunTextPrinters(void);
+static void Contest_SetBgCopyFlags(u32);
+static void sub_80DBD18(void);
+static void sub_80DD080(u8);
+static void sub_80DE9DC(u8);
+static void sub_80DCBE8(u8, u8);
+static u8 sub_80DC9EC(u8);
+static u16 SanitizeMove(u16);
+static void sub_80DE864(u8);
+static void SelectContestMoveBankTarget(u16);
+static void sub_80DE9B0(u8);
+static void sub_80DC674(u8);
+static void sub_80DE12C(void);
+static void sub_80DD45C(u8, u8);
+static void sub_80DD720(u8);
+static void sub_80DE008(bool8);
+static u8 sub_80DC028(s16, s16, u8);
+static bool8 sub_80DB5B8(u8, u8);
+static bool8 sub_80DB798(u8);
+static void sub_80DB884(void);
+static void sub_80DC9B4(u8);
+static void sub_80DDED0(s8, s8);
+static void sub_80DDCDC(s8);
+static void sub_80DDE0C(void);
+static void sub_80DD940(void);
+static void sub_80DB944(void);
+static void sub_80DBA18(void);
+static void sub_80DC3AC(void);
+static bool8 sub_80DC3C4(void);
+static void ContestBG_FillBoxWithTile(u8, u16, u8, u8, u8, u8, u8);
+static void Contest_PrintTextToBg0WindowStd(u32, const u8 *);
+static s16 sub_80DBD34(u8);
+static void DetermineFinalStandings(void);
+static bool8 sub_80DBF30(s32, s32, struct UnknownContestStruct6 *);
+static void sub_80DC0F4(u8);
+static void sub_80DC408(struct Sprite *);
+static void sub_80DC728(u8);
+static void sub_80DC6A4(u8);
+static void sub_80DC8D0(u8);
+static void sub_80DC81C(u8);
+static void sub_80DC87C(u8);
+static void sub_80DCC84(struct Sprite *);
+static void sub_80DCCD8(struct Sprite *sprite);
+static u8 sub_80DDA20(void);
+static void c3_08130B10(u8);
+static void sub_80DDB6C(u8);
+static void task08_080CD1CC(u8);
+static void sub_80DDD20(u8);
+static void sub_80DDE30(u8);
+static void sub_80DDF80(u8);
+static const u8 *GetTurnOrderNumberGfx(u8);
+static void sub_80DE464(u8);
+static void sub_80DE4A8(u8);
+static void sub_80DE5F4(u8);
+static void sub_80DE65C(u8);
+static void sub_80DE794(u8);
+static void sub_80DEA5C(void);
+static void sub_80DF250(void);
+static void sub_80DF4F8(void);
+static void sub_80DF080(u8);
+static void sub_80DF750(void);
+static void sub_80DF9D4(u8 *);
+static void sub_80DF9E0(u8 *, s32);
+static void sub_80DB2BC(void);
+
+// EWRAM vars.
EWRAM_DATA struct ContestPokemon gContestMons[4] = {0};
EWRAM_DATA s16 gContestMonConditions[4] = {0};
EWRAM_DATA s16 gUnknown_02039F08[4] = {0};
@@ -187,10 +211,13 @@ EWRAM_DATA u16 gSpecialVar_ContestCategory = 0;
EWRAM_DATA u16 gSpecialVar_ContestRank = 0;
EWRAM_DATA u8 gNumLinkContestPlayers = 0;
EWRAM_DATA u8 gHighestRibbonRank = 0;
-EWRAM_DATA struct ContestResources * gContestResources = NULL;
+EWRAM_DATA struct ContestResources *gContestResources = NULL;
EWRAM_DATA u8 sContestBgCopyFlags = 0;
EWRAM_DATA struct ContestWinner gUnknown_02039F3C = {0};
+EWRAM_DATA u8 gUnknown_02039F5C = 0;
+EWRAM_DATA u8 gUnknown_02039F5D = 0;
+// IWRAM common vars.
u32 gContestRngValue;
extern const u16 gUnknown_08587C30[];
@@ -199,6 +226,7 @@ extern const struct WindowTemplate gUnknown_08587F44[];
extern const u8 *const gUnknown_08587D90[];
extern const u8 *const gUnknown_08587F08[];
extern const u8 *const gUnknown_08587F1C[];
+extern const u8 *const gUnknown_0827E8DA[];
extern const u8 gText_0827D55A[];
extern const u8 gText_0827E793[];
extern const u8 gText_0827E32E[];
@@ -214,6 +242,14 @@ extern const u8 gText_0827E817[];
extern const u8 gText_0827E58A[];
extern const u8 gText_0827D56F[];
extern const u8 gText_0827D597[];
+extern const u8 gText_Contest_Shyness[];
+extern const u8 gText_Contest_Anxiety[];
+extern const u8 gText_Contest_Laziness[];
+extern const u8 gText_Contest_Hesitancy[];
+extern const u8 gText_Contest_Fear[];
+extern const u8 gText_BDot[];
+extern const u8 gText_CDot[];
+extern const u8 *const gUnknown_08587E10[];
extern const struct ContestPokemon gContestOpponents[96];
extern const u8 gUnknown_085898A4[96];
extern const struct CompressedSpriteSheet gUnknown_08587C00;
@@ -224,8 +260,25 @@ extern const struct SpriteTemplate gSpriteTemplate_8587C18;
extern const union AffineAnimCmd *const gUnknown_082FF6C0[];
extern const union AffineAnimCmd *const gUnknown_082FF694[];
extern const u8 *const gContestEffectDescriptionPointers[];
-
-void TaskDummy1(u8 taskId)
+extern const struct SpriteSheet gUnknown_08587A74;
+extern const u8 gUnknown_08587A6C[];
+extern const struct SpriteTemplate gSpriteTemplate_8587AD0;
+extern const struct SpritePalette gUnknown_08587B08;
+extern const struct CompressedSpriteSheet gUnknown_08587AE8[];
+extern const struct SpriteTemplate gSpriteTemplate_8587B18[];
+extern const u8 gUnknown_08587A70[];
+extern const struct SubspriteTable gSubspriteTables_8587B80[];
+extern const struct CompressedSpriteSheet gUnknown_08587BB0;
+extern const struct SpritePalette gUnknown_08587BB8;
+extern const struct SpriteTemplate gSpriteTemplate_8587BC8;
+extern void (*const gContestEffectFuncs[])(void);
+extern const s8 gContestExcitementTable[][5];
+extern const struct ContestWinner gUnknown_08587FA4[];
+extern const struct CompressedSpriteSheet gUnknown_08589904[];
+extern const struct SpritePalette gUnknown_08589924[];
+extern const struct SpriteTemplate gSpriteTemplate_858998C[];
+
+static void TaskDummy1(u8 taskId)
{
}
@@ -234,7 +287,7 @@ void ResetLinkContestBoolean(void)
gIsLinkContest = 0;
}
-void sub_80D7678(void)
+static void sub_80D7678(void)
{
u16 savedIme;
@@ -278,7 +331,7 @@ void LoadContestBgAfterMoveAnim(void)
}
}
-void sub_80D779C(void)
+static void sub_80D779C(void)
{
s32 i;
@@ -291,7 +344,7 @@ void sub_80D779C(void)
}
}
-void sub_80D77E4(void)
+static void sub_80D77E4(void)
{
InitWindows(gUnknown_08587F44);
DeactivateAllTextPrinters();
@@ -305,7 +358,7 @@ void sub_80D77E4(void)
}
}
-void sub_80D782C(void)
+static void sub_80D782C(void)
{
s32 i;
@@ -316,7 +369,7 @@ void sub_80D782C(void)
FillPalette(RGB(31, 17, 31), 0xF3, 2);
}
-void sub_80D787C(void)
+static void sub_80D787C(void)
{
s32 i;
@@ -347,10 +400,10 @@ void sub_80D787C(void)
gContestResources->field_0->unk19218[i] = gUnknown_02039F26[i];
}
sub_80DD590();
- *gContestResources->field_1c = (struct ContestResourcesField1C){};
+ memset(gContestResources->field_1c, 0, sizeof(*gContestResources->field_1c) * 4);
}
-void sub_80D7988(void)
+static void sub_80D7988(void)
{
gContestResources = AllocZeroed(sizeof(struct ContestResources));
gContestResources->field_0 = AllocZeroed(sizeof(struct Contest));
@@ -360,7 +413,7 @@ void sub_80D7988(void)
gContestResources->field_10 = AllocZeroed(sizeof(struct UnknownContestStruct5) * 4);
gContestResources->field_14 = AllocZeroed(sizeof(struct UnknownContestStruct4) * 4);
gContestResources->field_18 = AllocZeroed(sizeof(struct ContestStruct_field_18));
- gContestResources->field_1c = AllocZeroed(sizeof(struct ContestResourcesField1C));
+ gContestResources->field_1c = AllocZeroed(sizeof(struct ContestResourcesField1C) * 4);
gContestResources->field_20 = AllocZeroed(sizeof(struct ContestResourcesField20));
gContestResources->field_24[0] = AllocZeroed(0x1000);
gContestResources->field_24[1] = AllocZeroed(0x1000);
@@ -373,7 +426,7 @@ void sub_80D7988(void)
gUnknown_02023060 = gContestResources->field_24[1];
}
-void sub_80D7A5C(void)
+static void sub_80D7A5C(void)
{
FREE_AND_SET_NULL(gContestResources->field_0);
FREE_AND_SET_NULL(gContestResources->field_4);
@@ -400,58 +453,58 @@ void sub_80D7B24(void)
{
switch (gMain.state)
{
- case 0:
- sContestBgCopyFlags = 0;
- sub_80D7988();
- AllocateMonSpritesGfx();
- FREE_AND_SET_NULL(gMonSpritesGfxPtr->firstDecompressed);
- gMonSpritesGfxPtr->firstDecompressed = AllocZeroed(0x4000);
- SetVBlankCallback(NULL);
- sub_80D779C();
- sub_80D77E4();
- sub_80D7678();
- ScanlineEffect_Clear();
- ResetPaletteFade();
- gPaletteFade.bufferTransferDisabled = TRUE;
- ResetSpriteData();
- ResetTasks();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 4;
- //shared18000.unk18000 = 0;
- gHeap[0x1a000] = 0;
- ClearBattleMonForms();
- sub_80D787C();
- gMain.state++;
- break;
- case 1:
+ case 0:
+ sContestBgCopyFlags = 0;
+ sub_80D7988();
+ AllocateMonSpritesGfx();
+ FREE_AND_SET_NULL(gMonSpritesGfxPtr->firstDecompressed);
+ gMonSpritesGfxPtr->firstDecompressed = AllocZeroed(0x4000);
+ SetVBlankCallback(NULL);
+ sub_80D779C();
+ sub_80D77E4();
+ sub_80D7678();
+ ScanlineEffect_Clear();
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ ResetSpriteData();
+ ResetTasks();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+ //shared18000.unk18000 = 0;
+ gHeap[0x1a000] = 0;
+ ClearBattleMonForms();
+ sub_80D787C();
+ gMain.state++;
+ break;
+ case 1:
+ gMain.state++;
+ break;
+ case 2:
+ if (sub_80D7E44(&gContestResources->field_0->unk1925D))
+ {
+ gContestResources->field_0->unk1925D = 0;
gMain.state++;
- break;
- case 2:
- if (sub_80D7E44(&gContestResources->field_0->unk1925D))
- {
- gContestResources->field_0->unk1925D = 0;
- gMain.state++;
- }
- break;
- case 3:
- sub_80DE224();
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- BeginFastPaletteFade(2);
- gPaletteFade.bufferTransferDisabled = FALSE;
- SetVBlankCallback(vblank_cb_battle);
- gContestResources->field_0->mainTaskId = CreateTask(sub_80D7C7C, 10);
- SetMainCallback2(sub_80D823C);
- if (gIsLinkContest & 2)
- {
- sub_800E0E8();
- CreateWirelessStatusIndicatorSprite(8, 8);
- }
- break;
+ }
+ break;
+ case 3:
+ sub_80DE224();
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ BeginFastPaletteFade(2);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ SetVBlankCallback(vblank_cb_battle);
+ gContestResources->field_0->mainTaskId = CreateTask(sub_80D7C7C, 10);
+ SetMainCallback2(sub_80D823C);
+ if (gIsLinkContest & 2)
+ {
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(8, 8);
+ }
+ break;
}
}
-void sub_80D7C7C(u8 taskId)
+static void sub_80D7C7C(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -460,7 +513,7 @@ void sub_80D7C7C(u8 taskId)
}
}
-void sub_80D7CB4(u8 taskId)
+static void sub_80D7CB4(u8 taskId)
{
if (gIsLinkContest & 1)
{
@@ -468,22 +521,22 @@ void sub_80D7CB4(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
- case 0:
- sub_80DBF68();
+ case 0:
+ sub_80DBF68();
+ gTasks[taskId].data[0]++;
+ // fallthrough
+ case 1:
+ if (IsLinkTaskFinished())
+ {
+ sub_800ADF8();
gTasks[taskId].data[0]++;
- // fallthrough
- case 1:
- if (IsLinkTaskFinished())
- {
- sub_800ADF8();
- gTasks[taskId].data[0]++;
- }
+ }
+ return;
+ case 2:
+ if (IsLinkTaskFinished() != TRUE)
return;
- case 2:
- if (IsLinkTaskFinished() != TRUE)
- return;
- gTasks[taskId].data[0]++;
- break;
+ gTasks[taskId].data[0]++;
+ break;
}
}
@@ -503,18 +556,18 @@ void sub_80D7CB4(u8 taskId)
}
}
-void sub_80D7DAC(u8 taskId)
+static void sub_80D7DAC(u8 taskId)
{
SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80D7DC8);
}
-void sub_80D7DC8(u8 taskId)
+static void sub_80D7DC8(u8 taskId)
{
gTasks[taskId].data[0] = 1;
gTasks[taskId].func = sub_80D7DE8;
}
-void sub_80D7DE8(u8 taskId)
+static void sub_80D7DE8(u8 taskId)
{
gTasks[taskId].data[0]--;
if (gTasks[taskId].data[0] <= 0)
@@ -526,81 +579,81 @@ void sub_80D7DE8(u8 taskId)
}
}
-u8 sub_80D7E44(u8 *a)
+static u8 sub_80D7E44(u8 *a)
{
u16 sp0[16];
u16 sp20[16];
switch (*a)
{
- case 0:
- gPaletteFade.bufferTransferDisabled = TRUE;
- RequestDma3Fill(0, (void *)VRAM, 0x8000, 1);
- RequestDma3Fill(0, (void *)VRAM + 0x8000, 0x8000, 1);
- RequestDma3Fill(0, (void *)VRAM + 0x10000, 0x8000, 1);
- break;
- case 1:
- LZDecompressVram(gContestMiscGfx, (void *)VRAM);
- break;
- case 2:
- LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000));
- DmaCopyLarge32(3, (void *)(VRAM + 0x2000), shared15800, 0x2000, 0x1000);
- break;
- case 3:
- CopyToBgTilemapBuffer(3, gUnknown_08C16FA8, 0, 0);
- CopyBgTilemapBufferToVram(3);
- break;
- case 4:
- CopyToBgTilemapBuffer(2, gUnknown_08C17170, 0, 0);
- CopyBgTilemapBufferToVram(2);
- DmaCopy32Defvars(3, gContestResources->field_24[2], shared18000.unk18A04, 0x800);
- break;
- case 5:
- LoadCompressedPalette(gUnknown_08C16E90, 0, 0x200);
- CpuCopy32(gPlttBufferUnfaded + 128, sp0, 16 * sizeof(u16));
- CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16));
- CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
- CpuCopy32(sp0, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
- DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18004, 0x200);
- sub_80D782C();
- break;
- case 6:
- sub_80DD04C();
- sub_80DBF90();
- sub_80DB2BC();
- gContestResources->field_0->unk19216 = sub_80DB120();
- sub_80DC2BC();
- sub_80DC4F0();
- sub_80DC594();
- sub_80DC5E8();
- sub_80DC7EC();
- gBattlerPositions[0] = 0;
- gBattlerPositions[1] = 1;
- gBattlerPositions[2] = 3;
- gBattlerPositions[3] = 2;
- gBattleTypeFlags = 0;
- gBattlerAttacker = 2;
- gBattlerTarget = 3;
- gBattlerSpriteIds[gBattlerAttacker] = sub_80DB0C4();
- sub_80DEA20();
- CopyBgTilemapBufferToVram(3);
- CopyBgTilemapBufferToVram(2);
- CopyBgTilemapBufferToVram(1);
- ShowBg(3);
- ShowBg(2);
- ShowBg(0);
- ShowBg(1);
- break;
- default:
- *a = 0;
- return 1;
+ case 0:
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ RequestDma3Fill(0, (void *)VRAM, 0x8000, 1);
+ RequestDma3Fill(0, (void *)VRAM + 0x8000, 0x8000, 1);
+ RequestDma3Fill(0, (void *)VRAM + 0x10000, 0x8000, 1);
+ break;
+ case 1:
+ LZDecompressVram(gContestMiscGfx, (void *)VRAM);
+ break;
+ case 2:
+ LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000));
+ DmaCopyLarge32(3, (void *)(VRAM + 0x2000), shared15800, 0x2000, 0x1000);
+ break;
+ case 3:
+ CopyToBgTilemapBuffer(3, gUnknown_08C16FA8, 0, 0);
+ CopyBgTilemapBufferToVram(3);
+ break;
+ case 4:
+ CopyToBgTilemapBuffer(2, gUnknown_08C17170, 0, 0);
+ CopyBgTilemapBufferToVram(2);
+ DmaCopy32Defvars(3, gContestResources->field_24[2], shared18000.unk18A04, 0x800);
+ break;
+ case 5:
+ LoadCompressedPalette(gUnknown_08C16E90, 0, 0x200);
+ CpuCopy32(gPlttBufferUnfaded + 128, sp0, 16 * sizeof(u16));
+ CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16));
+ CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
+ CpuCopy32(sp0, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
+ DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18004, 0x200);
+ sub_80D782C();
+ break;
+ case 6:
+ sub_80DD04C();
+ sub_80DBF90();
+ sub_80DB2BC();
+ gContestResources->field_0->unk19216 = sub_80DB120();
+ sub_80DC2BC();
+ sub_80DC4F0();
+ CreateApplauseMeterSprite();
+ sub_80DC5E8();
+ sub_80DC7EC();
+ gBattlerPositions[0] = 0;
+ gBattlerPositions[1] = 1;
+ gBattlerPositions[2] = 3;
+ gBattlerPositions[3] = 2;
+ gBattleTypeFlags = 0;
+ gBattlerAttacker = 2;
+ gBattlerTarget = 3;
+ gBattlerSpriteIds[gBattlerAttacker] = sub_80DB0C4();
+ sub_80DEA20();
+ CopyBgTilemapBufferToVram(3);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(1);
+ ShowBg(3);
+ ShowBg(2);
+ ShowBg(0);
+ ShowBg(1);
+ break;
+ default:
+ *a = 0;
+ return 1;
}
(*a)++;
return 0;
}
-void sub_80D80C8(u8 taskId)
+static void sub_80D80C8(u8 taskId)
{
gPaletteFade.bufferTransferDisabled = FALSE;
if (!gPaletteFade.active)
@@ -611,52 +664,51 @@ void sub_80D80C8(u8 taskId)
}
}
-
-void sub_80D8108(u8 taskId)
+static void sub_80D8108(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
- case 0:
- if (gTasks[taskId].data[1]++ <= 60)
- break;
- gTasks[taskId].data[1] = 0;
- PlaySE12WithPanning(SE_C_MAKU_U, 0);
- gTasks[taskId].data[0]++;
- break;
- case 1:
- (s16)gBattle_BG1_Y += 7;
- if ((s16)gBattle_BG1_Y <= 160)
- break;
- gTasks[taskId].data[0]++;
- break;
- case 2:
- sub_80DE350();
- gTasks[taskId].data[0]++;
+ case 0:
+ if (gTasks[taskId].data[1]++ <= 60)
break;
- case 3:
- {
- u16 bg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT);
- u16 bg2Cnt = GetGpuReg(REG_OFFSET_BG2CNT);
- ((struct BgCnt *)&bg0Cnt)->priority = 0;
- ((struct BgCnt *)&bg2Cnt)->priority = 0;
- SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt);
- SetGpuReg(REG_OFFSET_BG2CNT, bg2Cnt);
- sub_80DDB0C();
- gTasks[taskId].data[0]++;
+ gTasks[taskId].data[1] = 0;
+ PlaySE12WithPanning(SE_C_MAKU_U, 0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ (s16)gBattle_BG1_Y += 7;
+ if ((s16)gBattle_BG1_Y <= 160)
break;
- }
- case 4:
- default:
- if (gContestResources->field_0->unk1920A_6)
- break;
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].func = sub_80D833C;
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ sub_80DE350();
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ {
+ u16 bg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT);
+ u16 bg2Cnt = GetGpuReg(REG_OFFSET_BG2CNT);
+ ((struct BgCnt *)&bg0Cnt)->priority = 0;
+ ((struct BgCnt *)&bg2Cnt)->priority = 0;
+ SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt);
+ SetGpuReg(REG_OFFSET_BG2CNT, bg2Cnt);
+ sub_80DDB0C();
+ gTasks[taskId].data[0]++;
+ break;
+ }
+ case 4:
+ default:
+ if (gContestResources->field_0->unk1920A_6)
break;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].func = sub_80D833C;
+ break;
}
}
-void sub_80D823C(void)
+static void sub_80D823C(void)
{
s32 i;
@@ -673,7 +725,7 @@ void sub_80D823C(void)
sContestBgCopyFlags = 0;
}
-void vblank_cb_battle(void)
+static void vblank_cb_battle(void)
{
SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
@@ -693,7 +745,7 @@ void vblank_cb_battle(void)
ScanlineEffect_InitHBlankDmaTransfer();
}
-void sub_80D833C(u8 taskId)
+static void sub_80D833C(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
@@ -721,7 +773,7 @@ void sub_80D833C(u8 taskId)
}
}
-void sub_80D8424(u8 taskId)
+static void sub_80D8424(u8 taskId)
{
if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON))
{
@@ -738,7 +790,7 @@ void sub_80D8424(u8 taskId)
}
}
-void sub_80D8490(u8 taskId)
+static void sub_80D8490(u8 taskId)
{
u8 i;
u8 sp8[32];
@@ -776,7 +828,7 @@ void sub_80D8490(u8 taskId)
gTasks[taskId].func = sub_80D8610;
}
-void sub_80D8610(u8 taskId)
+static void sub_80D8610(u8 taskId)
{
u8 numMoves = 0;
s32 i;
@@ -796,66 +848,66 @@ void sub_80D8610(u8 taskId)
{
switch (gMain.newAndRepeatedKeys)
{
- case B_BUTTON:
+ case B_BUTTON:
+ PlaySE(SE_SELECT);
+ sub_80DC490(FALSE);
+ ConvertIntToDecimalStringN(gStringVar1, gContestResources->field_0->turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
+ StringCopy(gDisplayedStringBattle, gText_0827D507);
+ else
+ StringCopy(gDisplayedStringBattle, gText_0827D531);
+ sub_80DB89C();
+ StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
+ Contest_StartTextPrinter(gStringVar4, 0);
+ gBattle_BG0_Y = 0;
+ gBattle_BG2_Y = 0;
+ gTasks[taskId].func = sub_80D8424;
+ break;
+ case DPAD_LEFT:
+ case DPAD_RIGHT:
+ break;
+ case DPAD_UP:
+ sub_80D883C(gContestResources->field_0->playerMoveChoice);
+ if (gContestResources->field_0->playerMoveChoice == 0)
+ gContestResources->field_0->playerMoveChoice = numMoves - 1;
+ else
+ gContestResources->field_0->playerMoveChoice--;
+ sub_80D880C(gContestResources->field_0->playerMoveChoice);
+ prints_contest_move_description(gContestMons[gContestPlayerMonIndex].moves[gContestResources->field_0->playerMoveChoice]);
+ if (numMoves > 1)
PlaySE(SE_SELECT);
- sub_80DC490(FALSE);
- ConvertIntToDecimalStringN(gStringVar1, gContestResources->field_0->turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
- if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
- StringCopy(gDisplayedStringBattle, gText_0827D507);
- else
- StringCopy(gDisplayedStringBattle, gText_0827D531);
- sub_80DB89C();
- StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
- Contest_StartTextPrinter(gStringVar4, 0);
- gBattle_BG0_Y = 0;
- gBattle_BG2_Y = 0;
- gTasks[taskId].func = sub_80D8424;
- break;
- case DPAD_LEFT:
- case DPAD_RIGHT:
- break;
- case DPAD_UP:
- sub_80D883C(gContestResources->field_0->playerMoveChoice);
- if (gContestResources->field_0->playerMoveChoice == 0)
- gContestResources->field_0->playerMoveChoice = numMoves - 1;
- else
- gContestResources->field_0->playerMoveChoice--;
- sub_80D880C(gContestResources->field_0->playerMoveChoice);
- prints_contest_move_description(gContestMons[gContestPlayerMonIndex].moves[gContestResources->field_0->playerMoveChoice]);
- if (numMoves > 1)
- PlaySE(SE_SELECT);
- break;
- case DPAD_DOWN:
- sub_80D883C(gContestResources->field_0->playerMoveChoice);
- if (gContestResources->field_0->playerMoveChoice == numMoves - 1)
- gContestResources->field_0->playerMoveChoice = 0;
- else
- gContestResources->field_0->playerMoveChoice++;
- sub_80D880C(gContestResources->field_0->playerMoveChoice);
- prints_contest_move_description(gContestMons[gContestPlayerMonIndex].moves[gContestResources->field_0->playerMoveChoice]);
- if (numMoves > 1)
- PlaySE(SE_SELECT);
- break;
+ break;
+ case DPAD_DOWN:
+ sub_80D883C(gContestResources->field_0->playerMoveChoice);
+ if (gContestResources->field_0->playerMoveChoice == numMoves - 1)
+ gContestResources->field_0->playerMoveChoice = 0;
+ else
+ gContestResources->field_0->playerMoveChoice++;
+ sub_80D880C(gContestResources->field_0->playerMoveChoice);
+ prints_contest_move_description(gContestMons[gContestPlayerMonIndex].moves[gContestResources->field_0->playerMoveChoice]);
+ if (numMoves > 1)
+ PlaySE(SE_SELECT);
+ break;
}
}
}
-void sub_80D880C(s8 a0)
+static void sub_80D880C(s8 a0)
{
ContestBG_FillBoxWithIncrementingTile(2, 55, 0, 31 + a0 * 2, 2, 2, 17, 1);
}
-void sub_80D883C(s8 a0)
+static void sub_80D883C(s8 a0)
{
ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 31 + a0 * 2, 2, 1, 17, 1);
ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + a0 * 2, 2, 1, 17, 1);
}
-void sub_80D8894(u8 taskId)
+static void sub_80D8894(u8 taskId)
{
if (gIsLinkContest & 1)
{
- u16 var = sub_80DB8B8(gContestPlayerMonIndex);
+ u16 var = GetChosenMove(gContestPlayerMonIndex);
u8 taskId2;
gContestResources->field_4[gContestPlayerMonIndex].currMove = var;
@@ -872,13 +924,13 @@ void sub_80D8894(u8 taskId)
}
}
-void sub_80D892C(u8 taskId)
+static void sub_80D892C(u8 taskId)
{
DestroyTask(taskId);
gTasks[gContestResources->field_0->mainTaskId].func = sub_80D895C;
}
-void sub_80D895C(u8 taskId)
+static void sub_80D895C(u8 taskId)
{
s32 i;
@@ -902,7 +954,7 @@ void sub_80D895C(u8 taskId)
gTasks[taskId].func = sub_80D8A04;
}
-void sub_80D8A04(u8 taskId)
+static void sub_80D8A04(u8 taskId)
{
if (++gTasks[taskId].data[0] > 2)
{
@@ -916,13 +968,13 @@ void sub_80D8A04(u8 taskId)
}
}
-void sub_80D8A50(u8 taskId)
+static void sub_80D8A50(u8 taskId)
{
if (!gContestResources->field_0->unk1920A_6 && !gContestResources->field_0->unk1920B_1)
gTasks[taskId].func = sub_80D8A88;
}
-void sub_80D8A88(u8 taskId)
+static void sub_80D8A88(u8 taskId)
{
if (++gTasks[taskId].data[0] > 19)
{
@@ -934,7 +986,7 @@ void sub_80D8A88(u8 taskId)
for (i = 0; i + gNumLinkContestPlayers < 4; i++)
{
- gContestResources->field_4[gNumLinkContestPlayers + i].currMove = sub_80DB8B8(gNumLinkContestPlayers + i);
+ gContestResources->field_4[gNumLinkContestPlayers + i].currMove = GetChosenMove(gNumLinkContestPlayers + i);
}
}
gTasks[taskId].data[0] = 0;
@@ -942,7 +994,7 @@ void sub_80D8A88(u8 taskId)
}
}
-void sub_80D8B38(u8 taskId)
+static void sub_80D8B38(u8 taskId)
{
u8 spriteId;
s32 i;
@@ -951,247 +1003,247 @@ void sub_80D8B38(u8 taskId)
switch (gTasks[taskId].data[0])
{
- case 0:
- sub_80DCD48();
- for (i = 0; gContestResources->field_0->unk19214 != gContestResources->field_8->turnOrder[i]; i++)
- ;
- gContestResources->field_0->unk19215 = i;
- r6 = gContestResources->field_0->unk19215;
- if (gIsLinkContest & 1)
- {
- u8 taskId2;
+ case 0:
+ sub_80DCD48();
+ for (i = 0; gContestResources->field_0->unk19214 != gContestResources->field_8->turnOrder[i]; i++)
+ ;
+ gContestResources->field_0->unk19215 = i;
+ r6 = gContestResources->field_0->unk19215;
+ if (gIsLinkContest & 1)
+ {
+ u8 taskId2;
- gContestResources->field_0->unk1920B_2 = 1;
- if (sub_80DA8A4())
- sub_80DD080(gContestResources->field_0->unk19215);
- taskId2 = CreateTask(sub_80FCC88, 0);
- SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
- sub_80DBF68();
- gTasks[taskId].data[0] = 1;
- }
- else
- {
+ gContestResources->field_0->unk1920B_2 = 1;
+ if (sub_80DA8A4())
sub_80DD080(gContestResources->field_0->unk19215);
- gTasks[taskId].data[0] = 2;
- }
- return;
- case 1:
- if (!gContestResources->field_0->unk1920B_2)
- gTasks[taskId].data[0] = 2;
- return;
- case 2:
- sub_80DF080(r6);
- sub_80DF750();
- if (gContestResources->field_4[r6].numTurnsSkipped != 0
- || gContestResources->field_4[r6].noMoreTurns)
- {
- gTasks[taskId].data[0] = 31;
- }
- else
- {
- sub_80DB89C();
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 3;
- }
- return;
- case 3:
- for (i = 0; i < 4; i++)
- gBattleMonForms[i] = 0;
- memset(gContestResources->field_18, 0, sizeof(*gContestResources->field_18));
- sub_80DE9DC(gContestResources->field_0->unk19215);
- spriteId = sub_80DB174(
- gContestMons[gContestResources->field_0->unk19215].species,
- gContestMons[gContestResources->field_0->unk19215].otId,
- gContestMons[gContestResources->field_0->unk19215].personality,
- gContestResources->field_0->unk19215);
- gSprites[spriteId].pos2.x = 120;
- gSprites[spriteId].callback = sub_80DA134;
- gTasks[taskId].data[2] = spriteId;
- gBattlerSpriteIds[gBattlerAttacker] = spriteId;
- sub_80DCBE8(sub_80DC9EC(gContestResources->field_0->unk19215), FALSE);
- gTasks[taskId].data[0] = 4;
- return;
- case 4:
- spriteId = gTasks[taskId].data[2];
- if (gSprites[spriteId].callback == SpriteCallbackDummy)
- {
- if (!gContestResources->field_14[r6].unk2_1)
- gTasks[taskId].data[0] = 5;
- }
- return;
- case 5:
- if (gContestResources->field_4[r6].nervous)
- {
- gTasks[taskId].data[0] = 33;
- }
+ taskId2 = CreateTask(sub_80FCC88, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
+ sub_80DBF68();
+ gTasks[taskId].data[0] = 1;
+ }
+ else
+ {
+ sub_80DD080(gContestResources->field_0->unk19215);
+ gTasks[taskId].data[0] = 2;
+ }
+ return;
+ case 1:
+ if (!gContestResources->field_0->unk1920B_2)
+ gTasks[taskId].data[0] = 2;
+ return;
+ case 2:
+ sub_80DF080(r6);
+ sub_80DF750();
+ if (gContestResources->field_4[r6].numTurnsSkipped != 0
+ || gContestResources->field_4[r6].noMoreTurns)
+ {
+ gTasks[taskId].data[0] = 31;
+ }
+ else
+ {
+ sub_80DB89C();
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 3;
+ }
+ return;
+ case 3:
+ for (i = 0; i < 4; i++)
+ gBattleMonForms[i] = 0;
+ memset(gContestResources->field_18, 0, sizeof(*gContestResources->field_18));
+ sub_80DE9DC(gContestResources->field_0->unk19215);
+ spriteId = sub_80DB174(
+ gContestMons[gContestResources->field_0->unk19215].species,
+ gContestMons[gContestResources->field_0->unk19215].otId,
+ gContestMons[gContestResources->field_0->unk19215].personality,
+ gContestResources->field_0->unk19215);
+ gSprites[spriteId].pos2.x = 120;
+ gSprites[spriteId].callback = sub_80DA134;
+ gTasks[taskId].data[2] = spriteId;
+ gBattlerSpriteIds[gBattlerAttacker] = spriteId;
+ sub_80DCBE8(sub_80DC9EC(gContestResources->field_0->unk19215), FALSE);
+ gTasks[taskId].data[0] = 4;
+ return;
+ case 4:
+ spriteId = gTasks[taskId].data[2];
+ if (gSprites[spriteId].callback == SpriteCallbackDummy)
+ {
+ if (!gContestResources->field_14[r6].unk2_1)
+ gTasks[taskId].data[0] = 5;
+ }
+ return;
+ case 5:
+ if (gContestResources->field_4[r6].nervous)
+ {
+ gTasks[taskId].data[0] = 33;
+ }
+ else
+ {
+ sub_80DB89C();
+ StringCopy(gStringVar1, gContestMons[r6].nickname);
+ if (gContestResources->field_4[r6].currMove < MOVES_COUNT)
+ StringCopy(gStringVar2, gMoveNames[gContestResources->field_4[r6].currMove]);
else
- {
- sub_80DB89C();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- if (gContestResources->field_4[r6].currMove < MOVES_COUNT)
- StringCopy(gStringVar2, gMoveNames[gContestResources->field_4[r6].currMove]);
- else
- StringCopy(gStringVar2, gUnknown_08587F1C[gContestResources->field_4[r6].moveCategory]);
- StringExpandPlaceholders(gStringVar4, gText_0827D55A);
- Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[0] = 6;
- }
- return;
- case 6:
- if (!Contest_RunTextPrinters())
- {
- gContestResources->field_0->unk1925E = 0;
- gTasks[taskId].data[0] = 7;
- }
- return;
- case 7:
+ StringCopy(gStringVar2, gUnknown_08587F1C[gContestResources->field_4[r6].moveCategory]);
+ StringExpandPlaceholders(gStringVar4, gText_0827D55A);
+ Contest_StartTextPrinter(gStringVar4, 1);
+ gTasks[taskId].data[0] = 6;
+ }
+ return;
+ case 6:
+ if (!Contest_RunTextPrinters())
+ {
+ gContestResources->field_0->unk1925E = 0;
+ gTasks[taskId].data[0] = 7;
+ }
+ return;
+ case 7:
{
- u16 move = sub_80DE834(gContestResources->field_4[gContestResources->field_0->unk19215].currMove);
+ u16 move = SanitizeMove(gContestResources->field_4[gContestResources->field_0->unk19215].currMove);
sub_80DE864(gContestResources->field_0->unk19215);
sub_80DE9DC(gContestResources->field_0->unk19215);
- sub_80DEAA8(move);
+ SelectContestMoveBankTarget(move);
DoMoveAnim(move);
gTasks[taskId].data[0] = 8;
}
- return;
- case 8:
- gAnimScriptCallback();
- if (!gAnimScriptActive)
- {
- sub_80DE9B0(r6);
- if (gContestResources->field_0->unk1925E != 0)
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 9;
- }
- else
- {
- if (!gContestResources->field_4[r6].hasJudgesAttention)
- sub_80DC674(r6);
- sub_80DE12C();
- gTasks[taskId].data[0] = 23;
- }
- }
- return;
- case 9:
- if (gTasks[taskId].data[10]++ > 30)
+ return;
+ case 8:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_80DE9B0(r6);
+ if (gContestResources->field_0->unk1925E != 0)
{
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 7;
+ gTasks[taskId].data[0] = 9;
}
- return;
- case 23:
- gTasks[taskId].data[1] = 0;
- if (gContestResources->field_4[r6].effectStringId != CONTEST_STRING_NONE)
+ else
{
- sub_80DD45C(r6, gContestResources->field_4[r6].effectStringId);
- gContestResources->field_4[r6].effectStringId = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 24;
+ if (!gContestResources->field_4[r6].hasJudgesAttention)
+ sub_80DC674(r6);
+ sub_80DE12C();
+ gTasks[taskId].data[0] = 23;
}
- else
+ }
+ return;
+ case 9:
+ if (gTasks[taskId].data[10]++ > 30)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 7;
+ }
+ return;
+ case 23:
+ gTasks[taskId].data[1] = 0;
+ if (gContestResources->field_4[r6].effectStringId != CONTEST_STRING_NONE)
+ {
+ sub_80DD45C(r6, gContestResources->field_4[r6].effectStringId);
+ gContestResources->field_4[r6].effectStringId = CONTEST_STRING_NONE;
+ gTasks[taskId].data[0] = 24;
+ }
+ else
+ {
+ if (gContestResources->field_4[r6].effectStringId2 != CONTEST_STRING_NONE)
{
- if (gContestResources->field_4[r6].effectStringId2 != CONTEST_STRING_NONE)
+ for (i = 0; i < 4; i++)
{
- for (i = 0; i < 4; i++)
- {
- if (i != r6 && gContestResources->field_4[i].effectStringId != CONTEST_STRING_NONE)
- break;
- }
- if (i == 4)
- {
- sub_80DD45C(r6, gContestResources->field_4[r6].effectStringId2);
- gContestResources->field_4[r6].effectStringId2 = CONTEST_STRING_NONE;
- gTasks[taskId].data[0] = 24;
- }
- else
- {
- gTasks[taskId].data[0] = 48;
- }
+ if (i != r6 && gContestResources->field_4[i].effectStringId != CONTEST_STRING_NONE)
+ break;
+ }
+ if (i == 4)
+ {
+ sub_80DD45C(r6, gContestResources->field_4[r6].effectStringId2);
+ gContestResources->field_4[r6].effectStringId2 = CONTEST_STRING_NONE;
+ gTasks[taskId].data[0] = 24;
}
else
{
gTasks[taskId].data[0] = 48;
}
}
- return;
- case 24:
- if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 23;
- return;
- case 48:
- if (gContestResources->field_4[r6].turnOrderModAction == 1)
- {
- sub_80DD720(5);
- }
- else if (gContestResources->field_4[r6].turnOrderModAction == 2)
- {
- sub_80DD720(6);
- }
- else if (gContestResources->field_4[r6].turnOrderModAction == 3)
- {
- sub_80DD720(7);
- }
else
{
- gTasks[taskId].data[0] = 47;
- return;
+ gTasks[taskId].data[0] = 48;
}
- gTasks[taskId].data[0] = 49;
- return;
- case 49:
- if (!gContestResources->field_0->unk1920A_4)
- gTasks[taskId].data[0] = 47;
- return;
- case 47:
- sub_80DE008(TRUE);
- gTasks[taskId].data[0] = 12;
- return;
- case 12:
- sub_80DC028(0, gContestResources->field_4[r6].appeal2, r6);
- gTasks[taskId].data[0] = 13;
- return;
- case 13:
- if (!gContestResources->field_14[gContestResources->field_0->unk19215].unk2_2)
- gTasks[taskId].data[0] = 35;
- return;
- case 35:
- if (gContestResources->field_4[r6].conditionMod == 1)
- sub_80DD720(8);
- gTasks[taskId].data[0] = 36;
- return;
- case 36:
- if (!gContestResources->field_0->unk1920A_4)
- gTasks[taskId].data[0] = 37;
- return;
- case 37:
- if (sub_80DB5B8(r6, 1))
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 38;
- }
- else
- {
- gTasks[taskId].data[0] = 50;
- }
- return;
- case 38:
- if (++gTasks[taskId].data[10] > 20)
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 50;
- }
- return;
- case 50:
- if (sub_80DB798(r6))
- PlaySE(SE_C_PASI);
- gTasks[taskId].data[0] = 25;
- return;
- case 25:
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0] = 26;
+ }
+ return;
+ case 24:
+ if (!Contest_RunTextPrinters())
+ gTasks[taskId].data[0] = 23;
+ return;
+ case 48:
+ if (gContestResources->field_4[r6].turnOrderModAction == 1)
+ {
+ sub_80DD720(5);
+ }
+ else if (gContestResources->field_4[r6].turnOrderModAction == 2)
+ {
+ sub_80DD720(6);
+ }
+ else if (gContestResources->field_4[r6].turnOrderModAction == 3)
+ {
+ sub_80DD720(7);
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 47;
return;
- case 26:
+ }
+ gTasks[taskId].data[0] = 49;
+ return;
+ case 49:
+ if (!gContestResources->field_0->unk1920A_4)
+ gTasks[taskId].data[0] = 47;
+ return;
+ case 47:
+ sub_80DE008(TRUE);
+ gTasks[taskId].data[0] = 12;
+ return;
+ case 12:
+ sub_80DC028(0, gContestResources->field_4[r6].appeal2, r6);
+ gTasks[taskId].data[0] = 13;
+ return;
+ case 13:
+ if (!gContestResources->field_14[gContestResources->field_0->unk19215].unk2_2)
+ gTasks[taskId].data[0] = 35;
+ return;
+ case 35:
+ if (gContestResources->field_4[r6].conditionMod == 1)
+ sub_80DD720(8);
+ gTasks[taskId].data[0] = 36;
+ return;
+ case 36:
+ if (!gContestResources->field_0->unk1920A_4)
+ gTasks[taskId].data[0] = 37;
+ return;
+ case 37:
+ if (sub_80DB5B8(r6, 1))
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 38;
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 50;
+ }
+ return;
+ case 38:
+ if (++gTasks[taskId].data[10] > 20)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 50;
+ }
+ return;
+ case 50:
+ if (sub_80DB798(r6))
+ PlaySE(SE_C_PASI);
+ gTasks[taskId].data[0] = 25;
+ return;
+ case 25:
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0] = 26;
+ return;
+ case 26:
{
s32 r2 = 0;
@@ -1226,435 +1278,435 @@ void sub_80D8B38(u8 taskId)
sub_80DB884();
}
}
- return;
- case 27:
- if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 28;
- return;
- case 28:
- for (i = 0; gTasks[taskId].data[1] != gUnknown_02039F26[i]; i++)
- ;
- sub_80DC028(gContestResources->field_4[i].appeal2 + gContestResources->field_4[i].jam, -gContestResources->field_4[i].jam, i);
- gTasks[taskId].data[0] = 29;
- return;
- case 29:
- for (i = 0; gTasks[taskId].data[1] != gUnknown_02039F26[i]; i++)
- ;
- if (!gContestResources->field_14[i].unk2_2)
- gTasks[taskId].data[0] = 39;
- return;
- case 39:
- for (i = 0; gTasks[taskId].data[1] != gUnknown_02039F26[i]; i++)
- ;
- if (sub_80DB5B8(i, 1))
+ return;
+ case 27:
+ if (!Contest_RunTextPrinters())
+ gTasks[taskId].data[0] = 28;
+ return;
+ case 28:
+ for (i = 0; gTasks[taskId].data[1] != gUnknown_02039F26[i]; i++)
+ ;
+ sub_80DC028(gContestResources->field_4[i].appeal2 + gContestResources->field_4[i].jam, -gContestResources->field_4[i].jam, i);
+ gTasks[taskId].data[0] = 29;
+ return;
+ case 29:
+ for (i = 0; gTasks[taskId].data[1] != gUnknown_02039F26[i]; i++)
+ ;
+ if (!gContestResources->field_14[i].unk2_2)
+ gTasks[taskId].data[0] = 39;
+ return;
+ case 39:
+ for (i = 0; gTasks[taskId].data[1] != gUnknown_02039F26[i]; i++)
+ ;
+ if (sub_80DB5B8(i, 1))
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 40;
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 30;
+ }
+ return;
+ case 40:
+ if (++gTasks[taskId].data[10] > 20)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 30;
+ }
+ return;
+ case 30:
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_02039F26[i] == gTasks[taskId].data[1])
+ break;
+ }
+ if (sub_80DB798(i))
+ PlaySE(SE_C_PASI);
+ else
+ PlaySE(SE_C_SYU);
+ if (gContestResources->field_4[i].judgesAttentionWasRemoved)
+ {
+ sub_80DC674(i);
+ gContestResources->field_4[i].judgesAttentionWasRemoved = 0;
+ }
+ gTasks[taskId].data[1]++;
+ gTasks[taskId].data[0] = 26;
+ return;
+ case 51:
+ if (gTasks[taskId].data[10]++ > 9)
+ {
+ gTasks[taskId].data[10] = 0;
+ if (gContestResources->field_4[r6].numTurnsSkipped != 0
+ || gContestResources->field_4[r6].turnSkipped)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 40;
+ sub_80DB89C();
+ StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringExpandPlaceholders(gStringVar4, gText_0827E793);
+ Contest_StartTextPrinter(gStringVar4, 1);
}
+ gTasks[taskId].data[0] = 52;
+ }
+ return;
+ case 52:
+ if (!Contest_RunTextPrinters())
+ {
+ if (!gContestResources->field_4[r6].unk15_6)
+ gTasks[taskId].data[0] = 17;
else
+ gTasks[taskId].data[0] = 14;
+ }
+ return;
+ case 14:
+ r3 = gContestResources->field_4[r6].unk16;
+ if (gContestResources->field_4[r6].unk16 != 0)
+ {
+ sub_80DB89C();
+ if (r3 == 1)
+ Contest_StartTextPrinter(gText_0827E32E, 1);
+ else if (r3 == 2)
+ Contest_StartTextPrinter(gText_0827E35B, 1);
+ else
+ Contest_StartTextPrinter(gText_0827E38D, 1);
+ sub_80DD720(3);
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 45;
+ }
+ else
+ {
+ sub_80DB89C();
+ StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringExpandPlaceholders(gStringVar4, gText_0827E2FE);
+ Contest_StartTextPrinter(gStringVar4, 1);
+ sub_80DD720(2);
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 45;
+ }
+ return;
+ case 45:
+ if (!gContestResources->field_0->unk1920A_4)
+ {
+ sub_80DC9B4(gContestResources->field_0->unk19215);
+ gTasks[taskId].data[0] = 15;
+ }
+ return;
+ case 15:
+ if (!Contest_RunTextPrinters())
+ {
+ if (++gTasks[taskId].data[10] > 50)
{
- gTasks[taskId].data[0] = 30;
- }
- return;
- case 40:
- if (++gTasks[taskId].data[10] > 20)
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 30;
+ if (!gContestResources->field_4[r6].hasJudgesAttention)
+ {
+ sub_80DC028(
+ gContestResources->field_4[r6].appeal2,
+ gContestResources->field_4[r6].unk17,
+ r6);
+ gContestResources->field_4[r6].appeal2 += gContestResources->field_4[r6].unk17;
+ }
+ gTasks[taskId].data[0] = 16;
}
- return;
- case 30:
- for (i = 0; i < 4; i++)
+ }
+ return;
+ case 16:
+ if (!gContestResources->field_14[r6].unk2_2)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 17;
+ }
+ return;
+ case 17:
+ if (gContestResources->field_4[r6].disappointedRepeat)
+ {
+ sub_80DB89C();
+ StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringExpandPlaceholders(gStringVar4, gText_0827E6E3);
+ Contest_StartTextPrinter(gStringVar4, 1);
+ gTasks[taskId].data[10] = 0;
+ sub_80DD720(0);
+ gTasks[taskId].data[0] = 46;
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 41;
+ }
+ return;
+ case 46:
+ if (!gContestResources->field_0->unk1920A_4)
+ gTasks[taskId].data[0] = 19;
+ return;
+ case 19:
+ if (!Contest_RunTextPrinters())
+ {
+ sub_80DC028(gContestResources->field_4[r6].appeal2, -gContestResources->field_4[r6].unk18, r6);
+ gContestResources->field_4[r6].appeal2 -= gContestResources->field_4[r6].unk18;
+ gTasks[taskId].data[0] = 18;
+ }
+ return;
+ case 18:
+ sub_80DCD48();
+ if (!gContestResources->field_14[r6].unk2_2)
+ {
+ gTasks[taskId].data[10] = 0;
+ sub_80DB89C();
+ gTasks[taskId].data[0] = 41;
+ }
+ return;
+ case 41:
+ if (gContestResources->field_10->excitementFrozen && r6 != gContestResources->field_10->excitementFreezer)
+ {
+ gTasks[taskId].data[0] = 57;
+ }
+ else
+ {
+ r3 = gContestResources->field_10->bits_0;
+ if (gContestResources->field_4[r6].overrideCategoryExcitementMod)
{
- if (gUnknown_02039F26[i] == gTasks[taskId].data[1])
- break;
+ r3 = 1;
+ StringCopy(gStringVar3, gMoveNames[gContestResources->field_4[r6].currMove]);
}
- if (sub_80DB798(i))
- PlaySE(SE_C_PASI);
else
- PlaySE(SE_C_SYU);
- if (gContestResources->field_4[i].judgesAttentionWasRemoved)
{
- sub_80DC674(i);
- gContestResources->field_4[i].judgesAttentionWasRemoved = 0;
+ StringCopy(gStringVar3, gUnknown_08587F08[gContestMoves[gContestResources->field_4[r6].currMove].contestCategory]);
}
- gTasks[taskId].data[1]++;
- gTasks[taskId].data[0] = 26;
- return;
- case 51:
- if (gTasks[taskId].data[10]++ > 9)
- {
- gTasks[taskId].data[10] = 0;
- if (gContestResources->field_4[r6].numTurnsSkipped != 0
- || gContestResources->field_4[r6].turnSkipped)
- {
- sub_80DB89C();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringExpandPlaceholders(gStringVar4, gText_0827E793);
- Contest_StartTextPrinter(gStringVar4, 1);
- }
- gTasks[taskId].data[0] = 52;
- }
- return;
- case 52:
- if (!Contest_RunTextPrinters())
+ if (r3 > 0)
{
- if (!gContestResources->field_4[r6].unk15_6)
- gTasks[taskId].data[0] = 17;
- else
- gTasks[taskId].data[0] = 14;
+ if (gContestResources->field_4[r6].disappointedRepeat)
+ r3 = 0;
}
- return;
- case 14:
- r3 = gContestResources->field_4[r6].unk16;
- if (gContestResources->field_4[r6].unk16 != 0)
+ sub_80DB89C();
+ StringCopy(gStringVar1, gContestMons[r6].nickname);
+ gContestResources->field_0->applauseLevel += r3;
+ if (gContestResources->field_0->applauseLevel < 0)
+ gContestResources->field_0->applauseLevel = 0;
+ if (r3 == 0)
{
- sub_80DB89C();
- if (r3 == 1)
- Contest_StartTextPrinter(gText_0827E32E, 1);
- else if (r3 == 2)
- Contest_StartTextPrinter(gText_0827E35B, 1);
- else
- Contest_StartTextPrinter(gText_0827E38D, 1);
- sub_80DD720(3);
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 45;
+ gTasks[taskId].data[0] = 55;
}
else
{
- sub_80DB89C();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringExpandPlaceholders(gStringVar4, gText_0827E2FE);
+ if (r3 < 0)
+ StringExpandPlaceholders(gStringVar4, gText_0827E73C);
+ else if (r3 > 0 && gContestResources->field_0->applauseLevel <= 4)
+ StringExpandPlaceholders(gStringVar4, gText_0827E717);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_0827E76A);
Contest_StartTextPrinter(gStringVar4, 1);
- sub_80DD720(2);
gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 45;
+ gTasks[taskId].data[11] = 0;
+ if (r3 < 0)
+ gTasks[taskId].data[0] = 53;
+ else
+ gTasks[taskId].data[0] = 54;
}
- return;
- case 45:
- if (!gContestResources->field_0->unk1920A_4)
+ }
+ return;
+ case 53:
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ sub_80DDED0(-1, 1);
+ PlayFanfare(MUS_ME_ZANNEN);
+ gTasks[taskId].data[10]++;
+ break;
+ case 1:
+ if (!gContestResources->field_0->unk1920B_0 && !Contest_RunTextPrinters())
{
- sub_80DC9B4(gContestResources->field_0->unk19215);
- gTasks[taskId].data[0] = 15;
+ sub_80DDCDC(-1);
+ gTasks[taskId].data[10]++;
}
- return;
- case 15:
- if (!Contest_RunTextPrinters())
+ break;
+ case 2:
+ if (!gContestResources->field_0->unk1920A_5)
{
- if (++gTasks[taskId].data[10] > 50)
+ if (gTasks[taskId].data[11]++ > 29)
{
- if (!gContestResources->field_4[r6].hasJudgesAttention)
- {
- sub_80DC028(
- gContestResources->field_4[r6].appeal2,
- gContestResources->field_4[r6].unk17,
- r6);
- gContestResources->field_4[r6].appeal2 += gContestResources->field_4[r6].unk17;
- }
- gTasks[taskId].data[0] = 16;
+ gTasks[taskId].data[11] = 0;
+ sub_80DDED0(-1, -1);
+ gTasks[taskId].data[10]++;
}
}
- return;
- case 16:
- if (!gContestResources->field_14[r6].unk2_2)
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 17;
- }
- return;
- case 17:
- if (gContestResources->field_4[r6].disappointedRepeat)
+ break;
+ case 3:
+ if (!gPaletteFade.active)
{
- sub_80DB89C();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringExpandPlaceholders(gStringVar4, gText_0827E6E3);
- Contest_StartTextPrinter(gStringVar4, 1);
gTasks[taskId].data[10] = 0;
- sub_80DD720(0);
- gTasks[taskId].data[0] = 46;
- }
- else
- {
- gTasks[taskId].data[0] = 41;
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].data[0] = 43;
}
- return;
- case 46:
- if (!gContestResources->field_0->unk1920A_4)
- gTasks[taskId].data[0] = 19;
- return;
- case 19:
+ break;
+ }
+ return;
+ case 54:
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
if (!Contest_RunTextPrinters())
{
- sub_80DC028(gContestResources->field_4[r6].appeal2, -gContestResources->field_4[r6].unk18, r6);
- gContestResources->field_4[r6].appeal2 -= gContestResources->field_4[r6].unk18;
- gTasks[taskId].data[0] = 18;
+ sub_80DDED0(1, 1);
+ gTasks[taskId].data[10]++;
}
- return;
- case 18:
- sub_80DCD48();
- if (!gContestResources->field_14[r6].unk2_2)
- {
- gTasks[taskId].data[10] = 0;
- sub_80DB89C();
- gTasks[taskId].data[0] = 41;
- }
- return;
- case 41:
- if (gContestResources->field_10->excitementFrozen && r6 != gContestResources->field_10->excitementFreezer)
+ break;
+ case 1:
+ if (!gContestResources->field_0->unk1920B_0)
{
- gTasks[taskId].data[0] = 57;
+ sub_80DDE0C();
+ PlaySE(SE_W227B);
+ sub_80DDCDC(1);
+ gTasks[taskId].data[10]++;
}
- else
+ break;
+ case 2:
+ if (!gContestResources->field_0->unk1920A_5)
{
- r3 = gContestResources->field_10->bits_0;
- if (gContestResources->field_4[r6].overrideCategoryExcitementMod)
- {
- r3 = 1;
- StringCopy(gStringVar3, gMoveNames[gContestResources->field_4[r6].currMove]);
- }
- else
- {
- StringCopy(gStringVar3, gUnknown_08587F08[gContestMoves[gContestResources->field_4[r6].currMove].contestCategory]);
- }
- if (r3 > 0)
- {
- if (gContestResources->field_4[r6].disappointedRepeat)
- r3 = 0;
- }
- sub_80DB89C();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- gContestResources->field_0->applauseLevel += r3;
- if (gContestResources->field_0->applauseLevel < 0)
- gContestResources->field_0->applauseLevel = 0;
- if (r3 == 0)
- {
- gTasks[taskId].data[0] = 55;
- }
- else
+ if (gTasks[taskId].data[11]++ > 29)
{
- if (r3 < 0)
- StringExpandPlaceholders(gStringVar4, gText_0827E73C);
- else if (r3 > 0 && gContestResources->field_0->applauseLevel <= 4)
- StringExpandPlaceholders(gStringVar4, gText_0827E717);
- else
- StringExpandPlaceholders(gStringVar4, gText_0827E76A);
- Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = 0;
- if (r3 < 0)
- gTasks[taskId].data[0] = 53;
- else
- gTasks[taskId].data[0] = 54;
- }
- }
- return;
- case 53:
- switch (gTasks[taskId].data[10])
- {
- case 0:
- sub_80DDED0(-1, 1);
- PlayFanfare(MUS_ME_ZANNEN);
+ sub_80DC028(gContestResources->field_4[r6].appeal2, gContestResources->field_10->unk2, r6);
+ gContestResources->field_4[r6].appeal2 += gContestResources->field_10->unk2;
gTasks[taskId].data[10]++;
- break;
- case 1:
- if (!gContestResources->field_0->unk1920B_0 && !Contest_RunTextPrinters())
- {
- sub_80DDCDC(-1);
- gTasks[taskId].data[10]++;
- }
- break;
- case 2:
- if (!gContestResources->field_0->unk1920A_5)
- {
- if (gTasks[taskId].data[11]++ > 29)
- {
- gTasks[taskId].data[11] = 0;
- sub_80DDED0(-1, -1);
- gTasks[taskId].data[10]++;
- }
- }
- break;
- case 3:
- if (!gPaletteFade.active)
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[0] = 43;
- }
- break;
- }
- return;
- case 54:
- switch (gTasks[taskId].data[10])
- {
- case 0:
- if (!Contest_RunTextPrinters())
- {
- sub_80DDED0(1, 1);
- gTasks[taskId].data[10]++;
- }
- break;
- case 1:
- if (!gContestResources->field_0->unk1920B_0)
- {
- sub_80DDE0C();
- PlaySE(SE_W227B);
- sub_80DDCDC(1);
- gTasks[taskId].data[10]++;
- }
- break;
- case 2:
- if (!gContestResources->field_0->unk1920A_5)
- {
- if (gTasks[taskId].data[11]++ > 29)
- {
- gTasks[taskId].data[11] = 0;
- sub_80DC028(gContestResources->field_4[r6].appeal2, gContestResources->field_10->unk2, r6);
- gContestResources->field_4[r6].appeal2 += gContestResources->field_10->unk2;
- gTasks[taskId].data[10]++;
- }
- }
- break;
- case 3:
- if (!gContestResources->field_14[r6].unk2_2)
- {
- if (!gContestResources->field_0->unk1920A_7)
- {
- sub_80DDED0(1, -1);
- gTasks[taskId].data[10]++;
- }
- }
- break;
- case 4:
- if (!gPaletteFade.active)
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[11] = 0;
- gTasks[taskId].data[0] = 43;
- }
- break;
+ }
}
- return;
- case 43:
+ break;
+ case 3:
if (!gContestResources->field_14[r6].unk2_2)
{
- sub_80DB89C();
- gTasks[taskId].data[0] = 55;
- }
- return;
- case 57:
- sub_80DB89C();
- StringCopy(gStringVar3, gContestMons[gContestResources->field_10->excitementFreezer].nickname);
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringCopy(gStringVar2, gMoveNames[gContestResources->field_4[r6].currMove]);
- StringExpandPlaceholders(gStringVar4, gText_0827E7EA);
- Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[0] = 58;
- return;
- case 58:
- if (!Contest_RunTextPrinters())
- {
- sub_80DB89C();
- StringExpandPlaceholders(gStringVar4, gText_0827E817);
- Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[0] = 59;
- }
- return;
- case 59:
- if (!Contest_RunTextPrinters())
- {
- sub_80DB89C();
- gTasks[taskId].data[0] = 55;
- }
- return;
- case 33:
- if (gContestResources->field_4[r6].hasJudgesAttention)
- gContestResources->field_4[r6].hasJudgesAttention = 0;
- sub_80DC9B4(r6);
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringCopy(gStringVar2, gMoveNames[gContestResources->field_4[r6].currMove]);
- StringExpandPlaceholders(gStringVar4, gText_0827E58A);
- Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[0] = 34;
- return;
- case 34:
- if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 55;
- return;
- case 55:
- sub_80DDBE8();
- gTasks[taskId].data[0] = 56;
- return;
- case 56:
- if (!gContestResources->field_0->unk1920A_6)
- {
- if (gContestResources->field_0->applauseLevel > 4)
+ if (!gContestResources->field_0->unk1920A_7)
{
- gContestResources->field_0->applauseLevel = 0;
- sub_80DD940();
+ sub_80DDED0(1, -1);
+ gTasks[taskId].data[10]++;
}
- gTasks[taskId].data[0] = 10;
}
- return;
- case 10:
- spriteId = gTasks[taskId].data[2];
- gSprites[spriteId].callback = sub_80DA164;
- gTasks[taskId].data[0] = 11;
- return;
- case 11:
- spriteId = gTasks[taskId].data[2];
- if (gSprites[spriteId].invisible)
+ break;
+ case 4:
+ if (!gPaletteFade.active)
{
- FreeSpriteOamMatrix(&gSprites[spriteId]);
- DestroySprite(&gSprites[spriteId]);
- gTasks[taskId].data[0] = 20;
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].data[0] = 43;
}
- return;
- case 20:
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 21;
- return;
- case 31:
+ break;
+ }
+ return;
+ case 43:
+ if (!gContestResources->field_14[r6].unk2_2)
+ {
sub_80DB89C();
- StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringExpandPlaceholders(gStringVar4, gText_0827D56F);
+ gTasks[taskId].data[0] = 55;
+ }
+ return;
+ case 57:
+ sub_80DB89C();
+ StringCopy(gStringVar3, gContestMons[gContestResources->field_10->excitementFreezer].nickname);
+ StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar2, gMoveNames[gContestResources->field_4[r6].currMove]);
+ StringExpandPlaceholders(gStringVar4, gText_0827E7EA);
+ Contest_StartTextPrinter(gStringVar4, 1);
+ gTasks[taskId].data[0] = 58;
+ return;
+ case 58:
+ if (!Contest_RunTextPrinters())
+ {
+ sub_80DB89C();
+ StringExpandPlaceholders(gStringVar4, gText_0827E817);
Contest_StartTextPrinter(gStringVar4, 1);
- gTasks[taskId].data[0] = 32;
- return;
- case 32:
- if (!Contest_RunTextPrinters())
- gTasks[taskId].data[0] = 21;
- return;
- case 21:
- if (++gTasks[taskId].data[10] > 29)
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[0] = 22;
- }
- return;
- case 22:
- if (++gContestResources->field_0->unk19214 == 4)
- {
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].func = sub_80DA198;
- }
- else
+ gTasks[taskId].data[0] = 59;
+ }
+ return;
+ case 59:
+ if (!Contest_RunTextPrinters())
+ {
+ sub_80DB89C();
+ gTasks[taskId].data[0] = 55;
+ }
+ return;
+ case 33:
+ if (gContestResources->field_4[r6].hasJudgesAttention)
+ gContestResources->field_4[r6].hasJudgesAttention = 0;
+ sub_80DC9B4(r6);
+ StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringCopy(gStringVar2, gMoveNames[gContestResources->field_4[r6].currMove]);
+ StringExpandPlaceholders(gStringVar4, gText_0827E58A);
+ Contest_StartTextPrinter(gStringVar4, 1);
+ gTasks[taskId].data[0] = 34;
+ return;
+ case 34:
+ if (!Contest_RunTextPrinters())
+ gTasks[taskId].data[0] = 55;
+ return;
+ case 55:
+ sub_80DDBE8();
+ gTasks[taskId].data[0] = 56;
+ return;
+ case 56:
+ if (!gContestResources->field_0->unk1920A_6)
+ {
+ if (gContestResources->field_0->applauseLevel > 4)
{
- gTasks[taskId].data[0] = 0;
+ gContestResources->field_0->applauseLevel = 0;
+ sub_80DD940();
}
- return;
+ gTasks[taskId].data[0] = 10;
+ }
+ return;
+ case 10:
+ spriteId = gTasks[taskId].data[2];
+ gSprites[spriteId].callback = sub_80DA164;
+ gTasks[taskId].data[0] = 11;
+ return;
+ case 11:
+ spriteId = gTasks[taskId].data[2];
+ if (gSprites[spriteId].invisible)
+ {
+ FreeSpriteOamMatrix(&gSprites[spriteId]);
+ DestroySprite(&gSprites[spriteId]);
+ gTasks[taskId].data[0] = 20;
+ }
+ return;
+ case 20:
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 21;
+ return;
+ case 31:
+ sub_80DB89C();
+ StringCopy(gStringVar1, gContestMons[r6].nickname);
+ StringExpandPlaceholders(gStringVar4, gText_0827D56F);
+ Contest_StartTextPrinter(gStringVar4, 1);
+ gTasks[taskId].data[0] = 32;
+ return;
+ case 32:
+ if (!Contest_RunTextPrinters())
+ gTasks[taskId].data[0] = 21;
+ return;
+ case 21:
+ if (++gTasks[taskId].data[10] > 29)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 22;
+ }
+ return;
+ case 22:
+ if (++gContestResources->field_0->unk19214 == 4)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80DA198;
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 0;
+ }
+ return;
}
}
-void sub_80DA110(u8 taskId)
+static void sub_80DA110(u8 taskId)
{
sContest.unk1920B_2 = 0;
DestroyTask(taskId);
}
-void sub_80DA134(struct Sprite *sprite)
+static void sub_80DA134(struct Sprite *sprite)
{
if (sprite->pos2.x != 0)
{
@@ -1670,7 +1722,7 @@ void sub_80DA134(struct Sprite *sprite)
}
}
-void sub_80DA164(struct Sprite *sprite)
+static void sub_80DA164(struct Sprite *sprite)
{
sprite->pos2.x -= 6;
if (sprite->pos1.x + sprite->pos2.x < -32)
@@ -1680,7 +1732,7 @@ void sub_80DA164(struct Sprite *sprite)
}
}
-void sub_80DA198(u8 taskId)
+static void sub_80DA198(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -1718,7 +1770,7 @@ void sub_80DA198(u8 taskId)
}
}
-void sub_80DA25C(u8 taskId)
+static void sub_80DA25C(u8 taskId)
{
sub_80DE008(FALSE);
gTasks[taskId].data[0] = 0;
@@ -1726,7 +1778,7 @@ void sub_80DA25C(u8 taskId)
gTasks[taskId].func = sub_80DA28C;
}
-void sub_80DA28C(u8 taskId)
+static void sub_80DA28C(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -1757,13 +1809,13 @@ void sub_80DA28C(u8 taskId)
}
}
-void sub_80DA31C(u8 taskId)
+static void sub_80DA31C(u8 taskId)
{
if (sub_80DC3C4())
gTasks[taskId].func = sub_80DA348;
}
-void sub_80DA348(u8 taskId)
+static void sub_80DA348(u8 taskId)
{
DmaCopy32Defvars(3, shared18000.unk18204, gPlttBufferUnfaded, 0x400);
gTasks[taskId].data[0] = 0;
@@ -1771,7 +1823,7 @@ void sub_80DA348(u8 taskId)
gTasks[taskId].func = sub_80DA38C;
}
-void sub_80DA38C(u8 taskId)
+static void sub_80DA38C(u8 taskId)
{
if (++gTasks[taskId].data[0] > 2)
{
@@ -1781,7 +1833,7 @@ void sub_80DA38C(u8 taskId)
}
}
-void sub_80DA3CC(u8 taskId)
+static void sub_80DA3CC(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
@@ -1804,7 +1856,7 @@ void sub_80DA3CC(u8 taskId)
}
}
-void sub_80DA464(u8 taskId)
+static void sub_80DA464(u8 taskId)
{
if (gTasks[taskId].data[0]++ > 29)
{
@@ -1814,7 +1866,7 @@ void sub_80DA464(u8 taskId)
}
}
-void sub_80DA49C(u8 taskId)
+static void sub_80DA49C(u8 taskId)
{
if (sub_80DC3C4())
{
@@ -1823,19 +1875,19 @@ void sub_80DA49C(u8 taskId)
}
}
-void sub_80DA4CC(u8 taskId)
+static void sub_80DA4CC(u8 taskId)
{
sub_80DE224();
gTasks[taskId].func = sub_80DE424;
}
-void sub_80DA4F4(u8 taskId)
+static void sub_80DA4F4(u8 taskId)
{
sub_80DE350();
gTasks[taskId].func = sub_80DA51C;
}
-void sub_80DA51C(u8 taskId)
+static void sub_80DA51C(u8 taskId)
{
vu16 sp0 = GetGpuReg(REG_OFFSET_BG0CNT);
vu16 sp2 = GetGpuReg(REG_OFFSET_BG2CNT);
@@ -1855,13 +1907,13 @@ void sub_80DA51C(u8 taskId)
}
}
-void sub_80DA5B4(u8 taskId)
+static void sub_80DA5B4(u8 taskId)
{
if (!sContest.unk1920A_6)
gTasks[taskId].func = sub_80D833C;
}
-void sub_80DA5E8(u8 taskId)
+static void sub_80DA5E8(u8 taskId)
{
s32 i;
@@ -1886,7 +1938,7 @@ void sub_80DA5E8(u8 taskId)
gTasks[taskId].func = sub_80DA6B4;
}
-void sub_80DA6B4(u8 taskId)
+static void sub_80DA6B4(u8 taskId)
{
if (!Contest_RunTextPrinters())
{
@@ -1899,7 +1951,7 @@ void sub_80DA6B4(u8 taskId)
}
}
-void sub_80DA700(u8 taskId)
+static void sub_80DA700(u8 taskId)
{
gBattle_BG1_Y -= 7;
if ((s16)gBattle_BG1_Y < 0)
@@ -1911,7 +1963,7 @@ void sub_80DA700(u8 taskId)
}
}
-void sub_80DA740(u8 taskId)
+static void sub_80DA740(u8 taskId)
{
if (gTasks[taskId].data[0]++ >= 50)
{
@@ -1928,7 +1980,7 @@ void sub_80DA740(u8 taskId)
}
}
-void sub_80DA7A0(u8 taskId)
+static void sub_80DA7A0(u8 taskId)
{
u8 taskId2 = CreateTask(sub_80FCACC, 0);
@@ -1938,14 +1990,14 @@ void sub_80DA7A0(u8 taskId)
sub_80DC490(FALSE);
}
-void sub_80DA7EC(u8 taskId)
+static void sub_80DA7EC(u8 taskId)
{
DestroyTask(taskId);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
gTasks[sContest.mainTaskId].func = sub_80DA830;
}
-void sub_80DA830(u8 taskId)
+static void sub_80DA830(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -1958,26 +2010,25 @@ void sub_80DA830(u8 taskId)
}
}
-void sub_80DA874(void)
+static void sub_80DA874(void)
{
ScriptContext2_Disable();
EnableBothScriptContexts();
}
-void sub_80DA884(void)
+static void sub_80DA884(void)
{
if (!(gIsLinkContest & 1))
gContestPlayerMonIndex = 3;
}
-bool8 sub_80DA8A4(void)
+static bool8 sub_80DA8A4(void)
{
if (gContestPlayerMonIndex == gUnknown_02039F2B)
return TRUE;
return FALSE;
}
-
void sub_80DA8C8(u8 partyIndex)
{
u8 name[20];
@@ -2113,48 +2164,41 @@ void sub_80DAB8C(u8 contestType, u8 rank)
sub_80DA8C8(gContestMonPartyIndex);
}
-#ifdef NONMATCHING
void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
{
- s32 i;
+ s32 i, j;
u8 opponentsCount = 0;
u8 opponents[100];
- const u8 * r6;
if (gNumLinkContestPlayers == 4)
return;
- r6 = gUnknown_085898A4;
for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++)
{
if (rank != gContestOpponents[i].whichRank)
continue;
+
if (isPostgame == TRUE)
{
- if (r6[i] == 1)
+ if (gUnknown_085898A4[i] == 1)
continue;
}
else
{
- if (r6[i] == 2)
+ if (gUnknown_085898A4[i] == 2)
continue;
}
- if (contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool)
- opponents[opponentsCount++] = i;
- else if (contestType == CONTEST_CATEGORY_BEAUTY && gContestOpponents[i].aiPool_Beauty)
- opponents[opponentsCount++] = i;
- else if (contestType == CONTEST_CATEGORY_CUTE && gContestOpponents[i].aiPool_Cute)
- opponents[opponentsCount++] = i;
- else if (contestType == CONTEST_CATEGORY_SMART && gContestOpponents[i].aiPool_Smart)
- opponents[opponentsCount++] = i;
- else if (contestType == CONTEST_CATEGORY_TOUGH && gContestOpponents[i].aiPool_Tough)
+ if ((contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool)
+ || (contestType == CONTEST_CATEGORY_BEAUTY && gContestOpponents[i].aiPool_Beauty)
+ || (contestType == CONTEST_CATEGORY_CUTE && gContestOpponents[i].aiPool_Cute)
+ || (contestType == CONTEST_CATEGORY_SMART && gContestOpponents[i].aiPool_Smart)
+ || (contestType == CONTEST_CATEGORY_TOUGH && gContestOpponents[i].aiPool_Tough))
opponents[opponentsCount++] = i;
}
opponents[opponentsCount] = 0xFF;
for (i = 0; i < 4 - gNumLinkContestPlayers; i++)
{
u16 rnd = sub_80F903C() % opponentsCount;
- s32 j;
gContestMons[gNumLinkContestPlayers + i] = gContestOpponents[opponents[rnd]];
sub_80DF9D4(gContestMons[gNumLinkContestPlayers + i].trainerName);
@@ -2164,180 +2208,6 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
opponentsCount--;
}
}
-#else
-NAKED void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r9\n"
- "\tmov r6, r8\n"
- "\tpush {r6,r7}\n"
- "\tsub sp, 0x64\n"
- "\tmov r8, r2\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tlsls r1, 24\n"
- "\tlsrs r2, r1, 24\n"
- "\tmovs r7, 0\n"
- "\tldr r0, =gNumLinkContestPlayers\n"
- "\tldrb r1, [r0]\n"
- "\tmov r9, r0\n"
- "\tcmp r1, 0x4\n"
- "\tbne _080DACDE\n"
- "\tb _080DADF6\n"
- "_080DACDE:\n"
- "\tmovs r5, 0\n"
- "\tldr r3, =gContestOpponents\n"
- "\tldr r6, =gUnknown_085898A4\n"
- "_080DACE4:\n"
- "\tldrb r0, [r3, 0x1C]\n"
- "\tlsls r0, 30\n"
- "\tlsrs r0, 30\n"
- "\tcmp r2, r0\n"
- "\tbne _080DAD56\n"
- "\tmov r0, r8\n"
- "\tcmp r0, 0x1\n"
- "\tbne _080DAD08\n"
- "\tldrb r0, [r6]\n"
- "\tcmp r0, 0x1\n"
- "\tbeq _080DAD56\n"
- "\tb _080DAD0E\n"
- "\t.pool\n"
- "_080DAD08:\n"
- "\tldrb r0, [r6]\n"
- "\tcmp r0, 0x2\n"
- "\tbeq _080DAD56\n"
- "_080DAD0E:\n"
- "\tcmp r4, 0\n"
- "\tbne _080DAD1A\n"
- "\tldrb r0, [r3, 0x1C]\n"
- "\tlsls r0, 29\n"
- "\tcmp r0, 0\n"
- "\tblt _080DAD4A\n"
- "_080DAD1A:\n"
- "\tcmp r4, 0x1\n"
- "\tbne _080DAD26\n"
- "\tldrb r0, [r3, 0x1C]\n"
- "\tlsls r0, 28\n"
- "\tcmp r0, 0\n"
- "\tblt _080DAD4A\n"
- "_080DAD26:\n"
- "\tcmp r4, 0x2\n"
- "\tbne _080DAD32\n"
- "\tldrb r0, [r3, 0x1C]\n"
- "\tlsls r0, 27\n"
- "\tcmp r0, 0\n"
- "\tblt _080DAD4A\n"
- "_080DAD32:\n"
- "\tcmp r4, 0x3\n"
- "\tbne _080DAD3E\n"
- "\tldrb r0, [r3, 0x1C]\n"
- "\tlsls r0, 26\n"
- "\tcmp r0, 0\n"
- "\tblt _080DAD4A\n"
- "_080DAD3E:\n"
- "\tcmp r4, 0x4\n"
- "\tbne _080DAD56\n"
- "\tldrb r0, [r3, 0x1C]\n"
- "\tlsls r0, 25\n"
- "\tcmp r0, 0\n"
- "\tbge _080DAD56\n"
- "_080DAD4A:\n"
- "\tadds r0, r7, 0\n"
- "\tadds r1, r0, 0x1\n"
- "\tlsls r1, 24\n"
- "\tlsrs r7, r1, 24\n"
- "\tadd r0, sp\n"
- "\tstrb r5, [r0]\n"
- "_080DAD56:\n"
- "\tadds r3, 0x40\n"
- "\tadds r6, 0x1\n"
- "\tadds r5, 0x1\n"
- "\tcmp r5, 0x5F\n"
- "\tbls _080DACE4\n"
- "\tmov r3, sp\n"
- "\tadds r1, r3, r7\n"
- "\tmovs r0, 0xFF\n"
- "\tstrb r0, [r1]\n"
- "\tmovs r5, 0\n"
- "\tmov r0, r9\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x4\n"
- "\tsubs r0, r1\n"
- "\tcmp r5, r0\n"
- "\tbge _080DADF6\n"
- "\tldr r3, =gContestMons\n"
- "\tmov r8, r3\n"
- "\tmov r6, r9\n"
- "\tmovs r0, 0x2\n"
- "\tadd r0, r8\n"
- "\tmov r9, r0\n"
- "_080DAD82:\n"
- "\tbl sub_80F903C\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tadds r1, r7, 0\n"
- "\tbl __modsi3\n"
- "\tadds r1, r0, 0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r1, 16\n"
- "\tldrb r0, [r6]\n"
- "\tadds r0, r5\n"
- "\tlsls r0, 6\n"
- "\tadd r0, r8\n"
- "\tldr r2, =gContestOpponents\n"
- "\tmov r3, sp\n"
- "\tadds r4, r3, r1\n"
- "\tldrb r1, [r4]\n"
- "\tlsls r1, 6\n"
- "\tadds r1, r2\n"
- "\tmovs r2, 0x40\n"
- "\tbl memcpy\n"
- "\tldrb r0, [r6]\n"
- "\tadds r0, r5\n"
- "\tlsls r0, 6\n"
- "\tmov r1, r8\n"
- "\tadds r1, 0xD\n"
- "\tadds r0, r1\n"
- "\tbl sub_80DF9D4\n"
- "\tldrb r0, [r6]\n"
- "\tadds r0, r5\n"
- "\tlsls r0, 6\n"
- "\tadd r0, r9\n"
- "\tmovs r1, 0x2\n"
- "\tbl sub_80DF9E0\n"
- "\tldrb r0, [r4]\n"
- "\tadds r3, r5, 0x1\n"
- "\tsubs r1, r7, 0x1\n"
- "\tcmp r0, 0xFF\n"
- "\tbeq _080DADE6\n"
- "\tadds r2, r4, 0\n"
- "_080DADDA:\n"
- "\tldrb r0, [r2, 0x1]\n"
- "\tstrb r0, [r2]\n"
- "\tadds r2, 0x1\n"
- "\tldrb r0, [r2]\n"
- "\tcmp r0, 0xFF\n"
- "\tbne _080DADDA\n"
- "_080DADE6:\n"
- "\tlsls r0, r1, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tadds r5, r3, 0\n"
- "\tldrb r1, [r6]\n"
- "\tmovs r0, 0x4\n"
- "\tsubs r0, r1\n"
- "\tcmp r5, r0\n"
- "\tblt _080DAD82\n"
- "_080DADF6:\n"
- "\tadd sp, 0x64\n"
- "\tpop {r3,r4}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.pool");
-}
-#endif
// GetContestAvailability?
u8 sub_80DAE0C(struct Pokemon *pkmn)
@@ -2382,7 +2252,7 @@ u8 sub_80DAE0C(struct Pokemon *pkmn)
return retVal;
}
-void sub_80DAEA4(void)
+static void sub_80DAEA4(void)
{
s32 i;
@@ -2394,7 +2264,7 @@ void sub_80DAEA4(void)
}
}
-u8 * sub_80DAED4(const u8 * src, u8 color)
+static u8 *sub_80DAED4(const u8 *src, u8 color)
{
u8 * ptr = StringCopy(gDisplayedStringBattle, gText_ColorTransparent);
ptr[-1] = color;
@@ -2403,12 +2273,12 @@ u8 * sub_80DAED4(const u8 * src, u8 color)
return ptr;
}
-void sub_80DAF04(u8 a0)
+static void sub_80DAF04(u8 a0)
{
sub_80DAF1C(a0, a0 + 10);
}
-void sub_80DAF1C(u8 a0, u8 a1)
+static void sub_80DAF1C(u8 a0, u8 a1)
{
u8 buffer[32];
s32 offset;
@@ -2422,18 +2292,18 @@ void sub_80DAF1C(u8 a0, u8 a1)
Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[a0], gDisplayedStringBattle, offset, 1, 7);
}
-void sub_80DAF88(u8 a0)
+static void sub_80DAF88(u8 a0)
{
sub_80DAFA0(a0, a0 + 10);
}
-void sub_80DAFA0(u8 a0, u8 a1)
+static void sub_80DAFA0(u8 a0, u8 a1)
{
sub_80DAED4(gContestMons[a0].nickname, a1);
Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[a0], gDisplayedStringBattle, 5, 1, 7);
}
-u16 sub_80DAFE0(u8 who, u8 contestCategory)
+static u16 sub_80DAFE0(u8 who, u8 contestCategory)
{
u8 statMain;
u8 statSub1;
@@ -2441,32 +2311,32 @@ u16 sub_80DAFE0(u8 who, u8 contestCategory)
switch (contestCategory)
{
- case CONTEST_CATEGORY_COOL:
- statMain = gContestMons[who].cool;
- statSub1 = gContestMons[who].tough;
- statSub2 = gContestMons[who].beauty;
- break;
- case CONTEST_CATEGORY_BEAUTY:
- statMain = gContestMons[who].beauty;
- statSub1 = gContestMons[who].cool;
- statSub2 = gContestMons[who].cute;
- break;
- case CONTEST_CATEGORY_CUTE:
- statMain = gContestMons[who].cute;
- statSub1 = gContestMons[who].beauty;
- statSub2 = gContestMons[who].smart;
- break;
- case CONTEST_CATEGORY_SMART:
- statMain = gContestMons[who].smart;
- statSub1 = gContestMons[who].cute;
- statSub2 = gContestMons[who].tough;
- break;
- case CONTEST_CATEGORY_TOUGH:
- default:
- statMain = gContestMons[who].tough;
- statSub1 = gContestMons[who].smart;
- statSub2 = gContestMons[who].cool;
- break;
+ case CONTEST_CATEGORY_COOL:
+ statMain = gContestMons[who].cool;
+ statSub1 = gContestMons[who].tough;
+ statSub2 = gContestMons[who].beauty;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ statMain = gContestMons[who].beauty;
+ statSub1 = gContestMons[who].cool;
+ statSub2 = gContestMons[who].cute;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ statMain = gContestMons[who].cute;
+ statSub1 = gContestMons[who].beauty;
+ statSub2 = gContestMons[who].smart;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ statMain = gContestMons[who].smart;
+ statSub1 = gContestMons[who].cute;
+ statSub2 = gContestMons[who].tough;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ default:
+ statMain = gContestMons[who].tough;
+ statSub1 = gContestMons[who].smart;
+ statSub2 = gContestMons[who].cool;
+ break;
}
return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2;
}
@@ -2479,7 +2349,7 @@ void sub_80DB09C(u8 contestCategory)
gContestMonConditions[i] = sub_80DAFE0(i, contestCategory);
}
-u8 sub_80DB0C4(void)
+static u8 sub_80DB0C4(void)
{
u8 spriteId;
@@ -2491,7 +2361,7 @@ u8 sub_80DB0C4(void)
return spriteId;
}
-u8 sub_80DB120(void)
+static u8 sub_80DB120(void)
{
u8 spriteId;
@@ -2503,10 +2373,10 @@ u8 sub_80DB120(void)
return spriteId;
}
-u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index)
+static u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index)
{
u8 spriteId;
- species = sub_80DE84C(species);
+ species = SanitizeSpecies(species);
if (index == gContestPlayerMonIndex)
HandleLoadSpecialPokePic_2(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality);
@@ -2540,36 +2410,36 @@ bool8 IsSpeciesNotUnown(u16 species)
return TRUE;
}
-void sub_80DB2BC(void)
+static void sub_80DB2BC(void)
{
CpuCopy16(gContestResources->field_24[0], gContestResources->field_24[0] + 0x500, 0x280);
CpuCopy16(gContestResources->field_24[2], gContestResources->field_24[2] + 0x500, 0x280);
}
-u16 sub_80DB2EC(u16 a0, u8 a1)
+static u16 sub_80DB2EC(u16 a0, u8 a1)
{
u16 var;
switch (gContestEffects[gContestMoves[a0].effect].effectType)
{
- case 0:
- case 1:
- case 8:
- var = 0x9082;
- break;
- case 2:
- case 3:
- var = 0x9088;
- break;
- default:
- var = 0x9086;
- break;
+ case 0:
+ case 1:
+ case 8:
+ var = 0x9082;
+ break;
+ case 2:
+ case 3:
+ var = 0x9088;
+ break;
+ default:
+ var = 0x9086;
+ break;
}
var += 0x9000 + (a1 << 12);
return var;
}
-void prints_contest_move_description(u16 a)
+static void prints_contest_move_description(u16 a)
{
u8 category;
u16 categoryTile;
@@ -2613,7 +2483,7 @@ void prints_contest_move_description(u16 a)
Contest_PrintTextToBg0WindowStd(9, gText_Slash);
}
-void sub_80DB4E0(u16 move, u8 b)
+static void sub_80DB4E0(u16 move, u8 b)
{
u8 r7 = gUnknown_02039F26[b] * 5 + 2;
@@ -2630,7 +2500,7 @@ void sub_80DB4E0(u16 move, u8 b)
}
}
-void sub_80DB584(void)
+static void sub_80DB584(void)
{
s32 i;
@@ -2638,12 +2508,12 @@ void sub_80DB584(void)
sub_80DB4E0(gContestResources->field_4[i].currMove, i);
}
-u16 sub_80DB5B0(void)
+static u16 sub_80DB5B0(void)
{
return 0x2034;
}
-bool8 sub_80DB5B8(u8 contestantIdx, bool8 resetMod)
+static bool8 sub_80DB5B8(u8 contestantIdx, bool8 resetMod)
{
u8 r6;
s32 r4;
@@ -2673,7 +2543,7 @@ bool8 sub_80DB5B8(u8 contestantIdx, bool8 resetMod)
return TRUE;
}
-void sub_80DB69C(void)
+static void sub_80DB69C(void)
{
s32 i;
s32 r6;
@@ -2689,33 +2559,33 @@ void sub_80DB69C(void)
}
}
-u16 sub_80DB748(u8 status)
+static u16 sub_80DB748(u8 status)
{
u16 var = 0;
switch (status)
{
- case 0:
- var = 0x80;
- break;
- case 1:
- var = 0x84;
- break;
- case 2:
- var = 0x86;
- break;
- case 3:
- var = 0x88;
- break;
- case 4:
- var = 0x82;
- break;
+ case 0:
+ var = 0x80;
+ break;
+ case 1:
+ var = 0x84;
+ break;
+ case 2:
+ var = 0x86;
+ break;
+ case 3:
+ var = 0x88;
+ break;
+ case 4:
+ var = 0x82;
+ break;
}
var += 0x9000;
return var;
}
-bool8 sub_80DB798(u8 a)
+static bool8 sub_80DB798(u8 a)
{
bool8 r9 = TRUE;
u16 r8 = 0;
@@ -2740,3 +2610,2581 @@ bool8 sub_80DB798(u8 a)
}
return r9;
}
+
+static void sub_80DB884(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80DB798(i);
+}
+
+static void sub_80DB89C(void)
+{
+ FillWindowPixelBuffer(4, 0);
+ CopyWindowToVram(4, 2);
+ Contest_SetBgCopyFlags(0);
+}
+
+static u16 GetChosenMove(u8 a)
+{
+ if (Contest_IsMonsTurnDisabled(a))
+ return 0;
+ if (a == gContestPlayerMonIndex)
+ {
+ return gContestMons[a].moves[sContest.playerMoveChoice];
+ }
+ else
+ {
+ u8 moveChoice;
+
+ ContestAI_ResetAI(a);
+ moveChoice = ContestAI_GetActionToUse();
+ return gContestMons[a].moves[moveChoice];
+ }
+}
+
+static void sub_80DB918(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ sContestantStatus[i].currMove = GetChosenMove(i);
+}
+
+static void sub_80DB944(void)
+{
+ s32 i;
+ s32 j;
+ s16 arr[4];
+
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].unk4 += sContestantStatus[i].appeal2;
+ arr[i] = sContestantStatus[i].unk4;
+ }
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 3; j > i; j--)
+ {
+ if (arr[j - 1] < arr[j])
+ {
+ u16 temp = arr[j];
+
+ arr[j] = arr[j - 1];
+ arr[j - 1] = temp;
+ }
+ }
+ }
+ for (i = 0; i < 4; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (sContestantStatus[i].unk4 == arr[j])
+ {
+ sContestantStatus[i].unkB_0 = j;
+ break;
+ }
+ }
+ }
+ sub_80DCE58(1);
+ sub_80DD590();
+}
+
+static void sub_80DBA18(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 attentionLevel;
+
+ if (sContestantStatus[i].currMove == MOVE_NONE)
+ attentionLevel = 5;
+ else if (sContestantStatus[i].appeal2 <= 0)
+ attentionLevel = 0;
+ else if (sContestantStatus[i].appeal2 < 30)
+ attentionLevel = 1;
+ else if (sContestantStatus[i].appeal2 < 60)
+ attentionLevel = 2;
+ else if (sContestantStatus[i].appeal2 < 80)
+ attentionLevel = 3;
+ else
+ attentionLevel = 4;
+
+ sContestantStatus[i].attentionLevel = attentionLevel;
+ }
+}
+
+static bool8 sub_80DBA68(u8 a)
+{
+ if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void sub_80DBAA0(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].appeal2 = 0;
+ sContestantStatus[i].appeal1 = 0;
+ sContestantStatus[i].jamSafetyCount = 0;
+ if (sContestantStatus[i].numTurnsSkipped > 0)
+ sContestantStatus[i].numTurnsSkipped--;
+ sContestantStatus[i].jam = 0;
+ sContestantStatus[i].resistant = 0;
+ sContestantStatus[i].jamReduction = 0;
+ sContestantStatus[i].immune = 0;
+ sContestantStatus[i].moreEasilyStartled = 0;
+ sContestantStatus[i].usedRepeatableMove = 0;
+ sContestantStatus[i].nervous = 0;
+ sContestantStatus[i].effectStringId = CONTEST_STRING_NONE;
+ sContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE;
+ sContestantStatus[i].conditionMod = 0;
+ sContestantStatus[i].unk15_2 = sContestantStatus[i].disappointedRepeat;
+ sContestantStatus[i].disappointedRepeat = FALSE;
+ sContestantStatus[i].turnOrderModAction = 0;
+ sContestantStatus[i].appealTripleCondition = 0;
+ if (sContestantStatus[i].turnSkipped)
+ {
+ sContestantStatus[i].numTurnsSkipped = 1;
+ sContestantStatus[i].turnSkipped = 0;
+ }
+ if (sContestantStatus[i].exploded)
+ {
+ sContestantStatus[i].noMoreTurns = 1;
+ sContestantStatus[i].exploded = 0;
+ }
+ sContestantStatus[i].overrideCategoryExcitementMod = 0;
+ }
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].prevMove = sContestantStatus[i].currMove;
+ sContest.unk19220[sContest.turnNumber][i] = sContestantStatus[i].currMove;
+ sContest.unk19248[sContest.turnNumber][i] = Contest_GetMoveExcitement(sContestantStatus[i].currMove);
+ sContestantStatus[i].currMove = MOVE_NONE;
+ }
+ shared19328.excitementFrozen = 0;
+}
+
+bool8 Contest_IsMonsTurnDisabled(u8 a)
+{
+ if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void sub_80DBCE0(u8 a)
+{
+ gUnknown_02039F18[a] = sub_80DBD34(a);
+ gUnknown_02039F08[a] = gContestMonConditions[a] + gUnknown_02039F18[a];
+}
+
+static void sub_80DBD18(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80DBCE0(i);
+ DetermineFinalStandings();
+}
+
+static s16 sub_80DBD34(u8 a)
+{
+ return gUnknown_02039F10[a] * 2;
+}
+
+static void DetermineFinalStandings(void)
+{
+ u16 sp0[4] = {0};
+ struct UnknownContestStruct6 sp8[4];
+ s32 i;
+ s32 j;
+
+ for (i = 0; i < 4; i++)
+ {
+ s32 r2;
+
+ sp0[i] = Random();
+ for (r2 = 0; r2 < i; r2++)
+ {
+ if (sp0[i] == sp0[r2])
+ {
+ i--;
+ break;
+ }
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ sp8[i].unk0 = gUnknown_02039F08[i];
+ sp8[i].unk4 = gContestMonConditions[i];
+ sp8[i].unk8 = sp0[i];
+ sp8[i].unkC = i;
+ }
+
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 3; j > i; j--)
+ {
+ if (sub_80DBF30(j - 1, j, sp8))
+ {
+ struct UnknownContestStruct6 temp;
+
+ temp.unk0 = sp8[j - 1].unk0;
+ temp.unk4 = sp8[j - 1].unk4;
+ temp.unk8 = sp8[j - 1].unk8;
+ temp.unkC = sp8[j - 1].unkC;
+
+ sp8[j - 1].unk0 = sp8[j].unk0;
+ sp8[j - 1].unk4 = sp8[j].unk4;
+ sp8[j - 1].unk8 = sp8[j].unk8;
+ sp8[j - 1].unkC = sp8[j].unkC;
+
+ sp8[j].unk0 = temp.unk0;
+ sp8[j].unk4 = temp.unk4;
+ sp8[j].unk8 = temp.unk8;
+ sp8[j].unkC = temp.unkC;
+ }
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ gContestFinalStandings[sp8[i].unkC] = i;
+}
+
+void sub_80DBED4(void)
+{
+ if ((gIsLinkContest & 1))
+ {
+ gSaveBlock2Ptr->contestLinkResults[gSpecialVar_ContestCategory][gContestFinalStandings[gContestPlayerMonIndex]] =
+ ((gSaveBlock2Ptr->contestLinkResults[gSpecialVar_ContestCategory][gContestFinalStandings[gContestPlayerMonIndex]] + 1) > 9999) ? 9999 :
+ (gSaveBlock2Ptr->contestLinkResults[gSpecialVar_ContestCategory][gContestFinalStandings[gContestPlayerMonIndex]] + 1);
+
+ }
+}
+
+static bool8 sub_80DBF30(s32 a, s32 b, struct UnknownContestStruct6 *c)
+{
+ bool8 retVal;
+
+ if (c[a].unk0 < c[b].unk0)
+ retVal = TRUE;
+ else if (c[a].unk0 > c[b].unk0)
+ retVal = FALSE;
+ else if (c[a].unk4 < c[b].unk4)
+ retVal = TRUE;
+ else if (c[a].unk4 > c[b].unk4)
+ retVal = FALSE;
+ else if (c[a].unk8 < c[b].unk8)
+ retVal = TRUE;
+ else
+ retVal = FALSE;
+ return retVal;
+}
+
+static void sub_80DBF68(void)
+{
+ gBattle_BG0_Y = 0;
+ gBattle_BG2_Y = 0;
+ sub_80DB89C();
+ Contest_StartTextPrinter((u8*) &gUnknown_0827E8DA, 0);
+}
+
+static void sub_80DBF90(void)
+{
+ int i;
+
+ for(i = 0; i < 4; i++)
+ {
+ ContestBG_FillBoxWithTile(0, 0, 0x16, 2 + i * 5, 8, 2, 0x11);
+ }
+}
+
+static u16 sub_80DBFC8(u8 a)
+{
+ u16 var;
+
+ if (a == 0)
+ var = 0x5011;
+ else if (a == 1)
+ var = 0x6011;
+ else if (a == 2)
+ var = 0x7011;
+ else
+ var = 0x8011;
+ return var + 1;
+}
+
+static s8 sub_80DBFFC(s16 a)
+{
+ s8 retVal = a / 10;
+
+ if (retVal > 16)
+ retVal = 16;
+ else if (retVal < -16)
+ retVal = -16;
+ return retVal;
+}
+
+static u8 sub_80DC028(s16 a, s16 b, u8 c)
+{
+ u8 taskId;
+ s8 r4;
+ s8 r5;
+
+ gContestResources->field_14[c].unk2_2 = 1;
+ taskId = CreateTask(sub_80DC0F4, 20);
+ r4 = sub_80DBFFC(a);
+ r5 = sub_80DBFFC(a + b) - r4;
+ sub_80DBFC8(c); // unused return value
+ gTasks[taskId].data[0] = abs(r4);
+ gTasks[taskId].data[1] = r5;
+ if (r4 > 0 || (r4 == 0 && r5 > 0))
+ gTasks[taskId].data[2] = 1;
+ else
+ gTasks[taskId].data[2] = -1;
+ gTasks[taskId].data[3] = c;
+ return taskId;
+}
+
+static void sub_80DC0F4(u8 taskId)
+{
+ u8 r7 = gTasks[taskId].data[3];
+ s16 r3 = gTasks[taskId].data[0];
+ s16 r1 = gTasks[taskId].data[1];
+
+ if (++gTasks[taskId].data[10] > 14)
+ {
+ u16 r6;
+ u8 r5;
+ u8 r10;
+ u8 r11;
+
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[1] == 0)
+ {
+ DestroyTask(taskId);
+ gContestResources->field_14[r7].unk2_2 = 0;
+ return;
+ }
+ else if (r3 == 0)
+ {
+ if (r1 < 0)
+ {
+ r6 = sub_80DBFC8(r7) + 2;
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ r6 = sub_80DBFC8(r7);
+ gTasks[taskId].data[1]--;
+ }
+ r5 = gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[2] < 0)
+ {
+ if (r1 < 0)
+ {
+ r5 = gTasks[taskId].data[0]++;
+ gTasks[taskId].data[1]++;
+ r6 = sub_80DBFC8(r7) + 2;
+ }
+ else
+ {
+ r5 = --gTasks[taskId].data[0];
+ r6 = 0;
+ gTasks[taskId].data[1]--;
+ }
+ }
+ else
+ {
+ if (r1 < 0)
+ {
+ r5 = --gTasks[taskId].data[0];
+ r6 = 0;
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ r5 = gTasks[taskId].data[0]++;
+ gTasks[taskId].data[1]--;
+ r6 = sub_80DBFC8(r7);
+ }
+ }
+ }
+ r10 = r5;
+ r11 = 0;
+
+ if (r5 > 7)
+ {
+ r11 = 1;
+ r5-= 8;
+ }
+ ContestBG_FillBoxWithTile(0, r6, r5 + 22, gUnknown_02039F26[r7] * 5 + 2 + r11, 1, 1, 17);
+ if (r1 > 0)
+ {
+ PlaySE(SE_C_GAJI);
+ m4aMPlayImmInit(&gMPlayInfo_SE1);
+ m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256);
+ }
+ else
+ {
+ PlaySE(SE_BOO);
+ }
+
+ if (!r11 && !r5 && !r6)
+ gTasks[taskId].data[2] = -gTasks[taskId].data[2];
+ }
+}
+
+static void sub_80DC2BC(void)
+{
+ s32 i;
+
+ LoadSpriteSheet(&gUnknown_08587A74);
+ for (i = 0; i < 4; i++)
+ {
+ u8 y = gUnknown_08587A6C[gUnknown_02039F26[i]];
+
+ gContestResources->field_14[i].unk0 = CreateSprite(&gSpriteTemplate_8587AD0, 180, y, 1);
+ }
+}
+
+static void sub_80DC308(u8 a)
+{
+ u8 spriteId;
+ s16 r5;
+
+ gContestResources->field_14[a].unk2_0 = 1;
+ spriteId = gContestResources->field_14[a].unk0;
+ r5 = sContestantStatus[a].unk4 / 10 * 2;
+ if (r5 > 56)
+ r5 = 56;
+ else if (r5 < 0)
+ r5 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].data[0] = a;
+ gSprites[spriteId].data[1] = r5;
+ if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x)
+ gSprites[spriteId].data[2] = 1;
+ else
+ gSprites[spriteId].data[2] = -1;
+ gSprites[spriteId].callback = sub_80DC408;
+}
+
+static void sub_80DC3AC(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80DC308(i);
+}
+
+static bool8 sub_80DC3C4(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestResources->field_14[i].unk2_0)
+ break;
+ }
+ if (i == 4)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void sub_80DC408(struct Sprite *sprite)
+{
+ if (sprite->pos2.x == sprite->data[1])
+ {
+ gContestResources->field_14[sprite->data[0]].unk2_0 = 0;
+ sprite->callback = SpriteCallbackDummy;
+ }
+ else
+ {
+ sprite->pos2.x += sprite->data[2];
+ }
+}
+
+static void sub_80DC44C(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ gSprites[gContestResources->field_14[i].unk0].pos1.y = gUnknown_08587A6C[gUnknown_02039F26[i]];
+}
+
+static void sub_80DC490(bool8 a)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_02039F26[i] > 1)
+ {
+ if (!a)
+ gSprites[gContestResources->field_14[i].unk0].pos1.x = 180;
+ else
+ gSprites[gContestResources->field_14[i].unk0].pos1.x = 256;
+ }
+ }
+}
+
+static void sub_80DC4F0(void)
+{
+ s32 i;
+
+ LoadSpritePalette(&gUnknown_08587B08);
+ for (i = 0; i < 4; i++)
+ {
+ LoadCompressedSpriteSheet(&gUnknown_08587AE8[i]);
+ gContestResources->field_14[i].unk1 = CreateSprite(&gSpriteTemplate_8587B18[i],
+ 204,
+ gUnknown_08587A70[gUnknown_02039F26[i]],
+ 0);
+ SetSubspriteTables(&gSprites[gContestResources->field_14[i].unk1], gSubspriteTables_8587B80);
+ gSprites[gContestResources->field_14[i].unk1].invisible = TRUE;
+ }
+}
+
+static void CreateApplauseMeterSprite(void)
+{
+ u8 spriteId;
+
+ LoadCompressedSpriteSheet(&gUnknown_08587BB0);
+ LoadSpritePalette(&gUnknown_08587BB8);
+ spriteId = CreateSprite(&gSpriteTemplate_8587BC8, 30, 44, 1);
+ gSprites[spriteId].invisible = TRUE;
+ sContest.applauseMeterSpriteId = spriteId;
+}
+
+static void sub_80DC5E8(void)
+{
+ u8 i;
+ u8 taskId = CreateTask(sub_80DC728, 30);
+
+ sContest.unk19211 = taskId;
+ for (i = 0; i < 4; i++)
+ gTasks[taskId].data[i * 4] = 0xFF;
+}
+
+static void sub_80DC630(u8 a)
+{
+ gTasks[sContest.unk19211].data[a * 4 + 0] = 0;
+ gTasks[sContest.unk19211].data[a * 4 + 1] = 0;
+}
+
+static void sub_80DC674(u8 a)
+{
+ u8 taskId = CreateTask(sub_80DC6A4, 31);
+
+ gTasks[taskId].data[0] = a;
+}
+
+static void sub_80DC6A4(u8 taskId)
+{
+ u8 r4 = gTasks[taskId].data[0];
+
+ if (gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0
+ || gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0xFF)
+ {
+ gTasks[sContest.unk19211].data[r4 * 4 + 0] = 0xFF;
+ gTasks[sContest.unk19211].data[r4 * 4 + 1] = 0;
+ BlendPalette((sContest.unk19218[r4] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18));
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_80DC728(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r3 = i * 4;
+
+ if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ {
+ if (gTasks[taskId].data[r3 + 1] == 0)
+ gTasks[taskId].data[r3 + 0]++;
+ else
+ gTasks[taskId].data[r3 + 0]--;
+
+ if (gTasks[taskId].data[r3 + 0] == 16
+ || gTasks[taskId].data[r3 + 0] == 0)
+ gTasks[taskId].data[r3 + 1] ^= 1;
+
+ BlendPalette(
+ (sContest.unk19218[i] + 5) * 16 + 6,
+ 2,
+ gTasks[taskId].data[r3 + 0],
+ RGB(31, 31, 18));
+ }
+ }
+}
+
+static void sub_80DC7EC(void)
+{
+ s32 i;
+
+ sContest.unk19212 = CreateTask(sub_80DC8D0, 30);
+ for (i = 0; i < 4; i++)
+ sub_80DC81C(i);
+}
+
+static void sub_80DC81C(u8 a)
+{
+ gTasks[sContest.unk19212].data[a * 4 + 0] = 0xFF;
+ gTasks[sContest.unk19212].data[a * 4 + 1] = 0;
+}
+
+static void sub_80DC864(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80DC87C(i);
+}
+
+static void sub_80DC87C(u8 a)
+{
+ u32 var;
+ u32 r0;
+
+ sub_80DC81C(a);
+
+ r0 = a + 5;
+ DmaCopy16Defvars(3,
+ gPlttBufferUnfaded + r0 * 16 + 10,
+ gPlttBufferFaded + r0 * 16 + 10,
+ 2);
+ var = (a + 5) * 16 + 12 + a;
+ DmaCopy16Defvars(3,
+ gPlttBufferUnfaded + var,
+ gPlttBufferFaded + var,
+ 2);
+}
+
+static void sub_80DC8D0(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r3 = i * 4;
+
+ if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ {
+ if (++gTasks[taskId].data[r3 + 2] > 2)
+ {
+ gTasks[taskId].data[r3 + 2] = 0;
+
+ if (gTasks[taskId].data[r3 + 1] == 0)
+ gTasks[taskId].data[r3 + 0]++;
+ else
+ gTasks[taskId].data[r3 + 0]--;
+
+ if (gTasks[taskId].data[r3 + 0] == 16
+ || gTasks[taskId].data[r3 + 0] == 0)
+ gTasks[taskId].data[r3 + 1] ^= 1;
+
+ BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
+ BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18));
+ }
+ }
+ }
+}
+
+static void sub_80DC9B4(u8 a)
+{
+ if (sContestantStatus[a].hasJudgesAttention)
+ sub_80DC630(a);
+ else
+ sub_80DC674(a);
+}
+
+static u8 sub_80DC9EC(u8 a)
+{
+ u8 spriteId1, spriteId2;
+ u8 x = gUnknown_02039F26[a] * 40 + 32;
+
+ LoadCompressedSpriteSheet(&gUnknown_08589904[a]);
+ LoadSpritePalette(&gUnknown_08589924[a]);
+ spriteId1 = CreateSprite(&gSpriteTemplate_858998C[a], 184, x, 29);
+ spriteId2 = CreateSprite(&gSpriteTemplate_858998C[a], 248, x, 29);
+ gSprites[spriteId2].oam.tileNum += 64;
+
+ CopySpriteTiles(0,
+ 3,
+ (void *)VRAM,
+ (u16 *)(VRAM + 0xE000 + gUnknown_02039F26[a] * 5 * 64 + 0x26),
+ gContestResources->field_34);
+
+ CopySpriteTiles(0,
+ 3, (void *)VRAM,
+ (u16 *)(VRAM + 0xE000 + gUnknown_02039F26[a] * 5 * 64 + 0x36),
+ gContestResources->field_38);
+
+ CpuFill32(0, gContestResources->field_34 + 0x500, 0x300);
+ CpuFill32(0, gContestResources->field_38 + 0x500, 0x300);
+
+ RequestDma3Copy(gContestResources->field_34,
+ (u8 *)(VRAM + 0x10000 + gSprites[spriteId1].oam.tileNum * 32),
+ 0x800,
+ 1);
+
+ RequestDma3Copy(gContestResources->field_38,
+ (u8 *)(VRAM + 0x10000 + gSprites[spriteId2].oam.tileNum * 32),
+ 0x800,
+ 1);
+
+ gSprites[spriteId1].data[0] = spriteId2;
+ gSprites[spriteId2].data[0] = spriteId1;
+
+ gSprites[spriteId1].data[1] = a;
+ gSprites[spriteId2].data[1] = a;
+
+ return spriteId1;
+}
+
+static void sub_80DCB78(u8 spriteId)
+{
+ u8 spriteId2 = gSprites[spriteId].data[0];
+
+ FreeSpriteOamMatrix(&gSprites[spriteId2]);
+ DestroySprite(&gSprites[spriteId2]);
+ DestroySpriteAndFreeResources(&gSprites[spriteId]);
+}
+
+static void sub_80DCBB4(void)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(7, 9));
+}
+
+static void sub_80DCBD0(void)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+}
+
+static void sub_80DCBE8(u8 a, bool8 b)
+{
+ u8 r5;
+
+ sub_80DCBB4();
+ gContestResources->field_14[gSprites[a].data[1]].unk2_1 = 1;
+ r5 = gSprites[a].data[0];
+ StartSpriteAffineAnim(&gSprites[a], 1);
+ StartSpriteAffineAnim(&gSprites[r5], 1);
+ gSprites[a].callback = sub_80DCC84;
+ gSprites[r5].callback = SpriteCallbackDummy;
+ if (b == FALSE)
+ PlaySE(SE_C_PIKON);
+ else
+ PlaySE(SE_PC_LOGIN);
+}
+
+static void sub_80DCC84(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ u8 r1 = sprite->data[0];
+
+ if (gSprites[r1].affineAnimEnded)
+ {
+ sprite->invisible = TRUE;
+ gSprites[r1].invisible = TRUE;
+ sprite->callback = sub_80DCCD8;
+ }
+ }
+}
+
+static void sub_80DCCD8(struct Sprite *sprite)
+{
+ gContestResources->field_14[sprite->data[1]].unk2_1 = 0;
+ sub_80DCB78(sprite->data[0]);
+ sub_80DCBD0();
+}
+
+static void sub_80DCD08(void)
+{
+ if(gHeap[0x1A000] == 1)
+ gHeap[0x1A000] = 0;
+ else
+ gHeap[0x1A000] = 1;
+
+ if(gHeap[0x1A000] == 0)
+ {
+ sub_80DAEA4();
+ sub_80DB2BC();
+ }
+ else
+ {
+ sub_80DCD48();
+ }
+}
+
+static void sub_80DCD48(void)
+{
+ u8 i;
+ s16 value;
+ u8 *txtPtr;
+ u8 text[8];
+
+ if (gUnknown_020322D5 == 0)
+ return;
+
+ switch (gHeap[0x1A000])
+ {
+ case 0:
+ break;
+ case 2:
+ case 3:
+ sub_80DF750();
+ break;
+ default:
+ for (i = 0; i < 4; i++)
+ FillWindowPixelBuffer(i, 0);
+ for (i = 0; i < 4; i++)
+ {
+ value = sContestantStatus[i].unk4;
+ txtPtr = text;
+ if (sContestantStatus[i].unk4 < 0)
+ {
+ value *= -1;
+ txtPtr = StringCopy(txtPtr, gText_OneDash);
+ }
+ ConvertIntToDecimalStringN(txtPtr, value, STR_CONV_MODE_LEFT_ALIGN, 4);
+ Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[i], text, 55, 1, 7);
+ }
+ for (i = 0; i < 4; i++)
+ {
+ value = sContestantStatus[i].appeal2;
+ txtPtr = text;
+ if (sContestantStatus[i].appeal2 < 0)
+ {
+ value *= -1;
+ txtPtr = StringCopy(txtPtr, gText_OneDash);
+ }
+ ConvertIntToDecimalStringN(txtPtr, value, STR_CONV_MODE_LEFT_ALIGN, 4);
+ Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[i], text, 5, 1, 7);
+ }
+ sub_80DB2BC();
+ break;
+ }
+}
+
+void sub_80DCE58(u8 a)
+{
+ u8 sp0[4];
+ u16 sp4[4] = {0};
+ s32 i;
+ s32 r2;
+ s32 r4;
+
+ for (i = 0; i < 4; i++)
+ {
+ sp4[i] = Random();
+ for (r2 = 0; r2 < i; r2++)
+ {
+ if (sp4[i] == sp4[r2])
+ {
+ i--;
+ break;
+ }
+ }
+ }
+
+ if (a == 0)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_02039F26[i] = i;
+ for (r4 = 0; r4 < i; r4++)
+ {
+ if (gContestMonConditions[gUnknown_02039F26[r4]] < gContestMonConditions[i]
+ || (gContestMonConditions[gUnknown_02039F26[r4]] == gContestMonConditions[i] && sp4[gUnknown_02039F26[r4]] < sp4[i]))
+ {
+ for (r2 = i; r2 > r4; r2--)
+ gUnknown_02039F26[r2] = gUnknown_02039F26[r2 - 1];
+ gUnknown_02039F26[r4] = i;
+ break;
+ }
+ }
+ if (r4 == i)
+ gUnknown_02039F26[i] = i;
+ }
+ memcpy(sp0, gUnknown_02039F26, sizeof(sp0));
+ for (i = 0; i < 4; i++)
+ gUnknown_02039F26[sp0[i]] = i;
+ }
+ else
+ {
+ memset(sp0, 0xFF, sizeof(sp0));
+ for (i = 0; i < 4; i++)
+ {
+ u8 r2 = sContestantStatus[i].unkB_0;
+
+ while (1)
+ {
+ u8 *ptr = &sp0[r2];
+ if (*ptr == 0xFF)
+ {
+ *ptr = i;
+ gUnknown_02039F26[i] = r2;
+ break;
+ }
+ r2++;
+ }
+ }
+ for (i = 0; i < 3; i++)
+ {
+ for (r4 = 3; r4 > i; r4--)
+ {
+ if (sContestantStatus[r4 - 1].unkB_0 == sContestantStatus[r4].unkB_0
+ && gUnknown_02039F26[r4 - 1] < gUnknown_02039F26[r4]
+ && sp4[r4 - 1] < sp4[r4])
+ {
+ u8 temp = gUnknown_02039F26[r4];
+
+ gUnknown_02039F26[r4] = gUnknown_02039F26[r4 - 1];
+ gUnknown_02039F26[r4 - 1] = temp;
+ }
+ }
+ }
+ }
+}
+
+static void sub_80DD04C(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ LoadPalette(&gHeap[0x1A004] + (i + 5) * 32, (gUnknown_02039F26[i] + 5) * 16, 32);
+ }
+ sub_80DAEA4();
+}
+
+static void sub_80DD080(u8 contestant)
+{
+ u16 move;
+ u8 effect;
+ u8 rnd;
+ bool8 r8;
+ s32 i;
+
+ sContestantStatus[contestant].appeal2 = 0;
+ sContestantStatus[contestant].appeal1 = 0;
+ r8 = sub_80DBA68(contestant);
+ if (!r8)
+ return;
+
+ move = sContestantStatus[contestant].currMove;
+ effect = gContestMoves[move].effect;
+
+ sContestantStatus[contestant].moveCategory = gContestMoves[sContestantStatus[contestant].currMove].contestCategory;
+ if (sContestantStatus[contestant].currMove == sContestantStatus[contestant].prevMove && sContestantStatus[contestant].currMove != MOVE_NONE)
+ {
+ sContestantStatus[contestant].disappointedRepeat = TRUE;
+ sContestantStatus[contestant].moveRepeatCount++;
+ }
+ else
+ {
+ sContestantStatus[contestant].moveRepeatCount = 0;
+ }
+ sContestantStatus[contestant].appeal1 = gContestEffects[effect].appeal;
+ sContestantStatus[contestant].appeal2 = sContestantStatus[contestant].appeal1;
+ shared192D0.jam = gContestEffects[effect].jam;
+ shared192D0.jam2 = shared192D0.jam;
+
+ shared192D0.contestant = contestant;
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].jam = 0;
+ shared192D0.unnervedPokes[i] = 0;
+ }
+
+ if (sContestantStatus[contestant].hasJudgesAttention
+ && !AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove))
+ sContestantStatus[contestant].hasJudgesAttention = 0;
+
+ gContestEffectFuncs[effect]();
+
+ if (sContestantStatus[contestant].conditionMod == 1)
+ sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition - 10;
+ else if (sContestantStatus[contestant].appealTripleCondition)
+ sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition * 3;
+ else
+ sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition;
+
+ sContestantStatus[contestant].unk16 = 0;
+ sContestantStatus[contestant].unk15_6 = 0;
+ if (sub_80DE1E8(contestant))
+ {
+ u8 r2 = AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove);
+
+ if (r2 != 0 && sContestantStatus[contestant].hasJudgesAttention)
+ {
+ sContestantStatus[contestant].unk16 = r2;
+ sContestantStatus[contestant].unk15_6 = 1;
+ sContestantStatus[contestant].hasJudgesAttention = 0;
+ sContestantStatus[contestant].unk17 = sContestantStatus[contestant].appeal1 * sContestantStatus[contestant].unk16;
+ sContestantStatus[contestant].unk15_3 = 1;
+ }
+ else
+ {
+ if (gContestMoves[sContestantStatus[contestant].currMove].comboStarterId != 0)
+ {
+ sContestantStatus[contestant].hasJudgesAttention = 1;
+ sContestantStatus[contestant].unk15_6 = 1;
+ }
+ else
+ {
+ sContestantStatus[contestant].hasJudgesAttention = 0;
+ }
+ }
+ }
+ if (sContestantStatus[contestant].disappointedRepeat)
+ sContestantStatus[contestant].unk18 = (sContestantStatus[contestant].moveRepeatCount + 1) * 10;
+
+ if (sContestantStatus[contestant].nervous)
+ {
+ sContestantStatus[contestant].hasJudgesAttention = 0;
+ sContestantStatus[contestant].appeal2 = 0;
+ sContestantStatus[contestant].appeal1 = 0;
+ }
+ shared19328.bits_0 = Contest_GetMoveExcitement(sContestantStatus[contestant].currMove);
+ if (sContestantStatus[contestant].overrideCategoryExcitementMod)
+ shared19328.bits_0 = 1;
+
+ if (shared19328.bits_0 > 0)
+ {
+ if (sContest.applauseLevel + shared19328.bits_0 > 4)
+ shared19328.unk2 = 60;
+ else
+ shared19328.unk2 = 10;
+ }
+ else
+ {
+ shared19328.unk2 = 0;
+ }
+
+ rnd = Random() % 3;
+ for (i = 0; i < 4; i++)
+ {
+ if (i != contestant)
+ {
+ if (rnd == 0)
+ break;
+ rnd--;
+ }
+ }
+ sContestantStatus[contestant].unk1B = i;
+}
+
+void SetContestantEffectStringID(u8 a, u8 b)
+{
+ sContestantStatus[a].effectStringId = b;
+}
+
+void SetContestantEffectStringID2(u8 a, u8 b)
+{
+ sContestantStatus[a].effectStringId2 = b;
+}
+
+void SetStartledString(u8 contestant, u8 jam)
+{
+ if (jam >= 60)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_TRIPPED_OVER);
+ else if (jam >= 40)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_LEAPT_UP);
+ else if (jam >= 30)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_UTTER_CRY);
+ else if (jam >= 20)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_TURNED_BACK);
+ else if (jam >= 10)
+ SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN);
+}
+
+static void sub_80DD45C(u8 contestant, u8 stringId)
+{
+ StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]);
+ if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL)
+ StringCopy(gStringVar3, gText_Contest_Shyness);
+ else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY)
+ StringCopy(gStringVar3, gText_Contest_Anxiety);
+ else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE)
+ StringCopy(gStringVar3, gText_Contest_Laziness);
+ else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART)
+ StringCopy(gStringVar3, gText_Contest_Hesitancy);
+ else
+ StringCopy(gStringVar3, gText_Contest_Fear);
+ StringExpandPlaceholders(gStringVar4, gUnknown_08587E10[stringId]);
+ sub_80DB89C();
+ Contest_StartTextPrinter(gStringVar4, 1);
+}
+
+void MakeContestantNervous(u8 p)
+{
+ sContestantStatus[p].nervous = 1;
+ sContestantStatus[p].currMove = MOVE_NONE;
+}
+
+static void sub_80DD590(void)
+{
+ u8 r12 = 0;
+ s32 i;
+ s32 j;
+ u8 sp0[4];
+ u8 sp4[4];
+
+ for (i = 0; i < 4; i++)
+ {
+ sp0[i] = gUnknown_02039F26[i];
+ sp4[i] = 0;
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (sContestantStatus[j].nextTurnOrder == i)
+ {
+ sp0[j] = i;
+ sp4[j] = 1;
+ break;
+ }
+ }
+ if (j == 4)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (sp4[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF)
+ {
+ r12 = j;
+ j++;
+ break;
+ }
+ }
+ for (; j < 4; j++)
+ {
+ if (sp4[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF
+ && gUnknown_02039F26[r12] > gUnknown_02039F26[j])
+ r12 = j;
+ }
+ sp0[r12] = i;
+ sp4[r12] = 1;
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ shared192D0.turnOrder[i] = sp0[i];
+ sContestantStatus[i].nextTurnOrder = 0xFF;
+ sContestantStatus[i].turnOrderMod = 0;
+ gUnknown_02039F26[i] = sp0[i];
+ }
+}
+
+static void sub_80DD6DC(struct Sprite *sprite)
+{
+ if (sprite->data[1]++ > 84)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible = TRUE;
+ sprite->callback = SpriteCallbackDummy;
+ sContest.unk1920A_4 = 0;
+ }
+}
+
+static void sub_80DD720(u8 a)
+{
+ u8 spriteId = sContest.unk19216;
+
+ switch (a)
+ {
+ case 0:
+ case 1:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0];
+ PlaySE(SE_HAZURE);
+ break;
+ case 2:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4;
+ PlaySE(SE_SEIKAI);
+ break;
+ case 3:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8;
+ PlaySE(SE_SEIKAI);
+ break;
+ case 4:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
+ PlaySE(SE_TK_WARPIN);
+ break;
+ case 5: // exactly the same as case 4
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
+ PlaySE(SE_TK_WARPIN);
+ break;
+ case 6:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16;
+ PlaySE(SE_TK_WARPIN);
+ break;
+ case 8:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24;
+ PlaySE(SE_W215);
+ break;
+ case 7:
+ default:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20;
+ PlaySE(SE_TK_WARPIN);
+ break;
+ }
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].callback = sub_80DD6DC;
+ sContest.unk1920A_4 = 1;
+}
+
+static void sub_80DD940(void)
+{
+ s32 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ const u8 *src;
+
+ if (i < sContest.applauseLevel)
+ src = gContestApplauseMeterGfx + 64;
+ else
+ src = gContestApplauseMeterGfx;
+ CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32);
+ CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32);
+
+ if (sContest.applauseLevel > 4)
+ sub_80DDA20();
+ }
+}
+
+s8 Contest_GetMoveExcitement(u16 move)
+{
+ return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory];
+}
+
+static u8 sub_80DDA20(void)
+{
+ u8 taskId = CreateTask(c3_08130B10, 10);
+
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x0ABE2);
+ return taskId;
+}
+
+static void c3_08130B10(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] == 1)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (gTasks[taskId].data[3] == 0)
+ gTasks[taskId].data[4]++;
+ else
+ gTasks[taskId].data[4]--;
+ BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB(31, 31, 31));
+ if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16)
+ {
+ gTasks[taskId].data[3] ^= 1;
+ if (sContest.applauseLevel < 5)
+ {
+ BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB(31, 0, 0));
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+static void sub_80DDB0C(void)
+{
+ CreateTask(sub_80DDB6C, 10);
+ gSprites[sContest.applauseMeterSpriteId].pos2.x = -70;
+ gSprites[sContest.applauseMeterSpriteId].invisible = FALSE;
+ sContest.unk1920A_6 = 1;
+}
+
+static void sub_80DDB6C(u8 taskId)
+{
+ struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId];
+
+ gTasks[taskId].data[10] += 1664;
+ sprite->pos2.x += gTasks[taskId].data[10] >> 8;
+ gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF;
+ if (sprite->pos2.x > 0)
+ sprite->pos2.x = 0;
+ if (sprite->pos2.x == 0)
+ {
+ sContest.unk1920A_6 = 0;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_80DDBE8(void)
+{
+ if (gSprites[sContest.applauseMeterSpriteId].invisible == TRUE)
+ {
+ sContest.unk1920A_6 = 0;
+ }
+ else
+ {
+ CreateTask(task08_080CD1CC, 10);
+ gSprites[sContest.applauseMeterSpriteId].pos2.x = 0;
+ sContest.unk1920A_6 = 1;
+ }
+}
+
+static void task08_080CD1CC(u8 taskId)
+{
+ struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId];
+
+ gTasks[taskId].data[10] += 1664;
+ sprite->pos2.x -= gTasks[taskId].data[10] >> 8;
+ gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF;
+ if (sprite->pos2.x < -70)
+ sprite->pos2.x = -70;
+ if (sprite->pos2.x == -70)
+ {
+ sprite->invisible = TRUE;
+ sContest.unk1920A_6 = 0;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_80DDCDC(s8 a)
+{
+ u8 taskId = CreateTask(sub_80DDD20, 5);
+
+ gTasks[taskId].data[0] = a;
+ sContest.unk1920A_5 = 1;
+}
+
+static void sub_80DDD20(u8 taskId)
+{
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ sub_80DDB0C();
+ gTasks[taskId].data[10]++;
+ break;
+ case 1:
+ if (!sContest.unk1920A_6)
+ {
+ gTasks[taskId].data[10]++;
+ }
+ break;
+ case 2:
+ if (gTasks[taskId].data[11]++ > 20)
+ {
+ gTasks[taskId].data[11] = 0;
+ sub_80DD940();
+ sContest.unk1920A_5 = 0;
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void unref_sub_80DDDA8(void)
+{
+ gSprites[sContest.applauseMeterSpriteId].pos2.x = 0;
+ gSprites[sContest.applauseMeterSpriteId].invisible = FALSE;
+}
+
+void unref_sub_80DDDE4(void)
+{
+ gSprites[sContest.applauseMeterSpriteId].invisible = TRUE;
+}
+
+static void sub_80DDE0C(void)
+{
+ CreateTask(sub_80DDE30, 15);
+ sContest.unk1920A_7 = 1;
+}
+
+static void sub_80DDE30(u8 taskId)
+{
+ if (gTasks[taskId].data[10]++ > 6)
+ {
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[11] == 0)
+ {
+ RequestDma3Copy(shared16800, (void *)(VRAM + 0x2000), 0x1000, 1);
+ }
+ else
+ {
+ RequestDma3Copy(shared15800, (void *)(VRAM + 0x2000), 0x1000, 1);
+ gTasks[taskId].data[12]++;
+ }
+
+ gTasks[taskId].data[11] ^= 1;
+
+ if (gTasks[taskId].data[12] == 9)
+ {
+ sContest.unk1920A_7 = 0;
+ DestroyTask(taskId);
+ }
+ }
+}
+
+#define tBlendColor data[0]
+#define tBlendCoeff data[1]
+
+static void sub_80DDED0(s8 a, s8 b)
+{
+ u8 taskId = CreateTask(sub_80DDF80, 10);
+ u16 blendColor;
+ u8 blendCoeff;
+ u8 r3;
+
+ if (a > 0)
+ {
+ blendColor = RGB(30, 27, 8);
+ if (b > 0)
+ {
+ blendCoeff = 0;
+ r3 = sContest.applauseLevel * 3;
+ }
+ else
+ {
+ blendCoeff = sContest.applauseLevel * 3;
+ r3 = 0;
+ }
+ }
+ else
+ {
+ blendColor = 0;
+ if (b > 0)
+ {
+ blendCoeff = 0;
+ r3 = 12;
+ }
+ else
+ {
+ blendCoeff = 12;
+ r3 = 0;
+ }
+ }
+ gTasks[taskId].tBlendColor = blendColor;
+ gTasks[taskId].tBlendCoeff = blendCoeff;
+ gTasks[taskId].data[2] = b;
+ gTasks[taskId].data[3] = r3;
+ sContest.unk1920B_0 = 0;
+}
+
+static void sub_80DDF80(u8 taskId)
+{
+ if (gTasks[taskId].data[10]++ >= 0)
+ {
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[2] > 0)
+ gTasks[taskId].tBlendCoeff++;
+ else
+ gTasks[taskId].tBlendCoeff--;
+ BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
+ BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
+ if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3])
+ {
+ DestroyTask(taskId);
+ sContest.unk1920B_0 = 0;
+ }
+ }
+}
+
+#undef tBlendColor
+#undef tBlendCoeff
+
+static void sub_80DE008(bool8 a)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (sContestantStatus[i].turnOrderMod != 0 && a)
+ {
+ CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[gContestResources->field_14[i].unk1].oam.tileNum + 6) * 32), 32);
+ gSprites[gContestResources->field_14[i].unk1].pos1.y = gUnknown_08587A70[gUnknown_02039F26[i]];
+ gSprites[gContestResources->field_14[i].unk1].invisible = FALSE;
+ }
+ else
+ {
+ gSprites[gContestResources->field_14[i].unk1].invisible = TRUE;
+ }
+ }
+}
+
+static const u8 *GetTurnOrderNumberGfx(u8 contestant)
+{
+ if (sContestantStatus[contestant].turnOrderMod != 1)
+ return gContestNextTurnRandomGfx;
+ else
+ return gContestNextTurnNumbersGfx + sContestantStatus[contestant].nextTurnOrder * 32;
+}
+
+static void sub_80DE12C(void)
+{
+ s32 r7 = 0;
+ u8 r10 = 2;
+ u8 r8 = 1;
+ u8 r9 = 0x11;
+
+ for (r7 = 0; r7 < 4; r7++)
+ {
+ if (shared192D0.unnervedPokes[r7] != 0 && !Contest_IsMonsTurnDisabled(r7))
+ {
+ u32 r6 = gUnknown_02039F26[r7] * 5 + 2;
+ u16 var = sub_80DB748(3);
+
+ ContestBG_FillBoxWithIncrementingTile(0, var, 0x14, r6, r10, r8, r9, r8);
+ var += 16;
+ ContestBG_FillBoxWithIncrementingTile(0, var, 0x14, r6 + 1, r10, r8, r9, r8);
+ PlaySE(SE_C_PASI);
+ }
+ }
+}
+
+bool8 sub_80DE1E8(u8 a)
+{
+ if (sContestantStatus[a].disappointedRepeat || sContestantStatus[a].nervous)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void sub_80DE224(void)
+{
+ s32 i;
+ u16 bg0Cnt, bg1Cnt, bg2Cnt;
+
+ bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT);
+ ((vBgCnt *)&bg1Cnt)->priority = 0;
+ ((vBgCnt *)&bg1Cnt)->screenSize = 2;
+ ((vBgCnt *)&bg1Cnt)->areaOverflowMode = 0;
+ ((vBgCnt *)&bg1Cnt)->charBaseBlock = 0;
+
+ SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt);
+
+ bg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT);
+ bg2Cnt = GetGpuReg(REG_OFFSET_BG2CNT);
+ ((vBgCnt *)&bg0Cnt)->priority = 1;
+ ((vBgCnt *)&bg2Cnt)->priority = 1;
+
+ SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt);
+ SetGpuReg(REG_OFFSET_BG2CNT, bg2Cnt);
+
+ gBattle_BG1_X = DISPLAY_WIDTH;
+ gBattle_BG1_Y = DISPLAY_HEIGHT;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+
+ CpuFill32(0, gContestResources->field_24[1], 0x1000);
+
+ CopyToBgTilemapBuffer(1, gUnknown_08C17980, 0, 0);
+ Contest_SetBgCopyFlags(1);
+
+ for (i = 0; i < 4; i++)
+ {
+ gSprites[gContestResources->field_14[i].unk0].oam.priority = 1;
+ gSprites[gContestResources->field_14[i].unk1].oam.priority = 1;
+ }
+}
+
+static void sub_80DE350(void)
+{
+ s32 i;
+ u16 bg1Cnt;
+
+ RequestDma3Fill(0,(void *)(VRAM + 0x8000), 0x2000, 0x1);
+ CpuFill32(0, gContestResources->field_24[1], 0x1000);
+ Contest_SetBgCopyFlags(1);
+ bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT);
+ ((vBgCnt *) &bg1Cnt)->priority = 1;
+ ((vBgCnt *) &bg1Cnt)->screenSize = 0;
+ ((vBgCnt *) &bg1Cnt)->areaOverflowMode = 0;
+ ((vBgCnt *) &bg1Cnt)->charBaseBlock = 2;
+
+ SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ gSprites[gContestResources->field_14[i].unk0].oam.priority = 0;
+ gSprites[gContestResources->field_14[i].unk1].oam.priority = 0;
+ }
+}
+
+static void sub_80DE424(u8 taskId)
+{
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = DISPLAY_HEIGHT;
+ PlaySE12WithPanning(SE_C_MAKU_D, 0);
+ gTasks[taskId].func = sub_80DE464;
+}
+
+static void sub_80DE464(u8 taskId)
+{
+ if ((s16)(gBattle_BG1_Y -= 7) < 0)
+ gBattle_BG1_Y = 0;
+ if (gBattle_BG1_Y == 0)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80DE4A8;
+ }
+}
+
+static void sub_80DE4A8(u8 taskId)
+{
+ s32 i;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ for (i = 0; i < 4; i++)
+ sContest.unk19218[i] = gUnknown_02039F26[i];
+ sub_80DBF90();
+ sub_80DC864();
+ sub_80DB69C();
+ sub_80DD04C();
+ sub_80DE008(TRUE);
+ sub_80DC44C();
+ gTasks[taskId].data[0] = 1;
+ break;
+ case 1:
+ if (gIsLinkContest & 1)
+ {
+ u8 taskId2;
+
+ sContest.unk1920B_2 = 1;
+ if (sub_80DA8A4())
+ sub_80DBAA0();
+ taskId2 = CreateTask(sub_80FCC88, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
+ sub_80DBF68();
+ gTasks[taskId].data[0] = 2;
+ }
+ else
+ {
+ sub_80DBAA0();
+ gTasks[taskId].data[0] = 3;
+ }
+ break;
+ case 2:
+ if (!sContest.unk1920B_2)
+ gTasks[taskId].data[0] = 3;
+ break;
+ case 3:
+ sub_80DB884();
+ sub_80DB2BC();
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80DE5F4;
+ break;
+ }
+}
+
+static void sub_80DE5C0(u8 taskId)
+{
+ if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT)
+ gTasks[taskId].func = sub_80DA4F4;
+}
+
+static void sub_80DE5F4(u8 taskId)
+{
+ if (gTasks[taskId].data[2] < 10)
+ {
+ gTasks[taskId].data[2]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[1] == 0)
+ {
+ if (gTasks[taskId].data[0] == 16)
+ gTasks[taskId].data[1]++;
+ else
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80DE65C;
+ }
+ else
+ {
+ gTasks[taskId].data[0]--;
+ }
+ }
+ }
+}
+
+static void sub_80DE65C(u8 taskId)
+{
+ if (gTasks[taskId].data[2] < 10)
+ {
+ gTasks[taskId].data[2]++;
+ }
+ else
+ {
+ gTasks[taskId].data[2] = 0;
+ PlaySE12WithPanning(SE_C_MAKU_U, 0);
+ gTasks[taskId].func = sub_80DE5C0;
+ }
+}
+
+static void sub_80DE69C(u8 a)
+{
+ s32 i;
+ u8 taskId;
+
+ for (i = 0; i < 4; i++)
+ {
+ gSprites[gContestResources->field_14[i].unk0].oam.matrixNum = AllocOamMatrix();
+ gSprites[gContestResources->field_14[i].unk0].oam.affineMode = 1;
+ StartSpriteAffineAnim(&gSprites[gContestResources->field_14[i].unk0], a);
+ if (a == 2)
+ {
+ AnimateSprite(&gSprites[gContestResources->field_14[i].unk0]);
+ gSprites[gContestResources->field_14[i].unk0].invisible = FALSE;
+ }
+ }
+ taskId = CreateTask(sub_80DE794, 5);
+ gTasks[taskId].data[0] = a;
+ sContest.unk1920B_1 = 1;
+}
+
+static void sub_80DE794(u8 taskId)
+{
+ s32 i;
+
+ if (gSprites[gContestResources->field_14[0].unk0].affineAnimEnded)
+ {
+ if ((u8)gTasks[taskId].data[0] == 1)
+ {
+ for (i = 0; i < 4; i++)
+ gSprites[gContestResources->field_14[i].unk0].invisible = TRUE;
+ }
+ for (i = 0; i < 4; i++)
+ FreeSpriteOamMatrix(&gSprites[gContestResources->field_14[i].unk0]);
+ sContest.unk1920B_1 = 0;
+ DestroyTask(taskId);
+ }
+}
+
+static u16 SanitizeMove(u16 move)
+{
+ if (move >= MOVES_COUNT)
+ move = MOVE_POUND;
+ return move;
+}
+
+static u16 SanitizeSpecies(u16 species)
+{
+ if (species >= NUM_SPECIES)
+ species = SPECIES_NONE;
+ return species;
+}
+
+static void sub_80DE864(u8 a)
+{
+ s32 i;
+ u16 move = SanitizeMove(sContestantStatus[a].currMove);
+ u16 species = SanitizeSpecies(gContestMons[a].species);
+ u8 r5_2;
+
+ memset(&gContestResources->field_18->species, 0, 0x14);
+ ClearBattleAnimationVars();
+ for (i = 0; i < 4; i++)
+ gBattleMonForms[i] = 0;
+ switch (move)
+ {
+ case MOVE_CURSE:
+ if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST)
+ gAnimMoveTurn = 0;
+ else
+ gAnimMoveTurn = 1;
+ break;
+ case MOVE_TRANSFORM:
+ case MOVE_ROLE_PLAY:
+ r5_2 = sContestantStatus[a].unk1B;
+ gContestResources->field_18->unk2 = SanitizeSpecies(gContestMons[r5_2].species);
+ gContestResources->field_18->unk10 = gContestMons[r5_2].personality;
+ gContestResources->field_18->unk4_0 = 1;
+ break;
+ case MOVE_RETURN:
+ gAnimFriendship = 0xFF;
+ break;
+ case MOVE_FRUSTRATION:
+ gAnimFriendship = 0;
+ break;
+ case MOVE_SOLAR_BEAM:
+ case MOVE_RAZOR_WIND:
+ case MOVE_SKULL_BASH:
+ case MOVE_SKY_ATTACK:
+ if (sContest.unk1925E == 0)
+ {
+ sContest.unk1925E = 2;
+ gAnimMoveTurn = 0;
+ }
+ else
+ {
+ gAnimMoveTurn = 1;
+ }
+ break;
+ }
+ sub_80DEA5C();
+}
+
+static void sub_80DE9B0(u8 unused)
+{
+ memset(&gContestResources->field_18->species, 0, 0x14);
+ if (sContest.unk1925E != 0)
+ sContest.unk1925E--;
+}
+
+static void sub_80DE9DC(u8 a)
+{
+ gContestResources->field_18->unk5 = a;
+ gContestResources->field_18->species = SanitizeSpecies(gContestMons[a].species);
+ gContestResources->field_18->unk8 = gContestMons[a].personality;
+ gContestResources->field_18->unkC = gContestMons[a].otId;
+}
+
+static void sub_80DEA20(void)
+{
+ gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]);
+ sub_80DEA5C();
+}
+
+static void sub_80DEA5C(void)
+{
+ struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]];
+
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->pos1.x = GetBattlerSpriteCoord(3, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(3, 1);
+ sprite->invisible = TRUE;
+}
+
+static void SelectContestMoveBankTarget(u16 move)
+{
+ switch (gBattleMoves[move].target)
+ {
+ case MOVE_TARGET_USER_OR_SELECTED:
+ case MOVE_TARGET_USER:
+ gBattlerTarget = 2;
+ break;
+ case MOVE_TARGET_SELECTED:
+ case MOVE_TARGET_RANDOM:
+ case MOVE_TARGET_BOTH:
+ case MOVE_TARGET_FOES_AND_ALLY:
+ default:
+ gBattlerTarget = 3;
+ break;
+ }
+}
+
+static void Contest_PrintTextToBg0WindowStd(u32 a, const u8 *b)
+{
+ struct TextPrinterTemplate printerTemplate;
+
+ printerTemplate.currentChar = b;
+ printerTemplate.windowId = a;
+ printerTemplate.fontId = 1;
+ printerTemplate.x = 0;
+ printerTemplate.y = 1;
+ printerTemplate.currentX = 0;
+ printerTemplate.currentY = 1;
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.unk = 0;
+ printerTemplate.fgColor = 15;
+ printerTemplate.bgColor = 0;
+ printerTemplate.shadowColor = 8;
+
+ AddTextPrinter(&printerTemplate, 0, 0);
+ PutWindowTilemap(a);
+ Contest_SetBgCopyFlags(0);
+}
+
+void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s32 fontId)
+{
+ struct TextPrinterTemplate printerTemplate;
+
+ printerTemplate.currentChar = currChar;
+ printerTemplate.windowId = windowId;
+ printerTemplate.fontId = fontId;
+ printerTemplate.x = x;
+ printerTemplate.y = y;
+ printerTemplate.currentX = x;
+ printerTemplate.currentY = y;
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.unk = 0;
+ printerTemplate.fgColor = 15;
+ printerTemplate.bgColor = 0;
+ printerTemplate.shadowColor = 8;
+
+ AddTextPrinter(&printerTemplate, 0, 0);
+ PutWindowTilemap(windowId);
+ Contest_SetBgCopyFlags(0);
+}
+
+static void Contest_StartTextPrinter(const u8 *currChar, bool32 b)
+{
+ struct TextPrinterTemplate printerTemplate;
+ u8 speed;
+
+ printerTemplate.currentChar = currChar;
+ printerTemplate.windowId = 4;
+ printerTemplate.fontId = 1;
+ printerTemplate.x = 0;
+ printerTemplate.y = 1;
+ printerTemplate.currentX = 0;
+ printerTemplate.currentY = 1;
+ printerTemplate.letterSpacing = 0;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.unk = 0;
+ printerTemplate.fgColor = 1;
+ printerTemplate.bgColor = 0;
+ printerTemplate.shadowColor = 8;
+
+ if (!b)
+ {
+ AddTextPrinter(&printerTemplate, 0, 0);
+ }
+ else
+ {
+ if (gIsLinkContest & 1)
+ speed = 4;
+ else
+ speed = GetPlayerTextSpeedDelay();
+ AddTextPrinter(&printerTemplate, speed, 0);
+ }
+
+ PutWindowTilemap(4);
+ Contest_SetBgCopyFlags(0);
+}
+
+static void ContestBG_FillBoxWithIncrementingTile(u8 a, u16 b, u8 c, u8 d, u8 e, u8 f, u8 g, s16 h)
+{
+ WriteSequenceToBgTilemapBuffer(a, b, c, d, e, f, g, h);
+ Contest_SetBgCopyFlags(a);
+}
+
+static void ContestBG_FillBoxWithTile(u8 a, u16 b, u8 c, u8 d, u8 e, u8 f, u8 g)
+{
+ ContestBG_FillBoxWithIncrementingTile(a, b, c, d, e, f, g, 0);
+}
+
+static bool32 Contest_RunTextPrinters(void)
+{
+ RunTextPrinters();
+ return IsTextPrinterActive(4);
+}
+
+static void Contest_SetBgCopyFlags(u32 var)
+{
+ sContestBgCopyFlags |= 1 << var;
+}
+
+void ResetContestLinkResults(void)
+{
+ s32 i;
+ s32 j;
+
+ for(i = 0; i < 5; i++)
+ for(j = 0; j < 4; j++)
+ gSaveBlock2Ptr->contestLinkResults[i][j] = 0;
+}
+
+bool8 sub_80DEDA8(u8 a)
+{
+ s32 i;
+ u8 r7 = Random() % 3;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gContestFinalStandings[i] == 0)
+ break;
+ }
+ if (a == 0xFF && i != gContestPlayerMonIndex)
+ return FALSE;
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ r7 += 0;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ r7 += 3;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ r7 += 6;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ r7 += 9;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ r7 += 12;
+ break;
+ }
+ if (a != 0xFE)
+ {
+ u8 r4 = sub_80DEFA8(a, 1);
+
+ gSaveBlock1Ptr->contestWinners[r4].personality = gContestMons[i].personality;
+ gSaveBlock1Ptr->contestWinners[r4].species = gContestMons[i].species;
+ gSaveBlock1Ptr->contestWinners[r4].trainerId = gContestMons[i].otId;
+ StringCopy(gSaveBlock1Ptr->contestWinners[r4].monName, gContestMons[i].nickname);
+ StringCopy(gSaveBlock1Ptr->contestWinners[r4].trainerName, gContestMons[i].trainerName);
+ if(gIsLinkContest & 1)
+ gSaveBlock1Ptr->contestWinners[r4].contestRank = 4;
+ else
+ gSaveBlock1Ptr->contestWinners[r4].contestRank = gSpecialVar_ContestRank;
+
+ if (a != 0xFF)
+ gSaveBlock1Ptr->contestWinners[r4].contestCategory = gSpecialVar_ContestCategory;
+ else
+ gSaveBlock1Ptr->contestWinners[r4].contestCategory = r7;
+ }
+ else
+ {
+ gUnknown_02039F3C.personality = gContestMons[i].personality;
+ gUnknown_02039F3C.trainerId = gContestMons[i].otId;
+ gUnknown_02039F3C.species = gContestMons[i].species;
+ StringCopy(gUnknown_02039F3C.monName, gContestMons[i].nickname);
+ StringCopy(gUnknown_02039F3C.trainerName, gContestMons[i].trainerName);
+ gUnknown_02039F3C.contestCategory = r7;
+ }
+ return TRUE;
+}
+
+u8 sub_80DEFA8(u8 a, u8 b)
+{
+ s32 i;
+
+ switch (a)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ if (b != 0)
+ {
+ for (i = 5; i >= 1; i--)
+ memcpy(&gSaveBlock1Ptr->contestWinners[i], &gSaveBlock1Ptr->contestWinners[i - 1], sizeof(struct ContestWinner));
+ }
+ return 0;
+ default:
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ return 8;
+ case CONTEST_CATEGORY_BEAUTY:
+ return 9;
+ case CONTEST_CATEGORY_CUTE:
+ return 10;
+ case CONTEST_CATEGORY_SMART:
+ return 11;
+ case CONTEST_CATEGORY_TOUGH:
+ default:
+ return 12;
+ }
+ }
+}
+
+void ClearContestWinnerPicsInContestHall(void)
+{
+ s32 i;
+
+ for (i = 0; i < 8; i++)
+ gSaveBlock1Ptr->contestWinners[i] = gUnknown_08587FA4[i];
+}
+
+// The functions below are probably related to Contests in TV.
+static void sub_80DF080(u8 contestant)
+{
+ s32 i;
+
+ if (!gContestResources->field_10->excitementFrozen
+ && gContestResources->field_10->bits_0 > 0
+ && !gContestResources->field_4[contestant].disappointedRepeat)
+ {
+ gContestResources->field_1c[contestant].unkC |= 1;
+ gContestResources->field_1c[contestant].unkE_2 = 1;
+ }
+
+ if (gContestResources->field_4[contestant].nervous)
+ gContestResources->field_1c[contestant].unkC |= 2;
+
+ if (!gContestResources->field_10->excitementFrozen
+ && gContestResources->field_10->bits_0 != 0
+ && gContestResources->field_10->unk2 == 60)
+ {
+ gContestResources->field_1c[contestant].unkC |= 4;
+ }
+
+ if (gContestResources->field_4[contestant].unk15_6
+ && gContestResources->field_4[contestant].unk16 != 0)
+ {
+ gContestResources->field_1c[contestant].unkC |= 8;
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ if (i != contestant && gContestResources->field_4[i].jam != 0)
+ {
+ gContestResources->field_1c[contestant].unkC |= 0x10;
+ gContestResources->field_1c[i].unkC |= 0x40;
+ }
+ }
+
+ if (gContestResources->field_4[contestant].numTurnsSkipped != 0
+ || gContestResources->field_4[contestant].noMoreTurns)
+ {
+ gContestResources->field_1c[contestant].unkC |= 0x20;
+ }
+ else if (!gContestResources->field_4[contestant].nervous)
+ {
+ gContestResources->field_1c[contestant].unkC |= 0x80;
+ gContestResources->field_1c[contestant].unkE_1 = 1;
+ gContestResources->field_1c[contestant].unk0[gContestResources->field_0->turnNumber] = gContestResources->field_4[contestant].currMove;
+ }
+
+ if (gContestResources->field_4[contestant].disappointedRepeat)
+ gContestResources->field_1c[contestant].unkD |= 2;
+
+ if (gContestResources->field_0->applauseLevel == 4
+ && !gContestResources->field_10->excitementFrozen
+ && gContestResources->field_10->bits_0 < 0)
+ {
+ gContestResources->field_1c[contestant].unkD |= 0x20;
+ }
+}
+
+static void sub_80DF250(void)
+{
+ u8 r1;
+ s32 i, j;
+ bool32 r12, r8;
+ u16 sp0[6];
+ u8 spC[6];
+ u16 sp14[5];
+ u8 var_38;
+ u8 r3;
+ u8 count;
+
+ r1 = 0;
+ var_38 = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestFinalStandings[i] == 0)
+ var_38 = i;
+ else if (gContestFinalStandings[i] == 3)
+ r1 = i;
+ }
+
+ gContestResources->field_1c[r1].unkD |= 1;
+ for (i = 0; i < 4; i++)
+ {
+ if (i != var_38 && gUnknown_02039F08[var_38] - gUnknown_02039F08[i] <= 50)
+ gContestResources->field_1c[i].unkD |= 4;
+
+ if (!gContestResources->field_1c[i].unkE_2)
+ gContestResources->field_1c[i].unkD |= 8;
+
+ for (j = 0; j < 4; j++)
+ {
+ if (gContestMonConditions[i] < gContestMonConditions[j])
+ break;
+ }
+ if (j == 4 && gContestFinalStandings[i] != 0)
+ gContestResources->field_1c[i].unkD |= 0x10;
+
+ r12 = FALSE;
+ r8 = FALSE;
+ for (j = 0; j < 4; j++)
+ {
+ if (gContestMonConditions[i] > gContestMonConditions[j])
+ r12 = TRUE;
+ if (gUnknown_02039F18[i] > gUnknown_02039F18[j])
+ r8 = TRUE;
+ }
+ if (!r12 && !r8)
+ gContestResources->field_1c[i].unkD |= 0x40;
+
+ if (!gContestResources->field_1c[i].unkE_1)
+ gContestResources->field_1c[i].unkD |= 0x80;
+ }
+
+ for (i = 0; i < 5; i++)
+ {
+ sp0[i] = 0;
+ spC[i] = 0;
+ }
+ sp0[5] = 0xFFFF;
+ spC[5] = 0;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (gContestResources->field_1c[var_38].unk0[i] != 0)
+ {
+ for (j = 0; j < 5; j++)
+ {
+ if (gContestResources->field_1c[var_38].unk0[i] != sp0[j])
+ {
+ if (sp0[j] == 0)
+ {
+ sp0[j] = gContestResources->field_1c[var_38].unk0[i];
+ spC[j]++;
+ }
+ }
+ else
+ {
+ spC[j]++;
+ }
+ }
+ }
+ }
+
+ sp14[0] = sp0[0];
+ r3 = spC[0];
+ count = 0;
+ for (i = 1; sp0[i] != 0xFFFF; i++)
+ {
+ if (r3 < spC[i])
+ {
+ sp14[0] = sp0[i];
+ r3 = spC[i];
+ count = 1;
+ }
+ else if (r3 == spC[i])
+ {
+ sp14[count] = sp0[i];
+ count++;
+ }
+ }
+
+ gContestResources->field_1c[var_38].unkA = sp14[Random() % count];
+}
+
+static void sub_80DF4F8(void)
+{
+ s32 i;
+ u32 bits;
+ u8 r7;
+ u8 r9, r10;
+ u8 count;
+ u8 r5;
+ u8 r2;
+ u16 var;
+ u8 r4;
+ u8 r6;
+ u8 sp0[4];
+
+ if (gContestFinalStandings[gContestPlayerMonIndex] != 0)
+ return;
+
+ r7 = 0;
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestFinalStandings[i] == 0)
+ r7 = i;
+ }
+
+ r9 = 0;
+ r10 = 0;
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestMonConditions[r7] < gContestMonConditions[i])
+ r9++;
+ if (gUnknown_02039F18[r7] < gUnknown_02039F18[i])
+ r10++;
+ }
+
+ bits = gContestResources->field_1c[r7].unkC;
+ count = 0;
+ for (i = 0; i < 8; bits >>= 1, i++)
+ {
+ if (bits & 1)
+ count++;
+ }
+
+ r5 = Random() % count;
+ bits = gContestResources->field_1c[r7].unkC;
+ count = 0;
+ r2 = 0;
+ for (i = 0; i < 8; bits >>= 1, r2++, i++)
+ {
+ if (!(bits & 1))
+ continue;
+ if (r5 == count)
+ break;
+ count++;
+ }
+
+ var = 1 << r2;
+ if (r7 == 0)
+ {
+ sp0[0] = 1;
+ r4 = gContestResources->field_1c[1].unkD;
+ i = 2;
+ }
+ else
+ {
+ sp0[0] = 0;
+ r4 = gContestResources->field_1c[0].unkD;
+ i = 1;
+ }
+
+ r5 = 1;
+ for (; i < 4; i++)
+ {
+ if (i != r7)
+ {
+ if (r4 < gContestResources->field_1c[i].unkD)
+ {
+ sp0[0] = i;
+ r4 = gContestResources->field_1c[i].unkD;
+ r5 = 1;
+ }
+ else if (r4 == gContestResources->field_1c[i].unkD)
+ {
+ sp0[r5] = i;
+ r5++;
+ }
+ }
+ }
+
+ r6 = sp0[Random() % r5];
+ r2 = 0x80;
+ for (i = 0; i < 8; r2 >>= 1, i++)
+ {
+ r4 = gContestResources->field_1c[r6].unkD & r2;
+ if (r4)
+ break;
+ }
+
+ ContestLiveUpdates_BeforeInterview_1(r9);
+ ContestLiveUpdates_BeforeInterview_2(r10);
+ ContestLiveUpdates_BeforeInterview_3(var);
+ ContestLiveUpdates_BeforeInterview_4(gContestResources->field_1c[r7].unkA);
+ ContestLiveUpdates_BeforeInterview_5(r4, r6);
+}
+
+// Unused
+void sub_80DF704(u8 arg0)
+{
+ if (gHeap[0x1A000] == 0)
+ {
+ if (arg0 == 0)
+ gHeap[0x1A000] = 2;
+ else
+ gHeap[0x1A000] = 3;
+ }
+ else
+ {
+ gHeap[0x1A000] = 0;
+ }
+
+ if (gHeap[0x1A000] == 0)
+ {
+ sub_80DAEA4();
+ sub_80DB2BC();
+ }
+ else
+ {
+ sub_80DF750();
+ }
+}
+
+static void sub_80DF750(void)
+{
+ u8 i;
+ s8 j;
+ u8 text1[20];
+ u8 text2[20];
+ u8 *txtPtr;
+ u32 bits;
+
+ if (gUnknown_020322D5 == 0)
+ return;
+ if (gHeap[0x1A000] != 2 && gHeap[0x1A000] != 3)
+ return;
+
+ for (i = 0; i < 4; i++)
+ FillWindowPixelBuffer(i, 0);
+
+ if (gHeap[0x1A000] == 2)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ txtPtr = StringCopy(text1, gText_CDot);
+ Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[i], text1, 5, 1, 7);
+ bits = gContestResources->field_1c[i].unkC;
+ for (j = 7; j > -1; j--) // Weird loop.
+ {
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, bits & 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ bits >>= 1;
+ }
+
+ for (j = 0; j < 5; j++)
+ text2[j] = text1[j];
+
+ text2[j] = EOS;
+ Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[i], text2, 5, 1, 7);
+ Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[i], text1 + j, 55, 1, 7);
+ }
+ }
+ else
+ {
+ for (i = 0; i < 4; i++)
+ {
+ StringCopy(text1, gText_BDot);
+ bits = gContestResources->field_1c[i].unkD;
+ txtPtr = &text1[2];
+ for (j = 7; j > -1; j--) // Weird loop.
+ {
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, bits & 1, STR_CONV_MODE_LEFT_ALIGN, 1);
+ bits >>= 1;
+ }
+
+ for (j = 0; j < 5; j++)
+ text2[j] = text1[j];
+
+ text2[j] = EOS;
+ Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[i], text2, 5, 1, 7);
+ Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[i], text1 + j, 55, 1, 7);
+ }
+ }
+ sub_80DB2BC();
+}
+
+static u8 sub_80DF940(u8 *nickname)
+{
+ u8 ret = GAME_LANGUAGE;
+
+ if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
+ return LANGUAGE_ENGLISH;
+
+ if (StringLength(nickname) < 6)
+ {
+ while (*nickname != EOS)
+ {
+ if ((*nickname >= CHAR_A && *nickname <= CHAR_z)
+ || (*nickname >= CHAR_0 && *nickname <= CHAR_9)
+ || *nickname == CHAR_SPACE
+ || *nickname == CHAR_PERIOD
+ || *nickname == CHAR_COMMA
+ || *nickname == CHAR_EXCL_MARK
+ || *nickname == CHAR_QUESTION_MARK
+ || *nickname == CHAR_MALE
+ || *nickname == CHAR_FEMALE
+ || *nickname == CHAR_SLASH
+ || *nickname == CHAR_HYPHEN
+ || *nickname == CHAR_ELLIPSIS
+ || *nickname == CHAR_DBL_QUOT_LEFT
+ || *nickname == CHAR_DBL_QUOT_RIGHT
+ || *nickname == CHAR_SGL_QUOT_LEFT
+ || *nickname == CHAR_DBL_QUOT_LEFT) // Most likely a typo, CHAR_SGL_QUOT_RIGHT should be here instead.
+ {
+ nickname++;
+ }
+ else
+ {
+ ret = LANGUAGE_JAPANESE;
+ break;
+ }
+ }
+ }
+
+ return ret;
+}
+
+static void sub_80DF9D4(u8 *playerName)
+{
+ u8 chr = playerName[5];
+
+ playerName[5] = EOS;
+ playerName[PLAYER_NAME_LENGTH] = chr;
+}
+
+static void sub_80DF9E0(u8 *monName, s32 language)
+{
+ u8 chr;
+
+ StripExtCtrlCodes(monName);
+ if (language == LANGUAGE_JAPANESE)
+ {
+ monName[5] = EOS;
+ monName[POKEMON_NAME_LENGTH] = EXT_CTRL_CODE_BEGIN;
+ }
+ else
+ {
+ chr = monName[5];
+ monName[5] = EOS;
+ monName[POKEMON_NAME_LENGTH] = chr;
+ }
+}
+
+void sub_80DFA08(struct ContestPokemon *mon, s32 language)
+{
+ u8 *name = mon->nickname;
+
+ if (language == LANGUAGE_JAPANESE)
+ {
+ ConvertInternationalString(name, sub_80DF940(name));
+ }
+ else if (name[POKEMON_NAME_LENGTH] == EXT_CTRL_CODE_BEGIN)
+ {
+ ConvertInternationalString(name, LANGUAGE_JAPANESE);
+ }
+ else
+ {
+ name[5] = name[POKEMON_NAME_LENGTH];
+ name[POKEMON_NAME_LENGTH] = EOS;
+ }
+
+ name = mon->trainerName;
+ if (language == LANGUAGE_JAPANESE)
+ {
+ name[PLAYER_NAME_LENGTH] = EOS;
+ name[6] = name[4];
+ name[5] = name[3];
+ name[4] = name[2];
+ name[3] = name[1];
+ name[2] = mon->trainerName[0];
+ name[1] = EXT_CTRL_CODE_JPN;
+ name[0] = EXT_CTRL_CODE_BEGIN;
+ }
+ else
+ {
+ name[5] = name[PLAYER_NAME_LENGTH];
+ name[PLAYER_NAME_LENGTH] = EOS;
+ }
+}
diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c
index 721a4f870..381fb34fa 100644
--- a/src/contest_link_80F57C4.c
+++ b/src/contest_link_80F57C4.c
@@ -3,7 +3,6 @@
#include "bg.h"
#include "contest.h"
#include "contest_link_80F57C4.h"
-#include "contest_painting.h"
#include "decompress.h"
#include "dma3.h"
#include "event_data.h"
@@ -67,10 +66,9 @@ struct ContestLink80F57C4
u8 *unkC[4];
};
-extern const struct CompressedSpriteSheet gMonFrontPicTable[];
-
-extern struct ContestLink80F57C4 *gUnknown_0203A034;
+EWRAM_DATA struct ContestLink80F57C4 *gUnknown_0203A034 = NULL;
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
extern const struct BgTemplate gUnknown_0858D888[4];
extern const struct WindowTemplate gUnknown_0858D898[];
extern const struct CompressedSpriteSheet gUnknown_0858D878[];
@@ -138,7 +136,7 @@ void sub_80F57C4(void)
InitBgsFromTemplates(0, gUnknown_0858D888, ARRAY_COUNT(gUnknown_0858D888));
for (i = 0; i < 4; i++)
SetBgTilemapBuffer(i, gUnknown_0203A034->unkC[i]);
-
+
InitWindows(gUnknown_0858D898);
DeactivateAllTextPrinters();
SetGpuReg(REG_OFFSET_MOSAIC, 0);
@@ -720,7 +718,7 @@ static void sub_80F66B4(u8 taskId)
{
nationalDexNum = SpeciesToNationalPokedexNum(gContestMons[i].species);
GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
- }
+ }
}
gTasks[taskId].data[10] = 0;
@@ -761,7 +759,7 @@ static void sub_80F67C4(u8 taskId)
{
if (!(gIsLinkContest & 0x1))
BravoTrainerPokemonProfile_BeforeInterview2(gContestFinalStandings[gContestPlayerMonIndex]);
-
+
BeginHardwarePaletteFade(0xFF, 0, 0, 16, 0);
gTasks[taskId].func = sub_80F6820;
}
@@ -1282,7 +1280,7 @@ static void sub_80F6F68(struct Sprite *sprite)
struct Sprite *sprite2 = &gSprites[sprite->data[i]];
sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64;
}
-
+
if (sprite->pos1.x == sprite->data[4])
sprite->callback = sub_80F6FDC;
}
@@ -1348,7 +1346,7 @@ static void sub_80F7144(void)
sprite->invisible = 1;
for (i = 0; i < 3; i++)
gSprites[sprite->data[i]].invisible = 1;
-
+
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 0ed169a77..71a110aa8 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -20,10 +20,11 @@
#include "window.h"
#include "constants/rgb.h"
-extern u16 (*gUnknown_03006190)[][32];
-extern struct ContestWinner *gUnknown_030061C0;
-extern u16 *gContestPaintingMonPalette;
-extern struct Unk030061A0 gUnknown_030061A0;
+// IWRAM common
+u16 (*gUnknown_03006190)[][32];
+struct Unk030061A0 gUnknown_030061A0;
+struct ContestWinner *gUnknown_030061C0;
+u16 *gContestPaintingMonPalette;
// IWRAM bss
IWRAM_DATA u8 gContestPaintingState;
@@ -103,7 +104,7 @@ const u8 *const gContestRankTextPointers[] =
gContestLink,
};
-const struct BgTemplate gUnknown_085B07E8[] =
+const struct BgTemplate gUnknown_085B07E8[] =
{
{
.bg = 1,
@@ -116,7 +117,7 @@ const struct BgTemplate gUnknown_085B07E8[] =
},
};
-const struct WindowTemplate gUnknown_085B07EC =
+const struct WindowTemplate gUnknown_085B07EC =
{
.bg = 1,
.tilemapLeft = 2,
diff --git a/src/contest_painting_effects.c b/src/contest_painting_effects.c
index 187a0f196..142ad7bc9 100644
--- a/src/contest_painting_effects.c
+++ b/src/contest_painting_effects.c
@@ -3,14 +3,17 @@
#include "contest_painting.h"
#include "constants/rgb.h"
-extern u8 gUnknown_03006164;
-extern u16 (*gUnknown_03006168)[][32];
-extern u8 gUnknown_0300616C;
-extern u8 gUnknown_03006170;
-extern u8 gUnknown_03006174;
-extern u8 gUnknown_03006178;
-extern u8 gUnknown_0300617C;
-extern u8 gUnknown_03006180;
+// IWRAM common
+u8 gUnknown_03006164;
+u16 (*gUnknown_03006168)[][32];
+u8 gUnknown_0300616C;
+u8 gUnknown_03006170;
+u8 gUnknown_03006174;
+u8 gUnknown_03006178;
+u8 gUnknown_0300617C;
+u8 gUnknown_03006180;
+u16 gUnknown_03006184;
+u16 gUnknown_03006188;
// this file's functions
void sub_8125230(void);
diff --git a/src/daycare.c b/src/daycare.c
index 6bdbd987e..b75fab292 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1244,15 +1244,15 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y)
static void Task_HandleDaycareLevelMenuInput(u8 taskId)
{
- u32 var = ListMenuHandleInputGetItemId(gTasks[taskId].tMenuListTaskId);
+ u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuListTaskId);
if (gMain.newKeys & A_BUTTON)
{
- switch (var)
+ switch (input)
{
case 0:
case 1:
- gSpecialVar_Result = var;
+ gSpecialVar_Result = input;
break;
case 5:
gSpecialVar_Result = 2;
diff --git a/src/decoration.c b/src/decoration.c
index 36d9ba5f9..2ac49b98c 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -526,14 +526,14 @@ void sub_8126B80(u8 taskId)
PlaySE(SE_SELECT);
sSecretBasePCMenuActions[sSecretBasePCMenuCursorPos].func.void_u8(taskId);
break;
- case -2:
+ case MENU_NOTHING_CHOSEN:
sSecretBasePCMenuCursorPos = Menu_GetCursorPos();
if ((s8)menuPos != sSecretBasePCMenuCursorPos)
{
sub_8126C08();
}
break;
- case -1:
+ case MENU_B_PRESSED:
PlaySE(SE_SELECT);
SecretBasePC_Cancel(taskId);
break;
@@ -713,12 +713,12 @@ void sub_8127088(u8 taskId)
input = Menu_ProcessInput();
switch (input)
{
- case -1:
+ case MENU_B_PRESSED:
case 8:
PlaySE(SE_SELECT);
sub_812719C(taskId);
break;
- case -2:
+ case MENU_NOTHING_CHOSEN:
break;
default:
PlaySE(SE_SELECT);
@@ -933,13 +933,13 @@ void sub_812764C(u8 taskId)
data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
- input = ListMenuHandleInputGetItemId(data[13]);
+ input = ListMenu_ProcessInput(data[13]);
ListMenuGetScrollAndRow(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
switch (input)
{
- case -1:
+ case LIST_NOTHING_CHOSEN:
break;
- case -2:
+ case LIST_B_PRESSED:
PlaySE(SE_SELECT);
SecretBasePC_SelectedDecorActions[data[11]][1](taskId);
break;
diff --git a/src/dragon.c b/src/dragon.c
index 4a2ac1c51..9b39a8a30 100644
--- a/src/dragon.c
+++ b/src/dragon.c
@@ -5,8 +5,6 @@
#include "trig.h"
#include "constants/rgb.h"
-extern u16 gUnknown_0203A100[];
-
void sub_8113064(struct Sprite *);
void sub_81131B4(struct Sprite *);
void sub_8113224(struct Sprite *);
@@ -17,6 +15,8 @@ static void sub_81134B8(u8);
static void sub_8113574(struct Task *);
static void sub_811369C(struct Sprite *);
+EWRAM_DATA static u16 gUnknown_0203A100[7] = {0};
+
const union AnimCmd gUnknown_08596E60[] =
{
ANIMCMD_FRAME(0, 4),
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index c97e2d10f..4bf7701be 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -9,6 +9,7 @@
#include "evolution_graphics.h"
#include "gpu_regs.h"
#include "link.h"
+#include "link_rfu.h"
#include "m4a.h"
#include "main.h"
#include "menu.h"
@@ -16,10 +17,12 @@
#include "palette.h"
#include "pokedex.h"
#include "pokemon.h"
+#include "pokemon_summary_screen.h"
#include "scanline_effect.h"
#include "sound.h"
#include "sprite.h"
#include "string_util.h"
+#include "strings.h"
#include "task.h"
#include "text.h"
#include "text_window.h"
@@ -39,22 +42,18 @@ struct EvoInfo
u16 savedPalette[48];
};
+// EWRAM vars
static EWRAM_DATA struct EvoInfo *sEvoStructPtr = NULL;
static EWRAM_DATA u16 *sEvoMovingBgPtr = NULL;
+// IWRAM common
+void (*gCB2_AfterEvolution)(void);
+
#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
#define sEvoGraphicsTaskID gBattleCommunication[2]
-extern const struct WindowTemplate gUnknown_0833900C;
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
-// strings
-extern const u8 gText_CommunicationStandby5[];
-
-extern void ShowSelectMovePokemonSummaryScreen(struct Pokemon *party, u8 monId, u8 partyCount, void *CB2_ptr, u16 move);
-extern u8 sub_81C1B94(void);
-extern void sub_800E084(void);
-
// this file's functions
static void Task_EvolutionScene(u8 taskID);
static void Task_TradeEvolutionScene(u8 taskID);
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 7423216a4..b1291f0ce 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -90,7 +90,7 @@ static bool8 sub_808B618(void);
static bool8 PlayerIsAnimActive(void);
static bool8 PlayerCheckIfAnimFinishedOrInactive(void);
-static void PlayerRun(u8);
+static void PlayerRun(u8);
static void PlayerNotOnBikeCollide(u8);
static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8);
@@ -343,7 +343,7 @@ static bool8 TryInterruptEventObjectSpecialAnim(struct EventObject *playerEventO
u8 r5 = direction;
register u8 r6 asm("r6") = direction;
#endif
- //a very bad HACK
+ //a very bad HACK
if (EventObjectIsMovementOverridden(playerEventObj)
&& !EventObjectClearHeldMovementIfFinished(playerEventObj))
@@ -821,24 +821,14 @@ void SetPlayerAvatarTransitionFlags(u16 transitionFlags)
static void DoPlayerAvatarTransition(void)
{
u8 i;
- u32 flags = gPlayerAvatar.unk1;
+ u8 flags = gPlayerAvatar.unk1;
if (flags != 0)
{
for (i = 0; i < 8; i++, flags >>= 1)
{
-#ifdef NONMATCHING
if (flags & 1)
- {
gUnknown_084974B8[i](&gEventObjects[gPlayerAvatar.eventObjectId]);
- }
-#else
- if (flags & 1)
- {
- register void (*const *funcs)(struct EventObject *) asm("r0") = gUnknown_084974B8;
- funcs[i](&gEventObjects[gPlayerAvatar.eventObjectId]);
- }
-#endif
}
gPlayerAvatar.unk1 = 0;
}
@@ -1151,7 +1141,7 @@ void PlayerGetDestCoords(s16 *x, s16 *y)
u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y)
{
struct EventObject *object = &gEventObjects[gPlayerAvatar.eventObjectId];
-
+
if (object->heldMovementActive && !object->heldMovementFinished && !gSprites[object->spriteId].data[2])
{
*x = object->currentCoords.x;
@@ -1765,7 +1755,7 @@ static bool8 Fishing2(struct Task *task)
static bool8 Fishing3(struct Task *task)
{
AlignFishingAnimationFrames();
-
+
// Wait one second
task->tFrameCounter++;
if (task->tFrameCounter >= 60)
diff --git a/src/field_specials.c b/src/field_specials.c
index 0dc1bf18b..f2ebf2b8e 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -2603,9 +2603,9 @@ static void sub_813A46C(s32 itemIndex, bool8 onInit, struct ListMenu *list)
static void sub_813A4EC(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- s32 itemId = ListMenuHandleInputGetItemId(task->data[14]);
+ s32 input = ListMenu_ProcessInput(task->data[14]);
- switch (itemId)
+ switch (input)
{
case LIST_NOTHING_CHOSEN:
break;
@@ -2615,13 +2615,13 @@ static void sub_813A4EC(u8 taskId)
sub_813A570(taskId);
break;
default:
- gSpecialVar_Result = itemId;
+ gSpecialVar_Result = input;
PlaySE(SE_SELECT);
if (!task->data[6])
{
sub_813A570(taskId);
}
- else if (itemId == task->data[1] - 1)
+ else if (input == task->data[1] - 1)
{
sub_813A570(taskId);
}
diff --git a/src/field_weather.c b/src/field_weather.c
index f0615dabf..0db635c60 100644
--- a/src/field_weather.c
+++ b/src/field_weather.c
@@ -17,7 +17,7 @@
#include "trig.h"
#include "gpu_regs.h"
-#define MACRO1(color) ((((color) >> 1) & 0xF) | (((color) >> 2) & 0xF0) | (((color) >> 3) & 0xF00))
+#define DROUGHT_COLOR_INDEX(color) ((((color) >> 1) & 0xF) | (((color) >> 2) & 0xF0) | (((color) >> 3) & 0xF00))
enum
{
@@ -65,15 +65,21 @@ static void None_Init(void);
static void None_Main(void);
static u8 None_Finish(void);
-// EWRAM
EWRAM_DATA struct Weather gWeather = {0};
EWRAM_DATA static u8 sFieldEffectPaletteGammaTypes[32] = {0};
-// IWRAM bss
IWRAM_DATA static const u8 *sPaletteGammaTypes;
-// CONST
-extern const u16 gUnknown_0854014C[][4096];
+// The drought weather effect uses a precalculated color lookup table. Presumably this
+// is because the underlying color shift calculation is slow.
+const u16 sDroughtWeatherColors[][0x1000] = {
+ INCBIN_U16("graphics/weather/drought/colors_0.bin"),
+ INCBIN_U16("graphics/weather/drought/colors_1.bin"),
+ INCBIN_U16("graphics/weather/drought/colors_2.bin"),
+ INCBIN_U16("graphics/weather/drought/colors_3.bin"),
+ INCBIN_U16("graphics/weather/drought/colors_4.bin"),
+ INCBIN_U16("graphics/weather/drought/colors_5.bin"),
+};
// This is a pointer to gWeather. All code in this file accesses gWeather directly,
// while code in other field weather files accesses gWeather through this pointer.
@@ -513,7 +519,7 @@ static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex)
{
for (i = 0; i < 16; i++)
{
- gPlttBufferFaded[palOffset] = gUnknown_0854014C[gammaIndex][MACRO1(gPlttBufferUnfaded[palOffset])];
+ gPlttBufferFaded[palOffset] = sDroughtWeatherColors[gammaIndex][DROUGHT_COLOR_INDEX(gPlttBufferUnfaded[palOffset])];
palOffset++;
}
}
@@ -619,7 +625,7 @@ static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 bl
b1 = color1.b;
offset = ((b1 & 0x1E) << 7) | ((g1 & 0x1E) << 3) | ((r1 & 0x1E) >> 1);
- color2 = *(struct RGBColor *)&gUnknown_0854014C[gammaIndex][offset];
+ color2 = *(struct RGBColor *)&sDroughtWeatherColors[gammaIndex][offset];
r2 = color2.r;
g2 = color2.g;
b2 = color2.b;
diff --git a/src/graphics.c b/src/graphics.c
index 287a1f5d6..90b705d2f 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1023,8 +1023,8 @@ const u32 gBattleAnimSpriteSheet_262[] = INCBIN_U32("graphics/battle_anims/sprit
const u32 gBattleAnimSpritePalette_262[] = INCBIN_U32("graphics/battle_anims/sprites/262.gbapal.lz");
const u32 gContestNextTurnGfx[] = INCBIN_U32("graphics/contest/nextturn.4bpp.lz");
-const u8 gUnknown_08D8E9B4[] = INCBIN_U8("graphics/contest/nextturn_numbers.4bpp");
-const u8 gUnknown_08D8EA34[] = INCBIN_U8("graphics/contest/nextturn_random.4bpp");
+const u8 gContestNextTurnNumbersGfx[] = INCBIN_U8("graphics/contest/nextturn_numbers.4bpp");
+const u8 gContestNextTurnRandomGfx[] = INCBIN_U8("graphics/contest/nextturn_random.4bpp");
const u32 gBattleAnimSpriteSheet_264[] = INCBIN_U32("graphics/battle_anims/sprites/264.4bpp.lz");
const u32 gBattleAnimSpritePalette_264[] = INCBIN_U32("graphics/battle_anims/sprites/264.gbapal.lz");
diff --git a/src/ice.c b/src/ice.c
index 77b3700ef..d354fce7e 100644
--- a/src/ice.c
+++ b/src/ice.c
@@ -530,7 +530,7 @@ static void sub_810B6C4(struct Sprite *sprite)
{
s16 targetX, targetY, attackerX, attackerY;
s16 i;
-
+
sprite->oam.tileNum += 7;
targetX = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
targetY = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
@@ -811,7 +811,7 @@ void AnimIceBeamParticle(struct Sprite *sprite)
sprite->callback = StartAnimLinearTranslation;
}
-// Animates the ice crystals at the end of Ice Punch, Ice Beam, Tri Attack,
+// Animates the ice crystals at the end of Ice Punch, Ice Beam, Tri Attack,
// Weather Ball (Hail), Blizzard, and Powder Snow.
// arg 0: target x offset
// arg 1: target y offset
@@ -917,7 +917,7 @@ void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
sprite->pos2.x = 0;
sprite->data[0] = 128;
- tempVar = GetBattlerSide(gBattleAnimAttacker) != 0 ? 20 : -20;
+ tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20;
sprite->data[3] = Sin(sprite->data[0], tempVar);
sprite->data[4] = Cos(sprite->data[0], 0xF);
@@ -1069,7 +1069,7 @@ void AnimWaveFromCenterOfTarget(struct Sprite *sprite)
sprite->pos1.y += gBattleAnimArgs[1];
}
- sprite->data[0]++;
+ sprite->data[0]++;
}
else
{
@@ -1099,9 +1099,9 @@ void InitSwirlingFogAnim(struct Sprite *sprite)
else
{
SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
- if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->pos1.x -= gBattleAnimArgs[0];
- else
+ else
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
@@ -1109,18 +1109,18 @@ void InitSwirlingFogAnim(struct Sprite *sprite)
battler = gBattleAnimAttacker;
}
- else
+ else
{
if (gBattleAnimArgs[5] == 0)
{
InitSpritePosToAnimTarget(sprite, FALSE);
}
- else
+ else
{
SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
sprite->pos1.x -= gBattleAnimArgs[0];
- else
+ else
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
@@ -1130,7 +1130,7 @@ void InitSwirlingFogAnim(struct Sprite *sprite)
}
sprite->data[7] = battler;
- if (gBattleAnimArgs[5] == 0 || !IsDoubleBattle())
+ if (gBattleAnimArgs[5] == 0 || !IsDoubleBattle())
tempVar = 0x20;
else
tempVar = 0x40;
@@ -1161,7 +1161,7 @@ void AnimSwirlingFogAnim(struct Sprite *sprite)
sprite->pos2.y += Cos(sprite->data[5], -6);
if ((u16)(sprite->data[5] - 64) <= 0x7F)
- sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]);
else
sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]) + 1;
@@ -1195,7 +1195,7 @@ void AnimTask_Haze1(u8 taskId)
LoadBgTiles(subStruct.bgId, gWeatherFog1Tiles, 0x800, subStruct.tilesOffset);
sub_80A6D60(&subStruct, gBattleAnimFogTilemap, 0);
LoadPalette(&gUnknown_083970E8, subStruct.unk8 * 16, 32);
-
+
gTasks[taskId].func = AnimTask_Haze2;
}
@@ -1208,62 +1208,63 @@ void AnimTask_Haze2(u8 taskId)
switch (gTasks[taskId].data[12])
{
- case 0:
- if (++gTasks[taskId].data[10] == 4)
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[9]++;
- gTasks[taskId].data[11] = gUnknown_08595C5C[gTasks[taskId].data[9]];
-
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
- if (gTasks[taskId].data[11] == 9)
- {
- gTasks[taskId].data[12]++;
- gTasks[taskId].data[11] = 0;
- }
- }
- break;
- case 1:
- if (++gTasks[taskId].data[11] == 0x51)
+ case 0:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[9]++;
+ gTasks[taskId].data[11] = gUnknown_08595C5C[gTasks[taskId].data[9]];
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 9)
{
- gTasks[taskId].data[11] = 9;
gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
}
- break;
- case 2:
- if (++gTasks[taskId].data[10] == 4)
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 0x51)
+ {
+ gTasks[taskId].data[11] = 9;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]--;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
{
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[11]--;
-
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
- if (gTasks[taskId].data[11] == 0)
- {
- gTasks[taskId].data[12]++;
- gTasks[taskId].data[11] = 0;
- }
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
}
- break;
- case 3:
- sub_80A6B30(&subStruct);
- sub_80A6C68(1);
- sub_80A6C68(2);
-
- gTasks[taskId].data[12]++;
-
- // fall through
- case 4:
- if (!IsContest())
- SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
-
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- SetGpuReg(REG_OFFSET_BLDCNT, 0);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
- SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
- DestroyAnimVisualTask(taskId);
+ }
+ break;
+ case 3:
+ sub_80A6B30(&subStruct);
+ sub_80A6C68(1);
+ sub_80A6C68(2);
+
+ gTasks[taskId].data[12]++;
+
+ // fall through
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
}
-}
+}
// Throws the ball in Mist Ball.
// arg 0: initial x pixel offset
@@ -1301,7 +1302,7 @@ void AnimTask_LoadMistTiles(u8 taskId)
LoadBgTiles(subStruct.bgId, gWeatherFog1Tiles, 0x800, subStruct.tilesOffset);
sub_80A6D60(&subStruct, gBattleAnimFogTilemap, 0);
LoadPalette(&gUnknown_083970E8, subStruct.unk8 * 16, 32);
-
+
gTasks[taskId].data[15] = -1;
gTasks[taskId].func = AnimTask_OverlayFogTiles;
}
@@ -1315,54 +1316,55 @@ void AnimTask_OverlayFogTiles(u8 taskId)
switch (gTasks[taskId].data[12])
{
- case 0:
- gTasks[taskId].data[9] += 1;
- gTasks[taskId].data[11] = gUnknown_08595C88[gTasks[taskId].data[9]];
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 17 - gTasks[taskId].data[11]));
- if (gTasks[taskId].data[11] == 5)
+ case 0:
+ gTasks[taskId].data[9] += 1;
+ gTasks[taskId].data[11] = gUnknown_08595C88[gTasks[taskId].data[9]];
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 17 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 5)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 0x51)
+ {
+ gTasks[taskId].data[11] = 5;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] -= 1;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
{
gTasks[taskId].data[12]++;
gTasks[taskId].data[11] = 0;
}
- break;
- case 1:
- if (++gTasks[taskId].data[11] == 0x51)
- {
- gTasks[taskId].data[11] = 5;
- gTasks[taskId].data[12]++;
- }
- break;
- case 2:
- if (++gTasks[taskId].data[10] == 4)
- {
- gTasks[taskId].data[10] = 0;
- gTasks[taskId].data[11] -= 1;
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
- if (gTasks[taskId].data[11] == 0)
- {
- gTasks[taskId].data[12]++;
- gTasks[taskId].data[11] = 0;
- }
- }
- break;
- case 3:
- sub_80A6B30(&subStruct);
- sub_80A6C68(1);
- sub_80A6C68(2);
-
- gTasks[taskId].data[12]++;
-
- // fall through
- case 4:
- if (!IsContest())
- SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
-
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- SetGpuReg(REG_OFFSET_BLDCNT, 0);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
- SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
- DestroyAnimVisualTask(taskId);
+ }
+ break;
+ case 3:
+ sub_80A6B30(&subStruct);
+ sub_80A6C68(1);
+ sub_80A6C68(2);
+
+ gTasks[taskId].data[12]++;
+
+ // fall through
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
}
}
@@ -1390,7 +1392,7 @@ void InitPoisonGasCloudAnim(struct Sprite *sprite)
if ((sprite->data[7] & 0x8000) && !(gBattlerPositions[gBattleAnimAttacker] & 1))
sprite->subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1;
- sprite->data[6] = 1;
+ sprite->data[6] = 1;
}
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
@@ -1410,7 +1412,7 @@ void InitPoisonGasCloudAnim(struct Sprite *sprite)
sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[4];
sprite->data[7] |= GetBattlerSpriteBGPriority(gBattleAnimTarget) << 8;
- }
+ }
if (IsContest())
{
@@ -1425,8 +1427,6 @@ void InitPoisonGasCloudAnim(struct Sprite *sprite)
void MovePoisonGasCloud(struct Sprite *sprite)
{
int value;
- register s16 value2 asm("r5");
- int unused;
switch (sprite->data[7] & 0xFF)
{
@@ -1441,8 +1441,7 @@ void MovePoisonGasCloud(struct Sprite *sprite)
if (sprite->data[0] <= 0)
{
- value2 = 80;
- sprite->data[0] = value2;
+ sprite->data[0] = 80;
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = sprite->pos1.x;
@@ -1450,10 +1449,12 @@ void MovePoisonGasCloud(struct Sprite *sprite)
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = sprite->pos1.y + 29;
sprite->data[7]++;
- if (!IsContest() && gBattlerPositions[gBattleAnimTarget] & 1)
+ if (IsContest())
+ sprite->data[5] = 80;
+ else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER)
sprite->data[5] = 204;
else
- sprite->data[5] = value2;
+ sprite->data[5] = 80;
sprite->pos2.y = 0;
value = gSineTable[sprite->data[5]];
@@ -1490,13 +1491,13 @@ void MovePoisonGasCloud(struct Sprite *sprite)
if (sprite->data[0] <= 0)
{
- asm("mov r5, #0"); // unused local variable?
- unused = 0;
sprite->data[0] = 0x300;
sprite->data[1] = sprite->pos1.x += sprite->pos2.x;
sprite->data[3] = sprite->pos1.y += sprite->pos2.y;
sprite->data[4] = sprite->pos1.y + 4;
- if (!IsContest() && gBattlerPositions[gBattleAnimTarget] & 1)
+ if (IsContest())
+ sprite->data[2] = -0x10;
+ else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER)
sprite->data[2] = 0x100;
else
sprite->data[2] = -0x10;
@@ -1535,43 +1536,43 @@ void AnimTask_Hail2(u8 taskId)
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
- case 0:
- if (++task->data[4] > 2)
- {
- task->data[4] = 0;
- task->data[5] = 0;
- task->data[2] = 0;
- task->data[0]++;
- }
- break;
- case 1:
- if (task->data[5] == 0)
+ case 0:
+ if (++task->data[4] > 2)
+ {
+ task->data[4] = 0;
+ task->data[5] = 0;
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ if (task->data[5] == 0)
+ {
+ if (GenerateHailParticle(task->data[3], task->data[2], taskId, 1))
+ task->data[1]++;
+
+ if (++task->data[2] == 3)
{
- if (GenerateHailParticle(task->data[3], task->data[2], taskId, 1))
- task->data[1]++;
-
- if (++task->data[2] == 3)
- {
- if (++task->data[3] == 10)
- task->data[0]++;
- else
- task->data[0]--;
- }
+ if (++task->data[3] == 10)
+ task->data[0]++;
else
- {
- task->data[5] = 1;
- }
-
+ task->data[0]--;
}
else
{
- task->data[5]--;
+ task->data[5] = 1;
}
- break;
- case 2:
- if (task->data[1] == 0)
- DestroyAnimVisualTask(taskId);
- break;
+
+ }
+ else
+ {
+ task->data[5]--;
+ }
+ break;
+ case 2:
+ if (task->data[1] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
}
}
@@ -1587,7 +1588,7 @@ bool8 GenerateHailParticle(u8 a, u8 b, u8 taskId, u8 c)
u8 spriteId;
// struct Sprite *sprite;
s16 spriteX;
-
+
if (unk != 2)
{
battler = GetBattlerAtPosition(hailData->unk2);
@@ -1820,7 +1821,7 @@ void AnimHailBegin(struct Sprite *sprite)
if (sprite->data[0] == 1 && sprite->data[5] == 0)
{
- spriteId = CreateSprite(&gUnknown_08595B68,
+ spriteId = CreateSprite(&gUnknown_08595B68,
sprite->data[3], sprite->data[4], sprite->subpriority);
sprite->data[0] = spriteId;
@@ -1935,6 +1936,6 @@ void AnimTask_GetRolloutCounter(u8 taskId)
{
u8 arg = gBattleAnimArgs[0];
- gBattleAnimArgs[arg] = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer - 1;
+ gBattleAnimArgs[arg] = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer - 1;
DestroyAnimVisualTask(taskId);
}
diff --git a/src/item_menu.c b/src/item_menu.c
index a220f02ef..24a50aa9a 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -1102,7 +1102,7 @@ void Task_BagMenu(u8 taskId)
}
else
{
- int listPosition = ListMenuHandleInputGetItemId(data[0]);
+ int listPosition = ListMenu_ProcessInput(data[0]);
ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
switch (listPosition)
{
@@ -1304,7 +1304,7 @@ void bag_menu_swap_items(u8 taskId)
void sub_81AC3C0(u8 taskId)
{
s16* data = gTasks[taskId].data;
- int r7;
+ int input;
if (sub_81221EC() != TRUE)
{
@@ -1316,15 +1316,15 @@ void sub_81AC3C0(u8 taskId)
}
else
{
- r7 = ListMenuHandleInputGetItemId(data[0]);
+ input = ListMenu_ProcessInput(data[0]);
ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
sub_80D4FC8(0);
sub_80D4FEC(gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
- switch (r7)
+ switch (input)
{
- case -1:
+ case LIST_NOTHING_CHOSEN:
break;
- case -2:
+ case LIST_B_PRESSED:
PlaySE(SE_SELECT);
if (gMain.newKeys & A_BUTTON)
sub_81AC498(taskId);
@@ -1546,9 +1546,9 @@ void Task_HandleInBattleItemMenuInput(u8 taskId)
s8 r4 = Menu_ProcessInputNoWrap();
switch (r4)
{
- case -2:
+ case MENU_NOTHING_CHOSEN:
break;
- case -1:
+ case MENU_B_PRESSED:
PlaySE(SE_SELECT);
gUnknown_08613FB4[4].func.void_u8(taskId);
break;
diff --git a/src/item_use.c b/src/item_use.c
index 6a7f6cec0..0ea5f6acf 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -38,8 +38,6 @@
#include "constants/songs.h"
#include "constants/vars.h"
-extern void(*gUnknown_0203A0F4)(u8 taskId);
-extern void (*gUnknown_03006328)(u8, TaskFunc);
extern void unknown_ItemMenu_Confirm(u8 taskId);
extern void sub_81C5B14(u8 taskId);
extern void ScriptUnfreezeEventObjects(void);
@@ -100,6 +98,9 @@ void sub_80FDBEC(void);
bool8 sub_80FDE2C(void);
void ItemUseOutOfBattle_CannotUse(u8 taskId);
+// EWRAM variables
+EWRAM_DATA static void(*gUnknown_0203A0F4)(u8 taskId) = NULL;
+
// .rodata
static const MainCallback gUnknown_085920D8[] =
diff --git a/src/learn_move.c b/src/learn_move.c
index 4db83861e..7a6916013 100644
--- a/src/learn_move.c
+++ b/src/learn_move.c
@@ -638,7 +638,7 @@ static void HideSpritesAndPrintTeachText(bool8 a)
static void HandleInput(bool8 showContest)
{
- s32 itemId = ListMenuHandleInputGetItemId(sLearnMoveStruct->listMenuTask);
+ s32 itemId = ListMenu_ProcessInput(sLearnMoveStruct->listMenuTask);
ListMenuGetScrollAndRow(sLearnMoveStruct->listMenuTask, &sLearnMoveStruct2.listOffset, &sLearnMoveStruct2.listRow);
switch (itemId)
diff --git a/src/list_menu.c b/src/list_menu.c
index 2476fae26..7a9547661 100644
--- a/src/list_menu.c
+++ b/src/list_menu.c
@@ -334,7 +334,7 @@ s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenu
sMysteryGiftLinkMenu.state = 1;
break;
case 1:
- sMysteryGiftLinkMenu.currItemId = ListMenuHandleInputGetItemId(sMysteryGiftLinkMenu.listTaskId);
+ sMysteryGiftLinkMenu.currItemId = ListMenu_ProcessInput(sMysteryGiftLinkMenu.listTaskId);
if (gMain.newKeys & A_BUTTON)
{
sMysteryGiftLinkMenu.state = 2;
@@ -406,7 +406,7 @@ u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenu
return taskId;
}
-s32 ListMenuHandleInputGetItemId(u8 listTaskId)
+s32 ListMenu_ProcessInput(u8 listTaskId)
{
struct ListMenu *list = (void*) gTasks[listTaskId].data;
diff --git a/src/m4a.c b/src/m4a.c
new file mode 100644
index 000000000..7b4441ca4
--- /dev/null
+++ b/src/m4a.c
@@ -0,0 +1,1779 @@
+#include "gba/m4a_internal.h"
+
+extern const u8 gCgb3Vol[];
+
+#define BSS_CODE __attribute__((section(".bss.code")))
+
+BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0};
+
+struct SoundInfo gSoundInfo;
+struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES];
+struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES];
+void *gMPlayJumpTable[36];
+struct CgbChannel gCgbChans[4];
+struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2];
+struct PokemonCrySong gPokemonCrySong;
+struct MusicPlayerInfo gMPlayInfo_BGM;
+struct MusicPlayerInfo gMPlayInfo_SE1;
+struct MusicPlayerInfo gMPlayInfo_SE2;
+struct MusicPlayerInfo gMPlayInfo_SE3;
+u8 gMPlayMemAccArea[0x10];
+
+u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
+{
+ u32 val1;
+ u32 val2;
+ u32 fineAdjustShifted = fineAdjust << 24;
+
+ if (key > 178)
+ {
+ key = 178;
+ fineAdjustShifted = 255 << 24;
+ }
+
+ val1 = gScaleTable[key];
+ val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4);
+
+ val2 = gScaleTable[key + 1];
+ val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4);
+
+ return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted));
+}
+
+void UnusedDummyFunc(void)
+{
+}
+
+void MPlayContinue(struct MusicPlayerInfo *mplayInfo)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aSoundInit(void)
+{
+ s32 i;
+
+ CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer));
+
+ SoundInit(&gSoundInfo);
+ MPlayExtender(gCgbChans);
+ m4aSoundMode(SOUND_MODE_DA_BIT_8
+ | SOUND_MODE_FREQ_13379
+ | (12 << SOUND_MODE_MASVOL_SHIFT)
+ | (5 << SOUND_MODE_MAXCHN_SHIFT));
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ {
+ struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info;
+ MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8);
+ mplayInfo->unk_B = gMPlayTable[i].unk_A;
+ mplayInfo->memAccArea = gMPlayMemAccArea;
+ }
+
+ memcpy(&gPokemonCrySong, &gPokemonCrySongTemplate, sizeof(struct PokemonCrySong));
+
+ for (i = 0; i < MAX_POKEMON_CRIES; i++)
+ {
+ struct MusicPlayerInfo *mplayInfo = &gPokemonCryMusicPlayers[i];
+ struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2];
+ MPlayOpen(mplayInfo, track, 2);
+ track->chan = 0;
+ }
+}
+
+void m4aSoundMain(void)
+{
+ SoundMain();
+}
+
+void m4aSongNumStart(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ MPlayStart(mplay->info, song->header);
+}
+
+void m4aSongNumStartOrChange(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader != song->header)
+ {
+ MPlayStart(mplay->info, song->header);
+ }
+ else
+ {
+ if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0
+ || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE))
+ {
+ MPlayStart(mplay->info, song->header);
+ }
+ }
+}
+
+void m4aSongNumStartOrContinue(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader != song->header)
+ MPlayStart(mplay->info, song->header);
+ else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0)
+ MPlayStart(mplay->info, song->header);
+ else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)
+ MPlayContinue(mplay->info);
+}
+
+void m4aSongNumStop(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader == song->header)
+ m4aMPlayStop(mplay->info);
+}
+
+void m4aSongNumContinue(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader == song->header)
+ MPlayContinue(mplay->info);
+}
+
+void m4aMPlayAllStop(void)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ m4aMPlayStop(gMPlayTable[i].info);
+
+ for (i = 0; i < MAX_POKEMON_CRIES; i++)
+ m4aMPlayStop(&gPokemonCryMusicPlayers[i]);
+}
+
+void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo)
+{
+ MPlayContinue(mplayInfo);
+}
+
+void m4aMPlayAllContinue(void)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ MPlayContinue(gMPlayTable[i].info);
+
+ for (i = 0; i < MAX_POKEMON_CRIES; i++)
+ MPlayContinue(&gPokemonCryMusicPlayers[i]);
+}
+
+void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ MPlayFadeOut(mplayInfo, speed);
+}
+
+void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN;
+ mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 trackCount = mplayInfo->trackCount;
+ struct MusicPlayerTrack *track = mplayInfo->tracks;
+
+ while (trackCount > 0)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ if (track->flags & MPT_FLG_START)
+ {
+ Clear64byte(track);
+ track->flags = MPT_FLG_EXIST;
+ track->bendRange = 2;
+ track->volX = 64;
+ track->lfoSpeed = 22;
+ track->tone.type = 1;
+ }
+ }
+
+ trackCount--;
+ track++;
+ }
+}
+
+void MPlayExtender(struct CgbChannel *cgbChans)
+{
+ struct SoundInfo *soundInfo;
+ u32 ident;
+
+ REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
+ | SOUND_4_ON
+ | SOUND_3_ON
+ | SOUND_2_ON
+ | SOUND_1_ON;
+ REG_SOUNDCNT_L = 0; // set master volume to zero
+ REG_NR12 = 0x8;
+ REG_NR22 = 0x8;
+ REG_NR42 = 0x8;
+ REG_NR14 = 0x80;
+ REG_NR24 = 0x80;
+ REG_NR44 = 0x80;
+ REG_NR30 = 0;
+ REG_NR50 = 0x77;
+
+ soundInfo = SOUND_INFO_PTR;
+
+ ident = soundInfo->ident;
+
+ if (ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ gMPlayJumpTable[8] = ply_memacc;
+ gMPlayJumpTable[17] = ply_lfos;
+ gMPlayJumpTable[19] = ply_mod;
+ gMPlayJumpTable[28] = ply_xcmd;
+ gMPlayJumpTable[29] = ply_endtie;
+ gMPlayJumpTable[30] = SampleFreqSet;
+ gMPlayJumpTable[31] = TrackStop;
+ gMPlayJumpTable[32] = FadeOutBody;
+ gMPlayJumpTable[33] = TrkVolPitSet;
+
+ soundInfo->cgbChans = (struct CgbChannel *)cgbChans;
+ soundInfo->CgbSound = CgbSound;
+ soundInfo->CgbOscOff = CgbOscOff;
+ soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq;
+ soundInfo->maxLines = MAX_LINES;
+
+ CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4);
+
+ cgbChans[0].ty = 1;
+ cgbChans[0].panMask = 0x11;
+ cgbChans[1].ty = 2;
+ cgbChans[1].panMask = 0x22;
+ cgbChans[2].ty = 3;
+ cgbChans[2].panMask = 0x44;
+ cgbChans[3].ty = 4;
+ cgbChans[3].panMask = 0x88;
+
+ soundInfo->ident = ident;
+}
+
+void MusicPlayerJumpTableCopy(void)
+{
+ asm("swi 0x2A");
+}
+
+void ClearChain(void *x)
+{
+ void (*func)(void *) = *(&gMPlayJumpTable[34]);
+ func(x);
+}
+
+void Clear64byte(void *x)
+{
+ void (*func)(void *) = *(&gMPlayJumpTable[35]);
+ func(x);
+}
+
+void SoundInit(struct SoundInfo *soundInfo)
+{
+ soundInfo->ident = 0;
+
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
+ REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
+ | SOUND_4_ON
+ | SOUND_3_ON
+ | SOUND_2_ON
+ | SOUND_1_ON;
+ REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
+ | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
+ | SOUND_ALL_MIX_FULL;
+ REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
+
+ REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
+ REG_DMA1DAD = (s32)&REG_FIFO_A;
+ REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
+ REG_DMA2DAD = (s32)&REG_FIFO_B;
+
+ SOUND_INFO_PTR = soundInfo;
+ CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
+
+ soundInfo->maxChans = 8;
+ soundInfo->masterVolume = 15;
+ soundInfo->plynote = (u32)ply_note;
+ soundInfo->CgbSound = DummyFunc;
+ soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
+ soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
+ soundInfo->ExtVolPit = (u32)DummyFunc;
+
+ MPlayJumpTableCopy(gMPlayJumpTable);
+
+ soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
+
+ SampleFreqSet(SOUND_MODE_FREQ_13379);
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void SampleFreqSet(u32 freq)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ freq = (freq & 0xF0000) >> 16;
+ soundInfo->freq = freq;
+ soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
+ soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
+
+ // LCD refresh rate 59.7275Hz
+ soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000;
+
+ // CPU frequency 16.78Mhz
+ soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1;
+
+ // Turn off timer 0.
+ REG_TM0CNT_H = 0;
+
+ // cycles per LCD fresh 280896
+ REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank);
+
+ m4aSoundVSyncOn();
+
+ while (*(vu8 *)REG_ADDR_VCOUNT == 159)
+ ;
+
+ while (*(vu8 *)REG_ADDR_VCOUNT != 159)
+ ;
+
+ REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK;
+}
+
+void m4aSoundMode(u32 mode)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ u32 temp;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL);
+
+ if (temp)
+ soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL;
+
+ temp = mode & SOUND_MODE_MAXCHN;
+
+ if (temp)
+ {
+ struct SoundChannel *chan;
+
+ soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
+
+ temp = MAX_DIRECTSOUND_CHANNELS;
+ chan = &soundInfo->chans[0];
+
+ while (temp != 0)
+ {
+ chan->status = 0;
+ temp--;
+ chan++;
+ }
+ }
+
+ temp = mode & SOUND_MODE_MASVOL;
+
+ if (temp)
+ soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT;
+
+ temp = mode & SOUND_MODE_DA_BIT;
+
+ if (temp)
+ {
+ temp = (temp & 0x300000) >> 14;
+ REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp;
+ }
+
+ temp = mode & SOUND_MODE_FREQ;
+
+ if (temp)
+ {
+ m4aSoundVSyncOff();
+ SampleFreqSet(temp);
+ }
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void SoundClear(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ s32 i;
+ void *chan;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ i = MAX_DIRECTSOUND_CHANNELS;
+ chan = &soundInfo->chans[0];
+
+ while (i > 0)
+ {
+ ((struct SoundChannel *)chan)->status = 0;
+ i--;
+ chan = (void *)((s32)chan + sizeof(struct SoundChannel));
+ }
+
+ chan = soundInfo->cgbChans;
+
+ if (chan)
+ {
+ i = 1;
+
+ while (i <= 4)
+ {
+ soundInfo->CgbOscOff(i);
+ ((struct CgbChannel *)chan)->sf = 0;
+ i++;
+ chan = (void *)((s32)chan + sizeof(struct CgbChannel));
+ }
+ }
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void m4aSoundVSyncOff(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
+ {
+ soundInfo->ident += 10;
+
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
+
+ CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
+ }
+}
+
+void m4aSoundVSyncOn(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ u32 ident = soundInfo->ident;
+
+ if (ident == ID_NUMBER)
+ return;
+
+ REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
+ REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
+
+ soundInfo->pcmDmaCounter = 0;
+ soundInfo->ident = ident - 10;
+}
+
+void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount)
+{
+ struct SoundInfo *soundInfo;
+
+ if (trackCount == 0)
+ return;
+
+ if (trackCount > MAX_MUSICPLAYER_TRACKS)
+ trackCount = MAX_MUSICPLAYER_TRACKS;
+
+ soundInfo = SOUND_INFO_PTR;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ Clear64byte(mplayInfo);
+
+ mplayInfo->tracks = tracks;
+ mplayInfo->trackCount = trackCount;
+ mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
+
+ while (trackCount != 0)
+ {
+ tracks->flags = 0;
+ trackCount--;
+ tracks++;
+ }
+
+ if (soundInfo->func != 0)
+ {
+ mplayInfo->func = soundInfo->func;
+ mplayInfo->intp = soundInfo->intp;
+ soundInfo->func = 0;
+ }
+
+ soundInfo->intp = (u32)mplayInfo;
+ soundInfo->func = (u32)MPlayMain;
+ soundInfo->ident = ID_NUMBER;
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader)
+{
+ s32 i;
+ u8 unk_B;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ unk_B = mplayInfo->unk_B;
+
+ if (!unk_B
+ || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START))
+ && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0
+ || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE)))
+ || (mplayInfo->priority <= songHeader->priority))
+ {
+ mplayInfo->ident++;
+ mplayInfo->status = 0;
+ mplayInfo->songHeader = songHeader;
+ mplayInfo->tone = songHeader->tone;
+ mplayInfo->priority = songHeader->priority;
+ mplayInfo->clock = 0;
+ mplayInfo->tempoD = 150;
+ mplayInfo->tempoI = 150;
+ mplayInfo->tempoU = 0x100;
+ mplayInfo->tempoC = 0;
+ mplayInfo->fadeOI = 0;
+
+ i = 0;
+ track = mplayInfo->tracks;
+
+ while (i < songHeader->trackCount && i < mplayInfo->trackCount)
+ {
+ TrackStop(mplayInfo, track);
+ track->flags = MPT_FLG_EXIST | MPT_FLG_START;
+ track->chan = 0;
+ track->cmdPtr = songHeader->part[i];
+ i++;
+ track++;
+ }
+
+ while (i < mplayInfo->trackCount)
+ {
+ TrackStop(mplayInfo, track);
+ track->flags = 0;
+ i++;
+ track++;
+ }
+
+ if (songHeader->reverb & 0x80)
+ m4aSoundMode(songHeader->reverb);
+
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 i;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+ mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ TrackStop(mplayInfo, track);
+ i--;
+ track++;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 i;
+ struct MusicPlayerTrack *track;
+ u16 fadeOV;
+#ifdef NONMATCHING
+ u16 mask;
+#else
+ register u16 mask asm("r2");
+#endif // NONMATCHING
+
+ if (mplayInfo->fadeOI == 0)
+ return;
+
+ mplayInfo->fadeOC--;
+ mask = 0xFFFF;
+
+ if (mplayInfo->fadeOC != 0)
+ return;
+
+ mplayInfo->fadeOC = mplayInfo->fadeOI;
+
+ if (mplayInfo->fadeOV & FADE_IN)
+ {
+ mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT);
+
+ if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT))
+ {
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
+ mplayInfo->fadeOI = 0;
+ }
+ }
+ else
+ {
+ mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT);
+
+ if ((s16)(mplayInfo->fadeOV & mask) <= 0)
+ {
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ u32 val;
+
+ TrackStop(mplayInfo, track);
+
+ val = TEMPORARY_FADE;
+ fadeOV = mplayInfo->fadeOV;
+ val &= fadeOV;
+
+ if (!val)
+ track->flags = 0;
+
+ i--;
+ track++;
+ }
+
+ if (mplayInfo->fadeOV & TEMPORARY_FADE)
+ mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
+ else
+ mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
+
+ mplayInfo->fadeOI = 0;
+ return;
+ }
+ }
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ fadeOV = mplayInfo->fadeOV;
+
+ track->volX = (fadeOV >> FADE_VOL_SHIFT);
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+
+ i--;
+ track++;
+ }
+}
+
+void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ if (track->flags & MPT_FLG_VOLSET)
+ {
+ s32 x;
+ s32 y;
+
+ x = (u32)(track->vol * track->volX) >> 5;
+
+ if (track->modT == 1)
+ x = (u32)(x * (track->modM + 128)) >> 7;
+
+ y = 2 * track->pan + track->panX;
+
+ if (track->modT == 2)
+ y += track->modM;
+
+ if (y < -128)
+ y = -128;
+ else if (y > 127)
+ y = 127;
+
+ track->volMR = (u32)((y + 128) * x) >> 8;
+ track->volML = (u32)((127 - y) * x) >> 8;
+ }
+
+ if (track->flags & MPT_FLG_PITSET)
+ {
+ s32 bend = track->bend * track->bendRange;
+ s32 x = (track->tune + bend)
+ * 4
+ + (track->keyShift << 8)
+ + (track->keyShiftX << 8)
+ + track->pitX;
+
+ if (track->modT == 0)
+ x += 16 * track->modM;
+
+ track->keyM = x >> 8;
+ track->pitM = x;
+ }
+
+ track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET);
+}
+
+u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust)
+{
+ if (chanNum == 4)
+ {
+ if (key <= 20)
+ {
+ key = 0;
+ }
+ else
+ {
+ key -= 21;
+ if (key > 59)
+ key = 59;
+ }
+
+ return gNoiseTable[key];
+ }
+ else
+ {
+ s32 val1;
+ s32 val2;
+
+ if (key <= 35)
+ {
+ fineAdjust = 0;
+ key = 0;
+ }
+ else
+ {
+ key -= 36;
+ if (key > 130)
+ {
+ key = 130;
+ fineAdjust = 255;
+ }
+ }
+
+ val1 = gCgbScaleTable[key];
+ val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4);
+
+ val2 = gCgbScaleTable[key + 1];
+ val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4);
+
+ return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048;
+ }
+}
+
+void CgbOscOff(u8 chanNum)
+{
+ switch (chanNum)
+ {
+ case 1:
+ REG_NR12 = 8;
+ REG_NR14 = 0x80;
+ break;
+ case 2:
+ REG_NR22 = 8;
+ REG_NR24 = 0x80;
+ break;
+ case 3:
+ REG_NR30 = 0;
+ break;
+ default:
+ REG_NR42 = 8;
+ REG_NR44 = 0x80;
+ }
+}
+
+static inline int CgbPan(struct CgbChannel *chan)
+{
+ u32 rightVolume = chan->rightVolume;
+ u32 leftVolume = chan->leftVolume;
+
+ if ((rightVolume = (u8)rightVolume) >= (leftVolume = (u8)leftVolume))
+ {
+ if (rightVolume / 2 >= leftVolume)
+ {
+ chan->pan = 0x0F;
+ return 1;
+ }
+ }
+ else
+ {
+ if (leftVolume / 2 >= rightVolume)
+ {
+ chan->pan = 0xF0;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+void CgbModVol(struct CgbChannel *chan)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ if ((soundInfo->mode & 1) || !CgbPan(chan))
+ {
+ chan->pan = 0xFF;
+ chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ }
+ 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.
+ asm("" : : : "memory");
+
+ chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ if (chan->eg > 15)
+ chan->eg = 15;
+ }
+
+ chan->sg = (chan->eg * chan->su + 15) >> 4;
+ chan->pan &= chan->panMask;
+}
+
+void CgbSound(void)
+{
+ s32 ch;
+ struct CgbChannel *channels;
+ s32 evAdd;
+ s32 prevC15;
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ vu8 *nrx0ptr;
+ vu8 *nrx1ptr;
+ vu8 *nrx2ptr;
+ vu8 *nrx3ptr;
+ vu8 *nrx4ptr;
+
+ // Most comparision operations that cast to s8 perform 'and' by 0xFF.
+ int mask = 0xff;
+
+ if (soundInfo->c15)
+ soundInfo->c15--;
+ else
+ soundInfo->c15 = 14;
+
+ for (ch = 1, channels = soundInfo->cgbChans; ch <= 4; ch++, channels++)
+ {
+ if (!(channels->sf & 0xc7))
+ continue;
+
+ switch (ch)
+ {
+ case 1:
+ nrx0ptr = (vu8 *)(REG_ADDR_NR10);
+ nrx1ptr = (vu8 *)(REG_ADDR_NR11);
+ nrx2ptr = (vu8 *)(REG_ADDR_NR12);
+ nrx3ptr = (vu8 *)(REG_ADDR_NR13);
+ nrx4ptr = (vu8 *)(REG_ADDR_NR14);
+ break;
+ case 2:
+ nrx0ptr = (vu8 *)(REG_ADDR_NR10+1);
+ nrx1ptr = (vu8 *)(REG_ADDR_NR21);
+ nrx2ptr = (vu8 *)(REG_ADDR_NR22);
+ nrx3ptr = (vu8 *)(REG_ADDR_NR23);
+ nrx4ptr = (vu8 *)(REG_ADDR_NR24);
+ break;
+ case 3:
+ nrx0ptr = (vu8 *)(REG_ADDR_NR30);
+ nrx1ptr = (vu8 *)(REG_ADDR_NR31);
+ nrx2ptr = (vu8 *)(REG_ADDR_NR32);
+ nrx3ptr = (vu8 *)(REG_ADDR_NR33);
+ nrx4ptr = (vu8 *)(REG_ADDR_NR34);
+ break;
+ default:
+ nrx0ptr = (vu8 *)(REG_ADDR_NR30+1);
+ nrx1ptr = (vu8 *)(REG_ADDR_NR41);
+ nrx2ptr = (vu8 *)(REG_ADDR_NR42);
+ nrx3ptr = (vu8 *)(REG_ADDR_NR43);
+ nrx4ptr = (vu8 *)(REG_ADDR_NR44);
+ break;
+ }
+
+ prevC15 = soundInfo->c15;
+ evAdd = *nrx2ptr;
+
+ if (channels->sf & 0x80)
+ {
+ if (!(channels->sf & 0x40))
+ {
+ channels->sf = 3;
+ channels->mo = 3;
+ CgbModVol(channels);
+ switch (ch)
+ {
+ case 1:
+ *nrx0ptr = channels->sw;
+ // fallthrough
+ case 2:
+ *nrx1ptr = ((u32)channels->wp << 6) + channels->le;
+ goto loc_82E0E30;
+ case 3:
+ if ((u32)channels->wp != channels->cp)
+ {
+ *nrx0ptr = 0x40;
+ REG_WAVE_RAM0 = channels->wp[0];
+ REG_WAVE_RAM1 = channels->wp[1];
+ REG_WAVE_RAM2 = channels->wp[2];
+ REG_WAVE_RAM3 = channels->wp[3];
+ channels->cp = (u32)channels->wp;
+ }
+ *nrx0ptr = 0;
+ *nrx1ptr = channels->le;
+ if (channels->le)
+ channels->n4 = -64;
+ else
+ channels->n4 = -128;
+ break;
+ default:
+ *nrx1ptr = channels->le;
+ *nrx3ptr = (u32)channels->wp << 3;
+ loc_82E0E30:
+ evAdd = channels->at + 8;
+ if (channels->le)
+ channels->n4 = 64;
+ else
+ channels->n4 = 0;
+ break;
+ }
+ channels->ec = channels->at;
+ if ((s8)(channels->at & mask))
+ {
+ channels->ev = 0;
+ goto EC_MINUS;
+ }
+ else
+ {
+ goto loc_82E0F96;
+ }
+ }
+ else
+ {
+ goto loc_82E0E82;
+ }
+ }
+ else if (channels->sf & 0x04)
+ {
+ channels->echoLength--;
+ if ((s8)(channels->echoLength & mask) <= 0)
+ {
+ loc_82E0E82:
+ CgbOscOff(ch);
+ channels->sf = 0;
+ goto LAST_LABEL;
+ }
+ goto loc_82E0FD6;
+ }
+ else if ((channels->sf & 0x40) && (channels->sf & 0x03))
+ {
+ channels->sf &= 0xfc;
+ channels->ec = channels->re;
+ if ((s8)(channels->re & mask))
+ {
+ channels->mo |= 1;
+ if (ch != 3)
+ {
+ evAdd = channels->re;
+ }
+ goto EC_MINUS;
+ }
+ else
+ {
+ goto loc_82E0F02;
+ }
+ }
+ else
+ {
+ loc_82E0ED0:
+ if (channels->ec == 0)
+ {
+ if (ch == 3)
+ {
+ channels->mo |= 1;
+ }
+ CgbModVol(channels);
+ if ((channels->sf & 0x3) == 0)
+ {
+ channels->ev--;
+ if ((s8)(channels->ev & mask) <= 0)
+ {
+ loc_82E0F02:
+ channels->ev = ((channels->eg * channels->echoVolume) + 0xFF) >> 8;
+ if (channels->ev)
+ {
+ channels->sf |= 0x4;
+ channels->mo |= 1;
+ if (ch != 3)
+ {
+ evAdd = 8;
+ }
+ goto loc_82E0FD6;
+ }
+ else
+ {
+ goto loc_82E0E82;
+ }
+ }
+ else
+ {
+ channels->ec = channels->re;
+ }
+ }
+ else if ((channels->sf & 0x3) == 1)
+ {
+ loc_82E0F3A:
+ channels->ev = channels->sg;
+ channels->ec = 7;
+ }
+ else if ((channels->sf & 0x3) == 2)
+ {
+ int ev, sg;
+
+ channels->ev--;
+ ev = (s8)(channels->ev & mask);
+ sg = (s8)(channels->sg);
+ if (ev <= sg)
+ {
+ loc_82E0F5A:
+ if (channels->su == 0)
+ {
+ channels->sf &= 0xfc;
+ goto loc_82E0F02;
+ }
+ else
+ {
+ channels->sf--;
+ channels->mo |= 1;
+ if (ch != 3)
+ {
+ evAdd = 8;
+ }
+ goto loc_82E0F3A;
+ }
+ }
+ else
+ {
+ channels->ec = channels->de;
+ }
+ }
+ else
+ {
+ channels->ev++;
+ if ((u8)(channels->ev & mask) >= channels->eg)
+ {
+ loc_82E0F96:
+ channels->sf--;
+ channels->ec = channels->de;
+ if ((u8)(channels->ec & mask))
+ {
+ channels->mo |= 1;
+ channels->ev = channels->eg;
+ if (ch != 3)
+ {
+ evAdd = channels->de;
+ }
+ }
+ else
+ {
+ goto loc_82E0F5A;
+ }
+ }
+ else
+ {
+ channels->ec = channels->at;
+ }
+ }
+ }
+ }
+
+ EC_MINUS:
+ channels->ec--;
+ if (prevC15 == 0)
+ {
+ prevC15--;
+ goto loc_82E0ED0;
+ }
+
+ loc_82E0FD6:
+ if (channels->mo & 0x2)
+ {
+ if (ch < 4 && (channels->ty & 0x08))
+ {
+ int biasH = REG_SOUNDBIAS_H;
+
+ if (biasH < 64)
+ {
+ channels->fr = (channels->fr + 2) & 0x7fc;
+ }
+ else if (biasH < 128)
+ {
+ channels->fr = (channels->fr + 1) & 0x7fe;
+ }
+ }
+ if (ch != 4)
+ {
+ *nrx3ptr = channels->fr;
+ }
+ else
+ {
+ *nrx3ptr = (*nrx3ptr & 0x08) | channels->fr;
+ }
+ channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->fr) + 1));
+ *nrx4ptr = (s8)(channels->n4 & mask);
+ }
+
+ if (channels->mo & 1)
+ {
+ REG_NR51 = (REG_NR51 & ~channels->panMask) | channels->pan;
+ if (ch == 3)
+ {
+ *nrx2ptr = gCgb3Vol[channels->ev];
+ if (channels->n4 & 0x80)
+ {
+ *nrx0ptr = 0x80;
+ *nrx4ptr = channels->n4;
+ channels->n4 &= 0x7f;
+ }
+ }
+ else
+ {
+ evAdd &= 0xf;
+ *nrx2ptr = (channels->ev << 4) + evAdd;
+ *nrx4ptr = channels->n4 | 0x80;
+ if (ch == 1 && !(*nrx0ptr & 0x08))
+ {
+ *nrx4ptr = channels->n4 | 0x80;
+ }
+ }
+ }
+
+ LAST_LABEL:
+ channels->mo = 0;
+ }
+}
+
+void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->tempoU = tempo;
+ mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->volX = volume / 4;
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->keyShiftX = pitch >> 8;
+ track->pitX = pitch;
+ track->flags |= MPT_FLG_PITCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->panX = pan;
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void ClearModM(struct MusicPlayerTrack *track)
+{
+ track->lfoSpeedC = 0;
+ track->modM = 0;
+
+ if (track->modT == 0)
+ track->flags |= MPT_FLG_PITCHG;
+ else
+ track->flags |= MPT_FLG_VOLCHG;
+}
+
+void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->mod = modDepth;
+
+ if (!track->mod)
+ ClearModM(track);
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->lfoSpeed = lfoSpeed;
+
+ if (!track->lfoSpeed)
+ ClearModM(track);
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+#define MEMACC_COND_JUMP(cond) \
+if (cond) \
+ goto cond_true; \
+else \
+ goto cond_false; \
+
+void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 op;
+ u8 *addr;
+ u8 data;
+
+ op = *track->cmdPtr;
+ track->cmdPtr++;
+
+ addr = mplayInfo->memAccArea + *track->cmdPtr;
+ track->cmdPtr++;
+
+ data = *track->cmdPtr;
+ track->cmdPtr++;
+
+ switch (op)
+ {
+ case 0:
+ *addr = data;
+ return;
+ case 1:
+ *addr += data;
+ return;
+ case 2:
+ *addr -= data;
+ return;
+ case 3:
+ *addr = mplayInfo->memAccArea[data];
+ return;
+ case 4:
+ *addr += mplayInfo->memAccArea[data];
+ return;
+ case 5:
+ *addr -= mplayInfo->memAccArea[data];
+ return;
+ case 6:
+ MEMACC_COND_JUMP(*addr == data)
+ return;
+ case 7:
+ MEMACC_COND_JUMP(*addr != data)
+ return;
+ case 8:
+ MEMACC_COND_JUMP(*addr > data)
+ return;
+ case 9:
+ MEMACC_COND_JUMP(*addr >= data)
+ return;
+ case 10:
+ MEMACC_COND_JUMP(*addr <= data)
+ return;
+ case 11:
+ MEMACC_COND_JUMP(*addr < data)
+ return;
+ case 12:
+ MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data])
+ return;
+ case 13:
+ MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data])
+ return;
+ case 14:
+ MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data])
+ return;
+ case 15:
+ MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data])
+ return;
+ case 16:
+ MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data])
+ return;
+ case 17:
+ MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data])
+ return;
+ default:
+ return;
+ }
+
+cond_true:
+ {
+ void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]);
+ func(mplayInfo, track);
+ return;
+ }
+
+cond_false:
+ track->cmdPtr += 4;
+}
+
+void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 n = *track->cmdPtr;
+ track->cmdPtr++;
+
+ gXcmdTable[n](mplayInfo, track);
+}
+
+void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]);
+ func(mplayInfo, track);
+}
+
+#define READ_XCMD_BYTE(var, n) \
+{ \
+ u32 byte = track->cmdPtr[(n)]; \
+ byte <<= n * 8; \
+ (var) &= ~(0xFF << (n * 8)); \
+ (var) |= byte; \
+}
+
+void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 wav;
+
+ READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable
+ READ_XCMD_BYTE(wav, 1)
+ READ_XCMD_BYTE(wav, 2)
+ READ_XCMD_BYTE(wav, 3)
+
+ track->tone.wav = (struct WaveData *)wav;
+ track->cmdPtr += 4;
+}
+
+void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.type = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.attack = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.decay = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.sustain = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.release = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->echoVolume = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->echoLength = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.length = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.pan_sweep = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 unk;
+
+ READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
+ READ_XCMD_BYTE(unk, 1)
+
+ if (track->unk_3A < (u16)unk)
+ {
+ track->unk_3A++;
+ track->cmdPtr -= 2;
+ track->wait = 1;
+ }
+ else
+ {
+ track->unk_3A = 0;
+ track->cmdPtr += 2;
+ }
+}
+
+void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 unk;
+
+ READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
+ READ_XCMD_BYTE(unk, 1)
+ READ_XCMD_BYTE(unk, 2)
+ READ_XCMD_BYTE(unk, 3)
+
+ track->unk_3C = unk;
+ track->cmdPtr += 4;
+}
+
+void DummyFunc(void)
+{
+}
+
+struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone)
+{
+ u32 maxClock = 0;
+ s32 maxClockIndex = 0;
+ s32 i;
+ struct MusicPlayerInfo *mplayInfo;
+
+ for (i = 0; i < MAX_POKEMON_CRIES; i++)
+ {
+ struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2];
+
+ if (!track->flags && (!track->chan || track->chan->track != track))
+ goto start_song;
+
+ if (maxClock < gPokemonCryMusicPlayers[i].clock)
+ {
+ maxClock = gPokemonCryMusicPlayers[i].clock;
+ maxClockIndex = i;
+ }
+ }
+
+ i = maxClockIndex;
+
+start_song:
+ mplayInfo = &gPokemonCryMusicPlayers[i];
+ mplayInfo->ident++;
+
+#define CRY ((s32)&gPokemonCrySongs + i * sizeof(struct PokemonCrySong))
+#define CRY_OFS(field) offsetof(struct PokemonCrySong, field)
+
+ memcpy((void *)CRY, &gPokemonCrySong, sizeof(struct PokemonCrySong));
+
+ *(u32 *)(CRY + CRY_OFS(tone)) = (u32)tone;
+ *(u32 *)(CRY + CRY_OFS(part)) = CRY + CRY_OFS(part0);
+ *(u32 *)(CRY + CRY_OFS(part) + 4) = CRY + CRY_OFS(part1);
+ *(u32 *)(CRY + CRY_OFS(gotoTarget)) = CRY + CRY_OFS(cont);
+
+#undef CRY_OFS
+#undef CRY
+
+ mplayInfo->ident = ID_NUMBER;
+
+ MPlayStart(mplayInfo, (struct SongHeader *)(&gPokemonCrySongs[i]));
+
+ return mplayInfo;
+}
+
+void SetPokemonCryVolume(u8 val)
+{
+ gPokemonCrySong.volumeValue = val & 0x7F;
+}
+
+void SetPokemonCryPanpot(s8 val)
+{
+ gPokemonCrySong.panValue = (val + C_V) & 0x7F;
+}
+
+void SetPokemonCryPitch(s16 val)
+{
+ s16 b = val + 0x80;
+ u8 a = gPokemonCrySong.tuneValue2 - gPokemonCrySong.tuneValue;
+ gPokemonCrySong.tieKeyValue = (b >> 8) & 0x7F;
+ gPokemonCrySong.tuneValue = (b >> 1) & 0x7F;
+ gPokemonCrySong.tuneValue2 = (a + ((b >> 1) & 0x7F)) & 0x7F;
+}
+
+void SetPokemonCryLength(u16 val)
+{
+ gPokemonCrySong.unkCmd0CParam = val;
+}
+
+void SetPokemonCryRelease(u8 val)
+{
+ gPokemonCrySong.releaseValue = val;
+}
+
+void SetPokemonCryProgress(u32 val)
+{
+ gPokemonCrySong.unkCmd0DParam = val;
+}
+
+int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo)
+{
+ struct MusicPlayerTrack *track = mplayInfo->tracks;
+
+ if (track->chan && track->chan->track == track)
+ return 1;
+ else
+ return 0;
+}
+
+void SetPokemonCryChorus(s8 val)
+{
+ if (val)
+ {
+ gPokemonCrySong.trackCount = 2;
+ gPokemonCrySong.tuneValue2 = (val + gPokemonCrySong.tuneValue) & 0x7F;
+ }
+ else
+ {
+ gPokemonCrySong.trackCount = 1;
+ }
+}
+
+void SetPokemonCryStereo(u32 val)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ if (val)
+ {
+ REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
+ | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
+ | SOUND_ALL_MIX_FULL;
+ soundInfo->mode &= ~1;
+ }
+ else
+ {
+ REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT | SOUND_B_RIGHT_OUTPUT
+ | SOUND_A_TIMER_0 | SOUND_A_LEFT_OUTPUT | SOUND_A_RIGHT_OUTPUT
+ | SOUND_B_MIX_HALF | SOUND_A_MIX_HALF | SOUND_CGB_MIX_FULL;
+ soundInfo->mode |= 1;
+ }
+}
+
+void SetPokemonCryPriority(u8 val)
+{
+ gPokemonCrySong.priority = val;
+}
diff --git a/src/m4a_2.c b/src/m4a_2.c
deleted file mode 100644
index 0625f05d1..000000000
--- a/src/m4a_2.c
+++ /dev/null
@@ -1,912 +0,0 @@
-#include "gba/m4a_internal.h"
-
-#define BSS_CODE __attribute__((section(".bss.code")))
-
-BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0};
-
-struct SoundInfo gSoundInfo;
-struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES];
-struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES];
-void *gMPlayJumpTable[36];
-struct CgbChannel gCgbChans[4];
-struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2];
-struct PokemonCrySong gPokemonCrySong;
-struct MusicPlayerInfo gMPlayInfo_BGM;
-struct MusicPlayerInfo gMPlayInfo_SE1;
-struct MusicPlayerInfo gMPlayInfo_SE2;
-struct MusicPlayerInfo gMPlayInfo_SE3;
-u8 gMPlayMemAccArea[0x10];
-
-u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
-{
- u32 val1;
- u32 val2;
- u32 fineAdjustShifted = fineAdjust << 24;
-
- if (key > 178)
- {
- key = 178;
- fineAdjustShifted = 255 << 24;
- }
-
- val1 = gScaleTable[key];
- val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4);
-
- val2 = gScaleTable[key + 1];
- val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4);
-
- return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted));
-}
-
-void UnusedDummyFunc()
-{
-}
-
-void MPlayContinue(struct MusicPlayerInfo *mplayInfo)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->fadeOC = speed;
- mplayInfo->fadeOI = speed;
- mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aSoundInit(void)
-{
- s32 i;
-
- CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer));
-
- SoundInit(&gSoundInfo);
- MPlayExtender(gCgbChans);
- m4aSoundMode(SOUND_MODE_DA_BIT_8
- | SOUND_MODE_FREQ_13379
- | (12 << SOUND_MODE_MASVOL_SHIFT)
- | (5 << SOUND_MODE_MAXCHN_SHIFT));
-
- for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
- {
- struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info;
- MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8);
- mplayInfo->unk_B = gMPlayTable[i].unk_A;
- mplayInfo->memAccArea = gMPlayMemAccArea;
- }
-
- memcpy(&gPokemonCrySong, &gPokemonCrySongTemplate, sizeof(struct PokemonCrySong));
-
- for (i = 0; i < MAX_POKEMON_CRIES; i++)
- {
- struct MusicPlayerInfo *mplayInfo = &gPokemonCryMusicPlayers[i];
- struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2];
- MPlayOpen(mplayInfo, track, 2);
- track->chan = 0;
- }
-}
-
-void m4aSoundMain(void)
-{
- SoundMain();
-}
-
-void m4aSongNumStart(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- MPlayStart(mplay->info, song->header);
-}
-
-void m4aSongNumStartOrChange(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- if (mplay->info->songHeader != song->header)
- {
- MPlayStart(mplay->info, song->header);
- }
- else
- {
- if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0
- || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE))
- {
- MPlayStart(mplay->info, song->header);
- }
- }
-}
-
-void m4aSongNumStartOrContinue(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- if (mplay->info->songHeader != song->header)
- MPlayStart(mplay->info, song->header);
- else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0)
- MPlayStart(mplay->info, song->header);
- else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)
- MPlayContinue(mplay->info);
-}
-
-void m4aSongNumStop(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- if (mplay->info->songHeader == song->header)
- m4aMPlayStop(mplay->info);
-}
-
-void m4aSongNumContinue(u16 n)
-{
- const struct MusicPlayer *mplayTable = gMPlayTable;
- const struct Song *songTable = gSongTable;
- const struct Song *song = &songTable[n];
- const struct MusicPlayer *mplay = &mplayTable[song->ms];
-
- if (mplay->info->songHeader == song->header)
- MPlayContinue(mplay->info);
-}
-
-void m4aMPlayAllStop(void)
-{
- s32 i;
-
- for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
- m4aMPlayStop(gMPlayTable[i].info);
-
- for (i = 0; i < MAX_POKEMON_CRIES; i++)
- m4aMPlayStop(&gPokemonCryMusicPlayers[i]);
-}
-
-void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo)
-{
- MPlayContinue(mplayInfo);
-}
-
-void m4aMPlayAllContinue(void)
-{
- s32 i;
-
- for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
- MPlayContinue(gMPlayTable[i].info);
-
- for (i = 0; i < MAX_POKEMON_CRIES; i++)
- MPlayContinue(&gPokemonCryMusicPlayers[i]);
-}
-
-void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
-{
- MPlayFadeOut(mplayInfo, speed);
-}
-
-void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->fadeOC = speed;
- mplayInfo->fadeOI = speed;
- mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE;
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->fadeOC = speed;
- mplayInfo->fadeOI = speed;
- mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN;
- mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo)
-{
- s32 trackCount = mplayInfo->trackCount;
- struct MusicPlayerTrack *track = mplayInfo->tracks;
-
- while (trackCount > 0)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- if (track->flags & MPT_FLG_START)
- {
- Clear64byte(track);
- track->flags = MPT_FLG_EXIST;
- track->bendRange = 2;
- track->volX = 64;
- track->lfoSpeed = 22;
- track->tone.type = 1;
- }
- }
-
- trackCount--;
- track++;
- }
-}
-
-void MPlayExtender(struct CgbChannel *cgbChans)
-{
- struct SoundInfo *soundInfo;
- u32 ident;
-
- REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
- | SOUND_4_ON
- | SOUND_3_ON
- | SOUND_2_ON
- | SOUND_1_ON;
- REG_SOUNDCNT_L = 0; // set master volume to zero
- REG_NR12 = 0x8;
- REG_NR22 = 0x8;
- REG_NR42 = 0x8;
- REG_NR14 = 0x80;
- REG_NR24 = 0x80;
- REG_NR44 = 0x80;
- REG_NR30 = 0;
- REG_NR50 = 0x77;
-
- soundInfo = SOUND_INFO_PTR;
-
- ident = soundInfo->ident;
-
- if (ident != ID_NUMBER)
- return;
-
- soundInfo->ident++;
-
- gMPlayJumpTable[8] = ply_memacc;
- gMPlayJumpTable[17] = ply_lfos;
- gMPlayJumpTable[19] = ply_mod;
- gMPlayJumpTable[28] = ply_xcmd;
- gMPlayJumpTable[29] = ply_endtie;
- gMPlayJumpTable[30] = SampleFreqSet;
- gMPlayJumpTable[31] = TrackStop;
- gMPlayJumpTable[32] = FadeOutBody;
- gMPlayJumpTable[33] = TrkVolPitSet;
-
- soundInfo->cgbChans = (struct CgbChannel *)cgbChans;
- soundInfo->CgbSound = CgbSound;
- soundInfo->CgbOscOff = CgbOscOff;
- soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq;
- soundInfo->maxLines = MAX_LINES;
-
- CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4);
-
- cgbChans[0].ty = 1;
- cgbChans[0].panMask = 0x11;
- cgbChans[1].ty = 2;
- cgbChans[1].panMask = 0x22;
- cgbChans[2].ty = 3;
- cgbChans[2].panMask = 0x44;
- cgbChans[3].ty = 4;
- cgbChans[3].panMask = 0x88;
-
- soundInfo->ident = ident;
-}
-
-void MusicPlayerJumpTableCopy(void)
-{
- asm("swi 0x2A");
-}
-
-void ClearChain(void *x)
-{
- void (*func)(void *) = *(&gMPlayJumpTable[34]);
- func(x);
-}
-
-void Clear64byte(void *x)
-{
- void (*func)(void *) = *(&gMPlayJumpTable[35]);
- func(x);
-}
-
-void SoundInit(struct SoundInfo *soundInfo)
-{
- soundInfo->ident = 0;
-
- if (REG_DMA1CNT & (DMA_REPEAT << 16))
- REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
-
- if (REG_DMA2CNT & (DMA_REPEAT << 16))
- REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
-
- REG_DMA1CNT_H = DMA_32BIT;
- REG_DMA2CNT_H = DMA_32BIT;
- REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
- | SOUND_4_ON
- | SOUND_3_ON
- | SOUND_2_ON
- | SOUND_1_ON;
- REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
- | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
- | SOUND_ALL_MIX_FULL;
- REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
-
- REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
- REG_DMA1DAD = (s32)&REG_FIFO_A;
- REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
- REG_DMA2DAD = (s32)&REG_FIFO_B;
-
- SOUND_INFO_PTR = soundInfo;
- CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
-
- soundInfo->maxChans = 8;
- soundInfo->masterVolume = 15;
- soundInfo->plynote = (u32)ply_note;
- soundInfo->CgbSound = DummyFunc;
- soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
- soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
- soundInfo->ExtVolPit = (u32)DummyFunc;
-
- MPlayJumpTableCopy(gMPlayJumpTable);
-
- soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
-
- SampleFreqSet(SOUND_MODE_FREQ_13379);
-
- soundInfo->ident = ID_NUMBER;
-}
-
-void SampleFreqSet(u32 freq)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
-
- freq = (freq & 0xF0000) >> 16;
- soundInfo->freq = freq;
- soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
- soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
-
- // LCD refresh rate 59.7275Hz
- soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000;
-
- // CPU frequency 16.78Mhz
- soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1;
-
- // Turn off timer 0.
- REG_TM0CNT_H = 0;
-
- // cycles per LCD fresh 280896
- REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank);
-
- m4aSoundVSyncOn();
-
- while (*(vu8 *)REG_ADDR_VCOUNT == 159)
- ;
-
- while (*(vu8 *)REG_ADDR_VCOUNT != 159)
- ;
-
- REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK;
-}
-
-void m4aSoundMode(u32 mode)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- u32 temp;
-
- if (soundInfo->ident != ID_NUMBER)
- return;
-
- soundInfo->ident++;
-
- temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL);
-
- if (temp)
- soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL;
-
- temp = mode & SOUND_MODE_MAXCHN;
-
- if (temp)
- {
- struct SoundChannel *chan;
-
- soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
-
- temp = MAX_DIRECTSOUND_CHANNELS;
- chan = &soundInfo->chans[0];
-
- while (temp != 0)
- {
- chan->status = 0;
- temp--;
- chan++;
- }
- }
-
- temp = mode & SOUND_MODE_MASVOL;
-
- if (temp)
- soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT;
-
- temp = mode & SOUND_MODE_DA_BIT;
-
- if (temp)
- {
- temp = (temp & 0x300000) >> 14;
- REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp;
- }
-
- temp = mode & SOUND_MODE_FREQ;
-
- if (temp)
- {
- m4aSoundVSyncOff();
- SampleFreqSet(temp);
- }
-
- soundInfo->ident = ID_NUMBER;
-}
-
-void SoundClear(void)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- s32 i;
- void *chan;
-
- if (soundInfo->ident != ID_NUMBER)
- return;
-
- soundInfo->ident++;
-
- i = MAX_DIRECTSOUND_CHANNELS;
- chan = &soundInfo->chans[0];
-
- while (i > 0)
- {
- ((struct SoundChannel *)chan)->status = 0;
- i--;
- chan = (void *)((s32)chan + sizeof(struct SoundChannel));
- }
-
- chan = soundInfo->cgbChans;
-
- if (chan)
- {
- i = 1;
-
- while (i <= 4)
- {
- soundInfo->CgbOscOff(i);
- ((struct CgbChannel *)chan)->sf = 0;
- i++;
- chan = (void *)((s32)chan + sizeof(struct CgbChannel));
- }
- }
-
- soundInfo->ident = ID_NUMBER;
-}
-
-void m4aSoundVSyncOff(void)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
-
- if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
- {
- soundInfo->ident += 10;
-
- if (REG_DMA1CNT & (DMA_REPEAT << 16))
- REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
-
- if (REG_DMA2CNT & (DMA_REPEAT << 16))
- REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
-
- REG_DMA1CNT_H = DMA_32BIT;
- REG_DMA2CNT_H = DMA_32BIT;
-
- CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
- }
-}
-
-void m4aSoundVSyncOn(void)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
- u32 ident = soundInfo->ident;
-
- if (ident == ID_NUMBER)
- return;
-
- REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
- REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
-
- soundInfo->pcmDmaCounter = 0;
- soundInfo->ident = ident - 10;
-}
-
-void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount)
-{
- struct SoundInfo *soundInfo;
-
- if (trackCount == 0)
- return;
-
- if (trackCount > MAX_MUSICPLAYER_TRACKS)
- trackCount = MAX_MUSICPLAYER_TRACKS;
-
- soundInfo = SOUND_INFO_PTR;
-
- if (soundInfo->ident != ID_NUMBER)
- return;
-
- soundInfo->ident++;
-
- Clear64byte(mplayInfo);
-
- mplayInfo->tracks = tracks;
- mplayInfo->trackCount = trackCount;
- mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
-
- while (trackCount != 0)
- {
- tracks->flags = 0;
- trackCount--;
- tracks++;
- }
-
- if (soundInfo->func != 0)
- {
- mplayInfo->func = soundInfo->func;
- mplayInfo->intp = soundInfo->intp;
- soundInfo->func = 0;
- }
-
- soundInfo->intp = (u32)mplayInfo;
- soundInfo->func = (u32)MPlayMain;
- soundInfo->ident = ID_NUMBER;
- mplayInfo->ident = ID_NUMBER;
-}
-
-void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader)
-{
- s32 i;
- u8 unk_B;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- unk_B = mplayInfo->unk_B;
-
- if (!unk_B
- || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START))
- && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0
- || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE)))
- || (mplayInfo->priority <= songHeader->priority))
- {
- mplayInfo->ident++;
- mplayInfo->status = 0;
- mplayInfo->songHeader = songHeader;
- mplayInfo->tone = songHeader->tone;
- mplayInfo->priority = songHeader->priority;
- mplayInfo->clock = 0;
- mplayInfo->tempoD = 150;
- mplayInfo->tempoI = 150;
- mplayInfo->tempoU = 0x100;
- mplayInfo->tempoC = 0;
- mplayInfo->fadeOI = 0;
-
- i = 0;
- track = mplayInfo->tracks;
-
- while (i < songHeader->trackCount && i < mplayInfo->trackCount)
- {
- TrackStop(mplayInfo, track);
- track->flags = MPT_FLG_EXIST | MPT_FLG_START;
- track->chan = 0;
- track->cmdPtr = songHeader->part[i];
- i++;
- track++;
- }
-
- while (i < mplayInfo->trackCount)
- {
- TrackStop(mplayInfo, track);
- track->flags = 0;
- i++;
- track++;
- }
-
- if (songHeader->reverb & 0x80)
- m4aSoundMode(songHeader->reverb);
-
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
-{
- s32 i;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
- mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
- {
- TrackStop(mplayInfo, track);
- i--;
- track++;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
-{
- s32 i;
- struct MusicPlayerTrack *track;
- u16 fadeOI = mplayInfo->fadeOI;
- register u32 temp asm("r3");
- register u16 mask asm("r2");
-
- if (fadeOI == 0)
- return;
-
- mplayInfo->fadeOC--;
-
- temp = 0xFFFF;
- mask = temp;
-
- if (mplayInfo->fadeOC != 0)
- return;
-
- mplayInfo->fadeOC = fadeOI;
-
- if (mplayInfo->fadeOV & FADE_IN)
- {
- mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT);
-
- if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT))
- {
- mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
- mplayInfo->fadeOI = 0;
- }
- }
- else
- {
- mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT);
-
- if ((s16)(mplayInfo->fadeOV & mask) <= 0)
- {
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
- {
- register u32 fadeOV asm("r7");
- u32 val;
-
- TrackStop(mplayInfo, track);
-
- val = TEMPORARY_FADE;
- fadeOV = mplayInfo->fadeOV;
- val &= fadeOV;
-
- if (!val)
- track->flags = 0;
-
- i--;
- track++;
- }
-
- if (mplayInfo->fadeOV & TEMPORARY_FADE)
- mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
- else
- mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
-
- mplayInfo->fadeOI = 0;
- return;
- }
- }
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
-
- while (i > 0)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->volX = (mplayInfo->fadeOV >> FADE_VOL_SHIFT);
- track->flags |= MPT_FLG_VOLCHG;
- }
-
- i--;
- track++;
- }
-}
-
-void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- if (track->flags & MPT_FLG_VOLSET)
- {
- s32 x;
- s32 y;
-
- x = (u32)(track->vol * track->volX) >> 5;
-
- if (track->modT == 1)
- x = (u32)(x * (track->modM + 128)) >> 7;
-
- y = 2 * track->pan + track->panX;
-
- if (track->modT == 2)
- y += track->modM;
-
- if (y < -128)
- y = -128;
- else if (y > 127)
- y = 127;
-
- track->volMR = (u32)((y + 128) * x) >> 8;
- track->volML = (u32)((127 - y) * x) >> 8;
- }
-
- if (track->flags & MPT_FLG_PITSET)
- {
- s32 bend = track->bend * track->bendRange;
- register s32 x asm("r1") = track->tune;
- x += bend;
- x *= 4;
- x += (track->keyShift << 8);
- x += (track->keyShiftX << 8);
- x += track->pitX;
-
- if (track->modT == 0)
- x += 16 * track->modM;
-
- track->keyM = x >> 8;
- track->pitM = x;
- }
-
- track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET);
-}
-
-u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust)
-{
- if (chanNum == 4)
- {
- if (key <= 20)
- {
- key = 0;
- }
- else
- {
- key -= 21;
- if (key > 59)
- key = 59;
- }
-
- return gNoiseTable[key];
- }
- else
- {
- s32 val1;
- s32 val2;
-
- if (key <= 35)
- {
- fineAdjust = 0;
- key = 0;
- }
- else
- {
- key -= 36;
- if (key > 130)
- {
- key = 130;
- fineAdjust = 255;
- }
- }
-
- val1 = gCgbScaleTable[key];
- val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4);
-
- val2 = gCgbScaleTable[key + 1];
- val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4);
-
- return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048;
- }
-}
-
-void CgbOscOff(u8 chanNum)
-{
- switch (chanNum)
- {
- case 1:
- REG_NR12 = 8;
- REG_NR14 = 0x80;
- break;
- case 2:
- REG_NR22 = 8;
- REG_NR24 = 0x80;
- break;
- case 3:
- REG_NR30 = 0;
- break;
- default:
- REG_NR42 = 8;
- REG_NR44 = 0x80;
- }
-}
-
-static inline int CgbPan(struct CgbChannel *chan)
-{
- u32 rightVolume = chan->rightVolume;
- u32 leftVolume = chan->leftVolume;
-
- if ((rightVolume = (u8)rightVolume) >= (leftVolume = (u8)leftVolume))
- {
- if (rightVolume / 2 >= leftVolume)
- {
- chan->pan = 0x0F;
- return 1;
- }
- }
- else
- {
- if (leftVolume / 2 >= rightVolume)
- {
- chan->pan = 0xF0;
- return 1;
- }
- }
-
- return 0;
-}
-
-void CgbModVol(struct CgbChannel *chan)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
-
- if ((soundInfo->mode & 1) || !CgbPan(chan))
- {
- chan->pan = 0xFF;
- chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
- }
- 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.
- asm("" : : : "memory");
-
- chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
- if (chan->eg > 15)
- chan->eg = 15;
- }
-
- chan->sg = (chan->eg * chan->su + 15) >> 4;
- chan->pan &= chan->panMask;
-}
diff --git a/src/m4a_4.c b/src/m4a_4.c
deleted file mode 100644
index e645fbef5..000000000
--- a/src/m4a_4.c
+++ /dev/null
@@ -1,545 +0,0 @@
-#include "gba/m4a_internal.h"
-
-void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo)
-{
- if (mplayInfo->ident == ID_NUMBER)
- {
- mplayInfo->ident++;
- mplayInfo->tempoU = tempo;
- mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8;
- mplayInfo->ident = ID_NUMBER;
- }
-}
-
-void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->volX = volume / 4;
- track->flags |= MPT_FLG_VOLCHG;
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->keyShiftX = pitch >> 8;
- track->pitX = pitch;
- track->flags |= MPT_FLG_PITCHG;
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->panX = pan;
- track->flags |= MPT_FLG_VOLCHG;
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void ClearModM(struct MusicPlayerTrack *track)
-{
- track->lfoSpeedC = 0;
- track->modM = 0;
-
- if (track->modT == 0)
- track->flags |= MPT_FLG_PITCHG;
- else
- track->flags |= MPT_FLG_VOLCHG;
-}
-
-void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->mod = modDepth;
-
- if (!track->mod)
- ClearModM(track);
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed)
-{
- s32 i;
- u32 bit;
- struct MusicPlayerTrack *track;
-
- if (mplayInfo->ident != ID_NUMBER)
- return;
-
- mplayInfo->ident++;
-
- i = mplayInfo->trackCount;
- track = mplayInfo->tracks;
- bit = 1;
-
- while (i > 0)
- {
- if (trackBits & bit)
- {
- if (track->flags & MPT_FLG_EXIST)
- {
- track->lfoSpeed = lfoSpeed;
-
- if (!track->lfoSpeed)
- ClearModM(track);
- }
- }
-
- i--;
- track++;
- bit <<= 1;
- }
-
- mplayInfo->ident = ID_NUMBER;
-}
-
-#define MEMACC_COND_JUMP(cond) \
-if (cond) \
- goto cond_true; \
-else \
- goto cond_false; \
-
-void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 op;
- u8 *addr;
- u8 data;
-
- op = *track->cmdPtr;
- track->cmdPtr++;
-
- addr = mplayInfo->memAccArea + *track->cmdPtr;
- track->cmdPtr++;
-
- data = *track->cmdPtr;
- track->cmdPtr++;
-
- switch (op)
- {
- case 0:
- *addr = data;
- return;
- case 1:
- *addr += data;
- return;
- case 2:
- *addr -= data;
- return;
- case 3:
- *addr = mplayInfo->memAccArea[data];
- return;
- case 4:
- *addr += mplayInfo->memAccArea[data];
- return;
- case 5:
- *addr -= mplayInfo->memAccArea[data];
- return;
- case 6:
- MEMACC_COND_JUMP(*addr == data)
- return;
- case 7:
- MEMACC_COND_JUMP(*addr != data)
- return;
- case 8:
- MEMACC_COND_JUMP(*addr > data)
- return;
- case 9:
- MEMACC_COND_JUMP(*addr >= data)
- return;
- case 10:
- MEMACC_COND_JUMP(*addr <= data)
- return;
- case 11:
- MEMACC_COND_JUMP(*addr < data)
- return;
- case 12:
- MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data])
- return;
- case 13:
- MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data])
- return;
- case 14:
- MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data])
- return;
- case 15:
- MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data])
- return;
- case 16:
- MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data])
- return;
- case 17:
- MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data])
- return;
- default:
- return;
- }
-
-cond_true:
- {
- void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]);
- func(mplayInfo, track);
- return;
- }
-
-cond_false:
- track->cmdPtr += 4;
-}
-
-void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 n = *track->cmdPtr;
- track->cmdPtr++;
-
- gXcmdTable[n](mplayInfo, track);
-}
-
-void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]);
- func(mplayInfo, track);
-}
-
-#define READ_XCMD_BYTE(var, n) \
-{ \
- u32 byte = track->cmdPtr[(n)]; \
- byte <<= n * 8; \
- (var) &= ~(0xFF << (n * 8)); \
- (var) |= byte; \
-}
-
-void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 wav;
-
- READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable
- READ_XCMD_BYTE(wav, 1)
- READ_XCMD_BYTE(wav, 2)
- READ_XCMD_BYTE(wav, 3)
-
- track->tone.wav = (struct WaveData *)wav;
- track->cmdPtr += 4;
-}
-
-void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.type = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.attack = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.decay = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.sustain = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.release = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->echoVolume = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->echoLength = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.length = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- track->tone.pan_sweep = *track->cmdPtr;
- track->cmdPtr++;
-}
-
-void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 unk;
-
- READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
- READ_XCMD_BYTE(unk, 1)
-
- if (track->unk_3A < (u16)unk)
- {
- track->unk_3A++;
- track->cmdPtr -= 2;
- track->wait = 1;
- }
- else
- {
- track->unk_3A = 0;
- track->cmdPtr += 2;
- }
-}
-
-void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
-{
- u32 unk;
-
- READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
- READ_XCMD_BYTE(unk, 1)
- READ_XCMD_BYTE(unk, 2)
- READ_XCMD_BYTE(unk, 3)
-
- track->unk_3C = unk;
- track->cmdPtr += 4;
-}
-
-void DummyFunc(void)
-{
-}
-
-struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone)
-{
- u32 maxClock = 0;
- s32 maxClockIndex = 0;
- s32 i;
- struct MusicPlayerInfo *mplayInfo;
-
- for (i = 0; i < MAX_POKEMON_CRIES; i++)
- {
- struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2];
-
- if (!track->flags && (!track->chan || track->chan->track != track))
- goto start_song;
-
- if (maxClock < gPokemonCryMusicPlayers[i].clock)
- {
- maxClock = gPokemonCryMusicPlayers[i].clock;
- maxClockIndex = i;
- }
- }
-
- i = maxClockIndex;
-
-start_song:
- mplayInfo = &gPokemonCryMusicPlayers[i];
- mplayInfo->ident++;
-
-#define CRY ((s32)&gPokemonCrySongs + i * sizeof(struct PokemonCrySong))
-#define CRY_OFS(field) offsetof(struct PokemonCrySong, field)
-
- memcpy((void *)CRY, &gPokemonCrySong, sizeof(struct PokemonCrySong));
-
- *(u32 *)(CRY + CRY_OFS(tone)) = (u32)tone;
- *(u32 *)(CRY + CRY_OFS(part)) = CRY + CRY_OFS(part0);
- *(u32 *)(CRY + CRY_OFS(part) + 4) = CRY + CRY_OFS(part1);
- *(u32 *)(CRY + CRY_OFS(gotoTarget)) = CRY + CRY_OFS(cont);
-
-#undef CRY_OFS
-#undef CRY
-
- mplayInfo->ident = ID_NUMBER;
-
- MPlayStart(mplayInfo, (struct SongHeader *)(&gPokemonCrySongs[i]));
-
- return mplayInfo;
-}
-
-void SetPokemonCryVolume(u8 val)
-{
- gPokemonCrySong.volumeValue = val & 0x7F;
-}
-
-void SetPokemonCryPanpot(s8 val)
-{
- gPokemonCrySong.panValue = (val + C_V) & 0x7F;
-}
-
-void SetPokemonCryPitch(s16 val)
-{
- s16 b = val + 0x80;
- u8 a = gPokemonCrySong.tuneValue2 - gPokemonCrySong.tuneValue;
- gPokemonCrySong.tieKeyValue = (b >> 8) & 0x7F;
- gPokemonCrySong.tuneValue = (b >> 1) & 0x7F;
- gPokemonCrySong.tuneValue2 = (a + ((b >> 1) & 0x7F)) & 0x7F;
-}
-
-void SetPokemonCryLength(u16 val)
-{
- gPokemonCrySong.unkCmd0CParam = val;
-}
-
-void SetPokemonCryRelease(u8 val)
-{
- gPokemonCrySong.releaseValue = val;
-}
-
-void SetPokemonCryProgress(u32 val)
-{
- gPokemonCrySong.unkCmd0DParam = val;
-}
-
-int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo)
-{
- struct MusicPlayerTrack *track = mplayInfo->tracks;
-
- if (track->chan && track->chan->track == track)
- return 1;
- else
- return 0;
-}
-
-void SetPokemonCryChorus(s8 val)
-{
- if (val)
- {
- gPokemonCrySong.trackCount = 2;
- gPokemonCrySong.tuneValue2 = (val + gPokemonCrySong.tuneValue) & 0x7F;
- }
- else
- {
- gPokemonCrySong.trackCount = 1;
- }
-}
-
-void SetPokemonCryStereo(u32 val)
-{
- struct SoundInfo *soundInfo = SOUND_INFO_PTR;
-
- if (val)
- {
- REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
- | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
- | SOUND_ALL_MIX_FULL;
- soundInfo->mode &= ~1;
- }
- else
- {
- REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT | SOUND_B_RIGHT_OUTPUT
- | SOUND_A_TIMER_0 | SOUND_A_LEFT_OUTPUT | SOUND_A_RIGHT_OUTPUT
- | SOUND_B_MIX_HALF | SOUND_A_MIX_HALF | SOUND_CGB_MIX_FULL;
- soundInfo->mode |= 1;
- }
-}
-
-void SetPokemonCryPriority(u8 val)
-{
- gPokemonCrySong.priority = val;
-}
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
index c13747006..0d88815c0 100644
--- a/src/map_name_popup.c
+++ b/src/map_name_popup.c
@@ -1,6 +1,4 @@
#include "global.h"
-#include "constants/region_map_sections.h"
-#include "constants/weather.h"
#include "bg.h"
#include "event_data.h"
#include "gpu_regs.h"
@@ -14,6 +12,9 @@
#include "string_util.h"
#include "task.h"
#include "text.h"
+#include "constants/layouts.h"
+#include "constants/region_map_sections.h"
+#include "constants/weather.h"
// enums
enum MapPopUp_Themes
@@ -305,7 +306,7 @@ static void ShowMapNamePopUpWindow(void)
if (InBattlePyramid())
{
- if (gMapHeader.mapLayoutId == 0x17A)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP)
{
withoutPrefixPtr = &(mapDisplayHeader[3]);
mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[7];
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 930f1f35b..fd8e74c0a 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -572,9 +572,6 @@ static void Task_BardSong(u8 taskId)
struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
u8 *str = gStringVar4 + task->tCharIndex;
u16 wordLen = 0;
- // Can't get it to match without hacking
- u32 temp;
- register s16 zero asm("r1");
while (*str != CHAR_SPACE
&& *str != CHAR_NEWLINE
@@ -588,17 +585,22 @@ static void Task_BardSong(u8 taskId)
sUnknownBardRelated = MACRO2(bard->songLyrics[task->tCurrWord]);
else
sUnknownBardRelated = MACRO2(bard->temporaryLyrics[task->tCurrWord]);
- temp = gBardSong.length / wordLen;
- zero = 0;
- gBardSong.length = temp;
+
+ gBardSong.length /= wordLen;
if (gBardSong.length <= 0)
gBardSong.length = 1;
task->tCurrWord++;
+
if (task->data[2] == 0)
+ {
task->tState = 3;
+ task->data[1] = 0;
+ }
else
+ {
task->tState = 5;
- task->data[1] = zero;
+ task->data[1] = 0;
+ }
}
break;
case 5:
@@ -1180,9 +1182,9 @@ static void Task_StoryListMenu(u8 taskId) // Task_StoryListMenu
break;
case 1:
selection = Menu_ProcessInput();
- if (selection == -2)
+ if (selection == MENU_NOTHING_CHOSEN)
break;
- if (selection == -1 || selection == GetFreeStorySlot())
+ if (selection == MENU_B_PRESSED || selection == GetFreeStorySlot())
{
gSpecialVar_Result = 0;
}
diff --git a/src/overworld.c b/src/overworld.c
index a67b4b68f..8d4c24ff6 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -55,6 +55,7 @@
#include "wild_encounter.h"
#include "frontier_util.h"
#include "constants/abilities.h"
+#include "constants/layouts.h"
#include "constants/map_types.h"
#include "constants/maps.h"
#include "constants/region_map_sections.h"
@@ -886,7 +887,7 @@ static void mli0_load_map(u32 a1)
LoadCurrentMapData();
if (!(sUnknown_020322D8 & 1))
{
- if (gMapHeader.mapLayoutId == 0x169)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
sub_81AA1D8();
else if (InTrainerHill())
sub_81D5DF8();
@@ -914,7 +915,7 @@ static void mli0_load_map(u32 a1)
mapheader_run_script_with_tag_x3();
UpdateLocationHistoryForRoamer();
RoamerMoveToOtherLocationSet();
- if (gMapHeader.mapLayoutId == 0x169)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
InitBattlePyramidMap(0);
else if (InTrainerHill())
InitTrainerHillMap();
@@ -1753,7 +1754,7 @@ void CB2_ContinueSavedGame(void)
LoadSaveblockMapHeader();
ClearDiveAndHoleWarps();
trainerHillMapId = GetCurrentTrainerHillMapId();
- if (gMapHeader.mapLayoutId == 0x169)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
sub_81AA2F8();
else if (trainerHillMapId != 0 && trainerHillMapId != 6)
sub_81D5F48();
@@ -1763,7 +1764,7 @@ void CB2_ContinueSavedGame(void)
UnfreezeEventObjects();
DoTimeBasedEvents();
sub_8084788();
- if (gMapHeader.mapLayoutId == 0x169)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
InitBattlePyramidMap(1);
else if (trainerHillMapId != 0)
InitTrainerHillMap();
diff --git a/src/palette.c b/src/palette.c
index deb07b066..be5143876 100644
--- a/src/palette.c
+++ b/src/palette.c
@@ -154,7 +154,7 @@ void ReadPlttIntoBuffers(void)
bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor)
{
u8 temp;
- register u32 _blendColor asm("r8") = blendColor;
+ u16 color = blendColor;
if (gPaletteFade.active)
{
@@ -175,7 +175,7 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe
gPaletteFade_delay = delay;
gPaletteFade.y = startY;
gPaletteFade.targetY = targetY;
- gPaletteFade.blendColor = _blendColor;
+ gPaletteFade.blendColor = color;
gPaletteFade.active = 1;
gPaletteFade.mode = NORMAL_FADE;
@@ -881,7 +881,7 @@ void TintPalette_SepiaTone(u16 *palette, u16 count)
{
s32 r, g, b, i;
u32 gray;
-
+
for (i = 0; i < count; i++)
{
r = (*palette >> 0) & 0x1F;
diff --git a/src/party_menu.c b/src/party_menu.c
index a8c98faec..15b5d24d8 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -119,6 +119,7 @@ struct Struct203CEDC
u8 unkC;
};
+// EWRAM vars
static EWRAM_DATA struct Struct203CEC4 *gUnknown_0203CEC4 = NULL;
EWRAM_DATA struct Struct203CEC8 gUnknown_0203CEC8 = {0};
static EWRAM_DATA struct Struct203CEDC *gUnknown_0203CEDC = NULL;
@@ -134,7 +135,8 @@ static EWRAM_DATA u16 gUnknown_0203CEFC = 0;
static EWRAM_DATA u16 gUnknown_0203CEFE = 0; // unused
EWRAM_DATA u8 gUnknown_0203CF00[3] = {0};
-extern void (*gUnknown_03006328)(u8, TaskFunc);
+// IWRAM common
+void (*gUnknown_03006328)(u8, TaskFunc);
static void reset_brm(void);
static void PartyMenuInitCallback(void);
@@ -2087,7 +2089,8 @@ static bool8 RenderPartyMenuBoxes(void)
RenderPartyMenuBox(gUnknown_0203CEC4->data[0]);
if (++gUnknown_0203CEC4->data[0] == 6)
return TRUE;
- return FALSE;
+ else
+ return FALSE;
}
static u8* GetPartyMiscGraphicsTile(u16 tileId)
@@ -2130,7 +2133,8 @@ static bool8 party_menu_add_per_mon_objects(void)
party_menu_add_per_mon_objects_internal(gUnknown_0203CEC4->data[0]);
if (++gUnknown_0203CEC4->data[0] == 6)
return TRUE;
- return FALSE;
+ else
+ return FALSE;
}
static void sub_81B0F28(void)
@@ -2202,6 +2206,7 @@ void sub_81B0FCC(u8 slot, u8 b)
static u8 GetPartyBoxPalBitfield(u8 slot, u8 b)
{
u8 returnVar = 0;
+
if (b == 1)
returnVar |= 1;
if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0)
@@ -2321,7 +2326,8 @@ static s8* sub_81B13EC(void)
{
if (gUnknown_0203CEC8.unkB == 8 || gUnknown_0203CEC8.unkB == 10)
return &gUnknown_0203CEC8.unkA;
- return &gUnknown_0203CEC8.unk9;
+ else
+ return &gUnknown_0203CEC8.unk9;
}
static void sub_81B140C(u8 taskId, s8 *ptr)
@@ -2836,7 +2842,7 @@ static void sub_81B1DB8(struct Pokemon *mon, u16 item)
SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes);
}
-static u8 sub_81B1E00(struct Pokemon* mon)
+static u8 TryTakeMonItem(struct Pokemon* mon)
{
u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
@@ -4265,7 +4271,7 @@ static void CursorCb_TakeItem(u8 taskId)
PlaySE(SE_SELECT);
sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
- switch (sub_81B1E00(mon))
+ switch (TryTakeMonItem(mon))
{
case 0:
GetMonNickname(mon, gStringVar1);
@@ -5203,7 +5209,7 @@ void sub_81B617C(void)
bool8 inBattle;
u8 i;
u8 msgIdMaybe;
- register TaskFunc task asm("r0");
+ TaskFunc task;
if (gMain.inBattle)
{
@@ -5215,6 +5221,7 @@ void sub_81B617C(void)
inBattle = FALSE;
doubleBattleStatus = 0;
}
+
if (GetItemEffectType(gSpecialVar_ItemId) == 10)
{
gUnknown_0203CEC8.unk9 = 0;
@@ -5231,9 +5238,14 @@ void sub_81B617C(void)
}
else
{
- msgIdMaybe = (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_TM_HM) ? 4 : 5;
+ if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_TM_HM)
+ msgIdMaybe = 4;
+ else
+ msgIdMaybe = 5;
+
task = sub_81B1370;
}
+
InitPartyMenu(inBattle, doubleBattleStatus, 3, 1, msgIdMaybe, task, callback);
}
@@ -5263,9 +5275,11 @@ static bool8 IsHPRecoveryItem(u16 item)
effect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
else
effect = gItemEffectTable[item - ITEM_POTION];
+
if ((effect[4] & 4) != 0)
return TRUE;
- return FALSE;
+ else
+ return FALSE;
}
static void GetMedicineItemEffectMessage(u16 item)
@@ -5575,6 +5589,7 @@ void dp05_ether(u8 taskId, TaskFunc task)
effect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
else
effect = gItemEffectTable[item - ITEM_POTION];
+
if ((effect[4] & 0x10) == 0)
{
gUnknown_0203CEC8.unkE = 0;
@@ -6196,151 +6211,69 @@ void sub_81B7C74(u8 taskId, TaskFunc task)
u8 GetItemEffectType(u16 item)
{
const u8 *itemEffect;
-#ifndef NONMATCHING
- register u8 itemEffect0 asm("r1");
- register u8 itemEffect3 asm("r3");
- register u32 itemEffect0_r0 asm("r0"); // u32 to prevent shifting when transferring itemEffect0 to this
- u8 mask;
-#else
-#define itemEffect0 itemEffect[0]
-#define itemEffect3 itemEffect[3]
-#define mask 0x3F
-#endif
+ u32 statusCure;
if (!IS_POKEMON_ITEM(item))
- {
return 22;
- }
+
+ // Read the item's effect properties.
+ if (item == ITEM_ENIGMA_BERRY)
+ itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
else
+ itemEffect = gItemEffectTable[item - ITEM_POTION];
+
+ if ((itemEffect[0] & 0x3F) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & 0x80))
+ return 0;
+ else if (itemEffect[0] & 0x40)
+ return 10;
+ else if (itemEffect[3] & 0x40)
+ return 1;
+
+ statusCure = itemEffect[3] & 0x3F;
+ if (statusCure || (itemEffect[0] >> 7))
{
- // Read the item's effect properties.
- if (item == ITEM_ENIGMA_BERRY)
- {
- itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
- }
+ if (statusCure == 0x20)
+ return 4;
+ else if (statusCure == 0x10)
+ return 3;
+ else if (statusCure == 0x8)
+ return 5;
+ else if (statusCure == 0x4)
+ return 6;
+ else if (statusCure == 0x2)
+ return 7;
+ else if (statusCure == 0x1)
+ return 8;
+ else if (itemEffect[0] >> 7 && !statusCure)
+ return 9;
else
- {
- itemEffect = gItemEffectTable[item - ITEM_POTION];
- }
-
-#ifndef NONMATCHING
- itemEffect0 = itemEffect[0];
- mask = 0x3F;
-#endif
+ return 11;
+ }
- if ((itemEffect0 & mask) || itemEffect[1] || itemEffect[2])
- {
- return 0;
- }
-#ifndef NONMATCHING
- itemEffect3 = itemEffect[3];
-#endif
- if (itemEffect3 & 0x80)
- {
- return 0;
- }
- else if (itemEffect0 & 0x40)
- {
- return 10;
- }
- else if (itemEffect3 & 0x40)
- {
- return 1;
- }
- else if ((itemEffect3 & mask) || (itemEffect0 >> 7))
- {
- if ((itemEffect3 & mask) == 0x20)
- {
- return 4;
- }
- else if ((itemEffect3 & mask) == 0x10)
- {
- return 3;
- }
- else if ((itemEffect3 & mask) == 0x8)
- {
- return 5;
- }
- else if ((itemEffect3 & mask) == 0x4)
- {
- return 6;
- }
- else if ((itemEffect3 & mask) == 0x2)
- {
- return 7;
- }
- else if ((itemEffect3 & mask) == 0x1)
- {
- return 8;
- }
- // alternate fakematching
- // itemEffect0_r0 = itemEffect0 >> 7;
- // asm(""); // increase live length for greg
- // if ((itemEffect0_r0 != 0) && (itemEffect3 & mask) == 0)
-#ifndef NONMATCHING
- else if (((itemEffect0_r0 = itemEffect0 >> 7) != 0) && (itemEffect3 & mask) == 0)
-#else
- else if (((itemEffect[0] >> 7) != 0) && (itemEffect[3] & 0x3F) == 0)
-#endif
- {
- return 9;
- }
- else
- {
- return 11;
- }
- }
- else if (itemEffect[4] & 0x44)
- {
- return 2;
- }
- else if (itemEffect[4] & 0x2)
- {
- return 12;
- }
- else if (itemEffect[4] & 0x1)
- {
- return 13;
- }
- else if (itemEffect[5] & 0x8)
- {
- return 14;
- }
- else if (itemEffect[5] & 0x4)
- {
- return 15;
- }
- else if (itemEffect[5] & 0x2)
- {
- return 16;
- }
- else if (itemEffect[5] & 0x1)
- {
- return 17;
- }
- else if (itemEffect[4] & 0x80)
- {
- return 18;
- }
- else if (itemEffect[4] & 0x20)
- {
- return 19;
- }
- else if (itemEffect[5] & 0x10)
- {
- return 20;
- }
- else if (itemEffect[4] & 0x18)
- {
- return 21;
- }
+ if (itemEffect[4] & 0x44)
+ return 2;
+ else if (itemEffect[4] & 0x2)
+ return 12;
+ else if (itemEffect[4] & 0x1)
+ return 13;
+ else if (itemEffect[5] & 0x8)
+ return 14;
+ else if (itemEffect[5] & 0x4)
+ return 15;
+ else if (itemEffect[5] & 0x2)
+ return 16;
+ else if (itemEffect[5] & 0x1)
+ return 17;
+ else if (itemEffect[4] & 0x80)
+ return 18;
+ else if (itemEffect[4] & 0x20)
+ return 19;
+ else if (itemEffect[5] & 0x10)
+ return 20;
+ else if (itemEffect[4] & 0x18)
+ return 21;
+ else
return 22;
- }
-#ifdef NONMATCHING
-#undef itemEffect0
-#undef itemEffect3
-#undef mask
-#endif
}
static void sub_81B7E4C(u8 taskId)
diff --git a/src/player_pc.c b/src/player_pc.c
index 474cecaf5..0d08a5e7b 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -355,11 +355,11 @@ static void PlayerPCProcessMenuInput(u8 taskId)
else
inputOptionId = Menu_ProcessInputNoWrap();
- switch(inputOptionId)
+ switch (inputOptionId)
{
- case -2:
+ case MENU_NOTHING_CHOSEN:
break;
- case -1:
+ case MENU_B_PRESSED:
PlaySE(SE_SELECT);
sub_8198070(data[4], FALSE);
ClearWindowTilemap(data[4]);
@@ -464,13 +464,13 @@ static void ItemStorageMenuProcessInput(u8 taskId)
r5 = Menu_GetCursorPos();
inputOptionId = Menu_ProcessInput();
r2 = Menu_GetCursorPos();
- switch(inputOptionId)
+ switch (inputOptionId)
{
- case -2:
+ case MENU_NOTHING_CHOSEN:
if (r5 != r2)
ItemStorageMenuPrint(gPCText_OptionDescList[r2]);
break;
- case -1:
+ case MENU_B_PRESSED:
PlaySE(SE_SELECT);
ItemStorage_Exit(taskId);
break;
@@ -638,14 +638,14 @@ static void Mailbox_ProcessInput(u8 taskId)
if (!gPaletteFade.active)
{
- inputOptionId = ListMenuHandleInputGetItemId(data[5]);
+ inputOptionId = ListMenu_ProcessInput(data[5]);
ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
- switch(inputOptionId)
+ switch (inputOptionId)
{
- case -1:
+ case LIST_NOTHING_CHOSEN:
break;
- case -2:
+ case LIST_B_PRESSED:
PlaySE(SE_SELECT);
RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorId);
Mailbox_ReturnToPlayerPC(taskId);
@@ -1145,13 +1145,13 @@ static void ItemStorage_ProcessInput(u8 taskId)
}
else
{
- id = ListMenuHandleInputGetItemId(data[5]);
+ id = ListMenu_ProcessInput(data[5]);
ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
switch(id)
{
- case -1:
+ case LIST_NOTHING_CHOSEN:
break;
- case -2:
+ case LIST_B_PRESSED:
PlaySE(SE_SELECT);
ItemStorage_GoBackToPlayerPCMenu(taskId);
break;
@@ -1218,21 +1218,23 @@ static void sub_816C4FC(u8 taskId)
ItemStorage_DoItemSwap(taskId, FALSE);
return;
}
- id = ListMenuHandleInputGetItemId(data[5]);
+ id = ListMenu_ProcessInput(data[5]);
ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
sub_81223FC(gUnknown_0203BCC4->spriteIds, 7, 0);
sub_816C690(playerPCItemPageInfo.cursorPos);
switch(id)
{
- case -1:
+ case LIST_NOTHING_CHOSEN:
break;
- case -2:
+ case LIST_B_PRESSED:
if (gMain.newKeys & A_BUTTON)
{
ItemStorage_DoItemSwap(taskId, FALSE);
}
else
+ {
ItemStorage_DoItemSwap(taskId, TRUE);
+ }
break;
default:
ItemStorage_DoItemSwap(taskId, FALSE);
diff --git a/src/pokeblock.c b/src/pokeblock.c
index 7c07f9655..3fd4f34df 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -998,7 +998,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId)
else
{
u16 oldPosition = sSavedPokeblockData.lastItemPos;
- s32 itemId = ListMenuHandleInputGetItemId(data[0]);
+ s32 itemId = ListMenu_ProcessInput(data[0]);
ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (oldPosition != sSavedPokeblockData.lastItemPos)
@@ -1044,7 +1044,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId)
{
u16 i = sSavedPokeblockData.lastItemPage;
u16 var = sSavedPokeblockData.lastItemPos;
- s32 itemId = ListMenuHandleInputGetItemId(data[0]);
+ s32 itemId = ListMenu_ProcessInput(data[0]);
ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (i != sSavedPokeblockData.lastItemPage || var != sSavedPokeblockData.lastItemPos)
diff --git a/src/pokedex.c b/src/pokedex.c
index f99a8226a..c47ada5b8 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -30,8 +30,6 @@
#include "constants/songs.h"
#include "constants/species.h"
-extern u8 gDexCryScreenState;
-
// EWRAM
static EWRAM_DATA struct PokedexView *sPokedexView = NULL;
static EWRAM_DATA u16 gUnknown_02039B50 = 0;
diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c
index 4a9227b99..c385141d5 100755
--- a/src/pokedex_cry_screen.c
+++ b/src/pokedex_cry_screen.c
@@ -39,7 +39,10 @@ static void sub_8145824(u8, s16, u8);
static void sub_814596C(struct Sprite *);
static void sub_8145B24(s8);
-extern u8 gDexCryScreenState;
+// IWRAM common
+u8 gDexCryScreenState;
+
+// EWRAM vars
static EWRAM_DATA struct PokedexCryScreen *sDexCryScreen = NULL;
static EWRAM_DATA u8 *sCryWaveformWindowTiledata = NULL;
static EWRAM_DATA struct PokedexCryVolumeMeter *sCryVolumeMeter = NULL;
diff --git a/src/pokemon.c b/src/pokemon.c
index 1e07ee168..5f1664450 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -37,6 +37,7 @@
#include "constants/battle_move_effects.h"
#include "constants/hold_effects.h"
#include "constants/items.h"
+#include "constants/layouts.h"
#include "constants/moves.h"
#include "constants/songs.h"
#include "constants/species.h"
@@ -5242,14 +5243,14 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
gAbsentBattlerFlags &= ~gBitTable[battlerId];
CopyPlayerPartyMonToBattleData(battlerId, pokemon_order_func(gBattlerPartyIndexes[battlerId]));
- if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.unk4 < 255)
- gBattleResults.unk4++;
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255)
+ gBattleResults.numRevivesUsed++;
}
else
{
gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2];
- if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.unk4 < 255)
- gBattleResults.unk4++;
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255)
+ gBattleResults.numRevivesUsed++;
}
}
}
@@ -5289,8 +5290,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
gBattleMons[battlerId].hp = dataUnsigned;
if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
- if (gBattleResults.unk3 < 255)
- gBattleResults.unk3++;
+ if (gBattleResults.numHealingItemsUsed < 255)
+ gBattleResults.numHealingItemsUsed++;
// I have to re-use this variable to match.
r5 = gActiveBattler;
gActiveBattler = battlerId;
@@ -5329,7 +5330,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
SetMonData(mon, MON_DATA_PP1 + r5, &dataUnsigned);
if (gMain.inBattle
&& battlerId != 4 && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[battlerId].unk18_b & gBitTable[r5]))
+ && !(gDisableStructs[battlerId].mimickedMoves & gBitTable[r5]))
gBattleMons[battlerId].pp[r5] = dataUnsigned;
retVal = FALSE;
}
@@ -5354,7 +5355,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned);
if (gMain.inBattle
&& battlerId != 4 && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)
- && !(gDisableStructs[battlerId].unk18_b & gBitTable[moveIndex]))
+ && !(gDisableStructs[battlerId].mimickedMoves & gBitTable[moveIndex]))
gBattleMons[battlerId].pp[moveIndex] = dataUnsigned;
retVal = FALSE;
}
@@ -6848,7 +6849,7 @@ void SetWildMonHeldItem(void)
var1 = 20;
var2 = 80;
}
- if (gMapHeader.mapLayoutId == 0x1A4)
+ if (gMapHeader.mapLayoutId == LAYOUT_ALTERING_CAVE)
{
s32 alteringCaveId = GetWildMonTableIdInAlteringCave(species);
if (alteringCaveId != 0)
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index bcbb60e21..ecb8f4950 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -1238,7 +1238,6 @@ const u16* GetValidMonIconPalettePtr(u16 species)
return gMonIconPaletteTable[gMonIconPaletteIndices[species]].data;
}
-// TODO: try to find a way to avoid using asm statement
u8 UpdateMonIconFrame(struct Sprite *sprite)
{
u8 result = 0;
@@ -1262,10 +1261,7 @@ u8 UpdateMonIconFrame(struct Sprite *sprite)
(u8 *)sprite->images + (sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame),
(u8 *)(OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP),
sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
- {
- register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
- sprite->animDelayCounter = duration;
- }
+ sprite->animDelayCounter = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration & 0xFF;
sprite->animCmdIndex++;
result = sprite->animCmdIndex;
break;
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index 78fec2fc5..c0aec4ddd 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -1753,7 +1753,7 @@ static void Task_PokemonStorageSystemPC(u8 taskId)
task->data[2] = Menu_ProcessInput();
switch(task->data[2])
{
- case -2:
+ case MENU_NOTHING_CHOSEN:
task->data[3] = task->data[1];
if (gMain.newKeys & DPAD_UP && --task->data[3] < 0)
task->data[3] = 4;
@@ -1767,7 +1767,7 @@ static void Task_PokemonStorageSystemPC(u8 taskId)
AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3);
}
break;
- case -1:
+ case MENU_B_PRESSED:
case 4:
sub_819746C(task->data[15], TRUE);
ScriptContext2_Disable();
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 14bfba4ad..d878d2c9e 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -43,10 +43,11 @@
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/region_map_sections.h"
+#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/species.h"
-static EWRAM_DATA struct UnkSummaryStruct
+static EWRAM_DATA struct PssData
{
/*0x00*/ union {
struct Pokemon *mons;
@@ -135,21 +136,21 @@ static bool8 SummaryScreen_DecompressGraphics(void);
static void CopyMonToSummaryStruct(struct Pokemon* a);
static bool8 ExtractMonDataToSummaryStruct(struct Pokemon* a);
static void sub_81C0348(void);
-static void sub_81C0484(u8 taskId);
-static void sub_81C0510(u8 taskId);
-static void sub_81C0604(u8 taskId, s8 a);
+static void CloseSummaryScreen(u8 taskId);
+static void HandleInput(u8 taskId);
+static void ChangePokemon(u8 taskId, s8 a);
static void sub_81C0704(u8 taskId);
static s8 sub_81C08F8(s8 a);
static s8 sub_81C09B4(s8 a);
static bool8 sub_81C0A50(struct Pokemon* mon);
-static void sub_81C0A8C(u8 taskId, s8 a);
+static void ChangePage(u8 taskId, s8 a);
static void sub_81C0B8C(u8 taskId);
static void sub_81C0C68(u8 taskId);
static void sub_81C0CC4(u8 taskId);
static void sub_81C0D44(u8 taskId);
static void sub_81C0E24(void);
static void sub_81C0E48(u8 taskId);
-static void sub_81C0F44(u8 taskId);
+static void HandleInput_MoveSelect(u8 taskId);
static bool8 sub_81C1040(void);
static void sub_81C1070(s16* a, s8 b, u8* c);
static void sub_81C11F4(u8 a);
@@ -173,21 +174,21 @@ static void sub_81C20F0(u8 taskId);
static void sub_81C2194(u16 *a, u16 b, u8 c);
static void sub_81C2228(struct Pokemon* mon);
static void DrawExperienceProgressBar(struct Pokemon* mon);
-static void sub_81C240C(u16 a);
+static void DrawContestMoveHearts(u16 move);
static void sub_81C2524(void);
-static void sub_81C2554(void);
+static void ResetWindows(void);
static void sub_81C25E8(void);
static void sub_81C2628(void);
static void sub_81C2794(void);
static void sub_81C27DC(struct Pokemon *mon, u16 a);
static void PrintPageNamesAndStatsPageToWindows(void);
-static void sub_81C2AFC(u8 a);
-static void sub_81C2C38(u8 a);
+static void CreatePageWindowTilemaps(u8 a);
+static void ClearPageWindowTilemaps(u8 a);
static void SummaryScreen_RemoveWindowByIndex(u8 a);
-static void sub_81C2D9C(u8 a);
-static void sub_81C2DE4(u8 a);
-static void sub_81C2E00(void);
-static void sub_81C2E40(u8 taskId);
+static void PrintPageSpecificText(u8 a);
+static void CreateTextPrinterTask(u8 a);
+static void PrintInfoPageText(void);
+static void Task_PrintInfoPage(u8 taskId);
static void PrintMonOTName(void);
static void PrintMonOTID(void);
static void PrintMonAbilityName(void);
@@ -203,39 +204,39 @@ static void PrintEggOTName(void);
static void PrintEggOTID(void);
static void PrintEggState(void);
static void PrintEggMemo(void);
-static void sub_81C3554(u8 taskId);
+static void Task_PrintSkillsPage(u8 taskId);
static void PrintHeldItemName(void);
-static void sub_81C3530(void);
+static void PrintSkillsPageText(void);
static void PrintRibbonCount(void);
static void BufferLeftColumnStats(void);
static void PrintLeftColumnStats(void);
static void BufferRightColumnStats(void);
static void PrintRightColumnStats(void);
static void PrintExpPointsNextLevel(void);
-static void sub_81C3984(void);
-static void sub_81C39F0(u8 taskId);
+static void PrintBattleMoves(void);
+static void Task_PrintBattleMoves(u8 taskId);
static void PrintMoveNameAndPP(u8 a);
-static void sub_81C3D08(void);
-static void sub_81C3D54(u8 taskId);
+static void PrintContestMoves(void);
+static void Task_PrintContestMoves(u8 taskId);
static void PrintContestMoveDescription(u8 a);
static void PrintMoveDetails(u16 a);
static void PrintNewMoveDetailsOrCancelText(void);
static void sub_81C4064(void);
static void sub_81C40A0(u8 a, u8 b);
static void PrintHMMovesCantBeForgotten(void);
-static void sub_81C4190(void);
-static void sub_81C4204(u8 a, u8 b);
-static void sub_81C424C(void);
-static void sub_81C4280(void);
-static void sub_81C42C8(void);
-static void sub_81C43A0(void);
-static void sub_81C4420(void);
-static void sub_81C4484(void);
-static void sub_81C44F0(void);
+static void ResetSpriteIds(void);
+static void SetSpriteInvisibility(u8 spriteArrayId, bool8 invisible);
+static void HidePageSpecificSprites(void);
+static void SetTypeIcons(void);
+static void CreateMoveTypeIcons(void);
+static void SetMonTypeIcons(void);
+static void SetMoveTypeIcons(void);
+static void SetContestMoveTypeIcons(void);
+static void SetNewMoveTypeIcon(void);
static void sub_81C4568(u8 a, u8 b);
-static u8 sub_81C45F4(struct Pokemon *a, s16 *b);
+static u8 CreatePokemonSprite(struct Pokemon *a, s16 *b);
static u8 sub_81C47B4(struct Pokemon *unused);
-static void sub_81C4844(struct Sprite *);
+static void SpriteCB_Pokemon(struct Sprite *);
static void sub_81C48F0(void);
static void CreateMonMarkingsSprite(struct Pokemon *mon);
static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *mon);
@@ -626,22 +627,26 @@ static const u8 sTextColors_861CD2C[][3] =
{0, 5, 6},
{0, 7, 8}
};
+
static const u8 gUnknown_0861CD53[] = INCBIN_U8("graphics/interface/summary_a_button.4bpp");
static const u8 gUnknown_0861CDD3[] = INCBIN_U8("graphics/interface/summary_b_button.4bpp");
-static void (*const gUnknown_0861CE54[])(void) =
+
+static void (*const sTextPrinterFunctions[])(void) =
{
- sub_81C2E00,
- sub_81C3530,
- sub_81C3984,
- sub_81C3D08
+ PrintInfoPageText,
+ PrintSkillsPageText,
+ PrintBattleMoves,
+ PrintContestMoves
};
-static void (*const gUnknown_0861CE64[])(u8 taskId) =
+
+static void (*const sTextPrinterTasks[])(u8 taskId) =
{
- sub_81C2E40,
- sub_81C3554,
- sub_81C39F0,
- sub_81C3D54
+ Task_PrintInfoPage,
+ Task_PrintSkillsPage,
+ Task_PrintBattleMoves,
+ Task_PrintContestMoves
};
+
static const u8 gUnknown_0861CE74[] = _("{COLOR LIGHT_RED}{SHADOW GREEN}");
static const u8 gUnknown_0861CE7B[] = _("{COLOR WHITE}{SHADOW DARK_GREY}");
static const u8 gUnknown_0861CE82[] = _("{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}\n{SPECIAL_F7 0x03}");
@@ -968,13 +973,13 @@ static const union AnimCmd *const sSpriteAnimTable_StatusCondition[] = {
sSpriteAnim_StatusPokerus,
sSpriteAnim_StatusFaint,
};
-static const struct CompressedSpriteSheet gUnknown_0861D0F8 =
+static const struct CompressedSpriteSheet sStatusIconsSpriteSheet =
{
.data = gStatusGfx_Icons,
.size = 0x380,
.tag = 30001
};
-static const struct CompressedSpritePalette gUnknown_0861D100 =
+static const struct CompressedSpritePalette sStatusIconsSpritePalette =
{
.data = gStatusPal_Icons,
.tag = 30001
@@ -1104,7 +1109,7 @@ static bool8 SummaryScreen_LoadGraphics(void)
gMain.state++;
break;
case 7:
- sub_81C2554();
+ ResetWindows();
gMain.state++;
break;
case 8:
@@ -1129,7 +1134,7 @@ static bool8 SummaryScreen_LoadGraphics(void)
gMain.state++;
break;
case 13:
- sub_81C2D9C(pssData->currPageIndex);
+ PrintPageSpecificText(pssData->currPageIndex);
gMain.state++;
break;
case 14:
@@ -1137,17 +1142,17 @@ static bool8 SummaryScreen_LoadGraphics(void)
gMain.state++;
break;
case 15:
- sub_81C2AFC(pssData->currPageIndex);
+ CreatePageWindowTilemaps(pssData->currPageIndex);
gMain.state++;
break;
case 16:
- sub_81C4190();
- sub_81C42C8();
+ ResetSpriteIds();
+ CreateMoveTypeIcons();
pssData->unk40F0 = 0;
gMain.state++;
break;
case 17:
- pssData->spriteIds[0] = sub_81C45F4(&pssData->currentMon, &pssData->unk40F0);
+ pssData->spriteIds[0] = CreatePokemonSprite(&pssData->currentMon, &pssData->unk40F0);
if (pssData->spriteIds[0] != 0xFF)
{
pssData->unk40F0 = 0;
@@ -1167,12 +1172,12 @@ static bool8 SummaryScreen_LoadGraphics(void)
gMain.state++;
break;
case 21:
- sub_81C4280();
+ SetTypeIcons();
gMain.state++;
break;
case 22:
if (pssData->mode != PSS_MODE_SELECT_MOVE)
- CreateTask(sub_81C0510, 0);
+ CreateTask(HandleInput, 0);
else
CreateTask(sub_81C171C, 0);
gMain.state++;
@@ -1182,7 +1187,7 @@ static bool8 SummaryScreen_LoadGraphics(void)
gMain.state++;
break;
case 24:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
gPaletteFade.bufferTransferDisabled = 0;
gMain.state++;
break;
@@ -1259,11 +1264,11 @@ static bool8 SummaryScreen_DecompressGraphics(void)
pssData->unk40F0++;
break;
case 9:
- LoadCompressedSpriteSheet(&gUnknown_0861D0F8);
+ LoadCompressedSpriteSheet(&sStatusIconsSpriteSheet);
pssData->unk40F0++;
break;
case 10:
- LoadCompressedSpritePalette(&gUnknown_0861D100);
+ LoadCompressedSpritePalette(&sStatusIconsSpritePalette);
pssData->unk40F0++;
break;
case 11:
@@ -1374,7 +1379,7 @@ static void sub_81C0348(void)
}
else
{
- sub_81C240C(pssData->summary.moves[pssData->firstMoveIndex]);
+ DrawContestMoveHearts(pssData->summary.moves[pssData->firstMoveIndex]);
sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], 3, 0);
sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], 1, 0);
SetBgTilemapBuffer(1, pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0]);
@@ -1402,13 +1407,13 @@ static void sub_81C0434(void)
Free(pssData);
}
-static void sub_81C044C(u8 taskId)
+static void BeginCloseSummaryScreen(u8 taskId)
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- gTasks[taskId].func = sub_81C0484;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = CloseSummaryScreen;
}
-static void sub_81C0484(u8 taskId)
+static void CloseSummaryScreen(u8 taskId)
{
if (sub_81221EC() != TRUE && !gPaletteFade.active)
{
@@ -1426,25 +1431,25 @@ static void sub_81C0484(u8 taskId)
}
}
-static void sub_81C0510(u8 taskId)
+static void HandleInput(u8 taskId)
{
if (sub_81221EC() != TRUE && !gPaletteFade.active)
{
if (gMain.newKeys & DPAD_UP)
{
- sub_81C0604(taskId, -1);
+ ChangePokemon(taskId, -1);
}
else if (gMain.newKeys & DPAD_DOWN)
{
- sub_81C0604(taskId, 1);
+ ChangePokemon(taskId, 1);
}
else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysState() == 1)
{
- sub_81C0A8C(taskId, -1);
+ ChangePage(taskId, -1);
}
else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysState() == 2)
{
- sub_81C0A8C(taskId, 1);
+ ChangePage(taskId, 1);
}
else if (gMain.newKeys & A_BUTTON)
{
@@ -1454,7 +1459,7 @@ static void sub_81C0510(u8 taskId)
{
sub_81C48F0();
PlaySE(SE_SELECT);
- sub_81C044C(taskId);
+ BeginCloseSummaryScreen(taskId);
}
else
{
@@ -1467,12 +1472,12 @@ static void sub_81C0510(u8 taskId)
{
sub_81C48F0();
PlaySE(SE_SELECT);
- sub_81C044C(taskId);
+ BeginCloseSummaryScreen(taskId);
}
}
}
-static void sub_81C0604(u8 taskId, s8 a)
+static void ChangePokemon(u8 taskId, s8 a)
{
s8 r4_2;
@@ -1510,7 +1515,7 @@ static void sub_81C0604(u8 taskId, s8 a)
PlaySE(SE_SELECT);
if (pssData->summary.unk7 != 0)
{
- sub_81C4204(2, 1);
+ SetSpriteInvisibility(2, 1);
ClearWindowTilemap(13);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C2074(0, 2);
@@ -1559,7 +1564,7 @@ static void sub_81C0704(u8 taskId)
data[1] = 0;
break;
case 8:
- pssData->spriteIds[0] = sub_81C45F4(&pssData->currentMon, &data[1]);
+ pssData->spriteIds[0] = CreatePokemonSprite(&pssData->currentMon, &data[1]);
if (pssData->spriteIds[0] == 0xFF)
return;
gSprites[pssData->spriteIds[0]].data[2] = 1;
@@ -1567,13 +1572,13 @@ static void sub_81C0704(u8 taskId)
data[1] = 0;
break;
case 9:
- sub_81C4280();
+ SetTypeIcons();
break;
case 10:
sub_81C25E8();
break;
case 11:
- sub_81C2D9C(pssData->currPageIndex);
+ PrintPageSpecificText(pssData->currPageIndex);
sub_81C2524();
break;
case 12:
@@ -1583,7 +1588,7 @@ static void sub_81C0704(u8 taskId)
if (sub_81221EC() == 0 && FuncIsActiveTask(sub_81C20F0) == 0)
{
data[0] = 0;
- gTasks[taskId].func = sub_81C0510;
+ gTasks[taskId].func = HandleInput;
}
return;
}
@@ -1656,7 +1661,7 @@ static bool8 sub_81C0A50(struct Pokemon* mon)
return FALSE;
}
-static void sub_81C0A8C(u8 taskId, s8 b)
+static void ChangePage(u8 taskId, s8 b)
{
struct PokeSummary *summary = &pssData->summary;
s16 *data = gTasks[taskId].data;
@@ -1669,15 +1674,15 @@ static void sub_81C0A8C(u8 taskId, s8 b)
return;
PlaySE(SE_SELECT);
- sub_81C2C38(pssData->currPageIndex);
+ ClearPageWindowTilemaps(pssData->currPageIndex);
pssData->currPageIndex += b;
data[0] = 0;
if (b == 1)
SetTaskFuncWithFollowupFunc(taskId, sub_81C0B8C, gTasks[taskId].func);
else
SetTaskFuncWithFollowupFunc(taskId, sub_81C0CC4, gTasks[taskId].func);
- sub_81C2DE4(pssData->currPageIndex);
- sub_81C424C();
+ CreateTextPrinterTask(pssData->currPageIndex);
+ HidePageSpecificSprites();
}
static void sub_81C0B8C(u8 taskId)
@@ -1717,8 +1722,8 @@ static void sub_81C0C68(u8 taskId)
data[1] = 0;
data[0] = 0;
sub_81C1BA0();
- sub_81C2AFC(pssData->currPageIndex);
- sub_81C4280();
+ CreatePageWindowTilemaps(pssData->currPageIndex);
+ SetTypeIcons();
sub_81C0E24();
SwitchTaskToFollowupFunc(taskId);
}
@@ -1766,8 +1771,8 @@ static void sub_81C0D44(u8 taskId)
data[1] = 0;
data[0] = 0;
sub_81C1BA0();
- sub_81C2AFC(pssData->currPageIndex);
- sub_81C4280();
+ CreatePageWindowTilemaps(pssData->currPageIndex);
+ SetTypeIcons();
sub_81C0E24();
SwitchTaskToFollowupFunc(taskId);
}
@@ -1797,15 +1802,15 @@ static void sub_81C0E48(u8 taskId)
sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], 1, 0);
PrintMoveDetails(move);
PrintNewMoveDetailsOrCancelText();
- sub_81C44F0();
+ SetNewMoveTypeIcon();
schedule_bg_copy_tilemap_to_vram(0);
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
sub_81C4AF8(8);
- gTasks[taskId].func = sub_81C0F44;
+ gTasks[taskId].func = HandleInput_MoveSelect;
}
-static void sub_81C0F44(u8 taskId)
+static void HandleInput_MoveSelect(u8 taskId)
{
u8 id = taskId;
s16 *data = gTasks[taskId].data;
@@ -1883,7 +1888,7 @@ static void sub_81C1070(s16 *a, s8 b, u8 *c)
if (move != 0)
break;
}
- sub_81C240C(move);
+ DrawContestMoveHearts(move);
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
PrintMoveDetails(move);
@@ -1930,7 +1935,7 @@ static void sub_81C11F4(u8 taskId)
schedule_bg_copy_tilemap_to_vram(0);
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81C0510;
+ gTasks[taskId].func = HandleInput;
}
static void sub_81C129C(u8 taskId)
@@ -2003,10 +2008,10 @@ static void sub_81C13B0(u8 taskId, bool8 b)
move = pssData->summary.moves[pssData->firstMoveIndex];
PrintMoveDetails(move);
- sub_81C240C(move);
+ DrawContestMoveHearts(move);
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81C0F44;
+ gTasks[taskId].func = HandleInput_MoveSelect;
}
static void SwapMonMoves(struct Pokemon *mon, u8 moveIndex1, u8 moveIndex2)
@@ -2081,7 +2086,7 @@ static void SwapBoxMonMoves(struct BoxPokemon *mon, u8 moveIndex1, u8 moveIndex2
static void sub_81C171C(u8 taskId)
{
- sub_81C44F0();
+ SetNewMoveTypeIcon();
sub_81C4AF8(8);
gTasks[taskId].func = sub_81C174C;
}
@@ -2106,11 +2111,11 @@ static void sub_81C174C(u8 taskId)
}
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
{
- sub_81C0A8C(taskId, -1);
+ ChangePage(taskId, -1);
}
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2)
{
- sub_81C0A8C(taskId, 1);
+ ChangePage(taskId, 1);
}
else if (gMain.newKeys & A_BUTTON)
{
@@ -2120,7 +2125,7 @@ static void sub_81C174C(u8 taskId)
PlaySE(SE_SELECT);
gUnknown_0203CF21 = pssData->firstMoveIndex;
gSpecialVar_0x8005 = gUnknown_0203CF21;
- sub_81C044C(taskId);
+ BeginCloseSummaryScreen(taskId);
}
else
{
@@ -2135,7 +2140,7 @@ static void sub_81C174C(u8 taskId)
PlaySE(SE_SELECT);
gUnknown_0203CF21 = 4;
gSpecialVar_0x8005 = 4;
- sub_81C044C(taskId);
+ BeginCloseSummaryScreen(taskId);
}
}
}
@@ -2191,7 +2196,7 @@ static void sub_81C1940(u8 taskId)
ClearWindowTilemap(13);
move = pssData->summary.moves[pssData->firstMoveIndex];
gTasks[taskId].func = sub_81C174C;
- sub_81C0A8C(taskId, -1);
+ ChangePage(taskId, -1);
sub_81C1DA4(9, -2);
sub_81C1EFC(9, -2, move);
}
@@ -2205,7 +2210,7 @@ static void sub_81C1940(u8 taskId)
ClearWindowTilemap(13);
move = pssData->summary.moves[pssData->firstMoveIndex];
gTasks[taskId].func = sub_81C174C;
- sub_81C0A8C(taskId, 1);
+ ChangePage(taskId, 1);
sub_81C1DA4(9, -2);
sub_81C1EFC(9, -2, move);
}
@@ -2415,7 +2420,7 @@ static void sub_81C1F80(u8 taskId)
{
if (pssData->currPageIndex == 3 && FuncIsActiveTask(sub_81C0B8C) == 0)
PutWindowTilemap(15);
- sub_81C240C(data[2]);
+ DrawContestMoveHearts(data[2]);
}
else
{
@@ -2566,7 +2571,7 @@ static void DrawExperienceProgressBar(struct Pokemon *unused)
schedule_bg_copy_tilemap_to_vram(2);
}
-static void sub_81C240C(u16 move)
+static void DrawContestMoveHearts(u16 move)
{
u16 *tilemap = pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][1];
u8 i;
@@ -2618,7 +2623,7 @@ static void sub_81C2524(void)
ChangeBgX(3, 0, 0);
}
-static void sub_81C2554(void)
+static void ResetWindows(void)
{
u8 i;
InitWindows(gUnknown_0861CC24);
@@ -2628,7 +2633,7 @@ static void sub_81C2554(void)
{
FillWindowPixelBuffer(i, 0);
}
- for (i = 0; i < 8; i++)
+ for (i = 0; i < ARRAY_COUNT(pssData->windowIds); i++)
{
pssData->windowIds[i] = 0xFF;
}
@@ -2782,7 +2787,7 @@ static void PrintPageNamesAndStatsPageToWindows(void)
SummaryScreen_PrintTextOnWindow(15, gText_Jam, 0, 17, 0, 1);
}
-static void sub_81C2AFC(u8 a)
+static void CreatePageWindowTilemaps(u8 page)
{
u8 i;
@@ -2791,22 +2796,22 @@ static void sub_81C2AFC(u8 a)
ClearWindowTilemap(2);
ClearWindowTilemap(3);
- switch (a)
+ switch (page)
{
- case 0:
+ case PSS_PAGE_INFO:
PutWindowTilemap(0);
PutWindowTilemap(4);
if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE)
PutWindowTilemap(8);
PutWindowTilemap(9);
break;
- case 1:
+ case PSS_PAGE_SKILLS:
PutWindowTilemap(1);
PutWindowTilemap(10);
PutWindowTilemap(11);
PutWindowTilemap(12);
break;
- case 2:
+ case PSS_PAGE_BATTLE_MOVES:
PutWindowTilemap(2);
if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
@@ -2818,7 +2823,7 @@ static void sub_81C2AFC(u8 a)
PutWindowTilemap(5);
}
break;
- case 3:
+ case PSS_PAGE_CONTEST_MOVES:
PutWindowTilemap(3);
if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
@@ -2832,7 +2837,7 @@ static void sub_81C2AFC(u8 a)
break;
}
- for (i = 0; i < 8; i++)
+ for (i = 0; i < ARRAY_COUNT(pssData->windowIds); i++)
{
PutWindowTilemap(pssData->windowIds[i]);
}
@@ -2840,23 +2845,23 @@ static void sub_81C2AFC(u8 a)
schedule_bg_copy_tilemap_to_vram(0);
}
-static void sub_81C2C38(u8 a)
+static void ClearPageWindowTilemaps(u8 page)
{
u8 i;
- switch (a)
+ switch (page)
{
- case 0:
+ case PSS_PAGE_INFO:
ClearWindowTilemap(4);
if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE)
ClearWindowTilemap(8);
ClearWindowTilemap(9);
break;
- case 1:
+ case PSS_PAGE_SKILLS:
ClearWindowTilemap(10);
ClearWindowTilemap(11);
ClearWindowTilemap(12);
break;
- case 2:
+ case PSS_PAGE_BATTLE_MOVES:
if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
@@ -2867,7 +2872,7 @@ static void sub_81C2C38(u8 a)
ClearWindowTilemap(5);
}
break;
- case 3:
+ case PSS_PAGE_CONTEST_MOVES:
if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
@@ -2880,7 +2885,7 @@ static void sub_81C2C38(u8 a)
break;
}
- for (i = 0; i < 8; i++)
+ for (i = 0; i < ARRAY_COUNT(pssData->windowIds); i++)
{
SummaryScreen_RemoveWindowByIndex(i);
}
@@ -2910,23 +2915,23 @@ static void SummaryScreen_RemoveWindowByIndex(u8 windowIndex)
}
}
-static void sub_81C2D9C(u8 pageIndex)
+static void PrintPageSpecificText(u8 pageIndex)
{
u16 i;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < ARRAY_COUNT(pssData->windowIds); i++)
{
if (pssData->windowIds[i] != 0xFF)
FillWindowPixelBuffer(pssData->windowIds[i], 0);
}
- gUnknown_0861CE54[pageIndex]();
+ sTextPrinterFunctions[pageIndex]();
}
-static void sub_81C2DE4(u8 pageIndex)
+static void CreateTextPrinterTask(u8 pageIndex)
{
- CreateTask(gUnknown_0861CE64[pageIndex], 16);
+ CreateTask(sTextPrinterTasks[pageIndex], 16);
}
-static void sub_81C2E00(void)
+static void PrintInfoPageText(void)
{
if (pssData->summary.isEgg)
{
@@ -2946,7 +2951,7 @@ static void sub_81C2E00(void)
}
}
-static void sub_81C2E40(u8 taskId)
+static void Task_PrintInfoPage(u8 taskId)
{
s16 *data = gTasks[taskId].data;
switch (data[0])
@@ -3074,7 +3079,7 @@ static void PrintMonTrainerMemo(void)
static void BufferNatureString(void)
{
- struct UnkSummaryStruct *sumStruct = pssData;
+ struct PssData *sumStruct = pssData;
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gNatureNamePointers[sumStruct->summary.nature]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, gText_EmptyString5);
}
@@ -3200,7 +3205,7 @@ static void PrintEggMemo(void)
SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 3), text, 0, 1, 0, 0);
}
-static void sub_81C3530(void)
+static void PrintSkillsPageText(void)
{
PrintHeldItemName();
PrintRibbonCount();
@@ -3211,7 +3216,7 @@ static void sub_81C3530(void)
PrintExpPointsNextLevel();
}
-static void sub_81C3554(u8 taskId)
+static void Task_PrintSkillsPage(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -3357,7 +3362,7 @@ static void PrintExpPointsNextLevel(void)
SummaryScreen_PrintTextOnWindow(windowId, gStringVar1, offset, 17, 0, 0);
}
-static void sub_81C3984(void)
+static void PrintBattleMoves(void)
{
PrintMoveNameAndPP(0);
PrintMoveNameAndPP(1);
@@ -3379,7 +3384,7 @@ static void sub_81C3984(void)
}
}
-static void sub_81C39F0(u8 taskId)
+static void Task_PrintBattleMoves(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -3430,7 +3435,7 @@ static void PrintMoveNameAndPP(u8 moveIndex)
u32 ppState;
const u8 *text;
u32 offset;
- struct UnkSummaryStruct *summaryStruct = pssData;
+ struct PssData *summaryStruct = pssData;
u8 moveNameWindowId = AddWindowFromTemplateList(gUnknown_0861CD14, 0);
u8 ppValueWindowId = AddWindowFromTemplateList(gUnknown_0861CD14, 1);
u16 move = summaryStruct->summary.moves[moveIndex];
@@ -3493,7 +3498,7 @@ static void PrintMovePowerAndAccuracy(u16 moveIndex)
}
}
-static void sub_81C3D08(void)
+static void PrintContestMoves(void)
{
PrintMoveNameAndPP(0);
PrintMoveNameAndPP(1);
@@ -3507,7 +3512,7 @@ static void sub_81C3D08(void)
}
}
-static void sub_81C3D54(u8 taskId)
+static void Task_PrintContestMoves(u8 taskId)
{
s16 *data = gTasks[taskId].data;
s16 dataa = data[0] - 1;
@@ -3641,11 +3646,11 @@ static void PrintHMMovesCantBeForgotten(void)
SummaryScreen_PrintTextOnWindow(windowId, gText_HMMovesCantBeForgotten2, 6, 1, 0, 0);
}
-static void sub_81C4190(void)
+static void ResetSpriteIds(void)
{
u8 i;
- for (i = 0; i < 28; i++)
+ for (i = 0; i < ARRAY_COUNT(pssData->spriteIds); i++)
{
pssData->spriteIds[i] = 0xFF;
}
@@ -3660,41 +3665,42 @@ static void DestroySpriteInArray(u8 spriteArrayId)
}
}
-static void sub_81C4204(u8 spriteArrayId, bool8 invisible)
+static void SetSpriteInvisibility(u8 spriteArrayId, bool8 invisible)
{
gSprites[pssData->spriteIds[spriteArrayId]].invisible = invisible;
}
-static void sub_81C424C(void)
+static void HidePageSpecificSprites(void)
{
+// Keeps Pokémon, caught ball and status sprites visible.
u8 i;
- for (i = 3; i < 28; i++)
+ for (i = 3; i < ARRAY_COUNT(pssData->spriteIds); i++)
{
if (pssData->spriteIds[i] != 0xFF)
- sub_81C4204(i, TRUE);
+ SetSpriteInvisibility(i, TRUE);
}
}
-static void sub_81C4280(void)
+static void SetTypeIcons(void)
{
switch (pssData->currPageIndex)
{
- case 0:
- sub_81C43A0();
+ case PSS_PAGE_INFO:
+ SetMonTypeIcons();
break;
- case 2:
- sub_81C4420();
- sub_81C44F0();
+ case PSS_PAGE_BATTLE_MOVES:
+ SetMoveTypeIcons();
+ SetNewMoveTypeIcon();
break;
- case 3:
- sub_81C4484();
- sub_81C44F0();
+ case PSS_PAGE_CONTEST_MOVES:
+ SetContestMoveTypeIcons();
+ SetNewMoveTypeIcon();
break;
}
}
-static void sub_81C42C8(void)
+static void CreateMoveTypeIcons(void)
{
u8 i;
@@ -3703,7 +3709,7 @@ static void sub_81C42C8(void)
if (pssData->spriteIds[i] == 0xFF)
pssData->spriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 0, 0, 2);
- sub_81C4204(i, TRUE);
+ SetSpriteInvisibility(i, TRUE);
}
}
@@ -3714,16 +3720,16 @@ static void SetMoveTypeSpritePosAndType(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
sprite->oam.paletteNum = sMoveTypeToOamPaletteNum[typeId];
sprite->pos1.x = x + 16;
sprite->pos1.y = y + 8;
- sub_81C4204(spriteArrayId, FALSE);
+ SetSpriteInvisibility(spriteArrayId, FALSE);
}
-static void sub_81C43A0(void)
+static void SetMonTypeIcons(void)
{
struct PokeSummary *summary = &pssData->summary;
if (summary->isEgg)
{
SetMoveTypeSpritePosAndType(TYPE_MYSTERY, 120, 48, 3);
- sub_81C4204(4, TRUE);
+ SetSpriteInvisibility(4, TRUE);
}
else
{
@@ -3731,16 +3737,16 @@ static void sub_81C43A0(void)
if (gBaseStats[summary->species].type1 != gBaseStats[summary->species].type2)
{
SetMoveTypeSpritePosAndType(gBaseStats[summary->species].type2, 0xA0, 0x30, 4);
- sub_81C4204(4, FALSE);
+ SetSpriteInvisibility(4, FALSE);
}
else
{
- sub_81C4204(4, TRUE);
+ SetSpriteInvisibility(4, TRUE);
}
}
}
-static void sub_81C4420(void)
+static void SetMoveTypeIcons(void)
{
u8 i;
struct PokeSummary *summary = &pssData->summary;
@@ -3749,11 +3755,11 @@ static void sub_81C4420(void)
if (summary->moves[i] != MOVE_NONE)
SetMoveTypeSpritePosAndType(gBattleMoves[summary->moves[i]].type, 0x55, 0x20 + (i * 0x10), i + 3);
else
- sub_81C4204(i + 3, TRUE);
+ SetSpriteInvisibility(i + 3, TRUE);
}
}
-static void sub_81C4484(void)
+static void SetContestMoveTypeIcons(void)
{
u8 i;
struct PokeSummary *summary = &pssData->summary;
@@ -3762,15 +3768,15 @@ static void sub_81C4484(void)
if (summary->moves[i] != MOVE_NONE)
SetMoveTypeSpritePosAndType(NUMBER_OF_MON_TYPES + gContestMoves[summary->moves[i]].contestCategory, 0x55, 0x20 + (i * 0x10), i + 3);
else
- sub_81C4204(i + 3, TRUE);
+ SetSpriteInvisibility(i + 3, TRUE);
}
}
-static void sub_81C44F0(void)
+static void SetNewMoveTypeIcon(void)
{
if (pssData->newMove == MOVE_NONE)
{
- sub_81C4204(7, TRUE);
+ SetSpriteInvisibility(7, TRUE);
}
else
{
@@ -3800,7 +3806,7 @@ static void sub_81C4568(u8 a0, u8 a1)
sprite2->animEnded = FALSE;
}
-static u8 sub_81C45F4(struct Pokemon *mon, s16 *a1)
+static u8 CreatePokemonSprite(struct Pokemon *mon, s16 *a1)
{
const struct CompressedSpritePalette *pal;
struct PokeSummary *summary = &pssData->summary;
@@ -3847,17 +3853,17 @@ static u8 sub_81C45F4(struct Pokemon *mon, s16 *a1)
}
}
(*a1)++;
- return -1;
+ return 0xFF;
case 1:
pal = GetMonSpritePalStructFromOtIdPersonality(summary->species2, summary->OTID, summary->pid);
LoadCompressedSpritePalette(pal);
SetMultiuseSpriteTemplateToPokemon(pal->tag, 1);
(*a1)++;
- return -1;
+ return 0xFF;
}
}
-static void sub_81C4778(void)
+static void PlayMonCry(void)
{
struct PokeSummary *summary = &pssData->summary;
if (!summary->isEgg)
@@ -3883,7 +3889,7 @@ static u8 sub_81C47B4(struct Pokemon *unused)
sprite->data[0] = summary->species2;
sprite->data[2] = 0;
- gSprites[spriteId].callback = sub_81C4844;
+ gSprites[spriteId].callback = SpriteCB_Pokemon;
sprite->oam.priority = 0;
if (!IsMonSpriteNotFlipped(summary->species2))
@@ -3898,14 +3904,14 @@ static u8 sub_81C47B4(struct Pokemon *unused)
return spriteId;
}
-static void sub_81C4844(struct Sprite *sprite)
+static void SpriteCB_Pokemon(struct Sprite *sprite)
{
struct PokeSummary *summary = &pssData->summary;
if (!gPaletteFade.active && sprite->data[2] != 1)
{
sprite->data[1] = IsMonSpriteNotFlipped(sprite->data[0]);
- sub_81C4778();
+ PlayMonCry();
PokemonSummaryDoMonAnimation(sprite, sprite->data[0], summary->isEgg);
}
}
@@ -4000,11 +4006,11 @@ static void CreateSetStatusSprite(void)
if (anim != 0)
{
StartSpriteAnim(&gSprites[*spriteId], anim - 1);
- sub_81C4204(2, FALSE);
+ SetSpriteInvisibility(2, FALSE);
}
else
{
- sub_81C4204(2, TRUE);
+ SetSpriteInvisibility(2, TRUE);
}
}
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index 0dae76f02..c11dc55e7 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -782,7 +782,7 @@ void sub_818603C(u8 arg0)
movePp.moves[j] = gBattleMons[battlerId].moves[array1[j]];
movePp.pp[j] = gBattleMons[battlerId].pp[array1[j]];
array3[j] = ppBonuses[array1[j]];
- array2[j] = (gDisableStructs[battlerId].unk18_b & gBitTable[j]) >> j;
+ array2[j] = (gDisableStructs[battlerId].mimickedMoves & gBitTable[j]) >> j;
}
for (j = 0; j < MAX_MON_MOVES; j++)
{
@@ -790,11 +790,11 @@ void sub_818603C(u8 arg0)
gBattleMons[battlerId].pp[j] = movePp.pp[j];
}
gBattleMons[battlerId].ppBonuses = 0;
- gDisableStructs[battlerId].unk18_b = 0;
+ gDisableStructs[battlerId].mimickedMoves = 0;
for (j = 0; j < MAX_MON_MOVES; j++)
{
gBattleMons[battlerId].ppBonuses |= (array3[j]) << (j << 1);
- gDisableStructs[battlerId].unk18_b |= (array2[j]) << (j);
+ gDisableStructs[battlerId].mimickedMoves |= (array2[j]) << (j);
}
if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED))
diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c
index 41f7eeee7..9bdd86167 100644
--- a/src/rom_8011DC0.c
+++ b/src/rom_8011DC0.c
@@ -189,8 +189,6 @@ extern u16 gUnknown_02022C3C;
extern u8 gUnknown_02022C20[];
extern u8 gFieldLinkPlayerCount;
extern u8 gUnknown_03005DB4;
-extern struct MailStruct gUnknown_020321C0[PARTY_SIZE];
-extern u8 gUnknown_02032298[2];
// IWRAM vars
IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0;
@@ -1105,7 +1103,7 @@ void sub_80134E8(u8 taskId)
RedrawListMenu(data->listTaskId);
break;
case 0:
- id = ListMenuHandleInputGetItemId(data->listTaskId);
+ id = ListMenu_ProcessInput(data->listTaskId);
if (gMain.newKeys & A_BUTTON && id != -1)
{
// this unused variable along with the assignment is needed to match
@@ -2176,7 +2174,7 @@ void sub_8014F48(u8 taskId)
RedrawListMenu(data->listTaskId);
break;
case 0:
- id = ListMenuHandleInputGetItemId(data->listTaskId);
+ id = ListMenu_ProcessInput(data->listTaskId);
if (gMain.newKeys & A_BUTTON && id != -1)
{
// this unused variable along with the assignment is needed to match
@@ -2340,7 +2338,7 @@ void sub_80152F4(u8 taskId)
break;
case 0:
if (data->field_13 != 0)
- id = ListMenuHandleInputGetItemId(data->listTaskId);
+ id = ListMenu_ProcessInput(data->listTaskId);
if (data->field_14 > 120)
{
if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.field_0.unk_0a_7)
diff --git a/src/script_menu.c b/src/script_menu.c
index a4f4c6086..7180bfc60 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -1170,9 +1170,9 @@ static void Task_HandleMultichoiceInput(u8 taskId)
sub_80E2A94(tMultichoiceId);
}
- if (selection != -2)
+ if (selection != MENU_NOTHING_CHOSEN)
{
- if (selection == -1)
+ if (selection == MENU_B_PRESSED)
{
if (tIgnoreBPress)
return;
diff --git a/src/secret_base.c b/src/secret_base.c
index de5fae077..adcab9cbc 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -953,13 +953,13 @@ void sub_80E9E90(u8 taskId)
s32 input;
data = gTasks[taskId].data;
- input = ListMenuHandleInputGetItemId(data[5]);
+ input = ListMenu_ProcessInput(data[5]);
ListMenuGetScrollAndRow(data[5], &data[2], &data[1]);
switch (input)
{
- case -1:
+ case LIST_NOTHING_CHOSEN:
break;
- case -2:
+ case LIST_B_PRESSED:
PlaySE(SE_SELECT);
DestroyListMenuTask(data[5], NULL, NULL);
RemoveScrollIndicatorArrowPair(data[8]);
@@ -1002,11 +1002,11 @@ void sub_80E9FB0(u8 taskId)
input = Menu_ProcessInputNoWrap();
switch (input)
{
- case -1:
+ case MENU_B_PRESSED:
PlaySE(SE_SELECT);
sub_80EA18C(taskId);
break;
- case -2:
+ case MENU_NOTHING_CHOSEN:
break;
default:
PlaySE(SE_SELECT);
diff --git a/src/shop.c b/src/shop.c
index c44cbca12..8eefd5e97 100755
--- a/src/shop.c
+++ b/src/shop.c
@@ -328,9 +328,9 @@ static void Task_ShopMenu(u8 taskId)
s8 inputCode = Menu_ProcessInputNoWrap();
switch (inputCode)
{
- case LIST_B_PRESSED:
+ case MENU_NOTHING_CHOSEN:
break;
- case LIST_NOTHING_CHOSEN:
+ case MENU_B_PRESSED:
PlaySE(SE_SELECT);
Task_HandleShopMenuQuit(taskId);
break;
@@ -911,7 +911,7 @@ static void Task_BuyMenu(u8 taskId)
if (!gPaletteFade.active)
{
- s32 itemId = ListMenuHandleInputGetItemId(tListTaskId);
+ s32 itemId = ListMenu_ProcessInput(tListTaskId);
ListMenuGetScrollAndRow(tListTaskId, &gShopDataPtr->scrollOffset, &gShopDataPtr->selectedRow);
switch (itemId)
diff --git a/src/sound.c b/src/sound.c
index c63183bdc..ebb4fad75 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -34,13 +34,33 @@ extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern struct MusicPlayerInfo gMPlayInfo_SE3;
extern struct ToneData gCryTable[];
extern struct ToneData gCryTable2[];
-extern const struct Fanfare sFanfares[];
static void Task_Fanfare(u8 taskId);
static void CreateFanfareTask(void);
static void Task_DuckBGMForPokemonCry(u8 taskId);
static void RestoreBGMVolumeAfterPokemonCry(void);
+static const struct Fanfare sFanfares[] = {
+ { MUS_FANFA1, 80 },
+ { MUS_FANFA4, 160 },
+ { MUS_FANFA5, 220 },
+ { MUS_ME_WAZA, 220 },
+ { MUS_ME_ASA, 160 },
+ { MUS_ME_BACHI, 340 },
+ { MUS_ME_WASURE, 180 },
+ { MUS_ME_KINOMI, 120 },
+ { MUS_ME_TAMA, 710 },
+ { MUS_ME_B_BIG, 250 },
+ { MUS_ME_B_SMALL, 150 },
+ { MUS_ME_ZANNEN, 160 },
+ { MUS_RG_POKEFUE, 450 },
+ { MUS_RG_FAN5, 170 },
+ { MUS_RG_FAN2, 196 },
+ { MUS_ME_POINTGET, 313 },
+ { MUS_ME_SYMBOLGET, 318 },
+ { MUS_ME_TORE_EYE, 135 },
+};
+
#define CRY_VOLUME 120 // was 125 in R/S
void InitMapMusic(void)
diff --git a/src/trader.c b/src/trader.c
index e23efb4ce..b5c159fb9 100644
--- a/src/trader.c
+++ b/src/trader.c
@@ -113,9 +113,9 @@ void Task_HandleGetDecorationMenuInput(u8 taskId)
switch (input)
{
- case -2:
+ case MENU_NOTHING_CHOSEN:
break;
- case -1:
+ case MENU_B_PRESSED:
case 4:
PlaySE(SE_SELECT);
sub_8133BE4(taskId, 0);
diff --git a/src/trainer_card.c b/src/trainer_card.c
index b7bd5cc1d..49a62284f 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -93,6 +93,7 @@ struct TrainerCardData
extern u8 sub_80D30A0(u16);
// EWRAM
+EWRAM_DATA struct TrainerCard gTrainerCards[4] = {0};
EWRAM_DATA static struct TrainerCardData *sData = NULL;
//this file's functions
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index e0a236286..309ffdb1d 100644
--- a/src/trainer_hill.c
+++ b/src/trainer_hill.c
@@ -24,6 +24,7 @@
#include "constants/event_object_movement_constants.h"
#include "constants/event_objects.h"
#include "constants/items.h"
+#include "constants/layouts.h"
#include "constants/moves.h"
#include "constants/maps.h"
#include "constants/species.h"
@@ -324,7 +325,7 @@ void ResetTrainerHillResults(void)
static u8 GetFloorId(void)
{
- return gMapHeader.mapLayoutId - 159;
+ return gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F;
}
u8 GetTrainerHillOpponentClass(u16 trainerId)
@@ -385,7 +386,7 @@ static void SetUpDataStruct(void)
if (sHillData == NULL)
{
sHillData = AllocZeroed(sizeof(*sHillData));
- sHillData->floorId = gMapHeader.mapLayoutId - 159;
+ sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F;
CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag));
nullsub_2();
}
@@ -803,10 +804,10 @@ bool32 InTrainerHill(void)
{
bool32 ret;
- if (gMapHeader.mapLayoutId == 0x19F
- || gMapHeader.mapLayoutId == 0x1A0
- || gMapHeader.mapLayoutId == 0x1A1
- || gMapHeader.mapLayoutId == 0x1A2)
+ if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_1F
+ || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_2F
+ || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_3F
+ || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_4F)
ret = TRUE;
else
ret = FALSE;
@@ -818,17 +819,17 @@ u8 GetCurrentTrainerHillMapId(void)
{
u8 ret;
- if (gMapHeader.mapLayoutId == 0x19F)
+ if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_1F)
ret = 1;
- else if (gMapHeader.mapLayoutId == 0x1A0)
+ else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_2F)
ret = 2;
- else if (gMapHeader.mapLayoutId == 0x1A1)
+ else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_3F)
ret = 3;
- else if (gMapHeader.mapLayoutId == 0x1A2)
+ else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_4F)
ret = 4;
- else if (gMapHeader.mapLayoutId == 0x1A3)
+ else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_ROOF)
ret = 5;
- else if (gMapHeader.mapLayoutId == 0x19E)
+ else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_ENTRANCE)
ret = 6;
else
ret = 0;
@@ -840,7 +841,7 @@ static bool32 sub_81D6100(void)
{
bool32 ret;
- if (gMapHeader.mapLayoutId == 0x1A3)
+ if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_ROOF)
ret = TRUE;
else
ret = FALSE;
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 3846eca46..bc5d9cbc3 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -1,5 +1,4 @@
#include "global.h"
-#include "constants/battle_setup.h"
#include "battle_setup.h"
#include "event_data.h"
#include "event_object_movement.h"
@@ -14,6 +13,8 @@
#include "trainer_hill.h"
#include "util.h"
#include "battle_pyramid.h"
+#include "constants/battle_setup.h"
+#include "constants/event_object_movement_constants.h"
#include "constants/field_effects.h"
extern void sub_809BE48(u16 npcId);
@@ -33,17 +34,17 @@ static u8 GetTrainerApproachDistanceWest(struct EventObject *trainerObj, s16 ran
static u8 GetTrainerApproachDistanceEast(struct EventObject *trainerObj, s16 range, s16 x, s16 y);
static bool8 sub_80B4178(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B417C(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B41C0(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B4200(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B425C(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B4318(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B435C(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B4390(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B43AC(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B43E0(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B4438(u8 taskId, struct Task *task, struct EventObject *trainerObj);
-static bool8 sub_80B44AC(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 TrainerExclamationMark(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 WaitTrainerExclamationMark(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 TrainerMoveToPlayer(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 PlayerFaceApproachingTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 WaitPlayerFaceApproachingTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 RevealDisguisedTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 WaitRevealDisguisedTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 RevealHiddenTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 PopOutOfAshHiddenTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 JumpInPlaceHiddenTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj);
+static bool8 WaitRevealHiddenTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj);
static void SpriteCB_TrainerIcons(struct Sprite *sprite);
@@ -73,25 +74,25 @@ static u8 (*const sDirectionalApproachDistanceFuncs[])(struct EventObject *train
static bool8 (*const sTrainerSeeFuncList[])(u8 taskId, struct Task *task, struct EventObject *trainerObj) =
{
sub_80B4178,
- sub_80B417C,
- sub_80B41C0,
- sub_80B4200,
- sub_80B425C,
- sub_80B4318,
- sub_80B435C,
- sub_80B4390,
- sub_80B43AC,
- sub_80B43E0,
- sub_80B4438,
- sub_80B44AC
+ TrainerExclamationMark,
+ WaitTrainerExclamationMark,
+ TrainerMoveToPlayer,
+ PlayerFaceApproachingTrainer,
+ WaitPlayerFaceApproachingTrainer,
+ RevealDisguisedTrainer,
+ WaitRevealDisguisedTrainer,
+ RevealHiddenTrainer,
+ PopOutOfAshHiddenTrainer,
+ JumpInPlaceHiddenTrainer,
+ WaitRevealHiddenTrainer,
};
static bool8 (*const sTrainerSeeFuncList2[])(u8 taskId, struct Task *task, struct EventObject *trainerObj) =
{
- sub_80B43AC,
- sub_80B43E0,
- sub_80B4438,
- sub_80B44AC,
+ RevealHiddenTrainer,
+ PopOutOfAshHiddenTrainer,
+ JumpInPlaceHiddenTrainer,
+ WaitRevealHiddenTrainer,
};
static const struct OamData sOamData_Icons =
@@ -433,7 +434,7 @@ static bool8 sub_80B4178(u8 taskId, struct Task *task, struct EventObject *train
return FALSE;
}
-static bool8 sub_80B417C(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 TrainerExclamationMark(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
u8 direction;
@@ -445,7 +446,7 @@ static bool8 sub_80B417C(u8 taskId, struct Task *task, struct EventObject *train
return TRUE;
}
-static bool8 sub_80B41C0(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 WaitTrainerExclamationMark(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
if (FieldEffectActiveListContains(FLDEFF_EXCLAMATION_MARK_ICON))
{
@@ -454,17 +455,17 @@ static bool8 sub_80B41C0(u8 taskId, struct Task *task, struct EventObject *train
else
{
task->tFuncId++;
- if (trainerObj->movementType == 57 || trainerObj->movementType == 58)
+ if (trainerObj->movementType == MOVEMENT_TYPE_TREE_DISGUISE || trainerObj->movementType == MOVEMENT_TYPE_MOUNTAIN_DISGUISE)
task->tFuncId = 6;
- if (trainerObj->movementType == 63)
+ if (trainerObj->movementType == MOVEMENT_TYPE_HIDDEN)
task->tFuncId = 8;
return TRUE;
}
}
-static bool8 sub_80B4200(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 TrainerMoveToPlayer(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
- if (!(EventObjectIsMovementOverridden(trainerObj)) || EventObjectClearHeldMovementIfFinished(trainerObj))
+ if (!EventObjectIsMovementOverridden(trainerObj) || EventObjectClearHeldMovementIfFinished(trainerObj))
{
if (task->tTrainerRange)
{
@@ -473,14 +474,14 @@ static bool8 sub_80B4200(u8 taskId, struct Task *task, struct EventObject *train
}
else
{
- EventObjectSetHeldMovement(trainerObj, 0x3E);
+ EventObjectSetHeldMovement(trainerObj, MOVEMENT_ACTION_FACE_PLAYER);
task->tFuncId++;
}
}
return FALSE;
}
-static bool8 sub_80B425C(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 PlayerFaceApproachingTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
struct EventObject *playerObj;
@@ -501,7 +502,7 @@ static bool8 sub_80B425C(u8 taskId, struct Task *task, struct EventObject *train
return FALSE;
}
-static bool8 sub_80B4318(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 WaitPlayerFaceApproachingTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
struct EventObject *playerObj = &gEventObjects[gPlayerAvatar.eventObjectId];
@@ -511,18 +512,18 @@ static bool8 sub_80B4318(u8 taskId, struct Task *task, struct EventObject *train
return FALSE;
}
-static bool8 sub_80B435C(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 RevealDisguisedTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
if (!EventObjectIsMovementOverridden(trainerObj)
|| EventObjectClearHeldMovementIfFinished(trainerObj))
{
- EventObjectSetHeldMovement(trainerObj, 0x59);
+ EventObjectSetHeldMovement(trainerObj, MOVEMENT_ACTION_REVEAL_TRAINER);
task->tFuncId++;
}
return FALSE;
}
-static bool8 sub_80B4390(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 WaitRevealDisguisedTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
if (EventObjectClearHeldMovementIfFinished(trainerObj))
task->tFuncId = 3;
@@ -530,18 +531,18 @@ static bool8 sub_80B4390(u8 taskId, struct Task *task, struct EventObject *train
return FALSE;
}
-static bool8 sub_80B43AC(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 RevealHiddenTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
if (!EventObjectIsMovementOverridden(trainerObj)
|| EventObjectClearHeldMovementIfFinished(trainerObj))
{
- EventObjectSetHeldMovement(trainerObj, 0x3E);
+ EventObjectSetHeldMovement(trainerObj, MOVEMENT_ACTION_FACE_PLAYER);
task->tFuncId++;
}
return FALSE;
}
-static bool8 sub_80B43E0(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 PopOutOfAshHiddenTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
if (EventObjectCheckHeldMovementStatus(trainerObj))
{
@@ -555,7 +556,7 @@ static bool8 sub_80B43E0(u8 taskId, struct Task *task, struct EventObject *train
return FALSE;
}
-static bool8 sub_80B4438(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 JumpInPlaceHiddenTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
struct Sprite *sprite;
@@ -574,7 +575,7 @@ static bool8 sub_80B4438(u8 taskId, struct Task *task, struct EventObject *train
return FALSE;
}
-static bool8 sub_80B44AC(u8 taskId, struct Task *task, struct EventObject *trainerObj)
+static bool8 WaitRevealHiddenTrainer(u8 taskId, struct Task *task, struct EventObject *trainerObj)
{
if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
task->tFuncId = 3;
diff --git a/src/tv.c b/src/tv.c
index f46bfa0c4..5904efeb8 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -38,6 +38,7 @@
#include "secret_base.h"
#include "tv.h"
#include "data2.h"
+#include "constants/layouts.h"
// Static type declarations
@@ -913,13 +914,13 @@ void ResetGabbyAndTy(void)
gSaveBlock1Ptr->gabbyAndTyData.quote[0] = -1;
gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn = FALSE;
gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon = FALSE;
- gSaveBlock1Ptr->gabbyAndTyData.playerUsedAnItem = FALSE;
+ gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem = FALSE;
gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall = FALSE;
gSaveBlock1Ptr->gabbyAndTyData.onAir = FALSE;
gSaveBlock1Ptr->gabbyAndTyData.valA_5 = 0;
gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn2 = FALSE;
gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon2 = FALSE;
- gSaveBlock1Ptr->gabbyAndTyData.playerUsedAnItem2 = FALSE;
+ gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem2 = FALSE;
gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall2 = FALSE;
gSaveBlock1Ptr->gabbyAndTyData.valB_4 = 0;
gSaveBlock1Ptr->gabbyAndTyData.mapnum = 0;
@@ -946,13 +947,13 @@ void GabbyAndTyBeforeInterview(void)
{
gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon = FALSE;
}
- if (gBattleResults.unk3 != 0)
+ if (gBattleResults.numHealingItemsUsed != 0)
{
- gSaveBlock1Ptr->gabbyAndTyData.playerUsedAnItem = TRUE;
+ gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem = TRUE;
}
else
{
- gSaveBlock1Ptr->gabbyAndTyData.playerUsedAnItem = FALSE;
+ gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem = FALSE;
}
if (!gBattleResults.usedMasterBall)
{
@@ -980,7 +981,7 @@ void GabbyAndTyAfterInterview(void)
{
gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn2 = gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn;
gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon2 = gSaveBlock1Ptr->gabbyAndTyData.playerLostAMon;
- gSaveBlock1Ptr->gabbyAndTyData.playerUsedAnItem2 = gSaveBlock1Ptr->gabbyAndTyData.playerUsedAnItem;
+ gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem2 = gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem;
gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall2 = gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall;
gSaveBlock1Ptr->gabbyAndTyData.onAir = TRUE;
gSaveBlock1Ptr->gabbyAndTyData.mapnum = gMapHeader.regionMapSectionId;
@@ -1027,7 +1028,7 @@ u8 GabbyAndTyGetLastBattleTrivia(void)
{
return 2;
}
- if (gSaveBlock1Ptr->gabbyAndTyData.playerUsedAnItem2)
+ if (gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem2)
{
return 3;
}
@@ -6141,7 +6142,7 @@ void DoTVShowInSearchOfTrainers(void)
{
sTVShowState = 5;
}
- else if (gSaveBlock1Ptr->gabbyAndTyData.playerUsedAnItem)
+ else if (gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem)
{
sTVShowState = 6;
}
@@ -6264,7 +6265,9 @@ static void DoTVShowTodaysRivalTrainer(void)
case MAPSEC_DYNAMIC:
switch (show->rivalTrainer.mapLayoutId)
{
- case 0x115 ... 0x117:
+ case LAYOUT_SS_TIDAL_CORRIDOR:
+ case LAYOUT_SS_TIDAL_LOWER_DECK:
+ case LAYOUT_SS_TIDAL_ROOMS:
sTVShowState = 10;
break;
default:
@@ -6463,7 +6466,9 @@ static void DoTVShowHoennTreasureInvestigators(void)
{
switch (show->treasureInvestigators.mapLayoutId)
{
- case 0x115 ... 0x117:
+ case LAYOUT_SS_TIDAL_CORRIDOR:
+ case LAYOUT_SS_TIDAL_LOWER_DECK:
+ case LAYOUT_SS_TIDAL_ROOMS:
sTVShowState = 2;
break;
default:
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 2e6f1642a..e42bf8a23 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -1,27 +1,27 @@
#include "global.h"
#include "wild_encounter.h"
#include "pokemon.h"
-#include "constants/species.h"
#include "metatile_behavior.h"
#include "fieldmap.h"
#include "random.h"
-#include "constants/maps.h"
#include "field_player_avatar.h"
-#include "constants/abilities.h"
#include "event_data.h"
#include "safari_zone.h"
#include "overworld.h"
#include "pokeblock.h"
#include "battle_setup.h"
#include "roamer.h"
-#include "constants/game_stat.h"
#include "tv.h"
#include "link.h"
#include "script.h"
#include "battle_pike.h"
#include "battle_pyramid.h"
+#include "constants/abilities.h"
+#include "constants/game_stat.h"
#include "constants/items.h"
+#include "constants/layouts.h"
#include "constants/maps.h"
+#include "constants/species.h"
extern const u8 EventScript_RepelWoreOff[];
@@ -413,7 +413,7 @@ static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 ar
level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]);
if (flags & WILD_CHECK_REPEL && !IsWildLevelAllowedByRepel(level))
return FALSE;
- if (gMapHeader.mapLayoutId != 0x166 && flags & WILD_CHECK_KEEN_EYE && !IsAbilityAllowingEncounter(level))
+ if (gMapHeader.mapLayoutId != LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3 && flags & WILD_CHECK_KEEN_EYE && !IsAbilityAllowingEncounter(level))
return FALSE;
CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level);
@@ -474,7 +474,7 @@ static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility)
{
u32 ability = GetMonAbility(&gPlayerParty[0]);
- if (ability == ABILITY_STENCH && gMapHeader.mapLayoutId == 0x169)
+ if (ability == ABILITY_STENCH && gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
encounterRate = encounterRate * 3 / 4;
else if (ability == ABILITY_STENCH)
encounterRate /= 2;
@@ -522,7 +522,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi
headerId = GetCurrentMapWildMonHeaderId();
if (headerId == 0xFFFF)
{
- if (gMapHeader.mapLayoutId == 0x166)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3)
{
headerId = GetBattlePikeWildMonHeaderId();
if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
@@ -537,7 +537,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi
BattleSetup_StartBattlePikeWildBattle();
return TRUE;
}
- if (gMapHeader.mapLayoutId == 0x169)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
{
headerId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
@@ -665,7 +665,7 @@ bool8 SweetScentWildEncounter(void)
headerId = GetCurrentMapWildMonHeaderId();
if (headerId == 0xFFFF)
{
- if (gMapHeader.mapLayoutId == 0x166)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3)
{
headerId = GetBattlePikeWildMonHeaderId();
if (TryGenerateWildMon(gBattlePikeWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE)
@@ -675,7 +675,7 @@ bool8 SweetScentWildEncounter(void)
BattleSetup_StartBattlePikeWildBattle();
return TRUE;
}
- if (gMapHeader.mapLayoutId == 0x169)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
{
headerId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
if (TryGenerateWildMon(gBattlePyramidWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE)