summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h248
-rw-r--r--include/battle_anim.h11
-rw-r--r--include/battle_bg.h9
-rw-r--r--include/battle_controllers.h8
-rw-r--r--include/battle_main.h75
-rw-r--r--include/battle_message.h8
-rw-r--r--include/battle_script_commands.h7
-rw-r--r--include/battle_scripts.h8
-rw-r--r--include/battle_setup.h40
-rw-r--r--include/berry.h2
-rw-r--r--include/constants/abilities.h2
-rw-r--r--include/constants/battle.h69
-rw-r--r--include/constants/battle_setup.h15
-rw-r--r--include/constants/map_types.h15
-rw-r--r--include/constants/trainers.h2
-rw-r--r--include/data.h3
-rw-r--r--include/event_scripts.h9
-rw-r--r--include/evolution_scene.h4
-rw-r--r--include/field_control_avatar.h3
-rw-r--r--include/field_map_obj.h3
-rw-r--r--include/field_player_avatar.h4
-rw-r--r--include/global.fieldmap.h31
-rw-r--r--include/global.h7
-rw-r--r--include/item.h1
-rw-r--r--include/item_menu.h1
-rw-r--r--include/link_rfu.h2
-rw-r--r--include/map_obj_80688E4.h2
-rw-r--r--include/metatile_behavior.h12
-rw-r--r--include/overworld.h3
-rw-r--r--include/party_menu.h2
-rw-r--r--include/pokemon.h33
-rw-r--r--include/quest_log.h4
-rw-r--r--include/quest_log_battle.h9
-rw-r--r--include/safari_zone.h2
-rw-r--r--include/script_pokemon_util_80A0058.h1
-rw-r--r--include/strings.h12
-rw-r--r--include/vs_seeker.h3
37 files changed, 262 insertions, 408 deletions
diff --git a/include/battle.h b/include/battle.h
index 7c1528072..40a2eba04 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -18,14 +18,6 @@
0x2 bit is responsible for the id of sent out pokemon. 0 means it's the first sent out pokemon, 1 it's the second one. (Triple battle didn't exist at the time yet.)
*/
-#define IDENTITY_PLAYER_MON1 0
-#define IDENTITY_OPPONENT_MON1 1
-#define IDENTITY_PLAYER_MON2 2
-#define IDENTITY_OPPONENT_MON2 3
-
-#define SIDE_PLAYER 0x0
-#define SIDE_OPPONENT 0x1
-
#define GET_BATTLER_POSITION(battler)((gBattlerPositions[battler]))
#define GET_BATTLER_SIDE(battler)((GetBattlerPosition(battler) & BIT_SIDE))
#define GET_BATTLER_SIDE2(battler)((GET_BATTLER_POSITION(battler) & BIT_SIDE))
@@ -36,40 +28,6 @@
#define STEVEN_PARTNER_ID 0xC03
#define SECRET_BASE_OPPONENT 0x400
-#define BATTLE_WON 0x1
-#define BATTLE_LOST 0x2
-#define BATTLE_DREW 0x3
-#define BATTLE_RAN 0x4
-#define BATTLE_PLAYER_TELEPORTED 0x5
-#define BATTLE_POKE_FLED 0x6
-#define BATTLE_CAUGHT 0x7
-#define BATTLE_SAFARI_OUT_OF_BALLS 0x8
-#define BATTLE_FORFEITED 0x9
-#define BATTLE_OPPONENT_TELEPORTED 0xA
-
-#define OUTCOME_LINK_BATTLE_RUN 0x80
-
-#define STATUS_NONE 0x0
-#define STATUS_SLEEP 0x7
-#define STATUS_POISON 0x8
-#define STATUS_BURN 0x10
-#define STATUS_FREEZE 0x20
-#define STATUS_PARALYSIS 0x40
-#define STATUS_TOXIC_POISON 0x80
-#define STATUS_TOXIC_COUNTER 0xF00
-
-#define STATUS_PSN_ANY ((STATUS_POISON | STATUS_TOXIC_POISON))
-#define STATUS_ANY ((STATUS_SLEEP | STATUS_POISON | STATUS_BURN | STATUS_FREEZE | STATUS_PARALYSIS | STATUS_TOXIC_POISON))
-
-#define SIDE_STATUS_REFLECT (1 << 0)
-#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
-#define SIDE_STATUS_X4 (1 << 2)
-#define SIDE_STATUS_SPIKES (1 << 4)
-#define SIDE_STATUS_SAFEGUARD (1 << 5)
-#define SIDE_STATUS_FUTUREATTACK (1 << 6)
-#define SIDE_STATUS_MIST (1 << 8)
-#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
-
#define B_ACTION_USE_MOVE 0
#define B_ACTION_USE_ITEM 1
#define B_ACTION_SWITCH 2
@@ -79,7 +37,7 @@
#define B_ACTION_SAFARI_POKEBLOCK 6
#define B_ACTION_SAFARI_GO_NEAR 7
#define B_ACTION_SAFARI_RUN 8
-#define B_ACTION_9 9
+#define B_ACTION_OLDMAN_THROW 9
#define B_ACTION_EXEC_SCRIPT 10
#define B_ACTION_TRY_FINISH 11
#define B_ACTION_FINISHED 12
@@ -87,31 +45,9 @@
#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
#define B_ACTION_NONE 0xFF
-#define MOVESTATUS_MISSED (1 << 0)
-#define MOVESTATUS_SUPEREFFECTIVE (1 << 1)
-#define MOVESTATUS_NOTVERYEFFECTIVE (1 << 2)
-#define MOVESTATUS_NOTAFFECTED (1 << 3)
-#define MOVESTATUS_ONEHITKO (1 << 4)
-#define MOVESTATUS_FAILED (1 << 5)
-#define MOVESTATUS_ENDURED (1 << 6)
-#define MOVESTATUS_HUNGON (1 << 7)
-
-#define MOVESTATUS_NOEFFECT ((MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED))
-
#define MAX_TRAINER_ITEMS 4
#define MAX_MON_MOVES 4
-#define BATTLE_TERRAIN_GRASS 0
-#define BATTLE_TERRAIN_LONG_GRASS 1
-#define BATTLE_TERRAIN_SAND 2
-#define BATTLE_TERRAIN_UNDERWATER 3
-#define BATTLE_TERRAIN_WATER 4
-#define BATTLE_TERRAIN_POND 5
-#define BATTLE_TERRAIN_ROCK 6
-#define BATTLE_TERRAIN_CAVE 7
-#define BATTLE_TERRAIN_INSIDE 8
-#define BATTLE_TERRAIN_PLAIN 9
-
// array entries for battle communication
#define MULTIUSE_STATE 0x0
#define CURSOR_POSITION 0x1
@@ -133,29 +69,6 @@
#define MOVE_TARGET_FOES_AND_ALLY 0x20
#define MOVE_TARGET_OPPONENTS_FIELD 0x40
-// defines for the u8 array gTypeEffectiveness
-#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
-#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
-#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
-
-// defines for the gTypeEffectiveness multipliers
-#define TYPE_MUL_NO_EFFECT 0
-#define TYPE_MUL_NOT_EFFECTIVE 5
-#define TYPE_MUL_NORMAL 10
-#define TYPE_MUL_SUPER_EFFECTIVE 20
-
-// special type table Ids
-#define TYPE_FORESIGHT 0xFE
-#define TYPE_ENDTABLE 0xFF
-
-// for battle script commands
-#define CMP_EQUAL 0x0
-#define CMP_NOT_EQUAL 0x1
-#define CMP_GREATER_THAN 0x2
-#define CMP_LESS_THAN 0x3
-#define CMP_COMMON_BITS 0x4
-#define CMP_NO_COMMON_BITS 0x5
-
struct TrainerMonNoItemDefaultMoves
{
u16 iv;
@@ -210,13 +123,8 @@ struct Trainer
/*0x24*/ const union TrainerMonPtr party;
};
-#define PARTY_FLAG_CUSTOM_MOVES 0x1
-#define PARTY_FLAG_HAS_ITEM 0x2
-
extern const struct Trainer gTrainers[];
-#define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F))
-
struct ResourceFlags
{
u32 flags[4];
@@ -373,22 +281,6 @@ extern u8 gActiveBattler;
extern u8 gBattlerTarget;
extern u8 gAbsentBattlerFlags;
-// script's table id to bit
-#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
-#define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
-#define AI_SCRIPT_CHECK_VIABILITY (1 << 2)
-#define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3)
-#define AI_SCRIPT_RISKY (1 << 4)
-#define AI_SCRIPT_PREFER_STRONGEST_MOVE (1 << 5)
-#define AI_SCRIPT_PREFER_BATON_PASS (1 << 6)
-#define AI_SCRIPT_DOUBLE_BATTLE (1 << 7)
-#define AI_SCRIPT_HP_AWARE (1 << 8)
-#define AI_SCRIPT_UNKNOWN (1 << 9)
-// 10 - 28 are not used
-#define AI_SCRIPT_ROAMING (1 << 29)
-#define AI_SCRIPT_SAFARI (1 << 30)
-#define AI_SCRIPT_FIRST_BATTLE (1 << 31)
-
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
struct UsedMoves
@@ -437,10 +329,6 @@ struct BattleResources
extern struct BattleResources *gBattleResources;
-#define BATTLESCRIPTS_STACK (gBattleResources->battleScriptsStack)
-#define BATTLE_CALLBACKS_STACK (gBattleResources->battleCallbackStack)
-#define BATTLE_LVLUP_STATS (gBattleResources->statsBeforeLvlUp)
-
struct BattleResults
{
u8 playerFaintCounter; // 0x0
@@ -521,22 +409,20 @@ struct BattleStruct
u8 expGetterBattlerId;
u8 field_90;
u8 field_91;
- u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
+ u8 AI_monToSwitchIntoId[2];
+ u8 field_94;
+ u8 field_95;
u8 field_96;
u8 field_97;
u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // ask gamefreak why they declared it that way
u16 hpOnSwitchout[2];
u8 abilityPreventingSwitchout;
u8 hpScale;
- u8 field_AE;
- u8 field_AF;
- u8 field_B0;
- u8 field_B1;
- u8 field_B2;
- u8 field_B3;
+ u16 savedBattleTypeFlags;
+ void (*savedCallback)(void);
u8 synchronizeMoveEffect;
- u8 field_B5;
- u8 field_B6;
+ u8 multiplayerId;
+ u8 overworldWeatherDone;
u8 atkCancellerTracker;
u16 usedHeldItems[MAX_BATTLERS_COUNT];
u8 chosenItem[4]; // why is this an u8?
@@ -556,7 +442,12 @@ struct BattleStruct
u8 wishPerishSongBattlerId;
u8 field_182;
u8 field_183;
- u8 field_184[124]; // currently unknown
+ u8 field_184;
+ u8 field_185;
+ u8 field_186;
+ u8 field_187;
+ struct BattleEnigmaBerry battleEnigmaBerry;
+ u8 field_1A4[0x5C]; // currently unknown
}; // size == 0x200 bytes
extern struct BattleStruct *gBattleStruct;
@@ -579,72 +470,6 @@ extern struct BattleStruct *gBattleStruct;
gBattleMons[battlerId].type2 = type; \
}
-#define MOVE_EFFECT_SLEEP 0x1
-#define MOVE_EFFECT_POISON 0x2
-#define MOVE_EFFECT_BURN 0x3
-#define MOVE_EFFECT_FREEZE 0x4
-#define MOVE_EFFECT_PARALYSIS 0x5
-#define MOVE_EFFECT_TOXIC 0x6
-#define MOVE_EFFECT_CONFUSION 0x7
-#define MOVE_EFFECT_FLINCH 0x8
-#define MOVE_EFFECT_TRI_ATTACK 0x9
-#define MOVE_EFFECT_UPROAR 0xA
-#define MOVE_EFFECT_PAYDAY 0xB
-#define MOVE_EFFECT_CHARGING 0xC
-#define MOVE_EFFECT_WRAP 0xD
-#define MOVE_EFFECT_RECOIL_25 0xE
-#define MOVE_EFFECT_ATK_PLUS_1 0xF
-#define MOVE_EFFECT_DEF_PLUS_1 0x10
-#define MOVE_EFFECT_SPD_PLUS_1 0x11
-#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
-#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
-#define MOVE_EFFECT_ACC_PLUS_1 0x14
-#define MOVE_EFFECT_EVS_PLUS_1 0x15
-#define MOVE_EFFECT_ATK_MINUS_1 0x16
-#define MOVE_EFFECT_DEF_MINUS_1 0x17
-#define MOVE_EFFECT_SPD_MINUS_1 0x18
-#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
-#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
-#define MOVE_EFFECT_ACC_MINUS_1 0x1B
-#define MOVE_EFFECT_EVS_MINUS_1 0x1C
-#define MOVE_EFFECT_RECHARGE 0x1D
-#define MOVE_EFFECT_RAGE 0x1E
-#define MOVE_EFFECT_STEAL_ITEM 0x1F
-#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
-#define MOVE_EFFECT_NIGHTMARE 0x21
-#define MOVE_EFFECT_ALL_STATS_UP 0x22
-#define MOVE_EFFECT_RAPIDSPIN 0x23
-#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
-#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
-#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
-#define MOVE_EFFECT_ATK_PLUS_2 0x27
-#define MOVE_EFFECT_DEF_PLUS_2 0x28
-#define MOVE_EFFECT_SPD_PLUS_2 0x29
-#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
-#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
-#define MOVE_EFFECT_ACC_PLUS_2 0x2C
-#define MOVE_EFFECT_EVS_PLUS_2 0x2D
-#define MOVE_EFFECT_ATK_MINUS_2 0x2E
-#define MOVE_EFFECT_DEF_MINUS_2 0x2F
-#define MOVE_EFFECT_SPD_MINUS_2 0x30
-#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
-#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
-#define MOVE_EFFECT_ACC_MINUS_2 0x33
-#define MOVE_EFFECT_EVS_MINUS_2 0x34
-#define MOVE_EFFECT_THRASH 0x35
-#define MOVE_EFFECT_KNOCK_OFF 0x36
-#define MOVE_EFFECT_NOTHING_37 0x37
-#define MOVE_EFFECT_NOTHING_38 0x38
-#define MOVE_EFFECT_NOTHING_39 0x39
-#define MOVE_EFFECT_NOTHING_3A 0x3A
-#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
-#define MOVE_EFFECT_NOTHING_3C 0x3C
-#define MOVE_EFFECT_NOTHING_3D 0x3D
-#define MOVE_EFFECT_NOTHING_3E 0x3E
-#define MOVE_EFFECT_NOTHING_3F 0x3F
-#define MOVE_EFFECT_AFFECTS_USER 0x40
-#define MOVE_EFFECT_CERTAIN 0x80
-
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0))
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
@@ -654,32 +479,6 @@ extern struct BattleStruct *gBattleStruct;
#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7))
-// used in many battle files, it seems as though Hisashi Sogabe wrote
-// some sort of macro to replace the use of actually calling memset.
-// Perhaps it was thought calling memset was much slower?
-
-// The compiler wont allow us to locally declare ptr in this macro; some
-// functions that invoke this macro will not match without this egregeous
-// assumption about the variable names, so in order to avoid this assumption,
-// we opt to pass the variables themselves, even though it is likely that
-// Sogabe assumed the variables were named src and dest. Trust me: I tried to
-// avoid assuming variable names, but the ROM just will not match without the
-// assumptions. Therefore, these macros are bad practice, but I'm putting them
-// here anyway.
-#define MEMSET_ALT(data, c, size, var, dest) \
-{ \
- dest = (u8 *)data; \
- for(var = 0; var < (u32)size; var++) \
- dest[var] = c; \
-} \
-
-#define MEMCPY_ALT(data, dest, size, var, src) \
-{ \
- src = (u8 *)data; \
- for(var = 0; var < (u32)size; var++) \
- dest[var] = src[var]; \
-} \
-
struct BattleScripting
{
s32 painSplitHp;
@@ -708,17 +507,6 @@ struct BattleScripting
u8 field_23;
};
-// functions
-
-// battle_1
-void LoadBattleTextboxAndBackground(void);
-void LoadBattleEntryBackground(void);
-void ApplyPlayerChosenFrameToBattleMenu(void);
-bool8 LoadChosenBattleElement(u8 caseId);
-void DrawMainBattleBackground(void);
-void task00_0800F6FC(u8 taskId);
-void sub_800F324(void);
-
enum
{
BACK_PIC_BRENDAN,
@@ -731,11 +519,6 @@ enum
BACK_PIC_STEVEN
};
-// rom_80A5C6C
-u8 GetBattlerSide(u8 bank);
-u8 GetBattlerPosition(u8 bank);
-u8 GetBattlerAtPosition(u8 bank);
-
struct BattleSpriteInfo
{
u16 invisible : 1; // 0x1
@@ -929,5 +712,8 @@ extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
extern u8 gBattleTerrain;
+extern struct UnknownPokemonStruct4 gUnknown_2022B58[3];
+extern u16 *gUnknown_2022BC0;
+extern u16 gRandomTurnNumber;
#endif // GUARD_BATTLE_H
diff --git a/include/battle_anim.h b/include/battle_anim.h
index feaa8816b..9db123f91 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -2,8 +2,9 @@
#define GUARD_BATTLE_ANIM_H
#include "battle.h"
-#include "constants/battle_anim.h"
+#include "data.h"
#include "task.h"
+#include "constants/battle_anim.h"
enum
{
@@ -166,8 +167,12 @@ void LaunchStatusAnimation(u8 bank, u8 statusAnimId);
u8 ItemIdToBallId(u16 itemId);
u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
+void sub_80EEFC8(u8 *, u8 *, u8 battlerId);
+void sub_80EF0E0(u8 batterId);
// battle_anim_mons.c
+extern const struct MonCoords gCastformFrontSpriteCoords[];
+
u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType);
u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType);
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
@@ -237,9 +242,9 @@ void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor);
u32 sub_8075BE8(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7);
u32 sub_8075CB8(u8 a1, u8 a2, u8 a3, u8 a4);
u8 sub_8075D80(u8 a1);
-void sub_8075D9C(struct Sprite *sprite);
+void AnimSpriteOnMonPos(struct Sprite *sprite);
void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
-void sub_8075E80(struct Sprite *sprite);
+void AnimThrowProjectile(struct Sprite *sprite);
void sub_8075F0C(struct Sprite *sprite);
s16 CloneBattlerSpriteWithBlend(u8 animBattler);
void obj_delete_but_dont_free_vram(struct Sprite *sprite);
diff --git a/include/battle_bg.h b/include/battle_bg.h
index 6bf90a104..29571b410 100644
--- a/include/battle_bg.h
+++ b/include/battle_bg.h
@@ -1,6 +1,15 @@
#ifndef GUARD_BATTLE_BG_H
#define GUARD_BATTLE_BG_H
+#include "bg.h"
+
+extern const struct BgTemplate gBattleBgTemplates[];
+
void sub_800F34C(void);
+void DrawBattleEntryBackground(void);
+void sub_800F6FC(u8 taskId);
+void LoadBattleMenuWindowGfx(void);
+void LoadBattleTextboxAndBackground(void);
+void sub_800F324(void);
#endif // GUARD_BATTLE_BG_H
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 6da4ca240..96f57c78a 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -260,16 +260,18 @@ void SetControllerToPlayerPartner(void);
void SetControllerToSafari(void);
// pokedude controller
-void SetControllerToPokedude(void);
+void SetControllerToPokeDude(void);
-// oak controller
-void SetControllerToOakOrOldman(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);
// link opponent
void SetControllerToLinkOpponent(void);
diff --git a/include/battle_main.h b/include/battle_main.h
index 757ee3468..613171da9 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -1,6 +1,8 @@
#ifndef GUARD_BATTLE_MAIN_H
#define GUARD_BATTLE_MAIN_H
+#include "constants/abilities.h"
+
struct TrainerMoney
{
u8 classId;
@@ -43,61 +45,54 @@ 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 u8 gTypeNames[][TYPE_NAME_LENGTH + 1];
+extern const u8 gStatusConditionString_PoisonJpn[8];
+extern const u8 gStatusConditionString_SleepJpn[8];
+extern const u8 gStatusConditionString_ParalysisJpn[8];
+extern const u8 gStatusConditionString_BurnJpn[8];
+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 gTypeEffectiveness[336];
+extern const struct TrainerMoney gTrainerMoneyTable[];
+extern const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT];
+extern const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1];
+
void CB2_InitBattle(void);
void BattleMainCB2(void);
-void CB2_QuitRecordedBattle(void);
-void sub_8038528(struct Sprite* sprite);
-void sub_8038A04(void); // unused
+void FreeRestoreBattleData(void);
void VBlankCB_Battle(void);
+void nullsub_9(struct Sprite *sprite);
void sub_801182C(struct Sprite *sprite);
void sub_8011A1C(void);
-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 sub_8012098(struct Sprite *sprite);
+u32 sub_8011C44(u8 arrayId, u8 caseId);
+void SpriteCB_WildMon(struct Sprite *sprite);
+void SpriteCallbackDummy2(struct Sprite *sprite);
+void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
void sub_8012044(struct Sprite *sprite);
-void sub_8039B58(struct Sprite *sprite);
-void sub_8039BB4(struct Sprite *sprite);
-void sub_80105DC(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 DoBounceEffect(u8 bank, u8 b, s8 c, s8 d);
-void EndBounceEffect(u8 bank, bool8 b);
-void sub_8039E44(struct Sprite *sprite);
-void sub_8039E60(struct Sprite *sprite);
-void sub_8039E84(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 BeginBattleIntro(void);
void SwitchInClearSetData(void);
void FaintClearSetData(void);
-void sub_803B3AC(void); // unused
-void sub_803B598(void); // unused
void BattleTurnPassed(void);
u8 IsRunningFromBattleImpossible(void);
-void sub_8013F6C(u8 battlerId);
+void sub_8013F6C(u8 battler);
void SwapTurnOrder(u8 id1, u8 id2);
-u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves);
+u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves);
void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
-bool8 TryRunFromBattle(u8 bank);
-void sub_800FD9C(void);
-void sub_80120C4(struct Sprite *);
-void sub_8012100(struct Sprite *);
-void nullsub_12(void);
-void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
-
-extern const u8 gStatusConditionString_PoisonJpn[8];
-extern const u8 gStatusConditionString_SleepJpn[8];
-extern const u8 gStatusConditionString_ParalysisJpn[8];
-extern const u8 gStatusConditionString_BurnJpn[8];
-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 gTypeEffectiveness[336];
-extern const struct TrainerMoney gTrainerMoneyTable[];
+bool8 TryRunFromBattle(u8 battler);
#endif // GUARD_BATTLE_MAIN_H
diff --git a/include/battle_message.h b/include/battle_message.h
index ffc9d5bb7..130dc7ce9 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -238,4 +238,12 @@ extern const u8* const gStatNamesTable2[];
extern const u16 gMissStringIds[];
extern const u16 gTrappingMoves[];
+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[];
+
#endif // GUARD_BATTLE_MESSAGE_H
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index 3f2699064..983d9fce6 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -7,13 +7,6 @@
#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
#define ACC_CURR_MOVE 0
-#define CMP_EQUAL 0x0
-#define CMP_NOT_EQUAL 0x1
-#define CMP_GREATER_THAN 0x2
-#define CMP_LESS_THAN 0x3
-#define CMP_COMMON_BITS 0x4
-#define CMP_NO_COMMON_BITS 0x5
-
#define ATK48_STAT_NEGATIVE 0x1
#define ATK48_STAT_BY_TWO 0x2
#define ATK48_BIT_x4 0x4
diff --git a/include/battle_scripts.h b/include/battle_scripts.h
index a13a8c097..184527587 100644
--- a/include/battle_scripts.h
+++ b/include/battle_scripts.h
@@ -227,5 +227,13 @@ extern const u8 BattleScript_FlushMessageBox[];
extern const u8 BattleScript_SpikesOnFaintedBattler[];
extern const u8 BattleScript_GhostBallDodge[];
extern const u8 gUnknown_81D9A88[];
+extern const u8 gUnknown_81D91A1[]; // knizz: silph scope unveil
+extern const u8 gUnknown_81D88D7[];
+
+extern const u8 *const gBattleScriptsForMoveEffects[];
+extern const u8 *const gBattlescriptsForBallThrow[];
+extern const u8 *const gBattlescriptsForRunningByItem[];
+extern const u8 *const gBattlescriptsForUsingItem[];
+extern const u8 *const gBattlescriptsForSafariActions[];
#endif // GUARD_BATTLE_SCRIPTS_H
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 61395811b..809806e9b 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -3,20 +3,36 @@
#include "global.h"
-void BattleSetup_StartScriptedWildBattle(void);
-u8 BattleSetup_GetTerrainId(void);
-u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data);
-void BattleSetup_StartBattlePikeWildBattle(void);
void BattleSetup_StartWildBattle(void);
void BattleSetup_StartRoamerBattle(void);
-
-u8 HasTrainerAlreadyBeenFought(u16);
-void SetTrainerFlag(u16);
-void ClearTrainerFlag(u16);
-void BattleSetup_StartTrainerBattle(void);
-u8 *BattleSetup_GetScriptAddrAfterBattle(void);
-u8 *BattleSetup_GetTrainerPostBattleScript(void);
-void sub_80803FC(void);
+void ScrSpecial_StartOldManTutorialBattle(void);
+void BattleSetup_StartScriptedWildBattle(void);
+void ScrSpecial_StartMarowakBattle(void);
+void ScrSpecial_StartSouthernIslandBattle(void);
+void Special_StartLegendaryBattle(void);
+void Special_StartGroudonKyogreBattle(void);
+void Special_StartRegiBattle(void);
+u8 BattleSetup_GetTerrainId(void);
u8 sub_8080060(void);
+const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data);
+void ConfigureAndSetUpOneTrainerBattle(u8 trainerEventObjId, const u8 *trainerScript);
+bool32 GetTrainerFlagFromScriptPointer(const u8 *data);
+void SetUpTrainerMovement(void);
+u8 ScrSpecial_GetTrainerBattleMode(void);
+u16 sub_80803D8(void);
+u16 ScrSpecial_HasTrainerBeenFought(void);
+void SetBattledTrainerFlag(void);
+bool8 HasTrainerBeenFought(u16 trainerId);
+void SetTrainerFlag(u16 trainerId);
+void ClearTrainerFlag(u16 trainerId);
+void BattleSetup_StartTrainerBattle(void);
+void ScrSpecial_StartTrainerEyeRematch(void);
+void ScrSpecial_ShowTrainerIntroSpeech(void);
+const u8 *BattleSetup_GetScriptAddrAfterBattle(void);
+const u8 *BattleSetup_GetTrainerPostBattleScript(void);
+void ScrSpecial_ShowTrainerNonBattlingSpeech(void);
+void PlayTrainerEncounterMusic(void);
+const u8 *GetTrainerALoseText(void);
+const u8 *GetTrainerWonSpeech(void);
#endif // GUARD_BATTLE_SETUP_H
diff --git a/include/berry.h b/include/berry.h
index 0e554a789..d55192301 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -63,7 +63,7 @@ void FieldObjectInteractionRemoveBerryTree(void);
u8 PlayerHasBerries(void);
void ResetBerryTreeSparkleFlags(void);
void sub_809C794(void);
-const struct Berry * sub_809C8A0(u8 berryIdx);
+const struct Berry * GetBerryInfo(u8 berryIdx);
extern const struct Berry gBerries[];
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 a0099d23f..910b50562 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -44,38 +44,38 @@
#define BIT_FLANK 2
// Battle Type Flags
-#define BATTLE_TYPE_DOUBLE 0x0001
-#define BATTLE_TYPE_LINK 0x0002
-#define BATTLE_TYPE_IS_MASTER 0x0004 // In not-link battles, it's always set.
-#define BATTLE_TYPE_TRAINER 0x0008
-#define BATTLE_TYPE_FIRST_BATTLE 0x0010
-#define BATTLE_TYPE_20 0x0020
-#define BATTLE_TYPE_MULTI 0x0040
-#define BATTLE_TYPE_SAFARI 0x0080
-#define BATTLE_TYPE_BATTLE_TOWER 0x0100
-#define BATTLE_TYPE_OLDMAN_TUTORIAL 0x0200
-#define BATTLE_TYPE_ROAMER 0x0400
-#define BATTLE_TYPE_EREADER_TRAINER 0x0800
-#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
-#define BATTLE_TYPE_LEGENDARY 0x2000
-#define BATTLE_TYPE_REGI 0x4000
-#define BATTLE_TYPE_GHOST 0x8000
-#define BATTLE_TYPE_POKEDUDE 0x10000
-#define BATTLE_TYPE_PALACE 0x20000
-#define BATTLE_TYPE_ARENA 0x40000
-#define BATTLE_TYPE_TRAINER_TOWER 0x80000
-#define BATTLE_TYPE_PIKE 0x100000
-#define BATTLE_TYPE_PYRAMID 0x200000
-#define BATTLE_TYPE_INGAME_PARTNER 0x400000
-#define BATTLE_TYPE_x800000 0x800000
-#define BATTLE_TYPE_RECORDED 0x1000000
-#define BATTLE_TYPE_x2000000 0x2000000
-#define BATTLE_TYPE_TRAINER_HILL 0x4000000
-#define BATTLE_TYPE_SECRET_BASE 0x8000000
-#define BATTLE_TYPE_GROUDON 0x10000000
-#define BATTLE_TYPE_KYOGRE 0x20000000
-#define BATTLE_TYPE_RAYQUAZA 0x40000000
-#define BATTLE_TYPE_x80000000 0x80000000
+#define BATTLE_TYPE_DOUBLE 0x0001
+#define BATTLE_TYPE_LINK 0x0002
+#define BATTLE_TYPE_IS_MASTER 0x0004 // In not-link battles, it's always set.
+#define BATTLE_TYPE_TRAINER 0x0008
+#define BATTLE_TYPE_FIRST_BATTLE 0x0010
+#define BATTLE_TYPE_20 0x0020
+#define BATTLE_TYPE_MULTI 0x0040
+#define BATTLE_TYPE_SAFARI 0x0080
+#define BATTLE_TYPE_BATTLE_TOWER 0x0100
+#define BATTLE_TYPE_OLD_MAN_TUTORIAL 0x0200
+#define BATTLE_TYPE_ROAMER 0x0400
+#define BATTLE_TYPE_EREADER_TRAINER 0x0800
+#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
+#define BATTLE_TYPE_LEGENDARY 0x2000
+#define BATTLE_TYPE_REGI 0x4000
+#define BATTLE_TYPE_GHOST 0x8000
+#define BATTLE_TYPE_POKEDUDE 0x10000
+#define BATTLE_TYPE_PALACE 0x20000
+#define BATTLE_TYPE_ARENA 0x40000
+#define BATTLE_TYPE_TRAINER_TOWER 0x80000
+#define BATTLE_TYPE_PIKE 0x100000
+#define BATTLE_TYPE_PYRAMID 0x200000
+#define BATTLE_TYPE_INGAME_PARTNER 0x400000
+#define BATTLE_TYPE_x800000 0x800000
+#define BATTLE_TYPE_RECORDED 0x1000000
+#define BATTLE_TYPE_x2000000 0x2000000
+#define BATTLE_TYPE_TRAINER_HILL 0x4000000
+#define BATTLE_TYPE_SECRET_BASE 0x8000000
+#define BATTLE_TYPE_GROUDON 0x10000000
+#define BATTLE_TYPE_KYOGRE 0x20000000
+#define BATTLE_TYPE_RAYQUAZA 0x40000000
+#define BATTLE_TYPE_x80000000 0x80000000
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
@@ -293,4 +293,9 @@
#define BATTLE_TERRAIN_BUILDING 8
#define BATTLE_TERRAIN_PLAIN 9
+// Return value for IsRunningFromBattleImpossible.
+#define BATTLE_RUN_SUCCESS 0
+#define BATTLE_RUN_FORBIDDEN 1
+#define BATTLE_RUN_FAILURE 2
+
#endif // GUARD_CONSTANTS_BATTLE_H
diff --git a/include/constants/battle_setup.h b/include/constants/battle_setup.h
new file mode 100644
index 000000000..8f700dc04
--- /dev/null
+++ b/include/constants/battle_setup.h
@@ -0,0 +1,15 @@
+#ifndef GUARD_CONSTANTS_BATTLE_SETUP_H
+#define GUARD_CONSTANTS_BATTLE_SETUP_H
+
+#define TRAINER_BATTLE_SINGLE 0
+#define TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC 1
+#define TRAINER_BATTLE_CONTINUE_SCRIPT 2
+#define TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT 3
+#define TRAINER_BATTLE_DOUBLE 4
+#define TRAINER_BATTLE_REMATCH 5
+#define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE 6
+#define TRAINER_BATTLE_REMATCH_DOUBLE 7
+#define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC 8
+#define TRAINER_BATTLE_TUTORIAL 9
+
+#endif // GUARD_CONSTANTS_BATTLE_SETUP_H
diff --git a/include/constants/map_types.h b/include/constants/map_types.h
new file mode 100644
index 000000000..96ea73702
--- /dev/null
+++ b/include/constants/map_types.h
@@ -0,0 +1,15 @@
+#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_OCEAN_ROUTE 6
+#define MAP_TYPE_7 7
+#define MAP_TYPE_INDOOR 8
+#define MAP_TYPE_SECRET_BASE 9
+
+#endif // GUARD_CONSTANTS_MAP_TYPES_H
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
index 7359e9381..d8c429ed5 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -165,6 +165,8 @@
#define TRAINER_PIC_LADY 146
#define TRAINER_PIC_PAINTER 147
+#define TRAINER_SECRET_BASE 1024
+
#define F_TRAINER_FEMALE (1 << 7)
#define TRAINER_PIC_AQUA_LEADER_ARCHIE 0
diff --git a/include/data.h b/include/data.h
index 99594209b..9ea1f7c96 100644
--- a/include/data.h
+++ b/include/data.h
@@ -5,6 +5,7 @@
#include "constants/species.h"
#define SPECIES_SHINY_TAG 500
+#define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F))
struct MonCoords
{
@@ -16,8 +17,6 @@ struct MonCoords
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
extern const u8 gMoveNames[][13];
-extern const u8 gAbilityNames[][13];
-extern const u8 gTypeNames[][7];
extern const u16 gUnknown_8251CB8[];
extern const u16 gUnknown_8251FEE[];
extern const u16 gUnknown_8252324[];
diff --git a/include/event_scripts.h b/include/event_scripts.h
index c61e51f04..c0f0300b1 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -1155,6 +1155,15 @@ extern const u8 EventScript_SafariOutOfBalls[];
extern const u8 EventScript_ItemfinderDigUpUnderfootItem[];
+// battle_setup
+extern const u8 EventScript_DoTrainerBattle[];
+extern const u8 EventScript_TryDoDoubleTrainerBattle[];
+extern const u8 EventScript_TryDoNormalTrainerBattle[];
+extern const u8 EventScript_TryDoDoubleRematchBattle[];
+extern const u8 EventScript_TryDoRematchBattle[];
+extern const u8 gUnknown_81A4EB4[];
+extern const u8 EventScript_1C555B[];
+
// new_game
extern const u8 EventScript_ResetAllMapFlags[];
diff --git a/include/evolution_scene.h b/include/evolution_scene.h
index 1d87ceb76..6ceed99c1 100644
--- a/include/evolution_scene.h
+++ b/include/evolution_scene.h
@@ -3,8 +3,8 @@
#include "global.h"
-void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID);
-void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID);
+void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID);
+void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID);
void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID);
extern void (*gCB2_AfterEvolution)(void);
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index 0a33138b3..ecb622de5 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -5,4 +5,7 @@
extern u32 gUnknown_3005078;
+void RestartWildEncounterImmunitySteps(void);
+void ClearPoisonStepCounter(void);
+
#endif //GUARD_FIELD_CONTROL_AVATAR_H
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index 40d7ed933..6177cba1c 100644
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -85,7 +85,7 @@ void sub_8063E28(struct MapObject *, struct Sprite *);
void FieldObjectSetHeldMovement(struct MapObject *, u8);
void npc_coords_shift_still(struct MapObject *);
void sub_805FE7C(struct MapObject *, u8);
-void npc_set_running_behaviour_etc(struct MapObject *, u8);
+void SetTrainerMovementType(struct MapObject *, u8);
u8 sub_80634F0(u8 direction);
u8 sub_8063500(u8 a0);
void EventObjectSetGraphicsId(struct MapObject *mapObject, u8 a1);
@@ -94,6 +94,7 @@ void npc_paltag_set_load(u8 mode);
bool8 FieldObjectIsMovementOverridden(struct MapObject *mapObject);
u8 FieldObjectCheckHeldMovementStatus(struct MapObject *mapObject);
u8 sub_8063F84(u8 direction);
+u8 GetTrainerFacingDirectionMovementType(u8 direction);
void CameraObjectSetFollowedObjectId(u8 spriteId);
// Exported data declarations
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index 2c408afc9..1d431771b 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -13,8 +13,8 @@ u8 player_get_direction_upper_nybble(void);
u8 player_get_x22(void);
void sub_808D074(u8);
-void sub_805C270();
-void sub_805C780();
+void sub_805C270(void);
+void sub_805C780(void);
void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
u8 sub_805C808(u8);
void SetPlayerAvatarStateMask(u8 mask);
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index a4358081d..c0f25fa93 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_BATTLE_TOWER, // 8
-};
-
typedef void (*TilesetCB)(void);
struct Tileset
@@ -242,7 +213,7 @@ struct MapObject
/*0x0C*/ struct Coords16 coords1;
/*0x10*/ struct Coords16 coords2;
/*0x14*/ struct Coords16 coords3;
- /*0x18*/ u8 mapobj_unk_18:4; //current direction?
+ /*0x18*/ u8 facingDirection:4; //current direction?
/*0x18*/ u8 placeholder18:4;
/*0x19*/ union MapObjectRange range;
/*0x1A*/ u8 mapobj_unk_1A;
diff --git a/include/global.h b/include/global.h
index 5c4501be3..9588deae3 100644
--- a/include/global.h
+++ b/include/global.h
@@ -32,6 +32,13 @@
// GF's lingo
#define NELEMS ARRAY_COUNT
+#define SWAP(a, b, temp) \
+{ \
+ temp = a; \
+ a = b; \
+ b = temp; \
+}
+
// useful math macros
// Converts a number to Q8.8 fixed-point format
diff --git a/include/item.h b/include/item.h
index 69560a0e5..dd6271d13 100644
--- a/include/item.h
+++ b/include/item.h
@@ -37,7 +37,6 @@ void CopyItemNameHandlePlural(u16 itemId, u8 *string, u32 quantity);
bool8 IsBagPocketNonEmpty(u8 pocket);
bool8 CheckBagHasItem(u16 itemId, u16 count);
bool8 CheckBagHasSpace(u16 itemId, u16 count);
-bool8 AddBagItem(u16 itemId, u16 count);
bool8 RemoveBagItem(u16 itemId, u16 count);
u8 GetPocketByItemId(u16 itemId);
void ClearItemSlots(struct ItemSlot *itemSlots, u8 b);
diff --git a/include/item_menu.h b/include/item_menu.h
index 166906ebe..d12b9f394 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -36,6 +36,7 @@ void ItemMenu_SetExitCallback(void (*)(void));
void DisplayItemMessageInBag(u8 taskId, u8 bgId, const u8 * string, TaskFunc followUpFunc);
void sub_810A1F8(u8 taskId);
void sub_8107ECC(void);
+void sub_810AF74(void);
void sub_8108DC8(u8 pocketId);
void sub_81089F4(u8 pocketId);
void sub_8107DB4(u8 menuType, u8 pocket, MainCallback callback);
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 2be9dd3c9..f5aa682e6 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -11,7 +11,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
void sub_80FA190(void);
void MG_DrawCheckerboardPattern(void);
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
-bool8 IsRfuTaskFinished(void);
+bool8 IsLinkRfuTaskFinished(void);
void DestroyWirelessStatusIndicatorSprite(void);
void MEvent_CreateTask_CardOrNewsWithFriend(u8);
void MEvent_CreateTask_CardOrNewsOverWireless(u8);
diff --git a/include/map_obj_80688E4.h b/include/map_obj_80688E4.h
index bfac00378..bfd5dd3c7 100644
--- a/include/map_obj_80688E4.h
+++ b/include/map_obj_80688E4.h
@@ -3,7 +3,7 @@
#include "global.h"
-void player_bitmagic(void);
+void FreezeEventObjects(void);
void FreezeMapObject(struct MapObject *);
void FreezeMapObjectsExceptOne(u8 mapObjectId);
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index 62bcfdd38..df03001bf 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -10,7 +10,7 @@ bool8 MetatileBehavior_IsJumpNorth(u8 metatileBehavior);
bool8 MetatileBehavior_IsJumpSouth(u8 metatileBehavior);
bool8 MetatileBehavior_IsTallGrass(u8 metatileBehavior);
bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior);
-bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior);
+bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse(u8 metatileBehavior);
bool8 MetatileBehavior_IsReflective(u8 metatileBehavior);
bool8 MetatileBehavior_IsIce(u8 metatileBehavior);
@@ -53,15 +53,15 @@ bool8 MetatileBehavior_IsPC(u8 metatileBehavior);
bool8 MetatileBehavior_IsPondWaterOrPuddle(u8 metatileBehavior);
bool8 MetatileBehavior_IsPuddle(u8 metatileBehavior);
bool8 MetatileBehavior_IsTallGrass_2(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_3(u8 metatileBehavior);
+bool8 MetatileBehavior_IsLongGrass(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_4(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_5(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_6(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_7(u8 metatileBehavior);
+bool8 MetatileBehavior_IsBridge(u8 metatileBehavior);
+bool8 MetatileBehavior_GetBridgeType(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedIsMB_01(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedIsTallGrass(u8 metatileBehavior);
-bool8 MetatileBehavior_IsMB0B(u8 metatileBehavior);
-bool8 MetatileBehavior_IsMB0C(u8 metatileBehavior);
+bool8 MetatileBehavior_IsIndoorEncounter(u8 metatileBehavior);
+bool8 MetatileBehavior_IsMountain(u8 metatileBehavior);
bool8 MetatileBehavior_IsDeepOrSemiDeepWater(u8 metatileBehavior);
bool8 MetatileBehavior_IsMB19(u8 metatileBehavior);
bool8 MetatileBehavior_IsWaterfallBottom(u8 metatileBehavior);
diff --git a/include/overworld.h b/include/overworld.h
index a5e975d1d..805ddc8a0 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -62,7 +62,7 @@ void sub_8084EBC(s16, s16);
void player_avatar_init_params_reset(void);
void Overworld_SetFlashLevel(s32 a1);
-//u8 Overworld_GetFlashLevel(void);
+u8 Overworld_GetFlashLevel(void);
void sub_8085524(u16);
void Overworld_SetSavedMusic(u16);
@@ -141,5 +141,6 @@ bool32 Overworld_DoScrollSceneForCredits(u8 *, const struct CreditsOverworldCmd
bool32 sub_8058318(void);
void CB2_ReturnToStartMenu(void);
+void CB2_WhiteOut(void);
#endif //GUARD_OVERWORLD_H
diff --git a/include/party_menu.h b/include/party_menu.h
index 5b9b6e1c4..53731bee6 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -84,5 +84,7 @@ bool8 IsMultiBattle(void);
void sub_8126EDC(void);
void PartyMenuInit_FromPlayerPc(void);
void CB2_PartyMenuFromStartMenu(void);
+void sub_8128198(void);
+void sub_8127FF4(u8 slot, u8 slot2);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 77c8191f3..79933a22c 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -169,35 +169,6 @@ enum
EGG_GROUP_UNDISCOVERED
};
-enum
-{
- NATURE_HARDY,
- NATURE_LONELY,
- NATURE_BRAVE,
- NATURE_ADAMANT,
- NATURE_NAUGHTY,
- NATURE_BOLD,
- NATURE_DOCILE,
- NATURE_RELAXED,
- NATURE_IMPISH,
- NATURE_LAX,
- NATURE_TIMID,
- NATURE_HASTY,
- NATURE_SERIOUS,
- NATURE_JOLLY,
- NATURE_NAIVE,
- NATURE_MODEST,
- NATURE_MILD,
- NATURE_QUIET,
- NATURE_BASHFUL,
- NATURE_RASH,
- NATURE_CALM,
- NATURE_GENTLE,
- NATURE_SASSY,
- NATURE_CAREFUL,
- NATURE_QUIRKY,
-};
-
struct PokemonSubstruct0
{
u16 species;
@@ -629,10 +600,10 @@ u8 GetTrainerEncounterMusicId(u16 trainer);
void AdjustFriendship(struct Pokemon *mon, u8 event);
void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies);
u16 GetMonEVCount(struct Pokemon *mon);
-void sub_8043A68(void);
+void RandomlyGivePartyPokerus(struct Pokemon *party);
u8 CheckPartyPokerus(struct Pokemon *party, u8 selection);
u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection);
-void sub_8043B40(void);
+void PartySpreadPokerus(struct Pokemon *party);
bool8 TryIncrementMonLevel(struct Pokemon *mon);
u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm);
u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves);
diff --git a/include/quest_log.h b/include/quest_log.h
index adfe27e1b..8165486ce 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -2,6 +2,7 @@
#define GUARD_QUEST_LOG_H
#include "global.h"
+#include "quest_log_battle.h"
struct UnkStruct_3005E90
{
@@ -14,6 +15,7 @@ struct UnkStruct_3005E90
u8 unk_2;
};
+extern u8 gUnknown_203ADFA;
extern u8 gUnknown_3005E88;
extern u16 sNumQuestLogs;
extern struct UnkStruct_3005E90 gUnknown_3005E90;
@@ -40,6 +42,8 @@ void sub_8112450(void);
void sub_8112364(void);
u8 sub_8112CAC(void);
void sub_81138F8(void);
+void sub_811231C(void);
+void sub_81139BC(void);
void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx);
void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
diff --git a/include/quest_log_battle.h b/include/quest_log_battle.h
new file mode 100644
index 000000000..45d656e14
--- /dev/null
+++ b/include/quest_log_battle.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_QUEST_LOG_BATTLE_H
+#define GUARD_QUEST_LOG_BATTLE_H
+
+#include "global.h"
+
+void sub_812BFDC(void);
+void sub_812C224(void);
+
+#endif // GUARD_QUEST_LOG_BATTLE_H
diff --git a/include/safari_zone.h b/include/safari_zone.h
index feaa93ed0..a50351570 100644
--- a/include/safari_zone.h
+++ b/include/safari_zone.h
@@ -16,4 +16,6 @@ void ExitSafariMode(void);
bool8 SafariZoneTakeStep(void);
void SafariZoneRetirePrompt(void);
+void CB2_EndSafariBattle(void);
+
#endif // GUARD_SAFARI_ZONE_H
diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util_80A0058.h
index e1d228589..768e838dd 100644
--- a/include/script_pokemon_util_80A0058.h
+++ b/include/script_pokemon_util_80A0058.h
@@ -4,5 +4,6 @@
bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3);
bool8 ScriptGiveEgg(u16 species);
void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot);
+void sp000_heal_pokemon(void);
#endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H
diff --git a/include/strings.h b/include/strings.h
index 51396954c..9304b225d 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -231,6 +231,18 @@ extern const u8 gText_WhatWillPkmnDo[];
// battle_script_commands
extern const u8 gText_BattleYesNoChoice[];
+// battle_controller_oak_old_man
+extern const u8 gUnknown_83FDAE2[];
+extern const u8 gUnknown_83FDB92[];
+extern const u8 gUnknown_83FDBEF[];
+extern const u8 gUnknown_83FDC58[];
+extern const u8 gUnknown_83FDC95[];
+extern const u8 gUnknown_83FDD23[];
+extern const u8 gUnknown_83FDD64[];
+extern const u8 gUnknown_83FDDEB[];
+extern const u8 gUnknown_83FDCD2[];
+extern const u8 gUnknown_83FE6FA[];
+
// credits
extern const u8 gString_Dummy[];
extern const u8 gString_PokemonFireRed_Staff[]; // FR
diff --git a/include/vs_seeker.h b/include/vs_seeker.h
index efc014a4a..fdd6839df 100644
--- a/include/vs_seeker.h
+++ b/include/vs_seeker.h
@@ -6,9 +6,10 @@
void Task_VsSeeker_0(u8 taskId);
void sub_810CB90(void);
void sub_810CDE8(void);
-int sub_810CE64(u16 a0);
+int GetRematchTrainerId(u16 a0);
bool8 sub_810CF04(u8 a0);
u8 sub_810CF54();
void sub_810D0D0(void);
+void sub_810CB90(void);
#endif //GUARD_VS_SEEKER_H