diff options
Diffstat (limited to 'include')
39 files changed, 574 insertions, 300 deletions
diff --git a/include/battle.h b/include/battle.h index 00f7dcea9..54aef5106 100644 --- a/include/battle.h +++ b/include/battle.h @@ -24,8 +24,7 @@ #define TRAINER_OPPONENT_3FE 0x3FE #define TRAINER_OPPONENT_C00 0xC00 -#define TRAINER_OPPONENT_800 0x800 -#define STEVEN_PARTNER_ID 0xC03 +#define TRAINER_LINK_OPPONENT 0x800 #define SECRET_BASE_OPPONENT 0x400 #define B_ACTION_USE_MOVE 0 @@ -712,7 +711,7 @@ extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT]; extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT]; extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT]; extern u8 gBattleTerrain; -extern struct UnknownPokemonStruct4 gUnknown_2022B58[3]; +extern struct UnknownPokemonStruct4 gMultiPartnerParty[3]; extern u16 *gUnknown_2022BC0; extern u16 gRandomTurnNumber; diff --git a/include/battle_message.h b/include/battle_message.h index 2bbfffa43..612b253cf 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -51,13 +51,9 @@ #define B_TXT_DEF_PREFIX2 0x2B #define B_TXT_ATK_PREFIX3 0x2C #define B_TXT_DEF_PREFIX3 0x2D -#define B_TXT_TRAINER2_CLASS 0x2E -#define B_TXT_TRAINER2_NAME 0x2F -#define B_TXT_TRAINER2_LOSE_TEXT 0x30 -#define B_TXT_TRAINER2_WIN_TEXT 0x31 -#define B_TXT_PARTNER_CLASS 0x32 -#define B_TXT_PARTNER_NAME 0x33 -#define B_TXT_BUFF3 0x34 +#define B_TXT_TRAINER2_LOSE_TEXT 0x2E +#define B_TXT_TRAINER2_WIN_TEXT 0x2F +#define B_TXT_BUFF3 0x30 // for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3 diff --git a/include/battle_string_ids.h b/include/battle_string_ids.h index 155e9f7bf..0eb6b63f4 100644 --- a/include/battle_string_ids.h +++ b/include/battle_string_ids.h @@ -387,6 +387,6 @@ #define STRINGID_TRAINER1MON2COMEBACK 384 #define STRINGID_TRAINER1MON1AND2COMEBACK 385 -#define BATTLESTRINGS_COUNT 386 +#define BATTLESTRINGS_COUNT 374 #endif // GUARD_BATTLE_STRING_IDS_H diff --git a/include/battle_tower.h b/include/battle_tower.h index 9bb93f1c2..87f847aa4 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -25,11 +25,18 @@ struct BattleTowerPokemonTemplate u8 nature; }; +extern const u16 gBattleTowerBannedSpecies[]; + u16 sub_8164FCC(u8, u8); void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); void ValidateEReaderTrainer(void); u8 GetBattleTowerTrainerFrontSpriteId(void); u8 GetEreaderTrainerFrontSpriteId(void); void CopyEReaderTrainerName5(u8 *dest); +void sub_815DC40(u8 *dest, u8 opponentIdx); +void sub_815DBF4(u8 *dest, u8 opponentIdx); +void GetBattleTowerTrainerName(u8 *text); +u8 GetEreaderTrainerClassId(void); +u8 GetBattleTowerTrainerClassNameId(void); #endif //GUARD_BATTLE_TOWER_H diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h index 746f10679..4ef90ed60 100644 --- a/include/constants/easy_chat.h +++ b/include/constants/easy_chat.h @@ -1,6 +1,28 @@ #ifndef GUARD_CONSTANTS_EASY_CHAT_H #define GUARD_CONSTANTS_EASY_CHAT_H +#define EASY_CHAT_TYPE_PROFILE 0 +#define EASY_CHAT_TYPE_BATTLE_START 1 +#define EASY_CHAT_TYPE_BATTLE_WON 2 +#define EASY_CHAT_TYPE_BATTLE_LOST 3 +#define EASY_CHAT_TYPE_MAIL 4 +#define EASY_CHAT_TYPE_INTERVIEW 5 +#define EASY_CHAT_TYPE_BARD_SONG 6 +#define EASY_CHAT_TYPE_FAN_CLUB 7 +#define EASY_CHAT_TYPE_UNK_8 8 +#define EASY_CHAT_TYPE_TRENDY_PHRASE 9 +#define EASY_CHAT_TYPE_GABBY_AND_TY 10 +#define EASY_CHAT_TYPE_CONTEST_INTERVIEW 11 +#define EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW 12 +#define EASY_CHAT_TYPE_GOOD_SAYING 13 +#define EASY_CHAT_TYPE_FAN_QUESTION 14 +#define EASY_CHAT_TYPE_QUIZ_ANSWER 15 +#define EASY_CHAT_TYPE_QUIZ_QUESTION 16 +#define EASY_CHAT_TYPE_QUIZ_SET_QUESTION 17 +#define EASY_CHAT_TYPE_QUIZ_SET_ANSWER 18 +#define EASY_CHAT_TYPE_APPRENTICE 19 +#define EASY_CHAT_TYPE_QUESTIONNAIRE 20 + #define EC_GROUP_POKEMON_2 0x0 #define EC_GROUP_TRAINER 0x1 #define EC_GROUP_STATUS 0x2 diff --git a/include/constants/global.h b/include/constants/global.h index d7508c940..68c4f8246 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -80,4 +80,6 @@ enum #define NUM_BAG_POCKETS 5 +#define MULTI_PARTY_SIZE PARTY_SIZE / 2 + #endif //GUARD_CONSTANTS_GLOBAL_H diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h new file mode 100644 index 000000000..9b5660f6f --- /dev/null +++ b/include/constants/party_menu.h @@ -0,0 +1,118 @@ +#ifndef GUARD_CONSTANTS_PARTY_MENU_H +#define GUARD_CONSTANTS_PARTY_MENU_H + +#define AILMENT_NONE 0 +#define AILMENT_PSN 1 +#define AILMENT_PRZ 2 +#define AILMENT_SLP 3 +#define AILMENT_FRZ 4 +#define AILMENT_BRN 5 +#define AILMENT_PKRS 6 +#define AILMENT_FNT 7 + +#define TUTOR_MOVE_MEGA_PUNCH 0 +#define TUTOR_MOVE_SWORDS_DANCE 1 +#define TUTOR_MOVE_MEGA_KICK 2 +#define TUTOR_MOVE_BODY_SLAM 3 +#define TUTOR_MOVE_DOUBLE_EDGE 4 +#define TUTOR_MOVE_COUNTER 5 +#define TUTOR_MOVE_SEISMIC_TOSS 6 +#define TUTOR_MOVE_MIMIC 7 +#define TUTOR_MOVE_METRONOME 8 +#define TUTOR_MOVE_SOFT_BOILED 9 +#define TUTOR_MOVE_DREAM_EATER 10 +#define TUTOR_MOVE_THUNDER_WAVE 11 +#define TUTOR_MOVE_EXPLOSION 12 +#define TUTOR_MOVE_ROCK_SLIDE 13 +#define TUTOR_MOVE_SUBSTITUTE 14 +#define TUTOR_MOVE_COUNT 15 // regular tutor move count + +#define TUTOR_MOVE_FRENZY_PLANT 15 +#define TUTOR_MOVE_BLAST_BURN 16 +#define TUTOR_MOVE_HYDRO_CANNON 17 + +#define PARTY_LAYOUT_SINGLE 0 +#define PARTY_LAYOUT_DOUBLE 1 +#define PARTY_LAYOUT_MULTI 2 +#define PARTY_LAYOUT_MULTI_SHOWCASE 3 // The layout during the screen that appears just before a multi battle +#define PARTY_LAYOUT_COUNT 4 +#define KEEP_PARTY_LAYOUT 0xFF + +#define PARTY_MENU_TYPE_FIELD 0 +#define PARTY_MENU_TYPE_IN_BATTLE 1 +#define PARTY_MENU_TYPE_CONTEST 2 +#define PARTY_MENU_TYPE_CHOOSE_MON 3 +#define PARTY_MENU_TYPE_CHOOSE_HALF 4 // multi battles, eReader battles, and some battle facilities +#define PARTY_MENU_TYPE_MULTI_SHOWCASE 5 +#define PARTY_MENU_TYPE_DAYCARE 6 +#define PARTY_MENU_TYPE_MOVE_RELEARNER 7 +#define PARTY_MENU_TYPE_UNION_ROOM_REGISTER 8 // trading board +#define PARTY_MENU_TYPE_UNION_ROOM_TRADE 9 // trading board +#define PARTY_MENU_TYPE_SPIN_TRADE 10 // Unused beta for Gen IV's Spin Trade +#define PARTY_MENU_TYPE_MINIGAME 11 +#define PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS 12 + +#define PARTY_ACTION_CHOOSE_MON 0 +#define PARTY_ACTION_SEND_OUT 1 +#define PARTY_ACTION_CANT_SWITCH 2 +#define PARTY_ACTION_USE_ITEM 3 +#define PARTY_ACTION_ABILITY_PREVENTS 4 +#define PARTY_ACTION_GIVE_ITEM 5 +#define PARTY_ACTION_GIVE_PC_ITEM 6 // TODO: rename this one if necessary. Used for quest log. +#define PARTY_ACTION_GIVE_MAILBOX_MAIL 7 +#define PARTY_ACTION_SWITCH 8 +#define PARTY_ACTION_SWITCHING 9 +#define PARTY_ACTION_SOFTBOILED 10 +#define PARTY_ACTION_CHOOSE_AND_CLOSE 11 +#define PARTY_ACTION_MOVE_TUTOR 12 +#define PARTY_ACTION_MINIGAME 13 +#define PARTY_ACTION_REUSABLE_ITEM 14 + +// IDs for DisplayPartyMenuStdMessage, to display the message at the bottom of the party menu +#define PARTY_MSG_CHOOSE_MON 0 +#define PARTY_MSG_CHOOSE_MON_OR_CANCEL 1 +#define PARTY_MSG_CHOOSE_MON_AND_CONFIRM 2 +#define PARTY_MSG_MOVE_TO_WHERE 3 +#define PARTY_MSG_TEACH_WHICH_MON 4 +#define PARTY_MSG_USE_ON_WHICH_MON 5 +#define PARTY_MSG_GIVE_TO_WHICH_MON 6 +#define PARTY_MSG_NOTHING_TO_CUT 7 +#define PARTY_MSG_CANT_SURF_HERE 8 +#define PARTY_MSG_ALREADY_SURFING 9 +#define PARTY_MSG_CURRENT_TOO_FAST 10 +#define PARTY_MSG_ENJOY_CYCLING 11 +#define PARTY_MSG_ALREADY_IN_USE 12 +#define PARTY_MSG_CANT_USE_HERE 13 +#define PARTY_MSG_NO_MON_FOR_BATTLE 14 +#define PARTY_MSG_CHOOSE_MON_2 15 +#define PARTY_MSG_NOT_ENOUGH_HP 16 +#define PARTY_MSG_THREE_MONS_ARE_NEEDED 17 +#define PARTY_MSG_TWO_MONS_ARE_NEEDED 18 +#define PARTY_MSG_MONS_CANT_BE_SAME 19 +#define PARTY_MSG_NO_SAME_HOLD_ITEMS 20 +#define PARTY_MSG_UNUSED 21 +#define PARTY_MSG_DO_WHAT_WITH_MON 22 +#define PARTY_MSG_RESTORE_WHICH_MOVE 23 +#define PARTY_MSG_BOOST_PP_WHICH_MOVE 24 +#define PARTY_MSG_DO_WHAT_WITH_ITEM 25 +#define PARTY_MSG_DO_WHAT_WITH_MAIL 26 +#define PARTY_MSG_NONE 127 + +// IDs for DisplayPartyPokemonDescriptionText, to display a message in the party pokemon's box +#define PARTYBOX_DESC_NO_USE 0 +#define PARTYBOX_DESC_ABLE_3 1 +#define PARTYBOX_DESC_FIRST 2 +#define PARTYBOX_DESC_SECOND 3 +#define PARTYBOX_DESC_THIRD 4 +#define PARTYBOX_DESC_ABLE 5 +#define PARTYBOX_DESC_NOT_ABLE 6 +#define PARTYBOX_DESC_ABLE_2 7 +#define PARTYBOX_DESC_NOT_ABLE_2 8 +#define PARTYBOX_DESC_LEARNED 9 + +#define SELECTWINDOW_ACTIONS 0 +#define SELECTWINDOW_ITEM 1 +#define SELECTWINDOW_MAIL 2 +#define SELECTWINDOW_MOVES 3 + +#endif // GUARD_CONSTANTS_PARTY_MENU_H diff --git a/include/constants/trade.h b/include/constants/trade.h new file mode 100644 index 000000000..b1371caab --- /dev/null +++ b/include/constants/trade.h @@ -0,0 +1,118 @@ + #ifndef GUARD_CONSTANTS_TRADE_H +#define GUARD_CONSTANTS_TRADE_H + +// TODO: document trade.c and trade_scene.c with corresponding macros +// and examine if these are correct + +#define TRADE_PLAYER 0 +#define TRADE_PARTNER 1 + +#define LINK_TRADE_TIMEOUT 300 + +// In-game Trade IDs +#define INGAME_TRADE_SEEDOT 0 +#define INGAME_TRADE_PLUSLE 1 +#define INGAME_TRADE_HORSEA 2 +#define INGAME_TRADE_MEOWTH 3 + +// Flag IDs for sending link data +#define INITIATE_TRADE 1 +#define CANCEL_TRADE 2 +#define WANTS_TO_TRADE 1 +#define WANTS_TO_CANCEL 2 +#define READY_FINISH_TRADE 1 +#define FINISH_TRADE 2 + +// Return values for CanTradeSelectedMon and CanSpinTradeMon +#define CAN_TRADE_MON 0 +#define CANT_TRADE_LAST_MON 1 +#define CANT_TRADE_NATIONAL 2 +#define CANT_TRADE_EGG_YET 3 +#define CANT_TRADE_INVALID_MON 4 +#define CANT_TRADE_EGG_YET2 5 + +// Return values for CheckValidityOfTradeMons +#define PLAYER_MON_INVALID 0 +#define BOTH_MONS_VALID 1 +#define PARTNER_MON_INVALID 2 + +// Return values for GetGameProgressForLinkTrade +#define TRADE_BOTH_PLAYERS_READY 0 +#define TRADE_PLAYER_NOT_READY 1 +#define TRADE_PARTNER_NOT_READY 2 + +// Indexes for sTradeActionTexts +#define TRADE_TEXT_CANCEL 0 +#define TRADE_TEXT_CHOOSE_MON 1 +#define TRADE_TEXT_SUMMARY 2 +#define TRADE_TEXT_TRADE 3 +#define TRADE_TEXT_CANCEL_TRADE 4 +#define TRADE_TEXT_JP_QUIT 5 + +// Checked to confirm DrawTradeMenuParty has reached final state +#define DRAW_PARTY_FINISH 5 + +// Message indexes for sTradeMessages +#define TRADE_MSG_STANDBY 0 +#define TRADE_MSG_CANCELED 1 +#define TRADE_MSG_ONLY_MON1 2 +#define TRADE_MSG_ONLY_MON2 3 +#define TRADE_MSG_WAITING_FOR_FRIEND 4 +#define TRADE_MSG_FRIEND_WANTS_TO_TRADE 5 +#define TRADE_MSG_MON_CANT_BE_TRADED 6 +#define TRADE_MSG_EGG_CANT_BE_TRADED 7 +#define TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED 8 + +// IDs for QueueAction +#define QUEUE_SEND_DATA 0 +#define QUEUE_STANDBY 1 +#define QUEUE_ONLY_MON1 2 +#define QUEUE_ONLY_MON2 3 +#define QUEUE_UNUSED1 4 +#define QUEUE_UNUSED2 5 +#define QUEUE_MON_CANT_BE_TRADED 6 +#define QUEUE_EGG_CANT_BE_TRADED 7 +#define QUEUE_FRIENDS_MON_CANT_BE_TRADED 8 + +#define QUEUE_DELAY_MSG 3 +#define QUEUE_DELAY_DATA 5 + +// IDs for CallTradeMenuFunc +#define TRADEMENUFUNC_MAIN_MENU 0 +#define TRADEMENUFUNC_SELECTED_MON 1 +#define TRADEMENUFUNC_SHOW_MON_SUMMARY 2 +#define TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE 3 +#define TRADEMENUFUNC_CANCEL_TRADE_PROMPT 4 +#define TRADEMENUFUNC_UNUSED_5 5 +#define TRADEMENUFUNC_BOTH_MONS_SELECTED 6 +#define TRADEMENUFUNC_CONFIRM_TRADE_PROMPT 7 +#define TRADEMENUFUNC_REDRAW_MAIN_MENU 8 +#define TRADEMENUFUNC_LINK_TRADE_FADE_OUT 9 +#define TRADEMENUFUNC_LINK_TRADE_WAIT_FADE 10 +#define TRADEMENUFUNC_CANCEL_TRADE_1 11 +#define TRADEMENUFUNC_CANCEL_TRADE_2 12 +#define TRADEMENUFUNC_START_LINK_TRADE 13 +#define TRADEMENUFUNC_DELAY_TRADE_CONFIRM 14 +#define TRADEMENUFUNC_UNUSED_15 15 +#define TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE 16 +#define TRADEMENUFUNC_PARTNER_MON_INVALID 17 +#define TRADEMENUFUNC_STANDBY 100 + +// Message indexes for sUnionRoomTradeMessages +#define UR_TRADE_MSG_NONE 0 +#define UR_TRADE_MSG_NOT_MON_PARTNER_WANTS 1 +#define UR_TRADE_MSG_NOT_EGG 2 +#define UR_TRADE_MSG_MON_CANT_BE_TRADED_1 3 +#define UR_TRADE_MSG_MON_CANT_BE_TRADED_2 4 +#define UR_TRADE_MSG_PARTNERS_MON_CANT_BE_TRADED 5 +#define UR_TRADE_MSG_EGG_CANT_BE_TRADED 6 +#define UR_TRADE_MSG_PARTNER_CANT_ACCEPT_MON 7 +#define UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1 8 +#define UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2 9 + +// Return values for CanRegisterMonForTradingBoard +#define CAN_REGISTER_MON 0 +#define CANT_REGISTER_MON 1 +#define CANT_REGISTER_EGG 2 + +#endif //GUARD_CONSTANTS_TRADE_H diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 30e11c14f..f75c4bab8 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -170,155 +170,6 @@ #define F_TRAINER_FEMALE (1 << 7) -#define TRAINER_PIC_AQUA_LEADER_ARCHIE 0 -#define TRAINER_PIC_AQUA_GRUNT_M 1 -#define TRAINER_PIC_AQUA_GRUNT_F 2 -#define TRAINER_PIC_RS_AROMA_LADY 3 -#define TRAINER_PIC_RS_RUIN_MANIAC 4 -#define TRAINER_PIC_INTERVIEWER 5 -#define TRAINER_PIC_RS_TUBER_F 6 -#define TRAINER_PIC_TUBER_M 7 -#define TRAINER_PIC_RS_COOLTRAINER_M 8 -#define TRAINER_PIC_RS_COOLTRAINER_F 9 -#define TRAINER_PIC_HEX_MANIAC 10 -#define TRAINER_PIC_RS_LADY 11 -#define TRAINER_PIC_RS_BEAUTY 12 -#define TRAINER_PIC_RICH_BOY 13 -#define TRAINER_PIC_RS_POKEMANIAC 14 -#define TRAINER_PIC_RS_SWIMMER_M 15 -#define TRAINER_PIC_RS_BLACK_BELT 16 -#define TRAINER_PIC_GUITARIST 17 -#define TRAINER_PIC_KINDLER 18 -#define TRAINER_PIC_RS_CAMPER 19 -#define TRAINER_PIC_BUG_MANIAC 20 -#define TRAINER_PIC_RS_PSYCHIC_M 21 -#define TRAINER_PIC_RS_PSYCHIC_F 22 -#define TRAINER_PIC_RS_GENTLEMAN 23 -#define TRAINER_PIC_ELITE_FOUR_SIDNEY 24 -#define TRAINER_PIC_ELITE_FOUR_PHOEBE 25 -#define TRAINER_PIC_LEADER_ROXANNE 26 -#define TRAINER_PIC_LEADER_BRAWLY 27 -#define TRAINER_PIC_LEADER_TATE_AND_LIZA 28 -#define TRAINER_PIC_SCHOOL_KID_M 29 -#define TRAINER_PIC_SCHOOL_KID_F 30 -#define TRAINER_PIC_SR_AND_JR 31 -#define TRAINER_PIC_POKEFAN_M 32 -#define TRAINER_PIC_POKEFAN_F 33 -#define TRAINER_PIC_EXPERT_M 34 -#define TRAINER_PIC_EXPERT_F 35 -#define TRAINER_PIC_RS_YOUNGSTER 36 -#define TRAINER_PIC_CHAMPION_STEVEN 37 -#define TRAINER_PIC_RS_FISHERMAN 38 -#define TRAINER_PIC_CYCLING_TRIATHLETE_M 39 -#define TRAINER_PIC_CYCLING_TRIATHLETE_F 40 -#define TRAINER_PIC_RUNNING_TRIATHLETE_M 41 -#define TRAINER_PIC_RUNNING_TRIATHLETE_F 42 -#define TRAINER_PIC_SWIMMING_TRIATHLETE_M 43 -#define TRAINER_PIC_SWIMMING_TRIATHLETE_F 44 -#define TRAINER_PIC_DRAGON_TAMER 45 -#define TRAINER_PIC_RS_BIRD_KEEPER 46 -#define TRAINER_PIC_NINJA_BOY 47 -#define TRAINER_PIC_BATTLE_GIRL 48 -#define TRAINER_PIC_PARASOL_LADY 49 -#define TRAINER_PIC_RS_SWIMMER_F 50 -#define TRAINER_PIC_RS_PICNICKER 51 -#define TRAINER_PIC_RS_TWINS 52 -#define TRAINER_PIC_RS_SAILOR 53 -#define TRAINER_PIC_COLLECTOR 54 -#define TRAINER_PIC_WALLY 55 -#define TRAINER_PIC_RS_BRENDAN_1 56 -#define TRAINER_PIC_RS_MAY_1 57 -#define TRAINER_PIC_POKEMON_BREEDER_M 58 -#define TRAINER_PIC_RS_POKEMON_BREEDER_F 59 -#define TRAINER_PIC_RS_POKEMON_RANGER_M 60 -#define TRAINER_PIC_RS_POKEMON_RANGER_F 61 -#define TRAINER_PIC_MAGMA_LEADER_MAXIE 62 -#define TRAINER_PIC_MAGMA_GRUNT_M 63 -#define TRAINER_PIC_MAGMA_GRUNT_F 64 -#define TRAINER_PIC_RS_LASS 65 -#define TRAINER_PIC_RS_BUG_CATCHER 66 -#define TRAINER_PIC_RS_HIKER 67 -#define TRAINER_PIC_RS_YOUNG_COUPLE 68 -#define TRAINER_PIC_OLD_COUPLE 69 -#define TRAINER_PIC_RS_SIS_AND_BRO 70 -#define TRAINER_PIC_AQUA_ADMIN_M 71 -#define TRAINER_PIC_AQUA_ADMIN_F 72 -#define TRAINER_PIC_MAGMA_ADMIN_M 73 -#define TRAINER_PIC_MAGMA_ADMIN_F 74 -#define TRAINER_PIC_LEADER_WATTSON 75 -#define TRAINER_PIC_LEADER_FLANNERY 76 -#define TRAINER_PIC_LEADER_NORMAN 77 -#define TRAINER_PIC_LEADER_WINONA 78 -#define TRAINER_PIC_LEADER_WALLACE 79 -#define TRAINER_PIC_ELITE_FOUR_GLACIA 80 -#define TRAINER_PIC_ELITE_FOUR_DRAKE 81 -#define TRAINER_PIC_YOUNGSTER 82 -#define TRAINER_PIC_BUG_CATCHER 83 -#define TRAINER_PIC_LASS 84 -#define TRAINER_PIC_SAILOR 85 -#define TRAINER_PIC_CAMPER 86 -#define TRAINER_PIC_PICNICKER 87 -#define TRAINER_PIC_POKEMANIAC 88 -#define TRAINER_PIC_SUPER_NERD 89 -#define TRAINER_PIC_HIKER 90 -#define TRAINER_PIC_BIKER 91 -#define TRAINER_PIC_BURGLAR 92 -#define TRAINER_PIC_ENGINEER 93 -#define TRAINER_PIC_FISHERMAN 94 -#define TRAINER_PIC_SWIMMER_M 95 -#define TRAINER_PIC_CUE_BALL 96 -#define TRAINER_PIC_GAMER 97 -#define TRAINER_PIC_BEAUTY 98 -#define TRAINER_PIC_SWIMMER_F 99 -#define TRAINER_PIC_PSYCHIC_M 100 -#define TRAINER_PIC_ROCKER 101 -#define TRAINER_PIC_JUGGLER 102 -#define TRAINER_PIC_TAMER 103 -#define TRAINER_PIC_BIRD_KEEPER 104 -#define TRAINER_PIC_BLACK_BELT 105 -#define TRAINER_PIC_RIVAL_1 106 -#define TRAINER_PIC_SCIENTIST 107 -#define TRAINER_PIC_LEADER_GIOVANNI 108 -#define TRAINER_PIC_ROCKET_GRUNT_M 109 -#define TRAINER_PIC_COOLTRAINER_M 110 -#define TRAINER_PIC_COOLTRAINER_F 111 -#define TRAINER_PIC_ELITE_FOUR_LORELEI 112 -#define TRAINER_PIC_ELITE_FOUR_BRUNO 113 -#define TRAINER_PIC_ELITE_FOUR_AGATHA 114 -#define TRAINER_PIC_ELITE_FOUR_LANCE 115 -#define TRAINER_PIC_LEADER_BROCK 116 -#define TRAINER_PIC_LEADER_MISTY 117 -#define TRAINER_PIC_LEADER_LT_SURGE 118 -#define TRAINER_PIC_LEADER_ERIKA 119 -#define TRAINER_PIC_LEADER_KOGA 120 -#define TRAINER_PIC_LEADER_BLAINE 121 -#define TRAINER_PIC_LEADER_SABRINA 122 -#define TRAINER_PIC_GENTLEMAN 123 -#define TRAINER_PIC_RIVAL_2 124 -#define TRAINER_PIC_CHAMPION_RIVAL 125 -#define TRAINER_PIC_CHANNELER 126 -#define TRAINER_PIC_TWINS 127 -#define TRAINER_PIC_COOL_COUPLE 128 -#define TRAINER_PIC_YOUNG_COUPLE 129 -#define TRAINER_PIC_CRUSH_KIN 130 -#define TRAINER_PIC_SIS_AND_BRO 131 -#define TRAINER_PIC_PROFESSOR_OAK 132 -#define TRAINER_PIC_RS_BRENDAN_2 133 -#define TRAINER_PIC_RS_MAY_2 134 -#define TRAINER_PIC_RED 135 -#define TRAINER_PIC_LEAF 136 -#define TRAINER_PIC_ROCKET_GRUNT_F 137 -#define TRAINER_PIC_PSYCHIC_F 138 -#define TRAINER_PIC_CRUSH_GIRL 139 -#define TRAINER_PIC_TUBER_F 140 -#define TRAINER_PIC_POKEMON_BREEDER_F 141 -#define TRAINER_PIC_POKEMON_RANGER_M 142 -#define TRAINER_PIC_POKEMON_RANGER_F 143 -#define TRAINER_PIC_AROMA_LADY 144 -#define TRAINER_PIC_RUIN_MANIAC 145 -#define TRAINER_PIC_LADY 146 -#define TRAINER_PIC_PAINTER 147 - #define TRAINER_NONE 0 #define TRAINER_AQUA_LEADER_1 1 #define TRAINER_TEAM_AQUA_1 2 diff --git a/include/data.h b/include/data.h index 9ea1f7c96..72e6b66fc 100644 --- a/include/data.h +++ b/include/data.h @@ -22,6 +22,8 @@ extern const u16 gUnknown_8251FEE[]; extern const u16 gUnknown_8252324[]; extern const u16 gUnknown_82539D4[]; +extern const u8 gTrainerClassNames[][13]; + extern const struct MonCoords gMonFrontPicCoords[]; extern const struct CompressedSpriteSheet gMonFrontPicTable[]; extern const struct MonCoords gMonBackPicCoords[]; diff --git a/include/easy_chat.h b/include/easy_chat.h index 765758035..9c642bb36 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -45,5 +45,6 @@ u16 GetDisplayedWordByIndex(u16 index); u16 GetNumDisplayedWords(void); const u8 *GetEasyChatWordGroupName(u8); u8 *CopyEasyChatWordPadded(u8 *, u16, u16); +void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback); // TODO: currently in link_rfu.s. further file split needed? #endif // GUARD_EASYCHAT_H diff --git a/include/event_scripts.h b/include/event_scripts.h index e8fc40fa4..2ad1485c2 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1188,4 +1188,10 @@ extern const u8 Text_1BCAF2[]; extern const u8 EventScript_RepelWoreOff[]; +// battle_message +extern const u8 Text_1A5CF1[]; +extern const u8 Text_1A5D31[]; +extern const u8 Text_1A5D6E[]; +extern const u8 Text_1A5DB1[]; + #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 1d431771b..ec1a077be 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -33,5 +33,7 @@ void sub_805DC04(void); void sub_805DAB0(void); bool32 sub_805DAD0(void); bool32 sub_805DC24(void); +bool8 PartyHasMonWithSurf(void); +bool8 IsPlayerSurfingNorth(void); #endif //GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 1b8044592..86fab62e0 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -9,5 +9,6 @@ void sub_80B0244(void); void sub_807E3EC(void); void sub_807F114(void); void sub_807F204(u8 taskId); +void sub_807DC00(void); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/include/field_weather.h b/include/field_weather.h index 96c1ce7cb..2709a7298 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -13,7 +13,7 @@ void DoCurrentWeather(void); void SetSav1WeatherFromCurrMapHeader(void); void sub_807B0C4(u16 *, u16 *, u32); void PlayRainStoppingSoundEffect(void); -bool8 field_weather_is_fade_finished(void); +bool8 IsWeatherNotFadingIn(void); void SetWeatherScreenFadeOut(void); void sub_807B070(void); u8 GetCurrentWeather(void); diff --git a/include/fldeff.h b/include/fldeff.h index 25d5b8d43..51287f400 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -7,7 +7,6 @@ gTasks[taskId].data[8] = (u32)func >> 16; \ gTasks[taskId].data[9] = (u32)func; -extern u8 *gUnknown_203AAB0; extern struct MapPosition gPlayerFacingPosition; bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId); @@ -16,8 +15,10 @@ u8 oei_task_add(void); // flash u8 sub_80C9DCC(u8 lightLevel, u8 mapType); u8 sub_80C9D7C(u8 mapType1, u8 mapType2); +bool8 SetUpFieldMove_Flash(void); // cut +bool8 SetUpFieldMove_Cut(void); // dig bool8 SetUpFieldMove_Dig(void); @@ -43,9 +44,9 @@ bool8 SetUpFieldMove_Teleport(void); bool8 FldEff_UseTeleport(void); // softboiled -bool8 hm_prepare_dive_probably(void); -void sub_80E56DC(u8 taskId); -void sub_80E5724(u8 taskId); +bool8 SetUpFieldMove_SoftBoiled(void); +void ChooseMonForSoftboiled(u8 taskId); +void Task_TryUseSoftboiledOnPartyMon(u8 taskId); // sweetscent bool8 SetUpFieldMove_SweetScent(void); diff --git a/include/global.h b/include/global.h index 744d23eb3..8e5d90964 100644 --- a/include/global.h +++ b/include/global.h @@ -206,26 +206,6 @@ struct LinkBattleRecords #include "global.berry.h" #include "pokemon.h" -struct UnknownSaveBlock2Struct -{ - u8 field_0; - u8 field_1; - u8 field_2[2]; - u8 field_4[8]; - u8 field_C[16]; - u16 field_1C[6]; - u16 field_28[6]; - u8 field_34[176]; - u8 field_E4; - u8 field_E5; - u8 field_E6; - u8 field_E7; - u8 field_E8; - u8 field_E9; - u8 field_EA; - u8 field_EB; -}; // sizeof = 0xEC - struct BattleTowerRecord // record mixing { /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100 @@ -742,7 +722,7 @@ struct SaveBlock1 /*0x000C*/ struct WarpData warp1; /*0x0014*/ struct WarpData warp2; /*0x001C*/ struct WarpData lastHealLocation; - /*0x0024*/ struct WarpData warp4; + /*0x0024*/ struct WarpData escapeWarp; /*0x002C*/ u16 savedMusic; /*0x002E*/ u8 weather; /*0x002F*/ u8 filler_2F; diff --git a/include/graphics.h b/include/graphics.h index 354339235..93efbd135 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3740,6 +3740,16 @@ extern const u8 gWeatherFog1Tiles[]; extern const u32 gBattleAnimFogTilemap[]; extern const u16 gUnknown_83C2CE0[]; +// party_menu +extern const u32 gPartyMenuPokeball_Gfx[]; +extern const u32 gPartyMenuPokeball_Pal[]; +extern const u32 gPartyMenuPokeballSmall_Gfx[]; +extern const u32 gStatusGfx_Icons[]; +extern const u32 gStatusPal_Icons[]; +extern const u32 gPartyMenuBg_Gfx[]; +extern const u32 gPartyMenuBg_Tilemap[]; +extern const u32 gPartyMenuBg_Pal[]; + // credits extern const u32 gCreditsPokeballBgGfxTiles[]; extern const u32 gCreditsPokeballBgGfxMap[]; @@ -4239,4 +4249,7 @@ extern const u16 gUnknown_8E97DDC[]; extern const u32 gUnknown_8E97DFC[]; extern const u32 gUnknown_8E97EC4[]; +// battle_message +extern const u16 gUnknown_8D2FBB4[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/item.h b/include/item.h index ccc9cd3bb..01d2a55e5 100644 --- a/include/item.h +++ b/include/item.h @@ -43,7 +43,6 @@ void ClearItemSlots(struct ItemSlot *itemSlots, u8 b); u8 CountUsedPCItemSlots(void); bool8 CheckPCHasItem(u16 itemId, u16 count); bool8 AddPCItem(u16 itemId, u16 count); -void RemovePCItem(u8 index, u16 count); void SwapRegisteredBike(void); const u8 *ItemId_GetName(u16 itemId); u16 ItemId_GetId(u16 itemId); @@ -75,7 +74,7 @@ u16 GetPcItemQuantity(u16 *); void SetBagPocketsPointers(void); void ItemPcCompaction(void); -void RemoveItemFromPC(u16 itemId, u16 quantity); +void RemovePCItem(u16 itemId, u16 quantity); void SortAndCompactBagPocket(struct BagPocket * pocket); u8 CountItemsInPC(void); void ApplyNewEncryptionKeyToBagItems_(u32 newKey); diff --git a/include/item_menu.h b/include/item_menu.h index d12b9f394..187674e83 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -25,7 +25,7 @@ extern u16 gSpecialVar_ItemId; // Exported ROM declarations void sub_81AAC50(void); void sub_81AAC70(void); -void sub_8108CF0(void); +void CB2_SetUpReshowBattleScreenAfterMenu(void); void sub_81089BC(void); void sub_810B108(u8); void CB2_BagMenuFromStartMenu(void); @@ -39,6 +39,6 @@ void sub_8107ECC(void); void sub_810AF74(void); void sub_8108DC8(u8 pocketId); void sub_81089F4(u8 pocketId); -void sub_8107DB4(u8 menuType, u8 pocket, MainCallback callback); +void GoToBagMenu(u8 menuType, u8 pocket, MainCallback callback); #endif //GUARD_ITEM_MENU_H diff --git a/include/item_use.h b/include/item_use.h index db98533f1..7e9f7a61d 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -40,5 +40,6 @@ void ItemUseInBattle_EnigmaBerry(u8 taskId); void ItemUseOutOfBattle_Itemfinder(u8 taskId); void sub_80A1C44(u8 taskId); u8 CanUseEscapeRopeOnCurrMap(void); +u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId); #endif //GUARD_ITEM_USE_H diff --git a/include/link_rfu.h b/include/link_rfu.h index 671488be0..d1bc2b2bc 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -1,6 +1,9 @@ #ifndef GUARD_LINK_RFU_H #define GUARD_LINK_RFU_H +#include "global.h" +#include "librfu.h" + struct Padded_U8 { u8 value; @@ -42,6 +45,7 @@ void sub_80F8DC0(void); void sub_80FBB20(void); bool8 sub_80FA484(bool32 a0); void var_800D_set_xB(void); +struct UnkLinkRfuStruct_02022B14 *sub_80F9800(void); #include "mevent_server.h" extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; diff --git a/include/list_menu.h b/include/list_menu.h index df53bb529..e688c474f 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -53,8 +53,8 @@ struct ListMenuTemplate struct ListMenu { struct ListMenuTemplate template; - u16 scrollOffset; - u16 selectedRow; + u16 cursorPos; + u16 itemsAbove; u8 unk_1C; u8 unk_1D; u8 taskId; @@ -73,12 +73,12 @@ struct ListMenuWindowRect extern struct ListMenuTemplate gMultiuseListMenuTemplate; s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); -u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); -u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 scrollOffset, u16 selectedRow); +u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove); +u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 cursorPos, u16 itemsAbove); s32 ListMenu_ProcessInput(u8 listTaskId); -void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow); +void DestroyListMenuTask(u8 listTaskId, u16 *cursorPos, u16 *itemsAbove); void RedrawListMenu(u8 listTaskId); -void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow); +void ListMenuGetScrollAndRow(u8 listTaskId, u16 *cursorPos, u16 *itemsAbove); u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId); void ListMenuOverrideSetColors(u8 cursorPal, u8 fillValue, u8 cursorShadowPal); void ListMenuDefaultCursorMoveFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 8d042825c..1e75b336c 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -5,6 +5,9 @@ #include "task.h" #include "window.h" +#define MENU_L_PRESSED 1 +#define MENU_R_PRESSED 2 + struct YesNoFuncTable { TaskFunc yesFunc; @@ -22,9 +25,9 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1); void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc); void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 fontId, u8 left, u8 top, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo); u8 GetLRKeysState(void); -u8 sub_80BF66C(void); +u8 GetLRKeysPressedAndHeld(void); bool8 itemid_link_can_give_berry(u16 itemId); bool8 itemid_80BF6D8_mail_related(u16 itemId); -void ClearVramOamPltt(void); +void ResetVramOamAndBgCntRegs(void); #endif //GUARD_MENU_HELPERS_H diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h index 644e65289..f20375675 100644 --- a/include/new_menu_helpers.h +++ b/include/new_menu_helpers.h @@ -15,8 +15,8 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); void DecompressAndLoadBgGfxUsingHeap2(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); void * MallocAndDecompress(const void * src, u32 * size); -void SetBgRectPal(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette); -void CopyRectIntoAltRect(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height); +void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette); +void CopyToBufferFromBgTilemap(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height); void ResetBgPositions(void); void InitStandardTextBoxWindows(void); void FreeAllOverworldWindowBuffers(void); diff --git a/include/overworld.h b/include/overworld.h index 36c890eb5..ab20d9ff0 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -72,7 +72,7 @@ void Overworld_ChangeMusicTo(u16); bool32 IsUpdateLinkStateCBActive(void); void strange_npc_table_clear(void); -const struct MapHeader *get_mapheader_by_bank_and_number(u16, u16); +const struct MapHeader *Overworld_GetMapHeaderByGroupAndId(u16, u16); void FieldObjectMoveDestCoords(struct MapObject *, u32, s16 *, s16 *); void sub_8086230(void); void CB2_ReturnToField(void); @@ -140,7 +140,7 @@ bool32 Overworld_DoScrollSceneForCredits(u8 *, const struct CreditsOverworldCmd bool32 sub_8058318(void); -void CB2_ReturnToStartMenu(void); +void CB2_ReturnToFieldWithOpenMenu(void); void CB2_WhiteOut(void); void c2_8056854(void); void sub_8054F38(u32 newKey); diff --git a/include/party_menu.h b/include/party_menu.h index 19cdda1dc..e2aee442f 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -3,92 +3,85 @@ #include "main.h" #include "task.h" +#include "constants/party_menu.h" -enum { - AILMENT_NONE, - AILMENT_PSN, - AILMENT_PRZ, - AILMENT_SLP, - AILMENT_FRZ, - AILMENT_BRN, - AILMENT_PKRS, - AILMENT_FNT -}; - -enum -{ - PARTY_CHOOSE_MON, - PARTY_MUST_CHOOSE_MON, - PARTY_CANT_SWITCH, - PARTY_USE_ITEM_ON, - PARTY_ABILITY_PREVENTS, - PARTY_GIVE_ITEM, -}; - -struct Struct203B0A0 +struct PartyMenu { MainCallback exitCallback; - TaskFunc unk4; - u8 unk8_0:4; - u8 mode:2; - u8 unk8_2:2; - s8 unk9; - s8 unkA; - u8 unkB; - u16 unkC; - s16 unkE; - s16 unk10; + TaskFunc task; + u8 menuType:4; + u8 layout:2; + u8 unk_8_6:2; + s8 slotId; + s8 slotId2; + u8 action; + u16 bagItem; + s16 data1; // used variously as a moveId, counter, moveSlotId, or cursorPos + s16 learnMoveState; }; -extern struct Struct203B0A0 gUnknown_203B0A0; -extern u8 gUnknown_203B0C0; -extern u8 gUnknown_203B0C1; -extern u8 gUnknown_203B0DC[3]; -extern void (*gUnknown_3005E98)(u8 taskId, TaskFunc func); +extern struct PartyMenu gPartyMenu; +extern bool8 gPartyMenuUseExitCallback; +extern u8 gSelectedMonPartyId; +extern MainCallback gPostMenuFieldCallback; extern u8 gSelectedOrderFromParty[3]; +extern u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2]; -bool8 FieldCallback_PrepareFadeInFromMenu(void); -bool8 MonKnowsMove(struct Pokemon *, u16); -void sub_81B58A8(void); -void DoWallyTutorialBagMenu(void); -u8 pokemon_ailments_get_primary(u32 status); -u16 ItemIdToBattleMoveId(u16 itemId); -void sub_8125B40(u8 taskId, TaskFunc func); -void sub_8124C8C(void); -void sub_8126EDC(void); -void c2_8123744(void); -u8 GetCursorSelectionMonId(void); -void sub_8128370(void); -void sub_811F818(u8 monId, u8 a1); -void sub_8121D0C(u8); -void sub_811FB28(u8 taskId); -void sub_8120760(u8 taskId, u8 a1, s8 a2, s16 amount, TaskFunc followupFunc); -void GetMonNickname(const struct Pokemon * mon, u8 * dest); -void sub_81202F8(const u8 * src, u8 a1); -bool8 sub_8120370(void); -void PartyMenuInit(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, MainCallback callback); -void sub_81252D0(u8 taskId, TaskFunc followUpFunc); -void ItemUseCB_PpRestore(u8 taskId, TaskFunc followUpFunc); -void dp05_pp_up(u8 taskId, TaskFunc followUpFunc); -void dp05_rare_candy(u8 taskId, TaskFunc followUpFunc); -void sub_8126B60(u8 taskId, TaskFunc followUpFunc); -void sub_8126894(u8 taskId, TaskFunc followUpFunc); -void sub_81279E0(void); -void ItemUseCB_Medicine(u8 taskId, TaskFunc followUpFunc); -u8 GetItemEffectType(u16 itemId); -u8 pokemon_order_func(u8); -void sub_8127CAC(void); -void sub_8127DA8(u8 battlerId, u8 multiplayerFlag); -void OpenPartyMenuInBattle(u8 arg); -void sub_8127EC4(u8 battlerId, u8 unk, u8 arrayIndex); +extern void (*gItemUseCB)(u8, TaskFunc); + +void InitPartyMenu(u8 menuType, u8 layout, u8 partyAction, bool8 keepCursorPos, u8 messageId, TaskFunc task, MainCallback callback); +void AnimatePartySlot(u8 slot, u8 animNum); bool8 IsMultiBattle(void); -void sub_8126EDC(void); -void sub_812256C(u8 *partyCount, u8 (*icons)[6], u8 side); -void PartyMenuInit_FromPlayerPc(void); -void CB2_PartyMenuFromStartMenu(void); -void sub_8128198(void); -void sub_8127FF4(u8 slot, u8 slot2); +u8 GetCursorSelectionMonId(void); +u8 GetPartyMenuType(void); +void Task_HandleChooseMonInput(u8 taskId); +u8 *GetMonNickname(struct Pokemon *mon, u8 *dest); +u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen); +bool8 IsPartyMenuTextPrinterActive(void); +void PartyMenuModifyHP(u8 taskId, u8 slot, s8 hpIncrement, s16 hpDifference, TaskFunc task); +u8 GetAilmentFromStatus(u32 status); +u8 GetMonAilment(struct Pokemon *mon); +void DisplayPartyMenuStdMessage(u32 stringId); void LoadHeldItemIcons(void); -void sub_8127968(void); +void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty); +void SpriteCB_BounceConfirmCancelButton(u8 spriteId, u8 spriteId2, u8 animNum); +void CB2_SelectBagItemToGive(void); +void CB2_GiveHoldItem(void); +bool8 FieldCallback_PrepareFadeInFromMenu(void); +void CB2_ReturnToPartyMenuFromFlyMap(void); +void sub_8124C1C(const u8 *healLocCtrlData); +void CB2_ShowPartyMenuForItemUse(void); +void ItemUseCB_Medicine(u8 taskId, TaskFunc func); +void ItemUseCB_MedicineStep(u8 taskId, TaskFunc func); +void ItemUseCB_PPRecovery(u8 taskId, UNUSED TaskFunc func); +void ItemUseCB_PPUp(u8 taskId, UNUSED TaskFunc func); +u16 ItemIdToBattleMoveId(u16 item); +bool8 IsMoveHm(u16 move); +bool8 MonKnowsMove(struct Pokemon *mon, u16 move); +void ItemUseCB_TMHM(u8 taskId, UNUSED TaskFunc func); +void ItemUseCB_RareCandy(u8 taskId, TaskFunc func); +void ItemUseCB_SacredAsh(u8 taskId, UNUSED TaskFunc func); +void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc func); +u8 GetItemEffectType(u16 item); +void CB2_PartyMenuFromStartMenu(void); +void CB2_ChooseMonToGiveItem(void); +void ChooseMonToGiveMailFromMailbox(void); +void InitChooseHalfPartyForBattle(u8 a1); +void ClearSelectedPartyOrder(void); +void sub_81277F4(u8 menuType, MainCallback callback); +void ChooseMonForMoveTutor(void); +void ChooseMonForWirelessMinigame(void); +void OpenPartyMenuInTutorialBattle(u8 partyAction); +void OpenPartyMenuInBattle(void); +void ChooseMonForInBattleItem(void); +void sub_81279E0(void); +void BufferBattlePartyCurrentOrder(void); +void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId); +void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2); +void SwitchPartyMonSlots(u8 slot, u8 slot2); +u8 GetPartyIdFromBattlePartyId(u8 battlePartyId); +void ShowPartyMenuToShowcaseMultiBattleParty(void); +void ChooseMonForDaycare(void); +void ChoosePartyMonByMenuType(u8 menuType); #endif // GUARD_PARTY_MENU_H diff --git a/include/player_pc.h b/include/player_pc.h index a1ebcddaa..f62835911 100644 --- a/include/player_pc.h +++ b/include/player_pc.h @@ -8,8 +8,8 @@ struct PlayerPCItemPageStruct { - u16 selectedRow; - u16 scrollOffset; + u16 cursorPos; + u16 itemsAbove; u8 pageItems; u8 count; u8 filler_6[3]; @@ -25,5 +25,6 @@ extern struct PlayerPCItemPageStruct gPlayerPcMenuManager; void sub_816B060(u8 taskId); void NewGameInitPCItems(void); +void Mailbox_ReturnToMailListAfterDeposit(void); #endif //GUARD_PLAYER_PC_H diff --git a/include/pokemon.h b/include/pokemon.h index c5ad89f41..7bc1239f1 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -582,7 +582,7 @@ void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex); void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex); bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex); bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e); -bool8 PokemonUseItemEffects2(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex); +bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex); u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit); const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId); u8 GetNature(struct Pokemon *mon); @@ -593,7 +593,7 @@ u16 HoennToNationalOrder(u16 hoennNum); u16 SpeciesToCryId(u16 species); void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4); void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); -bool8 sub_80435E0(void); +bool8 GetPlayerFlankId(void); bool16 GetLinkTrainerFlankId(u8 linkPlayerId); s32 GetBattlerMultiplayerId(u16 a1); u8 GetTrainerEncounterMusicId(u16 trainer); diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index cfc3c18f0..f0e5c8b9d 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -22,6 +22,6 @@ u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subprior u8 UpdateMonIconFrame(struct Sprite * sprite); void LoadMonIconPalette(u16 iconId); void FreeMonIconPalette(u16 iconId); -void MonIcon_SetAnim(struct Sprite * sprite, u8 animNum); +void SetPartyHPBarSprite(struct Sprite * sprite, u8 animNum); #endif // GUARD_POKEMON_ICON_H diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h index 62d0e610f..8623b223a 100644 --- a/include/pokemon_jump.h +++ b/include/pokemon_jump.h @@ -4,5 +4,6 @@ #include "main.h" void ResetPokeJumpResults(void); +bool32 IsSpeciesAllowedInPokemonJump(u16 species); #endif // GUARD_POKEMON_JUMP_H diff --git a/include/pokemon_special_anim.h b/include/pokemon_special_anim.h index 8dbf0efa4..5cc567580 100644 --- a/include/pokemon_special_anim.h +++ b/include/pokemon_special_anim.h @@ -5,8 +5,12 @@ void sub_811E5B8(u16, u16, u16, u16, u16, u16); bool8 sub_811E680(void); -void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); +void BufferMonStatsToTaskData(struct Pokemon *mon, u16 *currStats); void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr); +void sub_811C540(u8 slotId, u16 itemId, MainCallback callback); +void sub_811C5AC(u8 slotId, u16 itemId, MainCallback callback); +u32 sub_811D178(void); +void sub_811C568(u8 slotId, u16 itemId, u16 moveId, MainCallback callback); #endif // GUARD_POKEMON_SPECIAL_ANIM_H diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 2655405e5..3695d46df 100644 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -32,7 +32,7 @@ enum PokemonSummaryScreenPage PSS_PAGE_CONTEST_MOVES, }; -s32 sub_8138B20(void); +s32 GetLastViewedMonIndex(void); void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4); #endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/include/quest_log.h b/include/quest_log.h index 3f6c94de5..3dfd5f35c 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -47,7 +47,6 @@ void sub_81139BC(void); void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx); void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value); void sub_8110840(void *oldSave); - -extern u8 gUnknown_203ADFA; +void sub_8112F18(u8 windowId); #endif //GUARD_QUEST_LOG_H diff --git a/include/region_map.h b/include/region_map.h index 394fee469..67287b6c4 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -94,7 +94,8 @@ void CreateRegionMapPlayerIcon(u16 x, u16 y); void CreateRegionMapCursor(u16 tileTag, u16 paletteTag); u8 *GetMapName(u8 *, u16, u16); bool32 sub_8124668(u8 mapSecId); -void sub_80C4DF8(u8 *, u8); +void GetMapNameGeneric(u8 *, u8); void sub_80BFF50(u8 a0, void (*a1)(void)); +void MCB2_FlyMap(void); #endif //GUARD_REGION_MAP_H diff --git a/include/strings.h b/include/strings.h index 7750b271c..e55cb02f5 100644 --- a/include/strings.h +++ b/include/strings.h @@ -181,19 +181,19 @@ extern const u8 gUnknown_8416644[]; extern const u8 gUnknown_841665C[]; extern const u8 gUnknown_8416690[]; extern const u8 gUnknown_84166A7[]; -extern const u8 gUnknown_84169DC[]; +extern const u8 gText_WontHaveEffect[]; extern const u8 gUnknown_841623D[]; extern const u8 gUnknown_84162BD[]; extern const u8 gUnknown_841D148[]; // pokemon -extern const u8 BattleText_Rose[]; -extern const u8 BattleText_UnknownString3[]; -extern const u8 BattleText_GetPumped[]; -extern const u8 BattleText_MistShroud[]; +extern const u8 gBattleText_Rose[]; +extern const u8 gBattleText_UnknownString3[]; +extern const u8 gBattleText_GetPumped[]; +extern const u8 gBattleText_MistShroud[]; extern const u8 gText_BadEgg[]; extern const u8 gText_PkmnsXPreventsSwitching[]; -extern u8 *gUnknown_83FD5D0[]; +extern const u8 *const gStatNamesTable[]; // diploma extern const u8 gUnknown_841B60E[]; @@ -265,6 +265,140 @@ extern const u8 gUnknown_81C6787[]; extern const u8 gUnknown_81C684B[]; extern const u8 gUnknown_81C686C[]; +// party_menu +extern const u8 gText_ChoosePokemon[]; +extern const u8 gText_ChoosePokemonCancel[]; +extern const u8 gText_ChoosePokemonConfirm[]; +extern const u8 gText_MoveToWhere[]; +extern const u8 gText_TeachWhichPokemon[]; +extern const u8 gText_UseOnWhichPokemon[]; +extern const u8 gText_GiveToWhichPokemon[]; +extern const u8 gText_NothingToCut[]; +extern const u8 gText_CantSurfHere[]; +extern const u8 gText_AlreadySurfing[]; +extern const u8 gText_CurrentIsTooFast[]; +extern const u8 gText_EnjoyCycling[]; +extern const u8 gText_InUseAlready_PM[]; +extern const u8 gText_CantUseHere[]; +extern const u8 gText_NoPokemonForBattle[]; +extern const u8 gText_ChoosePokemon2[]; +extern const u8 gText_NotEnoughHp[]; +extern const u8 gText_ThreePkmnAreNeeded[]; +extern const u8 gText_TwoPokemonAreNeeded[]; +extern const u8 gText_PokemonCantBeSame[]; +extern const u8 gText_NoIdenticalHoldItems[]; +extern const u8 gString_Dummy[]; +extern const u8 gText_DoWhatWithPokemon[]; +extern const u8 gText_RestoreWhichMove[]; +extern const u8 gText_BoostPp[]; +extern const u8 gText_DoWhatWithItem[]; +extern const u8 gText_DoWhatWithMail[]; +extern const u8 gText_NoUse[]; +extern const u8 gText_Able[]; +extern const u8 gText_First_PM[]; +extern const u8 gText_Second_PM[]; +extern const u8 gText_Third_PM[]; +extern const u8 gText_NotAble[]; +extern const u8 gText_Able3[]; +extern const u8 gText_NotAble2[]; +extern const u8 gText_Learned[]; +extern const u8 gText_Able2[]; +extern const u8 gText_CutATreeOrGrass[]; +extern const u8 gText_FlyToAKnownTown[]; +extern const u8 gText_TravelOnWater[]; +extern const u8 gText_MoveHeavyBoulders[]; +extern const u8 gText_LightUpDarkness[]; +extern const u8 gText_ShatterACrackedRock[]; +extern const u8 gText_ClimbAWaterfall[]; +extern const u8 gText_EscapeFromHere[]; +extern const u8 gText_LureWildPokemon[]; +extern const u8 gText_ShareHp[]; +extern const u8 gText_ReturnToAHealingSpot[]; +extern const u8 gText_Summary5[]; +extern const u8 gText_Switch2[]; +extern const u8 gText_Item[]; +extern const u8 gText_Take[]; +extern const u8 gText_Mail[]; +extern const u8 gText_Take2[]; +extern const u8 gText_Read2[]; +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_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[]; +extern const u8 gUnknown_84176CF[]; +extern const u8 gText_PkmnWasGivenItem[]; +extern const u8 gText_ReceivedItemFromPkmn[]; +extern const u8 gText_PkmnAlreadyHoldingItemSwitch[]; +extern const u8 gText_SwitchedPkmnItem[]; +extern const u8 gText_BagFullCouldNotRemoveItem[]; +extern const u8 gText_PkmnCantParticipate[]; +extern const u8 gText_CancelParticipation[]; +extern const u8 gUnknown_8417494[]; +extern const u8 gMenuText_Confirm[]; +extern const u8 gText_Lv[]; +extern const u8 gText_MaleSymbol[]; +extern const u8 gText_FemaleSymbol[]; +extern const u8 gText_Slash[]; +extern const u8 gUnknown_8417457[]; +extern const u8 gText_PkmnNotHolding[]; +extern const u8 gText_PCMailboxFull[]; +extern const u8 gText_MailSentToPC[]; +extern const u8 gText_MailMessageWillBeLost[]; +extern const u8 gText_SendMailToPC[]; +extern const u8 gText_MailTakenFromPkmn[]; +extern const u8 gUnknown_8416B3E[]; +extern const u8 gUnknown_8416B16[]; +extern const u8 gText_PauseUntilPress[]; +extern const u8 gText_CantUseUntilNewBadge[]; +extern const u8 gText_ReturnToHealingSpot[]; +extern const u8 gText_EscapeFromHereAndReturnTo[]; +extern const u8 gText_PkmnCuredOfPoison[]; +extern const u8 gText_PkmnWokeUp2[]; +extern const u8 gText_PkmnBurnHealed[]; +extern const u8 gText_PkmnThawedOut[]; +extern const u8 gText_PkmnCuredOfParalysis[]; +extern const u8 gText_PkmnSnappedOutOfConfusion[]; +extern const u8 gText_PkmnGotOverInfatuation[]; +extern const u8 gText_PkmnBecameHealthy[]; +extern const u8 gText_HP3[]; +extern const u8 gText_Attack3[]; +extern const u8 gText_Defense3[]; +extern const u8 gText_Speed2[]; +extern const u8 gText_SpAtk3[]; +extern const u8 gText_SpDef3[]; +extern const u8 gText_PkmnBaseVar2StatIncreased[]; +extern const u8 gText_MovesPPIncreased[]; +extern const u8 gText_PPWasRestored[]; +extern const u8 gText_PkmnHPRestoredByVar2[]; +extern const u8 gText_PkmnNeedsToReplaceMove[]; +extern const u8 gText_PkmnCantLearnMove[]; +extern const u8 gText_PkmnAlreadyKnows[]; +extern const u8 gText_PkmnLearnedMove3[]; +extern const u8 gText_WhichMoveToForget[]; +extern const u8 gText_12PoofForgotMove[]; +extern const u8 gText_StopLearningMove2[]; +extern const u8 gText_MoveNotLearned[]; +extern const u8 gText_PkmnElevatedToLvVar2[]; +extern const u8 gText_PkmnHoldingItemCantHoldMail[]; +extern const u8 gText_MailTransferredFromMailbox[]; +extern const u8 gText_RemoveMailBeforeItem[]; +extern const u8 gText_CantSwitchWithAlly[]; +extern const u8 gText_PkmnHasNoEnergy[]; +extern const u8 gText_PkmnAlreadyInBattle[]; +extern const u8 gText_EggCantBattle[]; +extern const u8 gText_PkmnAlreadySelected[]; +extern const u8 gText_PkmnCantSwitchOut[]; + // credits extern const u8 gString_Dummy[]; extern const u8 gString_PokemonFireRed_Staff[]; // FR @@ -390,7 +524,7 @@ extern const u8 gText_Pokedex[]; extern const u8 gTextJPDummy_Hiki[]; extern const u8 gText_Badges[]; extern const u8 gTextJPDummy_Ko[]; -extern const u8 gUnknown_841B6F4[]; +extern const u8 gText_Register[]; // mystery_gift_menu extern const u8 gText_PickOKExit[]; @@ -703,9 +837,9 @@ extern const u8 gUnknown_841E16B[]; extern const u8 gUnknown_8417094[]; extern const u8 gUnknown_841E199[]; extern const u8 gUnknown_841E1C5[]; -extern const u8 gUnknown_84170BC[]; -extern const u8 gUnknown_84170E0[]; -extern const u8 gUnknown_84170FC[]; +extern const u8 gText_PkmnCantBeTradedNow[]; +extern const u8 gText_EggCantBeTradedNow[]; +extern const u8 gText_OtherTrainersPkmnCantBeTraded[]; extern const u8 gUnknown_841E09F[]; extern const u8 gEasyChatGroupName_Pokemon[]; diff --git a/include/trade.h b/include/trade.h index 257357053..b3b1de23b 100644 --- a/include/trade.h +++ b/include/trade.h @@ -1,11 +1,17 @@ #ifndef GUARD_TRADE_H #define GUARD_TRADE_H +#include "global.h" +#include "librfu.h" +#include "constants/trade.h" + extern struct MailStruct gLinkPartnerMail[6]; extern u8 gSelectedTradeMonPositions[2]; extern const u16 gUnknown_826601C[]; void CB2_ReturnFromLinkTrade(void); s32 sub_804FB34(void); +s32 CanRegisterMonForTradingBoard(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, u16 species2, u16 species, u8 isObedientBitSet); // TODO: currently in link_rfu_2.s. further file split needed? +s32 GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, struct UnkLinkRfuStruct_02022B14Substruct rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isObedientBitSet); #endif //GUARD_TRADE_H diff --git a/include/trainer_tower.h b/include/trainer_tower.h index 810642a69..9c1ac0631 100644 --- a/include/trainer_tower.h +++ b/include/trainer_tower.h @@ -6,5 +6,7 @@ void InitTrainerTowerBattleStruct(void); void FreeTrainerTowerBattleStruct(void); u8 GetTrainerTowerTrainerFrontSpriteId(void); void ResetTrainerTowerResults(void); +void sub_815DA28(u8 *text); +u8 sub_815DA10(void); #endif //GUARD_TRAINER_TOWER_H diff --git a/include/union_room.h b/include/union_room.h index 2e97d87f4..03628441b 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -1,6 +1,9 @@ #ifndef GUARD_UNION_ROOM_H #define GUARD_UNION_ROOM_H +#include "global.h" +#include "librfu.h" + struct UnkStruct_Shared { struct UnkLinkRfuStruct_02022B14 field_0; @@ -146,4 +149,8 @@ struct TradeUnkStruct u32 personality; }; +extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_203B064; +extern u16 gUnionRoomOfferedSpecies; +extern u8 gUnionRoomRequestedMonType; + #endif //GUARD_UNION_ROOM_H |