summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorKurausukun <lord.uber1@gmail.com>2021-03-19 14:34:58 -0400
committerKurausukun <lord.uber1@gmail.com>2021-03-19 14:34:58 -0400
commitc94e5e9ab0b2b65c8c6275f84043807b2743d6f2 (patch)
treeb188427bb1942695f32e14ee3fe137855d638c8c /include
parent0643255c85d0ebd5212e731c9fad3b43d0d99a10 (diff)
parented16a7409ae9c808a110975dec1930f9f949a6d6 (diff)
Merge remote-tracking branch 'upstream/master' into port_matchings
Diffstat (limited to 'include')
-rw-r--r--include/battle.h136
-rw-r--r--include/battle_anim.h42
-rw-r--r--include/battle_controllers.h43
-rw-r--r--include/battle_gfx_sfx_util.h12
-rw-r--r--include/battle_interface.h2
-rw-r--r--include/battle_main.h34
-rw-r--r--include/battle_message.h6
-rw-r--r--include/battle_util.h2
-rw-r--r--include/constants/pokemon.h5
-rw-r--r--include/data.h12
-rw-r--r--include/field_camera.h2
-rw-r--r--include/gba/defines.h1
-rw-r--r--include/global.h10
-rw-r--r--include/link.h4
-rw-r--r--include/load_save.h1
-rw-r--r--include/party_menu.h6
-rw-r--r--include/pokeball.h2
-rw-r--r--include/pokemon.h12
-rw-r--r--include/quest_log.h2
-rw-r--r--include/reshow_battle_screen.h2
-rw-r--r--include/strings.h4
21 files changed, 188 insertions, 152 deletions
diff --git a/include/battle.h b/include/battle.h
index 43f4c5115..1a10b7c1c 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -196,14 +196,13 @@ struct ProtectStruct
u32 flag_x20 : 1; // 0x20
u32 flag_x40 : 1; // 0x40
u32 flag_x80 : 1; // 0x80
- /* field_3 */
u32 field3 : 8;
- /* field_4 */ u32 physicalDmg;
- /* field_8 */ u32 specialDmg;
- /* field_C */ u8 physicalBattlerId;
- /* field_D */ u8 specialBattlerId;
- /* field_E */ u16 fieldE;
+ u32 physicalDmg;
+ u32 specialDmg;
+ u8 physicalBattlerId;
+ u8 specialBattlerId;
+ u16 fieldE;
};
extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
@@ -357,19 +356,28 @@ struct BattleResults
extern struct BattleResults gBattleResults;
+struct LinkPartnerHeader
+{
+ u8 versionSignatureLo;
+ u8 versionSignatureHi;
+ u8 vsScreenHealthFlagsLo;
+ u8 vsScreenHealthFlagsHi;
+ struct BattleEnigmaBerry battleEnigmaBerry;
+};
+
struct BattleStruct
{
u8 turnEffectsTracker;
u8 turnEffectsBattlerId;
- u8 filler2;
+ u8 filler2; // unused
u8 turnCountersTracker;
u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access.
u8 moveTarget[MAX_BATTLERS_COUNT];
u8 expGetterMonId;
- u8 field_11;
+ u8 field_11; // unused
u8 wildVictorySong;
u8 dynamicMoveType;
- u8 wrappedBy[4];
+ u8 wrappedBy[MAX_BATTLERS_COUNT];
u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // 6 mons, each of them knowing 4 moves
u8 focusPunchBattlerId;
u8 battlerPreventingSwitchout;
@@ -378,17 +386,17 @@ struct BattleStruct
u8 switchInAbilitiesCounter;
u8 faintedActionsState;
u8 faintedActionsBattlerId;
- u8 field_4F;
+ // balign 2
u16 expValue;
- u8 field_52;
+ u8 scriptPartyIdx; // for printing the nickname
u8 sentInPokes;
bool8 selectionScriptFinished[MAX_BATTLERS_COUNT];
- u8 field_58[4];
+ u8 battlerPartyIndexes[MAX_BATTLERS_COUNT];
u8 monToSwitchIntoId[MAX_BATTLERS_COUNT];
- u8 field_60[4][3];
+ u8 battlerPartyOrders[MAX_BATTLERS_COUNT][3];
u8 runTries;
- u8 caughtMonNick[11];
- u8 field_78;
+ u8 caughtMonNick[POKEMON_NAME_LENGTH + 1];
+ u8 field_78; // unused
u8 safariGoNearCounter;
u8 safariPkblThrowCounter;
u8 safariEscapeFactor;
@@ -398,21 +406,18 @@ struct BattleStruct
u8 formToChangeInto;
u8 chosenMovePositions[MAX_BATTLERS_COUNT];
u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT];
- u8 field_88;
- u8 field_89;
- u8 field_8A;
- u8 field_8B;
- u8 field_8C;
- u8 field_8D;
+ u8 field_88; // unused
+ u8 field_89; // unused
+ u8 field_8A; // unused
+ u8 playerPartyIdx;
+ u8 field_8C; // unused
+ u8 field_8D; // unused
u8 stringMoveType;
u8 expGetterBattlerId;
- u8 field_90;
- u8 field_91;
+ u8 field_90; // unused
+ u8 absentBattlerFlags;
u8 AI_monToSwitchIntoId[2];
- u8 field_94;
- u8 field_95;
- u8 field_96;
- u8 field_97;
+ u8 simulatedInputState[4]; // used by Oak/Old Man/Pokedude controllers
u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // ask gamefreak why they declared it that way
u16 hpOnSwitchout[2];
u8 abilityPreventingSwitchout;
@@ -440,13 +445,12 @@ struct BattleStruct
u8 wishPerishSongState;
u8 wishPerishSongBattlerId;
u8 field_182;
- u8 field_183;
- u8 field_184;
- u8 field_185;
- u8 field_186;
- u8 field_187;
- struct BattleEnigmaBerry battleEnigmaBerry;
- u8 field_1A4[0x5C]; // currently unknown
+ // align 4
+ union {
+ struct LinkPartnerHeader linkPartnerHeader;
+ struct MultiBattlePokemonTx multiBattleMons[3];
+ } multiBuffer;
+ u8 padding_1E4[0x1C];
}; // size == 0x200 bytes
extern struct BattleStruct *gBattleStruct;
@@ -508,14 +512,12 @@ struct BattleScripting
enum
{
- BACK_PIC_BRENDAN,
- BACK_PIC_MAY,
BACK_PIC_RED,
BACK_PIC_LEAF,
BACK_PIC_RS_BRENDAN,
BACK_PIC_RS_MAY,
- BACK_PIC_WALLY,
- BACK_PIC_STEVEN
+ BACK_PIC_POKEDUDE,
+ BACK_PIC_OLDMAN
};
struct BattleSpriteInfo
@@ -538,7 +540,7 @@ struct BattleAnimationInfo
u8 field_6;
u8 field_7;
u8 ballThrowCaseId;
- u8 field_9_x1 : 1;
+ u8 healthboxSlideInStarted : 1;
u8 field_9_x2 : 1;
u8 field_9_x1C : 3;
u8 field_9_x20 : 1;
@@ -553,28 +555,24 @@ struct BattleAnimationInfo
struct BattleHealthboxInfo
{
- u8 partyStatusSummaryShown : 1;
- u8 healthboxIsBouncing : 1;
- u8 battlerIsBouncing : 1;
+ u8 partyStatusSummaryShown : 1; // x1
+ u8 healthboxIsBouncing : 1; // x2
+ u8 battlerIsBouncing : 1; // x4
u8 ballAnimActive : 1; // 0x8
u8 statusAnimActive : 1; // x10
u8 animFromTableActive : 1; // x20
- u8 specialAnimActive : 1; //x40
- u8 flag_x80 : 1;
- u8 field_1_x1 : 1;
- u8 field_1_x1E : 5;
- u8 field_1_x40 : 1;
- u8 field_1_x80 : 1;
+ u8 specialAnimActive : 1; // x40
+ u8 triedShinyMonAnim : 1; // x80
+ u8 finishedShinyMonAnim : 1; // x1
+ u8 opponentDrawPartyStatusSummaryDelay : 5; // x2
u8 healthboxBounceSpriteId;
u8 battlerBounceSpriteId;
u8 animationState;
- u8 field_5;
+ u8 partyStatusDelayTimer;
u8 matrixNum;
u8 shadowSpriteId;
- u8 field_8;
- u8 field_9;
- u8 field_A;
- u8 field_B;
+ u8 soundTimer;
+ u8 introEndDelay;
};
struct BattleBarInfo
@@ -608,13 +606,22 @@ extern u8 *gLinkBattleRecvBuffer;
struct MonSpritesGfx
{
void* firstDecompressed; // ptr to the decompressed sprite of the first pokemon
- void* sprites[4];
- struct SpriteTemplate templates[4];
- struct SpriteFrameImage field_74[4][4];
- u8 field_F4[0x80];
+ void* sprites[MAX_BATTLERS_COUNT];
+ struct SpriteTemplate templates[MAX_BATTLERS_COUNT];
+ struct SpriteFrameImage images[MAX_BATTLERS_COUNT][4];
+ u8 field_F4[0x80]; // unused
u8 *barFontGfx;
- void *field_178;
- u16 *field_17C;
+ void *field_178; // freed but never allocated
+ u16 *multiUseBuffer;
+};
+
+struct PokedudeBattlerState
+{
+ u8 action_idx;
+ u8 move_idx;
+ u8 timer;
+ u8 msg_idx;
+ u8 saved_bg0y;
};
extern u16 gBattle_BG0_X;
@@ -662,9 +669,9 @@ extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
extern void (*gPreBattleCallback1)(void);
extern bool8 gDoingBattleAnim;
-extern u8 *gUnknown_3005EE0[MAX_BATTLERS_COUNT];
-extern u8 *gUnknown_2022BB8;
-extern u8 *gUnknown_2022BBC;
+extern struct PokedudeBattlerState *gPokedudeBattlerStates[MAX_BATTLERS_COUNT];
+extern u8 *gBattleAnimMons_BgTilesBuffer;
+extern u8 *gBattleAnimMons_BgTilemapBuffer;
extern void (*gBattleMainFunc)(void);
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
extern u32 gUnknown_2022B54;
@@ -690,7 +697,7 @@ extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
extern u8 gCurrentActionFuncId;
extern u8 gCurrMovePos;
extern u8 gChosenMovePos;
-extern u8 gUnknown_3004FFC[MAX_BATTLERS_COUNT];
+extern u8 gBattleControllerData[MAX_BATTLERS_COUNT];
extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
extern u16 gDynamicBasePower;
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
@@ -710,8 +717,7 @@ extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
extern u8 gBattleTerrain;
-extern struct UnknownPokemonStruct4 gMultiPartnerParty[3];
-extern u16 *gUnknown_2022BC0;
+extern struct MultiBattlePokemonTx gMultiPartnerParty[3];
extern u16 gRandomTurnNumber;
#endif // GUARD_BATTLE_H
diff --git a/include/battle_anim.h b/include/battle_anim.h
index ba56389c7..f1878d222 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -36,6 +36,15 @@ struct BattleAnimBackground
#define ANIM_ARGS_COUNT 8
+// Linear Translation
+#define sTransl_Speed data[0]
+#define sTransl_Duration data[0] // for Fast
+#define sTransl_InitX data[1]
+#define sTransl_DestX data[2]
+#define sTransl_InitY data[3]
+#define sTransl_DestY data[4]
+#define sTransl_ArcAmpl data[5]
+
extern void (*gAnimScriptCallback)(void);
extern bool8 gAnimScriptActive;
extern u8 gAnimVisualTaskCount;
@@ -129,7 +138,7 @@ extern const struct OamData gOamData_AffineDouble_ObjBlend_32x64;
extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
void MoveBattlerSpriteToBG(u8 battlerId, u8);
-void sub_8073128(u8);
+void ResetBattleAnimBg(u8);
void ClearBattleAnimationVars(void);
void DoMoveAnim(u16 move);
void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim);
@@ -149,7 +158,7 @@ void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
s32 GetAnimBgAttribute(u8 bgId, u8 attributeId);
void HandleIntroSlide(u8 terrain);
void sub_80BC41C(u8 taskId);
-void sub_80BCEF4(s32 bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset);
+void CopyBattlerSpriteToBg(s32 bgId, u8 x, u8 y, u8 battlerPosition, u8 palno, u8 *tilesDest, u16 *tilemapDest, u16 tilesOffset);
// battle_anim_effects_1.c
extern const union AnimCmd *const gMusicNotesAnimTable[];
@@ -306,12 +315,12 @@ void AnimKnockOffStrike(struct Sprite *);
void AnimRecycle(struct Sprite *);
// battle_anim_special.c
-void sub_80F1720(u8 battler, struct Pokemon *mon);
+void TryShinyAnimation(u8 battler, struct Pokemon *mon);
u8 ItemIdToBallId(u16 itemId);
-u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
+u8 LaunchBallStarsTask(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
-void sub_80EEFC8(u8 *, u8 *, u8 battlerId);
-void sub_80EF0E0(u8 batterId);
+void DoLoadHealthboxPalsForLevelUp(u8 *, u8 *, u8 battlerId);
+void DoFreeHealthboxPalsForLevelUp(u8 batterId);
enum
{
@@ -382,24 +391,24 @@ u8 GetBattlerPosition(u8 battlerId);
u8 GetBattlerAtPosition(u8 position);
bool8 IsBattlerSpritePresent(u8 battlerId);
bool8 IsDoubleBattle(void);
-void sub_80752A0(struct BattleAnimBgData *animBgData);
-void sub_80752C8(struct BattleAnimBgData *animBgData, u32 arg1);
-void sub_8075300(struct BattleAnimBgData *animBgData, u8 unused);
-void sub_8075358(u32 bgId);
+void GetBattleAnimBg1Data(struct BattleAnimBgData *animBgData);
+void GetBattleAnimBgData(struct BattleAnimBgData *animBgData, u32 bgId);
+void GetBattleAnimBgDataByPriorityRank(struct BattleAnimBgData *animBgData, u8 unused);
+void InitBattleAnimBg(u32 bgId);
void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset);
void InitAnimBgTilemapBuffer(u32 bgId, const void *src);
void AnimLoadCompressedBgTilemap(u32 bgId, const u32 *src);
u8 GetBattleBgPaletteNum(void);
-void sub_8075458(bool8 arg0);
+void ToggleBg3Mode(bool8 arg0);
void StartSpriteLinearTranslationFromCurrentPos(struct Sprite *sprite);
void InitSpriteDataForLinearTranslation(struct Sprite *sprite);
void InitAnimLinearTranslation(struct Sprite *sprite);
void StartAnimLinearTranslation(struct Sprite *sprite);
-void sub_80755B8(struct Sprite *sprite);
+void PlayerThrowBall_StartAnimLinearTranslation(struct Sprite *sprite);
bool8 AnimTranslateLinear(struct Sprite *sprite);
-void sub_807563C(struct Sprite *sprite);
-void sub_8075678(struct Sprite *sprite);
-void sub_80756A4(struct Sprite *sprite);
+void RunLinearTranslation_ThenceSetCBtoStoredInData6(struct Sprite *sprite);
+void BattleAnim_InitLinearTranslationWithDuration(struct Sprite *sprite);
+void BattleAnim_InitAndRunLinearTranslationWithDuration(struct Sprite *sprite);
void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite);
bool8 AnimFastTranslateLinear(struct Sprite *sprite);
void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite);
@@ -436,6 +445,9 @@ void AnimTask_GetFrustrationPowerLevel(u8 taskId);
void sub_80767F0(void);
u8 GetBattlerSpriteSubpriority(u8 battlerId);
u8 GetBattlerSpriteBGPriority(u8 battlerId);
+
+// Returns 2 if player left or opp right
+// Returns 1 if player right or opp left
u8 GetBattlerSpriteBGPriorityRank(u8 battlerId);
u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10);
void DestroySpriteAndFreeResources_(struct Sprite *sprite);
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 412856353..7dacb1343 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -184,8 +184,8 @@ extern struct UnusedControllerStruct gUnknown_2022870;
// general functions
void HandleLinkBattleSetup(void);
void SetUpBattleVars(void);
-void sub_800D30C(void);
-void sub_800DD28(void);
+void InitBtlControllers(void);
+void TryReceiveLinkBattleData(void);
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
// emitters
@@ -222,7 +222,7 @@ void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId);
void BtlController_EmitFaintingCry(u8 bufferId);
void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId);
void BtlController_EmitIntroTrainerBallThrow(u8 bufferId);
-void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus *hpAndStatus, u8 arg2);
+void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus *hpAndStatus, u8 param);
void BtlController_EmitHidePartyStatusSummary(u8 bufferId);
void BtlController_EmitEndBounceEffect(u8 bufferId);
void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
@@ -232,17 +232,17 @@ void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
void BtlController_EmitCmd55(u8 bufferId, u8 arg1);
// player controller
-void nullsub_13(void);
+void PlayerDummy(void);
void SetControllerToPlayer(void);
void PlayerHandleGetRawMonData(void);
-void sub_80335F8(struct Sprite *sprite);
+void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite);
void SetCB2ToReshowScreenAfterMenu(void);
void SetCB2ToReshowScreenAfterMenu2(void);
-void c3_0802FDF4(u8 taskId);
+void Task_PlayerController_RestoreBgmAfterCry(u8 taskId);
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
void ActionSelectionDestroyCursorAt(u8 cursorPos);
void InitMoveSelectionsVarsAndStrings(void);
-void sub_802F6A8(void);
+void SetBattleEndCallbacks(void);
void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1);
void MoveSelectionDestroyCursorAt(u8 cursorPos);
void HandleInputChooseMove(void);
@@ -260,14 +260,27 @@ void InitPokedudePartyAndOpponent(void);
// oak and old man controller
void SetControllerToOakOrOldMan(void);
-bool8 sub_80EB2E0(u8);
-void sub_80EB2F4(u8);
-void sub_80E8570(void);
-void sub_80E85C0(void);
-void sub_80E8598(void);
-void sub_80E7988(void);
-void sub_80EB30C(void);
-void sub_80EB524(void);
+
+// These flags are set to signal that the indicated message
+// was already emitted
+
+// Inflicting damage is key
+#define FIRST_BATTLE_MSG_FLAG_INFLICT_DMG 0x1
+// Lowering stats is advantageous
+#define FIRST_BATTLE_MSG_FLAG_STAT_CHG 0x2
+// Keep an eye on your HP
+#define FIRST_BATTLE_MSG_FLAG_HP_RESTORE 0x4
+//
+#define FIRST_BATTLE_MSG_FLAG_PARTY_MENU 0x8
+
+bool8 BtlCtrl_OakOldMan_TestState2Flag(u8 mask);
+void BtlCtrl_OakOldMan_SetState2Flag(u8 mask);
+void PrintOakText_InflictingDamageIsKey(void);
+void PrintOakText_HowDisappointing(void);
+void PrintOakText_OakNoRunningFromATrainer(void);
+void OakOldManHandleInputChooseMove(void);
+void BtlCtrl_DrawVoiceoverMessageFrame(void);
+void BtlCtrl_RemoveVoiceoverMessageFrame(void);
// link opponent controller
void SetControllerToLinkOpponent(void);
diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h
index 667686af8..4c5f230d7 100644
--- a/include/battle_gfx_sfx_util.h
+++ b/include/battle_gfx_sfx_util.h
@@ -3,19 +3,19 @@
void AllocateBattleSpritesData(void);
void FreeBattleSpritesData(void);
-void sub_8033E3C(struct Sprite *sprite);
-void sub_8033EEC(struct Sprite *sprite);
+void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite);
+void SpriteCB_TrainerSlideIn(struct Sprite *sprite);
void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status);
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId, u16 argument);
void InitAndLaunchSpecialAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId);
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
-bool8 mplay_80342A4(u8 battlerId);
+bool8 IsBattleSEPlaying(u8 battlerId);
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
void DecompressGhostFrontPic(struct Pokemon *unused, u8 battlerId);
void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
void DecompressTrainerBackPalette(u16 a1, u8 a2);
-void nullsub_16(u8 a1);
+void BattleGfxSfxDummy3(u8 a1);
void FreeTrainerFrontPicPaletteAndTile(u16 frontPicId);
bool8 BattleLoadAllHealthBoxesGfx(u8 state);
void LoadBattleBarGfx(u8 arg0);
@@ -31,12 +31,12 @@ void ClearBehindSubstituteBit(u8 battlerId);
void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId);
void BattleStopLowHpSound(void);
void HandleBattleLowHpMusicChange(void);
-void sub_8035450(u8 affineMode);
+void SetBattlerSpriteAffineMode(u8 affineMode);
void LoadAndCreateEnemyShadowSprites(void);
void SpriteCB_SetInvisible(struct Sprite *sprite);
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species);
void HideBattlerShadowSprite(u8 battlerId);
-void sub_80357C8(void);
+void BattleInterfaceSetWindowPals(void);
void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute);
void AllocateMonSpritesGfx(void);
void FreeMonSpritesGfx(void);
diff --git a/include/battle_interface.h b/include/battle_interface.h
index 8878b9fb9..3415836a8 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -73,7 +73,7 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority);
void InitBattlerHealthboxCoords(u8 battlerId);
void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
void SwapHpBarsWithHpText(void);
-u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart);
+u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 isSwitchingMons, bool8 isBattleStart);
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId);
u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp);
diff --git a/include/battle_main.h b/include/battle_main.h
index fe585f0e6..0410e62c2 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -9,7 +9,7 @@ struct TrainerMoney
u8 value;
};
-struct UnknownPokemonStruct4
+struct MultiBattlePokemonTx
{
/*0x00*/ u16 species;
/*0x02*/ u16 heldItem;
@@ -45,9 +45,9 @@ struct UnknownPokemonStruct4
#define BOUNCE_MON 0x0
#define BOUNCE_HEALTHBOX 0x1
-extern const struct SpriteTemplate gUnknown_824EFF0;
-extern const struct OamData gOamData_824F010;
-extern const struct OamData gOamData_824F018;
+extern const struct SpriteTemplate gUnknownDebugSprite;
+extern const struct OamData gOamData_BattlerOpponent;
+extern const struct OamData gOamData_BattlerPlayer;
extern const u8 gTypeNames[][TYPE_NAME_LENGTH + 1];
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
@@ -66,29 +66,29 @@ void CB2_InitBattle(void);
void BattleMainCB2(void);
void FreeRestoreBattleData(void);
void VBlankCB_Battle(void);
-void nullsub_9(struct Sprite *sprite);
-void sub_801182C(struct Sprite *sprite);
-void sub_8011A1C(void);
+void SpriteCB_VsLetterDummy(struct Sprite *sprite);
+void SpriteCB_VsLetterInit(struct Sprite *sprite);
+void CB2_InitEndLinkBattle(void);
u32 GetBattleBgAttribute(u8 arrayId, u8 caseId);
-void SpriteCB_WildMon(struct Sprite *sprite);
+void SpriteCB_EnemyMon(struct Sprite *sprite);
void SpriteCallbackDummy2(struct Sprite *sprite);
void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
-void sub_8012044(struct Sprite *sprite);
-void sub_8012098(struct Sprite *sprite);
-void sub_80120C4(struct Sprite *sprite);
-void sub_8012100(struct Sprite *sprite);
-void sub_8012110(struct Sprite *sprite);
+void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite);
+void SpriteCb_HideAsMoveTarget(struct Sprite *sprite);
+void SpriteCB_AllyMon(struct Sprite *sprite);
+void SpriteCB_SetToDummy3(struct Sprite *sprite);
+void SpriteCB_FaintSlideAnim(struct Sprite *sprite);
void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude);
void EndBounceEffect(u8 battler, u8 which);
-void sub_8012354(struct Sprite *sprite);
-void sub_801236C(struct Sprite *sprite);
-void nullsub_12(void);
+void SpriteCB_PlayerThrowInit(struct Sprite *sprite);
+void UpdatePlayerPosInThrowAnim(struct Sprite *sprite);
+void BattleDummy(void);
void BeginBattleIntro(void);
void SwitchInClearSetData(void);
void FaintClearSetData(void);
void BattleTurnPassed(void);
u8 IsRunningFromBattleImpossible(void);
-void sub_8013F6C(u8 battler);
+void UpdatePartyOwnerOnSwitch_NonMulti(u8 battler);
void SwapTurnOrder(u8 id1, u8 id2);
u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves);
void RunBattleScriptCommands_PopCallbacksStack(void);
diff --git a/include/battle_message.h b/include/battle_message.h
index 5a16a4250..04c5b1839 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -199,7 +199,7 @@ struct BattleMsgData
u16 lastItem;
u8 lastAbility;
u8 scrActive;
- u8 unk1605E;
+ u8 bakScriptPartyIdx;
u8 hpScale;
u8 itemEffectBattler;
u8 moveType;
@@ -213,8 +213,8 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst);
void BattleHandleAddTextPrinter(const u8* text, u8 arg1);
void SetPpNumbersPaletteInMoveSelection(void);
u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp);
-void BattlePutTextOnWindow(const u8* text, u8 arg1);
-bool8 sub_80D89B0(u16);
+void BattlePutTextOnWindow(const u8* text, u8 windowId_flags);
+bool8 BattleStringShouldBeColored(u16);
extern struct BattleMsgData *gBattleMsgDataPtr;
diff --git a/include/battle_util.h b/include/battle_util.h
index 797f0ef52..d3bd76a01 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -64,7 +64,7 @@ bool8 WasUnableToUseMove(u8 battler);
void PrepareStringBattle(u16 stringId, u8 battler);
void ResetSentPokesToOpponentValue(void);
void sub_8017434(u8 battler);
-void sub_80174B8(u8 battler);
+void UpdateSentPokesToOpponentValue(u8 battler);
void BattleScriptPush(const u8 *bsPtr);
void BattleScriptPushCursor(void);
void BattleScriptPop(void);
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 0371f874f..8a32ef7d1 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -213,4 +213,9 @@
#define UNOWN_FORM_COUNT 28
#define BOX_NAME_LENGTH 8
+#define EVO_MODE_NORMAL 0
+#define EVO_MODE_TRADE 1
+#define EVO_MODE_ITEM_USE 2
+#define EVO_MODE_ITEM_CHECK 3 // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve
+
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/data.h b/include/data.h
index 19da0034f..55eda56a4 100644
--- a/include/data.h
+++ b/include/data.h
@@ -48,12 +48,12 @@ extern const u8 *const gBattleAnims_Special[];
extern const struct OamData gUnknown_824F010;
extern const struct OamData gUnknown_824F018;
extern const union AnimCmd *const gSpriteAnimTable_82349BC[];
-extern const union AffineAnimCmd *const gSpriteAffineAnimTable_82348C8[];
-extern const union AffineAnimCmd *const gSpriteAffineAnimTable_8234944[];
-extern const struct SpriteFrameImage gUnknown_8234698[];
-extern const struct SpriteFrameImage gUnknown_82346B8[];
-extern const struct SpriteFrameImage gUnknown_82346D8[];
-extern const struct SpriteFrameImage gUnknown_82346F8[];
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_BattlerPlayer[];
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_BattlerOpponent[];
+extern const struct SpriteFrameImage gSpriteImages_BattlerPlayerLeft[];
+extern const struct SpriteFrameImage gSpriteImages_BattlerOpponentLeft[];
+extern const struct SpriteFrameImage gSpriteImages_BattlerPlayerRight[];
+extern const struct SpriteFrameImage gSpriteImages_BattlerOpponentRight[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Red[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Leaf[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Pokedude[];
diff --git a/include/field_camera.h b/include/field_camera.h
index a3275eb9d..025b85132 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -26,7 +26,7 @@ extern bool8 gBikeCameraAheadPanback;
void DrawWholeMapView(void);
void CurrentMapDrawMetatileAt(int x, int y);
-void sub_805A658(s16 *x, s16 *y);
+void FieldCameraGetPixelOffsetAtGround(s16 *x, s16 *y);
void SetCameraPanningCallback(void (*cb)(void));
void SetCameraPanning(s16 x, s16 y);
void UpdateCameraPanning(void);
diff --git a/include/gba/defines.h b/include/gba/defines.h
index 28f804dff..02d687ade 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -92,6 +92,7 @@
#define RGB_CYAN RGB(0, 31, 31)
#define RGB_WHITEALPHA (RGB_WHITE | 0x8000)
+// Some functions are strictly inline asm
#define NAKED __attribute__((naked))
#define UNUSED __attribute__((unused))
diff --git a/include/global.h b/include/global.h
index dbe913595..04adc82cb 100644
--- a/include/global.h
+++ b/include/global.h
@@ -16,7 +16,7 @@
#define asm_comment(x) asm volatile("@ -- " x " -- ")
#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided")
-#if defined (__APPLE__) || defined (__CYGWIN__)
+#if defined (__APPLE__) || defined (__CYGWIN__) || defined(__CLION_IDE__)
// Get the IDE to stfu
// We define it this way to fool preproc.
@@ -31,9 +31,7 @@
#define __(x) (x)
#endif // __APPLE__
-#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
-// GF's lingo
-#define NELEMS ARRAY_COUNT
+#define NELEMS(array) (sizeof(array) / sizeof((array)[0]))
#define SWAP(a, b, temp) \
{ \
@@ -293,7 +291,7 @@ struct SaveBlock2
/*0xB10*/ struct BerryPickingResults berryPick;
/*0xB20*/ u8 filler_B20[0x400];
/*0xF20*/ u32 encryptionKey;
-};
+}; // size: 0xF24
extern struct SaveBlock2 *gSaveBlock2Ptr;
@@ -826,7 +824,7 @@ struct SaveBlock1
/*0x3D24*/ u8 filler3D24[0x10];
/*0x3D34*/ u32 towerChallengeId;
/*0x3D38*/ struct TrainerTower trainerTower[NUM_TOWER_CHALLENGE_TYPES];
-};
+}; // size: 0x3D68
struct MapPosition
{
diff --git a/include/link.h b/include/link.h
index 6329c197b..b4749164b 100644
--- a/include/link.h
+++ b/include/link.h
@@ -251,14 +251,14 @@ void sub_800E0E8(void);
bool8 sub_800A520(void);
bool8 sub_8010500(void);
void sub_800DFB4(u8, u8);
-void PrepareSendLinkCmd2FFE_or_RfuCmd6600(void);
+void SetLinkStandbyCallback(void);
void SetWirelessCommType1(void);
void sub_8009734(void);
void sub_800A620(void);
void LinkRfu_DestroyIdleTask(void);
u8 sub_800ABAC(void);
u8 sub_800ABBC(void);
-void Link_TryStartSend5FFF(void);
+void SetCloseLinkCallback(void);
void OpenLink(void);
bool8 IsLinkMaster(void);
void CheckShouldAdvanceLinkState(void);
diff --git a/include/load_save.h b/include/load_save.h
index 23c1429ed..95de991a8 100644
--- a/include/load_save.h
+++ b/include/load_save.h
@@ -6,6 +6,7 @@
extern bool32 gFlashMemoryPresent;
extern struct SaveBlock1 gSaveBlock1;
extern struct SaveBlock2 gSaveBlock2;
+extern struct PokemonStorage gPokemonStorage;
void ClearSav2(void);
void ClearSav1(void);
diff --git a/include/party_menu.h b/include/party_menu.h
index a1b85e059..69f25e319 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -72,9 +72,9 @@ void ChooseMonForTradingBoard(u8 menuType, MainCallback callback);
void ChooseMonForMoveTutor(void);
void ChooseMonForWirelessMinigame(void);
void OpenPartyMenuInTutorialBattle(u8 partyAction);
-void OpenPartyMenuInBattle(void);
-void ChooseMonForInBattleItem(void);
-void sub_81279E0(void);
+void Pokedude_OpenPartyMenuInBattle(void);
+void Pokedude_ChooseMonForInBattleItem(void);
+void EnterPartyFromItemMenuInBattle(void);
void BufferBattlePartyCurrentOrder(void);
void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId);
void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2);
diff --git a/include/pokeball.h b/include/pokeball.h
index 1c2241246..9ba5656af 100644
--- a/include/pokeball.h
+++ b/include/pokeball.h
@@ -33,7 +33,7 @@ void sub_8076918(u8 bank);
void DoHitAnimHealthboxEffect(u8 bank);
void LoadBallGfx(u8 ballId);
void FreeBallGfx(u8 ballId);
-void sub_804BD94(u8 battler);
+void StartHealthboxSlideIn(u8 battler);
void DestroySpriteAndFreeResources2(struct Sprite *sprite);
#endif // GUARD_POKEBALL_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 6a9b657ea..6027b9b5a 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -327,7 +327,7 @@ extern const u32 gExperienceTables[][MAX_LEVEL + 1];
extern const u16 *const gLevelUpLearnsets[];
extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
-extern const struct SpriteTemplate gUnknown_825DEF0[];
+extern const struct SpriteTemplate gSpriteTemplates_Battlers[];
extern const u8 gPPUpGetMask[];
void ZeroBoxMonData(struct BoxPokemon *boxMon);
@@ -342,7 +342,7 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level);
void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality);
void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread);
void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src);
-void sub_803E23C(struct Pokemon *mon, struct BattleTowerPokemon *dest);
+void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest);
void CalculateMonStats(struct Pokemon *mon);
void BoxMonToMon(struct BoxPokemon *src, struct Pokemon *dest);
u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon);
@@ -407,7 +407,7 @@ u16 NationalPokedexNumToSpecies(u16 nationalNum);
u16 SpeciesToNationalPokedexNum(u16 species);
u16 HoennToNationalOrder(u16 hoennNum);
u16 SpeciesToCryId(u16 species);
-void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4);
+void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, bool8 isFrontPic);
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
bool8 GetPlayerFlankId(void);
bool16 GetLinkTrainerFlankId(u8 linkPlayerId);
@@ -446,10 +446,10 @@ bool8 IsMonShiny(struct Pokemon *mon);
u8 *GetTrainerPartnerName(void);
u8 GetPlayerPartyHighestLevel(void);
u16 FacilityClassToPicIndex(u16 facilityClass);
-bool8 sub_804455C(u8 caseId, u8 battlerId);
+bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId);
void SetDeoxysStats(void);
-u16 sub_80447AC(void);
-u16 sub_80447F0(void);
+u16 GetUnionRoomTrainerPic(void);
+u16 GetUnionRoomTrainerClass(void);
void CreateEventLegalEnemyMon(void);
void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality);
bool8 CheckBattleTypeGhost(struct Pokemon *mon, u8 bank);
diff --git a/include/quest_log.h b/include/quest_log.h
index 9c50f5f6e..ffe5c2cea 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -49,7 +49,7 @@ void QuestLog_CutRecording(void);
u8 sub_8112CAC(void);
void ResetDeferredLinkEvent(void);
void FinishRecordingQuestLogScene(void);
-void sub_81139BC(void);
+void QuestLogEvents_HandleEndTrainerBattle(void);
void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx);
void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
void SetQuestLogRecordAndPlaybackPointers(void *oldSave);
diff --git a/include/reshow_battle_screen.h b/include/reshow_battle_screen.h
index cc20eed96..5587d50e5 100644
--- a/include/reshow_battle_screen.h
+++ b/include/reshow_battle_screen.h
@@ -3,7 +3,7 @@
#include "global.h"
-void nullsub_44(void);
+void ReshowBattleScreenDummy(void);
void ReshowBattleScreenAfterMenu(void);
#endif // GUARD_RESHOW_BATTLE_SCREEN_H
diff --git a/include/strings.h b/include/strings.h
index 28dcec66b..b4783c3c4 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -338,12 +338,12 @@ extern const u8 gText_SwitchedPkmnItem[];
extern const u8 gText_BagFullCouldNotRemoveItem[];
extern const u8 gText_PkmnCantParticipate[];
extern const u8 gText_CancelParticipation[];
-extern const u8 gUnknown_8417494[];
+extern const u8 gText_OakThisIsListOfPokemon[];
extern const u8 gMenuText_Confirm[];
extern const u8 gText_MaleSymbol[];
extern const u8 gText_FemaleSymbol[];
extern const u8 gText_Slash[];
-extern const u8 gUnknown_8417457[];
+extern const u8 gText_OakImportantToGetToKnowPokemonThroughly[];
extern const u8 gText_PkmnNotHolding[];
extern const u8 gText_PCMailboxFull[];
extern const u8 gText_MailSentToPC[];