summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/apprentice.h24
-rw-r--r--include/battle.h168
-rw-r--r--include/battle_frontier_1.h6
-rw-r--r--include/battle_frontier_2.h1
-rw-r--r--include/battle_pyramid_bag.h2
-rw-r--r--include/blend_palette.h6
-rw-r--r--include/cable_club.h1
-rw-r--r--include/constants/apprentice.h22
-rw-r--r--include/constants/event_objects.h46
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/daycare.h2
-rw-r--r--include/event_object_movement.h16
-rw-r--r--include/event_scripts.h4
-rw-r--r--include/field_control_avatar.h40
-rw-r--r--include/field_effect_helpers.h36
-rw-r--r--include/field_message_box.h10
-rw-r--r--include/field_player_avatar.h3
-rw-r--r--include/field_poison.h2
-rw-r--r--include/field_screen.h4
-rw-r--r--include/field_specials.h10
-rw-r--r--include/field_weather.h2
-rw-r--r--include/fldeff_80F9BCC.h2
-rw-r--r--include/global.fieldmap.h16
-rw-r--r--include/global.h60
-rw-r--r--include/item_menu.h2
-rw-r--r--include/link.h11
-rw-r--r--include/malloc.h1
-rw-r--r--include/menu.h3
-rw-r--r--include/metatile_behavior.h10
-rw-r--r--include/overworld.h3
-rw-r--r--include/palette.h2
-rw-r--r--include/party_menu.h4
-rw-r--r--include/pokemon.h71
-rw-r--r--include/pokenav.h8
-rw-r--r--include/rom6.h2
-rw-r--r--include/rom_8011DC0.h2
-rw-r--r--include/rom_81BE66C.h12
-rw-r--r--include/rotating_gate.h2
-rw-r--r--include/script.h4
-rw-r--r--include/script_menu.h1
-rw-r--r--include/script_pokemon_util_80F87D8.h1
-rw-r--r--include/secret_base.h6
-rw-r--r--include/shop.h36
-rw-r--r--include/string_util.h2
-rw-r--r--include/strings.h17
-rw-r--r--include/text.h1
-rw-r--r--include/trainer_card.h9
-rw-r--r--include/tv.h1
-rw-r--r--include/util.h1
49 files changed, 430 insertions, 267 deletions
diff --git a/include/apprentice.h b/include/apprentice.h
new file mode 100644
index 000000000..ca0b04800
--- /dev/null
+++ b/include/apprentice.h
@@ -0,0 +1,24 @@
+#ifndef GUARD_APPRENTICE_H
+#define GUARD_APPRENTICE_H
+
+#define APPRENTICE_SPECIES_COUNT 10
+
+struct ApprenticeTrainer
+{
+ u8 name[6][PLAYER_NAME_LENGTH + 1]; // For all six languages.
+ u16 otId;
+ u8 facilityClass;
+ u16 species[APPRENTICE_SPECIES_COUNT];
+ u8 rest[14];
+};
+
+extern const struct ApprenticeTrainer gApprentices[];
+
+void CopyFriendsApprenticeChallengeText(u8 saveblockApprenticeId);
+void Apprentice_EnableBothScriptContexts(void);
+void ResetApprenticeStruct(struct Apprentice *apprentice);
+void ResetAllApprenticeData(void);
+void CallApprenticeFunction(void);
+const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language);
+
+#endif // GUARD_APPRENTICE_H
diff --git a/include/battle.h b/include/battle.h
index 3e638c6ef..87aa2a45b 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -27,8 +27,8 @@
#define B_ACTION_SAFARI_POKEBLOCK 6
#define B_ACTION_SAFARI_GO_NEAR 7
#define B_ACTION_SAFARI_RUN 8
+#define B_ACTION_WALLY_THROW 9
// The exact purposes of these are unclear
-#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
@@ -128,42 +128,40 @@ struct UnknownFlags
struct DisableStruct
{
- /*0x00*/ u32 transformedMonPersonality;
- /*0x04*/ u16 disabledMove;
- /*0x06*/ u16 encoredMove;
- /*0x08*/ u8 protectUses;
- /*0x09*/ u8 stockpileCounter;
- /*0x0A*/ u8 substituteHP;
- /*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;
- /*0x10*/ u8 furyCutterCounter;
- /*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;
- /*0x19*/ u8 rechargeCounter;
- /*0x1A*/ u8 unk1A[2];
+ u32 transformedMonPersonality;
+ u16 disabledMove;
+ u16 encoredMove;
+ u8 protectUses;
+ u8 stockpileCounter;
+ u8 substituteHP;
+ u8 disableTimer:4;
+ u8 disableTimerStartValue:4;
+ u8 encoredMovePos;
+ u8 filler_D; // Unused field.
+ u8 encoreTimer:4;
+ u8 encoreTimerStartValue:4;
+ u8 perishSongTimer:4;
+ u8 perishSongTimerStartValue:4;
+ u8 furyCutterCounter;
+ u8 rolloutTimer:4;
+ u8 rolloutTimerStartValue:4;
+ u8 chargeTimer:4;
+ u8 chargeTimerStartValue:4;
+ u8 tauntTimer:4;
+ u8 tauntTimer2:4;
+ u8 battlerPreventingEscape;
+ u8 battlerWithSureHit;
+ u8 isFirstTurn;
+ u8 unk17;
+ u8 truantCounter:1;
+ u8 truantUnknownBit:1;
+ u8 unk18_a_2:2;
+ u8 unk18_b:4;
+ u8 rechargeTimer;
};
struct ProtectStruct
{
- /* field_0 */
u32 protected:1;
u32 endured:1;
u32 noValidMoves:1;
@@ -172,67 +170,54 @@ struct ProtectStruct
u32 stealMove:1;
u32 flag0Unknown:1;
u32 prlzImmobility:1;
- /* field_1 */
u32 confusionSelfDmg:1;
u32 targetNotAffected:1;
u32 chargingTurn:1;
- u32 fleeFlag:2; // for RunAway and Smoke Ball
+ u32 fleeFlag:2; // For RunAway and Smoke Ball.
u32 usedImprisionedMove:1;
u32 loveImmobility:1;
u32 usedDisabledMove:1;
- /* field_2 */
- u32 usedTauntedMove:1; // 0x1
- 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
- /* field_3 */
- u32 field3:8;
-
- /* field_4 */ u32 physicalDmg;
- /* field_8 */ u32 specialDmg;
- /* field_C */ u8 physicalBattlerId;
- /* field_D */ u8 specialBattlerId;
- /* field_E */ u16 fieldE;
+ u32 usedTauntedMove:1;
+ u32 flag2Unknown:1;
+ u32 flinchImmobility:1;
+ u32 notFirstStrike:1;
+ u32 flag_x10:1;
+ u32 physicalDmg;
+ u32 specialDmg;
+ u8 physicalBattlerId;
+ u8 specialBattlerId;
};
struct SpecialStatus
{
- u8 statLowered:1; // 0x1
- u8 lightningRodRedirected:1; // 0x2
- u8 restoredBattlerSprite: 1; // 0x4
- u8 intimidatedMon:1; // 0x8
- u8 traced:1; // 0x10
- u8 flag20:1;
+ u8 statLowered:1;
+ u8 lightningRodRedirected:1;
+ u8 restoredBattlerSprite: 1;
+ u8 intimidatedMon:1;
+ u8 traced:1;
+ u8 ppNotAffectedByPressure:1;
u8 flag40:1;
u8 focusBanded:1;
- u8 field1[3];
s32 dmg;
s32 physicalDmg;
s32 specialDmg;
u8 physicalBattlerId;
u8 specialBattlerId;
- u8 field12;
- u8 field13;
};
struct SideTimer
{
- /*0x00*/ u8 reflectTimer;
- /*0x01*/ u8 reflectBattlerId;
- /*0x02*/ u8 lightscreenTimer;
- /*0x03*/ u8 lightscreenBattlerId;
- /*0x04*/ u8 mistTimer;
- /*0x05*/ u8 mistBattlerId;
- /*0x06*/ u8 safeguardTimer;
- /*0x07*/ u8 safeguardBattlerId;
- /*0x08*/ u8 followmeTimer;
- /*0x09*/ u8 followmeTarget;
- /*0x0A*/ u8 spikesAmount;
- /*0x0B*/ u8 fieldB;
+ u8 reflectTimer;
+ u8 reflectBattlerId;
+ u8 lightscreenTimer;
+ u8 lightscreenBattlerId;
+ u8 mistTimer;
+ u8 mistBattlerId;
+ u8 safeguardTimer;
+ u8 safeguardBattlerId;
+ u8 followmeTimer;
+ u8 followmeTarget;
+ u8 spikesAmount;
};
struct WishFutureKnock
@@ -244,7 +229,7 @@ struct WishFutureKnock
u8 wishCounter[MAX_BATTLERS_COUNT];
u8 wishMonId[MAX_BATTLERS_COUNT];
u8 weatherDuration;
- u8 knockedOffPokes[2];
+ u8 knockedOffMons[2]; // Each battler is represented by a bit. The array entry is dependent on the battler's side.
};
struct AI_ThinkingStruct
@@ -317,7 +302,7 @@ struct BattleResults
u8 playerSwitchesCounter; // 0x2
u8 unk3; // 0x3
u8 unk4; // 0x4
- u8 unk5_0:1; // 0x5
+ u8 playerMonWasDamaged:1; // 0x5
u8 usedMasterBall:1; // 0x5
u8 caughtMonBall:4; // 0x5
u8 shinyWildMon:1; // 0x5
@@ -428,22 +413,14 @@ struct BattleStruct
u8 turnEffectsBattlerId;
u8 filler2;
u8 turnCountersTracker;
- u8 wrappedMove[8]; // ask gamefreak why they declared it that way
- u8 moveTarget[4];
+ u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access.
+ u8 moveTarget[MAX_BATTLERS_COUNT];
u8 expGetterMonId;
u8 field_11;
u8 wildVictorySong;
u8 dynamicMoveType;
- u8 wrappedBy[4];
- u16 assistPossibleMoves[5 * 4]; // 5 mons, each of them knowing 4 moves
- u8 field_40;
- u8 field_41;
- u8 field_42;
- u8 field_43;
- u8 field_44;
- u8 field_45;
- u8 field_46;
- u8 field_47;
+ u8 wrappedBy[MAX_BATTLERS_COUNT];
+ u16 assistPossibleMoves[PARTY_SIZE * 4]; // Each of mons can know max 4 moves.
u8 focusPunchBattlerId;
u8 battlerPreventingSwitchout;
u8 moneyMultiplier;
@@ -451,7 +428,6 @@ struct BattleStruct
u8 switchInAbilitiesCounter;
u8 faintedActionsState;
u8 faintedActionsBattlerId;
- u8 field_4F;
u16 expValue;
u8 field_52;
u8 sentInPokes;
@@ -460,7 +436,7 @@ struct BattleStruct
u8 monToSwitchIntoId[MAX_BATTLERS_COUNT];
u8 field_60[4][3];
u8 runTries;
- u8 caughtMonNick[11];
+ u8 caughtMonNick[POKEMON_NAME_LENGTH + 1];
u8 field_78;
u8 safariGoNearCounter;
u8 safariPkblThrowCounter;
@@ -487,15 +463,7 @@ struct BattleStruct
u8 wallyMovesState;
u8 wallyWaitFrames;
u8 wallyMoveFrames;
- u8 mirrorMoves[8]; // ask gamefreak why they declared it that way
- u8 field_A0;
- u8 field_A1;
- u8 field_A2;
- u8 field_A3;
- u8 field_A4;
- u8 field_A5;
- u8 field_A6;
- u8 field_A7;
+ u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // Last move that a battler was hit with. This field seems to erroneously take 16 bytes instead of 8.
u16 hpOnSwitchout[2];
u32 savedBattleTypeFlags;
u8 abilityPreventingSwitchout;
@@ -504,7 +472,7 @@ struct BattleStruct
bool8 anyMonHasTransformed;
void (*savedCallback)(void);
u16 usedHeldItems[MAX_BATTLERS_COUNT];
- u8 chosenItem[4]; // why is this an u8?
+ u8 chosenItem[MAX_BATTLERS_COUNT]; // why is this an u8?
u8 AI_itemType[2];
u8 AI_itemFlags[2];
u16 choicedMove[MAX_BATTLERS_COUNT];
@@ -515,7 +483,7 @@ struct BattleStruct
u8 turnSideTracker;
u8 fillerDC[0xDF-0xDC];
u8 field_DF;
- u8 mirrorMoveArrays[32];
+ u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2]; // a 3-D array [target][attacker][byte]
u16 castformPalette[MAX_BATTLERS_COUNT][16];
u8 field_180;
u8 field_181;
diff --git a/include/battle_frontier_1.h b/include/battle_frontier_1.h
new file mode 100644
index 000000000..bc777914a
--- /dev/null
+++ b/include/battle_frontier_1.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_BATTLE_FRONTIER_1_H
+#define GUARD_BATTLE_FRONTIER_1_H
+
+bool32 sub_8196034(void);
+
+#endif // GUARD_BATTLE_FRONTIER_1_H
diff --git a/include/battle_frontier_2.h b/include/battle_frontier_2.h
index d032f9f74..573053f10 100644
--- a/include/battle_frontier_2.h
+++ b/include/battle_frontier_2.h
@@ -11,7 +11,6 @@ void sub_81A895C(void);
u16 sub_81A89A0(u8);
void sub_81A8AF8(void);
bool8 InBattlePike(void);
-void sub_819FA50(void);
void sub_81AA078(u16*, u8);
void sub_81A4C30(void);
bool8 sub_81A6BF4(void);
diff --git a/include/battle_pyramid_bag.h b/include/battle_pyramid_bag.h
index 5d5d8ccfa..2301b0aa0 100644
--- a/include/battle_pyramid_bag.h
+++ b/include/battle_pyramid_bag.h
@@ -11,7 +11,7 @@ struct PyramidBagResources
u8 windowIds[5];
u8 unk814;
u8 unk815;
- u8 scrollArrowSpriteId;
+ u8 scrollIndicatorsTaskId;
const u8 *menuActionIds;
u8 filler81C[0x820 - 0x81C];
u8 menuActionsCount;
diff --git a/include/blend_palette.h b/include/blend_palette.h
deleted file mode 100644
index a00847bc3..000000000
--- a/include/blend_palette.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef GUARD_BLEND_PALETTE_H
-#define GUARD_BLEND_PALETTE_H
-
-void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor);
-
-#endif // GUARD_BLEND_PALETTE_H
diff --git a/include/cable_club.h b/include/cable_club.h
index 8be376721..ebdc82b46 100644
--- a/include/cable_club.h
+++ b/include/cable_club.h
@@ -14,5 +14,6 @@ u8 sub_80B3050(void);
void sub_80B360C(void);
bool32 sub_80B2AF4(u16 *arg0, u16 *arg1);
void sub_80B3AF8(u8 taskId);
+void task00_08081A90(u8 taskId);
#endif //GUARD_CABLE_CLUB_H
diff --git a/include/constants/apprentice.h b/include/constants/apprentice.h
new file mode 100644
index 000000000..9db58bb8e
--- /dev/null
+++ b/include/constants/apprentice.h
@@ -0,0 +1,22 @@
+#ifndef GUARD_CONSTANTS_APPRENTICE_H
+#define GUARD_CONSTANTS_APPRENTICE_H
+
+#define APPRENTICE_ASK_WHICH_LEVEL 0
+#define APPRENTICE_ASK_3SPECIES 1
+#define APPRENTICE_ASK_2SPECIES 2
+#define APPRENTICE_ASK_MOVES 3
+#define APPRENTICE_ASK_GIVE 4
+#define APPRENTICE_ASK_YES_NO 6
+
+#define APPRENTICE_BUFF_SPECIES1 0
+#define APPRENTICE_BUFF_SPECIES2 1
+#define APPRENTICE_BUFF_SPECIES3 2
+#define APPRENTICE_BUFF_MOVE1 3
+#define APPRENTICE_BUFF_MOVE2 4
+#define APPRENTICE_BUFF_ITEM 5
+#define APPRENTICE_BUFF_NAME 6
+#define APPRENTICE_BUFF_EASY_CHAT 7
+#define APPRENTICE_BUFF_LEVEL 8
+#define APPRENTICE_BUFF_SPECIES4 9
+
+#endif // GUARD_CONSTANTS_APPRENTICE_H
diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h
index d04f0a1f9..4967c814d 100644
--- a/include/constants/event_objects.h
+++ b/include/constants/event_objects.h
@@ -6,36 +6,36 @@
#define EVENT_OBJ_GFX_BRENDAN_SURFING 2
#define EVENT_OBJ_GFX_BRENDAN_FIELD_MOVE 3
#define EVENT_OBJ_GFX_QUINTY_PLUMP 4
-#define EVENT_OBJ_GFX_LITTLE_BOY_1 5
-#define EVENT_OBJ_GFX_LITTLE_GIRL_1 6
+#define EVENT_OBJ_GFX_NINJA_BOY 5
+#define EVENT_OBJ_GFX_TWIN 6
#define EVENT_OBJ_GFX_BOY_1 7
#define EVENT_OBJ_GFX_GIRL_1 8
#define EVENT_OBJ_GFX_BOY_2 9
#define EVENT_OBJ_GFX_GIRL_2 10
-#define EVENT_OBJ_GFX_LITTLE_BOY_2 11
-#define EVENT_OBJ_GFX_LITTLE_GIRL_2 12
+#define EVENT_OBJ_GFX_LITTLE_BOY 11
+#define EVENT_OBJ_GFX_LITTLE_GIRL 12
#define EVENT_OBJ_GFX_BOY_3 13
#define EVENT_OBJ_GFX_GIRL_3 14
-#define EVENT_OBJ_GFX_BOY_4 15
+#define EVENT_OBJ_GFX_RICH_BOY 15
#define EVENT_OBJ_GFX_WOMAN_1 16
#define EVENT_OBJ_GFX_FAT_MAN 17
-#define EVENT_OBJ_GFX_WOMAN_2 18
+#define EVENT_OBJ_GFX_POKEFAN_F 18
#define EVENT_OBJ_GFX_MAN_1 19
-#define EVENT_OBJ_GFX_WOMAN_3 20
-#define EVENT_OBJ_GFX_OLD_MAN_1 21
-#define EVENT_OBJ_GFX_OLD_WOMAN_1 22
+#define EVENT_OBJ_GFX_WOMAN_2 20
+#define EVENT_OBJ_GFX_EXPERT_M 21
+#define EVENT_OBJ_GFX_EXPERT_F 22
#define EVENT_OBJ_GFX_MAN_2 23
-#define EVENT_OBJ_GFX_WOMAN_4 24
-#define EVENT_OBJ_GFX_MAN_3 25
-#define EVENT_OBJ_GFX_WOMAN_5 26
+#define EVENT_OBJ_GFX_WOMAN_3 24
+#define EVENT_OBJ_GFX_POKEFAN_M 25
+#define EVENT_OBJ_GFX_WOMAN_4 26
#define EVENT_OBJ_GFX_COOK 27
-#define EVENT_OBJ_GFX_WOMAN_6 28
-#define EVENT_OBJ_GFX_OLD_MAN_2 29
-#define EVENT_OBJ_GFX_OLD_WOMAN_2 30
+#define EVENT_OBJ_GFX_LINK_RECEPTIONIST 28
+#define EVENT_OBJ_GFX_OLD_MAN 29
+#define EVENT_OBJ_GFX_OLD_WOMAN 30
#define EVENT_OBJ_GFX_CAMPER 31
#define EVENT_OBJ_GFX_PICNICKER 32
-#define EVENT_OBJ_GFX_MAN_4 33
-#define EVENT_OBJ_GFX_WOMAN_7 34
+#define EVENT_OBJ_GFX_MAN_3 33
+#define EVENT_OBJ_GFX_WOMAN_5 34
#define EVENT_OBJ_GFX_YOUNGSTER 35
#define EVENT_OBJ_GFX_BUG_CATCHER 36
#define EVENT_OBJ_GFX_PSYCHIC_M 37
@@ -66,8 +66,8 @@
#define EVENT_OBJ_GFX_BERRY_TREE_LATE_STAGES 62
#define EVENT_OBJ_GFX_BRENDAN_ACRO_BIKE 63
#define EVENT_OBJ_GFX_PROF_BIRCH 64
-#define EVENT_OBJ_GFX_MAN_5 65
-#define EVENT_OBJ_GFX_MAN_6 66
+#define EVENT_OBJ_GFX_MAN_4 65
+#define EVENT_OBJ_GFX_MAN_5 66
#define EVENT_OBJ_GFX_REPORTER_M 67
#define EVENT_OBJ_GFX_REPORTER_F 68
#define EVENT_OBJ_GFX_BARD 69
@@ -96,8 +96,8 @@
#define EVENT_OBJ_GFX_MAY_SURFING 92
#define EVENT_OBJ_GFX_MAY_FIELD_MOVE 93
#define EVENT_OBJ_GFX_TRUCK 94
-#define EVENT_OBJ_GFX_VIGAROTH_CARRYING_BOX 95
-#define EVENT_OBJ_GFX_VIGAROTH_FACING_AWAY 96
+#define EVENT_OBJ_GFX_VIGOROTH_CARRYING_BOX 95
+#define EVENT_OBJ_GFX_VIGOROTH_FACING_AWAY 96
#define EVENT_OBJ_GFX_BIRCHS_BAG 97
#define EVENT_OBJ_GFX_ZIGZAGOON_1 98
#define EVENT_OBJ_GFX_ARTIST 99
@@ -117,7 +117,7 @@
#define EVENT_OBJ_GFX_MOVING_BOX 113
#define EVENT_OBJ_GFX_CABLE_CAR 114
#define EVENT_OBJ_GFX_SCIENTIST_2 115
-#define EVENT_OBJ_GFX_MAN_7 116
+#define EVENT_OBJ_GFX_DEVON_EMPLOYEE 116
#define EVENT_OBJ_GFX_AQUA_MEMBER_M 117
#define EVENT_OBJ_GFX_AQUA_MEMBER_F 118
#define EVENT_OBJ_GFX_MAGMA_MEMBER_M 119
@@ -190,7 +190,7 @@
#define EVENT_OBJ_GFX_BIG_REGISTEEL_DOLL 186
#define EVENT_OBJ_GFX_LATIAS 187
#define EVENT_OBJ_GFX_LATIOS 188
-#define EVENT_OBJ_GFX_BOY_5 189
+#define EVENT_OBJ_GFX_GAMEBOY_KID 189
#define EVENT_OBJ_GFX_CONTEST_JUDGE 190
#define EVENT_OBJ_GFX_BRENDAN_WATERING 191
#define EVENT_OBJ_GFX_MAY_WATERING 192
diff --git a/include/constants/flags.h b/include/constants/flags.h
index a74dffccf..ff403a299 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -501,7 +501,7 @@
#define FLAG_0x1F1 0x1F1
#define FLAG_0x1F2 0x1F2
#define FLAG_0x1F3 0x1F3
-#define FLAG_0x1F4 0x1F4
+#define FLAG_HIDDEN_ITEMS_START 0x1F4
#define FLAG_0x1F5 0x1F5
#define FLAG_0x1F6 0x1F6
#define FLAG_0x1F7 0x1F7
diff --git a/include/daycare.h b/include/daycare.h
index 7db44e024..ecd875865 100644
--- a/include/daycare.h
+++ b/include/daycare.h
@@ -15,7 +15,7 @@ void TriggerPendingDaycareEgg(void);
void RejectEggFromDayCare(void);
void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation);
void GiveEggFromDaycare(void);
-bool8 DoEggActions_CheckHatch(void);
+bool8 ShouldEggHatch(void);
u16 GetSelectedMonNickAndSpecies(void);
void GetDaycareMonNicknames(void);
u8 GetDaycareState(void);
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index d43dd78ea..ddccfe39b 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -80,6 +80,7 @@ struct LockedAnimEventObjects
};
extern const struct SpriteFrameImage gEventObjectPicTable_PechaBerryTree[];
+extern const u8 gReflectionEffectPaletteMap[];
void sub_808D438(void);
u8 GetMoveDirectionAnimNum(u8);
@@ -101,17 +102,17 @@ void sub_80930E0(s16 *, s16 *, s16, s16);
void EventObjectClearHeldMovement(struct EventObject *);
void EventObjectClearHeldMovementIfActive(struct EventObject *);
void TrySpawnEventObjects(s16, s16);
-u8 sprite_new(u8, u8, s16, s16, u8, u8);
-u8 AddPseudoEventObject(u16, void (*)(struct Sprite *), s16, s16, u8);
+u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction);
+u8 AddPseudoEventObject(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority);
u8 show_sprite(u8, u8, u8);
-u8 SpawnSpecialEventObjectParameterized(u8, u8, u8, s16, s16, u8);
+u8 SpawnSpecialEventObjectParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z);
u8 SpawnSpecialEventObject(struct EventObjectTemplate *);
void sub_8093038(s16, s16, s16 *, s16 *);
void CameraObjectReset1(void);
-void EventObjectSetGraphicsId(struct EventObject *, u8);
+void EventObjectSetGraphicsId(struct EventObject *, u8 graphicsId);
void EventObjectTurn(struct EventObject *, u8);
void EventObjectTurnByLocalIdAndMap(u8, u8, u8, u8);
-const struct EventObjectGraphicsInfo *GetEventObjectGraphicsInfo(u8);
+const struct EventObjectGraphicsInfo *GetEventObjectGraphicsInfo(u8 graphicsId);
void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8);
void FreeAndReserveObjectSpritePalettes(void);
void sub_808E82C(u8, u8, u8, s16, s16);
@@ -189,6 +190,10 @@ u8 GetMoveDirectionFasterAnimNum(u8);
u8 GetMoveDirectionFastestAnimNum(u8);
u8 GetLedgeJumpDirection(s16, s16, u8);
void CameraObjectSetFollowedObjectId(u8 objectId);
+u16 GetObjectPaletteTag(u8 palSlot);
+void UpdateEventObjectSpriteVisibility(struct Sprite *sprite, bool8 invisible);
+s16 sub_809773C(s16 a1);
+s16 sub_8097728(s16 a1);
void MovementType_None(struct Sprite *);
void MovementType_LookAround(struct Sprite *);
@@ -249,6 +254,7 @@ u8 GetSlideMovementAction(u32);
u8 GetJumpInPlaceMovementAction(u32);
u8 GetJumpMovementAction(u32);
u8 GetJump2MovementAction(u32);
+u8 CreateCopySpriteAt(struct Sprite *sprite, s16 x, s16 y, u8 subpriority);
u8 MovementType_WanderAround_Step0(struct EventObject *, struct Sprite *);
u8 MovementType_WanderAround_Step1(struct EventObject *, struct Sprite *);
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 4f85156aa..5b8b74d8b 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -19,8 +19,8 @@ extern const u8 EventScript_TryDoDoubleTrainerBattle[];
extern const u8 EventScript_271362[];
extern const u8 EventScript_TryDoDoubleRematchBattle[];
extern const u8 EventScript_2713D1[];
-extern const u8 EventScript_2766A2[];
-extern const u8 EventScript_2766A6[];
+extern const u8 EventScript_SecretPower1[];
+extern const u8 EventScript_SecretPower2[];
extern const u8 gTVBravoTrainerText00[];
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index 0ff1834ca..536f218a3 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -3,22 +3,22 @@
struct FieldInput
{
- u8 pressedAButton:1;
- u8 input_field_0_1:1;
- u8 pressedStartButton:1;
- u8 pressedSelectButton:1;
- u8 input_field_0_4:1;
- u8 input_field_0_5:1;
- u8 input_field_0_6:1;
- u8 pressedBButton:1;
- u8 input_field_1_0:1;
- u8 input_field_1_1:1;
- u8 input_field_1_2:1;
- u8 input_field_1_3:1;
- u8 input_field_1_4:1;
- u8 input_field_1_5:1;
- u8 input_field_1_6:1;
- u8 input_field_1_7:1;
+ bool8 pressedAButton:1;
+ bool8 checkStandardWildEncounter:1;
+ bool8 pressedStartButton:1;
+ bool8 pressedSelectButton:1;
+ bool8 input_field_0_4:1;
+ bool8 input_field_0_5:1;
+ bool8 tookStep:1;
+ bool8 pressedBButton:1;
+ bool8 input_field_1_0:1;
+ bool8 input_field_1_1:1;
+ bool8 input_field_1_2:1;
+ bool8 input_field_1_3:1;
+ bool8 input_field_1_4:1;
+ bool8 input_field_1_5:1;
+ bool8 input_field_1_6:1;
+ bool8 input_field_1_7:1;
u8 dpadDirection;
u8 input_field_3;
};
@@ -28,15 +28,15 @@ void FieldGetPlayerInput(struct FieldInput *pStruct, u16 keys, u16 heldKeys);
int sub_809C014(struct FieldInput *pStruct);
u8 *sub_80682A8(struct MapPosition *, u8, u8);
void overworld_poison_timer_set(void);
-void prev_quest_postbuffer_cursor_backup_reset(void);
+void RestartWildEncounterImmunitySteps(void);
u8 *sub_8068E24(struct MapPosition *);
-u8 *GetEventObjectScriptPointerPlayerFacing(void);
-bool8 mapheader_trigger_activate_at__run_now(struct MapPosition *);
+const u8 *GetEventObjectScriptPointerPlayerFacing(void);
bool8 sub_8068870(u16 a);
bool8 sub_8068894(void);
bool8 sub_8068A64(struct MapPosition *, u16);
u8 sub_8068F18(void);
bool8 dive_warp(struct MapPosition *position, u16 b);
-void sub_809D2BC(void);
+int SetCableClubWarp(void);
+u8 TrySetDiveWarp(void);
#endif // GUARD_FIELDCONTROLAVATAR_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index 547f515eb..9c354159b 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -1,7 +1,3 @@
-//
-// Created by scott on 9/7/2017.
-//
-
#ifndef GUARD_FIELD_EFFECT_HELPERS_H
#define GUARD_FIELD_EFFECT_HELPERS_H
@@ -10,29 +6,29 @@
// Exported RAM declarations
// Exported ROM declarations
-u8 sub_8154228(void);
+u8 CreateWarpArrowSprite(void);
bool8 sub_8155DA0(struct EventObject *);
void sub_8155D78(struct EventObject *);
void sub_81555AC(u8, u8);
-void ash(s16, s16, u16, s16);
+void StartAshFieldEffect(s16, s16, u16, s16);
void SetUpReflection(struct EventObject*, struct Sprite*, u8);
u32 StartFieldEffectForEventObject(u8, struct EventObject*);
-u8 sub_81546C8(u8, u8, u8, s16, s16);
+u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
void sub_8155F80(struct Sprite*);
-void oamc_shadow(struct Sprite*);
-void unc_grass_normal(struct Sprite*);
+void UpdateShadowFieldEffect(struct Sprite*);
+void UpdateTallGrassFieldEffect(struct Sprite*);
void sub_81561D0(struct Sprite*);
-void sub_8155460(struct Sprite*);
-void sub_8155658(struct Sprite*);
+void UpdateAshFieldEffect(struct Sprite*);
+void UpdateSurfBlobFieldEffect(struct Sprite*);
void sub_8156194(struct Sprite*);
-void sub_8154C60(struct Sprite*);
-void sub_8154D90(struct Sprite*);
-void unc_grass_tall(struct Sprite*);
-void sub_81559BC(struct Sprite*);
-void sub_8155C88(struct Sprite*);
-void sub_8154A10(struct Sprite*);
-void sub_8155158(struct Sprite*);
-void sub_8155AEC(struct Sprite*);
-void sub_8155E50(struct Sprite*);
+void UpdateFootprintsTireTracksFieldEffect(struct Sprite*);
+void UpdateSplashFieldEffect(struct Sprite*);
+void UpdateLongGrassFieldEffect(struct Sprite*);
+void UpdateSandPileFieldEffect(struct Sprite*);
+void UpdateDisguiseFieldEffect(struct Sprite*);
+void UpdateShortGrassFieldEffect(struct Sprite*);
+void UpdateHotSpringsWaterFieldEffect(struct Sprite*);
+void UpdateBubblesFieldEffect(struct Sprite*);
+void UpdateSparkleFieldEffect(struct Sprite*);
#endif //GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_message_box.h b/include/field_message_box.h
index 432c9078b..e3deee4d6 100644
--- a/include/field_message_box.h
+++ b/include/field_message_box.h
@@ -1,10 +1,20 @@
#ifndef GUARD_FIELD_MESSAGE_BOX_H
#define GUARD_FIELD_MESSAGE_BOX_H
+enum
+{
+ FIELD_MESSAGE_BOX_HIDDEN,
+ FIELD_MESSAGE_BOX_UNUSED,
+ FIELD_MESSAGE_BOX_NORMAL,
+ FIELD_MESSAGE_BOX_AUTO_SCROLL,
+};
+
bool8 ShowFieldMessage(const u8 *message);
bool8 sub_8098238(const u8 *message);
bool8 ShowFieldAutoScrollMessage(const u8 *message);
void HideFieldMessageBox(void);
bool8 IsFieldMessageBoxHidden(void);
+u8 GetFieldMessageBoxMode(void);
+void sub_8098374(void);
#endif // GUARD_FIELD_MESSAGE_BOX_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index b11b5e21a..ee2cbb3c8 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -44,6 +44,9 @@ u8 GetPlayerAvatarGraphicsIdByCurrentState(void);
void SetPlayerAvatarStateMask(u8 a);
u8 GetPlayerAvatarGraphicsIdByStateId(u8 a);
u8 GetJumpSpecialMovementAction(u32);
+bool8 PartyHasMonWithSurf(void);
+bool8 IsPlayerFacingSurfableFishableWater(void);
+bool8 IsPlayerSurfingNorth(void);
bool8 ForcedMovement_None(void);
bool8 ForcedMovement_Slip(void);
diff --git a/include/field_poison.h b/include/field_poison.h
index d1a4c823b..6a1ba17f2 100644
--- a/include/field_poison.h
+++ b/include/field_poison.h
@@ -14,6 +14,6 @@ enum {
};
void sub_80F972C(void);
-unsigned int overworld_poison(void);
+int DoPoisonFieldEffect(void);
#endif //GUARD_FIELD_POISON_H
diff --git a/include/field_screen.h b/include/field_screen.h
index bf1502405..021d2b9e9 100644
--- a/include/field_screen.h
+++ b/include/field_screen.h
@@ -16,5 +16,9 @@ void sub_80AC3E4(void);
void PreservePaletteInWeather(u8);
void sub_80AF128(void);
void sub_80AB104(u8);
+void sub_80AF80C(u8);
+void sub_80AF828(void);
+void sub_80AF838(void);
+void sub_80B0268(void);
#endif //GUARD_FIELD_SCREEN_H
diff --git a/include/field_specials.h b/include/field_specials.h
index c1f70a399..0e2daf9c3 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -5,5 +5,15 @@ u8 GetLeadMonIndex(void);
u8 sub_813B260(void);
u16 get_unknown_box_id(void);
bool8 InMultiBattleRoom(void);
+void sub_813BF10(void);
+void increment_var_x4026_on_birth_island_modulo_100(void);
+bool8 sub_813B3B0(void);
+bool8 ShouldDoBrailleRegicePuzzle(void);
+bool32 is_tile_that_overrides_player_control(void);
+bool32 sub_8138120(void);
+bool32 sub_8138168(void);
+bool32 sub_81381B0(void);
+bool32 sub_81381F8(void);
+bool32 CountSSTidalStep(u16 delta);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/field_weather.h b/include/field_weather.h
index 7ad8d21e7..a48361b8a 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -155,7 +155,7 @@ void sub_80AEDBC(void);
void SetSav1WeatherFromCurrMapHeader(void);
// ...
void DoCurrentWeather(void);
-void sub_8080750();
+void sub_8080750(void);
bool8 IsWeatherNotFadingIn(void);
bool8 IsWeatherChangeComplete(void);
diff --git a/include/fldeff_80F9BCC.h b/include/fldeff_80F9BCC.h
index ba775cd6d..87a20d290 100644
--- a/include/fldeff_80F9BCC.h
+++ b/include/fldeff_80F9BCC.h
@@ -12,6 +12,8 @@ void sub_80FA794(s16 x, s16 y);
void CreateRecordMixingSprite(void);
void DestroyRecordMixingSprite(void);
void overworld_poison_effect(void);
+void sub_80FA970(s16);
+void sub_80FA9D0(void);
bool8 sub_80FADE4(u16, u8);
#endif //GUARD_FLDEFF_80F9BCC_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 4bec8e0c7..66d5b5e4c 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -63,17 +63,16 @@ struct EventObjectTemplate
struct WarpEvent
{
s16 x, y;
- s8 warpId;
- u8 mapGroup;
+ u8 elevation;
+ u8 warpId;
u8 mapNum;
- u8 unk7;
+ u8 mapGroup;
};
struct CoordEvent
{
s16 x, y;
- u8 unk4;
- u8 filler_5;
+ u8 elevation;
u16 trigger;
u16 index;
u8 filler_A[0x2];
@@ -83,16 +82,15 @@ struct CoordEvent
struct BgEvent
{
u16 x, y;
- u8 unk4;
+ u8 elevation;
u8 kind;
- // 0x2 padding for the union beginning.
union { // carried over from diego's FR/LG work, seems to be the same struct
// in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union.
u8 *script;
- // hidden item type probably
+ // hidden item type
struct {
- u8 filler6[0x2];
+ u16 item;
u16 hiddenItemId; // flag offset to determine flag lookup
} hiddenItem;
diff --git a/include/global.h b/include/global.h
index 9ae892b5c..027065481 100644
--- a/include/global.h
+++ b/include/global.h
@@ -61,8 +61,6 @@
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
-#define HEAP_SIZE 0x1C000
-
extern u8 gStringVar1[];
extern u8 gStringVar2[];
extern u8 gStringVar3[];
@@ -178,12 +176,14 @@ enum
OPTIONS_BATTLE_STYLE_SET
};
-struct Coords8 {
+struct Coords8
+{
s8 x;
s8 y;
};
-struct UCoords8 {
+struct UCoords8
+{
u8 x;
u8 y;
};
@@ -295,11 +295,25 @@ struct UnknownSaveBlock2Struct
u8 field_EB;
}; // sizeof = 0xEC
-struct UnkRecordMixingStruct
+struct ApprenticeMon
{
- u8 field_0[0x34];
+ u16 species;
+ u16 moves[4];
+ u16 item;
+};
+
+struct Apprentice
+{
+ u8 id:5;
+ u8 lvlMode:2; // + 1
+ u8 field_1;
+ u8 number;
+ struct ApprenticeMon monData[3];
+ u16 easyChatWords[6];
u8 playerId[4];
- u8 field_38[10];
+ u8 playerName[PLAYER_NAME_LENGTH];
+ u8 language;
+ u32 unk40;
};
struct UnknownPokemonStruct
@@ -466,6 +480,28 @@ struct BattleFrontier
/*0xEFC*/ struct FrontierMonData field_EFC[3];
};
+struct Sav2_B8
+{
+ u8 unk0_0:2;
+ u8 unk0_1:2;
+ u8 unk0_2:2;
+ u8 unk0_3:2;
+ u16 unk2;
+};
+
+struct PlayersApprentice
+{
+ /*0xB0*/ u8 id;
+ /*0xB1*/ u8 activeLvlMode:2; // +1, 0 means not active
+ /*0xB1*/ u8 field_B1_1:4;
+ /*0xB1*/ u8 field_B1_2:2;
+ /*0xB2*/ u8 field_B2_0:3;
+ /*0xB2*/ u8 field_B2_1:2;
+ /*0xB3*/ u8 field_B3;
+ /*0xB4*/ u8 monIds[3];
+ /*0xB8*/ struct Sav2_B8 field_B8[9];
+};
+
struct SaveBlock2
{
/*0x00*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
@@ -489,14 +525,8 @@ struct SaveBlock2
/*0xA0*/ struct Time lastBerryTreeUpdate;
/*0xA8*/ u32 field_A8;
/*0xAC*/ u32 encryptionKey;
-
- // TODO: fix and verify labels
- /*0xB0*/ u8 field_B0;
- /*0xB1*/ u8 field_B1;
- /*0xB2*/ u8 field_B2_0:3;
- /*0xB2*/ u8 field_B2_1:2;
- /*0xB3*/ u8 field_B3[0x29];
- /*0xDC*/ struct UnkRecordMixingStruct field_DC[4];
+ /*0xB0*/ struct PlayersApprentice playerApprentice;
+ /*0xDC*/ struct Apprentice apprentices[4];
/*0x1EC*/ struct BerryCrush berryCrush;
/*0x1FC*/ struct PokemonJumpResults pokeJump;
/*0x20C*/ struct BerryPickingResults berryPick;
diff --git a/include/item_menu.h b/include/item_menu.h
index 8a474bc0f..b80d0628e 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -54,8 +54,10 @@ extern u16 gSpecialVar_ItemId;
void sub_81AAC14(void);
void sub_81AAC50(void);
void sub_81AAC70(void);
+void sub_81AAC28(void);
void bag_menu_mail_related(void);
void CB2_BagMenuFromStartMenu(void);
u8 sub_81ABB2C(u8 pocketId);
+bool8 UseRegisteredKeyItemOnField(void);
#endif //GUARD_item_menu_H
diff --git a/include/link.h b/include/link.h
index 9561728bd..f12f0990f 100644
--- a/include/link.h
+++ b/include/link.h
@@ -97,7 +97,8 @@ enum
EXCHANGE_IN_PROGRESS,
EXCHANGE_STAT_4,
EXCHANGE_STAT_5,
- EXCHANGE_STAT_6
+ EXCHANGE_STAT_6,
+ EXCHANGE_STAT_7
};
enum
@@ -258,6 +259,8 @@ void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 un
void sub_800B348(void);
void sub_800B3A4(u32 who);
bool32 sub_800A07C(void);
+void sub_800AB98(void);
+void sub_800AA04(u8 a0);
extern u16 gLinkPartnersHeldKeys[6];
extern u32 gLinkDebugSeed;
@@ -292,6 +295,7 @@ extern u32 gFiller_0300315c;
extern u32 gFiller_03004138;
extern u32 gFiller_0300413C;
extern u32 gFiller_03003080;
+extern struct LinkPlayer gLocalLinkPlayer;
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void);
bool32 sub_800A03C(void);
@@ -302,5 +306,10 @@ bool8 sub_800A4D8(u8 a0);
u8 sub_800A9D8(void);
u8 sub_800A0C8(s32, s32);
u16 *sub_801B058(void);
+u8 sub_800A9A8(void);
+void sub_800AD10(void);
+void sub_800AB18(void);
+void sub_8009F18(void);
+bool8 sub_800AA60(void);
#endif // GUARD_LINK_H
diff --git a/include/malloc.h b/include/malloc.h
index 6efa8fbef..c215f56c0 100644
--- a/include/malloc.h
+++ b/include/malloc.h
@@ -13,6 +13,7 @@
}
extern u8 gHeap[];
+
void *Alloc(u32 size);
void *AllocZeroed(u32 size);
void Free(void *pointer);
diff --git a/include/menu.h b/include/menu.h
index cddab0870..d105eb5ec 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -50,7 +50,7 @@ void blit_move_info_icon(u8 winId, u8 a2, u16 x, u16 y);
void reset_temp_tile_data_buffers(void);
void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, int size, u16 offset, u8 mode);
bool8 free_temp_tile_data_buffers_if_possible(void);
-struct WindowTemplate CreateWindowTemplate(u8, u8, u8, u8, u8, u8, u16);
+struct WindowTemplate CreateWindowTemplate(u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock);
void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirstTileNum, u8 borderPalette, u8 initialCursorPos);
void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, int size, u16 offset, u8 mode);
s8 Menu_ProcessInputNoWrap_(void);
@@ -87,5 +87,6 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left
void sub_8199C30(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette);
void sub_8199D3C(void *ptr, int delta, int width, int height, bool32 is8BPP);
void sub_8198204(const u8 *string, const u8 *string2, u8 a3, u8 a4, bool8 copyToVram);
+void sub_8197AE8(bool8 copyToVram);
#endif // GUARD_MENU_H
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index edffc711f..8301a22f2 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -50,7 +50,7 @@ bool8 MetatileBehavior_IsSecretBaseCave(u8);
bool8 MetatileBehavior_IsSecretBaseTree(u8);
bool8 MetatileBehavior_IsSecretBaseShrub(u8);
bool8 MetatileBehavior_IsSecretBasePC(u8);
-bool8 MetatileBehavior_IsSecretBaseRegisterPC(u8);
+bool8 MetatileBehavior_IsRecordMixingSecretBasePC(u8);
bool8 MetatileBehavior_IsMB_B2(u8);
bool8 MetatileBehavior_IsBlockDecoration(u8);
bool8 MetatileBehavior_IsSecretBaseImpassable(u8);
@@ -67,7 +67,7 @@ bool8 MetatileBehavior_IsSecretBaseBreakableDoor(u8);
bool8 MetatileBehavior_IsSecretBaseSoundMat(u8);
bool8 MetatileBehavior_IsSecretBaseGlitterMat(u8);
bool8 MetatileBehavior_IsSecretBaseSandOrnament(u8);
-bool8 MetatileBehavior_IsSecretBaseTvOrShield(u8);
+bool8 MetatileBehavior_IsSecretBaseShieldOrToyTV(u8);
bool8 MetatileBehavior_IsPlayerRoomPCOn(u8);
bool8 MetatileBehavior_HasRipples(u8);
bool8 MetatileBehavior_IsPuddle(u8);
@@ -106,14 +106,14 @@ bool8 MetatileBehavior_IsPacifilogHorizontalLog2(u8);
bool8 MetatileBehavior_IsPacifidlogLog(u8);
bool8 MetatileBehavior_IsTrickHousePuzzleDoor(u8);
bool8 MetatileBehavior_IsRegionMap(u8);
-bool8 MetatileBehavior_IsClosedSootopolisGymDoor(u8);
+bool8 MetatileBehavior_IsClosedSootopolisDoor(u8);
bool8 MetatileBehavior_IsUnknownClosedDoor(u8);
bool8 MetatileBehavior_IsRoulette(u8);
bool8 MetatileBehavior_IsPokeblockFeeder(u8);
bool8 MetatileBehavior_IsSecretBaseJumpMat(u8);
bool8 MetatileBehavior_IsSecretBaseSpinMat(u8);
bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8);
-bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8);
+bool8 MetatileBehavior_IsLavaridge1FWarp(u8);
bool8 MetatileBehavior_IsAquaHideoutWarp(u8);
bool8 MetatileBehavior_IsWarpOrBridge(u8);
bool8 MetatileBehavior_IsMossdeepGymWarp(u8);
@@ -130,7 +130,7 @@ bool8 MetatileBehavior_IsHorizontalRail(u8);
bool8 MetatileBehavior_IsSeaweed(u8);
bool8 MetatileBehavior_IsRunningDisallowed(u8);
bool8 MetatileBehavior_IsCuttableGrass(u8);
-bool8 MetatileBehavior_IsRunningShoesInstruction(u8);
+bool8 MetatileBehavior_IsRunningShoesManual(u8);
bool8 MetatileBehavior_IsPictureBookShelf(u8);
bool8 MetatileBehavior_IsBookShelf(u8);
bool8 MetatileBehavior_IsPokeCenterBookShelf(u8);
diff --git a/include/overworld.h b/include/overworld.h
index f6856ab0c..3dce20ab2 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -25,6 +25,9 @@ extern u16 *gBGTilemapBuffers3;
extern void (*gFieldCallback)(void);
+extern u8 gUnknown_03005DB4;
+extern u8 gFieldLinkPlayerCount;
+
// Exported ROM declarations
extern const struct UCoords32 gDirectionToVectors[];
diff --git a/include/palette.h b/include/palette.h
index d14fa1fcd..c14e9f453 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -55,7 +55,7 @@ bool8 unref_sub_8073D3C(u32, u8, u8, u8, u16);
void unref_sub_8073D84(u8, u32 *);
void ResetPaletteStructByUid(u16);
void ResetPaletteStruct(u8);
-void ResetPaletteFadeControl();
+void ResetPaletteFadeControl(void);
void unref_sub_8074168(u16);
void unref_sub_8074194(u16);
void InvertPlttBuffer(u32);
diff --git a/include/party_menu.h b/include/party_menu.h
index a0a8bdbe6..0103099e4 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -55,8 +55,8 @@ void sub_81B1370(u8 taskId);
void display_pokemon_menu_message(u32 windowId);
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();
+u8 sub_81B1BD4(void);
+void sub_81B8448(void);
void sub_81B8518(u8 unused);
u8 sub_81B1360(void);
void sub_81B8904(u8 arg0, void (*callback)(void));
diff --git a/include/pokemon.h b/include/pokemon.h
index 9eddd8155..8259e7d34 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -94,6 +94,8 @@
#define MON_DATA_SPATK2 87
#define MON_DATA_SPDEF2 88
+#define MAX_LEVEL 100
+
#define OT_ID_RANDOM_NO_SHINY 2
#define OT_ID_PRESET 1
#define OT_ID_PLAYER_ID 0
@@ -110,10 +112,47 @@
#define MON_FEMALE 0xFE
#define MON_GENDERLESS 0xFF
+#define TYPE_NORMAL 0x00
+#define TYPE_FIGHTING 0x01
+#define TYPE_FLYING 0x02
+#define TYPE_POISON 0x03
+#define TYPE_GROUND 0x04
+#define TYPE_ROCK 0x05
+#define TYPE_BUG 0x06
+#define TYPE_GHOST 0x07
+#define TYPE_STEEL 0x08
+#define TYPE_MYSTERY 0x09
+#define TYPE_FIRE 0x0a
+#define TYPE_WATER 0x0b
+#define TYPE_GRASS 0x0c
+#define TYPE_ELECTRIC 0x0d
+#define TYPE_PSYCHIC 0x0e
+#define TYPE_ICE 0x0f
+#define TYPE_DRAGON 0x10
+#define TYPE_DARK 0x11
+
+#define FRIENDSHIP_EVENT_GROW_LEVEL 0x0
+#define FRIENDSHIP_EVENT_VITAMIN 0x1 // unused
+#define FRIENDSHIP_EVENT_BATTLE_ITEM 0x2 // unused
+#define FRIENDSHIP_EVENT_LEAGUE_BATTLE 0x3
+#define FRIENDSHIP_EVENT_LEARN_TMHM 0x4
+#define FRIENDSHIP_EVENT_WALKING 0x5
+#define FRIENDSHIP_EVENT_FAINT_SMALL 0x6
+#define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 0x7
+#define FRIENDSHIP_EVENT_FAINT_LARGE 0x8
+
+#define STATUS_PRIMARY_NONE 0x0
+#define STATUS_PRIMARY_POISON 0x1
+#define STATUS_PRIMARY_PARALYSIS 0x2
+#define STATUS_PRIMARY_SLEEP 0x3
+#define STATUS_PRIMARY_FREEZE 0x4
+#define STATUS_PRIMARY_BURN 0x5
+#define STATUS_PRIMARY_POKERUS 0x6
+#define STATUS_PRIMARY_FAINTED 0x7
+
#define MAX_TOTAL_EVS 510
#define NUM_STATS 6
#define UNOWN_FORM_COUNT 28
-#define MAX_MON_LEVEL 100
struct PokemonSubstruct0
{
@@ -240,32 +279,6 @@ struct PokemonStorage
/*0x83C2*/ u8 boxWallpapers[14];
};
-struct UnknownPokemonSubStruct2
-{
- u16 species;
- u16 moves[4];
- u16 item;
-};
-
-struct UnknownPokemonStruct2
-{
- u8 field_0_0 : 5;
- u8 field_0_1 : 2;
- u8 field_1;
- u8 field_2;
- u8 field_3;
- struct UnknownPokemonSubStruct2 mons[3];
- u8 field_28[23];
- u8 language;
-};
-
-struct UnknownPokemonStruct3
-{
- u8 field_0[48];
- u16 field_30;
- u8 field_32[38];
-};
-
struct Unknown_806F160_Struct
{
u8 field_0_0:4;
@@ -447,7 +460,7 @@ extern const u8 gFacilityClassToTrainerClass[];
extern const struct BaseStats gBaseStats[];
extern const u8 *const gItemEffectTable[];
extern const struct Evolution gEvolutionTable[][EVOS_PER_MON];
-extern const u32 gExperienceTables[][MAX_MON_LEVEL + 1];
+extern const u32 gExperienceTables[][MAX_LEVEL + 1];
extern const u16 *const gLevelUpLearnsets[];
extern const u8 gUnknown_08329D22[];
extern const u8 gUnknown_08329D26[];
@@ -472,7 +485,7 @@ void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u
void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread);
void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src);
void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lvl50);
-void sub_8068528(struct Pokemon *mon, const struct UnknownPokemonStruct2 *src, u8 monId);
+void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId);
void CreateMonWithEVSpreadPersonalityOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId);
void sub_80686FC(struct Pokemon *mon, struct UnknownPokemonStruct *dest);
void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId);
diff --git a/include/pokenav.h b/include/pokenav.h
index b595e2be9..1fde8aa44 100644
--- a/include/pokenav.h
+++ b/include/pokenav.h
@@ -28,5 +28,13 @@ u16 sub_81D2C3C(void);
void sub_81D2C50(void);
u8 sub_81D28C8(const struct ListMenuItem *items, u16 numChoices);
void sub_81D2824(u16);
+bool32 InTrainerHill(void);
+bool8 EventObjectIsFarawayIslandMew(struct EventObject *);
+u32 sub_81D427C(void);
+void sub_81D4998(void);
+u8 GetCurrentTrainerHillMapId(void);
+u8 sub_81D6490(void);
+const struct WarpEvent *sub_81D6120(void);
+const struct WarpEvent *sub_81D6134(u8);
#endif //GUARD_POKENAV_H
diff --git a/include/rom6.h b/include/rom6.h
index 96c3b3ca2..8b133e56e 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 CheckObjectGraphicsInFrontOfPlayer(u8);
+bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId);
u8 oei_task_add(void);
#endif //GUARD_ROM6_H
diff --git a/include/rom_8011DC0.h b/include/rom_8011DC0.h
index f71e5d97d..b6ca0e248 100644
--- a/include/rom_8011DC0.h
+++ b/include/rom_8011DC0.h
@@ -9,5 +9,7 @@
void sub_8018438(void);
u16 mevent_081445C0(u8);
+void sub_801B990(u32, u32);
+u8 sub_8013F78(void);
#endif //GUARD_rom_8011DC0_H
diff --git a/include/rom_81BE66C.h b/include/rom_81BE66C.h
deleted file mode 100644
index 900daf4e7..000000000
--- a/include/rom_81BE66C.h
+++ /dev/null
@@ -1,12 +0,0 @@
-//
-// Created by Scott Norton on 9/6/17.
-//
-
-#ifndef GUARD_ROM_81BE66C_H
-#define GUARD_ROM_81BE66C_H
-
-bool32 InTrainerHill(void);
-bool8 EventObjectIsFarawayIslandMew(struct EventObject *);
-u32 sub_81D427C(void);
-
-#endif //GUARD_ROM_81BE66C_H
diff --git a/include/rotating_gate.h b/include/rotating_gate.h
index 2ae26aa5b..fd86a6b04 100644
--- a/include/rotating_gate.h
+++ b/include/rotating_gate.h
@@ -2,7 +2,7 @@
#define GUARD_ROTATING_GATE_H
void RotatingGatePuzzleCameraUpdate(s16, s16);
-void RotatingGate_InitPuzzleAndGraphics();
+void RotatingGate_InitPuzzleAndGraphics(void);
u32 CheckForRotatingGatePuzzleCollision(u8, s16, s16);
bool32 CheckForRotatingGatePuzzleCollisionWithoutAnimation(u8, s16, s16);
diff --git a/include/script.h b/include/script.h
index 2b5f8c2ce..755ff19a3 100644
--- a/include/script.h
+++ b/include/script.h
@@ -55,8 +55,8 @@ bool8 mapheader_run_first_tag2_script_list_match(void);
void mapheader_run_first_tag4_script_list_match(void);
u32 CalculateRamScriptChecksum(void);
void ClearRamScript(void);
-bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId);
-u8 *GetRamScript(u8 objectId, u8 *script);
+bool8 InitRamScript(const u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId);
+const u8 *GetRamScript(u8 objectId, const u8 *script);
bool32 sub_80991F8(void);
u8 *sub_8099244(void);
void sub_80992A0(u8 *script, u16 scriptSize);
diff --git a/include/script_menu.h b/include/script_menu.h
index c50bef00f..8870e80b9 100644
--- a/include/script_menu.h
+++ b/include/script_menu.h
@@ -13,5 +13,6 @@ s32 convert_pixel_width_to_tile_width(s32);
u8 CreateWindowFromRect(u8, u8, u8, u8);
void sub_80E2A78(u8);
u32 display_text_and_get_width(const u8*, u32);
+u8 sub_80E2D5C(u8 arg0, u8 tileWidth);
#endif //GUARD_SCRIPT_MENU_H
diff --git a/include/script_pokemon_util_80F87D8.h b/include/script_pokemon_util_80F87D8.h
index 555b3428b..68aec7eb6 100644
--- a/include/script_pokemon_util_80F87D8.h
+++ b/include/script_pokemon_util_80F87D8.h
@@ -3,5 +3,6 @@
#define GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
u16 sub_80F903C(void);
+void ReducePlayerPartyToThree(void);
#endif // GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
diff --git a/include/secret_base.h b/include/secret_base.h
index c20533698..4fa0d0c4a 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -16,5 +16,11 @@ void sub_80E8EE0(struct MapEvents const *events);
void sub_80E9238(u8 flagIn);
bool8 CurrentMapIsSecretBase(void);
void sub_80EA3E4(u8 taskId);
+bool8 sub_80E9680(void);
+void sub_80EB498(void);
+void sub_80EB56C(void);
+void sub_80EB9E0(void);
+void sub_80EBB28(void);
+void sub_80E9668(const struct MapPosition *position, const struct MapEvents *events);
#endif //GUARD_SECRET_BASE_H
diff --git a/include/shop.h b/include/shop.h
index 9b14a672e..067b8fee4 100644
--- a/include/shop.h
+++ b/include/shop.h
@@ -3,6 +3,42 @@
extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3];
+enum
+{
+ MART_TYPE_0, // normal mart
+ MART_TYPE_1,
+ MART_TYPE_2,
+};
+
+struct MartInfo
+{
+ /*0x0*/ void (* callback) (void);
+ /*0x4*/ const struct MenuAction *menuActions;
+ /*0x8*/ const u16 *itemList;
+ /*0xC*/ u16 itemCount;
+ /*0xE*/ u8 windowId;
+ /*0xF*/ u8 martType;
+};
+
+struct BuyMenuLabel
+{
+ u8 label[16];
+};
+
+struct ShopData
+{
+ /*0x0000*/ u8 tilemapBuffers[4][0x800];
+ /*0x2000*/ u8 filler2000[0x4];
+ /*0x2004*/ u16 unk2004;
+ /*0x2006*/ u8 filler2006[0x2];
+ /*0x2008*/ u16 unk2008;
+ /*0x200A*/ u8 filler200A;
+ /*0x200B*/ u8 scrollIndicatorsTaskId;
+ /*0x200C*/ u8 unk200C;
+ /*0x200D*/ u8 unk200D[2];
+ /*0x200F*/ u8 filler200F[0xA1];
+};
+
void CreatePokemartMenu(const u16 *);
void CreateDecorationShop1Menu(const u16 *);
void CreateDecorationShop2Menu(const u16 *);
diff --git a/include/string_util.h b/include/string_util.h
index f26646082..7b685fcea 100644
--- a/include/string_util.h
+++ b/include/string_util.h
@@ -24,7 +24,7 @@ u8 *ConvertUIntToDecimalStringN(u8 *dest, u32 value, enum StringConvertMode mode
u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n);
u8 *StringExpandPlaceholders(u8 *dest, const u8 *src);
u8 *StringBraille(u8 *dest, const u8 *src);
-u8 *GetExpandedPlaceholder(u32 id);
+const u8 *GetExpandedPlaceholder(u32 id);
u8 *StringFill(u8 *dest, u8 c, u16 n);
u8 *StringCopyPadded(u8 *dest, const u8 *src, u8 c, u16 n);
u8 *StringFillWithTerminator(u8 *dest, u16 n);
diff --git a/include/strings.h b/include/strings.h
index e72360563..4ea33635b 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -151,8 +151,6 @@ extern const u8 gMenuText_Confirm[];
extern const u8 gMenuText_Show[];
extern const u8 gMenuText_Give2[];
-extern const u8 gText_Cancel2[];
-
extern const u8 gText_WithdrawPokemon[];
extern const u8 gText_WithdrawMonDescription[];
extern const u8 gText_DepositPokemon[];
@@ -843,4 +841,19 @@ extern const u8 gText_TwoDashes[];
extern const u8 *const gReturnToXStringsTable2[];
+extern const u8 gText_XPLink[];
+extern const u8 gText_ConfirmLinkWhenPlayersReady[];
+extern const u8 gText_ConfirmStartLinkWithXPlayers[];
+extern const u8 gText_AwaitingLinkup[];
+extern const u8 gText_PleaseWaitForLink[];
+extern const u8 gText_BronzeCard[];
+extern const u8 gText_CopperCard[];
+extern const u8 gText_SilverCard[];
+extern const u8 gText_GoldCard[];
+
+extern const u8 gText_CanIHelpWithAnythingElse[];
+extern const u8 gText_AnythingElseICanHelp[];
+extern const u8 gText_QuitShopping[];
+extern const u8 gText_PokedollarVar1[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index e2120efa3..f677f2ced 100644
--- a/include/text.h
+++ b/include/text.h
@@ -76,6 +76,7 @@
#define CHAR_y 0xED
#define CHAR_z 0xEE
#define CHAR_SPECIAL_F7 0xF7
+#define CHAR_SPECIAL_F8 0xF8
#define CHAR_SPECIAL_F9 0xF9
#define CHAR_COLON 0xF0
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
diff --git a/include/trainer_card.h b/include/trainer_card.h
index af603444f..d80a5fa52 100644
--- a/include/trainer_card.h
+++ b/include/trainer_card.h
@@ -27,13 +27,16 @@ struct TrainerCard
/*0x24*/ u32 money;
/*0x28*/ u16 var_28[4];
/*0x30*/ u8 playerName[8];
- /*0x38*/ u8 emeraldAddedUnknownFields[0x64-0x38];
+ /*0x38*/ u8 emeraldAddedUnknownFields[0x54-0x38];
+ /*0x54*/ u16 monSpecies[2];
+ /*0x58*/ u8 emeraldAddedUnknownFields2[0x64-0x58];
};
extern struct TrainerCard gTrainerCards[4];
void sub_80C3120(struct TrainerCard *arg0, u16 *arg1, u8 gameVersion);
-void sub_80C4E74(u8 arg0, void (*callback)(void));
-void sub_80C30A4(u16 *arg0);
+void TrainerCard_ShowLinkCard(u8 arg0, void (*callback)(void));
+void TrainerCard_GenerateCardForPlayer(struct TrainerCard *);
+u8 sub_80C4904(u8);
#endif // GUARD_TRAINER_CARD_H
diff --git a/include/tv.h b/include/tv.h
index 7a938f888..4f1d7730f 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -50,5 +50,6 @@ void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlaye
void BravoTrainerPokemonProfile_BeforeInterview1(u16 move);
void UpdateTVScreensOnMap(int, int);
void TV_PrintIntToStringVar(u8 varIdx, int value);
+void SaveRecordedItemPurchasesForTVShow(void);
#endif //GUARD_TV_H
diff --git a/include/util.h b/include/util.h
index 63887b13f..997c8f713 100644
--- a/include/util.h
+++ b/include/util.h
@@ -13,5 +13,6 @@ int CountTrailingZeroBits(u32 value);
u16 CalcCRC16(u8 *data, s32 length);
u16 CalcCRC16WithTable(u8 *data, u32 length);
u32 CalcByteArraySum(const u8* data, u32 length);
+void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor);
#endif // GUARD_UTIL_H