summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h38
-rw-r--r--include/battle_anim.h31
-rw-r--r--include/battle_main.h5
-rw-r--r--include/bg.h30
-rw-r--r--include/blit.h8
-rw-r--r--include/constants/event_objects.h26
-rw-r--r--include/constants/field_effects.h2
-rw-r--r--include/constants/flags.h14
-rw-r--r--include/constants/global.h77
-rw-r--r--include/constants/maps.h1
-rw-r--r--include/constants/rgb.h3
-rw-r--r--include/constants/songs.h2
-rw-r--r--include/constants/vars.h8
-rw-r--r--include/credits.h3
-rw-r--r--include/data2.h2
-rw-r--r--include/decompress.h12
-rw-r--r--include/dma3.h45
-rw-r--r--include/event_object_movement.h3
-rw-r--r--include/event_scripts.h7
-rw-r--r--include/field_control_avatar.h5
-rw-r--r--include/field_screen_effect.h8
-rw-r--r--include/field_specials.h8
-rw-r--r--include/field_weather.h4
-rw-r--r--include/fieldmap.h19
-rw-r--r--include/fldeff.h61
-rw-r--r--include/fldeff_cut.h13
-rw-r--r--include/fldeff_groundshake.h6
-rw-r--r--include/fldeff_misc.h41
-rwxr-xr-xinclude/fldeff_softboiled.h7
-rw-r--r--include/gba/defines.h2
-rw-r--r--include/gba/io_reg.h3
-rw-r--r--include/global.h111
-rw-r--r--include/graphics.h55
-rw-r--r--include/item_menu.h1
-rw-r--r--include/librfu.h2
-rw-r--r--include/link.h3
-rw-r--r--include/link_rfu.h2
-rw-r--r--include/load_save.h10
-rw-r--r--include/menu.h17
-rw-r--r--include/mirage_tower.h8
-rw-r--r--include/mon_markings.h9
-rw-r--r--include/overworld.h41
-rw-r--r--include/palette.h2
-rw-r--r--include/party_menu.h91
-rw-r--r--include/pokemon.h15
-rw-r--r--include/pokemon_icon.h5
-rw-r--r--include/pokemon_storage_system.h137
-rwxr-xr-xinclude/pokemon_summary_screen.h5
-rw-r--r--include/rom6.h18
-rw-r--r--include/rom_8011DC0.h1
-rw-r--r--include/roulette_util.h55
-rw-r--r--include/save_location.h6
-rw-r--r--include/secret_base.h2
-rw-r--r--include/strings.h189
-rw-r--r--include/text.h2
-rw-r--r--include/trade.h8
-rw-r--r--include/trainer_card.h1
-rw-r--r--include/util.h1
-rw-r--r--include/window.h6
59 files changed, 841 insertions, 456 deletions
diff --git a/include/battle.h b/include/battle.h
index 52c4ee8ae..73caed16f 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -302,11 +302,10 @@ struct BattleResults
u8 playerSwitchesCounter; // 0x2
u8 unk3; // 0x3
u8 unk4; // 0x4
- u8 playerMonWasDamaged:1; // 0x5
+ u8 playerMonWasDamaged:1; // 0x5
u8 usedMasterBall:1; // 0x5
u8 caughtMonBall:4; // 0x5
u8 shinyWildMon:1; // 0x5
- u8 unk5_7:1; // 0x5
u16 playerMon1Species; // 0x6
u8 playerMon1Name[POKEMON_NAME_LENGTH + 1]; // 0x8
u8 battleTurnCounter; // 0x13
@@ -411,16 +410,16 @@ struct BattleStruct
{
u8 turnEffectsTracker;
u8 turnEffectsBattlerId;
- u8 filler2;
+ u8 unused_0;
u8 turnCountersTracker;
u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access.
u8 moveTarget[MAX_BATTLERS_COUNT];
u8 expGetterMonId;
- u8 field_11;
+ u8 unused_1;
u8 wildVictorySong;
u8 dynamicMoveType;
u8 wrappedBy[MAX_BATTLERS_COUNT];
- u16 assistPossibleMoves[PARTY_SIZE * 4]; // Each of mons can know max 4 moves.
+ u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves.
u8 focusPunchBattlerId;
u8 battlerPreventingSwitchout;
u8 moneyMultiplier;
@@ -437,28 +436,25 @@ struct BattleStruct
u8 field_60[4][3];
u8 runTries;
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1];
- u8 field_78;
+ u8 unused_2;
u8 safariGoNearCounter;
u8 safariPkblThrowCounter;
u8 safariEscapeFactor;
u8 safariCatchFactor;
- u8 field_7D;
- u8 field_7E;
+ u8 field_7D; // unknown spriteId
+ u8 field_7E; // unknown spriteId
u8 formToChangeInto;
u8 chosenMovePositions[MAX_BATTLERS_COUNT];
u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT];
- u8 field_88;
- u8 field_89;
- u8 field_8A;
- u8 field_8B;
- u8 field_8C;
- u8 field_8D;
+ u8 unused_3[3];
+ u8 field_8B; // related to player's pokemon switching
+ u8 unused_4[2];
u8 stringMoveType;
u8 expGetterBattlerId;
- u8 field_90;
- u8 field_91;
- u8 field_92;
- u8 field_93;
+ u8 unused_5;
+ u8 field_91; // related to gAbsentBattlerFlags, possibly absent flags turn ago?
+ u8 field_92; // battle palace related
+ u8 field_93; // related to choosing pokemon?
u8 wallyBattleState;
u8 wallyMovesState;
u8 wallyWaitFrames;
@@ -481,11 +477,11 @@ struct BattleStruct
u8 switchInItemsCounter;
u8 arenaTurnCounter;
u8 turnSideTracker;
- u8 fillerDC[0xDF-0xDC];
+ u8 unused_6[3];
u8 givenExpMons; // Bits for enemy party's pokemon that gave exp to player's party.
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_180; // weird field, used in battle_main.c, once accessed as an array of u32 overwriting the field below
u8 field_181;
u8 field_182;
u8 field_183;
@@ -496,7 +492,7 @@ struct BattleStruct
u8 atkCancellerTracker;
struct BattleTvMovePoints tvMovePoints;
struct BattleTv tv;
- u8 notSureWhatFieldLol[0x28];
+ u8 unused_7[0x28];
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
s8 arenaMindPoints[2];
s8 arenaSkillPoints[2];
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 1c2093da9..4723fb0d5 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -58,7 +58,7 @@ void DestroyAnimSprite(struct Sprite *sprite);
void DestroyAnimVisualTask(u8 taskId);
void DestroyAnimSoundTask(u8 taskId);
bool8 IsBattlerSpriteVisible(u8 battlerId);
-void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible);
+void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible);
bool8 IsContest(void);
s8 BattleAnimAdjustPanning(s8 pan);
s8 BattleAnimAdjustPanning2(s8 pan);
@@ -78,8 +78,8 @@ void sub_80A6450(struct Sprite *sprite);
void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y);
void DestroySpriteAndMatrix(struct Sprite *sprite);
void AnimTranslateLinearSimple(struct Sprite *sprite);
-void InitSpritePosToAnimAttacker(struct Sprite *sprite, u8 a2);
-void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 a2);
+void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets);
+void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets);
void StartAnimLinearTranslation(struct Sprite *sprite);
void InitAnimArcTranslation(struct Sprite *sprite);
bool8 AnimTranslateLinear(struct Sprite *sprite);
@@ -94,7 +94,7 @@ void sub_80A66DC(struct Sprite *sprite);
void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite);
void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite);
void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 a2);
-s16 sub_80A861C(u8 battlerId, u8 a2);
+s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 a2);
u8 GetBattlerYCoordWithElevation(u8 battlerId);
void WaitAnimForDuration(struct Sprite *sprite);
void sub_80A7938(struct Sprite *sprite);
@@ -122,7 +122,7 @@ s16 CloneBattlerSpriteWithBlend(u8);
void obj_delete_but_dont_free_vram(struct Sprite*);
u8 sub_80A89C8(int, u8, int);
void sub_80A6D60(struct UnknownAnimStruct2*, const void*, u32);
-void sub_80A6CC0(u32, const void*, u32);
+void sub_80A6CC0(u32, const u32*, u32);
void sub_80A6DAC(bool8);
void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *);
void sub_80A653C(struct Sprite *);
@@ -148,7 +148,9 @@ void sub_80A6BFC(struct UnknownAnimStruct2 *unk, u8 unused);
u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10);
void sub_80A749C(struct Sprite *sprite);
void sub_80A6814(u8 taskId);
-void sub_80A8610(struct Sprite *sprite);
+void sub_80A6DEC(struct Sprite *sprite);
+void DestroySpriteAndFreeResources_(struct Sprite *sprite);
+void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId);
enum
{
@@ -159,6 +161,17 @@ enum
BATTLER_COORD_Y_PIC_OFFSET_DEFAULT,
};
+enum
+{
+ BATTLER_COORD_ATTR_HEIGHT,
+ BATTLER_COORD_ATTR_WIDTH,
+ BATTLER_COORD_ATTR_TOP,
+ BATTLER_COORD_ATTR_BOTTOM,
+ BATTLER_COORD_ATTR_LEFT,
+ BATTLER_COORD_ATTR_RIGHT,
+ BATTLER_COORD_ATTR_RAW_BOTTOM,
+};
+
u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId);
bool8 IsBattlerSpritePresent(u8 battlerId);
@@ -172,6 +185,10 @@ void oamt_add_pos2_onto_pos1(struct Sprite *sprite);
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
+// battle_anim_80A64EC.c
+void sub_80A64EC(struct Sprite *sprite);
+void sub_80A718C(struct Sprite *sprite);
+
// battle_anim_80A9C70.s
#define STAT_ANIM_PLUS1 15
#define STAT_ANIM_PLUS2 39
@@ -193,7 +210,7 @@ u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 selectedPalettes,
// battle_anim_utility_funcs.s
void sub_8116EB4(u8);
-void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u8 *arg8, const u8 *arg9, const u16 *palette);
+void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *arg8, const u32 *arg9, const u32 *palette);
u32 UnpackSelectedBattleAnimPalettes(s16);
diff --git a/include/battle_main.h b/include/battle_main.h
index 18bdde2f1..c134f819f 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -54,7 +54,7 @@ void sub_8038B74(struct Sprite *sprite);
void sub_8038D64(void);
u32 sub_80391E0(u8 arrayId, u8 caseId);
u32 sub_80397C4(u32 setId, u32 tableId);
-void oac_poke_opponent(struct Sprite *sprite);
+void SpriteCb_WildMon(struct Sprite *sprite);
void SpriteCallbackDummy_2(struct Sprite *sprite);
void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
void sub_8039AD8(struct Sprite *sprite);
@@ -86,6 +86,9 @@ bool8 TryRunFromBattle(u8 battlerId);
extern struct UnknownPokemonStruct4 gUnknown_02022FF8[3];
+extern const struct SpriteTemplate gUnknown_0831AC88;
+extern const struct OamData gOamData_831ACA8;
+extern const struct OamData gOamData_831ACB0;
extern const u8 gTypeEffectiveness[336];
extern const u8 gTypeNames[][TYPE_NAME_LENGTH + 1];
extern const struct TrainerMoney gTrainerMoneyTable[];
diff --git a/include/bg.h b/include/bg.h
index a10abaa8d..1366923f1 100644
--- a/include/bg.h
+++ b/include/bg.h
@@ -13,14 +13,16 @@ struct BGCntrlBitfield // for the I/O registers
enum
{
- BG_CTRL_ATTR_VISIBLE = 1,
- BG_CTRL_ATTR_CHARBASEINDEX = 2,
- BG_CTRL_ATTR_MAPBASEINDEX = 3,
- BG_CTRL_ATTR_SCREENSIZE = 4,
- BG_CTRL_ATTR_PALETTEMODE = 5,
- BG_CTRL_ATTR_PRIORITY = 6,
- BG_CTRL_ATTR_MOSAIC = 7,
- BG_CTRL_ATTR_WRAPAROUND = 8,
+ BG_ATTR_CHARBASEINDEX = 1,
+ BG_ATTR_MAPBASEINDEX,
+ BG_ATTR_SCREENSIZE,
+ BG_ATTR_PALETTEMODE,
+ BG_ATTR_MOSAIC,
+ BG_ATTR_WRAPAROUND,
+ BG_ATTR_PRIORITY,
+ BG_ATTR_METRIC,
+ BG_ATTR_TYPE,
+ BG_ATTR_BASETILE,
};
struct BgTemplate
@@ -38,8 +40,6 @@ void ResetBgs(void);
u8 GetBgMode(void);
void ResetBgControlStructs(void);
void Unused_ResetBgControlStruct(u8 bg);
-void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenSize, u8 paletteMode, u8 priority, u8 mosaic, u8 wraparound);
-u16 GetBgControlAttribute(u8 bg, u8 attributeId);
u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode);
void SetTextModeAndHideBgs(void);
bool8 IsInvalidBg(u8 bg);
@@ -56,11 +56,11 @@ void ShowBg(u8 bg);
void HideBg(u8 bg);
void SetBgAttribute(u8 bg, u8 attributeId, u8 value);
u16 GetBgAttribute(u8 bg, u8 attributeId);
-u32 ChangeBgX(u8 bg, u32 value, u8 op);
-u32 GetBgX(u8 bg);
-u32 ChangeBgY(u8 bg, u32 value, u8 op);
-u32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op);
-u32 GetBgY(u8 bg);
+s32 ChangeBgX(u8 bg, s32 value, u8 op);
+s32 GetBgX(u8 bg);
+s32 ChangeBgY(u8 bg, s32 value, u8 op);
+s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op);
+s32 GetBgY(u8 bg);
void SetBgAffine(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle);
u8 Unused_AdjustBgMosaic(u8 a1, u8 a2);
void SetBgTilemapBuffer(u8 bg, void *tilemap);
diff --git a/include/blit.h b/include/blit.h
index 2fe99d7bd..78f67766e 100644
--- a/include/blit.h
+++ b/include/blit.h
@@ -3,15 +3,15 @@
struct Bitmap
{
- u8* pixels;
+ u8 *pixels;
u32 width:16;
u32 height:16;
};
-void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height);
-void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey);
+void BlitBitmapRect4BitWithoutColorKey(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height);
+void BlitBitmapRect4Bit(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey);
void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset);
+void BlitBitmapRect4BitTo8Bit(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset);
void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
#endif // GUARD_BLIT_H
diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h
index 7a97c4caf..9973477da 100644
--- a/include/constants/event_objects.h
+++ b/include/constants/event_objects.h
@@ -241,12 +241,26 @@
#define EVENT_OBJ_GFX_LUGIA 237
#define EVENT_OBJ_GFX_HOOH 238
#define EVENT_OBJ_GFX_BARD_2 239
-#define EVENT_OBJ_GFX_HIPSTER 240
-#define EVENT_OBJ_GFX_TRADER 241
-#define EVENT_OBJ_GFX_STORYTELLER 242
-#define EVENT_OBJ_GFX_GIDDY 243
-#define EVENT_OBJ_GFX_PLACEHOLDER_1 244
-#define EVENT_OBJ_GFX_PLACEHOLDER_2 245
+
+// These are dynamic object gfx ids.
+// They correspond with the values of the VAR_OBJ_GFX_ID_X vars.
+// More info about them in include/constants/vars.h
+#define EVENT_OBJ_GFX_VAR_0 240
+#define EVENT_OBJ_GFX_VAR_1 241
+#define EVENT_OBJ_GFX_VAR_2 242
+#define EVENT_OBJ_GFX_VAR_3 243
+#define EVENT_OBJ_GFX_VAR_4 244
+#define EVENT_OBJ_GFX_VAR_5 245
+#define EVENT_OBJ_GFX_VAR_6 246
+#define EVENT_OBJ_GFX_VAR_7 247
+#define EVENT_OBJ_GFX_VAR_8 248
+#define EVENT_OBJ_GFX_VAR_9 249
+#define EVENT_OBJ_GFX_VAR_A 250
+#define EVENT_OBJ_GFX_VAR_B 251
+#define EVENT_OBJ_GFX_VAR_C 252
+#define EVENT_OBJ_GFX_VAR_D 253
+#define EVENT_OBJ_GFX_VAR_E 254
+#define EVENT_OBJ_GFX_VAR_F 255
#define SHADOW_SIZE_S 0
#define SHADOW_SIZE_M 1
diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h
index b93b98201..add195df8 100644
--- a/include/constants/field_effects.h
+++ b/include/constants/field_effects.h
@@ -67,6 +67,6 @@
#define FLDEFF_USE_TELEPORT 63
#define FLDEFF_64 64
#define FLDEFF_65 65
-#define FLDEFF_66 66
+#define FLDEFF_MOVE_DEOXYS_ROCK 66
#endif
diff --git a/include/constants/flags.h b/include/constants/flags.h
index c21affd61..b1dce013e 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -162,7 +162,7 @@
#define FLAG_0x09A 0x9A
#define FLAG_0x09B 0x9B
#define FLAG_0x09C 0x9C
-#define FLAG_0x09D 0x9D
+#define FLAG_FORCE_MIRAGE_TOWER_VISIBLE 0x9D
#define FLAG_0x09E 0x9E
#define FLAG_0x09F 0x9F
#define FLAG_0x0A0 0xA0
@@ -344,7 +344,7 @@
#define FLAG_0x14B 0x14B
#define FLAG_0x14C 0x14C
#define FLAG_0x14D 0x14D
-#define FLAG_0x14E 0x14E
+#define FLAG_MIRAGE_TOWER_VISIBLE 0x14E
#define FLAG_0x14F 0x14F// PLAYER CHOSE CLAW FOSSIL
#define FLAG_0x150 0x150// PLAYER CHOSE ROOT FOSSIL
#define FLAG_0x151 0x151
@@ -804,7 +804,7 @@
#define FLAG_HIDE_TRICK_HOUSE_ENTRANCE_MAN 0x368
#define FLAG_HIDE_LILYCOVE_CONTEST_HALL_POKEBLOCK_EXPERT 0x369
#define FLAG_HIDE_DESERT_UNDERPASS_FOSSIL 0x36A
-#define FLAG_HIDE_ROUTE_111_DESERT_RIVAL 0x36B
+#define FLAG_HIDE_ROUTE_111_PLAYER_DESCENT 0x36B
#define FLAG_HIDE_ROUTE_111_DESERT_FOSSIL 0x36C
#define FLAG_HIDE_MT_CHIMNEY_TRAINERS 0x36D
#define FLAG_HIDE_RUSTURF_TUNNEL_AQUA_GRUNT 0x36E
@@ -1355,10 +1355,10 @@
#define FLAG_SYS_PYRAMID_GOLD (SYSTEM_FLAGS + 0x71)
#define FLAG_SYS_FRONTIER_PASS (SYSTEM_FLAGS + 0x72)
-#define FLAG_0x8D3 (SYSTEM_FLAGS + 0x73)
-#define FLAG_0x8D4 (SYSTEM_FLAGS + 0x74)
-#define FLAG_0x8D5 (SYSTEM_FLAGS + 0x75)
-#define FLAG_0x8D6 (SYSTEM_FLAGS + 0x76)
+#define FLAG_0x8D3 (SYSTEM_FLAGS + 0x73)
+#define FLAG_DEOXYS_ROCK_COMPLETE (SYSTEM_FLAGS + 0x74)
+#define FLAG_0x8D5 (SYSTEM_FLAGS + 0x75)
+#define FLAG_0x8D6 (SYSTEM_FLAGS + 0x76)
#define FLAG_SYS_STORAGE_UNKNOWN_FLAG (SYSTEM_FLAGS + 0x77)
diff --git a/include/constants/global.h b/include/constants/global.h
new file mode 100644
index 000000000..ff28d6a4b
--- /dev/null
+++ b/include/constants/global.h
@@ -0,0 +1,77 @@
+#ifndef GUARD_CONSTANTS_GLOBAL_H
+#define GUARD_CONSTANTS_GLOBAL_H
+// Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen.
+// In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen.
+// In Gen 4 only, migrated Pokemon with Diamond, Pearl, or Platinum's ID show as "----------".
+// Gen 5 and up read Diamond, Pearl, or Platinum's ID as "Sinnoh".
+// In Gen 4 and up, migrated Pokemon with HeartGold or SoulSilver's ID show the otherwise unused "Johto" string.
+#define VERSION_SAPPHIRE 1
+#define VERSION_RUBY 2
+#define VERSION_EMERALD 3
+#define VERSION_FIRE_RED 4
+#define VERSION_LEAF_GREEN 5
+#define VERSION_HEART_GOLD 7
+#define VERSION_SOUL_SILVER 8
+#define VERSION_DIAMOND 10
+#define VERSION_PEARL 11
+#define VERSION_PLATINUM 12
+#define VERSION_GAMECUBE 15
+
+#define LANGUAGE_JAPANESE 1
+#define LANGUAGE_ENGLISH 2
+#define LANGUAGE_FRENCH 3
+#define LANGUAGE_ITALIAN 4
+#define LANGUAGE_GERMAN 5
+#define LANGUAGE_KOREAN 6 // 6 goes unused but the theory is it was meant to be Korean
+#define LANGUAGE_SPANISH 7
+
+#define GAME_VERSION (VERSION_EMERALD)
+#define GAME_LANGUAGE (LANGUAGE_ENGLISH)
+
+// capacities of various saveblock objects
+#define DAYCARE_MON_COUNT 2
+#define POKEBLOCKS_COUNT 40
+#define EVENT_OBJECTS_COUNT 16
+#define BERRY_TREES_COUNT 128
+#define FLAGS_COUNT 300
+#define VARS_COUNT 256
+#define MAIL_COUNT 16
+#define SECRET_BASES_COUNT 20
+#define TV_SHOWS_COUNT 25
+#define POKE_NEWS_COUNT 16
+#define PC_ITEMS_COUNT 50
+#define BAG_ITEMS_COUNT 30
+#define BAG_KEYITEMS_COUNT 30
+#define BAG_POKEBALLS_COUNT 16
+#define BAG_TMHM_COUNT 64
+#define BAG_BERRIES_COUNT 46
+#define EVENT_OBJECT_TEMPLATES_COUNT 64
+
+#define PYRAMID_BAG_ITEMS_COUNT 10
+#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
+
+// string lengths
+#define ITEM_NAME_LENGTH 14
+#define POKEMON_NAME_LENGTH 10
+#define PLAYER_NAME_LENGTH 7
+#define MAIL_WORDS_COUNT 9
+#define MOVE_NAME_LENGTH 12
+
+#define MALE 0
+#define FEMALE 1
+
+#define OPTIONS_BUTTON_MODE_NORMAL 0
+#define OPTIONS_BUTTON_MODE_LR 1
+#define OPTIONS_BUTTON_MODE_L_EQUALS_A 2
+
+#define OPTIONS_TEXT_SPEED_SLOW 0
+#define OPTIONS_TEXT_SPEED_MID 1
+#define OPTIONS_TEXT_SPEED_FAST 2
+
+#define OPTIONS_SOUND_MONO 0
+#define OPTIONS_SOUND_STEREO 1
+
+#define OPTIONS_BATTLE_STYLE_SHIFT 0
+#define OPTIONS_BATTLE_STYLE_SET 1
+
+#endif // GUARD_CONSTANTS_GLOBAL_H
diff --git a/include/constants/maps.h b/include/constants/maps.h
index bcb778422..c65f373af 100644
--- a/include/constants/maps.h
+++ b/include/constants/maps.h
@@ -587,6 +587,7 @@
// Map Group 33
#define MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE (0 | (33 << 8))
+#define MAP_GROUPS_COUNT 34
#define MAP_NONE (0x7F | (0x7F << 8))
#define MAP_UNDEFINED (0xFF | (0xFF << 8))
diff --git a/include/constants/rgb.h b/include/constants/rgb.h
index fd9c5c5a7..80d951f4b 100644
--- a/include/constants/rgb.h
+++ b/include/constants/rgb.h
@@ -2,6 +2,7 @@
#define GUARD_RGB_H
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
+#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F))
#define RGB_BLACK RGB(0, 0, 0)
@@ -12,6 +13,6 @@
#define RGB_YELLOW RGB(31, 31, 0)
#define RGB_MAGENTA RGB(31, 0, 31)
#define RGB_CYAN RGB(0, 31, 31)
-#define RGB_WHITEALPHA RGB_WHITE | 0x8000
+#define RGB_WHITEALPHA (RGB_WHITE | 0x8000)
#endif // GUARD_RGB_H
diff --git a/include/constants/songs.h b/include/constants/songs.h
index 58a8e725c..a459edd24 100644
--- a/include/constants/songs.h
+++ b/include/constants/songs.h
@@ -536,6 +536,6 @@
#define PH_NURSE_HELD 608
#define PH_NURSE_SOLO 609
-#define MUS_ROUTE_118 0x7FFF // What is this for?
+#define MUS_ROUTE_118 0x7FFF // map is split into 2 music sections. controlled by GetCurrLocationDefaultMusic().
#endif // GUARD_CONSTANTS_SONGS_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index faffe7c70..30df01f55 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -68,8 +68,8 @@
#define VAR_FRONTIER_GAMBLER_AMOUNT_BET 0x4032
#define VAR_FRONTIER_GAMBLER_PLACED_BET_F 0x4033
-#define VAR_0x4034 0x4034
-#define VAR_0x4035 0x4035
+#define VAR_DEOXYS_ROCK_STEP_COUNT 0x4034
+#define VAR_DEOXYS_ROCK_LEVEL 0x4035
#define VAR_STORAGE_UNKNOWN 0x4036
#define VAR_0x4037 0x4037
#define VAR_0x4038 0x4038
@@ -81,8 +81,8 @@
#define VAR_ALTERING_CAVE_WILD_SET 0x403E
#define VAR_0x403F 0x403F
#define VAR_DAYS 0x4040
-#define VAR_FANCLUB_UNKNOWN_1 0x4041
-#define VAR_FANCLUB_UNKNOWN_2 0x4042
+#define VAR_FANCLUB_UNKNOWN_1 0x4041
+#define VAR_FANCLUB_UNKNOWN_2 0x4042
#define VAR_DEPT_STORE_FLOOR 0x4043
#define VAR_0x4044 0x4044
#define VAR_POKELOT_PRIZE 0x4045
diff --git a/include/credits.h b/include/credits.h
index faad1058a..e7e58415b 100644
--- a/include/credits.h
+++ b/include/credits.h
@@ -7,5 +7,6 @@
extern EWRAM_DATA bool8 gHasHallOfFameRecords;
// Exported ROM declarations
+void sub_8175620(void);
-#endif //GUARD_CREDITS_H
+#endif // GUARD_CREDITS_H
diff --git a/include/data2.h b/include/data2.h
index 268dc9ac8..37ce5bf20 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -1,8 +1,6 @@
#ifndef GUARD_DATA2_H
#define GUARD_DATA2_H
-#define MOVE_NAME_LENGTH 12
-
struct MonCoords
{
// This would use a bitfield, but some function
diff --git a/include/decompress.h b/include/decompress.h
index 853230aea..02412defb 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -8,13 +8,13 @@ extern u8 gDecompressionBuffer[0x4000];
void LZDecompressWram(const u32 *src, void *dest);
void LZDecompressVram(const u32 *src, void *dest);
-u16 LoadCompressedObjectPic(const struct CompressedSpriteSheet *src);
-void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer);
-bool8 LoadCompressedObjectPicUsingHeap(const struct CompressedSpriteSheet* src);
+u16 LoadCompressedSpriteSheet(const struct CompressedSpriteSheet *src);
+void LoadCompressedSpriteSheetOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer);
+bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src);
-void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src);
-void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer);
-bool8 LoadCompressedObjectPaletteUsingHeap(const struct CompressedSpritePalette *src);
+void LoadCompressedSpritePalette(const struct CompressedSpritePalette *src);
+void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer);
+bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette *src);
void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species);
void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, void* buffer, s32 species);
diff --git a/include/dma3.h b/include/dma3.h
index 19a69ea80..8eff34f55 100644
--- a/include/dma3.h
+++ b/include/dma3.h
@@ -1,6 +1,51 @@
#ifndef GUARD_DMA3_H
#define GUARD_DMA3_H
+// Maximum amount of data we will transfer in one operation
+#define MAX_DMA_BLOCK_SIZE 0x1000
+
+#define Dma3CopyLarge_(src, dest, size, bit) \
+{ \
+ const void *_src = src; \
+ void *_dest = dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ if (_size <= MAX_DMA_BLOCK_SIZE) \
+ { \
+ DmaCopy##bit(3, _src, _dest, _size); \
+ break; \
+ } \
+ DmaCopy##bit(3, _src, _dest, MAX_DMA_BLOCK_SIZE); \
+ _src += MAX_DMA_BLOCK_SIZE; \
+ _dest += MAX_DMA_BLOCK_SIZE; \
+ _size -= MAX_DMA_BLOCK_SIZE; \
+ } \
+}
+
+#define Dma3CopyLarge16_(src, dest, size) Dma3CopyLarge_(src, dest, size, 16)
+#define Dma3CopyLarge32_(src, dest, size) Dma3CopyLarge_(src, dest, size, 32)
+
+#define Dma3FillLarge_(value, dest, size, bit) \
+{ \
+ void *_dest = dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ if (_size <= MAX_DMA_BLOCK_SIZE) \
+ { \
+ DmaFill##bit(3, value, _dest, _size); \
+ break; \
+ } \
+ DmaFill##bit(3, value, _dest, MAX_DMA_BLOCK_SIZE); \
+ _dest += MAX_DMA_BLOCK_SIZE; \
+ _size -= MAX_DMA_BLOCK_SIZE; \
+ } \
+}
+
+#define Dma3FillLarge16_(value, dest, size) Dma3FillLarge_(value, dest, size, 16)
+#define Dma3FillLarge32_(value, dest, size) Dma3FillLarge_(value, dest, size, 32)
+
void ClearDma3Requests(void);
void ProcessDma3Requests(void);
s16 RequestDma3Copy(const void *src, void *dest, u16 size, u8 mode);
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index cc45f1531..284bbe8db 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -59,6 +59,9 @@ struct LockedAnimEventObjects
};
extern const struct SpriteFrameImage gEventObjectPicTable_PechaBerryTree[];
+extern const struct OamData gEventObjectBaseOam_32x8;
+extern const struct OamData gEventObjectBaseOam_32x32;
+extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
extern const u8 gReflectionEffectPaletteMap[];
void ResetEventObjects(void);
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 2661494d3..e611dc6e0 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -538,7 +538,7 @@ extern const u8 EventScript_TV[];
extern const u8 EventScript_ClosedSootopolisDoor[];
extern const u8 SkyPillar_Outside_EventScript_2393F9[];
extern const u8 EventScript_CableBoxResults[];
-extern const u8 EventScript_2A4BAC[];
+extern const u8 EventScript_PokeBlockFeeder[];
extern const u8 Route110_TrickHouseEntrance_EventScript_26A22A[];
extern const u8 EventScript_RegionMap[];
extern const u8 EventScript_RunningShoesManual[];
@@ -579,4 +579,9 @@ extern const u8 BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88[];
extern const u8 BattleFrontier_BattlePyramidEmptySquare_EventScript_252C4F[];
extern const u8 BattleFrontier_BattlePyramidEmptySquare_EventScript_252C6A[];
+// fldeff misc
+extern const u8 EventScript_275A86[];
+extern const u8 EventScript_275ADF[];
+extern const u8 EventScript_275B38[];
+
#endif // GUARD_EVENT_SCRIPTS_H
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index 24adbe4b3..3cc4a8324 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -7,8 +7,8 @@ struct FieldInput
bool8 checkStandardWildEncounter:1;
bool8 pressedStartButton:1;
bool8 pressedSelectButton:1;
- bool8 input_field_0_4:1;
- bool8 input_field_0_5:1;
+ bool8 heldDirection:1;
+ bool8 heldDirection2:1;
bool8 tookStep:1;
bool8 pressedBButton:1;
bool8 input_field_1_0:1;
@@ -20,7 +20,6 @@ struct FieldInput
bool8 input_field_1_6:1;
bool8 input_field_1_7:1;
u8 dpadDirection;
- u8 input_field_3;
};
void FieldClearPlayerInput(struct FieldInput *pStruct);
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index f3ac2e866..3daf8d892 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -19,11 +19,11 @@ void sub_80AF688(void);
bool8 sub_80AF6A4(void);
void sub_80AF6D4(void);
void sub_80AF6F0(void);
-void sub_80AF734(void);
-void sp13E_warp_to_last_warp(void);
+void DoWarp(void);
+void DoDiveWarp(void);
void sub_80AF79C(void);
-void sub_80AF7D0(void);
-void sp13F_fall_to_last_warp(void);
+void DoDoorWarp(void);
+void DoFallWarp(void);
void sub_80AF80C(u8 metatileBehavior);
void sub_80AF828(void);
void sub_80AF838(void);
diff --git a/include/field_specials.h b/include/field_specials.h
index 5adc7f3cb..10433299b 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -6,7 +6,7 @@ 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);
+void IncrementBirthIslandRockStepCount(void);
bool8 sub_813B3B0(void);
bool8 ShouldDoBrailleRegicePuzzle(void);
bool32 is_tile_that_overrides_player_control(void);
@@ -15,7 +15,13 @@ bool32 sub_8138168(void);
bool32 sub_81381B0(void);
bool32 sub_81381F8(void);
bool32 CountSSTidalStep(u16 delta);
+u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y);
void sub_813A128(void);
void sub_813A878(u8 a0);
+u8 sub_813BADC(u8 a0);
+bool8 sub_813B9C0(void);
+void SetShoalItemFlag(u16 v0);
+void UpdateFrontierManiac(u16 a0);
+void UpdateFrontierGambler(u16 a0);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/field_weather.h b/include/field_weather.h
index c032183e1..91dcef1dc 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -134,6 +134,10 @@ struct Weather
// field_weather.c
extern struct Weather gWeather;
extern struct Weather *const gWeatherPtr;
+extern const u16 gUnknown_083970E8[];
+
+// field_weather_effect.c
+extern const u8 gWeatherFog1Tiles[];
void StartWeather(void);
void ChangeWeather(u8 weather);
diff --git a/include/fieldmap.h b/include/fieldmap.h
index a50c79b43..3f5cc5ec8 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -7,8 +7,9 @@
#define NUM_METATILES_TOTAL 1024
#define NUM_PALS_IN_PRIMARY 6
#define NUM_PALS_TOTAL 13
+#define MAX_MAP_DATA_SIZE 0x2800
-extern struct BackupMapLayout gUnknown_03005DC0;
+extern struct BackupMapLayout gBackupMapLayout;
u32 MapGridGetMetatileIdAt(int, int);
u32 MapGridGetMetatileBehaviorAt(int, int);
@@ -19,23 +20,19 @@ bool8 MapGridIsImpassableAt(int, int);
int GetMapBorderIdAt(int x, int y);
int CanCameraMoveInDirection(int direction);
u16 GetBehaviorByMetatileId(u16 metatileId);
-void sav1_camera_get_focus_coords(u16 *x, u16 *y);
+void GetCameraFocusCoords(u16 *x, u16 *y);
u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y);
u8 MapGridGetZCoordAt(int x, int y);
u8 CameraMove(s32 deltaX, s32 deltaY);
-void mapheader_copy_mapdata_with_padding(struct MapHeader *mapHeader);
-void map_copy_with_padding(u16 *map, u16 width, u16 height);
-void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *);
-void fillSouthConnection(struct MapHeader const *, struct MapHeader const *, s32);
-void fillNorthConnection(struct MapHeader const *, struct MapHeader const *, s32);
-void fillWestConnection(struct MapHeader const *, struct MapHeader const *, s32);
-void fillEastConnection(struct MapHeader const *, struct MapHeader const *, s32);
-void mapdata_from_sav2(void);
-bool8 sub_8088BF0(u16*, u16, u8);
struct MapConnection *sub_8088950(u8 direction, int x, int y);
bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection);
bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset);
void save_serialize_map(void);
+void sub_8088B3C(u16 x, u16 y);
+void InitMap(void);
+void InitMapFromSavedGame(void);
+void InitTrainerHillMap(void);
+void InitBattlePyramidMap(u8 a0);
void SpriteCB_PokeballGlow(struct Sprite *);
void SpriteCB_PokecenterMonitor(struct Sprite *);
diff --git a/include/fldeff.h b/include/fldeff.h
new file mode 100644
index 000000000..e095396a4
--- /dev/null
+++ b/include/fldeff.h
@@ -0,0 +1,61 @@
+#ifndef GUARD_FLDEFF_H
+#define GUARD_FLDEFF_H
+
+// cut
+bool8 SetUpFieldMove_Cut(void);
+bool8 FldEff_UseCutOnGrass(void);
+bool8 FldEff_UseCutOnTree(void);
+bool8 FldEff_CutGrass(void);
+void FixLongGrassMetatilesWindowTop(s16 x, s16 y);
+void FixLongGrassMetatilesWindowBottom(s16 x, s16 y);
+
+extern const struct SpritePalette gFieldEffectObjectPaletteInfo6;
+
+// groundshake
+bool8 sub_81BE66C(void);
+void sub_81BE6AC(void);
+void sub_81BE6B8(void);
+void sub_81BE72C(void);
+void sub_81BE79C(void);
+void sub_81BE7F4(void);
+void sub_81BE994(void);
+
+// escalator
+void sub_80E1558(u8 var);
+void sub_80E1570(void);
+bool8 sub_80E1584(void);
+
+// soft-boiled
+bool8 SetUpFieldMove_SoftBoiled(void);
+void sub_81615A8(u8 taskId);
+void sub_8161560(u8 taskId);
+
+// flash
+bool8 SetUpFieldMove_Flash(void);
+void c2_change_map(void);
+bool8 GetMapPairFadeToType(u8 a1, u8 a2);
+bool8 GetMapPairFadeFromType(u8 a1, u8 a2);
+
+// strength
+bool8 SetUpFieldMove_Strength(void);
+bool8 sub_8145E2C(void);
+
+// sweet scent
+bool8 SetUpFieldMove_SweetScent(void);
+bool8 FldEff_SweetScent(void);
+
+// teleport
+bool8 SetUpFieldMove_Teleport(void);
+bool8 FldEff_UseTeleport(void);
+
+// dig
+bool8 SetUpFieldMove_Dig(void);
+bool8 FldEff_UseDig(void);
+
+// rock smash
+bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId);
+u8 oei_task_add(void);
+bool8 SetUpFieldMove_RockSmash(void);
+bool8 FldEff_UseRockSmash(void);
+
+#endif // GUARD_FLDEFF_H
diff --git a/include/fldeff_cut.h b/include/fldeff_cut.h
deleted file mode 100644
index c89d3b6ca..000000000
--- a/include/fldeff_cut.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef GUARD_FLDEFF_CUT_H
-#define GUARD_FLDEFF_CUT_H
-
-extern const struct SpritePalette gFieldEffectObjectPaletteInfo6;
-
-bool8 SetUpFieldMove_Cut(void);
-bool8 FldEff_UseCutOnGrass(void);
-bool8 FldEff_UseCutOnTree(void);
-bool8 FldEff_CutGrass(void);
-void sub_80D423C(s16 x, s16 y);
-void sub_80D42B8(s16 x, s16 y);
-
-#endif // GUARD_FLDEFF_CUT_H
diff --git a/include/fldeff_groundshake.h b/include/fldeff_groundshake.h
deleted file mode 100644
index c1629f9bd..000000000
--- a/include/fldeff_groundshake.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef GUARD_FLDEFF_GROUNDSHAKE_H
-#define GUARD_FLDEFF_GROUNDSHAKE_H
-
-void sub_81BE72C(void);
-
-#endif // GUARD_FLDEFF_GROUNDSHAKE_H
diff --git a/include/fldeff_misc.h b/include/fldeff_misc.h
index 954ecbb5c..fd96f5646 100644
--- a/include/fldeff_misc.h
+++ b/include/fldeff_misc.h
@@ -1,24 +1,37 @@
#ifndef GUARD_FLDEFF_MISC_H
#define GUARD_FLDEFF_MISC_H
-void PopSecretBaseBalloon(s16 id, s16 x, s16 y);
+void sub_80F9BCC(u16 a0, u16 a1, u8 a2);
+void sub_80F9BF4(u16 a0, u16 a1, u8 a2);
+bool8 sub_80F9C1C(void);
+bool8 sub_80F9C30(void);
+bool8 SetUpFieldMove_SecretPower(void);
+bool8 FldEff_UseSecretPowerCave(void);
+bool8 FldEff_SecretPowerCave(void);
+bool8 FldEff_UseSecretPowerTree(void);
+bool8 FldEff_SecretPowerTree(void);
+bool8 FldEff_UseSecretPowerShrub(void);
+bool8 FldEff_SecretPowerShrub(void);
+bool8 FldEff_SecretBasePCTurnOn(void);
+void DoSecretBasePCTurnOffEffect(void);
+void PopSecretBaseBalloon(s16 metatileId, s16 x, s16 y);
+bool8 FldEff_NopA6FC(void);
+bool8 FldEff_NopA700(void);
void ShatterSecretBaseBreakableDoor(s16 x, s16 y);
-u8 CreateRecordMixingSprite(void);
-void DestroyRecordMixingSprite(void);
-void FldEffPoison_Start(void);
void PlaySecretBaseMusicNoteMatSound(s16 metatileId);
void DoSecretBaseGlitterMatSparkle(void);
-bool8 sub_80FADE4(u16, u8);
-
-extern struct MapPosition gPlayerFacingPosition;
-extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
-
-extern u8 EventScript_275A86[];
-extern u8 EventScript_275ADF[];
-extern u8 EventScript_275B38[];
-
-extern const struct OamData gEventObjectBaseOam_32x8;
+bool8 FldEff_SandPillar(void);
+void GetShieldToyTVDecorationInfo(void);
+bool8 sub_80FADE4(u16 arg0, u8 arg1);
+void FldEffPoison_Start(void);
+bool32 FldEffPoison_IsActive(void);
+void DoWateringBerryTreeAnim(void);
+u8 CreateRecordMixingSprite(void);
+void DestroyRecordMixingSprite(void);
+extern const struct SpritePalette gFieldEffectObjectPaletteInfo7;
+extern const struct SpritePalette gFieldEffectObjectPaletteInfo8;
+extern const struct SpritePalette gFieldEffectObjectPaletteInfo9;
extern const u16 gTilesetPalettes_SecretBase[][16];
#endif //GUARD_FLDEFF_MISC_H
diff --git a/include/fldeff_softboiled.h b/include/fldeff_softboiled.h
deleted file mode 100755
index abb3c7913..000000000
--- a/include/fldeff_softboiled.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef GUARD_FLDEFF_SOFTBOILED_H
-#define GUARD_FLDEFF_SOFTBOILED_H
-
-void sub_81615A8(u8 taskId);
-void sub_8161560(u8 taskId);
-
-#endif // GUARD_FLDEFF_SOFTBOILED_H
diff --git a/include/gba/defines.h b/include/gba/defines.h
index 16f1315d0..b68a2ad1e 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -66,6 +66,4 @@
#define TOTAL_OBJ_TILE_COUNT 1024
-#define WIN_RANGE(a, b) (((a) << 8) | (b))
-
#endif // GUARD_GBA_DEFINES
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index c20b69886..df79b084d 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -576,6 +576,9 @@
#define WINOUT_WINOBJ_OBJ (1 << 12)
#define WINOUT_WINOBJ_CLR (1 << 13)
+#define WIN_RANGE(a, b) (((a) << 8) | (b))
+#define WIN_RANGE2(a, b) ((b) | ((a) << 8))
+
// BLDCNT
// Bits 0-5 select layers for the 1st target
#define BLDCNT_TGT1_BG0 (1 << 0)
diff --git a/include/global.h b/include/global.h
index e3792ac56..c11bddc2d 100644
--- a/include/global.h
+++ b/include/global.h
@@ -4,6 +4,7 @@
#include <string.h>
#include "config.h" // we need to define config before gba headers as print stuff needs the functions nulled before defines.
#include "gba/gba.h"
+#include "constants/global.h"
// Prevent cross-jump optimization.
#define BLOCK_CROSS_JUMP asm("");
@@ -93,100 +94,6 @@
f; \
})
-// Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen.
-// In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen.
-// In Gen 4 only, migrated Pokemon with Diamond, Pearl, or Platinum's ID show as "----------".
-// Gen 5 and up read Diamond, Pearl, or Platinum's ID as "Sinnoh".
-// In Gen 4 and up, migrated Pokemon with HeartGold or SoulSilver's ID show the otherwise unused "Johto" string.
-enum
-{
- VERSION_SAPPHIRE = 1,
- VERSION_RUBY = 2,
- VERSION_EMERALD = 3,
- VERSION_FIRE_RED = 4,
- VERSION_LEAF_GREEN = 5,
- VERSION_HEART_GOLD = 7,
- VERSION_SOUL_SILVER = 8,
- VERSION_DIAMOND = 10,
- VERSION_PEARL = 11,
- VERSION_PLATINUM = 12,
- VERSION_GAMECUBE = 15,
-};
-
-enum LanguageId
-{
- LANGUAGE_JAPANESE = 1,
- LANGUAGE_ENGLISH = 2,
- LANGUAGE_FRENCH = 3,
- LANGUAGE_ITALIAN = 4,
- LANGUAGE_GERMAN = 5,
- // 6 goes unused but the theory is it was meant to be Korean
- LANGUAGE_SPANISH = 7,
-};
-
-#define GAME_VERSION (VERSION_EMERALD)
-#define GAME_LANGUAGE (LANGUAGE_ENGLISH)
-
-// capacities of various saveblock objects
-#define DAYCARE_MON_COUNT 2
-#define POKEBLOCKS_COUNT 40
-#define EVENT_OBJECTS_COUNT 16
-#define BERRY_TREES_COUNT 128
-#define FLAGS_COUNT 300
-#define VARS_COUNT 256
-#define MAIL_COUNT 16
-#define SECRET_BASES_COUNT 20
-#define TV_SHOWS_COUNT 25
-#define POKE_NEWS_COUNT 16
-#define PC_ITEMS_COUNT 50
-#define BAG_ITEMS_COUNT 30
-#define BAG_KEYITEMS_COUNT 30
-#define BAG_POKEBALLS_COUNT 16
-#define BAG_TMHM_COUNT 64
-#define BAG_BERRIES_COUNT 46
-#define EVENT_OBJECT_TEMPLATES_COUNT 64
-
-#define PYRAMID_BAG_ITEMS_COUNT 10
-#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
-
-// string lengths
-#define ITEM_NAME_LENGTH 14
-#define POKEMON_NAME_LENGTH 10
-#define PLAYER_NAME_LENGTH 7
-#define MAIL_WORDS_COUNT 9
-
-enum
-{
- MALE,
- FEMALE
-};
-
-enum
-{
- OPTIONS_BUTTON_MODE_NORMAL,
- OPTIONS_BUTTON_MODE_LR,
- OPTIONS_BUTTON_MODE_L_EQUALS_A
-};
-
-enum
-{
- OPTIONS_TEXT_SPEED_SLOW,
- OPTIONS_TEXT_SPEED_MID,
- OPTIONS_TEXT_SPEED_FAST
-};
-
-enum
-{
- OPTIONS_SOUND_MONO,
- OPTIONS_SOUND_STEREO
-};
-
-enum
-{
- OPTIONS_BATTLE_STYLE_SHIFT,
- OPTIONS_BATTLE_STYLE_SET
-};
-
struct Coords8
{
s8 x;
@@ -521,7 +428,7 @@ struct SaveBlock2
{
/*0x00*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x08*/ u8 playerGender; // MALE, FEMALE
- /*0x09*/ u8 specialSaveWarp;
+ /*0x09*/ u8 specialSaveWarpFlags;
/*0x0A*/ u8 playerTrainerId[4];
/*0x0E*/ u16 playTimeHours;
/*0x10*/ u8 playTimeMinutes;
@@ -872,15 +779,15 @@ typedef union // 3b58
struct WaldaPhrase
{
- u16 field_0;
- u16 field_2;
+ u16 colors[2]; // Background, foreground.
u8 text[16];
u8 iconId;
u8 patternId;
bool8 patternUnlocked;
};
-struct UnkSaveSubstruct_3b98 {
+struct UnkSaveSubstruct_3b98
+{
u32 trainerId;
u8 trainerName[PLAYER_NAME_LENGTH + 1];
};
@@ -889,10 +796,10 @@ struct SaveBlock1
{
/*0x00*/ struct Coords16 pos;
/*0x04*/ struct WarpData location;
- /*0x0C*/ struct WarpData warp1;
- /*0x14*/ struct WarpData warp2;
- /*0x1C*/ struct WarpData lastHealLocation;
- /*0x24*/ struct WarpData warp4;
+ /*0x0C*/ struct WarpData continueGameWarp;
+ /*0x14*/ struct WarpData dynamicWarp;
+ /*0x1C*/ struct WarpData lastHealLocation; // used by white-out and teleport
+ /*0x24*/ struct WarpData escapeWarp; // used by Dig and Escape Rope
/*0x2C*/ u16 savedMusic;
/*0x2E*/ u8 weather;
/*0x2F*/ u8 weatherCycleStage;
diff --git a/include/graphics.h b/include/graphics.h
index d7bdf096e..8a54ba536 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -3071,7 +3071,7 @@ extern const u32 gTrainerBackPicPalette_Leaf[];
// pokeblock
extern const u32 gMenuPokeblock_Gfx[];
-extern const u8 gMenuPokeblock_Pal[];
+extern const u32 gMenuPokeblock_Pal[];
extern const u32 gMenuPokeblock_Tilemap[];
extern const u32 gMenuPokeblockDevice_Gfx[];
extern const u32 gMenuPokeblockDevice_Pal[];
@@ -3859,8 +3859,8 @@ extern const u8 gFireRedMenuElements_Gfx[];
// item menu graphics
extern const u32 gBagScreen_Gfx[];
-extern const u16 gBagScreenFemale_Pal[];
-extern const u16 gBagScreenMale_Pal[];
+extern const u32 gBagScreenFemale_Pal[];
+extern const u32 gBagScreenMale_Pal[];
extern const u8 gBagMenuHMIcon_Gfx[];
// item menu icons graphics
@@ -3914,7 +3914,7 @@ extern const u32 gIntro2FlygonGfx[];
// party menu graphics
extern const u32 gPartyMenuMisc_Gfx[];
extern const u32 gPartyMenuMisc_Tilemap[];
-extern const u8 gPartyMenuMisc_Pal[];
+extern const u32 gPartyMenuMisc_Pal[];
// berry pics
extern const u32 gBerryPic_Cheri[];
@@ -4105,6 +4105,10 @@ extern const u32 gUnknown_08D83C3C[];
extern const u32 gUnknown_08D83900[];
extern const u32 gBattleFrontierGfx_DomeOptions[];
+extern const u32 gUnknown_08D854E8[];
+extern const u32 gUnknown_08D855E8[];
+extern const u32 gContest2Pal[];
+
extern const u32 gBattleAnimSpriteSheet_000[];
extern const u32 gBattleAnimSpriteSheet_001[];
extern const u32 gBattleAnimSpriteSheet_002[];
@@ -4626,9 +4630,9 @@ extern const u32 gBattleAnimSpritePalette_241[];
extern const u32 gBattleAnimSpritePalette_242[];
extern const u32 gBattleAnimSpritePalette_243[];
extern const u32 gBattleAnimSpritePalette_244[];
-extern const u8 gUnknown_08C2DC68[];
-extern const u16 gUnknown_08C2DDA4[];
-extern const u8 gUnknown_08C2DDC4[];
+extern const u32 gUnknown_08C2DC68[];
+extern const u32 gUnknown_08C2DDA4[];
+extern const u32 gUnknown_08C2DDC4[];
extern const u32 gBattleAnimSpritePalette_245[];
extern const u32 gBattleAnimSpritePalette_248[];
extern const u32 gBattleAnimSpritePalette_249[];
@@ -4720,6 +4724,10 @@ extern const u32 gBattleAnimBackgroundTilemap_17[];
extern const u32 gBattleAnimBackgroundTilemap_20[];
extern const u32 gBattleAnimBackgroundTilemap_21[];
+extern const u32 gUnknown_08C1D0AC[];
+extern const u32 gUnknown_08C1D1E8[];
+extern const u32 gUnknown_08C1D210[];
+
extern const u32 gUnknown_08C20668[];
extern const u32 gUnknown_08C20684[];
extern const u32 gBattleStatMask_Gfx[];
@@ -4748,6 +4756,8 @@ extern const u32 gBattleAnimBackgroundImage_Surf[];
extern const u32 gBattleAnimBackgroundPalette_Surf[];
extern const u32 gBattleAnimBackgroundImageMuddyWater_Pal[];
+extern const u32 gBattleAnimFogTilemap[];
+
// Berry blender
extern const u32 gBerryBlenderArrowTiles[];
extern const u32 gBerryBlenderStartTiles[];
@@ -4769,6 +4779,20 @@ extern const u32 gUnknown_08D8D58C[];
extern const u32 gPokedexAreaScreenAreaUnknown_Gfx[];
extern const u16 gPokedexAreaScreenAreaUnknown_Pal[];
+// Pokemon Storage System
+extern const u32 gPSSMenu_Gfx[];
+extern const u16 gPSSMenu_Pal[];
+extern const u32 gWallpaperIcon_Plusle[];
+extern const u32 gWallpaperIcon_Cross[];
+extern const u32 gWallpaperIcon_Bolt[];
+extern const u32 gUnknown_08DD36C8[];
+extern const u32 gWallpaperTiles_Ribbon[];
+extern const u32 gWallpaperTilemap_Ribbon[];
+extern const u16 gWallpaperPalettes_Ribbon[][16];
+extern const u32 gWallpaperTiles_Horizontal[];
+extern const u32 gWallpaperTilemap_Horizontal[];
+extern const u16 gWallpaperPalettes_Horizontal[][16];
+
// Cable Car
extern const u32 gUnknown_08DBA5B8[];
extern const u16 gUnknown_08DBA518[];
@@ -4777,4 +4801,21 @@ extern const u32 gCableCarDoor_Gfx[];
extern const u32 gCableCarCord_Gfx[];
extern const u16 gCableCar_Pal[];
+// Trade
+extern const u16 gUnknown_08DDB3E4[];
+extern const u8 gUnknown_08DDB464[];
+extern const u16 gUnknown_08DDCF04[];
+extern const u16 gTradeGba2_Pal[];
+extern const u8 gTradeGba_Gfx[];
+extern const u16 gUnknown_08DDD704[];
+extern const u8 gUnknown_08DDC6E4[];
+extern const u16 gUnknown_08DDB444[];
+
+// Party menu
+extern const u32 gPartyMenuPokeball_Gfx[];
+extern const u32 gPartyMenuPokeballSmall_Gfx[];
+extern const u32 gStatusPal_Icons[];
+extern const u32 gPartyMenuPokeball_Pal[];
+extern const u32 gStatusPal_Icons[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/item_menu.h b/include/item_menu.h
index a904208d9..d972cdf83 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -78,5 +78,6 @@ u8 GetItemListPosition(u8 pocketId);
bool8 UseRegisteredKeyItemOnField(void);
void CB2_GoToSellMenu(void);
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
+void DoWallyTutorialBagMenu(void);
#endif //GUARD_item_menu_H
diff --git a/include/librfu.h b/include/librfu.h
index 49df42541..38c819835 100644
--- a/include/librfu.h
+++ b/include/librfu.h
@@ -255,6 +255,6 @@ void rfu_REQ_recvData(void);
void rfu_UNI_readySendData(u8 a0);
void rfu_UNI_clearRecvNewDataFlag(u8 a0);
void rfu_REQ_PARENT_resumeRetransmitAndChange(void);
-void rfu_NI_setSendData(u8, u8, u8 *, u8);
+void rfu_NI_setSendData(u8, u8, const void *, u32);
#endif // GUARD_LIBRFU_H
diff --git a/include/link.h b/include/link.h
index f12f0990f..9552f062c 100644
--- a/include/link.h
+++ b/include/link.h
@@ -240,7 +240,7 @@ void SerialCB(void);
u8 GetLinkPlayerCount(void);
bool32 InUnionRoom(void);
void sub_800E0E8(void);
-bool8 sub_800A520(void);
+bool8 IsLinkTaskFinished(void);
void CreateWirelessStatusIndicatorSprite(u8, u8);
void sub_800ADF8(void);
void sub_800B488(void);
@@ -311,5 +311,6 @@ void sub_800AD10(void);
void sub_800AB18(void);
void sub_8009F18(void);
bool8 sub_800AA60(void);
+void sub_800ABF4(u16 a0);
#endif // GUARD_LINK_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index e394e2611..715b4cdd9 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -279,5 +279,7 @@ void sub_8011DE0(u32 arg0);
u8 sub_801100C(int a0);
void sub_800EF7C(void);
bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx);
+s32 sub_800E87C(u8 idx);
+void sub_8011BA4(void);
#endif //GUARD_LINK_RFU_H
diff --git a/include/load_save.h b/include/load_save.h
index c64a1179b..bf50bffd7 100644
--- a/include/load_save.h
+++ b/include/load_save.h
@@ -15,11 +15,11 @@ void ClearSav2(void);
void ClearSav1(void);
void SetSaveBlocksPointers(u16 offset);
void MoveSaveBlocks_ResetHeap(void);
-u32 GetSecretBase2Field_9(void);
-void ClearSecretBase2Field_9(void);
-void SetSecretBase2Field_9(void);
-void sub_8076D5C(void);
-void sav2_gender2_inplace_and_xFE(void);
+u32 UseContinueGameWarp(void);
+void ClearContinueGameWarpStatus(void);
+void SetContinueGameWarpStatus(void);
+void SetContinueGameWarpStatusToDynamicWarp(void);
+void ClearContinueGameWarpStatus2(void);
void SavePlayerParty(void);
void LoadPlayerParty(void);
void SaveEventObjects(void);
diff --git a/include/menu.h b/include/menu.h
index 2606b1f58..aca462468 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -20,7 +20,8 @@ struct MenuAction
extern const u16 gUnknown_0860F074[];
-void sub_81971D0(void);
+void FreeAllOverworldWindowBuffers(void);
+void InitStandardTextBoxWindows(void);
void sub_8197200(void);
u16 RunTextPrintersAndIsPrinter0Active(void);
void sub_81973A4(void);
@@ -44,16 +45,16 @@ void SetWindowBorderStyle(u8 windowId, bool8 copyToVram, u16 tileStart, u8 palet
void schedule_bg_copy_tilemap_to_vram(u8 bgNum);
void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *strs);
u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 numItems, u8 initialCursorPos);
-u8 GetMenuCursorPos(void);
+u8 Menu_GetCursorPos(void);
s8 Menu_ProcessInput(void);
s8 Menu_ProcessInputNoWrap(void);
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);
+void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
bool8 free_temp_tile_data_buffers_if_possible(void);
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);
+void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
s8 Menu_ProcessInputNoWrapClearOnChoose(void);
s8 ProcessMenuInput_other(void);
void do_scheduled_bg_tilemap_copies_to_vram(void);
@@ -63,7 +64,7 @@ void sub_8197B1C(u8 windowId, bool8 copyToVram, u16 a2, u8 a3);
void sub_81995E4(u8 windowId, u8 optionsNo, const struct MenuAction *actions, const u8 *actionIds);
void sub_8197DF8(u8 windowId, bool8 copyToVram);
u16 sub_8198AA4(u8, u8, u8, u8, u8, u8, u16);
-void *malloc_and_decompress(const void *src, int *sizeOut);
+void *malloc_and_decompress(const void *src, u32 *sizeOut);
u16 copy_decompressed_tile_data_to_vram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode);
void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress);
void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8);
@@ -72,7 +73,8 @@ u8 sub_8199944(u8 windowId, u8 optionWidth, u8 horizontalCount, u8 verticalCount
u8 sub_8199134(s8, s8);
u8 GetStartMenuWindowId(void);
void sub_819A2BC(u8, u8);
-u8 MoveMenuCursor(s8 cursorDelta);
+u8 Menu_MoveCursor(s8 cursorDelta);
+u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta);
void NewMenuHelpers_DrawStdWindowFrame(u8 windowId, bool8 CopyToVram);
u8 sub_81979C4(u8 a1);
u8 sub_81983AC(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos);
@@ -94,5 +96,8 @@ s8 Menu_ProcessInputGridLayout(void);
u8 InitMenuInUpperLeftCorner(u8 windowId, u8 itemCount, u8 initialCursorPos, bool8 APressMuted);
s8 Menu_ProcessInputNoWrapAround_other(void);
void sub_8199CBC(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height);
+u8 sub_81980F0(u8 bg, u8 xPos, u8 yPos, u8 palette, u16 baseTile);
+void sub_8198314(void);
+void sub_8198180(const u8 *string, u8 a2, bool8 copyToVram);
#endif // GUARD_MENU_H
diff --git a/include/mirage_tower.h b/include/mirage_tower.h
new file mode 100644
index 000000000..f98b016b2
--- /dev/null
+++ b/include/mirage_tower.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_MIRAGE_TOWER_H
+#define GUARD_MIRAGE_TOWER_H
+
+void ClearMirageTowerPulseBlendEffect(void);
+void ClearMirageTowerPulseBlend(void);
+void TryStartMirageTowerPulseBlendEffect(void);
+
+#endif // GUARD_MIRAGE_TOWER_H
diff --git a/include/mon_markings.h b/include/mon_markings.h
index 22c3f14a4..8e4ec58bd 100644
--- a/include/mon_markings.h
+++ b/include/mon_markings.h
@@ -21,6 +21,15 @@ struct PokemonMarkMenu
/*0x10B4*/ u8 tileLoadState;
}; // 10b8
+void sub_811F90C(struct PokemonMarkMenu *ptr);
+void sub_811F918(void);
+bool8 sub_811F960(void);
+void sub_811FA90(void);
+void sub_811FAA4(u8 markings, s16 x, s16 y);
+void sub_811FAF8(void);
+bool8 sub_811FBA4(void);
struct Sprite *sub_811FF94(u16 tileTag, u16 paletteTag, const u16 *palette);
+struct Sprite *sub_811FFB4(u16 tileTag, u16 paletteTag, const u16 *palette);
+void sub_8120084(u8 markings, void *dest);
#endif //POKEEMERALD_MON_MARKINGS_H
diff --git a/include/overworld.h b/include/overworld.h
index 1f53662b3..79cbf1da3 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -46,28 +46,25 @@ void Overworld_SetEventObjTemplateCoords(u8 localId, s16 x, s16 y);
void Overworld_SetEventObjTemplateMovementType(u8 localId, u8 movementType);
const struct MapLayout *GetMapLayout(void);
void ApplyCurrentWarp(void);
-void set_warp2_warp3_to_neg_1(void);
struct MapHeader const *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum);
struct MapHeader const *const GetDestinationWarpMapHeader(void);
void WarpIntoMap(void);
-void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId);
-void saved_warp2_set(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId);
-void saved_warp2_set_2(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
-void sub_8084CCC(u8 a1);
-void Overworld_SetWarpDestToLastHealLoc(void);
-void Overworld_SetHealLocationWarp(u8 healLocationId);
-void sub_8084D5C(s16 a1, s16 a2);
-void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-void sub_8084E14(void);
+void SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+void SetWarpDestinationToMapWarp(s8 mapGroup, s8 mapNum, s8 warpId);
+void SetDynamicWarp(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId);
+void SetDynamicWarpWithCoords(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+void SetWarpDestinationToDynamicWarp(u8 unused);
+void SetWarpDestinationToHealLocation(u8 a1);
+void SetWarpDestinationToLastHealLocation(void);
+void SetLastHealLocationWarp(u8 healLocationId);
+void UpdateEscapeWarp(s16 x, s16 y);
+void SetEscapeWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+void SetWarpDestinationToEscapeWarp(void);
void SetFixedDiveWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void SetFixedHoleWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-void SetFixedHoleWarpAsDestination(s16 x, s16 y);
-void warp1_set_to_sav1w(void);
-void sub_8084F2C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-void sub_8084F6C(u8 a1);
-void sub_8084FAC(int unused);
+void SetWarpDestinationToFixedHoleWarp(s16 x, s16 y);
+void SetContinueGameWarpToHealLocation(u8 a1);
+void SetContinueGameWarpToDynamicWarp(int unused);
const struct MapConnection *GetMapConnection(u8 dir);
bool8 SetDiveWarpEmerge(u16 x, u16 y);
bool8 SetDiveWarpDive(u16 x, u16 y);
@@ -78,7 +75,7 @@ bool32 Overworld_IsBikingAllowed(void);
void SetDefaultFlashLevel(void);
void Overworld_SetFlashLevel(s32 flashLevel);
u8 Overworld_GetFlashLevel(void);
-void sub_8085524(u16 mapLayoutId);
+void SetCurrentMapLayout(u16 mapLayoutId);
void sub_8085540(u8 var);
u8 sub_808554C(void);
u16 GetLocationMusic(struct WarpData *warp);
@@ -97,15 +94,15 @@ void Overworld_FadeOutMapMusic(void);
void UpdateAmbientCry(s16 *state, u16 *delayCounter);
u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum);
u8 GetMapTypeByWarpData(struct WarpData *warp);
-u8 Overworld_GetMapTypeOfSaveblockLocation(void);
+u8 GetCurrentMapType(void);
u8 GetLastUsedWarpMapType(void);
bool8 is_map_type_1_2_3_5_or_6(u8 mapType);
bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType);
bool8 Overworld_MapTypeIsIndoors(u8 mapType);
-u8 sav1_saved_warp2_map_get_name(void);
-u8 sav1_map_get_name(void);
+u8 GetSavedWarpRegionMapSectionId(void);
+u8 GetCurrentRegionMapSectionId(void);
u8 GetCurrentMapBattleScene(void);
-void overworld_free_bg_tilemaps(void);
+void CleanupOverworldWindowsAndTilemaps(void);
bool32 is_c1_link_related_active(void);
void CB1_Overworld(void);
void CB2_OverworldBasic(void);
diff --git a/include/palette.h b/include/palette.h
index c14e9f453..540452f3d 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -43,7 +43,7 @@ extern u8 gPaletteDecompressionBuffer[];
extern u16 gPlttBufferUnfaded[];
extern u16 gPlttBufferFaded[];
-void LoadCompressedPalette(const void *, u16, u16);
+void LoadCompressedPalette(const u32 *, u16, u16);
void LoadPalette(const void *, u16, u16);
void FillPalette(u16, u16, u16);
void TransferPlttBuffer(void);
diff --git a/include/party_menu.h b/include/party_menu.h
index 27a043cb6..ae7c414a8 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -26,7 +26,8 @@ enum
PARTY_GIVE_ITEM,
};
-struct Struct203CEC8 {
+struct Struct203CEC8
+{
MainCallback exitCallback;
TaskFunc unk4;
u8 unk8_0:4;
@@ -41,42 +42,72 @@ struct Struct203CEC8 {
};
extern struct Struct203CEC8 gUnknown_0203CEC8;
+extern u8 gUnknown_0203CEE8;
+extern u8 gUnknown_0203CEE9;
+extern MainCallback gPostMenuFieldCallback;
+extern u8 gSelectedOrderFromParty[4];
+extern u8 gUnknown_0203CF00[3];
-extern const u16 gUnknown_0861500C[]; // tutor table
+extern const u16 gTutorMoves[];
-bool8 pokemon_has_move(struct Pokemon *, u16);
-void sub_81B58A8(void);
-void DoWallyTutorialBagMenu(void);
-u8 pokemon_ailments_get_primary(u32 status);
-u8 *GetMonNickname(struct Pokemon *mon, u8 *dst);
+void sub_81B0FCC(u8 slot, u8 b);
+bool8 IsMultiBattle(void);
u8 GetCursorSelectionMonId(void);
+u8 sub_81B1360(void);
+void sub_81B1370(u8 taskId);
+u8* GetMonNickname(struct Pokemon *mon, u8 *dest);
+u8 sub_81B1B5C(const u8* str, u8 b);
+bool8 sub_81B1BD4(void);
+void sub_81B1F18(u8 taskId, u8 slot, s8 c, s16 HPDifference, TaskFunc func);
+u8 pokemon_ailments_get_primary(u32 status);
+u8 sub_81B205C(struct Pokemon *mon);
+void display_pokemon_menu_message(u32 stringID);
+void sub_81B47E0(u8 taskId);
bool8 FieldCallback_PrepareFadeInFromMenu(void);
+void sub_81B58A8(void);
+void LoadHeldItemIcons(void);
+void sub_81B5D4C(u8 *a, u8 *b, u8 c);
+void sub_81B617C(void);
+void ItemUseCB_Medicine(u8 taskId, TaskFunc task);
+void sub_81B67C8(u8 taskId, TaskFunc task);
+void dp05_ether(u8 taskId, TaskFunc task);
+void dp05_pp_up(u8 taskId, TaskFunc task);
+u16 ItemIdToBattleMoveId(u16 item);
+bool8 IsMoveHm(u16 move);
+bool8 MonKnowsMove(struct Pokemon *mon, u16 move);
+void sub_81B6DC4(u8 taskId, TaskFunc task);
+void dp05_rare_candy(u8 taskId, TaskFunc task);
+void sub_81B79E8(u8 taskId, TaskFunc task);
+void sub_81B7C74(u8 taskId, TaskFunc task);
+u8 GetItemEffectType(u16 item);
+void CB2_PartyMenuFromStartMenu(void);
void sub_81B7F60(void);
-
-void sub_81B0FCC(u8 partyIdx, u8 a);
-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);
-u8 sub_81B1B5C(const u8 *a, u8 b);
-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));
-void OpenPartyMenuInBattle(u8 caseId);
-u16 ItemIdToBattleMoveId(u16 itemId);
-u8 sub_81B205C(struct Pokemon* a);
-void sub_81B617C(void);
-u8 sub_81B6D14(u16 a);
+void sub_81B8558(void);
+void sub_81B8904(u8 initArg, MainCallback callback);
+void sub_81B892C(void);
+void sub_81B8958(void);
+void OpenPartyMenuInBattle(u8 arg);
+void sub_81B89F0(void);
+void sub_81B8C68(void);
+void sub_81B8D64(u8 battlerId, u8 multiplayerFlag);
+void sub_81B8E80(u8 battlerId, u8 unk, u8 arrayIndex);
+void sub_81B8FB0(u8 slot, u8 slot2);
+u8 pokemon_order_func(u8 slot);
+void sub_81B9150(void);
+void sub_81B9328(void);
bool8 hm_add_c3_without_phase_2(void);
-
-extern void dp05_ether(u8, TaskFunc);
-extern void dp05_pp_up(u8, TaskFunc);
-extern void dp05_rare_candy(u8, TaskFunc);
-
-extern void sub_81B67C8(u8, TaskFunc);
-extern void sub_81B79E8(u8, TaskFunc);
-extern void sub_81B6DC4(u8, TaskFunc);
-extern void sub_81B7C74(u8, TaskFunc);
+void sub_81B9404(void);
+void sub_81B94B0(void);
+void sub_81B951C(void);
+void sub_81B9620(void);
+void sub_81B95E0(void);
+void sub_81B98DC(void);
+void sub_81B9918(void);
+void sub_81B9770(void);
+void sub_81B9718(void);
+void sub_81B96D0(void);
+void sub_81B968C(void);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 94dae089f..cfa5cc350 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -8,9 +8,9 @@
#define MON_DATA_OT_ID 1
#define MON_DATA_NICKNAME 2
#define MON_DATA_LANGUAGE 3
-#define MON_DATA_SANITY_BIT1 4
-#define MON_DATA_SANITY_BIT2 5
-#define MON_DATA_SANITY_BIT3 6
+#define MON_DATA_SANITY_IS_BAD_EGG 4
+#define MON_DATA_SANITY_HAS_SPECIES 5
+#define MON_DATA_SANITY_IS_EGG 6
#define MON_DATA_OT_NAME 7
#define MON_DATA_MARKINGS 8
#define MON_DATA_CHECKSUM 9
@@ -251,14 +251,6 @@ struct Pokemon
u16 spDefense;
};
-struct PokemonStorage
-{
- /*0x0000*/ u8 currentBox;
- /*0x0001*/ struct BoxPokemon boxes[14][30];
- /*0x8344*/ u8 boxNames[14][9];
- /*0x83C2*/ u8 boxWallpapers[14];
-};
-
struct Unknown_806F160_Struct
{
u8 field_0_0:4;
@@ -430,7 +422,6 @@ extern struct Pokemon gPlayerParty[PARTY_SIZE];
extern u8 gEnemyPartyCount;
extern struct Pokemon gEnemyParty[PARTY_SIZE];
extern struct SpriteTemplate gMultiuseSpriteTemplate;
-extern struct PokemonStorage* gPokemonStoragePtr;
extern const struct BattleMove gBattleMoves[];
extern const u8 gFacilityClassToPicIndex[];
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index 17c7d5573..4f27ef281 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -1,9 +1,14 @@
#ifndef GUARD_POKEMON_ICON_H
#define GUARD_POKEMON_ICON_H
+extern const u8 gMonIconPaletteIndices[];
+
const u8 *GetMonIconTiles(u16 species, bool32);
+void sub_80D304C(u16 offset);
+u8 GetValidMonIconPalIndex(u16 species);
const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);
const u16 *GetValidMonIconPalettePtr(u16 speciesId);
+u16 GetIconSpecies(u16 species, u32 personality);
u16 GetUnownLetterByPersonality(u32 personality);
u16 sub_80D2E84(u16 speciesId);
void LoadMonIconPalettes(void);
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index 7f618498b..a85ee5ff4 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -2,88 +2,73 @@
#define GUARD_POKEMON_STORAGE_SYSTEM_H
#define TOTAL_BOXES_COUNT 14
-#define IN_BOX_COUNT 30
+#define IN_BOX_ROWS 6
+#define IN_BOX_COLUMNS 5
+#define IN_BOX_COUNT (IN_BOX_ROWS * IN_BOX_COLUMNS)
-#include "pc_screen_effect.h"
-#include "mon_markings.h"
+/*
+ ROWS
+COLUMNS 0 1 2 3 4 5
+ 6 7 8 9 10 11
+ 12 13 14 15 16 17
+ 18 19 20 21 22 23
+ 24 25 26 27 28 29
+*/
-struct PokemonStorageSystemFunc
+struct PokemonStorage
{
- u8 (*func)(void);
- s8 unk4;
+ /*0x0000*/ u8 currentBox;
+ /*0x0001*/ struct BoxPokemon boxes[TOTAL_BOXES_COUNT][IN_BOX_COUNT];
+ /*0x8344*/ u8 boxNames[TOTAL_BOXES_COUNT][9];
+ /*0x83C2*/ u8 boxWallpapers[TOTAL_BOXES_COUNT];
};
-struct StorageAction
-{
- const u8 *text;
- u8 format;
-};
-
-struct StorageText
-{
- const u8 *text;
- int textId;
-};
-
-struct PSS_MenuStringPtrs
-{
- const u8 *text;
- const u8 *desc;
-};
-
-struct UnkStruct_2000028
-{
- const u8 *unk_00;
- u8 *unk_04;
- u16 unk_08;
- u16 unk_0a;
- void (*unk_0c)(struct UnkStruct_2000028 *data);
-};
+extern struct PokemonStorage *gPokemonStoragePtr;
-struct UnkStruct_2000020
-{
- struct UnkStruct_2000028 *unk_00;
- u8 unk_04;
- u8 unk_05;
-};
-
-struct UnkPSSStruct_2002370
-{
- struct Sprite *unk_0000;
- struct Sprite *unk_0004[4];
- u32 unk_0014[3];
- struct Sprite *unk_0020[2];
- u8 filler_0028[0x214];
- u32 unk_023c;
- u16 unk_0240;
- u16 unk_0242;
- u8 curBox;
- u8 unk_0245;
- u8 unk_0246;
-};
-
-struct PokemonStorageSystemData
-{
- u8 state;
- u8 boxOption;
- u8 unk_0002;
- u8 unk_0003;
- u8 taskId;
- u8 unk_0005[710];
- u16 bg2_X;
-};
-
-extern struct UnkPSSStruct_2002370 *gUnknown_02039D04;
-extern struct PokemonStorageSystemData *gUnknown_02039D08;
-
-u8* GetBoxNamePtr(u8 boxNumber);
-struct BoxPokemon *GetBoxedMonPtr(u8, u8);
-void SetBoxMonNickFromAnyBox(u8, u8, u8 *);
-void CompactPartySlots(void);
-u32 GetBoxMonDataFromAnyBox(u8 boxId, u8 monPosition, u32 request);
-bool8 CheckFreePokemonStorageSpace(void);
+u8 CountMonsInBox(u8 boxId);
+s16 GetFirstFreeBoxSpot(u8 boxId);
+u8 CountPartyAliveNonEggMonsExcept(u8 slotToIgnore);
+u16 CountPartyAliveNonEggMons_IgnoreVar0x8004Slot(void);
+u8 CountPartyMons(void);
+u8 *StringCopyAndFillWithSpaces(u8 *dst, const u8 *src, u16 n);
+void ShowPokemonStorageSystemPC(void);
+void ResetPokemonStorageSystem(void);
+s16 CompactPartySlots(void);
u8 StorageGetCurrentBox(void);
-u8 sub_80D214C(struct BoxPokemon *a, u8 b, u8 c, u8 d);
-bool32 sub_80D23A8(u16 move);
+u32 GetBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request);
+void SetBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, const void *value);
+u32 GetCurrentBoxMonData(u8 boxPosition, s32 request);
+void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value);
+void GetBoxMonNickAt(u8 boxId, u8 boxPosition, u8 *dst);
+u32 GetBoxMonLevelAt(u8 boxId, u8 boxPosition);
+void SetBoxMonNickAt(u8 boxId, u8 boxPosition, const u8 *nick);
+u32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst);
+void SetBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon *src);
+void CopyBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon *dst);
+void CreateBoxMonAt(u8 boxId, u8 boxPosition, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 personality, u8 otIDType, u32 otID);
+void ZeroBoxMonAt(u8 boxId, u8 boxPosition);
+void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon *dst);
+struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 boxPosition);
+u8 *GetBoxNamePtr(u8 boxId);
+u8 GetBoxWallpaper(u8 boxId);
+void SetBoxWallpaper(u8 boxId, u8 wallpaperId);
+s16 sub_80D214C(struct BoxPokemon *boxMons, u8 currIndex, u8 maxIndex, u8 arg3);
+bool8 CheckFreePokemonStorageSpace(void);
+bool32 CheckBoxMonSanityAt(u32 boxId, u32 boxPosition);
+u32 CountStorageNonEggMons(void);
+u32 CountAllStorageMons(void);
+bool32 AnyStorageMonWithMove(u16 moveId);
+void ResetWaldaWallpaper(void);
+void SetWaldaWallpaperLockedOrUnlocked(bool32 unlocked);
+bool32 IsWaldaWallpaperUnlocked(void);
+u32 GetWaldaWallpaperPatternId(void);
+void SetWaldaWallpaperPatternId(u8 id);
+u32 GetWaldaWallpaperIconId(void);
+void SetWaldaWallpaperIconId(u8 id);
+u16 *GetWaldaWallpaperColorsPtr(void);
+void SetWaldaWallpaperColors(u16 color1, u16 color2);
+u8 *GetWaldaPhrasePtr(void);
+void SetWaldaPhrase(const u8 *src);
+bool32 IsWaldaPhraseEmpty(void);
#endif // GUARD_POKEMON_STORAGE_SYSTEM_H
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
index 63d740949..e2226b1e1 100755
--- a/include/pokemon_summary_screen.h
+++ b/include/pokemon_summary_screen.h
@@ -6,7 +6,10 @@ extern u8 gUnknown_0203CF20;
void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
void sub_81C4F98(u8, void(*)(void));
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16);
+void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
u8 sub_81C1B94(void);
+void SummaryScreen_SetUnknownTaskId(u8 a0);
+void SummaryScreen_DestroyUnknownTask(void);
// The Pokemon Summary Screen can operate in different modes. Certain features,
// such as move re-ordering, are available in the different modes.
@@ -14,7 +17,7 @@ enum PokemonSummaryScreenMode
{
PSS_MODE_NORMAL,
PSS_MODE_UNK1,
- PSS_MODE_UNK2,
+ PSS_MODE_BOX,
PSS_MODE_SELECT_MOVE,
};
diff --git a/include/rom6.h b/include/rom6.h
deleted file mode 100644
index 8b133e56e..000000000
--- a/include/rom6.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef GUARD_ROM6_H
-#define GUARD_ROM6_H
-
-void OpenPokeblockCase(u8, void(void));
-u8 GetLeadMonIndex(void);
-u8 GetSSTidalLocation(u8 *grp, u8 *num, s16 *x, s16 *y);
-void sub_813BADC(bool8);
-bool8 sub_813B9C0(void);
-void UpdateMirageRnd(u16 days);
-void UpdateBirchState(u16 days);
-void UpdateFrontierManiac(u16 days);
-void UpdateFrontierGambler(u16 days);
-void SetShoalItemFlag(u16 days);
-
-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 c1bdbdf34..faffd3375 100644
--- a/include/rom_8011DC0.h
+++ b/include/rom_8011DC0.h
@@ -5,6 +5,7 @@
// Exported RAM declarations
+extern u8 gUnknown_02022C2C;
extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38;
extern u16 gUnknown_02022C3C;
extern u8 gUnknown_02022C3E;
diff --git a/include/roulette_util.h b/include/roulette_util.h
index 964f551fe..7f0b9cbf8 100644
--- a/include/roulette_util.h
+++ b/include/roulette_util.h
@@ -1,45 +1,44 @@
#ifndef GUARD_ROULETTE_UTIL_H
#define GUARD_ROULETTE_UTIL_H
-struct InnerStruct203CF18_3
+struct PulseBlendSettings
{
- u16 unk0;
- u16 unk2;
- u8 unk4;
- u8 unk5;
- u8 unk6;
- s8 unk7_0:4;
- s8 unk7_4:2;
- s8 unk7_6:1;
+ u16 blendColor;
+ u16 paletteOffset;
+ u8 numColors;
+ u8 delay;
+ u8 numFadeCycles;
+ s8 maxBlendCoeff:4;
+ s8 fadeType:2;
+ s8 restorePaletteOnUnload:1;
s8 unk7_7:1;
};
-struct InnerStruct203CF18_2
+struct PulseBlendPalette
{
- u8 unk0;
- u8 unk1_0:4;
- u8 unk1_4:1;
+ u8 paletteSelector;
+ u8 blendCoeff:4;
+ u8 fadeDirection:1;
s8 unk1_5:1;
- s8 unk1_6:1;
- u32 unk1_7:1;
- u8 unk2;
- u8 unk3;
- struct InnerStruct203CF18_3 unk4;
+ s8 available:1;
+ u32 inUse:1;
+ u8 delayCounter;
+ u8 fadeCycleCounter;
+ struct PulseBlendSettings pulseBlendSettings;
};
-// structures
-struct InnerStruct203CF18
+struct PulseBlend
{
- u16 unk0;
- struct InnerStruct203CF18_2 unk4[16];
+ u16 usedPulseBlendPalettes;
+ struct PulseBlendPalette pulseBlendPalettes[16];
};
-int sub_8151B68(struct InnerStruct203CF18 *, const struct InnerStruct203CF18_3 *);
-void sub_8151B3C(struct InnerStruct203CF18 *);
-void sub_8151CA8(struct InnerStruct203CF18 *, u16, u8);
-void sub_8151C50(struct InnerStruct203CF18 *, u16, u8);
-void sub_8151D28(struct InnerStruct203CF18 *, u16, u8);
-void sub_8151E50(struct InnerStruct203CF18 *);
+int InitPulseBlendPaletteSettings(struct PulseBlend *, const struct PulseBlendSettings *);
+void InitPulseBlend(struct PulseBlend *);
+void MarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8);
+void UnloadUsedPulseBlendPalettes(struct PulseBlend *, u16, u8);
+void UnmarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8);
+void UpdatePulseBlend(struct PulseBlend *);
void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height);
void sub_8152058(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height);
diff --git a/include/save_location.h b/include/save_location.h
index 71dbd3fd8..c330124ad 100644
--- a/include/save_location.h
+++ b/include/save_location.h
@@ -1,6 +1,12 @@
#ifndef GUARD_SAVE_LOCATION_H
#define GUARD_SAVE_LOCATION_H
+// specialSaveWarp flags
+#define CONTINUE_GAME_WARP (1 << 0)
+#define POKECENTER_SAVEWARP (1 << 1)
+#define LOBBY_SAVEWARP (1 << 2)
+#define UNK_SPECIAL_SAVE_WARP_FLAG_3 (1 << 3)
+
void TrySetMapSaveWarpStatus(void);
void sub_81AFDA0(void);
void sub_81AFDD0(void);
diff --git a/include/secret_base.h b/include/secret_base.h
index ac15357e3..524dde473 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -21,7 +21,7 @@ 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);
+void WarpIntoSecretBase(const struct MapPosition *position, const struct MapEvents *events);
// SetCurrentSecretBaseFromPosition
void sub_80E9608(const struct MapPosition *position, const struct MapEvents *events);
diff --git a/include/strings.h b/include/strings.h
index a6f61f603..7c6ca14ba 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1801,4 +1801,193 @@ extern const u8 BattleFrontier_BattlePyramidEmptySquare_Text_254F47[];
extern const u8 BattleFrontier_BattlePyramidEmptySquare_Text_254F0E[];
extern const u8 BattleFrontier_BattlePyramidEmptySquare_Text_254ED3[];
+// PC strings
+extern const u8 gText_ExitFromBox[];
+extern const u8 gText_WhatDoYouWantToDo[];
+extern const u8 gText_PleasePickATheme[];
+extern const u8 gText_PickTheWallpaper[];
+extern const u8 gText_PkmnIsSelected[];
+extern const u8 gText_JumpToWhichBox[];
+extern const u8 gText_DepositInWhichBox[];
+extern const u8 gText_PkmnWasDeposited[];
+extern const u8 gText_BoxIsFull2[];
+extern const u8 gText_ReleaseThisPokemon[];
+extern const u8 gText_PkmnWasReleased[];
+extern const u8 gText_ByeByePkmn[];
+extern const u8 gText_MarkYourPkmn[];
+extern const u8 gText_ThatsYourLastPkmn[];
+extern const u8 gText_YourPartysFull[];
+extern const u8 gText_YoureHoldingAPkmn[];
+extern const u8 gText_WhichOneWillYouTake[];
+extern const u8 gText_YouCantReleaseAnEgg[];
+extern const u8 gText_ContinueBoxOperations[];
+extern const u8 gText_PkmnCameBack[];
+extern const u8 gText_WasItWorriedAboutYou[];
+extern const u8 gText_FourEllipsesExclamation[];
+extern const u8 gText_PleaseRemoveTheMail[];
+extern const u8 gText_GiveToAPkmn[];
+extern const u8 gText_PlacedItemInBag[];
+extern const u8 gText_BagIsFull2[];
+extern const u8 gText_PutItemInBag[];
+extern const u8 gText_ItemIsNowHeld[];
+extern const u8 gText_ChangedToNewItem[];
+extern const u8 gText_MailCantBeStored[];
+extern const u8 gPCText_Cancel[];
+extern const u8 gPCText_Store[];
+extern const u8 gPCText_Withdraw[];
+extern const u8 gPCText_Move[];
+extern const u8 gPCText_Shift[];
+extern const u8 gPCText_Place[];
+extern const u8 gPCText_Summary[];
+extern const u8 gPCText_Release[];
+extern const u8 gPCText_Mark[];
+extern const u8 gPCText_Jump[];
+extern const u8 gPCText_Wallpaper[];
+extern const u8 gPCText_Name[];
+extern const u8 gPCText_Take[];
+extern const u8 gPCText_Give[];
+extern const u8 gPCText_Give[];
+extern const u8 gPCText_Switch[];
+extern const u8 gPCText_Bag[];
+extern const u8 gPCText_Info[];
+extern const u8 gPCText_Scenery1[];
+extern const u8 gPCText_Scenery2[];
+extern const u8 gPCText_Scenery3[];
+extern const u8 gPCText_Etcetera[];
+extern const u8 gPCText_Friends[];
+extern const u8 gPCText_Forest[];
+extern const u8 gPCText_City[];
+extern const u8 gPCText_Desert[];
+extern const u8 gPCText_Savanna[];
+extern const u8 gPCText_Crag[];
+extern const u8 gPCText_Volcano[];
+extern const u8 gPCText_Snow[];
+extern const u8 gPCText_Cave[];
+extern const u8 gPCText_Beach[];
+extern const u8 gPCText_Seafloor[];
+extern const u8 gPCText_River[];
+extern const u8 gPCText_Sky[];
+extern const u8 gPCText_PolkaDot[];
+extern const u8 gPCText_Pokecenter[];
+extern const u8 gPCText_Machine[];
+extern const u8 gPCText_Simple[];
+extern const u8 gText_PartyFull[];
+extern const u8 gText_Box[];
+extern const u8 gText_JustOnePkmn[];
+
+// battle main
+extern const u8 gText_LinkStandby3[];
+extern const u8 gText_BattleRecordCouldntBeSaved[];
+extern const u8 gText_Poison[];
+extern const u8 gText_Sleep[];
+extern const u8 gText_Paralysis[];
+extern const u8 gText_Burn[];
+extern const u8 gText_Ice[];
+extern const u8 gText_Confusion[];
+extern const u8 gText_Love[];
+
+// battle message
+extern const u8 gText_PkmnBoxSomeonesPCFull[];
+extern const u8 gText_PkmnBoxLanettesPCFull[];
+extern const u8 gText_PkmnTransferredSomeonesPC[];
+extern const u8 gText_PkmnTransferredLanettesPC[];
+
+// hall of fame
+extern const u8 gText_LeagueChamp[];
+extern const u8 gText_HOFNumber[];
+extern const u8 gText_PickNextCancel[];
+extern const u8 gText_PickCancel[];
+extern const u8 gText_UnkCtrlF800Exit[];
+extern const u8 gText_HOFCorrupted[];
+extern const u8 gText_WelcomeToHOF[];
+extern const u8 gText_Number[];
+extern const u8 gText_Level[];
+extern const u8 gText_IDNumber[];
+extern const u8 gText_Name[];
+extern const u8 gText_MainMenuTime[];
+
+// daycare
+extern const u8 gText_MaleSymbol4[];
+extern const u8 gText_FemaleSymbol4[];
+extern const u8 gText_GenderlessSymbol[];
+extern const u8 gText_NewLine2[];
+extern const u8 gText_Exit4[];
+extern const u8 gText_Lv[];
+extern const u8 gExpandedPlaceholder_Empty[];
+extern const u8 gText_Exit[];
+extern const u8 gDaycareText_GetAlongVeryWell[];
+extern const u8 gDaycareText_GetAlong[];
+extern const u8 gDaycareText_DontLikeOther[];
+extern const u8 gDaycareText_PlayOther[];
+
+// party menu
+extern const u8 gUnknown_085E9E43[];
+extern const u8 gUnknown_085EA010[];
+extern const u8 gUnknown_085EA02A[];
+extern const u8 gUnknown_085E9E55[];
+extern const u8 gUnknown_085E9E64[];
+extern const u8 gUnknown_085E9E79[];
+extern const u8 gUnknown_085E9E8F[];
+extern const u8 gUnknown_085E9EBC[];
+extern const u8 gUnknown_085E9ED4[];
+extern const u8 gUnknown_085E9EE9[];
+extern const u8 gUnknown_085E9FDB[];
+extern const u8 gUnknown_085EA046[];
+extern const u8 gUnknown_085EA05B[];
+extern const u8 gUnknown_085E9F01[];
+extern const u8 gUnknown_085E9F58[];
+extern const u8 gUnknown_085E9F6F[];
+extern const u8 gUnknown_085E9F81[];
+extern const u8 gUnknown_085E9F90[];
+extern const u8 gUnknown_085E9FA7[];
+extern const u8 gUnknown_085E9FC2[];
+extern const u8 gUnknown_085E9EA6[];
+extern const u8 gUnknown_085E9F16[];
+extern const u8 gUnknown_085E9F2A[];
+extern const u8 gUnknown_085E9F42[];
+extern const u8 gUnknown_085E9FF9[];
+extern const u8 gUnknown_085EA073[];
+extern const u8 gUnknown_085EA091[];
+extern const u8 gUnknown_085EA099[];
+extern const u8 gUnknown_085EA09E[];
+extern const u8 gUnknown_085EA0A4[];
+extern const u8 gUnknown_085EA0AB[];
+extern const u8 gUnknown_085EA0E7[];
+extern const u8 gUnknown_085EA0B1[];
+extern const u8 gUnknown_085EA0B6[];
+extern const u8 gUnknown_085EA0BF[];
+extern const u8 gUnknown_085EA0C5[];
+extern const u8 gUnknown_085EA0CF[];
+extern const u8 gUnknown_085EA0D7[];
+extern const u8 gUnknown_085EA0DC[];
+extern const u8 gText_Take[];
+extern const u8 gText_Mail[];
+extern const u8 gText_Take2[];
+extern const u8 gText_Read2[];
+extern const u8 gText_Cancel2[];
+extern const u8 gText_Shift[];
+extern const u8 gText_SendOut[];
+extern const u8 gText_Enter[];
+extern const u8 gText_NoEntry[];
+extern const u8 gText_Store[];
+extern const u8 gText_Register[];
+extern const u8 gText_Trade4[];
+extern const u8 gText_Summary5[];
+extern const u8 gText_Switch2[];
+extern const u8 gText_Item[];
+extern const u8 gText_NotPkmnOtherTrainerWants[];
+extern const u8 gText_ThatIsntAnEgg[];
+extern const u8 gText_PkmnCantBeTradedNow[];
+extern const u8 gText_OtherTrainersPkmnCantBeTraded[];
+extern const u8 gText_EggCantBeTradedNow[];
+extern const u8 gText_OtherTrainerCantAcceptPkmn[];
+extern const u8 gText_CantTradeWithTrainer[];
+
+// trade
+extern const u8 gText_XWillBeSentToY[];
+extern const u8 gText_ByeByeVar1[];
+extern const u8 gText_XSentOverY[];
+extern const u8 gText_TakeGoodCareOfX[];
+extern const u8 gText_CommunicationStandby5[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index 69cbb87ed..d9c7a9a2e 100644
--- a/include/text.h
+++ b/include/text.h
@@ -258,7 +258,7 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c
u16 RenderText(struct TextPrinter *textPrinter);
u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing);
u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32);
-u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing);
+s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing);
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str);
u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y);
u8 GetKeypadIconTileOffset(u8 keypadIconId);
diff --git a/include/trade.h b/include/trade.h
index e3c18bffd..95a10cacf 100644
--- a/include/trade.h
+++ b/include/trade.h
@@ -12,8 +12,12 @@
s32 sub_807A728(void);
void sub_80773AC(void);
void sub_807AE50(void);
-int sub_807A8D0(u32 /* probably wrong */, u16, u16, u8);
-int sub_807A7E0(u32 /* probably wrong */, u32 /* probably wrong */, u16, u16, u16, u16, u8);
+int sub_807A8D0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16, u16, u8);
+int sub_807A7E0(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 a2, u16 a3, u8 a4, u16 a5, u8 a6);
int sub_807A918(struct Pokemon*, u16);
+void sub_807B140(void);
+void sub_807B154(void);
+void sub_807F19C(void);
+void sub_807F1A8(u8, const u8 *, u8);
#endif //GUARD_TRADE_H
diff --git a/include/trainer_card.h b/include/trainer_card.h
index d80a5fa52..1af247d8a 100644
--- a/include/trainer_card.h
+++ b/include/trainer_card.h
@@ -38,5 +38,6 @@ void sub_80C3120(struct TrainerCard *arg0, u16 *arg1, u8 gameVersion);
void TrainerCard_ShowLinkCard(u8 arg0, void (*callback)(void));
void TrainerCard_GenerateCardForPlayer(struct TrainerCard *);
u8 sub_80C4904(u8);
+void sub_80C6D80(const u8 *, u8 *, u8, u8, u8);
#endif // GUARD_TRAINER_CARD_H
diff --git a/include/util.h b/include/util.h
index 997c8f713..9d13453c2 100644
--- a/include/util.h
+++ b/include/util.h
@@ -14,5 +14,6 @@ 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);
+void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha);
#endif // GUARD_UTIL_H
diff --git a/include/window.h b/include/window.h
index 692ca1d81..25573ac3e 100644
--- a/include/window.h
+++ b/include/window.h
@@ -61,10 +61,10 @@ void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue);
void CallWindowFunction(u8 windowId, void ( *func)(u8, u8, u8, u8, u8, u8));
bool8 SetWindowAttribute(u8 windowId, u8 attributeId, u32 value);
u32 GetWindowAttribute(u8 windowId, u8 attributeId);
-u16 AddWindow8Bit(struct WindowTemplate *template);
-u16 AddWindow8Bit(struct WindowTemplate *template);
+u16 AddWindow8Bit(const struct WindowTemplate *template);
+void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue);
void FillWindowPixelRect8Bit(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum);
+void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum);
void CopyWindowToVram8Bit(u8 windowId, u8 mode);
extern struct Window gWindows[];