diff options
Diffstat (limited to 'include')
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 |