diff options
Diffstat (limited to 'include')
120 files changed, 2715 insertions, 2424 deletions
diff --git a/include/battle.h b/include/battle.h index b377dc23c..5a04c1eec 100644 --- a/include/battle.h +++ b/include/battle.h @@ -124,22 +124,22 @@ struct ProtectStruct u32 flinchImmobility:1; u32 notFirstStrike:1; u32 palaceUnableToUseMove:1; - u32 physicalDmg; - u32 specialDmg; + s32 physicalDmg; + s32 specialDmg; u8 physicalBattlerId; u8 specialBattlerId; }; struct SpecialStatus { - u8 statLowered:1; - u8 lightningRodRedirected:1; - u8 restoredBattlerSprite: 1; - u8 intimidatedMon:1; - u8 traced:1; - u8 ppNotAffectedByPressure:1; - u8 flag40:1; - u8 focusBanded:1; + u32 statLowered:1; + u32 lightningRodRedirected:1; + u32 restoredBattlerSprite: 1; + u32 intimidatedMon:1; + u32 traced:1; + u32 ppNotAffectedByPressure:1; + u32 flag40:1; + u32 focusBanded:1; s32 dmg; s32 physicalDmg; s32 specialDmg; @@ -254,7 +254,7 @@ struct BattleResults u16 playerMon2Species; // 0x26 u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A - u8 filler35[1]; // 0x35 + u8 filler35; // 0x35 u8 catchAttempts[11]; // 0x36 }; @@ -390,7 +390,7 @@ struct BattleStruct u8 expGetterBattlerId; u8 unused_5; u8 field_91; // related to gAbsentBattlerFlags, possibly absent flags turn ago? - u8 field_92; // battle palace related + u8 palaceFlags; // First 4 bits are "is < 50% HP and not asleep" for each battler, last 4 bits are selected moves to pass to AI u8 field_93; // related to choosing pokemon? u8 wallyBattleState; u8 wallyMovesState; @@ -523,14 +523,14 @@ struct BattleAnimationInfo u8 field_7; u8 ballThrowCaseId; u8 field_9_x1:1; - u8 field_9_x2:1; + u8 wildMonInvisible:1; u8 field_9_x1C:3; u8 field_9_x20:1; u8 field_9_x40:1; u8 field_9_x80:1; - u8 field_A; + u8 numBallParticles; u8 field_B; - s16 field_C; + s16 ballSubpx; u8 field_E; u8 field_F; }; @@ -544,8 +544,8 @@ struct BattleHealthboxInfo u8 statusAnimActive:1; // x10 u8 animFromTableActive:1; // x20 u8 specialAnimActive:1; // x40 - u8 flag_x80:1; - u8 field_1_x1:1; + u8 triedShinyMonAnim:1; + u8 finishedShinyMonAnim:1; u8 field_1_x1E:4; u8 field_1_x20:1; u8 field_1_x40:1; diff --git a/include/battle_anim.h b/include/battle_anim.h index 18727cc73..096d533e2 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -207,8 +207,8 @@ void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId); // battle_anim_ground.c void AnimTask_HorizontalShake(u8 taskId); -// battle_anim_special.c -void sub_8172EF0(u8 battler, struct Pokemon *mon); +// battle_anim_throw.c +void TryShinyAnimation(u8 battler, struct Pokemon *mon); u8 ItemIdToBallId(u16 itemId); u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId); u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 selectedPalettes, u8 ballId); diff --git a/include/battle_main.h b/include/battle_main.h index e04db17bb..890e47f39 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -57,17 +57,17 @@ u32 sub_80397C4(u32 setId, u32 tableId); void SpriteCb_WildMon(struct Sprite *sprite); void SpriteCallbackDummy_2(struct Sprite *sprite); void SpriteCB_FaintOpponentMon(struct Sprite *sprite); -void sub_8039AD8(struct Sprite *sprite); -void sub_8039B2C(struct Sprite *sprite); -void sub_8039B58(struct Sprite *sprite); +void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite); +void SpriteCb_HideAsMoveTarget(struct Sprite *sprite); +void SpriteCb_OpponentMonFromBall(struct Sprite *sprite); void sub_8039BB4(struct Sprite *sprite); void sub_80105DC(struct Sprite *sprite); void sub_8039C00(struct Sprite *sprite); void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d); void EndBounceEffect(u8 battlerId, bool8 b); -void sub_8039E44(struct Sprite *sprite); +void SpriteCb_PlayerMonFromBall(struct Sprite *sprite); void sub_8039E60(struct Sprite *sprite); -void sub_8039E84(struct Sprite *sprite); +void SpriteCB_TrainerThrowObject(struct Sprite *sprite); void sub_8039E9C(struct Sprite *sprite); void nullsub_20(void); void BeginBattleIntro(void); diff --git a/include/battle_message.h b/include/battle_message.h index a3f2636e5..011a1cb0c 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -274,7 +274,7 @@ extern const u8 gText_PkmnGettingPumped[]; extern const u8 gText_PkmnShroudedInMist[]; extern const u8 gText_PkmnsXPreventsSwitching[]; extern const u8 gText_TheGreatNewHope[]; -extern const u8 gText_WillChampinshipDreamComeTrue[]; +extern const u8 gText_WillChampionshipDreamComeTrue[]; extern const u8 gText_AFormerChampion[]; extern const u8 gText_ThePreviousChampion[]; extern const u8 gText_TheUnbeatenChampion[]; diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 142ac1f7b..ee3676463 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H #define GUARD_BATTLE_SCRIPT_COMMANDS_H +#include "constants/pokemon.h" + #define WINDOW_CLEAR 0x1 #define WINDOW_x80 0x80 @@ -16,6 +18,6 @@ void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags); bool8 UproarWakeUpCheck(u8 battlerId); extern void (* const gBattleScriptingCommandsTable[])(void); -extern const u8 gUnknown_0831C494[][4]; +extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4]; #endif // GUARD_BATTLE_SCRIPT_COMMANDS_H diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 75abaae3c..706d41097 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -205,7 +205,7 @@ extern const u8 BattleScript_BerryStatRaiseEnd2[]; extern const u8 BattleScript_BerryFocusEnergyEnd2[]; extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[]; extern const u8 BattleScript_ArenaTurnBeginning[]; -extern const u8 BattleScript_82DB881[]; +extern const u8 BattleScript_PalacePrintFlavorText[]; extern const u8 BattleScript_ArenaDoJudgment[]; extern const u8 BattleScript_82DAA0B[]; extern const u8 BattleScript_AskIfWantsToForfeitMatch[]; diff --git a/include/battle_setup.h b/include/battle_setup.h index e88995778..7fa0457a8 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -28,7 +28,7 @@ void BattleSetup_StartLegendaryBattle(void); void StartGroudonKyogreBattle(void); void StartRegiBattle(void); u8 BattleSetup_GetTerrainId(void); -u8 sub_80B100C(s32 arg0); +u8 GetSpecialBattleTransition(s32 arg0); void ChooseStarter(void); void ResetTrainerOpponentIds(void); void SetMapVarsToTrainer(void); diff --git a/include/battle_transition.h b/include/battle_transition.h index db06a5638..a33032fb4 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -7,9 +7,9 @@ void BattleTransition_Start(u8 transitionId); bool8 IsBattleTransitionDone(void); bool8 FldEff_Pokeball(void); void TransitionPhase1_Task_RunFuncs(u8 taskId); -void sub_8149F58(u16 **a0, u16 **a1); +void GetBg0TilesDst(u16 **tilemap, u16 **tileset); -extern const struct SpritePalette gFieldEffectObjectPaletteInfo10; +extern const struct SpritePalette gSpritePalette_Pokeball; enum // TRANSITION_MUGSHOT { @@ -24,49 +24,49 @@ enum // TRANSITION_MUGSHOT // credits for the names go to Dyskinesia, Tetrable and Farore // names are naturally subject to change -#define B_TRANSITION_BLUR 0 -#define B_TRANSITION_SWIRL 1 -#define B_TRANSITION_SHUFFLE 2 -#define B_TRANSITION_BIG_POKEBALL 3 -#define B_TRANSITION_POKEBALLS_TRAIL 4 -#define B_TRANSITION_CLOCKWISE_BLACKFADE 5 -#define B_TRANSITION_RIPPLE 6 -#define B_TRANSITION_WAVE 7 -#define B_TRANSITION_SLICE 8 -#define B_TRANSITION_WHITEFADE 9 -#define B_TRANSITION_GRID_SQUARES 10 -#define B_TRANSITION_SHARDS 11 -#define B_TRANSITION_SIDNEY 12 -#define B_TRANSITION_PHOEBE 13 -#define B_TRANSITION_GLACIA 14 -#define B_TRANSITION_DRAKE 15 -#define B_TRANSITION_CHAMPION 16 +#define B_TRANSITION_BLUR 0 +#define B_TRANSITION_SWIRL 1 +#define B_TRANSITION_SHUFFLE 2 +#define B_TRANSITION_BIG_POKEBALL 3 +#define B_TRANSITION_POKEBALLS_TRAIL 4 +#define B_TRANSITION_CLOCKWISE_BLACKFADE 5 +#define B_TRANSITION_RIPPLE 6 +#define B_TRANSITION_WAVE 7 +#define B_TRANSITION_SLICE 8 +#define B_TRANSITION_WHITEFADE 9 +#define B_TRANSITION_GRID_SQUARES 10 +#define B_TRANSITION_SHARDS 11 +#define B_TRANSITION_SIDNEY 12 +#define B_TRANSITION_PHOEBE 13 +#define B_TRANSITION_GLACIA 14 +#define B_TRANSITION_DRAKE 15 +#define B_TRANSITION_CHAMPION 16 // added in Emerald -#define B_TRANSITION_AQUA 17 -#define B_TRANSITION_MAGMA 18 -#define B_TRANSITION_REGICE 19 -#define B_TRANSITION_REGISTEEL 20 -#define B_TRANSITION_REGIROCK 21 -#define B_TRANSITION_KYOGRE 22 -#define B_TRANSITION_GROUDON 23 -#define B_TRANSITION_RAYQUAZA 24 -#define B_TRANSITION_SHRED_SPLIT 25 -#define B_TRANSITION_BLACKHOLE1 26 -#define B_TRANSITION_BLACKHOLE2 27 -#define B_TRANSITION_RECTANGULAR_SPIRAL 28 -#define B_TRANSITION_29 29 -#define B_TRANSITION_30 30 -#define B_TRANSITION_31 31 -#define B_TRANSITION_32 32 -#define B_TRANSITION_33 33 -#define B_TRANSITION_34 34 -#define B_TRANSITION_35 35 -#define B_TRANSITION_36 36 -#define B_TRANSITION_37 37 -#define B_TRANSITION_38 38 -#define B_TRANSITION_39 39 -#define B_TRANSITION_40 40 -#define B_TRANSITION_41 41 -#define B_TRANSITION_COUNT 42 +#define B_TRANSITION_AQUA 17 +#define B_TRANSITION_MAGMA 18 +#define B_TRANSITION_REGICE 19 +#define B_TRANSITION_REGISTEEL 20 +#define B_TRANSITION_REGIROCK 21 +#define B_TRANSITION_KYOGRE 22 +#define B_TRANSITION_GROUDON 23 +#define B_TRANSITION_RAYQUAZA 24 +#define B_TRANSITION_SHRED_SPLIT 25 +#define B_TRANSITION_BLACKHOLE1 26 +#define B_TRANSITION_BLACKHOLE2 27 +#define B_TRANSITION_RECTANGULAR_SPIRAL 28 +#define B_TRANSITION_FRONTIER_LOGO_WIGGLE 29 +#define B_TRANSITION_FRONTIER_LOGO_WAVE 30 +#define B_TRANSITION_FRONTIER_SQUARES 31 +#define B_TRANSITION_FRONTIER_SQUARES_SCROLL 32 +#define B_TRANSITION_FRONTIER_SQUARES_SPIRAL 33 +#define B_TRANSITION_FRONTIER_CIRCLES_MEET 34 +#define B_TRANSITION_FRONTIER_CIRCLES_CROSS 35 +#define B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL 36 +#define B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL 37 +#define B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ 38 +#define B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ 39 +#define B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ 40 +#define B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ 41 +#define B_TRANSITION_COUNT 42 #endif // GUARD_BATTLE_TRANSITION_H diff --git a/include/battle_transition_frontier.h b/include/battle_transition_frontier.h new file mode 100644 index 000000000..8813fe81e --- /dev/null +++ b/include/battle_transition_frontier.h @@ -0,0 +1,13 @@ +#ifndef GUARD_BATTLE_TRANSITION_FRONTIER_H +#define GUARD_BATTLE_TRANSITION_FRONTIER_H + +void Phase2Task_FrontierCirclesMeet(u8 taskId); +void Phase2Task_FrontierCirclesCross(u8 taskId); +void Phase2Task_FrontierCirclesAsymmetricSpiral(u8 taskId); +void Phase2Task_FrontierCirclesSymmetricSpiral(u8 taskId); +void Phase2Task_FrontierCirclesMeetInSeq(u8 taskId); +void Phase2Task_FrontierCirclesCrossInSeq(u8 taskId); +void Phase2Task_FrontierCirclesAsymmetricSpiralInSeq(u8 taskId); +void Phase2Task_FrontierCirclesSymmetricSpiralInSeq(u8 taskId); + +#endif // GUARD_BATTLE_TRANSITION_FRONTIER_H diff --git a/include/battle_util.h b/include/battle_util.h index b77fa10ad..157ba8eb6 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -52,8 +52,8 @@ void CancelMultiTurnMoves(u8 battlerId); bool8 WasUnableToUseMove(u8 battlerId); void PrepareStringBattle(u16 stringId, u8 battlerId); void ResetSentPokesToOpponentValue(void); -void sub_803F9EC(u8 battlerId); -void sub_803FA70(u8 battlerId); +void OpponentSwitchInResetSentPokesToOpponentValue(u8 battlerId); +void UpdateSentPokesToOpponentValue(u8 battlerId); void BattleScriptPush(const u8* bsPtr); void BattleScriptPushCursor(void); void BattleScriptPop(void); diff --git a/include/berry_blender.h b/include/berry_blender.h index e8f7bb83d..66d839389 100644 --- a/include/berry_blender.h +++ b/include/berry_blender.h @@ -1,6 +1,16 @@ #ifndef GUARD_BERRY_BLENDER_H #define GUARD_BERRY_BLENDER_H +// Indices into gSendCmd / gRecvCmds +#define BLENDER_COMM_INPUT_STATE 0 +#define BLENDER_COMM_RESP 1 +#define BLENDER_COMM_SCORE 2 +#define BLENDER_COMM_STOP_TYPE 2 // re-used +#define BLENDER_COMM_PLAYER_ID 3 +#define BLENDER_COMM_UNUSED 4 +#define BLENDER_COMM_PROGRESS_BAR 5 +#define BLENDER_COMM_ARROW_POS 6 + extern u8 gInGameOpponentsNo; void DoBerryBlending(void); diff --git a/include/berry_crush.h b/include/berry_crush.h index 8909ae821..a08f1f699 100755 --- a/include/berry_crush.h +++ b/include/berry_crush.h @@ -3,6 +3,6 @@ #include "main.h" -void sub_8020C70(MainCallback callback); +void StartBerryCrush(MainCallback callback); #endif // GUARD_BERRY_CRUSH_H diff --git a/include/cable_club.h b/include/cable_club.h index c2849ca3e..7340742ea 100644 --- a/include/cable_club.h +++ b/include/cable_club.h @@ -3,18 +3,12 @@ #include "task.h" -// Exported type declarations - -// Exported RAM declarations - -// Exported ROM declarations - -void sub_80B37D4(TaskFunc taskFunc); -u8 sub_80B3050(void); -void sub_80B360C(void); -bool32 sub_80B2AF4(u16 *arg0, u16 *arg1); +void CreateTask_EnterCableClubSeat(TaskFunc taskFunc); +u8 CreateTask_ReestablishCableClubLink(void); +void CB2_ReturnFromCableClubBattle(void); +bool32 AreBattleTowerLinkSpeciesSame(u16 *speciesList1, u16 *speciesList2); void sub_80B3AF8(u8 taskId); -void task00_08081A90(u8 taskId); +void Task_WaitForLinkPlayerConnection(u8 taskId); bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex); #endif //GUARD_CABLE_CLUB_H diff --git a/include/confetti_util.h b/include/confetti_util.h new file mode 100644 index 000000000..ecc05a220 --- /dev/null +++ b/include/confetti_util.h @@ -0,0 +1,33 @@ +#ifndef GUARD_CONFETTI_UTIL_H +#define GUARD_CONFETTI_UTIL_H + +struct ConfettiUtil +{ + struct OamData oam; + s16 x; + s16 y; + s16 xDelta; + s16 yDelta; + u16 tileTag; + u16 palTag; + u16 tileNum; + u8 id; + u8 filler; + u8 animNum; + u8 active:1; + u8 allowUpdates:1; + u8 dummied:1; + u8 priority:2; + s16 data[8]; + void (*callback)(struct ConfettiUtil *); +}; + +bool32 ConfettiUtil_Init(u8 count); +bool32 ConfettiUtil_Free(void); +bool32 ConfettiUtil_Update(void); +u8 ConfettiUtil_SetCallback(u8 id, void (*func)(struct ConfettiUtil *)); +u8 ConfettiUtil_SetData(u8 id, u8 dataArrayId, s16 dataValue); +u8 ConfettiUtil_AddNew(const struct OamData *oam, u16 tileTag, u16 palTag, s16 x, s16 y, u8 animNum, u8 priority); +u8 ConfettiUtil_Remove(u8 id); + +#endif // GUARD_CONFETTI_UTIL_H diff --git a/include/config.h b/include/config.h index 318ed39d8..4f97a12a3 100644 --- a/include/config.h +++ b/include/config.h @@ -26,4 +26,12 @@ #define UNITS_METRIC #endif +// Various undefined behavior bugs may or may not prevent compilation with +// newer compilers. So always fix them when using a modern compiler. +#if MODERN +#ifndef UBFIX +#define UBFIX +#endif +#endif + #endif // GUARD_CONFIG_H diff --git a/include/constants/battle.h b/include/constants/battle.h index 346d5d9ea..fa8f422c4 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -37,146 +37,156 @@ #define B_SIDE_PLAYER 0 #define B_SIDE_OPPONENT 1 -#define B_FLANK_LEFT 0 +#define B_FLANK_LEFT 0 #define B_FLANK_RIGHT 1 #define BIT_SIDE 1 #define BIT_FLANK 2 // Battle Type Flags -#define BATTLE_TYPE_DOUBLE 0x0001 -#define BATTLE_TYPE_LINK 0x0002 -#define BATTLE_TYPE_IS_MASTER 0x0004 // In not-link battles, it's always set. -#define BATTLE_TYPE_TRAINER 0x0008 -#define BATTLE_TYPE_FIRST_BATTLE 0x0010 -#define BATTLE_TYPE_20 0x0020 -#define BATTLE_TYPE_MULTI 0x0040 -#define BATTLE_TYPE_SAFARI 0x0080 -#define BATTLE_TYPE_BATTLE_TOWER 0x0100 -#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200 -#define BATTLE_TYPE_ROAMER 0x0400 -#define BATTLE_TYPE_EREADER_TRAINER 0x0800 -#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000 -#define BATTLE_TYPE_LEGENDARY 0x2000 -#define BATTLE_TYPE_REGI 0x4000 -#define BATTLE_TYPE_TWO_OPPONENTS 0x8000 -#define BATTLE_TYPE_DOME 0x10000 -#define BATTLE_TYPE_PALACE 0x20000 -#define BATTLE_TYPE_ARENA 0x40000 -#define BATTLE_TYPE_FACTORY 0x80000 -#define BATTLE_TYPE_PIKE 0x100000 -#define BATTLE_TYPE_PYRAMID 0x200000 -#define BATTLE_TYPE_INGAME_PARTNER 0x400000 -#define BATTLE_TYPE_x800000 0x800000 -#define BATTLE_TYPE_RECORDED 0x1000000 -#define BATTLE_TYPE_x2000000 0x2000000 -#define BATTLE_TYPE_TRAINER_HILL 0x4000000 -#define BATTLE_TYPE_SECRET_BASE 0x8000000 -#define BATTLE_TYPE_GROUDON 0x10000000 -#define BATTLE_TYPE_KYOGRE 0x20000000 -#define BATTLE_TYPE_RAYQUAZA 0x40000000 -#define BATTLE_TYPE_x80000000 0x80000000 +#define BATTLE_TYPE_DOUBLE (1 << 0) +#define BATTLE_TYPE_LINK (1 << 1) +#define BATTLE_TYPE_IS_MASTER (1 << 2) // In not-link battles, it's always set. +#define BATTLE_TYPE_TRAINER (1 << 3) +#define BATTLE_TYPE_FIRST_BATTLE (1 << 4) +#define BATTLE_TYPE_20 (1 << 5) +#define BATTLE_TYPE_MULTI (1 << 6) +#define BATTLE_TYPE_SAFARI (1 << 7) +#define BATTLE_TYPE_BATTLE_TOWER (1 << 8) +#define BATTLE_TYPE_WALLY_TUTORIAL (1 << 9) +#define BATTLE_TYPE_ROAMER (1 << 10) +#define BATTLE_TYPE_EREADER_TRAINER (1 << 11) +#define BATTLE_TYPE_KYOGRE_GROUDON (1 << 12) +#define BATTLE_TYPE_LEGENDARY (1 << 13) +#define BATTLE_TYPE_REGI (1 << 14) +#define BATTLE_TYPE_TWO_OPPONENTS (1 << 15) +#define BATTLE_TYPE_DOME (1 << 16) +#define BATTLE_TYPE_PALACE (1 << 17) +#define BATTLE_TYPE_ARENA (1 << 18) +#define BATTLE_TYPE_FACTORY (1 << 19) +#define BATTLE_TYPE_PIKE (1 << 20) +#define BATTLE_TYPE_PYRAMID (1 << 21) +#define BATTLE_TYPE_INGAME_PARTNER (1 << 22) +#define BATTLE_TYPE_x800000 (1 << 23) +#define BATTLE_TYPE_RECORDED (1 << 24) +#define BATTLE_TYPE_x2000000 (1 << 25) +#define BATTLE_TYPE_TRAINER_HILL (1 << 26) +#define BATTLE_TYPE_SECRET_BASE (1 << 27) +#define BATTLE_TYPE_GROUDON (1 << 28) +#define BATTLE_TYPE_KYOGRE (1 << 29) +#define BATTLE_TYPE_RAYQUAZA (1 << 30) +#define BATTLE_TYPE_x80000000 (1 << 31) #define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID) #define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE) // Battle Outcome defines -#define B_OUTCOME_WON 0x1 -#define B_OUTCOME_LOST 0x2 -#define B_OUTCOME_DREW 0x3 -#define B_OUTCOME_RAN 0x4 -#define B_OUTCOME_PLAYER_TELEPORTED 0x5 -#define B_OUTCOME_MON_FLED 0x6 -#define B_OUTCOME_CAUGHT 0x7 -#define B_OUTCOME_NO_SAFARI_BALLS 0x8 -#define B_OUTCOME_FORFEITED 0x9 -#define B_OUTCOME_MON_TELEPORTED 0xA -#define B_OUTCOME_LINK_BATTLE_RAN 0x80 +#define B_OUTCOME_WON 1 +#define B_OUTCOME_LOST 2 +#define B_OUTCOME_DREW 3 +#define B_OUTCOME_RAN 4 +#define B_OUTCOME_PLAYER_TELEPORTED 5 +#define B_OUTCOME_MON_FLED 6 +#define B_OUTCOME_CAUGHT 7 +#define B_OUTCOME_NO_SAFARI_BALLS 8 +#define B_OUTCOME_FORFEITED 9 +#define B_OUTCOME_MON_TELEPORTED 10 +#define B_OUTCOME_LINK_BATTLE_RAN (1 << 7) // 128 // Non-volatile status conditions // These persist remain outside of battle and after switching out -#define STATUS1_NONE 0x0 -#define STATUS1_SLEEP 0x7 -#define STATUS1_POISON 0x8 -#define STATUS1_BURN 0x10 -#define STATUS1_FREEZE 0x20 -#define STATUS1_PARALYSIS 0x40 -#define STATUS1_TOXIC_POISON 0x80 -#define STATUS1_TOXIC_COUNTER 0xF00 +#define STATUS1_NONE 0 +#define STATUS1_SLEEP (1 << 0 | 1 << 1 | 1 << 2) // First 3 bits (Number of turns to sleep) +#define STATUS1_SLEEP_TURN(num) ((num) << 0) // Just for readability (or if rearranging statuses) +#define STATUS1_POISON (1 << 3) +#define STATUS1_BURN (1 << 4) +#define STATUS1_FREEZE (1 << 5) +#define STATUS1_PARALYSIS (1 << 6) +#define STATUS1_TOXIC_POISON (1 << 7) +#define STATUS1_TOXIC_COUNTER (1 << 8 | 1 << 9 | 1 << 10 | 1 << 11) +#define STATUS1_TOXIC_TURN(num) ((num) << 8) #define STATUS1_PSN_ANY (STATUS1_POISON | STATUS1_TOXIC_POISON) #define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON) // Volatile status ailments // These are removed after exiting the battle or switching out -#define STATUS2_CONFUSION 0x00000007 -#define STATUS2_FLINCHED 0x00000008 -#define STATUS2_UPROAR 0x00000070 -#define STATUS2_BIDE 0x00000300 // two bits 0x100, 0x200 -#define STATUS2_LOCK_CONFUSE 0x00000C00 -#define STATUS2_MULTIPLETURNS 0x00001000 -#define STATUS2_WRAPPED 0x0000E000 -#define STATUS2_INFATUATION 0x000F0000 // 4 bits, one for every battler +#define STATUS2_CONFUSION (1 << 0 | 1 << 1 | 1 << 2) +#define STATUS2_CONFUSION_TURN(num) ((num) << 0) +#define STATUS2_FLINCHED (1 << 3) +#define STATUS2_UPROAR (1 << 4 | 1 << 5 | 1 << 6) +#define STATUS2_UPROAR_TURN(num) ((num) << 4) +#define STATUS2_UNUSED (1 << 7) +#define STATUS2_BIDE (1 << 8 | 1 << 9) +#define STATUS2_BIDE_TURN(num) (((num) << 8) & STATUS2_BIDE) +#define STATUS2_LOCK_CONFUSE (1 << 10 | 1 << 11) // e.g. Thrash +#define STATUS2_LOCK_CONFUSE_TURN(num)((num) << 10) +#define STATUS2_MULTIPLETURNS (1 << 12) +#define STATUS2_WRAPPED (1 << 13 | 1 << 14 | 1 << 15) +#define STATUS2_WRAPPED_TURN(num) ((num) << 13) +#define STATUS2_INFATUATION (1 << 16 | 1 << 17 | 1 << 18 | 1 << 19) // 4 bits, one for every battler #define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16) -#define STATUS2_FOCUS_ENERGY 0x00100000 -#define STATUS2_TRANSFORMED 0x00200000 -#define STATUS2_RECHARGE 0x00400000 -#define STATUS2_RAGE 0x00800000 -#define STATUS2_SUBSTITUTE 0x01000000 -#define STATUS2_DESTINY_BOND 0x02000000 -#define STATUS2_ESCAPE_PREVENTION 0x04000000 -#define STATUS2_NIGHTMARE 0x08000000 -#define STATUS2_CURSED 0x10000000 -#define STATUS2_FORESIGHT 0x20000000 -#define STATUS2_DEFENSE_CURL 0x40000000 -#define STATUS2_TORMENT 0x80000000 +#define STATUS2_FOCUS_ENERGY (1 << 20) +#define STATUS2_TRANSFORMED (1 << 21) +#define STATUS2_RECHARGE (1 << 22) +#define STATUS2_RAGE (1 << 23) +#define STATUS2_SUBSTITUTE (1 << 24) +#define STATUS2_DESTINY_BOND (1 << 25) +#define STATUS2_ESCAPE_PREVENTION (1 << 26) +#define STATUS2_NIGHTMARE (1 << 27) +#define STATUS2_CURSED (1 << 28) +#define STATUS2_FORESIGHT (1 << 29) +#define STATUS2_DEFENSE_CURL (1 << 30) +#define STATUS2_TORMENT (1 << 31) // Seems like per-battler statuses. Not quite sure how to categorize these -#define STATUS3_LEECHSEED_BATTLER 0x3 -#define STATUS3_LEECHSEED 0x4 -#define STATUS3_ALWAYS_HITS 0x18 // two bits -#define STATUS3_PERISH_SONG 0x20 -#define STATUS3_ON_AIR 0x40 -#define STATUS3_UNDERGROUND 0x80 -#define STATUS3_MINIMIZED 0x100 -#define STATUS3_ROOTED 0x400 -#define STATUS3_CHARGED_UP 0x200 -#define STATUS3_YAWN 0x1800 // two bits -#define STATUS3_IMPRISONED_OTHERS 0x2000 -#define STATUS3_GRUDGE 0x4000 -#define STATUS3_CANT_SCORE_A_CRIT 0x8000 -#define STATUS3_MUDSPORT 0x10000 -#define STATUS3_WATERSPORT 0x20000 -#define STATUS3_UNDERWATER 0x40000 -#define STATUS3_INTIMIDATE_POKES 0x80000 -#define STATUS3_TRACE 0x100000 +#define STATUS3_LEECHSEED_BATTLER (1 << 0 | 1 << 1) // The battler to receive HP from Leech Seed +#define STATUS3_LEECHSEED (1 << 2) +#define STATUS3_ALWAYS_HITS (1 << 3 | 1 << 4) +#define STATUS3_ALWAYS_HITS_TURN(num) (((num) << 3) & STATUS3_ALWAYS_HITS) // "Always Hits" is set as a 2 turn timer, i.e. next turn is the last turn when it's active +#define STATUS3_PERISH_SONG (1 << 5) +#define STATUS3_ON_AIR (1 << 6) +#define STATUS3_UNDERGROUND (1 << 7) +#define STATUS3_MINIMIZED (1 << 8) +#define STATUS3_CHARGED_UP (1 << 9) +#define STATUS3_ROOTED (1 << 10) +#define STATUS3_YAWN (1 << 11 | 1 << 12) // Number of turns to sleep +#define STATUS3_YAWN_TURN(num) (((num) << 11) & STATUS3_YAWN) +#define STATUS3_IMPRISONED_OTHERS (1 << 13) +#define STATUS3_GRUDGE (1 << 14) +#define STATUS3_CANT_SCORE_A_CRIT (1 << 15) +#define STATUS3_MUDSPORT (1 << 16) +#define STATUS3_WATERSPORT (1 << 17) +#define STATUS3_UNDERWATER (1 << 18) +#define STATUS3_INTIMIDATE_POKES (1 << 19) +#define STATUS3_TRACE (1 << 20) #define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER) // Not really sure what a "hitmarker" is. -#define HITMARKER_x10 0x00000010 -#define HITMARKER_x20 0x00000020 -#define HITMARKER_DESTINYBOND 0x00000040 -#define HITMARKER_NO_ANIMATIONS 0x00000080 -#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100 -#define HITMARKER_NO_ATTACKSTRING 0x00000200 -#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400 -#define HITMARKER_NO_PPDEDUCT 0x00000800 -#define HITMARKER_SWAP_ATTACKER_TARGET 0x00001000 -#define HITMARKER_IGNORE_SAFEGUARD 0x00002000 -#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000 -#define HITMARKER_RUN 0x00008000 -#define HITMARKER_IGNORE_ON_AIR 0x00010000 -#define HITMARKER_IGNORE_UNDERGROUND 0x00020000 -#define HITMARKER_IGNORE_UNDERWATER 0x00040000 -#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000 -#define HITMARKER_x100000 0x00100000 -#define HITMARKER_x200000 0x00200000 -#define HITMARKER_x400000 0x00400000 -#define HITMARKER_x800000 0x00800000 -#define HITMARKER_GRUDGE 0x01000000 -#define HITMARKER_OBEYS 0x02000000 -#define HITMARKER_x4000000 0x04000000 -#define HITMARKER_CHARGING 0x08000000 -#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 0x1C) -#define HITMARKER_UNK(battler) (0x10000000 << battler) +#define HITMARKER_x10 (1 << 4) +#define HITMARKER_x20 (1 << 5) +#define HITMARKER_DESTINYBOND (1 << 6) +#define HITMARKER_NO_ANIMATIONS (1 << 7) +#define HITMARKER_IGNORE_SUBSTITUTE (1 << 8) +#define HITMARKER_NO_ATTACKSTRING (1 << 9) +#define HITMARKER_ATTACKSTRING_PRINTED (1 << 10) +#define HITMARKER_NO_PPDEDUCT (1 << 11) +#define HITMARKER_SWAP_ATTACKER_TARGET (1 << 12) +#define HITMARKER_IGNORE_SAFEGUARD (1 << 13) +#define HITMARKER_SYNCHRONISE_EFFECT (1 << 14) +#define HITMARKER_RUN (1 << 15) +#define HITMARKER_IGNORE_ON_AIR (1 << 16) +#define HITMARKER_IGNORE_UNDERGROUND (1 << 17) +#define HITMARKER_IGNORE_UNDERWATER (1 << 18) +#define HITMARKER_UNABLE_TO_USE_MOVE (1 << 19) +#define HITMARKER_x100000 (1 << 20) +#define HITMARKER_x200000 (1 << 21) +#define HITMARKER_x400000 (1 << 22) +#define HITMARKER_x800000 (1 << 23) +#define HITMARKER_GRUDGE (1 << 24) +#define HITMARKER_OBEYS (1 << 25) +#define HITMARKER_x4000000 (1 << 26) +#define HITMARKER_CHARGING (1 << 27) +#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28) +#define HITMARKER_FAINTED2(battler) ((1 << 28) << battler) // Per-side statuses that affect an entire party #define SIDE_STATUS_REFLECT (1 << 0) @@ -215,71 +225,70 @@ #define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY) // Move Effects -#define MOVE_EFFECT_SLEEP 0x1 -#define MOVE_EFFECT_POISON 0x2 -#define MOVE_EFFECT_BURN 0x3 -#define MOVE_EFFECT_FREEZE 0x4 -#define MOVE_EFFECT_PARALYSIS 0x5 -#define MOVE_EFFECT_TOXIC 0x6 -#define MOVE_EFFECT_CONFUSION 0x7 -#define MOVE_EFFECT_FLINCH 0x8 -#define MOVE_EFFECT_TRI_ATTACK 0x9 -#define MOVE_EFFECT_UPROAR 0xA -#define MOVE_EFFECT_PAYDAY 0xB -#define MOVE_EFFECT_CHARGING 0xC -#define MOVE_EFFECT_WRAP 0xD -#define MOVE_EFFECT_RECOIL_25 0xE -#define MOVE_EFFECT_ATK_PLUS_1 0xF -#define MOVE_EFFECT_DEF_PLUS_1 0x10 -#define MOVE_EFFECT_SPD_PLUS_1 0x11 -#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12 -#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13 -#define MOVE_EFFECT_ACC_PLUS_1 0x14 -#define MOVE_EFFECT_EVS_PLUS_1 0x15 -#define MOVE_EFFECT_ATK_MINUS_1 0x16 -#define MOVE_EFFECT_DEF_MINUS_1 0x17 -#define MOVE_EFFECT_SPD_MINUS_1 0x18 -#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19 -#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A -#define MOVE_EFFECT_ACC_MINUS_1 0x1B -#define MOVE_EFFECT_EVS_MINUS_1 0x1C -#define MOVE_EFFECT_RECHARGE 0x1D -#define MOVE_EFFECT_RAGE 0x1E -#define MOVE_EFFECT_STEAL_ITEM 0x1F -#define MOVE_EFFECT_PREVENT_ESCAPE 0x20 -#define MOVE_EFFECT_NIGHTMARE 0x21 -#define MOVE_EFFECT_ALL_STATS_UP 0x22 -#define MOVE_EFFECT_RAPIDSPIN 0x23 -#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24 -#define MOVE_EFFECT_ATK_DEF_DOWN 0x25 -#define MOVE_EFFECT_RECOIL_33 0x26 -#define MOVE_EFFECT_ATK_PLUS_2 0x27 -#define MOVE_EFFECT_DEF_PLUS_2 0x28 -#define MOVE_EFFECT_SPD_PLUS_2 0x29 -#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A -#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B -#define MOVE_EFFECT_ACC_PLUS_2 0x2C -#define MOVE_EFFECT_EVS_PLUS_2 0x2D -#define MOVE_EFFECT_ATK_MINUS_2 0x2E -#define MOVE_EFFECT_DEF_MINUS_2 0x2F -#define MOVE_EFFECT_SPD_MINUS_2 0x30 -#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31 -#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32 -#define MOVE_EFFECT_ACC_MINUS_2 0x33 -#define MOVE_EFFECT_EVS_MINUS_2 0x34 -#define MOVE_EFFECT_THRASH 0x35 -#define MOVE_EFFECT_KNOCK_OFF 0x36 -#define MOVE_EFFECT_NOTHING_37 0x37 -#define MOVE_EFFECT_NOTHING_38 0x38 -#define MOVE_EFFECT_NOTHING_39 0x39 -#define MOVE_EFFECT_NOTHING_3A 0x3A -#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B -#define MOVE_EFFECT_NOTHING_3C 0x3C -#define MOVE_EFFECT_NOTHING_3D 0x3D -#define MOVE_EFFECT_NOTHING_3E 0x3E -#define MOVE_EFFECT_NOTHING_3F 0x3F -#define MOVE_EFFECT_AFFECTS_USER 0x40 -#define MOVE_EFFECT_CERTAIN 0x80 +#define MOVE_EFFECT_SLEEP 1 +#define MOVE_EFFECT_POISON 2 +#define MOVE_EFFECT_BURN 3 +#define MOVE_EFFECT_FREEZE 4 +#define MOVE_EFFECT_PARALYSIS 5 +#define MOVE_EFFECT_TOXIC 6 +#define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_TOXIC // All above move effects apply primary status +#define MOVE_EFFECT_CONFUSION 7 +#define MOVE_EFFECT_FLINCH 8 +#define MOVE_EFFECT_TRI_ATTACK 9 +#define MOVE_EFFECT_UPROAR 10 +#define MOVE_EFFECT_PAYDAY 11 +#define MOVE_EFFECT_CHARGING 12 +#define MOVE_EFFECT_WRAP 13 +#define MOVE_EFFECT_RECOIL_25 14 +#define MOVE_EFFECT_ATK_PLUS_1 15 +#define MOVE_EFFECT_DEF_PLUS_1 16 +#define MOVE_EFFECT_SPD_PLUS_1 17 +#define MOVE_EFFECT_SP_ATK_PLUS_1 18 +#define MOVE_EFFECT_SP_DEF_PLUS_1 19 +#define MOVE_EFFECT_ACC_PLUS_1 20 +#define MOVE_EFFECT_EVS_PLUS_1 21 +#define MOVE_EFFECT_ATK_MINUS_1 22 +#define MOVE_EFFECT_DEF_MINUS_1 23 +#define MOVE_EFFECT_SPD_MINUS_1 24 +#define MOVE_EFFECT_SP_ATK_MINUS_1 25 +#define MOVE_EFFECT_SP_DEF_MINUS_1 26 +#define MOVE_EFFECT_ACC_MINUS_1 27 +#define MOVE_EFFECT_EVS_MINUS_1 28 +#define MOVE_EFFECT_RECHARGE 29 +#define MOVE_EFFECT_RAGE 30 +#define MOVE_EFFECT_STEAL_ITEM 31 +#define MOVE_EFFECT_PREVENT_ESCAPE 32 +#define MOVE_EFFECT_NIGHTMARE 33 +#define MOVE_EFFECT_ALL_STATS_UP 34 +#define MOVE_EFFECT_RAPIDSPIN 35 +#define MOVE_EFFECT_REMOVE_PARALYSIS 36 +#define MOVE_EFFECT_ATK_DEF_DOWN 37 +#define MOVE_EFFECT_RECOIL_33 38 +#define MOVE_EFFECT_ATK_PLUS_2 39 +#define MOVE_EFFECT_DEF_PLUS_2 40 +#define MOVE_EFFECT_SPD_PLUS_2 41 +#define MOVE_EFFECT_SP_ATK_PLUS_2 42 +#define MOVE_EFFECT_SP_DEF_PLUS_2 43 +#define MOVE_EFFECT_ACC_PLUS_2 44 +#define MOVE_EFFECT_EVS_PLUS_2 45 +#define MOVE_EFFECT_ATK_MINUS_2 46 +#define MOVE_EFFECT_DEF_MINUS_2 47 +#define MOVE_EFFECT_SPD_MINUS_2 48 +#define MOVE_EFFECT_SP_ATK_MINUS_2 49 +#define MOVE_EFFECT_SP_DEF_MINUS_2 50 +#define MOVE_EFFECT_ACC_MINUS_2 51 +#define MOVE_EFFECT_EVS_MINUS_2 52 +#define MOVE_EFFECT_THRASH 53 +#define MOVE_EFFECT_KNOCK_OFF 54 +#define MOVE_EFFECT_NOTHING_37 55 +#define MOVE_EFFECT_NOTHING_38 56 +#define MOVE_EFFECT_NOTHING_39 57 +#define MOVE_EFFECT_NOTHING_3A 58 +#define MOVE_EFFECT_SP_ATK_TWO_DOWN 59 +#define NUM_MOVE_EFFECTS 60 + +#define MOVE_EFFECT_AFFECTS_USER (1 << 6) // 64 +#define MOVE_EFFECT_CERTAIN (1 << 7) // 128 // Battle terrain defines for gBattleTerrain. #define BATTLE_TERRAIN_GRASS 0 diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index dfdd9f912..ebc422b18 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -376,7 +376,7 @@ #define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1 #define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2 #define B_ANIM_BALL_THROW 0x3 -#define B_ANIM_SAFARI_BALL_THROW 0x4 +#define B_ANIM_BALL_THROW_WITH_TRAINER 0x4 #define B_ANIM_SUBSTITUTE_TO_MON 0x5 #define B_ANIM_MON_TO_SUBSTITUTE 0x6 diff --git a/include/constants/battle_palace.h b/include/constants/battle_palace.h index db9855101..851655089 100644 --- a/include/constants/battle_palace.h +++ b/include/constants/battle_palace.h @@ -16,4 +16,14 @@ #define PALACE_DATA_WIN_STREAK 1 #define PALACE_DATA_WIN_STREAK_ACTIVE 2 +// Pokemon in Battle Palace have a move "group" type preference depending on nature +#define PALACE_MOVE_GROUP_ATTACK 0 +#define PALACE_MOVE_GROUP_DEFENSE 1 +#define PALACE_MOVE_GROUP_SUPPORT 2 + +// In palace doubles battles pokemon have a target preference depending on nature +#define PALACE_TARGET_STRONGER 0 +#define PALACE_TARGET_WEAKER 1 +#define PALACE_TARGET_RANDOM 2 + #endif //GUARD_CONSTANTS_BATTLE_PALACE_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index dfcf79128..9372377c4 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -66,8 +66,10 @@ #define VARIOUS_SET_MAGIC_COAT_TARGET 1 #define VARIOUS_IS_RUNNING_IMPOSSIBLE 2 #define VARIOUS_GET_MOVE_TARGET 3 +#define VARIOUS_GET_BATTLER_FAINTED 4 #define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5 #define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 +#define VARIOUS_PALACE_FLAVOR_TEXT 8 #define VARIOUS_ARENA_JUDGMENT_WINDOW 9 #define VARIOUS_ARENA_OPPONENT_MON_LOST 10 #define VARIOUS_ARENA_PLAYER_MON_LOST 11 diff --git a/include/constants/cable_club.h b/include/constants/cable_club.h index f2aa4120c..cbdd049db 100644 --- a/include/constants/cable_club.h +++ b/include/constants/cable_club.h @@ -12,4 +12,20 @@ #define USING_MINIGAME 8 #define USING_BATTLE_TOWER 9 +// Return states for the group of specials that use CreateLinkupTask +// A few also used by TryBecomeLinkLeader and TryJoinLinkGroup +#define LINKUP_ONGOING 0 +#define LINKUP_SUCCESS 1 +#define LINKUP_SOMEONE_NOT_READY 2 +#define LINKUP_DIFF_SELECTIONS 3 +#define LINKUP_WRONG_NUM_PLAYERS 4 +#define LINKUP_FAILED 5 +#define LINKUP_CONNECTION_ERROR 6 +#define LINKUP_PLAYER_NOT_READY 7 +#define LINKUP_RETRY_ROLE_ASSIGN 8 +#define LINKUP_PARTNER_NOT_READY 9 +#define LINKUP_FAILED_CONTEST_GMODE 10 +#define LINKUP_FAILED_BATTLE_TOWER 11 +#define LINKUP_FOREIGN_GAME 12 + #endif //GUARD_CONSTANTS_CABLE_CLUB_H diff --git a/include/constants/coins.h b/include/constants/coins.h index 3ae3bb23f..e65e981d6 100644 --- a/include/constants/coins.h +++ b/include/constants/coins.h @@ -2,5 +2,6 @@ #define GUARD_CONSTANTS_COINS_H #define MAX_COINS 9999 +#define MAX_COIN_DIGITS 4 #endif // GUARD_CONSTANTS_COINS_H diff --git a/include/constants/contest.h b/include/constants/contest.h index 186c56e2b..9eb6b26e4 100644 --- a/include/constants/contest.h +++ b/include/constants/contest.h @@ -1,9 +1,9 @@ #ifndef GUARD_CONSTANTS_CONTEST_H #define GUARD_CONSTANTS_CONTEST_H -#define CONTESTANT_COUNT 4 #define APPLAUSE_METER_SIZE 5 -#define CONTEST_TURN_COUNT 5 +#define CONTEST_NUM_APPEALS 5 +#define CONTEST_LAST_APPEAL (CONTEST_NUM_APPEALS - 1) #define LINK_CONTEST_FLAG_IS_LINK (1 << 0) #define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1) @@ -22,12 +22,22 @@ #define CONTEST_TYPE_NPC_MASTER (CONTEST_RANK_MASTER + 1) #define CONTEST_TYPE_LINK (CONTEST_RANK_LINK + 1) -#define CONTEST_CATEGORY_COOL 0 -#define CONTEST_CATEGORY_BEAUTY 1 -#define CONTEST_CATEGORY_CUTE 2 -#define CONTEST_CATEGORY_SMART 3 -#define CONTEST_CATEGORY_TOUGH 4 -#define CONTEST_CATEGORIES_COUNT 5 +#define CONTEST_WINNER_ARTIST 0 // Winner shown by the artist, painting not necessarily saved +#define CONTEST_WINNER_HALL_1 1 +#define CONTEST_WINNER_HALL_2 2 +#define CONTEST_WINNER_HALL_3 3 +#define CONTEST_WINNER_HALL_4 4 +#define CONTEST_WINNER_HALL_5 5 +#define CONTEST_WINNER_HALL_6 6 +#define NUM_CONTEST_HALL_WINNERS 6 +#define CONTEST_WINNER_7 7 +#define CONTEST_WINNER_8 8 +#define CONTEST_WINNER_MUSEUM_COOL 9 +#define CONTEST_WINNER_MUSEUM_BEAUTY 10 +#define CONTEST_WINNER_MUSEUM_CUTE 11 +#define CONTEST_WINNER_MUSEUM_SMART 12 +#define CONTEST_WINNER_MUSEUM_TOUGH 13 +// NUM_CONTEST_WINNERS in constants/global.h #define CANT_ENTER_CONTEST 0 #define CAN_ENTER_CONTEST_EQUAL_RANK 1 @@ -35,4 +45,165 @@ #define CANT_ENTER_CONTEST_EGG 3 #define CANT_ENTER_CONTEST_FAINTED 4 +#define CONTEST_AI_CHECK_BAD_MOVE (1 << 0) +#define CONTEST_AI_CHECK_COMBO (1 << 1) +#define CONTEST_AI_CHECK_BORING (1 << 2) +#define CONTEST_AI_CHECK_EXCITEMENT (1 << 3) +#define CONTEST_AI_CHECK_ORDER (1 << 4) +#define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5) +#define CONTEST_AI_ERRATIC (1 << 6) +#define CONTEST_AI_DUMMY_1 (1 << 7) +#define CONTEST_AI_DUMMY_2 (1 << 8) +#define CONTEST_AI_DUMMY_3 (1 << 9) +#define CONTEST_AI_DUMMY_4 (1 << 10) +#define CONTEST_AI_DUMMY_5 (1 << 11) +#define CONTEST_AI_DUMMY_6 (1 << 12) +#define CONTEST_AI_DUMMY_7 (1 << 13) +#define CONTEST_AI_DUMMY_8 (1 << 14) +#define CONTEST_AI_DUMMY_9 (1 << 15) +#define CONTEST_AI_DUMMY_10 (1 << 16) +#define CONTEST_AI_DUMMY_11 (1 << 17) +#define CONTEST_AI_DUMMY_12 (1 << 18) +#define CONTEST_AI_DUMMY_13 (1 << 19) +#define CONTEST_AI_DUMMY_14 (1 << 20) +#define CONTEST_AI_DUMMY_15 (1 << 21) +#define CONTEST_AI_DUMMY_16 (1 << 22) +#define CONTEST_AI_DUMMY_17 (1 << 23) +#define CONTEST_AI_DUMMY_18 (1 << 24) +#define CONTEST_AI_DUMMY_19 (1 << 25) +#define CONTEST_AI_DUMMY_20 (1 << 26) +#define CONTEST_AI_DUMMY_21 (1 << 27) +#define CONTEST_AI_DUMMY_22 (1 << 28) +#define CONTEST_AI_DUMMY_23 (1 << 29) +#define CONTEST_AI_DUMMY_24 (1 << 30) +#define CONTEST_AI_DUMMY_25 (1 << 31) + +// The below scripts are used by every AI contest opponent +// It includes every non-dummy script +#define CONTEST_AI_COMMON (CONTEST_AI_CHECK_BAD_MOVE | CONTEST_AI_CHECK_COMBO | CONTEST_AI_CHECK_BORING | \ + CONTEST_AI_CHECK_EXCITEMENT | CONTEST_AI_CHECK_ORDER | CONTEST_AI_CHECK_GOOD_MOVE | CONTEST_AI_ERRATIC | \ + CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5) + +#define CONTEST_EFFECT_HIGHLY_APPEALING 0 +#define CONTEST_EFFECT_USER_MORE_EASILY_STARTLED 1 +#define CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES 2 +#define CONTEST_EFFECT_REPETITION_NOT_BORING 3 +#define CONTEST_EFFECT_AVOID_STARTLE_ONCE 4 +#define CONTEST_EFFECT_AVOID_STARTLE 5 +#define CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY 6 +#define CONTEST_EFFECT_USER_LESS_EASILY_STARTLED 7 +#define CONTEST_EFFECT_STARTLE_FRONT_MON 8 +#define CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS 9 +#define CONTEST_EFFECT_STARTLE_PREV_MON 10 +#define CONTEST_EFFECT_STARTLE_PREV_MONS 11 +#define CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON 12 +#define CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS 13 +#define CONTEST_EFFECT_STARTLE_PREV_MON_2 14 +#define CONTEST_EFFECT_STARTLE_PREV_MONS_2 15 +#define CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION 16 +#define CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION 17 +#define CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN 18 +#define CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL 19 +#define CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL 20 +#define CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL 21 +#define CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL 22 +#define CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL 23 +#define CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL 24 +#define CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS 25 +#define CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS 26 +#define CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS 27 +#define CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION 28 +#define CONTEST_EFFECT_BETTER_IF_FIRST 29 +#define CONTEST_EFFECT_BETTER_IF_LAST 30 +#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES 31 +#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE 32 +#define CONTEST_EFFECT_BETTER_WHEN_LATER 33 +#define CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING 34 +#define CONTEST_EFFECT_BETTER_IF_SAME_TYPE 35 +#define CONTEST_EFFECT_BETTER_IF_DIFF_TYPE 36 +#define CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL 37 +#define CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS 38 +#define CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION 39 +#define CONTEST_EFFECT_NEXT_APPEAL_EARLIER 40 +#define CONTEST_EFFECT_NEXT_APPEAL_LATER 41 +#define CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER 42 +#define CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER 43 +#define CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST 44 +#define CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS 45 +#define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46 +#define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47 + +// Each of the above effects is grouped into one of these effect type categories +// Only a few of these get checked by the AI, the rest go unused +#define CONTEST_EFFECT_TYPE_APPEAL 0 +#define CONTEST_EFFECT_TYPE_AVOID_STARTLE 1 +#define CONTEST_EFFECT_TYPE_STARTLE_MON 2 +#define CONTEST_EFFECT_TYPE_STARTLE_MONS 3 +#define CONTEST_EFFECT_TYPE_WORSEN 4 +#define CONTEST_EFFECT_TYPE_SPECIAL_APPEAL 5 +#define CONTEST_EFFECT_TYPE_TURN_ORDER 6 + +#define COMBO_STARTER_RAIN_DANCE 1 +#define COMBO_STARTER_RAGE 2 +#define COMBO_STARTER_FOCUS_ENERGY 3 +#define COMBO_STARTER_HYPNOSIS 4 +#define COMBO_STARTER_ENDURE 5 +#define COMBO_STARTER_HORN_ATTACK 6 +#define COMBO_STARTER_SWORDS_DANCE 7 +#define COMBO_STARTER_STOCKPILE 8 +#define COMBO_STARTER_SUNNY_DAY 9 +#define COMBO_STARTER_REST 10 +#define COMBO_STARTER_VICE_GRIP 11 +#define COMBO_STARTER_DEFENSE_CURL 12 +#define COMBO_STARTER_CHARGE 13 +#define COMBO_STARTER_ROCK_THROW 14 +#define COMBO_STARTER_YAWN 15 +#define COMBO_STARTER_SCARY_FACE 16 +#define COMBO_STARTER_POWDER_SNOW 17 +#define COMBO_STARTER_LOCK_ON 18 +#define COMBO_STARTER_SOFT_BOILED 19 +#define COMBO_STARTER_MEAN_LOOK 20 +#define COMBO_STARTER_SCRATCH 21 +#define COMBO_STARTER_GROWTH 22 +#define COMBO_STARTER_HAIL 23 +#define COMBO_STARTER_SANDSTORM 24 +#define COMBO_STARTER_BELLY_DRUM 25 +#define COMBO_STARTER_MIND_READER 26 +#define COMBO_STARTER_DRAGON_BREATH 27 +#define COMBO_STARTER_DRAGON_RAGE 28 +#define COMBO_STARTER_DRAGON_DANCE 29 +#define COMBO_STARTER_SURF 30 +#define COMBO_STARTER_DIVE 31 +#define COMBO_STARTER_STRING_SHOT 32 +#define COMBO_STARTER_LEER 33 +#define COMBO_STARTER_TAUNT 34 +#define COMBO_STARTER_CHARM 35 +#define COMBO_STARTER_HARDEN 36 +#define COMBO_STARTER_SING 37 +#define COMBO_STARTER_EARTHQUAKE 38 +#define COMBO_STARTER_DOUBLE_TEAM 39 +#define COMBO_STARTER_CURSE 40 +#define COMBO_STARTER_SWEET_SCENT 41 +#define COMBO_STARTER_SLUDGE 42 +#define COMBO_STARTER_SLUDGE_BOMB 43 +#define COMBO_STARTER_THUNDER_PUNCH 44 +#define COMBO_STARTER_FIRE_PUNCH 45 +#define COMBO_STARTER_ICE_PUNCH 46 +#define COMBO_STARTER_PECK 47 +#define COMBO_STARTER_METAL_SOUND 48 +#define COMBO_STARTER_MUD_SPORT 49 +#define COMBO_STARTER_WATER_SPORT 50 +#define COMBO_STARTER_BONE_CLUB 51 +#define COMBO_STARTER_BONEMERANG 52 +#define COMBO_STARTER_BONE_RUSH 53 +#define COMBO_STARTER_SAND_ATTACK 54 +#define COMBO_STARTER_MUD_SLAP 55 +#define COMBO_STARTER_FAKE_OUT 56 +#define COMBO_STARTER_PSYCHIC 57 +#define COMBO_STARTER_KINESIS 58 +#define COMBO_STARTER_CONFUSION 59 +#define COMBO_STARTER_POUND 60 +#define COMBO_STARTER_SMOG 61 +#define COMBO_STARTER_CALM_MIND 62 + #endif // GUARD_CONSTANTS_CONTEST_H diff --git a/include/constants/daycare.h b/include/constants/daycare.h index 103f920f2..adb62fab5 100644 --- a/include/constants/daycare.h +++ b/include/constants/daycare.h @@ -22,6 +22,6 @@ // Array buffers #define EGG_MOVES_ARRAY_COUNT 10 -#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50 +#define EGG_LVL_UP_MOVES_ARRAY_COUNT (MAX_LEVEL_UP_MOVES > 50 ? MAX_LEVEL_UP_MOVES : 50) #endif //GUARD_DAYCARE_CONSTANTS_H diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index 00ca60457..dc1085f7c 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -20,10 +20,10 @@ #define FLDEFF_JUMP_SMALL_SPLASH 16 #define FLDEFF_LONG_GRASS 17 #define FLDEFF_JUMP_LONG_GRASS 18 -#define FLDEFF_UNKNOWN_19 19 -#define FLDEFF_UNKNOWN_20 20 -#define FLDEFF_UNKNOWN_21 21 -#define FLDEFF_UNKNOWN_22 22 +#define FLDEFF_UNUSED_GRASS 19 +#define FLDEFF_UNUSED_GRASS_2 20 +#define FLDEFF_UNUSED_SAND 21 +#define FLDEFF_WATER_SURFACING 22 #define FLDEFF_BERRY_TREE_GROWTH_SPARKLE 23 #define FLDEFF_DEEP_SAND_FOOTPRINTS 24 #define FLDEFF_POKECENTER_HEAL 25 @@ -50,8 +50,8 @@ #define FLDEFF_HEART_ICON 46 #define FLDEFF_NOP_47 47 #define FLDEFF_NOP_48 48 -#define FLDEFF_POP_OUT_OF_ASH 49 -#define FLDEFF_LAVARIDGE_GYM_WARP 50 +#define FLDEFF_ASH_PUFF 49 +#define FLDEFF_ASH_LAUNCH 50 #define FLDEFF_SWEET_SCENT 51 #define FLDEFF_SAND_PILLAR 52 #define FLDEFF_BUBBLES 53 @@ -65,8 +65,59 @@ #define FLDEFF_PCTURN_ON 61 #define FLDEFF_HALL_OF_FAME_RECORD 62 #define FLDEFF_USE_TELEPORT 63 -#define FLDEFF_RAYQUAZA 64 -#define FLDEFF_65 65 +#define FLDEFF_RAYQUAZA_SPOTLIGHT 64 +#define FLDEFF_DESTROY_DEOXYS_ROCK 65 #define FLDEFF_MOVE_DEOXYS_ROCK 66 -#endif +#define FLDEFFOBJ_SHADOW_S 0 +#define FLDEFFOBJ_SHADOW_M 1 +#define FLDEFFOBJ_SHADOW_L 2 +#define FLDEFFOBJ_SHADOW_XL 3 +#define FLDEFFOBJ_TALL_GRASS 4 +#define FLDEFFOBJ_RIPPLE 5 +#define FLDEFFOBJ_ASH 6 +#define FLDEFFOBJ_SURF_BLOB 7 +#define FLDEFFOBJ_ARROW 8 +#define FLDEFFOBJ_GROUND_IMPACT_DUST 9 +#define FLDEFFOBJ_JUMP_TALL_GRASS 10 +#define FLDEFFOBJ_SAND_FOOTPRINTS 11 +#define FLDEFFOBJ_JUMP_BIG_SPLASH 12 +#define FLDEFFOBJ_SPLASH 13 +#define FLDEFFOBJ_JUMP_SMALL_SPLASH 14 +#define FLDEFFOBJ_LONG_GRASS 15 +#define FLDEFFOBJ_JUMP_LONG_GRASS 16 +#define FLDEFFOBJ_UNUSED_GRASS 17 +#define FLDEFFOBJ_UNUSED_GRASS_2 18 +#define FLDEFFOBJ_UNUSED_SAND 19 +#define FLDEFFOBJ_WATER_SURFACING 20 +#define FLDEFFOBJ_REFLECTION_DISTORTION 21 +#define FLDEFFOBJ_SPARKLE 22 +#define FLDEFFOBJ_DEEP_SAND_FOOTPRINTS 23 +#define FLDEFFOBJ_TREE_DISGUISE 24 +#define FLDEFFOBJ_MOUNTAIN_DISGUISE 25 +#define FLDEFFOBJ_BIRD 26 +#define FLDEFFOBJ_BIKE_TIRE_TRACKS 27 +#define FLDEFFOBJ_SAND_DISGUISE 28 +#define FLDEFFOBJ_SAND_PILE 29 +#define FLDEFFOBJ_SHORT_GRASS 30 +#define FLDEFFOBJ_HOT_SPRINGS_WATER 31 +#define FLDEFFOBJ_ASH_PUFF 32 +#define FLDEFFOBJ_ASH_LAUNCH 33 +#define FLDEFFOBJ_BUBBLES 34 +#define FLDEFFOBJ_SMALL_SPARKLE 35 +#define FLDEFFOBJ_RAYQUAZA 36 + +#define FLDEFF_PAL_TAG_CUT_GRASS 0x1000 +#define FLDEFF_PAL_TAG_SECRET_POWER_TREE 0x1003 +#define FLDEFF_PAL_TAG_GENERAL_0 0x1004 +#define FLDEFF_PAL_TAG_GENERAL_1 0x1005 +#define FLDEFF_PAL_TAG_POKEBALL_GLOW 0x1007 +#define FLDEFF_PAL_TAG_SECRET_POWER_PLANT 0x1008 +#define FLDEFF_PAL_TAG_POKEBALL 0x1009 +#define FLDEFF_PAL_TAG_ASH 0x100D +#define FLDEFF_PAL_TAG_SAND_PILLAR 0x100E +#define FLDEFF_PAL_TAG_SMALL_SPARKLE 0x100F +#define FLDEFF_PAL_TAG_HOF_MONITOR 0x1010 +#define FLDEFF_PAL_TAG_UNKNOWN 0x1011 + +#endif // GUARD_FIELD_EFFECT_CONSTANTS_H diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h index a2dc117e4..a01151378 100644 --- a/include/constants/field_specials.h +++ b/include/constants/field_specials.h @@ -75,4 +75,9 @@ #define FANCLUB_MEMBER7 14 #define FANCLUB_MEMBER8 15 +#define FANCOUNTER_DEFEATED_DRAKE 0 +#define FANCOUNTER_BATTLED_AT_BASE 1 +#define FANCOUNTER_FINISHED_CONTEST 2 +#define FANCOUNTER_USED_BATTLE_TOWER 3 + #endif // GUARD_CONSTANTS_FIELD_SPECIALS_H diff --git a/include/constants/flags.h b/include/constants/flags.h index 4dd18880f..a562b0670 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -275,7 +275,7 @@ #define FLAG_RECEIVED_DURIN_BERRY 0xFB #define FLAG_RECEIVED_BELUE_BERRY 0xFC #define FLAG_ENABLE_RIVAL_MATCH_CALL 0xFD -#define FLFLAG_RECEIVED_CHARCOAL 0xFE +#define FLAG_RECEIVED_CHARCOAL 0xFE #define FLAG_LATIOS_OR_LATIAS_ROAMING 0xFF #define FLAG_RECEIVED_REPEAT_BALL 0x100 #define FLAG_RECEIVED_OLD_ROD 0x101 @@ -538,27 +538,27 @@ // Hidden Items -- sorted by location #define FLAG_HIDDEN_ITEMS_START 0x1F4 #define FLAG_HIDDEN_ITEM_TRICK_HOUSE_NUGGET (FLAG_HIDDEN_ITEMS_START + 0x01) -#define FLAG_HIDDEN_ITEM_UNDERWATER_1_CARBOS (FLAG_HIDDEN_ITEMS_START + 0x08) -#define FLAG_HIDDEN_ITEM_UNDERWATER_1_GREEN_SHARD (FLAG_HIDDEN_ITEMS_START + 0x09) -#define FLAG_HIDDEN_ITEM_UNDERWATER_1_PEARL (FLAG_HIDDEN_ITEMS_START + 0x0A) -#define FLAG_HIDDEN_ITEM_UNDERWATER_1_BIG_PEARL (FLAG_HIDDEN_ITEMS_START + 0x0B) -#define FLAG_HIDDEN_ITEM_UNDERWATER_1_HEART_SCALE_1 (FLAG_HIDDEN_ITEMS_START + 0x0D) -#define FLAG_HIDDEN_ITEM_UNDERWATER_1_CALCIUM (FLAG_HIDDEN_ITEMS_START + 0x24) -#define FLAG_HIDDEN_ITEM_UNDERWATER_1_HEART_SCALE_2 (FLAG_HIDDEN_ITEMS_START + 0x26) -#define FLAG_HIDDEN_ITEM_UNDERWATER_2_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x0E) -#define FLAG_HIDDEN_ITEM_UNDERWATER_2_ULTRA_BALL (FLAG_HIDDEN_ITEMS_START + 0x0F) -#define FLAG_HIDDEN_ITEM_UNDERWATER_2_STARDUST (FLAG_HIDDEN_ITEMS_START + 0x10) -#define FLAG_HIDDEN_ITEM_UNDERWATER_2_PEARL (FLAG_HIDDEN_ITEMS_START + 0x11) -#define FLAG_HIDDEN_ITEM_UNDERWATER_2_IRON (FLAG_HIDDEN_ITEMS_START + 0x13) -#define FLAG_HIDDEN_ITEM_UNDERWATER_2_YELLOW_SHARD (FLAG_HIDDEN_ITEMS_START + 0x12) -#define FLAG_HIDDEN_ITEM_UNDERWATER_2_BIG_PEARL (FLAG_HIDDEN_ITEMS_START + 0x14) -#define FLAG_HIDDEN_ITEM_UNDERWATER_2_BLUE_SHARD (FLAG_HIDDEN_ITEMS_START + 0x0C) -#define FLAG_HIDDEN_ITEM_UNDERWATER_3_STAR_PIECE (FLAG_HIDDEN_ITEMS_START + 0x15) -#define FLAG_HIDDEN_ITEM_UNDERWATER_3_HP_UP (FLAG_HIDDEN_ITEMS_START + 0x16) -#define FLAG_HIDDEN_ITEM_UNDERWATER_3_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x17) -#define FLAG_HIDDEN_ITEM_UNDERWATER_3_RED_SHARD (FLAG_HIDDEN_ITEMS_START + 0x18) -#define FLAG_HIDDEN_ITEM_UNDERWATER_4_PROTEIN (FLAG_HIDDEN_ITEMS_START + 0x19) -#define FLAG_HIDDEN_ITEM_UNDERWATER_4_PEARL (FLAG_HIDDEN_ITEMS_START + 0x1A) +#define FLAG_HIDDEN_ITEM_UNDERWATER_124_CARBOS (FLAG_HIDDEN_ITEMS_START + 0x08) +#define FLAG_HIDDEN_ITEM_UNDERWATER_124_GREEN_SHARD (FLAG_HIDDEN_ITEMS_START + 0x09) +#define FLAG_HIDDEN_ITEM_UNDERWATER_124_PEARL (FLAG_HIDDEN_ITEMS_START + 0x0A) +#define FLAG_HIDDEN_ITEM_UNDERWATER_124_BIG_PEARL (FLAG_HIDDEN_ITEMS_START + 0x0B) +#define FLAG_HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_1 (FLAG_HIDDEN_ITEMS_START + 0x0D) +#define FLAG_HIDDEN_ITEM_UNDERWATER_124_CALCIUM (FLAG_HIDDEN_ITEMS_START + 0x24) +#define FLAG_HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_2 (FLAG_HIDDEN_ITEMS_START + 0x26) +#define FLAG_HIDDEN_ITEM_UNDERWATER_126_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x0E) +#define FLAG_HIDDEN_ITEM_UNDERWATER_126_ULTRA_BALL (FLAG_HIDDEN_ITEMS_START + 0x0F) +#define FLAG_HIDDEN_ITEM_UNDERWATER_126_STARDUST (FLAG_HIDDEN_ITEMS_START + 0x10) +#define FLAG_HIDDEN_ITEM_UNDERWATER_126_PEARL (FLAG_HIDDEN_ITEMS_START + 0x11) +#define FLAG_HIDDEN_ITEM_UNDERWATER_126_IRON (FLAG_HIDDEN_ITEMS_START + 0x13) +#define FLAG_HIDDEN_ITEM_UNDERWATER_126_YELLOW_SHARD (FLAG_HIDDEN_ITEMS_START + 0x12) +#define FLAG_HIDDEN_ITEM_UNDERWATER_126_BIG_PEARL (FLAG_HIDDEN_ITEMS_START + 0x14) +#define FLAG_HIDDEN_ITEM_UNDERWATER_126_BLUE_SHARD (FLAG_HIDDEN_ITEMS_START + 0x0C) +#define FLAG_HIDDEN_ITEM_UNDERWATER_127_STAR_PIECE (FLAG_HIDDEN_ITEMS_START + 0x15) +#define FLAG_HIDDEN_ITEM_UNDERWATER_127_HP_UP (FLAG_HIDDEN_ITEMS_START + 0x16) +#define FLAG_HIDDEN_ITEM_UNDERWATER_127_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x17) +#define FLAG_HIDDEN_ITEM_UNDERWATER_127_RED_SHARD (FLAG_HIDDEN_ITEMS_START + 0x18) +#define FLAG_HIDDEN_ITEM_UNDERWATER_128_PROTEIN (FLAG_HIDDEN_ITEMS_START + 0x19) +#define FLAG_HIDDEN_ITEM_UNDERWATER_128_PEARL (FLAG_HIDDEN_ITEMS_START + 0x1A) #define FLAG_HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET (FLAG_HIDDEN_ITEMS_START + 0x1C) #define FLAG_HIDDEN_ITEM_LAVARIDGE_TOWN_ICE_HEAL (FLAG_HIDDEN_ITEMS_START + 0x00) #define FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY (FLAG_HIDDEN_ITEMS_START + 0x1F) @@ -768,7 +768,7 @@ #define FLAG_HIDE_PETALBURG_WOODS_AQUA_GRUNT 0x2D5 #define FLAG_HIDE_PETALBURG_CITY_WALLY 0x2D6 #define FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_INVISIBLE_NINJA_BOY 0x2D7 -#define FLAG_HIDE_PETALBURG_CITY_WALLYS_AUNT 0x2D8 +#define FLAG_HIDE_PETALBURG_CITY_WALLYS_MOM 0x2D8 #define FLAG_UNUSED_0x2D9 0x2D9 // Unused Flag @@ -866,13 +866,13 @@ #define FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_1_BLOCKING_ENTRANCE 0x335 #define FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_2_BLOCKING_ENTRANCE 0x336 #define FLAG_HIDE_MOSSDEEP_CITY_TEAM_MAGMA 0x337 -#define FLAG_HIDE_PETALBURG_GYM_WALLYS_UNCLE 0x338 +#define FLAG_HIDE_PETALBURG_GYM_WALLYS_DAD 0x338 #define FLAG_HIDE_LEGEND_MON_CAVE_OF_ORIGIN 0x339 // Unused, leftover from R/S #define FLAG_HIDE_SOOTOPOLIS_CITY_ARCHIE 0x33A #define FLAG_HIDE_SOOTOPOLIS_CITY_MAXIE 0x33B #define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_ARCHIE 0x33C #define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_MAXIE 0x33D -#define FLAG_HIDE_PETALBURG_CITY_WALLYS_UNCLE 0x33E +#define FLAG_HIDE_PETALBURG_CITY_WALLYS_DAD 0x33E #define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_MAGMA_GRUNTS 0x33F #define FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER 0x340 #define FLAG_HIDE_GRANITE_CAVE_STEVEN 0x341 @@ -961,10 +961,10 @@ #define FLAG_HIDE_MT_PYRE_SUMMIT_ARCHIE 0x394 #define FLAG_HIDE_MT_PYRE_SUMMIT_TEAM_AQUA 0x395 #define FLAG_HIDE_BATTLE_TOWER_REPORTER 0x396 -#define FLAG_HIDE_ROUTE_110_RIVAL_1 0x397 +#define FLAG_HIDE_ROUTE_110_RIVAL 0x397 #define FLAG_HIDE_CHAMPIONS_ROOM_RIVAL 0x398 #define FLAG_HIDE_CHAMPIONS_ROOM_BIRCH 0x399 -#define FLAG_HIDE_ROUTE_110_RIVAL_2 0x39A +#define FLAG_HIDE_ROUTE_110_RIVAL_ON_BIKE 0x39A #define FLAG_HIDE_ROUTE_119_RIVAL_ON_BIKE 0x39B #define FLAG_HIDE_AQUA_HIDEOUT_GRUNTS 0x39C #define FLAG_HIDE_LILCOVE_MOTEL_GAME_DESIGNERS 0x39D @@ -1077,9 +1077,7 @@ #define FLAG_ITEM_ROUTE_120_NUGGET 0x406 #define FLAG_ITEM_ROUTE_120_FULL_HEAL 0x407 #define FLAG_ITEM_ROUTE_123_CALCIUM 0x408 - -#define FLAG_UNUSED_0x409 0x409 // Unused Flag - +#define FLAG_ITEM_ROUTE_123_RARE_CANDY 0x409 // Unused Flag, leftover from R/S. In Emerald this is a hidden item and uses a different flag #define FLAG_ITEM_ROUTE_127_ZINC 0x40A #define FLAG_ITEM_ROUTE_127_CARBOS 0x40B #define FLAG_ITEM_ROUTE_132_RARE_CANDY 0x40C @@ -1171,37 +1169,27 @@ #define FLAG_ITEM_NEW_MAUVILLE_FULL_HEAL 0x462 #define FLAG_ITEM_NEW_MAUVILLE_PARALYZE_HEAL 0x463 #define FLAG_ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL 0x464 - -#define FLAG_UNUSED_0x465 0x465 // Unused Flag -#define FLAG_UNUSED_0x466 0x466 // Unused Flag -#define FLAG_UNUSED_0x467 0x467 // Unused Flag +#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MASTER_BALL 0x465 // Unused Flag, leftover from the Ruby Magma hideout +#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MAX_ELIXIR 0x466 // Unused Flag, leftover from the Ruby Magma hideout +#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B2F_NEST_BALL 0x467 // Unused Flag, leftover from the Ruby Magma hideout #define FLAG_UNUSED_0x468 0x468 // Unused Flag - #define FLAG_ITEM_MT_PYRE_2F_ULTRA_BALL 0x469 #define FLAG_ITEM_MT_PYRE_4F_SEA_INCENSE 0x46A #define FLAG_ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE 0x46B #define FLAG_ITEM_AQUA_HIDEOUT_B1F_NUGGET 0x46C - -#define FLAG_UNUSED_0x46D 0x46D // Unused Flag - +#define FLAG_ITEM_MOSSDEEP_STEVENS_HOUSE_HM08 0x46D // Unused Flag, leftover from R/S. HM08 is given to the player directly in Emerald #define FLAG_ITEM_ROUTE_119_NUGGET 0x46E #define FLAG_ITEM_ROUTE_104_POTION 0x46F - #define FLAG_UNUSED_0x470 0x470 // Unused Flag - #define FLAG_ITEM_ROUTE_103_PP_UP 0x471 - #define FLAG_UNUSED_0x472 0x472 // Unused Flag - #define FLAG_ITEM_ROUTE_108_STAR_PIECE 0x473 #define FLAG_ITEM_ROUTE_109_POTION 0x474 #define FLAG_ITEM_ROUTE_110_ELIXIR 0x475 #define FLAG_ITEM_ROUTE_111_ELIXIR 0x476 #define FLAG_ITEM_ROUTE_113_HYPER_POTION 0x477 #define FLAG_ITEM_ROUTE_115_HEAL_POWDER 0x478 - #define FLAG_UNUSED_0x479 0x479 // Unused Flag - #define FLAG_ITEM_ROUTE_116_POTION 0x47A #define FLAG_ITEM_ROUTE_119_ELIXIR_2 0x47B #define FLAG_ITEM_ROUTE_120_REVIVE 0x47C @@ -1356,7 +1344,7 @@ #define FLAG_SYS_POKEMON_GET (SYSTEM_FLAGS + 0x0) // FLAG_0x860 #define FLAG_SYS_POKEDEX_GET (SYSTEM_FLAGS + 0x1) #define FLAG_SYS_POKENAV_GET (SYSTEM_FLAGS + 0x2) -#define FLAG_UNUSED_0x863 (SYSTEM_FLAGS + 0x3) +#define FLAG_UNUSED_0x863 (SYSTEM_FLAGS + 0x3) // Unused Flag #define FLAG_SYS_GAME_CLEAR (SYSTEM_FLAGS + 0x4) #define FLAG_SYS_CHAT_USED (SYSTEM_FLAGS + 0x5) #define FLAG_SYS_HIPSTER_MEET (SYSTEM_FLAGS + 0x6) @@ -1373,7 +1361,7 @@ #define NUM_BADGES (1 + FLAG_BADGE08_GET - FLAG_BADGE01_GET) // Towns and Cities -#define FLAG_VISITED_LITTLEROOT_TOWN (SYSTEM_FLAGS + 0xF) +#define FLAG_VISITED_LITTLEROOT_TOWN (SYSTEM_FLAGS + 0xF) #define FLAG_VISITED_OLDALE_TOWN (SYSTEM_FLAGS + 0x10) #define FLAG_VISITED_DEWFORD_TOWN (SYSTEM_FLAGS + 0x11) #define FLAG_VISITED_LAVARIDGE_TOWN (SYSTEM_FLAGS + 0x12) @@ -1418,9 +1406,9 @@ #define FLAG_SYS_MIX_RECORD (SYSTEM_FLAGS + 0x34) #define FLAG_SYS_CLOCK_SET (SYSTEM_FLAGS + 0x35) #define FLAG_SYS_NATIONAL_DEX (SYSTEM_FLAGS + 0x36) -#define FLAG_SYS_UNUSED_CAVE_SHIP (SYSTEM_FLAGS + 0x37) // Unused Flag? -#define FLAG_SYS_UNUSED_CAVE_WONDER (SYSTEM_FLAGS + 0x38) // Unused Flag? -#define FLAG_SYS_UNUSED_CAVE_BATTLE (SYSTEM_FLAGS + 0x39) // Unused Flag? +#define FLAG_SYS_CAVE_SHIP (SYSTEM_FLAGS + 0x37) // Unused Flag, leftover from R/S debug, presumably used by Emerald's debug too +#define FLAG_SYS_CAVE_WONDER (SYSTEM_FLAGS + 0x38) // Unused Flag, same as above +#define FLAG_SYS_CAVE_BATTLE (SYSTEM_FLAGS + 0x39) // Unused Flag, same as above #define FLAG_SYS_SHOAL_TIDE (SYSTEM_FLAGS + 0x3A) #define FLAG_SYS_RIBBON_GET (SYSTEM_FLAGS + 0x3B) @@ -1573,7 +1561,9 @@ #define FLAG_UNUSED_0x91F (SYSTEM_FLAGS + 0xBF) // Unused Flag // Daily Flags -#define DAILY_FLAGS_START 0x920 +// These flags are cleared once per day +// The start and end are byte-aligned because the flags are cleared in byte increments +#define DAILY_FLAGS_START (FLAG_UNUSED_0x91F + (8 - FLAG_UNUSED_0x91F % 8)) #define FLAG_UNUSED_0x920 (DAILY_FLAGS_START + 0x0) // Unused Flag #define FLAG_DAILY_CONTEST_LOBBY_RECEIVED_BERRY (DAILY_FLAGS_START + 0x1) #define FLAG_DAILY_SECRET_BASE (DAILY_FLAGS_START + 0x2) @@ -1639,7 +1629,9 @@ #define FLAG_UNUSED_0x95D (DAILY_FLAGS_START + 0x3D) // Unused Flag #define FLAG_UNUSED_0x95E (DAILY_FLAGS_START + 0x3E) // Unused Flag #define FLAG_UNUSED_0x95F (DAILY_FLAGS_START + 0x3F) // Unused Flag -#define DAILY_FLAGS_END FLAG_UNUSED_0x95F +#define DAILY_FLAGS_END (FLAG_UNUSED_0x95F + (7 - FLAG_UNUSED_0x95F % 8)) + +#define FLAGS_COUNT (DAILY_FLAGS_END + 1) // Special Flags (Stored in EWRAM (gSpecialFlags), not in the SaveBlock) #define SPECIAL_FLAGS_START 0x4000 diff --git a/include/constants/global.h b/include/constants/global.h index c7063d71c..55830ae8b 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -34,8 +34,6 @@ #define POKEBLOCKS_COUNT 40 #define OBJECT_EVENTS_COUNT 16 #define BERRY_TREES_COUNT 128 -#define FLAGS_COUNT 300 -#define VARS_COUNT 256 #define MAIL_COUNT 16 #define SECRET_BASES_COUNT 20 #define TV_SHOWS_COUNT 25 @@ -52,6 +50,8 @@ #define APPRENTICE_COUNT 4 #define APPRENTICE_MAX_QUESTIONS 9 #define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used +#define NUM_CONTEST_WINNERS 13 +#define UNION_ROOM_KB_ROW_COUNT 10 #define PYRAMID_BAG_ITEMS_COUNT 10 #define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode. @@ -60,6 +60,14 @@ #define MAX_MON_MOVES 4 #define NUM_STATS 6 +#define CONTESTANT_COUNT 4 +#define CONTEST_CATEGORY_COOL 0 +#define CONTEST_CATEGORY_BEAUTY 1 +#define CONTEST_CATEGORY_CUTE 2 +#define CONTEST_CATEGORY_SMART 3 +#define CONTEST_CATEGORY_TOUGH 4 +#define CONTEST_CATEGORIES_COUNT 5 + // party sizes #define PARTY_SIZE 6 #define MULTI_PARTY_SIZE PARTY_SIZE / 2 diff --git a/include/constants/item.h b/include/constants/item.h index a5c34418d..3277f2379 100644 --- a/include/constants/item.h +++ b/include/constants/item.h @@ -16,5 +16,9 @@ #define KEYITEMS_POCKET 4 #define POCKETS_COUNT 5 +// The TM/HM pocket is the largest pocket, so the maximum amount of items +// in a pocket is its count + 1 for the cancel option +#define MAX_POCKET_ITEMS (BAG_TMHM_COUNT + 1) + #endif // GUARD_ITEM_CONSTANTS_H diff --git a/include/constants/items.h b/include/constants/items.h index fafcac8b1..9496a4c61 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -17,6 +17,8 @@ #define ITEM_LUXURY_BALL 11 #define ITEM_PREMIER_BALL 12 +#define LAST_BALL ITEM_PREMIER_BALL + // Pokemon Items #define ITEM_POTION 13 #define ITEM_ANTIDOTE 14 @@ -495,6 +497,11 @@ #define MAX_PC_ITEM_CAPACITY 999 #define MAX_BERRY_CAPACITY 999 +// Secondary IDs for rods +#define OLD_ROD 0 +#define GOOD_ROD 1 +#define SUPER_ROD 2 + // Check if the item is one that can be used on a Pokemon. #define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2) diff --git a/include/constants/layouts.h b/include/constants/layouts.h index 3e876f499..9d5e877b0 100755 --- a/include/constants/layouts.h +++ b/include/constants/layouts.h @@ -1,6 +1,10 @@ #ifndef GUARD_CONSTANTS_LAYOUTS_H #define GUARD_CONSTANTS_LAYOUTS_H +// +// DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json +// + #define LAYOUT_PETALBURG_CITY 1 #define LAYOUT_SLATEPORT_CITY 2 #define LAYOUT_MAUVILLE_CITY 3 @@ -51,9 +55,9 @@ #define LAYOUT_ROUTE132 48 #define LAYOUT_ROUTE133 49 #define LAYOUT_ROUTE134 50 -#define LAYOUT_UNDERWATER2 51 -#define LAYOUT_UNDERWATER3 52 -#define LAYOUT_UNDERWATER4 53 +#define LAYOUT_UNDERWATER_ROUTE126 51 +#define LAYOUT_UNDERWATER_ROUTE127 52 +#define LAYOUT_UNDERWATER_ROUTE128 53 #define LAYOUT_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F 54 #define LAYOUT_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F 55 #define LAYOUT_LITTLEROOT_TOWN_MAYS_HOUSE_1F 56 @@ -274,7 +278,7 @@ #define LAYOUT_ROUTE119_WEATHER_INSTITUTE_1F 271 #define LAYOUT_ROUTE119_WEATHER_INSTITUTE_2F 272 #define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR 273 -#define LAYOUT_UNDERWATER1 274 +#define LAYOUT_UNDERWATER_ROUTE124 274 #define LAYOUT_MOSSDEEP_CITY_SPACE_CENTER_1F 275 #define LAYOUT_MOSSDEEP_CITY_SPACE_CENTER_2F 276 #define LAYOUT_SS_TIDAL_CORRIDOR 277 @@ -410,9 +414,9 @@ #define LAYOUT_MARINE_CAVE_ENTRANCE 407 #define LAYOUT_TERRA_CAVE_ENTRANCE 408 #define LAYOUT_TERRA_CAVE_END 409 -#define LAYOUT_UNDERWATER6 410 -#define LAYOUT_UNDERWATER7 411 -#define LAYOUT_UNDERWATER5 412 +#define LAYOUT_UNDERWATER_ROUTE105 410 +#define LAYOUT_UNDERWATER_ROUTE125 411 +#define LAYOUT_UNDERWATER_ROUTE129 412 #define LAYOUT_MARINE_CAVE_END 413 #define LAYOUT_TRAINER_HILL_ENTRANCE 414 #define LAYOUT_TRAINER_HILL_1F 415 diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h index 17fe7ab53..69355635b 100755 --- a/include/constants/map_groups.h +++ b/include/constants/map_groups.h @@ -1,64 +1,68 @@ #ifndef GUARD_CONSTANTS_MAP_GROUPS_H #define GUARD_CONSTANTS_MAP_GROUPS_H +// +// DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json +// + // Map Group 0 -#define MAP_PETALBURG_CITY (0 | (0 << 8)) -#define MAP_SLATEPORT_CITY (1 | (0 << 8)) -#define MAP_MAUVILLE_CITY (2 | (0 << 8)) -#define MAP_RUSTBORO_CITY (3 | (0 << 8)) -#define MAP_FORTREE_CITY (4 | (0 << 8)) -#define MAP_LILYCOVE_CITY (5 | (0 << 8)) -#define MAP_MOSSDEEP_CITY (6 | (0 << 8)) -#define MAP_SOOTOPOLIS_CITY (7 | (0 << 8)) -#define MAP_EVER_GRANDE_CITY (8 | (0 << 8)) -#define MAP_LITTLEROOT_TOWN (9 | (0 << 8)) -#define MAP_OLDALE_TOWN (10 | (0 << 8)) -#define MAP_DEWFORD_TOWN (11 | (0 << 8)) -#define MAP_LAVARIDGE_TOWN (12 | (0 << 8)) -#define MAP_FALLARBOR_TOWN (13 | (0 << 8)) -#define MAP_VERDANTURF_TOWN (14 | (0 << 8)) -#define MAP_PACIFIDLOG_TOWN (15 | (0 << 8)) -#define MAP_ROUTE101 (16 | (0 << 8)) -#define MAP_ROUTE102 (17 | (0 << 8)) -#define MAP_ROUTE103 (18 | (0 << 8)) -#define MAP_ROUTE104 (19 | (0 << 8)) -#define MAP_ROUTE105 (20 | (0 << 8)) -#define MAP_ROUTE106 (21 | (0 << 8)) -#define MAP_ROUTE107 (22 | (0 << 8)) -#define MAP_ROUTE108 (23 | (0 << 8)) -#define MAP_ROUTE109 (24 | (0 << 8)) -#define MAP_ROUTE110 (25 | (0 << 8)) -#define MAP_ROUTE111 (26 | (0 << 8)) -#define MAP_ROUTE112 (27 | (0 << 8)) -#define MAP_ROUTE113 (28 | (0 << 8)) -#define MAP_ROUTE114 (29 | (0 << 8)) -#define MAP_ROUTE115 (30 | (0 << 8)) -#define MAP_ROUTE116 (31 | (0 << 8)) -#define MAP_ROUTE117 (32 | (0 << 8)) -#define MAP_ROUTE118 (33 | (0 << 8)) -#define MAP_ROUTE119 (34 | (0 << 8)) -#define MAP_ROUTE120 (35 | (0 << 8)) -#define MAP_ROUTE121 (36 | (0 << 8)) -#define MAP_ROUTE122 (37 | (0 << 8)) -#define MAP_ROUTE123 (38 | (0 << 8)) -#define MAP_ROUTE124 (39 | (0 << 8)) -#define MAP_ROUTE125 (40 | (0 << 8)) -#define MAP_ROUTE126 (41 | (0 << 8)) -#define MAP_ROUTE127 (42 | (0 << 8)) -#define MAP_ROUTE128 (43 | (0 << 8)) -#define MAP_ROUTE129 (44 | (0 << 8)) -#define MAP_ROUTE130 (45 | (0 << 8)) -#define MAP_ROUTE131 (46 | (0 << 8)) -#define MAP_ROUTE132 (47 | (0 << 8)) -#define MAP_ROUTE133 (48 | (0 << 8)) -#define MAP_ROUTE134 (49 | (0 << 8)) -#define MAP_UNDERWATER1 (50 | (0 << 8)) -#define MAP_UNDERWATER2 (51 | (0 << 8)) -#define MAP_UNDERWATER3 (52 | (0 << 8)) -#define MAP_UNDERWATER4 (53 | (0 << 8)) -#define MAP_UNDERWATER5 (54 | (0 << 8)) -#define MAP_UNDERWATER6 (55 | (0 << 8)) -#define MAP_UNDERWATER7 (56 | (0 << 8)) +#define MAP_PETALBURG_CITY (0 | (0 << 8)) +#define MAP_SLATEPORT_CITY (1 | (0 << 8)) +#define MAP_MAUVILLE_CITY (2 | (0 << 8)) +#define MAP_RUSTBORO_CITY (3 | (0 << 8)) +#define MAP_FORTREE_CITY (4 | (0 << 8)) +#define MAP_LILYCOVE_CITY (5 | (0 << 8)) +#define MAP_MOSSDEEP_CITY (6 | (0 << 8)) +#define MAP_SOOTOPOLIS_CITY (7 | (0 << 8)) +#define MAP_EVER_GRANDE_CITY (8 | (0 << 8)) +#define MAP_LITTLEROOT_TOWN (9 | (0 << 8)) +#define MAP_OLDALE_TOWN (10 | (0 << 8)) +#define MAP_DEWFORD_TOWN (11 | (0 << 8)) +#define MAP_LAVARIDGE_TOWN (12 | (0 << 8)) +#define MAP_FALLARBOR_TOWN (13 | (0 << 8)) +#define MAP_VERDANTURF_TOWN (14 | (0 << 8)) +#define MAP_PACIFIDLOG_TOWN (15 | (0 << 8)) +#define MAP_ROUTE101 (16 | (0 << 8)) +#define MAP_ROUTE102 (17 | (0 << 8)) +#define MAP_ROUTE103 (18 | (0 << 8)) +#define MAP_ROUTE104 (19 | (0 << 8)) +#define MAP_ROUTE105 (20 | (0 << 8)) +#define MAP_ROUTE106 (21 | (0 << 8)) +#define MAP_ROUTE107 (22 | (0 << 8)) +#define MAP_ROUTE108 (23 | (0 << 8)) +#define MAP_ROUTE109 (24 | (0 << 8)) +#define MAP_ROUTE110 (25 | (0 << 8)) +#define MAP_ROUTE111 (26 | (0 << 8)) +#define MAP_ROUTE112 (27 | (0 << 8)) +#define MAP_ROUTE113 (28 | (0 << 8)) +#define MAP_ROUTE114 (29 | (0 << 8)) +#define MAP_ROUTE115 (30 | (0 << 8)) +#define MAP_ROUTE116 (31 | (0 << 8)) +#define MAP_ROUTE117 (32 | (0 << 8)) +#define MAP_ROUTE118 (33 | (0 << 8)) +#define MAP_ROUTE119 (34 | (0 << 8)) +#define MAP_ROUTE120 (35 | (0 << 8)) +#define MAP_ROUTE121 (36 | (0 << 8)) +#define MAP_ROUTE122 (37 | (0 << 8)) +#define MAP_ROUTE123 (38 | (0 << 8)) +#define MAP_ROUTE124 (39 | (0 << 8)) +#define MAP_ROUTE125 (40 | (0 << 8)) +#define MAP_ROUTE126 (41 | (0 << 8)) +#define MAP_ROUTE127 (42 | (0 << 8)) +#define MAP_ROUTE128 (43 | (0 << 8)) +#define MAP_ROUTE129 (44 | (0 << 8)) +#define MAP_ROUTE130 (45 | (0 << 8)) +#define MAP_ROUTE131 (46 | (0 << 8)) +#define MAP_ROUTE132 (47 | (0 << 8)) +#define MAP_ROUTE133 (48 | (0 << 8)) +#define MAP_ROUTE134 (49 | (0 << 8)) +#define MAP_UNDERWATER_ROUTE124 (50 | (0 << 8)) +#define MAP_UNDERWATER_ROUTE126 (51 | (0 << 8)) +#define MAP_UNDERWATER_ROUTE127 (52 | (0 << 8)) +#define MAP_UNDERWATER_ROUTE128 (53 | (0 << 8)) +#define MAP_UNDERWATER_ROUTE129 (54 | (0 << 8)) +#define MAP_UNDERWATER_ROUTE105 (55 | (0 << 8)) +#define MAP_UNDERWATER_ROUTE125 (56 | (0 << 8)) // Map Group 1 #define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F (0 | (1 << 8)) diff --git a/include/constants/map_scripts.h b/include/constants/map_scripts.h index 26de3ebc6..68d360955 100644 --- a/include/constants/map_scripts.h +++ b/include/constants/map_scripts.h @@ -1,6 +1,41 @@ #ifndef GUARD_CONSTANTS_MAP_SCRIPTS_H #define GUARD_CONSTANTS_MAP_SCRIPTS_H +/* + IDs for special scripts that can be run for a particular map. + For the functions that handle when they are run, see these constants' uses in src/script.c + + Below describes when a script of this kind will be called, and what it typically does. + They are numbered in the order that they will be called when entering a map (from a warp or camera transition). + NOTE: These descriptions are just of what they generally do, not what they always or have to do + + 3. ON_LOAD: Run after the layout is loaded (but not drawn yet). + Almost exclusively used to set metatiles on the map before it's first drawn + + 6. ON_FRAME_TABLE: Run every frame after the map has faded in, before player input is processed. + This is a table of scripts that each run if their condition is satisfied. + Used to trigger an event, such as the player exiting the cable car or the SS Tidal sailor announcing progress + + 2. ON_TRANSITION: Run during the transition to the map + Used to set map-specific flags/vars, update object positions/movement types, set weather, etc + + 5. ON_WARP_INTO_MAP_TABLE: Run after the map's objects are loaded. + This is a table of scripts that each run if their condition is satisfied. + Used to add objects to the scene or update something about the player as they warp in (e.g. their facing dir or visibility) + Note that ON_TRANSITION may also handle object visibility, but would do so by modifying a flag or var + + 4. ON_RESUME: Run at the end of map load, and again any time upon returning to field (e.g. exiting the Bag menu, or finishing a battle) + Used to hide defeated static pokemon, or maintain some map state (e.g. the Trainer Hill timer, or the cycling road challenge) + In some maps this takes the metatile setting job of ON_LOAD + + 1. ON_DIVE_WARP: Run after the player chooses to dive/emerge. + Only used once, to determine whether or not the player should emerge in the Sealed Chamber + + x. ON_RETURN_TO_FIELD: Run exlusively upon returning to the field, shortly after ON_RESUME (as opposed to ON_RESUME, which also runs once on entering the map) + Used rarely, when something must only happen on reload (e.g. making sure Mew is above the grass after battling it on Faraway Island) + +*/ + #define MAP_SCRIPT_ON_LOAD 1 #define MAP_SCRIPT_ON_FRAME_TABLE 2 #define MAP_SCRIPT_ON_TRANSITION 3 diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 586107687..f7405f46a 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -289,31 +289,31 @@ #define METATILE_EverGrande_Door_PokemonLeague 0x21D // gTileset_PokemonCenter -#define METATILE_PokemonCenter_Elevator1F_Tile0_Frame0 0x280 -#define METATILE_PokemonCenter_Elevator1F_Tile0_Frame1 0x282 -#define METATILE_PokemonCenter_Elevator1F_Tile0_Frame2 0x284 -#define METATILE_PokemonCenter_Elevator1F_Tile1_Frame0 0x281 -#define METATILE_PokemonCenter_Elevator1F_Tile1_Frame1 0x283 -#define METATILE_PokemonCenter_Elevator1F_Tile1_Frame2 0x285 -#define METATILE_PokemonCenter_Elevator1F_Tile2_Frame0 0x288 -#define METATILE_PokemonCenter_Elevator1F_Tile2_Frame1 0x28A -#define METATILE_PokemonCenter_Elevator1F_Tile2_Frame2 0x28C -#define METATILE_PokemonCenter_Elevator1F_Tile3_Frame0 0x289 -#define METATILE_PokemonCenter_Elevator1F_Tile3_Frame1 0x28B -#define METATILE_PokemonCenter_Elevator1F_Tile3_Frame2 0x28D -#define METATILE_PokemonCenter_Elevator2F_Tile0_Frame0 0x2A0 -#define METATILE_PokemonCenter_Elevator2F_Tile0_Frame1 0x2A2 -#define METATILE_PokemonCenter_Elevator2F_Tile0_Frame2 0x2A4 -#define METATILE_PokemonCenter_Elevator2F_Tile1_Frame0 0x2A1 -#define METATILE_PokemonCenter_Elevator2F_Tile1_Frame1 0x2A3 -#define METATILE_PokemonCenter_Elevator2F_Tile1_Frame2 0x2A5 -#define METATILE_PokemonCenter_Elevator2F_Tile2_Frame0 0x2A8 -#define METATILE_PokemonCenter_Elevator2F_Tile2_Frame1 0x2AA -#define METATILE_PokemonCenter_Elevator2F_Tile2_Frame2 0x2AC -#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC -#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 -#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E -#define METATILE_PokemonCenter_CounterBarrier 0x25D +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 0x281 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame1 0x283 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame2 0x285 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 0x288 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame1 0x28A +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame2 0x28C +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 0x289 +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame1 0x28B +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame2 0x28D +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame0 0x2A0 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame1 0x2A2 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 0x2A4 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame0 0x2A1 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame1 0x2A3 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 0x2A5 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame0 0x2A8 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame1 0x2AA +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 0x2AC +#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC +#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 +#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E +#define METATILE_PokemonCenter_CounterBarrier 0x25D // gTileset_InsideOfTruck #define METATILE_InsideOfTruck_ExitLight_Top 0x208 diff --git a/include/constants/opponents.h b/include/constants/opponents.h index cd35cf6b7..c9cf9239d 100644 --- a/include/constants/opponents.h +++ b/include/constants/opponents.h @@ -859,6 +859,7 @@ // NOTE: Because each Trainer uses a flag to determine when they are defeated, there is only space for 9 additional trainers before trainer flag space overflows // More space can be made by shifting flags around in constants/flags.h or changing how trainer flags are handled +// MAX_TRAINERS_COUNT can be increased but will take up additional saveblock space #define TRAINERS_COUNT 855 #define MAX_TRAINERS_COUNT 864 diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index b5c60f64d..52eabe71b 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -69,6 +69,7 @@ #define NATURE_SASSY 22 #define NATURE_CAREFUL 23 #define NATURE_QUIRKY 24 +#define NUM_NATURES 25 // Pokemon Stats #define STAT_HP 0 @@ -80,9 +81,13 @@ #define STAT_ACC 6 // Only in battles. #define STAT_EVASION 7 // Only in battles. -#define NUM_EV_STATS NUM_STATS - 1 // excludes HP +#define NUM_NATURE_STATS NUM_STATS - 1 // excludes HP #define NUM_BATTLE_STATS NUM_STATS + 2 // includes Accuracy and Evasion +#define MIN_STAT_STAGE 0 +#define DEFAULT_STAT_STAGE 6 +#define MAX_STAT_STAGE 12 + // Shiny odds #define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536 @@ -199,6 +204,8 @@ #define LEVEL_UP_MOVE_LV 0xFE00 #define LEVEL_UP_END 0xFFFF +#define MAX_LEVEL_UP_MOVES 20 + #define MON_MALE 0x00 #define MON_FEMALE 0xFE #define MON_GENDERLESS 0xFF @@ -225,6 +232,7 @@ #define STATUS_PRIMARY_POKERUS 6 #define STATUS_PRIMARY_FAINTED 7 +#define MAX_PER_STAT_EVS 255 #define MAX_TOTAL_EVS 510 #define EV_ITEM_RAISE_LIMIT 100 diff --git a/include/constants/region_map_sections.h b/include/constants/region_map_sections.h index 5e64048dd..65aa3e1ca 100644 --- a/include/constants/region_map_sections.h +++ b/include/constants/region_map_sections.h @@ -52,9 +52,9 @@ #define MAPSEC_ROUTE_133 0x30 #define MAPSEC_ROUTE_134 0x31 #define MAPSEC_UNDERWATER_124 0x32 -#define MAPSEC_UNDERWATER_125 0x33 -#define MAPSEC_UNDERWATER_126 0x34 -#define MAPSEC_UNDERWATER_127 0x35 +#define MAPSEC_UNDERWATER_126 0x33 +#define MAPSEC_UNDERWATER_127 0x34 +#define MAPSEC_UNDERWATER_128 0x35 #define MAPSEC_UNDERWATER_SOOTOPOLIS 0x36 #define MAPSEC_GRANITE_CAVE 0x37 #define MAPSEC_MT_CHIMNEY 0x38 @@ -70,7 +70,7 @@ #define MAPSEC_AQUA_HIDEOUT_OLD 0x42 #define MAPSEC_SHOAL_CAVE 0x43 #define MAPSEC_SEAFLOOR_CAVERN 0x44 -#define MAPSEC_UNDERWATER_128 0x45 +#define MAPSEC_UNDERWATER_SEAFLOOR_CAVERN 0x45 #define MAPSEC_VICTORY_ROAD 0x46 #define MAPSEC_MIRAGE_ISLAND 0x47 #define MAPSEC_CAVE_OF_ORIGIN 0x48 @@ -207,8 +207,8 @@ #define MAPSEC_MARINE_CAVE 0xCB #define MAPSEC_UNDERWATER_MARINE_CAVE 0xCC #define MAPSEC_TERRA_CAVE 0xCD -#define MAPSEC_UNDERWATER_TERRA_CAVE 0xCE -#define MAPSEC_UNDERWATER_UNK1 0xCF +#define MAPSEC_UNDERWATER_105 0xCE +#define MAPSEC_UNDERWATER_125 0xCF #define MAPSEC_UNDERWATER_129 0xD0 #define MAPSEC_DESERT_UNDERPASS 0xD1 #define MAPSEC_ALTERING_CAVE 0xD2 diff --git a/include/constants/roulette.h b/include/constants/roulette.h new file mode 100644 index 000000000..2ab17e476 --- /dev/null +++ b/include/constants/roulette.h @@ -0,0 +1,7 @@ +#ifndef GUARD_CONSTANTS_ROULETTE_H +#define GUARD_CONSTANTS_ROULETTE_H + +// Flag set in gSpecialVar_0x8004 when playing Roulette on a Game Corner service day +#define ROULETTE_SPECIAL_RATE (1 << 7) + +#endif // GUARD_CONSTANTS_ROULETTE_H diff --git a/include/constants/slot_machine.h b/include/constants/slot_machine.h new file mode 100644 index 000000000..81848f208 --- /dev/null +++ b/include/constants/slot_machine.h @@ -0,0 +1,6 @@ +#ifndef GUARD_CONSTANTS_SLOT_MACHINE_H +#define GUARD_CONSTANTS_SLOT_MACHINE_H + +#define SLOT_MACHINE_COUNT 12 + +#endif // GUARD_CONSTANTS_SLOT_MACHINE_H diff --git a/include/constants/songs.h b/include/constants/songs.h index b44c9f7a8..a78ee6faf 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -1,543 +1,548 @@ #ifndef GUARD_CONSTANTS_SONGS_H #define GUARD_CONSTANTS_SONGS_H -#define MUS_DUMMY 0 -#define SE_KAIFUKU 1 // Healing Item -#define SE_PC_LOGIN 2 // PC Logon -#define SE_PC_OFF 3 // PC Shutdown -#define SE_PC_ON 4 // PC Startup -#define SE_SELECT 5 // Cursor Selection -#define SE_WIN_OPEN 6 // Start Menu -#define SE_WALL_HIT 7 // Wall Bump -#define SE_DOOR 8 // Opening Door -#define SE_KAIDAN 9 // Stairs -#define SE_DANSA 10 // Ledge -#define SE_JITENSYA 11 // Bicycle Bell -#define SE_KOUKA_L 12 // Not Very Effective -#define SE_KOUKA_M 13 // Normal Effectiveness -#define SE_KOUKA_H 14 // Super Effective -#define SE_BOWA2 15 // Pokémon Withdrawal -#define SE_POKE_DEAD 16 // Pokémon Fainted -#define SE_NIGERU 17 // Flee from Wild Battle -#define SE_JIDO_DOA 18 // Pokémon Center Door -#define SE_NAMINORI 19 // Briney's Ship -#define SE_BAN 20 // Bang -#define SE_PIN 21 // Exclamation Bubble -#define SE_BOO 22 // Contest Jam -#define SE_BOWA 23 // Giving Poké Ball to Nurse, Poké Ball Wiggle -#define SE_JYUNI 24 // Places in Contest Appearing -#define SE_A 25 // Bard A -#define SE_I 26 // Bard I -#define SE_U 27 // Bard U -#define SE_E 28 // Bard E -#define SE_O 29 // Bard O -#define SE_N 30 // Bard N -#define SE_SEIKAI 31 // Success -#define SE_HAZURE 32 // Failure -#define SE_EXP 33 // Exp. Bar -#define SE_JITE_PYOKO 34 // Bunny Hop -#define SE_MU_PACHI 35 -#define SE_TK_KASYA 36 // Mossdeep Gym/Trick House Switch -#define SE_FU_ZAKU 37 -#define SE_FU_ZAKU2 38 -#define SE_FU_ZUZUZU 39 // Lavaridge Gym Warp -#define SE_RU_GASHIN 40 // Sootopolis Gym - Stairs Appear -#define SE_RU_GASYAN 41 // Sootopolis Gym - Ice Breaking -#define SE_RU_BARI 42 // Sootopolis Gym - Walking on Ice -#define SE_RU_HYUU 43 // Falling Down -#define SE_KI_GASYAN 44 -#define SE_TK_WARPIN 45 // Warp In -#define SE_TK_WARPOUT 46 // Warp Out -#define SE_TU_SAA 47 // Repel -#define SE_HI_TURUN 48 // Moving Obstacle in Fortree Gym -#define SE_TRACK_MOVE 49 // Moving Truck -#define SE_TRACK_STOP 50 // Moving Truck Stop -#define SE_TRACK_HAIKI 51 // Moving Truck Unload -#define SE_TRACK_DOOR 52 // Moving Truck Door -#define SE_MOTER 53 -#define SE_CARD 54 -#define SE_SAVE 55 // Save -#define SE_KON 56 // Poké Ball Bounce 1 -#define SE_KON2 57 // Poké Ball Bounce 2 -#define SE_KON3 58 // Poké Ball Bounce 3 -#define SE_KON4 59 // Poké Ball Bounce 4 -#define SE_SUIKOMU 60 // Poké Ball Trade -#define SE_NAGERU 61 // Poké Ball Throw -#define SE_TOY_C 62 // Note C -#define SE_TOY_D 63 // Note D -#define SE_TOY_E 64 // Note E -#define SE_TOY_F 65 // Note F -#define SE_TOY_G 66 // Note G -#define SE_TOY_A 67 // Note A -#define SE_TOY_B 68 // Note B -#define SE_TOY_C1 69 // Note High C -#define SE_MIZU 70 // Puddle -#define SE_HASHI 71 // Boardwalk -#define SE_DAUGI 72 // Slots Credits -#define SE_PINPON 73 // Ding-dong! -#define SE_FUUSEN1 74 // Red Balloon -#define SE_FUUSEN2 75 // Blue Balloon -#define SE_FUUSEN3 76 // Yellow Balloon -#define SE_TOY_KABE 77 // Breakable Door -#define SE_TOY_DANGO 78 // Mud Ball -#define SE_DOKU 79 // Overworld Poison Damage -#define SE_ESUKA 80 // Escalator -#define SE_T_AME 81 // Rain -#define SE_T_AME_E 82 // Rain Stop -#define SE_T_OOAME 83 // Heavy Rain -#define SE_T_OOAME_E 84 // Heavy Rain Stop -#define SE_T_KOAME 85 // Light Rain -#define SE_T_KOAME_E 86 // Light Rain Stop -#define SE_T_KAMI 87 // Thunder -#define SE_T_KAMI2 88 // Thunder 2 -#define SE_ELEBETA 89 // Elevator -#define SE_HINSI 90 // Low Health -#define SE_EXPMAX 91 // Exp. Max -#define SE_TAMAKORO 92 // Roulette Ball -#define SE_TAMAKORO_E 93 // Roulette Ball 2 -#define SE_BASABASA 94 -#define SE_REGI 95 // Cash Register -#define SE_C_GAJI 96 // Contest Hearts -#define SE_C_MAKU_U 97 // Contest Curtain rise -#define SE_C_MAKU_D 98 // Contest Curtain fall -#define SE_C_PASI 99 -#define SE_C_SYU 100 -#define SE_C_PIKON 101 // Pokémon Appears in Contest -#define SE_REAPOKE 102 // Shiny Pokémon -#define SE_OP_BASYU 103 // Opening Movie -> Title Screen whoosh -#define SE_BT_START 104 // Battle Mugshot whoosh -#define SE_DENDOU 105 // Audience Cheering -#define SE_JIHANKI 106 // Vending Machine -#define SE_TAMA 107 // Orb Used -#define SE_Z_SCROLL 108 // Pokédex Scrolling -#define SE_Z_PAGE 109 // Pokédex Page -#define SE_PN_ON 110 // PokéNav On -#define SE_PN_OFF 111 // PokéNav Off -#define SE_Z_SEARCH 112 // Pokédex Search -#define SE_TAMAGO 113 // Egg hatch -#define SE_TB_START 114 // Battle - Poké Ball Tray slide in -#define SE_TB_KON 115 // Battle - Poké Ball Tray ball sound -#define SE_TB_KARA 116 // Battle - Poké Ball Tray slide out -#define SE_BIDORO 117 -#define SE_W085 118 // Thunderbolt -#define SE_W085B 119 // Thunderbolt 2 -#define SE_W231 120 // Harden -#define SE_W171 121 // Nightmare -#define SE_W233 122 // Vital Throw -#define SE_W233B 123 // Vital Throw 2 -#define SE_W145 124 // Bubble -#define SE_W145B 125 // Bubble 2 -#define SE_W145C 126 // Bubble 3 -#define SE_W240 127 // Rain Dance -#define SE_W015 128 // Cut -#define SE_W081 129 // String Shot -#define SE_W081B 130 // String Shot 2 -#define SE_W088 131 // Rock Throw -#define SE_W016 132 // Gust -#define SE_W016B 133 // Gust 2 -#define SE_W003 134 // DoubleSlap -#define SE_W104 135 // Double Team -#define SE_W013 136 // Razor Wind -#define SE_W196 137 // Icy Wind -#define SE_W086 138 // Thunder Wave -#define SE_W004 139 // Comet Punch -#define SE_W025 140 // Mega Kick -#define SE_W025B 141 // Mega Kick 2 -#define SE_W152 142 // Crabhammer -#define SE_W026 143 // Jump Kick -#define SE_W172 144 // Flame Wheel -#define SE_W172B 145 // Flame Wheel 2 -#define SE_W053 146 // Flamethrower -#define SE_W007 147 // Fire Punch -#define SE_W092 148 // Toxic -#define SE_W221 149 // Sacred Fire -#define SE_W221B 150 // Sacred Fire 2 -#define SE_W052 151 // Ember -#define SE_W036 152 // Take Down -#define SE_W059 153 // Blizzard -#define SE_W059B 154 // Blizzard 2 -#define SE_W010 155 // Scratch -#define SE_W011 156 // Vicegrip -#define SE_W017 157 // Wing Attack -#define SE_W019 158 // Fly -#define SE_W028 159 // Sand-Attack -#define SE_W013B 160 // Razor Wind 2 -#define SE_W044 161 // Bite -#define SE_W029 162 // Headbutt -#define SE_W057 163 // Surf -#define SE_W056 164 // Hydro Pump -#define SE_W250 165 // Whirlpool -#define SE_W030 166 // Horn Attack -#define SE_W039 167 // Tail Whip -#define SE_W054 168 // Mist -#define SE_W077 169 // PoisonPowder -#define SE_W020 170 // Bind -#define SE_W082 171 // Dragon Rage -#define SE_W047 172 // Sing -#define SE_W195 173 // Perish Song -#define SE_W006 174 // Pay Day -#define SE_W091 175 // Dig -#define SE_W146 176 // Dizzy Punch -#define SE_W120 177 // Self-Destruct -#define SE_W153 178 // Explosion -#define SE_W071B 179 // Absorb 2 -#define SE_W071 180 // Absorb -#define SE_W103 181 // Screech -#define SE_W062 182 // BubbleBeam -#define SE_W062B 183 // BubbleBeam 2 -#define SE_W048 184 // Supersonic -#define SE_W187 185 // Belly Drum -#define SE_W118 186 // Metronome -#define SE_W155 187 // Bonemerang -#define SE_W122 188 // Lick -#define SE_W060 189 // Psybeam -#define SE_W185 190 // Faint Attack -#define SE_W014 191 // Swords Dance -#define SE_W043 192 // Leer -#define SE_W207 193 // Swagger -#define SE_W207B 194 // Swagger 2 -#define SE_W215 195 // Heal Bell -#define SE_W109 196 // Confuse Ray -#define SE_W173 197 // Snore -#define SE_W280 198 // Brick Break -#define SE_W202 199 // Giga Drain -#define SE_W060B 200 // Psybeam 2 -#define SE_W076 201 // SolarBeam -#define SE_W080 202 // Petal Dance -#define SE_W100 203 // Teleport -#define SE_W107 204 // Minimize -#define SE_W166 205 // Sketch -#define SE_W129 206 // Swift -#define SE_W115 207 // Reflect -#define SE_W112 208 // Barrier -#define SE_W197 209 // Detect -#define SE_W199 210 // Lock-On -#define SE_W236 211 // Moonlight -#define SE_W204 212 // Charm -#define SE_W268 213 // Charge -#define SE_W070 214 // Strength -#define SE_W063 215 // Hyper Beam -#define SE_W127 216 // Waterfall -#define SE_W179 217 // Reversal -#define SE_W151 218 // Acid Armor -#define SE_W201 219 // Sandstorm -#define SE_W161 220 // Tri-Attack -#define SE_W161B 221 // Tri-Attack 2 -#define SE_W227 222 // Encore -#define SE_W227B 223 // Encore 2 -#define SE_W226 224 // Baton Pass -#define SE_W208 225 // Milk Drink -#define SE_W213 226 // Attract -#define SE_W213B 227 // Attract 2 -#define SE_W234 228 // Morning Sun -#define SE_W260 229 // Flatter -#define SE_W328 230 // Sand Tomb -#define SE_W320 231 // GrassWhistle -#define SE_W255 232 // Spit Up -#define SE_W291 233 // Dive -#define SE_W089 234 // Earthquake -#define SE_W239 235 // Twister -#define SE_W230 236 // Sweet Scent -#define SE_W281 237 // Yawn -#define SE_W327 238 // Sky Uppercut -#define SE_W287 239 // Stat Increased -#define SE_W257 240 // Heat Wave -#define SE_W253 241 // Uproar -#define SE_W258 242 // Hail -#define SE_W322 243 // Cosmic Power -#define SE_W298 244 // Teeter Dance -#define SE_W287B 245 // Stat Decreased -#define SE_W114 246 // Haze -#define SE_W063B 247 // Hyper Beam 2 -// FRLG SFX below -#define SE_RG_W_DOOR 248 // Door -#define SE_RG_CARD1 249 // Trainer Card 1 -#define SE_RG_CARD2 250 // Trainer Card 2 -#define SE_RG_CARD3 251 // Trainer Card 3 -#define SE_RG_BAG1 252 // Bag Scroll -#define SE_RG_BAG2 253 // Bag Pocket Change -#define SE_RG_GETTING 254 -#define SE_RG_SHOP 255 // Cash Register -#define SE_RG_KITEKI 256 // S.S. Anne Horn -#define SE_RG_HELP_OP 257 // Help Menu Open -#define SE_RG_HELP_CL 258 // Help Menu Close -#define SE_RG_HELP_NG 259 // Help Menu Error -#define SE_RG_DEOMOV 260 // Deoxys Moves -#define SE_RG_EXCELLENT 261 -#define SE_RG_NAWAMISS 262 -// end FRLG SFX -#define SE_TOREEYE 263 // Trainer's Eye Call -#define SE_TOREOFF 264 // Trainer's Eye Hang Up -#define SE_HANTEI1 265 // Battle Arena Time's Up 1 -#define SE_HANTEI2 266 // Battle Arena Time's Up 2 -#define SE_CURTAIN 267 // Battle Pike Curtain Open -#define SE_CURTAIN1 268 // Battle Pike Curtain Close -#define SE_USSOKI 269 // Sudowoodo +// Original JP names listed on right, along with any additional notes -#define MUS_TETSUJI 350 // Littleroot Town Test 'TETSUJI' -#define MUS_FIELD13 351 // GSC - Route 38 -#define MUS_KACHI22 352 // Wild Pokémon Defeated -#define MUS_KACHI2 353 // Wild Pokémon Defeated with Intro -#define MUS_KACHI3 354 // Gym Leader Defeated -#define MUS_KACHI5 355 // Victory! Elite Four -#define MUS_PCC 356 // Crystal - Pokémon Communication Center -#define MUS_NIBI 357 // GSC - Viridian/Saffron/Pewter/etc -#define MUS_SUIKUN 358 // Crystal - Battle! Legendary Beasts -#define MUS_DOORO1 359 // Route 101 -#define MUS_DOORO_X1 360 // Route 110 -#define MUS_DOORO_X3 361 // Route 120 -#define MUS_MACHI_S2 362 // Petalburg City -#define MUS_MACHI_S4 363 // Oldale/Lavaridge Town -#define MUS_GIM 364 // Gym -#define MUS_NAMINORI 365 // Surfing -#define MUS_DAN01 366 // Caves and Darkness -#define MUS_FANFA1 367 // Level Up! -#define MUS_ME_ASA 368 // Pokémon Healed -#define MUS_ME_BACHI 369 // Obtained a Badge! -#define MUS_FANFA4 370 // Obtained an Item! -#define MUS_FANFA5 371 // Your Pokémon Just Evolved! -#define MUS_ME_WAZA 372 // Obtained a TM/HM! -#define MUS_BIJYUTU 373 // Lilycove Museum -#define MUS_DOORO_X4 374 // Route 122/Intro -#define MUS_FUNE_KAN 375 // Slateport Museum -#define MUS_ME_SHINKA 376 // Evolution Intro -#define MUS_SHINKA 377 // Evolution -#define MUS_ME_WASURE 378 // Move Deleted/Messed Up Appeal -#define MUS_SYOUJOEYE 379 // Encounter! Tuber -#define MUS_BOYEYE 380 // Encounter! Boy -#define MUS_DAN02 381 // Abandoned Ship/Southern Island -#define MUS_MACHI_S3 382 // Fortree City/Pacifidlog Town -#define MUS_ODAMAKI 383 // Professor Birch's Lab -#define MUS_B_TOWER 384 // Battle Tower (RS) -#define MUS_SWIMEYE 385 // Encounter! Swimmer -#define MUS_DAN03 386 // Meteor Falls/Cave of Origin -#define MUS_ME_KINOMI 387 // Obtained a Berry! -#define MUS_ME_TAMA 388 // Awakening the Super-Ancient Pokémon -#define MUS_ME_B_BIG 389 // Slots Jackpot! -#define MUS_ME_B_SMALL 390 // Slots Victory! -#define MUS_ME_ZANNEN 391 // Too bad! -#define MUS_BD_TIME 392 // Roulette! -#define MUS_TEST1 393 // Contest Test 1 -#define MUS_TEST2 394 // Contest Test 2 -#define MUS_TEST3 395 // Contest Test 3 -#define MUS_TEST4 396 // Contest Test 4 -#define MUS_TEST 397 // Encounter! Gentleman -#define MUS_GOMACHI0 398 // Verdanturf Town -#define MUS_GOTOWN 399 // Rustboro/Mauville/Mossdeep City -#define MUS_POKECEN 400 // Pokémon Center -#define MUS_NEXTROAD 401 // Route 104 -#define MUS_GRANROAD 402 // Route 119 -#define MUS_CYCLING 403 // Cycling -#define MUS_FRIENDLY 404 // Pokémart -#define MUS_MISHIRO 405 // Littleroot Town -#define MUS_TOZAN 406 // Sky Pillar -#define MUS_GIRLEYE 407 // Encounter! Girl -#define MUS_MINAMO 408 // Lilycove City -#define MUS_ASHROAD 409 // Route 111 -#define MUS_EVENT0 410 // Help me! -#define MUS_DEEPDEEP 411 // Underwater -#define MUS_KACHI1 412 // Victory! Trainer -#define MUS_TITLE3 413 // Title Screen -#define MUS_DEMO1 414 // Opening Movie -#define MUS_GIRL_SUP 415 // Encounter! May -#define MUS_HAGESHII 416 // Encounter! Biker -#define MUS_KAKKOII 417 // Encounter! Electric Trainer -#define MUS_KAZANBAI 418 // Route 113 -#define MUS_AQA_0 419 // Encounter! Team Aqua -#define MUS_TSURETEK 420 // Follow Me! -#define MUS_BOY_SUP 421 // Encounter! Brendan -#define MUS_RAINBOW 422 // Ever Grande City -#define MUS_AYASII 423 // Encounter! Psychic -#define MUS_KACHI4 424 // Victory! Aqua/Magma Grunt -#define MUS_ROPEWAY 425 // Cable Car -#define MUS_CASINO 426 // Game Corner -#define MUS_HIGHTOWN 427 // Dewford Town -#define MUS_SAFARI 428 // Safari Zone -#define MUS_C_ROAD 429 // Victory Road -#define MUS_AJITO 430 // Aqua/Magma Hideout -#define MUS_M_BOAT 431 // Sailing -#define MUS_M_DUNGON 432 // Mt. Pyre (Inside) -#define MUS_FINECITY 433 // Slateport City -#define MUS_MACHUPI 434 // Mt. Pyre (Outside) -#define MUS_P_SCHOOL 435 // Pokémon Trainer's School -#define MUS_DENDOU 436 // You're the Champion! -#define MUS_TONEKUSA 437 // Fallarbor Town -#define MUS_MABOROSI 438 // Sealed Chamber -#define MUS_CON_FAN 439 // Obtained a Contest Ribbon! -#define MUS_CONTEST0 440 // Pokémon Contest -#define MUS_MGM0 441 // Encounter! Team Magma -#define MUS_T_BATTLE 442 // Opening Battle -#define MUS_OOAME 443 // The Flood -#define MUS_HIDERI 444 // The Drought -#define MUS_RUNECITY 445 // Sootopolis City -#define MUS_CON_K 446 // Contest/Berry Blending Results -#define MUS_EIKOU_R 447 // Hall of Fame -#define MUS_KARAKURI 448 // Trick House -#define MUS_HUTAGO 449 // Encounter! Kid -#define MUS_SITENNOU 450 // Encounter! Elite Four -#define MUS_YAMA_EYE 451 // Encounter! Hiker -#define MUS_CONLOBBY 452 // Contest Lobby -#define MUS_INTER_V 453 // Encounter! Gabby and Ty -#define MUS_DAIGO 454 // Encounter! Wallace -#define MUS_THANKFOR 455 // Credits -#define MUS_END 456 // The End -#define MUS_B_FRONTIER 457 // Battle Frontier -#define MUS_B_ARENA 458 // Battle Arena -#define MUS_ME_POINTGET 459 // Obtained Battle Points! -#define MUS_ME_TORE_EYE 460 // Registered Trainer! -#define MUS_PYRAMID 461 // Battle Pyramid -#define MUS_PYRAMID_TOP 462 // Top of the Battle Pyramid -#define MUS_B_PALACE 463 // Battle Palace -#define MUS_REKKUU_KOURIN 464 // Rayquaza Enters -#define MUS_SATTOWER 465 // Battle Tower (Emerald) -#define MUS_ME_SYMBOLGET 466 // Obtained a Frontier Symbol! -#define MUS_B_DOME 467 // Battle Dome -#define MUS_B_TUBE 468 // Battle Pike -#define MUS_B_FACTORY 469 // Battle Factory -#define MUS_VS_REKKU 470 // Battle! Legendary Pokémon -#define MUS_VS_FRONT 471 // Battle! Frontier Brain -#define MUS_VS_MEW 472 // Battle! Mew -#define MUS_B_DOME1 473 // Battle Dome Lobby -#define MUS_BATTLE27 474 // Battle! Wild Pokémon -#define MUS_BATTLE31 475 // Battle! Team Aqua/Magma -#define MUS_BATTLE20 476 // Battle! Trainer -#define MUS_BATTLE32 477 // Battle! Gym Leader -#define MUS_BATTLE33 478 // Battle! Champion -#define MUS_BATTLE36 479 // Battle! Regi Trio -#define MUS_BATTLE34 480 // Battle! Legendary Pokémon (dupe) -#define MUS_BATTLE35 481 // Battle! Rival -#define MUS_BATTLE38 482 // Battle! Elite Four -#define MUS_BATTLE30 483 // Battle! Archie/Maxie -// FRLG Music Below -#define MUS_RG_ANNAI 484 // Follow Me! -#define MUS_RG_SLOT 485 // Game Corner -#define MUS_RG_AJITO 486 // Rocket Hideout -#define MUS_RG_GYM 487 // Gym -#define MUS_RG_PURIN 488 // Jigglypuff's Song -#define MUS_RG_DEMO 489 // Opening Movie -#define MUS_RG_TITLE 490 // Title Screen -#define MUS_RG_GUREN 491 // Cinnabar Island -#define MUS_RG_SHION 492 // Lavender Town -#define MUS_RG_KAIHUKU 493 // RBY Pokémon Center Healing -#define MUS_RG_CYCLING 494 // Cycling -#define MUS_RG_ROCKET 495 // Encounter! Team Rocket -#define MUS_RG_SHOUJO 496 // Encounter! Girl -#define MUS_RG_SHOUNEN 497 // Encounter! Boy -#define MUS_RG_DENDOU 498 // You're the Champion! -#define MUS_RG_T_MORI 499 // Viridian Forest -#define MUS_RG_OTSUKIMI 500 // Mt. Moon -#define MUS_RG_POKEYASHI 501 // Pokémon Mansion -#define MUS_RG_ENDING 502 // Credits -#define MUS_RG_LOAD01 503 // Route 1 -#define MUS_RG_OPENING 504 // Route 24/Intro -#define MUS_RG_LOAD02 505 // Route 3 -#define MUS_RG_LOAD03 506 // Route 11 -#define MUS_RG_CHAMP_R 507 // Victory Road/Indigo Plateau -#define MUS_RG_VS_GYM 508 // Battle! Gym Leader/Elite Four -#define MUS_RG_VS_TORE 509 // Battle! Trainer -#define MUS_RG_VS_YASEI 510 // Battle! Wild Pokémon -#define MUS_RG_VS_LAST 511 // Battle! Champion -#define MUS_RG_MASARA 512 // Pallet Town -#define MUS_RG_KENKYU 513 // Professor Oak's Lab -#define MUS_RG_OHKIDO 514 // Professor Oak's Theme -#define MUS_RG_POKECEN 515 // Pokémon Center -#define MUS_RG_SANTOAN 516 // S.S. Anne -#define MUS_RG_NAMINORI 517 // Surfing -#define MUS_RG_P_TOWER 518 // Pokémon Tower -#define MUS_RG_SHIRUHU 519 // Silph Co. -#define MUS_RG_HANADA 520 // Cerulean/Fuschia City -#define MUS_RG_TAMAMUSI 521 // Celadon City -#define MUS_RG_WIN_TRE 522 // Victory! Trainer -#define MUS_RG_WIN_YASEI 523 // Victory! Wild Pokémon -#define MUS_RG_WIN_GYM 524 // Victory! Gym Leader -#define MUS_RG_KUCHIBA 525 // Vermillion City -#define MUS_RG_NIBI 526 // Viridian/Saffron/Pewter City -#define MUS_RG_RIVAL1 527 // Encounter! Rival -#define MUS_RG_RIVAL2 528 // Rival's Exit -#define MUS_RG_FAN2 529 // Fanfare 2 -#define MUS_RG_FAN5 530 // Obtained a Starter! -#define MUS_RG_FAN6 531 // Pokémon Caught! (Used in Emerald) -#define MUS_ME_RG_PHOTO 532 // Trainer Photo -#define MUS_RG_TITLEROG 533 // Game Freak -#define MUS_RG_GET_YASEI 534 // Pokémon Caught Victory Theme -#define MUS_RG_SOUSA 535 // Starting Tutorial -#define MUS_RG_SEKAIKAN 536 // Starting Tutorial 2 -#define MUS_RG_SEIBETU 537 // Starting Tutorial 3 -#define MUS_RG_JUMP 538 // Pokemon Jump Minigame -#define MUS_RG_UNION 539 // Union Room -#define MUS_RG_NETWORK 540 // Network Center -#define MUS_RG_OKURIMONO 541 // Mystery Gift -#define MUS_RG_KINOMIKUI 542 // Dodrio Berry Picking -#define MUS_RG_NANADUNGEON 543 // Sevii Caves/Altering Cave (Mt. Moon) -#define MUS_RG_OSHIE_TV 544 // Follow Me! -#define MUS_RG_NANASHIMA 545 // Sevii Islands Routes (Lake of Rage) -#define MUS_RG_NANAISEKI 546 // Sevii Forests (Viridian Forest) -#define MUS_RG_NANA123 547 // Sevii Islands 1-3 (Viridian/Saffron/Pewter) -#define MUS_RG_NANA45 548 // Sevii Islands 4-5 (Azalea Town) -#define MUS_RG_NANA67 549 // Sevii Islands 6-7 (Violet City) -#define MUS_RG_POKEFUE 550 // Poké Flute -#define MUS_RG_VS_DEO 551 // Battle! Deoxys -#define MUS_RG_VS_MYU2 552 // Battle! Mewtwo -#define MUS_RG_VS_DEN 553 // Battle! Legendary Birds -#define MUS_RG_EXEYE 554 // Encounter! Gym Leader -#define MUS_RG_DEOEYE 555 // Encounter! Deoxys -#define MUS_RG_T_TOWER 556 // Trainer Tower (Gym) -#define MUS_RG_SLOWMASARA 557 // Pallet Town (Hall of Fame remix) -#define MUS_RG_TVNOIZE 558 // Teachy TV -#define PH_TRAP_BLEND 559 -#define PH_TRAP_HELD 560 -#define PH_TRAP_SOLO 561 -#define PH_FACE_BLEND 562 -#define PH_FACE_HELD 563 -#define PH_FACE_SOLO 564 -#define PH_CLOTH_BLEND 565 -#define PH_CLOTH_HELD 566 -#define PH_CLOTH_SOLO 567 -#define PH_DRESS_BLEND 568 -#define PH_DRESS_HELD 569 -#define PH_DRESS_SOLO 570 -#define PH_FLEECE_BLEND 571 -#define PH_FLEECE_HELD 572 -#define PH_FLEECE_SOLO 573 -#define PH_KIT_BLEND 574 -#define PH_KIT_HELD 575 -#define PH_KIT_SOLO 576 -#define PH_PRICE_BLEND 577 -#define PH_PRICE_HELD 578 -#define PH_PRICE_SOLO 579 -#define PH_LOT_BLEND 580 -#define PH_LOT_HELD 581 -#define PH_LOT_SOLO 582 -#define PH_GOAT_BLEND 583 -#define PH_GOAT_HELD 584 -#define PH_GOAT_SOLO 585 -#define PH_THOUGHT_BLEND 586 -#define PH_THOUGHT_HELD 587 -#define PH_THOUGHT_SOLO 588 -#define PH_CHOICE_BLEND 589 -#define PH_CHOICE_HELD 590 -#define PH_CHOICE_SOLO 591 -#define PH_MOUTH_BLEND 592 -#define PH_MOUTH_HELD 593 -#define PH_MOUTH_SOLO 594 -#define PH_FOOT_BLEND 595 -#define PH_FOOT_HELD 596 -#define PH_FOOT_SOLO 597 -#define PH_GOOSE_BLEND 598 -#define PH_GOOSE_HELD 599 -#define PH_GOOSE_SOLO 600 -#define PH_STRUT_BLEND 601 -#define PH_STRUT_HELD 602 -#define PH_STRUT_SOLO 603 -#define PH_CURE_BLEND 604 -#define PH_CURE_HELD 605 -#define PH_CURE_SOLO 606 -#define PH_NURSE_BLEND 607 -#define PH_NURSE_HELD 608 -#define PH_NURSE_SOLO 609 +#define MUS_DUMMY 0 // MUS_DUMMY +#define SE_USE_ITEM 1 // SE_KAIFUKU +#define SE_PC_LOGIN 2 // SE_PC_LOGIN +#define SE_PC_OFF 3 // SE_PC_OFF +#define SE_PC_ON 4 // SE_PC_ON +#define SE_SELECT 5 // SE_SELECT +#define SE_WIN_OPEN 6 // SE_WIN_OPEN +#define SE_WALL_HIT 7 // SE_WALL_HIT +#define SE_DOOR 8 // SE_DOOR +#define SE_EXIT 9 // SE_KAIDAN +#define SE_LEDGE 10 // SE_DANSA +#define SE_BIKE_BELL 11 // SE_JITENSYA +#define SE_NOT_EFFECTIVE 12 // SE_KOUKA_L +#define SE_EFFECTIVE 13 // SE_KOUKA_M +#define SE_SUPER_EFFECTIVE 14 // SE_KOUKA_H +#define SE_BALL_OPEN 15 // SE_BOWA2 +#define SE_FAINT 16 // SE_POKE_DEAD +#define SE_FLEE 17 // SE_NIGERU +#define SE_SLIDING_DOOR 18 // SE_JIDO_DOA +#define SE_SHIP 19 // SE_NAMINORI +#define SE_BANG 20 // SE_BAN +#define SE_PIN 21 // SE_PIN (General "good", commonly for "!") +#define SE_BOO 22 // SE_BOO (General "bad") +#define SE_BALL 23 // SE_BOWA (Giving Poké Ball to nurse, Poké Ball shake, etc) +#define SE_CONTEST_PLACE 24 // SE_JYUNI +#define SE_A 25 // SE_A (Bard sounds) +#define SE_I 26 // SE_I +#define SE_U 27 // SE_U +#define SE_E 28 // SE_E +#define SE_O 29 // SE_O +#define SE_N 30 // SE_N +#define SE_SUCCESS 31 // SE_SEIKAI +#define SE_FAILURE 32 // SE_HAZURE +#define SE_EXP 33 // SE_EXP +#define SE_BIKE_HOP 34 // SE_JITE_PYOKO +#define SE_SWITCH 35 // SE_MU_PACHI +#define SE_CLICK 36 // SE_TK_KASYA +#define SE_FU_ZAKU 37 // SE_FU_ZAKU (Unknown purpose, unused) +#define SE_CONTEST_CONDITION_LOSE 38 // SE_FU_ZAKU2 +#define SE_LAVARIDGE_FALL_WARP 39 // SE_FU_ZUZUZU +#define SE_ICE_STAIRS 40 // SE_RU_GASHIN +#define SE_ICE_BREAK 41 // SE_RU_GASYAN +#define SE_ICE_CRACK 42 // SE_RU_BARI +#define SE_FALL 43 // SE_RU_HYUU +#define SE_UNLOCK 44 // SE_KI_GASYAN +#define SE_WARP_IN 45 // SE_TK_WARPIN +#define SE_WARP_OUT 46 // SE_TK_WARPOUT +#define SE_REPEL 47 // SE_TU_SAA +#define SE_ROTATING_GATE 48 // SE_HI_TURUN +#define SE_TRUCK_MOVE 49 // SE_TRACK_MOVE +#define SE_TRUCK_STOP 50 // SE_TRACK_STOP +#define SE_TRUCK_UNLOAD 51 // SE_TRACK_HAIKI +#define SE_TRUCK_DOOR 52 // SE_TRACK_DOOR +#define SE_BERRY_BLENDER 53 // SE_MOTER +#define SE_CARD 54 // SE_CARD (Unused, different from the RS card SE) +#define SE_SAVE 55 // SE_SAVE +#define SE_BALL_BOUNCE_1 56 // SE_KON +#define SE_BALL_BOUNCE_2 57 // SE_KON2 +#define SE_BALL_BOUNCE_3 58 // SE_KON3 +#define SE_BALL_BOUNCE_4 59 // SE_KON4 +#define SE_BALL_TRADE 60 // SE_SUIKOMU +#define SE_BALL_THROW 61 // SE_NAGERU +#define SE_NOTE_C 62 // SE_TOY_C +#define SE_NOTE_D 63 // SE_TOY_D +#define SE_NOTE_E 64 // SE_TOY_E +#define SE_NOTE_F 65 // SE_TOY_F +#define SE_NOTE_G 66 // SE_TOY_G +#define SE_NOTE_A 67 // SE_TOY_A +#define SE_NOTE_B 68 // SE_TOY_B +#define SE_NOTE_C_HIGH 69 // SE_TOY_C1 +#define SE_PUDDLE 70 // SE_MIZU +#define SE_BRIDGE_WALK 71 // SE_HASHI +#define SE_ITEMFINDER 72 // SE_DAUGI +#define SE_DING_DONG 73 // SE_PINPON +#define SE_BALLOON_RED 74 // SE_FUUSEN1 +#define SE_BALLOON_BLUE 75 // SE_FUUSEN2 +#define SE_BALLOON_YELLOW 76 // SE_FUUSEN3 +#define SE_BREAKABLE_DOOR 77 // SE_TOY_KABE +#define SE_MUD_BALL 78 // SE_TOY_DANGO +#define SE_FIELD_POISON 79 // SE_DOKU +#define SE_ESCALATOR 80 // SE_ESUKA +#define SE_THUNDERSTORM 81 // SE_T_AME +#define SE_THUNDERSTORM_STOP 82 // SE_T_AME_E +#define SE_DOWNPOUR 83 // SE_T_OOAME +#define SE_DOWNPOUR_STOP 84 // SE_T_OOAME_E +#define SE_RAIN 85 // SE_T_KOAME +#define SE_RAIN_STOP 86 // SE_T_KOAME_E +#define SE_THUNDER 87 // SE_T_KAMI +#define SE_THUNDER2 88 // SE_T_KAMI2 +#define SE_ELEVATOR 89 // SE_ELEBETA +#define SE_LOW_HEALTH 90 // SE_HINSI +#define SE_EXP_MAX 91 // SE_EXPMAX +#define SE_ROULETTE_BALL 92 // SE_TAMAKORO +#define SE_ROULETTE_BALL2 93 // SE_TAMAKORO_E +#define SE_TAILLOW_WING_FLAP 94 // SE_BASABASA +#define SE_SHOP 95 // SE_REGI +#define SE_CONTEST_HEART 96 // SE_C_GAJI +#define SE_CONTEST_CURTAIN_RISE 97 // SE_C_MAKU_U +#define SE_CONTEST_CURTAIN_FALL 98 // SE_C_MAKU_D +#define SE_CONTEST_ICON_CHANGE 99 // SE_C_PASI +#define SE_CONTEST_ICON_CLEAR 100 // SE_C_SYU +#define SE_CONTEST_MONS_TURN 101 // SE_C_PIKON +#define SE_SHINY 102 // SE_REAPOKE +#define SE_INTRO_BLAST 103 // SE_OP_BASYU +#define SE_MUGSHOT 104 // SE_BT_START +#define SE_APPLAUSE 105 // SE_DENDOU +#define SE_VEND 106 // SE_JIHANKI +#define SE_ORB 107 // SE_TAMA +#define SE_DEX_SCROLL 108 // SE_Z_SCROLL +#define SE_DEX_PAGE 109 // SE_Z_PAGE +#define SE_POKENAV_ON 110 // SE_PN_ON +#define SE_POKENAV_OFF 111 // SE_PN_OFF +#define SE_DEX_SEARCH 112 // SE_Z_SEARCH +#define SE_EGG_HATCH 113 // SE_TAMAGO +#define SE_BALL_TRAY_ENTER 114 // SE_TB_START +#define SE_BALL_TRAY_BALL 115 // SE_TB_KON +#define SE_BALL_TRAY_EXIT 116 // SE_TB_KARA +#define SE_GLASS_FLUTE 117 // SE_BIDORO +// Move SFX +#define SE_M_THUNDERBOLT 118 // SE_W085 +#define SE_M_THUNDERBOLT2 119 // SE_W085B +#define SE_M_HARDEN 120 // SE_W231 +#define SE_M_NIGHTMARE 121 // SE_W171 +#define SE_M_VITAL_THROW 122 // SE_W233 +#define SE_M_VITAL_THROW2 123 // SE_W233B +#define SE_M_BUBBLE 124 // SE_W145 +#define SE_M_BUBBLE2 125 // SE_W145B +#define SE_M_BUBBLE3 126 // SE_W145C +#define SE_M_RAIN_DANCE 127 // SE_W240 +#define SE_M_CUT 128 // SE_W015 +#define SE_M_STRING_SHOT 129 // SE_W081 +#define SE_M_STRING_SHOT2 130 // SE_W081B +#define SE_M_ROCK_THROW 131 // SE_W088 +#define SE_M_GUST 132 // SE_W016 +#define SE_M_GUST2 133 // SE_W016B +#define SE_M_DOUBLE_SLAP 134 // SE_W003 +#define SE_M_DOUBLE_TEAM 135 // SE_W104 +#define SE_M_RAZOR_WIND 136 // SE_W013 +#define SE_M_ICY_WIND 137 // SE_W196 +#define SE_M_THUNDER_WAVE 138 // SE_W086 +#define SE_M_COMET_PUNCH 139 // SE_W004 +#define SE_M_MEGA_KICK 140 // SE_W025 +#define SE_M_MEGA_KICK2 141 // SE_W025B +#define SE_M_CRABHAMMER 142 // SE_W152 +#define SE_M_JUMP_KICK 143 // SE_W026 +#define SE_M_FLAME_WHEEL 144 // SE_W172 +#define SE_M_FLAME_WHEEL2 145 // SE_W172B +#define SE_M_FLAMETHROWER 146 // SE_W053 +#define SE_M_FIRE_PUNCH 147 // SE_W007 +#define SE_M_TOXIC 148 // SE_W092 +#define SE_M_SACRED_FIRE 149 // SE_W221 +#define SE_M_SACRED_FIRE2 150 // SE_W221B +#define SE_M_EMBER 151 // SE_W052 +#define SE_M_TAKE_DOWN 152 // SE_W036 +#define SE_M_BLIZZARD 153 // SE_W059 +#define SE_M_BLIZZARD2 154 // SE_W059B +#define SE_M_SCRATCH 155 // SE_W010 +#define SE_M_VICEGRIP 156 // SE_W011 +#define SE_M_WING_ATTACK 157 // SE_W017 +#define SE_M_FLY 158 // SE_W019 +#define SE_M_SAND_ATTACK 159 // SE_W028 +#define SE_M_RAZOR_WIND2 160 // SE_W013B +#define SE_M_BITE 161 // SE_W044 +#define SE_M_HEADBUTT 162 // SE_W029 +#define SE_M_SURF 163 // SE_W057 +#define SE_M_HYDRO_PUMP 164 // SE_W056 +#define SE_M_WHIRLPOOL 165 // SE_W250 +#define SE_M_HORN_ATTACK 166 // SE_W030 +#define SE_M_TAIL_WHIP 167 // SE_W039 +#define SE_M_MIST 168 // SE_W054 +#define SE_M_POISON_POWDER 169 // SE_W077 +#define SE_M_BIND 170 // SE_W020 +#define SE_M_DRAGON_RAGE 171 // SE_W082 +#define SE_M_SING 172 // SE_W047 +#define SE_M_PERISH_SONG 173 // SE_W195 +#define SE_M_PAY_DAY 174 // SE_W006 +#define SE_M_DIG 175 // SE_W091 +#define SE_M_DIZZY_PUNCH 176 // SE_W146 +#define SE_M_SELF_DESTRUCT 177 // SE_W120 +#define SE_M_EXPLOSION 178 // SE_W153 +#define SE_M_ABSORB_2 179 // SE_W071B +#define SE_M_ABSORB 180 // SE_W071 +#define SE_M_SCREECH 181 // SE_W103 +#define SE_M_BUBBLE_BEAM 182 // SE_W062 +#define SE_M_BUBBLE_BEAM2 183 // SE_W062B +#define SE_M_SUPERSONIC 184 // SE_W048 +#define SE_M_BELLY_DRUM 185 // SE_W187 +#define SE_M_METRONOME 186 // SE_W118 +#define SE_M_BONEMERANG 187 // SE_W155 +#define SE_M_LICK 188 // SE_W122 +#define SE_M_PSYBEAM 189 // SE_W060 +#define SE_M_FAINT_ATTACK 190 // SE_W185 +#define SE_M_SWORDS_DANCE 191 // SE_W014 +#define SE_M_LEER 192 // SE_W043 +#define SE_M_SWAGGER 193 // SE_W207 +#define SE_M_SWAGGER2 194 // SE_W207B +#define SE_M_HEAL_BELL 195 // SE_W215 +#define SE_M_CONFUSE_RAY 196 // SE_W109 +#define SE_M_SNORE 197 // SE_W173 +#define SE_M_BRICK_BREAK 198 // SE_W280 +#define SE_M_GIGA_DRAIN 199 // SE_W202 +#define SE_M_PSYBEAM2 200 // SE_W060B +#define SE_M_SOLAR_BEAM 201 // SE_W076 +#define SE_M_PETAL_DANCE 202 // SE_W080 +#define SE_M_TELEPORT 203 // SE_W100 +#define SE_M_MINIMIZE 204 // SE_W107 +#define SE_M_SKETCH 205 // SE_W166 +#define SE_M_SWIFT 206 // SE_W129 +#define SE_M_REFLECT 207 // SE_W115 +#define SE_M_BARRIER 208 // SE_W112 +#define SE_M_DETECT 209 // SE_W197 +#define SE_M_LOCK_ON 210 // SE_W199 +#define SE_M_MOONLIGHT 211 // SE_W236 +#define SE_M_CHARM 212 // SE_W204 +#define SE_M_CHARGE 213 // SE_W268 +#define SE_M_STRENGTH 214 // SE_W070 +#define SE_M_HYPER_BEAM 215 // SE_W063 +#define SE_M_WATERFALL 216 // SE_W127 +#define SE_M_REVERSAL 217 // SE_W179 +#define SE_M_ACID_ARMOR 218 // SE_W151 +#define SE_M_SANDSTORM 219 // SE_W201 +#define SE_M_TRI_ATTACK 220 // SE_W161 +#define SE_M_TRI_ATTACK2 221 // SE_W161B +#define SE_M_ENCORE 222 // SE_W227 +#define SE_M_ENCORE2 223 // SE_W227B +#define SE_M_BATON_PASS 224 // SE_W226 +#define SE_M_MILK_DRINK 225 // SE_W208 +#define SE_M_ATTRACT 226 // SE_W213 +#define SE_M_ATTRACT2 227 // SE_W213B +#define SE_M_MORNING_SUN 228 // SE_W234 +#define SE_M_FLATTER 229 // SE_W260 +#define SE_M_SAND_TOMB 230 // SE_W328 +#define SE_M_GRASSWHISTLE 231 // SE_W320 +#define SE_M_SPIT_UP 232 // SE_W255 +#define SE_M_DIVE 233 // SE_W291 +#define SE_M_EARTHQUAKE 234 // SE_W089 +#define SE_M_TWISTER 235 // SE_W239 +#define SE_M_SWEET_SCENT 236 // SE_W230 +#define SE_M_YAWN 237 // SE_W281 +#define SE_M_SKY_UPPERCUT 238 // SE_W327 +#define SE_M_STAT_INCREASE 239 // SE_W287 +#define SE_M_HEAT_WAVE 240 // SE_W257 +#define SE_M_UPROAR 241 // SE_W253 +#define SE_M_HAIL 242 // SE_W258 +#define SE_M_COSMIC_POWER 243 // SE_W322 +#define SE_M_TEETER_DANCE 244 // SE_W298 +#define SE_M_STAT_DECREASE 245 // SE_W287B +#define SE_M_HAZE 246 // SE_W114 +#define SE_M_HYPER_BEAM2 247 // SE_W063B +// FRLG SFX +#define SE_RG_DOOR 248 // SE_RG_W_DOOR +#define SE_RG_CARD_FLIP 249 // SE_RG_CARD1 +#define SE_RG_CARD_FLIPPING 250 // SE_RG_CARD2 +#define SE_RG_CARD_OPEN 251 // SE_RG_CARD3 +#define SE_RG_BAG_CURSOR 252 // SE_RG_BAG1 +#define SE_RG_BAG_POCKET 253 // SE_RG_BAG2 +#define SE_RG_BALL_CLICK 254 // SE_RG_GETTING +#define SE_RG_SHOP 255 // SE_RG_SHOP +#define SE_RG_SS_ANNE_HORN 256 // SE_RG_KITEKI +#define SE_RG_HELP_OPEN 257 // SE_RG_HELP_OP +#define SE_RG_HELP_CLOSE 258 // SE_RG_HELP_CL +#define SE_RG_HELP_ERROR 259 // SE_RG_HELP_NG +#define SE_RG_DEOXYS_MOVE 260 // SE_RG_DEOMOV +#define SE_RG_POKE_JUMP_SUCCESS 261 // SE_RG_EXCELLENT +#define SE_RG_POKE_JUMP_FAILURE 262 // SE_RG_NAWAMISS +// New Emerald SFX +#define SE_POKENAV_CALL 263 // SE_TOREEYE +#define SE_POKENAV_HANG_UP 264 // SE_TOREOFF +#define SE_ARENA_TIMEUP1 265 // SE_HANTEI1 +#define SE_ARENA_TIMEUP2 266 // SE_HANTEI2 +#define SE_PIKE_CURTAIN_CLOSE 267 // SE_CURTAIN +#define SE_PIKE_CURTAIN_OPEN 268 // SE_CURTAIN1 +#define SE_SUDOWOODO_SHAKE 269 // SE_USSOKI -#define MUS_ROUTE_118 0x7FFF // map is split into 2 music sections. controlled by GetCurrLocationDefaultMusic(). +// Music +#define MUS_LITTLEROOT_TEST 350 // MUS_TETSUJI +#define MUS_GSC_ROUTE38 351 // MUS_FIELD13 +#define MUS_CAUGHT 352 // MUS_KACHI22 +#define MUS_VICTORY_WILD 353 // MUS_KACHI2 +#define MUS_VICTORY_GYM_LEADER 354 // MUS_KACHI3 +#define MUS_VICTORY_LEAGUE 355 // MUS_KACHI5 +#define MUS_C_COMM_CENTER 356 // MUS_PCC +#define MUS_GSC_PEWTER 357 // MUS_NIBI +#define MUS_C_VS_LEGEND_BEAST 358 // MUS_SUIKUN +#define MUS_ROUTE101 359 // MUS_DOORO1 +#define MUS_ROUTE110 360 // MUS_DOORO_X1 +#define MUS_ROUTE120 361 // MUS_DOORO_X3 +#define MUS_PETALBURG 362 // MUS_MACHI_S2 +#define MUS_OLDALE 363 // MUS_MACHI_S4 +#define MUS_GYM 364 // MUS_GIM +#define MUS_SURF 365 // MUS_NAMINORI +#define MUS_PETALBURG_WOODS 366 // MUS_DAN01 +#define MUS_LEVEL_UP 367 // MUS_FANFA1 +#define MUS_HEAL 368 // MUS_ME_ASA +#define MUS_OBTAIN_BADGE 369 // MUS_ME_BACHI +#define MUS_OBTAIN_ITEM 370 // MUS_FANFA4 +#define MUS_EVOLVED 371 // MUS_FANFA5 +#define MUS_OBTAIN_TMHM 372 // MUS_ME_WAZA +#define MUS_LILYCOVE_MUSEUM 373 // MUS_BIJYUTU +#define MUS_ROUTE122 374 // MUS_DOORO_X4 +#define MUS_OCEANIC_MUSEUM 375 // MUS_FUNE_KAN +#define MUS_EVOLUTION_INTRO 376 // MUS_ME_SHINKA +#define MUS_EVOLUTION 377 // MUS_SHINKA +#define MUS_MOVE_DELETED 378 // MUS_ME_WASURE +#define MUS_ENCOUNTER_GIRL 379 // MUS_SYOUJOEYE +#define MUS_ENCOUNTER_MALE 380 // MUS_BOYEYE +#define MUS_ABANDONED_SHIP 381 // MUS_DAN02 +#define MUS_FORTREE 382 // MUS_MACHI_S3 +#define MUS_BIRCH_LAB 383 // MUS_ODAMAKI +#define MUS_B_TOWER_RS 384 // MUS_B_TOWER +#define MUS_ENCOUNTER_SWIMMER 385 // MUS_SWIMEYE +#define MUS_CAVE_OF_ORIGIN 386 // MUS_DAN03 +#define MUS_OBTAIN_BERRY 387 // MUS_ME_KINOMI +#define MUS_AWAKEN_LEGEND 388 // MUS_ME_TAMA +#define MUS_SLOTS_JACKPOT 389 // MUS_ME_B_BIG +#define MUS_SLOTS_WIN 390 // MUS_ME_B_SMALL +#define MUS_TOO_BAD 391 // MUS_ME_ZANNEN +#define MUS_ROULETTE 392 // MUS_BD_TIME +#define MUS_LINK_CONTEST_P1 393 // MUS_TEST1 +#define MUS_LINK_CONTEST_P2 394 // MUS_TEST2 +#define MUS_LINK_CONTEST_P3 395 // MUS_TEST3 +#define MUS_LINK_CONTEST_P4 396 // MUS_TEST4 +#define MUS_ENCOUNTER_RICH 397 // MUS_TEST +#define MUS_VERDANTURF 398 // MUS_GOMACHI0 +#define MUS_RUSTBORO 399 // MUS_GOTOWN +#define MUS_POKE_CENTER 400 // MUS_POKECEN +#define MUS_ROUTE104 401 // MUS_NEXTROAD +#define MUS_ROUTE119 402 // MUS_GRANROAD +#define MUS_CYCLING 403 // MUS_CYCLING +#define MUS_POKE_MART 404 // MUS_FRIENDLY +#define MUS_LITTLEROOT 405 // MUS_MISHIRO +#define MUS_MT_CHIMNEY 406 // MUS_TOZAN +#define MUS_ENCOUNTER_FEMALE 407 // MUS_GIRLEYE +#define MUS_LILYCOVE 408 // MUS_MINAMO +#define MUS_ROUTE111 409 // MUS_ASHROAD +#define MUS_HELP 410 // MUS_EVENT0 +#define MUS_UNDERWATER 411 // MUS_DEEPDEEP +#define MUS_VICTORY_TRAINER 412 // MUS_KACHI1 +#define MUS_TITLE 413 // MUS_TITLE3 +#define MUS_INTRO 414 // MUS_DEMO1 +#define MUS_ENCOUNTER_MAY 415 // MUS_GIRL_SUP +#define MUS_ENCOUNTER_INTENSE 416 // MUS_HAGESHII +#define MUS_ENCOUNTER_COOL 417 // MUS_KAKKOII +#define MUS_ROUTE113 418 // MUS_KAZANBAI +#define MUS_ENCOUNTER_AQUA 419 // MUS_AQA_0 +#define MUS_FOLLOW_ME 420 // MUS_TSURETEK +#define MUS_ENCOUNTER_BRENDAN 421 // MUS_BOY_SUP +#define MUS_EVER_GRANDE 422 // MUS_RAINBOW +#define MUS_ENCOUNTER_SUSPICIOUS 423 // MUS_AYASII +#define MUS_VICTORY_AQUA_MAGMA 424 // MUS_KACHI4 +#define MUS_CABLE_CAR 425 // MUS_ROPEWAY +#define MUS_GAME_CORNER 426 // MUS_CASINO +#define MUS_DEWFORD 427 // MUS_HIGHTOWN +#define MUS_SAFARI_ZONE 428 // MUS_SAFARI +#define MUS_VICTORY_ROAD 429 // MUS_C_ROAD +#define MUS_AQUA_MAGMA_HIDEOUT 430 // MUS_AJITO +#define MUS_SAILING 431 // MUS_M_BOAT +#define MUS_MT_PYRE 432 // MUS_M_DUNGON +#define MUS_SLATEPORT 433 // MUS_FINECITY +#define MUS_MT_PYRE_EXTERIOR 434 // MUS_MACHUPI +#define MUS_SCHOOL 435 // MUS_P_SCHOOL +#define MUS_HALL_OF_FAME 436 // MUS_DENDOU +#define MUS_FALLARBOR 437 // MUS_TONEKUSA +#define MUS_SEALED_CHAMBER 438 // MUS_MABOROSI +#define MUS_CONTEST_WINNER 439 // MUS_CON_FAN +#define MUS_CONTEST 440 // MUS_CONTEST0 +#define MUS_ENCOUNTER_MAGMA 441 // MUS_MGM0 +#define MUS_INTRO_BATTLE 442 // MUS_T_BATTLE +#define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME (Replaces MUS_WEATHER_KYOGRE from R/S) +#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI (Unused, from R/S) +#define MUS_SOOTOPOLIS 445 // MUS_RUNECITY +#define MUS_CONTEST_RESULTS 446 // MUS_CON_K +#define MUS_HALL_OF_FAME_ROOM 447 // MUS_EIKOU_R +#define MUS_TRICK_HOUSE 448 // MUS_KARAKURI +#define MUS_ENCOUNTER_TWINS 449 // MUS_HUTAGO +#define MUS_ENCOUNTER_ELITE_FOUR 450 // MUS_SITENNOU +#define MUS_ENCOUNTER_HIKER 451 // MUS_YAMA_EYE +#define MUS_CONTEST_LOBBY 452 // MUS_CONLOBBY +#define MUS_ENCOUNTER_INTERVIEWER 453 // MUS_INTER_V +#define MUS_ENCOUNTER_CHAMPION 454 // MUS_DAIGO +#define MUS_CREDITS 455 // MUS_THANKFOR +#define MUS_END 456 // MUS_END +#define MUS_B_FRONTIER 457 // MUS_B_FRONTIER +#define MUS_B_ARENA 458 // MUS_B_ARENA +#define MUS_OBTAIN_B_POINTS 459 // MUS_ME_POINTGET +#define MUS_REGISTER_MATCH_CALL 460 // MUS_ME_TORE_EYE +#define MUS_B_PYRAMID 461 // MUS_PYRAMID +#define MUS_B_PYRAMID_TOP 462 // MUS_PYRAMID_TOP +#define MUS_B_PALACE 463 // MUS_B_PALACE +#define MUS_RAYQUAZA_APPEARS 464 // MUS_REKKUU_KOURIN +#define MUS_B_TOWER 465 // MUS_SATTOWER +#define MUS_OBTAIN_SYMBOL 466 // MUS_ME_SYMBOLGET +#define MUS_B_DOME 467 // MUS_B_DOME +#define MUS_B_PIKE 468 // MUS_B_TUBE +#define MUS_B_FACTORY 469 // MUS_B_FACTORY +#define MUS_VS_RAYQUAZA 470 // MUS_VS_REKKU (Identical to MUS_VS_KYOGRE_GROUDON) +#define MUS_VS_FRONTIER_BRAIN 471 // MUS_VS_FRONT +#define MUS_VS_MEW 472 // MUS_VS_MEW +#define MUS_B_DOME_LOBBY 473 // MUS_B_DOME1 +#define MUS_VS_WILD 474 // MUS_BATTLE27 +#define MUS_VS_AQUA_MAGMA 475 // MUS_BATTLE31 +#define MUS_VS_TRAINER 476 // MUS_BATTLE20 +#define MUS_VS_GYM_LEADER 477 // MUS_BATTLE32 +#define MUS_VS_CHAMPION 478 // MUS_BATTLE33 +#define MUS_VS_REGI 479 // MUS_BATTLE36 +#define MUS_VS_KYOGRE_GROUDON 480 // MUS_BATTLE34 +#define MUS_VS_RIVAL 481 // MUS_BATTLE35 +#define MUS_VS_ELITE_FOUR 482 // MUS_BATTLE38 +#define MUS_VS_AQUA_MAGMA_LEADER 483 // MUS_BATTLE30 +// FRLG Music +#define MUS_RG_FOLLOW_ME 484 // MUS_RG_ANNAI +#define MUS_RG_GAME_CORNER 485 // MUS_RG_SLOT +#define MUS_RG_ROCKET_HIDEOUT 486 // MUS_RG_AJITO +#define MUS_RG_GYM 487 // MUS_RG_GYM +#define MUS_RG_JIGGLYPUFF 488 // MUS_RG_PURIN +#define MUS_RG_INTRO_FIGHT 489 // MUS_RG_DEMO +#define MUS_RG_TITLE 490 // MUS_RG_TITLE +#define MUS_RG_CINNABAR 491 // MUS_RG_GUREN +#define MUS_RG_LAVENDER 492 // MUS_RG_SHION +#define MUS_RG_HEAL 493 // MUS_RG_KAIHUKU +#define MUS_RG_CYCLING 494 // MUS_RG_CYCLING +#define MUS_RG_ENCOUNTER_ROCKET 495 // MUS_RG_ROCKET +#define MUS_RG_ENCOUNTER_GIRL 496 // MUS_RG_SHOUJO +#define MUS_RG_ENCOUNTER_BOY 497 // MUS_RG_SHOUNEN +#define MUS_RG_HALL_OF_FAME 498 // MUS_RG_DENDOU +#define MUS_RG_VIRIDIAN_FOREST 499 // MUS_RG_T_MORI +#define MUS_RG_MT_MOON 500 // MUS_RG_OTSUKIMI +#define MUS_RG_POKE_MANSION 501 // MUS_RG_POKEYASHI +#define MUS_RG_CREDITS 502 // MUS_RG_ENDING +#define MUS_RG_ROUTE1 503 // MUS_RG_LOAD01 +#define MUS_RG_ROUTE24 504 // MUS_RG_OPENING +#define MUS_RG_ROUTE3 505 // MUS_RG_LOAD02 +#define MUS_RG_ROUTE11 506 // MUS_RG_LOAD03 +#define MUS_RG_VICTORY_ROAD 507 // MUS_RG_CHAMP_R +#define MUS_RG_VS_GYM_LEADER 508 // MUS_RG_VS_GYM +#define MUS_RG_VS_TRAINER 509 // MUS_RG_VS_TORE +#define MUS_RG_VS_WILD 510 // MUS_RG_VS_YASEI +#define MUS_RG_VS_CHAMPION 511 // MUS_RG_VS_LAST +#define MUS_RG_PALLET 512 // MUS_RG_MASARA +#define MUS_RG_OAK_LAB 513 // MUS_RG_KENKYU +#define MUS_RG_OAK 514 // MUS_RG_OHKIDO +#define MUS_RG_POKE_CENTER 515 // MUS_RG_POKECEN +#define MUS_RG_SS_ANNE 516 // MUS_RG_SANTOAN +#define MUS_RG_SURF 517 // MUS_RG_NAMINORI +#define MUS_RG_POKE_TOWER 518 // MUS_RG_P_TOWER +#define MUS_RG_SILPH 519 // MUS_RG_SHIRUHU +#define MUS_RG_FUCHSIA 520 // MUS_RG_HANADA +#define MUS_RG_CELADON 521 // MUS_RG_TAMAMUSI +#define MUS_RG_VICTORY_TRAINER 522 // MUS_RG_WIN_TRE (Identical to MUS_VICTORY_TRAINER) +#define MUS_RG_VICTORY_WILD 523 // MUS_RG_WIN_YASEI (Identical to MUS_VICTORY_WILD) +#define MUS_RG_VICTORY_GYM_LEADER 524 // MUS_RG_WIN_GYM (Identical to MUS_VICTORY_GYM_LEADER) +#define MUS_RG_VERMILLION 525 // MUS_RG_KUCHIBA +#define MUS_RG_PEWTER 526 // MUS_RG_NIBI +#define MUS_RG_ENCOUNTER_RIVAL 527 // MUS_RG_RIVAL1 +#define MUS_RG_RIVAL_EXIT 528 // MUS_RG_RIVAL2 +#define MUS_RG_DEX_RATING 529 // MUS_RG_FAN2 +#define MUS_RG_OBTAIN_KEY_ITEM 530 // MUS_RG_FAN5 +#define MUS_RG_CAUGHT_INTRO 531 // MUS_RG_FAN6 +#define MUS_RG_PHOTO 532 // MUS_ME_RG_PHOTO +#define MUS_RG_GAME_FREAK 533 // MUS_RG_TITLEROG +#define MUS_RG_CAUGHT 534 // MUS_RG_GET_YASEI +#define MUS_RG_NEW_GAME_INSTRUCT 535 // MUS_RG_SOUSA +#define MUS_RG_NEW_GAME_INTRO 536 // MUS_RG_SEKAIKAN +#define MUS_RG_NEW_GAME_EXIT 537 // MUS_RG_SEIBETU +#define MUS_RG_POKE_JUMP 538 // MUS_RG_JUMP +#define MUS_RG_UNION_ROOM 539 // MUS_RG_UNION +#define MUS_RG_NET_CENTER 540 // MUS_RG_NETWORK +#define MUS_RG_MYSTERY_GIFT 541 // MUS_RG_OKURIMONO +#define MUS_RG_BERRY_PICK 542 // MUS_RG_KINOMIKUI +#define MUS_RG_SEVII_CAVE 543 // MUS_RG_NANADUNGEON (Identical to MUS_RG_MT_MOON) +#define MUS_RG_TEACHY_TV_SHOW 544 // MUS_RG_OSHIE_TV (Identical to MUS_RG_FOLLOW_ME) +#define MUS_RG_SEVII_ROUTE 545 // MUS_RG_NANASHIMA +#define MUS_RG_SEVII_DUNGEON 546 // MUS_RG_NANAISEKI (Identical to MUS_RG_VIRIDIAN_FOREST) +#define MUS_RG_SEVII_123 547 // MUS_RG_NANA123 (Identical to MUS_RG_PEWTER) +#define MUS_RG_SEVII_45 548 // MUS_RG_NANA45 +#define MUS_RG_SEVII_67 549 // MUS_RG_NANA67 +#define MUS_RG_POKE_FLUTE 550 // MUS_RG_POKEFUE +#define MUS_RG_VS_DEOXYS 551 // MUS_RG_VS_DEO +#define MUS_RG_VS_MEWTWO 552 // MUS_RG_VS_MYU2 +#define MUS_RG_VS_LEGEND 553 // MUS_RG_VS_DEN +#define MUS_RG_ENCOUNTER_GYM_LEADER 554 // MUS_RG_EXEYE +#define MUS_RG_ENCOUNTER_DEOXYS 555 // MUS_RG_DEOEYE +#define MUS_RG_TRAINER_TOWER 556 // MUS_RG_T_TOWER +#define MUS_RG_SLOW_PALLET 557 // MUS_RG_SLOWMASARA +#define MUS_RG_TEACHY_TV_MENU 558 // MUS_RG_TVNOIZE -#define MUS_NONE 0xFFFF +#define PH_TRAP_BLEND 559 +#define PH_TRAP_HELD 560 +#define PH_TRAP_SOLO 561 +#define PH_FACE_BLEND 562 +#define PH_FACE_HELD 563 +#define PH_FACE_SOLO 564 +#define PH_CLOTH_BLEND 565 +#define PH_CLOTH_HELD 566 +#define PH_CLOTH_SOLO 567 +#define PH_DRESS_BLEND 568 +#define PH_DRESS_HELD 569 +#define PH_DRESS_SOLO 570 +#define PH_FLEECE_BLEND 571 +#define PH_FLEECE_HELD 572 +#define PH_FLEECE_SOLO 573 +#define PH_KIT_BLEND 574 +#define PH_KIT_HELD 575 +#define PH_KIT_SOLO 576 +#define PH_PRICE_BLEND 577 +#define PH_PRICE_HELD 578 +#define PH_PRICE_SOLO 579 +#define PH_LOT_BLEND 580 +#define PH_LOT_HELD 581 +#define PH_LOT_SOLO 582 +#define PH_GOAT_BLEND 583 +#define PH_GOAT_HELD 584 +#define PH_GOAT_SOLO 585 +#define PH_THOUGHT_BLEND 586 +#define PH_THOUGHT_HELD 587 +#define PH_THOUGHT_SOLO 588 +#define PH_CHOICE_BLEND 589 +#define PH_CHOICE_HELD 590 +#define PH_CHOICE_SOLO 591 +#define PH_MOUTH_BLEND 592 +#define PH_MOUTH_HELD 593 +#define PH_MOUTH_SOLO 594 +#define PH_FOOT_BLEND 595 +#define PH_FOOT_HELD 596 +#define PH_FOOT_SOLO 597 +#define PH_GOOSE_BLEND 598 +#define PH_GOOSE_HELD 599 +#define PH_GOOSE_SOLO 600 +#define PH_STRUT_BLEND 601 +#define PH_STRUT_HELD 602 +#define PH_STRUT_SOLO 603 +#define PH_CURE_BLEND 604 +#define PH_CURE_HELD 605 +#define PH_CURE_SOLO 606 +#define PH_NURSE_BLEND 607 +#define PH_NURSE_HELD 608 +#define PH_NURSE_SOLO 609 + +#define MUS_ROUTE118 0x7FFF // Map is split into 2 music sections. controlled by GetCurrLocationDefaultMusic(). + +#define MUS_NONE 0xFFFF #endif // GUARD_CONSTANTS_SONGS_H diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h index afbcd4ace..27357e99c 100644 --- a/include/constants/trainer_hill.h +++ b/include/constants/trainer_hill.h @@ -22,7 +22,7 @@ #define TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS 6 #define TRAINER_HILL_FUNC_GET_CHALLENGE_TIME 7 #define TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED 8 -#define TRAINER_HILL_FUNC_CLEAR_RESULT 9 +#define TRAINER_HILL_FUNC_GET_IN_EREADER_MODE 9 #define TRAINER_HILL_FUNC_IN_CHALLENGE 10 #define TRAINER_HILL_FUNC_POST_BATTLE_TEXT 11 #define TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS 12 diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 541b131ca..3f22c7cef 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -13,7 +13,7 @@ #define TRAINER_PLAYER 1023 #define TRAINER_SECRET_BASE 1024 #define TRAINER_LINK_OPPONENT 2048 -#define TRAINER_OPPONENT_C00 3072 +#define TRAINER_UNION_ROOM 3072 #define TRAINER_STEVEN_PARTNER 3075 #define TRAINER_PIC_HIKER 0 diff --git a/include/constants/tv.h b/include/constants/tv.h index 6f686f727..4b5f9115b 100644 --- a/include/constants/tv.h +++ b/include/constants/tv.h @@ -133,5 +133,59 @@ #define NUM_SECRET_BASE_FLAGS 32 // by definition, bitfield of 2 u16s +// TV Show states for Pokemon Contest Live Updates +#define CONTESTLIVE_STATE_INTRO 0 +#define CONTESTLIVE_STATE_WON_BOTH_ROUNDS 1 +#define CONTESTLIVE_STATE_BETTER_ROUND2 2 +#define CONTESTLIVE_STATE_EQUAL_ROUNDS 3 +#define CONTESTLIVE_STATE_BETTER_ROUND1 4 +#define CONTESTLIVE_STATE_GOT_NERVOUS 5 +#define CONTESTLIVE_STATE_STARTLED_OTHER 6 +#define CONTESTLIVE_STATE_USED_COMBO 7 +#define CONTESTLIVE_STATE_EXCITING_APPEAL 8 +#define CONTESTLIVE_STATE_COOL 9 +#define CONTESTLIVE_STATE_BEAUTIFUL 10 +#define CONTESTLIVE_STATE_CUTE 11 +#define CONTESTLIVE_STATE_SMART 12 +#define CONTESTLIVE_STATE_TOUGH 13 +#define CONTESTLIVE_STATE_VERY_EXCITING_APPEAL 14 +#define CONTESTLIVE_STATE_VERY_COOL 15 +#define CONTESTLIVE_STATE_VERY_BEAUTIFUL 16 +#define CONTESTLIVE_STATE_VERY_CUTE 17 +#define CONTESTLIVE_STATE_VERY_SMART 18 +#define CONTESTLIVE_STATE_VERY_TOUGH 19 +#define CONTESTLIVE_STATE_TOOK_BREAK 20 +#define CONTESTLIVE_STATE_GOT_STARTLED 21 +#define CONTESTLIVE_STATE_USED_MOVE 22 +#define CONTESTLIVE_STATE_TALK_ABOUT_LOSER 23 +#define CONTESTLIVE_STATE_NO_APPEALS 24 +#define CONTESTLIVE_STATE_LAST_BOTH 25 +#define CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH 26 +#define CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN 27 +#define CONTESTLIVE_STATE_NO_EXCITING_APPEALS 28 +#define CONTESTLIVE_STATE_LOST_SMALL_MARGIN 29 +#define CONTESTLIVE_STATE_REPEATED_APPEALS 30 +#define CONTESTLIVE_STATE_LOST 31 +#define CONTESTLIVE_STATE_OUTRO 32 + +// Flags used to comment on winner +#define CONTESTLIVE_FLAG_EXCITING_APPEAL (1 << 0) +#define CONTESTLIVE_FLAG_GOT_NERVOUS (1 << 1) +#define CONTESTLIVE_FLAG_MAXED_EXCITEMENT (1 << 2) +#define CONTESTLIVE_FLAG_USED_COMBO (1 << 3) +#define CONTESTLIVE_FLAG_STARTLED_OTHER (1 << 4) +#define CONTESTLIVE_FLAG_SKIPPED_TURN (1 << 5) +#define CONTESTLIVE_FLAG_GOT_STARTLED (1 << 6) +#define CONTESTLIVE_FLAG_MADE_APPEAL (1 << 7) + +// Flags used to comment on loser +#define CONTESTLIVE_FLAG_LOST (1 << 0) +#define CONTESTLIVE_FLAG_REPEATED_MOVE (1 << 1) +#define CONTESTLIVE_FLAG_LOST_SMALL_MARGIN (1 << 2) +#define CONTESTLIVE_FLAG_NO_EXCITEMENT (1 << 3) +#define CONTESTLIVE_FLAG_BLEW_LEAD (1 << 4) +#define CONTESTLIVE_FLAG_MISSED_EXCITEMENT (1 << 5) +#define CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS (1 << 6) +#define CONTESTLIVE_FLAG_NO_APPEALS (1 << 7) #endif //GUARD_CONSTANTS_TV_H diff --git a/include/constants/union_room.h b/include/constants/union_room.h index 2314f85a0..d867fb340 100644 --- a/include/constants/union_room.h +++ b/include/constants/union_room.h @@ -1,6 +1,60 @@ #ifndef GUARD_CONSTANTS_UNION_ROOM_H #define GUARD_CONSTANTS_UNION_ROOM_H +#define MAX_UNION_ROOM_PLAYERS 8 + +#define UNION_ROOM_SPAWN_NONE 0 +#define UNION_ROOM_SPAWN_IN 1 +#define UNION_ROOM_SPAWN_OUT 2 + +#define ACTIVITY_NONE 0 +#define ACTIVITY_BATTLE_SINGLE 1 +#define ACTIVITY_BATTLE_DOUBLE 2 +#define ACTIVITY_BATTLE_MULTI 3 +#define ACTIVITY_TRADE 4 +#define ACTIVITY_CHAT 5 +#define ACTIVITY_WONDER_CARD 6 +#define ACTIVITY_WONDER_NEWS 7 +#define ACTIVITY_CARD 8 +#define ACTIVITY_POKEMON_JUMP 9 +#define ACTIVITY_BERRY_CRUSH 10 +#define ACTIVITY_BERRY_PICK 11 +#define ACTIVITY_SEARCH 12 +#define ACTIVITY_SPIN_TRADE 13 +#define ACTIVITY_BATTLE_TOWER_OPEN 14 +#define ACTIVITY_RECORD_CORNER 15 +#define ACTIVITY_BERRY_BLENDER 16 + +// Player response +#define ACTIVITY_ACCEPT 17 +#define ACTIVITY_DECLINE 18 + +#define ACTIVITY_NPCTALK 19 +#define ACTIVITY_PLYRTALK 20 + +// Duplicate IDs? +#define ACTIVITY_WONDER_CARD2 21 +#define ACTIVITY_WONDER_NEWS2 22 + +#define ACTIVITY_CONTEST_COOL 23 +#define ACTIVITY_CONTEST_BEAUTY 24 +#define ACTIVITY_CONTEST_CUTE 25 +#define ACTIVITY_CONTEST_SMART 26 +#define ACTIVITY_CONTEST_TOUGH 27 +#define ACTIVITY_BATTLE_TOWER 28 +#define ACTIVITY_29 29 + +#define IN_UNION_ROOM (1 << 6) + +// Used in UR_AddTextPrinterParameterized +#define UR_COLOR_DKE_WHT_LTE 0 +#define UR_COLOR_RED_WHT_LTR 1 +#define UR_COLOR_GRN_WHT_LTG 2 +#define UR_COLOR_WHT_WHT_LTE 3 +#define UR_COLOR_WHT_DKE_LTE 4 +#define UR_COLOR_GRN_DN6_LTB 5 +#define UR_COLOR_DN5_DN6_LTB 6 + #define LINK_GROUP_SINGLE_BATTLE 0 #define LINK_GROUP_DOUBLE_BATTLE 1 #define LINK_GROUP_MULTI_BATTLE 2 @@ -10,8 +64,8 @@ #define LINK_GROUP_BERRY_PICKING 6 #define LINK_GROUP_WONDER_CARD 7 #define LINK_GROUP_WONDER_NEWS 8 -#define LINK_GROUP_UNK_9 9 -#define LINK_GROUP_UNK_10 10 +#define LINK_GROUP_UNION_ROOM_RESUME 9 +#define LINK_GROUP_UNION_ROOM_INIT 10 #define LINK_GROUP_UNK_11 11 #define LINK_GROUP_RECORD_CORNER 12 #define LINK_GROUP_BERRY_BLENDER 13 @@ -25,4 +79,24 @@ #define LINK_GROUP_BATTLE_TOWER_OPEN 21 #define NUM_LINK_GROUP_TYPES 22 +#define UR_TRADE_MATCH 0 +#define UR_TRADE_NOTYPE 1 +#define UR_TRADE_NOEGG 2 + +#define UR_TRADE_READY 0 +#define UR_TRADE_PLAYER_NOT_READY 1 +#define UR_TRADE_PARTNER_NOT_READY 2 + +#define UR_INTERACT_PLAYER_1 1 +#define UR_INTERACT_PLAYER_2 2 +#define UR_INTERACT_PLAYER_3 3 +#define UR_INTERACT_PLAYER_4 4 +#define UR_INTERACT_PLAYER_5 5 +#define UR_INTERACT_PLAYER_6 6 +#define UR_INTERACT_PLAYER_7 7 +#define UR_INTERACT_PLAYER_8 8 +#define UR_INTERACT_ATTENDANT 9 +#define UR_INTERACT_UNUSED 10 +#define UR_INTERACT_START_MENU 11 + #endif //GUARD_CONSTANTS_UNION_ROOM_H diff --git a/include/constants/vars.h b/include/constants/vars.h index 4a38bde81..625c37aa9 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -274,6 +274,7 @@ #define VAR_UNUSED_0x40FF 0x40FF // Unused Var #define VARS_END 0x40FF +#define VARS_COUNT (VARS_END - VARS_START + 1) #define SPECIAL_VARS_START 0x8000 // special vars diff --git a/include/contest.h b/include/contest.h index 00c3191eb..1dd4340bd 100644 --- a/include/contest.h +++ b/include/contest.h @@ -6,135 +6,6 @@ enum { - CONTEST_DEBUG_MODE_OFF, - // Prints the totalPoints value for each contestant. - CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL, - // Prints the ContestResourcesField1C::unk_C value as a bitstring for each contestant. - CONTEST_DEBUG_MODE_PRINT_UNK_C, - // Prints the ContestResourcesField1C::unk_D value as a bitstring for each contestant. - CONTEST_DEBUG_MODE_PRINT_UNK_D -}; - -enum -{ - CONTEST_EFFECT_HIGHLY_APPEALING, - CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, - CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, - CONTEST_EFFECT_REPETITION_NOT_BORING, - CONTEST_EFFECT_AVOID_STARTLE_ONCE, - CONTEST_EFFECT_AVOID_STARTLE, - CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY, - CONTEST_EFFECT_USER_LESS_EASILY_STARTLED, - CONTEST_EFFECT_STARTLE_FRONT_MON, - CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS, - CONTEST_EFFECT_STARTLE_PREV_MON, - CONTEST_EFFECT_STARTLE_PREV_MONS, - CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON, - CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS, - CONTEST_EFFECT_STARTLE_PREV_MON_2, - CONTEST_EFFECT_STARTLE_PREV_MONS_2, - CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, - CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, - CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN, - CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL, - CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL, - CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS, - CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, - CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS, - CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION, - CONTEST_EFFECT_BETTER_IF_FIRST, - CONTEST_EFFECT_BETTER_IF_LAST, - CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES, - CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, - CONTEST_EFFECT_BETTER_WHEN_LATER, - CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING, - CONTEST_EFFECT_BETTER_IF_SAME_TYPE, - CONTEST_EFFECT_BETTER_IF_DIFF_TYPE, - CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL, - CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, - CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION, - CONTEST_EFFECT_NEXT_APPEAL_EARLIER, - CONTEST_EFFECT_NEXT_APPEAL_LATER, - CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER, - CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER, - CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST, - CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS, - CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, - CONTEST_EFFECT_DONT_EXCITE_AUDIENCE -}; - -enum -{ - COMBO_STARTER_RAIN_DANCE = 1, - COMBO_STARTER_RAGE, - COMBO_STARTER_FOCUS_ENERGY, - COMBO_STARTER_HYPNOSIS, - COMBO_STARTER_ENDURE, - COMBO_STARTER_HORN_ATTACK, - COMBO_STARTER_SWORDS_DANCE, - COMBO_STARTER_STOCKPILE, - COMBO_STARTER_SUNNY_DAY, - COMBO_STARTER_REST, - COMBO_STARTER_VICE_GRIP, - COMBO_STARTER_DEFENSE_CURL, - COMBO_STARTER_CHARGE, - COMBO_STARTER_ROCK_THROW, - COMBO_STARTER_YAWN, - COMBO_STARTER_SCARY_FACE, - COMBO_STARTER_POWDER_SNOW, - COMBO_STARTER_LOCK_ON, - COMBO_STARTER_SOFT_BOILED, - COMBO_STARTER_MEAN_LOOK, - COMBO_STARTER_SCRATCH, - COMBO_STARTER_GROWTH, - COMBO_STARTER_HAIL, - COMBO_STARTER_SANDSTORM, - COMBO_STARTER_BELLY_DRUM, - COMBO_STARTER_MIND_READER, - COMBO_STARTER_DRAGON_BREATH, - COMBO_STARTER_DRAGON_RAGE, - COMBO_STARTER_DRAGON_DANCE, - COMBO_STARTER_SURF, - COMBO_STARTER_DIVE, - COMBO_STARTER_STRING_SHOT, - COMBO_STARTER_LEER, - COMBO_STARTER_TAUNT, - COMBO_STARTER_CHARM, - COMBO_STARTER_HARDEN, - COMBO_STARTER_SING, - COMBO_STARTER_EARTHQUAKE, - COMBO_STARTER_DOUBLE_TEAM, - COMBO_STARTER_CURSE, - COMBO_STARTER_SWEET_SCENT, - COMBO_STARTER_SLUDGE, - COMBO_STARTER_SLUDGE_BOMB, - COMBO_STARTER_THUNDER_PUNCH, - COMBO_STARTER_FIRE_PUNCH, - COMBO_STARTER_ICE_PUNCH, - COMBO_STARTER_PECK, - COMBO_STARTER_METAL_SOUND, - COMBO_STARTER_MUD_SPORT, - COMBO_STARTER_WATER_SPORT, - COMBO_STARTER_BONE_CLUB, - COMBO_STARTER_BONEMERANG, - COMBO_STARTER_BONE_RUSH, - COMBO_STARTER_SAND_ATTACK, - COMBO_STARTER_MUD_SLAP, - COMBO_STARTER_FAKE_OUT, - COMBO_STARTER_PSYCHIC, - COMBO_STARTER_KINESIS, - COMBO_STARTER_CONFUSION, - COMBO_STARTER_POUND, - COMBO_STARTER_SMOG, - COMBO_STARTER_CALM_MIND -}; - -enum -{ CONTEST_STRING_MORE_CONSCIOUS, CONTEST_STRING_NO_APPEAL, CONTEST_STRING_SETTLE_DOWN, @@ -206,29 +77,38 @@ enum { CONTEST_FILTER_ONLY_POSTGAME }; +// Constants for changing in-contest Condition (the stars that appear during appeals) +enum { + CONDITION_NO_CHANGE, + CONDITION_GAIN, + CONDITION_LOSE, +}; + struct ContestPokemon { - /*0x00*/ u16 species; - /*0x02*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x0D*/ u8 trainerName[PLAYER_NAME_LENGTH + 1]; - /*0x15*/ u8 trainerGfxId; - /*0x18*/ u32 aiChecks; - /*0x1C*/ u8 whichRank:2; // 0x1 0x2 - u8 aiPool_Cool:1; // 0x4 - u8 aiPool_Beauty:1; // 0x8 - u8 aiPool_Cute:1; // 0x10 - u8 aiPool_Smart:1; // 0x20 - u8 aiPool_Tough:1; // 0x40 - /*0x1E*/ u16 moves[MAX_MON_MOVES]; // moves - /*0x26*/ u8 cool; // cool - /*0x27*/ u8 beauty; // beauty - /*0x28*/ u8 cute; // cute - /*0x29*/ u8 smart; // smart - /*0x2A*/ u8 tough; // tough - /*0x2B*/ u8 sheen; // sheen - /*0x2C*/ u8 unk2C[12]; - /*0x38*/ u32 personality; // personality - /*0x3C*/ u32 otId; // otId + u16 species; + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u8 trainerName[PLAYER_NAME_LENGTH + 1]; + u8 trainerGfxId; + u32 aiFlags; + u8 whichRank:2; + u8 aiPool_Cool:1; + u8 aiPool_Beauty:1; + u8 aiPool_Cute:1; + u8 aiPool_Smart:1; + u8 aiPool_Tough:1; + u16 moves[MAX_MON_MOVES]; + u8 cool; + u8 beauty; + u8 cute; + u8 smart; + u8 tough; + u8 sheen; + u8 highestRank; + bool8 gameCleared; + u8 unused[10]; + u32 personality; + u32 otId; }; struct Shared1A004 @@ -239,101 +119,101 @@ struct Shared1A004 u8 savedJunk[0x800]; }; -struct ContestStruct_field_18 +struct ContestMoveAnimData { u16 species; - u16 unk2; - u8 unk4_0:1; - u8 unk5; - u32 unk8; - u32 unkC; - u32 unk10; + u16 targetSpecies; + bool8 hasTargetAnim:1; + u8 contestant; + u32 personality; + u32 otId; + u32 targetPersonality; }; struct Contest { - /*0x0*/ u8 playerMoveChoice; - /*0x1*/ u8 turnNumber; - /*0x2*/ u8 unused2[CONTESTANT_COUNT]; - /*0x6*/ u16 unk1920A_0:1; // Task active flags? - u16 unk1920A_1:1; - u16 unk1920A_2:1; - u16 unk1920A_3:1; - u16 unk1920A_4:1; - u16 isShowingApplauseMeter:1; - u16 applauseMeterIsMoving:1; - u16 unk1920A_7:1; - /*0x7*/ u16 unk1920B_0:1; - u16 unk1920B_1:1; - u16 unk1920B_2:1; - /*0x8*/ u8 mainTaskId; - /*0x9*/ u8 unk1920D[4]; - /*0xD*/ u8 unk19211; - /*0xE*/ u8 unk19212; - /*0xF*/ u8 filler19213; - /*0x10*/ u8 unk19214; - /*0x11*/ u8 unk19215; - /*0x12*/ u8 unk19216; // sprite ID - /*0x13*/ s8 applauseLevel; - /*0x19218*/ u8 prevTurnOrder[CONTESTANT_COUNT]; - /*0x1921C*/ u32 unk1921C; // saved RNG value? - u16 moveHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT]; - u8 excitementHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT]; + u8 playerMoveChoice; + u8 appealNumber; + u8 unk[CONTESTANT_COUNT]; // never read + bool16 unused1:1; + bool16 unused2:1; + bool16 unused3:1; + bool16 unused4:1; + bool16 waitForJudgeSpeechBubble:1; + bool16 isShowingApplauseMeter:1; + bool16 applauseMeterIsMoving:1; + bool16 animatingAudience:1; + bool16 waitForAudienceBlend:1; + bool16 sliderHeartsAnimating:1; // When the slider heart is appearing/disappearing + bool16 waitForLink:1; + u8 mainTaskId; + u8 filler1[4]; + u8 judgeAttentionTaskId; + u8 blendTaskId; + u8 filler2; + u8 turnNumber; + u8 currentContestant; + u8 judgeSpeechBubbleSpriteId; + s8 applauseLevel; + u8 prevTurnOrder[CONTESTANT_COUNT]; + u32 unusedRng; + u16 moveHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT]; + u8 excitementHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT]; u8 applauseMeterSpriteId; - /*0x1925D*/ u8 contestSetupState; - /*0x1925E*/ u8 unk1925E; + u8 contestSetupState; + u8 moveAnimTurnCount; }; struct ContestantStatus { - /*0x00*/ s16 appeal1; // move appeal? - /*0x02*/ s16 appeal2; // final appeal after end of turn, maybe? - /*0x04*/ s16 pointTotal; - /*0x06*/ u16 currMove; - /*0x08*/ u16 prevMove; - /*0x0A*/ u8 moveCategory; - /*0x0B*/ u8 ranking:2; - u8 unkB_2:2; + s16 baseAppeal; + s16 appeal; + s16 pointTotal; + u16 currMove; + u16 prevMove; + u8 moveCategory; + u8 ranking:2; + u8 unused1:2; u8 moveRepeatCount:3; - u8 noMoreTurns:1; // used a one-time move? - /*0x0C*/ u8 nervous:1; + bool8 noMoreTurns:1; // used a one-time move? + bool8 nervous:1; u8 numTurnsSkipped:2; - /*0x0D*/ s8 condition; - /*0x0E*/ u8 jam; - /*0x0F*/ u8 jamReduction; + s8 condition; + u8 jam; + u8 jamReduction; // Flags set by move effect - /*0x10*/ u8 resistant:1; - u8 immune:1; - u8 moreEasilyStartled:1; - u8 usedRepeatableMove:1; + bool8 resistant:1; + bool8 immune:1; + bool8 moreEasilyStartled:1; + bool8 usedRepeatableMove:1; u8 conditionMod:2; // 1: just raised condition; 2: appeal greatly improved by condition u8 turnOrderMod:2; // 1: defined; 2: random - /*0x11*/ u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random - u8 turnSkipped:1; - u8 exploded:1; - u8 overrideCategoryExcitementMod:1; - u8 appealTripleCondition:1; + u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random + bool8 turnSkipped:1; + bool8 exploded:1; + bool8 overrideCategoryExcitementMod:1; + bool8 appealTripleCondition:1; - /*0x12*/ u8 jamSafetyCount; - /*0x13*/ u8 effectStringId; // status action? - /*0x14*/ u8 effectStringId2; - /*0x15*/ u8 disappointedRepeat:1; - u8 unk15_1:1; - u8 unk15_2:1; - u8 unk15_3:1; - u8 hasJudgesAttention:1; - u8 judgesAttentionWasRemoved:1; - u8 unk15_6:1; - /*0x16*/ u8 unk16; - /*0x17*/ u8 unk17; - /*0x18*/ u8 unk18; - /*0x19*/ u8 nextTurnOrder; // turn position - /*0x1A*/ u8 attentionLevel; // How much the Pokemon "stood out" - /*0x1B*/ u8 unk1B; + u8 jamSafetyCount; + u8 effectStringId; // status action? + u8 effectStringId2; + bool8 repeatedMove:1; + bool8 unused2:1; + bool8 repeatedPrevMove:1; // never read + bool8 completedComboFlag:1; + bool8 hasJudgesAttention:1; + bool8 judgesAttentionWasRemoved:1; + bool8 usedComboMove:1; + bool8 completedCombo; + u8 comboAppealBonus; + u8 repeatJam; + u8 nextTurnOrder; // turn position + u8 attentionLevel; // How much the Pokemon "stood out" + u8 contestantAnimTarget; }; -struct UnknownContestStruct7 +struct ContestAppealMoveResults { u8 turnOrder[CONTESTANT_COUNT]; s16 jam; @@ -348,97 +228,97 @@ struct ContestAIInfo /*0x00*/ u8 aiState; /*0x02*/ u16 nextMove; /*0x04*/ u8 nextMoveIndex; - /*0x05*/ u8 unk5[4]; + /*0x05*/ u8 moveScores[MAX_MON_MOVES]; /*0x09*/ u8 aiAction; - /*0x0A*/ u8 fillerA[0x6]; // TODO: don't know what's here - /*0x10*/ u8 currentAICheck; - /*0x14*/ u32 aiChecks; + /*0x0A*/ u8 filler[6]; + /*0x10*/ u8 currentAIFlag; + /*0x14*/ u32 aiFlags; /*0x18*/ s16 scriptResult; - /*0x1A*/ s16 scriptArr[3]; + /*0x1A*/ s16 vars[3]; /*0x20*/ const u8 *stack[8]; /*0x40*/ u8 stackSize; /*0x41*/ u8 contestantId; }; -struct UnknownContestStruct5 +struct ContestExcitement { - s8 bits_0; // current move excitement? - u8 excitementFrozen:1; - u8 excitementFreezer:3; - s8 unk2; + s8 moveExcitement; + u8 frozen:1; + u8 freezer:3; + s8 excitementAppealBonus; }; -struct UnknownContestStruct4 +struct ContestGraphicsState { - u8 unk0; // sprite ID - u8 unk1; // sprite ID - u8 unk2_0:1; - u8 unk2_1:1; - u8 unk2_2:1; + u8 sliderHeartSpriteId; + u8 nextTurnSpriteId; + bool8 sliderUpdating:1; + bool8 boxBlinking:1; + bool8 updatingAppealHearts:1; }; -struct UnknownContestStruct6 +struct ContestFinalStandings { - s32 unk0; - s32 unk4; - s32 unk8; - s32 unkC; + s32 totalPoints; + s32 round1Points; + s32 random; + s32 contestant; }; -struct ContestResourcesField1C +struct ContestTV { - u16 unk0[5]; - s16 unkA; - u8 unkC; - u8 unkD; - u8 unkE_1:1; - u8 unkE_2:1; + u16 appeals[CONTEST_NUM_APPEALS]; + s16 move; + u8 winnerFlags; + u8 loserFlags; + bool8 madeAppeal:1; + bool8 madeExcitingAppeal:1; }; -struct ContestResourcesField20 +struct ContestUnused { - u8 filler_00[0x0C]; + u8 filler[12]; }; struct ContestResources { struct Contest *contest; struct ContestantStatus *status; - struct UnknownContestStruct7 *field_8; + struct ContestAppealMoveResults *appealResults; struct ContestAIInfo *aiData; - struct UnknownContestStruct5 *field_10; - struct UnknownContestStruct4 *field_14; - struct ContestStruct_field_18 *field_18; - struct ContestResourcesField1C * field_1c; - struct ContestResourcesField20 * field_20; + struct ContestExcitement *excitement; + struct ContestGraphicsState *gfxState; + struct ContestMoveAnimData *moveAnim; + struct ContestTV *tv; + struct ContestUnused * unused; u8 * contestBgTilemaps[CONTESTANT_COUNT]; - void * field_34; - void * field_38; + void * boxBlinkTiles1; + void * boxBlinkTiles2; void * field_3c; }; #define eContest (*gContestResources->contest) #define eContestantStatus (gContestResources->status) -#define eContestResources8 (*gContestResources->field_8) +#define eContestAppealResults (*gContestResources->appealResults) #define eContestAI (*gContestResources->aiData) -#define eContestResources10 (*gContestResources->field_10) -#define eContestResources14 (*gContestResources->field_14) -#define eUnzippedContestAudienceGfx (gHeap + 0x18000) -#define eUnknownHeap19000 (gHeap + 0x19000) +#define eContestExcitement (*gContestResources->excitement) +#define eContestGfxState (gContestResources->gfxState) +#define eUnzippedContestAudience_Gfx (gHeap + 0x18000) +#define eContestAudienceFrame2_Gfx (gHeap + 0x19000) #define eContestDebugMode (gHeap[0x1a000]) #define eUnknownHeap1A004 (*(struct Shared1A004 *)(gHeap + 0x1a004)) extern struct ContestPokemon gContestMons[CONTESTANT_COUNT]; -extern s16 gContestMonConditions[CONTESTANT_COUNT]; -extern s16 gUnknown_02039F08[CONTESTANT_COUNT]; -extern s16 gUnknown_02039F10[CONTESTANT_COUNT]; -extern s16 gUnknown_02039F18[CONTESTANT_COUNT]; +extern s16 gContestMonRound1Points[CONTESTANT_COUNT]; +extern s16 gContestMonTotalPoints[CONTESTANT_COUNT]; +extern s16 gContestMonAppealPointTotals[CONTESTANT_COUNT]; +extern s16 gContestMonRound2Points[CONTESTANT_COUNT]; extern u8 gContestFinalStandings[CONTESTANT_COUNT]; extern u8 gContestMonPartyIndex; extern u8 gContestPlayerMonIndex; extern u8 gContestantTurnOrder[CONTESTANT_COUNT]; extern u8 gLinkContestFlags; -extern u8 gUnknown_02039F2B; +extern u8 gContestLinkLeaderIndex; extern u16 gSpecialVar_ContestCategory; extern u16 gSpecialVar_ContestRank; extern u8 gNumLinkContestPlayers; @@ -448,18 +328,17 @@ extern u8 sContestBgCopyFlags; extern struct ContestWinner gCurContestWinner; extern u8 gUnknown_02039F5C; extern u8 gUnknown_02039F5D; - extern u32 gContestRngValue; // contest.c void ResetLinkContestBoolean(void); void LoadContestBgAfterMoveAnim(void); void CB2_StartContest(void); -void sub_80DA8C8(u8 partyIndex); -void sub_80DAB8C(u8 contestType, u8 rank); -void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame); +void CreateContestMonFromParty(u8 partyIndex); +void SetContestants(u8 contestType, u8 rank); +void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame); u8 GetContestEntryEligibility(struct Pokemon *pkmn); -void sub_80DB09C(u8 contestCategory); +void CalculateRound1Points(u8 contestCategory); bool8 IsSpeciesNotUnown(u16 species); bool8 Contest_IsMonsTurnDisabled(u8 a); void SaveLinkContestResults(void); @@ -469,24 +348,12 @@ void SetContestantEffectStringID2(u8 a, u8 b); void SetStartledString(u8 contestant, u8 jam); void MakeContestantNervous(u8 p); s8 Contest_GetMoveExcitement(u16 move); -bool8 sub_80DE1E8(u8 a); +bool8 IsContestantAllowedToCombo(u8 contestant); void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s32 fontId); void ResetContestLinkResults(void); bool8 sub_80DEDA8(u8 a); u8 sub_80DEFA8(u8 a, u8 b); void ClearContestWinnerPicsInContestHall(void); -void sub_80DFA08(struct ContestPokemon *mon, s32 language); - -// contest link -void sub_81D9DE4(u8 taskId); -void sub_80FCF40(u8); -void sub_80FCFD0(u8); -void sub_80F8714(u8); -bool32 sub_80FC670(s16 *); -bool32 sub_80FC4F4(void *, u16); -bool8 sub_80FC55C(void); -bool8 sub_80FC530(u8); -u8 sub_80F86E0(u8 *); -void sub_80FC9F8(u8 taskId); +void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language); #endif //GUARD_CONTEST_H diff --git a/include/contest_link.h b/include/contest_link.h new file mode 100644 index 000000000..cd2682524 --- /dev/null +++ b/include/contest_link.h @@ -0,0 +1,23 @@ +#ifndef GUARD_CONTEST_LINK_H +#define GUARD_CONTEST_LINK_H + +void Task_LinkContest_CommunicateAppealsState(u8); +void Task_LinkContest_CommunicateFinalStandings(u8); +void Task_LinkContest_Init(u8); +void Task_LinkContest_CommunicateMonsRS(u8); +void Task_LinkContest_CommunicateRngRS(u8); +void Task_LinkContest_CommunicateLeaderIdsRS(u8); +void Task_LinkContest_CommunicateCategoryRS(u8); +void Task_LinkContest_CommunicateMonIdxs(u8); +void Task_LinkContest_StartCommunicationEm(u8); +void Task_LinkContest_CommunicateRound1Points(u8); +void Task_LinkContest_CommunicateTurnOrder(u8); +void Task_LinkContest_FinalizeConnection(u8); +void Task_LinkContest_CommunicateMoveSelections(u8); +bool32 LinkContest_TryLinkStandby(s16 *); +bool32 LinkContest_SendBlock(void *, u16); +bool8 LinkContest_GetBlockReceivedFromAllPlayers(void); +bool8 LinkContest_GetBlockReceived(u8); +u8 LinkContest_GetLeaderIndex(u8 *); + +#endif //GUARD_CONTEST_LINK_H diff --git a/include/contest_link_80F57C4.h b/include/contest_link_80F57C4.h deleted file mode 100644 index add3ae62f..000000000 --- a/include/contest_link_80F57C4.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef GUARD_CONTEST_LINK_80F57C4_H -#define GUARD_CONTEST_LINK_80F57C4_H - -void BufferContestantTrainerName(void); -void BufferContestantMonNickname(void); -void StartContest(void); -void BufferContestantMonSpecies(void); -void sub_80F8484(void); -void sub_80F84C4(u8); -void sub_80FC998(u8 taskId); - -#endif // GUARD_CONTEST_LINK_80F57C4_H diff --git a/include/contest_link_80FC4F4.h b/include/contest_link_80FC4F4.h deleted file mode 100644 index a3f118798..000000000 --- a/include/contest_link_80FC4F4.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef GUARD_CONTEST_LINK_80FC4F4_H -#define GUARD_CONTEST_LINK_80FC4F4_H - -void sub_80FCC88(u8); -void sub_80FCC88(u8); -void sub_80FCACC(u8); -void sub_80FC580(u8); -void sub_80FC6BC(u8); -void sub_80FC804(u8); -void sub_80FCE48(u8); -void sub_80FC894(u8); - -#endif //GUARD_CONTEST_LINK_80FC4F4_H diff --git a/include/contest_util.h b/include/contest_util.h new file mode 100644 index 000000000..76f9ae522 --- /dev/null +++ b/include/contest_util.h @@ -0,0 +1,14 @@ +#ifndef GUARD_CONTEST_UTIL_H +#define GUARD_CONTEST_UTIL_H + +void BufferContestantTrainerName(void); +void BufferContestantMonNickname(void); +void StartContest(void); +void BufferContestantMonSpecies(void); +void ShowContestResults(void); +void ContestLinkTransfer(u8); +void ShowContestWinnerPainting(void); +u16 GetContestRand(void); +u8 CountPlayerContestPaintings(void); + +#endif // GUARD_CONTEST_UTIL_H diff --git a/include/dodrio_berry_picking.h b/include/dodrio_berry_picking.h index 9995decc2..5decbeccb 100644 --- a/include/dodrio_berry_picking.h +++ b/include/dodrio_berry_picking.h @@ -1,7 +1,7 @@ #ifndef GUARD_DODRIO_BERRY_PICKING_H #define GUARD_DODRIO_BERRY_PICKING_H -void sub_802493C(u16 a0, void (*callback)(void)); +void StartDodrioBerryPicking(u16 a0, void (*callback)(void)); void IsDodrioInParty(void); void ShowDodrioBerryPickingRecords(void); diff --git a/include/egg_hatch.h b/include/egg_hatch.h index 64d07c813..4df2a6a40 100644 --- a/include/egg_hatch.h +++ b/include/egg_hatch.h @@ -4,7 +4,7 @@ void ScriptHatchMon(void); bool8 CheckDaycareMonReceivedMail(void); void EggHatch(void); -u8 GetEggStepsToSubtract(void); +u8 GetEggCyclesToSubtract(void); u16 CountPartyAliveNonEggMons(void); #endif // GUARD_EGG_HATCH_H diff --git a/include/event_data.h b/include/event_data.h index 53999320f..8b4510e39 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -1,9 +1,6 @@ #ifndef GUARD_EVENT_DATA_H #define GUARD_EVENT_DATA_H -#include "constants/flags.h" -#include "constants/vars.h" - void InitEventData(void); void ClearTempFieldEventData(void); void ClearDailyFlags(void); diff --git a/include/event_object_lock.h b/include/event_object_lock.h index a3b350019..0226eb632 100644 --- a/include/event_object_lock.h +++ b/include/event_object_lock.h @@ -8,6 +8,6 @@ void LockSelectedObjectEvent(void); void sub_8098630(void); bool8 sub_8098734(void); void ScriptUnfreezeObjectEvents(void); -void sub_8098524(void); +void UnionRoom_UnlockPlayerAndChatPartner(void); #endif // GUARD_EVENT_OBJECT_LOCK_H diff --git a/include/event_object_movement.h b/include/event_object_movement.h index f0caa38aa..9b4d9302f 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -16,11 +16,7 @@ enum SpinnerRunnerFollowPatterns RUNFOLLOW_SOUTH_EAST_WEST }; -struct UnkStruct_085094AC -{ - const union AnimCmd *const *anims; - u8 animPos[4]; -}; +#define FIGURE_8_LENGTH 72 #define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0) #define GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE (1 << 1) @@ -43,6 +39,12 @@ struct UnkStruct_085094AC #define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18) #define GROUND_EFFECT_FLAG_SEAWEED (1 << 19) +struct UnkStruct_085094AC +{ + const union AnimCmd *const *anims; + u8 animPos[4]; +}; + struct PairedPalettes { u16 tag; @@ -81,11 +83,11 @@ void sub_808E16C(s16, s16); void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat); void sub_8092FF0(s16, s16, s16 *, s16 *); u8 GetFaceDirectionAnimNum(u8); -void sub_80930E0(s16 *, s16 *, s16, s16); +void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16); void ObjectEventClearHeldMovement(struct ObjectEvent *); void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *); void TrySpawnObjectEvents(s16, s16); -u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction); +u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction); u8 AddPseudoObjectEvent(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); u8 TrySpawnObjectEvent(u8, u8, u8); u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z); @@ -98,7 +100,7 @@ void ObjectEventTurnByLocalIdAndMap(u8, u8, u8, u8); const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId); void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8); void FreeAndReserveObjectSpritePalettes(void); -void sub_808E82C(u8, u8, u8, s16, s16); +void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); void sub_808E7E4(u8, u8, u8); void sub_808E78C(u8, u8, u8, u8); void sub_808E75C(s16, s16); @@ -174,13 +176,11 @@ u8 sub_809785C(struct Sprite *); u8 sub_80978E4(struct Sprite *); void SetAndStartSpriteAnim(struct Sprite *, u8, u8); bool8 SpriteAnimEnded(struct Sprite *); -void sub_8097750(struct Sprite *); -bool8 sub_8097758(struct Sprite *); void CreateLevitateMovementTask(struct ObjectEvent *); void DestroyExtraMovementTask(u8); void UnfreezeObjectEvents(void); void FreezeObjectEventsExceptOne(u8 objectEventId); -void sub_8097B78(u8, u8); +void TurnObjectEventSprite(u8, u8); void sub_8098074(u8 var1, u8 var2); void FreezeObjectEvents(void); bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent); @@ -191,10 +191,10 @@ u8 GetLedgeJumpDirection(s16, s16, u8); void CameraObjectSetFollowedObjectId(u8 objectId); u16 GetObjectPaletteTag(u8 palSlot); void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible); -s16 sub_809773C(s16 a1); -s16 sub_8097728(s16 a1); +s16 GetFigure8XOffset(s16 idx); +s16 GetFigure8YOffset(s16 idx); void CameraObjectReset2(void); -u8 ObjectEventGetBerryTreeId(u8 objectEventId); +u8 GetObjectEventBerryTreeId(u8 objectEventId); void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup); bool8 IsBerryTreeSparkling(u8, u8, u8); @@ -414,10 +414,10 @@ u8 MovementType_RunInPlace_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *); -void sub_8097C44(u8 var, bool32 var2); -bool32 sub_8097C8C(u8 var); -void sub_8097BB4(u8 var1, u8 graphicsId); -void sub_8097CC4(u8 var1, u8 var2); -bool32 sub_8097D9C(u8 var); +void SetObjectEventSpriteInvisibility(u8 var, bool32 var2); +bool32 IsObjectEventSpriteInvisible(u8 var); +void SetObjectEventSpriteGraphics(u8 var1, u8 graphicsId); +void SetObjectEventSpriteAnim(u8 var1, u8 var2); +bool32 IsObjectEventSpriteAnimating(u8 var); #endif //GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/event_scripts.h b/include/event_scripts.h index d147dd4f1..851559724 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -294,39 +294,39 @@ extern const u8 gTVSafariFanClubText07[]; extern const u8 gTVSafariFanClubText08[]; extern const u8 gTVSafariFanClubText09[]; extern const u8 gTVSafariFanClubText10[]; -extern const u8 gTVContestLiveUpdatesText00[]; -extern const u8 gTVContestLiveUpdatesText01[]; -extern const u8 gTVContestLiveUpdatesText02[]; -extern const u8 gTVContestLiveUpdatesText03[]; -extern const u8 gTVContestLiveUpdatesText04[]; -extern const u8 gTVContestLiveUpdatesText05[]; -extern const u8 gTVContestLiveUpdatesText06[]; -extern const u8 gTVContestLiveUpdatesText07[]; -extern const u8 gTVContestLiveUpdatesText08[]; -extern const u8 gTVContestLiveUpdatesText09[]; -extern const u8 gTVContestLiveUpdatesText10[]; -extern const u8 gTVContestLiveUpdatesText11[]; -extern const u8 gTVContestLiveUpdatesText12[]; -extern const u8 gTVContestLiveUpdatesText13[]; -extern const u8 gTVContestLiveUpdatesText14[]; -extern const u8 gTVContestLiveUpdatesText15[]; -extern const u8 gTVContestLiveUpdatesText16[]; -extern const u8 gTVContestLiveUpdatesText17[]; -extern const u8 gTVContestLiveUpdatesText18[]; -extern const u8 gTVContestLiveUpdatesText19[]; -extern const u8 gTVContestLiveUpdatesText20[]; -extern const u8 gTVContestLiveUpdatesText21[]; -extern const u8 gTVContestLiveUpdatesText22[]; -extern const u8 gTVContestLiveUpdatesText23[]; -extern const u8 gTVContestLiveUpdatesText24[]; -extern const u8 gTVContestLiveUpdatesText25[]; -extern const u8 gTVContestLiveUpdatesText26[]; -extern const u8 gTVContestLiveUpdatesText27[]; -extern const u8 gTVContestLiveUpdatesText28[]; -extern const u8 gTVContestLiveUpdatesText29[]; -extern const u8 gTVContestLiveUpdatesText30[]; -extern const u8 gTVContestLiveUpdatesText31[]; -extern const u8 gTVContestLiveUpdatesText32[]; +extern const u8 ContestLiveUpdates_Text_Intro[]; +extern const u8 ContestLiveUpdates_Text_WonBothRounds[]; +extern const u8 ContestLiveUpdates_Text_BetterRound2[]; +extern const u8 ContestLiveUpdates_Text_EqualRounds[]; +extern const u8 ContestLiveUpdates_Text_BetterRound1[]; +extern const u8 ContestLiveUpdates_Text_GotNervous[]; +extern const u8 ContestLiveUpdates_Text_StartledFoes[]; +extern const u8 ContestLiveUpdates_Text_UsedCombo[]; +extern const u8 ContestLiveUpdates_Text_ExcitingAppeal[]; +extern const u8 ContestLiveUpdates_Text_WasCool[]; +extern const u8 ContestLiveUpdates_Text_WasBeautiful[]; +extern const u8 ContestLiveUpdates_Text_WasCute[]; +extern const u8 ContestLiveUpdates_Text_WasSmart[]; +extern const u8 ContestLiveUpdates_Text_WasTough[]; +extern const u8 ContestLiveUpdates_Text_VeryExcitingAppeal[]; +extern const u8 ContestLiveUpdates_Text_VeryCool[]; +extern const u8 ContestLiveUpdates_Text_VeryBeautiful[]; +extern const u8 ContestLiveUpdates_Text_VeryCute[]; +extern const u8 ContestLiveUpdates_Text_VerySmart[]; +extern const u8 ContestLiveUpdates_Text_VeryTough[]; +extern const u8 ContestLiveUpdates_Text_TookBreak[]; +extern const u8 ContestLiveUpdates_Text_GotStartled[]; +extern const u8 ContestLiveUpdates_Text_MoveWonderful[]; +extern const u8 ContestLiveUpdates_Text_TalkAboutAnotherMon[]; +extern const u8 ContestLiveUpdates_Text_FailedToAppeal[]; +extern const u8 ContestLiveUpdates_Text_LastInBothRounds[]; +extern const u8 ContestLiveUpdates_Text_NotExcitingEnough[]; +extern const u8 ContestLiveUpdates_Text_LostAfterWinningRound1[]; +extern const u8 ContestLiveUpdates_Text_NeverExciting[]; +extern const u8 ContestLiveUpdates_Text_LostBySmallMargin[]; +extern const u8 ContestLiveUpdates_Text_RepeatedAppeals[]; +extern const u8 ContestLiveUpdates_Text_ValiantEffortButLost[]; +extern const u8 ContestLiveUpdates_Text_Outro[]; extern const u8 gTVPokemonBattleUpdateText00[]; extern const u8 gTVPokemonBattleUpdateText01[]; extern const u8 gTVPokemonBattleUpdateText02[]; @@ -372,10 +372,11 @@ extern const u8 SecretBase_Text_Trainer8Defeated[]; extern const u8 SecretBase_Text_Trainer9Defeated[]; //field effects -extern const u8 EventScript_FldEffStrength[]; +extern const u8 EventScript_UseStrength[]; extern const u8 EventScript_FailSweetScent[]; -extern const u8 EventScript_FldEffFlash[]; -extern const u8 EventScript_FldEffRockSmash[]; +extern const u8 EventScript_UseFlash[]; +extern const u8 EventScript_UseCut[]; +extern const u8 EventScript_UseRockSmash[]; //player pc extern const u8 LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC[]; @@ -587,4 +588,26 @@ extern u8 BerryTree_EventScript_ItemUsePlantBerry[]; extern u8 BerryTree_EventScript_ItemUseWailmerPail[]; extern u8 BattleFrontier_OutsideEast_EventScript_WaterSudowoodo[]; +// overworld +extern const u8 EventScript_WhiteOut[]; +extern const u8 EventScript_ResetMrBriney[]; +extern const u8 EventScript_DoLinkRoomExit[]; +extern const u8 CableClub_EventScript_TooBusyToNotice[]; +extern const u8 CableClub_EventScript_ReadTrainerCard[]; +extern const u8 CableClub_EventScript_ReadTrainerCardColored[]; +extern const u8 EventScript_BattleColosseum_4P_PlayerSpot0[]; +extern const u8 EventScript_BattleColosseum_4P_PlayerSpot1[]; +extern const u8 EventScript_BattleColosseum_4P_PlayerSpot2[]; +extern const u8 EventScript_BattleColosseum_4P_PlayerSpot3[]; +extern const u8 EventScript_RecordCenter_Spot0[]; +extern const u8 EventScript_RecordCenter_Spot1[]; +extern const u8 EventScript_RecordCenter_Spot2[]; +extern const u8 EventScript_RecordCenter_Spot3[]; +extern const u8 EventScript_BattleColosseum_2P_PlayerSpot0[]; +extern const u8 EventScript_BattleColosseum_2P_PlayerSpot1[]; +extern const u8 EventScript_TradeCenter_Chair1[]; +extern const u8 EventScript_TradeCenter_Chair0[]; +extern const u8 EventScript_ConfirmLeaveTradeRoom[]; +extern const u8 EventScript_TerminateLink[]; + #endif // GUARD_EVENT_SCRIPTS_H diff --git a/include/faraway_island.h b/include/faraway_island.h index 084b5a277..a5243c6a7 100755 --- a/include/faraway_island.h +++ b/include/faraway_island.h @@ -2,7 +2,7 @@ #define GUARD_FARAWAY_ISLAND_H u32 GetMewMoveDirection(void); -bool8 sub_81D4A58(struct ObjectEvent*); +bool8 ShouldMewShakeGrass(struct ObjectEvent*); void UpdateFarawayIslandStepCounter(void); bool8 ObjectEventIsFarawayIslandMew(struct ObjectEvent *); bool8 IsMewPlayingHideAndSeek(void); diff --git a/include/field_camera.h b/include/field_camera.h index fecea244e..2bed02b20 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -23,7 +23,7 @@ void DrawWholeMapView(void); void CurrentMapDrawMetatileAt(int x, int y); void sub_8089C08(s16 *a0, s16 *a1); void DrawDoorMetatileAt(int x, int y, u16 *arr); -void move_tilemap_camera_to_upper_left_corner(void); +void ResetFieldCamera(void); void sub_8057A58(void); void ResetCameraUpdateInfo(void); u32 InitCameraUpdateCallback(u8 a); diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index f722a6063..17e5afb63 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -34,7 +34,7 @@ bool8 sub_8068870(u16 a); bool8 sub_8068894(void); bool8 sub_8068A64(struct MapPosition *, u16); u8 sub_8068F18(void); -bool8 dive_warp(struct MapPosition *position, u16 b); +bool8 TryDoDiveWarp(struct MapPosition *position, u16 b); int SetCableClubWarp(void); u8 TrySetDiveWarp(void); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); diff --git a/include/field_effect.h b/include/field_effect.h index 59f99ad93..731fb9c59 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -16,7 +16,7 @@ void ReturnToFieldFromFlyMapSelect(void); u8 AddNewGameBirchObject(s16, s16, u8); void FieldEffectStop(struct Sprite *sprite, u8 id); u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); -void CreateTeleportFieldEffectTask(void); +void FldEff_TeleportWarpOut(void); void FieldEffectActiveListRemove(u8 id); void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8); void FieldEffectActiveListAdd(u8 id); @@ -39,12 +39,8 @@ void StartEscalatorWarp(u8 metatileBehavior, u8 priority); void StartLavaridgeGymB1FWarp(u8 priority); void StartLavaridgeGym1FWarp(u8 priority); -void sub_80B9C28(s16*, u8); -void sub_80B9C54(s16*, u8); -void sub_80B9CDC(s16*, u8); - -void SpriteCB_PopOutOfAsh(struct Sprite*); -void SpriteCB_LavaridgeGymWarp(struct Sprite*); +void SpriteCB_AshPuff(struct Sprite*); +void SpriteCB_AshLaunch(struct Sprite*); void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b); void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId); diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 8257bc110..9b7b6ffd5 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -8,20 +8,22 @@ // Exported ROM declarations u8 CreateWarpArrowSprite(void); u8 sub_8155800(u8 oldSpriteId); -void sub_81555AC(u8, u8); +void SetSurfBobState(u8 spriteId, u8 value); +void SetSurfBobWhileFlyingOutState(u8 spriteId, u8 value); +void SetSurfBobWhileFishingState(u8 spriteId, u8 value, s16 data1); bool8 sub_8155DA0(struct ObjectEvent *); void sub_8155D78(struct ObjectEvent *); void StartAshFieldEffect(s16, s16, u16, s16); void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8); u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*); u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); -void sub_8155F80(struct Sprite*); +void UpdateRayquazaSpotlightEffect(struct Sprite*); void UpdateShadowFieldEffect(struct Sprite*); void UpdateTallGrassFieldEffect(struct Sprite*); void WaitFieldEffectSpriteAnim(struct Sprite*); void UpdateAshFieldEffect(struct Sprite*); void UpdateSurfBlobFieldEffect(struct Sprite*); -void sub_8156194(struct Sprite*); +void UpdateJumpImpactEffect(struct Sprite*); void UpdateFootprintsTireTracksFieldEffect(struct Sprite*); void UpdateSplashFieldEffect(struct Sprite*); void UpdateLongGrassFieldEffect(struct Sprite*); @@ -33,7 +35,5 @@ void UpdateBubblesFieldEffect(struct Sprite*); 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_message_box.h b/include/field_message_box.h index 58f782d9c..34b3324e7 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -10,13 +10,13 @@ enum }; bool8 ShowFieldMessage(const u8 *message); -bool8 sub_8098238(const u8 *message); -bool8 sub_80982B8(void); +bool8 ShowPokenavFieldMessage(const u8 *message); +bool8 ShowFieldMessageFromBuffer(void); bool8 ShowFieldAutoScrollMessage(const u8 *message); void HideFieldMessageBox(void); bool8 IsFieldMessageBoxHidden(void); u8 GetFieldMessageBoxMode(void); -void sub_8098374(void); +void StopFieldMessage(void); void InitFieldMessageBox(void); #endif // GUARD_FIELD_MESSAGE_BOX_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index bcee339d5..722fe4444 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -1,7 +1,7 @@ #ifndef GUARD_FIELD_PLAYER_AVATAR_H #define GUARD_FIELD_PLAYER_AVATAR_H -void player_step(u8 a, u16 b, u16 c); +void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys); void ClearPlayerAvatarInfo(void); void SetPlayerAvatarExtraStateTransition(u8, u8); u8 GetPlayerAvatarGenderByGraphicsId(u8); @@ -39,7 +39,7 @@ void sub_808BCF4(void); void sub_808D074(u8); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8); -void sub_808C114(void); +void SetPlayerAvatarFieldMove(void); u8 GetPlayerAvatarGraphicsIdByCurrentState(void); void SetPlayerAvatarStateMask(u8 a); u8 GetPlayerAvatarGraphicsIdByStateId(u8 a); @@ -47,9 +47,9 @@ u8 GetJumpSpecialMovementAction(u32); bool8 PartyHasMonWithSurf(void); bool8 IsPlayerFacingSurfableFishableWater(void); bool8 IsPlayerSurfingNorth(void); -void sub_808C228(u8 direction); +void SetPlayerAvatarWatering(u8 direction); u8 GetPlayerAvatarFlags(void); -void sub_808B578(void); +void UpdatePlayerAvatarTransitionState(void); u8 GetFRLGAvatarGraphicsIdByGender(u8); u8 GetRSAvatarGraphicsIdByGender(u8); void PlayerWheelieInPlace(u8 direction); diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index e05e30378..951bf0788 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -1,6 +1,8 @@ #ifndef GUARD_FIELD_SCREEN_EFFECT_H #define GUARD_FIELD_SCREEN_EFFECT_H +extern const s32 gMaxFlashLevel; + void WarpFadeInScreen(void); void WarpFadeOutScreen(void); void FadeInFromBlack(void); @@ -26,7 +28,7 @@ void DoFallWarp(void); void DoEscalatorWarp(u8 metatileBehavior); void DoLavaridgeGymB1FWarp(void); void DoLavaridgeGym1FWarp(void); -void DoTeleportWarp(void); +void DoTeleportTileWarp(void); void DoMossdeepGymWarp(void); void DoPortholeWarp(void); void DoCableClubWarp(void); diff --git a/include/fieldmap.h b/include/fieldmap.h index dc81d1766..438fb4787 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -30,26 +30,22 @@ struct MapConnection *sub_8088950(u8 direction, int x, int y); bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection); bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset); void save_serialize_map(void); -void sub_8088B3C(u16 x, u16 y); +void SetCameraFocusCoords(u16 x, u16 y); void InitMap(void); void InitMapFromSavedGame(void); void InitTrainerHillMap(void); void InitBattlePyramidMap(bool8 setPlayerPosition); -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); -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); +void CopyMapTilesetsToVram(struct MapLayout const *mapLayout); +void LoadMapTilesetPalettes(struct MapLayout const *mapLayout); +void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout); +void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout); +void CopyPrimaryTilesetToVram(const struct MapLayout *); +void CopySecondaryTilesetToVram(const struct MapLayout *); +struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection); struct MapConnection *GetConnectionAtCoords(s16 x, s16 y); - -void SpriteCB_PokeballGlow(struct Sprite *); -void SpriteCB_PokecenterMonitor(struct Sprite *); -void SpriteCB_HallOfFameMonitor(struct Sprite *); +void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable); // field_region_map.c void FieldInitRegionMap(MainCallback callback); -void sub_8088B94(int x, int y, int a2); #endif //GUARD_FIELDMAP_H diff --git a/include/fldeff.h b/include/fldeff.h index deb54372c..597ce6f47 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -9,22 +9,13 @@ bool8 FldEff_CutGrass(void); void FixLongGrassMetatilesWindowTop(s16 x, s16 y); void FixLongGrassMetatilesWindowBottom(s16 x, s16 y); -extern const struct SpritePalette gFieldEffectObjectPaletteInfo6; +extern const struct SpritePalette gSpritePalette_CutGrass; extern struct MapPosition gPlayerFacingPosition; -// groundshake -bool8 sub_81BE66C(void); -void sub_81BE6AC(void); -void sub_81BE6B8(void); -void sub_81BE72C(void); -void sub_81BE79C(void); -void sub_81BE7F4(void); -void sub_81BE994(void); - // escalator -void sub_80E1558(u8 var); -void sub_80E1570(void); -bool8 sub_80E1584(void); +void StartEscalator(bool8 var); +void StopEscalator(void); +bool8 IsEscalatorMoving(void); // soft-boiled bool8 SetUpFieldMove_SoftBoiled(void); @@ -39,7 +30,7 @@ bool8 GetMapPairFadeFromType(u8 a1, u8 a2); // strength bool8 SetUpFieldMove_Strength(void); -bool8 sub_8145E2C(void); +bool8 FldEff_UseStrength(void); // sweet scent bool8 SetUpFieldMove_SweetScent(void); @@ -55,7 +46,7 @@ bool8 FldEff_UseDig(void); // rock smash bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId); -u8 oei_task_add(void); +u8 CreateFieldMoveTask(void); bool8 SetUpFieldMove_RockSmash(void); bool8 FldEff_UseRockSmash(void); diff --git a/include/fldeff_misc.h b/include/fldeff_misc.h index 6fd15c1ea..4acca7944 100644 --- a/include/fldeff_misc.h +++ b/include/fldeff_misc.h @@ -1,10 +1,10 @@ #ifndef GUARD_FLDEFF_MISC_H #define GUARD_FLDEFF_MISC_H -void sub_80F9BCC(u16 a0, u16 a1, u8 a2); -void sub_80F9BF4(u16 a0, u16 a1, u8 a2); -bool8 sub_80F9C1C(void); -bool8 sub_80F9C30(void); +void ComputerScreenOpenEffect(u16 a0, u16 a1, u8 a2); +void ComputerScreenCloseEffect(u16 a0, u16 a1, u8 a2); +bool8 IsComputerScreenOpenEffectActive(void); +bool8 IsComputerScreenCloseEffectActive(void); bool8 SetUpFieldMove_SecretPower(void); bool8 FldEff_UseSecretPowerCave(void); bool8 FldEff_SecretPowerCave(void); @@ -15,22 +15,22 @@ bool8 FldEff_SecretPowerShrub(void); bool8 FldEff_SecretBasePCTurnOn(void); void DoSecretBasePCTurnOffEffect(void); void PopSecretBaseBalloon(s16 metatileId, s16 x, s16 y); -bool8 FldEff_NopA6FC(void); -bool8 FldEff_NopA700(void); +bool8 FldEff_Nop47(void); +bool8 FldEff_Nop48(void); void ShatterSecretBaseBreakableDoor(s16 x, s16 y); void PlaySecretBaseMusicNoteMatSound(s16 metatileId); void DoSecretBaseGlitterMatSparkle(void); bool8 FldEff_SandPillar(void); void InteractWithShieldOrTVDecoration(void); -bool8 sub_80FADE4(u16 arg0, u8 arg1); +bool8 IsLargeBreakableDecoration(u16 arg0, u8 arg1); void FldEffPoison_Start(void); bool32 FldEffPoison_IsActive(void); void DoWateringBerryTreeAnim(void); -u8 CreateRecordMixingSprite(void); -void DestroyRecordMixingSprite(void); +u8 CreateRecordMixingLights(void); +void DestroyRecordMixingLights(void); -extern const struct SpritePalette gFieldEffectObjectPaletteInfo7; -extern const struct SpritePalette gFieldEffectObjectPaletteInfo8; +extern const struct SpritePalette gSpritePalette_SecretPower_Cave; +extern const struct SpritePalette gSpritePalette_SecretPower_Plant; extern const struct SpritePalette gFieldEffectObjectPaletteInfo9; extern const u16 gTilesetPalettes_SecretBase[][16]; diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 071a89bc5..1daa99e1d 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -553,6 +553,7 @@ #define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3) #define WININ_WIN0_OBJ (1 << 4) #define WININ_WIN0_CLR (1 << 5) +#define WININ_WIN0_ALL (WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR) #define WININ_WIN1_BG0 (1 << 8) #define WININ_WIN1_BG1 (1 << 9) #define WININ_WIN1_BG2 (1 << 10) @@ -560,6 +561,7 @@ #define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3) #define WININ_WIN1_OBJ (1 << 12) #define WININ_WIN1_CLR (1 << 13) +#define WININ_WIN1_ALL (WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR) #define WINOUT_WIN01_BG0 (1 << 0) #define WINOUT_WIN01_BG1 (1 << 1) @@ -568,6 +570,7 @@ #define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3) #define WINOUT_WIN01_OBJ (1 << 4) #define WINOUT_WIN01_CLR (1 << 5) +#define WINOUT_WIN01_ALL (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR) #define WINOUT_WINOBJ_BG0 (1 << 8) #define WINOUT_WINOBJ_BG1 (1 << 9) #define WINOUT_WINOBJ_BG2 (1 << 10) @@ -575,6 +578,7 @@ #define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3) #define WINOUT_WINOBJ_OBJ (1 << 12) #define WINOUT_WINOBJ_CLR (1 << 13) +#define WINOUT_WINOBJ_ALL (WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR) #define WIN_RANGE(a, b) (((a) << 8) | (b)) #define WIN_RANGE2(a, b) ((b) | ((a) << 8)) @@ -585,9 +589,10 @@ #define BLDCNT_TGT1_BG1 (1 << 1) #define BLDCNT_TGT1_BG2 (1 << 2) #define BLDCNT_TGT1_BG3 (1 << 3) +#define BLDCNT_TGT1_BG_ALL (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3) #define BLDCNT_TGT1_OBJ (1 << 4) #define BLDCNT_TGT1_BD (1 << 5) -#define BLDCNT_TGT1_ALL (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD) +#define BLDCNT_TGT1_ALL (BLDCNT_TGT1_BG_ALL | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD) // Bits 6-7 select the special effect #define BLDCNT_EFFECT_NONE (0 << 6) // no special effect #define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA) @@ -598,9 +603,10 @@ #define BLDCNT_TGT2_BG1 (1 << 9) #define BLDCNT_TGT2_BG2 (1 << 10) #define BLDCNT_TGT2_BG3 (1 << 11) +#define BLDCNT_TGT2_BG_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3) #define BLDCNT_TGT2_OBJ (1 << 12) #define BLDCNT_TGT2_BD (1 << 13) -#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD) +#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG_ALL | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD) // BLDALPHA #define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1)) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index e2836c6f6..bdff1b865 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -140,55 +140,13 @@ struct SoundChannel struct WaveData *wav; u32 cp; struct MusicPlayerTrack *track; - u32 pp; - u32 np; - u32 d4; + void *pp; + void *np; + void *d4; u16 xpi; u16 xpc; }; -#define MAX_DIRECTSOUND_CHANNELS 12 - -#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer - -struct SoundInfo -{ - // This field is normally equal to ID_NUMBER but it is set to other - // values during sensitive operations for locking purposes. - // This field should be volatile but isn't. This could potentially cause - // race conditions. - u32 ident; - - vu8 pcmDmaCounter; - - // Direct Sound - u8 reverb; - u8 maxChans; - u8 masterVolume; - u8 freq; - - u8 mode; - u8 c15; - u8 pcmDmaPeriod; // number of V-blanks per PCM DMA - u8 maxLines; - u8 gap[3]; - s32 pcmSamplesPerVBlank; - s32 pcmFreq; - s32 divFreq; - struct CgbChannel *cgbChans; - u32 func; - u32 intp; - void (*CgbSound)(void); - void (*CgbOscOff)(u8); - u32 (*MidiKeyToCgbFreq)(u8, u8, u8); - u32 MPlayJumpTable; - u32 plynote; - u32 ExtVolPit; - u8 gap2[16]; - struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; - s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; -}; - struct SongHeader { u8 trackCount; @@ -312,7 +270,7 @@ struct MusicPlayerInfo struct MusicPlayerTrack *tracks; struct ToneData *tone; u32 ident; - u32 func; + void (*func)(); u32 intp; }; @@ -334,7 +292,47 @@ struct Song extern const struct MusicPlayer gMPlayTable[]; extern const struct Song gSongTable[]; +#define MAX_DIRECTSOUND_CHANNELS 12 + +#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer + +struct SoundInfo +{ + // This field is normally equal to ID_NUMBER but it is set to other + // values during sensitive operations for locking purposes. + // This field should be volatile but isn't. This could potentially cause + // race conditions. + u32 ident; + + vu8 pcmDmaCounter; + + // Direct Sound + u8 reverb; + u8 maxChans; + u8 masterVolume; + u8 freq; + u8 mode; + u8 c15; + u8 pcmDmaPeriod; // number of V-blanks per PCM DMA + u8 maxLines; + u8 gap[3]; + s32 pcmSamplesPerVBlank; + s32 pcmFreq; + s32 divFreq; + struct CgbChannel *cgbChans; + void (*func)(); + u32 intp; + void (*CgbSound)(); + void (*CgbOscOff)(u8); + u32 (*MidiKeyToCgbFreq)(u8, u8, u8); + void (**MPlayJumpTable)(); + void (*plynote)(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); + void (*ExtVolPit)(struct MusicPlayerInfo *, struct MusicPlayerTrack *); + u32 gap2[4]; + struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; + s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; +}; extern u8 gMPlayMemAccArea[]; @@ -448,7 +446,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); // extended sound command handler functions void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); diff --git a/include/gba/types.h b/include/gba/types.h index 7163f925f..35d02e263 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -27,6 +27,9 @@ typedef double f64; typedef u8 bool8; typedef u16 bool16; typedef u32 bool32; +typedef vu8 vbool8; +typedef vu16 vbool16; +typedef vu32 vbool32; struct BgCnt { diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 59610f9ad..4598e87fa 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -247,14 +247,14 @@ enum { PLAYER_AVATAR_STATE_WATERING, }; -#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << PLAYER_AVATAR_STATE_NORMAL) -#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << PLAYER_AVATAR_STATE_MACH_BIKE) -#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << PLAYER_AVATAR_STATE_ACRO_BIKE) -#define PLAYER_AVATAR_FLAG_SURFING (1 << PLAYER_AVATAR_STATE_SURFING) -#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << PLAYER_AVATAR_STATE_UNDERWATER) -#define PLAYER_AVATAR_FLAG_5 (1 << PLAYER_AVATAR_STATE_FIELD_MOVE) -#define PLAYER_AVATAR_FLAG_6 (1 << PLAYER_AVATAR_STATE_FISHING) -#define PLAYER_AVATAR_FLAG_DASH (1 << PLAYER_AVATAR_STATE_WATERING) +#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) +#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1) +#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2) +#define PLAYER_AVATAR_FLAG_SURFING (1 << 3) +#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4) +#define PLAYER_AVATAR_FLAG_5 (1 << 5) +#define PLAYER_AVATAR_FLAG_FORCED_MOVE (1 << 6) +#define PLAYER_AVATAR_FLAG_DASH (1 << 7) enum { diff --git a/include/global.h b/include/global.h index bcf3e6486..08988eac7 100644 --- a/include/global.h +++ b/include/global.h @@ -6,6 +6,8 @@ #include "config.h" // we need to define config before gba headers as print stuff needs the functions nulled before defines. #include "gba/gba.h" #include "constants/global.h" +#include "constants/flags.h" +#include "constants/vars.h" // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); @@ -52,7 +54,7 @@ #define Q_4_12(n) ((s16)((n) * 4096)) // Converts a number to Q24.8 fixed-point format -#define Q_24_8(n) ((s32)((n) * 256)) +#define Q_24_8(n) ((s32)((n) << 8)) // Converts a Q8.8 fixed-point format number to a regular integer #define Q_8_8_TO_INT(n) ((int)((n) / 256)) @@ -100,6 +102,8 @@ #define TEST_BUTTON(field, button) ({(field) & (button);}) #define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button) #define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button) +#define JOY_HELD_RAW(button) TEST_BUTTON(gMain.heldKeysRaw, button) +#define JOY_REPEAT(button) TEST_BUTTON(gMain.newAndRepeatedKeys, button) #define S16TOPOSFLOAT(val) \ ({ \ @@ -109,6 +113,11 @@ f; \ }) +#define ROUND_BITS_TO_BYTES(numBits)(((numBits) / 8) + (((numBits) % 8) ? 1 : 0)) + +#define DEX_FLAGS_NO (ROUND_BITS_TO_BYTES(POKEMON_SLOTS_NUMBER)) +#define NUM_FLAG_BYTES (ROUND_BITS_TO_BYTES(FLAGS_COUNT)) + struct Coords8 { s8 x; @@ -153,8 +162,6 @@ struct Time /*0x04*/ s8 seconds; }; -#define DEX_FLAGS_NO ((POKEMON_SLOTS_NUMBER / 8) + ((POKEMON_SLOTS_NUMBER % 8) ? 1 : 0)) - struct Pokedex { /*0x00*/ u8 order; @@ -474,7 +481,7 @@ struct SaveBlock2 /*0x20C*/ struct BerryPickingResults berryPick; /*0x21C*/ struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][2][3]; // From record mixing. /*0x57C*/ struct RankingHall2P hallRecords2P[2][3]; // From record mixing. - /*0x624*/ u16 contestLinkResults[5][4]; // 4 positions for 5 categories. + /*0x624*/ u16 contestLinkResults[CONTEST_CATEGORIES_COUNT][CONTESTANT_COUNT]; /*0x64C*/ struct BattleFrontier frontier; }; // sizeof=0xF2C @@ -483,7 +490,7 @@ extern struct SaveBlock2 *gSaveBlock2Ptr; struct SecretBaseParty { u32 personality[PARTY_SIZE]; - u16 moves[PARTY_SIZE * 4]; + u16 moves[PARTY_SIZE * MAX_MON_MOVES]; u16 species[PARTY_SIZE]; u16 heldItems[PARTY_SIZE]; u8 levels[PARTY_SIZE]; @@ -923,7 +930,7 @@ struct SaveBlock1 /*0x9CA*/ u8 trainerRematches[MAX_REMATCH_ENTRIES]; /*0xA30*/ struct ObjectEvent objectEvents[OBJECT_EVENTS_COUNT]; /*0xC70*/ struct ObjectEventTemplate objectEventTemplates[OBJECT_EVENT_TEMPLATES_COUNT]; - /*0x1270*/ u8 flags[FLAGS_COUNT]; + /*0x1270*/ u8 flags[NUM_FLAG_BYTES]; /*0x139C*/ u16 vars[VARS_COUNT]; /*0x159C*/ u32 gameStats[NUM_GAME_STATS]; /*0x169C*/ struct BerryTree berryTrees[BERRY_TREES_COUNT]; @@ -960,7 +967,7 @@ struct SaveBlock1 /*0x2E20*/ u8 additionalPhrases[8]; // bitfield for 33 additional phrases in easy chat system /*0x2E28*/ OldMan oldMan; /*0x2e64*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff - /*0x2e90*/ struct ContestWinner contestWinners[13]; // 0 - 5 used in contest hall, 6 - 7 unused?, 8 - 12 museum + /*0x2e90*/ struct ContestWinner contestWinners[NUM_CONTEST_WINNERS]; // see CONTEST_WINNER_* /*0x3030*/ struct DayCare daycare; /*0x3150*/ struct LinkBattleRecords linkBattleRecords; /*0x31A8*/ u8 giftRibbons[52]; @@ -974,7 +981,7 @@ struct SaveBlock1 /*0x3B24*/ u8 seen2[DEX_FLAGS_NO]; /*0x3B58*/ LilycoveLady lilycoveLady; /*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20]; - /*0x3C88*/ u8 unk3C88[10][21]; + /*0x3C88*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21]; /*0x3D5A*/ u8 filler3D5A[0xA]; /*0x3D64*/ struct SaveTrainerHill trainerHill; /*0x3D70*/ struct WaldaPhrase waldaPhrase; diff --git a/include/global.tv.h b/include/global.tv.h index 34791d43c..8e1a898b6 100644 --- a/include/global.tv.h +++ b/include/global.tv.h @@ -18,6 +18,13 @@ typedef union // size = 0x24 /*0x23*/ u8 trainerIdHi; } common; + // Common init (used for initialization loop) + struct { + /*0x00*/ u8 kind; + /*0x01*/ bool8 active; + /*0x02*/ u8 pad02[34]; + } commonInit; + // Local shows // TVSHOW_FAN_CLUB_LETTER struct { @@ -25,7 +32,7 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u16 species; /*0x04*/ u16 words[6]; - /*0x10*/ u8 playerName[8]; + /*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x18*/ u8 language; } fanclubLetter; @@ -35,7 +42,7 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u16 var02; /*0x04*/ u16 words[6]; - /*0x10*/ u8 playerName[8]; + /*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x18*/ u8 language; } recentHappenings; @@ -46,11 +53,11 @@ typedef union // size = 0x24 /*0x02*/ u16 species; /*0x04*/ u8 friendshipHighNybble:4; /*0x04*/ u8 questionAsked:4; - /*0x05*/ u8 playerName[8]; + /*0x05*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x0D*/ u8 language; /*0x0E*/ u8 pokemonNameLanguage; /*0x0F*/ u8 filler_0F[1]; - /*0x10*/ u8 nickname[8]; + /*0x10*/ u8 nickname[PLAYER_NAME_LENGTH + 1]; /*0x18*/ u16 words18[2]; /*0x1C*/ u16 words[4]; } fanclubOpinions; @@ -71,7 +78,7 @@ typedef union // size = 0x24 /*0x00*/ u8 kind; /*0x01*/ bool8 active; /*0x02*/ u16 species; - /*0x04*/ u8 pokemonName[11]; + /*0x04*/ u8 pokemonName[POKEMON_NAME_LENGTH + 1]; /*0x0F*/ u8 trainerName[11]; /*0x1A*/ u8 random; /*0x1B*/ u8 random2; @@ -86,12 +93,12 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u16 species; /*0x04*/ u16 words[2]; - /*0x08*/ u8 pokemonNickname[11]; + /*0x08*/ u8 pokemonNickname[POKEMON_NAME_LENGTH + 1]; /*0x13*/ u8 contestCategory:3; /*0x13*/ u8 contestRank:2; /*0x13*/ u8 contestResult:2; /*0x14*/ u16 move; - /*0x16*/ u8 playerName[8]; + /*0x16*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x1E*/ u8 language; /*0x1F*/ u8 pokemonNameLanguage; } bravoTrainer; @@ -100,7 +107,7 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u8 trainerName[8]; + /*0x02*/ u8 trainerName[PLAYER_NAME_LENGTH + 1]; /*0x0A*/ u16 species; /*0x0C*/ u8 pokemonName[8]; /*0x14*/ u16 defeatedSpecies; @@ -117,18 +124,18 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u16 winningSpecies; - /*0x04*/ u8 winningTrainerName[8]; - /*0x0C*/ u8 appealFlags2; - /*0x0D*/ u8 round1Rank; - /*0x0e*/ u8 round2Rank; - /*0x0f*/ u8 appealFlags1; + /*0x02*/ u16 losingSpecies; + /*0x04*/ u8 losingTrainerName[PLAYER_NAME_LENGTH + 1]; + /*0x0C*/ u8 loserAppealFlag; + /*0x0D*/ u8 round1Placing; + /*0x0e*/ u8 round2Placing; + /*0x0f*/ u8 winnerAppealFlag; /*0x10*/ u16 move; - /*0x12*/ u16 species; - /*0x14*/ u8 playerName[8]; + /*0x12*/ u16 winningSpecies; + /*0x14*/ u8 winningTrainerName[PLAYER_NAME_LENGTH + 1]; /*0x1C*/ u8 category; - /*0x1D*/ u8 language; - /*0x1E*/ u8 winningTrainerLanguage; + /*0x1D*/ u8 winningTrainerLanguage; + /*0x1E*/ u8 losingTrainerLanguage; } contestLiveUpdates; // TVSHOW_3_CHEERS_FOR_POKEBLOCKS @@ -137,9 +144,9 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u8 sheen; /*0x03*/ u8 flavor:3; - /*0x03*/ u8 unk_03_3:2; - /*0x04*/ u8 worstBlenderName[8]; - /*0x0C*/ u8 playerName[8]; + /*0x03*/ u8 color:2; + /*0x04*/ u8 worstBlenderName[PLAYER_NAME_LENGTH + 1]; + /*0x0C*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x14*/ u8 language; /*0x15*/ u8 worstBlenderLanguage; } threeCheers; @@ -149,8 +156,8 @@ typedef union // size = 0x24 /*0x00*/ u8 kind; /*0x01*/ bool8 active; /*0x02*/ u16 speciesOpponent; - /*0x04*/ u8 playerName[8]; - /*0x0C*/ u8 linkOpponentName[8]; + /*0x04*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x0C*/ u8 linkOpponentName[PLAYER_NAME_LENGTH + 1]; /*0x14*/ u16 move; /*0x16*/ u16 speciesPlayer; /*0x18*/ u8 battleType; @@ -162,10 +169,10 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u8 playerName[8]; + /*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x0a*/ u8 idLo; /*0x0b*/ u8 idHi; - /*0x0c*/ u8 idolName[8]; + /*0x0c*/ u8 idolName[PLAYER_NAME_LENGTH + 1]; /*0x14*/ u16 words[1]; /*0x16*/ u8 score; /*0x17*/ u8 language; @@ -176,9 +183,9 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u8 playerName[8]; + /*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x0a*/ u8 contestCategory; - /*0x0b*/ u8 nickname[11]; + /*0x0b*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x16*/ u8 pokeblockState; /*0x17*/ u8 language; /*0x18*/ u8 pokemonNameLanguage; @@ -191,11 +198,11 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u8 language; /*0x03*/ u8 language2; - /*0x04*/ u8 nickname[11]; + /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x0F*/ u8 ball; /*0x10*/ u16 species; /*0x12*/ u8 nBallsUsed; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } pokemonToday; // TVSHOW_SMART_SHOPPER @@ -208,7 +215,7 @@ typedef union // size = 0x24 /*0x06*/ u16 itemIds[3]; /*0x0C*/ u16 itemAmounts[3]; /*0x12*/ u8 shopLocation; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } smartshopperShow; // TVSHOW_POKEMON_TODAY_FAILED @@ -222,7 +229,7 @@ typedef union // size = 0x24 /*0x10*/ u8 nBallsUsed; /*0x11*/ u8 outcome; /*0x12*/ u8 location; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } pokemonTodayFailed; // TVSHOW_FISHING_ADVICE @@ -234,7 +241,7 @@ typedef union // size = 0x24 /*0x04*/ u16 species; /*0x06*/ u8 language; /*0x07*/ u8 pad07[12]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } pokemonAngler; // TVSHOW_WORLD_OF_MASTERS @@ -248,7 +255,7 @@ typedef union // size = 0x24 /*0x0a*/ u8 location; /*0x0b*/ u8 language; /*0x0c*/ u8 pad0c[7]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } worldOfMasters; // TVSHOW_TODAYS_RIVAL_TRAINER @@ -264,7 +271,7 @@ typedef union // size = 0x24 /*0x0a*/ u16 mapLayoutId; /*0x0c*/ u8 language; /*0x0d*/ u8 filler_0d[6]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } rivalTrainer; // TVSHOW_TREND_WATCHER @@ -276,7 +283,7 @@ typedef union // size = 0x24 /*0x08*/ u8 gender; /*0x09*/ u8 language; /*0x0a*/ u8 filler_0a[9]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } trendWatcher; // TVSHOW_TREASURE_INVESTIGATORS @@ -288,7 +295,7 @@ typedef union // size = 0x24 /*0x05*/ u8 language; /*0x06*/ u16 mapLayoutId; /*0x08*/ u8 filler_08[11]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } treasureInvestigators; // TVSHOW_FIND_THAT_GAMER @@ -301,7 +308,7 @@ typedef union // size = 0x24 /*0x06*/ u8 filler_06[2]; /*0x08*/ u8 language; /*0x09*/ u8 filler_09[10]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } findThatGamer; // TVSHOW_BREAKING_NEWS @@ -317,7 +324,7 @@ typedef union // size = 0x24 /*0x0c*/ u16 lastUsedMove; /*0x0e*/ u8 language; /*0x0f*/ u8 filler_0f[4]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } breakingNews; // TVSHOW_SECRET_BASE_VISIT @@ -331,7 +338,7 @@ typedef union // size = 0x24 /*0x0a*/ u16 move; /*0x0c*/ u8 language; /*0x0d*/ u8 filler_0d[6]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } secretBaseVisit; // TVSHOW_LOTTO_WINNER @@ -342,7 +349,7 @@ typedef union // size = 0x24 /*0x04*/ u8 whichPrize; /*0x05*/ u8 language; /*0x06*/ u8 filler_06[13]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } lottoWinner; // TVSHOW_BATTLE_SEMINAR @@ -357,7 +364,7 @@ typedef union // size = 0x24 /*0x10*/ u8 nOtherMoves; /*0x11*/ u8 language; /*0x12*/ u8 filler_12[1]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } battleSeminar; // TVSHOW_TRAINER_FAN_CLUB @@ -368,7 +375,7 @@ typedef union // size = 0x24 /*0x04*/ u16 words[2]; /*0x08*/ u8 language; /*0x09*/ u8 filler_09[10]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } trainerFanClub; // TVSHOW_CUTIES @@ -377,11 +384,11 @@ typedef union // size = 0x24 /*0x01*/ bool8 active; /*0x02*/ u8 nRibbons; /*0x03*/ u8 selectedRibbon; - /*0x04*/ u8 nickname[11]; + /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x0f*/ u8 language; /*0x10*/ u8 pokemonNameLanguage; /*0x11*/ u8 filler_12[2]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } cuties; // TVSHOW_FRONTIER @@ -396,7 +403,7 @@ typedef union // size = 0x24 /*0x0c*/ u8 language; /*0x0d*/ u8 facility; /*0x0e*/ u8 filler_0e[5]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } frontier; // TVSHOW_NUMBER_ONE @@ -407,7 +414,7 @@ typedef union // size = 0x24 /*0x04*/ u8 actionIdx; /*0x05*/ u8 language; /*0x06*/ u8 filler_06[13]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } numberOne; // TVSHOW_SECRET_BASE_SECRETS @@ -415,11 +422,11 @@ typedef union // size = 0x24 /*0x00*/ u8 kind; /*0x01*/ bool8 active; /*0x02*/ u16 stepsInBase; - /*0x04*/ u8 baseOwnersName[8]; + /*0x04*/ u8 baseOwnersName[PLAYER_NAME_LENGTH + 1]; /*0x0c*/ u32 flags; /*0x10*/ u16 item; /*0x12*/ u8 savedState; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x1b*/ u8 language; /*0x1c*/ u8 baseOwnersNameLanguage; } secretBaseSecrets; @@ -432,7 +439,7 @@ typedef union // size = 0x24 /*0x03*/ u8 nPkblkUsed; /*0x04*/ u8 language; /*0x05*/ u8 filler_05[14]; - /*0x13*/ u8 playerName[8]; + /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; } safariFanClub; // Mass Outbreak diff --git a/include/graphics.h b/include/graphics.h index b41a43095..32268d6db 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3180,11 +3180,12 @@ extern const u32 gDecorIconPalette_RegiceDoll[]; extern const u32 gDecorIcon_RegisteelDoll[]; extern const u32 gDecorIconPalette_RegisteelDoll[]; -extern const u32 gWallclock_Gfx[]; -extern const u16 gWallclockMale_Pal[]; -extern const u16 gWallclockFemale_Pal[]; -extern const u32 gUnknown_08DCC648[]; -extern const u32 gUnknown_08DCC908[]; +extern const u32 gWallClock_Gfx[]; +extern const u16 gWallClockMale_Pal[]; +extern const u16 gWallClockFemale_Pal[]; +extern const u32 gWallClockStart_Tilemap[]; +extern const u32 gWallClockView_Tilemap[]; + extern const u32 gBerryFixGameboy_Gfx[]; extern const u32 gBerryFixGameboy_Tilemap[]; extern const u16 gBerryFixGameboy_Pal[]; @@ -3309,57 +3310,57 @@ extern const u32 gBerryTag_Gfx[]; extern const u32 gBerryTag_Pal[]; // rayquaza scene gfx -extern const u32 gRaySceneGroudon_Gfx[]; -extern const u32 gRaySceneGroudon2_Gfx[]; -extern const u32 gRaySceneGroudon3_Gfx[]; -extern const u32 gRaySceneKyogre_Gfx[]; -extern const u32 gRaySceneKyogre2_Gfx[]; -extern const u32 gRaySceneKyogre3_Gfx[]; -extern const u32 gRaySceneGroudon_Pal[]; -extern const u32 gRaySceneKyogre_Pal[]; -extern const u32 gRaySceneSmoke_Gfx[]; -extern const u32 gRaySceneSmoke_Pal[]; -extern const u32 gRaySceneRayquaza_Pal[]; -extern const u32 gRaySceneRayquazaFly1_Gfx[]; -extern const u32 gRaySceneRayquazaTail_Gfx[]; -extern const u32 gRaySceneGroudonLeft_Gfx[]; -extern const u32 gRaySceneGroudonTail_Gfx[]; -extern const u32 gRaySceneKyogreRight_Gfx[]; -extern const u32 gRaySceneRayquazaHover_Gfx[]; -extern const u32 gRaySceneRayquazaFlyIn_Gfx[]; -extern const u32 gRaySceneOvercast_Gfx[]; -extern const u32 gRaySceneOvercast_Tilemap[]; -extern const u32 gRaySceneRayquaza_Gfx[]; -extern const u32 gRaySceneRayquaza_Tilemap[]; -extern const u32 gRaySceneSplash_Gfx[]; -extern const u32 gRaySceneGroudonLeft_Pal[]; -extern const u32 gRaySceneKyogreRight_Pal[]; -extern const u32 gRaySceneRayquazaHover_Pal[]; -extern const u32 gRaySceneSplash_Pal[]; -extern const u32 gRaySceneClouds_Gfx[]; -extern const u32 gRaySceneClouds_Pal[]; -extern const u32 gRaySceneClouds2_Tilemap[]; -extern const u32 gRaySceneClouds1_Tilemap[]; -extern const u32 gRaySceneClouds3_Tilemap[]; -extern const u32 gRaySceneRayquazaLight_Gfx[]; -extern const u32 gRaySceneRayquazaLight_Tilemap[]; -extern const u32 gRaySceneOvercast2_Gfx[]; -extern const u32 gRaySceneOvercast2_Tilemap[]; -extern const u32 gRaySceneOvercast2_Pal[]; -extern const u32 gRaySceneRayquazaChase_Gfx[]; -extern const u32 gRaySceneChaseStreaks_Gfx[]; -extern const u32 gRaySceneChaseBg_Gfx[]; -extern const u32 gRayChaseRayquazaChase2_Tilemap[]; -extern const u32 gRayChaseRayquazaChase_Tilemap[]; -extern const u32 gRaySceneChaseStreaks_Tilemap[]; -extern const u32 gRaySceneChaseBg_Tilemap[]; -extern const u32 gRaySceneChase_Pal[]; -extern const u32 gRaySceneHushRing_Tilemap[]; -extern const u32 gRaySceneHushBg_Tilemap[]; -extern const u32 gRaySceneHushRing_Map[]; -extern const u32 gRaySceneHushBg_Pal[]; -extern const u32 gRaySceneHushBg_Gfx[]; -extern const u32 gRaySceneHushRing_Gfx[]; +extern const u32 gRaySceneDuoFight_Groudon_Gfx[]; +extern const u32 gRaySceneDuoFight_GroudonShoulder_Gfx[]; +extern const u32 gRaySceneDuoFight_GroudonClaw_Gfx[]; +extern const u32 gRaySceneDuoFight_Kyogre_Gfx[]; +extern const u32 gRaySceneDuoFight_KyogrePectoralFin_Gfx[]; +extern const u32 gRaySceneDuoFight_KyogreDorsalFin_Gfx[]; +extern const u32 gRaySceneDuoFight_Groudon_Pal[]; +extern const u32 gRaySceneDuoFight_Kyogre_Pal[]; +extern const u32 gRaySceneDuoFight_Clouds_Gfx[]; +extern const u32 gRaySceneDuoFight_Clouds_Pal[]; +extern const u32 gRaySceneDuoFight_Clouds1_Tilemap[]; +extern const u32 gRaySceneDuoFight_Clouds2_Tilemap[]; +extern const u32 gRaySceneDuoFight_Clouds3_Tilemap[]; +extern const u32 gRaySceneTakesFlight_Smoke_Gfx[]; +extern const u32 gRaySceneTakesFlight_Smoke_Pal[]; +extern const u32 gRaySceneTakesFlight_Rayquaza_Pal[]; +extern const u32 gRaySceneTakesFlight_Bg_Gfx[]; +extern const u32 gRaySceneTakesFlight_Bg_Tilemap[]; +extern const u32 gRaySceneTakesFlight_Rayquaza_Gfx[]; +extern const u32 gRaySceneTakesFlight_Rayquaza_Tilemap[]; +extern const u32 gRaySceneDescends_Rayquaza_Gfx[]; +extern const u32 gRaySceneDescends_RayquazaTail_Gfx[]; +extern const u32 gRaySceneDescends_Light_Gfx[]; +extern const u32 gRaySceneDescends_Light_Tilemap[]; +extern const u32 gRaySceneDescends_Bg_Gfx[]; +extern const u32 gRaySceneDescends_Bg_Tilemap[]; +extern const u32 gRaySceneDescends_Bg_Pal[]; +extern const u32 gRaySceneCharges_Rayquaza_Gfx[]; +extern const u32 gRaySceneCharges_Streaks_Gfx[]; +extern const u32 gRaySceneCharges_Bg_Gfx[]; +extern const u32 gRaySceneCharges_Orbs_Tilemap[]; +extern const u32 gRaySceneCharges_Rayquaza_Tilemap[]; +extern const u32 gRaySceneCharges_Streaks_Tilemap[]; +extern const u32 gRaySceneCharges_Bg_Tilemap[]; +extern const u32 gRaySceneCharges_Bg_Pal[]; +extern const u32 gRaySceneChasesAway_Groudon_Gfx[]; +extern const u32 gRaySceneChasesAway_GroudonTail_Gfx[]; +extern const u32 gRaySceneChasesAway_Kyogre_Gfx[]; +extern const u32 gRaySceneChasesAway_Rayquaza_Gfx[]; +extern const u32 gRaySceneChasesAway_RayquazaTail_Gfx[]; +extern const u32 gRaySceneChasesAway_KyogreSplash_Gfx[]; +extern const u32 gRaySceneChasesAway_Groudon_Pal[]; +extern const u32 gRaySceneChasesAway_Kyogre_Pal[]; +extern const u32 gRaySceneChasesAway_Rayquaza_Pal[]; +extern const u32 gRaySceneChasesAway_KyogreSplash_Pal[]; +extern const u32 gRaySceneChasesAway_Bg_Tilemap[]; +extern const u32 gRaySceneChasesAway_Light_Tilemap[]; +extern const u32 gRaySceneChasesAway_Ring_Tilemap[]; +extern const u32 gRaySceneChasesAway_Bg_Pal[]; +extern const u32 gRaySceneChasesAway_Light_Gfx[]; +extern const u32 gRaySceneChasesAway_Ring_Gfx[]; // Pokeballs extern const u32 gItemIcon_MasterBall[]; @@ -4069,21 +4070,21 @@ extern const u8 gHealthboxElementsGfxTable[][32]; extern const u16 gNamingScreenMenu_Pal[]; extern const u32 gNamingScreenMenu_Gfx[]; -extern const u32 gUnknown_08DD4544[]; -extern const u8 gUnknown_08DD4620[]; -extern const u8 gUnknown_08DD46E0[]; -extern const u8 gUnknown_08DD47A0[]; +extern const u32 gNamingScreenBackground_Tilemap[]; +extern const u8 gNamingScreenKeyboardUpper_Tilemap[]; +extern const u8 gNamingScreenKeyboardLower_Tilemap[]; +extern const u8 gNamingScreenKeyboardSymbols_Tilemap[]; extern const u8 gNamingScreenRWindow_Gfx[]; -extern const u8 gNamingScreenKeyboardButton_Gfx[]; +extern const u8 gNamingScreenPageButton_Gfx[]; extern const u8 gNamingScreenROptions_Gfx[]; extern const u8 gNamingScreenCursor_Gfx[]; -extern const u8 gNamingScreenRightPointingTriangleTiles[]; -extern const u8 gNamingScreenUnderscoreTiles[]; +extern const u8 gNamingScreenInputArrow_Gfx[]; +extern const u8 gNamingScreenUnderscore_Gfx[]; extern const u32 gUnknown_08D9BA44[]; -extern const u32 gContestConfetti_Gfx[]; -extern const u32 gContestConfetti_Pal[]; +extern const u32 gConfetti_Gfx[]; +extern const u32 gConfetti_Pal[]; extern const u32 gUnknown_08C093F0[]; extern const u32 gSubstituteDollTilemap[]; @@ -4786,10 +4787,10 @@ extern const u32 gOldContestGfx[]; extern const u32 gOldContestPalette[]; extern const u32 gUnknown_08C17170[]; extern const u32 gUnknown_08C17980[]; -extern const u32 gTiles_8C19450[]; +extern const u32 gContestSliderHeart_Gfx[]; extern const u32 gContestNextTurnGfx[]; extern const u16 gContestPal[]; -extern const u32 gUnknown_08C19168[]; +extern const u32 gContestFaces_Gfx[]; extern const u32 gContestApplauseGfx[]; extern const u32 gContestJudgeGfx[]; extern const u32 gContestJudgeSymbolsGfx[]; @@ -4812,19 +4813,19 @@ extern const u16 gUsePokeblockGraph_Pal[]; extern const u16 gUsePokeblockNatureWin_Pal[]; // Berry blender -extern const u32 gBerryBlenderArrowTiles[]; -extern const u32 gBerryBlenderStartTiles[]; -extern const u32 gBerryBlenderMarubatsuTiles[]; -extern const u32 gBerryBlenderParticlesTiles[]; -extern const u32 gBerryBlenderCountdownNumbersTiles[]; +extern const u32 gBerryBlenderPlayerArrow_Gfx[]; +extern const u32 gBerryBlenderStart_Gfx[]; +extern const u32 gBerryBlenderScoreSymbols_Gfx[]; +extern const u32 gBerryBlenderParticles_Gfx[]; +extern const u32 gBerryBlenderCountdownNumbers_Gfx[]; extern const u16 gBerryBlenderMiscPalette[]; extern const u16 gBerryBlenderArrowPalette[]; -extern const u32 sBlenderCenterGfx[]; -extern const u32 gUnknown_08D91DB8[]; -extern const u32 gUnknown_08D927EC[]; +extern const u32 gBerryBlenderCenter_Gfx[]; +extern const u32 gBerryBlenderOuter_Gfx[]; +extern const u32 gBerryBlenderOuter_Tilemap[]; // Slot Machine -extern const u32 gSlotMachineReelTime_Gfx[]; +extern const u32 gSlotMachineDigitalDisplay_Gfx[]; extern const u8 gSlotMachineReelTimeNumber0[]; extern const u8 gSlotMachineReelTimeNumber1[]; extern const u8 gSlotMachineReelTimeNumber2[]; @@ -4832,15 +4833,15 @@ extern const u8 gSlotMachineReelTimeNumber3[]; extern const u8 gSlotMachineReelTimeNumber4[]; extern const u8 gSlotMachineReelTimeNumber5[]; extern const u8 gSlotMachineReelTimeShadow[]; -extern const u8 gUnknown_08DD1A18[]; -extern const u8 gSlotMachineReelTimeLargeBolt0[]; -extern const u8 gSlotMachineReelTimeLargeBolt1[]; +extern const u8 gSlotMachineReelTimeNumberGap_Gfx[]; +extern const u8 gSlotMachineReelTimeBolt0[]; +extern const u8 gSlotMachineReelTimeBolt1[]; extern const u8 gSlotMachineReelTimePikaAura[]; extern const u8 gSlotMachineReelTimeExplosion0[]; extern const u8 gSlotMachineReelTimeExplosion1[]; extern const u8 gSlotMachineReelTimeDuck[]; extern const u8 gSlotMachineReelTimeSmoke[]; -extern const u8 gSlotMachineReelTimeBolt[]; +extern const u8 gSlotMachinePikaPowerBolt[]; extern const u8 gSlotMachineReelSymbol1Tiles[]; extern const u8 gSlotMachineReelSymbol2Tiles[]; extern const u8 gSlotMachineReelSymbol3Tiles[]; @@ -4858,19 +4859,18 @@ extern const u8 gSlotMachineNumber6Tiles[]; extern const u8 gSlotMachineNumber7Tiles[]; extern const u8 gSlotMachineNumber8Tiles[]; extern const u8 gSlotMachineNumber9Tiles[]; -extern const u8 gUnknown_08DD19F8[]; +extern const u8 gSlotMachineReelBackground_Tilemap[]; extern const u32 gSlotMachineMenu_Gfx[]; extern const u16 gSlotMachineMenu_Tilemap[]; -extern const u16 gUnknown_08DCEC70[]; +extern const u16 gSlotMachineInfoBox_Tilemap[]; extern const u16 gSlotMachineMenu_Pal[]; -extern const u16 gUnknown_08DCF230[]; -extern const u16 gUnknown_08DCF170[]; -extern const u16 gUnknown_08DCF1B0[]; -extern const u16 gSlotMachineReelTime_Pal[]; -extern const u16 gUnknown_08DCF1F0[]; -extern const u16 gUnknown_08DCF210[]; -extern const u16 gUnknown_08DCF230[]; -extern const u16 gUnknown_08DCF190[]; +extern const u16 gSlotMachineReelSymbols_Pal[]; +extern const u16 gSlotMachineReelTimeMisc_Pal[]; +extern const u16 gSlotMachineReelTimeMachine_Pal[]; +extern const u16 gSlotMachineMisc_Pal[]; +extern const u16 gSlotMachineReelTimeExplosion_Pal[]; +extern const u16 gSlotMachineDigitalDisplay_Pal[]; +extern const u16 gSlotMachineReelTimePikachu_Pal[]; extern const u32 gBattleAnimBgTilemap_Sandstorm[]; extern const u32 gBattleAnimBgImage_Sandstorm[]; @@ -4894,11 +4894,11 @@ extern const u32 gWallpaperTilemap_Horizontal[]; extern const u16 gWallpaperPalettes_Horizontal[][16]; // Cable Car -extern const u32 gUnknown_08DBA5B8[]; -extern const u16 gUnknown_08DBA518[]; +extern const u32 gCableCarBg_Gfx[]; +extern const u16 gCableCarBg_Pal[]; extern const u32 gCableCar_Gfx[]; extern const u32 gCableCarDoor_Gfx[]; -extern const u32 gCableCarCord_Gfx[]; +extern const u32 gCableCarCable_Gfx[]; extern const u16 gCableCar_Pal[]; // Trade @@ -4919,31 +4919,31 @@ extern const u32 gPartyMenuPokeball_Pal[]; extern const u32 gStatusPal_Icons[]; // Roulette -extern const u32 gRouletteMenuTiles[]; -extern const u32 gRouletteWheelTiles[]; +extern const u32 gRouletteMenu_Gfx[]; +extern const u32 gRouletteWheel_Gfx[]; extern const u32 gRouletteCenter_Gfx[]; -extern const u32 gRouletteHeadersTiles[]; -extern const u32 gRouletteCreditTiles[]; -extern const u32 gRouletteNumbersTiles[]; -extern const u32 gRouletteMultiplierTiles[]; +extern const u32 gRouletteHeaders_Gfx[]; +extern const u32 gRouletteCredit_Gfx[]; +extern const u32 gRouletteNumbers_Gfx[]; +extern const u32 gRouletteMultiplier_Gfx[]; -// Contest Link -extern const u32 gUnknown_08C19588[]; +// Contest util +extern const u32 gContestResults_Gfx[]; extern const u32 gUnknown_08C19EEC[]; extern const u32 gUnknown_08C1A000[]; extern const u32 gUnknown_08C1A12C[]; -extern const u32 gUnknown_08C1A2B4[]; -extern const u16 gUnknown_08DC6498[]; -extern const u16 gUnknown_08DC63F8[]; -extern const u16 gUnknown_08DC6420[]; -extern const u16 gUnknown_08DC6448[]; -extern const u16 gUnknown_08DC6470[]; -extern const u16 gUnknown_08DC64AC[]; -extern const u16 gUnknown_08DC64C0[]; -extern const u16 gUnknown_08DC64D4[]; -extern const u16 gUnknown_08DC64E8[]; -extern const u16 gUnknown_08DC64FC[]; -extern const u16 gUnknown_08DC6510[]; +extern const u32 gContestResults_Pal[]; +extern const u16 gLinkContestResults_Tilemap[]; +extern const u16 gNormalContestResults_Tilemap[]; +extern const u16 gSuperContestResults_Tilemap[]; +extern const u16 gHyperContestResults_Tilemap[]; +extern const u16 gMasterContestResults_Tilemap[]; +extern const u16 gCoolContestResults_Tilemap[]; +extern const u16 gBeautyContestResults_Tilemap[]; +extern const u16 gCuteContestResults_Tilemap[]; +extern const u16 gSmartContestResults_Tilemap[]; +extern const u16 gToughContestResults_Tilemap[]; +extern const u16 gContestResults_Tilemap[]; // Trainer Card. extern const u16 gHoennTrainerCard0Star_Pal[]; @@ -4986,14 +4986,14 @@ extern const u16 gEasyChatRightWindow_Pal[]; extern const u32 gUsePokeblockCondition_Gfx[]; // Union Room Chat -extern const u16 gUnknown_08DD4BB0[]; -extern const u16 gUnknown_08DD4BD0[]; -extern const u32 gUnknown_08DD4BF0[]; -extern const u32 gUnknown_08DD4C4C[]; -extern const u32 gUnknown_08DD4CF8[]; -extern const u16 gLinkMiscMenu_Pal[]; -extern const u32 gLinkMiscMenu_Gfx[]; -extern const u32 gLinkMiscMenu_Tilemap[]; +extern const u16 gUnionRoomChat_Background_Pal[]; +extern const u32 gUnionRoomChat_Background_Gfx[]; +extern const u32 gUnionRoomChat_Background_Tilemap[]; +extern const u16 gUnionRoomChat_Window_Pal1[]; +extern const u16 gUnionRoomChat_Window_Pal2[]; +extern const u32 gUnionRoomChat_Border_Gfx[]; +extern const u32 gUnionRoomChat_Border_Tilemap[]; +extern const u32 gUnionRoomChat_RButtonLabels[]; // Use Pokeblock extern const u8 gPokenavConditionCancel_Gfx[]; diff --git a/include/hall_of_fame.h b/include/hall_of_fame.h index a83fad2fc..f1f456713 100644 --- a/include/hall_of_fame.h +++ b/include/hall_of_fame.h @@ -4,7 +4,6 @@ void CB2_DoHallOfFameScreen(void); void CB2_DoHallOfFameScreenDontSaveData(void); void CB2_DoHallOfFamePC(void); -void DoConfettiEffect(void); // hof_pc.c void ReturnFromHallOfFamePC(void); diff --git a/include/item_menu.h b/include/item_menu.h index 089bff6cf..a99272b0c 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -4,19 +4,35 @@ #include "item.h" #include "menu_helpers.h" -#define RETURN_LOCATION_FIELD 0 -#define RETURN_LOCATION_BATTLE 1 -#define RETURN_LOCATION_POKEMON_LIST 2 -#define RETURN_LOCATION_SHOP 3 -#define RETURN_LOCATION_FIELD_2 4 -#define RETURN_LOCATION_FIELD_3 5 -#define RETURN_LOCATION_PC 6 -#define RETURN_LOCATION_FIELD_4 7 -#define RETURN_LOCATION_FIELD_5 8 -#define RETURN_LOCATION_FIELD_6 9 -#define RETURN_LOCATION_BATTLE_2 10 -#define RETURN_LOCATION_PC_2 11 -#define RETURN_LOCATION_UNCHANGED 12 +#define ITEMMENULOCATION_FIELD 0 +#define ITEMMENULOCATION_BATTLE 1 +#define ITEMMENULOCATION_PARTY 2 +#define ITEMMENULOCATION_SHOP 3 +#define ITEMMENULOCATION_BERRY_TREE 4 +#define ITEMMENULOCATION_BERRY_BLENDER_CRUSH 5 +#define ITEMMENULOCATION_ITEMPC 6 +#define ITEMMENULOCATION_FAVOR_LADY 7 +#define ITEMMENULOCATION_QUIZ_LADY 8 +#define ITEMMENULOCATION_APPRENTICE 9 +#define ITEMMENULOCATION_WALLY 10 +#define ITEMMENULOCATION_PCBOX 11 +#define ITEMMENULOCATION_LAST 12 + +#define ITEMMENUACTION_USE 0 +#define ITEMMENUACTION_TOSS 1 +#define ITEMMENUACTION_REGISTER 2 +#define ITEMMENUACTION_GIVE 3 +#define ITEMMENUACTION_CANCEL 4 +#define ITEMMENUACTION_BATTLE_USE 5 +#define ITEMMENUACTION_CHECK 6 +#define ITEMMENUACTION_WALK 7 +#define ITEMMENUACTION_DESELECT 8 +#define ITEMMENUACTION_CHECK_TAG 9 +#define ITEMMENUACTION_CONFIRM 10 +#define ITEMMENUACTION_SHOW 11 +#define ITEMMENUACTION_GIVE_2 12 +#define ITEMMENUACTION_CONFIRM_2 13 +#define ITEMMENUACTION_DUMMY 14 // Exported type declarations struct BagStruct @@ -33,29 +49,24 @@ extern struct BagStruct gBagPositionStruct; struct BagMenuStruct { - void (*mainCallback2)(void); + void (*exitCallback)(void); u8 tilemapBuffer[0x800]; u8 spriteId[12]; - u8 windowPointers[7]; - u8 unk817; - u8 unk818; - u8 unk819; - u8 unk81A; - u8 unk81B:4; - u8 unk81B_1:2; - u8 unk81B_3:1; + u8 windowPointers[10]; + u8 itemOriginalLocation; + u8 pocketSwitchDisabled:4; + u8 itemIconSlot:2; + u8 inhibitItemDescriptionPrint:1; u8 hideCloseBagText:1; u8 filler3[2]; - u8 unk81E; - u8 unk81F; - const u8* unk820; - u8 unk824; - u8 unk825; - u8 filler[2]; - u8 unk828; + u8 pocketScrollArrowsTask; + u8 pocketSwitchArrowsTask; + const u8* contextMenuItemsPtr; + u8 contextMenuItemsBuffer[4]; + u8 contextMenuNumItems; u8 numItemStacks[POCKETS_COUNT]; u8 numShownItems[6]; - s16 unk834; + s16 graphicsLoadState; u8 filler4[0xE]; u8 pocketNameBuffer[32][32]; u8 filler2[4]; @@ -68,11 +79,11 @@ extern struct BagMenuStruct *gBagMenu; extern u16 gSpecialVar_ItemId; // Exported ROM declarations -void sub_81AAC14(void); +void CB2_GoToItemDepositMenu(void); void FavorLadyOpenBagMenu(void); void QuizLadyOpenBagMenu(void); void ApprenticeOpenBagMenu(void); -void sub_81AABB0(void); +void CB2_BagMenuFromBattle(void); void SetInitialScrollAndCursorPositions(u8 pocketId); void CB2_ReturnToBagMenuPocket(void); void CB2_BagMenuFromStartMenu(void); @@ -82,7 +93,7 @@ void CB2_GoToSellMenu(void); void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)()); void DoWallyTutorialBagMenu(void); void ResetBagScrollPositions(void); -void ChooseBerrySetCallback(void (*callback)(void)); +void ChooseBerryForMachine(void (*exitCallback)(void)); void CB2_ChooseBerry(void); void Task_FadeAndCloseBagMenu(u8 taskId); void BagMenu_YesNo(u8, u8, const struct YesNoFuncTable*); diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h index 50f0d5544..e061149fc 100644 --- a/include/item_menu_icons.h +++ b/include/item_menu_icons.h @@ -10,7 +10,7 @@ extern const struct CompressedSpritePalette gBerryCheckCirclePaletteTable; void RemoveBagSprite(u8 id); void AddBagVisualSprite(u8 bagPocketId); void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets); -void ShakeBagVisual(void); +void ShakeBagSprite(void); void AddSwitchPocketRotatingBallSprite(s16 rotationDirection); void AddBagItemIconSprite(u16 itemId, u8 id); void RemoveBagItemIconSprite(u8 id); @@ -19,7 +19,7 @@ void sub_80D4FC8(u8 arg0); void sub_80D4FEC(u8 arg0); u8 CreateBerryTagSprite(u8 id, s16 x, s16 y); void FreeBerryTagSpritePalette(void); -u8 LoadSpinningBerryPicGfx(u8 berryId, u8 x, u8 y, bool8 startAffine); +u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine); u8 CreateBerryFlavorCircleSprite(s16 x); #define TAG_BAG_GFX 100 diff --git a/include/libgcnmultiboot.h b/include/libgcnmultiboot.h index 7d347df05..4a6262d8f 100644 --- a/include/libgcnmultiboot.h +++ b/include/libgcnmultiboot.h @@ -1,4 +1,4 @@ -#ifndef GUARD_LIBGCMMULTIBOOT_H +#ifndef GUARD_LIBGCNMULTIBOOT_H #define GUARD_LIBGCNMULTIBOOT_H struct GcmbStruct diff --git a/include/link.h b/include/link.h index f41161d23..086bf787b 100644 --- a/include/link.h +++ b/include/link.h @@ -48,52 +48,60 @@ #define EXTRACT_LINK_ERRORS(status) \ (((status) & LINK_STAT_ERRORS) >> LINK_STAT_ERRORS_SHIFT) -#define LINKCMD_SEND_LINK_TYPE 0x2222 -#define LINKCMD_0x2FFE 0x2FFE -#define LINKCMD_SEND_HELD_KEYS 0x4444 -#define LINKCMD_0x5555 0x5555 -#define LINKCMD_0x5566 0x5566 -#define LINKCMD_0x5FFF 0x5FFF -#define LINKCMD_0x6666 0x6666 -#define LINKCMD_0x7777 0x7777 -#define LINKCMD_CONT_BLOCK 0x8888 -#define LINKCMD_0xAAAA 0xAAAA -#define LINKCMD_0xAAAB 0xAAAB -#define LINKCMD_READY_TO_TRADE 0xAABB -#define LINKCMD_READY_FINISH_TRADE 0xABCD -#define LINKCMD_INIT_BLOCK 0xBBBB -#define LINKCMD_READY_CANCEL_TRADE 0xBBCC -#define LINKCMD_SEND_HELD_KEYS_2 0xCAFE -#define LINKCMD_0xCCCC 0xCCCC -#define LINKCMD_START_TRADE 0xCCDD -#define LINKCMD_CONFIRM_FINISH_TRADE 0xDCBA -#define LINKCMD_SET_MONS_TO_TRADE 0xDDDD -#define LINKCMD_0xDDEE 0xDDEE -#define LINKCMD_REQUEST_CANCEL 0xEEAA -#define LINKCMD_CANCEL_TRADE 0xEEBB -#define LINKCMD_0xEECC 0xEECC - -#define LINKTYPE_0x1111 0x1111 // trade -#define LINKTYPE_0x1122 0x1122 // trade -#define LINKTYPE_0x1133 0x1133 // trade -#define LINKTYPE_0x1144 0x1144 // trade -#define LINKTYPE_BATTLE 0x2211 -#define LINKTYPE_0x2222 0x2222 // unused battle? -#define LINKTYPE_SINGLE_BATTLE 0x2233 -#define LINKTYPE_DOUBLE_BATTLE 0x2244 -#define LINKTYPE_MULTI_BATTLE 0x2255 -#define LINKTYPE_BATTLE_TOWER_50 0x2266 -#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277 -#define LINKTYPE_BATTLE_TOWER 0x2288 -#define LINKTYPE_0x3311 0x3311 -#define LINKTYPE_0x3322 0x3322 -#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411 -#define LINKTYPE_BERRY_BLENDER 0x4422 -#define LINKTYPE_0x5501 0x5501 // mystery event -#define LINKTYPE_0x5502 0x5502 // unused? -#define LINKTYPE_0x5503 0x5503 // eReader -#define LINKTYPE_CONTEST_GMODE 0x6601 -#define LINKTYPE_CONTEST_EMODE 0x6602 +#define LINKCMD_BLENDER_STOP 0x1111 +#define LINKCMD_SEND_LINK_TYPE 0x2222 +#define LINKCMD_BLENDER_SCORE_MISS 0x2345 +#define LINKCMD_READY_EXIT_STANDBY 0x2FFE +#define LINKCMD_SEND_PACKET 0x2FFF +#define LINKCMD_BLENDER_SEND_KEYS 0x4444 +#define LINKCMD_BLENDER_SCORE_BEST 0x4523 +#define LINKCMD_BLENDER_SCORE_GOOD 0x5432 +#define LINKCMD_0x5555 0x5555 +#define LINKCMD_0x5566 0x5566 +#define LINKCMD_READY_CLOSE_LINK 0x5FFF +#define LINKCMD_0x6666 0x6666 +#define LINKCMD_0x7777 0x7777 +#define LINKCMD_BLENDER_PLAY_AGAIN 0x7779 +#define LINKCMD_0x7FFF 0x7FFF +#define LINKCMD_CONT_BLOCK 0x8888 +#define LINKCMD_BLENDER_NO_BERRIES 0x9999 +#define LINKCMD_BLENDER_NO_PBLOCK_SPACE 0xAAAA +#define LINKCMD_0xAAAB 0xAAAB +#define LINKCMD_READY_TO_TRADE 0xAABB +#define LINKCMD_READY_FINISH_TRADE 0xABCD +#define LINKCMD_INIT_BLOCK 0xBBBB +#define LINKCMD_READY_CANCEL_TRADE 0xBBCC +#define LINKCMD_SEND_HELD_KEYS 0xCAFE +#define LINKCMD_SEND_BLOCK_REQ 0xCCCC +#define LINKCMD_START_TRADE 0xCCDD +#define LINKCMD_CONFIRM_FINISH_TRADE 0xDCBA +#define LINKCMD_SET_MONS_TO_TRADE 0xDDDD +#define LINKCMD_0xDDEE 0xDDEE +#define LINKCMD_REQUEST_CANCEL 0xEEAA +#define LINKCMD_CANCEL_TRADE 0xEEBB +#define LINKCMD_0xEECC 0xEECC + +#define LINKTYPE_TRADE 0x1111 +#define LINKTYPE_TRADE_CONNECTING 0x1122 +#define LINKTYPE_TRADE_SETUP 0x1133 +#define LINKTYPE_TRADE_DISCONNECTED 0x1144 +#define LINKTYPE_BATTLE 0x2211 +#define LINKTYPE_0x2222 0x2222 // unused battle? +#define LINKTYPE_SINGLE_BATTLE 0x2233 +#define LINKTYPE_DOUBLE_BATTLE 0x2244 +#define LINKTYPE_MULTI_BATTLE 0x2255 +#define LINKTYPE_BATTLE_TOWER_50 0x2266 +#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277 +#define LINKTYPE_BATTLE_TOWER 0x2288 +#define LINKTYPE_RECORD_MIX_BEFORE 0x3311 +#define LINKTYPE_RECORD_MIX_AFTER 0x3322 +#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411 +#define LINKTYPE_BERRY_BLENDER 0x4422 +#define LINKTYPE_MYSTERY_EVENT 0x5501 +#define LINKTYPE_0x5502 0x5502 // unused? +#define LINKTYPE_EREADER 0x5503 +#define LINKTYPE_CONTEST_GMODE 0x6601 +#define LINKTYPE_CONTEST_EMODE 0x6602 struct LinkStatus { @@ -126,10 +134,10 @@ enum EXCHANGE_NOT_STARTED, EXCHANGE_COMPLETE, EXCHANGE_TIMED_OUT, - EXCHANGE_IN_PROGRESS, + EXCHANGE_DIFF_SELECTIONS, EXCHANGE_PLAYER_NOT_READY, EXCHANGE_PARTNER_NOT_READY, - EXCHANGE_STAT_6, + EXCHANGE_WRONG_NUM_PLAYERS, EXCHANGE_STAT_7 }; @@ -230,7 +238,7 @@ extern u16 gSendCmd[CMD_LENGTH]; extern struct LinkPlayer gLinkPlayers[5]; extern u16 word_3002910[]; extern bool8 gReceivedRemoteLinkPlayers; -extern u32 gUnknown_020223C0; +extern u32 gBerryBlenderKeySendAttempts; extern bool8 gLinkVSyncDisabled; extern u32 gLinkStatus; @@ -273,26 +281,25 @@ bool32 InUnionRoom(void); void LoadWirelessStatusIndicatorSpriteGfx(void); bool8 IsLinkTaskFinished(void); void CreateWirelessStatusIndicatorSprite(u8, u8); -void sub_800ADF8(void); -void sub_800B488(void); +void SetLinkStandbyCallback(void); +void SetWirelessCommType1(void); void CheckShouldAdvanceLinkState(void); -void sub_8011BD0(void); u8 IsLinkMaster(void); -void sub_800AC34(void); +void SetCloseLinkCallback(void); bool8 HandleLinkConnection(void); void SetLinkDebugValues(u32 seed, u32 flags); -void sub_800A418(void); +void SetBerryBlenderLinkCallback(void); void SetSuppressLinkErrorMessage(bool8 flag); void sub_800B524(struct LinkPlayer *linkPlayer); u8 GetSioMultiSI(void); -void sub_800AAF4(void); -void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06); +void ClearSavedLinkPlayers(void); +void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06); void sub_800B348(void); -void sub_800B3A4(u32 who); -bool32 sub_800A07C(void); +void LinkPlayerFromBlock(u32 who); +bool32 Link_AnyPartnersPlayingFRLG_JP(void); void ResetLinkPlayerCount(void); -void sub_800AA04(u8 a0); -void sub_800B4C0(void); +void SaveLinkPlayers(u8 a0); +void SetWirelessCommType0(void); bool32 sub_800B504(void); extern u16 gLinkPartnersHeldKeys[6]; @@ -306,9 +313,9 @@ extern u16 gLinkHeldKeys; extern u32 gLinkStatus; extern u8 gUnknown_030030E4; extern u8 gUnknown_030030E8; -extern u8 gUnknown_030030EC[MAX_LINK_PLAYERS]; -extern u8 gUnknown_030030F0[MAX_LINK_PLAYERS]; -extern u16 gUnknown_030030F4; +extern bool8 gReadyToExitStandby[MAX_LINK_PLAYERS]; +extern bool8 gReadyToCloseLink[MAX_LINK_PLAYERS]; +extern u16 gReadyCloseLinkType; extern u8 gSuppressLinkErrorMessage; extern u8 gWirelessCommType; extern bool8 gSavedLinkPlayerCount; @@ -331,19 +338,19 @@ extern u32 gFiller_03003080; extern struct LinkPlayer gLocalLinkPlayer; bool32 Link_AnyPartnersPlayingRubyOrSapphire(void); -bool32 sub_800A03C(void); +bool32 LinkDummy_Return2(void); void SetLocalLinkPlayerId(u8); u8 GetSavedPlayerCount(void); void sub_8009FAC(void); -bool8 sub_800A4D8(u8 a0); -u8 sub_800A9D8(void); +bool8 SendBlockRequest(u8 type); +u8 GetLinkPlayerCountAsBitFlags(void); u8 sub_800A0C8(s32, s32); -u8 sub_800A9A8(void); -void sub_800AD10(void); -void sub_800AB18(void); -void sub_8009F18(void); -bool8 sub_800AA60(void); -void sub_800ABF4(u16 a0); +u8 GetSavedLinkPlayerCountAsBitFlags(void); +void SetCloseLinkCallbackHandleJP(void); +void CheckLinkPlayersMatchSaved(void); +void StartSendingKeysToLink(void); +bool8 DoesLinkPlayerCountMatchSaved(void); +void SetCloseLinkCallbackAndType(u16 type); bool32 IsSendingKeysToLink(void); u32 GetLinkRecvQueueLength(void); diff --git a/include/link_rfu.h b/include/link_rfu.h index 2d74e686a..9476da6b7 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -5,7 +5,45 @@ #include "link.h" #include "AgbRfu_LinkManager.h" -// Exported type declarations +#define RFUCMD_SEND_PACKET 0x2F00 +#define RFUCMD_BLENDER_SEND_KEYS 0x4400 +#define RFUCMD_READY_CLOSE_LINK 0x5F00 +#define RFUCMD_READY_EXIT_STANDBY 0x6600 +#define RFUCMD_0x7700 0x7700 +#define RFUCMD_0x7800 0x7800 +#define RFUCMD_0x8800 0x8800 +#define RFUCMD_0x8900 0x8900 +#define RFUCMD_SEND_BLOCK_REQ 0xA100 +#define RFUCMD_SEND_HELD_KEYS 0xBE00 +#define RFUCMD_0xED00 0xED00 +#define RFUCMD_0xEE00 0xEE00 + +#define RFU_SERIAL_7F7D 0x7F7D + +#define RECV_QUEUE_NUM_SLOTS 32 +#define RECV_QUEUE_SLOT_LENGTH (14 * MAX_RFU_PLAYERS) + +#define SEND_QUEUE_NUM_SLOTS 40 +#define SEND_QUEUE_SLOT_LENGTH 14 + +#define BACKUP_QUEUE_NUM_SLOTS 2 +#define BACKUP_QUEUE_SLOT_LENGTH 14 + +#define RFU_PACKET_SIZE 6 + +#define RFU_STATUS_OK 0 +#define RFU_STATUS_FATAL_ERROR 1 +#define RFU_STATUS_CONNECTION_ERROR 2 +#define RFU_STATUS_CHILD_SEND_COMPLETE 3 +#define RFU_STATUS_NEW_CHILD_DETECTED 4 +#define RFU_STATUS_JOIN_GROUP_OK 5 +#define RFU_STATUS_JOIN_GROUP_NO 6 +#define RFU_STATUS_WAIT_ACK_JOIN_GROUP 7 +#define RFU_STATUS_LEAVE_GROUP_NOTICE 8 +#define RFU_STATUS_LEAVE_GROUP 9 +#define RFU_STATUS_10 10 +#define RFU_STATUS_11 11 +#define RFU_STATUS_ACK_JOIN_GROUP 12 // RfuTgtData.gname is read as these structs. struct GFtgtGnameSub @@ -13,12 +51,11 @@ struct GFtgtGnameSub u16 language:4; u16 hasNews:1; u16 hasCard:1; - u16 unk_00_6:1; + u16 unknown:1; // Never read u16 isChampion:1; u16 hasNationalDex:1; u16 gameClear:1; u16 version:4; - u16 unk_01_6:2; u8 playerTrainerId[2]; }; @@ -38,306 +75,212 @@ struct __attribute__((packed, aligned(2))) GFtgtGname u8 padding; }; // size: RFU_GNAME_SIZE -struct UnkLinkRfuStruct_02022B2C +struct RfuBlockSend { - u8 unk_00; - u8 unk_01; - u16 unk_02; - u8 unk_04; - u16 unk_06; - struct GFtgtGname *unk_08; - u8 *unk_0c; - u8 unk_10; - u8 unk_11; - u16 unk_12; - u16 unk_14; + /* 0x00 */ u16 next; + /* 0x02 */ u16 count; + /* 0x04 */ const u8 *payload; + /* 0x08 */ u32 receivedFlags; + /* 0x0c */ u32 failedFlags; + /* 0x10 */ bool8 sending; + /* 0x11 */ u8 owner; + /* 0x12 */ u8 receiving; }; -struct UnkLinkRfuStruct_02022B44 +struct RfuRecvQueue { - u8 fill_00[6]; - u16 unk_06; - u8 fill_08[6]; - vu8 unk_0e; - u8 unk_0f; - u8 fill_10[0x54]; - u16 unk_64; - u8 fill_66[0x1d]; - u8 unk_83; - u8 fill_84[0x58]; + /* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][RECV_QUEUE_SLOT_LENGTH]; + /* 0x8c0 */ vu8 recvSlot; + /* 0x8c1 */ vu8 sendSlot; + /* 0x8c2 */ vu8 count; + /* 0x8c3 */ vu8 full; }; -struct UnkRfuStruct_2_Sub_6c +struct RfuSendQueue { - /* 0x00 */ u16 unk_00; - /* 0x02 */ u16 unk_02; - /* 0x04 */ const u8 *unk_04; - /* 0x08 */ u32 unk_08; - /* 0x0c */ u32 unk_0c; - /* 0x10 */ u8 unk_10; - /* 0x11 */ u8 unk_11; - /* 0x12 */ u8 unk_12; + /* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][SEND_QUEUE_SLOT_LENGTH]; + /* 0x230 */ vu8 recvSlot; + /* 0x231 */ vu8 sendSlot; + /* 0x232 */ vu8 count; + /* 0x233 */ vu8 full; }; -struct UnkRfuStruct_2_Sub_124 +struct RfuBackupQueue { - /* 0x000 */ u8 unk_00[32][70]; - /* 0x8c0 */ vu8 unk_8c0; - /* 0x8c1 */ vu8 unk_8c1; - /* 0x8c2 */ vu8 unk_8c2; - /* 0x8c3 */ vu8 unk_8c3; + /* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][BACKUP_QUEUE_SLOT_LENGTH]; + /* 0x1c */ vu8 recvSlot; + /* 0x1d */ vu8 sendSlot; + /* 0x1e */ vu8 count; }; -struct UnkRfuStruct_2_Sub_9e8 +struct GFRfuManager { - /* 0x000 */ u8 unk_00[40][14]; - /* 0x230 */ vu8 unk_230; - /* 0x231 */ vu8 unk_231; - /* 0x232 */ vu8 unk_232; - /* 0x233 */ vu8 unk_233; -}; - -struct UnkRfuStruct_2_Sub_c1c -{ - /* 0x00 */ u8 unk_00[2][14]; - /* 0x1c */ vu8 unk_1c; - /* 0x1d */ vu8 unk_1d; - /* 0x1e */ vu8 unk_1e; -}; - -struct UnkRfuStruct_Sub_Unused -{ - /* 0x000 */ u8 unk_00[2][256]; - /* 0x200 */ vu8 unk_200; - /* 0x201 */ vu8 unk_201; - /* 0x202 */ vu8 unk_202; - /* 0x203 */ vu8 unk_203; -}; - -struct UnkRfuStruct_2 -{ - /* 0x000 */ void (*linkRfuCallback)(void); - /* 0x004 */ u16 unk_04; + /* 0x000 */ void (*callback)(void); + /* 0x004 */ u16 state; /* 0x006 */ u8 filler_06[4]; - /* 0x00a */ u16 unk_0a; - /* 0x00c */ u8 unk_0c; + /* 0x00a */ u16 linkmanMsg; + /* 0x00c */ u8 parentChild; /* 0x00d */ u8 playerCount; - /* 0x00e */ u8 unk_0e; + /* 0x00e */ bool8 unk_0e; /* 0x00f */ u8 unk_0f; /* 0x010 */ u16 unk_10; /* 0x012 */ u16 unk_12; - /* 0x014 */ u8 unk_14[4][14]; + /* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14]; /* 0x04c */ u8 unk_4c[14]; - /* 0x05a */ u8 unk_5a; + /* 0x05a */ u8 blockRequestType; /* 0x05b */ u8 unk_5b; - /* 0x05c */ u8 unk_5c[5]; - /* 0x061 */ u8 unk_61[5]; - /* 0x066 */ u8 unk_66; - /* 0x067 */ u8 unk_67; + /* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS]; + /* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS]; + /* 0x066 */ u8 idleTaskId; + /* 0x067 */ u8 searchTaskId; /* 0x068 */ u8 filler_68[4]; - /* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c; - /* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5]; - /* 0x0e4 */ u8 unk_e4[5]; - /* 0x0e9 */ u8 unk_e9[5]; - /* 0x0ee */ vu8 unk_ee; - /* 0x0ef */ u8 unk_ef; - /* 0x0f0 */ u8 unk_f0; - /* 0x0f1 */ u8 unk_f1; - /* 0x0f2 */ u16 unk_f2[6]; - /* 0x0fe */ u16 unk_fe; + /* 0x06c */ struct RfuBlockSend sendBlock; + /* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS]; + /* 0x0e4 */ bool8 readyCloseLink[MAX_RFU_PLAYERS]; + /* 0x0e9 */ bool8 readyExitStandby[MAX_RFU_PLAYERS]; + /* 0x0ee */ vu8 errorState; + /* 0x0ef */ bool8 isShuttingDown; + /* 0x0f0 */ u8 linkLossRecoveryState; + /* 0x0f1 */ u8 status; + /* 0x0f2 */ u16 packet[RFU_PACKET_SIZE]; + /* 0x0fe */ u16 resendExitStandbyTimer; /* 0x100 */ u16 unk_100; /* 0x102 */ u8 unk_102; /* 0x103 */ u8 filler_103[0x10A - 0x103]; /* 0x10A */ struct GFtgtGname unk_10A; u8 filler_; u8 playerName[PLAYER_NAME_LENGTH + 1]; - /* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124; - /* 0x9e8 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8; - /* 0xc1c */ struct UnkRfuStruct_2_Sub_c1c unk_c1c; - /* 0xc3c */ vu8 unk_c3c; + /* 0x124 */ struct RfuRecvQueue recvQueue; + /* 0x9e8 */ struct RfuSendQueue sendQueue; + /* 0xc1c */ struct RfuBackupQueue backupQueue; + /* 0xc3c */ vu8 linkRecovered; /* 0xc3d */ u8 unk_c3d; - /* 0xc3e */ vu8 unk_c3e; + /* 0xc3e */ vu8 childSlot; /* 0xc3f */ u8 unk_c3f[70]; /* 0xc85 */ u8 unk_c85; - /* 0xc86 */ u8 unk_c86; - /* 0xc87 */ u8 unk_c87[5][7][2]; - /* 0xccd */ u8 unk_ccd; - /* 0xcce */ u8 unk_cce; + /* 0xc86 */ u8 recvStatus; + /* 0xc87 */ u8 recvCmds[5][7][2]; + /* 0xccd */ u8 parentId; + /* 0xcce */ u8 multiplayerId; /* 0xccf */ u8 unk_ccf; /* 0xcd0 */ vu8 unk_cd0; - /* 0xcd1 */ u8 unk_cd1[4]; - /* 0xcd5 */ u8 unk_cd5[4]; + /* 0xcd1 */ u8 partnerSendStatuses[RFU_CHILD_MAX]; + /* 0xcd5 */ u8 partnerRecvStatuses[RFU_CHILD_MAX]; /* 0xcd9 */ u8 unk_cd9; /* 0xcda */ u8 unk_cda; - /* 0xcdb */ vu8 unk_cdb; - /* 0xcdc */ vu8 unk_cdc; + /* 0xcdb */ vbool8 unk_cdb; + /* 0xcdc */ vbool8 unk_cdc; /* 0xcdd */ u8 unk_cdd; - /* 0xcde */ u8 unk_cde[4]; + /* 0xcde */ u8 linkPlayerIdx[RFU_CHILD_MAX]; /* 0xce2 */ u8 unk_ce2; /* 0xce2 */ u8 unk_ce3; /* 0xce4 */ u8 unk_ce4; /* 0xce5 */ u8 unk_ce5; /* 0xce5 */ u8 unk_ce6; - /* 0xce7 */ u8 unk_ce7; + /* 0xce7 */ u8 acceptSlot_flag; /* 0xce8 */ u8 unk_ce8; /* 0xce9 */ u8 unk_ce9; /* 0xcea */ u8 unk_cea[4]; /* 0xcee */ u8 unk_cee[4]; }; // size = 0xcf4 -struct UnkRfuStruct_8010A14 -{ - char unk_00[15]; - u8 unk_0f; - u8 unk_10[4]; - struct LinkPlayer unk_14[5]; - u8 fill_a0[0x5c]; -}; - // Exported RAM declarations -extern struct GFtgtGname gUnknown_02022B14; -extern u8 gUnknown_02022B22[]; -extern struct UnkRfuStruct_2 Rfu; +extern struct GFtgtGname gHostRFUtgtGnameBuffer; +extern u8 gHostRFUtgtUnameBuffer[]; +extern struct GFRfuManager Rfu; extern u8 gWirelessStatusIndicatorSpriteId; // Exported ROM declarations void WipeTrainerNameRecords(void); -void sub_800E700(void); -void sub_800EDD4(void); -void sub_800F6FC(u8 who); -void sub_800F728(u8 who); +void InitRFUAPI(void); +void LinkRfu_Shutdown(void); +void Rfu_SetBlockReceivedFlag(u8 who); +void Rfu_ResetBlockReceivedFlag(u8 who); bool32 IsSendingKeysToRfu(void); -void sub_800F804(void); -void sub_800F850(void); -u8 sub_800FCD8(void); -bool32 sub_800FE84(const u8 *src, size_t size); +void StartSendingKeysToRfu(void); +void Rfu_SetBerryBlenderLinkCallback(void); +u8 Rfu_GetBlockReceivedStatus(void); +bool32 Rfu_InitBlockSend(const u8 *src, size_t size); void ClearLinkRfuCallback(void); -u8 sub_80104F4(void); -u8 rfu_get_multiplayer_id(void); -bool8 sub_8010100(u8 a0); +u8 Rfu_GetLinkPlayerCount(void); +u8 Rfu_GetMultiplayerId(void); +bool8 Rfu_SendBlockRequest(u8 type); bool8 IsLinkRfuTaskFinished(void); bool8 Rfu_IsMaster(void); -void task_add_05_task_del_08FA224_when_no_RfuFunc(void); -void sub_8010434(void); -void sub_800E604(void); -void sub_800E174(void); -void sub_800E6D0(void); +void Rfu_SetCloseLinkCallback(void); +void Rfu_SetLinkStandbyCallback(void); +void ResetLinkRfuGFLayer(void); +void UpdateWirelessStatusIndicatorSprite(void); +void InitRFU(void); bool32 sub_8010EC0(void); bool32 sub_8010F1C(void); -bool32 sub_8011A80(void); +bool32 RfuHasErrored(void); bool32 IsRfuRecvQueueEmpty(void); u32 GetRfuRecvQueueLength(void); void RfuVSync(void); void sub_80111B0(bool32 a0); -u8 sub_8011A74(void); -struct GFtgtGname *sub_800F7DC(void); -void sub_8011068(u8 a0); -void sub_8011170(u32 a0); -void sub_8011A64(u8 a0, u16 a1); +u8 RfuGetStatus(void); +struct GFtgtGname *GetHostRFUtgtGname(void); +void UpdateGameData_GroupLockedIn(u8 a0); +void GetLinkmanErrorParams(u32 a0); +void RfuSetStatus(u8 a0, u16 a1); u8 sub_801048C(bool32 a0); -void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2); -void sub_8010F84(u8 a0, u32 a1, u32 a2); -void sub_8011C10(u32 a0); +void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *buff1, u8 *buff2); +void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started); +void InitializeRfuLinkManager_LinkLeader(u32 a0); bool32 sub_8012240(void); -void sub_800EF38(void); +void LinkRfu_StopManagerAndFinalizeSlots(void); bool32 sub_80105EC(void); -bool32 sub_801064C(u16 a0, const u8 *a1); -void sub_8010688(u8 a0, u16 a1, const u8 *a2); -u32 sub_8010714(u16 a0, const u8 *a1); -void sub_8011DC0(const u8 *a0, u16 a1); -bool8 sub_800EF1C(void); -bool32 sub_800EF58(bool32 a0); -void DestroyWirelessStatusIndicatorSprite(void); +bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name); +void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name); +u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name); +void RequestDisconnectSlotByTrainerNameAndId(const u8 *a0, u16 a1); +bool8 LmanAcceptSlotFlagIsNotZero(void); +bool32 WaitRfuState(bool32 a0); void sub_801103C(void); -void sub_8011C5C(void); -void sub_80106D4(void); +void InitializeRfuLinkManager_JoinGroup(void); +void SendLeaveGroupNotice(void); void RecordMixTrainerNames(void); -void sub_800ED10(void); -void sub_800ED28(void); -void sub_8011090(u8 a0, u32 a1, u32 a2); -void sub_8011FC8(const u8 *src, u16 trainerId); -void sub_8010FA0(bool32 a0, bool32 a1); -void sub_8010F60(void); -void sub_8010FCC(u32 a0, u32 a1, u32 a2); -void sub_8011C84(void); +void LinkRfu_CreateConnectionAsParent(void); +void LinkRfu_StopManagerBeforeEnteringChat(void); +void UpdateGameData_SetActivity(u8 activity, u32 flags, bool32 started); +void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId); +void SetGnameBufferWonderFlags(bool32 a0, bool32 a1); +void ClearAndInitHostRFUtgtGname(void); +void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level); +void InitializeRfuLinkManager_EnterUnionRoom(void); void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2); -bool32 sub_8011B90(void); -void sub_800FE50(void *a0); -bool32 sub_800E540(u16 id, u8 *name); +bool32 IsUnionRoomListenTaskActive(void); +void Rfu_SendPacket(void *data); +bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name); void sub_8011DE0(u32 arg0); u8 sub_801100C(s32 a0); void sub_800EF7C(void); -bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx); -bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx); +bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx); +bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *buff1, u8 *buff2, u8 idx); s32 sub_800E87C(u8 idx); -void sub_8011BA4(void); -void sub_8010198(void); +void CreateTask_RfuIdle(void); +void DestroyTask_RfuIdle(void); void sub_8011AC8(void); void LinkRfu_FatalError(void); bool32 sub_8011A9C(void); void sub_80104B0(void); void sub_8011A50(void); void sub_80110B8(u32 a0); -bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2); -void sub_800EAB4(void); -void sub_800EAFC(void); -void sub_800ED34(u16 unused); -void sub_800EDBC(u16 unused); -void sub_800F048(void); -void sub_800F86C(u8 unused); -void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data); -void sub_800FD14(u16 command); -void rfufunc_80F9F44(void); -void sub_800FFB0(void); -void rfufunc_80FA020(void); -bool32 sub_8010454(u32 a0); -void sub_8010528(void); -void sub_8010750(void); -s32 sub_80107A0(void); -void sub_801084C(u8 taskId); -void sub_80109E8(u16 a0); -void sub_8010A70(void *a0); -void sub_8010AAC(u8 taskId); -void sub_8010D0C(u8 taskId); -void sub_80115EC(s32 a0); -u8 sub_8011CE4(const u8 *a0, u16 a1); -void sub_8011D6C(u32 a0); -void sub_8011E94(u32 a0, u32 a1); -bool8 sub_8012224(void); -void sub_801227C(void); -void sub_801209C(u8 taskId); -void sub_8011BF8(void); -void sub_8011BA4(void); -void sub_800D6C8(struct UnkRfuStruct_2_Sub_124 *ptr); -void sub_800D724(struct UnkRfuStruct_2_Sub_9e8 *ptr); -void sub_800D780(struct UnkRfuStruct_Sub_Unused *ptr); -void sub_800D7D8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2); -void sub_800D888(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2); -bool8 sub_800D934(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2); -bool8 sub_800D9DC(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2); -void sub_800DA68(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2); -bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2); -void sub_800DB18(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2); -bool8 sub_800DB84(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2); -void sub_800DBF8(u8 *q1, u8 mode); -void PkmnStrToASCII(u8 *q1, const u8 *q2); -void ASCIIToPkmnStr(u8 *q1, const u8 *q2); -u8 sub_800DD1C(u8 maxFlags); -void sub_800DD94(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3); -bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx); -bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx); -void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2); +bool32 IsRfuSerialNumberValid(u32 serialNo); +bool8 IsRfuRecoveringFromLinkLoss(void); +void RfuRecvQueue_Reset(struct RfuRecvQueue *queue); +void RfuSendQueue_Reset(struct RfuSendQueue *queue); +void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *data); +void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *data); +bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest); +bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest); +void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *q2); +bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *q2); +void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders); void CreateWirelessStatusIndicatorSprite(u8 x, u8 y); void DestroyWirelessStatusIndicatorSprite(void); void LoadWirelessStatusIndicatorSpriteGfx(void); -u8 sub_800E124(void); -void sub_800E15C(struct Sprite *sprite, s32 signalStrengthAnimNum); -void sub_800E174(void); -void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, const u8 *name); -bool32 NameIsNotEmpty(const u8 *name); -void RecordMixTrainerNames(void); -bool32 sub_800E540(u16 id, u8 *name); -void WipeTrainerNameRecords(void); #endif //GUARD_LINK_RFU_H diff --git a/include/list_menu.h b/include/list_menu.h index 0a54a069a..4697ba5aa 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -24,7 +24,7 @@ struct ListMenu; struct ListMenuItem { const u8 *name; - s32 id; + u32 id; }; struct ListMenuTemplate @@ -98,7 +98,7 @@ struct CursorStruct extern struct ScrollArrowsTemplate gTempScrollArrowTemplate; extern struct ListMenuTemplate gMultiuseListMenuTemplate; -s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); +u32 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 *arg1, u16 scrollOffset, u16 selectedRow); s32 ListMenu_ProcessInput(u8 listTaskId); diff --git a/include/match_call.h b/include/match_call.h index 8214e03b7..bc5f374bd 100644 --- a/include/match_call.h +++ b/include/match_call.h @@ -14,7 +14,7 @@ s32 GetRematchIdxByTrainerIdx(s32 trainerIdx); void InitMatchCallCounters(void); bool32 TryStartMatchCall(void); bool32 IsMatchCallTaskActive(void); -void StartMatchCallFromScript(u8 *message); +void StartMatchCallFromScript(const u8 *message); void BufferPokedexRatingForMatchCall(u8 *destStr); bool32 SelectMatchCallMessage(int, u8 *); void sub_8197184(u32 windowId, u32 destOffset, u32 paletteId); diff --git a/include/math_util.h b/include/math_util.h index 6b0d42460..04013fc03 100755 --- a/include/math_util.h +++ b/include/math_util.h @@ -1,14 +1,14 @@ #ifndef GUARD_MATH_UTIL_H #define GUARD_MATH_UTIL_H -s16 sub_8151534(s16 x, s16 y); -s16 sub_8151550(u8 s, s16 x, s16 y); -s32 sub_8151574(s32 x, s32 y); -s16 sub_81515B0(s16 x, s16 y); -s16 sub_81515D4(u8 s, s16 x, s16 y); -s32 sub_81515FC(s32 x, s32 y); -s16 sub_8151624(s16 y); -s16 sub_815163C(u8 s, s16 y); -s32 sub_815165C(s32 y); +s16 MathUtil_Mul16(s16 x, s16 y); +s16 MathUtil_Mul16Shift(u8 s, s16 x, s16 y); +s32 MathUtil_Mul32(s32 x, s32 y); +s16 MathUtil_Div16(s16 x, s16 y); +s16 MathUtil_Div16Shift(u8 s, s16 x, s16 y); +s32 MathUtil_Div32(s32 x, s32 y); +s16 MathUtil_Inv16(s16 y); +s16 MathUtil_Inv16Shift(u8 s, s16 y); +s32 MathUtil_Inv32(s32 y); #endif // GUARD_MATH_UTIL_H diff --git a/include/menu.h b/include/menu.h index d4a038920..1bd800742 100644 --- a/include/menu.h +++ b/include/menu.h @@ -8,6 +8,12 @@ #define MENU_NOTHING_CHOSEN -2 #define MENU_B_PRESSED -1 +#define MENU_CURSOR_DELTA_NONE 0 +#define MENU_CURSOR_DELTA_UP -1 +#define MENU_CURSOR_DELTA_DOWN 1 +#define MENU_CURSOR_DELTA_LEFT -1 +#define MENU_CURSOR_DELTA_RIGHT 1 + enum { SAVE_MENU_NAME, @@ -30,7 +36,7 @@ extern const u16 gUnknown_0860F074[]; void FreeAllOverworldWindowBuffers(void); void InitStandardTextBoxWindows(void); -void sub_8197200(void); +void InitTextBoxGfxAndPrinters(void); u16 RunTextPrintersAndIsPrinter0Active(void); void LoadMessageBoxAndBorderGfx(void); void DrawDialogueFrame(u8 windowId, bool8 copyToVram); @@ -49,23 +55,23 @@ void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const 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 DrawStdFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 tileStart, u8 palette); -void schedule_bg_copy_tilemap_to_vram(u8 bgNum); +void ScheduleBgCopyTilemapToVram(u8 bgNum); void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *strs); u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 numItems, u8 initialCursorPos); u8 Menu_GetCursorPos(void); s8 Menu_ProcessInput(void); s8 Menu_ProcessInputNoWrap(void); void blit_move_info_icon(u8 winId, u8 a2, u16 x, u16 y); -void reset_temp_tile_data_buffers(void); -void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); -bool8 free_temp_tile_data_buffers_if_possible(void); +void ResetTempTileDataBuffers(void); +void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); +bool8 FreeTempTileDataBuffersIfPossible(void); struct WindowTemplate CreateWindowTemplate(u8 bg, u8 left, u8 top, u8 width, u8 height, u8 paletteNum, u16 baseBlock); void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirstTileNum, u8 borderPalette, u8 initialCursorPos); void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); s8 Menu_ProcessInputNoWrapClearOnChoose(void); s8 ProcessMenuInput_other(void); -void do_scheduled_bg_tilemap_copies_to_vram(void); -void clear_scheduled_bg_copies_to_vram(void); +void DoScheduledBgTilemapCopiesToVram(void); +void ClearScheduledBgCopiesToVram(void); void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str); void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 a2, u8 a3); void sub_81995E4(u8 windowId, u8 optionsNo, const struct MenuAction *actions, const u8 *actionIds); @@ -77,9 +83,9 @@ void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress); void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8); void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *strs, const u8 *a8); u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos); -u8 sub_8199134(s8, s8); +u8 ChangeListMenuCursorPosition(s8 deltaX, s8 deltaY); u8 GetStartMenuWindowId(void); -void sub_819A2BC(u8, u8); +void ListMenuLoadStdPalAt(u8, u8); u8 Menu_MoveCursor(s8 cursorDelta); u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta); void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram); diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 442f4a063..4557ebbb1 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -30,8 +30,8 @@ u8 GetLRKeysPressed(void); u8 GetLRKeysPressedAndHeld(void); bool8 sub_8122148(u16 itemId); bool8 itemid_80BF6D8_mail_related(u16 itemId); -bool8 sub_81221AC(void); -bool8 sub_81221EC(void); +bool8 MenuHelpers_LinkSomething(void); +bool8 MenuHelpers_CallLinkSomething(void); void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount, u8 maxUsedSlotsCount); void sub_812225C(u16 *scrollOffset, u16 *cursorPos, u8 maxShownItems, u8 numItems); void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4); diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 14a246468..242e1c6b2 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -5,6 +5,15 @@ #include "player_pc.h" #include "list_menu.h" #include "pokemon.h" +#include "constants/berry.h" + +#define TAG_CONDITION_MON 100 +#define TAG_CONDITION_BALL 101 +#define TAG_CONDITION_CANCEL 102 +#define TAG_CONDITION_BALL_PLACEHOLDER 103 +#define TAG_CONDITION_SPARKLE 104 + +#define MAX_CONDITION_SPARKLES 10 struct UnknownSubStruct_81D1ED4 { @@ -12,12 +21,12 @@ struct UnknownSubStruct_81D1ED4 u16 unk2; }; -struct UnknownStruct_81D1ED4 +struct ConditionGraph { - /*0x000*/ u8 unk0[4][5]; - /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][5]; - /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][5]; - /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[5]; + /*0x000*/ u8 unk0[4][FLAVOR_COUNT]; + /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][FLAVOR_COUNT]; + /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][FLAVOR_COUNT]; + /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[FLAVOR_COUNT]; /*0x140*/ u16 unk140[66][2]; /*0x248*/ u16 unk248[66][2]; /*0x350*/ u16 unk350; @@ -32,35 +41,35 @@ u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page); void sub_81D1E90(struct PlayerPCItemPageStruct *page); void sub_81D1EC0(void); void sub_81D1D04(u8 a0); -void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0); -void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0); +void sub_81D1ED4(struct ConditionGraph *graph); +void sub_81D2108(struct ConditionGraph *graph); void sub_81D21DC(u8 bg); -void sub_81D20AC(struct UnknownStruct_81D1ED4 *arg0); -void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0); -bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0); -bool32 sub_81D2074(struct UnknownStruct_81D1ED4 *a0); +void sub_81D20AC(struct ConditionGraph *graph); +void sub_81D2230(struct ConditionGraph *graph); +bool8 sub_81D20BC(struct ConditionGraph *graph); +bool32 TransitionConditionGraph(struct ConditionGraph *graph); void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1); -void sub_81D1F84(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2); +void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2); void MoveRelearnerPrintText(u8 *str); bool16 MoveRelearnerRunTextPrinters(void); void MoveRelearnerCreateYesNoMenu(void); u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); void InitMoveRelearnerWindows(bool8 useContextWindow); s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst); -void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7); -void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8); -void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7); -bool8 sub_81D312C(s16 *var); -bool8 sub_81D3150(s16 *var); -bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1); -bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1); -void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal); -void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals); -void sub_81D32B0(struct SpriteSheet *sheet, struct SpritePalette *pal); -void sub_81D3464(struct Sprite **sprites); -void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2); -void sub_81D3520(struct Sprite **sprites); -void sub_81D354C(struct Sprite **sprites); +void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); +void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel); +void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel); +bool8 MoveConditionMonOnscreen(s16 *x); +bool8 MoveConditionMonOffscreen(s16 *x); +bool8 TryUpdateConditionMonTransitionOn(struct ConditionGraph *graph, s16 *x); +bool8 TryUpdateConditionMonTransitionOff(struct ConditionGraph *graph, s16 *x); +void LoadConditionMonPicTemplate(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal); +void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals); +void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal); +void ResetConditionSparkleSprites(struct Sprite **sprites); +void CreateConditionSparkleSprites(struct Sprite **sprites, u8 monSpriteId, u8 count); +void DestroyConditionSparkleSprites(struct Sprite **sprites); +void FreeConditionSparkles(struct Sprite **sprites); 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 GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats); diff --git a/include/mevent.h b/include/mevent.h index a34ca355c..8c0ebbad7 100755 --- a/include/mevent.h +++ b/include/mevent.h @@ -57,7 +57,7 @@ u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const vo bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1); u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command); u16 mevent_081445C0(u32 command); -void sub_801B940(void); -bool32 sub_801B94C(u16 a0); +void ResetReceivedWonderCardFlag(void); +bool32 MEventHandleReceivedWonderCard(u16 a0); #endif //GUARD_MEVENT_H diff --git a/include/mevent2.h b/include/mevent2.h index 80b1fd51b..316a9e6de 100644 --- a/include/mevent2.h +++ b/include/mevent2.h @@ -1,6 +1,6 @@ #ifndef GUARD_MEVENT2_H #define GUARD_MEVENT2_H -void sub_801B990(u32, u32); +void RecordIdOfWonderCardSenderByEventType(u32, u32); #endif //GUARD_MEVENT2_H diff --git a/include/mystery_gift.h b/include/mystery_gift.h index 243895a67..fb0414ee0 100644 --- a/include/mystery_gift.h +++ b/include/mystery_gift.h @@ -12,5 +12,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str); void AddTextPrinterToWindow1(const u8 *src); void c2_ereader(void); void c2_mystery_gift(void); +void MG_DrawTextBorder(u8 windowId); +s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u16 *windowId, bool8 yesNoBoxPlacement, const u8 *str); #endif //GUARD_MYSTERY_GIFT_H diff --git a/include/naming_screen.h b/include/naming_screen.h index 7d32abcd3..93527640e 100644 --- a/include/naming_screen.h +++ b/include/naming_screen.h @@ -3,91 +3,14 @@ #include "main.h" -#define KBEVENT_NONE 0 -#define KBEVENT_PRESSED_A 5 -#define KBEVENT_PRESSED_B 6 -#define KBEVENT_PRESSED_SELECT 8 -#define KBEVENT_PRESSED_START 9 - -#define KBROW_COUNT 4 - -enum -{ - KBPAGE_LETTERS_LOWER, - KBPAGE_LETTERS_UPPER, - KBPAGE_SYMBOLS, - KBPAGE_COUNT, -}; - -enum -{ +enum { NAMING_SCREEN_PLAYER, NAMING_SCREEN_BOX, NAMING_SCREEN_CAUGHT_MON, - NAMING_SCREEN_3, + NAMING_SCREEN_NICKNAME, NAMING_SCREEN_WALDA, }; -struct NamingScreenTemplate -{ - u8 copyExistingString; - u8 maxChars; - u8 iconFunction; - u8 addGenderIcon; - u8 initialPage; - u8 unused; - const u8 *title; -}; - -struct NamingScreenData { - /*0x0*/ u8 tilemapBuffer1[0x800]; - /*0x800*/ u8 tilemapBuffer2[0x800]; - /*0x800*/ u8 tilemapBuffer3[0x800]; - /*0x1800*/ u8 textBuffer[0x10]; - /*0x1810*/ u8 tileBuffer[0x600]; - /*0x1E10*/ u8 state; - /*0x1E11*/ u8 windows[5]; - /*0x1E16*/ u16 inputCharBaseXPos; - /*0x1E18*/ u16 bg1vOffset; - /*0x1E1A*/ u16 bg2vOffset; - /*0x1E1C*/ u16 bg1Priority; - /*0x1E1E*/ u16 bg2Priority; - /*0x1E20*/ u8 bgToReveal; - /*0x1E21*/ u8 bgToHide; - /*0x1E22*/ u8 currentPage; - /*0x1E23*/ u8 cursorSpriteId; - /*0x1E24*/ u8 selectBtnFrameSpriteId; - /*0x1E25*/ u8 keyRepeatStartDelayCopy; - /*0x1E28*/ const struct NamingScreenTemplate *template; - /*0x1E2C*/ u8 templateNum; - /*0x1E30*/ u8 *destBuffer; - /*0x1E34*/ u16 monSpecies; - /*0x1E36*/ u16 monGender; - /*0x1E38*/ u32 monPersonality; - /*0x1E3C*/ MainCallback returnCallback; -}; - - -enum -{ - MAIN_STATE_BEGIN_FADE_IN, - MAIN_STATE_WAIT_FADE_IN, - MAIN_STATE_HANDLE_INPUT, - MAIN_STATE_MOVE_TO_OK_BUTTON, - MAIN_STATE_START_PAGE_SWAP, - MAIN_STATE_WAIT_PAGE_SWAP, - MAIN_STATE_6, - MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE, - MAIN_STATE_BEGIN_FADE_OUT, -}; - -enum -{ - INPUT_STATE_DISABLED, - INPUT_STATE_ENABLED, - INPUT_STATE_2, -}; - void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback); #endif // GUARD_NAMING_SCREEN_H diff --git a/include/overworld.h b/include/overworld.h index 78a5b4ad0..a2eac7e29 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -24,6 +24,8 @@ #define MOVEMENT_MODE_FROZEN 1 #define MOVEMENT_MODE_SCRIPTED 2 +#define SKIP_OBJECT_EVENT_LOAD 1 + struct InitialPlayerAvatarState { u8 transitionFlags; @@ -99,8 +101,7 @@ void SetDefaultFlashLevel(void); void Overworld_SetFlashLevel(s32 flashLevel); u8 Overworld_GetFlashLevel(void); void SetCurrentMapLayout(u16 mapLayoutId); -void sub_8085540(u8 var); -u8 sub_808554C(void); +void SetObjectEventLoadFlag(u8 var); u16 GetLocationMusic(struct WarpData *warp); u16 GetCurrLocationDefaultMusic(void); u16 GetWarpDestinationMusic(void); @@ -135,11 +136,9 @@ void SetUnusedCallback(void *a0); void CB2_NewGame(void); void CB2_WhiteOut(void); void CB2_LoadMap(void); -void sub_8086024(void); +void CB2_ReturnToFieldContestHall(void); void CB2_ReturnToFieldCableClub(void); void CB2_ReturnToField(void); -void CB2_ReturnToFieldLocal(void); -void CB2_ReturnToFieldLink(void); void CB2_ReturnToFieldFromMultiplayer(void); void CB2_ReturnToFieldWithOpenMenu(void); void CB2_ReturnToFieldContinueScript(void); diff --git a/include/palette.h b/include/palette.h index 8d16270aa..f874bcd74 100644 --- a/include/palette.h +++ b/include/palette.h @@ -70,7 +70,7 @@ void BeginFastPaletteFade(u8); void BeginHardwarePaletteFade(u8, u8, u8, u8, u8); void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color); void BlendPalettesUnfaded(u32, u8, u16); -void sub_80A2C44(u32 a1, s8 a2, u8 a3, u8 a4, u16 a5, u8 a6, u8 a7); +void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id); void TintPalette_GrayScale(u16 *palette, u16 count); void TintPalette_GrayScale2(u16 *palette, u16 count); void TintPalette_SepiaTone(u16 *palette, u16 count); diff --git a/include/palette_util.h b/include/palette_util.h new file mode 100644 index 000000000..46468c0a6 --- /dev/null +++ b/include/palette_util.h @@ -0,0 +1,83 @@ +#ifndef GUARD_PALETTE_UTIL_H +#define GUARD_PALETTE_UTIL_H + +struct PulseBlendSettings +{ + u16 blendColor; + u16 paletteOffset; + u8 numColors; + u8 delay; + u8 numFadeCycles; + s8 maxBlendCoeff:4; + s8 fadeType:2; + s8 restorePaletteOnUnload:1; + s8 unk7_7:1; +}; + +struct PulseBlendPalette +{ + u8 paletteSelector; + u8 blendCoeff:4; + u8 fadeDirection:1; + s8 unk1_5:1; + s8 available:1; + u32 inUse:1; + u8 delayCounter; + u8 fadeCycleCounter; + struct PulseBlendSettings pulseBlendSettings; +}; + +struct PulseBlend +{ + u16 usedPulseBlendPalettes; + struct PulseBlendPalette pulseBlendPalettes[16]; +}; + + +#define FLASHUTIL_USE_EXISTING_COLOR (1 << 15) + +struct RouletteFlashSettings +{ + u16 color; + u16 paletteOffset; + u8 numColors; + u8 delay; + s8 unk6; // Set but never used + s8 numFadeCycles:5; + s8 unk7_5:2; // Set but never used + s8 colorDeltaDir:1; +}; + +struct RouletteFlashPalette +{ + u8 state:7; + bool8 available:1; + u8 delayCounter; + s8 fadeCycleCounter; + s8 colorDelta; + struct RouletteFlashSettings settings; +}; + +struct RouletteFlashUtil +{ + u8 enabled; + u8 unused; + u16 flags; + struct RouletteFlashPalette palettes[16]; +}; + +int InitPulseBlendPaletteSettings(struct PulseBlend *, const struct PulseBlendSettings *); +void InitPulseBlend(struct PulseBlend *); +void MarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); +void UnloadUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); +void UnmarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); +void UpdatePulseBlend(struct PulseBlend *); +void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height); +void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height); +void RouletteFlash_Run(struct RouletteFlashUtil *r0); +void RouletteFlash_Reset(struct RouletteFlashUtil *r0); +u8 RouletteFlash_Add(struct RouletteFlashUtil *r0, u8 r1, const struct RouletteFlashSettings *r2); +void RouletteFlash_Stop(struct RouletteFlashUtil *r0, u16 r1); +void RouletteFlash_Enable(struct RouletteFlashUtil *r0, u16 r1); + +#endif // GUARD_PALETTE_UTIL_H diff --git a/include/pokeball.h b/include/pokeball.h index 12b9b1eff..1cdb08f94 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -18,6 +18,14 @@ enum POKEBALL_COUNT }; +enum { + BALL_AFFINE_ANIM_0, + BALL_ROTATE_RIGHT, + BALL_ROTATE_LEFT, + BALL_AFFINE_ANIM_3, + BALL_AFFINE_ANIM_4 +}; + extern const struct SpriteTemplate gBallSpriteTemplates[]; #define POKEBALL_PLAYER_SENDOUT 0xFF diff --git a/include/pokeblock.h b/include/pokeblock.h index 6dd07b689..c82e99d8f 100644 --- a/include/pokeblock.h +++ b/include/pokeblock.h @@ -1,17 +1,29 @@ #ifndef GUARD_POKEBLOCK_H #define GUARD_POKEBLOCK_H +#include "constants/berry.h" +#include "constants/pokemon.h" + #define GFX_TAG_POKEBLOCK 14818 #define GFX_TAG_POKEBLOCK_CASE 14800 enum { - PBLOCK_CLR_BLACK, + PBLOCK_CLR_NONE, PBLOCK_CLR_RED, PBLOCK_CLR_BLUE, PBLOCK_CLR_PINK, PBLOCK_CLR_GREEN, - PBLOCK_CLR_YELLOW + PBLOCK_CLR_YELLOW, + PBLOCK_CLR_PURPLE, + PBLOCK_CLR_INDIGO, + PBLOCK_CLR_BROWN, + PBLOCK_CLR_LITE_BLUE, + PBLOCK_CLR_OLIVE, + PBLOCK_CLR_GRAY, + PBLOCK_CLR_BLACK, + PBLOCK_CLR_WHITE, + PBLOCK_CLR_GOLD, }; enum @@ -43,7 +55,7 @@ void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void void CB2_PreparePokeblockFeedScene(void); // pokeblock -extern const s8 gPokeblockFlavorCompatibilityTable[]; +extern const s8 gPokeblockFlavorCompatibilityTable[NUM_NATURES * FLAVOR_COUNT]; extern const u8 *const gPokeblockNames[]; extern const struct CompressedSpriteSheet gPokeblockCase_SpriteSheet; extern const struct CompressedSpritePalette gPokeblockCase_SpritePal; diff --git a/include/pokemon.h b/include/pokemon.h index 7ac65d36b..d75ec94f3 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -254,7 +254,7 @@ extern const u16 *const gLevelUpLearnsets[]; extern const u8 gPPUpGetMask[]; extern const u8 gPPUpSetMask[]; extern const u8 gPPUpAddMask[]; -extern const u8 gStatStageRatios[][2]; +extern const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2]; extern const u16 gLinkPlayerFacilityClasses[]; extern const struct SpriteTemplate gUnknown_08329D98[]; extern const s8 gNatureStatTable[][5]; @@ -279,8 +279,8 @@ void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest); void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 sub_80688F8(u8 caseId, u8 battlerId); void SetDeoxysStats(void); -u16 sub_8068B48(void); -u16 sub_8068BB0(void); +u16 GetUnionRoomTrainerPic(void); +u16 GetUnionRoomTrainerClass(void); void CreateObedientEnemyMon(void); void CalculateMonStats(struct Pokemon *mon); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h index 9cf65212f..91733b385 100644 --- a/include/pokemon_jump.h +++ b/include/pokemon_jump.h @@ -3,7 +3,7 @@ #include "main.h" -void sub_802A9A8(u16 monId, MainCallback callback); +void StartPokemonJump(u16 monId, MainCallback callback); bool32 IsSpeciesAllowedInPokemonJump(u16 species); void IsPokemonJumpSpeciesInParty(void); void ResetPokeJumpResults(void); diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 1c7510db6..6413dcdec 100755 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -9,10 +9,10 @@ extern const u8 *const gMoveDescriptionPointers[]; extern const u8 *const gNatureNamePointers[]; void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); -void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16); +void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove); void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); u8 GetMoveSlotToReplace(void); -void SummaryScreen_SetUnknownTaskId(u8 a0); +void SummaryScreen_SetUnknownTaskId(u8 taskId); void SummaryScreen_DestroyUnknownTask(void); // The Pokemon Summary Screen can operate in different modes. Certain features, diff --git a/include/pokenav.h b/include/pokenav.h index 3eafe9af2..ac916f3ba 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -391,7 +391,7 @@ u32 sub_81CD070(void); void sub_81CD1C0(void); bool32 sub_81CD3C4(void); bool32 sub_81CDD5C(void); -struct UnknownStruct_81D1ED4 *sub_81CDC70(void); +struct ConditionGraph *sub_81CDC70(void); u16 sub_81CDC60(void); u16 sub_81CDC50(void); u8 sub_81CDDB0(void); diff --git a/include/rayquaza_scene.h b/include/rayquaza_scene.h index fe66b3df0..5aa21981e 100644 --- a/include/rayquaza_scene.h +++ b/include/rayquaza_scene.h @@ -1,17 +1,6 @@ #ifndef GUARD_RAYQUAZA_SCENE_H #define GUARD_RAYQUAZA_SCENE_H -void DoRayquazaScene(u8 animId, bool8 onlyOneAnim, void (*callback)(void)); - -enum -{ - RAY_ANIM_DUO_FIGHT_PRE, - RAY_ANIM_DUO_FIGHT, - RAY_ANIM_TAKES_FLIGHT, - RAY_ANIM_DESCENDS, - RAY_ANIM_CHARGES, - RAY_ANIM_CHACES_AWAY, - RAY_ANIM_END -}; +void DoRayquazaScene(u8 animId, bool8 endEarly, void (*callback)(void)); #endif // GUARD_RAYQUAZA_SCENE_H diff --git a/include/rom_8011DC0.h b/include/rom_8011DC0.h deleted file mode 100644 index ee7397320..000000000 --- a/include/rom_8011DC0.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef GUARD_rom_8011DC0_H -#define GUARD_rom_8011DC0_H - -#endif //GUARD_rom_8011DC0_H diff --git a/include/rom_81520A8.h b/include/rom_81520A8.h deleted file mode 100644 index 2be12200f..000000000 --- a/include/rom_81520A8.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef GUARD_ROM_81520A8_H -#define GUARD_ROM_81520A8_H - -struct UnkStruct_81520A8 -{ - struct OamData oam; - s16 x; - s16 y; - s16 xDelta; - s16 yDelta; - u16 tileTag; - u16 palTag; - u16 tileNum; - u8 id; - u8 filler17; // Unused. - u8 unk18; - u8 unk19_0:1; - u8 unk19_1:1; - u8 unk19_2:1; - u8 priority:2; - s16 data[8]; - void (*callback)(struct UnkStruct_81520A8 *); -}; - -bool32 sub_81521C0(u8 count); -bool32 sub_8152254(void); -bool32 sub_81522D4(void); -u8 sub_8152438(u8 id, void (*func)(struct UnkStruct_81520A8 *)); -u8 sub_8152474(u8 id, u8 dataArrayId, s16 dataValue); -u8 sub_81524C4(const struct OamData *oam, u16 tileTag, u16 palTag, s16 x, s16 y, u8 arg5, u8 priority); -u8 sub_81525D0(u8 id); - -#endif // GUARD_ROM_81520A8_H diff --git a/include/roulette.h b/include/roulette.h index 71100d0d3..c753f671c 100755 --- a/include/roulette.h +++ b/include/roulette.h @@ -1,34 +1,6 @@ #ifndef GUARD_ROULETTE_H #define GUARD_ROULETTE_H -struct UnkStruct1 -{ - u16 var00; - u16 var02; - u8 var04; - u8 var05; - u8 var06; - s8 var07_0:5; - s8 var07_5:2; - s8 var07_7:1; -}; - -struct UnkStruct3 -{ - u8 var00_0:7; - u8 var00_7:1; - u8 var01; - s8 var02; - s8 var03; - struct UnkStruct1 var04; -}; - -struct UnkStruct0 -{ - u8 var00; - u8 var01; - u16 var02; //flag for each UnkStruct3 - struct UnkStruct3 var04[0x10]; -}; +void PlayRoulette(void); #endif // GUARD_ROULETTE_H diff --git a/include/roulette_util.h b/include/roulette_util.h deleted file mode 100644 index 76752fe74..000000000 --- a/include/roulette_util.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef GUARD_ROULETTE_UTIL_H -#define GUARD_ROULETTE_UTIL_H - -#include "roulette.h" - -struct PulseBlendSettings -{ - u16 blendColor; - u16 paletteOffset; - u8 numColors; - u8 delay; - u8 numFadeCycles; - s8 maxBlendCoeff:4; - s8 fadeType:2; - s8 restorePaletteOnUnload:1; - s8 unk7_7:1; -}; - -struct PulseBlendPalette -{ - u8 paletteSelector; - u8 blendCoeff:4; - u8 fadeDirection:1; - s8 unk1_5:1; - s8 available:1; - u32 inUse:1; - u8 delayCounter; - u8 fadeCycleCounter; - struct PulseBlendSettings pulseBlendSettings; -}; - -struct PulseBlend -{ - u16 usedPulseBlendPalettes; - struct PulseBlendPalette pulseBlendPalettes[16]; -}; - -int InitPulseBlendPaletteSettings(struct PulseBlend *, const struct PulseBlendSettings *); -void InitPulseBlend(struct PulseBlend *); -void MarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); -void UnloadUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); -void UnmarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8); -void UpdatePulseBlend(struct PulseBlend *); -void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height); -void sub_8152058(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height); -void task_tutorial_controls_fadein(struct UnkStruct0 *r0); -void sub_8151678(struct UnkStruct0 *r0); -u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2); -void sub_8151A9C(struct UnkStruct0 *r0, u16 r1); -void sub_8151A48(struct UnkStruct0 *r0, u16 r1); - -#endif // GUARD_ROULETTE_UTIL_H diff --git a/include/save.h b/include/save.h index 225b2b62c..18b57502b 100644 --- a/include/save.h +++ b/include/save.h @@ -102,7 +102,7 @@ u8 Save_LoadGameData(u8 saveType); u16 sub_815355C(void); u32 TryReadSpecialSaveSection(u8 sector, u8* dst); u32 TryWriteSpecialSaveSection(u8 sector, u8* src); -void sub_8153688(u8 taskId); +void Task_LinkSave(u8 taskId); // save_failed_screen.c void DoSaveFailedScreen(u8 saveType); diff --git a/include/script_pokemon_80F8.h b/include/script_pokemon_80F8.h deleted file mode 100644 index 8dd7ed0c0..000000000 --- a/include/script_pokemon_80F8.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef GUARD_SCRIPTPOKE80F8_H -#define GUARD_SCRIPTPOKE80F8_H - -void ShowContestWinner(void); -u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); -u8 ScriptGiveEgg(u16); -void CreateScriptedWildMon(u16, u8, u16); -void ScriptSetMonMoveSlot(u8, u16, u8); - -#endif diff --git a/include/script_pokemon_util.h b/include/script_pokemon_util.h new file mode 100644 index 000000000..120c28a63 --- /dev/null +++ b/include/script_pokemon_util.h @@ -0,0 +1,11 @@ +#ifndef GUARD_SCRIPT_POKEMON_UTIL +#define GUARD_SCRIPT_POKEMON_UTIL + +u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); +u8 ScriptGiveEgg(u16); +void CreateScriptedWildMon(u16, u8, u16); +void ScriptSetMonMoveSlot(u8, u16, u8); +void ReducePlayerPartyToSelectedMons(void); +void HealPlayerParty(void); + +#endif // GUARD_SCRIPT_POKEMON_UTIL diff --git a/include/script_pokemon_util_80F87D8.h b/include/script_pokemon_util_80F87D8.h deleted file mode 100644 index 7c246b745..000000000 --- a/include/script_pokemon_util_80F87D8.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H -#define GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H - -u16 GetContestRand(void); -void ReducePlayerPartyToSelectedMons(void); -void HealPlayerParty(void); -u8 CountPlayerContestPaintings(void); - -#endif // GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H diff --git a/include/shop.h b/include/shop.h index 164d6f3c2..c338103b4 100644 --- a/include/shop.h +++ b/include/shop.h @@ -41,7 +41,7 @@ struct ShopData /*0x200B*/ u8 scrollIndicatorsTaskId; /*0x200C*/ u8 iconSlot; /*0x200D*/ u8 itemSpriteIds[2]; - /*0x2010*/ s16 viewportObjects[16][5]; + /*0x2010*/ s16 viewportObjects[OBJECT_EVENTS_COUNT][5]; }; void CreatePokemartMenu(const u16 *); diff --git a/include/slot_machine.h b/include/slot_machine.h index 1b22e165f..88bbbd91b 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -1,21 +1,6 @@ #ifndef GUARD_SLOT_MACHINE_H #define GUARD_SLOT_MACHINE_H -#define NUM_REELS 3 -#define REEL_NUM_TAGS 21 -#define REEL_TAG_HEIGHT 24 -#define SLOT_MACHINE_COUNT 12 - -// Lucky Flags -#define LUCKY_BIAS_REPLAY (1 << 0) -#define LUCKY_BIAS_CHERRY (1 << 1) -#define LUCKY_BIAS_LOTAD (1 << 2) -#define LUCKY_BIAS_AZURILL (1 << 3) -#define LUCKY_BIAS_POWER (1 << 4) -#define LUCKY_BIAS_REELTIME (1 << 5) -#define LUCKY_BIAS_MIXED_777 (1 << 6) -#define LUCKY_BIAS_777 (1 << 7) - void PlaySlotMachine(u8, void (callback)(void)); #endif // GUARD_SLOT_MACHINE_H diff --git a/include/start_menu.h b/include/start_menu.h index df2a290a2..1ddd82066 100644 --- a/include/start_menu.h +++ b/include/start_menu.h @@ -8,8 +8,8 @@ void Task_ShowStartMenu(u8 taskId); void ShowStartMenu(void); void ShowBattlePyramidStartMenu(void); void SaveGame(void); -void sub_80A0514(void); -void sub_80A08CC(void); +void CB2_SetUpSaveAfterLinkBattle(void); +void SaveForBattleTowerLink(void); void HideStartMenu(void); void AppendToList(u8* list, u8* pos, u8 newEntry); diff --git a/include/starter_choose.h b/include/starter_choose.h index 535e272b7..7a4f6e967 100644 --- a/include/starter_choose.h +++ b/include/starter_choose.h @@ -5,6 +5,7 @@ extern const u16 gBirchBagGrassPal[2][16]; extern const u32 gBirchBagTilemap[]; extern const u32 gBirchGrassTilemap[]; extern const u32 gBirchHelpGfx[]; +extern const u32 gPokeballSelection_Gfx[]; u16 GetStarterPokemon(u16 chosenStarterId); void CB2_ChooseStarter(void); diff --git a/include/strings.h b/include/strings.h index 5720598ad..7018f9e0d 100644 --- a/include/strings.h +++ b/include/strings.h @@ -84,10 +84,29 @@ extern const u8 gText_SoSo[]; extern const u8 gText_Bad[]; extern const u8 gText_TheWorst[]; +extern const u8 Roulette_Text_ControlsInstruction[]; +extern const u8 Roulette_Text_KeepPlaying[]; +extern const u8 Roulette_Text_Jackpot[]; +extern const u8 Roulette_Text_ItsAHit[]; +extern const u8 Roulette_Text_NothingDoing[]; +extern const u8 Roulette_Text_YouveWonXCoins[]; +extern const u8 Roulette_Text_BoardWillBeCleared[]; +extern const u8 Roulette_Text_CoinCaseIsFull[]; +extern const u8 Roulette_Text_NoCoinsLeft[]; +extern const u8 Roulette_Text_PlayMinimumWagerIsX[]; +extern const u8 Roulette_Text_SpecialRateTable[]; +extern const u8 Roulette_Text_NotEnoughCoins[]; + extern const u8 gText_Slots[]; extern const u8 gText_Roulette[]; extern const u8 gText_Jackpot[]; +extern const u8 gText_YouDontHaveThreeCoins[]; +extern const u8 gText_QuitTheGame[]; +extern const u8 gText_YouveGot9999Coins[]; +extern const u8 gText_YouveRunOutOfCoins[]; +extern const u8 gText_ReelTimeHelp[]; + extern const u8 gText_First[]; extern const u8 gText_Second[]; extern const u8 gText_Third[]; @@ -374,6 +393,9 @@ extern const u8 gText_DefaultNameTerra[]; extern const u8 gText_DefaultNameLucy[]; extern const u8 gText_DefaultNameHalie[]; +extern const u8 gText_BirchInTrouble[]; +extern const u8 gText_ConfirmStarterChoice[]; + // mystery event menu text extern const u8 gText_EventSafelyLoaded[]; extern const u8 gText_LoadErrorEndingSession[]; @@ -962,7 +984,7 @@ extern const u8 gText_TwoDashes[]; extern const u8 *const gReturnToXStringsTable2[]; -extern const u8 gText_XPLink[]; +extern const u8 gText_NumPlayerLink[]; extern const u8 gText_ConfirmLinkWhenPlayersReady[]; extern const u8 gText_ConfirmStartLinkWithXPlayers[]; extern const u8 gText_AwaitingLinkup[]; @@ -2494,7 +2516,7 @@ extern const u8 gText_CommunicationStandby[]; extern const u8 gText_AnnouncingResults[]; extern const u8 gText_PreliminaryResults[]; extern const u8 gText_Round2Results[]; -extern const u8 gText_Var1sVar2Won[]; +extern const u8 gText_ContestantsMonWon[]; // Trainer Card extern const u8 gText_LinkCableBattles[]; @@ -2815,10 +2837,10 @@ extern const u8 gText_RegisterTextHere[]; extern const u8 gText_InputText[]; extern const u8 gText_ExitingChat[]; extern const u8 gText_LeaderLeftEndingChat[]; -extern const u8 gText_RegisteredTextChanged[]; -extern const u8 gText_AlreadySavedFile_Unused[]; -extern const u8 gText_SavingDontTurnOff_Unused[]; -extern const u8 gText_PlayerSavedGame_Unused[]; +extern const u8 gText_RegisteredTextChangedOKToSave[]; +extern const u8 gText_AlreadySavedFile_Chat[]; +extern const u8 gText_SavingDontTurnOff_Chat[]; +extern const u8 gText_PlayerSavedGame_Chat[]; extern const u8 gText_IfLeaderLeavesChatEnds[]; extern const u8 gText_Upper[]; extern const u8 gText_Lower[]; @@ -2961,4 +2983,9 @@ extern const u8 gText_Smartness[]; extern const u8 gText_Cuteness[]; extern const u8 gText_Beauty3[]; +// Berry Blender +extern const u8 gText_SavingDontTurnOff2[]; +extern const u8 gText_BlenderMaxSpeedRecord[]; +extern const u8 gText_234Players[]; + #endif // GUARD_STRINGS_H diff --git a/include/text_window.h b/include/text_window.h index 501597aa2..7bdcacd17 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -20,7 +20,7 @@ void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset); void DrawTextBorderOuter(u8 windowId, u16 tileNum, u8 palNum); void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum); void rbox_fill_rectangle(u8 windowId); -const u16 *stdpal_get(u8 id); +const u16 *GetTextWindowPalette(u8 id); const u16 *GetOverworldTextboxPalettePtr(void); void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset); diff --git a/include/trainer_hill.h b/include/trainer_hill.h index c849bcced..3f0644248 100644 --- a/include/trainer_hill.h +++ b/include/trainer_hill.h @@ -75,7 +75,7 @@ void FillHillTrainerParty(void); void FillHillTrainersParties(void); u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId); u8 GetNumFloorsInTrainerHillChallenge(void); -void sub_81D64C0(void); -bool32 sub_81D6534(void); +void TryLoadTrainerHillEReaderPalette(void); +bool32 OnTrainerHillEReaderChallengeFloor(void); #endif // GUARD_TRAINER_HILL_H diff --git a/include/tv.h b/include/tv.h index 8e9233c2b..4dc14143c 100644 --- a/include/tv.h +++ b/include/tv.h @@ -30,12 +30,12 @@ void AlertTVThatPlayerPlayedSlotMachine(u16 nCoinsSpent); void AlertTVThatPlayerPlayedRoulette(u16 nCoinsSpent); void AlertTVOfNewCoinTotal(u16 nCoinsPaidOut); void TryPutSecretBaseSecretsOnAir(void); -void sub_80EDB44(void); +void TryPutTodaysRivalTrainerOnAir(void); void sub_80EDC60(const u16 *words); void sub_80EDA80(void); void ReceivePokeNewsData(void *src, u32 size, u8 masterIdx); void sub_80F0BB8(void); -void sub_80ED950(bool8 flag); +void RecordFishingAttemptForTV(bool8 caughtFish); void IncrementDailySlotsUses(void); void IncrementDailyRouletteUses(void); void IncrementDailyWildBattles(void); @@ -59,11 +59,11 @@ void SaveRecordedItemPurchasesForTVShow(void); bool8 ShouldAirFrontierTVShow(void); void sub_80EE8C8(u16 winStreak, u8 facilityAndMode); void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace); -void ContestLiveUpdates_BeforeInterview_1(u8 a0); -void ContestLiveUpdates_BeforeInterview_2(u8 a0); -void ContestLiveUpdates_BeforeInterview_3(u8 a0); -void ContestLiveUpdates_BeforeInterview_4(u16 a0); -void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1); +void ContestLiveUpdates_Init(u8 round1Placing); +void ContestLiveUpdates_SetRound2Placing(u8 round2Placing); +void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag); +void ContestLiveUpdates_SetWinnerMoveUsed(u16 move); +void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser); void ResetGabbyAndTy(void); #endif //GUARD_TV_H diff --git a/include/union_room.h b/include/union_room.h index 4c4cb5a62..563a048d3 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -2,71 +2,70 @@ #define GUARD_UNION_ROOM_H #include "link_rfu.h" +#include "link.h" +#include "constants/union_room.h" // Exported type declarations -struct UnkStruct_Shared +struct WirelessGnameUnamePair { - struct GFtgtGname field_0; + struct GFtgtGname gname; u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1]; }; struct UnkStruct_x1C { - struct UnkStruct_Shared unk0; - u8 unk18:1; + struct WirelessGnameUnamePair gname_uname; + u8 active:1; }; struct UnkStruct_x20 { - struct UnkStruct_Shared unk; - u16 field_18; - u8 field_1A_0:2; - u8 field_1A_1:1; + struct WirelessGnameUnamePair gname_uname; + u16 timeoutCounter; + u8 groupScheduledAnim:2; + bool8 useRedText:1; // Never set u8 field_1B; - u8 field_1D; - u8 field_1E; - u8 field_1F; + u8 filler[3]; }; struct UnkStruct_Main0 { - struct UnkStruct_x20 arr[8]; + struct UnkStruct_x20 arr[MAX_UNION_ROOM_PLAYERS]; }; struct UnkStruct_Main4 { - struct UnkStruct_x1C arr[5]; + struct UnkStruct_x1C arr[MAX_RFU_PLAYERS]; }; struct UnkStruct_Main8 { - struct UnkStruct_x20 arr[5]; + struct UnkStruct_x20 arr[MAX_RFU_PLAYERS]; }; -struct UnkStruct_Leader +struct WirelessLink_Leader { struct UnkStruct_Main0 *field_0; struct UnkStruct_Main4 *field_4; struct UnkStruct_Main8 *field_8; u8 state; u8 textState; - u8 field_E; + u8 delayTimerAfterOk; u8 listWindowId; - u8 field_10; - u8 field_11; + u8 bButtonCancelWindowId; + u8 nPlayerModeWindowId; u8 listTaskId; - u8 field_13; - u8 field_14; - u8 field_15; + u8 playerCount; + u16 field_14; u8 field_16; - u8 field_17; - u8 field_18; - u8 field_19; - u16 field_1A; + u8 listenTaskId; + u8 activity; + u8 joinRequestAnswer; + u16 memberConfirmTimeout; }; -struct UnkStruct_Group +struct WirelessLink_Group { struct UnkStruct_Main0 *field_0; struct UnkStruct_Main4 *field_4; @@ -74,98 +73,96 @@ struct UnkStruct_Group u8 textState; u8 field_A; u8 listWindowId; - u8 field_C; - u8 field_D; + u8 bButtonCancelWindowId; + u8 playerNameAndIdWindowId; u8 listTaskId; - u8 field_F; + u8 leaderId; u8 field_10; - u8 field_11; - u8 field_12; + u8 listenTaskId; + u8 isWonderNews; u8 field_13; - u8 field_14; - u8 field_15; + u8 refreshTimer; + u8 delayBeforePrint; }; -struct UnkStruct_8019BA8 +struct UnionRoomObject { - u8 field_0; - u8 field_1; - s8 field_2; - u8 field_3; + u8 state; + u8 gfxId; + s8 animState; + u8 schedAnim; }; -struct UnkStruct_URoom +struct WirelessLink_URoom { struct UnkStruct_Main0 *field_0; struct UnkStruct_Main4 *field_4; struct UnkStruct_Main0 *field_8; struct UnkStruct_Main4 *field_C; - u16 field_10; + u16 unknown; // Never read u16 field_12; u8 state; u8 stateAfterPrint; u8 textState; - u8 field_17; - u8 field_18; - u8 field_19; - u8 field_1A; - u8 field_1B; - u8 field_1C; - u8 field_1D; - u8 field_1E; - u8 field_1F; - u8 field_20; + u8 filler[4]; + u8 topListMenuWindowId; + u8 topListMenuId; + u8 tradeBoardSelectWindowId; + u8 tradeBoardDetailsWindowId; + u8 unused1; + u8 searchTaskId; u8 spriteIds[40]; - u8 field_49; - u8 field_4A; - u16 field_4C[6]; - u8 field_58[0x98 - 0x58]; - u16 field_98; - u16 field_9A[3]; - struct UnkStruct_8019BA8 field_A0[8]; - u8 field_C0[12][15]; - u8 field_174[48]; - u8 field_1A4[200]; + u8 unused2; + u8 tradeBoardListMenuId; + u16 playerSendBuffer[6]; + u8 activityRequestStrbufs[4][16]; + u16 partnerYesNoResponse; + u16 recvActivityRequest[3]; + struct UnionRoomObject objects[MAX_UNION_ROOM_PLAYERS]; + u8 trainerCardStrBuffer[12][15]; + u8 trainerCardColorStrBuffer[48]; + u8 trainerCardMsgStrBuffer[200]; }; -union UnkUnion_Main +union WirelessLink_Main { - struct UnkStruct_Leader *leader; - struct UnkStruct_Group *group; - struct UnkStruct_URoom *uRoom; + struct WirelessLink_Leader *leader; + struct WirelessLink_Group *group; + struct WirelessLink_URoom *uRoom; }; struct UnionRoomTrade { - u16 field_0; + u16 state; u16 type; u32 playerPersonality; - u8 field_8; - u8 field_9; + u8 offerPlayerId; + u8 filler1; u16 playerSpecies; u16 playerLevel; u16 species; u16 level; - u16 field_12; + u16 filler2; u32 personality; }; // Exported RAM declarations -extern u8 gUnknown_02022C2C; -extern union UnkUnion_Main gUnknown_02022C30; -extern struct GFtgtGnameSub gUnknown_02022C38; +extern u8 gPlayerCurrActivity; +extern union WirelessLink_Main gUnknown_02022C30; +extern struct GFtgtGnameSub gPartnerTgtGnameSub; extern u16 gUnionRoomOfferedSpecies; extern u8 gUnionRoomRequestedMonType; // Exported ROM declarations -u8 sub_8013F78(void); -void nullsub_89(u8 taskId); -void var_800D_set_xB(void); +u8 CreateTask_CreateTradeMenu(void); +void SetUsingUnionRoomStartMenu(void); void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0); void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0); void MEvent_CreateTask_Leader(u32 arg0); +u8 CreateTask_ListenToWireless(void); +void StartUnionRoomBattle(u16 battleFlags); #endif //GUARD_UNION_ROOM_H diff --git a/include/union_room_battle.h b/include/union_room_battle.h index 2f5086008..ffccf197f 100644 --- a/include/union_room_battle.h +++ b/include/union_room_battle.h @@ -1,7 +1,6 @@ #ifndef GUARD_UNION_ROOM_BATTLE_H #define GUARD_UNION_ROOM_BATTLE_H -u8 sub_8013C40(void); -void sub_8014210(u16 battleFlags); +void CB2_UnionRoomBattle(void); #endif //GUARD_UNION_ROOM_BATTLE_H diff --git a/include/union_room_chat.h b/include/union_room_chat.h index e7ca9d46e..dbd45c543 100755 --- a/include/union_room_chat.h +++ b/include/union_room_chat.h @@ -1,18 +1,7 @@ #ifndef GUARD_UNION_ROOM_CHAT_H #define GUARD_UNION_ROOM_CHAT_H -enum -{ - UNION_ROOM_KB_PAGE_UPPER, - UNION_ROOM_KB_PAGE_LOWER, - UNION_ROOM_KB_PAGE_EMOJI, - UNION_ROOM_KB_PAGE_COUNT -}; - -#define UNION_ROOM_KB_ROW_COUNT 10 - - -void sub_801DD98(void); -void copy_strings_to_sav1(void); +void EnterUnionRoomChat(void); +void InitUnionRoomChatRegisteredTexts(void); #endif // GUARD_UNION_ROOM_CHAT_H diff --git a/include/union_room_player_avatar.h b/include/union_room_player_avatar.h index 9870d0981..c7add758a 100644 --- a/include/union_room_player_avatar.h +++ b/include/union_room_player_avatar.h @@ -1,14 +1,14 @@ #ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H #define GUARD_UNION_ROOM_PLAYER_AVATAR_H -u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr); -void sub_8019E3C(void); -void sub_8019E70(u8 *arg0, s32 arg1); -void sub_8019F04(u8 *spriteIds); -void sub_8019F2C(void); -void sub_801A274(struct UnkStruct_URoom *arg0); -void sub_801A284(struct UnkStruct_URoom *arg0); -bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3); -void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2); +u8 InitUnionRoomPlayerObjects(struct UnionRoomObject *players); +void DestroyUnionRoomPlayerObjects(void); +void CreateGroupMemberSpritesInvisible(u8 *spriteIds, s32 playerIdx); +void DestroyGroupMemberSprites(u8 *spriteIds); +void SetTilesAroundUnionRoomPlayersPassable(void); +void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom); +void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom); +bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds); +void UpdateUnionRoomMemberFacing(u32 currDirection, u32 playerIdx, struct UnkStruct_Main0 *main0); #endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H diff --git a/include/unk_transition.h b/include/unk_transition.h deleted file mode 100644 index a9caac419..000000000 --- a/include/unk_transition.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef GUARD_UNK_TRANSITION_H -#define GUARD_UNK_TRANSITION_H - -void Phase2Task_34(u8 taskId); -void Phase2Task_35(u8 taskId); -void Phase2Task_36(u8 taskId); -void Phase2Task_37(u8 taskId); -void Phase2Task_38(u8 taskId); -void Phase2Task_39(u8 taskId); -void Phase2Task_40(u8 taskId); -void Phase2Task_41(u8 taskId); - -#endif // GUARD_UNK_TRANSITION_H |