diff options
Diffstat (limited to 'include')
52 files changed, 377 insertions, 203 deletions
diff --git a/include/agb_flash.h b/include/agb_flash.h index 27e45e8fa..ba5820f01 100644 --- a/include/agb_flash.h +++ b/include/agb_flash.h @@ -8,5 +8,7 @@ // Exported ROM declarations u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)); +u16 IdentifyFlash(void); +u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src); #endif //GUARD_AGB_FLASH_H diff --git a/include/battle.h b/include/battle.h index 94596c75e..d155ca5a0 100644 --- a/include/battle.h +++ b/include/battle.h @@ -175,7 +175,7 @@ struct ProtectStruct u32 targetNotAffected:1; u32 chargingTurn:1; u32 fleeFlag:2; // For RunAway and Smoke Ball. - u32 usedImprisionedMove:1; + u32 usedImprisonedMove:1; u32 loveImmobility:1; u32 usedDisabledMove:1; u32 usedTauntedMove:1; diff --git a/include/battle_anim.h b/include/battle_anim.h index d0d323216..b3350f893 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -204,6 +204,9 @@ void sub_80A718C(struct Sprite *sprite); #define STAT_ANIM_MULTIPLE_MINUS2 58 void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId); +// battle_anim_8170478.c +void sub_8172EF0(u8 battler, struct Pokemon *mon); + // ground.c void sub_81152DC(u8 taskId); @@ -216,6 +219,19 @@ u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 selectedPalettes, void sub_8116EB4(u8); void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *arg8, const u32 *arg9, const u32 *palette); +// battle_anim_effects_1.c +void sub_810310C(u8 battler, struct Sprite* sprite); +void AnimMoveTwisterParticle(struct Sprite* sprite); + +// water.c +void sub_8108C94(struct Sprite *sprite); + +// flying.c +void sub_810E2C8(struct Sprite *sprite); + +// smokescreen.c +u8 sub_807521C(s16 x, s16 y, u8 a3); + u32 UnpackSelectedBattleAnimPalettes(s16); u8 GetBattlerSpriteFinal_Y(u8, u16, u8); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index a23fa6948..cac3a7652 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -88,8 +88,8 @@ extern const u8 BattleScript_IngrainTurnHeal[]; extern const u8 BattleScript_AtkDefDown[]; extern const u8 BattleScript_KnockedOff[]; extern const u8 BattleScript_MoveUsedIsImprisoned[]; -extern const u8 BattleScript_SelectingImprisionedMove[]; -extern const u8 BattleScript_SelectingImprisionedMoveInPalace[]; +extern const u8 BattleScript_SelectingImprisonedMove[]; +extern const u8 BattleScript_SelectingImprisonedMoveInPalace[]; extern const u8 BattleScript_GrudgeTakesPp[]; extern const u8 BattleScript_MagicCoatBounce[]; extern const u8 BattleScript_SnatchedMove[]; @@ -115,7 +115,7 @@ extern const u8 BattleScript_PrintPayDayMoneyString[]; extern const u8 BattleScript_WrapTurnDmg[]; extern const u8 BattleScript_WrapEnds[]; extern const u8 BattleScript_MoveUsedIsInLove[]; -extern const u8 BattleScript_MoveUsedIsParalyzedCantAttack[]; +extern const u8 BattleScript_MoveUsedIsInLoveCantAttack[]; extern const u8 BattleScript_NightmareTurnDmg[]; extern const u8 BattleScript_CurseTurnDmg[]; extern const u8 BattleScript_TargetPRLZHeal[]; diff --git a/include/battle_util.h b/include/battle_util.h index 71bb22a00..0756a387a 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -6,7 +6,7 @@ #define MOVE_LIMITATION_DISABLED (1 << 2) #define MOVE_LIMITATION_TORMENTED (1 << 3) #define MOVE_LIMITATION_TAUNT (1 << 4) -#define MOVE_LIMITATION_IMPRISION (1 << 5) +#define MOVE_LIMITATION_IMPRISON (1 << 5) #define ABILITYEFFECT_ON_SWITCHIN 0x0 #define ABILITYEFFECT_ENDTURN 0x1 @@ -44,7 +44,7 @@ u8 GetBattlerForBattleScript(u8 caseId); void PressurePPLose(u8 target, u8 attacker, u16 move); void PressurePPLoseOnUsingPerishSong(u8 attacker); -void PressurePPLoseOnUsingImprision(u8 attacker); +void PressurePPLoseOnUsingImprison(u8 attacker); void MarkAllBattlersForControllerExec(void); // unused void MarkBattlerForControllerExec(u8 battlerId); void sub_803F850(u8 arg0); diff --git a/include/cable_club.h b/include/cable_club.h index 60d56460d..c2849ca3e 100644 --- a/include/cable_club.h +++ b/include/cable_club.h @@ -15,6 +15,6 @@ void sub_80B360C(void); bool32 sub_80B2AF4(u16 *arg0, u16 *arg1); void sub_80B3AF8(u8 taskId); void task00_08081A90(u8 taskId); -bool32 sub_80B39D4(u8 linkPlayerIndex); +bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex); #endif //GUARD_CABLE_CLUB_H diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h index ca9e3bc9f..1224c0f31 100644 --- a/include/constants/battle_frontier.h +++ b/include/constants/battle_frontier.h @@ -10,6 +10,8 @@ #define FRONTIER_FACILITY_PIKE 5 #define FRONTIER_FACILITY_PYRAMID 6 #define NUM_FRONTIER_FACILITIES 7 +// The multiplayer battle colosseum rooms re-use VAR_FRONTIER_FACILITY. +#define FRONTIER_FACILITY_DOUBLE_COLOSSEUM 9 #define TENT_VERDANTURF 2 #define TENT_FALLARBOR 3 diff --git a/include/constants/flags.h b/include/constants/flags.h index b440ba78b..f0759389f 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -236,7 +236,7 @@ #define FLAG_MET_WAILMER_TRAINER 0xDA #define FLAG_EVIL_LEADER_PLEASE_STOP 0xDB -#define FLAG_UNUSED_0x0DC 0xDC // Unused Flag +#define FLAG_NEVER_SET_0x0DC 0xDC // This flag is read, but never written to #define FLAG_RECEIVED_GO_GOGGLES 0xDD #define FLAG_WINGULL_SENT_ON_ERRAND 0xDE diff --git a/include/constants/map_types.h b/include/constants/map_types.h index 504575859..8d071fd41 100755 --- a/include/constants/map_types.h +++ b/include/constants/map_types.h @@ -1,14 +1,14 @@ #ifndef GUARD_CONSTANTS_MAP_TYPES_H #define GUARD_CONSTANTS_MAP_TYPES_H -#define MAP_TYPE_0 0 +#define MAP_TYPE_UNUSED_1 0 #define MAP_TYPE_TOWN 1 #define MAP_TYPE_CITY 2 #define MAP_TYPE_ROUTE 3 #define MAP_TYPE_UNDERGROUND 4 #define MAP_TYPE_UNDERWATER 5 -#define MAP_TYPE_6 6 -#define MAP_TYPE_7 7 +#define MAP_TYPE_OCEAN_ROUTE 6 +#define MAP_TYPE_UNUSED_2 7 #define MAP_TYPE_INDOOR 8 #define MAP_TYPE_SECRET_BASE 9 diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h new file mode 100644 index 000000000..e231a6043 --- /dev/null +++ b/include/constants/trainer_hill.h @@ -0,0 +1,29 @@ +#ifndef GUARD_CONSTANTS_TRAINER_HILL_H +#define GUARD_CONSTANTS_TRAINER_HILL_H + +#define TRAINER_HILL_FUNC_START 0 +#define TRAINER_HILL_FUNC_1 1 +#define TRAINER_HILL_FUNC_2 2 +#define TRAINER_HILL_FUNC_3 3 +#define TRAINER_HILL_FUNC_RESUME_TIMER 4 +#define TRAINER_HILL_FUNC_SET_LOST 5 +#define TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS 6 +#define TRAINER_HILL_FUNC_7 7 +#define TRAINER_HILL_FUNC_8 8 +#define TRAINER_HILL_FUNC_9 9 +#define TRAINER_HILL_FUNC_10 10 +#define TRAINER_HILL_FUNC_11 11 +#define TRAINER_HILL_FUNC_12 12 +#define TRAINER_HILL_FUNC_13 13 +#define TRAINER_HILL_FUNC_14 14 +#define TRAINER_HILL_FUNC_15 15 +#define TRAINER_HILL_FUNC_16 16 +#define TRAINER_HILL_FUNC_SET_TAG 17 + +// Values returned by the TrainerHillGetChallengeStatus +// function. +#define TRAINER_HILL_PLAYER_STATUS_LOST 0 +#define TRAINER_HILL_PLAYER_STATUS_ECARD_SCANNED 1 +#define TRAINER_HILL_PLAYER_STATUS_NORMAL 2 + +#endif
\ No newline at end of file diff --git a/include/constants/vars.h b/include/constants/vars.h index fc3b3263d..c025d62fc 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -1,7 +1,7 @@ #ifndef GUARD_CONSTANTS_VARS_H #define GUARD_CONSTANTS_VARS_H -#define VAR_0x3F20 0x3F20 +#define UNKNOWN_VAR_OFFSET_3F20 0x3F20 #define VARS_START 0x4000 @@ -60,7 +60,7 @@ #define VAR_POISON_STEP_COUNTER 0x402B #define VAR_RESET_RTC_ENABLE 0x402C #define VAR_ENIGMA_BERRY_AVAILABLE 0x402D -#define VAR_0x402E 0x402E // Seems to be unused. +#define VAR_UNUSED_0x402E 0x402E // Unused Var #define VAR_FRONTIER_MANIAC_FACILITY 0x402F #define VAR_FRONTIER_GAMBLER_FACILITY 0x4030 @@ -71,21 +71,21 @@ #define VAR_DEOXYS_ROCK_STEP_COUNT 0x4034 #define VAR_DEOXYS_ROCK_LEVEL 0x4035 #define VAR_STORAGE_UNKNOWN 0x4036 -#define VAR_0x4037 0x4037 -#define VAR_0x4038 0x4038 -#define VAR_0x4039 0x4039 -#define VAR_0x403A 0x403A +#define VAR_UNUSUAL_WEATHER_LOCATION 0x4037 +#define VAR_UNUSUAL_WEATHER_STEP_COUNTER 0x4038 +#define VAR_SHOULD_END_UNUSUAL_WEATHER 0x4039 +#define VAR_NEVER_READ_0x403A 0x403A // Var is written to, but never checked #define VAR_REGICE_STEPS_1 0x403B #define VAR_REGICE_STEPS_2 0x403C #define VAR_REGICE_STEPS_3 0x403D #define VAR_ALTERING_CAVE_WILD_SET 0x403E -#define VAR_0x403F 0x403F +#define VAR_ALWAYS_ZERO_0x403F 0x403F // This var is read and written, but is always zero. #define VAR_DAYS 0x4040 #define VAR_FANCLUB_UNKNOWN_1 0x4041 #define VAR_FANCLUB_UNKNOWN_2 0x4042 #define VAR_DEPT_STORE_FLOOR 0x4043 #define VAR_0x4044 0x4044 -#define VAR_POKELOT_PRIZE 0x4045 +#define VAR_POKELOT_PRIZE_ITEM 0x4045 #define VAR_NATIONAL_DEX 0x4046 #define VAR_SEEDOT_SIZE_RECORD 0x4047 #define VAR_ASH_GATHER_COUNT 0x4048 @@ -93,98 +93,98 @@ #define VAR_CRUISE_STEP_COUNT 0x404A #define VAR_POKELOT_RND1 0x404B #define VAR_POKELOT_RND2 0x404C -#define VAR_0x404D 0x404D -#define VAR_0x404E 0x404E +#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_0x4052 0x4052 +#define VAR_UNUSED_0x4052 0x4052 // Unused Var #define VAR_LAVARIDGE_RIVAL_STATE 0x4053 #define VAR_CURRENT_SECRET_BASE 0x4054 -#define VAR_0x4055 0x4055 -#define VAR_0x4056 0x4056 +#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_0x4059 0x4059 +#define VAR_UNUSED_0x4059 0x4059 // Unused Var #define VAR_RUSTBORO_STATE 0x405A -#define VAR_0x405B 0x405B -#define VAR_0x405C 0x405C -#define VAR_0x405D 0x405D -#define VAR_0x405E 0x405E -#define VAR_0x405F 0x405F +#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_ROUTE101_STATE 0x4060 -#define VAR_0x4061 0x4061 -#define VAR_0x4062 0x4062 +#define VAR_UNUSED_0x4061 0x4061 // Unused Var +#define VAR_UNUSED_0x4062 0x4062 // Unused Var #define VAR_0x4063 0x4063 -#define VAR_0x4064 0x4064 -#define VAR_0x4065 0x4065 -#define VAR_0x4066 0x4066 -#define VAR_0x4067 0x4067 -#define VAR_0x4068 0x4068 +#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_ROUTE110_STATE 0x4069 -#define VAR_0x406A 0x406A -#define VAR_0x406B 0x406B -#define VAR_0x406C 0x406C -#define VAR_0x406D 0x406D -#define VAR_0x406E 0x406E +#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_ROUTE116_STATE 0x406F -#define VAR_0x4070 0x4070 +#define VAR_UNUSED_0x4070 0x4070 // Unused Var #define VAR_ROUTE118_STATE 0x4071 #define VAR_ROUTE119_STATE 0x4072 -#define VAR_0x4073 0x4073 +#define VAR_UNUSED_0x4073 0x4073 // Unused Var #define VAR_ROUTE121_STATE 0x4074 -#define VAR_0x4075 0x4075 -#define VAR_0x4076 0x4076 -#define VAR_0x4077 0x4077 -#define VAR_0x4078 0x4078 -#define VAR_0x4079 0x4079 -#define VAR_0x407A 0x407A +#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_ROUTE128_STATE 0x407B -#define VAR_0x407C 0x407C -#define VAR_0x407D 0x407D -#define VAR_0x407E 0x407E -#define VAR_0x407F 0x407F -#define VAR_0x4080 0x4080 -#define VAR_0x4081 0x4081 +#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_LITTLEROOT_HOUSES_STATE 0x4082 -#define VAR_0x4083 0x4083 +#define VAR_UNUSED_0x4083 0x4083 // Unused Var #define VAR_BIRCH_LAB_STATE 0x4084 #define VAR_PETALBURG_GYM_STATE 0x4085 #define VAR_LINK_CONTEST_ROOM_STATE 0x4086 #define VAR_CABLE_CLUB_STATE 0x4087 #define VAR_CONTEST_LOCATION 0x4088 -#define VAR_0x4089 0x4089 +#define VAR_SECRET_BASE_INITIALIZED 0x4089 #define VAR_CONTEST_PRIZE_PICKUP 0x408A -#define VAR_0x408B 0x408B +#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_DEVON_CORP_3F_STATE 0x408F #define VAR_BRINEY_HOUSE_STATE 0x4090 -#define VAR_0x4091 0x4091 +#define VAR_UNUSED_0x4091 0x4091 // Unused Var #define VAR_LITTLEROOT_INTRO_STATE 0x4092 #define VAR_MAUVILLE_GYM_STATE 0x4093 #define VAR_LILYCOVE_MUSEUM_2F_STATE 0x4094 #define VAR_LILYCOVE_FAN_CLUB_STATE 0x4095 #define VAR_BRINEY_LOCATION 0x4096 -#define VAR_0x4097 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 -#define VAR_0x409B 0x409B +#define VAR_UNUSED_0x409B 0x409B // Unused Var #define VAR_ELITE_4_STATE 0x409C -#define VAR_0x409D 0x409D -#define VAR_0x409E 0x409E -#define VAR_0x409F 0x409F +#define VAR_UNUSED_0x409D 0x409D // Unused Var +#define VAR_MOSSDEEP_SPACE_CENTER_STATE_1 0x409E +#define VAR_MOSSDEEP_SPACE_CENTER_STATE_2 0x409F #define VAR_SLATEPORT_HARBOR_STATE 0x40A0 -#define VAR_0x40A1 0x40A1 +#define VAR_UNUSED_0x40A1 0x40A1 // Unused var #define VAR_SEAFLOOR_CAVERN_STATE 0x40A2 #define VAR_CABLE_CAR_STATION_STATE 0x40A3 #define VAR_SAFARI_ZONE_STATE 0x40A4 #define VAR_TRICK_HOUSE_ENTRANCE_STATE_1 0x40A5 #define VAR_TRICK_HOUSE_ENTRANCE_STATE_2 0x40A6 #define VAR_TRICK_HOUSE_ENTRANCE_STATE_3 0x40A7 -#define VAR_0x40A8 0x40A8 +#define VAR_UNUSED_0x40A8 0x40A8 // Unused Var #define VAR_CYCLING_CHALLENGE_STATE 0x40A9 #define VAR_SLATEPORT_MUSEUM_1F_STATE 0x40AA #define VAR_TRICK_HOUSE_PUZZLE_1_STATE 0x40AB @@ -197,13 +197,13 @@ #define VAR_TRICK_HOUSE_PUZZLE_8_STATE 0x40B2 #define VAR_WEATHER_INSTITUTE_STATE 0x40B3 #define VAR_PORTHOLE_STATE 0x40B4 -#define VAR_TRICK_HOUSE_STATE 0x40B5 // TODO: needs some further investigation +#define VAR_TRICK_HOUSE_STATE 0x40B5 // TODO: needs some further investigation #define VAR_TRICK_HOUSE_PUZZLE_7_STATE_2 0x40B6 #define VAR_SLATEPORT_FAN_CLUB_STATE 0x40B7 -#define VAR_0x40B8 0x40B8 +#define VAR_UNUSED_0x40B8 0x40B8 // Unused Var #define VAR_MT_PYRE_STATE 0x40B9 #define VAR_NEW_MAUVILLE_STATE 0x40BA -#define VAR_0x40BB 0x40BB +#define VAR_UNUSED_0x40BB 0x40BB // Unused Var #define VAR_BRAVO_TRAINER_BATTLE_TOWER_ON 0x40BC #define VAR_JAGGED_PASS_ASH_WEATHER 0x40BD #define VAR_GLASS_WORKSHOP_STATE 0x40BE @@ -216,87 +216,87 @@ #define VAR_WHICH_FOSSIL_REVIVED 0x40C5 #define VAR_STEVENS_HOUSE_STATE 0x40C6 #define VAR_OLDALE_STATE 0x40C7 -#define VAR_0x40C8 0x40C8 -#define VAR_0x40C9 0x40C9 -#define VAR_0x40CA 0x40CA -#define VAR_0x40CB 0x40CB -#define VAR_0x40CC 0x40CC -#define VAR_0x40CD 0x40CD +#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_FOSSIL_MANIAC_STATE 0x40CC +#define VAR_CABLE_CLUB_TUTORIAL_STATE 0x40CD #define VAR_FRONTIER_BATTLE_MODE 0x40CE #define VAR_FRONTIER_FACILITY 0x40CF -#define VAR_0x40D0 0x40D0 -#define VAR_0x40D1 0x40D1 -#define VAR_0x40D2 0x40D2 +#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_0x40D4 0x40D4 -#define VAR_0x40D5 0x40D5 -#define VAR_0x40D6 0x40D6 -#define VAR_0x40D7 0x40D7 -#define VAR_0x40D8 0x40D8 -#define VAR_0x40D9 0x40D9 +#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_HAS_TALKED_TO_SEAFLOOR_CAVERN_ENTRANCE_GRUNT 0x40D9 #define VAR_0x40DA 0x40DA -#define VAR_0x40DB 0x40DB -#define VAR_0x40DC 0x40DC +#define VAR_UNUSED_0x40DB 0x40DB // Unused Var +#define VAR_UNUSED_0x40DC 0x40DC // Unused Var #define VAR_EVENT_PICHU_SLOT 0x40DD -#define VAR_0x40DE 0x40DE -#define VAR_0x40DF 0x40DF -#define VAR_0x40E0 0x40E0 -#define VAR_0x40E1 0x40E1 -#define VAR_0x40E2 0x40E2 -#define VAR_0x40E3 0x40E3 -#define VAR_0x40E4 0x40E4 -#define VAR_0x40E5 0x40E5 +#define VAR_NEVER_READ_0x40DE 0x40DE // Var is written to, but never read +#define VAR_NEVER_READ_0x40DF 0x40DF // Var is written to, but never read +#define VAR_NEVER_READ_0x40E0 0x40E0 // Var is written to, but never read +#define VAR_NEVER_READ_0x40E1 0x40E1 // Var is written to, but never read +#define VAR_NEVER_READ_0x40E2 0x40E2 // Var is written to, but never read +#define VAR_NEVER_READ_0x40E3 0x40E3 // Var is written to, but never read +#define VAR_NEVER_READ_0x40E4 0x40E4 // var is written to, but never read +#define VAR_UNUSED_0x40E5 0x40E5 // Unused Var #define VAR_DAILY_SLOTS 0x40E6 #define VAR_DAILY_WILDS 0x40E7 #define VAR_DAILY_BLENDER 0x40E8 #define VAR_DAILY_PLANTED_BERRIES 0x40E9 #define VAR_DAILY_PICKED_BERRIES 0x40EA #define VAR_DAILY_ROULETTE 0x40EB -#define VAR_0x40EC 0x40EC -#define VAR_0x40ED 0x40ED -#define VAR_0x40EE 0x40EE -#define VAR_0x40EF 0x40EF -#define VAR_0x40F0 0x40F0 +#define VAR_SECRET_BASE_STEP_COUNTER 0x40EC // Used by Secret Base TV programs +#define VAR_SECRET_BASE_LAST_ITEM_USED 0x40ED // Used by Secret Base TV programs +#define VAR_SECRET_BASE_LOW_TV_FLAGS 0x40EE // Used by Secret Base TV programs +#define VAR_SECRET_BASE_HIGH_TV_FLAGS 0x40EF // Used by Secret Base TV programs +#define VAR_SECRET_BASE_IS_NOT_LOCAL 0x40F0 // Set to TRUE while in another player's secret base. #define VAR_DAILY_BP 0x40F1 -#define VAR_0x40F2 0x40F2 -#define VAR_0x40F3 0x40F3 -#define VAR_0x40F4 0x40F4 -#define VAR_0x40F5 0x40F5 -#define VAR_0x40F6 0x40F6 -#define VAR_0x40F7 0x40F7 -#define VAR_0x40F8 0x40F8 -#define VAR_0x40F9 0x40F9 -#define VAR_0x40FA 0x40FA -#define VAR_0x40FB 0x40FB -#define VAR_0x40FC 0x40FC -#define VAR_0x40FD 0x40FD -#define VAR_0x40FE 0x40FE -#define VAR_0x40FF 0x40FF +#define VAR_WALLY_CALL_STEP_COUNTER 0x40F2 +#define VAR_WINONA_CALL_STEP_COUNTER 0x40F3 +#define VAR_ROXANNE_CALL_STEP_COUNTER 0x40F4 +#define VAR_SCOTT_CALL_STEP_COUNTER 0x40F5 +#define VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER 0x40F6 +#define VAR_UNUSED_0x40F7 0x40F7 // Unused Var +#define VAR_UNUSED_0x40F8 0x40F8 // Unused Var +#define VAR_UNUSED_0x40F9 0x40F9 // Unused Var +#define VAR_UNUSED_0x40FA 0x40FA // Unused Var +#define VAR_UNUSED_0x40FB 0x40FB // Unused Var +#define VAR_UNUSED_0x40FC 0x40FC // Unused Var +#define VAR_UNUSED_0x40FD 0x40FD // Unused Var +#define VAR_UNUSED_0x40FE 0x40FE // Unused Var +#define VAR_UNUSED_0x40FF 0x40FF // Unused Var #define SPECIAL_VARS_START 0x8000 // special vars // They are commonly used as parameters to commands, or return values from commands. -#define VAR_0x8000 0x8000 -#define VAR_0x8001 0x8001 -#define VAR_0x8002 0x8002 -#define VAR_0x8003 0x8003 -#define VAR_0x8004 0x8004 -#define VAR_0x8005 0x8005 -#define VAR_0x8006 0x8006 -#define VAR_0x8007 0x8007 -#define VAR_0x8008 0x8008 -#define VAR_0x8009 0x8009 -#define VAR_0x800A 0x800A -#define VAR_0x800B 0x800B -#define VAR_FACING 0x800C -#define VAR_RESULT 0x800D -#define VAR_ITEM_ID 0x800E -#define VAR_LAST_TALKED 0x800F -#define VAR_CONTEST_RANK 0x8010 -#define VAR_CONTEST_CATEGORY 0x8011 -#define VAR_MON_BOX_ID 0x8012 -#define VAR_MON_BOX_POS 0x8013 -#define VAR_0x8014 0x8014 -#define VAR_0x8015 0x8015 +#define VAR_0x8000 0x8000 +#define VAR_0x8001 0x8001 +#define VAR_0x8002 0x8002 +#define VAR_0x8003 0x8003 +#define VAR_0x8004 0x8004 +#define VAR_0x8005 0x8005 +#define VAR_0x8006 0x8006 +#define VAR_0x8007 0x8007 +#define VAR_0x8008 0x8008 +#define VAR_0x8009 0x8009 +#define VAR_0x800A 0x800A +#define VAR_0x800B 0x800B +#define VAR_FACING 0x800C +#define VAR_RESULT 0x800D +#define VAR_ITEM_ID 0x800E +#define VAR_LAST_TALKED 0x800F +#define VAR_CONTEST_RANK 0x8010 +#define VAR_CONTEST_CATEGORY 0x8011 +#define VAR_MON_BOX_ID 0x8012 +#define VAR_MON_BOX_POS 0x8013 +#define VAR_UNUSED_0x8014 0x8014 +#define VAR_TRAINER_BATTLE_OPPONENT_A 0x8015 // Alias of gTrainerBattleOpponent_A #endif // GUARD_CONSTANTS_VARS_H diff --git a/include/constants/weather.h b/include/constants/weather.h index d62e07474..b01cfb390 100644 --- a/include/constants/weather.h +++ b/include/constants/weather.h @@ -37,4 +37,30 @@ #define COORD_EVENT_WEATHER_ROUTE119_CYCLE 20 #define COORD_EVENT_WEATHER_ROUTE123_CYCLE 21 +// These are the "unusual weather events" that are used +// to find Kyogre and Groudon. +#define UNUSUAL_WEATHER_COUNT_PER_LEGENDARY 8 +#define UNUSUAL_WEATHER_GROUDON_LOCATIONS_START 1 +#define UNUSUAL_WEATHER_KYOGRE_LOCATIONS_START 1 + UNUSUAL_WEATHER_COUNT_PER_LEGENDARY + +#define UNUSUAL_WEATHER_NONE 0 +// Groudon locations +#define UNUSUAL_WEATHER_ROUTE_114_NORTH 1 +#define UNUSUAL_WEATHER_ROUTE_114_SOUTH 2 +#define UNUSUAL_WEATHER_ROUTE_115_WEST 3 +#define UNUSUAL_WEATHER_ROUTE_115_EAST 4 +#define UNUSUAL_WEATHER_ROUTE_116_NORTH 5 +#define UNUSUAL_WEATHER_ROUTE_116_SOUTH 6 +#define UNUSUAL_WEATHER_ROUTE_118_EAST 7 +#define UNUSUAL_WEATHER_ROUTE_118_WEST 8 +// Kyogre locations +#define UNUSUAL_WEATHER_ROUTE_105_NORTH 9 +#define UNUSUAL_WEATHER_ROUTE_105_SOUTH 10 +#define UNUSUAL_WEATHER_ROUTE_125_WEST 11 +#define UNUSUAL_WEATHER_ROUTE_125_EAST 12 +#define UNUSUAL_WEATHER_ROUTE_127_NORTH 13 +#define UNUSUAL_WEATHER_ROUTE_127_SOUTH 14 +#define UNUSUAL_WEATHER_ROUTE_129_WEST 15 +#define UNUSUAL_WEATHER_ROUTE_129_EAST 16 + #endif // GUARD_CONSTANTS_WEATHER_H diff --git a/include/contest.h b/include/contest.h index e4391a327..8146486cb 100644 --- a/include/contest.h +++ b/include/contest.h @@ -478,5 +478,6 @@ bool32 sub_80FC4F4(void *, u16); bool8 sub_80FC55C(void); bool8 sub_80FC530(u8); u8 sub_80F86E0(u8 *); +void sub_80FC9F8(u8 taskId); #endif //GUARD_CONTEST_H diff --git a/include/dewford_trend.h b/include/dewford_trend.h index 608a925f5..bdb0fc95c 100644 --- a/include/dewford_trend.h +++ b/include/dewford_trend.h @@ -5,5 +5,7 @@ void InitDewfordTrend(void); void UpdateDewfordTrendPerDay(u16); void UpdateDewfordTrendPerDay(u16 days); bool8 sub_81226D8(u16 *a); +void ReceiveEasyChatPairsData(struct EasyChatPair *a, size_t b, u8 unused); + #endif // GUARD_DEWFORDTREND_H diff --git a/include/easy_chat.h b/include/easy_chat.h index 2efdc4e5d..84ac15422 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -134,5 +134,6 @@ u16 EasyChat_GetNumWordsInGroup(u8); u16 sub_811EE90(u16); void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback, u8 displayedPersonType); void sub_811F8BC(void); +void sub_811EFC0(u8 additionalPhraseId); #endif // GUARD_EASYCHAT_H diff --git a/include/event_data.h b/include/event_data.h index 3b8e2701f..11289c1ab 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -47,6 +47,6 @@ extern u16 gSpecialVar_LastTalked; extern u16 gSpecialVar_Facing; extern u16 gSpecialVar_MonBoxId; extern u16 gSpecialVar_MonBoxPos; -extern u16 gSpecialVar_0x8014; +extern u16 gSpecialVar_Unused_0x8014; #endif // GUARD_EVENT_DATA_H diff --git a/include/event_obj_lock.h b/include/event_obj_lock.h index 59532fdcb..2f09ad36a 100644 --- a/include/event_obj_lock.h +++ b/include/event_obj_lock.h @@ -7,5 +7,6 @@ bool8 sub_809847C(void); void LockSelectedEventObject(void); void sub_8098630(void); bool8 sub_8098734(void); +void ScriptUnfreezeEventObjects(void); #endif // GUARD_EVENT_OBJ_LOCK_H diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 284bbe8db..63ac09f2d 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -193,6 +193,9 @@ void UpdateEventObjectSpriteVisibility(struct Sprite *sprite, bool8 invisible); s16 sub_809773C(s16 a1); s16 sub_8097728(s16 a1); void CameraObjectReset2(void); +u8 EventObjectGetBerryTreeId(u8 eventObjectId); +void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup); +bool8 IsBerryTreeSparkling(u8, u8, u8); void MovementType_None(struct Sprite *); void MovementType_LookAround(struct Sprite *); diff --git a/include/event_scripts.h b/include/event_scripts.h index 65e2c74b7..e3ec8afb4 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -564,7 +564,7 @@ extern const u8 EventScript_FallDownHole[]; extern const u8 BattleFrontier_BattlePyramidEmptySquare_EventScript_252BE8[]; extern const u8 EventScript_Poison[]; extern const u8 EventScript_EggHatch[]; -extern const u8 gUnknown_08273D1F[]; +extern const u8 UnusualWeather_EventScript_EndEventAndCleanup_1[]; extern const u8 IslandCave_EventScript_238EAF[]; extern const u8 MauvilleCity_EventScript_1DF7BA[]; extern const u8 Route119_EventScript_1F49EC[]; diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index 738cceb3e..feb20cef6 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -39,5 +39,6 @@ int SetCableClubWarp(void); u8 TrySetDiveWarp(void); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); +void ClearPoisonStepCounter(void); #endif // GUARD_FIELDCONTROLAVATAR_H diff --git a/include/field_effect.h b/include/field_effect.h index 205dbb68a..1f5f4ee29 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -36,6 +36,10 @@ bool8 FieldEffectCmd_end(u8 **script, u32 *val); bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u32 *val); bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u32 *val); bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u32 *val); +void sub_80B6B68(void); +void sub_80B6E4C(u8 a0, u8 priority); +void sub_80B75D8(u8 priority); +void sub_80B7A74(u8 priority); void sub_80B9C28(s16*, u8); void sub_80B9C54(s16*, u8); @@ -47,5 +51,6 @@ void sub_80B7A58(struct Sprite*); void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b); void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId); u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority); +void StartEscapeRopeFieldEffect(void); #endif //GUARD_FIELD_EFFECTS_H diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 6022467e4..6ea9771e6 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -34,5 +34,6 @@ void UpdateSparkleFieldEffect(struct Sprite*); void SetSpriteInvisible(u8 spriteId); void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y); void sub_8155604(u8 spriteId, u8 value, s16 data1); +void sub_81555D8(u8 spriteId, u8 value); #endif //GUARD_FIELD_EFFECT_HELPERS_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 45cd0dbd9..ca3d41546 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -63,5 +63,15 @@ u8 sub_808BCD0(void); void sub_808B578(void); u8 GetFRLGAvatarGraphicsIdByGender(u8); u8 GetRSAvatarGraphicsIdByGender(u8); +void sub_808B980(u8 direction); +void sub_808B9BC(u8 direction); +void sub_808B9A4(u8 direction); +void sub_808C1B4(u8 direction); +void sub_808B9D4(u8 direction); +void sub_808D194(void); +void sub_808D1C8(void); +bool32 sub_808D1B4(void); +bool32 sub_808D1E8(void); +void sub_808C0A8(u8 a); #endif // GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 2b8b3a5a3..b4429c167 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -41,5 +41,6 @@ void sub_80B0534(void); void sub_80B058C(void); void sub_80B05B4(void); void WriteFlashScanlineEffectBuffer(u8 flashLevel); +bool8 walkrun_is_standing_still(void); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/include/field_special_scene.h b/include/field_special_scene.h index 240e9ecb6..2219c9433 100644 --- a/include/field_special_scene.h +++ b/include/field_special_scene.h @@ -10,5 +10,6 @@ void Task_HandleTruckSequence(u8 taskId); void ExecuteTruckSequence(void); void EndTruckSequence(u8); void sub_80C791C(void); +void sub_80FB768(void); #endif // GUARD_FIELD_SPECIAL_SCENE_H diff --git a/include/field_specials.h b/include/field_specials.h index bff04a739..68b233074 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -7,13 +7,13 @@ u16 get_unknown_box_id(void); bool8 InMultiBattleRoom(void); void sub_813BF10(void); void IncrementBirthIslandRockStepCount(void); -bool8 sub_813B3B0(void); +bool8 UnusualWeatherHasExpired(void); bool8 ShouldDoBrailleRegicePuzzle(void); -bool32 is_tile_that_overrides_player_control(void); -bool32 sub_8138120(void); -bool32 sub_8138168(void); -bool32 sub_81381B0(void); -bool32 sub_81381F8(void); +bool32 ShouldDoWallyCall(void); +bool32 ShouldDoWinonaCall(void); +bool32 ShouldDoScottCall(void); +bool32 ShouldDoRoxanneCall(void); +bool32 ShouldDoRivalRayquazaCall(void); bool32 CountSSTidalStep(u16 delta); u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y); void sub_813A128(void); @@ -26,6 +26,7 @@ void UpdateFrontierGambler(u16 a0); void ResetCyclingRoadChallengeData(void); bool8 warp0_in_pokecenter(void); void ResetFanClub(void); - +bool8 sub_813B21C(void); +void set_unknown_box_id(u8 id); #endif // GUARD_FIELD_SPECIALS_H diff --git a/include/fieldmap.h b/include/fieldmap.h index 24bc4989a..bb5b0e290 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -9,6 +9,8 @@ #define NUM_PALS_TOTAL 13 #define MAX_MAP_DATA_SIZE 0x2800 +#include "main.h" + extern struct BackupMapLayout gBackupMapLayout; u32 MapGridGetMetatileIdAt(int, int); @@ -37,11 +39,16 @@ void copy_map_tileset1_tileset2_to_vram(struct MapLayout const *mapLayout); void apply_map_tileset1_tileset2_palette(struct MapLayout const *mapLayout); void apply_map_tileset2_palette(struct MapLayout const *mapLayout); void copy_map_tileset2_to_vram_2(struct MapLayout const *mapLayout); -extern void copy_map_tileset1_to_vram(const struct MapLayout *); -extern void copy_map_tileset2_to_vram(const struct MapLayout *); +void copy_map_tileset1_to_vram(const struct MapLayout *); +void copy_map_tileset2_to_vram(const struct MapLayout *); +struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection); +struct MapConnection *sub_8088A8C(s16 x, s16 y); void SpriteCB_PokeballGlow(struct Sprite *); void SpriteCB_PokecenterMonitor(struct Sprite *); void SpriteCB_HallOfFameMonitor(struct Sprite *); +// field_region_map.c +void FieldInitRegionMap(MainCallback callback); + #endif //GUARD_FIELDMAP_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 74a8363bb..e35d900d8 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -1,6 +1,13 @@ #ifndef GUARD_GLOBAL_FIELDMAP_H #define GUARD_GLOBAL_FIELDMAP_H +#define METATILE_COLLISION_MASK 0x0C00 +#define METATILE_ID_MASK 0x03FF +#define METATILE_ID_UNDEFINED 0x03FF +#define METATILE_ELEVATION_SHIFT 12 +#define METATILE_COLLISION_SHIFT 10 +#define METATILE_ELEVATION_MASK 0xF000 + enum { CONNECTION_SOUTH = 1, @@ -19,8 +26,8 @@ struct Tileset /*0x01*/ bool8 isSecondary; /*0x04*/ void *tiles; /*0x08*/ void *palettes; - /*0x0c*/ void *metatiles; - /*0x10*/ void *metatileAttributes; + /*0x0c*/ u16 *metatiles; + /*0x10*/ u16 *metatileAttributes; /*0x14*/ TilesetCB callback; }; diff --git a/include/global.h b/include/global.h index cc026f36a..1f9ac5185 100644 --- a/include/global.h +++ b/include/global.h @@ -795,15 +795,15 @@ struct TrainerNameRecord struct SaveTrainerHill { - /*0x3D64*/ u32 field_3D64; - /*0x3D68*/ u32 field_3D68; + /*0x3D64*/ u32 timer; + /*0x3D68*/ u32 bestTime; /*0x3D6C*/ u8 field_3D6C; /*0x3D6D*/ u8 unused; /*0x3D6E*/ u16 field_3D6E_0a:1; // 1 /*0x3D6E*/ u16 field_3D6E_0b:1; // 2 /*0x3D6E*/ u16 field_3D6E_0c:1; // 4 - /*0x3D6E*/ u16 field_3D6E_0d:1; // 8 - /*0x3D6E*/ u16 field_3D6E_0e:1; // x10 + /*0x3D6E*/ u16 hasLost:1; // 8 + /*0x3D6E*/ u16 maybeECardScanDuringChallenge:1; // x10 /*0x3D6E*/ u16 field_3D6E_0f:1; // x20 /*0x3D6E*/ u16 tag:2; // x40, x80 = xC0 }; @@ -906,13 +906,13 @@ struct MapPosition s8 height; }; -struct UnkStruct_8054FF8 +struct TradeRoomPlayer { - u8 a; - u8 b; + u8 playerId; + u8 isLocalPlayer; u8 c; - u8 d; - struct MapPosition sub; + u8 facing; + struct MapPosition pos; u16 field_C; }; diff --git a/include/hall_of_fame.h b/include/hall_of_fame.h index d35ecf268..5c8a01bcb 100644 --- a/include/hall_of_fame.h +++ b/include/hall_of_fame.h @@ -6,4 +6,7 @@ void CB2_DoHallOfFameScreenDontSaveData(void); void CB2_DoHallOfFamePC(void); void sub_8175280(void); +// hof_pc.c +void ReturnFromHallOfFamePC(void); + #endif // GUARD_HALL_OF_FAME_H diff --git a/include/item_menu.h b/include/item_menu.h index 2ca1af200..70d6b5a94 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -2,6 +2,7 @@ #define GUARD_item_menu_H #include "item.h" +#include "menu_helpers.h" #define RETURN_LOCATION_FIELD 0 #define RETURN_LOCATION_BATTLE 1 @@ -71,6 +72,7 @@ void sub_81AAC14(void); void sub_81AAC50(void); void sub_81AAC70(void); void sub_81AAC28(void); +void sub_81AABB0(void); void SetInitialScrollAndCursorPositions(u8 pocketId); void bag_menu_mail_related(void); void CB2_BagMenuFromStartMenu(void); @@ -80,6 +82,11 @@ void CB2_GoToSellMenu(void); void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)()); void DoWallyTutorialBagMenu(void); void ResetBagScrollPositions(void); +void sub_81AABF0(void (*callback)(void)); +void CB2_ChooseBerry(void); +void unknown_ItemMenu_Confirm(u8 taskId); +void bag_menu_yes_no(u8, u8, const struct YesNoFuncTable*); +void sub_81AB9A8(u8 pocketId); #endif //GUARD_item_menu_H diff --git a/include/link.h b/include/link.h index 11eff5c28..24a834c68 100644 --- a/include/link.h +++ b/include/link.h @@ -244,7 +244,7 @@ bool8 IsLinkTaskFinished(void); void CreateWirelessStatusIndicatorSprite(u8, u8); void sub_800ADF8(void); void sub_800B488(void); -void sub_800A620(void); +void CheckShouldAdvanceLinkState(void); void sub_8011BD0(void); u8 IsLinkMaster(void); void sub_800AC34(void); @@ -261,6 +261,8 @@ void sub_800B3A4(u32 who); bool32 sub_800A07C(void); void sub_800AB98(void); void sub_800AA04(u8 a0); +void sub_800B4C0(void); +bool32 sub_800B504(void); extern u16 gLinkPartnersHeldKeys[6]; extern u32 gLinkDebugSeed; @@ -299,8 +301,8 @@ extern struct LinkPlayer gLocalLinkPlayer; bool32 Link_AnyPartnersPlayingRubyOrSapphire(void); bool32 sub_800A03C(void); -void sub_8009628(u8); -u8 sub_800AA48(void); +void SetLocalLinkPlayerId(u8); +u8 GetSavedPlayerCount(void); void sub_8009FAC(void); bool8 sub_800A4D8(u8 a0); u8 sub_800A9D8(void); @@ -312,7 +314,7 @@ void sub_800AB18(void); void sub_8009F18(void); bool8 sub_800AA60(void); void sub_800ABF4(u16 a0); -bool32 sub_8009F3C(void); -u32 sub_800B4DC(void); +bool32 IsSendingKeysToLink(void); +u32 GetLinkRecvQueueLength(void); #endif // GUARD_LINK_H diff --git a/include/link_rfu.h b/include/link_rfu.h index c91f9f1d3..5b8ccd9fb 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -219,7 +219,7 @@ void sub_800E700(void); void sub_800EDD4(void); void sub_800F6FC(u8 who); void sub_800F728(u8 who); -bool32 sub_800F7E4(void); +bool32 IsSendingKeysToRfu(void); void sub_800F804(void); void sub_800F850(void); u8 sub_800FCD8(void); @@ -238,8 +238,8 @@ void sub_800E6D0(void); bool32 sub_8010EC0(void); bool32 sub_8010F1C(void); bool32 sub_8011A80(void); -bool32 sub_800F0B8(void); -u32 sub_80124D4(void); +bool32 IsRfuRecvQueueEmpty(void); +u32 GetRfuRecvQueueLength(void); void RfuVSync(void); void sub_80111B0(bool32 a0); u8 sub_8011A74(void); diff --git a/include/main.h b/include/main.h index 728064288..4f9a9e61a 100644 --- a/include/main.h +++ b/include/main.h @@ -61,14 +61,14 @@ void SetHBlankCallback(IntrCallback callback); void SetVCountCallback(IntrCallback callback); void SetSerialCallback(IntrCallback callback); void InitFlashTimer(void); -void sub_80008DC(u32 *var); -void sub_80008E8(void); +void SetTrainerHillVBlankCounter(u32 *var); +void ClearTrainerHillVBlankCounter(void); void DoSoftReset(void); void ClearPokemonCrySongs(void); void RestoreSerialTimer3IntrHandlers(void); void StartTimer1(void); void SeedRngAndSetTrainerId(void); -extern u16 GetGeneratedTrainerIdLower(void); +u16 GetGeneratedTrainerIdLower(void); #endif // GUARD_MAIN_H diff --git a/include/match_call.h b/include/match_call.h index 17d40d41c..6803d2f26 100644 --- a/include/match_call.h +++ b/include/match_call.h @@ -12,5 +12,9 @@ enum { s32 GetRematchIdxByTrainerIdx(s32 trainerIdx); void InitMatchCallCounters(void); +bool32 TryStartMatchCall(void); +bool32 IsMatchCallTaskActive(void); +void StartMatchCallFromScript(u8* script); +void sub_8197080(u8 *destStr); #endif //GUARD_MATCH_CALL_H diff --git a/include/menu.h b/include/menu.h index aca462468..947f97a68 100644 --- a/include/menu.h +++ b/include/menu.h @@ -25,23 +25,23 @@ void InitStandardTextBoxWindows(void); void sub_8197200(void); u16 RunTextPrintersAndIsPrinter0Active(void); void sub_81973A4(void); -void NewMenuHelpers_DrawDialogueFrame(u8, u8); -void sub_819746C(u8 windowId, bool8 copyToVram); +void DrawDialogueFrame(u8, u8); +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); void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback); -void sub_8197434(u8 windowId, bool8 copyToVram); +void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram); void SetStandardWindowBorderStyle(u8 a0, u8 a1); -void DisplayYesNoMenu(void); +void DisplayYesNoMenuDefaultYes(void); u32 GetPlayerTextSpeed(void); u8 GetPlayerTextSpeedDelay(void); void sub_81978B0(u16 arg0); void AddTextPrinterWithCallbackForMessage(bool8 a1, void (*callback)(struct TextPrinterTemplate *, u16)); void sub_8199DF0(u32 bg, u8 a1, int a2, int a3); void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 speed, const u8 *str); -void sub_8198070(u8 windowId, bool8 copyToVram); +void ClearStdWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram); void SetWindowTemplateFields(struct WindowTemplate* template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock); -void SetWindowBorderStyle(u8 windowId, bool8 copyToVram, u16 tileStart, u8 palette); +void DrawStdFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 tileStart, u8 palette); void schedule_bg_copy_tilemap_to_vram(u8 bgNum); void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *strs); u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 numItems, u8 initialCursorPos); @@ -60,9 +60,9 @@ s8 ProcessMenuInput_other(void); void do_scheduled_bg_tilemap_copies_to_vram(void); void clear_scheduled_bg_copies_to_vram(void); void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str); -void sub_8197B1C(u8 windowId, bool8 copyToVram, u16 a2, u8 a3); +void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 a2, u8 a3); void sub_81995E4(u8 windowId, u8 optionsNo, const struct MenuAction *actions, const u8 *actionIds); -void sub_8197DF8(u8 windowId, bool8 copyToVram); +void ClearDialogWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram); u16 sub_8198AA4(u8, u8, u8, u8, u8, u8, u16); void *malloc_and_decompress(const void *src, u32 *sizeOut); u16 copy_decompressed_tile_data_to_vram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode); @@ -75,13 +75,13 @@ u8 GetStartMenuWindowId(void); void sub_819A2BC(u8, u8); u8 Menu_MoveCursor(s8 cursorDelta); u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta); -void NewMenuHelpers_DrawStdWindowFrame(u8 windowId, bool8 CopyToVram); +void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram); u8 sub_81979C4(u8 a1); u8 sub_81983AC(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos); void sub_819786C(u8 windowId, bool8 copyToVram); void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress); void RemoveStartMenuWindow(void); -void sub_8197948(u8 initialCursorPos); +void DisplayYesNoMenuWithDefault(u8 initialCursorPos); void sub_819A344(u8 a0, u8 *dest, u8 color); void RemoveMapNamePopUpWindow(void); u8 GetMapNamePopUpWindowId(void); diff --git a/include/overworld.h b/include/overworld.h index 8caba0673..b86067701 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -1,6 +1,29 @@ #ifndef GUARD_OVERWORLD_H #define GUARD_OVERWORLD_H +#define LINK_KEY_CODE_NULL 0x00 +#define LINK_KEY_CODE_EMPTY 0x11 +#define LINK_KEY_CODE_DPAD_DOWN 0x12 +#define LINK_KEY_CODE_DPAD_UP 0x13 +#define LINK_KEY_CODE_DPAD_LEFT 0x14 +#define LINK_KEY_CODE_DPAD_RIGHT 0x15 +#define LINK_KEY_CODE_UNK_2 0x16 +#define LINK_KEY_CODE_EXIT_ROOM 0x17 +#define LINK_KEY_CODE_START_BUTTON 0x18 +#define LINK_KEY_CODE_A_BUTTON 0x19 +#define LINK_KEY_CODE_UNK_4 0x1A // I'd guess this is the B button? + +// These two are a hack to stop user input until link stuff can be +// resolved. +#define LINK_KEY_CODE_HANDLE_RECV_QUEUE 0x1B +#define LINK_KEY_CODE_HANDLE_SEND_QUEUE 0x1C +#define LINK_KEY_CODE_UNK_7 0x1D +#define LINK_KEY_CODE_UNK_8 0x1E + +#define MOVEMENT_MODE_FREE 0 +#define MOVEMENT_MODE_FROZEN 1 +#define MOVEMENT_MODE_SCRIPTED 2 + struct InitialPlayerAvatarState { u8 transitionFlags; @@ -12,7 +35,7 @@ struct LinkPlayerEventObject u8 active; u8 linkPlayerId; u8 eventObjId; - u8 mode; + u8 movementMode; }; // Exported RAM declarations @@ -22,10 +45,10 @@ extern struct LinkPlayerEventObject gLinkPlayerEventObjects[4]; extern u16 *gBGTilemapBuffers1; extern u16 *gBGTilemapBuffers2; extern u16 *gBGTilemapBuffers3; -extern u16 gUnknown_03005DA8; +extern u16 gHeldKeyCodeToSend; extern void (*gFieldCallback)(void); extern bool8 (*gFieldCallback2)(void); -extern u8 gUnknown_03005DB4; +extern u8 gLocalLinkPlayerId; extern u8 gFieldLinkPlayerCount; // Exported ROM declarations @@ -96,19 +119,19 @@ u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum); u8 GetMapTypeByWarpData(struct WarpData *warp); u8 GetCurrentMapType(void); u8 GetLastUsedWarpMapType(void); -bool8 is_map_type_1_2_3_5_or_6(u8 mapType); +bool8 IsMapTypeOutdoors(u8 mapType); bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType); -bool8 Overworld_MapTypeIsIndoors(u8 mapType); +bool8 IsMapTypeIndoors(u8 mapType); u8 GetSavedWarpRegionMapSectionId(void); u8 GetCurrentRegionMapSectionId(void); u8 GetCurrentMapBattleScene(void); void CleanupOverworldWindowsAndTilemaps(void); -bool32 is_c1_link_related_active(void); +bool32 IsUpdateLinkStateCBActive(void); void CB1_Overworld(void); void CB2_OverworldBasic(void); void CB2_Overworld(void); void SetMainCallback1(void (*cb)(void)); -void sub_8085E94(void *a0); +void SetUnusedCallback(void *a0); void CB2_NewGame(void); void CB2_WhiteOut(void); void CB2_LoadMap(void); @@ -117,18 +140,18 @@ void sub_8086074(void); void CB2_ReturnToField(void); void CB2_ReturnToFieldLocal(void); void CB2_ReturnToFieldLink(void); -void c2_8056854(void); +void CB2_ReturnToFieldFromMultiplayer(void); void CB2_ReturnToFieldWithOpenMenu(void); void CB2_ReturnToFieldContinueScript(void); void CB2_ReturnToFieldContinueScriptPlayMapMusic(void); void sub_80861E8(void); void CB2_ContinueSavedGame(void); -void sub_8086C2C(void); +void ResetAllMultiplayerState(void); u32 sub_8087214(void); bool32 sub_808727C(void); u16 sub_8087288(void); u16 sub_808729C(void); -u16 sub_80872B0(void); +u16 QueueExitLinkRoomKey(void); u16 sub_80872C4(void); bool32 sub_8087598(void); bool32 sub_80875C8(void); diff --git a/include/party_menu.h b/include/party_menu.h index 702b4fde1..e67dd56f2 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -85,7 +85,7 @@ u8 GetItemEffectType(u16 item); void CB2_PartyMenuFromStartMenu(void); void sub_81B7F60(void); void sub_81B8448(void); -void sub_81B8518(u8 unused); +void InitChooseHalfPartyForBattle(u8 unused); void sub_81B8558(void); void sub_81B8904(u8 initArg, MainCallback callback); void sub_81B892C(void); diff --git a/include/pokedex.h b/include/pokedex.h index 6136f7786..a1b7378bf 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -43,5 +43,7 @@ s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId); u16 CreateMonSpriteFromNationalDexNumber(u16, s16, s16, u16); bool16 HasAllHoennMons(void); void ResetPokedexScrollPositions(void); +u16 sub_80C0944(void); +void CB2_Pokedex(void); #endif // GUARD_POKEDEX_H diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index 4f27ef281..c7b895028 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -23,5 +23,6 @@ void LoadMonIconPalette(u16 species); void sub_80D328C(struct Sprite *sprite); void sub_80D3014(struct Sprite *sprite); void sub_80D32C8(struct Sprite *sprite, u8 animNum); +u8 sub_80D30A0(u16 species); #endif // GUARD_POKEMON_ICON_H diff --git a/include/pokenav.h b/include/pokenav.h index e5dba8ae0..29ccaec3e 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -30,5 +30,6 @@ u32 sub_81D427C(void); void sub_81D4998(void); void sub_81D3640(u16 arg0, void* statStoreLocation1, void* statStoreLocation2, u8 arg3, u8 arg4, u8 arg5); void sub_81D3784(u16 arg0, void* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4); +void CB2_InitPokeNav(void); #endif //GUARD_POKENAV_H diff --git a/include/record_mixing.h b/include/record_mixing.h index 0d50f46f9..4cd231e8a 100644 --- a/include/record_mixing.h +++ b/include/record_mixing.h @@ -7,7 +7,7 @@ struct PlayerHallRecords struct RankingHall2P twoPlayers[2]; }; -void sub_80E6BE8(void); +void RecordMixingPlayerSpotTriggered(void); void GetPlayerHallRecords(struct PlayerHallRecords *dst); #endif //GUARD_RECORD_MIXING_H diff --git a/include/rom_8011DC0.h b/include/rom_8011DC0.h index faffd3375..ac9bbb5c3 100644 --- a/include/rom_8011DC0.h +++ b/include/rom_8011DC0.h @@ -17,5 +17,7 @@ u16 mevent_081445C0(u8); void sub_801B990(u32, u32); u8 sub_8013F78(void); bool32 sub_802C908(u16); +void nullsub_89(u8 taskId); +void var_800D_set_xB(void); #endif //GUARD_rom_8011DC0_H diff --git a/include/save.h b/include/save.h index 42ce8b3f3..88e5f2280 100644 --- a/include/save.h +++ b/include/save.h @@ -83,15 +83,16 @@ bool8 sub_8153380(void); bool8 sub_81533AC(void); u8 sub_81533E0(void); u8 sub_8153408(void); -u8 sub_8153430(void); -bool8 sub_8153474(void); +u8 FullSaveGame(void); +bool8 CheckSaveFile(void); u8 Save_LoadGameData(u8 a1); u16 sub_815355C(void); u8 sub_81534D0(u8); -u8 sub_8153430(void); -bool8 sub_8153474(void); u32 TryCopySpecialSaveSection(u8 sector, u8* dst); u32 sub_8153634(u8 sector, u8* src); void sub_8153688(u8 taskId); +// save_failed_screen.c +void DoSaveFailedScreen(u8 saveType); + #endif // GUARD_SAVE_H diff --git a/include/script.h b/include/script.h index 386b388d0..34f4635bb 100644 --- a/include/script.h +++ b/include/script.h @@ -61,4 +61,7 @@ bool32 sub_80991F8(void); u8 *sub_8099244(void); void sub_80992A0(u8 *script, u16 scriptSize); +// srccmd.h +void sub_809BE48(u16 npcId); + #endif // GUARD_SCRIPT_H diff --git a/include/script_menu.h b/include/script_menu.h index a6d52c31e..1f4e549fe 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -14,5 +14,7 @@ u8 CreateWindowFromRect(u8, u8, u8, u8); void sub_80E2A78(u8); int display_text_and_get_width(const u8*, int); int sub_80E2D5C(int arg0, int tileWidth); +bool16 ScrSpecial_CreatePCMenu(void); +void ScriptMenu_DisplayPCStartupPrompt(void); #endif //GUARD_SCRIPT_MENU_H diff --git a/include/secret_base.h b/include/secret_base.h index 699158d0e..17efc314d 100644 --- a/include/secret_base.h +++ b/include/secret_base.h @@ -33,6 +33,8 @@ void sub_80E8B6C(void); void sub_80E8BC8(void); void sub_80E8D4C(void); void EnableBothScriptContexts(void); +void ReceiveSecretBasesData(void *records, size_t recordSize, u8 linkIdx); + #endif //GUARD_SECRET_BASE_H diff --git a/include/siirtc.h b/include/siirtc.h index 5864f95b8..de4fd634d 100644 --- a/include/siirtc.h +++ b/include/siirtc.h @@ -39,10 +39,10 @@ struct SiiRtcInfo u8 alarmMinute; }; -void SiiRtcUnprotect(); -void SiiRtcProtect(); -u8 SiiRtcProbe(); -bool8 SiiRtcReset(); +void SiiRtcUnprotect(void); +void SiiRtcProtect(void); +u8 SiiRtcProbe(void); +bool8 SiiRtcReset(void); bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc); bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc); bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc); diff --git a/include/text.h b/include/text.h index 96c5a4507..d8f2fd8a3 100644 --- a/include/text.h +++ b/include/text.h @@ -284,4 +284,8 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese); u32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese); void DecompressGlyphFont9(u16 glyphId); +// unk_text_util_2.c +u16 Font6Func(struct TextPrinter *textPrinter); +u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese); + #endif // GUARD_TEXT_H diff --git a/include/trainer_card.h b/include/trainer_card.h index 1cadbd8fc..173d23baa 100644 --- a/include/trainer_card.h +++ b/include/trainer_card.h @@ -43,7 +43,7 @@ struct TrainerCard extern struct TrainerCard gTrainerCards[4]; u32 CountPlayerTrainerStars(void); -u8 sub_80C4904(u8 cardId); +u8 GetTrainerCardStars(u8 cardId); void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion); void ShowPlayerTrainerCard(void (*callback)(void)); void ShowTrainerCardInLink(u8 arg0, void (*callback)(void)); diff --git a/include/trainer_hill.h b/include/trainer_hill.h index bbc4f45c5..ad2713316 100644 --- a/include/trainer_hill.h +++ b/include/trainer_hill.h @@ -1,7 +1,7 @@ #ifndef GUARD_TRAINER_HILL_H #define GUARD_TRAINER_HILL_H -extern u32 *gUnknown_0203CF5C; +extern u32 *gTrainerHillVBlankCounter; void CallTrainerHillFunction(void); void ResetTrainerHillResults(void); diff --git a/include/window.h b/include/window.h index 25573ac3e..10e447789 100644 --- a/include/window.h +++ b/include/window.h @@ -1,6 +1,8 @@ #ifndef GUARD_WINDOW_H #define GUARD_WINDOW_H +#define PIXEL_FILL(num) ((num) | ((num) << 4)) + enum { WINDOW_BG, @@ -73,6 +75,4 @@ extern u32 filler_03002F58; extern u32 filler_03002F5C; extern u32 filler_03002F64; -extern u8 gUnknown_03002F60; - #endif // GUARD_WINDOW_H |