summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle_message.h2
-rwxr-xr-xinclude/berry_crush.h2
-rw-r--r--include/bg.h14
-rw-r--r--include/constants/contest.h19
-rw-r--r--include/constants/global.h12
-rw-r--r--include/constants/lilycove_lady.h26
-rwxr-xr-xinclude/constants/map_groups.h122
-rw-r--r--include/constants/pokemon.h3
-rw-r--r--include/constants/vars.h100
-rw-r--r--include/contest.h19
-rw-r--r--include/credits.h2
-rw-r--r--include/dodrio_berry_picking.h8
-rw-r--r--include/fieldmap.h4
-rw-r--r--include/gba/defines.h7
-rw-r--r--include/gba/types.h4
-rw-r--r--include/global.fieldmap.h13
-rw-r--r--include/global.h98
-rw-r--r--include/graphics.h24
-rw-r--r--include/item_menu.h4
-rw-r--r--include/lilycove_lady.h18
-rw-r--r--include/link_rfu.h4
-rw-r--r--include/menu.h2
-rw-r--r--include/menu_specialized.h1
-rw-r--r--include/player_pc.h2
-rw-r--r--include/pokedex.h3
-rw-r--r--include/pokemon.h4
-rw-r--r--include/pokemon_jump.h9
-rw-r--r--include/pokenav.h160
-rw-r--r--include/sprite.h1
-rw-r--r--include/strings.h98
-rw-r--r--include/text.h6
-rw-r--r--include/trainer_hill.h2
32 files changed, 539 insertions, 254 deletions
diff --git a/include/battle_message.h b/include/battle_message.h
index 5d811fe69..88ccbb90f 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -154,7 +154,7 @@
{ \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_MOVE; \
- textVar[2] = move; \
+ textVar[2] = (move & 0xFF); \
textVar[3] = (move & 0xFF00) >> 8; \
textVar[4] = B_BUFF_EOS; \
}
diff --git a/include/berry_crush.h b/include/berry_crush.h
index 101450a33..8909ae821 100755
--- a/include/berry_crush.h
+++ b/include/berry_crush.h
@@ -1,6 +1,8 @@
#ifndef GUARD_BERRY_CRUSH_H
#define GUARD_BERRY_CRUSH_H
+#include "main.h"
+
void sub_8020C70(MainCallback callback);
#endif // GUARD_BERRY_CRUSH_H
diff --git a/include/bg.h b/include/bg.h
index ad5acd0ae..3c7eee292 100644
--- a/include/bg.h
+++ b/include/bg.h
@@ -27,13 +27,13 @@ enum
struct BgTemplate
{
- u32 bg:2; // 0x1, 0x2 -> 0x3
- u32 charBaseIndex:2; // 0x4, 0x8 -> 0xC
- u32 mapBaseIndex:5; // 0x10, 0x20, 0x40, 0x80, 0x100 -> 0x1F0
- u32 screenSize:2; // 0x200, 0x400 -> 0x600
- u32 paletteMode:1; // 0x800
- u32 priority:2; // 0x1000, 0x2000 > 0x3000
- u32 baseTile:10;
+ u16 bg:2; // 0x1, 0x2 -> 0x3
+ u16 charBaseIndex:2; // 0x4, 0x8 -> 0xC
+ u16 mapBaseIndex:5; // 0x10, 0x20, 0x40, 0x80, 0x100 -> 0x1F0
+ u16 screenSize:2; // 0x200, 0x400 -> 0x600
+ u16 paletteMode:1; // 0x800
+ u16 priority:2; // 0x1000, 0x2000 > 0x3000
+ u16 baseTile:10;
};
void ResetBgs(void);
diff --git a/include/constants/contest.h b/include/constants/contest.h
new file mode 100644
index 000000000..d3296222b
--- /dev/null
+++ b/include/constants/contest.h
@@ -0,0 +1,19 @@
+#ifndef GUARD_CONSTANTS_CONTEST_H
+#define GUARD_CONSTANTS_CONTEST_H
+
+#define CONTESTANT_COUNT 4
+#define APPLAUSE_METER_SIZE 5
+#define CONTEST_TURN_COUNT 5
+
+#define LINK_CONTEST_FLAG_IS_LINK (1 << 0)
+#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1)
+#define LINK_CONTEST_FLAG_HAS_RS_PLAYER (1 << 2)
+
+#define CONTEST_CATEGORY_COOL 0
+#define CONTEST_CATEGORY_BEAUTY 1
+#define CONTEST_CATEGORY_CUTE 2
+#define CONTEST_CATEGORY_SMART 3
+#define CONTEST_CATEGORY_TOUGH 4
+#define CONTEST_CATEGORIES_COUNT 5
+
+#endif // GUARD_CONSTANTS_CONTEST_H
diff --git a/include/constants/global.h b/include/constants/global.h
index ff28d6a4b..a862ecad2 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -50,6 +50,8 @@
#define PYRAMID_BAG_ITEMS_COUNT 10
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
+#define TRAINER_ID_LENGTH 4
+
// string lengths
#define ITEM_NAME_LENGTH 14
#define POKEMON_NAME_LENGTH 10
@@ -74,4 +76,14 @@
#define OPTIONS_BATTLE_STYLE_SHIFT 0
#define OPTIONS_BATTLE_STYLE_SET 1
+#define DIR_NONE 0
+#define DIR_SOUTH 1
+#define DIR_NORTH 2
+#define DIR_WEST 3
+#define DIR_EAST 4
+#define DIR_SOUTHWEST 5
+#define DIR_SOUTHEAST 6
+#define DIR_NORTHWEST 7
+#define DIR_NORTHEAST 8
+
#endif // GUARD_CONSTANTS_GLOBAL_H
diff --git a/include/constants/lilycove_lady.h b/include/constants/lilycove_lady.h
new file mode 100644
index 000000000..01f60ccf4
--- /dev/null
+++ b/include/constants/lilycove_lady.h
@@ -0,0 +1,26 @@
+#ifndef GUARD_LILYCOVE_LADY_CONSTANTS_H
+#define GUARD_LILYCOVE_LADY_CONSTANTS_H
+
+#define LILYCOVE_LADY_QUIZ 0
+#define LILYCOVE_LADY_FAVOR 1
+#define LILYCOVE_LADY_CONTEST 2
+#define LILYCOVE_LADY_COUNT 3
+
+#define LILYCOVE_LADY_STATE_READY 0
+#define LILYCOVE_LADY_STATE_COMPLETED 1
+#define LILYCOVE_LADY_STATE_PRIZE 2
+
+#define LILYCOVE_LADY_GIFT_THRESHOLD 5
+
+#define QUIZ_AUTHOR_PLAYER 0
+#define QUIZ_AUTHOR_OTHER_PLAYER 1
+#define QUIZ_AUTHOR_LADY 2
+
+// Would be redundant with the above set if GF hadn't mixed the order
+#define QUIZ_AUTHOR_NAME_LADY 0
+#define QUIZ_AUTHOR_NAME_PLAYER 1
+#define QUIZ_AUTHOR_NAME_OTHER_PLAYER 2
+
+#define QUIZ_QUESTION_LEN 9
+
+#endif
diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h
index dc2ac2f32..6a3276b44 100755
--- a/include/constants/map_groups.h
+++ b/include/constants/map_groups.h
@@ -398,67 +398,67 @@
#define MAP_METEOR_FALLS_STEVENS_CAVE (107 | (24 << 8))
// Map Group 25
-#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8))
-#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8))
-#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8))
-#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8))
-#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8))
-#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8))
-#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8))
-#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8))
-#define MAP_SINGLE_BATTLE_COLOSSEUM (24 | (25 << 8))
-#define MAP_TRADE_CENTER (25 | (25 << 8))
-#define MAP_RECORD_CORNER (26 | (25 << 8))
-#define MAP_DOUBLE_BATTLE_COLOSSEUM (27 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM1 (28 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_29 (29 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_30 (30 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_31 (31 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_32 (32 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_33 (33 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_34 (34 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM2 (35 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM3 (36 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM4 (37 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM5 (38 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM6 (39 | (25 << 8))
-#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8))
-#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8))
-#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8))
-#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8))
-#define MAP_UNION_ROOM (60 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8))
+#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8))
+#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8))
+#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8))
+#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8))
+#define MAP_SINGLE_BATTLE_COLOSSEUM (24 | (25 << 8))
+#define MAP_TRADE_CENTER (25 | (25 << 8))
+#define MAP_RECORD_CORNER (26 | (25 << 8))
+#define MAP_DOUBLE_BATTLE_COLOSSEUM (27 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM1 (28 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_29 (29 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_30 (30 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_31 (31 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_32 (32 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_33 (33 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_34 (34 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM2 (35 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM3 (36 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM4 (37 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM5 (38 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM6 (39 | (25 << 8))
+#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8))
+#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8))
+#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8))
+#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8))
+#define MAP_UNION_ROOM (60 | (25 << 8))
// Map Group 26
#define MAP_SAFARI_ZONE_NORTHWEST (0 | (26 << 8))
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index f63d755ad..5d0e562bc 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -82,4 +82,7 @@
#define NUM_STATS 6
#define NUM_BATTLE_STATS 8
+// Shiny odds
+#define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536
+
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 6fd1c16dd..6b213c8cc 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -94,56 +94,56 @@
#define VAR_POKELOT_PRIZE_PLACE 0x404D
#define VAR_UNUSED_0x404E 0x404E // Unused Var
#define VAR_LOTAD_SIZE_RECORD 0x404F
-#define VAR_0x4050 0x4050
-#define VAR_ROUTE102_ACCESSIBLE 0x4051
-#define VAR_UNUSED_0x4052 0x4052 // Unused Var
-#define VAR_LAVARIDGE_RIVAL_STATE 0x4053
-#define VAR_CURRENT_SECRET_BASE 0x4054
-#define VAR_UNUSED_0x4055 0x4055 // Unused Var
-#define VAR_UNUSED_0x4056 0x4056 // Unused Var
-#define VAR_PETALBURG_STATE 0x4057
-#define VAR_SLATEPORT_STATE 0x4058
-#define VAR_UNUSED_0x4059 0x4059 // Unused Var
-#define VAR_RUSTBORO_STATE 0x405A
-#define VAR_UNUSED_0x405B 0x405B // Unused Var
-#define VAR_UNUSED_0x405C 0x405C // Unused Var
-#define VAR_MOSSDEEP_STATE 0x405D
-#define VAR_RAYQUAZA_STATE 0x405E
-#define VAR_UNUSED_0x405F 0x405F // Unused Var
+#define VAR_LITTLEROOT_TOWN_STATE 0x4050
+#define VAR_OLDALE_TOWN_STATE 0x4051
+#define VAR_DEWFORD_TOWN_STATE 0x4052 // Unused Var
+#define VAR_LAVARIDGE_TOWN_STATE 0x4053
+#define VAR_CURRENT_SECRET_BASE 0x4054 // was probably allocated for VAR_FALLARBOR_TOWN_STATE at one point
+#define VAR_VERDANTURF_TOWN_STATE 0x4055 // Unused Var
+#define VAR_PACIFIDLOG_TOWN_STATE 0x4056 // Unused Var
+#define VAR_PETALBURG_CITY_STATE 0x4057
+#define VAR_SLATEPORT_CITY_STATE 0x4058
+#define VAR_MAUVILLE_CITY_STATE 0x4059 // Unused Var
+#define VAR_RUSTBORO_CITY_STATE 0x405A
+#define VAR_FORTREE_CITY_STATE 0x405B // Unused Var
+#define VAR_LILYCOVE_CITY_STATE 0x405C // Unused Var
+#define VAR_MOSSDEEP_CITY_STATE 0x405D
+#define VAR_SOOTOPOLIS_CITY_STATE 0x405E
+#define VAR_EVER_GRANDE_CITY_STATE 0x405F // Unused Var
#define VAR_ROUTE101_STATE 0x4060
-#define VAR_UNUSED_0x4061 0x4061 // Unused Var
-#define VAR_UNUSED_0x4062 0x4062 // Unused Var
-#define VAR_0x4063 0x4063
-#define VAR_UNUSED_0x4064 0x4064 // Unused Var
-#define VAR_UNUSED_0x4065 0x4065 // Unused Var
-#define VAR_UNUSED_0x4066 0x4066 // Unused Var
-#define VAR_UNUSED_0x4067 0x4067 // Unused Var
-#define VAR_UNUSED_0x4068 0x4068 // Unused Var
+#define VAR_ROUTE102_STATE 0x4061 // Unused Var
+#define VAR_ROUTE103_STATE 0x4062 // Unused Var
+#define VAR_ROUTE104_STATE 0x4063
+#define VAR_ROUTE105_STATE 0x4064 // Unused Var
+#define VAR_ROUTE106_STATE 0x4065 // Unused Var
+#define VAR_ROUTE107_STATE 0x4066 // Unused Var
+#define VAR_ROUTE108_STATE 0x4067 // Unused Var
+#define VAR_ROUTE109_STATE 0x4068 // Unused Var
#define VAR_ROUTE110_STATE 0x4069
-#define VAR_UNUSED_0x406A 0x406A // Unused Var
-#define VAR_UNUSED_0x406B 0x406B // Unused Var
-#define VAR_UNUSED_0x406C 0x406C // Unused Var
-#define VAR_UNUSED_0x406D 0x406D // Unused Var
-#define VAR_UNUSED_0x406E 0x406E // Unused Var
+#define VAR_ROUTE111_STATE 0x406A // Unused Var
+#define VAR_ROUTE112_STATE 0x406B // Unused Var
+#define VAR_ROUTE113_STATE 0x406C // Unused Var
+#define VAR_ROUTE114_STATE 0x406D // Unused Var
+#define VAR_ROUTE115_STATE 0x406E // Unused Var
#define VAR_ROUTE116_STATE 0x406F
-#define VAR_UNUSED_0x4070 0x4070 // Unused Var
+#define VAR_ROUTE117_STATE 0x4070 // Unused Var
#define VAR_ROUTE118_STATE 0x4071
#define VAR_ROUTE119_STATE 0x4072
-#define VAR_UNUSED_0x4073 0x4073 // Unused Var
+#define VAR_ROUTE120_STATE 0x4073 // Unused Var
#define VAR_ROUTE121_STATE 0x4074
-#define VAR_UNUSED_0x4075 0x4075 // Unused Var
-#define VAR_UNUSED_0x4076 0x4076 // Unused Var
-#define VAR_UNUSED_0x4077 0x4077 // Unused Var
-#define VAR_UNUSED_0x4078 0x4078 // Unused Var
-#define VAR_UNUSED_0x4079 0x4079 // Unused Var
-#define VAR_UNUSED_0x407A 0x407A // Unused Var
+#define VAR_ROUTE122_STATE 0x4075 // Unused Var
+#define VAR_ROUTE123_STATE 0x4076 // Unused Var
+#define VAR_ROUTE124_STATE 0x4077 // Unused Var
+#define VAR_ROUTE125_STATE 0x4078 // Unused Var
+#define VAR_ROUTE126_STATE 0x4079 // Unused Var
+#define VAR_ROUTE127_STATE 0x407A // Unused Var
#define VAR_ROUTE128_STATE 0x407B
-#define VAR_UNUSED_0x407C 0x407C // Unused Var
-#define VAR_UNUSED_0x407D 0x407D // Unused Var
-#define VAR_UNUSED_0x407E 0x407E // Unused Var
-#define VAR_UNUSED_0x407F 0x407F // Unused Var
-#define VAR_UNUSED_0x4080 0x4080 // Unused Var
-#define VAR_UNUSED_0x4081 0x4081 // Unused Var
+#define VAR_ROUTE129_STATE 0x407C // Unused Var
+#define VAR_ROUTE130_STATE 0x407D // Unused Var
+#define VAR_ROUTE131_STATE 0x407E // Unused Var
+#define VAR_ROUTE132_STATE 0x407F // Unused Var
+#define VAR_ROUTE133_STATE 0x4080 // Unused Var
+#define VAR_ROUTE134_STATE 0x4081 // Unused Var
#define VAR_LITTLEROOT_HOUSES_STATE 0x4082
#define VAR_UNUSED_0x4083 0x4083 // Unused Var
#define VAR_BIRCH_LAB_STATE 0x4084
@@ -156,7 +156,7 @@
#define VAR_UNUSED_0x408B 0x408B // Unused Var
#define VAR_LITTLEROOT_HOUSES_STATE_2 0x408C
#define VAR_LITTLEROOT_RIVAL_STATE 0x408D
-#define VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE 0x408E
+#define VAR_BOARD_BRINEY_BOAT_STATE 0x408E
#define VAR_DEVON_CORP_3F_STATE 0x408F
#define VAR_BRINEY_HOUSE_STATE 0x4090
#define VAR_UNUSED_0x4091 0x4091 // Unused Var
@@ -165,7 +165,7 @@
#define VAR_LILYCOVE_MUSEUM_2F_STATE 0x4094
#define VAR_LILYCOVE_FAN_CLUB_STATE 0x4095
#define VAR_BRINEY_LOCATION 0x4096
-#define VAR_INIT_SECRET_BASE 0x4097
+#define VAR_INIT_SECRET_BASE 0x4097
#define VAR_PETALBURG_WOODS_STATE 0x4098
#define VAR_LILYCOVE_CONTEST_LOBBY_STATE 0x4099
#define VAR_RUSTURF_TUNNEL_STATE 0x409A
@@ -213,11 +213,11 @@
#define VAR_FOSSIL_RESURRECTION_STATE 0x40C4
#define VAR_WHICH_FOSSIL_REVIVED 0x40C5
#define VAR_STEVENS_HOUSE_STATE 0x40C6
-#define VAR_OLDALE_STATE 0x40C7
+#define VAR_OLDALE_RIVAL_STATE 0x40C7
#define VAR_JAGGED_PASS_STATE 0x40C8
#define VAR_SCOTT_PETALBURG_ENCOUNTER 0x40C9
#define VAR_SKY_PILLAR_STATE 0x40CA
-#define VAR_ROUTE_111_STATE 0x40CB
+#define VAR_MIRAGE_TOWER_STATE 0x40CB
#define VAR_FOSSIL_MANIAC_STATE 0x40CC
#define VAR_CABLE_CLUB_TUTORIAL_STATE 0x40CD
#define VAR_FRONTIER_BATTLE_MODE 0x40CE
@@ -225,14 +225,14 @@
#define VAR_HAS_ENTERED_BATTLE_FRONTIER 0x40D0 // Var is used like a flag.
#define VAR_SCOTT_STATE 0x40D1
#define VAR_SLATEPORT_OUTSIDE_MUSEUM_STATE 0x40D2
-#define VAR_0x40D3 0x40D3
+#define VAR_DEX_UPGRADE_JOHTO_STARTER_STATE 0x40D3
#define VAR_SS_TIDAL_SCOTT_STATE 0x40D4 // Always equal to FLAG_MET_SCOTT_ON_SS_TIDAL
#define VAR_ROAMER_POKEMON 0x40D5 // 0 = Latias, 1 = Latios
#define VAR_TRAINER_HILL_IS_ACTIVE 0x40D6
#define VAR_SKY_PILLAR_RAQUAZA_CRY_DONE 0x40D7
-#define VAR_SOOTOPOLIS_STATE 0x40D8
+#define VAR_SOOTOPOLIS_WALLACE_STATE 0x40D8
#define VAR_HAS_TALKED_TO_SEAFLOOR_CAVERN_ENTRANCE_GRUNT 0x40D9
-#define VAR_0x40DA 0x40DA
+#define VAR_REGISTER_BIRCH_STATE 0x40DA
#define VAR_UNUSED_0x40DB 0x40DB // Unused Var
#define VAR_UNUSED_0x40DC 0x40DC // Unused Var
#define VAR_EVENT_PICHU_SLOT 0x40DD
diff --git a/include/contest.h b/include/contest.h
index a4e209bcb..8ef208aea 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -2,10 +2,7 @@
#define GUARD_CONTEST_H
#include "palette.h"
-
-#define CONTESTANT_COUNT 4
-#define APPLAUSE_METER_SIZE 5
-#define CONTEST_TURN_COUNT 5
+#include "constants/contest.h"
enum
{
@@ -18,20 +15,6 @@ enum
CONTEST_DEBUG_MODE_PRINT_UNK_D
};
-#define LINK_CONTEST_FLAG_IS_LINK (1 << 0)
-#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1)
-#define LINK_CONTEST_FLAG_HAS_RS_PLAYER (1 << 2)
-
-enum
-{
- CONTEST_CATEGORY_COOL,
- CONTEST_CATEGORY_BEAUTY,
- CONTEST_CATEGORY_CUTE,
- CONTEST_CATEGORY_SMART,
- CONTEST_CATEGORY_TOUGH,
- CONTEST_CATEGORIES_COUNT,
-};
-
enum
{
CONTEST_EFFECT_HIGHLY_APPEALING,
diff --git a/include/credits.h b/include/credits.h
index e7e58415b..f7dfa9997 100644
--- a/include/credits.h
+++ b/include/credits.h
@@ -7,6 +7,6 @@
extern EWRAM_DATA bool8 gHasHallOfFameRecords;
// Exported ROM declarations
-void sub_8175620(void);
+void CB2_StartCreditsSequence(void);
#endif // GUARD_CREDITS_H
diff --git a/include/dodrio_berry_picking.h b/include/dodrio_berry_picking.h
new file mode 100644
index 000000000..55e8fa880
--- /dev/null
+++ b/include/dodrio_berry_picking.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_DODRIO_BERRY_PICKING_H
+#define GUARD_DODRIO_BERRY_PICKING_H
+
+void sub_802493C(u16 a0, void (*callback)(void));
+void sub_8027A5C(void);
+void sub_8027AAC(void);
+
+#endif // GUARD_DODRIO_BERRY_PICKING_H
diff --git a/include/fieldmap.h b/include/fieldmap.h
index 2384ed46a..be5610a46 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -23,9 +23,9 @@ int GetMapBorderIdAt(int x, int y);
int CanCameraMoveInDirection(int direction);
u16 GetBehaviorByMetatileId(u16 metatileId);
void GetCameraFocusCoords(u16 *x, u16 *y);
-u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y);
+u8 MapGridGetMetatileLayerTypeAt(int x, int y);
u8 MapGridGetZCoordAt(int x, int y);
-u8 CameraMove(s32 deltaX, s32 deltaY);
+bool8 CameraMove(int deltaX, int deltaY);
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);
diff --git a/include/gba/defines.h b/include/gba/defines.h
index b68a2ad1e..9bd695aaa 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -6,9 +6,16 @@
#define TRUE 1
#define FALSE 0
+#define BSS_DATA __attribute__((section(".bss")))
#define IWRAM_DATA __attribute__((section("iwram_data")))
#define EWRAM_DATA __attribute__((section("ewram_data")))
+#if MODERN
+#define NOINLINE __attribute__((noinline))
+#else
+#define NOINLINE
+#endif
+
#define ALIGNED(n) __attribute__((aligned(n)))
#define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0)
diff --git a/include/gba/types.h b/include/gba/types.h
index 9f2594703..7163f925f 100644
--- a/include/gba/types.h
+++ b/include/gba/types.h
@@ -68,6 +68,10 @@ struct OamData
/*0x06*/ u16 affineParam;
};
+#define ST_OAM_HFLIP 0x08
+#define ST_OAM_VFLIP 0x10
+#define ST_OAM_MNUM_FLIP_MASK 0x18
+
#define ST_OAM_OBJ_NORMAL 0
#define ST_OAM_OBJ_BLEND 1
#define ST_OAM_OBJ_WINDOW 2
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index b5a86e311..a17180589 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -267,19 +267,6 @@ enum
enum
{
- DIR_NONE,
- DIR_SOUTH,
- DIR_NORTH,
- DIR_WEST,
- DIR_EAST,
- DIR_SOUTHWEST,
- DIR_SOUTHEAST,
- DIR_NORTHWEST,
- DIR_NORTHEAST,
-};
-
-enum
-{
COLLISION_LEDGE_JUMP = 6
};
diff --git a/include/global.h b/include/global.h
index 969680dd7..a82fe5861 100644
--- a/include/global.h
+++ b/include/global.h
@@ -2,6 +2,7 @@
#define GUARD_GLOBAL_H
#include <string.h>
+#include <limits.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"
@@ -18,16 +19,23 @@
#if defined (__APPLE__) || defined (__CYGWIN__) || defined (_MSC_VER)
#define _(x) x
#define __(x) x
-#define INCBIN_U8 {0}
-#define INCBIN_U16 {0}
-#define INCBIN_U32 {0}
-#define INCBIN_S8 {0}
-#define INCBIN_S16 {0}
-#define INCBIN_S32 {0}
+
+// Fool CLion IDE
+#define INCBIN(x) {0}
+#define INCBIN_U8 INCBIN
+#define INCBIN_U16 INCBIN
+#define INCBIN_U32 INCBIN
+#define INCBIN_S8 INCBIN
+#define INCBIN_S16 INCBIN
+#define INCBIN_S32 INCBIN
#endif // IDE support
#define ARRAY_COUNT(array) (size_t)(sizeof(array) / sizeof((array)[0]))
+// GameFreak used a macro called "NELEMS", as evidenced by
+// AgbAssert calls.
+#define NELEMS(arr) (sizeof(arr)/sizeof(*(arr)))
+
#define SWAP(a, b, temp) \
{ \
temp = a; \
@@ -62,6 +70,10 @@
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
+#if MODERN
+#define abs(x) (((x) < 0) ? -(x) : (x))
+#endif
+
// Extracts the upper 16 bits of a 32-bit number
#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
@@ -158,18 +170,17 @@ struct Pokedex
/*0x44*/ u8 seen[DEX_FLAGS_NO];
};
-struct PokemonJumpResults // possibly used in the game itself?
+struct PokemonJumpResults
{
u16 jumpsInRow;
u16 field2;
u16 excellentsInRow;
u16 field6;
- u16 field8;
- u16 fieldA;
+ u32 field8;
u32 bestJumpScore;
};
-struct BerryPickingResults // possibly used in the game itself? Size may be wrong as well
+struct BerryPickingResults
{
u32 bestScore;
u16 berriesPicked;
@@ -213,7 +224,7 @@ struct Apprentice
u8 number;
struct ApprenticeMon party[3];
u16 easyChatWords[6];
- u8 playerId[4];
+ u8 playerId[TRAINER_ID_LENGTH];
u8 playerName[PLAYER_NAME_LENGTH];
u8 language;
u32 checksum;
@@ -252,7 +263,7 @@ struct EmeraldBattleTowerRecord
/*0x01*/ u8 facilityClass;
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
- /*0x0C*/ u8 trainerId[4];
+ /*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH];
/*0x10*/ u16 greeting[6];
/*0x1C*/ u16 speechWon[6];
/*0x28*/ u16 speechLost[6];
@@ -267,7 +278,7 @@ struct BattleTowerEReaderTrainer
/*0x01*/ u8 facilityClass;
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
- /*0x0C*/ u8 trainerId[4];
+ /*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH];
/*0x10*/ u16 greeting[6];
/*0x1C*/ u16 farewellPlayerLost[6];
/*0x28*/ u16 farewellPlayerWon[6];
@@ -414,7 +425,7 @@ struct PlayersApprentice
struct RankingHall1P
{
- u8 id[4];
+ u8 id[TRAINER_ID_LENGTH];
u16 winStreak;
u8 name[PLAYER_NAME_LENGTH + 1];
u8 language;
@@ -422,8 +433,8 @@ struct RankingHall1P
struct RankingHall2P
{
- u8 id1[4];
- u8 id2[4];
+ u8 id1[TRAINER_ID_LENGTH];
+ u8 id2[TRAINER_ID_LENGTH];
u16 winStreak;
u8 name1[PLAYER_NAME_LENGTH + 1];
u8 name2[PLAYER_NAME_LENGTH + 1];
@@ -435,7 +446,7 @@ struct SaveBlock2
/*0x00*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x08*/ u8 playerGender; // MALE, FEMALE
/*0x09*/ u8 specialSaveWarpFlags;
- /*0x0A*/ u8 playerTrainerId[4];
+ /*0x0A*/ u8 playerTrainerId[TRAINER_ID_LENGTH];
/*0x0E*/ u16 playTimeHours;
/*0x10*/ u8 playTimeMinutes;
/*0x11*/ u8 playTimeSeconds;
@@ -484,7 +495,7 @@ struct SecretBase
/*0x1A9D*/ u8 battledOwnerToday:1;
/*0x1A9D*/ u8 registryStatus:2;
/*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH];
- /*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
+ /*0x1AA5*/ u8 trainerId[TRAINER_ID_LENGTH]; // byte 0 is used for determining trainer class
/*0x1AA9*/ u8 language;
/*0x1AAA*/ u16 numSecretBasesReceived;
/*0x1AAC*/ u8 numTimesEntered;
@@ -570,7 +581,7 @@ struct MailStruct
{
/*0x00*/ u16 words[MAIL_WORDS_COUNT];
/*0x12*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x1A*/ u8 trainerId[4];
+ /*0x1A*/ u8 trainerId[TRAINER_ID_LENGTH];
/*0x1E*/ u16 species;
/*0x20*/ u16 itemId;
};
@@ -587,7 +598,7 @@ struct MauvilleManBard
/*0x0E*/ u16 temporaryLyrics[6];
/*0x1A*/ u8 playerName[8];
/*0x22*/ u8 filler_2DB6[0x3];
- /*0x25*/ u8 playerTrainerId[4];
+ /*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH];
/*0x29*/ bool8 hasChangedSong;
/*0x2A*/ u8 language;
}; /*size = 0x2C*/
@@ -726,50 +737,43 @@ struct RecordMixingDayCareMail
bool16 holdsItem[DAYCARE_MON_COUNT];
};
-enum
-{
- LILYCOVE_LADY_QUIZ,
- LILYCOVE_LADY_FAVOUR,
- LILYCOVE_LADY_CONTEST
-};
-
struct LilycoveLadyQuiz
{
/*0x000*/ u8 id;
- /*0x001*/ u8 phase;
- /*0x002*/ u16 unk_002[9];
- /*0x014*/ u16 unk_014;
- /*0x016*/ u16 unk_016;
+ /*0x001*/ u8 state;
+ /*0x002*/ u16 question[9];
+ /*0x014*/ u16 correctAnswer;
+ /*0x016*/ u16 playerAnswer;
/*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x020*/ u16 playerTrainerId[4];
- /*0x028*/ u16 itemId;
- /*0x02a*/ u8 unk_02a;
- /*0x02b*/ u8 unk_02b;
- /*0x02c*/ u8 unk_02c;
+ /*0x020*/ u16 playerTrainerId[TRAINER_ID_LENGTH];
+ /*0x028*/ u16 prize;
+ /*0x02a*/ bool8 waitingForChallenger;
+ /*0x02b*/ u8 questionId;
+ /*0x02c*/ u8 prevQuestionId;
/*0x02d*/ u8 language;
};
-struct LilycoveLadyFavour
+struct LilycoveLadyFavor
{
/*0x000*/ u8 id;
- /*0x001*/ u8 phase;
- /*0x002*/ u8 unk_002;
- /*0x003*/ u8 unk_003;
+ /*0x001*/ u8 state;
+ /*0x002*/ bool8 likedItem;
+ /*0x003*/ u8 numItemsGiven;
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x00c*/ u8 unk_00c;
+ /*0x00c*/ u8 favorId;
/*0x00e*/ u16 itemId;
- /*0x010*/ u16 unk_010;
+ /*0x010*/ u16 bestItem;
/*0x012*/ u8 language;
};
struct LilycoveLadyContest
{
/*0x000*/ u8 id;
- /*0x001*/ u8 phase;
- /*0x002*/ u8 fave_pkblk;
- /*0x003*/ u8 other_pkblk;
+ /*0x001*/ bool8 givenPokeblock;
+ /*0x002*/ u8 numGoodPokeblocksGiven;
+ /*0x003*/ u8 numOtherPokeblocksGiven;
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x00c*/ u8 max_sheen;
+ /*0x00c*/ u8 maxSheen;
/*0x00d*/ u8 category;
/*0x00e*/ u8 language;
};
@@ -777,7 +781,7 @@ struct LilycoveLadyContest
typedef union // 3b58
{
struct LilycoveLadyQuiz quiz;
- struct LilycoveLadyFavour favour;
+ struct LilycoveLadyFavor favor;
struct LilycoveLadyContest contest;
u8 id;
u8 pad[0x40];
diff --git a/include/graphics.h b/include/graphics.h
index 43b014a9f..d1d99cc8f 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4005,10 +4005,13 @@ extern const u32 gBerryPalette_Starf[];
extern const u32 gBerryPic_Enigma[];
extern const u32 gBerryPalette_Enigma[];
-//credits
-extern const u32 gCreditsCopyrightEnd_Gfx[];
-
//pokenav
+extern const u16 gPokenavCondition_Pal[];
+extern const u32 gPokenavCondition_Gfx[];
+extern const u32 gPokenavCondition_Tilemap[];
+extern const u16 gPokenavOptions_Tilemap[];
+extern const u32 gPokenavOptions_Gfx[];
+extern const u16 gPokenavOptions_Pal[];
extern const u8 gPokenavConditionMarker_Gfx[];
extern const u16 gPokenavConditionMarker_Pal[];
extern const u16 gPokenavLeftHeader_Pal[];
@@ -4027,6 +4030,9 @@ extern const u32 gPokenavLeftHeaderBeauty_Gfx[];
extern const u32 gPokenavLeftHeaderCute_Gfx[];
extern const u32 gPokenavLeftHeaderSmart_Gfx[];
extern const u32 gPokenavLeftHeaderTough_Gfx[];
+extern const u16 gUnknown_08DDE010[];
+extern const u32 gUnknown_08DDE030[];
+extern const u32 gUnknown_08DDE12C[];
extern const u32 gPageInfoTilemap[];
extern const u32 gUnknown_08D98CC8[];
@@ -4080,7 +4086,7 @@ extern const u32 gContestConfetti_Pal[];
extern const u32 gUnknown_08C093F0[];
extern const u32 gSubstituteDollTilemap[];
extern const u32 gSubstituteDollGfx[];
-extern const u16 gSubstituteDollPal[];
+extern const u32 gSubstituteDollPal[];
extern const u32 gHealthboxSinglesPlayerGfx[];
extern const u32 gHealthboxSinglesOpponentGfx[];
extern const u32 gHealthboxDoublesPlayerGfx[];
@@ -4936,9 +4942,19 @@ extern const u32 gLinkMiscMenu_Tilemap[];
// Use Pokeblock
extern const u8 gPokenavConditionCancel_Gfx[];
extern const u16 gPokenavConditionCancel_Pal[];
+extern const u8 gUsePokeblockUpDown_Gfx[];
+extern const u16 gUsePokeblockUpDown_Pal[];
+extern const u16 gUsePokeblockCondition_Pal[];
// Berry Crush
extern const u32 gUnknown_08DE34B8[];
extern const u16 gUnknown_08DE3398[];
+// Pokenav
+extern const u32 gPokenavMessageBox_Gfx[];
+extern const u32 gPokenavMessageBox_Tilemap[];
+extern const u16 gPokenavMessageBox_Pal[];
+extern const u32 gPokenavOptions_Gfx[];
+extern const u16 gPokenavOptions_Pal[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/item_menu.h b/include/item_menu.h
index 5580fa4b4..b1275549d 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -69,8 +69,8 @@ extern u16 gSpecialVar_ItemId;
// Exported ROM declarations
void sub_81AAC14(void);
-void sub_81AAC50(void);
-void sub_81AAC70(void);
+void FavorLadyOpenBagMenu(void);
+void QuizLadyOpenBagMenu(void);
void sub_81AAC28(void);
void sub_81AABB0(void);
void SetInitialScrollAndCursorPositions(u8 pocketId);
diff --git a/include/lilycove_lady.h b/include/lilycove_lady.h
index f26285d68..1ec327be9 100644
--- a/include/lilycove_lady.h
+++ b/include/lilycove_lady.h
@@ -2,16 +2,16 @@
#define GUARD_LILYCOVE_LADY_H
u8 GetLilycoveLadyId(void);
-void SetLilycoveLady(void);
-void sub_818DA78(void);
-void sub_818DEF4(void);
-void sub_818E564(void);
-void sub_818E570(const LilycoveLady *lilycoveLady);
+void InitLilycoveLady(void);
+void ResetLilycoveLadyForRecordMix(void);
+void FieldCallback_FavorLadyEnableScriptContexts(void);
+void FieldCallback_QuizLadyEnableScriptContexts(void);
+void QuizLadyClearQuestionForRecordMix(const LilycoveLady *lilycoveLady);
bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock);
-void sub_818E7E0(u8 *dest1, u8 *dest2);
-void sub_818E81C(u8 *dest);
-void sub_818E848(u8 *dest);
-void sub_818E868(u8 *dest, u8 category);
+void BufferContestLadyMonName(u8 *dest1, u8 *dest2);
+void BufferContestLadyPlayerName(u8 *dest);
+void BufferContestLadyLanguage(u8 *dest);
+void BufferContestName(u8 *dest, u8 category);
u8 sub_818E880(void);
#endif //GUARD_LILYCOVE_LADY_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index dc5b963d1..d6e1009e1 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -275,10 +275,10 @@ void sub_8010FCC(u32 a0, u32 a1, u32 a2);
void sub_8011C84(void);
void sub_8012188(const u8 *name, struct UnkLinkRfuStruct_02022B14 *structPtr, u8 a2);
bool32 sub_8011B90(void);
-void sub_800FE50(u16 *a0);
+void sub_800FE50(void *a0);
bool32 sub_800E540(u16 id, u8 *name);
void sub_8011DE0(u32 arg0);
-u8 sub_801100C(int a0);
+u8 sub_801100C(s32 a0);
void sub_800EF7C(void);
bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx);
bool8 sub_800DF34(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx);
diff --git a/include/menu.h b/include/menu.h
index 08cad40bd..62e2558dc 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -25,7 +25,7 @@ void InitStandardTextBoxWindows(void);
void sub_8197200(void);
u16 RunTextPrintersAndIsPrinter0Active(void);
void sub_81973A4(void);
-void DrawDialogueFrame(u8, u8);
+void DrawDialogueFrame(u8 windowId, bool8 copyToVram);
void ClearStdWindowAndFrame(u8 windowId, bool8 copyToVram);
u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 fgColor, u8 bgColor, u8 shadowColor);
void PrintPlayerNameOnWindow(u8, const u8*, u16, u16);
diff --git a/include/menu_specialized.h b/include/menu_specialized.h
index 014ee2585..14a246468 100644
--- a/include/menu_specialized.h
+++ b/include/menu_specialized.h
@@ -34,6 +34,7 @@ void sub_81D1EC0(void);
void sub_81D1D04(u8 a0);
void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0);
void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0);
+void sub_81D21DC(u8 bg);
void sub_81D20AC(struct UnknownStruct_81D1ED4 *arg0);
void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0);
bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0);
diff --git a/include/player_pc.h b/include/player_pc.h
index 53bb25c6b..219c11440 100644
--- a/include/player_pc.h
+++ b/include/player_pc.h
@@ -1,6 +1,8 @@
#ifndef GUARD_PLAYER_PC_H
#define GUARD_PLAYER_PC_H
+#include "menu.h"
+
// local task defines
#define PAGE_INDEX data[0]
#define ITEMS_ABOVE_TOP data[1]
diff --git a/include/pokedex.h b/include/pokedex.h
index a1b7378bf..532c823ee 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -4,6 +4,7 @@
extern u8 gUnusedPokedexU8;
extern void (*gUnknown_030060B4)(void);
+#define KANTO_DEX_COUNT 151
#define HOENN_DEX_COUNT 202
#define NATIONAL_DEX_COUNT 386
@@ -43,7 +44,7 @@ s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
u16 CreateMonSpriteFromNationalDexNumber(u16, s16, s16, u16);
bool16 HasAllHoennMons(void);
void ResetPokedexScrollPositions(void);
-u16 sub_80C0944(void);
+bool16 HasAllMons(void);
void CB2_Pokedex(void);
#endif // GUARD_POKEDEX_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 090a21f18..ec125573c 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -506,7 +506,7 @@ u8 CalculatePlayerPartyCount(void);
u8 CalculateEnemyPartyCount(void);
u8 GetMonsStateToDoubles(void);
u8 GetMonsStateToDoubles_2(void);
-u8 GetAbilityBySpecies(u16 species, bool8 abilityNum);
+u8 GetAbilityBySpecies(u16 species, u8 abilityNum);
u8 GetMonAbility(struct Pokemon *mon);
void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord);
u8 GetSecretBaseTrainerPicIndex(void);
@@ -563,7 +563,7 @@ void PlayBattleBGM(void);
void PlayMapChosenOrBattleBGM(u16 songId);
void sub_806E694(u16 songId);
const u32 *GetMonFrontSpritePal(struct Pokemon *mon);
-const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality);
+const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality);
const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon);
const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality);
bool32 IsHMMove2(u16 move);
diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h
index 9dbf194d0..28b19f9b1 100644
--- a/include/pokemon_jump.h
+++ b/include/pokemon_jump.h
@@ -3,9 +3,12 @@
#include "main.h"
-void sub_802EB24(u8, u8, u8, u8, u8);
-bool32 sub_802EB84(void);
void sub_802A9A8(u16 monId, MainCallback callback);
bool32 sub_802C908(u16 species);
+void sub_802C920(void);
+void ResetPokeJumpResults(void);
+void sub_802E3C4(void);
+void sub_802EB24(s16 tileTag, s16 palTag, s16 x, s16 y, u8 subpriority);
+bool32 sub_802EB84(void);
-#endif //GUARD_POKEMON_JUMP_H
+#endif // GUARD_POKEMON_JUMP_H
diff --git a/include/pokenav.h b/include/pokenav.h
index c840fd494..b1c3287f1 100644
--- a/include/pokenav.h
+++ b/include/pokenav.h
@@ -3,8 +3,23 @@
#include "bg.h"
#include "main.h"
+#include "pokemon_storage_system.h"
-typedef u32 (*LoopedTask)(int state);
+typedef u32 (*LoopedTask)(s32 state);
+
+struct PokenavMonList
+{
+ u8 boxId;
+ u8 monId;
+ u16 unk6;
+};
+
+struct PokenavSub18
+{
+ u16 unk0;
+ u16 unk2;
+ struct PokenavMonList unk4[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE];
+};
// Return values of LoopedTask functions.
#define LT_INC_AND_PAUSE 0
@@ -41,9 +56,35 @@ enum
POKENAV_MENU_E,
};
+enum
+{
+ MC_HEADER_MR_STONE,
+ MC_HEADER_PROF_BIRCH,
+ MC_HEADER_BRENDAN,
+ MC_HEADER_MAY,
+ MC_HEADER_WALLY,
+ MC_HEADER_NORMAN,
+ MC_HEADER_MOM,
+ MC_HEADER_STEVEN,
+ MC_HEADER_SCOTT,
+ MC_HEADER_ROXANNE,
+ MC_HEADER_BRAWLY,
+ MC_HEADER_WATTSON,
+ MC_HEADER_FLANNERY,
+ MC_HEADER_WINONA,
+ MC_HEADER_TATE_LIZA,
+ MC_HEADER_JUAN,
+ MC_HEADER_SIDNEY,
+ MC_HEADER_PHOEBE,
+ MC_HEADER_GLACIA,
+ MC_HEADER_DRAKE,
+ MC_HEADER_WALLACE,
+ MC_HEADER_COUNT
+};
+
// pokenav.c
void sub_81C7694(u32);
-u16 sub_81C76AC(void);
+u32 sub_81C76AC(void);
void CB2_InitPokeNav(void);
u32 CreateLoopedTask(LoopedTask loopedTask, u32 priority);
@@ -62,7 +103,7 @@ void SetVBlankCallback_(IntrCallback callback);
// pokenav_match_call_ui.c
struct MatchCallListTemplate
{
- u32 unk0;
+ struct PokenavMonList * unk0;
u16 unk4;
u16 unk6;
u8 unk8;
@@ -72,9 +113,10 @@ struct MatchCallListTemplate
u8 unkC;
u8 unkD;
u8 unkE;
- void (*unk10)(u32, u8 *a1);
+ void (*unk10)(struct PokenavMonList *, u8 *a1);
void (*unk14)(u16 a0, u32 a1, u32 a2);
};
+
u32 GetSelectedMatchCall(void);
bool32 sub_81C8224(void);
int MatchCall_MoveCursorUp(void);
@@ -93,15 +135,15 @@ bool32 sub_81C81D4(const struct BgTemplate *arg0, struct MatchCallListTemplate *
void sub_81C8234(void);
// pokenav_match_call_data.c
-bool32 sub_81D17E8(u32 idx);
-u8 sub_81D16DC(u32 idx);
+bool32 MatchCall_HasCheckPage(u32 idx);
+u8 MatchCallMapSecGetByIndex(u32 idx);
bool32 sub_81D1BF8(u32 idx);
bool32 MatchCallFlagGetByIndex(u32 idx);
u32 MatchCall_GetRematchTableIdx(u32 idx);
u32 GetTrainerIdxByRematchIdx(u32 rematchIdx);
-int sub_81D1BD0(u32 idx);
+int MatchCall_GetOverrideFacilityClass(u32 idx);
void MatchCall_GetMessage(u32 idx, u8 *dest);
-const u8 *sub_81D1B40(u32 idx, u32 offset);
+const u8 *MatchCall_GetOverrideFlavorText(u32 idx, u32 offset);
void sub_81D1A78(u32 idx, const u8 **desc, const u8 **name);
// pokenav_main_menu.c
@@ -111,7 +153,7 @@ void sub_81C7850(u32 a0);
u32 sub_81C786C(void);
void LoadLeftHeaderGfxForIndex(u32 arg0);
void sub_81C7FA0(u32 arg0, bool32 arg1, bool32 arg2);
-void sub_81C7AC0(int a0);
+void sub_81C7AC0(s32 a0);
bool32 sub_81C8010(void);
void InitBgTemplates(const struct BgTemplate *templates, int count);
bool32 IsPaletteFadeActive(void);
@@ -125,44 +167,51 @@ void sub_81C7B40(void);
struct Sprite *PauseSpinningPokenavSprite(void);
void ResumeSpinningPokenavSprite(void);
void sub_81C7E14(u32 arg0);
+void sub_81C7FC4(u32 arg0, bool32 arg1);
+void sub_81C7880(void);
void sub_81C7990(u32 a0, u16 a1);
+u32 PokenavMainMenuLoopedTaskIsActive(void);
+bool32 WaitForPokenavShutdownFade(void);
+void sub_81C7834(void *func1, void *func2);
+void ShutdownPokenav(void);
// pokenav_unk_1.c
-bool32 sub_81C9298(void);
-bool32 sub_81C92CC(void);
-bool32 sub_81C9304(void);
-bool32 sub_81C9338(void);
-bool32 sub_81C9368(void);
+bool32 PokenavCallback_Init_0(void);
+bool32 PokenavCallback_Init_4(void);
+bool32 PokenavCallback_Init_5(void);
+bool32 PokenavCallback_Init_2(void);
+bool32 PokenavCallback_Init_3(void);
u32 sub_81C941C(void);
void sub_81C9430(void);
int sub_81C9894(void);
const u8 *sub_81CAF78(int index, u8 *arg1);
+int sub_81C98A4(void);
+int sub_81C98B4(void);
+u16 sub_81C98C4(void);
// pokenav_unk_2.c
+bool32 sub_81C9924(void);
+bool32 sub_81C9940(void);
+void sub_81C9990(s32 ltIdx);
+bool32 sub_81C99C0(void);
void sub_81C99D4(void);
void sub_81CAADC(void);
// pokenav_unk_3.c
-struct Pokenav3Struct_Unk1C
-{
- u8 unk0;
- u8 unk1;
- u16 unk2;
-};
-bool32 sub_81CAAE8(void);
+bool32 PokenavCallback_Init_11(void);
u32 sub_81CAB24(void);
void sub_81CAB38(void);
int sub_81CAE28(void);
int sub_81CAE38(void);
int sub_81CAE48(void);
-struct Pokenav3Struct_Unk1C *sub_81CAE94(void);
+struct PokenavMonList *sub_81CAE94(void);
u16 sub_81CAEA4(int);
bool32 sub_81CAEBC(int index);
int sub_81CAF04(int index);
const u8 *sub_81CAFD8(int index, int textType);
u16 sub_81CB01C(void);
u16 sub_81CB02C(int arg0);
-void sub_81CB050(u32 arg0, u8 *str);
+void sub_81CB050(struct PokenavMonList * arg0, u8 *str);
u8 sub_81CB0C8(int rematchIndex);
int sub_81CB0E4(int index);
bool32 sub_81CAE08(int);
@@ -170,18 +219,75 @@ int sub_81CB128(int index);
// pokenav_unk_4.c
bool32 sub_81CB260(void);
-void sub_81CB29C(int index);
+void sub_81CB29C(s32 index);
u32 sub_81CB2CC(void);
void sub_81CB2E0(void);
void sub_81CBD48(u16 windowId, u32 a1);
// pokenav_unk_5.c
-u32 sub_81CC4D4(void);
+u32 PokenavCallback_Init_6(void);
void sub_81CC524(void);
u32 sub_81CC554(void);
bool32 sub_81CC5F4(void);
-void sub_81CC62C(int);
+void sub_81CC62C(s32);
u32 sub_81CC65C(void);
void sub_81CC670(void);
-#endif //GUARD_POKENAV_H
+// pokenav_unk_6.c
+u32 PokenavCallback_Init_7(void);
+u32 PokenavCallback_Init_9(void);
+u32 sub_81CD070(void);
+void sub_81CD1C0(void);
+bool32 sub_81CD3C4(void);
+bool32 sub_81CDD5C(void);
+struct UnknownStruct_81D1ED4 *sub_81CDC70(void);
+u16 sub_81CDC60(void);
+u16 sub_81CDC50(void);
+u8 sub_81CDDB0(void);
+bool32 sub_81CD548(u8 arg0);
+u8 sub_81CDD7C(void);
+u8 *sub_81CDD04(u8 id);
+u8 *sub_81CDD24(u8 id);
+u16 sub_81CDD48(void);
+void *sub_81CDCB4(u8 id);
+void *sub_81CDCD4(u8 id);
+
+// pokenav_unk_7.c
+bool32 sub_81CDDD4(void);
+void sub_81CDE2C(s32);
+u32 sub_81CDE64(void);
+void sub_81CECA0(void);
+u8 sub_81CEF14(void);
+
+// pokenav_unk_8.c
+u32 PokenavCallback_Init_8(void);
+u32 PokenavCallback_Init_10(void);
+u32 sub_81CEFDC(void);
+void sub_81CEFF0(void);
+bool32 sub_81CF330(void);
+bool32 sub_81CF368(void);
+void sub_81CF3A0(s32);
+u32 sub_81CF3D0(void);
+void sub_81CF3F8(void);
+
+// pokenav_unk_9.c
+u32 PokenavCallback_Init_12(void);
+u32 PokenavCallback_Init_14(void);
+u32 sub_81CFA34(void);
+void sub_81CFA48(void);
+bool32 sub_81CFDD0(void);
+bool32 sub_81CFE08(void);
+void sub_81CFE40(s32);
+u32 sub_81CFE70(void);
+void sub_81CFE98(void);
+
+// pokenav_unk_10.c
+u32 PokenavCallback_Init_13(void);
+u32 sub_81D04A0(void);
+void sub_81D04B8(void);
+bool32 sub_81D0978(void);
+void sub_81D09B0(s32);
+u32 sub_81D09E0(void);
+void sub_81D09F4(void);
+
+#endif // GUARD_POKENAV_H
diff --git a/include/sprite.h b/include/sprite.h
index 32bdd9c55..9753837fd 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -275,6 +275,7 @@ void FreeSpriteOamMatrix(struct Sprite *sprite);
void DestroySpriteAndFreeResources(struct Sprite *sprite);
void sub_800142C(u32 a1, u32 a2, u16 *a3, u16 a4, u32 a5);
void AnimateSprite(struct Sprite *sprite);
+void sub_8007E18(struct Sprite* sprite, s16 a2, s16 a3);
void StartSpriteAnim(struct Sprite *sprite, u8 animNum);
void StartSpriteAnimIfDifferent(struct Sprite *sprite, u8 animNum);
void SeekSpriteAnim(struct Sprite *sprite, u8 animCmdIndex);
diff --git a/include/strings.h b/include/strings.h
index f30e82321..78ae2c140 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -485,7 +485,6 @@ extern const u8 gText_CryOf[];
extern const u8 gText_SizeComparedTo[];
extern const u8 gText_PokedexRegistration[];
extern const u8 gText_UnkCtrlF908Clear01[];
-extern const u8 sText_TenDashes2[];
extern const u8 gText_5MarksPokemon[];
extern const u8 gText_UnkHeight[];
extern const u8 gText_UnkWeight[];
@@ -1023,6 +1022,7 @@ extern const u8 gText_PokenavMatchCall_CheckTrainerButtons[];
extern const u8 gText_PokenavRibbons_MonListButtons[];
extern const u8 gText_PokenavRibbons_RibbonListButtons[];
extern const u8 gText_PokenavRibbons_RibbonCheckButtons[];
+extern const u8 gText_Number2[];
extern const u8 gUnknown_085EAD37[];
extern const u8 gUnknown_085EAD41[];
@@ -2708,6 +2708,67 @@ extern const u8 gText_Symbols[];
extern const u8 gText_Register2[];
extern const u8 gText_Exit2[];
+// Dodrio Berry Picking
+extern const u8 gText_BerryPickingRecords[];
+extern const u8 gText_BerriesPicked[];
+extern const u8 gText_BerriesInRowFivePlayers[];
+extern const u8 gText_BestScore[];
+extern const u8 gText_1Colon[];
+extern const u8 gText_2Colon[];
+extern const u8 gText_3Colon[];
+extern const u8 gText_4Colon[];
+extern const u8 gText_5Colon[];
+extern const u8 gText_SpacePoints[];
+extern const u8 gText_10P30P50P50P[];
+extern const u8 gText_AnnouncingPrizes[];
+extern const u8 gText_AnnouncingRankings[];
+extern const u8 gText_FirstPlacePrize[];
+extern const u8 gText_CantHoldAnyMore[];
+extern const u8 gText_FilledStorageSpace[];
+extern const u8 gText_BerryPickingResults[];
+extern const u8 gText_WantToPlayAgain[];
+extern const u8 gText_CommunicationStandby3[];
+extern const u8 gText_SomeoneDroppedOut[];
+
+// Pokemon jump
+extern const u8 gText_WantToPlayAgain2[];
+extern const u8 gText_SomeoneDroppedOut2[];
+extern const u8 gText_CommunicationStandby4[];
+extern const u8 gText_AwesomeWonF701F700[];
+extern const u8 gText_FilledStorageSpace2[];
+extern const u8 gText_CantHoldMore[];
+extern const u8 gText_SpacePoints2[];
+extern const u8 gText_SpaceTimes3[];
+extern const u8 gText_PkmnJumpRecords[];
+extern const u8 gText_JumpsInARow[];
+extern const u8 gText_BestScore2[];
+extern const u8 gText_ExcellentsInARow[];
+
+// Lilycove Lady
+extern const u8 gText_ContestLady_Handsome[];
+extern const u8 gText_ContestLady_Vinny[];
+extern const u8 gText_ContestLady_Moreme[];
+extern const u8 gText_ContestLady_Ironhard[];
+extern const u8 gText_ContestLady_Muscle[];
+extern const u8 gText_ContestLady_Coolness[];
+extern const u8 gText_ContestLady_Beauty[];
+extern const u8 gText_ContestLady_Cuteness[];
+extern const u8 gText_ContestLady_Smartness[];
+extern const u8 gText_ContestLady_Toughness[];
+extern const u8 gText_QuizLady_Lady[];
+extern const u8 gText_FavorLady_Slippery[];
+extern const u8 gText_FavorLady_Roundish[];
+extern const u8 gText_FavorLady_Whamish[];
+extern const u8 gText_FavorLady_Shiny[];
+extern const u8 gText_FavorLady_Sticky[];
+extern const u8 gText_FavorLady_Pointy[];
+
+extern const u8 gText_CoolnessContest[];
+extern const u8 gText_BeautyContest[];
+extern const u8 gText_CutenessContest[];
+extern const u8 gText_SmartnessContest[];
+extern const u8 gText_ToughnessContest[];
+
// Pokenav Match Call
extern const u8 gText_CallCantBeMadeHere[];
extern const u8 gText_NumberRegistered[];
@@ -2715,4 +2776,39 @@ extern const u8 gText_NumberOfBattles[];
extern const u8 gText_Unknown[];
extern const u8 gText_TrainerCloseBy[];
+// pokenav_unk_2
+extern const u8 gUnknown_085EBCC5[];
+extern const u8 gUnknown_085EBCE8[];
+extern const u8 gUnknown_085EBD01[];
+extern const u8 gUnknown_085EBD1C[];
+extern const u8 gUnknown_085EBD34[];
+extern const u8 gUnknown_085EBD83[];
+extern const u8 gUnknown_085EBDA2[];
+extern const u8 gUnknown_085EBDBF[];
+extern const u8 gUnknown_085EBDDB[];
+extern const u8 gUnknown_085EBDEE[];
+extern const u8 gUnknown_085EBE06[];
+extern const u8 gUnknown_085EBE19[];
+extern const u8 gUnknown_085EBE2D[];
+extern const u8 gUnknown_085EBE41[];
+extern const u8 gText_NoRibbonWinners[];
+
+// pokenav_unk_4
+extern const u8 gUnknown_085EC017[];
+extern const u8 gUnknown_085EC01C[];
+extern const u8 gUnknown_085EC022[];
+
+// pokenav_unk_8
+extern const u8 gText_NumberF700[];
+
+// pokenav_unk_10
+extern const u8 gText_RibbonsF700[];
+
+// use_pokeblock
+extern const u8 gText_Coolness[];
+extern const u8 gText_Toughness[];
+extern const u8 gText_Smartness[];
+extern const u8 gText_Cuteness[];
+extern const u8 gText_Beauty3[];
+
#endif // GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index eba3d0c4e..d3ff663bb 100644
--- a/include/text.h
+++ b/include/text.h
@@ -166,7 +166,11 @@ struct TextPrinter
void (*callback)(struct TextPrinterTemplate *, u16); // 0x10
- union __attribute__((packed)) {
+ union
+#if !MODERN
+ __attribute__((packed))
+#endif
+ {
struct TextPrinterSubStruct sub;
u8 fields[7];
} subUnion;
diff --git a/include/trainer_hill.h b/include/trainer_hill.h
index ad2713316..e605ac654 100644
--- a/include/trainer_hill.h
+++ b/include/trainer_hill.h
@@ -24,7 +24,7 @@ const struct WarpEvent* sub_81D6134(u8 warpEventId);
u16 LocalIdToHillTrainerId(u8 localId);
bool8 GetHillTrainerFlag(u8 eventObjectId);
void SetHillTrainerFlag(void);
-const u8 *sub_81D62AC(void);
+const u8 *GetTrainerHillTrainerScript(void);
void FillHillTrainerParty(void);
void FillHillTrainersParties(void);
u32 sub_81D63C4(void);