summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h179
-rw-r--r--include/battle_ai_script_commands.h15
-rw-r--r--include/battle_bg.h6
-rw-r--r--include/battle_controllers.h21
-rw-r--r--include/battle_gfx_sfx_util.h4
-rw-r--r--include/battle_interface.h10
-rw-r--r--include/battle_main.h12
-rw-r--r--include/battle_message.h27
-rw-r--r--include/battle_util.h61
-rw-r--r--include/constants/abilities.h2
-rw-r--r--include/constants/battle.h4
-rw-r--r--include/constants/battle_frontier.h13
-rw-r--r--include/constants/battle_script_commands.h2
-rwxr-xr-xinclude/constants/bg_event_constants.h13
-rwxr-xr-xinclude/constants/event_object_movement_constants.h245
-rw-r--r--include/constants/items.h4
-rwxr-xr-xinclude/constants/map_types.h25
-rw-r--r--include/constants/moves.h2
-rwxr-xr-xinclude/constants/secret_bases.h110
-rw-r--r--include/constants/trainers.h18
-rw-r--r--include/data/battle_moves.h2
-rw-r--r--include/data/text/abilities.h4
-rw-r--r--include/event_object_movement.h249
-rw-r--r--include/field_effect.h4
-rw-r--r--include/fldeff_cut.h10
-rw-r--r--include/gba/io_reg.h31
-rw-r--r--include/global.fieldmap.h29
-rw-r--r--include/global.h8
-rw-r--r--include/link.h2
-rw-r--r--include/list_menu.h66
-rw-r--r--include/metatile_behavior.h2
-rw-r--r--include/palette.h14
-rw-r--r--include/party_menu.h15
-rw-r--r--include/pokemon.h12
-rw-r--r--include/recorded_battle.h2
-rw-r--r--include/rom6.h2
-rw-r--r--include/sprite.h37
-rw-r--r--include/text.h21
-rw-r--r--include/text_window.h10
39 files changed, 765 insertions, 528 deletions
diff --git a/include/battle.h b/include/battle.h
index ae8a1c98a..bd7ba4b35 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -4,6 +4,7 @@
// should they be included here or included individually by every file?
#include "constants/battle.h"
#include "battle_main.h"
+#include "battle_message.h"
#include "battle_util.h"
#include "battle_script_commands.h"
#include "battle_ai_switch_items.h"
@@ -15,12 +16,6 @@
#define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE)
#define GET_BATTLER_SIDE2(battler) (GET_BATTLER_POSITION(battler) & BIT_SIDE)
-#define TRAINER_OPPONENT_3FE 0x3FE
-#define TRAINER_OPPONENT_C00 0xC00
-#define TRAINER_OPPONENT_800 0x800
-#define STEVEN_PARTNER_ID 0xC03
-#define SECRET_BASE_OPPONENT 0x400
-
// Battle Actions
// These determine what each battler will do in a turn
#define B_ACTION_USE_MOVE 0
@@ -33,7 +28,7 @@
#define B_ACTION_SAFARI_GO_NEAR 7
#define B_ACTION_SAFARI_RUN 8
// The exact purposes of these are unclear
-#define B_ACTION_UNKNOWN9 9
+#define B_ACTION_WALLY_THROW 9
#define B_ACTION_EXEC_SCRIPT 10 // when executing an action
#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
#define B_ACTION_FINISHED 12 // when executing an action
@@ -150,29 +145,29 @@ struct DisableStruct
/*0x08*/ u8 protectUses;
/*0x09*/ u8 stockpileCounter;
/*0x0A*/ u8 substituteHP;
- /*0x0B*/ u8 disableTimer1 : 4;
- /*0x0B*/ u8 disableTimer2 : 4;
+ /*0x0B*/ u8 disableTimer1:4;
+ /*0x0B*/ u8 disableTimer2:4;
/*0x0C*/ u8 encoredMovePos;
/*0x0D*/ u8 unkD;
- /*0x0E*/ u8 encoreTimer1 : 4;
- /*0x0E*/ u8 encoreTimer2 : 4;
- /*0x0F*/ u8 perishSongTimer1 : 4;
- /*0x0F*/ u8 perishSongTimer2 : 4;
+ /*0x0E*/ u8 encoreTimer1:4;
+ /*0x0E*/ u8 encoreTimer2:4;
+ /*0x0F*/ u8 perishSongTimer1:4;
+ /*0x0F*/ u8 perishSongTimer2:4;
/*0x10*/ u8 furyCutterCounter;
- /*0x11*/ u8 rolloutCounter1 : 4;
- /*0x11*/ u8 rolloutCounter2 : 4;
- /*0x12*/ u8 chargeTimer1 : 4;
- /*0x12*/ u8 chargeTimer2 : 4;
+ /*0x11*/ u8 rolloutCounter1:4;
+ /*0x11*/ u8 rolloutCounter2:4;
+ /*0x12*/ u8 chargeTimer1:4;
+ /*0x12*/ u8 chargeTimer2:4;
/*0x13*/ u8 tauntTimer1:4;
/*0x13*/ u8 tauntTimer2:4;
/*0x14*/ u8 battlerPreventingEscape;
/*0x15*/ u8 battlerWithSureHit;
/*0x16*/ u8 isFirstTurn;
/*0x17*/ u8 unk17;
- /*0x18*/ u8 truantCounter : 1;
- /*0x18*/ u8 truantUnknownBit : 1;
- /*0x18*/ u8 unk18_a_2 : 2;
- /*0x18*/ u8 unk18_b : 4;
+ /*0x18*/ u8 truantCounter:1;
+ /*0x18*/ u8 truantUnknownBit:1;
+ /*0x18*/ u8 unk18_a_2:2;
+ /*0x18*/ u8 unk18_b:4;
/*0x19*/ u8 rechargeCounter;
/*0x1A*/ u8 unk1A[2];
};
@@ -182,7 +177,7 @@ struct ProtectStruct
/* field_0 */
u32 protected:1;
u32 endured:1;
- u32 onlyStruggle:1;
+ u32 noValidMoves:1;
u32 helpingHand:1;
u32 bounceMove:1;
u32 stealMove:1;
@@ -201,12 +196,12 @@ struct ProtectStruct
u32 flag2Unknown:1; // 0x2
u32 flinchImmobility:1; // 0x4
u32 notFirstStrike:1; // 0x8
- u32 flag_x10 : 1; // 0x10
- u32 flag_x20 : 1; // 0x20
- u32 flag_x40 : 1; // 0x40
- u32 flag_x80 : 1; // 0x80
+ u32 flag_x10:1; // 0x10
+ u32 flag_x20:1; // 0x20
+ u32 flag_x40:1; // 0x40
+ u32 flag_x80:1; // 0x80
/* field_3 */
- u32 field3 : 8;
+ u32 field3:8;
/* field_4 */ u32 physicalDmg;
/* field_8 */ u32 specialDmg;
@@ -217,14 +212,14 @@ struct ProtectStruct
struct SpecialStatus
{
- u8 statLowered : 1; // 0x1
- u8 lightningRodRedirected : 1; // 0x2
- u8 restoredBankSprite: 1; // 0x4
- u8 intimidatedPoke : 1; // 0x8
- u8 traced : 1; // 0x10
- u8 flag20 : 1;
- u8 flag40 : 1;
- u8 focusBanded : 1;
+ u8 statLowered:1; // 0x1
+ u8 lightningRodRedirected:1; // 0x2
+ u8 restoredBattlerSprite: 1; // 0x4
+ u8 intimidatedMon:1; // 0x8
+ u8 traced:1; // 0x10
+ u8 flag20:1;
+ u8 flag40:1;
+ u8 focusBanded:1;
u8 field1[3];
s32 dmg;
s32 physicalDmg;
@@ -336,20 +331,20 @@ struct BattleResults
u8 unk5_0:1; // 0x5
u8 usedMasterBall:1; // 0x5
u8 caughtMonBall:4; // 0x5
- u8 unk5_6:1; // 0x5
+ u8 shinyWildMon:1; // 0x5
u8 unk5_7:1; // 0x5
u16 playerMon1Species; // 0x6
- u8 playerMon1Name[11]; // 0x8
+ u8 playerMon1Name[POKEMON_NAME_LENGTH + 1]; // 0x8
u8 battleTurnCounter; // 0x13
- u8 playerMon2Name[11]; // 0x14
- u8 field_1F; // 0x1F
+ u8 playerMon2Name[POKEMON_NAME_LENGTH + 1]; // 0x14
+ u8 pokeblockThrows; // 0x1F
u16 lastOpponentSpecies; // 0x20
u16 lastUsedMovePlayer; // 0x22
u16 lastUsedMoveOpponent; // 0x24
u16 playerMon2Species; // 0x26
u16 caughtMonSpecies; // 0x28
- u8 caughtMonNick[10]; // 0x2A
- u8 filler34[2]; // 0x34
+ u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A
+ u8 filler35[1]; // 0x35
u8 catchAttempts[11]; // 0x36
};
@@ -428,7 +423,7 @@ struct BattleTv_Mon
struct BattleTv
{
- struct BattleTv_Mon mon[2][6]; // [side][partyId]
+ struct BattleTv_Mon mon[2][PARTY_SIZE]; // [side][partyId]
struct BattleTv_Position pos[2][2]; // [side][flank]
struct BattleTv_Side side[2]; // [side]
};
@@ -461,7 +456,7 @@ struct BattleStruct
u8 field_46;
u8 field_47;
u8 focusPunchBattlerId;
- u8 field_49;
+ u8 battlerPreventingSwitchout;
u8 moneyMultiplier;
u8 savedTurnActionNumber;
u8 switchInAbilitiesCounter;
@@ -478,10 +473,10 @@ struct BattleStruct
u8 runTries;
u8 caughtMonNick[11];
u8 field_78;
- u8 field_79;
- u8 field_7A;
- u8 field_7B;
- u8 field_7C;
+ u8 safariGoNearCounter;
+ u8 safariPkblThrowCounter;
+ u8 safariEscapeFactor;
+ u8 safariCatchFactor;
u8 field_7D;
u8 field_7E;
u8 formToChangeInto;
@@ -514,7 +509,7 @@ struct BattleStruct
u8 field_A7;
u16 hpOnSwitchout[2];
u32 savedBattleTypeFlags;
- u8 field_B0;
+ u8 abilityPreventingSwitchout;
u8 hpScale;
u8 synchronizeMoveEffect;
bool8 anyMonHasTransformed;
@@ -525,7 +520,7 @@ struct BattleStruct
u8 AI_itemFlags[2];
u16 choicedMove[MAX_BATTLERS_COUNT];
u16 changedItems[MAX_BATTLERS_COUNT];
- u8 intimidateBank;
+ u8 intimidateBattler;
u8 switchInItemsCounter;
u8 field_DA;
u8 turnSideTracker;
@@ -560,8 +555,8 @@ struct BattleStruct
typeArg = gBattleMoves[move].type; \
}
-#define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
-#define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
+#define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
+#define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0))
@@ -606,34 +601,22 @@ struct BattleScripting
u8 reshowMainState;
u8 reshowHelperState;
u8 field_23;
- u8 field_24;
+ u8 windowsType; // 0 - normal, 1 - battle arena
u8 multiplayerId;
};
-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
-};
-
// rom_80A5C6C
u8 GetBattlerSide(u8 battler);
-u8 GetBattlerPosition(u8 bank);
-u8 GetBattlerAtPosition(u8 bank);
+u8 GetBattlerPosition(u8 battler);
+u8 GetBattlerAtPosition(u8 battler);
struct BattleSpriteInfo
{
- u16 invisible : 1; // 0x1
- u16 lowHpSong : 1; // 0x2
- u16 behindSubstitute : 1; // 0x4
- u16 flag_x8 : 1; // 0x8
- u16 hpNumbersNoBars : 1; // 0x10
+ u16 invisible:1; // 0x1
+ u16 lowHpSong:1; // 0x2
+ u16 behindSubstitute:1; // 0x4
+ u16 flag_x8:1; // 0x8
+ u16 hpNumbersNoBars:1; // 0x10
u16 transformSpecies;
};
@@ -647,12 +630,12 @@ struct BattleAnimationInfo
u8 field_6;
u8 field_7;
u8 ballThrowCaseId;
- u8 field_9_x1 : 1;
- u8 field_9_x2 : 1;
- u8 field_9_x1C : 3;
- u8 field_9_x20 : 1;
- u8 field_9_x40 : 1;
- u8 field_9_x80 : 1;
+ u8 field_9_x1:1;
+ u8 field_9_x2:1;
+ u8 field_9_x1C:3;
+ u8 field_9_x20:1;
+ u8 field_9_x40:1;
+ u8 field_9_x80:1;
u8 field_A;
u8 field_B;
u8 field_C;
@@ -663,21 +646,21 @@ struct BattleAnimationInfo
struct BattleHealthboxInfo
{
- u8 flag_x1 : 1;
- u8 flag_x2 : 1;
- u8 flag_x4 : 1;
- 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 : 4;
- u8 field_1_x20 : 1;
- u8 field_1_x40 : 1;
- u8 field_1_x80 : 1;
- u8 field_2;
- u8 field_3;
+ u8 partyStatusSummaryShown:1;
+ u8 healthboxIsBouncing:1;
+ u8 battlerIsBouncing:1;
+ 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:4;
+ u8 field_1_x20:1;
+ u8 field_1_x40:1;
+ u8 field_1_x80:1;
+ u8 healthboxBounceSpriteId;
+ u8 battlerBounceSpriteId;
u8 animationState;
u8 field_5;
u8 field_6;
@@ -692,9 +675,9 @@ struct BattleBarInfo
{
u8 healthboxSpriteId;
s32 maxValue;
- s32 currentValue;
+ s32 oldValue;
s32 receivedValue;
- s32 field_10;
+ s32 currValue;
};
struct BattleSpriteData
@@ -719,7 +702,11 @@ struct MonSpritesGfx
void *field_17C;
};
-// all battle variables are declared in battle_main.c
+// All battle variables are declared in battle_main.c
+extern u8 gDisplayedStringBattle[300];
+extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT];
+extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT];
+extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT];
extern u32 gBattleTypeFlags;
extern u8 gBattleTerrain;
extern u32 gUnknown_02022FF4;
@@ -733,7 +720,7 @@ extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
-extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT];
+extern u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT];
extern u8 gCurrentTurnActionNumber;
extern u8 gCurrentActionFuncId;
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
diff --git a/include/battle_ai_script_commands.h b/include/battle_ai_script_commands.h
index 316f76de6..d23ad048a 100644
--- a/include/battle_ai_script_commands.h
+++ b/include/battle_ai_script_commands.h
@@ -1,13 +1,18 @@
#ifndef GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
#define GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
+// return values for BattleAI_ChooseMoveOrAction
+// 0 - 3 are move idx
+#define AI_CHOICE_FLEE 4
+#define AI_CHOICE_WATCH 5
+
void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves);
void BattleAI_SetupAIData(u8 defaultScoreMoves);
u8 BattleAI_ChooseMoveOrAction(void);
-void ClearBattlerMoveHistory(u8 bank);
-void RecordAbilityBattle(u8 bank, u8 abilityId);
-void ClearBattlerAbilityHistory(u8 bank);
-void RecordItemEffectBattle(u8 bank, u8 itemEffect);
-void ClearBankItemEffectHistory(u8 bank);
+void ClearBattlerMoveHistory(u8 battlerId);
+void RecordAbilityBattle(u8 battlerId, u8 abilityId);
+void ClearBattlerAbilityHistory(u8 battlerId);
+void RecordItemEffectBattle(u8 battlerId, u8 itemEffect);
+void ClearBattlerItemEffectHistory(u8 battlerId);
#endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
diff --git a/include/battle_bg.h b/include/battle_bg.h
index 7fc09fbf7..dac41c992 100644
--- a/include/battle_bg.h
+++ b/include/battle_bg.h
@@ -1,13 +1,13 @@
#ifndef GUARD_BATTLE_BG_H
#define GUARD_BATTLE_BG_H
-void sub_8035658(void);
+void BattleInitBgsAndWindows(void);
void sub_80356D0(void);
-void ApplyPlayerChosenFrameToBattleMenu(void);
+void LoadBattleMenuWindowGfx(void);
void DrawMainBattleBackground(void);
void LoadBattleTextboxAndBackground(void);
void sub_8035D74(u8 taskId);
-void LoadBattleEntryBackground(void);
+void DrawBattleEntryBackground(void);
bool8 LoadChosenBattleElement(u8 caseId);
#endif // GUARD_BATTLE_BG_H
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index a0fc41b52..ff5a629af 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -65,6 +65,8 @@ enum
REQUEST_TOUGH_RIBBON_BATTLE,
};
+// Special arguments for Battle Controller functions.
+
#define RESET_ACTION_MOVE_SELECTION 0
#define RESET_ACTION_SELECTION 1
#define RESET_MOVE_SELECTION 2
@@ -76,14 +78,15 @@ enum
#define BALL_3_SHAKES_SUCCESS 4
#define BALL_TRAINER_BLOCK 5
-#define RET_VALUE_LEVELLED_UP 11
-
#define INSTANT_HP_BAR_DROP 32767
+// Special return values in gBattleBufferB from Battle Controller functions.
+#define RET_VALUE_LEVELED_UP 11
+
struct UnusedControllerStruct
{
- u8 field_0 : 7;
- u8 flag_x80 : 1;
+ u8 field_0:7;
+ u8 flag_x80:1;
};
struct HpAndStatus
@@ -160,8 +163,8 @@ enum
CONTROLLER_INTROSLIDE,
CONTROLLER_INTROTRAINERBALLTHROW,
CONTROLLER_DRAWPARTYSTATUSSUMMARY,
- CONTROLLER_49,
- CONTROLLER_50,
+ CONTROLLER_HIDEPARTYSTATUSSUMMARY,
+ CONTROLLER_ENDBOUNCE,
CONTROLLER_SPRITEINVISIBILITY,
CONTROLLER_BATTLEANIMATION,
CONTROLLER_LINKSTANDBYMSG,
@@ -230,13 +233,13 @@ 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_EmitCmd49(u8 bufferId);
-void BtlController_EmitCmd50(u8 bufferId);
+void BtlController_EmitHidePartyStatusSummary(u8 bufferId);
+void BtlController_EmitEndBounceEffect(u8 bufferId);
void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2);
void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
-void BtlController_EmitCmd55(u8 bufferId, u8 arg1);
+void BtlController_EmitCmd55(u8 bufferId, u8 battleOutcome);
// player controller
void SetControllerToPlayer(void);
diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h
index e1c6325b6..16253e760 100644
--- a/include/battle_gfx_sfx_util.h
+++ b/include/battle_gfx_sfx_util.h
@@ -35,7 +35,7 @@ void ClearBehindSubstituteBit(u8 battlerId);
void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId);
void BattleStopLowHpSound(void);
u8 GetMonHPBarLevel(struct Pokemon *mon);
-void sub_805EAE8(void);
+void HandleBattleLowHpMusicChange(void);
void sub_805EB9C(u8 affineMode);
void LoadAndCreateEnemyShadowSprites(void);
void SpriteCB_SetInvisible(struct Sprite *sprite);
@@ -45,6 +45,6 @@ void sub_805EF14(void);
void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute);
void AllocateMonSpritesGfx(void);
void FreeMonSpritesGfx(void);
-bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon);
+bool32 ShouldPlayNormalMonCry(struct Pokemon *mon);
#endif // GUARD_BATTLE_GFX_SFX_UTIL
diff --git a/include/battle_interface.h b/include/battle_interface.h
index fe8c03f70..2d93811f1 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -29,12 +29,18 @@ enum
#define TAG_HEALTHBOX_OPPONENT1_TILE 0xD701
#define TAG_HEALTHBOX_OPPONENT2_TILE 0xD702
+#define TAG_HEALTHBAR_PLAYER1_TILE 0xD704
+#define TAG_HEALTHBAR_OPPONENT1_TILE 0xD705
+#define TAG_HEALTHBAR_PLAYER2_TILE 0xD706
+#define TAG_HEALTHBAR_OPPONENT2_TILE 0xD707
+
#define TAG_HEALTHBOX_SAFARI_TILE 0xD70B
#define TAG_STATUS_SUMMARY_BAR_TILE 0xD70C
#define TAG_STATUS_SUMMARY_BALLS_TILE 0xD714
#define TAG_HEALTHBOX_PAL 0xD6FF
+#define TAG_HEALTHBAR_PAL 0xD704
#define TAG_STATUS_SUMMARY_BAR_PAL 0xD710
#define TAG_STATUS_SUMMARY_BALLS_PAL 0xD712
@@ -66,9 +72,9 @@ void InitBattlerHealthboxCoords(u8 bank);
void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
void SwapHpBarsWithHpText(void);
u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart);
-void sub_8073C30(u8 taskId);
+void Task_HidePartyStatusSummary(u8 taskId);
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId);
-s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
+s32 MoveBattleBar(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
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 a725b631f..27e61c8fc 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -25,6 +25,10 @@ struct TrainerMoney
#define TYPE_FORESIGHT 0xFE
#define TYPE_ENDTABLE 0xFF
+// defines for the 'DoBounceEffect' function
+#define BOUNCE_MON 0x0
+#define BOUNCE_HEALTHBOX 0x1
+
void CB2_InitBattle(void);
void BattleMainCB2(void);
void CB2_QuitRecordedBattle(void);
@@ -38,15 +42,15 @@ u32 sub_80391E0(u8 arrayId, u8 caseId);
u32 sub_80397C4(u32 setId, u32 tableId);
void oac_poke_opponent(struct Sprite *sprite);
void SpriteCallbackDummy_2(struct Sprite *sprite);
-void sub_8039934(struct Sprite *sprite);
+void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
void sub_8039AD8(struct Sprite *sprite);
void sub_8039B2C(struct Sprite *sprite);
void sub_8039B58(struct Sprite *sprite);
void sub_8039BB4(struct Sprite *sprite);
void sub_80105DC(struct Sprite *sprite);
void sub_8039C00(struct Sprite *sprite);
-void dp11b_obj_instanciate(u8 battlerId, u8 b, s8 c, s8 d);
-void dp11b_obj_free(u8 battlerId, bool8 b);
+void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d);
+void EndBounceEffect(u8 battlerId, bool8 b);
void sub_8039E44(struct Sprite *sprite);
void sub_8039E60(struct Sprite *sprite);
void sub_8039E84(struct Sprite *sprite);
@@ -80,6 +84,6 @@ extern const u8 gStatusConditionString_IceJpn[8];
extern const u8 gStatusConditionString_ConfusionJpn[8];
extern const u8 gStatusConditionString_LoveJpn[8];
-extern const u8 * const gStatusConditionStringsTable[7][2];
+extern const u8 *const gStatusConditionStringsTable[7][2];
#endif // GUARD_BATTLE_MAIN_H
diff --git a/include/battle_message.h b/include/battle_message.h
index bf9b590af..147bfa501 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -1,8 +1,9 @@
#ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H
-// for 0xFD
+#define TEXT_BUFF_ARRAY_COUNT 16
+// for 0xFD
#define B_TXT_BUFF1 0x0
#define B_TXT_BUFF2 0x1
#define B_TXT_COPY_VAR_1 0x2
@@ -194,7 +195,7 @@
textVar[4] = B_BUFF_EOS; \
}
-struct StringInfoBattle
+struct BattleMsgData
{
u16 currentMove;
u16 originallyUsedMove;
@@ -203,25 +204,20 @@ struct StringInfoBattle
u8 scrActive;
u8 unk1605E;
u8 hpScale;
- u8 StringBank;
+ u8 itemEffectBattler;
u8 moveType;
- u8 abilities[4];
- u8 textBuffs[3][0x10];
+ u8 abilities[MAX_BATTLERS_COUNT];
+ u8 textBuffs[3][TEXT_BUFF_ARRAY_COUNT];
};
void BufferStringBattle(u16 stringID);
u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src);
u32 BattleStringExpandPlaceholders(const u8* src, u8* dst);
-void BattleHandleAddTextPrinter(const u8* text, u8 arg1);
+void BattlePutTextOnWindow(const u8* text, u8 arg1);
void SetPpNumbersPaletteInMoveSelection(void);
u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp);
-#define TEXT_BUFF_ARRAY_COUNT 16
-
-extern u8 gDisplayedStringBattle[300];
-extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT];
-extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT];
-extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT];
+extern struct BattleMsgData *gBattleMsgDataPtr;
extern const u8* const gBattleStringsTable[];
extern const u8* const gStatNamesTable[];
@@ -252,6 +248,13 @@ extern const u8 gText_BattleSwitchWhich4[];
extern const u8 gText_BattleSwitchWhich5[];
extern const u8 gText_SafariBalls[];
extern const u8 gText_SafariBallLeft[];
+extern const u8 gText_Sleep[];
+extern const u8 gText_Poison[];
+extern const u8 gText_Burn[];
+extern const u8 gText_Paralysis[];
+extern const u8 gText_Ice[];
+extern const u8 gText_Confusion[];
+extern const u8 gText_Love[];
extern const u8 gText_SpaceAndSpace[];
extern const u8 gText_CommaSpace[];
extern const u8 gText_Space2[];
diff --git a/include/battle_util.h b/include/battle_util.h
index e5c1aaf18..0531966df 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -8,41 +8,36 @@
#define MOVE_LIMITATION_TAUNT (1 << 4)
#define MOVE_LIMITATION_IMPRISION (1 << 5)
-#define ABILITYEFFECT_ON_SWITCHIN 0x0
-#define ABILITYEFFECT_ENDTURN 0x1
-#define ABILITYEFFECT_MOVES_BLOCK 0x2
-#define ABILITYEFFECT_ABSORBING 0x3
-#define ABILITYEFFECT_CONTACT 0x4
-#define ABILITYEFFECT_IMMUNITY 0x5
-#define ABILITYEFFECT_FORECAST 0x6
-#define ABILITYEFFECT_SYNCHRONIZE 0x7
-#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
-#define ABILITYEFFECT_INTIMIDATE1 0x9
-#define ABILITYEFFECT_INTIMIDATE2 0xA
-#define ABILITYEFFECT_TRACE 0xB
-#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
-#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD
-#define ABILITYEFFECT_FIELD_SPORT 0xE
-#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK 0xF
-#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
-#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11
-#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
-#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
-#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF
+#define ABILITYEFFECT_ON_SWITCHIN 0x0
+#define ABILITYEFFECT_ENDTURN 0x1
+#define ABILITYEFFECT_MOVES_BLOCK 0x2
+#define ABILITYEFFECT_ABSORBING 0x3
+#define ABILITYEFFECT_CONTACT 0x4
+#define ABILITYEFFECT_IMMUNITY 0x5
+#define ABILITYEFFECT_FORECAST 0x6
+#define ABILITYEFFECT_SYNCHRONIZE 0x7
+#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
+#define ABILITYEFFECT_INTIMIDATE1 0x9
+#define ABILITYEFFECT_INTIMIDATE2 0xA
+#define ABILITYEFFECT_TRACE 0xB
+#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
+#define ABILITYEFFECT_CHECK_BATTLER_SIDE 0xD
+#define ABILITYEFFECT_FIELD_SPORT 0xE
+#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 0xF
+#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
+#define ABILITYEFFECT_COUNT_BATTLER_SIDE 0x11
+#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
+#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
+#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF
-#define ITEMEFFECT_ON_SWITCH_IN 0x0
+#define ABILITY_ON_OPPOSING_FIELD(battlerId, abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, battlerId, abilityId, 0, 0))
+#define ABILITY_ON_FIELD(abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0))
+#define ABILITY_ON_FIELD2(abilityId)(AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0))
-#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
-#define WEATHER_HAS_EFFECT2 ((!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0)))
+#define ITEMEFFECT_ON_SWITCH_IN 0x0
-#define BS_GET_TARGET 0
-#define BS_GET_ATTACKER 1
-#define BS_GET_EFFECT_BANK 2
-#define BS_GET_SCRIPTING_BANK 10
-#define BS_GET_PLAYER1 11
-#define BS_GET_OPPONENT1 12
-#define BS_GET_PLAYER2 13
-#define BS_GET_OPPONENT2 14
+#define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK)))
+#define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK)))
u8 GetBattlerForBattleScript(u8 caseId);
void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move);
@@ -70,7 +65,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void);
bool8 HandleFaintedMonActions(void);
void TryClearRageStatuses(void);
u8 AtkCanceller_UnableToUseMove(void);
-bool8 sub_80423F4(u8 battlerId, u8 r1, u8 r2);
+bool8 HasNoMonsToSwitch(u8 battlerId, u8 r1, u8 r2);
u8 CastformDataTypeChange(u8 battlerId);
u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg);
void BattleScriptExecute(const u8* BS_ptr);
diff --git a/include/constants/abilities.h b/include/constants/abilities.h
index 4e2c4056c..4ad54c86f 100644
--- a/include/constants/abilities.h
+++ b/include/constants/abilities.h
@@ -80,4 +80,6 @@
#define ABILITY_CACOPHONY 76
#define ABILITY_AIR_LOCK 77
+#define ABILITIES_COUNT 78
+
#endif // GUARD_CONSTANTS_ABILITIES_H
diff --git a/include/constants/battle.h b/include/constants/battle.h
index f3d7a8e0e..b3f9d919a 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -130,7 +130,7 @@
#define STATUS2_TORMENT 0x80000000
// Seems like per-battler statuses. Not quite sure how to categorize these
-#define STATUS3_LEECHSEED_BANK 0x3
+#define STATUS3_LEECHSEED_BATTLER 0x3
#define STATUS3_LEECHSEED 0x4
#define STATUS3_ALWAYS_HITS 0x18 // two bits
#define STATUS3_PERISH_SONG 0x20
@@ -159,7 +159,7 @@
#define HITMARKER_NO_ATTACKSTRING 0x00000200
#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
#define HITMARKER_NO_PPDEDUCT 0x00000800
-#define HITMARKER_PURSUIT_TRAP 0x00001000
+#define HITMARKER_SWAP_ATTACKER_TARGET 0x00001000
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
#define HITMARKER_RUN 0x00008000
diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h
new file mode 100644
index 000000000..4145805c4
--- /dev/null
+++ b/include/constants/battle_frontier.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_CONSTANTS_BATTLE_FRONTIER_H
+#define GUARD_CONSTANTS_BATTLE_FRONTIER_H
+
+// Battle Frontier facility ids.
+#define FRONTIER_FACILITY_TOWER 0
+#define FRONTIER_FACILITY_DOME 1
+#define FRONTIER_FACILITY_PALACE 2
+#define FRONTIER_FACILITY_ARENA 3
+#define FRONTIER_FACILITY_FACTORY 4
+#define FRONTIER_FACILITY_PIKE 5
+#define FRONTIER_FACILITY_PYRAMID 6
+
+#endif // GUARD_CONSTANTS_BATTLE_FRONTIER_H
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index a1a4ed50a..c820a1114 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -37,7 +37,7 @@
#define BS_ATTACKER 1
#define BS_EFFECT_BATTLER 2
#define BS_FAINTED 3
-#define BS_BANK_0 7
+#define BS_BATTLER_0 7
#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
#define BS_ATTACKER_SIDE 8 // for atk1E_jumpifability
#define BS_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
diff --git a/include/constants/bg_event_constants.h b/include/constants/bg_event_constants.h
new file mode 100755
index 000000000..a915bc509
--- /dev/null
+++ b/include/constants/bg_event_constants.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_CONSTANTS_BG_EVENT_H
+#define GUARD_CONSTANTS_BG_EVENT_H
+
+#define BG_EVENT_PLAYER_FACING_ANY 0
+#define BG_EVENT_PLAYER_FACING_NORTH 1
+#define BG_EVENT_PLAYER_FACING_SOUTH 2
+#define BG_EVENT_PLAYER_FACING_EAST 3
+#define BG_EVENT_PLAYER_FACING_WEST 4
+
+#define BG_EVENT_HIDDEN_ITEM 7
+#define BG_EVENT_SECRET_BASE 8
+
+#endif // GUARD_CONSTANTS_BG_EVENT_H
diff --git a/include/constants/event_object_movement_constants.h b/include/constants/event_object_movement_constants.h
new file mode 100755
index 000000000..2a80f9a09
--- /dev/null
+++ b/include/constants/event_object_movement_constants.h
@@ -0,0 +1,245 @@
+#ifndef GUARD_CONSTANTS_EVENTOBJMV_H
+#define GUARD_CONSTANTS_EVENTOBJMV_H
+
+#define MOVEMENT_TYPE_NONE 0x0
+#define MOVEMENT_TYPE_LOOK_AROUND 0x1
+#define MOVEMENT_TYPE_WANDER_AROUND 0x2
+#define MOVEMENT_TYPE_WANDER_UP_AND_DOWN 0x3
+#define MOVEMENT_TYPE_WANDER_DOWN_AND_UP 0x4
+#define MOVEMENT_TYPE_WANDER_LEFT_AND_RIGHT 0x5
+#define MOVEMENT_TYPE_WANDER_RIGHT_AND_LEFT 0x6
+#define MOVEMENT_TYPE_FACE_UP 0x7
+#define MOVEMENT_TYPE_FACE_DOWN 0x8
+#define MOVEMENT_TYPE_FACE_LEFT 0x9
+#define MOVEMENT_TYPE_FACE_RIGHT 0xA
+#define MOVEMENT_TYPE_PLAYER 0xB
+#define MOVEMENT_TYPE_BERRY_TREE_GROWTH 0xC
+#define MOVEMENT_TYPE_FACE_DOWN_AND_UP 0xD
+#define MOVEMENT_TYPE_FACE_LEFT_AND_RIGHT 0xE
+#define MOVEMENT_TYPE_FACE_UP_AND_LEFT 0xF
+#define MOVEMENT_TYPE_FACE_UP_AND_RIGHT 0x10
+#define MOVEMENT_TYPE_FACE_DOWN_AND_LEFT 0x11
+#define MOVEMENT_TYPE_FACE_DOWN_AND_RIGHT 0x12
+#define MOVEMENT_TYPE_FACE_DOWN_UP_AND_LEFT 0x13
+#define MOVEMENT_TYPE_FACE_DOWN_UP_AND_RIGHT 0x14
+#define MOVEMENT_TYPE_FACE_UP_LEFT_AND_RIGHT 0x15
+#define MOVEMENT_TYPE_FACE_DOWN_LEFT_AND_RIGHT 0x16
+#define MOVEMENT_TYPE_ROTATE_COUNTERCLOCKWISE 0x17
+#define MOVEMENT_TYPE_ROTATE_CLOCKWISE 0x18
+#define MOVEMENT_TYPE_WALK_UP_AND_DOWN 0x19
+#define MOVEMENT_TYPE_WALK_DOWN_AND_UP 0x1A
+#define MOVEMENT_TYPE_WALK_LEFT_AND_RIGHT 0x1B
+#define MOVEMENT_TYPE_WALK_RIGHT_AND_LEFT 0x1C
+#define MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_LEFT_DOWN 0x1D
+#define MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_DOWN_UP 0x1E
+#define MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_RIGHT_LEFT 0x1F
+#define MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_UP_RIGHT 0x20
+#define MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_RIGHT_DOWN 0x21
+#define MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_DOWN_UP 0x22
+#define MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_LEFT_RIGHT 0x23
+#define MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_UP_LEFT 0x24
+#define MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_DOWN_RIGHT 0x25
+#define MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_RIGHT_LEFT 0x26
+#define MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_UP_DOWN 0x27
+#define MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_LEFT_UP 0x28
+#define MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_DOWN_LEFT 0x29
+#define MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_LEFT_RIGHT 0x2A
+#define MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_UP_DOWN 0x2B
+#define MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_RIGHT_UP 0x2C
+#define MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_DOWN_RIGHT 0x2D
+#define MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_UP_LEFT 0x2E
+#define MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_RIGHT_UP 0x2F
+#define MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_LEFT_DOWN 0x30
+#define MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_DOWN_LEFT 0x31
+#define MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_UP_RIGHT 0x32
+#define MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_RIGHT_DOWN 0x33
+#define MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_LEFT_UP 0x34
+#define MOVEMENT_TYPE_COPY_PLAYER 0x35
+#define MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE 0x36
+#define MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE 0x37
+#define MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE 0x38
+#define MOVEMENT_TYPE_TREE_DISGUISE 0x39
+#define MOVEMENT_TYPE_MOUNTAIN_DISGUISE 0x3A
+#define MOVEMENT_TYPE_COPY_PLAYER_IN_GRASS 0x3B
+#define MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS 0x3C
+#define MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS 0x3D
+#define MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS 0x3E
+#define MOVEMENT_TYPE_HIDDEN 0x3F
+#define MOVEMENT_TYPE_WALK_IN_PLACE_DOWN 0x40
+#define MOVEMENT_TYPE_WALK_IN_PLACE_UP 0x41
+#define MOVEMENT_TYPE_WALK_IN_PLACE_LEFT 0x42
+#define MOVEMENT_TYPE_WALK_IN_PLACE_RIGHT 0x43
+#define MOVEMENT_TYPE_JOG_IN_PLACE_DOWN 0x44
+#define MOVEMENT_TYPE_JOG_IN_PLACE_UP 0x45
+#define MOVEMENT_TYPE_JOG_IN_PLACE_LEFT 0x46
+#define MOVEMENT_TYPE_JOG_IN_PLACE_RIGHT 0x47
+#define MOVEMENT_TYPE_RUN_IN_PLACE_DOWN 0x48
+#define MOVEMENT_TYPE_RUN_IN_PLACE_UP 0x49
+#define MOVEMENT_TYPE_RUN_IN_PLACE_LEFT 0x4A
+#define MOVEMENT_TYPE_RUN_IN_PLACE_RIGHT 0x4B
+#define MOVEMENT_TYPE_INVISIBLE 0x4C
+#define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_DOWN 0x4D
+#define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP 0x4E
+#define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT 0x4F
+#define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT 0x50
+
+#define MOVEMENT_ACTION_FACE_DOWN 0x0
+#define MOVEMENT_ACTION_FACE_UP 0x1
+#define MOVEMENT_ACTION_FACE_LEFT 0x2
+#define MOVEMENT_ACTION_FACE_RIGHT 0x3
+#define MOVEMENT_ACTION_WALK_SLOW_DOWN 0x4
+#define MOVEMENT_ACTION_WALK_SLOW_UP 0x5
+#define MOVEMENT_ACTION_WALK_SLOW_LEFT 0x6
+#define MOVEMENT_ACTION_WALK_SLOW_RIGHT 0x7
+#define MOVEMENT_ACTION_WALK_NORMAL_DOWN 0x8
+#define MOVEMENT_ACTION_WALK_NORMAL_UP 0x9
+#define MOVEMENT_ACTION_WALK_NORMAL_LEFT 0xA
+#define MOVEMENT_ACTION_WALK_NORMAL_RIGHT 0xB
+#define MOVEMENT_ACTION_JUMP_2_DOWN 0xC
+#define MOVEMENT_ACTION_JUMP_2_UP 0xD
+#define MOVEMENT_ACTION_JUMP_2_LEFT 0xE
+#define MOVEMENT_ACTION_JUMP_2_RIGHT 0xF
+#define MOVEMENT_ACTION_DELAY_1 0x10
+#define MOVEMENT_ACTION_DELAY_2 0x11
+#define MOVEMENT_ACTION_DELAY_4 0x12
+#define MOVEMENT_ACTION_DELAY_8 0x13
+#define MOVEMENT_ACTION_DELAY_16 0x14
+#define MOVEMENT_ACTION_WALK_FAST_DOWN 0x15
+#define MOVEMENT_ACTION_WALK_FAST_UP 0x16
+#define MOVEMENT_ACTION_WALK_FAST_LEFT 0x17
+#define MOVEMENT_ACTION_WALK_FAST_RIGHT 0x18
+#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN 0x19
+#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP 0x1A
+#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT 0x1B
+#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT 0x1C
+#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN 0x1D
+#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP 0x1E
+#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT 0x1F
+#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT 0x20
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN 0x21
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP 0x22
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT 0x23
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT 0x24
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN 0x25
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP 0x26
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT 0x27
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT 0x28
+#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN 0x29
+#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP 0x2A
+#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT 0x2B
+#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT 0x2C
+#define MOVEMENT_ACTION_WALK_FASTEST_DOWN 0x2D
+#define MOVEMENT_ACTION_WALK_FASTEST_UP 0x2E
+#define MOVEMENT_ACTION_WALK_FASTEST_LEFT 0x2F
+#define MOVEMENT_ACTION_WALK_FASTEST_RIGHT 0x30
+#define MOVEMENT_ACTION_SLIDE_DOWN 0x31
+#define MOVEMENT_ACTION_SLIDE_UP 0x32
+#define MOVEMENT_ACTION_SLIDE_LEFT 0x33
+#define MOVEMENT_ACTION_SLIDE_RIGHT 0x34
+#define MOVEMENT_ACTION_PLAYER_RUN_DOWN 0x35
+#define MOVEMENT_ACTION_PLAYER_RUN_UP 0x36
+#define MOVEMENT_ACTION_PLAYER_RUN_LEFT 0x37
+#define MOVEMENT_ACTION_PLAYER_RUN_RIGHT 0x38
+#define MOVEMENT_ACTION_START_ANIM_IN_DIRECTION 0x39
+#define MOVEMENT_ACTION_JUMP_SPECIAL_DOWN 0x3A
+#define MOVEMENT_ACTION_JUMP_SPECIAL_UP 0x3B
+#define MOVEMENT_ACTION_JUMP_SPECIAL_LEFT 0x3C
+#define MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT 0x3D
+#define MOVEMENT_ACTION_FACE_PLAYER 0x3E
+#define MOVEMENT_ACTION_FACE_AWAY_PLAYER 0x3F
+#define MOVEMENT_ACTION_LOCK_FACING_DIRECTION 0x40
+#define MOVEMENT_ACTION_UNLOCK_FACING_DIRECTION 0x41
+#define MOVEMENT_ACTION_JUMP_DOWN 0x42
+#define MOVEMENT_ACTION_JUMP_UP 0x43
+#define MOVEMENT_ACTION_JUMP_LEFT 0x44
+#define MOVEMENT_ACTION_JUMP_RIGHT 0x45
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN 0x46
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_UP 0x47
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT 0x48
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT 0x49
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP 0x4A
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN 0x4B
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT 0x4C
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT 0x4D
+#define MOVEMENT_ACTION_FACE_ORIGINAL_DIRECTION 0x4E
+#define MOVEMENT_ACTION_NURSE_JOY_BOW_DOWN 0x4F
+#define MOVEMENT_ACTION_ENABLE_JUMP_LANDING_GROUND_EFFECT 0x50
+#define MOVEMENT_ACTION_DISABLE_JUMP_LANDING_GROUND_EFFECT 0x51
+#define MOVEMENT_ACTION_DISABLE_ANIMATION 0x52
+#define MOVEMENT_ACTION_RESTORE_ANIMATION 0x53
+#define MOVEMENT_ACTION_SET_INVISIBLE 0x54
+#define MOVEMENT_ACTION_SET_VISIBLE 0x55
+#define MOVEMENT_ACTION_EMOTE_EXCLAMATION_MARK 0x56
+#define MOVEMENT_ACTION_EMOTE_QUESTION_MARK 0x57
+#define MOVEMENT_ACTION_EMOTE_HEART 0x58
+#define MOVEMENT_ACTION_REVEAL_TRAINER 0x59
+#define MOVEMENT_ACTION_ROCK_SMASH_BREAK 0x5A
+#define MOVEMENT_ACTION_CUT_TREE 0x5B
+#define MOVEMENT_ACTION_SET_FIXED_PRIORITY 0x5C
+#define MOVEMENT_ACTION_CLEAR_FIXED_PRIORITY 0x5D
+#define MOVEMENT_ACTION_INIT_AFFINE_ANIM 0x5E
+#define MOVEMENT_ACTION_CLEAR_AFFINE_ANIM 0x5F
+#define MOVEMENT_ACTION_UNKNOWN1 0x60
+#define MOVEMENT_ACTION_UNKNOWN2 0x61
+#define MOVEMENT_ACTION_WALK_DOWN_START_AFFINE 0x62
+#define MOVEMENT_ACTION_WALK_DOWN_AFFINE 0x63
+#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN 0x64
+#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP 0x65
+#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT 0x66
+#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT 0x67
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN 0x68
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP 0x69
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT 0x6A
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT 0x6B
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN 0x6C
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP 0x6D
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT 0x6E
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT 0x6F
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN 0x70
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP 0x71
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT 0x72
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT 0x73
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN 0x74
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP 0x75
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT 0x76
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT 0x77
+#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN 0x78
+#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP 0x79
+#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT 0x7A
+#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT 0x7B
+#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN 0x7C
+#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP 0x7D
+#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT 0x7E
+#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT 0x7F
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN 0x80
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP 0x81
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT 0x82
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT 0x83
+#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN 0x84
+#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP 0x85
+#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT 0x86
+#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT 0x87
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN 0x88
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP 0x89
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT 0x8A
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT 0x8B
+#define MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_LEFT 0x8C
+#define MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_RIGHT 0x8D
+#define MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_LEFT 0x8E
+#define MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_RIGHT 0x8F
+#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_LEFT 0x90
+#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT 0x91
+#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT 0x92
+#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT 0x93
+#define MOVEMENT_ACTION_STORE_AND_LOCK_ANIM 0x94
+#define MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM 0x95
+#define MOVEMENT_ACTION_WALK_LEFT_AFFINE 0x96
+#define MOVEMENT_ACTION_WALK_RIGHT_AFFINE 0x97
+#define MOVEMENT_ACTION_LEVITATE 0x98
+#define MOVEMENT_ACTION_STOP_LEVITATE 0x99
+#define MOVEMENT_ACTION_DESTROY_EXTRA_TASK_IF_AT_TOP 0x9A
+#define MOVEMENT_ACTION_FIGURE_8 0x9B
+#define MOVEMENT_ACTION_FLY_UP 0x9C
+#define MOVEMENT_ACTION_FLY_DOWN 0x9D
+
+#endif // GUARD_CONSTANTS_EVENTOBJMV_H
diff --git a/include/constants/items.h b/include/constants/items.h
index 4ca5cb7df..294499c8b 100644
--- a/include/constants/items.h
+++ b/include/constants/items.h
@@ -462,8 +462,8 @@
#define ITEM_MAGMA_EMBLEM 375
#define ITEM_OLD_SEA_MAP 376
-#define ITEM_LAST_ID 376
-#define ITEM_FIELD_ARROW ITEM_LAST_ID + 1
+#define ITEMS_COUNT 377
+#define ITEM_FIELD_ARROW ITEMS_COUNT
#define FIRST_BERRY_INDEX ITEM_CHERI_BERRY
#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY
diff --git a/include/constants/map_types.h b/include/constants/map_types.h
new file mode 100755
index 000000000..504575859
--- /dev/null
+++ b/include/constants/map_types.h
@@ -0,0 +1,25 @@
+#ifndef GUARD_CONSTANTS_MAP_TYPES_H
+#define GUARD_CONSTANTS_MAP_TYPES_H
+
+#define MAP_TYPE_0 0
+#define MAP_TYPE_TOWN 1
+#define MAP_TYPE_CITY 2
+#define MAP_TYPE_ROUTE 3
+#define MAP_TYPE_UNDERGROUND 4
+#define MAP_TYPE_UNDERWATER 5
+#define MAP_TYPE_6 6
+#define MAP_TYPE_7 7
+#define MAP_TYPE_INDOOR 8
+#define MAP_TYPE_SECRET_BASE 9
+
+#define MAP_BATTLE_SCENE_NORMAL 0
+#define MAP_BATTLE_SCENE_GYM 1
+#define MAP_BATTLE_SCENE_MAGMA 2
+#define MAP_BATTLE_SCENE_AQUA 3
+#define MAP_BATTLE_SCENE_SIDNEY 4
+#define MAP_BATTLE_SCENE_PHOEBE 5
+#define MAP_BATTLE_SCENE_GLACIA 6
+#define MAP_BATTLE_SCENE_DRAKE 7
+#define MAP_BATTLE_SCENE_FRONTIER 8
+
+#endif // GUARD_CONSTANTS_MAP_TYPES_H
diff --git a/include/constants/moves.h b/include/constants/moves.h
index f3a3acb90..85c02e3da 100644
--- a/include/constants/moves.h
+++ b/include/constants/moves.h
@@ -357,6 +357,6 @@
#define MOVE_DOOM_DESIRE 353
#define MOVE_PSYCHO_BOOST 354
-#define LAST_MOVE_INDEX MOVE_PSYCHO_BOOST
+#define MOVES_COUNT 355
#endif // GUARD_CONSTANTS_MOVES_H
diff --git a/include/constants/secret_bases.h b/include/constants/secret_bases.h
new file mode 100755
index 000000000..0f51054a8
--- /dev/null
+++ b/include/constants/secret_bases.h
@@ -0,0 +1,110 @@
+#ifndef GUARD_CONSTANTS_SECRET_BASES_H
+#define GUARD_CONSTANTS_SECRET_BASES_H
+
+// Each secret base location is assigned an identifier value.
+// The secret base's map is determined by (id / 10). The ones
+// digit is used to differentiate secret bases using the same map.
+// Therefore, each secret base map can be used by up to 10 different
+// secret bases in the game. These ids are 1-based, but there is no
+// apparent reason for that.
+
+#define SECRET_BASE_RED_CAVE1_1 1
+#define SECRET_BASE_RED_CAVE1_2 2
+#define SECRET_BASE_RED_CAVE1_3 3
+
+#define SECRET_BASE_RED_CAVE2_1 11
+#define SECRET_BASE_RED_CAVE2_2 12
+#define SECRET_BASE_RED_CAVE2_3 13
+
+#define SECRET_BASE_RED_CAVE3_1 21
+#define SECRET_BASE_RED_CAVE3_2 22
+#define SECRET_BASE_RED_CAVE3_3 23
+
+#define SECRET_BASE_RED_CAVE4_1 31
+#define SECRET_BASE_RED_CAVE4_2 32
+#define SECRET_BASE_RED_CAVE4_3 33
+
+#define SECRET_BASE_BROWN_CAVE1_1 41
+#define SECRET_BASE_BROWN_CAVE1_2 42
+#define SECRET_BASE_BROWN_CAVE1_3 43
+
+#define SECRET_BASE_BROWN_CAVE2_1 51
+#define SECRET_BASE_BROWN_CAVE2_2 52
+#define SECRET_BASE_BROWN_CAVE2_3 53
+
+#define SECRET_BASE_BROWN_CAVE3_1 61
+#define SECRET_BASE_BROWN_CAVE3_2 62
+#define SECRET_BASE_BROWN_CAVE3_3 63
+
+#define SECRET_BASE_BROWN_CAVE4_1 71
+#define SECRET_BASE_BROWN_CAVE4_2 72
+#define SECRET_BASE_BROWN_CAVE4_3 73
+
+#define SECRET_BASE_BLUE_CAVE1_1 81
+#define SECRET_BASE_BLUE_CAVE1_2 82
+#define SECRET_BASE_BLUE_CAVE1_3 83
+
+#define SECRET_BASE_BLUE_CAVE2_1 91
+#define SECRET_BASE_BLUE_CAVE2_2 92
+#define SECRET_BASE_BLUE_CAVE2_3 93
+
+#define SECRET_BASE_BLUE_CAVE3_1 101
+#define SECRET_BASE_BLUE_CAVE3_2 102
+#define SECRET_BASE_BLUE_CAVE3_3 103
+
+#define SECRET_BASE_BLUE_CAVE4_1 111
+#define SECRET_BASE_BLUE_CAVE4_2 112
+#define SECRET_BASE_BLUE_CAVE4_3 113
+
+#define SECRET_BASE_YELLOW_CAVE1_1 121
+#define SECRET_BASE_YELLOW_CAVE1_2 122
+#define SECRET_BASE_YELLOW_CAVE1_3 123
+
+#define SECRET_BASE_YELLOW_CAVE2_1 131
+#define SECRET_BASE_YELLOW_CAVE2_2 132
+#define SECRET_BASE_YELLOW_CAVE2_3 133
+
+#define SECRET_BASE_YELLOW_CAVE3_1 141
+#define SECRET_BASE_YELLOW_CAVE3_2 142
+#define SECRET_BASE_YELLOW_CAVE3_3 143
+
+#define SECRET_BASE_YELLOW_CAVE4_1 151
+#define SECRET_BASE_YELLOW_CAVE4_2 152
+#define SECRET_BASE_YELLOW_CAVE4_3 153
+
+#define SECRET_BASE_TREE1_1 161
+#define SECRET_BASE_TREE1_2 162
+#define SECRET_BASE_TREE1_3 163
+#define SECRET_BASE_TREE1_4 164
+
+#define SECRET_BASE_TREE2_1 171
+#define SECRET_BASE_TREE2_2 172
+#define SECRET_BASE_TREE2_3 173
+#define SECRET_BASE_TREE2_4 174
+
+#define SECRET_BASE_TREE3_1 181
+#define SECRET_BASE_TREE3_2 182
+#define SECRET_BASE_TREE3_3 183
+
+#define SECRET_BASE_TREE4_1 191
+#define SECRET_BASE_TREE4_2 192
+#define SECRET_BASE_TREE4_3 193
+
+#define SECRET_BASE_SHRUB1_1 201
+#define SECRET_BASE_SHRUB1_2 202
+#define SECRET_BASE_SHRUB1_3 203
+#define SECRET_BASE_SHRUB1_4 204
+
+#define SECRET_BASE_SHRUB2_1 211
+#define SECRET_BASE_SHRUB2_2 212
+#define SECRET_BASE_SHRUB2_3 213
+
+#define SECRET_BASE_SHRUB3_1 221
+#define SECRET_BASE_SHRUB3_2 222
+#define SECRET_BASE_SHRUB3_3 223
+
+#define SECRET_BASE_SHRUB4_1 231
+#define SECRET_BASE_SHRUB4_2 232
+#define SECRET_BASE_SHRUB4_3 233
+
+#endif // GUARD_CONSTANTS_SECRET_BASES_H
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
index a017b6975..43ea6d0b6 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -857,7 +857,14 @@
#define TRAINER_BRENDAN_16 853
#define TRAINER_MAY_16 854
-#define NO_OF_TRAINERS 854
+#define TRAINERS_COUNT 855
+
+// Special Trainer Ids.
+#define TRAINER_FRONTIER_BRAIN 1022
+#define TRAINER_SECRET_BASE 1024
+#define TRAINER_LINK_OPPONENT 2048
+#define TRAINER_OPPONENT_C00 3072
+#define TRAINER_STEVEN_PARTNER 3075
#define TRAINER_PIC_HIKER 0
#define TRAINER_PIC_AQUA_GRUNT_M 1
@@ -953,6 +960,15 @@
#define TRAINER_PIC_RUBY_SAPPHIRE_BRENDAN 91
#define TRAINER_PIC_RUBY_SAPPHIRE_MAY 92
+#define TRAINER_BACK_PIC_BRENDAN 0
+#define TRAINER_BACK_PIC_MAY 1
+#define TRAINER_BACK_PIC_RED 2
+#define TRAINER_BACK_PIC_LEAF 3
+#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN 4
+#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY 5
+#define TRAINER_BACK_PIC_WALLY 6
+#define TRAINER_BACK_PIC_STEVEN 7
+
#define FACILITY_CLASS_HIKER 0x0
#define FACILITY_CLASS_TEAM_AQUA_1 0x1
#define FACILITY_CLASS_PKMN_BREEDER_1 0x2
diff --git a/include/data/battle_moves.h b/include/data/battle_moves.h
index 6489fe07f..00a6f7fdb 100644
--- a/include/data/battle_moves.h
+++ b/include/data/battle_moves.h
@@ -1,7 +1,7 @@
#ifndef GUARD_DATA_BATTLE_MOVES
#define GUARD_DATA_BATTLE_MOVES
-const struct BattleMove gBattleMoves[LAST_MOVE_INDEX + 1] =
+const struct BattleMove gBattleMoves[MOVES_COUNT] =
{
{ // MOVE_NONE
.effect = EFFECT_HIT,
diff --git a/include/data/text/abilities.h b/include/data/text/abilities.h
index 2efd76afc..3a1e989d2 100644
--- a/include/data/text/abilities.h
+++ b/include/data/text/abilities.h
@@ -80,7 +80,7 @@ static const u8 gShellArmorAbilityDescription[] = _("Blocks critical hits.");
static const u8 gCacophonyAbilityDescription[] = _("Avoids sound-based moves.");
static const u8 gAirLockAbilityDescription[] = _("Negates weather effects.");
-const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1] =
+const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
{
_("-------"),
_("STENCH"),
@@ -162,7 +162,7 @@ const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1] =
_("AIR LOCK"),
};
-const u8 *const gAbilityDescriptionPointers[] =
+const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] =
{
gNoneAbilityDescription,
gStenchAbilityDescription,
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 8a1749b0b..a8f5caa28 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -4,253 +4,6 @@
#define NUM_OBJECT_GRAPHICS_INFO 239
#define SPRITE_VAR 240
-enum
-{
- MOVEMENT_TYPE_NONE,
- MOVEMENT_TYPE_LOOK_AROUND,
- MOVEMENT_TYPE_WANDER_AROUND,
- MOVEMENT_TYPE_WANDER_UP_AND_DOWN,
- MOVEMENT_TYPE_WANDER_DOWN_AND_UP,
- MOVEMENT_TYPE_WANDER_LEFT_AND_RIGHT,
- MOVEMENT_TYPE_WANDER_RIGHT_AND_LEFT,
- MOVEMENT_TYPE_FACE_UP,
- MOVEMENT_TYPE_FACE_DOWN,
- MOVEMENT_TYPE_FACE_LEFT,
- MOVEMENT_TYPE_FACE_RIGHT,
- MOVEMENT_TYPE_PLAYER,
- MOVEMENT_TYPE_BERRY_TREE_GROWTH,
- MOVEMENT_TYPE_FACE_DOWN_AND_UP,
- MOVEMENT_TYPE_FACE_LEFT_AND_RIGHT,
- MOVEMENT_TYPE_FACE_UP_AND_LEFT,
- MOVEMENT_TYPE_FACE_UP_AND_RIGHT,
- MOVEMENT_TYPE_FACE_DOWN_AND_LEFT,
- MOVEMENT_TYPE_FACE_DOWN_AND_RIGHT,
- MOVEMENT_TYPE_FACE_DOWN_UP_AND_LEFT,
- MOVEMENT_TYPE_FACE_DOWN_UP_AND_RIGHT,
- MOVEMENT_TYPE_FACE_UP_LEFT_AND_RIGHT,
- MOVEMENT_TYPE_FACE_DOWN_LEFT_AND_RIGHT,
- MOVEMENT_TYPE_ROTATE_COUNTERCLOCKWISE,
- MOVEMENT_TYPE_ROTATE_CLOCKWISE,
- MOVEMENT_TYPE_WALK_UP_AND_DOWN,
- MOVEMENT_TYPE_WALK_DOWN_AND_UP,
- MOVEMENT_TYPE_WALK_LEFT_AND_RIGHT,
- MOVEMENT_TYPE_WALK_RIGHT_AND_LEFT,
- MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_LEFT_DOWN,
- MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_DOWN_UP,
- MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_RIGHT_LEFT,
- MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_UP_RIGHT,
- MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_RIGHT_DOWN,
- MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_DOWN_UP,
- MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_LEFT_RIGHT,
- MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_UP_LEFT,
- MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_DOWN_RIGHT,
- MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_RIGHT_LEFT,
- MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_UP_DOWN,
- MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_LEFT_UP,
- MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_DOWN_LEFT,
- MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_LEFT_RIGHT,
- MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_UP_DOWN,
- MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_RIGHT_UP,
- MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_DOWN_RIGHT,
- MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_UP_LEFT,
- MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_RIGHT_UP,
- MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_LEFT_DOWN,
- MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_DOWN_LEFT,
- MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_UP_RIGHT,
- MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_RIGHT_DOWN,
- MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_LEFT_UP,
- MOVEMENT_TYPE_COPY_PLAYER,
- MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE,
- MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE,
- MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE,
- MOVEMENT_TYPE_TREE_DISGUISE,
- MOVEMENT_TYPE_MOUNTAIN_DISGUISE,
- MOVEMENT_TYPE_COPY_PLAYER_IN_GRASS,
- MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS,
- MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS,
- MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS,
- MOVEMENT_TYPE_HIDDEN,
- MOVEMENT_TYPE_WALK_IN_PLACE_DOWN,
- MOVEMENT_TYPE_WALK_IN_PLACE_UP,
- MOVEMENT_TYPE_WALK_IN_PLACE_LEFT,
- MOVEMENT_TYPE_WALK_IN_PLACE_RIGHT,
- MOVEMENT_TYPE_JOG_IN_PLACE_DOWN,
- MOVEMENT_TYPE_JOG_IN_PLACE_UP,
- MOVEMENT_TYPE_JOG_IN_PLACE_LEFT,
- MOVEMENT_TYPE_JOG_IN_PLACE_RIGHT,
- MOVEMENT_TYPE_RUN_IN_PLACE_DOWN,
- MOVEMENT_TYPE_RUN_IN_PLACE_UP,
- MOVEMENT_TYPE_RUN_IN_PLACE_LEFT,
- MOVEMENT_TYPE_RUN_IN_PLACE_RIGHT,
- MOVEMENT_TYPE_INVISIBLE,
- MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_DOWN,
- MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP,
- MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT,
- MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT,
-};
-
-enum
-{
- MOVEMENT_ACTION_FACE_DOWN,
- MOVEMENT_ACTION_FACE_UP,
- MOVEMENT_ACTION_FACE_LEFT,
- MOVEMENT_ACTION_FACE_RIGHT,
- MOVEMENT_ACTION_WALK_SLOW_DOWN,
- MOVEMENT_ACTION_WALK_SLOW_UP,
- MOVEMENT_ACTION_WALK_SLOW_LEFT,
- MOVEMENT_ACTION_WALK_SLOW_RIGHT,
- MOVEMENT_ACTION_WALK_NORMAL_DOWN,
- MOVEMENT_ACTION_WALK_NORMAL_UP,
- MOVEMENT_ACTION_WALK_NORMAL_LEFT,
- MOVEMENT_ACTION_WALK_NORMAL_RIGHT,
- MOVEMENT_ACTION_JUMP_2_DOWN,
- MOVEMENT_ACTION_JUMP_2_UP,
- MOVEMENT_ACTION_JUMP_2_LEFT,
- MOVEMENT_ACTION_JUMP_2_RIGHT,
- MOVEMENT_ACTION_DELAY_1,
- MOVEMENT_ACTION_DELAY_2,
- MOVEMENT_ACTION_DELAY_4,
- MOVEMENT_ACTION_DELAY_8,
- MOVEMENT_ACTION_DELAY_16,
- MOVEMENT_ACTION_WALK_FAST_DOWN,
- MOVEMENT_ACTION_WALK_FAST_UP,
- MOVEMENT_ACTION_WALK_FAST_LEFT,
- MOVEMENT_ACTION_WALK_FAST_RIGHT,
- MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN,
- MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP,
- MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT,
- MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT,
- MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN,
- MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP,
- MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT,
- MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT,
- MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN,
- MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP,
- MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT,
- MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT,
- MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN,
- MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP,
- MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT,
- MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT,
- MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN,
- MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP,
- MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT,
- MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT,
- MOVEMENT_ACTION_WALK_FASTEST_DOWN,
- MOVEMENT_ACTION_WALK_FASTEST_UP,
- MOVEMENT_ACTION_WALK_FASTEST_LEFT,
- MOVEMENT_ACTION_WALK_FASTEST_RIGHT,
- MOVEMENT_ACTION_SLIDE_DOWN,
- MOVEMENT_ACTION_SLIDE_UP,
- MOVEMENT_ACTION_SLIDE_LEFT,
- MOVEMENT_ACTION_SLIDE_RIGHT,
- MOVEMENT_ACTION_PLAYER_RUN_DOWN,
- MOVEMENT_ACTION_PLAYER_RUN_UP,
- MOVEMENT_ACTION_PLAYER_RUN_LEFT,
- MOVEMENT_ACTION_PLAYER_RUN_RIGHT,
- MOVEMENT_ACTION_START_ANIM_IN_DIRECTION,
- MOVEMENT_ACTION_JUMP_SPECIAL_DOWN,
- MOVEMENT_ACTION_JUMP_SPECIAL_UP,
- MOVEMENT_ACTION_JUMP_SPECIAL_LEFT,
- MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT,
- MOVEMENT_ACTION_FACE_PLAYER,
- MOVEMENT_ACTION_FACE_AWAY_PLAYER,
- MOVEMENT_ACTION_LOCK_FACING_DIRECTION,
- MOVEMENT_ACTION_UNLOCK_FACING_DIRECTION,
- MOVEMENT_ACTION_JUMP_DOWN,
- MOVEMENT_ACTION_JUMP_UP,
- MOVEMENT_ACTION_JUMP_LEFT,
- MOVEMENT_ACTION_JUMP_RIGHT,
- MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN,
- MOVEMENT_ACTION_JUMP_IN_PLACE_UP,
- MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT,
- MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT,
- MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP,
- MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN,
- MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT,
- MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT,
- MOVEMENT_ACTION_FACE_ORIGINAL_DIRECTION,
- MOVEMENT_ACTION_NURSE_JOY_BOW_DOWN,
- MOVEMENT_ACTION_ENABLE_JUMP_LANDING_GROUND_EFFECT,
- MOVEMENT_ACTION_DISABLE_JUMP_LANDING_GROUND_EFFECT,
- MOVEMENT_ACTION_DISABLE_ANIMATION,
- MOVEMENT_ACTION_RESTORE_ANIMATION,
- MOVEMENT_ACTION_SET_INVISIBLE,
- MOVEMENT_ACTION_SET_VISIBLE,
- MOVEMENT_ACTION_EMOTE_EXCLAMATION_MARK,
- MOVEMENT_ACTION_EMOTE_QUESTION_MARK,
- MOVEMENT_ACTION_EMOTE_HEART,
- MOVEMENT_ACTION_REVEAL_TRAINER,
- MOVEMENT_ACTION_ROCK_SMASH_BREAK,
- MOVEMENT_ACTION_CUT_TREE,
- MOVEMENT_ACTION_SET_FIXED_PRIORITY,
- MOVEMENT_ACTION_CLEAR_FIXED_PRIORITY,
- MOVEMENT_ACTION_INIT_AFFINE_ANIM,
- MOVEMENT_ACTION_CLEAR_AFFINE_ANIM,
- MOVEMENT_ACTION_UNKNOWN1,
- MOVEMENT_ACTION_UNKNOWN2,
- MOVEMENT_ACTION_WALK_DOWN_START_AFFINE,
- MOVEMENT_ACTION_WALK_DOWN_AFFINE,
- MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN,
- MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP,
- MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT,
- MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT,
- MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN,
- MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP,
- MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT,
- MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT,
- MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN,
- MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP,
- MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT,
- MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT,
- MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN,
- MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP,
- MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT,
- MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT,
- MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN,
- MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP,
- MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT,
- MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT,
- MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN,
- MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP,
- MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT,
- MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT,
- MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN,
- MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP,
- MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT,
- MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT,
- MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN,
- MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP,
- MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT,
- MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT,
- MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN,
- MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP,
- MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT,
- MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT,
- MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN,
- MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP,
- MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT,
- MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT,
- MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_LEFT,
- MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_RIGHT,
- MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_LEFT,
- MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_RIGHT,
- MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_LEFT,
- MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT,
- MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT,
- MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT,
- MOVEMENT_ACTION_STORE_AND_LOCK_ANIM,
- MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM,
- MOVEMENT_ACTION_WALK_LEFT_AFFINE,
- MOVEMENT_ACTION_WALK_RIGHT_AFFINE,
- MOVEMENT_ACTION_LEVITATE,
- MOVEMENT_ACTION_STOP_LEVITATE,
- MOVEMENT_ACTION_DESTROY_EXTRA_TASK_IF_AT_TOP,
- MOVEMENT_ACTION_FIGURE_8,
- MOVEMENT_ACTION_FLY_UP,
- MOVEMENT_ACTION_FLY_DOWN,
-};
-
enum SpinnerRunnerFollowPatterns
{
RUNFOLLOW_ANY,
@@ -351,7 +104,7 @@ void TrySpawnEventObjects(s16, s16);
u8 sprite_new(u8, u8, s16, s16, u8, u8);
u8 AddPseudoEventObject(u16, void (*)(struct Sprite *), s16, s16, u8);
u8 show_sprite(u8, u8, u8);
-u8 SpawnSpecialEventObjectParametrized(u8, u8, u8, s16, s16, u8);
+u8 SpawnSpecialEventObjectParameterized(u8, u8, u8, s16, s16, u8);
u8 SpawnSpecialEventObject(struct EventObjectTemplate *);
void sub_8093038(s16, s16, s16 *, s16 *);
void CameraObjectReset1(void);
diff --git a/include/field_effect.h b/include/field_effect.h
index 800048605..9c9501bfa 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -78,8 +78,8 @@ enum FieldEffectScriptIdx
};
extern s32 gFieldEffectArguments[8];
-extern void (*gUnknown_0203CEEC)(void);
-extern bool8 (*gUnknown_03005DB0)(void);
+extern void (*gPostMenuFieldCallback)(void);
+extern bool8 (*gFieldCallback2)(void);
u32 FieldEffectStart(u8);
bool8 FieldEffectActiveListContains(u8 id);
diff --git a/include/fldeff_cut.h b/include/fldeff_cut.h
index f985fd82d..c89d3b6ca 100644
--- a/include/fldeff_cut.h
+++ b/include/fldeff_cut.h
@@ -1,7 +1,13 @@
#ifndef GUARD_FLDEFF_CUT_H
#define GUARD_FLDEFF_CUT_H
-void sub_80D423C(s16, s16);
-void sub_80D42B8(s16, s16);
+extern const struct SpritePalette gFieldEffectObjectPaletteInfo6;
+
+bool8 SetUpFieldMove_Cut(void);
+bool8 FldEff_UseCutOnGrass(void);
+bool8 FldEff_UseCutOnTree(void);
+bool8 FldEff_CutGrass(void);
+void sub_80D423C(s16 x, s16 y);
+void sub_80D42B8(s16 x, s16 y);
#endif // GUARD_FLDEFF_CUT_H
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index 03fe505b5..01d8c311e 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -545,6 +545,35 @@
#define BGCNT_AFF512x512 0x8000
#define BGCNT_AFF1024x1024 0xC000
+// WININ/OUT
+#define WININ_WIN0_BG0 (1 << 0)
+#define WININ_WIN0_BG1 (1 << 1)
+#define WININ_WIN0_BG2 (1 << 2)
+#define WININ_WIN0_BG3 (1 << 3)
+#define WININ_WIN0_OBJ (1 << 4)
+#define WININ_WIN0_CLR (1 << 5)
+#define WININ_WIN1_BG0 (1 << 8)
+#define WININ_WIN1_BG1 (1 << 9)
+#define WININ_WIN1_BG2 (1 << 10)
+#define WININ_WIN1_BG3 (1 << 11)
+#define WININ_WIN1_OBJ (1 << 12)
+#define WININ_WIN1_CLR (1 << 13)
+
+#define WINOUT_WIN01_BG0 (1 << 0)
+#define WINOUT_WIN01_BG1 (1 << 1)
+#define WINOUT_WIN01_BG2 (1 << 2)
+#define WINOUT_WIN01_BG3 (1 << 3)
+#define WINOUT_WIN01_OBJ (1 << 4)
+#define WINOUT_WIN01_CLR (1 << 5)
+#define WINOUT_WINOBJ_BG0 (1 << 8)
+#define WINOUT_WINOBJ_BG1 (1 << 9)
+#define WINOUT_WINOBJ_BG2 (1 << 10)
+#define WINOUT_WINOBJ_BG3 (1 << 11)
+#define WINOUT_WINOBJ_OBJ (1 << 12)
+#define WINOUT_WINOBJ_CLR (1 << 13)
+
+#define WINHV_COORDS(m, n) (((m) << 8) | (n))
+
// BLDCNT
// Bits 0-5 select layers for the 1st target
#define BLDCNT_TGT1_BG0 (1 << 0)
@@ -553,6 +582,7 @@
#define BLDCNT_TGT1_BG3 (1 << 3)
#define BLDCNT_TGT1_OBJ (1 << 4)
#define BLDCNT_TGT1_BD (1 << 5)
+#define BLDCNT_TGT1_ALL (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD)
// Bits 6-7 select the special effect
#define BLDCNT_EFFECT_NONE (0 << 6) // no special effect
#define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA)
@@ -565,6 +595,7 @@
#define BLDCNT_TGT2_BG3 (1 << 11)
#define BLDCNT_TGT2_OBJ (1 << 12)
#define BLDCNT_TGT2_BD (1 << 13)
+#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD)
// BLDALPHA
#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1))
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 5b2944a2b..4bec8e0c7 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -13,35 +13,6 @@ enum
CONNECTION_EMERGE
};
-// map types
-enum
-{
- MAP_TYPE_0,
- MAP_TYPE_TOWN,
- MAP_TYPE_CITY,
- MAP_TYPE_ROUTE,
- MAP_TYPE_UNDERGROUND,
- MAP_TYPE_UNDERWATER,
- MAP_TYPE_6,
- MAP_TYPE_7,
- MAP_TYPE_INDOOR,
- MAP_TYPE_SECRET_BASE
-};
-
-// map battle scenes
-enum
-{
- MAP_BATTLE_SCENE_NORMAL, // 0
- MAP_BATTLE_SCENE_GYM, // 1
- MAP_BATTLE_SCENE_MAGMA, // 2
- MAP_BATTLE_SCENE_AQUA, // 3
- MAP_BATTLE_SCENE_SIDNEY, // 4
- MAP_BATTLE_SCENE_PHOEBE, // 5
- MAP_BATTLE_SCENE_GLACIA, // 6
- MAP_BATTLE_SCENE_DRAKE, // 7
- MAP_BATTLE_SCENE_FRONTIER, // 8
-};
-
typedef void (*TilesetCB)(void);
struct Tileset
diff --git a/include/global.h b/include/global.h
index 49d0370f1..7153ef260 100644
--- a/include/global.h
+++ b/include/global.h
@@ -35,12 +35,18 @@
// Converts a number to Q4.12 fixed-point format
#define Q_4_12(n) ((s16)((n) * 4096))
+// Converts a number to Q24.8 fixed-point format
+#define Q_24_8(n) ((s32)((n) * 256))
+
// Converts a Q8.8 fixed-point format number to a regular integer
#define Q_8_8_TO_INT(n) ((int)((n) / 256))
// Converts a Q4.12 fixed-point format number to a regular integer
#define Q_4_12_TO_INT(n) ((int)((n) / 4096))
+// Converts a Q24.8 fixed-point format number to a regular integer
+#define Q_24_8_TO_INT(n) ((int)((n) >> 8))
+
#define PARTY_SIZE 6
#define POKEMON_SLOTS_NUMBER 412
@@ -867,7 +873,7 @@ struct MapPosition
{
s16 x;
s16 y;
- u8 height;
+ s8 height;
};
struct UnkStruct_8054FF8
diff --git a/include/link.h b/include/link.h
index 5b3cd26ca..afc5008e6 100644
--- a/include/link.h
+++ b/include/link.h
@@ -201,7 +201,7 @@ extern u32 gLinkStatus;
void c2_mystery_gift(void);
void sub_801867C(void);
-bool8 sub_80093CC(void);
+bool8 IsWirelessAdapterConnected(void);
void Task_DestroySelf(u8 taskId);
void OpenLink(void);
void CloseLink(void);
diff --git a/include/list_menu.h b/include/list_menu.h
index d8b526b61..d38980213 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -3,11 +3,19 @@
#define LIST_NOTHING_CHOSEN -1
#define LIST_B_PRESSED -2
+#define LIST_HEADER -3
#define LIST_NO_MULTIPLE_SCROLL 0
#define LIST_MULTIPLE_SCROLL_DPAD 1
#define LIST_MULTIPLE_SCROLL_L_R 2
+enum {
+ SCROLL_ARROW_LEFT,
+ SCROLL_ARROW_RIGHT,
+ SCROLL_ARROW_UP,
+ SCROLL_ARROW_DOWN
+};
+
struct ListMenu;
struct ListMenuItem
@@ -19,20 +27,20 @@ struct ListMenuItem
struct ListMenuTemplate
{
const struct ListMenuItem *items;
- void (* moveCursorFunc)(s32, bool8, struct ListMenu *);
- void (* unk_08)(u8 windowId, s32 itemId, u8 y);
+ void (* moveCursorFunc)(s32 itemIndex, bool8 onInit, struct ListMenu *list);
+ void (* itemPrintFunc)(u8 windowId, s32 itemId, u8 y);
u16 totalItems;
u16 maxShowed;
u8 windowId;
- u8 unk_11;
- u8 unk_12;
+ u8 header_X;
+ u8 item_X;
u8 cursor_X;
u8 upText_Y:4; // x1, x2, x4, x8 = xF
u8 cursorPal:4; // x10, x20, x40, x80 = xF0
u8 fillValue:4; // x1, x2, x4, x8 = xF
u8 cursorShadowPal:4; // x10, x20, x40, x80 = xF0
u8 lettersSpacing:3;
- u8 unk_16_3:3;
+ u8 itemVerticalPadding:3;
u8 scrollMultiple:2; // x40, x80 = xC0
u8 fontId:6; // x1, x2, x4, x8, x10, x20 = x3F
u8 cursorKind:2; // x40, x80
@@ -45,11 +53,11 @@ struct ListMenu
u16 selectedRow;
u8 unk_1C;
u8 unk_1D;
- u8 unk_1E;
+ u8 taskId;
u8 unk_1F;
};
-struct UnknownListMenuWindowStruct
+struct ListMenuWindowRect
{
u8 x;
u8 y;
@@ -58,16 +66,16 @@ struct UnknownListMenuWindowStruct
u8 palNum;
};
-struct ArrowStruct
+struct ScrollArrowsTemplate
{
- u8 unk0;
- u8 unk1;
- u8 unk2;
- u8 unk3;
- u8 unk4;
- u8 unk5;
- u16 unk6;
- u16 unk8;
+ u8 firstArrowType;
+ u8 firstX;
+ u8 firstY;
+ u8 secondArrowType;
+ u8 secondX;
+ u8 secondY;
+ u16 fullyUpThreshold;
+ u16 fullyDownThreshold;
u16 tileTag;
u16 palTag;
u8 palNum;
@@ -75,36 +83,36 @@ struct ArrowStruct
struct CursorStruct
{
- u8 unk0;
- u8 unk1;
- u16 unk2;
- u16 unk4;
+ u8 left;
+ u8 top;
+ u16 rowWidth;
+ u16 rowHeight;
u16 tileTag;
u16 palTag;
u8 palNum;
};
-extern struct ArrowStruct gUnknown_0203CE8C;
+extern struct ScrollArrowsTemplate gTempScrollArrowTemplate;
extern struct ListMenuTemplate gMultiuseListMenuTemplate;
s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
-u8 ListMenuInitWithWindows(struct ListMenuTemplate *listMenuTemplate, struct UnknownListMenuWindowStruct *arg1, u16 scrollOffset, u16 selectedRow);
+u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *arg1, u16 scrollOffset, u16 selectedRow);
s32 ListMenuHandleInputGetItemId(u8 listTaskId);
void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow);
-void sub_81AE70C(u8 listTaskId);
+void RedrawListMenu(u8 listTaskId);
void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y);
s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow);
void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId);
void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow);
u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId);
-void sub_81AF028(u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
-void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list);
-s32 sub_81AF08C(u8 taskId, u8 field);
-void sub_81AF15C(u8 taskId, u8 field, s32 value);
-u8 AddScrollIndicatorArrowPair(const struct ArrowStruct *arrowInfo, u16 *arg1);
-u8 AddScrollIndicatorArrowPairParametrized(u32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 tileTag, s32 palTag, void *arg7);
+void ListMenuOverrideSetColors(u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
+void ListMenuDefaultCursorMoveFunc(s32 arg0, u8 arg1, struct ListMenu *list);
+s32 ListMenuGetUnkIndicatorsStructFields(u8 taskId, u8 field);
+void ListMenuSetUnkIndicatorsStructField(u8 taskId, u8 field, s32 value);
+u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16 *arg1);
+u8 AddScrollIndicatorArrowPairParameterized(u32 arrowType, s32 commonPos, s32 firstPos, s32 secondPos, s32 fullyDownThreshold, s32 tileTag, s32 palTag, u16 *currItemPtr);
void RemoveScrollIndicatorArrowPair(u8 taskId);
void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId);
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index 4b9fd2488..86a67ab3e 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -74,7 +74,7 @@ bool8 MetatileBehavior_IsPuddle(u8);
bool8 MetatileBehavior_IsTallGrass(u8);
bool8 MetatileBehavior_IsLongGrass(u8);
bool8 MetatileBehavior_IsBerryTreeSoil(u8);
-bool8 MetatileBehavior_IsAsh(u8);
+bool8 MetatileBehavior_IsAshGrass(u8);
bool8 MetatileBehavior_IsUnusedFootprintMetatile(u8);
bool8 MetatileBehavior_IsBridge(u8);
u8 MetatileBehavior_GetBridgeSth(u8);
diff --git a/include/palette.h b/include/palette.h
index a1259d327..d14fa1fcd 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -24,16 +24,16 @@ struct PaletteFadeControl
u16 y:5; // blend coefficient
u16 targetY:5; // target blend coefficient
u16 blendColor:15;
- u16 active:1;
+ bool16 active:1;
u16 multipurpose2:6;
- u16 yDec:1; // whether blend coefficient is decreasing
- u16 bufferTransferDisabled:1;
+ bool16 yDec:1; // whether blend coefficient is decreasing
+ bool16 bufferTransferDisabled:1;
u16 mode:2;
- u16 shouldResetBlendRegisters:1;
- u16 hardwareFadeFinishing:1;
+ bool16 shouldResetBlendRegisters:1;
+ bool16 hardwareFadeFinishing:1;
u16 softwareFadeFinishingCounter:5;
- u16 softwareFadeFinishing:1;
- u16 objPaletteToggle:1;
+ bool16 softwareFadeFinishing:1;
+ bool16 objPaletteToggle:1;
u8 deltaY:4; // rate of change of blend coefficient
};
diff --git a/include/party_menu.h b/include/party_menu.h
index c96eb0d9d..fd52f8d4d 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -1,6 +1,8 @@
#ifndef GUARD_PARTY_MENU_H
#define GUARD_PARTY_MENU_H
+
#include "task.h"
+
enum
{
AILMENT_NONE,
@@ -11,6 +13,16 @@ enum
AILMENT_BRN
};
+enum
+{
+ PARTY_CHOOSE_MON,
+ PARTY_MUST_CHOOSE_MON,
+ PARTY_CANT_SWITCH,
+ PARTY_USE_ITEM_ON,
+ PARTY_ABILITY_PREVENTS,
+ PARTY_GIVE_ITEM,
+};
+
struct Struct203CEC8
{
u8 filler[0x9];
@@ -28,7 +40,7 @@ void DoWallyTutorialBagMenu(void);
u8 pokemon_ailments_get_primary(u32 status);
u8 *GetMonNickname(struct Pokemon *mon, u8 *dst);
u8 GetCursorSelectionMonId(void);
-bool8 FieldCallback_Teleport(void);
+bool8 FieldCallback_PrepareFadeInFromMenu(void);
void sub_81B7F60(void);
void sub_81B0FCC(u8 partyIdx, u8 a);
@@ -38,5 +50,6 @@ void sub_81B1F18(u8 taskId, u8 pokemonIdx, s8 a, s16 hp, TaskFunc func);
void sub_81B1B5C(void *a, u8 b);
u8 sub_81B1BD4();
void sub_81B8448();
+void OpenPartyMenuInBattle(u8 caseId);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 37028821a..a60ad66be 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -438,7 +438,7 @@ extern u8 gPlayerPartyCount;
extern struct Pokemon gPlayerParty[PARTY_SIZE];
extern u8 gEnemyPartyCount;
extern struct Pokemon gEnemyParty[PARTY_SIZE];
-extern struct SpriteTemplate gUnknown_0202499C;
+extern struct SpriteTemplate gMultiuseSpriteTemplate;
extern struct PokemonStorage* gPokemonStoragePtr;
extern const struct BattleMove gBattleMoves[];
@@ -505,9 +505,9 @@ u8 GetDefaultMoveTarget(u8 battlerId);
u8 GetMonGender(struct Pokemon *mon);
u8 GetBoxMonGender(struct BoxPokemon *boxMon);
u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality);
-void sub_806A068(u16 species, u8 battlerPosition);
-void sub_806A12C(u16 trainerSpriteId, u8 battlerPosition);
-void sub_806A1C0(u16 arg0, u8 battlerPosition);
+void SetMultiuseSpriteTemplateToPokemon(u16 species, u8 battlerPosition);
+void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosition);
+void SetMultiuseSpriteTemplateToTrainerFront(u16 arg0, u8 battlerPosition);
// These are full type signatures for GetMonData() and GetBoxMonData(),
// but they are not used since some code erroneously omits the third arg.
@@ -556,7 +556,7 @@ void sub_806D544(u16 species, u32 personality, u8 *dest);
void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4);
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
bool8 sub_806D7EC(void);
-bool16 sub_806D82C(u8 id);
+bool16 GetLinkTrainerFlankId(u8 id);
s32 GetBattlerMultiplayerId(u16 a1);
u8 GetTrainerEncounterMusicId(u16 trainerOpponentId);
u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex);
@@ -593,7 +593,7 @@ bool8 IsTradedMon(struct Pokemon *mon);
bool8 IsOtherTrainer(u32 otId, u8 *otName);
void MonRestorePP(struct Pokemon *mon);
void BoxMonRestorePP(struct BoxPokemon *boxMon);
-void sub_806E994(void);
+void SetMonPreventsSwitchingString(void);
void SetWildMonHeldItem(void);
bool8 IsMonShiny(struct Pokemon *mon);
bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
diff --git a/include/recorded_battle.h b/include/recorded_battle.h
index 8b1fa258d..81c88a15e 100644
--- a/include/recorded_battle.h
+++ b/include/recorded_battle.h
@@ -16,7 +16,7 @@ void sub_81851A8(u8 *arg0);
bool32 CanCopyRecordedBattleSaveData(void);
u32 MoveRecordedBattleToSaveData(void);
void PlayRecordedBattle(void (*CB2_After)(void));
-u8 sub_8185EA0(void);
+u8 GetRecordedBattleFrontierFacility(void);
u8 sub_8185EAC(void);
void RecordedBattle_SaveParties(void);
u8 GetActiveBattlerLinkPlayerGender(void);
diff --git a/include/rom6.h b/include/rom6.h
index 058504fe2..96c3b3ca2 100644
--- a/include/rom6.h
+++ b/include/rom6.h
@@ -12,7 +12,7 @@ void UpdateFrontierManiac(u16 days);
void UpdateFrontierGambler(u16 days);
void SetShoalItemFlag(u16 days);
-bool8 npc_before_player_of_type(u8);
+bool8 CheckObjectGraphicsInFrontOfPlayer(u8);
u8 oei_task_add(void);
#endif //GUARD_ROM6_H
diff --git a/include/sprite.h b/include/sprite.h
index 4723b66e1..f972d09cc 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -2,6 +2,7 @@
#define GUARD_SPRITE_H
#define MAX_SPRITES 64
+#define SPRITE_INVALID_TAG 0xFFFF
struct SpriteSheet
{
@@ -186,29 +187,29 @@ struct Sprite
/*0x2A*/ u8 animNum;
/*0x2B*/ u8 animCmdIndex;
/*0x2C*/ u8 animDelayCounter:6;
- u8 animPaused:1;
- u8 affineAnimPaused:1;
+ bool8 animPaused:1;
+ bool8 affineAnimPaused:1;
/*0x2D*/ u8 animLoopCounter;
// general purpose data fields
/*0x2E*/ s16 data[8];
- /*0x3E*/ u16 inUse:1; //1
- u16 coordOffsetEnabled:1; //2
- u16 invisible:1; //4
- u16 flags_3:1; //8
- u16 flags_4:1; //0x10
- u16 flags_5:1; //0x20
- u16 flags_6:1; //0x40
- u16 flags_7:1; //0x80
- /*0x3F*/ u16 hFlip:1; //1
- u16 vFlip:1; //2
- u16 animBeginning:1; //4
- u16 affineAnimBeginning:1; //8
- u16 animEnded:1; //0x10
- u16 affineAnimEnded:1; //0x20
- u16 usingSheet:1; //0x40
- u16 flags_f:1; //0x80
+ /*0x3E*/ bool16 inUse:1; //1
+ bool16 coordOffsetEnabled:1; //2
+ bool16 invisible:1; //4
+ bool16 flags_3:1; //8
+ bool16 flags_4:1; //0x10
+ bool16 flags_5:1; //0x20
+ bool16 flags_6:1; //0x40
+ bool16 flags_7:1; //0x80
+ /*0x3F*/ bool16 hFlip:1; //1
+ bool16 vFlip:1; //2
+ bool16 animBeginning:1; //4
+ bool16 affineAnimBeginning:1; //8
+ bool16 animEnded:1; //0x10
+ bool16 affineAnimEnded:1; //0x20
+ bool16 usingSheet:1; //0x40
+ bool16 flags_f:1; //0x80
/*0x40*/ u16 sheetTileStart;
diff --git a/include/text.h b/include/text.h
index 2566b51b7..92def780c 100644
--- a/include/text.h
+++ b/include/text.h
@@ -2,7 +2,17 @@
#define GUARD_TEXT_H
#define CHAR_SPACE 0x00
+#define CHAR_PLUS 0x2E
#define CHAR_0 0xA1
+#define CHAR_1 0xA2
+#define CHAR_2 0xA3
+#define CHAR_3 0xA4
+#define CHAR_4 0xA5
+#define CHAR_5 0xA6
+#define CHAR_6 0xA7
+#define CHAR_7 0xA8
+#define CHAR_8 0xA9
+#define CHAR_9 0xAA
#define CHAR_QUESTION_MARK 0xAC
#define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE
@@ -98,6 +108,17 @@
#define TEXT_SPEED_FF 0xFF
+enum {
+ FONTATTR_MAX_LETTER_WIDTH,
+ FONTATTR_MAX_LETTER_HEIGHT,
+ FONTATTR_LETTER_SPACING,
+ FONTATTR_LINE_SPACING,
+ FONTATTR_COLOR_LOWNIBBLE, // dunno what this is yet
+ FONTATTR_COLOR_FOREGROUND,
+ FONTATTR_COLOR_BACKGROUND,
+ FONTATTR_COLOR_SHADOW
+};
+
struct TextPrinterSubStruct
{
u8 font_type:4; // 0x14
diff --git a/include/text_window.h b/include/text_window.h
index 2ac13fab7..53a6df2e9 100644
--- a/include/text_window.h
+++ b/include/text_window.h
@@ -12,11 +12,11 @@ struct TilesPal
extern const u8 gTextWindowFrame1_Gfx[];
extern const u16 gTextWindowFrame1_Pal[];
-const struct TilesPal* GetWindowFrameTilesPal(u8 id);
-void copy_textbox_border_tile_patterns_to_vram(u8 windowId, u16 destOffset, u8 palOffset);
-void sub_809882C(u8 windowId, u16 destOffset, u8 palOffset);
-void sub_80987D4(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset);
-void box_border_load_tiles_and_pal(u8 windowId, u16 destOffset, u8 palOffset);
+const struct TilesPal *GetWindowFrameTilesPal(u8 id);
+void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset);
+void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset);
+void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset);
+void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset);
void sub_8098858(u8 windowId, u16 tileNum, u8 palNum);
void sub_80989E0(u8 windowId, u16 tileNum, u8 palNum);
void rbox_fill_rectangle(u8 windowId);