From 32ddd0f5cc1bf0ae7ae2c3d255a12fb583872265 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 7 Dec 2022 14:09:33 -0500 Subject: [PATCH 01/33] Index controller function tables --- include/battle_controllers.h | 10 +-- src/battle_controller_oak_old_man.c | 114 +++++++++++++------------- src/battle_controller_opponent.c | 114 +++++++++++++------------- src/battle_controller_player.c | 114 +++++++++++++------------- src/battle_controller_pokedude.c | 120 ++++++++++++++-------------- src/battle_controller_safari.c | 114 +++++++++++++------------- 6 files changed, 293 insertions(+), 293 deletions(-) diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 7172ad793..334485c15 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -120,16 +120,16 @@ struct HpAndStatus struct MovePpInfo { - u16 moves[4]; - u8 pp[4]; + u16 moves[MAX_MON_MOVES]; + u8 pp[MAX_MON_MOVES]; u8 ppBonuses; }; struct ChooseMoveStruct { - u16 moves[4]; - u8 currentPp[4]; - u8 maxPp[4]; + u16 moves[MAX_MON_MOVES]; + u8 currentPp[MAX_MON_MOVES]; + u8 maxPp[MAX_MON_MOVES]; u16 species; u8 monType1; u8 monType2; diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index a1d06d4d1..cf9ef722a 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -98,63 +98,63 @@ static void Task_StartSendOutAnim(u8 taskId); static void (*const sOakOldManBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - OakOldManHandleGetMonData, - OakOldManHandleGetRawMonData, - OakOldManHandleSetMonData, - OakOldManHandleSetRawMonData, - OakOldManHandleLoadMonSprite, - OakOldManHandleSwitchInAnim, - OakOldManHandleReturnMonToBall, - OakOldManHandleDrawTrainerPic, - OakOldManHandleTrainerSlide, - OakOldManHandleTrainerSlideBack, - OakOldManHandleFaintAnimation, - OakOldManHandlePaletteFade, - OakOldManHandleSuccessBallThrowAnim, - OakOldManHandleBallThrowAnim, - OakOldManHandlePause, - OakOldManHandleMoveAnimation, - OakOldManHandlePrintString, - OakOldManHandlePrintSelectionString, - OakOldManHandleChooseAction, - OakOldManHandleUnknownYesNoBox, - OakOldManHandleChooseMove, - OakOldManHandleChooseItem, - OakOldManHandleChoosePokemon, - OakOldManHandleCmd23, - OakOldManHandleHealthBarUpdate, - OakOldManHandleExpUpdate, - OakOldManHandleStatusIconUpdate, - OakOldManHandleStatusAnimation, - OakOldManHandleStatusXor, - OakOldManHandleDataTransfer, - OakOldManHandleDMA3Transfer, - OakOldManHandlePlayBGM, - OakOldManHandleCmd32, - OakOldManHandleTwoReturnValues, - OakOldManHandleChosenMonReturnValue, - OakOldManHandleOneReturnValue, - OakOldManHandleOneReturnValue_Duplicate, - OakOldManHandleCmd37, - OakOldManHandleCmd38, - OakOldManHandleCmd39, - OakOldManHandleCmd40, - OakOldManHandleHitAnimation, - OakOldManHandleCmd42, - OakOldManHandlePlaySE, - OakOldManHandlePlayFanfare, - OakOldManHandleFaintingCry, - OakOldManHandleIntroSlide, - OakOldManHandleIntroTrainerBallThrow, - OakOldManHandleDrawPartyStatusSummary, - OakOldManHandleHidePartyStatusSummary, - OakOldManHandleEndBounceEffect, - OakOldManHandleSpriteInvisibility, - OakOldManHandleBattleAnimation, - OakOldManHandleLinkStandbyMsg, - OakOldManHandleResetActionMoveSelection, - OakOldManHandleCmd55, - OakOldManCmdEnd, + [CONTROLLER_GETMONDATA] = OakOldManHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = OakOldManHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = OakOldManHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = OakOldManHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = OakOldManHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = OakOldManHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = OakOldManHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = OakOldManHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = OakOldManHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = OakOldManHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = OakOldManHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = OakOldManHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = OakOldManHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = OakOldManHandleBallThrowAnim, + [CONTROLLER_PAUSE] = OakOldManHandlePause, + [CONTROLLER_MOVEANIMATION] = OakOldManHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = OakOldManHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = OakOldManHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = OakOldManHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = OakOldManHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = OakOldManHandleChooseMove, + [CONTROLLER_OPENBAG] = OakOldManHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = OakOldManHandleChoosePokemon, + [CONTROLLER_23] = OakOldManHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = OakOldManHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = OakOldManHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = OakOldManHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = OakOldManHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = OakOldManHandleStatusXor, + [CONTROLLER_DATATRANSFER] = OakOldManHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = OakOldManHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = OakOldManHandlePlayBGM, + [CONTROLLER_32] = OakOldManHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = OakOldManHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = OakOldManHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = OakOldManHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = OakOldManHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = OakOldManHandleCmd37, + [CONTROLLER_SETUNKVAR] = OakOldManHandleCmd38, + [CONTROLLER_CLEARUNKFLAG] = OakOldManHandleCmd39, + [CONTROLLER_TOGGLEUNKFLAG] = OakOldManHandleCmd40, + [CONTROLLER_HITANIMATION] = OakOldManHandleHitAnimation, + [CONTROLLER_CANTSWITCH] = OakOldManHandleCmd42, + [CONTROLLER_PLAYSE] = OakOldManHandlePlaySE, + [CONTROLLER_PLAYFANFARE] = OakOldManHandlePlayFanfare, + [CONTROLLER_FAINTINGCRY] = OakOldManHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = OakOldManHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = OakOldManHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = OakOldManHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = OakOldManHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = OakOldManHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = OakOldManHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = OakOldManHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = OakOldManHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = OakOldManHandleResetActionMoveSelection, + [CONTROLLER_ENDLINKBATTLE] = OakOldManHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = OakOldManCmdEnd, }; static void OakOldManDummy(void) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 19ad30441..b4b6ebbdf 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -92,63 +92,63 @@ static void EndDrawPartyStatusSummary(void); static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - OpponentHandleGetMonData, - OpponentHandleGetRawMonData, - OpponentHandleSetMonData, - OpponentHandleSetRawMonData, - OpponentHandleLoadMonSprite, - OpponentHandleSwitchInAnim, - OpponentHandleReturnMonToBall, - OpponentHandleDrawTrainerPic, - OpponentHandleTrainerSlide, - OpponentHandleTrainerSlideBack, - OpponentHandleFaintAnimation, - OpponentHandlePaletteFade, - OpponentHandleSuccessBallThrowAnim, - OpponentHandleBallThrowAnim, - OpponentHandlePause, - OpponentHandleMoveAnimation, - OpponentHandlePrintString, - OpponentHandlePrintSelectionString, - OpponentHandleChooseAction, - OpponentHandleUnknownYesNoBox, - OpponentHandleChooseMove, - OpponentHandleChooseItem, - OpponentHandleChoosePokemon, - OpponentHandleCmd23, - OpponentHandleHealthBarUpdate, - OpponentHandleExpUpdate, - OpponentHandleStatusIconUpdate, - OpponentHandleStatusAnimation, - OpponentHandleStatusXor, - OpponentHandleDataTransfer, - OpponentHandleDMA3Transfer, - OpponentHandlePlayBGM, - OpponentHandleCmd32, - OpponentHandleTwoReturnValues, - OpponentHandleChosenMonReturnValue, - OpponentHandleOneReturnValue, - OpponentHandleOneReturnValue_Duplicate, - OpponentHandleCmd37, - OpponentHandleCmd38, - OpponentHandleCmd39, - OpponentHandleCmd40, - OpponentHandleHitAnimation, - OpponentHandleCmd42, - OpponentHandlePlaySE, - OpponentHandlePlayFanfare, - OpponentHandleFaintingCry, - OpponentHandleIntroSlide, - OpponentHandleIntroTrainerBallThrow, - OpponentHandleDrawPartyStatusSummary, - OpponentHandleHidePartyStatusSummary, - OpponentHandleEndBounceEffect, - OpponentHandleSpriteInvisibility, - OpponentHandleBattleAnimation, - OpponentHandleLinkStandbyMsg, - OpponentHandleResetActionMoveSelection, - OpponentHandleCmd55, - OpponentCmdEnd + [CONTROLLER_GETMONDATA] = OpponentHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = OpponentHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = OpponentHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = OpponentHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = OpponentHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = OpponentHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = OpponentHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = OpponentHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = OpponentHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = OpponentHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = OpponentHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = OpponentHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = OpponentHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = OpponentHandleBallThrowAnim, + [CONTROLLER_PAUSE] = OpponentHandlePause, + [CONTROLLER_MOVEANIMATION] = OpponentHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = OpponentHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = OpponentHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = OpponentHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = OpponentHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = OpponentHandleChooseMove, + [CONTROLLER_OPENBAG] = OpponentHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = OpponentHandleChoosePokemon, + [CONTROLLER_23] = OpponentHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = OpponentHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = OpponentHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = OpponentHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = OpponentHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = OpponentHandleStatusXor, + [CONTROLLER_DATATRANSFER] = OpponentHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = OpponentHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = OpponentHandlePlayBGM, + [CONTROLLER_32] = OpponentHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = OpponentHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = OpponentHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = OpponentHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = OpponentHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = OpponentHandleCmd37, + [CONTROLLER_SETUNKVAR] = OpponentHandleCmd38, + [CONTROLLER_CLEARUNKFLAG] = OpponentHandleCmd39, + [CONTROLLER_TOGGLEUNKFLAG] = OpponentHandleCmd40, + [CONTROLLER_HITANIMATION] = OpponentHandleHitAnimation, + [CONTROLLER_CANTSWITCH] = OpponentHandleCmd42, + [CONTROLLER_PLAYSE] = OpponentHandlePlaySE, + [CONTROLLER_PLAYFANFARE] = OpponentHandlePlayFanfare, + [CONTROLLER_FAINTINGCRY] = OpponentHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = OpponentHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = OpponentHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = OpponentHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = OpponentHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = OpponentHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = OpponentHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = OpponentHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = OpponentHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = OpponentHandleResetActionMoveSelection, + [CONTROLLER_ENDLINKBATTLE] = OpponentHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = OpponentCmdEnd }; // unknown unused data diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 7928a7031..64a47823f 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -109,63 +109,63 @@ static void EndDrawPartyStatusSummary(void); static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - PlayerHandleGetMonData, - PlayerHandleGetRawMonData, - PlayerHandleSetMonData, - PlayerHandleSetRawMonData, - PlayerHandleLoadMonSprite, - PlayerHandleSwitchInAnim, - PlayerHandleReturnMonToBall, - PlayerHandleDrawTrainerPic, - PlayerHandleTrainerSlide, - PlayerHandleTrainerSlideBack, - PlayerHandleFaintAnimation, - PlayerHandlePaletteFade, - PlayerHandleSuccessBallThrowAnim, - PlayerHandleBallThrowAnim, - PlayerHandlePause, - PlayerHandleMoveAnimation, - PlayerHandlePrintString, - PlayerHandlePrintSelectionString, - PlayerHandleChooseAction, - PlayerHandleUnknownYesNoBox, - PlayerHandleChooseMove, - PlayerHandleChooseItem, - PlayerHandleChoosePokemon, - PlayerHandleCmd23, - PlayerHandleHealthBarUpdate, - PlayerHandleExpUpdate, - PlayerHandleStatusIconUpdate, - PlayerHandleStatusAnimation, - PlayerHandleStatusXor, - PlayerHandleDataTransfer, - PlayerHandleDMA3Transfer, - PlayerHandlePlayBGM, - PlayerHandleCmd32, - PlayerHandleTwoReturnValues, - PlayerHandleChosenMonReturnValue, - PlayerHandleOneReturnValue, - PlayerHandleOneReturnValue_Duplicate, - PlayerHandleCmd37, - PlayerHandleCmd38, - PlayerHandleCmd39, - PlayerHandleCmd40, - PlayerHandleHitAnimation, - PlayerHandleCmd42, - PlayerHandlePlaySE, - PlayerHandlePlayFanfare, - PlayerHandleFaintingCry, - PlayerHandleIntroSlide, - PlayerHandleIntroTrainerBallThrow, - PlayerHandleDrawPartyStatusSummary, - PlayerHandleHidePartyStatusSummary, - PlayerHandleEndBounceEffect, - PlayerHandleSpriteInvisibility, - PlayerHandleBattleAnimation, - PlayerHandleLinkStandbyMsg, - PlayerHandleResetActionMoveSelection, - PlayerHandleCmd55, - PlayerCmdEnd, + [CONTROLLER_GETMONDATA] = PlayerHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = PlayerHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = PlayerHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = PlayerHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = PlayerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = PlayerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = PlayerHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = PlayerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = PlayerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = PlayerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = PlayerHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = PlayerHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = PlayerHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = PlayerHandleBallThrowAnim, + [CONTROLLER_PAUSE] = PlayerHandlePause, + [CONTROLLER_MOVEANIMATION] = PlayerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = PlayerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = PlayerHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = PlayerHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = PlayerHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = PlayerHandleChooseMove, + [CONTROLLER_OPENBAG] = PlayerHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = PlayerHandleChoosePokemon, + [CONTROLLER_23] = PlayerHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = PlayerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = PlayerHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = PlayerHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = PlayerHandleStatusXor, + [CONTROLLER_DATATRANSFER] = PlayerHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = PlayerHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = PlayerHandlePlayBGM, + [CONTROLLER_32] = PlayerHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = PlayerHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = PlayerHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = PlayerHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = PlayerHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = PlayerHandleCmd37, + [CONTROLLER_SETUNKVAR] = PlayerHandleCmd38, + [CONTROLLER_CLEARUNKFLAG] = PlayerHandleCmd39, + [CONTROLLER_TOGGLEUNKFLAG] = PlayerHandleCmd40, + [CONTROLLER_HITANIMATION] = PlayerHandleHitAnimation, + [CONTROLLER_CANTSWITCH] = PlayerHandleCmd42, + [CONTROLLER_PLAYSE] = PlayerHandlePlaySE, + [CONTROLLER_PLAYFANFARE] = PlayerHandlePlayFanfare, + [CONTROLLER_FAINTINGCRY] = PlayerHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = PlayerHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = PlayerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = PlayerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = PlayerHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = PlayerHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = PlayerHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = PlayerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = PlayerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerHandleResetActionMoveSelection, + [CONTROLLER_ENDLINKBATTLE] = PlayerHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = PlayerCmdEnd, }; static const u8 sTargetIdentities[] = { B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT }; diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c index 83c44a19c..3b1084aa4 100644 --- a/src/battle_controller_pokedude.c +++ b/src/battle_controller_pokedude.c @@ -34,7 +34,7 @@ struct PokedudeBattlePartyInfo u8 side; u8 level; u16 species; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; u8 nature; u8 gender; }; @@ -121,65 +121,65 @@ static void Task_StartSendOutAnim(u8 taskId); static const u8 *GetPokedudeText(void); static void (*const sPokedudeBufferCommands[CONTROLLER_CMDS_COUNT])(void) = - { - PokedudeHandleGetMonData, - PokedudeHandleGetRawMonData, - PokedudeHandleSetMonData, - PokedudeHandleSetRawMonData, - PokedudeHandleLoadMonSprite, - PokedudeHandleSwitchInAnim, - PokedudeHandleReturnMonToBall, - PokedudeHandleDrawTrainerPic, - PokedudeHandleTrainerSlide, - PokedudeHandleTrainerSlideBack, - PokedudeHandleFaintAnimation, - PokedudeHandlePaletteFade, - PokedudeHandleSuccessBallThrowAnim, - PokedudeHandleBallThrowAnim, - PokedudeHandlePause, - PokedudeHandleMoveAnimation, - PokedudeHandlePrintString, - PokedudeHandlePrintSelectionString, - PokedudeHandleChooseAction, - PokedudeHandleUnknownYesNoBox, - PokedudeHandleChooseMove, - PokedudeHandleChooseItem, - PokedudeHandleChoosePokemon, - PokedudeHandleCmd23, - PokedudeHandleHealthBarUpdate, - PokedudeHandleExpUpdate, - PokedudeHandleStatusIconUpdate, - PokedudeHandleStatusAnimation, - PokedudeHandleStatusXor, - PokedudeHandleDataTransfer, - PokedudeHandleDMA3Transfer, - PokedudeHandlePlayBGM, - PokedudeHandleCmd32, - PokedudeHandleTwoReturnValues, - PokedudeHandleChosenMonReturnValue, - PokedudeHandleOneReturnValue, - PokedudeHandleOneReturnValue_Duplicate, - PokedudeHandleCmd37, - PokedudeHandleCmd38, - PokedudeHandleCmd39, - PokedudeHandleCmd40, - PokedudeHandleHitAnimation, - PokedudeHandleCmd42, - PokedudeHandlePlaySE, - PokedudeHandlePlayFanfare, - PokedudeHandleFaintingCry, - PokedudeHandleIntroSlide, - PokedudeHandleIntroTrainerBallThrow, - PokedudeHandleDrawPartyStatusSummary, - PokedudeHandleHidePartyStatusSummary, - PokedudeHandleEndBounceEffect, - PokedudeHandleSpriteInvisibility, - PokedudeHandleBattleAnimation, - PokedudeHandleLinkStandbyMsg, - PokedudeHandleResetActionMoveSelection, - PokedudeHandleCmd55, - PokedudeCmdEnd, - }; +{ + [CONTROLLER_GETMONDATA] = PokedudeHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = PokedudeHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = PokedudeHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = PokedudeHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = PokedudeHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = PokedudeHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = PokedudeHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = PokedudeHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = PokedudeHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = PokedudeHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = PokedudeHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = PokedudeHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = PokedudeHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = PokedudeHandleBallThrowAnim, + [CONTROLLER_PAUSE] = PokedudeHandlePause, + [CONTROLLER_MOVEANIMATION] = PokedudeHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = PokedudeHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = PokedudeHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = PokedudeHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = PokedudeHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = PokedudeHandleChooseMove, + [CONTROLLER_OPENBAG] = PokedudeHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = PokedudeHandleChoosePokemon, + [CONTROLLER_23] = PokedudeHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = PokedudeHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = PokedudeHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = PokedudeHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = PokedudeHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = PokedudeHandleStatusXor, + [CONTROLLER_DATATRANSFER] = PokedudeHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = PokedudeHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = PokedudeHandlePlayBGM, + [CONTROLLER_32] = PokedudeHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = PokedudeHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = PokedudeHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = PokedudeHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = PokedudeHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = PokedudeHandleCmd37, + [CONTROLLER_SETUNKVAR] = PokedudeHandleCmd38, + [CONTROLLER_CLEARUNKFLAG] = PokedudeHandleCmd39, + [CONTROLLER_TOGGLEUNKFLAG] = PokedudeHandleCmd40, + [CONTROLLER_HITANIMATION] = PokedudeHandleHitAnimation, + [CONTROLLER_CANTSWITCH] = PokedudeHandleCmd42, + [CONTROLLER_PLAYSE] = PokedudeHandlePlaySE, + [CONTROLLER_PLAYFANFARE] = PokedudeHandlePlayFanfare, + [CONTROLLER_FAINTINGCRY] = PokedudeHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = PokedudeHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = PokedudeHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = PokedudeHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = PokedudeHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = PokedudeHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = PokedudeHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = PokedudeHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = PokedudeHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = PokedudeHandleResetActionMoveSelection, + [CONTROLLER_ENDLINKBATTLE] = PokedudeHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = PokedudeCmdEnd, +}; // unknown unused data static const u8 sUnused[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 }; diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 50bfdb205..4337dd723 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -79,63 +79,63 @@ static void CompleteWhenChosePokeblock(void); static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - SafariHandleGetMonData, - SafariHandleGetRawMonData, - SafariHandleSetMonData, - SafariHandleSetRawMonData, - SafariHandleLoadMonSprite, - SafariHandleSwitchInAnim, - SafariHandleReturnMonToBall, - SafariHandleDrawTrainerPic, - SafariHandleTrainerSlide, - SafariHandleTrainerSlideBack, - SafariHandleFaintAnimation, - SafariHandlePaletteFade, - SafariHandleSuccessBallThrowAnim, - SafariHandleBallThrowAnim, - SafariHandlePause, - SafariHandleMoveAnimation, - SafariHandlePrintString, - SafariHandlePrintSelectionString, - SafariHandleChooseAction, - SafariHandleUnknownYesNoBox, - SafariHandleChooseMove, - SafariHandleChooseItem, - SafariHandleChoosePokemon, - SafariHandleCmd23, - SafariHandleHealthBarUpdate, - SafariHandleExpUpdate, - SafariHandleStatusIconUpdate, - SafariHandleStatusAnimation, - SafariHandleStatusXor, - SafariHandleDataTransfer, - SafariHandleDMA3Transfer, - SafariHandlePlayBGM, - SafariHandleCmd32, - SafariHandleTwoReturnValues, - SafariHandleChosenMonReturnValue, - SafariHandleOneReturnValue, - SafariHandleOneReturnValue_Duplicate, - SafariHandleCmd37, - SafariHandleCmd38, - SafariHandleCmd39, - SafariHandleCmd40, - SafariHandleHitAnimation, - SafariHandleCmd42, - SafariHandlePlaySE, - SafariHandlePlayFanfareOrBGM, - SafariHandleFaintingCry, - SafariHandleIntroSlide, - SafariHandleIntroTrainerBallThrow, - SafariHandleDrawPartyStatusSummary, - SafariHandleHidePartyStatusSummary, - SafariHandleEndBounceEffect, - SafariHandleSpriteInvisibility, - SafariHandleBattleAnimation, - SafariHandleLinkStandbyMsg, - SafariHandleResetActionMoveSelection, - SafariHandleCmd55, - SafariCmdEnd, + [CONTROLLER_GETMONDATA] = SafariHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = SafariHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = SafariHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = SafariHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = SafariHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = SafariHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = SafariHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = SafariHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = SafariHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = SafariHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = SafariHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = SafariHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = SafariHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = SafariHandleBallThrowAnim, + [CONTROLLER_PAUSE] = SafariHandlePause, + [CONTROLLER_MOVEANIMATION] = SafariHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = SafariHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = SafariHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = SafariHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = SafariHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = SafariHandleChooseMove, + [CONTROLLER_OPENBAG] = SafariHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = SafariHandleChoosePokemon, + [CONTROLLER_23] = SafariHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = SafariHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = SafariHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = SafariHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = SafariHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = SafariHandleStatusXor, + [CONTROLLER_DATATRANSFER] = SafariHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = SafariHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = SafariHandlePlayBGM, + [CONTROLLER_32] = SafariHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = SafariHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = SafariHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = SafariHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = SafariHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = SafariHandleCmd37, + [CONTROLLER_SETUNKVAR] = SafariHandleCmd38, + [CONTROLLER_CLEARUNKFLAG] = SafariHandleCmd39, + [CONTROLLER_TOGGLEUNKFLAG] = SafariHandleCmd40, + [CONTROLLER_HITANIMATION] = SafariHandleHitAnimation, + [CONTROLLER_CANTSWITCH] = SafariHandleCmd42, + [CONTROLLER_PLAYSE] = SafariHandlePlaySE, + [CONTROLLER_PLAYFANFARE] = SafariHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = SafariHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = SafariHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = SafariHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = SafariHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = SafariHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = SafariHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = SafariHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = SafariHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = SafariHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = SafariHandleResetActionMoveSelection, + [CONTROLLER_ENDLINKBATTLE] = SafariHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = SafariCmdEnd, }; // not used From 1de99b6a27ce6214572eae577294537b368020a0 Mon Sep 17 00:00:00 2001 From: Acimut <79547805+Acimut@users.noreply.github.com> Date: Fri, 9 Dec 2022 10:03:32 -0500 Subject: [PATCH 02/33] Sync m4a_1.s --- constants/m4a_constants.inc | 169 ++++++++----- sound/music_player_table.inc | 34 ++- src/m4a_1.s | 470 +++++++++++++++++------------------ sym_bss.txt | 1 + 4 files changed, 367 insertions(+), 307 deletions(-) diff --git a/constants/m4a_constants.inc b/constants/m4a_constants.inc index 62ca5bb55..1a744dc7f 100644 --- a/constants/m4a_constants.inc +++ b/constants/m4a_constants.inc @@ -1,12 +1,43 @@ .equiv ID_NUMBER, 0x68736d53 .equiv PCM_DMA_BUF_SIZE, 1584 + .equiv MAX_DIRECTSOUND_CHANNELS, 12 + + .equiv C_V, 0x40 .equiv TONEDATA_TYPE_CGB, 0x07 .equiv TONEDATA_TYPE_FIX, 0x08 + .equiv TONEDATA_TYPE_REV, 0x10 + .equiv TONEDATA_TYPE_CMP, 0x20 .equiv TONEDATA_TYPE_SPL, 0x40 @ key split .equiv TONEDATA_TYPE_RHY, 0x80 @ rhythm + .equiv TONEDATA_P_S_PAN, 0xc0 + + .equiv SOUND_CHANNEL_SF_START, 0x80 + .equiv SOUND_CHANNEL_SF_STOP, 0x40 + .equiv SOUND_CHANNEL_SF_SPECIAL, 0x20 + .equiv SOUND_CHANNEL_SF_LOOP, 0x10 + .equiv SOUND_CHANNEL_SF_IEC, 0x04 + .equiv SOUND_CHANNEL_SF_ENV, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_ATTACK, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_DECAY, 0x02 + .equiv SOUND_CHANNEL_SF_ENV_SUSTAIN, 0x01 + .equiv SOUND_CHANNEL_SF_ENV_RELEASE, 0x00 + .equiv SOUND_CHANNEL_SF_ON, (SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_STOP | SOUND_CHANNEL_SF_IEC | SOUND_CHANNEL_SF_ENV) + + .equiv CGB_CHANNEL_MO_PIT, 0x02 + .equiv CGB_CHANNEL_MO_VOL, 0x01 + + .equiv WAVE_DATA_FLAG_LOOP, 0xC0 + + .equiv MPT_FLG_VOLSET, 0x01 + .equiv MPT_FLG_VOLCHG, 0x03 + .equiv MPT_FLG_PITSET, 0x04 + .equiv MPT_FLG_PITCHG, 0x0C + .equiv MPT_FLG_START, 0x40 + .equiv MPT_FLG_EXIST, 0x80 + .macro struct_begin .struct 0 .endm @@ -16,6 +47,28 @@ .struct \name + \size .endm + struct_begin + struct_field o_WaveData_type, 2 + struct_field o_WaveData_d1, 1 + struct_field o_WaveData_flags, 1 + struct_field o_WaveData_freq, 4 + struct_field o_WaveData_loopStart, 4 + struct_field o_WaveData_size, 4 + struct_field o_WaveData_data, 0 + struct_field WaveData_size, 0 + + struct_begin + struct_field o_ToneData_type, 1 + struct_field o_ToneData_key, 1 + struct_field o_ToneData_length, 1 + struct_field o_ToneData_pan_sweep, 1 + struct_field o_ToneData_wav, 4 + struct_field o_ToneData_attack, 1 + struct_field o_ToneData_decay, 1 + struct_field o_ToneData_sustain, 1 + struct_field o_ToneData_release, 1 + struct_field ToneData_size, 0 + struct_begin struct_field o_SoundInfo_ident, 4 struct_field o_SoundInfo_pcmDmaCounter, 1 @@ -32,8 +85,8 @@ struct_field o_SoundInfo_pcmFreq, 4 struct_field o_SoundInfo_divFreq, 4 struct_field o_SoundInfo_cgbChans, 4 - struct_field o_SoundInfo_func, 4 - struct_field o_SoundInfo_intp, 4 + struct_field o_SoundInfo_MPlayMainHead, 4 + struct_field o_SoundInfo_musicPlayerHead, 4 struct_field o_SoundInfo_CgbSound, 4 struct_field o_SoundInfo_CgbOscOff, 4 struct_field o_SoundInfo_MidiKeyToCgbFreq, 4 @@ -41,12 +94,12 @@ struct_field o_SoundInfo_plynote, 4 struct_field o_SoundInfo_ExtVolPit, 4 struct_field o_SoundInfo_gap2, 16 - struct_field o_SoundInfo_chans, 768 + struct_field o_SoundInfo_chans, MAX_DIRECTSOUND_CHANNELS * 64 struct_field o_SoundInfo_pcmBuffer, PCM_DMA_BUF_SIZE * 2 struct_field SoundInfo_size, 0 struct_begin - struct_field o_SoundChannel_status, 1 + struct_field o_SoundChannel_statusFlags, 1 struct_field o_SoundChannel_type, 1 struct_field o_SoundChannel_rightVolume, 1 struct_field o_SoundChannel_leftVolume, 1 @@ -54,29 +107,29 @@ struct_field o_SoundChannel_decay, 1 struct_field o_SoundChannel_sustain, 1 struct_field o_SoundChannel_release, 1 - struct_field o_SoundChannel_ky, 1 - struct_field o_SoundChannel_ev, 1 - struct_field o_SoundChannel_er, 1 - struct_field o_SoundChannel_el, 1 - struct_field o_SoundChannel_iev, 1 - struct_field o_SoundChannel_iel, 1 - struct_field o_SoundChannel_d1, 1 - struct_field o_SoundChannel_d2, 1 - struct_field o_SoundChannel_gt, 1 - struct_field o_SoundChannel_mk, 1 - struct_field o_SoundChannel_ve, 1 - struct_field o_SoundChannel_pr, 1 - struct_field o_SoundChannel_rp, 1 - struct_field o_SoundChannel_d3, 3 - struct_field o_SoundChannel_ct, 4 + struct_field o_SoundChannel_key, 1 + struct_field o_SoundChannel_envelopeVolume, 1 + struct_field o_SoundChannel_envelopeVolumeRight, 1 + struct_field o_SoundChannel_envelopeVolumeLeft, 1 + struct_field o_SoundChannel_pseudoEchoVolume, 1 + struct_field o_SoundChannel_pseudoEchoLength, 1 + struct_field o_SoundChannel_dummy1, 1 + struct_field o_SoundChannel_dummy2, 1 + struct_field o_SoundChannel_gateTime, 1 + struct_field o_SoundChannel_midiKey, 1 + struct_field o_SoundChannel_velocity, 1 + struct_field o_SoundChannel_priority, 1 + struct_field o_SoundChannel_rhythmPan, 1 + struct_field o_SoundChannel_dummy3, 3 + struct_field o_SoundChannel_count, 4 struct_field o_SoundChannel_fw, 4 - struct_field o_SoundChannel_freq, 4 + struct_field o_SoundChannel_frequency, 4 struct_field o_SoundChannel_wav, 4 - struct_field o_SoundChannel_cp, 4 + struct_field o_SoundChannel_currentPointer, 4 struct_field o_SoundChannel_track, 4 - struct_field o_SoundChannel_pp, 4 - struct_field o_SoundChannel_np, 4 - struct_field o_SoundChannel_d4, 4 + struct_field o_SoundChannel_prevChannelPointer, 4 + struct_field o_SoundChannel_nextChannelPointer, 4 + struct_field o_SoundChannel_dummy4, 4 struct_field o_SoundChannel_xpi, 2 struct_field o_SoundChannel_xpc, 2 struct_field SoundChannel_size, 0 @@ -112,8 +165,8 @@ struct_field o_MusicPlayerTrack_lfoDelay, 1 struct_field o_MusicPlayerTrack_lfoDelayC, 1 struct_field o_MusicPlayerTrack_priority, 1 - struct_field o_MusicPlayerTrack_echoVolume, 1 - struct_field o_MusicPlayerTrack_echoLength, 1 + struct_field o_MusicPlayerTrack_pseudoEchoVolume, 1 + struct_field o_MusicPlayerTrack_pseudoEchoLength, 1 struct_field o_MusicPlayerTrack_chan, 4 struct_field o_MusicPlayerTrack_ToneData_type, 1 struct_field o_MusicPlayerTrack_ToneData_key, 1 @@ -159,41 +212,41 @@ struct_field MusicPlayerInfo_size, 0 struct_begin - struct_field o_CgbChannel_sf, 1 - struct_field o_CgbChannel_ty, 1 + struct_field o_CgbChannel_statusFlags, 1 + struct_field o_CgbChannel_type, 1 struct_field o_CgbChannel_rightVolume, 1 struct_field o_CgbChannel_leftVolume, 1 - struct_field o_CgbChannel_at, 1 - struct_field o_CgbChannel_de, 1 - struct_field o_CgbChannel_su, 1 - struct_field o_CgbChannel_re, 1 - struct_field o_CgbChannel_ky, 1 - struct_field o_CgbChannel_ev, 1 - struct_field o_CgbChannel_eg, 1 - struct_field o_CgbChannel_ec, 1 - struct_field o_CgbChannel_echoVolume, 1 - struct_field o_CgbChannel_echoLength, 1 - struct_field o_CgbChannel_d1, 1 - struct_field o_CgbChannel_d2, 1 - struct_field o_CgbChannel_gt, 1 - struct_field o_CgbChannel_mk, 1 - struct_field o_CgbChannel_ve, 1 - struct_field o_CgbChannel_pr, 1 - struct_field o_CgbChannel_rp, 1 - struct_field o_CgbChannel_d3, 3 - struct_field o_CgbChannel_d5, 1 - struct_field o_CgbChannel_sg, 1 + struct_field o_CgbChannel_attack, 1 + struct_field o_CgbChannel_decay, 1 + struct_field o_CgbChannel_sustain, 1 + struct_field o_CgbChannel_release, 1 + struct_field o_CgbChannel_key, 1 + struct_field o_CgbChannel_envelopeVolume, 1 + struct_field o_CgbChannel_envelopeGoal, 1 + struct_field o_CgbChannel_envelopeCounter, 1 + struct_field o_CgbChannel_pseudoEchoVolume, 1 + struct_field o_CgbChannel_pseudoEchoLength, 1 + struct_field o_CgbChannel_dummy1, 1 + struct_field o_CgbChannel_dummy2, 1 + struct_field o_CgbChannel_gateTime, 1 + struct_field o_CgbChannel_midiKey, 1 + struct_field o_CgbChannel_velocity, 1 + struct_field o_CgbChannel_priority, 1 + struct_field o_CgbChannel_rhythmPan, 1 + struct_field o_CgbChannel_dummy3, 3 + struct_field o_CgbChannel_dummy5, 1 + struct_field o_CgbChannel_sustainGoal, 1 struct_field o_CgbChannel_n4, 1 struct_field o_CgbChannel_pan, 1 struct_field o_CgbChannel_panMask, 1 - struct_field o_CgbChannel_mo, 1 - struct_field o_CgbChannel_le, 1 - struct_field o_CgbChannel_sw, 1 - struct_field o_CgbChannel_fr, 4 - struct_field o_CgbChannel_wp, 4 - struct_field o_CgbChannel_cp, 4 - struct_field o_CgbChannel_tp, 4 - struct_field o_CgbChannel_pp, 4 - struct_field o_CgbChannel_np, 4 - struct_field o_CgbChannel_d4, 8 + struct_field o_CgbChannel_modify, 1 + struct_field o_CgbChannel_length, 1 + struct_field o_CgbChannel_sweep, 1 + struct_field o_CgbChannel_frequency, 4 + struct_field o_CgbChannel_wavePointer, 4 + struct_field o_CgbChannel_currentPointer, 4 + struct_field o_CgbChannel_track, 4 + struct_field o_CgbChannel_prevChannelPointer, 4 + struct_field o_CgbChannel_nextChannelPointer, 4 + struct_field o_CgbChannel_dummy4, 8 struct_field CgbChannel_size, 0 diff --git a/sound/music_player_table.inc b/sound/music_player_table.inc index 6c74a1352..f54238966 100644 --- a/sound/music_player_table.inc +++ b/sound/music_player_table.inc @@ -1,6 +1,32 @@ + .equiv TRACK_SIZE, 0x50 + .equiv NUM_TRACKS_BGM, 10 + .equiv NUM_TRACKS_SE1, 3 + .equiv NUM_TRACKS_SE2, 9 + .equiv NUM_TRACKS_SE3, 1 + + .bss + +gMPlayTrack_BGM:: + .space TRACK_SIZE * NUM_TRACKS_BGM + .size gMPlayTrack_BGM, .-gMPlayTrack_BGM + +gMPlayTrack_SE1:: + .space TRACK_SIZE * NUM_TRACKS_SE1 + .size gMPlayTrack_SE1, .-gMPlayTrack_SE1 + +gMPlayTrack_SE2:: + .space TRACK_SIZE * NUM_TRACKS_SE2 + .size gMPlayTrack_SE2, .-gMPlayTrack_SE2 + +gMPlayTrack_SE3:: + .space TRACK_SIZE * NUM_TRACKS_SE3 + .size gMPlayTrack_SE3, .-gMPlayTrack_SE3 + + .section .rodata + .align 2 gMPlayTable:: - music_player gMPlayInfo_BGM, gMPlayTrack_BGM, 10, 0 - music_player gMPlayInfo_SE1, gMPlayTrack_SE1, 3, 1 - music_player gMPlayInfo_SE2, gMPlayTrack_SE2, 9, 1 - music_player gMPlayInfo_SE3, gMPlayTrack_SE3, 1, 0 + music_player gMPlayInfo_BGM, gMPlayTrack_BGM, NUM_TRACKS_BGM, 0 + music_player gMPlayInfo_SE1, gMPlayTrack_SE1, NUM_TRACKS_SE1, 1 + music_player gMPlayInfo_SE2, gMPlayTrack_SE2, NUM_TRACKS_SE2, 1 + music_player gMPlayInfo_SE3, gMPlayTrack_SE3, NUM_TRACKS_SE3, 0 diff --git a/src/m4a_1.s b/src/m4a_1.s index 994f8892d..fce796744 100644 --- a/src/m4a_1.s +++ b/src/m4a_1.s @@ -48,10 +48,10 @@ SoundMain_2: adds r1, r2 SoundMain_3: str r1, [sp, 0x14] - ldr r3, [r0, o_SoundInfo_func] + ldr r3, [r0, o_SoundInfo_MPlayMainHead] cmp r3, 0 beq SoundMain_4 - ldr r0, [r0, o_SoundInfo_intp] + ldr r0, [r0, o_SoundInfo_musicPlayerHead] bl _081DD25E ldr r0, [sp, 0x18] SoundMain_4: @@ -169,74 +169,74 @@ _081DCF54: .pool _081DCF60: - ldrb r6, [r4, o_SoundChannel_status] - movs r0, 0xC7 + ldrb r6, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r6 bne _081DCF6A b _081DD240 _081DCF6A: - movs r0, 0x80 + movs r0, SOUND_CHANNEL_SF_START tst r0, r6 beq _081DCFA0 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r6 bne _081DCFB0 - movs r6, 0x3 - strb r6, [r4, o_SoundChannel_status] + movs r6, SOUND_CHANNEL_SF_ENV_ATTACK + strb r6, [r4, o_SoundChannel_statusFlags] adds r0, r3, 0 - adds r0, 0x10 - ldr r1, [r4, o_SoundChannel_ct] + adds r0, o_WaveData_data + ldr r1, [r4, o_SoundChannel_count] adds r0, r1 - str r0, [r4, o_SoundChannel_cp] - ldr r0, [r3, 0xC] + str r0, [r4, o_SoundChannel_currentPointer] + ldr r0, [r3, o_WaveData_size] subs r0, r1 - str r0, [r4, o_SoundChannel_ct] + str r0, [r4, o_SoundChannel_count] movs r5, 0 - strb r5, [r4, o_SoundChannel_ev] + strb r5, [r4, o_SoundChannel_envelopeVolume] str r5, [r4, o_SoundChannel_fw] - ldrb r2, [r3, 0x3] - movs r0, 0xC0 + ldrb r2, [r3, o_WaveData_flags] + movs r0, WAVE_DATA_FLAG_LOOP tst r0, r2 beq _081DCFF8 - movs r0, 0x10 + movs r0, SOUND_CHANNEL_SF_LOOP orrs r6, r0 - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] b _081DCFF8 _081DCFA0: - ldrb r5, [r4, o_SoundChannel_ev] - movs r0, 0x4 + ldrb r5, [r4, o_SoundChannel_envelopeVolume] + movs r0, SOUND_CHANNEL_SF_IEC tst r0, r6 beq _081DCFB6 - ldrb r0, [r4, o_SoundChannel_iel] + ldrb r0, [r4, o_SoundChannel_pseudoEchoLength] subs r0, 1 - strb r0, [r4, o_SoundChannel_iel] + strb r0, [r4, o_SoundChannel_pseudoEchoLength] bhi _081DD006 _081DCFB0: movs r0, 0 - strb r0, [r4, o_SoundChannel_status] + strb r0, [r4, o_SoundChannel_statusFlags] b _081DD240 _081DCFB6: - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r6 beq _081DCFD6 ldrb r0, [r4, o_SoundChannel_release] muls r5, r0 lsrs r5, 8 - ldrb r0, [r4, o_SoundChannel_iev] + ldrb r0, [r4, o_SoundChannel_pseudoEchoVolume] cmp r5, r0 bhi _081DD006 _081DCFC8: - ldrb r5, [r4, o_SoundChannel_iev] + ldrb r5, [r4, o_SoundChannel_pseudoEchoVolume] cmp r5, 0 beq _081DCFB0 - movs r0, 0x4 + movs r0, SOUND_CHANNEL_SF_IEC orrs r6, r0 - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] b _081DD006 _081DCFD6: - movs r2, 0x3 + movs r2, SOUND_CHANNEL_SF_ENV ands r2, r6 - cmp r2, 0x2 + cmp r2, SOUND_CHANNEL_SF_ENV_DECAY bne _081DCFF4 ldrb r0, [r4, o_SoundChannel_decay] muls r5, r0 @@ -247,10 +247,10 @@ _081DCFD6: adds r5, r0, 0 beq _081DCFC8 subs r6, 0x1 - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] b _081DD006 _081DCFF4: - cmp r2, 0x3 + cmp r2, SOUND_CHANNEL_SF_ENV_ATTACK bne _081DD006 _081DCFF8: ldrb r0, [r4, o_SoundChannel_attack] @@ -259,9 +259,9 @@ _081DCFF8: bcc _081DD006 movs r5, 0xFF subs r6, 0x1 - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] _081DD006: - strb r5, [r4, o_SoundChannel_ev] + strb r5, [r4, o_SoundChannel_envelopeVolume] ldr r0, [sp, 0x18] ldrb r0, [r0, o_SoundChannel_release] adds r0, 0x1 @@ -270,37 +270,37 @@ _081DD006: ldrb r0, [r4, o_SoundChannel_rightVolume] muls r0, r5 lsrs r0, 8 - strb r0, [r4, o_SoundChannel_er] + strb r0, [r4, o_SoundChannel_envelopeVolumeRight] ldrb r0, [r4, o_SoundChannel_leftVolume] muls r0, r5 lsrs r0, 8 - strb r0, [r4, o_SoundChannel_el] - movs r0, 0x10 + strb r0, [r4, o_SoundChannel_envelopeVolumeLeft] + movs r0, SOUND_CHANNEL_SF_LOOP ands r0, r6 str r0, [sp, 0x10] beq _081DD03A adds r0, r3, 0 - adds r0, 0x10 - ldr r1, [r3, 0x8] + adds r0, o_WaveData_data + ldr r1, [r3, o_WaveData_loopStart] adds r0, r1 str r0, [sp, 0xC] - ldr r0, [r3, 0xC] + ldr r0, [r3, o_WaveData_size] subs r0, r1 str r0, [sp, 0x10] _081DD03A: ldr r5, [sp, 0x8] - ldr r2, [r4, o_SoundChannel_ct] - ldr r3, [r4, o_SoundChannel_cp] + ldr r2, [r4, o_SoundChannel_count] + ldr r3, [r4, o_SoundChannel_currentPointer] adr r0, _081DD044 bx r0 .arm _081DD044: str r8, [sp] ldr r9, [r4, o_SoundChannel_fw] - ldrb r10, [r4, o_SoundChannel_er] - ldrb r11, [r4, o_SoundChannel_el] + ldrb r10, [r4, o_SoundChannel_envelopeVolumeRight] + ldrb r11, [r4, o_SoundChannel_envelopeVolumeLeft] ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x30 + tst r0, TONEDATA_TYPE_CMP | TONEDATA_TYPE_REV beq _081DD068 bl SoundMainRAM_Unk1 b _081DD228 @@ -324,7 +324,7 @@ _081DD07C: moveq r2, 0x4 _081DD0A8: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD0B0: ldrsb r0, [r3], 0x1 mul r1, r10, r0 @@ -335,7 +335,7 @@ _081DD0B0: add r7, r1, r7, ror 8 adds r5, r5, 0x40000000 bcc _081DD0B0 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 subs r8, r8, 0x4 bgt _081DD0A8 @@ -343,7 +343,7 @@ _081DD0B0: beq _081DD22C _081DD0EC: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD0F4: ldrsb r0, [r3], 0x1 mul r1, r10, r0 @@ -357,7 +357,7 @@ _081DD0F4: _081DD118: adds r5, r5, 0x40000000 bcc _081DD0F4 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 subs r8, r8, 0x4 bgt _081DD07C @@ -383,26 +383,26 @@ _081DD164: ldrne r3, [sp, 0xC] bne _081DD118 _081DD174: - strb r2, [r4, o_SoundChannel_status] + strb r2, [r4, o_SoundChannel_statusFlags] mov r0, r5, lsr 30 bic r5, r5, 0xC0000000 rsb r0, r0, 0x3 mov r0, r0, lsl 3 mov r6, r6, ror r0 mov r7, r7, ror r0 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 b _081DD234 _081DD19C: push {r4,r12} - ldr r1, [r4, o_SoundChannel_freq] + ldr r1, [r4, o_SoundChannel_frequency] mul r4, r12, r1 ldrsb r0, [r3] ldrsb r1, [r3, 0x1]! sub r1, r1, r0 _081DD1B4: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD1BC: mul lr, r9, r1 add lr, r0, lr, asr 23 @@ -427,7 +427,7 @@ _081DD1FC: _081DD208: adds r5, r5, 0x40000000 bcc _081DD1BC - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 subs r8, r8, 0x4 bgt _081DD1B4 @@ -436,8 +436,8 @@ _081DD208: _081DD228: str r9, [r4, o_SoundChannel_fw] _081DD22C: - str r2, [r4, o_SoundChannel_ct] - str r3, [r4, o_SoundChannel_cp] + str r2, [r4, o_SoundChannel_count] + str r3, [r4, o_SoundChannel_currentPointer] _081DD234: ldr r8, [sp] add r0, pc, 0x1 @@ -469,42 +469,42 @@ _081DD25E: arm_func_start SoundMainRAM_Unk1 SoundMainRAM_Unk1: ldr r6, [r4, o_SoundChannel_wav] - ldrb r0, [r4, o_SoundChannel_status] - tst r0, 0x20 + ldrb r0, [r4, o_SoundChannel_statusFlags] + tst r0, SOUND_CHANNEL_SF_SPECIAL bne _081DD2B4 - orr r0, r0, 0x20 - strb r0, [r4, o_SoundChannel_status] + orr r0, r0, SOUND_CHANNEL_SF_SPECIAL + strb r0, [r4, o_SoundChannel_statusFlags] ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x10 + tst r0, TONEDATA_TYPE_REV beq _081DD29C - ldr r1, [r6, 0xC] + ldr r1, [r6, o_WaveData_size] add r1, r1, r6, lsl 1 add r1, r1, 0x20 sub r3, r1, r3 - str r3, [r4, o_SoundChannel_cp] + str r3, [r4, o_SoundChannel_currentPointer] _081DD29C: - ldrh r0, [r6] + ldrh r0, [r6, o_WaveData_type] cmp r0, 0 beq _081DD2B4 sub r3, r3, r6 sub r3, r3, 0x10 - str r3, [r4, o_SoundChannel_cp] + str r3, [r4, o_SoundChannel_currentPointer] _081DD2B4: push {r8,r12,lr} mov r10, r10, lsl 16 mov r11, r11, lsl 16 - ldr r1, [r4, o_SoundChannel_freq] + ldr r1, [r4, o_SoundChannel_frequency] ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x8 + tst r0, TONEDATA_TYPE_FIX movne r8, 0x800000 muleq r8, r12, r1 - ldrh r0, [r6] + ldrh r0, [r6, o_WaveData_type] cmp r0, 0 beq _081DD468 mov r0, 0xFF000000 str r0, [r4, o_SoundChannel_xpi] ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x10 + tst r0, TONEDATA_TYPE_REV bne _081DD3C0 bl SoundMainRAM_Unk2 mov r0, r1 @@ -513,7 +513,7 @@ _081DD2B4: sub r1, r1, r0 _081DD308: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD310: mul lr, r9, r1 add lr, r0, lr, asr 23 @@ -544,7 +544,7 @@ _081DD364: _081DD370: adds r5, r5, 0x40000000 bcc _081DD310 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 ldr r6, [sp] subs r6, r6, 0x4 @@ -557,7 +557,7 @@ _081DD398: cmp r0, 0 beq _081DD4F4 ldr r3, [r4, o_SoundChannel_wav] - ldr r3, [r3, 0x8] + ldr r3, [r3, o_WaveData_loopStart] rsb lr, r2, 0 _081DD3B0: adds r2, r2, r0 @@ -573,7 +573,7 @@ _081DD3C0: sub r1, r1, r0 _081DD3D8: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD3E0: mul lr, r9, r1 add lr, r0, lr, asr 23 @@ -604,7 +604,7 @@ _081DD434: _081DD440: adds r5, r5, 0x40000000 bcc _081DD3E0 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 ldr r6, [sp] subs r6, r6, 0x4 @@ -614,7 +614,7 @@ _081DD440: b _081DD4F0 _081DD468: ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x10 + tst r0, TONEDATA_TYPE_REV beq _081DD4F0 ldrsb r0, [r3, -0x1]! ldrsb r1, [r3, -0x1] @@ -654,7 +654,7 @@ _081DD4F0: pop {r8,r12,pc} _081DD4F4: mov r2, 0 - strb r2, [r4, o_SoundChannel_status] + strb r2, [r4, o_SoundChannel_statusFlags] mov r0, r5, lsr 30 bic r5, r5, 0xC0000000 rsb r0, r0, 0x3 @@ -725,24 +725,24 @@ SoundMainBTM: thumb_func_start RealClearChain RealClearChain: - ldr r3, [r0, 0x2C] + ldr r3, [r0, o_SoundChannel_track] cmp r3, 0 beq _081DD5E2 - ldr r1, [r0, 0x34] - ldr r2, [r0, 0x30] + ldr r1, [r0, o_SoundChannel_nextChannelPointer] + ldr r2, [r0, o_SoundChannel_prevChannelPointer] cmp r2, 0 beq _081DD5D6 - str r1, [r2, 0x34] + str r1, [r2, o_SoundChannel_nextChannelPointer] b _081DD5D8 _081DD5D6: - str r1, [r3, 0x20] + str r1, [r3, o_MusicPlayerTrack_chan] _081DD5D8: cmp r1, 0 beq _081DD5DE - str r2, [r1, 0x30] + str r2, [r1, o_SoundChannel_prevChannelPointer] _081DD5DE: movs r1, 0 - str r1, [r0, 0x2C] + str r1, [r0, o_SoundChannel_track] _081DD5E2: bx lr thumb_func_end RealClearChain @@ -755,22 +755,22 @@ ply_fine: cmp r4, 0 beq ply_fine_done ply_fine_loop: - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq ply_fine_ok - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP orrs r1, r0 - strb r1, [r4] + strb r1, [r4, o_SoundChannel_statusFlags] ply_fine_ok: adds r0, r4, 0 bl RealClearChain - ldr r4, [r4, 0x34] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne ply_fine_loop ply_fine_done: movs r0, 0 - strb r0, [r5] + strb r0, [r5, o_MusicPlayerTrack_flags] pop {r4,r5} pop {r0} bx r0 @@ -820,10 +820,10 @@ lt_MPlayJumpTableTemplate: .word gMPlayJumpTableTemplate thumb_func_start ld_r3_tp_adr_i ld_r3_tp_adr_i: - ldr r2, [r1, 0x40] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] _081DD64A: adds r3, r2, 0x1 - str r3, [r1, 0x40] + str r3, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] b chk_adr_r2 thumb_func_end ld_r3_tp_adr_i @@ -954,13 +954,13 @@ ply_voice: lsls r2, 2 ldr r3, [r0, o_MusicPlayerInfo_tone] adds r2, r3 - ldr r3, [r2] + ldr r3, [r2, o_ToneData_type] bl chk_adr_r2 str r3, [r1, o_MusicPlayerTrack_ToneData_type] - ldr r3, [r2, 0x4] + ldr r3, [r2, o_ToneData_wav] bl chk_adr_r2 str r3, [r1, o_MusicPlayerTrack_ToneData_wav] - ldr r3, [r2, 0x8] + ldr r3, [r2, o_ToneData_attack] bl chk_adr_r2 str r3, [r1, o_MusicPlayerTrack_ToneData_attack] bx r12 @@ -972,7 +972,7 @@ ply_vol: bl ld_r3_tp_adr_i strb r3, [r1, o_MusicPlayerTrack_vol] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0x3 + movs r2, MPT_FLG_VOLCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -982,10 +982,10 @@ ply_vol: ply_pan: mov r12, lr bl ld_r3_tp_adr_i - subs r3, 0x40 + subs r3, C_V strb r3, [r1, o_MusicPlayerTrack_pan] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0x3 + movs r2, MPT_FLG_VOLCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -995,10 +995,10 @@ ply_pan: ply_bend: mov r12, lr bl ld_r3_tp_adr_i - subs r3, 0x40 + subs r3, C_V strb r3, [r1, o_MusicPlayerTrack_bend] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC + movs r2, MPT_FLG_PITCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -1010,7 +1010,7 @@ ply_bendr: bl ld_r3_tp_adr_i strb r3, [r1, o_MusicPlayerTrack_bendRange] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC + movs r2, MPT_FLG_PITCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -1033,7 +1033,7 @@ ply_modt: beq _081DD7AA strb r3, [r1, o_MusicPlayerTrack_modT] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xF + movs r2, MPT_FLG_VOLCHG | MPT_FLG_PITCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] _081DD7AA: @@ -1044,10 +1044,10 @@ _081DD7AA: ply_tune: mov r12, lr bl ld_r3_tp_adr_i - subs r3, 0x40 + subs r3, C_V strb r3, [r1, o_MusicPlayerTrack_tune] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC + movs r2, MPT_FLG_PITCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -1176,8 +1176,8 @@ _081DD874: movs r3, 0x1 movs r4, 0 _081DD87C: - ldrb r0, [r5] - movs r1, 0x80 + ldrb r0, [r5, o_MusicPlayerTrack_flags] + movs r1, MPT_FLG_EXIST tst r1, r0 bne _081DD886 b _081DD998 @@ -1189,36 +1189,36 @@ _081DD886: cmp r4, 0 beq _081DD8BA _081DD892: - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq _081DD8AE - ldrb r0, [r4, 0x10] + ldrb r0, [r4, o_SoundChannel_gateTime] cmp r0, 0 beq _081DD8B4 subs r0, 0x1 - strb r0, [r4, 0x10] + strb r0, [r4, o_SoundChannel_gateTime] bne _081DD8B4 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP orrs r1, r0 - strb r1, [r4] + strb r1, [r4, o_SoundChannel_statusFlags] b _081DD8B4 _081DD8AE: adds r0, r4, 0 bl ClearChain _081DD8B4: - ldr r4, [r4, 0x34] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne _081DD892 _081DD8BA: ldrb r3, [r5, o_MusicPlayerTrack_flags] - movs r0, 0x40 + movs r0, MPT_FLG_START tst r0, r3 beq _081DD938 adds r0, r5, 0 bl Clear64byte - movs r0, 0x80 - strb r0, [r5] + movs r0, MPT_FLG_EXIST + strb r0, [r5, o_MusicPlayerTrack_flags] movs r0, 0x2 strb r0, [r5, o_MusicPlayerTrack_bendRange] movs r0, 0x40 @@ -1321,10 +1321,10 @@ _081DD972: ldrb r1, [r5, o_MusicPlayerTrack_modT] cmp r1, 0 bne _081DD98E - movs r1, 0xC + movs r1, MPT_FLG_PITCHG b _081DD990 _081DD98E: - movs r1, 0x3 + movs r1, MPT_FLG_VOLCHG _081DD990: orrs r0, r1 strb r0, [r5, o_MusicPlayerTrack_flags] @@ -1334,7 +1334,7 @@ _081DD994: _081DD998: subs r6, 0x1 ble _081DD9A4 - movs r0, 0x50 + movs r0, MusicPlayerTrack_size adds r5, r0 lsls r3, 1 b _081DD87C @@ -1351,10 +1351,10 @@ _081DD9A4: _081DD9B6: str r4, [r7, o_MusicPlayerInfo_status] ldrh r0, [r7, o_MusicPlayerInfo_tempoC] - subs r0, 0x96 + subs r0, 150 _081DD9BC: strh r0, [r7, o_MusicPlayerInfo_tempoC] - cmp r0, 0x96 + cmp r0, 150 bcc _081DD9C4 b _081DD874 _081DD9C4: @@ -1365,7 +1365,7 @@ _081DD9C8: movs r1, 0x80 tst r1, r0 beq _081DDA62 - movs r1, 0xF + movs r1, MPT_FLG_VOLCHG | MPT_FLG_PITCHG tst r1, r0 beq _081DDA62 mov r9, r2 @@ -1376,8 +1376,8 @@ _081DD9C8: cmp r4, 0 beq _081DDA58 _081DD9E6: - ldrb r1, [r4, o_SoundChannel_status] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 bne _081DD9F6 adds r0, r4, 0 @@ -1385,26 +1385,26 @@ _081DD9E6: b _081DDA52 _081DD9F6: ldrb r0, [r4, o_SoundChannel_type] - movs r6, 0x7 + movs r6, TONEDATA_TYPE_CGB ands r6, r0 ldrb r3, [r5, o_MusicPlayerTrack_flags] - movs r0, 0x3 + movs r0, MPT_FLG_VOLCHG tst r0, r3 beq _081DDA14 bl ChnVolSetAsm cmp r6, 0 beq _081DDA14 - ldrb r0, [r4, o_CgbChannel_mo] + ldrb r0, [r4, o_CgbChannel_modify] movs r1, 0x1 orrs r0, r1 - strb r0, [r4, o_CgbChannel_mo] + strb r0, [r4, o_CgbChannel_modify] _081DDA14: ldrb r3, [r5, o_MusicPlayerTrack_flags] - movs r0, 0xC + movs r0, MPT_FLG_PITCHG tst r0, r3 beq _081DDA52 - ldrb r1, [r4, o_SoundChannel_ky] - movs r0, 0x8 + ldrb r1, [r4, o_SoundChannel_key] + movs r0, o_MusicPlayerTrack_keyM ldrsb r0, [r5, r0] adds r2, r1, r0 bpl _081DDA28 @@ -1418,20 +1418,20 @@ _081DDA28: ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r0, r6, 0 bl call_r3 - str r0, [r4, o_CgbChannel_fr] - ldrb r0, [r4, o_CgbChannel_mo] - movs r1, 0x2 + str r0, [r4, o_CgbChannel_frequency] + ldrb r0, [r4, o_CgbChannel_modify] + movs r1, CGB_CHANNEL_MO_PIT orrs r0, r1 - strb r0, [r4, o_CgbChannel_mo] + strb r0, [r4, o_CgbChannel_modify] b _081DDA52 _081DDA46: adds r1, r2, 0 ldrb r2, [r5, o_MusicPlayerTrack_pitM] ldr r0, [r4, o_SoundChannel_wav] bl MidiKeyToFreq - str r0, [r4, o_SoundChannel_freq] + str r0, [r4, o_SoundChannel_frequency] _081DDA52: - ldr r4, [r4, o_SoundChannel_np] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne _081DD9E6 _081DDA58: @@ -1443,7 +1443,7 @@ _081DDA58: _081DDA62: subs r2, 0x1 ble _081DDA6C - movs r0, 0x50 + movs r0, MusicPlayerTrack_size adds r5, r0 bgt _081DD9C8 _081DDA6C: @@ -1470,7 +1470,7 @@ TrackStop: push {r4-r6,lr} adds r5, r1, 0 ldrb r1, [r5, o_MusicPlayerTrack_flags] - movs r0, 0x80 + movs r0, MPT_FLG_EXIST tst r0, r1 beq TrackStop_Done ldr r4, [r5, o_MusicPlayerTrack_chan] @@ -1478,11 +1478,11 @@ TrackStop: beq TrackStop_3 movs r6, 0 TrackStop_Loop: - ldrb r0, [r4, o_SoundChannel_status] + ldrb r0, [r4, o_SoundChannel_statusFlags] cmp r0, 0 beq TrackStop_2 ldrb r0, [r4, o_SoundChannel_type] - movs r3, 0x7 + movs r3, TONEDATA_TYPE_CGB ands r0, r3 beq TrackStop_1 ldr r3, =SOUND_INFO_PTR @@ -1490,10 +1490,10 @@ TrackStop_Loop: ldr r3, [r3, o_SoundInfo_CgbOscOff] bl call_r3 TrackStop_1: - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] TrackStop_2: str r6, [r4, o_SoundChannel_track] - ldr r4, [r4, o_SoundChannel_np] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne TrackStop_Loop TrackStop_3: @@ -1507,31 +1507,31 @@ TrackStop_Done: thumb_func_start ChnVolSetAsm ChnVolSetAsm: - ldrb r1, [r4, 0x12] - movs r0, 0x14 + ldrb r1, [r4, o_SoundChannel_velocity] + movs r0, o_SoundChannel_rhythmPan ldrsb r2, [r4, r0] movs r3, 0x80 adds r3, r2 muls r3, r1 - ldrb r0, [r5, 0x10] + ldrb r0, [r5, o_MusicPlayerTrack_volMR] muls r0, r3 asrs r0, 14 cmp r0, 0xFF bls _081DDAE8 movs r0, 0xFF _081DDAE8: - strb r0, [r4, 0x2] + strb r0, [r4, o_SoundChannel_rightVolume] movs r3, 0x7F subs r3, r2 muls r3, r1 - ldrb r0, [r5, 0x11] + ldrb r0, [r5, o_MusicPlayerTrack_volML] muls r0, r3 asrs r0, 14 cmp r0, 0xFF bls _081DDAFC movs r0, 0xFF _081DDAFC: - strb r0, [r4, 0x3] + strb r0, [r4, o_SoundChannel_leftVolume] bx lr thumb_func_end ChnVolSetAsm @@ -1601,32 +1601,32 @@ _081DDB68: mov r9, r1 mov r6, r9 ldrb r1, [r6] - movs r0, 0xC0 + movs r0, TONEDATA_TYPE_SPL | TONEDATA_TYPE_RHY tst r0, r1 beq _081DDB80 b _081DDCEA _081DDB80: - movs r0, 0x80 + movs r0, TONEDATA_TYPE_RHY tst r0, r2 beq _081DDB9C - ldrb r1, [r6, 0x3] + ldrb r1, [r6, o_ToneData_pan_sweep] movs r0, 0x80 tst r0, r1 beq _081DDB94 - subs r1, 0xC0 + subs r1, TONEDATA_P_S_PAN lsls r1, 1 str r1, [sp, 0x14] _081DDB94: - ldrb r3, [r6, 0x1] + ldrb r3, [r6, o_SoundChannel_type] b _081DDB9C _081DDB98: mov r9, r4 - ldrb r3, [r5, 0x5] + ldrb r3, [r5, o_MusicPlayerTrack_key] _081DDB9C: str r3, [sp, 0x8] ldr r6, [sp] - ldrb r1, [r6, 0x9] - ldrb r0, [r5, 0x1D] + ldrb r1, [r6, o_MusicPlayerInfo_priority] + ldrb r0, [r5, o_MusicPlayerTrack_priority] adds r0, r1 cmp r0, 0xFF bls _081DDBAC @@ -1634,13 +1634,13 @@ _081DDB9C: _081DDBAC: str r0, [sp, 0x10] mov r6, r9 - ldrb r0, [r6] - movs r6, 0x7 + ldrb r0, [r6, o_ToneData_type] + movs r6, TONEDATA_TYPE_CGB ands r6, r0 str r6, [sp, 0xC] beq _081DDBEC ldr r0, [sp, 0x4] - ldr r4, [r0, 0x1C] + ldr r4, [r0, o_SoundInfo_cgbChans] cmp r4, 0 bne _081DDBC4 b _081DDCEA @@ -1648,21 +1648,21 @@ _081DDBC4: subs r6, 0x1 lsls r0, r6, 6 adds r4, r0 - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_CgbChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq _081DDC40 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r1 bne _081DDC40 - ldrb r1, [r4, 0x13] + ldrb r1, [r4, o_CgbChannel_priority] ldr r0, [sp, 0x10] cmp r1, r0 bcc _081DDC40 beq _081DDBE4 b _081DDCEA _081DDBE4: - ldr r0, [r4, 0x2C] + ldr r0, [r4, o_CgbChannel_track] cmp r0, r5 bcs _081DDC40 b _081DDCEA @@ -1672,35 +1672,35 @@ _081DDBEC: movs r2, 0 mov r8, r2 ldr r4, [sp, 0x4] - ldrb r3, [r4, 0x6] - adds r4, 0x50 + ldrb r3, [r4, o_SoundInfo_maxChans] + adds r4, o_SoundInfo_chans _081DDBFA: - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq _081DDC40 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r1 beq _081DDC14 cmp r2, 0 bne _081DDC18 adds r2, 0x1 - ldrb r6, [r4, 0x13] - ldr r7, [r4, 0x2C] + ldrb r6, [r4, o_SoundChannel_priority] + ldr r7, [r4, o_SoundChannel_track] b _081DDC32 _081DDC14: cmp r2, 0 bne _081DDC34 _081DDC18: - ldrb r0, [r4, 0x13] + ldrb r0, [r4, o_SoundChannel_priority] cmp r0, r6 bcs _081DDC24 adds r6, r0, 0 - ldr r7, [r4, 0x2C] + ldr r7, [r4, o_SoundChannel_track] b _081DDC32 _081DDC24: bhi _081DDC34 - ldr r0, [r4, 0x2C] + ldr r0, [r4, o_SoundChannel_track] cmp r0, r7 bls _081DDC30 adds r7, r0, 0 @@ -1710,7 +1710,7 @@ _081DDC30: _081DDC32: mov r8, r4 _081DDC34: - adds r4, 0x40 + adds r4, SoundChannel_size subs r3, 0x1 bgt _081DDBFA mov r4, r8 @@ -1720,17 +1720,17 @@ _081DDC40: adds r0, r4, 0 bl ClearChain movs r1, 0 - str r1, [r4, 0x30] - ldr r3, [r5, 0x20] - str r3, [r4, 0x34] + str r1, [r4, o_SoundChannel_prevChannelPointer] + ldr r3, [r5, o_MusicPlayerTrack_chan] + str r3, [r4, o_SoundChannel_nextChannelPointer] cmp r3, 0 beq _081DDC54 - str r4, [r3, 0x30] + str r4, [r3, o_SoundChannel_prevChannelPointer] _081DDC54: - str r4, [r5, 0x20] - str r5, [r4, 0x2C] - ldrb r0, [r5, 0x1B] - strb r0, [r5, 0x1C] + str r4, [r5, o_MusicPlayerTrack_chan] + str r5, [r4, o_SoundChannel_track] + ldrb r0, [r5, o_MusicPlayerTrack_lfoDelay] + strb r0, [r5, o_MusicPlayerTrack_lfoDelayC] cmp r0, r1 beq _081DDC66 adds r1, r5, 0 @@ -1739,26 +1739,26 @@ _081DDC66: ldr r0, [sp] adds r1, r5, 0 bl TrkVolPitSet - ldr r0, [r5, 0x4] - str r0, [r4, 0x10] + ldr r0, [r5, o_MusicPlayerTrack_gateTime] + str r0, [r4, o_SoundChannel_gateTime] ldr r0, [sp, 0x10] - strb r0, [r4, 0x13] + strb r0, [r4, o_SoundChannel_priority] ldr r0, [sp, 0x8] - strb r0, [r4, 0x8] + strb r0, [r4, o_SoundChannel_key] ldr r0, [sp, 0x14] - strb r0, [r4, 0x14] + strb r0, [r4, o_SoundChannel_rhythmPan] mov r6, r9 - ldrb r0, [r6] - strb r0, [r4, 0x1] - ldr r7, [r6, 0x4] - str r7, [r4, 0x24] - ldr r0, [r6, 0x8] - str r0, [r4, 0x4] - ldrh r0, [r5, 0x1E] - strh r0, [r4, 0xC] + ldrb r0, [r6, o_ToneData_type] + strb r0, [r4, o_SoundChannel_type] + ldr r7, [r6, o_ToneData_wav] + str r7, [r4, o_SoundChannel_wav] + ldr r0, [r6, o_ToneData_attack] + str r0, [r4, o_SoundChannel_attack] + ldrh r0, [r5, o_MusicPlayerTrack_pseudoEchoVolume] + strh r0, [r4, o_SoundChannel_pseudoEchoVolume] bl ChnVolSetAsm - ldrb r1, [r4, 0x8] - movs r0, 0x8 + ldrb r1, [r4, o_SoundChannel_key] + movs r0, o_MusicPlayerTrack_keyM ldrsb r0, [r5, r0] adds r3, r1, r0 bpl _081DDCA0 @@ -1768,9 +1768,9 @@ _081DDCA0: cmp r6, 0 beq _081DDCCE mov r6, r9 - ldrb r0, [r6, 0x2] - strb r0, [r4, 0x1E] - ldrb r1, [r6, 0x3] + ldrb r0, [r6, o_ToneData_length] + strb r0, [r4, o_CgbChannel_length] + ldrb r1, [r6, o_ToneData_pan_sweep] movs r0, 0x80 tst r0, r1 bne _081DDCBA @@ -1780,29 +1780,29 @@ _081DDCA0: _081DDCBA: movs r1, 0x8 _081DDCBC: - strb r1, [r4, 0x1F] - ldrb r2, [r5, 0x9] + strb r1, [r4, o_CgbChannel_sweep] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r1, r3, 0 ldr r0, [sp, 0xC] ldr r3, [sp, 0x4] - ldr r3, [r3, 0x30] + ldr r3, [r3, o_SoundInfo_MidiKeyToCgbFreq] bl call_r3 b _081DDCDC _081DDCCE: ldr r0, [r5, o_MusicPlayerTrack_unk_3C] - str r0, [r4, 0x18] - ldrb r2, [r5, 0x9] + str r0, [r4, o_SoundChannel_count] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r1, r3, 0 adds r0, r7, 0 bl MidiKeyToFreq _081DDCDC: - str r0, [r4, 0x20] - movs r0, 0x80 - strb r0, [r4] - ldrb r1, [r5] + str r0, [r4, o_SoundChannel_frequency] + movs r0, SOUND_CHANNEL_SF_START + strb r0, [r4, o_SoundChannel_statusFlags] + ldrb r1, [r5, o_MusicPlayerTrack_flags] movs r0, 0xF0 ands r0, r1 - strb r0, [r5] + strb r0, [r5, o_MusicPlayerTrack_flags] _081DDCEA: add sp, 0x18 pop {r0-r7} @@ -1832,23 +1832,23 @@ _081DDD18: ldr r1, [r1, o_MusicPlayerTrack_chan] cmp r1, 0 beq _081DDD40 - movs r4, 0x83 - movs r5, 0x40 + movs r4, SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_ENV + movs r5, SOUND_CHANNEL_SF_STOP _081DDD22: - ldrb r2, [r1, o_SoundChannel_status] + ldrb r2, [r1, o_SoundChannel_statusFlags] tst r2, r4 beq _081DDD3A tst r2, r5 bne _081DDD3A - ldrb r0, [r1, o_SoundChannel_mk] + ldrb r0, [r1, o_SoundChannel_midiKey] cmp r0, r3 bne _081DDD3A - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP orrs r2, r0 - strb r2, [r1, o_SoundChannel_status] + strb r2, [r1, o_SoundChannel_statusFlags] b _081DDD40 _081DDD3A: - ldr r1, [r1, o_SoundChannel_np] + ldr r1, [r1, o_SoundChannel_nextChannelPointer] cmp r1, 0 bne _081DDD22 _081DDD40: @@ -1864,10 +1864,10 @@ clear_modM: ldrb r2, [r1, o_MusicPlayerTrack_modT] cmp r2, 0 bne _081DDD54 - movs r2, 0xC + movs r2, MPT_FLG_PITCHG b _081DDD56 _081DDD54: - movs r2, 0x3 + movs r2, MPT_FLG_VOLCHG _081DDD56: ldrb r3, [r1, o_MusicPlayerTrack_flags] orrs r3, r2 @@ -1910,28 +1910,8 @@ _081DDD90: .align 2, 0 @ Don't pad with nop. - .bss - .align 3 -sDecodingBuffer: - .space 0x40 - .size sDecodingBuffer, .-sDecodingBuffer - - .global gMPlayTrack_BGM -gMPlayTrack_BGM: - .space 0x320 - .size gMPlayTrack_BGM, .-gMPlayTrack_BGM - - .global gMPlayTrack_SE1 -gMPlayTrack_SE1: - .space 0xF0 - .size gMPlayTrack_SE1, .-gMPlayTrack_SE1 - - .global gMPlayTrack_SE2 -gMPlayTrack_SE2: - .space 0x2D0 - .size gMPlayTrack_SE2, .-gMPlayTrack_SE2 - - .global gMPlayTrack_SE3 -gMPlayTrack_SE3: - .space 0x50 - .size gMPlayTrack_SE3, .-gMPlayTrack_SE3 + .bss + .align 3 +sDecodingBuffer: @ Used as a buffer for audio decoded from compressed DPCM + .space 0x40 + .size sDecodingBuffer, .-sDecodingBuffer diff --git a/sym_bss.txt b/sym_bss.txt index 9f50fd0a7..00c7b1dc6 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -28,6 +28,7 @@ .include "src/ereader_helpers.o" .include "src/digit_obj_util.o" .include "src/m4a_1.o" + .include "data/sound_data.o" .include "src/agb_flash.o" .include "*libgcc.a:dp-bit.o" .include "*libgcc.a:fp-bit.o" From 5621d298668673a400126e4280a91e73360d9e8a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 5 Dec 2022 13:28:40 -0500 Subject: [PATCH 03/33] Sync trade --- include/battle_anim.h | 2 +- include/constants/trade.h | 77 +- include/graphics.h | 6 +- include/link_rfu.h | 2 +- include/menu.h | 2 +- include/trade.h | 2 +- src/battle_anim_mons.c | 2 +- src/graphics.c | 6 +- src/link.c | 2 +- src/link_rfu_3.c | 2 +- src/menu.c | 2 +- src/trade.c | 2256 +++++++++++++++++---------------- src/union_room.c | 2 +- src/union_room_chat_display.c | 2 +- 14 files changed, 1213 insertions(+), 1152 deletions(-) diff --git a/include/battle_anim.h b/include/battle_anim.h index 120935880..a53750093 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -258,7 +258,7 @@ void InitAnimBgTilemapBuffer(u32 bgId, const void *src); void AnimLoadCompressedBgTilemap(u32 bgId, const u32 *src); u8 GetBattleBgPaletteNum(void); void ToggleBg3Mode(bool8 arg0); -void TradeMenuBouncePartySprites(struct Sprite *sprite); +void Trade_MoveSelectedMonToTarget(struct Sprite *sprite); void InitSpriteDataForLinearTranslation(struct Sprite *sprite); void InitAnimLinearTranslation(struct Sprite *sprite); void StartAnimLinearTranslation(struct Sprite *sprite); diff --git a/include/constants/trade.h b/include/constants/trade.h index e9964c4c3..04e667eb0 100644 --- a/include/constants/trade.h +++ b/include/constants/trade.h @@ -20,21 +20,13 @@ #define INGAME_TRADE_TANGELA 7 #define INGAME_TRADE_SEEL 8 -// Flag IDs for sending link data -#define INITIATE_TRADE 1 -#define CANCEL_TRADE 2 -#define WANTS_TO_TRADE 1 -#define WANTS_TO_CANCEL 2 -#define READY_FINISH_TRADE 1 -#define FINISH_TRADE 2 - // Return values for CanTradeSelectedMon and CanSpinTradeMon -#define CAN_TRADE_MON 0 -#define CANT_TRADE_LAST_MON 1 -#define CANT_TRADE_NATIONAL 2 -#define CANT_TRADE_EGG_YET 3 -#define CANT_TRADE_INVALID_MON 4 -#define CANT_TRADE_EGG_YET2 5 +#define CAN_TRADE_MON 0 +#define CANT_TRADE_LAST_MON 1 +#define CANT_TRADE_NATIONAL 2 +#define CANT_TRADE_EGG_YET 3 +#define CANT_TRADE_INVALID_MON 4 +#define CANT_TRADE_PARTNER_EGG_YET 5 // Return values for CheckValidityOfTradeMons #define PLAYER_MON_INVALID 0 @@ -46,63 +38,6 @@ #define TRADE_PLAYER_NOT_READY 1 #define TRADE_PARTNER_NOT_READY 2 -// Indexes for sTradeActionTexts -#define TRADE_TEXT_CANCEL 0 -#define TRADE_TEXT_CHOOSE_MON 1 -#define TRADE_TEXT_SUMMARY 2 -#define TRADE_TEXT_TRADE 3 -#define TRADE_TEXT_CANCEL_TRADE 4 -#define TRADE_TEXT_JP_QUIT 5 - -// Checked to confirm DrawTradeMenuParty has reached final state -#define DRAW_PARTY_FINISH 5 - -// Message indexes for sTradeMessages -#define TRADE_MSG_STANDBY 0 -#define TRADE_MSG_CANCELED 1 -#define TRADE_MSG_ONLY_MON1 2 -#define TRADE_MSG_ONLY_MON2 3 -#define TRADE_MSG_WAITING_FOR_FRIEND 4 -#define TRADE_MSG_FRIEND_WANTS_TO_TRADE 5 -#define TRADE_MSG_MON_CANT_BE_TRADED 6 -#define TRADE_MSG_EGG_CANT_BE_TRADED 7 -#define TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED 8 - -// IDs for QueueAction -#define QUEUE_SEND_DATA 0 -#define QUEUE_STANDBY 1 -#define QUEUE_ONLY_MON1 2 -#define QUEUE_ONLY_MON2 3 -#define QUEUE_UNUSED1 4 -#define QUEUE_UNUSED2 5 -#define QUEUE_MON_CANT_BE_TRADED 6 -#define QUEUE_EGG_CANT_BE_TRADED 7 -#define QUEUE_FRIENDS_MON_CANT_BE_TRADED 8 - -#define QUEUE_DELAY_MSG 3 -#define QUEUE_DELAY_DATA 5 - -// IDs for CallTradeMenuFunc -#define TRADEMENUFUNC_MAIN_MENU 0 -#define TRADEMENUFUNC_SELECTED_MON 1 -#define TRADEMENUFUNC_SHOW_MON_SUMMARY 2 -#define TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE 3 -#define TRADEMENUFUNC_CANCEL_TRADE_PROMPT 4 -#define TRADEMENUFUNC_UNUSED_5 5 -#define TRADEMENUFUNC_BOTH_MONS_SELECTED 6 -#define TRADEMENUFUNC_CONFIRM_TRADE_PROMPT 7 -#define TRADEMENUFUNC_REDRAW_MAIN_MENU 8 -#define TRADEMENUFUNC_LINK_TRADE_FADE_OUT 9 -#define TRADEMENUFUNC_LINK_TRADE_WAIT_FADE 10 -#define TRADEMENUFUNC_CANCEL_TRADE_1 11 -#define TRADEMENUFUNC_CANCEL_TRADE_2 12 -#define TRADEMENUFUNC_START_LINK_TRADE 13 -#define TRADEMENUFUNC_DELAY_TRADE_CONFIRM 14 -#define TRADEMENUFUNC_UNUSED_15 15 -#define TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE 16 -#define TRADEMENUFUNC_PARTNER_MON_INVALID 17 -#define TRADEMENUFUNC_STANDBY 100 - // Message indexes for sUnionRoomTradeMessages #define UR_TRADE_MSG_NONE 0 #define UR_TRADE_MSG_NOT_MON_PARTNER_WANTS 1 diff --git a/include/graphics.h b/include/graphics.h index e86ea2e27..0aec92330 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4822,10 +4822,10 @@ extern const u8 gMonIcon_QuestionMark[]; // trade extern const u16 gTradeMenu_Pal[]; -extern const u16 gTradeButtons_Pal[]; +extern const u16 gTradeCursor_Pal[]; extern const u16 gTradeMenu_Gfx[]; -extern const u16 gUnknown_8E9E9FC[]; -extern const u16 gTradeButtons_Gfx[]; +extern const u16 gTradeMenu_Tilemap[]; +extern const u16 gTradeCursor_Gfx[]; extern const u16 gTradeMenuMonBox_Tilemap[]; // mon_markings diff --git a/include/link_rfu.h b/include/link_rfu.h index dbc14ea03..affbebe3d 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -84,7 +84,7 @@ struct RfuGameCompatibilityData u16 hasNews:1; u16 hasCard:1; u16 unknown:1; // Never read - u16 isChampion:1; + u16 canLinkNationally:1; u16 hasNationalDex:1; u16 gameClear:1; u16 version:4; diff --git a/include/menu.h b/include/menu.h index 5b12047ee..4adf467ca 100644 --- a/include/menu.h +++ b/include/menu.h @@ -41,7 +41,7 @@ void DestroyYesNoMenu(void); s8 Menu_ProcessInputNoWrapClearOnChoose(void); void CreateYesNoMenu(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top, u16 baseTileNum, u8 paletteNum, u8 initialCursorPos); void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *orderArray); -void UnionRoomAndTradeMenuPrintOptions(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs); +void PrintMenuTable(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs); void MultichoiceList_PrintItems(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, u8 letterSpacing, u8 lineSpacing); void PrintTextArray(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs); s8 Menu_ProcessInputNoWrapAround_other(void); diff --git a/include/trade.h b/include/trade.h index 2380b2213..d7c1f369c 100644 --- a/include/trade.h +++ b/include/trade.h @@ -14,7 +14,7 @@ extern const u8 gText_GenderlessSymbol[]; extern const u16 gTradeOrHatchMonShadowTilemap[]; void CB2_StartCreateTradeMenu(void); -s32 Trade_CalcLinkPlayerCompatibilityParam(void); +s32 GetGameProgressForLinkTrade(void); s32 CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData rfuPlayer, u16 species2, u16 species, u8 isEventLegal); s32 GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData rfuPlayer, struct RfuGameCompatibilityData rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isEventLegal); void CB2_ReturnToTradeMenuFromSummary(void); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 0060a881b..3b6b34d63 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -965,7 +965,7 @@ void ToggleBg3Mode(bool8 largeScreenSize) } } -void TradeMenuBouncePartySprites(struct Sprite *sprite) +void Trade_MoveSelectedMonToTarget(struct Sprite *sprite) { sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; diff --git a/src/graphics.c b/src/graphics.c index 0cdca0e46..6d5b87d66 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1237,11 +1237,11 @@ const u16 gMonMarkingsMenu_Pal[] = INCBIN_U16("graphics/misc/markings2.gbapal"); const u16 gMonMarkingsMenu_Gfx[] = INCBIN_U16("graphics/misc/markings2.4bpp"); const u16 gTradeMenu_Pal[] = INCBIN_U16("graphics/trade/menu.gbapal"); -const u16 gTradeButtons_Pal[] = INCBIN_U16("graphics/trade/unknown_DDB444.gbapal"); +const u16 gTradeCursor_Pal[] = INCBIN_U16("graphics/trade/unknown_DDB444.gbapal"); const u16 gTradeMenu_Gfx[] = INCBIN_U16("graphics/trade/menu.4bpp"); -const u16 gTradeButtons_Gfx[] = INCBIN_U16("graphics/trade/buttons.4bpp"); +const u16 gTradeCursor_Gfx[] = INCBIN_U16("graphics/trade/buttons.4bpp"); const u16 gUnknown_8E9E9DC[] = INCBIN_U16("graphics/unused/unused_DDCEE4.bin"); -const u16 gUnknown_8E9E9FC[] = INCBIN_U16("graphics/trade/unknown_DDCF04.bin"); +const u16 gTradeMenu_Tilemap[] = INCBIN_U16("graphics/trade/unknown_DDCF04.bin"); const u16 gTradeMenuMonBox_Tilemap[] = INCBIN_U16("graphics/trade/menu_mon_box.bin"); const u16 gFameCheckerBgPals[] = INCBIN_U16("graphics/fame_checker/bg.gbapal"); diff --git a/src/link.c b/src/link.c index 3125f13fa..323e8570a 100644 --- a/src/link.c +++ b/src/link.c @@ -764,7 +764,7 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int minPlayers, int maxPlayers) { if (gLinkPlayers[0].linkType == LINKTYPE_TRADE_SETUP) { - switch (Trade_CalcLinkPlayerCompatibilityParam()) + switch (GetGameProgressForLinkTrade()) { case TRADE_BOTH_PLAYERS_READY: sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 6a9d27606..078a28ff8 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -667,7 +667,7 @@ void InitHostRfuGameData(struct RfuGameData *data, u8 activity, bool32 startedAc data->compatibility.hasNews = FALSE; data->compatibility.hasCard = FALSE; data->compatibility.unknown = FALSE; - data->compatibility.isChampion = FlagGet(FLAG_SYS_CAN_LINK_WITH_RS); + data->compatibility.canLinkNationally = FlagGet(FLAG_SYS_CAN_LINK_WITH_RS); data->compatibility.hasNationalDex = IsNationalPokedexEnabled(); data->compatibility.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR); } diff --git a/src/menu.c b/src/menu.c index 8ef713fac..fe1b82f1e 100644 --- a/src/menu.c +++ b/src/menu.c @@ -469,7 +469,7 @@ void MultichoiceList_PrintItems(u8 windowId, u8 fontId, u8 left, u8 top, u8 line CopyWindowToVram(windowId, COPYWIN_GFX); } -void UnionRoomAndTradeMenuPrintOptions(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs) +void PrintMenuTable(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs) { u8 left = GetMenuCursorDimensionByFont(fontId, 0); diff --git a/src/trade.c b/src/trade.c index a9b0a0fa8..1ec5c5d11 100644 --- a/src/trade.c +++ b/src/trade.c @@ -23,95 +23,192 @@ #include "trade_scene.h" #include "constants/songs.h" #include "constants/moves.h" +#include "constants/trade.h" -#define NUM_TRADED_GIFT_RIBBONS 11 +// IDs for CallTradeMenuFunc +enum { + CB_MAIN_MENU, + CB_SELECTED_MON, + CB_SHOW_MON_SUMMARY, + CB_CONFIRM_TRADE_PROMPT, + CB_CANCEL_TRADE_PROMPT, + CB_READY_WAIT, // Equivalent to CB_IDLE + CB_SET_SELECTED_MONS, + CB_PRINT_IS_THIS_OKAY, + CB_HANDLE_TRADE_CANCELED, + CB_FADE_TO_START_TRADE, + CB_WAIT_TO_START_TRADE, + CB_INIT_EXIT_CANCELED_TRADE, + CB_EXIT_CANCELED_TRADE, + CB_START_LINK_TRADE, + CB_INIT_CONFIRM_TRADE_PROMPT, + CB_UNUSED_CLOSE_MSG, + CB_WAIT_TO_START_RFU_TRADE, + CB_IDLE = 100, +}; -struct TradeMenuResources -{ - /*0x0000*/ u8 bg2hofs; - /*0x0001*/ u8 bg3hofs; - /*0x0002*/ u8 filler_2[0x28 - 2]; - /*0x0028*/ u8 partyIcons[2][PARTY_SIZE]; - /*0x0034*/ u8 tradeMenuCursorSpriteIdx; - /*0x0035*/ u8 tradeMenuCursorPosition; - /*0x0036*/ u8 partyCounts[2]; - /*0x0038*/ bool8 tradeMenuOptionsActive[13]; - /*0x0045*/ bool8 battleableFlags[2][PARTY_SIZE]; - /*0x0051*/ bool8 eggFlags[2][PARTY_SIZE]; - /*0x005D*/ u8 hpBarLevels[2][PARTY_SIZE]; - /*0x0069*/ u8 state; - /*0x006A*/ u8 filler_6A[0x6F - 0x6A]; - /*0x006F*/ u8 tradeMenuCBnum; - /*0x0070*/ u8 unk_70; - /*0x0072*/ u16 cursorStartTile; - /*0x0074*/ u8 menuRedrawState[2]; - /*0x0076*/ u8 menuRedrawCursorPos[2]; - /*0x0078*/ u8 unk_78; - /*0x0079*/ u8 unk_79; - /*0x007A*/ u8 unk_7A; - /*0x007B*/ u8 unk_7B; - /*0x007C*/ u8 filler_7C[0x7E - 0x7C]; - /*0x007E*/ u8 otherPlayerCursorPosition; - /*0x0080*/ u16 linkData[20]; - /*0x00A8*/ u8 loadUISpritesState; - /*0x00A9*/ u8 giftRibbons[NUM_TRADED_GIFT_RIBBONS]; - /*0x00B4*/ u8 filler_B4[0x8D0-0xB4]; - /*0x08D0*/ struct { +// Indexes for sActionTexts +enum { + TEXT_CANCEL, + TEXT_CHOOSE_MON, + TEXT_SUMMARY, + TEXT_TRADE, + TEXT_CANCEL_TRADE, + TEXT_PRESS_B_TO_EXIT, +}; + +// Indexes for sMessages +enum { + MSG_STANDBY, + MSG_CANCELED, + MSG_ONLY_MON1, + MSG_ONLY_MON2, + MSG_WAITING_FOR_FRIEND, + MSG_FRIEND_WANTS_TO_TRADE, + MSG_MON_CANT_BE_TRADED, + MSG_EGG_CANT_BE_TRADED, + MSG_FRIENDS_MON_CANT_BE_TRADED, +}; + +// IDs for QueueAction +enum { + QUEUE_SEND_DATA, + QUEUE_STANDBY, + QUEUE_ONLY_MON1, + QUEUE_ONLY_MON2, + QUEUE_UNUSED1, // Presumably intended for MSG_WAITING_FOR_FRIEND + QUEUE_UNUSED2, // Presumably intended for MSG_FRIEND_WANTS_TO_TRADE + QUEUE_MON_CANT_BE_TRADED, + QUEUE_EGG_CANT_BE_TRADED, + QUEUE_FRIENDS_MON_CANT_BE_TRADED, +}; + +#define QUEUE_DELAY_MSG 3 +#define QUEUE_DELAY_DATA 5 + +#define GFXTAG_MENU_TEXT 200 // Used as a base tag in CB2_CreateTradeMenu and CB2_ReturnToTradeMenuFromSummary +#define GFXTAG_CURSOR 300 +#define GFXTAG_LINK_MON_GLOW 5550 +#define GFXTAG_LINK_MON_SHADOW 5552 +#define GFXTAG_CABLE_END 5554 +#define GFXTAG_GBA_SCREEN 5556 +#define GFXTAG_POKEBALL 5557 + +#define PALTAG_CURSOR 2345 +#define PALTAG_MENU_TEXT 4925 +#define PALTAG_LINK_MON 5551 +#define PALTAG_GBA 5555 +#define PALTAG_POKEBALL 5558 + +// The following tags are offsets from GFXTAG_MENU_TEXT +// They're looped over in CB2_CreateTradeMenu and CB2_ReturnToTradeMenuFromSummary +// and used as indexes into sMenuTextTileBuffers +enum { + GFXTAG_PLAYER_NAME_L, + GFXTAG_PLAYER_NAME_M, + GFXTAG_PLAYER_NAME_R, + GFXTAG_PARTNER_NAME_L, + GFXTAG_PARTNER_NAME_M, + GFXTAG_PARTNER_NAME_R, + GFXTAG_CANCEL_L, + GFXTAG_CANCEL_R, + GFXTAG_CHOOSE_PKMN_L, + GFXTAG_CHOOSE_PKMN_M, + GFXTAG_CHOOSE_PKMN_R, + GFXTAG_CHOOSE_PKMN_EMPTY_1, // 6 sprites to cover the full bottom bar, but only first 3 are needed + GFXTAG_CHOOSE_PKMN_EMPTY_2, + GFXTAG_CHOOSE_PKMN_EMPTY_3, + NUM_MENU_TEXT_SPRITES +}; +#define NUM_PLAYER_NAME_SPRITES (1 + GFXTAG_PLAYER_NAME_R - GFXTAG_PLAYER_NAME_L) +#define NUM_PARTNER_NAME_SPRITES (1 + GFXTAG_PARTNER_NAME_R - GFXTAG_PARTNER_NAME_L) +#define NUM_CHOOSE_PKMN_SPRITES (1 + GFXTAG_CHOOSE_PKMN_EMPTY_3 - GFXTAG_CHOOSE_PKMN_L) + +enum { + CURSOR_ANIM_NORMAL, + CURSOR_ANIM_ON_CANCEL, +}; + +// Values for signaling to/from the link partner +enum { + STATUS_NONE, + STATUS_READY, + STATUS_CANCEL, +}; + +// Checked to confirm DrawSelectedMonScreen has reached final state +#define DRAW_SELECTED_FINISH 5 + +static EWRAM_DATA u8 *sMenuTextTileBuffer = NULL; +static EWRAM_DATA u8 *sMenuTextTileBuffers[NUM_MENU_TEXT_SPRITES] = {}; +EWRAM_DATA struct Mail gLinkPartnerMail[PARTY_SIZE] = {}; +EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; +static EWRAM_DATA struct { + u8 bg2hofs; + u8 bg3hofs; + u8 filler_2[38]; + u8 partySpriteIds[2][PARTY_SIZE]; + u8 cursorSpriteId; + u8 cursorPosition; + u8 partyCounts[2]; + bool8 optionsActive[PARTY_SIZE * 2 + 1]; + bool8 isLiveMon[2][PARTY_SIZE]; + bool8 isEgg[2][PARTY_SIZE]; + u8 hpBarLevels[2][PARTY_SIZE]; + u8 bufferPartyState; + u8 filler_6A[5]; + u8 callbackId; + u8 unk_70; // Never read + u16 bottomTextTileStart; + u8 drawSelectedMonState[2]; + u8 selectedMonIdx[2]; + u8 playerSelectStatus; + u8 partnerSelectStatus; + u8 playerConfirmStatus; + u8 partnerConfirmStatus; + u8 filler_7C[2]; + u8 partnerCursorPosition; + u16 linkData[20]; + u8 timer; + u8 giftRibbons[GIFT_RIBBONS_COUNT]; + u8 filler_B4[0x81C]; + struct { bool8 active; u16 delay; - u8 kind; - } cron[4]; - /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; -}; + u8 actionId; + } queuedActions[4]; + u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; +} * sTradeMenu = NULL; -enum TradeStatusMsg -{ - TRADESTATMSG_COMMSTANDBY = 0, - TRADESTATMSG_CANCELED, - TRADESTATMSG_ONLYMON, - TRADESTATMSG_ONLYMON2, - TRADESTATMSG_WAITINGFORFRIEND, - TRADESTATMSG_FRIENDWANTSTOTRADE, - TRADESTATMSG_YOURMONCANTBETRADED, - TRADESTATMSG_EGGCANTBETRADED, - TRADESTATMSG_PARTNERMONCANTBETRADED -}; - -static EWRAM_DATA u8 *sSpriteTextTileBuffer = NULL; -static EWRAM_DATA u8 *sSpriteTextTilePtrs[14] = {}; -EWRAM_DATA struct Mail gLinkPartnerMail[6] = {}; -EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; -static EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; - -static void CB2_ReturnFromLinkTrade2(void); -static void VblankCB_Trade(void); +static void CB2_CreateTradeMenu(void); +static void VBlankCB_TradeMenu(void); static void CB2_TradeMenu(void); -static void LoadTradeBackgroundGfxAndPals(u8 state); -static void SetTradeMenuOptionActiveFlags(void); -static u8 shedinja_maker_maybe(void); -static void CB1_HandleBlockReceive(void); +static void LoadTradeBgGfx(u8 state); +static void SetActiveMenuOptions(void); +static u8 BufferTradeParties(void); +static void CB1_UpdateLink(void); static void RunTradeMenuCallback(void); -static void SignalRedrawTradeMenus(u8 a0); -static void HandleRedrawTradeMenuOnSide(u8 side); -static u8 GetNicknameStringWidthByPartyAndMonIdx(u8 *str, u8 whichParty, u8 partyIdx); -static void BuildMovesString(u8 *str, u8 whichParty, u8 partyIdx); +static void SetSelectedMon(u8 cursorPosition); +static void DrawSelectedMonScreen(u8 side); +static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 partyIdx); +static void BufferMovesString(u8 *str, u8 whichParty, u8 partyIdx); static void PrintPartyNicknames(u8 side); -static void PrintLevelAndGenderDirectlyOnVram(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); -static void PrintPartyLevelsAndGendersDirectlyOnVram(u8 side); +static void PrintLevelAndGender(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 winLeft, u8 winTop); +static void PrintPartyLevelsAndGenders(u8 side); static void PrintTradePartnerPartyNicknames(void); -static void RedrawPartyWindow(u8 a0); -static void TradeMenuAction_Summary(u8 taskId); -static void TradeMenuAction_Trade(u8 taskId); -static void ScheduleLinkTaskWithDelay(u16 delay, u8 kind); -static void RunScheduledLinkTasks(void); -static void PrintTradeErrorOrStatusMessage(u8 strIdx); -static bool8 LoadUISprites(void); -static void RenderTextToVramViaBuffer(const u8 *name, u8 *a1, u8 unused); +static void RedrawPartyWindow(u8 whichParty); +static void Task_DrawSelectionSummary(u8 taskId); +static void Task_DrawSelectionTrade(u8 taskId); +static void QueueAction(u16 delay, u8 actionId); +static void DoQueuedActions(void); +static void PrintTradeMessage(u8 strIdx); +static bool8 LoadUISpriteGfx(void); +static void DrawBottomRowText(const u8 *name, u8 *dest, u8 unused); static void ComputePartyTradeableFlags(u8 side); static void ComputePartyHPBarLevels(u8 side); -static void SetMonIconsAnimByHPBarLevel(void); -static void CopyGiftRibbonsToSav1(void); -static u32 TestWhetherSelectedMonCanBeTraded(struct Pokemon * party, int partyCount, int cursorPos); +static void SetTradePartyHPBarSprites(void); +static void SaveTradeGiftRibbons(void); +static u32 CanTradeSelectedMon(struct Pokemon * party, int partyCount, int cursorPos); static const size_t sSizesAndOffsets[] = { sizeof(struct SaveBlock2), @@ -129,107 +226,107 @@ static const u16 sTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_ static const u8 sTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin"); static const u8 sTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin"); -static const struct OamData gOamData_8261C30 = { +static const struct OamData sOamData_MenuText = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .priority = 1 }; -static const struct OamData gOamData_8261C38 = { +static const struct OamData sOamData_Cursor = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -static const union AnimCmd gSpriteAnim_8261C40[] = { - ANIMCMD_FRAME(0x00, 5), +static const union AnimCmd sAnim_Cursor_Normal[] = { + ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_8261C48[] = { - ANIMCMD_FRAME(0x20, 5), +static const union AnimCmd sAnim_Cursor_OnCancel[] = { + ANIMCMD_FRAME(32, 5), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_8261C50[] = { - gSpriteAnim_8261C40, - gSpriteAnim_8261C48 +static const union AnimCmd *const sAnims_Cursor[] = { + [CURSOR_ANIM_NORMAL] = sAnim_Cursor_Normal, + [CURSOR_ANIM_ON_CANCEL] = sAnim_Cursor_OnCancel }; -static const struct SpriteSheet sTradeButtons_SpriteSheet = { - gTradeButtons_Gfx, - 0x800, - 300 +static const struct SpriteSheet sCursor_SpriteSheet = { + .data = gTradeCursor_Gfx, + .size = 0x800, + .tag = GFXTAG_CURSOR }; -static const struct SpritePalette sTradeButtons_SpritePal = { - gTradeButtons_Pal, - 2345 +static const struct SpritePalette sCursor_SpritePalette = { + .data = gTradeCursor_Pal, + .tag = PALTAG_CURSOR }; -static const union AnimCmd gSpriteAnim_8261C68[] = { - ANIMCMD_FRAME(0x00, 5), +static const union AnimCmd sAnim_MenuText_0[] = { + ANIMCMD_FRAME(0, 5), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_8261C70[] = { - ANIMCMD_FRAME(0x08, 5), +static const union AnimCmd sAnim_MenuText_1[] = { + ANIMCMD_FRAME(8, 5), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_8261C78[] = { - ANIMCMD_FRAME(0x10, 5), +static const union AnimCmd sAnim_MenuText_2[] = { + ANIMCMD_FRAME(16, 5), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_8261C80[] = { - ANIMCMD_FRAME(0x18, 5), +static const union AnimCmd sAnim_MenuText_3[] = { + ANIMCMD_FRAME(24, 5), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_8261C88[] = { - ANIMCMD_FRAME(0x20, 5), +static const union AnimCmd sAnim_MenuText_4[] = { + ANIMCMD_FRAME(32, 5), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_8261C90[] = { - ANIMCMD_FRAME(0x28, 5), +static const union AnimCmd sAnim_MenuText_5[] = { + ANIMCMD_FRAME(40, 5), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_8261C98[] = { - gSpriteAnim_8261C68, - gSpriteAnim_8261C70, - gSpriteAnim_8261C78, - gSpriteAnim_8261C80, - gSpriteAnim_8261C88, - gSpriteAnim_8261C90 +// These anims are not used +static const union AnimCmd *const sAnims_MenuText[] = { + sAnim_MenuText_0, + sAnim_MenuText_1, + sAnim_MenuText_2, + sAnim_MenuText_3, + sAnim_MenuText_4, + sAnim_MenuText_5, }; -static const struct SpriteTemplate sSpriteTemplate_TradeButtons = { - .tileTag = 300, - .paletteTag = 2345, - .oam = &gOamData_8261C38, - .anims = gSpriteAnimTable_8261C50, +static const struct SpriteTemplate sSpriteTemplate_Cursor = { + .tileTag = GFXTAG_CURSOR, + .paletteTag = PALTAG_CURSOR, + .oam = &sOamData_Cursor, + .anims = sAnims_Cursor, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate sSpriteTemplate_Text = { - .tileTag = 200, - .paletteTag = 4925, - .oam = &gOamData_8261C30, - .anims = gSpriteAnimTable_8261C98, +static const struct SpriteTemplate sSpriteTemplate_MenuText = { + .tileTag = GFXTAG_MENU_TEXT, + .paletteTag = PALTAG_MENU_TEXT, + .oam = &sOamData_MenuText, + .anims = sAnims_MenuText, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const u16 sTradeTextPal[] = INCBIN_U16("graphics/trade/text.gbapal"); - -static const struct SpritePalette sSpritePalette_Text = { - sTradeTextPal, - 4925 +static const u16 sMenuText_Pal[] = INCBIN_U16("graphics/trade/text.gbapal"); +static const struct SpritePalette sSpritePalette_MenuText = { + .data = sMenuText_Pal, + .tag = PALTAG_MENU_TEXT }; #define DIR_UP 0 @@ -237,7 +334,19 @@ static const struct SpritePalette sSpritePalette_Text = { #define DIR_LEFT 2 #define DIR_RIGHT 3 -static const u8 sCursorMoveDestinations[][4][6] = { +// This is used to determine the next mon to select when the D-Pad is +// pressed in a given direction. +// Note that the mons are laid out like this. +// 0-5 are the player's party and 6-11 are the trading partner's party. +// 12 is the cancel button. +// 0 1 6 7 +// 2 3 8 9 +// 4 5 10 11 +// 12 +// 1st array is the current positions +// 2nd array is directions of input +// 3rd array is the next positions to go to (unoccupied spaces are skipped over) +static const u8 sCursorMoveDestinations[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] = { // Player's party [0] = { [DIR_UP] = { 4, 2, 12, 12, 0, 0}, @@ -321,138 +430,129 @@ static const u8 sCursorMoveDestinations[][4][6] = { } }; -static const u8 sTradeMonSpriteCoords[][2] = { - {0x01, 0x05}, - {0x08, 0x05}, - {0x01, 0x0a}, - {0x08, 0x0a}, - {0x01, 0x0f}, - {0x08, 0x0f}, +#define COL0_X 1 +#define COL1_X 8 +#define COL2_X 16 +#define COL3_X 23 +#define ROW0_Y 5 +#define ROW1_Y 10 +#define ROW2_Y 15 +#define ROW3_Y 18 - {0x10, 0x05}, - {0x17, 0x05}, - {0x10, 0x0a}, - {0x17, 0x0a}, - {0x10, 0x0f}, - {0x17, 0x0f}, - - {0x17, 0x12}, +static const u8 sTradeMonSpriteCoords[(PARTY_SIZE * 2) + 1][2] = { + [TRADE_PLAYER] = + {COL0_X, ROW0_Y}, + {COL1_X, ROW0_Y}, + {COL0_X, ROW1_Y}, + {COL1_X, ROW1_Y}, + {COL0_X, ROW2_Y}, + {COL1_X, ROW2_Y}, + [TRADE_PARTNER * PARTY_SIZE] = + {COL2_X, ROW0_Y}, + {COL3_X, ROW0_Y}, + {COL2_X, ROW1_Y}, + {COL3_X, ROW1_Y}, + {COL2_X, ROW2_Y}, + {COL3_X, ROW2_Y}, + // Cancel + {COL3_X, ROW3_Y}, }; -static const u8 sTradeMenuGenderLevelPrintCoords[][2][2] = { - { - {0x05, 0x04}, - {0x0c, 0x04}, - }, - { - {0x05, 0x09}, - {0x0c, 0x09}, - }, - { - {0x05, 0x0e}, - {0x0c, 0x0e} - }, - { - {0x14, 0x04}, - {0x1b, 0x04}, - }, - { - {0x14, 0x09}, - {0x1b, 0x09}, - }, - { - {0x14, 0x0e}, - {0x1b, 0x0e}, - }, +static const u8 sTradeMonLevelCoords[PARTY_SIZE * 2][2] = { + [TRADE_PLAYER] = + { 5, 4}, + {12, 4}, + { 5, 9}, + {12, 9}, + { 5, 14}, + {12, 14}, + [TRADE_PARTNER * PARTY_SIZE] = + {20, 4}, + {27, 4}, + {20, 9}, + {27, 9}, + {20, 14}, + {27, 14}, }; -static const u8 sTradeMenuGenderLevelWindowCoords[][2][2] = { - { - {0x01, 0x03}, - {0x08, 0x03}, - }, - { - {0x01, 0x08}, - {0x08, 0x08}, - }, - { - {0x01, 0x0d}, - {0x08, 0x0d} - }, - { - {0x10, 0x03}, - {0x17, 0x03}, - }, - { - {0x10, 0x08}, - {0x17, 0x08}, - }, - { - {0x10, 0x0d}, - {0x17, 0x0d}, - }, +static const u8 sTradeMonBoxCoords[PARTY_SIZE * 2][2] = { + [TRADE_PLAYER] = + { 1, 3}, + { 8, 3}, + { 1, 8}, + { 8, 8}, + { 1, 13}, + { 8, 13}, + [TRADE_PARTNER * PARTY_SIZE] = + {16, 3}, + {23, 3}, + {16, 8}, + {23, 8}, + {16, 13}, + {23, 13}, }; -static const u8 sTradeUnknownSpriteCoords[][4] = { - {0x3c, 0x09, 0xb4, 0x09}, - {0x30, 0x09, 0xa8, 0x09} +// x,y offset for player name, x/y offset for partner name +static const u8 sPlayerNameCoords[][4] = { + {60, 9, 180, 9}, // Unused. For JP characters? + {48, 9, 168, 9}, }; -static const u8 gUnknown_8261E92[] = { - 0x00, 0x0e, 0x0f, 0x1d, - 0x03, 0x05, 0x03, 0x07, - 0x12, 0x05, 0x12, 0x07, - 0x08, 0x07, 0x16, 0x0c, - 0x08, 0x07, 0x16, 0x0c, - 0x06, 0x07, 0x18, 0x0c, - 0x06, 0x07, 0x18, 0x0c, - 0x08, 0x07, 0x16, 0x0c, - 0x07, 0x07, 0x17, 0x0c +static const u8 sUnusedCoords[][2] = +{ + { 0, 14}, + {15, 29}, + { 3, 5}, + { 3, 7}, + {18, 5}, + {18, 7}, + { 8, 7}, + {22, 12}, + { 8, 7}, + {22, 12}, + { 6, 7}, + {24, 12}, + { 6, 7}, + {24, 12}, + { 8, 7}, + {22, 12}, + { 7, 7}, + {23, 12} }; -const u8 sText_Dummy[] = _(""); -const u8 sText_ClrWhtHltTranspShdwDrkGry[] = _("{COLOR WHITE}{HIGHLIGHT TRANSPARENT}{SHADOW DARK_GRAY}"); +static const u8 sText_Dummy[] = _(""); +static const u8 sText_ClrWhtHltTranspShdwDrkGry[] = _("{COLOR WHITE}{HIGHLIGHT TRANSPARENT}{SHADOW DARK_GRAY}"); const u8 gText_MaleSymbol4[] = _("♂"); const u8 gText_FemaleSymbol4[] = _("♀"); const u8 gText_GenderlessSymbol[] = _(""); -const u8 sText_Dummy2[] = _(""); -const u8 sText_Newline[] = _("\n"); -const u8 sText_Slash[] = _("/"); +static const u8 sText_Dummy2[] = _(""); +static const u8 sText_Newline[] = _("\n"); +static const u8 sText_Slash[] = _("/"); -enum TradeUIText -{ - TRADEUITEXT_CANCEL = 0, - TRADEUITEXT_CHOOSE, - TRADEUITEXT_SUMMARY, - TRADEUITEXT_TRADE, - TRADEUITEXT_ASKCANCEL, - TRADEUITEXT_PRESSBTOEXIT -}; - -static const u8 *const sTradeUITextPtrs[] = { - gTradeText_Cancel, - gTradeText_ChooseAPokemon, - gTradeText_Summary, - gTradeText_Trade, - gText_CancelTrade, - gTradeText_PressBButtonToExit +static const u8 *const sActionTexts[] = { + [TEXT_CANCEL] = gTradeText_Cancel, + [TEXT_CHOOSE_MON] = gTradeText_ChooseAPokemon, + [TEXT_SUMMARY] = gTradeText_Summary, // Unused, sMenuAction_SummaryTrade is used instead + [TEXT_TRADE] = gTradeText_Trade, // Unused, sMenuAction_SummaryTrade is used instead + [TEXT_CANCEL_TRADE] = gText_CancelTrade, + [TEXT_PRESS_B_TO_EXIT] = gTradeText_PressBButtonToExit // Unused }; static const struct MenuAction sMenuAction_SummaryTrade[] = { - {gText_TradeAction_Summary, { .void_u8 = TradeMenuAction_Summary }}, - {gText_TradeAction_Trade, { .void_u8 = TradeMenuAction_Trade }} + {gText_TradeAction_Summary, { .void_u8 = Task_DrawSelectionSummary }}, + {gText_TradeAction_Trade, { .void_u8 = Task_DrawSelectionTrade }} }; -static const u8 *const sTradeErrorOrStatusMessagePtrs[] = { - gText_Trade_CommunicationStandby, - gText_TradeHasBeenCanceled, - gText_Trade_OnlyPkmnForBattle, - gText_OnlyPkmnForBattle, // Same as above but without color formatting - gText_WaitingForFriendToFinish, - gText_FriendWantsToTrade, - gText_PkmnCantBeTradedNow, - gText_EggCantBeTradedNow, - gText_OtherTrainersPkmnCantBeTraded +static const u8 *const sMessages[] = { + [MSG_STANDBY] = gText_Trade_CommunicationStandby, + [MSG_CANCELED] = gText_TradeHasBeenCanceled, + [MSG_ONLY_MON1] = gText_Trade_OnlyPkmnForBattle, + [MSG_ONLY_MON2] = gText_OnlyPkmnForBattle, // Same as above but without color formatting + [MSG_WAITING_FOR_FRIEND] = gText_WaitingForFriendToFinish, + [MSG_FRIEND_WANTS_TO_TRADE] = gText_FriendWantsToTrade, + [MSG_MON_CANT_BE_TRADED] = gText_PkmnCantBeTradedNow, + [MSG_EGG_CANT_BE_TRADED] = gText_EggCantBeTradedNow, + [MSG_FRIENDS_MON_CANT_BE_TRADED] = gText_OtherTrainersPkmnCantBeTraded }; static const u8 sTextColor_PartyMonNickname[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; @@ -651,47 +751,54 @@ static const struct WindowTemplate sWindowTemplate_YesNo = { .baseBlock = 0x24e }; -static const u8 gUnknown_8261FCC[][13] = { - _("かいめの そうしん"), - _("かいめの じゅしん"), - _("ポケモンアイコンセット"), - _("OBJテキストセット"), - _("セルセット"), - _("OBJテキストADD"), - _("システムメッセージADD"), - _("はいけいセット") +static const u8 sDebug_Messages[][13] = { + _("かいめの そうしん"), // "xth communication sent" + _("かいめの じゅしん"), // "xth communication received" + _("ポケモンアイコンセット"), // "pokemon icon set" + _("OBJテキストセット"), // "OBJ text set" + _("セルセット"), // "cell set" + _("OBJテキストADD"), // "OBJ text ADD" + _("システムメッセージADD"), // "system message ADD" + _("はいけいセット"), // "background set" }; -static const u8 gJPText_Shedinja[] = _("ヌケニン"); -static const u8 gUnknown_8262039[] = _("こうかんせいりつ "); -static const u8 gUnknown_8262047[] = _("だめだたらしいよ "); +static const u8 sText_ShedinjaJP[] = _("ヌケニン"); -static const u8 gUnknown_8262055[][2] = { - { 4, 3}, - {19, 3} +static const u8 sDebug_TradeResultTexts[][14] = { + _("こうかんせいりつ "), // "trade successful" + _("だめだたらしいよ "), // "it seems like it didn't work" }; -static void InitTradeMenuResources(void) +// Position of level/gender when just the pokemon to trade are displayed +static const u8 sSelectedMonLevelGenderCoords[][2] = { + [TRADE_PLAYER] = { 4, 3}, + [TRADE_PARTNER] = {19, 3} +}; + +static void InitTradeMenu(void) { - int i; static u16 dummy; ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; - SetVBlankCallback(VblankCB_Trade); + + SetVBlankCallback(VBlankCB_TradeMenu); LoadPalette(gStandardMenuPalette, 0xF0, 0x14); LoadPalette(gStandardMenuPalette, 0xD0, 0x14); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); - SetBgTilemapBuffer(1, sTradeMenuResourcesPtr->tilemapBuffer); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + SetBgTilemapBuffer(1, sTradeMenu->tilemapBuffer); + if (InitWindows(sWindowTemplates)) { + int i; DeactivateAllTextPrinters(); dummy = 590; // ? - for (i = 0; i < NELEMS(sWindowTemplates) - 1; i++) + for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) { ClearWindowTilemap(i); FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -700,23 +807,23 @@ static void InitTradeMenuResources(void) LoadStdWindowGfx(0, 0x014, 0xC0); LoadUserWindowGfx(2, 0x001, 0xE0); LoadMonIconPalettes(); - sTradeMenuResourcesPtr->state = 0; - sTradeMenuResourcesPtr->tradeMenuCBnum = 0; - sTradeMenuResourcesPtr->unk_70 = 0; - sTradeMenuResourcesPtr->menuRedrawState[0] = 0; - sTradeMenuResourcesPtr->menuRedrawState[1] = 0; - sTradeMenuResourcesPtr->unk_7A = 0; - sTradeMenuResourcesPtr->unk_7B = 0; - sTradeMenuResourcesPtr->loadUISpritesState = 0; + sTradeMenu->bufferPartyState = 0; + sTradeMenu->callbackId = CB_MAIN_MENU; + sTradeMenu->unk_70 = 0; + sTradeMenu->drawSelectedMonState[TRADE_PLAYER] = 0; + sTradeMenu->drawSelectedMonState[TRADE_PARTNER] = 0; + sTradeMenu->playerConfirmStatus = STATUS_NONE; + sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->timer = 0; } } void CB2_StartCreateTradeMenu(void) { - SetMainCallback2(CB2_ReturnFromLinkTrade2); + SetMainCallback2(CB2_CreateTradeMenu); } -static void CB2_ReturnFromLinkTrade2(void) +static void CB2_CreateTradeMenu(void) { int i; struct SpriteTemplate temp; @@ -728,14 +835,12 @@ static void CB2_ReturnFromLinkTrade2(void) switch (gMain.state) { case 0: - sTradeMenuResourcesPtr = AllocZeroed(sizeof(*sTradeMenuResourcesPtr)); - InitTradeMenuResources(); - sSpriteTextTileBuffer = AllocZeroed(0xE00); + sTradeMenu = AllocZeroed(sizeof(*sTradeMenu)); + InitTradeMenu(); + sMenuTextTileBuffer = AllocZeroed(NUM_MENU_TEXT_SPRITES * 256); - for (i = 0; i < 14; i++) - { - sSpriteTextTilePtrs[i] = &sSpriteTextTileBuffer[i * 256]; - } + for (i = 0; i < NUM_MENU_TEXT_SPRITES; i++) + sMenuTextTileBuffers[i] = &sMenuTextTileBuffer[i * 256]; gMain.state++; break; @@ -743,17 +848,15 @@ static void CB2_ReturnFromLinkTrade2(void) gPaletteFade.bufferTransferDisabled = FALSE; for (i = 0; i < PARTY_SIZE; i++) - { - CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); - } + CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); - PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); + PrintTradeMessage(MSG_STANDBY); ShowBg(0); if (!gReceivedRemoteLinkPlayers) { - gLinkType = 0x1122; - sTradeMenuResourcesPtr->loadUISpritesState = 0; + gLinkType = LINKTYPE_TRADE_CONNECTING; + sTradeMenu->timer = 0; if (gWirelessCommType) { @@ -775,10 +878,10 @@ static void CB2_ReturnFromLinkTrade2(void) } break; case 2: - sTradeMenuResourcesPtr->loadUISpritesState++; - if (sTradeMenuResourcesPtr->loadUISpritesState > 11) + sTradeMenu->timer++; + if (sTradeMenu->timer > 11) { - sTradeMenuResourcesPtr->loadUISpritesState = 0; + sTradeMenu->timer = 0; gMain.state++; } break; @@ -787,7 +890,7 @@ static void CB2_ReturnFromLinkTrade2(void) { if (IsLinkMaster()) { - if (++sTradeMenuResourcesPtr->loadUISpritesState > 30) + if (++sTradeMenu->timer > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -805,7 +908,7 @@ static void CB2_ReturnFromLinkTrade2(void) DestroyTask_RfuIdle(); CalculatePlayerPartyCount(); gMain.state++; - sTradeMenuResourcesPtr->loadUISpritesState = 0; + sTradeMenu->timer = 0; if (gWirelessCommType) { Rfu_SetLinkRecovery(TRUE); @@ -829,9 +932,9 @@ static void CB2_ReturnFromLinkTrade2(void) } break; case 6: - if (shedinja_maker_maybe()) + if (BufferTradeParties()) { - CopyGiftRibbonsToSav1(); + SaveTradeGiftRibbons(); gMain.state++; } break; @@ -839,13 +942,13 @@ static void CB2_ReturnFromLinkTrade2(void) CalculateEnemyPartyCount(); SetGpuReg(REG_OFFSET_DISPCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0); - sTradeMenuResourcesPtr->partyCounts[0] = gPlayerPartyCount; - sTradeMenuResourcesPtr->partyCounts[1] = gEnemyPartyCount; + sTradeMenu->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; + sTradeMenu->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon * mon = &gPlayerParty[i]; - sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -854,10 +957,10 @@ static void CB2_ReturnFromLinkTrade2(void) TRUE); } - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon * mon = &gEnemyParty[i]; - sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -869,88 +972,93 @@ static void CB2_ReturnFromLinkTrade2(void) break; case 8: LoadHeldItemIcons(); - DrawHeldItemIconsForTrade(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons[0], 0); + DrawHeldItemIconsForTrade(sTradeMenu->partyCounts, sTradeMenu->partySpriteIds[0], TRADE_PLAYER); gMain.state++; break; case 9: - DrawHeldItemIconsForTrade(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons[0], 1); + DrawHeldItemIconsForTrade(sTradeMenu->partyCounts, sTradeMenu->partySpriteIds[0], TRADE_PARTNER); gMain.state++; break; case 10: - DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3); + DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMenuTextTileBuffers[GFXTAG_PLAYER_NAME_L], 0, 0, gDecompressionBuffer, 3); id = GetMultiplayerId(); - DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3); - DrawTextWindowAndBufferTiles(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2); - RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], sSpriteTextTilePtrs[8], 24); + DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMenuTextTileBuffers[GFXTAG_PARTNER_NAME_L], 0, 0, gDecompressionBuffer, 3); + DrawTextWindowAndBufferTiles(sActionTexts[TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, gDecompressionBuffer, 2); + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); gMain.state++; - sTradeMenuResourcesPtr->loadUISpritesState = 0; + sTradeMenu->timer = 0; break; case 11: - if (LoadUISprites()) + if (LoadUISpriteGfx()) gMain.state++; break; case 12: + // Create player's name text sprites name = gSaveBlock2Ptr->playerName; width = GetStringWidth(FONT_NORMAL_COPY_1, name, 0); xPos = (56 - width) / 2; - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_PLAYER_NAME_SPRITES; i++) { - temp = sSpriteTemplate_Text; - temp.tileTag += i; - CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + temp = sSpriteTemplate_MenuText; + temp.tileTag += i + GFXTAG_PLAYER_NAME_L; + CreateSprite(&temp, xPos + sPlayerNameCoords[1][0] + (i * 32), sPlayerNameCoords[1][1], 1); } + + // Create partner's name text sprites id = GetMultiplayerId(); name = gLinkPlayers[id ^ 1].name; width = GetStringWidth(FONT_NORMAL_COPY_1, name, 0); xPos = (56 - width) / 2; - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_PARTNER_NAME_SPRITES; i++) { - temp = sSpriteTemplate_Text; - temp.tileTag += i + 3; - CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + temp = sSpriteTemplate_MenuText; + temp.tileTag += i + GFXTAG_PARTNER_NAME_L; + CreateSprite(&temp, xPos + sPlayerNameCoords[1][2] + (i * 32), sPlayerNameCoords[1][3], 1); } gMain.state++; break; case 13: - temp = sSpriteTemplate_Text; - temp.tileTag += 6; + // Create Cancel text sprites + temp = sSpriteTemplate_MenuText; + temp.tileTag += GFXTAG_CANCEL_L; CreateSprite(&temp, 215, 151, 1); - temp = sSpriteTemplate_Text; - temp.tileTag += 7; - CreateSprite(&temp, 247, 151, 1); + temp = sSpriteTemplate_MenuText; + temp.tileTag += GFXTAG_CANCEL_R; + CreateSprite(&temp, 215 + 32, 151, 1); - for (i = 0; i < PARTY_SIZE; i++) + // Create Choose a Pokémon text sprites (only 3 are needed, other 3 are empty) + for (i = 0; i < NUM_CHOOSE_PKMN_SPRITES; i++) { - temp = sSpriteTemplate_Text; - temp.tileTag += i + 8; + temp = sSpriteTemplate_MenuText; + temp.tileTag += i + GFXTAG_CHOOSE_PKMN_L; CreateSprite(&temp, (i * 32) + 24, 150, 1); } - sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&sSpriteTemplate_TradeButtons, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2); - sTradeMenuResourcesPtr->tradeMenuCursorPosition = 0; + sTradeMenu->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2); + sTradeMenu->cursorPosition = 0; gMain.state++; rbox_fill_rectangle(0); break; case 14: - ComputePartyTradeableFlags(0); - PrintPartyNicknames(0); - sTradeMenuResourcesPtr->bg2hofs = 0; - sTradeMenuResourcesPtr->bg3hofs = 0; - SetTradeMenuOptionActiveFlags(); + ComputePartyTradeableFlags(TRADE_PLAYER); + PrintPartyNicknames(TRADE_PLAYER); + sTradeMenu->bg2hofs = 0; + sTradeMenu->bg3hofs = 0; + SetActiveMenuOptions(); gMain.state++; PlayBGM(MUS_GAME_CORNER); break; case 15: - ComputePartyTradeableFlags(1); - PrintPartyNicknames(1); + ComputePartyTradeableFlags(TRADE_PARTNER); + PrintPartyNicknames(TRADE_PARTNER); gMain.state++; // fallthrough case 16: - LoadTradeBackgroundGfxAndPals(0); + LoadTradeBgGfx(0); gMain.state++; break; case 17: - LoadTradeBackgroundGfxAndPals(1); + LoadTradeBgGfx(1); gMain.state++; break; case 18: @@ -959,22 +1067,22 @@ static void CB2_ReturnFromLinkTrade2(void) break; case 19: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); - LoadTradeBackgroundGfxAndPals(2); + LoadTradeBgGfx(2); gMain.state++; break; case 20: - ComputePartyHPBarLevels(0); + ComputePartyHPBarLevels(TRADE_PLAYER); gMain.state++; break; case 21: - ComputePartyHPBarLevels(1); - SetMonIconsAnimByHPBarLevel(); + ComputePartyHPBarLevels(TRADE_PARTNER); + SetTradePartyHPBarSprites(); gMain.state++; break; case 22: if (!gPaletteFade.active) { - gMain.callback1 = CB1_HandleBlockReceive; + gMain.callback1 = CB1_UpdateLink; SetMainCallback2(CB2_TradeMenu); } break; @@ -999,12 +1107,12 @@ void CB2_ReturnToTradeMenuFromSummary(void) switch (gMain.state) { case 0: - InitTradeMenuResources(); + InitTradeMenu(); gMain.state++; break; case 1: gMain.state++; - sTradeMenuResourcesPtr->loadUISpritesState = 0; + sTradeMenu->timer = 0; break; case 2: gMain.state++; @@ -1029,14 +1137,14 @@ void CB2_ReturnToTradeMenuFromSummary(void) break; case 7: CalculateEnemyPartyCount(); - sTradeMenuResourcesPtr->partyCounts[0] = gPlayerPartyCount; - sTradeMenuResourcesPtr->partyCounts[1] = gEnemyPartyCount; + sTradeMenu->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; + sTradeMenu->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; ClearWindowTilemap(0); - PrintPartyNicknames(0); - PrintPartyNicknames(1); - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) + PrintPartyNicknames(TRADE_PLAYER); + PrintPartyNicknames(TRADE_PARTNER); + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { - sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon( + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon( GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, sTradeMonSpriteCoords[i][0] * 8 + 14, @@ -1046,13 +1154,13 @@ void CB2_ReturnToTradeMenuFromSummary(void) TRUE ); } - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { - sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon( + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon( GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, - sTradeMonSpriteCoords[i + 6][0] * 8 + 14, - sTradeMonSpriteCoords[i + 6][1] * 8 - 12, + sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8 + 14, + sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8 - 12, 1, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY), FALSE @@ -1062,82 +1170,87 @@ void CB2_ReturnToTradeMenuFromSummary(void) break; case 8: LoadHeldItemIcons(); - DrawHeldItemIconsForTrade(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons[0], 0); + DrawHeldItemIconsForTrade(sTradeMenu->partyCounts, sTradeMenu->partySpriteIds[0], TRADE_PLAYER); gMain.state++; break; case 9: - DrawHeldItemIconsForTrade(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons[0], 1); + DrawHeldItemIconsForTrade(sTradeMenu->partyCounts, sTradeMenu->partySpriteIds[0], TRADE_PARTNER); gMain.state++; break; case 10: - DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3); + DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMenuTextTileBuffers[GFXTAG_PLAYER_NAME_L], 0, 0, gDecompressionBuffer, 3); id = GetMultiplayerId(); - DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3); - DrawTextWindowAndBufferTiles(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2); - RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], sSpriteTextTilePtrs[8], 24); + DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMenuTextTileBuffers[GFXTAG_PARTNER_NAME_L], 0, 0, gDecompressionBuffer, 3); + DrawTextWindowAndBufferTiles(sActionTexts[TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, gDecompressionBuffer, 2); + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); gMain.state++; - sTradeMenuResourcesPtr->loadUISpritesState = 0; + sTradeMenu->timer = 0; break; case 11: - if (LoadUISprites()) - { + if (LoadUISpriteGfx()) gMain.state++; - } break; case 12: + // Create player's name text sprites name = gSaveBlock2Ptr->playerName; width = GetStringWidth(FONT_NORMAL_COPY_1, name, 0); xPos = (56 - width) / 2; - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_PLAYER_NAME_SPRITES; i++) { - temp = sSpriteTemplate_Text; - temp.tileTag += i; - CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + temp = sSpriteTemplate_MenuText; + temp.tileTag += i + GFXTAG_PLAYER_NAME_L; + CreateSprite(&temp, xPos + sPlayerNameCoords[1][0] + (i * 32), sPlayerNameCoords[1][1], 1); } + + // Create partner's name text sprites id = GetMultiplayerId(); name = gLinkPlayers[id ^ 1].name; width = GetStringWidth(FONT_NORMAL_COPY_1, name, 0); xPos = (56 - width) / 2; - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_PARTNER_NAME_SPRITES; i++) { - temp = sSpriteTemplate_Text; - temp.tileTag += i + 3; - CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + temp = sSpriteTemplate_MenuText; + temp.tileTag += i + GFXTAG_PARTNER_NAME_L; + CreateSprite(&temp, xPos + sPlayerNameCoords[1][2] + (i * 32), sPlayerNameCoords[1][3], 1); } gMain.state++; break; case 13: - temp = sSpriteTemplate_Text; - temp.tileTag += 6; + // Create Cancel text sprites + temp = sSpriteTemplate_MenuText; + temp.tileTag += GFXTAG_CANCEL_L; CreateSprite(&temp, 215, 151, 1); - temp = sSpriteTemplate_Text; - temp.tileTag += 7; - CreateSprite(&temp, 247, 151, 1); + temp = sSpriteTemplate_MenuText; + temp.tileTag += GFXTAG_CANCEL_R; + CreateSprite(&temp, 215 + 32, 151, 1); - for (i = 0; i < PARTY_SIZE; i++) + // Create Choose a Pokémon text sprites + for (i = 0; i < NUM_CHOOSE_PKMN_SPRITES; i++) { - temp = sSpriteTemplate_Text; - temp.tileTag += i + 8; + temp = sSpriteTemplate_MenuText; + temp.tileTag += i + GFXTAG_CHOOSE_PKMN_L; CreateSprite(&temp, (i * 32) + 24, 150, 1); } - if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6) - sTradeMenuResourcesPtr->tradeMenuCursorPosition = GetLastViewedMonIndex(); + if (sTradeMenu->cursorPosition < PARTY_SIZE) + sTradeMenu->cursorPosition = GetLastViewedMonIndex(); else - sTradeMenuResourcesPtr->tradeMenuCursorPosition = GetLastViewedMonIndex() + 6; + sTradeMenu->cursorPosition = GetLastViewedMonIndex() + PARTY_SIZE; - sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&sSpriteTemplate_TradeButtons, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][0] * 8 + 32, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][1] * 8, 2); + sTradeMenu->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, + sTradeMonSpriteCoords[sTradeMenu->cursorPosition][0] * 8 + 32, + sTradeMonSpriteCoords[sTradeMenu->cursorPosition][1] * 8, 2); gMain.state = 16; break; case 16: - LoadTradeBackgroundGfxAndPals(0); + LoadTradeBgGfx(0); gMain.state++; break; case 17: - LoadTradeBackgroundGfxAndPals(1); - sTradeMenuResourcesPtr->bg2hofs = 0; - sTradeMenuResourcesPtr->bg3hofs = 0; - SetTradeMenuOptionActiveFlags(); + LoadTradeBgGfx(1); + sTradeMenu->bg2hofs = 0; + sTradeMenu->bg3hofs = 0; + SetActiveMenuOptions(); gMain.state++; break; case 18: @@ -1148,21 +1261,19 @@ void CB2_ReturnToTradeMenuFromSummary(void) break; case 19: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); - LoadTradeBackgroundGfxAndPals(2); + LoadTradeBgGfx(2); gMain.state++; break; case 20: gMain.state++; break; case 21: - SetMonIconsAnimByHPBarLevel(); + SetTradePartyHPBarSprites(); gMain.state++; break; case 22: if (!gPaletteFade.active) - { SetMainCallback2(CB2_TradeMenu); - } break; } @@ -1172,50 +1283,51 @@ void CB2_ReturnToTradeMenuFromSummary(void) UpdatePaletteFade(); } -static void VblankCB_Trade(void) +static void VBlankCB_TradeMenu(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void TradeMenuCB_9(void) +static void CB_FadeToStartTrade(void) { - if (++sTradeMenuResourcesPtr->loadUISpritesState >= 16) + if (++sTradeMenu->timer >= 16) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuResourcesPtr->tradeMenuCBnum = 10; + sTradeMenu->callbackId = CB_WAIT_TO_START_TRADE; } } -static void TradeMenuCB_10(void) +static void CB_WaitToStartTrade(void) { if (!gPaletteFade.active) { - gSelectedTradeMonPositions[0] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; - gSelectedTradeMonPositions[1] = sTradeMenuResourcesPtr->otherPlayerCursorPosition; + gSelectedTradeMonPositions[TRADE_PLAYER] = sTradeMenu->cursorPosition; + gSelectedTradeMonPositions[TRADE_PARTNER] = sTradeMenu->partnerCursorPosition; if (gWirelessCommType != 0) { - sTradeMenuResourcesPtr->tradeMenuCBnum = 16; + sTradeMenu->callbackId = CB_WAIT_TO_START_RFU_TRADE; } else { SetCloseLinkCallbackAndType(32); - sTradeMenuResourcesPtr->tradeMenuCBnum = 13; + sTradeMenu->callbackId = CB_START_LINK_TRADE; } } } -static void TradeMenuCB_13(void) +static void CB_StartLinkTrade(void) { gMain.savedCallback = CB2_StartCreateTradeMenu; if (gWirelessCommType != 0) { + // Wireless Link Trade if (IsLinkRfuTaskFinished()) { - Free(sSpriteTextTileBuffer); + Free(sMenuTextTileBuffer); FreeAllWindowBuffers(); - Free(sTradeMenuResourcesPtr); + Free(sTradeMenu); gMain.callback1 = NULL; DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(CB2_LinkTrade); @@ -1223,11 +1335,12 @@ static void TradeMenuCB_13(void) } else { + // Cable Link Trade if (!gReceivedRemoteLinkPlayers) { - Free(sSpriteTextTileBuffer); + Free(sMenuTextTileBuffer); FreeAllWindowBuffers(); - Free(sTradeMenuResourcesPtr); + Free(sTradeMenu); gMain.callback1 = NULL; SetMainCallback2(CB2_LinkTrade); } @@ -1237,11 +1350,14 @@ static void TradeMenuCB_13(void) static void CB2_TradeMenu(void) { RunTradeMenuCallback(); - RunScheduledLinkTasks(); - HandleRedrawTradeMenuOnSide(0); - HandleRedrawTradeMenuOnSide(1); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenuResourcesPtr->bg2hofs++); - SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenuResourcesPtr->bg3hofs--); + DoQueuedActions(); + + // As long as drawSelectedMonState is 0, these do nothing + DrawSelectedMonScreen(TRADE_PLAYER); + DrawSelectedMonScreen(TRADE_PARTNER); + + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenu->bg2hofs++); + SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenu->bg3hofs--); RunTextPrinters_CheckPrinter0Active(); RunTasks(); AnimateSprites(); @@ -1249,7 +1365,7 @@ static void CB2_TradeMenu(void) UpdatePaletteFade(); } -static void LoadTradeBackgroundGfxAndPals(u8 state) +static void LoadTradeBgGfx(u8 state) { int i; @@ -1258,13 +1374,13 @@ static void LoadTradeBackgroundGfxAndPals(u8 state) case 0: LoadPalette(gTradeMenu_Pal, 0x00, 0x60); LoadBgTiles(1, gTradeMenu_Gfx, 0x1280, 0); - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9E9FC, 0, 0, 32, 20, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenu_Tilemap, 0, 0, 32, 20, 0); LoadBgTilemap(2, sTradeStripesBG2Tilemap, 0x800, 0); break; case 1: LoadBgTilemap(3, sTradeStripesBG3Tilemap, 0x800, 0); - PrintPartyLevelsAndGendersDirectlyOnVram(0); - PrintPartyLevelsAndGendersDirectlyOnVram(1); + PrintPartyLevelsAndGenders(TRADE_PLAYER); + PrintPartyLevelsAndGenders(TRADE_PARTNER); CopyBgTilemapBufferToVram(1); break; case 2: @@ -1281,148 +1397,157 @@ static void LoadTradeBackgroundGfxAndPals(u8 state) } } -static void SetTradeMenuOptionActiveFlags(void) +// Determine (based on party counts) where the main menu cursor can go +static void SetActiveMenuOptions(void) { int i; for (i = 0; i < PARTY_SIZE; i++) { - if (i < sTradeMenuResourcesPtr->partyCounts[0]) + if (i < sTradeMenu->partyCounts[TRADE_PLAYER]) { - gSprites[sTradeMenuResourcesPtr->partyIcons[0][i]].invisible = FALSE; - sTradeMenuResourcesPtr->tradeMenuOptionsActive[i] = TRUE; + // Present player pokemon + gSprites[sTradeMenu->partySpriteIds[TRADE_PLAYER][i]].invisible = FALSE; + sTradeMenu->optionsActive[i] = TRUE; } else { - sTradeMenuResourcesPtr->tradeMenuOptionsActive[i] = FALSE; + // Absent player pokemon + sTradeMenu->optionsActive[i] = FALSE; } - if (i < sTradeMenuResourcesPtr->partyCounts[1]) + + if (i < sTradeMenu->partyCounts[TRADE_PARTNER]) { - gSprites[sTradeMenuResourcesPtr->partyIcons[1][i]].invisible = FALSE; - sTradeMenuResourcesPtr->tradeMenuOptionsActive[i + 6] = TRUE; + // Present partner pokemon + gSprites[sTradeMenu->partySpriteIds[TRADE_PARTNER][i]].invisible = FALSE; + sTradeMenu->optionsActive[i + PARTY_SIZE] = TRUE; } else { - sTradeMenuResourcesPtr->tradeMenuOptionsActive[i + 6] = FALSE; + // Absent partner pokemno + sTradeMenu->optionsActive[i + PARTY_SIZE] = FALSE; } } - sTradeMenuResourcesPtr->tradeMenuOptionsActive[12] = TRUE; + + // Cancel is always active + sTradeMenu->optionsActive[PARTY_SIZE * 2] = TRUE; } static void Trade_Memcpy(void *dest, const void *src, size_t size) { int i; - char *_dest = dest; - const char *_src = src; + u8 *_dest = dest; + const u8 *_src = src; for (i = 0; i < size; i++) _dest[i] = _src[i]; } -static bool8 shedinja_maker_maybe(void) +static bool8 BufferTradeParties(void) { u8 id = GetMultiplayerId(); int i; struct Pokemon * mon; - switch (sTradeMenuResourcesPtr->state) + switch (sTradeMenu->bufferPartyState) { case 0: + // The parties are sent in pairs rather than all at once Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon)); - sTradeMenuResourcesPtr->state++; - sTradeMenuResourcesPtr->loadUISpritesState = 0; + sTradeMenu->bufferPartyState++; + sTradeMenu->timer = 0; break; case 1: if (IsLinkTaskFinished()) { if (GetBlockReceivedStatus() == 0) { - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; } else { ResetBlockReceivedFlags(); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; } } break; case 3: if (id == 0) SendBlockRequest(BLOCK_REQ_SIZE_200); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; break; case 4: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); ResetBlockReceivedFlags(); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; } break; case 5: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon)); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; break; case 7: if (id == 0) SendBlockRequest(BLOCK_REQ_SIZE_200); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; break; case 8: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); ResetBlockReceivedFlags(); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; } break; case 9: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 2 * sizeof(struct Pokemon)); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; break; case 11: if (id == 0) SendBlockRequest(BLOCK_REQ_SIZE_200); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; break; case 12: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); ResetBlockReceivedFlags(); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; } break; case 13: Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, PARTY_SIZE * sizeof(struct Mail) + 4); // why the extra 4 bytes? - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; break; case 15: if (id == 0) SendBlockRequest(BLOCK_REQ_SIZE_220); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; break; case 16: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(gLinkPartnerMail, gBlockRecvBuffer[id ^ 1], PARTY_SIZE * sizeof(struct Mail)); ResetBlockReceivedFlags(); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; } break; case 17: - Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, NUM_TRADED_GIFT_RIBBONS); - sTradeMenuResourcesPtr->state++; + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, sizeof(sTradeMenu->giftRibbons)); + sTradeMenu->bufferPartyState++; break; case 19: if (id == 0) SendBlockRequest(BLOCK_REQ_SIZE_40); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; break; case 20: if (GetBlockReceivedStatus() == 3) { - Trade_Memcpy(sTradeMenuResourcesPtr->giftRibbons, gBlockRecvBuffer[id ^ 1], NUM_TRADED_GIFT_RIBBONS); + Trade_Memcpy(sTradeMenu->giftRibbons, gBlockRecvBuffer[id ^ 1], sizeof(sTradeMenu->giftRibbons)); ResetBlockReceivedFlags(); - sTradeMenuResourcesPtr->state++; + sTradeMenu->bufferPartyState++; } break; case 21: @@ -1437,24 +1562,23 @@ static bool8 shedinja_maker_maybe(void) { GetMonData(mon, MON_DATA_NICKNAME, name); - if (!StringCompareWithoutExtCtrlCodes(name, gJPText_Shedinja)) - { + if (!StringCompareWithoutExtCtrlCodes(name, sText_ShedinjaJP)) SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]); - } } } } return TRUE; + // Delay until next state case 2: case 6: case 10: case 14: case 18: - sTradeMenuResourcesPtr->loadUISpritesState++; - if (sTradeMenuResourcesPtr->loadUISpritesState > 10) + sTradeMenu->timer++; + if (sTradeMenu->timer > 10) { - sTradeMenuResourcesPtr->loadUISpritesState = 0; - sTradeMenuResourcesPtr->state++; + sTradeMenu->timer = 0; + sTradeMenu->bufferPartyState++; } break; } @@ -1463,181 +1587,194 @@ static bool8 shedinja_maker_maybe(void) static void PrintIsThisTradeOkay(void) { - RenderTextToVramViaBuffer(gText_IsThisTradeOkay, (u8 *)OBJ_VRAM0 + sTradeMenuResourcesPtr->cursorStartTile * 32, 0x18); + DrawBottomRowText(gText_IsThisTradeOkay, (u8 *)OBJ_VRAM0 + sTradeMenu->bottomTextTileStart * 32, 0x18); } -static void Master_HandleBlockReceivedStatus(u8 mpId, u8 blockReceivedFlags) +static void Leader_ReadLinkBuffer(u8 mpId, u8 status) { - if (blockReceivedFlags & 1) + if (status & 1) { switch (gBlockRecvBuffer[0][0]) { - case 0xEEAA: - sTradeMenuResourcesPtr->unk_78 = 2; + case LINKCMD_REQUEST_CANCEL: + sTradeMenu->playerSelectStatus = STATUS_CANCEL; break; - case 0xAABB: - sTradeMenuResourcesPtr->unk_78 = 1; + case LINKCMD_READY_TO_TRADE: + sTradeMenu->playerSelectStatus = STATUS_READY; break; - case 0xBBBB: - sTradeMenuResourcesPtr->unk_7A = 1; + case LINKCMD_INIT_BLOCK: + sTradeMenu->playerConfirmStatus = STATUS_READY; break; - case 0xBBCC: - sTradeMenuResourcesPtr->unk_7A = 2; + case LINKCMD_READY_CANCEL_TRADE: + sTradeMenu->playerConfirmStatus = STATUS_CANCEL; break; } ResetBlockReceivedFlag(0); } - if (blockReceivedFlags & 2) + if (status & 2) { switch (gBlockRecvBuffer[1][0]) { - case 0xEEAA: - sTradeMenuResourcesPtr->unk_79 = 2; + case LINKCMD_REQUEST_CANCEL: + sTradeMenu->partnerSelectStatus = STATUS_CANCEL; break; - case 0xAABB: - sTradeMenuResourcesPtr->otherPlayerCursorPosition = gBlockRecvBuffer[1][1] + 6; - sTradeMenuResourcesPtr->unk_79 = 1; + case LINKCMD_READY_TO_TRADE: + sTradeMenu->partnerCursorPosition = gBlockRecvBuffer[1][1] + PARTY_SIZE; + sTradeMenu->partnerSelectStatus = STATUS_READY; break; - case 0xBBBB: - sTradeMenuResourcesPtr->unk_7B = 1; + case LINKCMD_INIT_BLOCK: + sTradeMenu->partnerConfirmStatus = STATUS_READY; break; - case 0xBBCC: - sTradeMenuResourcesPtr->unk_7B = 2; + case LINKCMD_READY_CANCEL_TRADE: + sTradeMenu->partnerConfirmStatus = STATUS_CANCEL; break; } ResetBlockReceivedFlag(1); } } -static void Slave_HandleBlockReceivedStatus(u8 mpId, u8 blockReceivedFlags) +static void Follower_ReadLinkBuffer(u8 mpId, u8 status) { - if (blockReceivedFlags & 1) + if (status & 1) { switch (gBlockRecvBuffer[0][0]) { - case 0xEEBB: + case LINKCMD_BOTH_CANCEL_TRADE: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - PrintTradeErrorOrStatusMessage(TRADESTATMSG_WAITINGFORFRIEND); - sTradeMenuResourcesPtr->tradeMenuCBnum = 11; + PrintTradeMessage(MSG_WAITING_FOR_FRIEND); + sTradeMenu->callbackId = CB_INIT_EXIT_CANCELED_TRADE; break; - case 0xEECC: - PrintTradeErrorOrStatusMessage(TRADESTATMSG_FRIENDWANTSTOTRADE); - sTradeMenuResourcesPtr->tradeMenuCBnum = 8; + case LINKCMD_PARTNER_CANCEL_TRADE: + PrintTradeMessage(MSG_FRIEND_WANTS_TO_TRADE); + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; - case 0xDDDD: - sTradeMenuResourcesPtr->otherPlayerCursorPosition = gBlockRecvBuffer[0][1] + 6; + case LINKCMD_SET_MONS_TO_TRADE: + sTradeMenu->partnerCursorPosition = gBlockRecvBuffer[0][1] + PARTY_SIZE; rbox_fill_rectangle(0); - SignalRedrawTradeMenus(sTradeMenuResourcesPtr->tradeMenuCursorPosition); - SignalRedrawTradeMenus(sTradeMenuResourcesPtr->otherPlayerCursorPosition); - sTradeMenuResourcesPtr->tradeMenuCBnum = 7; + SetSelectedMon(sTradeMenu->cursorPosition); + SetSelectedMon(sTradeMenu->partnerCursorPosition); + sTradeMenu->callbackId = CB_PRINT_IS_THIS_OKAY; break; - case 0xCCDD: + case LINKCMD_START_TRADE: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuResourcesPtr->tradeMenuCBnum = 10; + sTradeMenu->callbackId = CB_WAIT_TO_START_TRADE; break; - case 0xDDEE: - PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); - sTradeMenuResourcesPtr->tradeMenuCBnum = 8; + case LINKCMD_PLAYER_CANCEL_TRADE: + PrintTradeMessage(MSG_CANCELED); + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } ResetBlockReceivedFlag(0); } - if (blockReceivedFlags & 2) + if (status & 2) ResetBlockReceivedFlag(1); } -static void Master_HandleCommunication(void) +#define QueueLinkData(linkCmd, cursorPosition) \ +{ \ + sTradeMenu->linkData[0] = (linkCmd); \ + sTradeMenu->linkData[1] = (cursorPosition); \ + QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); \ +} + +static void Leader_HandleCommunication(void) { - if (sTradeMenuResourcesPtr->unk_78 && sTradeMenuResourcesPtr->unk_79) + if (sTradeMenu->playerSelectStatus != STATUS_NONE + && sTradeMenu->partnerSelectStatus != STATUS_NONE) { - if (sTradeMenuResourcesPtr->unk_78 == 1 && sTradeMenuResourcesPtr->unk_79 == 1) + if (sTradeMenu->playerSelectStatus == STATUS_READY + && sTradeMenu->partnerSelectStatus == STATUS_READY) { - sTradeMenuResourcesPtr->tradeMenuCBnum = 6; - sTradeMenuResourcesPtr->linkData[0] = 0xDDDD; - sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; - ScheduleLinkTaskWithDelay(5, 0); - sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; + // Both players have selected a pokemon to trade + sTradeMenu->callbackId = CB_SET_SELECTED_MONS; + QueueLinkData(LINKCMD_SET_MONS_TO_TRADE, sTradeMenu->cursorPosition); + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; } - else if (sTradeMenuResourcesPtr->unk_78 == 1 && sTradeMenuResourcesPtr->unk_79 == 2) + else if (sTradeMenu->playerSelectStatus == STATUS_READY + && sTradeMenu->partnerSelectStatus == STATUS_CANCEL) { - PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); - sTradeMenuResourcesPtr->linkData[0] = 0xEECC; - sTradeMenuResourcesPtr->linkData[1] = 0; - ScheduleLinkTaskWithDelay(5, 0); - sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; - sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; - sTradeMenuResourcesPtr->tradeMenuCBnum = 8; + // The player has selected a pokemon to trade, + // but the partner has selected Cancel + PrintTradeMessage(MSG_CANCELED); + QueueLinkData(LINKCMD_PARTNER_CANCEL_TRADE, 0); + sTradeMenu->playerConfirmStatus = sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } - else if (sTradeMenuResourcesPtr->unk_78 == 2 && sTradeMenuResourcesPtr->unk_79 == 1) + else if (sTradeMenu->playerSelectStatus == STATUS_CANCEL + && sTradeMenu->partnerSelectStatus == STATUS_READY) { - PrintTradeErrorOrStatusMessage(TRADESTATMSG_FRIENDWANTSTOTRADE); - sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; - sTradeMenuResourcesPtr->linkData[1] = 0; - ScheduleLinkTaskWithDelay(5, 0); - sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; - sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; - sTradeMenuResourcesPtr->tradeMenuCBnum = 8; + // The partner has selected a pokemon to trade, + // but the player has selected cancel + PrintTradeMessage(MSG_FRIEND_WANTS_TO_TRADE); + QueueLinkData(LINKCMD_PLAYER_CANCEL_TRADE, 0); + sTradeMenu->playerConfirmStatus = sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } - else if (sTradeMenuResourcesPtr->unk_78 == 2 && sTradeMenuResourcesPtr->unk_79 == 2) + else if (sTradeMenu->playerSelectStatus == STATUS_CANCEL + && sTradeMenu->partnerSelectStatus == STATUS_CANCEL) { - sTradeMenuResourcesPtr->linkData[0] = 0xEEBB; - sTradeMenuResourcesPtr->linkData[1] = 0; - ScheduleLinkTaskWithDelay(5, 0); + // Both players have selected Cancel + QueueLinkData(LINKCMD_BOTH_CANCEL_TRADE, 0); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; - sTradeMenuResourcesPtr->tradeMenuCBnum = 11; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_INIT_EXIT_CANCELED_TRADE; } } - if (sTradeMenuResourcesPtr->unk_7A && sTradeMenuResourcesPtr->unk_7B) + if (sTradeMenu->playerConfirmStatus != STATUS_NONE + && sTradeMenu->partnerConfirmStatus != STATUS_NONE) { - if (sTradeMenuResourcesPtr->unk_7A == 1 && sTradeMenuResourcesPtr->unk_7B == 1) + if (sTradeMenu->playerConfirmStatus == STATUS_READY + && sTradeMenu->partnerConfirmStatus == STATUS_READY) { - sTradeMenuResourcesPtr->linkData[0] = 0xCCDD; - sTradeMenuResourcesPtr->linkData[1] = 0; - ScheduleLinkTaskWithDelay(5, 0); - sTradeMenuResourcesPtr->unk_7A = 0; - sTradeMenuResourcesPtr->unk_7B = 0; - sTradeMenuResourcesPtr->tradeMenuCBnum = 9; + // Both players have confirmed the trade + QueueLinkData(LINKCMD_START_TRADE, 0); + sTradeMenu->playerConfirmStatus = STATUS_NONE; + sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_FADE_TO_START_TRADE; } - if (sTradeMenuResourcesPtr->unk_7A == 2 || sTradeMenuResourcesPtr->unk_7B == 2) + if (sTradeMenu->playerConfirmStatus == STATUS_CANCEL + || sTradeMenu->partnerConfirmStatus == STATUS_CANCEL) { - PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); - sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; - sTradeMenuResourcesPtr->linkData[1] = 0; - ScheduleLinkTaskWithDelay(5, 0); - sTradeMenuResourcesPtr->unk_7A = 0; - sTradeMenuResourcesPtr->unk_7B = 0; - sTradeMenuResourcesPtr->tradeMenuCBnum = 8; + // One of the players has decided not to confirm the trade, + // or the trade was not allowed. + PrintTradeMessage(MSG_CANCELED); + QueueLinkData(LINKCMD_PLAYER_CANCEL_TRADE, 0); + sTradeMenu->playerConfirmStatus = STATUS_NONE; + sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } } } -static void CB1_HandleBlockReceive(void) +static void CB1_UpdateLink(void) { u8 mpId = GetMultiplayerId(); u8 status; + if ((status = GetBlockReceivedStatus())) { if (mpId == 0) - Master_HandleBlockReceivedStatus(mpId, status); + Leader_ReadLinkBuffer(mpId, status); else - Slave_HandleBlockReceivedStatus(mpId, status); + Follower_ReadLinkBuffer(mpId, status); } if (mpId == 0) - Master_HandleCommunication(); + Leader_HandleCommunication(); } -static u8 TradeMenuGetNewCursorLocation(u8 oldPosition, u8 direction) +static u8 GetNewCursorPosition(u8 oldPosition, u8 direction) { int i; u8 newPosition = 0; - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { - if (sTradeMenuResourcesPtr->tradeMenuOptionsActive[sCursorMoveDestinations[oldPosition][direction][i]] == TRUE) + if (sTradeMenu->optionsActive[sCursorMoveDestinations[oldPosition][direction][i]] == TRUE) { newPosition = sCursorMoveDestinations[oldPosition][direction][i]; break; @@ -1648,112 +1785,109 @@ static u8 TradeMenuGetNewCursorLocation(u8 oldPosition, u8 direction) } -static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) +static void TradeMenuMoveCursor(u8 *cursorPosition, u8 direction) { - u8 newPosition = TradeMenuGetNewCursorLocation(*tradeMenuCursorPosition, direction); + u8 newPosition = GetNewCursorPosition(*cursorPosition, direction); - if (newPosition == 12) // CANCEL + if (newPosition == PARTY_SIZE * 2) // CANCEL { - StartSpriteAnim(&gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx], 1); - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].x = 224; - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].y = 160; + StartSpriteAnim(&gSprites[sTradeMenu->cursorSpriteId], CURSOR_ANIM_ON_CANCEL); + gSprites[sTradeMenu->cursorSpriteId].x = DISPLAY_WIDTH - 16; + gSprites[sTradeMenu->cursorSpriteId].y = DISPLAY_HEIGHT; } else { - StartSpriteAnim(&gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx], 0); - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32; - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].y = sTradeMonSpriteCoords[newPosition][1] * 8; + StartSpriteAnim(&gSprites[sTradeMenu->cursorSpriteId], CURSOR_ANIM_NORMAL); + gSprites[sTradeMenu->cursorSpriteId].x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[sTradeMenu->cursorSpriteId].y = sTradeMonSpriteCoords[newPosition][1] * 8; } - if (*tradeMenuCursorPosition != newPosition) - { + if (*cursorPosition != newPosition) PlaySE(SE_SELECT); - } - *tradeMenuCursorPosition = newPosition; + *cursorPosition = newPosition; } -static void CommunicatePlayerSelectedMonForTrade(void) +static void SetReadyToTrade(void) { - PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); - sTradeMenuResourcesPtr->tradeMenuCBnum = 5; + PrintTradeMessage(MSG_STANDBY); + sTradeMenu->callbackId = CB_READY_WAIT; if (GetMultiplayerId() == 1) { - sTradeMenuResourcesPtr->linkData[0] = 0xAABB; - sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); + // Communicate to the link leader that we're ready to trade + sTradeMenu->linkData[0] = LINKCMD_READY_TO_TRADE; + sTradeMenu->linkData[1] = sTradeMenu->cursorPosition; + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenu->linkData, 20); } else { - sTradeMenuResourcesPtr->unk_78 = 1; + // We are the link leader, no communication necessary + sTradeMenu->playerSelectStatus = STATUS_READY; } } -static void TradeMenuCB_0(void) +static void CB_ProcessMenuInput(void) { int i; if (JOY_REPT(DPAD_UP)) - { - TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 0); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, DIR_UP); else if (JOY_REPT(DPAD_DOWN)) - { - TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 1); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, DIR_DOWN); else if (JOY_REPT(DPAD_LEFT)) - { - TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 2); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, DIR_LEFT); else if (JOY_REPT(DPAD_RIGHT)) - { - TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 3); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, DIR_RIGHT); if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6) // PlayerParty + if (sTradeMenu->cursorPosition < PARTY_SIZE) { + // Selected pokemon in player's party DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); - UnionRoomAndTradeMenuPrintOptions(1, FONT_NORMAL_COPY_2, 16, 2, sMenuAction_SummaryTrade); + PrintMenuTable(1, FONT_NORMAL_COPY_2, 16, ARRAY_COUNT(sMenuAction_SummaryTrade), sMenuAction_SummaryTrade); Menu_InitCursor(1, FONT_NORMAL_COPY_2, 0, 0, 16, 2, 0); PutWindowTilemap(1); CopyWindowToVram(1, COPYWIN_FULL); - sTradeMenuResourcesPtr->tradeMenuCBnum = 1; + sTradeMenu->callbackId = CB_SELECTED_MON; } - else if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 12) + else if (sTradeMenu->cursorPosition < PARTY_SIZE * 2) { + // Selected pokemon in partner's party BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuResourcesPtr->tradeMenuCBnum = 2; + sTradeMenu->callbackId = CB_SHOW_MON_SUMMARY; } - else if (sTradeMenuResourcesPtr->tradeMenuCursorPosition == 12) + else if (sTradeMenu->cursorPosition == PARTY_SIZE * 2) { + // Selected Cancel CreateYesNoMenu(&sWindowTemplate_YesNo, FONT_NORMAL_COPY_2, 0, 2, 0x001, 14, 0); - sTradeMenuResourcesPtr->tradeMenuCBnum = 4; - RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_ASKCANCEL], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->cursorStartTile * 32, 24); + sTradeMenu->callbackId = CB_CANCEL_TRADE_PROMPT; + DrawBottomRowText(sActionTexts[TEXT_CANCEL_TRADE], (void *)OBJ_VRAM0 + sTradeMenu->bottomTextTileStart * 32, 24); } } + + // This option is unavailable in Emerald if (JOY_NEW(R_BUTTON)) { for (i = 0; i < 10; i++) - sTradeMenuResourcesPtr->linkData[i] = i; - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); + sTradeMenu->linkData[i] = i; + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenu->linkData, 20); } } static void RedrawChooseAPokemonWindow(void) { PrintTradePartnerPartyNicknames(); - sTradeMenuResourcesPtr->tradeMenuCBnum = 0; - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = FALSE; - RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->cursorStartTile * 32, 24); + sTradeMenu->callbackId = CB_MAIN_MENU; + gSprites[sTradeMenu->cursorSpriteId].invisible = FALSE; + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], (void *)OBJ_VRAM0 + sTradeMenu->bottomTextTileStart * 32, 24); } -static void TradeMenuCB_1(void) +static void CB_ProcessSelectedMonInput(void) { switch (Menu_ProcessInputNoWrapAround()) { @@ -1763,37 +1897,37 @@ static void TradeMenuCB_1(void) break; case MENU_NOTHING_CHOSEN: break; - case 0: // SUMMARY + case 0: // Summary BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuResourcesPtr->tradeMenuCBnum = 2; + sTradeMenu->callbackId = CB_SHOW_MON_SUMMARY; break; case 1: // Trade - switch (TestWhetherSelectedMonCanBeTraded(gPlayerParty, gPlayerPartyCount, sTradeMenuResourcesPtr->tradeMenuCursorPosition)) + switch (CanTradeSelectedMon(gPlayerParty, gPlayerPartyCount, sTradeMenu->cursorPosition)) { - case 0: // Can trade - CommunicatePlayerSelectedMonForTrade(); - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; + case CAN_TRADE_MON: + SetReadyToTrade(); + gSprites[sTradeMenu->cursorSpriteId].invisible = TRUE; break; - case 1: // Don't have enough alive mons - ScheduleLinkTaskWithDelay(3, 3); - sTradeMenuResourcesPtr->tradeMenuCBnum = 8; + case CANT_TRADE_LAST_MON: + QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2); + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; - case 2: // Player lacks national dex - case 4: // Partner lacks national dex - ScheduleLinkTaskWithDelay(3, 6); - sTradeMenuResourcesPtr->tradeMenuCBnum = 8; + case CANT_TRADE_NATIONAL: + case CANT_TRADE_INVALID_MON: + QueueAction(QUEUE_DELAY_MSG, QUEUE_MON_CANT_BE_TRADED); + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; - case 3: // Player lacks national dex (egg) - case 5: // Partner lacks national dex (egg) - ScheduleLinkTaskWithDelay(3, 7); - sTradeMenuResourcesPtr->tradeMenuCBnum = 8; + case CANT_TRADE_EGG_YET: + case CANT_TRADE_PARTNER_EGG_YET: + QueueAction(QUEUE_DELAY_MSG, QUEUE_EGG_CANT_BE_TRADED); + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; } break; } } -static void TradeMenuCB_15(void) +static void CB_ChooseMonAfterButtonPress(void) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { @@ -1802,117 +1936,122 @@ static void TradeMenuCB_15(void) } } -static void TradeMenuCB_2(void) +static void CB_ShowTradeMonSummaryScreen(void) { if (!gPaletteFade.active) { - if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6) - ShowPokemonSummaryScreen(gPlayerParty, sTradeMenuResourcesPtr->tradeMenuCursorPosition, sTradeMenuResourcesPtr->partyCounts[0] - 1, CB2_ReturnToTradeMenuFromSummary, PSS_MODE_TRADE); + if (sTradeMenu->cursorPosition < PARTY_SIZE) + ShowPokemonSummaryScreen(gPlayerParty, sTradeMenu->cursorPosition, sTradeMenu->partyCounts[0] - 1, CB2_ReturnToTradeMenuFromSummary, PSS_MODE_TRADE); else - ShowPokemonSummaryScreen(gEnemyParty, sTradeMenuResourcesPtr->tradeMenuCursorPosition - 6, sTradeMenuResourcesPtr->partyCounts[1] - 1, CB2_ReturnToTradeMenuFromSummary, PSS_MODE_TRADE); + ShowPokemonSummaryScreen(gEnemyParty, sTradeMenu->cursorPosition - PARTY_SIZE, sTradeMenu->partyCounts[1] - 1, CB2_ReturnToTradeMenuFromSummary, PSS_MODE_TRADE); FreeAllWindowBuffers(); } } -static u8 PlayerHasEnoughPokemonToTrade_HandleMewDeoxys(u8 *flags, u8 partyCount, u8 cursorPos) +static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 cursorPos) { s32 i; - u16 species; - u8 count = 0; - for (i = 0; i < partyCount; i++) + u16 partnerSpecies; + u8 hasLiveMon = 0; + + // Make sure mon to be traded isn't player's last alive mon + for (i = 0; i < playerPartyCount; i++) { if (cursorPos != i) - count += flags[i]; + hasLiveMon += aliveMons[i]; } - species = GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->otherPlayerCursorPosition % 6], MON_DATA_SPECIES); - if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->otherPlayerCursorPosition % 6], MON_DATA_EVENT_LEGAL)) - return 2; - if (count != 0) - count = 1; - return count; + + // Partner cant trade illegitimate Deoxys or Mew + partnerSpecies = GetMonData(&gEnemyParty[sTradeMenu->partnerCursorPosition % PARTY_SIZE], MON_DATA_SPECIES); + if ((partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW) + && !GetMonData(&gEnemyParty[sTradeMenu->partnerCursorPosition % PARTY_SIZE], MON_DATA_EVENT_LEGAL)) + return PARTNER_MON_INVALID; + + if (hasLiveMon != 0) + hasLiveMon = BOTH_MONS_VALID; + + return hasLiveMon; // PLAYER_MON_INVALID or BOTH_MONS_VALID } static void CommunicateWhetherMonCanBeTraded(void) { int i; - u8 arr[12]; + u8 aliveMons[PARTY_SIZE * 2]; - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) - { - arr[i] = sTradeMenuResourcesPtr->battleableFlags[0][i]; - } + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) + aliveMons[i] = sTradeMenu->isLiveMon[TRADE_PLAYER][i]; - switch (PlayerHasEnoughPokemonToTrade_HandleMewDeoxys(arr, sTradeMenuResourcesPtr->partyCounts[0], sTradeMenuResourcesPtr->tradeMenuCursorPosition)) + switch (CheckValidityOfTradeMons(aliveMons, sTradeMenu->partyCounts[0], sTradeMenu->cursorPosition)) { - case 0: - ScheduleLinkTaskWithDelay(3, 3); - sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; - ScheduleLinkTaskWithDelay(180, 0); + case PLAYER_MON_INVALID: + QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2); + sTradeMenu->linkData[0] = LINKCMD_READY_CANCEL_TRADE; + QueueAction(180, QUEUE_SEND_DATA); break; - case 1: - ScheduleLinkTaskWithDelay(3, 1); - sTradeMenuResourcesPtr->linkData[0] = 0xBBBB; + case BOTH_MONS_VALID: + QueueAction(QUEUE_DELAY_MSG, QUEUE_STANDBY); + sTradeMenu->linkData[0] = LINKCMD_INIT_BLOCK; if (IsLinkTaskFinished()) - { - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); - } + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenu->linkData, 20); break; - case 2: - ScheduleLinkTaskWithDelay(3, 8); - sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; - ScheduleLinkTaskWithDelay(180, 0); + case PARTNER_MON_INVALID: + QueueAction(QUEUE_DELAY_MSG, QUEUE_FRIENDS_MON_CANT_BE_TRADED); + sTradeMenu->linkData[0] = LINKCMD_READY_CANCEL_TRADE; + QueueAction(180, QUEUE_SEND_DATA); + break; + default: + // Both pokemon are valid to trade break; } } -static void TradeMenuCB_3(void) +static void CB_ProcessConfirmTradeInput(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: + case 0: // YES, Confirm selection CommunicateWhetherMonCanBeTraded(); - sTradeMenuResourcesPtr->tradeMenuCBnum = 100; + sTradeMenu->callbackId = CB_IDLE; PutWindowTilemap(17); break; - case 1: + case 1: // NO, Cancel Trade case MENU_B_PRESSED: - ScheduleLinkTaskWithDelay(3, 1); + QueueAction(QUEUE_DELAY_MSG, QUEUE_STANDBY); if (IsLinkTaskFinished()) { - sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); + sTradeMenu->linkData[0] = LINKCMD_READY_CANCEL_TRADE; + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenu->linkData, 20); } - sTradeMenuResourcesPtr->tradeMenuCBnum = 100; + sTradeMenu->callbackId = CB_IDLE; PutWindowTilemap(17); break; } } -static void CommitWindows(void) +// Only when choosing Yes to cancel, when No is chosen all are redrawn anyway +static void RestoreNicknamesCoveredByYesNo(void) { int i; - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1] - 4; i++) + for (i = 0; i < sTradeMenu->partyCounts[1] - 4; i++) { - PutWindowTilemap(i + 12); - CopyWindowToVram(i + 12, COPYWIN_MAP); + PutWindowTilemap(i + PARTY_SIZE * 2); + CopyWindowToVram(i + PARTY_SIZE * 2, COPYWIN_MAP); } } -static void TradeMenuCB_4(void) +static void CB_ProcessCancelTradeInput(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: - PrintTradeErrorOrStatusMessage(TRADESTATMSG_WAITINGFORFRIEND); - sTradeMenuResourcesPtr->linkData[0] = 0xEEAA; - sTradeMenuResourcesPtr->linkData[1] = 0; - ScheduleLinkTaskWithDelay(5, 0); - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; - sTradeMenuResourcesPtr->tradeMenuCBnum = 100; - CommitWindows(); + case 0: // YES, Cancel + PrintTradeMessage(MSG_WAITING_FOR_FRIEND); + QueueLinkData(LINKCMD_REQUEST_CANCEL, 0); + gSprites[sTradeMenu->cursorSpriteId].invisible = TRUE; + sTradeMenu->callbackId = CB_IDLE; + RestoreNicknamesCoveredByYesNo(); break; - case 1: + case 1: // NO, Continue case MENU_B_PRESSED: PlaySE(SE_SELECT); RedrawChooseAPokemonWindow(); @@ -1920,39 +2059,39 @@ static void TradeMenuCB_4(void) } } -static void TradeMenuCB_6(void) +static void CB_SetSelectedMons(void) { if (GetMultiplayerId() == 0) { rbox_fill_rectangle(0); - SignalRedrawTradeMenus(sTradeMenuResourcesPtr->tradeMenuCursorPosition); - SignalRedrawTradeMenus(sTradeMenuResourcesPtr->otherPlayerCursorPosition); + SetSelectedMon(sTradeMenu->cursorPosition); + SetSelectedMon(sTradeMenu->partnerCursorPosition); } - sTradeMenuResourcesPtr->tradeMenuCBnum = 7; + sTradeMenu->callbackId = CB_PRINT_IS_THIS_OKAY; } -static void TradeMenuCB_7(void) +static void CB_PrintIsThisTradeOkay(void) { - if (sTradeMenuResourcesPtr->menuRedrawState[0] == 5 && sTradeMenuResourcesPtr->menuRedrawState[1] == 5) + if (sTradeMenu->drawSelectedMonState[TRADE_PLAYER] == DRAW_SELECTED_FINISH + && sTradeMenu->drawSelectedMonState[TRADE_PARTNER] == DRAW_SELECTED_FINISH) { PrintIsThisTradeOkay(); - sTradeMenuResourcesPtr->tradeMenuCBnum = 14; + sTradeMenu->callbackId = CB_INIT_CONFIRM_TRADE_PROMPT; } } -static void TradeMenuCB_14(void) +static void CB_InitConfirmTradePrompt(void) { - sTradeMenuResourcesPtr->loadUISpritesState++; - - if (sTradeMenuResourcesPtr->loadUISpritesState > 120) + sTradeMenu->timer++; + if (sTradeMenu->timer > 120) { CreateYesNoMenu(&sWindowTemplate_YesNo, FONT_NORMAL_COPY_2, 0, 2, 1, 14, 0); - sTradeMenuResourcesPtr->loadUISpritesState = 0; - sTradeMenuResourcesPtr->tradeMenuCBnum = 3; + sTradeMenu->timer = 0; + sTradeMenu->callbackId = CB_CONFIRM_TRADE_PROMPT; } } -static void TradeMenuCB_8(void) +static void CB_HandleTradeCanceled(void) { int i; @@ -1968,38 +2107,34 @@ static void TradeMenuCB_8(void) rbox_fill_rectangle(i + 14); } - RedrawPartyWindow(0); - RedrawPartyWindow(1); - sTradeMenuResourcesPtr->tradeMenuCBnum = 0; - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = FALSE; + RedrawPartyWindow(TRADE_PLAYER); + RedrawPartyWindow(TRADE_PARTNER); + sTradeMenu->callbackId = CB_MAIN_MENU; + gSprites[sTradeMenu->cursorSpriteId].invisible = FALSE; } } -static void TradeMenuCB_11(void) +static void CB_InitExitCanceledTrade(void) { if (!gPaletteFade.active) { if (gWirelessCommType) - { SetLinkStandbyCallback(); - } else - { SetCloseLinkCallbackAndType(12); - } - sTradeMenuResourcesPtr->tradeMenuCBnum = 12; + sTradeMenu->callbackId = CB_EXIT_CANCELED_TRADE; } } -static void TradeMenuCB_12(void) +static void CB_ExitCanceledTrade(void) { if (gWirelessCommType) { if (IsLinkTaskFinished()) { - Free(sSpriteTextTileBuffer); - Free(sTradeMenuResourcesPtr); + Free(sMenuTextTileBuffer); + Free(sTradeMenu); FreeAllWindowBuffers(); DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(CB2_ReturnToFieldFromMultiplayer); @@ -2009,167 +2144,187 @@ static void TradeMenuCB_12(void) { if (!gReceivedRemoteLinkPlayers) { - Free(sSpriteTextTileBuffer); - Free(sTradeMenuResourcesPtr); + Free(sMenuTextTileBuffer); + Free(sTradeMenu); FreeAllWindowBuffers(); SetMainCallback2(CB2_ReturnToFieldFromMultiplayer); } } } -static void TradeMenuCB_16(void) +static void CB_WaitToStartRfuTrade(void) { if (!Rfu_SetLinkRecovery(FALSE)) { SetLinkStandbyCallback(); - sTradeMenuResourcesPtr->tradeMenuCBnum = 13; + sTradeMenu->callbackId = CB_START_LINK_TRADE; } } static void RunTradeMenuCallback(void) { - switch (sTradeMenuResourcesPtr->tradeMenuCBnum) + switch (sTradeMenu->callbackId) { - case 0: - TradeMenuCB_0(); + case CB_MAIN_MENU: + CB_ProcessMenuInput(); break; - case 1: - TradeMenuCB_1(); + case CB_SELECTED_MON: + CB_ProcessSelectedMonInput(); break; - case 2: - TradeMenuCB_2(); + case CB_SHOW_MON_SUMMARY: + CB_ShowTradeMonSummaryScreen(); break; - case 3: - TradeMenuCB_3(); + case CB_CONFIRM_TRADE_PROMPT: + CB_ProcessConfirmTradeInput(); break; - case 4: - TradeMenuCB_4(); + case CB_CANCEL_TRADE_PROMPT: + CB_ProcessCancelTradeInput(); break; - case 5: + case CB_READY_WAIT: // nop break; - case 6: - TradeMenuCB_6(); + case CB_SET_SELECTED_MONS: + CB_SetSelectedMons(); break; - case 7: - TradeMenuCB_7(); + case CB_PRINT_IS_THIS_OKAY: + CB_PrintIsThisTradeOkay(); break; - case 8: - TradeMenuCB_8(); + case CB_HANDLE_TRADE_CANCELED: + CB_HandleTradeCanceled(); break; - case 9: - TradeMenuCB_9(); + case CB_FADE_TO_START_TRADE: + CB_FadeToStartTrade(); break; - case 10: - TradeMenuCB_10(); + case CB_WAIT_TO_START_TRADE: + CB_WaitToStartTrade(); break; - case 11: - TradeMenuCB_11(); + case CB_INIT_EXIT_CANCELED_TRADE: + CB_InitExitCanceledTrade(); break; - case 12: - TradeMenuCB_12(); + case CB_EXIT_CANCELED_TRADE: + CB_ExitCanceledTrade(); break; - case 13: - TradeMenuCB_13(); + case CB_START_LINK_TRADE: + CB_StartLinkTrade(); break; - case 14: - TradeMenuCB_14(); + case CB_INIT_CONFIRM_TRADE_PROMPT: + CB_InitConfirmTradePrompt(); break; - case 15: - TradeMenuCB_15(); + case CB_UNUSED_CLOSE_MSG: + CB_ChooseMonAfterButtonPress(); break; - case 16: - TradeMenuCB_16(); + case CB_WAIT_TO_START_RFU_TRADE: + CB_WaitToStartRfuTrade(); break; } + // CB_IDLE is nop } -static void SignalRedrawTradeMenus(u8 monIdx) +static void SetSelectedMon(u8 cursorPosition) { - u8 whichParty = monIdx / PARTY_SIZE; + // cursorPosition 0-5 are the player's mons, 6-11 are the partner's + u8 whichParty = cursorPosition / PARTY_SIZE; - if (sTradeMenuResourcesPtr->menuRedrawState[whichParty] == 0) + if (sTradeMenu->drawSelectedMonState[whichParty] == 0) { - sTradeMenuResourcesPtr->menuRedrawState[whichParty] = 1; - sTradeMenuResourcesPtr->menuRedrawCursorPos[whichParty] = monIdx; + // Start the animation to display just the selected + // pokemon in the middle of the screen + sTradeMenu->drawSelectedMonState[whichParty] = 1; + sTradeMenu->selectedMonIdx[whichParty] = cursorPosition; } } -static void HandleRedrawTradeMenuOnSide(u8 side) +static void DrawSelectedMonScreen(u8 whichParty) { s8 nameStringWidth; u8 nickname[20]; u8 movesString[56]; u8 i; u8 partyIdx; - u8 whichParty; - u8 monIdx = sTradeMenuResourcesPtr->menuRedrawCursorPos[side]; + u8 selectedMonParty; + u8 selectedMonIdx = sTradeMenu->selectedMonIdx[whichParty]; - whichParty = 1; - if (sTradeMenuResourcesPtr->menuRedrawCursorPos[side] < PARTY_SIZE) - whichParty = 0; - partyIdx = monIdx % PARTY_SIZE; + selectedMonParty = TRADE_PARTNER; + if (sTradeMenu->selectedMonIdx[whichParty] < PARTY_SIZE) + selectedMonParty = TRADE_PLAYER; + partyIdx = selectedMonIdx % PARTY_SIZE; nameStringWidth = 0; - switch (sTradeMenuResourcesPtr->menuRedrawState[side]) + switch (sTradeMenu->drawSelectedMonState[whichParty]) { + default: + // Idle while state is 0, and once it reaches the final state (DRAW_SELECTED_FINISH) + break; case 1: - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[side]; i++) - { - gSprites[sTradeMenuResourcesPtr->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE; - } + // Erase the rest of the party + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][i]].invisible = TRUE; + for (i = 0; i < PARTY_SIZE; i++) + ClearWindowTilemap(i + (whichParty * PARTY_SIZE + 2)); - for (i = 0; i < 6; i++) - { - ClearWindowTilemap(i + (side * 6 + 2)); - } + // Re-display the selected pokemon + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].invisible = FALSE; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; - StoreSpriteCallbackInData6(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); - sTradeMenuResourcesPtr->menuRedrawState[side]++; - TradeMenuBouncePartySprites(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); - CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, side * 15, 0, 15, 17, 0); + // Move the selected pokemon to the center + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[0] = 20; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[4] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; + StoreSpriteCallbackInData6(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]], SpriteCB_MonIcon); + sTradeMenu->drawSelectedMonState[whichParty]++; + Trade_MoveSelectedMonToTarget(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]]); + + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); - if (whichParty == 0) + if (selectedMonParty == TRADE_PLAYER) PrintTradePartnerPartyNicknames(); break; case 2: - if (gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) - sTradeMenuResourcesPtr->menuRedrawState[side] = 3; + // Wait for the selected pokemon's sprite to move to the correct position + if (gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].callback == SpriteCB_MonIcon) + sTradeMenu->drawSelectedMonState[whichParty] = 3; break; case 3: - CopyToBgTilemapBufferRect_ChangePalette(1, sTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); + // Redisplay the bg box + CopyToBgTilemapBufferRect_ChangePalette(1, sTradeMovesBoxTilemap, selectedMonParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].x = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].y = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].x2 = 0; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].y2 = 0; - nameStringWidth = GetNicknameStringWidthByPartyAndMonIdx(nickname, whichParty, partyIdx); - AddTextPrinterParameterized3((side * 2) + 14, FONT_SMALL, (80 - nameStringWidth) / 2, 4, sTextColor_PartyMonNickname, 0, nickname); - BuildMovesString(movesString, whichParty, partyIdx); - AddTextPrinterParameterized4((side * 2) + 15, FONT_NORMAL_COPY_1, 0, 0, 0, 0, sTextColor_PartyMonNickname, 0, movesString); - PutWindowTilemap((side * 2) + 14); - CopyWindowToVram((side * 2) + 14, COPYWIN_FULL); - PutWindowTilemap((side * 2) + 15); - CopyWindowToVram((side * 2) + 15, COPYWIN_FULL); - sTradeMenuResourcesPtr->menuRedrawState[side]++; + + // Finalize the selected pokemon's position + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].x = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].y = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].x2 = 0; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].y2 = 0; + + // Print selected pokemon's name and moves + nameStringWidth = GetMonNicknameWidth(nickname, selectedMonParty, partyIdx); + AddTextPrinterParameterized3((whichParty * 2) + 14, FONT_SMALL, (80 - nameStringWidth) / 2, 4, sTextColor_PartyMonNickname, 0, nickname); + BufferMovesString(movesString, selectedMonParty, partyIdx); + AddTextPrinterParameterized4((whichParty * 2) + 15, FONT_NORMAL_COPY_1, 0, 0, 0, 0, sTextColor_PartyMonNickname, 0, movesString); + PutWindowTilemap((whichParty * 2) + 14); + CopyWindowToVram((whichParty * 2) + 14, COPYWIN_FULL); + PutWindowTilemap((whichParty * 2) + 15); + CopyWindowToVram((whichParty * 2) + 15, COPYWIN_FULL); + + sTradeMenu->drawSelectedMonState[whichParty]++; break; case 4: - PrintLevelAndGenderDirectlyOnVram(side, partyIdx, gUnknown_8262055[side][0] + 4, gUnknown_8262055[side][1] + 1, gUnknown_8262055[side][0], gUnknown_8262055[side][1]); - sTradeMenuResourcesPtr->menuRedrawState[side]++; + PrintLevelAndGender(whichParty, partyIdx, + sSelectedMonLevelGenderCoords[whichParty][0] + 4, + sSelectedMonLevelGenderCoords[whichParty][1] + 1, + sSelectedMonLevelGenderCoords[whichParty][0], + sSelectedMonLevelGenderCoords[whichParty][1]); + sTradeMenu->drawSelectedMonState[whichParty]++; break; } } -static u8 GetNicknameStringWidthByPartyAndMonIdx(u8 *dest, u8 whichParty, u8 partyIdx) +static u8 GetMonNicknameWidth(u8 *dest, u8 whichParty, u8 partyIdx) { u8 nickname[POKEMON_NAME_LENGTH]; - if (whichParty == 0) + if (whichParty == TRADE_PLAYER) GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname); else GetMonData(&gEnemyParty[partyIdx], MON_DATA_NICKNAME, nickname); @@ -2177,23 +2332,19 @@ static u8 GetNicknameStringWidthByPartyAndMonIdx(u8 *dest, u8 whichParty, u8 par return GetStringWidth(FONT_SMALL, dest, GetFontAttribute(FONT_SMALL, FONTATTR_LETTER_SPACING)); } -static void BuildMovesString(u8 *movesString, u8 whichParty, u8 whichMon) +static void BufferMovesString(u8 *movesString, u8 whichParty, u8 partyIdx) { u16 moves[MAX_MON_MOVES]; u16 i; - if (!sTradeMenuResourcesPtr->eggFlags[whichParty][whichMon]) + if (!sTradeMenu->isEgg[whichParty][partyIdx]) { for (i = 0; i < MAX_MON_MOVES; i++) { - if (!whichParty) - { - moves[i] = GetMonData(&gPlayerParty[whichMon], i + MON_DATA_MOVE1, NULL); - } + if (whichParty == TRADE_PLAYER) + moves[i] = GetMonData(&gPlayerParty[partyIdx], i + MON_DATA_MOVE1, NULL); else - { - moves[i] = GetMonData(&gEnemyParty[whichMon], i + MON_DATA_MOVE1, NULL); - } + moves[i] = GetMonData(&gEnemyParty[partyIdx], i + MON_DATA_MOVE1, NULL); } StringCopy(movesString, sText_Dummy); @@ -2201,9 +2352,7 @@ static void BuildMovesString(u8 *movesString, u8 whichParty, u8 whichMon) for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE) - { StringAppend(movesString, gMoveNames[moves[i]]); - } StringAppend(movesString, sText_Newline); } @@ -2231,9 +2380,9 @@ static void PrintPartyNicknames(u8 whichParty) { u8 buff[20]; u8 nickname[30]; - struct Pokemon * party = whichParty == 0 ? gPlayerParty : gEnemyParty; + struct Pokemon * party = (whichParty == TRADE_PLAYER) ? gPlayerParty : gEnemyParty; u8 i; - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { GetMonData(&party[i], MON_DATA_NICKNAME, buff); StringCopy_Nickname(nickname, buff); @@ -2241,41 +2390,41 @@ static void PrintPartyNicknames(u8 whichParty) } } -static void PrintLevelAndGenderDirectlyOnVram(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 winLeft, u8 winTop) +static void PrintLevelAndGender(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 winLeft, u8 winTop) { u8 level; - u32 tileNum; + u32 symbolTile; u8 gender; - u8 nickname[12]; + u8 nickname[POKEMON_NAME_LENGTH]; CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, winLeft, winTop, 6, 3, 0); CopyBgTilemapBufferToVram(1); - if (whichParty == 0) + if (whichParty == TRADE_PLAYER) level = GetMonData(&gPlayerParty[monIdx], MON_DATA_LEVEL, NULL); else level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL); - if (sTradeMenuResourcesPtr->eggFlags[whichParty][monIdx] == 0) + if (!sTradeMenu->isEgg[whichParty][monIdx]) { if (level / 10 != 0) - sTradeMenuResourcesPtr->tilemapBuffer[x + (y * 32)] = (level / 10) + 0x60; + sTradeMenu->tilemapBuffer[x + (y * 32)] = (level / 10) + 0x60; - sTradeMenuResourcesPtr->tilemapBuffer[x + (y * 32) + 1] = (level % 10) + 0x70; + sTradeMenu->tilemapBuffer[x + (y * 32) + 1] = (level % 10) + 0x70; } else { - sTradeMenuResourcesPtr->tilemapBuffer[x + (y * 32) - 32] = sTradeMenuResourcesPtr->tilemapBuffer[x + (y * 32) - 33]; - sTradeMenuResourcesPtr->tilemapBuffer[x + (y * 32) - 31] = sTradeMenuResourcesPtr->tilemapBuffer[x + (y * 32) - 36] | 0x400; + sTradeMenu->tilemapBuffer[x + (y * 32) - 32] = sTradeMenu->tilemapBuffer[x + (y * 32) - 33]; + sTradeMenu->tilemapBuffer[x + (y * 32) - 31] = sTradeMenu->tilemapBuffer[x + (y * 32) - 36] | 0x400; } - if (sTradeMenuResourcesPtr->eggFlags[whichParty][monIdx]) + if (sTradeMenu->isEgg[whichParty][monIdx]) { - tileNum = 0x480; + symbolTile = 0x480; } else { - if (whichParty == 0) + if (whichParty == TRADE_PLAYER) { gender = GetMonGender(&gPlayerParty[monIdx]); GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname); @@ -2289,38 +2438,32 @@ static void PrintLevelAndGenderDirectlyOnVram(u8 whichParty, u8 monIdx, u8 x, u8 switch (gender) { case MON_MALE: - tileNum = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83; + symbolTile = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83; break; case MON_FEMALE: - tileNum = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83; + symbolTile = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83; break; default: - tileNum = 0x83; + symbolTile = 0x83; break; } } - sTradeMenuResourcesPtr->tilemapBuffer[(y - 1) * 32 + x + 1] = tileNum; + sTradeMenu->tilemapBuffer[(y - 1) * 32 + x + 1] = symbolTile; } -static void PrintPartyLevelsAndGendersDirectlyOnVram(u8 whichParty) +static void PrintPartyLevelsAndGenders(u8 whichParty) { s32 i; - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { - const u8 (*drawCoords)[2]; - const u8 (*winCoords)[2]; - u32 r0 = 3 * whichParty; - const u8 (*drawCoords_p)[2][2] = sTradeMenuGenderLevelPrintCoords; - drawCoords = drawCoords_p[r0]; - winCoords = sTradeMenuGenderLevelWindowCoords[r0]; - - PrintLevelAndGenderDirectlyOnVram( + s32 j = i + PARTY_SIZE * whichParty; + PrintLevelAndGender( whichParty, i, - drawCoords[i][0], - drawCoords[i][1], - winCoords[i][0], - winCoords[i][1] + sTradeMonLevelCoords[j][0], + sTradeMonLevelCoords[j][1], + sTradeMonBoxCoords[j][0], + sTradeMonBoxCoords[j][1] ); } } @@ -2329,13 +2472,13 @@ static void ShowTradePartyMonIcons(u8 whichParty) { int i; - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { - gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].invisible = FALSE; - gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; - gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; - gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].x2 = 0; - gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].y2 = 0; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].invisible = FALSE; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].x2 = 0; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].y2 = 0; } } @@ -2345,369 +2488,371 @@ static void PrintTradePartnerPartyNicknames(void) PrintPartyNicknames(1); } +// Returning to the party selection screen from the "is this trade ok?" screen static void RedrawPartyWindow(u8 whichParty) { CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - PrintPartyLevelsAndGendersDirectlyOnVram(whichParty); + PrintPartyLevelsAndGenders(whichParty); PrintPartyNicknames(whichParty); ShowTradePartyMonIcons(whichParty); - RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], (void *)OBJ_VRAM0 + 32 * sTradeMenuResourcesPtr->cursorStartTile, 24); - sTradeMenuResourcesPtr->menuRedrawState[whichParty] = 0; + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], (void *)OBJ_VRAM0 + 32 * sTradeMenu->bottomTextTileStart, 24); + sTradeMenu->drawSelectedMonState[whichParty] = 0; } -static void TradeMenuAction_Summary(u8 taskId) +static void Task_DrawSelectionSummary(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -static void TradeMenuAction_Trade(u8 taskId) +static void Task_DrawSelectionTrade(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -static void ScheduleLinkTaskWithDelay(u16 delay, u8 kind) +static void QueueAction(u16 delay, u8 actionId) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->queuedActions); i++) { - if (!sTradeMenuResourcesPtr->cron[i].active) + // Find first available spot + if (!sTradeMenu->queuedActions[i].active) { - sTradeMenuResourcesPtr->cron[i].delay = delay; - sTradeMenuResourcesPtr->cron[i].kind = kind; - sTradeMenuResourcesPtr->cron[i].active = TRUE; + sTradeMenu->queuedActions[i].delay = delay; + sTradeMenu->queuedActions[i].actionId = actionId; + sTradeMenu->queuedActions[i].active = TRUE; break; } } } -static void RunScheduledLinkTasks(void) +static void DoQueuedActions(void) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->queuedActions); i++) { - if (sTradeMenuResourcesPtr->cron[i].active) + if (sTradeMenu->queuedActions[i].active) { - if (sTradeMenuResourcesPtr->cron[i].delay != 0) + if (sTradeMenu->queuedActions[i].delay != 0) { - sTradeMenuResourcesPtr->cron[i].delay--; + sTradeMenu->queuedActions[i].delay--; } else { - switch (sTradeMenuResourcesPtr->cron[i].kind) + switch (sTradeMenu->queuedActions[i].actionId) { - case 0: - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); + case QUEUE_SEND_DATA: + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenu->linkData, 20); break; - case 1: - PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); + case QUEUE_STANDBY: + PrintTradeMessage(MSG_STANDBY); break; - case 2: - PrintTradeErrorOrStatusMessage(TRADESTATMSG_ONLYMON); + case QUEUE_ONLY_MON1: + PrintTradeMessage(MSG_ONLY_MON1); break; - case 3: - case 4: - case 5: - PrintTradeErrorOrStatusMessage(TRADESTATMSG_ONLYMON2); + case QUEUE_ONLY_MON2: + case QUEUE_UNUSED1: + case QUEUE_UNUSED2: + PrintTradeMessage(MSG_ONLY_MON2); break; - case 6: - PrintTradeErrorOrStatusMessage(TRADESTATMSG_YOURMONCANTBETRADED); + case QUEUE_MON_CANT_BE_TRADED: + PrintTradeMessage(MSG_MON_CANT_BE_TRADED); break; - case 7: - PrintTradeErrorOrStatusMessage(TRADESTATMSG_EGGCANTBETRADED); + case QUEUE_EGG_CANT_BE_TRADED: + PrintTradeMessage(MSG_EGG_CANT_BE_TRADED); break; - case 8: - PrintTradeErrorOrStatusMessage(TRADESTATMSG_PARTNERMONCANTBETRADED); + case QUEUE_FRIENDS_MON_CANT_BE_TRADED: + PrintTradeMessage(MSG_FRIENDS_MON_CANT_BE_TRADED); break; } - sTradeMenuResourcesPtr->cron[i].active = FALSE; + sTradeMenu->queuedActions[i].active = FALSE; } } } } -static void PrintTradeErrorOrStatusMessage(u8 idx) +static void PrintTradeMessage(u8 messageId) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, FONT_NORMAL_COPY_2, sTradeErrorOrStatusMessagePtrs[idx], 0, 2, 0xFF, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL_COPY_2, sMessages[messageId], 0, 2, TEXT_SKIP_DRAW, NULL); DrawTextBorderOuter(0, 0x014, 12); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_FULL); } -static bool8 LoadUISprites(void) +static bool8 LoadUISpriteGfx(void) { struct SpriteSheet sheet; - if (sTradeMenuResourcesPtr->loadUISpritesState < 14) + if (sTradeMenu->timer < NUM_MENU_TEXT_SPRITES) { - sheet.data = sSpriteTextTilePtrs[sTradeMenuResourcesPtr->loadUISpritesState]; + sheet.data = sMenuTextTileBuffers[sTradeMenu->timer]; sheet.size = 0x100; - sheet.tag = 200 + sTradeMenuResourcesPtr->loadUISpritesState; + sheet.tag = GFXTAG_MENU_TEXT + sTradeMenu->timer; } - switch (sTradeMenuResourcesPtr->loadUISpritesState) + switch (sTradeMenu->timer) { - case 0 ... 7: + case GFXTAG_PLAYER_NAME_L: + case GFXTAG_PLAYER_NAME_M: + case GFXTAG_PLAYER_NAME_R: + case GFXTAG_PARTNER_NAME_L: + case GFXTAG_PARTNER_NAME_M: + case GFXTAG_PARTNER_NAME_R: + case GFXTAG_CANCEL_L: + case GFXTAG_CANCEL_R: LoadSpriteSheet(&sheet); - sTradeMenuResourcesPtr->loadUISpritesState++; + sTradeMenu->timer++; break; - case 8: - sTradeMenuResourcesPtr->cursorStartTile = LoadSpriteSheet(&sheet); - sTradeMenuResourcesPtr->loadUISpritesState++; + case GFXTAG_CHOOSE_PKMN_L: + sTradeMenu->bottomTextTileStart = LoadSpriteSheet(&sheet); + sTradeMenu->timer++; break; - case 9 ... 13: + case GFXTAG_CHOOSE_PKMN_M: + case GFXTAG_CHOOSE_PKMN_R: + case GFXTAG_CHOOSE_PKMN_EMPTY_1: + case GFXTAG_CHOOSE_PKMN_EMPTY_2: + case GFXTAG_CHOOSE_PKMN_EMPTY_3: LoadSpriteSheet(&sheet); - sTradeMenuResourcesPtr->loadUISpritesState++; + sTradeMenu->timer++; break; - case 14: - LoadSpritePalette(&sSpritePalette_Text); - sTradeMenuResourcesPtr->loadUISpritesState++; + case NUM_MENU_TEXT_SPRITES: + LoadSpritePalette(&sSpritePalette_MenuText); + sTradeMenu->timer++; break; - case 15: - LoadSpritePalette(&sTradeButtons_SpritePal); - sTradeMenuResourcesPtr->loadUISpritesState++; + case NUM_MENU_TEXT_SPRITES + 1: + LoadSpritePalette(&sCursor_SpritePalette); + sTradeMenu->timer++; break; - case 16: - LoadSpriteSheet(&sTradeButtons_SpriteSheet); - sTradeMenuResourcesPtr->loadUISpritesState++; + case NUM_MENU_TEXT_SPRITES + 2: + LoadSpriteSheet(&sCursor_SpriteSheet); + sTradeMenu->timer++; break; - case 17: - sTradeMenuResourcesPtr->loadUISpritesState = 0; + case NUM_MENU_TEXT_SPRITES + 3: + sTradeMenu->timer = 0; return TRUE; } return FALSE; } -static void RenderTextToVramViaBuffer(const u8 *name, u8 *dest, u8 unused) +static void DrawBottomRowText(const u8 *name, u8 *dest, u8 unused) { DrawTextWindowAndBufferTiles(name, dest, 0, 0, gDecompressionBuffer, 6); } -static void ComputePartyTradeableFlags(u8 who) +static void ComputePartyTradeableFlags(u8 whichParty) { int i; - switch (who) + switch (whichParty) { - case 0: - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[who]; i++) + case TRADE_PLAYER: + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) { - sTradeMenuResourcesPtr->battleableFlags[who][i] = FALSE; - sTradeMenuResourcesPtr->eggFlags[who][i] = TRUE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = TRUE; } else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) { - sTradeMenuResourcesPtr->battleableFlags[who][i] = FALSE; - sTradeMenuResourcesPtr->eggFlags[who][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } else { - sTradeMenuResourcesPtr->battleableFlags[who][i] = TRUE; - sTradeMenuResourcesPtr->eggFlags[who][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = TRUE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } } break; - case 1: - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[who]; i++) + case TRADE_PARTNER: + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) { - sTradeMenuResourcesPtr->battleableFlags[who][i] = FALSE; - sTradeMenuResourcesPtr->eggFlags[who][i] = TRUE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = TRUE; } else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) { - sTradeMenuResourcesPtr->battleableFlags[who][i] = FALSE; - sTradeMenuResourcesPtr->eggFlags[who][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } else { - sTradeMenuResourcesPtr->battleableFlags[who][i] = TRUE; - sTradeMenuResourcesPtr->eggFlags[who][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = TRUE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } } break; } } -static void ComputePartyHPBarLevels(u8 who) +static void ComputePartyHPBarLevels(u8 whichParty) { u16 i, curHp, maxHp; - switch (who) + switch (whichParty) { - case 0: - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) + case TRADE_PLAYER: + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - sTradeMenuResourcesPtr->hpBarLevels[0][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenu->hpBarLevels[TRADE_PLAYER][i] = GetHPBarLevel(curHp, maxHp); } break; - case 1: - for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) + case TRADE_PARTNER: + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); - sTradeMenuResourcesPtr->hpBarLevels[1][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenu->hpBarLevels[TRADE_PARTNER][i] = GetHPBarLevel(curHp, maxHp); } break; } } -static void SetMonIconsAnimByHPBarLevel(void) +static void SetTradePartyHPBarSprites(void) { int i, j; for (i = 0; i < 2; i++) { - for (j = 0; j < sTradeMenuResourcesPtr->partyCounts[i]; j++) - { - SetPartyHPBarSprite(&gSprites[sTradeMenuResourcesPtr->partyIcons[i][j]], 4 - sTradeMenuResourcesPtr->hpBarLevels[i][j]); - } + for (j = 0; j < sTradeMenu->partyCounts[i]; j++) + SetPartyHPBarSprite(&gSprites[sTradeMenu->partySpriteIds[i][j]], 4 - sTradeMenu->hpBarLevels[i][j]); } } -static void CopyGiftRibbonsToSav1(void) +static void SaveTradeGiftRibbons(void) { int i; - for (i = 0; i < 11; i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->giftRibbons); i++) { - if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenuResourcesPtr->giftRibbons[i] != 0) - gSaveBlock1Ptr->giftRibbons[i] = sTradeMenuResourcesPtr->giftRibbons[i]; + if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenu->giftRibbons[i] != 0) + gSaveBlock1Ptr->giftRibbons[i] = sTradeMenu->giftRibbons[i]; } } -static u32 TestWhetherSelectedMonCanBeTraded(struct Pokemon * party, int partyCount, int cursorPos) +static u32 CanTradeSelectedMon(struct Pokemon * playerParty, int partyCount, int monIdx) { - int i, sum; - struct LinkPlayer * player; - int species[6]; - int species2[6]; + int i, numMonsLeft; + struct LinkPlayer * partner; + int species[PARTY_SIZE]; + int species2[PARTY_SIZE]; for (i = 0; i < partyCount; i++) { - species2[i] = GetMonData(&party[i], MON_DATA_SPECIES2); - species[i] = GetMonData(&party[i], MON_DATA_SPECIES); + species2[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES2); + species[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES); } + // Cant trade Eggs or non-Kanto mons if player doesn't have National Dex if (!IsNationalPokedexEnabled()) { - if (species2[cursorPos] > SPECIES_MEW) - { - return 2; - } - if (species2[cursorPos] == SPECIES_NONE) - { - return 3; - } + // See comment below + #ifdef BUGFIX + if (species2[monIdx] == SPECIES_EGG) + return CANT_TRADE_EGG_YET; + #endif + + if (species2[monIdx] > KANTO_SPECIES_END) + return CANT_TRADE_NATIONAL; + + // This is meant to be SPECIES_EGG. There are obviously no circumstances + // where you're allowed to trade SPECIES_NONE, so it wouldn't make sense to + // only check this if the National Dex is missing. SPECIES_EGG will accidentally + // be handled instead by the conditional above. Both of these problems are fixed in Emerald. + #ifndef BUGFIX + if (species2[monIdx] == SPECIES_NONE) + return CANT_TRADE_EGG_YET; + #endif } - player = &gLinkPlayers[GetMultiplayerId() ^ 1]; - if ((player->version & 0xFF) != VERSION_RUBY && - (player->version & 0xFF) != VERSION_SAPPHIRE) + partner = &gLinkPlayers[GetMultiplayerId() ^ 1]; + if ((partner->version & 0xFF) != VERSION_RUBY && + (partner->version & 0xFF) != VERSION_SAPPHIRE) { - if ((player->progressFlagsCopy & 0xF) == 0) + // Does partner not have National Dex + if (!(partner->progressFlagsCopy & 0xF)) { - if (species2[cursorPos] == SPECIES_EGG) - { - return 5; - } + if (species2[monIdx] == SPECIES_EGG) + return CANT_TRADE_PARTNER_EGG_YET; - if (species2[cursorPos] > SPECIES_MEW) - { - return 4; - } + if (species2[monIdx] > KANTO_SPECIES_END) + return CANT_TRADE_INVALID_MON; } } - if (species[cursorPos] == SPECIES_DEOXYS || species[cursorPos] == SPECIES_MEW) + if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW) { - if (!GetMonData(&party[cursorPos], MON_DATA_EVENT_LEGAL)) - { - return 4; - } + if (!GetMonData(&playerParty[monIdx], MON_DATA_EVENT_LEGAL)) + return CANT_TRADE_INVALID_MON; } + // Make Eggs not count for numMonsLeft for (i = 0; i < partyCount; i++) { if (species2[i] == SPECIES_EGG) - { species2[i] = SPECIES_NONE; - } } - for (sum = 0, i = 0; i < partyCount; i++) + // Count alive mons in party, excluding selected trade mon + for (numMonsLeft = 0, i = 0; i < partyCount; i++) { - if (i != cursorPos) - { - sum += species2[i]; - } + if (i != monIdx) + numMonsLeft += species2[i]; } - if (sum != 0) - { - return 0; - } + if (numMonsLeft != 0) + return CAN_TRADE_MON; else - { - return 1; - } + return CANT_TRADE_LAST_MON; } -s32 Trade_CalcLinkPlayerCompatibilityParam(void) +s32 GetGameProgressForLinkTrade(void) { - s32 val; + s32 versionId; // 0: FRLG, 1: RS, 2: Emerald (or anything else) u16 version; if (gReceivedRemoteLinkPlayers) { - val = 0; + versionId = 0; version = (gLinkPlayers[GetMultiplayerId() ^ 1].version & 0xFF); if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) - { - // this value could actually be anything 0 or less - val = 0; - } + versionId = 0; else if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) - { - val = 1; - } + versionId = 1; else - { - val = 2; - } + versionId = 2; - if (val > 0) + // If trading with RSE, both players must have progessed the story enough + if (versionId > 0) { + // Has player finished the Sevii Islands if (gLinkPlayers[GetMultiplayerId()].progressFlagsCopy & 0xF0) { - if (val == 2) + if (versionId == 2) { + // Is RSE partner champion if (gLinkPlayers[GetMultiplayerId() ^ 1].progressFlagsCopy & 0xF0) - { - return 0; - } + return TRADE_BOTH_PLAYERS_READY; else - { - return 2; - } + return TRADE_PARTNER_NOT_READY; } } else { - return 1; + return TRADE_PLAYER_NOT_READY; } } } - return 0; + return TRADE_BOTH_PLAYERS_READY; } static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) @@ -2720,109 +2865,90 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) return FALSE; } -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData playerSub, struct RfuGameCompatibilityData partnerSub, u16 species1, u16 species2, u8 type, u16 species3, u8 isEventLegal) +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal) { - u8 playerHasNationalDex = playerSub.hasNationalDex; - u8 playerIsChampion = playerSub.isChampion; - u8 partnerHasNationalDex = partnerSub.hasNationalDex; - u8 partnerIsChampion = partnerSub.isChampion; - u8 partnerVersion = partnerSub.version; + bool8 playerHasNationalDex = player.hasNationalDex; + bool8 playerCanLinkNationally = player.canLinkNationally; + bool8 partnerHasNationalDex = partner.hasNationalDex; + bool8 partnerCanLinkNationally = partner.canLinkNationally; + u8 partnerVersion = partner.version; bool8 isNotFRLG; if (partnerVersion == VERSION_FIRE_RED || partnerVersion == VERSION_LEAF_GREEN) - { isNotFRLG = FALSE; - } else - { isNotFRLG = TRUE; - } + + // If partner is not using FRLG, both players must have progressed the story + // to a certain point (becoming champion in RSE, finishing the Sevii islands in FRLG) if (isNotFRLG) { - if (!playerIsChampion) - { - return 8; - } - else if (!partnerIsChampion) - { - return 9; - } + if (!playerCanLinkNationally) + return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1; + else if (!partnerCanLinkNationally) + return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2; } - if (IsDeoxysOrMewUntradable(species3, isEventLegal)) - { - return 4; - } + // Cannot trade illegitimate Deoxys/Mew + if (IsDeoxysOrMewUntradable(playerSpecies, isEventLegal)) + return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; - if (species2 == SPECIES_EGG) + if (partnerSpecies == SPECIES_EGG) { - if (species1 != species2) - { - return 2; - } + // If partner is trading an Egg then the player must also be trading an Egg + if (playerSpecies2 != partnerSpecies) + return UR_TRADE_MSG_NOT_EGG; } else { - if (gBaseStats[species1].type1 != type && gBaseStats[species1].type2 != type) - { - return 1; - } + // Player's Pokémon must be of the type the partner requested + if (gBaseStats[playerSpecies2].type1 != requestedType + && gBaseStats[playerSpecies2].type2 != requestedType) + return UR_TRADE_MSG_NOT_MON_PARTNER_WANTS; } - if (species1 == SPECIES_EGG && species1 != species2) - { - return 3; - } + // If the player is trading an Egg then the partner must also be trading an Egg + // Odd that this wasn't checked earlier, as by this point we know either the partner doesn't have an Egg or that both do. + if (playerSpecies2 == SPECIES_EGG && playerSpecies2 != partnerSpecies) + return UR_TRADE_MSG_MON_CANT_BE_TRADED_1; + // If the player doesn't have the National Dex then Eggs and non-Kanto Pokémon can't be traded if (!playerHasNationalDex) { - if (species1 == SPECIES_EGG) - { - return 6; - } + if (playerSpecies2 == SPECIES_EGG) + return UR_TRADE_MSG_EGG_CANT_BE_TRADED; - if (species1 > SPECIES_MEW) - { - return 4; - } + if (playerSpecies2 > KANTO_SPECIES_END) + return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; - if (species2 > SPECIES_MEW) - { - return 5; - } + if (partnerSpecies > KANTO_SPECIES_END) + return UR_TRADE_MSG_PARTNERS_MON_CANT_BE_TRADED; } - if (!partnerHasNationalDex && species1 > SPECIES_MEW) - { - return 7; - } + // If the partner doesn't have the National Dex then the player's offer has to be a Kanto Pokémon + if (!partnerHasNationalDex && playerSpecies2 > KANTO_SPECIES_END) + return UR_TRADE_MSG_PARTNER_CANT_ACCEPT_MON; - return 0; + // Trade is allowed + return UR_TRADE_MSG_NONE; } -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData playerSub, u16 species2, u16 species, u8 isEventLegal) +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal) { - u8 canTradeEggAndNational = playerSub.hasNationalDex; + bool8 hasNationalDex = player.hasNationalDex; if (IsDeoxysOrMewUntradable(species, isEventLegal)) - { - return 1; - } + return CANT_REGISTER_MON; - if (canTradeEggAndNational) - { - return 0; - } + if (hasNationalDex) + return CAN_REGISTER_MON; + // Eggs can only be traded if the player has the National Dex if (species2 == SPECIES_EGG) - { - return 2; - } + return CANT_REGISTER_EGG; - if (species2 > SPECIES_MEW && species2 != SPECIES_EGG) - { - return 1; - } + if (species2 > KANTO_SPECIES_END && species2 != SPECIES_EGG) + return CANT_REGISTER_MON; - return 0; + return CAN_REGISTER_MON; } diff --git a/src/union_room.c b/src/union_room.c index decc1eb27..48545c01c 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1176,7 +1176,7 @@ static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group * data, { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) return UR_TRADE_PLAYER_NOT_READY; - else if (partner->rfu.data.compatibility.isChampion) + else if (partner->rfu.data.compatibility.canLinkNationally) return UR_TRADE_READY; } else diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c index b129c6c87..ab789ca83 100644 --- a/src/union_room_chat_display.c +++ b/src/union_room_chat_display.c @@ -1195,7 +1195,7 @@ static void PrintKeyboardSwapTextsOnWin3(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); DrawTextBorderOuter(3, 1, 13); - UnionRoomAndTradeMenuPrintOptions(3, FONT_NORMAL, 14, 5, sKeyboardSwapTexts); + PrintMenuTable(3, FONT_NORMAL, 14, 5, sKeyboardSwapTexts); Menu_InitCursor(3, FONT_NORMAL, 0, 0, 14, 5, GetCurrentKeyboardPage()); PutWindowTilemap(3); } From fd81669091111f505131bc0bc1c3eb48734fbc80 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 16 Dec 2022 09:46:31 -0500 Subject: [PATCH 04/33] Remove old move descriptions --- data/text/move_descriptions.inc | 1062 ------------------------------- 1 file changed, 1062 deletions(-) delete mode 100644 data/text/move_descriptions.inc diff --git a/data/text/move_descriptions.inc b/data/text/move_descriptions.inc deleted file mode 100644 index ce0d91d19..000000000 --- a/data/text/move_descriptions.inc +++ /dev/null @@ -1,1062 +0,0 @@ -gMoveDescription_Pound:: - .string "A physical attack\ndelivered with a\nlong tail or a\nforeleg, etc.$" - -gMoveDescription_KarateChop:: - .string "The foe is attacked\nwith a sharp chop.\nIt has a high\ncritical-hit ratio.$" - -gMoveDescription_DoubleSlap:: - .string "The foe is slapped\nrepeatedly, back\nand forth, two to\nfive times.$" - -gMoveDescription_CometPunch:: - .string "The foe is hit with\na flurry of punches\nthat strike two to\nfive times.$" - -gMoveDescription_MegaPunch:: - .string "The foe is slugged\nby a punch thrown\nwith muscle-packed\npower.$" - -gMoveDescription_PayDay:: - .string "Numerous coins are\nhurled at the foe.\nMoney is earned\nafter battle.$" - -gMoveDescription_FirePunch:: - .string "The foe is punched\nwith a fiery fist.\nIt may leave the\nfoe with a burn.$" - -gMoveDescription_IcePunch:: - .string "The foe is punched\nwith an icy fist.\nIt may leave the\nfoe frozen.$" - -gMoveDescription_ThunderPunch:: - .string "The foe is punched\nwith an electrified\nfist. It may leave\nthe foe paralyzed.$" - -gMoveDescription_Scratch:: - .string "Hard, pointed, and\nsharp claws rake\nthe foe.$" - -gMoveDescription_ViceGrip:: - .string "Huge, impressive\npincers grip and\nsqueeze the foe.$" - -gMoveDescription_Guillotine:: - .string "A vicious tearing\nattack with pincers.\nThe foe will faint\nif it hits.$" - -gMoveDescription_RazorWind:: - .string "Blades of wind hit\nthe foe on the 2nd\nturn. It has a high\ncritical-hit ratio.$" - -gMoveDescription_SwordsDance:: - .string "A frenetic dance of\nfighting. It sharply\nraises the ATTACK\nstat.$" - -gMoveDescription_Cut:: - .string "A basic attack.\nIt can be used to\ncut down thin trees\nand grass.$" - -gMoveDescription_Gust:: - .string "Strikes the foe\nwith a gust of wind\nwhipped up by\nwings.$" - -gMoveDescription_WingAttack:: - .string "The foe is struck\nwith large, imposing\nwings spread wide.$" - -gMoveDescription_Whirlwind:: - .string "The foe is made to\nswitch out with an\nally. In the wild,\nthe battle ends.$" - -gMoveDescription_Fly:: - .string "A 2-turn move that\nhits on the 2nd\nturn. Use it to fly\nto any known town.$" - -gMoveDescription_Bind:: - .string "A long body or\ntentacles are used\nto bind the foe for\ntwo to five turns.$" - -gMoveDescription_Slam:: - .string "The foe is struck\nwith a long tail,\nvines, etc.$" - -gMoveDescription_VineWhip:: - .string "The foe is struck\nwith slender, whip-\nlike vines.$" - -gMoveDescription_Stomp:: - .string "The foe is stomped\nwith a big foot.\nIt may make the\nfoe flinch.$" - -gMoveDescription_DoubleKick:: - .string "Two legs are used\nto quickly kick the\nfoe twice in one\nturn.$" - -gMoveDescription_MegaKick:: - .string "The foe is attacked\nby a kick fired\nwith muscle-packed\npower.$" - -gMoveDescription_JumpKick:: - .string "The user jumps up\nhigh, then kicks.\nIf it misses, the\nuser hurts itself.$" - -gMoveDescription_RollingKick:: - .string "A quick kick from a\nrolling spin.\nIt may make the\nfoe flinch.$" - -gMoveDescription_SandAttack:: - .string "A lot of sand is\nhurled in the foe's\nface, reducing its\naccuracy.$" - -gMoveDescription_Headbutt:: - .string "The user sticks its\nhead out and rams.\nIt may make the\nfoe flinch.$" - -gMoveDescription_HornAttack:: - .string "The foe is jabbed\nwith a sharply\npointed horn to\ninflict damage.$" - -gMoveDescription_FuryAttack:: - .string "The foe is jabbed\nrepeatedly with a\nhorn or beak two to\nfive times.$" - -gMoveDescription_HornDrill:: - .string "The horn is rotated\nlike a drill to ram.\nThe foe will faint\nif it hits.$" - -gMoveDescription_Tackle:: - .string "A physical attack\nin which the user\ncharges, full body,\ninto the foe.$" - -gMoveDescription_BodySlam:: - .string "The user drops its\nfull body on the\nfoe. It may leave\nthe foe paralyzed.$" - -gMoveDescription_Wrap:: - .string "A long body or\nvines are used to\nwrap the foe for\ntwo to five turns.$" - -gMoveDescription_TakeDown:: - .string "A reckless, full-\nbody charge attack\nthat also hurts the\nuser a little.$" - -gMoveDescription_Thrash:: - .string "The user rampages\nabout for two to\nthree turns, then\nbecomes confused.$" - -gMoveDescription_DoubleEdge:: - .string "A reckless, life-\nrisking tackle that\nalso hurts the user\na little.$" - -gMoveDescription_TailWhip:: - .string "The user wags its\ntail cutely, making\nthe foe lower its\nDEFENSE stat.$" - -gMoveDescription_PoisonSting:: - .string "The foe is stabbed\nwith a toxic barb,\netc. It may poison\nthe foe.$" - -gMoveDescription_Twineedle:: - .string "The foe is stabbed\ntwice with foreleg\nstingers. It may\npoison the foe.$" - -gMoveDescription_PinMissile:: - .string "Sharp pins are shot\nat the foe and hit\ntwo to five times\nat once.$" - -gMoveDescription_Leer:: - .string "The foe is given an\nintimidating look\nthat lowers its\nDEFENSE stat.$" - -gMoveDescription_Bite:: - .string "The user bites with\nvicious fangs.\nIt may make the\nfoe flinch.$" - -gMoveDescription_Growl:: - .string "The user growls in\na cute way, making\nthe foe lower its\nATTACK stat.$" - -gMoveDescription_Roar:: - .string "The foe is made to\nswitch out with an\nally. In the wild,\nthe battle ends.$" - -gMoveDescription_Sing:: - .string "A soothing song\nin a calming voice\nlulls the foe into\na deep slumber.$" - -gMoveDescription_Supersonic:: - .string "The user generates\nodd sound waves.\nIt may confuse the\nfoe.$" - -gMoveDescription_SonicBoom:: - .string "The foe is hit with\na shock wave that\nalways inflicts 20-\nHP damage.$" - -gMoveDescription_Disable:: - .string "For a few turns,\nit prevents the foe\nfrom using the move\nit last used.$" - -gMoveDescription_Acid:: - .string "The foe is sprayed\nwith a harsh, hide-\nmelting acid that\nmay lower DEFENSE.$" - -gMoveDescription_Ember:: - .string "The foe is attacked\nwith small flames.\nThe foe may suffer\na burn.$" - -gMoveDescription_Flamethrower:: - .string "The foe is scorched\nwith intense flames.\nThe foe may suffer\na burn.$" - -gMoveDescription_Mist:: - .string "The ally party is\nprotected by a\nmist that prevents\nstat reductions.$" - -gMoveDescription_WaterGun:: - .string "The foe is struck\nwith a lot of water\nexpelled forcibly\nfrom the mouth.$" - -gMoveDescription_HydroPump:: - .string "A high volume of\nwater is blasted at\nthe foe under great\npressure.$" - -gMoveDescription_Surf:: - .string "A big wave crashes\ndown on the foe.\nCan also be used\nfor crossing water.$" - -gMoveDescription_IceBeam:: - .string "The foe is struck\nwith an icy beam.\nIt may freeze the\nfoe solid.$" - -gMoveDescription_Blizzard:: - .string "The foe is blasted\nwith a blizzard.\nIt may freeze the\nfoe solid.$" - -gMoveDescription_Psybeam:: - .string "A peculiar ray is\nshot at the foe.\nIt may leave the\nfoe confused.$" - -gMoveDescription_BubbleBeam:: - .string "A spray of bubbles\nstrikes the foe.\nIt may lower the\nfoe's SPEED stat.$" - -gMoveDescription_AuroraBeam:: - .string "A rainbow-colored\nattack beam.\nIt may lower the\nfoe's ATTACK stat.$" - -gMoveDescription_HyperBeam:: - .string "A severely damaging\nattack that makes\nthe user rest on\nthe next turn.$" - -gMoveDescription_Peck:: - .string "The foe is jabbed\nwith a sharply\npointed beak or\nhorn.$" - -gMoveDescription_DrillPeck:: - .string "A corkscrewing\nattack with the\nsharp beak acting\nas a drill.$" - -gMoveDescription_Submission:: - .string "A reckless, full-\nbody throw attack\nthat also hurts the\nuser a little.$" - -gMoveDescription_LowKick:: - .string "A low, tripping kick\nthat inflicts more\ndamage on heavier\nfoes.$" - -gMoveDescription_Counter:: - .string "A retaliation move\nthat counters any\nphysical hit with\ndouble the damage.$" - -gMoveDescription_SeismicToss:: - .string "A gravity-fed throw\nthat causes damage\nmatching the user's\nlevel.$" - -gMoveDescription_Strength:: - .string "The foe is slugged\nat maximum power.\nCan also be used\nto move boulders.$" - -gMoveDescription_Absorb:: - .string "An attack that\nabsorbs half the\ndamage it inflicted\nto restore HP.$" - -gMoveDescription_MegaDrain:: - .string "A tough attack that\ndrains half the\ndamage it inflicted\nto restore HP.$" - -gMoveDescription_LeechSeed:: - .string "A seed is planted\non the foe to steal\nsome HP for the \nuser on every turn.$" - -gMoveDescription_Growth:: - .string "The user's body is\nforced to grow,\nraising the SP.\nATK stat.$" - -gMoveDescription_RazorLeaf:: - .string "The foe is hit with\na cutting leaf.\nIt has a high\ncritical-hit ratio.$" - -gMoveDescription_SolarBeam:: - .string "A 2-turn move that\nblasts the foe with\nabsorbed energy in\nthe 2nd turn.$" - -gMoveDescription_PoisonPowder:: - .string "A cloud of toxic\ndust is scattered.\nIt may poison the\nfoe.$" - -gMoveDescription_StunSpore:: - .string "Paralyzing dust is\nscattered wildly.\nIt may paralyze\nthe foe.$" - -gMoveDescription_SleepPowder:: - .string "A sleep-inducing\ndust is scattered\nin high volume\naround a foe.$" - -gMoveDescription_PetalDance:: - .string "The user attacks\nwith petals for two\nto three turns,\nthen gets confused.$" - -gMoveDescription_StringShot:: - .string "The foe is bound\nwith strings shot\nfrom the mouth to\nreduce its SPEED.$" - -gMoveDescription_DragonRage:: - .string "The foe is hit with\na shock wave that\nalways inflicts 40-\nHP damage.$" - -gMoveDescription_FireSpin:: - .string "The foe is trapped\nin an intense spiral\nof fire that rages\ntwo to five turns.$" - -gMoveDescription_ThunderShock:: - .string "An electric shock\nattack that may\nalso leave the foe\nparalyzed.$" - -gMoveDescription_Thunderbolt:: - .string "A strong electrical\nattack that may\nalso leave the foe\nparalyzed.$" - -gMoveDescription_ThunderWave:: - .string "A weak electric\nshock that is sure\nto cause paralysis\nif it hits.$" - -gMoveDescription_Thunder:: - .string "A brutal lightning\nattack that may\nalso leave the foe\nparalyzed.$" - -gMoveDescription_RockThrow:: - .string "The foe is attacked\nwith a shower of\nsmall, easily\nthrown rocks.$" - -gMoveDescription_Earthquake:: - .string "An earthquake that\nstrikes all POKéMON\nin battle excluding\nthe user.$" - -gMoveDescription_Fissure:: - .string "The foe is dropped\ninto a fissure.\nThe foe faints if it\nhits.$" - -gMoveDescription_Dig:: - .string "An attack that hits\non the 2nd turn.\nCan also be used\nto exit dungeons.$" - -gMoveDescription_Toxic:: - .string "A move that badly\npoisons the foe.\nIts poison damage\nworsens every turn.$" - -gMoveDescription_Confusion:: - .string "A weak telekinetic\nattack that may\nalso leave the foe\nconfused.$" - -gMoveDescription_Psychic:: - .string "A strong telekinetic\nattack. It may also\nlower the foe's\nSP. DEF stat.$" - -gMoveDescription_Hypnosis:: - .string "Hypnotic suggestion\nis used to make the\nfoe fall into a\ndeep sleep.$" - -gMoveDescription_Meditate:: - .string "The user meditates\nto awaken its power\nand raise its\nATTACK stat.$" - -gMoveDescription_Agility:: - .string "The user relaxes\nand lightens its\nbody to sharply\nboost its SPEED.$" - -gMoveDescription_QuickAttack:: - .string "An almost invisibly\nfast attack that\nis certain to strike\nfirst.$" - -gMoveDescription_Rage:: - .string "An attack that\nbecomes stronger\neach time the user\nis hit in battle.$" - -gMoveDescription_Teleport:: - .string "Use it to flee from\nany wild POKéMON.\nAlso warps to the\nlast POKé CENTER.$" - -gMoveDescription_NightShade:: - .string "An attack with a\nmirage that inflicts\ndamage matching\nthe user's level.$" - -gMoveDescription_Mimic:: - .string "The user copies the\nmove last used by\nthe foe for the\nrest of the battle.$" - -gMoveDescription_Screech:: - .string "An ear-splitting\nscreech is emitted\nto sharply reduce\nthe foe's DEFENSE.$" - -gMoveDescription_DoubleTeam:: - .string "The user creates\nillusory copies of\nitself to raise its\nevasiveness.$" - -gMoveDescription_Recover:: - .string "A self-healing move\nthat restores HP by\nup to half of the\nuser's maximum HP.$" - -gMoveDescription_Harden:: - .string "The user stiffens\nall the muscles in\nits body to raise\nits DEFENSE stat.$" - -gMoveDescription_Minimize:: - .string "The user compresses\nall the cells in its\nbody to raise its\nevasiveness.$" - -gMoveDescription_Smokescreen:: - .string "An obscuring cloud\nof smoke or ink\nreduces the foe's\naccuracy.$" - -gMoveDescription_ConfuseRay:: - .string "The foe is exposed\nto a sinister ray\nthat triggers\nconfusion.$" - -gMoveDescription_Withdraw:: - .string "The user withdraws\nits body in its hard\nshell, raising its\nDEFENSE stat.$" - -gMoveDescription_DefenseCurl:: - .string "The user curls up\nto conceal weak\nspots and raise its\nDEFENSE stat.$" - -gMoveDescription_Barrier:: - .string "The user creates a\nsturdy wall that\nsharply raises its\nDEFENSE stat.$" - -gMoveDescription_LightScreen:: - .string "A wall of light\ncuts damage from\nSP. ATK attacks\nfor five turns.$" - -gMoveDescription_Haze:: - .string "Eliminates all stat\nchanges among all\nPOKéMON engaged in\nbattle.$" - -gMoveDescription_Reflect:: - .string "A wall of light\ncuts damage from\nphysical attacks\nfor five turns.$" - -gMoveDescription_FocusEnergy:: - .string "The user takes a\ndeep breath and\nfocuses to raise its\ncritical-hit ratio.$" - -gMoveDescription_Bide:: - .string "The user endures\nattacks for two\nturns, then strikes\nback double.$" - -gMoveDescription_Metronome:: - .string "Waggles a finger\nand stimulates the\nbrain into using any\nmove at random.$" - -gMoveDescription_MirrorMove:: - .string "The user counters\nthe move last used\nby the foe with the\nsame move.$" - -gMoveDescription_SelfDestruct:: - .string "The user blows up\nto inflict severe\ndamage, even\nmaking itself faint.$" - -gMoveDescription_EggBomb:: - .string "A large egg is\nhurled with great\nforce at the foe to\ninflict damage.$" - -gMoveDescription_Lick:: - .string "The foe is licked\nand hit with a long\ntongue. It may\nalso paralyze.$" - -gMoveDescription_Smog:: - .string "The foe is attacked\nwith exhaust gases.\nIt may also poison\nthe foe.$" - -gMoveDescription_Sludge:: - .string "Toxic sludge is\nhurled at the foe.\nIt may poison the\ntarget.$" - -gMoveDescription_BoneClub:: - .string "The foe is clubbed\nwith a bone held in\nhand. It may make\nthe foe flinch.$" - -gMoveDescription_FireBlast:: - .string "The foe is hit with\nan intense flame.\nIt may leave the\ntarget with a burn.$" - -gMoveDescription_Waterfall:: - .string "A powerful charge\nattack. It can also\nbe used to climb\na waterfall.$" - -gMoveDescription_Clamp:: - .string "The foe is clamped\nand squeezed by\nthe user's shell for\ntwo to five turns.$" - -gMoveDescription_Swift:: - .string "Star-shaped rays\nthat never miss are\nfired at all foes in\nbattle.$" - -gMoveDescription_SkullBash:: - .string "The user raises its\nDEFENSE in the 1st\nturn, then attacks\nin the 2nd turn.$" - -gMoveDescription_SpikeCannon:: - .string "Sharp spikes are\nfired at the foe to\nstrike two to five\ntimes.$" - -gMoveDescription_Constrict:: - .string "The foe is attacked\nwith long tentacles\nor vines. It may\nlower SPEED.$" - -gMoveDescription_Amnesia:: - .string "Forgets about\nsomething and\nsharply raises\nSP. DEF.$" - -gMoveDescription_Kinesis:: - .string "The user distracts\nthe foe by bending\na spoon. It may\nlower accuracy.$" - -gMoveDescription_SoftBoiled:: - .string "Heals the user by\nup to half its full\nHP. It can be used\nto heal an ally.$" - -gMoveDescription_HiJumpKick:: - .string "A strong jumping\nknee kick. If it\nmisses, the user is\nhurt.$" - -gMoveDescription_Glare:: - .string "The user intimidates\nthe foe with the\ndesign on its belly\nto cause paralysis.$" - -gMoveDescription_DreamEater:: - .string "Absorbs half the\ndamage it inflicted\non a sleeping foe\nto restore HP.$" - -gMoveDescription_PoisonGas:: - .string "The foe is sprayed\nwith a cloud of\ntoxic gas that may\npoison the foe.$" - -gMoveDescription_Barrage:: - .string "Round objects are\nhurled at the foe\nto strike two to\nfive times.$" - -gMoveDescription_LeechLife:: - .string "An attack that\nabsorbs half the\ndamage it inflicted\nto restore HP.$" - -gMoveDescription_LovelyKiss:: - .string "The user forces a\nkiss on the foe\nwith a scary face\nthat induces sleep.$" - -gMoveDescription_SkyAttack:: - .string "A 2nd-turn attack\nmove with a high\ncritical-hit ratio.\nThe foe may flinch.$" - -gMoveDescription_Transform:: - .string "The user transforms\ninto a copy of the\nfoe with even the\nsame move set.$" - -gMoveDescription_Bubble:: - .string "A spray of bubbles\nhits the foe.\nIt may lower the\nfoe's SPEED stat.$" - -gMoveDescription_DizzyPunch:: - .string "The foe is hit with\na rhythmic punch\nthat may leave it\nconfused.$" - -gMoveDescription_Spore:: - .string "The user scatters\nbursts of fine\nspores that induce\nsleep.$" - -gMoveDescription_Flash:: - .string "A blast of light\nthat cuts the foe's\naccuracy. It also\nilluminates caves.$" - -gMoveDescription_Psywave:: - .string "The foe is attacked\nwith an odd, hot\nenergy wave that\nvaries in intensity.$" - -gMoveDescription_Splash:: - .string "The user just flops\nand splashes around\nwithout having any\neffect.$" - -gMoveDescription_AcidArmor:: - .string "The user alters its\ncells to liquefy\nitself and sharply\nraise DEFENSE.$" - -gMoveDescription_Crabhammer:: - .string "A large pincer is\nused to hammer the\nfoe. It has a high\ncritical-hit ratio.$" - -gMoveDescription_Explosion:: - .string "The user explodes\nto inflict terrible\ndamage even while\nfainting itself.$" - -gMoveDescription_FurySwipes:: - .string "The foe is raked\nwith sharp claws or\nscythes two to five\ntimes.$" - -gMoveDescription_Bonemerang:: - .string "The user throws a\nbone that hits the\nfoe once, then once\nagain on return.$" - -gMoveDescription_Rest:: - .string "The user sleeps for\ntwo turns to fully\nrestore HP and heal\nany status problem.$" - -gMoveDescription_RockSlide:: - .string "Large boulders are\nhurled at the foe.\nIt may make the\nfoe flinch.$" - -gMoveDescription_HyperFang:: - .string "The foe is attacked\nwith sharp fangs.\nIt may make the\nfoe flinch.$" - -gMoveDescription_Sharpen:: - .string "The user reduces\nits polygon count\nto sharpen edges\nand raise ATTACK.$" - -gMoveDescription_Conversion:: - .string "The user changes\nits type to match\nthe type of one of\nits moves.$" - -gMoveDescription_TriAttack:: - .string "A simultaneous\n3-beam attack that\nmay paralyze, burn,\nor freeze the foe.$" - -gMoveDescription_SuperFang:: - .string "The user attacks\nwith sharp fangs\nand halves the\nfoe's HP.$" - -gMoveDescription_Slash:: - .string "The foe is slashed\nwith claws, etc.\nIt has a high\ncritical-hit ratio.$" - -gMoveDescription_Substitute:: - .string "The user creates a\ndecoy using one-\nquarter of its full\nHP.$" - -gMoveDescription_Struggle:: - .string "An attack that is\nused only if there\nis no PP. It also\nhurts the user.$" - -gMoveDescription_Sketch:: - .string "This move copies\nthe move last used\nby the foe, then\ndisappears.$" - -gMoveDescription_TripleKick:: - .string "A 3-kick attack\nthat becomes more\npowerful with each\nsuccessive hit.$" - -gMoveDescription_Thief:: - .string "An attack that may\ntake the foe's held\nitem if the user\nisn't holding one.$" - -gMoveDescription_SpiderWeb:: - .string "Ensnares the foe \nwith sticky string\nso it doesn't flee\nor switch out.$" - -gMoveDescription_MindReader:: - .string "The user predicts\nthe foe's action to\nensure its next\nattack hits.$" - -gMoveDescription_Nightmare:: - .string "A sleeping foe is\nshown a nightmare\nthat inflicts some\ndamage every turn.$" - -gMoveDescription_FlameWheel:: - .string "The user makes a\nfiery charge at the\nfoe. It may cause\na burn.$" - -gMoveDescription_Snore:: - .string "An attack that can\nbe used only while\nasleep. It may\ncause flinching.$" - -gMoveDescription_Curse:: - .string "A move that works\ndifferently for the\nGHOST-type and all\nthe other types.$" - -gMoveDescription_Flail:: - .string "A desperate attack\nthat becomes more\npowerful the less\nHP the user has.$" - -gMoveDescription_Conversion2:: - .string "The user changes\ntype to make itself\nresistant to the\nlast attack it took.$" - -gMoveDescription_Aeroblast:: - .string "A vortex of air is\nshot at the foe.\nIt has a high\ncritical-hit ratio.$" - -gMoveDescription_CottonSpore:: - .string "Cotton-like spores\ncling to the foe,\nsharply reducing\nits SPEED stat.$" - -gMoveDescription_Reversal:: - .string "An all-out attack\nthat becomes more\npowerful the less\nHP the user has.$" - -gMoveDescription_Spite:: - .string "A move that cuts\n2 to 5 PP from the\nmove last used by\nthe foe.$" - -gMoveDescription_PowderSnow:: - .string "Blasts the foe with\na snowy gust.\nIt may cause\nfreezing.$" - -gMoveDescription_Protect:: - .string "Enables the user to\nevade all attacks.\nIt may fail if used\nin succession.$" - -gMoveDescription_MachPunch:: - .string "A punch thrown at\nblinding speed.\nIt is certain to\nstrike first.$" - -gMoveDescription_ScaryFace:: - .string "Frightens the foe\nwith a scary face\nto sharply reduce\nits SPEED.$" - -gMoveDescription_FaintAttack:: - .string "The user draws up\nclose to the foe\ndisarmingly, then\nhits without fail.$" - -gMoveDescription_SweetKiss:: - .string "The user kisses\nthe foe with sweet\ncuteness that\ncauses confusion.$" - -gMoveDescription_BellyDrum:: - .string "The user maximizes\nits ATTACK stat at\nthe cost of half\nits full HP.$" - -gMoveDescription_SludgeBomb:: - .string "Filthy sludge is\nhurled at the foe.\nIt may poison the\ntarget.$" - -gMoveDescription_MudSlap:: - .string "Mud is hurled in\nthe foe's face to\ninflict damage and\nlower its accuracy.$" - -gMoveDescription_Octazooka:: - .string "Ink is blasted in\nthe foe's face or\neyes to damage and\nlower accuracy.$" - -gMoveDescription_Spikes:: - .string "A trap of spikes is\nlaid around the\nfoe's party to hurt\nfoes switching in.$" - -gMoveDescription_ZapCannon:: - .string "An electric blast is\nfired like a cannon\nto inflict damage\nand paralyze.$" - -gMoveDescription_Foresight:: - .string "Completely negates\nthe foe's efforts to\nheighten its ability\nto evade.$" - -gMoveDescription_DestinyBond:: - .string "If the user faints,\nthe foe delivering\nthe final hit also\nfaints.$" - -gMoveDescription_PerishSong:: - .string "Any battler that\nhears this faints\nin three turns\nunless it switches.$" - -gMoveDescription_IcyWind:: - .string "A chilling wind is\nused to attack.\nIt also lowers the\nSPEED stat.$" - -gMoveDescription_Detect:: - .string "Enables the user to\nevade all attacks.\nIt may fail if used\nin succession.$" - -gMoveDescription_BoneRush:: - .string "The user strikes\nthe foe with a bone\nin hand two to five\ntimes.$" - -gMoveDescription_LockOn:: - .string "The user locks on\nto the foe, making\nthe next move sure\nto hit.$" - -gMoveDescription_Outrage:: - .string "The user thrashes\nabout for two to\nthree turns, then\nbecomes confused.$" - -gMoveDescription_Sandstorm:: - .string "A 5-turn sandstorm\nthat damages all\ntypes except ROCK,\nGROUND, and STEEL.$" - -gMoveDescription_GigaDrain:: - .string "A harsh attack that\nabsorbs half the\ndamage it inflicted\nto restore HP.$" - -gMoveDescription_Endure:: - .string "The user endures\nany hit with 1 HP\nleft. It may fail if\nused in succession.$" - -gMoveDescription_Charm:: - .string "The foe is charmed\nby the user's cute\nappeals, sharply\ncutting its ATTACK.$" - -gMoveDescription_Rollout:: - .string "A 5-turn rolling\nattack that becomes\nstronger each time\nit hits.$" - -gMoveDescription_FalseSwipe:: - .string "A restrained attack\nthat always leaves\nthe foe with at\nleast 1 HP.$" - -gMoveDescription_Swagger:: - .string "A move that makes\nthe foe confused,\nbut also sharply\nraises its ATTACK.$" - -gMoveDescription_MilkDrink:: - .string "Heals the user by\nup to half its full\nHP. It can be used\nto heal an ally.$" - -gMoveDescription_Spark:: - .string "An electrically\ncharged tackle that\nmay also paralyze\nthe foe.$" - -gMoveDescription_FuryCutter:: - .string "An attack that\ngrows stronger on\neach successive\nhit.$" - -gMoveDescription_SteelWing:: - .string "The foe is hit with\nwings of steel.\nIt may also raise\nthe user's DEFENSE.$" - -gMoveDescription_MeanLook:: - .string "The foe is fixed\nwith a mean look\nthat prevents it\nfrom escaping.$" - -gMoveDescription_Attract:: - .string "If it is the other\ngender, the foe is\nmade infatuated and\nunlikely to attack.$" - -gMoveDescription_SleepTalk:: - .string "While asleep, the\nuser randomly uses\none of the moves it\nknows.$" - -gMoveDescription_HealBell:: - .string "A soothing bell\nchimes to heal the\nstatus problems of\nall allies.$" - -gMoveDescription_Return:: - .string "This attack move\ngrows more powerful\nthe more the user\nlikes its TRAINER.$" - -gMoveDescription_Present:: - .string "The foe is given a\nbooby-trapped gift.\nIt restores HP\nsometimes, however.$" - -gMoveDescription_Frustration:: - .string "This attack move\ngrows more powerful\nthe less the user\nlikes its TRAINER.$" - -gMoveDescription_Safeguard:: - .string "It protects the\nuser's party from\nall status problems\nfor five turns.$" - -gMoveDescription_PainSplit:: - .string "The user adds its\nHP to the foe's HP,\nthen equally shares\nthe total HP.$" - -gMoveDescription_SacredFire:: - .string "A mystical and\npowerful fire\nattack that may\ninflict a burn.$" - -gMoveDescription_Magnitude:: - .string "A ground-shaking\nattack against all\nstanding POKéMON.\nIts power varies.$" - -gMoveDescription_DynamicPunch:: - .string "The foe is punched\nwith the user's full\npower. It confuses\nthe foe if it hits.$" - -gMoveDescription_Megahorn:: - .string "A brutal ramming\nattack delivered\nwith a tough and\nimpressive horn.$" - -gMoveDescription_DragonBreath:: - .string "The foe is hit with\nan incredible blast\nof breath that may\nalso paralyze.$" - -gMoveDescription_BatonPass:: - .string "The user switches\nout, passing along\nany stat changes\nto the new battler.$" - -gMoveDescription_Encore:: - .string "Makes the foe use\nthe move it last\nused repeatedly for\ntwo to six turns.$" - -gMoveDescription_Pursuit:: - .string "An attack move that\nworks especially\nwell on a foe that\nis switching out.$" - -gMoveDescription_RapidSpin:: - .string "An attack that\nfrees the user from\nBIND, WRAP, LEECH\nSEED, and SPIKES.$" - -gMoveDescription_SweetScent:: - .string "Allures the foe to\nreduce evasiveness.\nIt also attracts\nwild POKéMON.$" - -gMoveDescription_IronTail:: - .string "An attack with a\nsteel-hard tail.\nIt may lower the\nfoe's DEFENSE stat.$" - -gMoveDescription_MetalClaw:: - .string "The foe is attacked\nwith steel claws.\nIt may also raise\nthe user's ATTACK.$" - -gMoveDescription_VitalThrow:: - .string "Makes the user\nattack after the\nfoe. In return,\nit will not miss.$" - -gMoveDescription_MorningSun:: - .string "Restores the user's\nHP. The amount of\nHP regained varies\nwith the weather.$" - -gMoveDescription_Synthesis:: - .string "Restores the user's\nHP. The amount of\nHP regained varies\nwith the weather.$" - -gMoveDescription_Moonlight:: - .string "Restores the user's\nHP. The amount of\nHP regained varies\nwith the weather.$" - -gMoveDescription_HiddenPower:: - .string "An attack that\nvaries in type and\nintensity depending\non the user.$" - -gMoveDescription_CrossChop:: - .string "The foe is hit with\ndouble chops.\nIt has a high\ncritical-hit ratio.$" - -gMoveDescription_Twister:: - .string "A vicious twister\nattacks the foe.\nIt may make the\nfoe flinch.$" - -gMoveDescription_RainDance:: - .string "A heavy rain falls\nfor five turns,\npowering up WATER-\ntype moves.$" - -gMoveDescription_SunnyDay:: - .string "The sun blazes for\nfive turns, powering\nup FIRE-type\nmoves.$" - -gMoveDescription_Crunch:: - .string "The foe is crunched\nwith sharp fangs.\nIt may lower the\nfoe's SP. DEF.$" - -gMoveDescription_MirrorCoat:: - .string "A retaliation move\nthat pays back the\nfoe's special attack\ndouble.$" - -gMoveDescription_PsychUp:: - .string "The user hypnotizes\nitself into copying\nany stat change\nmade by the foe.$" - -gMoveDescription_ExtremeSpeed:: - .string "A blindingly speedy\ncharge attack that\nalways goes before\nany other.$" - -gMoveDescription_AncientPower:: - .string "An ancient power is\nused to attack. It\nmay also raise all\nthe user's stats.$" - -gMoveDescription_ShadowBall:: - .string "A shadowy blob is\nhurled at the foe.\nMay also lower the\nfoe's SP. DEF.$" - -gMoveDescription_FutureSight:: - .string "Two turns after\nthis move is used,\nthe foe is attacked\npsychically.$" - -gMoveDescription_RockSmash:: - .string "An attack that may\nalso cut DEFENSE.\nIt can also smash\ncracked boulders.$" - -gMoveDescription_Whirlpool:: - .string "The foe is trapped\nin a fast, vicious\nwhirlpool for two\nto five turns.$" - -gMoveDescription_BeatUp:: - .string "All party POKéMON\njoin in the attack.\nThe more allies,\nthe more damage.$" - -gMoveDescription_FakeOut:: - .string "An attack that hits\nfirst and causes\nflinching. Usable\nonly on 1st turn.$" - -gMoveDescription_Uproar:: - .string "The user attacks in\nan uproar that\nprevents sleep for\ntwo to five turns.$" - -gMoveDescription_Stockpile:: - .string "The user charges\nup power for use\nlater. It can be\nused three times.$" - -gMoveDescription_SpitUp:: - .string "The power built\nusing STOCKPILE is\nreleased at once\nfor attack.$" - -gMoveDescription_Swallow:: - .string "The energy it built\nusing STOCKPILE is\nabsorbed to restore\nHP.$" - -gMoveDescription_HeatWave:: - .string "The user exhales a\nheated breath to\nattack. It may also\ninflict a burn.$" - -gMoveDescription_Hail:: - .string "A hailstorm lasting\nfive turns damages\nall POKéMON except\nthe ICE-type.$" - -gMoveDescription_Torment:: - .string "It enrages the foe,\nmaking it incapable\nof using the same\nmove successively.$" - -gMoveDescription_Flatter:: - .string "Flattery is used to\nconfuse the foe,\nbut its SP. ATK\nalso rises.$" - -gMoveDescription_WillOWisp:: - .string "A sinister, bluish\nwhite flame is shot\nat the foe to\ninflict a burn.$" - -gMoveDescription_Memento:: - .string "The user faints,\nbut sharply lowers\nthe foe's ATTACK\nand SP. ATK.$" - -gMoveDescription_Facade:: - .string "An attack that is\nboosted if user is\nburned, poisoned,\nor paralyzed.$" - -gMoveDescription_FocusPunch:: - .string "An attack that is\nexecuted last.\nThe user flinches\nif hit beforehand.$" - -gMoveDescription_SmellingSalt:: - .string "Doubly effective on\na paralyzed foe,\nbut it also cures\nthe foe's paralysis.$" - -gMoveDescription_FollowMe:: - .string "The user draws\nattention to itself,\nmaking foes attack\nonly the user.$" - -gMoveDescription_NaturePower:: - .string "An attack that\nchanges type\ndepending on the\nuser's location.$" - -gMoveDescription_Charge:: - .string "The user charges\npower to boost the\nELECTRIC move it\nuses next.$" - -gMoveDescription_Taunt:: - .string "The foe is taunted\ninto a rage that\nallows it to use\nonly attack moves.$" - -gMoveDescription_HelpingHand:: - .string "A move that boosts\nthe power of the\nally's attack in a\nbattle.$" - -gMoveDescription_Trick:: - .string "A move that tricks\nthe foe into\ntrading held items\nwith the user.$" - -gMoveDescription_RolePlay:: - .string "The user mimics the\nfoe completely and\ncopies the foe's\nability.$" - -gMoveDescription_Wish:: - .string "A self-healing move\nthat restores half\nthe full HP on the\nnext turn.$" - -gMoveDescription_Assist:: - .string "The user randomly\npicks and uses a\nmove of an allied\nPOKéMON.$" - -gMoveDescription_Ingrain:: - .string "The user lays roots\nthat restore HP on\nevery turn.\nIt can't switch out.$" - -gMoveDescription_Superpower:: - .string "A powerful attack,\nbut it also lowers\nthe user's ATTACK\nand DEFENSE stats.$" - -gMoveDescription_MagicCoat:: - .string "Reflects back the\nfoe's LEECH SEED\nand any status-\ndamaging move.$" - -gMoveDescription_Recycle:: - .string "A move that\nrecycles a used\nitem for use once\nmore.$" - -gMoveDescription_Revenge:: - .string "An attack move that\ngains in intensity if\nthe target has hurt\nthe user.$" - -gMoveDescription_BrickBreak:: - .string "An attack that also\nbreaks any barrier\nlike LIGHT SCREEN\nand REFLECT.$" - -gMoveDescription_Yawn:: - .string "A huge yawn lulls\nthe foe into falling\nasleep on the next\nturn.$" - -gMoveDescription_KnockOff:: - .string "Knocks down the\nfoe's held item to\nprevent its use\nduring the battle.$" - -gMoveDescription_Endeavor:: - .string "Gains power the\nfewer HP the user\nhas compared with\nthe foe.$" - -gMoveDescription_Eruption:: - .string "The higher the\nuser's HP, the more\npowerful this\nattack becomes.$" - -gMoveDescription_SkillSwap:: - .string "The user employs\nits psychic power\nto swap abilities\nwith the foe.$" - -gMoveDescription_Imprison:: - .string "Prevents foes from\nusing any move\nthat is also known\nby the user.$" - -gMoveDescription_Refresh:: - .string "A self-healing move\nthat cures the user\nof a poisoning,\nburn, or paralysis.$" - -gMoveDescription_Grudge:: - .string "If the user faints,\nthis move deletes\nthe PP of the move\nthat finished it.$" - -gMoveDescription_Snatch:: - .string "Steals the effects\nof the foe's\nhealing or status-\nchanging move.$" - -gMoveDescription_SecretPower:: - .string "An attack that may\nhave an additional\neffect that varies\nwith the terrain.$" - -gMoveDescription_Dive:: - .string "The user dives\nunderwater on the\nfirst turn and\nstrikes next turn.$" - -gMoveDescription_ArmThrust:: - .string "A quick flurry of\nstraight-arm\npunches that hit\ntwo to five times.$" - -gMoveDescription_Camouflage:: - .string "Alters the user's\ntype depending on\nthe location's\nterrain.$" - -gMoveDescription_TailGlow:: - .string "The user flashes a\nlight that sharply\nraises its SP. ATK\nstat.$" - -gMoveDescription_LusterPurge:: - .string "A burst of light\ninjures the foe. It\nmay also lower the\nfoe's SP. DEF.$" - -gMoveDescription_MistBall:: - .string "A flurry of down\nhits the foe. It\nmay also lower the\nfoe's SP. ATK.$" - -gMoveDescription_FeatherDance:: - .string "The foe is covered\nwith a mass of down\nthat sharply cuts\nthe ATTACK stat.$" - -gMoveDescription_TeeterDance:: - .string "A wobbly dance\nthat confuses all\nthe POKéMON in\nbattle.$" - -gMoveDescription_BlazeKick:: - .string "A fiery kick with a\nhigh critical-hit\nratio. It may also\nburn the foe.$" - -gMoveDescription_MudSport:: - .string "Weakens ELECTRIC-\ntype attacks while\nthe user is in the\nbattle.$" - -gMoveDescription_IceBall:: - .string "A 5-turn rolling\nattack that becomes\nstronger each time\nit rolls.$" - -gMoveDescription_NeedleArm:: - .string "An attack using\nthorny arms.\nIt may make the\nfoe flinch.$" - -gMoveDescription_SlackOff:: - .string "The user slacks off\nand restores its HP\nby half its full\nHP.$" - -gMoveDescription_HyperVoice:: - .string "The user lets loose\na horribly loud\nshout with the\npower to damage.$" - -gMoveDescription_PoisonFang:: - .string "The foe is bitten\nwith toxic fangs.\nIt may also badly\npoison the foe.$" - -gMoveDescription_CrushClaw:: - .string "The foe is attacked\nwith sharp claws.\nIt may also lower\nthe foe's DEFENSE.$" - -gMoveDescription_BlastBurn:: - .string "The foe is hit with\na huge explosion.\nThe user can't move\non the next turn.$" - -gMoveDescription_HydroCannon:: - .string "The foe is hit with\na watery cannon.\nThe user can't move\non the next turn.$" - -gMoveDescription_MeteorMash:: - .string "The foe is hit with\na hard, fast punch.\nIt may also raise\nthe user's ATTACK.$" - -gMoveDescription_Astonish:: - .string "An attack using a\nstartling shout.\nIt also may make\nthe foe flinch.$" - -gMoveDescription_WeatherBall:: - .string "An attack that\nvaries in power and\ntype depending on\nthe weather.$" - -gMoveDescription_Aromatherapy:: - .string "A soothing scent is\nreleased to heal\nall status problems\nin the user's party.$" - -gMoveDescription_FakeTears:: - .string "The user feigns\ncrying to sharply\nlower the foe's\nSP. DEF stat.$" - -gMoveDescription_AirCutter:: - .string "The foe is hit with\nrazor-like wind.\nIt has a high\ncritical-hit ratio.$" - -gMoveDescription_Overheat:: - .string "An intense attack\nthat also sharply\nreduces the user's\nSP. ATK stat.$" - -gMoveDescription_OdorSleuth:: - .string "Completely negates\nthe foe's efforts to\nheighten its ability\nto evade.$" - -gMoveDescription_RockTomb:: - .string "Boulders are hurled\nat the foe. It also\nlowers the foe's\nSPEED if it hits.$" - -gMoveDescription_SilverWind:: - .string "The foe is attacked\nwith a silver dust.\nIt may raise all\nthe user's stats.$" - -gMoveDescription_MetalSound:: - .string "A horrible metallic\nscreech is used to\nsharply lower the\nfoe's SP. DEF.$" - -gMoveDescription_GrassWhistle:: - .string "A pleasant melody\nis played to lull\nthe foe into a deep\nsleep.$" - -gMoveDescription_Tickle:: - .string "The foe is made to\nlaugh, reducing its\nATTACK and DEFENSE\nstats.$" - -gMoveDescription_CosmicPower:: - .string "The user absorbs a\nmystic power to\nraise its DEFENSE\nand SP. DEF.$" - -gMoveDescription_WaterSpout:: - .string "The higher the\nuser's HP, the more\npowerful this\nattack becomes.$" - -gMoveDescription_SignalBeam:: - .string "The foe is hit with\na flashing beam\nthat may also\ncause confusion.$" - -gMoveDescription_ShadowPunch:: - .string "The user throws a\npunch from the\nshadows. It cannot\nbe evaded.$" - -gMoveDescription_Extrasensory:: - .string "The user attacks\nwith an odd power\nthat may make the\nfoe flinch.$" - -gMoveDescription_SkyUppercut:: - .string "The user attacks\nwith an uppercut\nthrown skywards\nwith force.$" - -gMoveDescription_SandTomb:: - .string "The foe is trapped\ninside a painful\nsandstorm for two\nto five turns.$" - -gMoveDescription_SheerCold:: - .string "The foe is attacked\nwith ultimate cold\nthat causes fainting\nif it hits.$" - -gMoveDescription_MuddyWater:: - .string "The user attacks\nwith muddy water.\nIt may also lower\nthe foe's accuracy.$" - -gMoveDescription_BulletSeed:: - .string "The user shoots\nseeds at the foe.\nTwo to five seeds\nare shot at once.$" - -gMoveDescription_AerialAce:: - .string "An extremely fast\nattack against one\ntarget. It can't be\nevaded.$" - -gMoveDescription_IcicleSpear:: - .string "Sharp icicles are\nfired at the foe.\nIt strikes two to\nfive times.$" - -gMoveDescription_IronDefense:: - .string "The user hardens\nits body's surface\nto sharply raise its\nDEFENSE stat.$" - -gMoveDescription_Block:: - .string "The user blocks the\nfoe's way with arms\nspread wide to\nprevent escape.$" - -gMoveDescription_Howl:: - .string "The user howls to\nraise its spirit and\nboost its ATTACK\nstat.$" - -gMoveDescription_DragonClaw:: - .string "Sharp, huge claws\nhook and slash the\nfoe quickly and\nwith great power.$" - -gMoveDescription_FrenzyPlant:: - .string "The foe is hit with\nan enormous branch.\nThe user can't move\non the next turn.$" - -gMoveDescription_BulkUp:: - .string "The user bulks up\nits body to boost\nboth its ATTACK and\nDEFENSE stats.$" - -gMoveDescription_Bounce:: - .string "The user bounces\non the foe on the\n2nd turn. It may\nparalyze the foe.$" - -gMoveDescription_MudShot:: - .string "The user attacks by\nhurling mud.\nIt also reduces the\nfoe's SPEED.$" - -gMoveDescription_PoisonTail:: - .string "An attack with a\nhigh critical-hit\nratio. It may also\npoison the foe.$" - -gMoveDescription_Covet:: - .string "A cutely executed\nattack that also\nsteals the foe's\nhold item.$" - -gMoveDescription_VoltTackle:: - .string "The user throws an\nelectrified tackle.\nIt hurts the user\na little.$" - -gMoveDescription_MagicalLeaf:: - .string "The foe is attacked\nwith a strange leaf\nthat cannot be\nevaded.$" - -gMoveDescription_WaterSport:: - .string "Weakens FIRE-type\nattacks while the\nuser is in the\nbattle.$" - -gMoveDescription_CalmMind:: - .string "The user focuses\nits mind to raise\nthe SP. ATK and\nSP. DEF stats.$" - -gMoveDescription_LeafBlade:: - .string "The foe is slashed\nwith a sharp leaf.\nIt has a high\ncritical-hit ratio.$" - -gMoveDescription_DragonDance:: - .string "A mystic, powerful\ndance that boosts\nthe user's ATTACK\nand SPEED stats.$" - -gMoveDescription_RockBlast:: - .string "The user hurls two\nto five hard rocks\nat the foe to\nattack.$" - -gMoveDescription_ShockWave:: - .string "A rapid jolt of\nelectricity strikes\nthe foe. It can't\nbe evaded.$" - -gMoveDescription_WaterPulse:: - .string "An attack with a\npulsing blast of\nwater. It may also\nconfuse the foe.$" - -gMoveDescription_DoomDesire:: - .string "A move that attacks\nthe foe with a\nblast of light two\nturns after use.$" - -gMoveDescription_PsychoBoost:: - .string "An intense attack\nthat also sharply\nreduces the user's\nSP. ATK stat.$" - From ea9510f7f8ecb4b278e22ee109dadf84ebbf6a8e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 16 Dec 2022 11:08:18 -0500 Subject: [PATCH 05/33] Use constants in gMoveNames --- include/constants/moves.h | 2 - include/data.h | 2 +- src/data/text/move_names.h | 712 ++++++++++++++++++------------------- 3 files changed, 357 insertions(+), 359 deletions(-) diff --git a/include/constants/moves.h b/include/constants/moves.h index 9d5ca3555..14738f1b2 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -357,8 +357,6 @@ #define MOVE_DOOM_DESIRE 353 #define MOVE_PSYCHO_BOOST 354 -#define LAST_MOVE_INDEX MOVE_PSYCHO_BOOST - #define MOVES_COUNT 355 // Used for checks for moves affected by Disable, Mimic, etc. diff --git a/include/data.h b/include/data.h index cf98e1572..88854ae27 100644 --- a/include/data.h +++ b/include/data.h @@ -19,7 +19,7 @@ struct MonCoords #define GET_MON_COORDS_HEIGHT(size)((size & 0xF) * 8) extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; -extern const u8 gMoveNames[][13]; +extern const u8 gMoveNames[][MOVE_NAME_LENGTH + 1]; extern const u8 gTrainerClassNames[][13]; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index d45972d51..d63ddb871 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -1,357 +1,357 @@ -const u8 gMoveNames[][13] = { - _("-$$$$$$"), - _("POUND"), - _("KARATE CHOP"), - _("DOUBLESLAP"), - _("COMET PUNCH"), - _("MEGA PUNCH"), - _("PAY DAY"), - _("FIRE PUNCH"), - _("ICE PUNCH"), - _("THUNDERPUNCH"), - _("SCRATCH"), - _("VICEGRIP"), - _("GUILLOTINE"), - _("RAZOR WIND"), - _("SWORDS DANCE"), - _("CUT"), - _("GUST"), - _("WING ATTACK"), - _("WHIRLWIND"), - _("FLY"), - _("BIND"), - _("SLAM"), - _("VINE WHIP"), - _("STOMP"), - _("DOUBLE KICK"), - _("MEGA KICK"), - _("JUMP KICK"), - _("ROLLING KICK"), - _("SAND-ATTACK"), - _("HEADBUTT"), - _("HORN ATTACK"), - _("FURY ATTACK"), - _("HORN DRILL"), - _("TACKLE"), - _("BODY SLAM"), - _("WRAP"), - _("TAKE DOWN"), - _("THRASH"), - _("DOUBLE-EDGE"), - _("TAIL WHIP"), - _("POISON STING"), - _("TWINEEDLE"), - _("PIN MISSILE"), - _("LEER"), - _("BITE"), - _("GROWL"), - _("ROAR"), - _("SING"), - _("SUPERSONIC"), - _("SONICBOOM"), - _("DISABLE"), - _("ACID"), - _("EMBER"), - _("FLAMETHROWER"), - _("MIST"), - _("WATER GUN"), - _("HYDRO PUMP"), - _("SURF"), - _("ICE BEAM"), - _("BLIZZARD"), - _("PSYBEAM"), - _("BUBBLEBEAM"), - _("AURORA BEAM"), - _("HYPER BEAM"), - _("PECK"), - _("DRILL PECK"), - _("SUBMISSION"), - _("LOW KICK"), - _("COUNTER"), - _("SEISMIC TOSS"), - _("STRENGTH"), - _("ABSORB"), - _("MEGA DRAIN"), - _("LEECH SEED"), - _("GROWTH"), - _("RAZOR LEAF"), - _("SOLARBEAM"), - _("POISONPOWDER"), - _("STUN SPORE"), - _("SLEEP POWDER"), - _("PETAL DANCE"), - _("STRING SHOT"), - _("DRAGON RAGE"), - _("FIRE SPIN"), - _("THUNDERSHOCK"), - _("THUNDERBOLT"), - _("THUNDER WAVE"), - _("THUNDER"), - _("ROCK THROW"), - _("EARTHQUAKE"), - _("FISSURE"), - _("DIG"), - _("TOXIC"), - _("CONFUSION"), - _("PSYCHIC"), - _("HYPNOSIS"), - _("MEDITATE"), - _("AGILITY"), - _("QUICK ATTACK"), - _("RAGE"), - _("TELEPORT"), - _("NIGHT SHADE"), - _("MIMIC"), - _("SCREECH"), - _("DOUBLE TEAM"), - _("RECOVER"), - _("HARDEN"), - _("MINIMIZE"), - _("SMOKESCREEN"), - _("CONFUSE RAY"), - _("WITHDRAW"), - _("DEFENSE CURL"), - _("BARRIER"), - _("LIGHT SCREEN"), - _("HAZE"), - _("REFLECT"), - _("FOCUS ENERGY"), - _("BIDE"), - _("METRONOME"), - _("MIRROR MOVE"), - _("SELFDESTRUCT"), - _("EGG BOMB"), - _("LICK"), - _("SMOG"), - _("SLUDGE"), - _("BONE CLUB"), - _("FIRE BLAST"), - _("WATERFALL"), - _("CLAMP"), - _("SWIFT"), - _("SKULL BASH"), - _("SPIKE CANNON"), - _("CONSTRICT"), - _("AMNESIA"), - _("KINESIS"), - _("SOFTBOILED"), - _("HI JUMP KICK"), - _("GLARE"), - _("DREAM EATER"), - _("POISON GAS"), - _("BARRAGE"), - _("LEECH LIFE"), - _("LOVELY KISS"), - _("SKY ATTACK"), - _("TRANSFORM"), - _("BUBBLE"), - _("DIZZY PUNCH"), - _("SPORE"), - _("FLASH"), - _("PSYWAVE"), - _("SPLASH"), - _("ACID ARMOR"), - _("CRABHAMMER"), - _("EXPLOSION"), - _("FURY SWIPES"), - _("BONEMERANG"), - _("REST"), - _("ROCK SLIDE"), - _("HYPER FANG"), - _("SHARPEN"), - _("CONVERSION"), - _("TRI ATTACK"), - _("SUPER FANG"), - _("SLASH"), - _("SUBSTITUTE"), - _("STRUGGLE"), - _("SKETCH"), - _("TRIPLE KICK"), - _("THIEF"), - _("SPIDER WEB"), - _("MIND READER"), - _("NIGHTMARE"), - _("FLAME WHEEL"), - _("SNORE"), - _("CURSE"), - _("FLAIL"), - _("CONVERSION 2"), - _("AEROBLAST"), - _("COTTON SPORE"), - _("REVERSAL"), - _("SPITE"), - _("POWDER SNOW"), - _("PROTECT"), - _("MACH PUNCH"), - _("SCARY FACE"), - _("FAINT ATTACK"), - _("SWEET KISS"), - _("BELLY DRUM"), - _("SLUDGE BOMB"), - _("MUD-SLAP"), - _("OCTAZOOKA"), - _("SPIKES"), - _("ZAP CANNON"), - _("FORESIGHT"), - _("DESTINY BOND"), - _("PERISH SONG"), - _("ICY WIND"), - _("DETECT"), - _("BONE RUSH"), - _("LOCK-ON"), - _("OUTRAGE"), - _("SANDSTORM"), - _("GIGA DRAIN"), - _("ENDURE"), - _("CHARM"), - _("ROLLOUT"), - _("FALSE SWIPE"), - _("SWAGGER"), - _("MILK DRINK"), - _("SPARK"), - _("FURY CUTTER"), - _("STEEL WING"), - _("MEAN LOOK"), - _("ATTRACT"), - _("SLEEP TALK"), - _("HEAL BELL"), - _("RETURN"), - _("PRESENT"), - _("FRUSTRATION"), - _("SAFEGUARD"), - _("PAIN SPLIT"), - _("SACRED FIRE"), - _("MAGNITUDE"), - _("DYNAMICPUNCH"), - _("MEGAHORN"), - _("DRAGONBREATH"), - _("BATON PASS"), - _("ENCORE"), - _("PURSUIT"), - _("RAPID SPIN"), - _("SWEET SCENT"), - _("IRON TAIL"), - _("METAL CLAW"), - _("VITAL THROW"), - _("MORNING SUN"), - _("SYNTHESIS"), - _("MOONLIGHT"), - _("HIDDEN POWER"), - _("CROSS CHOP"), - _("TWISTER"), - _("RAIN DANCE"), - _("SUNNY DAY"), - _("CRUNCH"), - _("MIRROR COAT"), - _("PSYCH UP"), - _("EXTREMESPEED"), - _("ANCIENTPOWER"), - _("SHADOW BALL"), - _("FUTURE SIGHT"), - _("ROCK SMASH"), - _("WHIRLPOOL"), - _("BEAT UP"), - _("FAKE OUT"), - _("UPROAR"), - _("STOCKPILE"), - _("SPIT UP"), - _("SWALLOW"), - _("HEAT WAVE"), - _("HAIL"), - _("TORMENT"), - _("FLATTER"), - _("WILL-O-WISP"), - _("MEMENTO"), - _("FACADE"), - _("FOCUS PUNCH"), - _("SMELLINGSALT"), - _("FOLLOW ME"), - _("NATURE POWER"), - _("CHARGE"), - _("TAUNT"), - _("HELPING HAND"), - _("TRICK"), - _("ROLE PLAY"), - _("WISH"), - _("ASSIST"), - _("INGRAIN"), - _("SUPERPOWER"), - _("MAGIC COAT"), - _("RECYCLE"), - _("REVENGE"), - _("BRICK BREAK"), - _("YAWN"), - _("KNOCK OFF"), - _("ENDEAVOR"), - _("ERUPTION"), - _("SKILL SWAP"), - _("IMPRISON"), - _("REFRESH"), - _("GRUDGE"), - _("SNATCH"), - _("SECRET POWER"), - _("DIVE"), - _("ARM THRUST"), - _("CAMOUFLAGE"), - _("TAIL GLOW"), - _("LUSTER PURGE"), - _("MIST BALL"), - _("FEATHERDANCE"), - _("TEETER DANCE"), - _("BLAZE KICK"), - _("MUD SPORT"), - _("ICE BALL"), - _("NEEDLE ARM"), - _("SLACK OFF"), - _("HYPER VOICE"), - _("POISON FANG"), - _("CRUSH CLAW"), - _("BLAST BURN"), - _("HYDRO CANNON"), - _("METEOR MASH"), - _("ASTONISH"), - _("WEATHER BALL"), - _("AROMATHERAPY"), - _("FAKE TEARS"), - _("AIR CUTTER"), - _("OVERHEAT"), - _("ODOR SLEUTH"), - _("ROCK TOMB"), - _("SILVER WIND"), - _("METAL SOUND"), - _("GRASSWHISTLE"), - _("TICKLE"), - _("COSMIC POWER"), - _("WATER SPOUT"), - _("SIGNAL BEAM"), - _("SHADOW PUNCH"), - _("EXTRASENSORY"), - _("SKY UPPERCUT"), - _("SAND TOMB"), - _("SHEER COLD"), - _("MUDDY WATER"), - _("BULLET SEED"), - _("AERIAL ACE"), - _("ICICLE SPEAR"), - _("IRON DEFENSE"), - _("BLOCK"), - _("HOWL"), - _("DRAGON CLAW"), - _("FRENZY PLANT"), - _("BULK UP"), - _("BOUNCE"), - _("MUD SHOT"), - _("POISON TAIL"), - _("COVET"), - _("VOLT TACKLE"), - _("MAGICAL LEAF"), - _("WATER SPORT"), - _("CALM MIND"), - _("LEAF BLADE"), - _("DRAGON DANCE"), - _("ROCK BLAST"), - _("SHOCK WAVE"), - _("WATER PULSE"), - _("DOOM DESIRE"), - _("PSYCHO BOOST") +const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = { + [MOVE_NONE] = _("-$$$$$$"), + [MOVE_POUND] = _("POUND"), + [MOVE_KARATE_CHOP] = _("KARATE CHOP"), + [MOVE_DOUBLE_SLAP] = _("DOUBLESLAP"), + [MOVE_COMET_PUNCH] = _("COMET PUNCH"), + [MOVE_MEGA_PUNCH] = _("MEGA PUNCH"), + [MOVE_PAY_DAY] = _("PAY DAY"), + [MOVE_FIRE_PUNCH] = _("FIRE PUNCH"), + [MOVE_ICE_PUNCH] = _("ICE PUNCH"), + [MOVE_THUNDER_PUNCH] = _("THUNDERPUNCH"), + [MOVE_SCRATCH] = _("SCRATCH"), + [MOVE_VICE_GRIP] = _("VICEGRIP"), + [MOVE_GUILLOTINE] = _("GUILLOTINE"), + [MOVE_RAZOR_WIND] = _("RAZOR WIND"), + [MOVE_SWORDS_DANCE] = _("SWORDS DANCE"), + [MOVE_CUT] = _("CUT"), + [MOVE_GUST] = _("GUST"), + [MOVE_WING_ATTACK] = _("WING ATTACK"), + [MOVE_WHIRLWIND] = _("WHIRLWIND"), + [MOVE_FLY] = _("FLY"), + [MOVE_BIND] = _("BIND"), + [MOVE_SLAM] = _("SLAM"), + [MOVE_VINE_WHIP] = _("VINE WHIP"), + [MOVE_STOMP] = _("STOMP"), + [MOVE_DOUBLE_KICK] = _("DOUBLE KICK"), + [MOVE_MEGA_KICK] = _("MEGA KICK"), + [MOVE_JUMP_KICK] = _("JUMP KICK"), + [MOVE_ROLLING_KICK] = _("ROLLING KICK"), + [MOVE_SAND_ATTACK] = _("SAND-ATTACK"), + [MOVE_HEADBUTT] = _("HEADBUTT"), + [MOVE_HORN_ATTACK] = _("HORN ATTACK"), + [MOVE_FURY_ATTACK] = _("FURY ATTACK"), + [MOVE_HORN_DRILL] = _("HORN DRILL"), + [MOVE_TACKLE] = _("TACKLE"), + [MOVE_BODY_SLAM] = _("BODY SLAM"), + [MOVE_WRAP] = _("WRAP"), + [MOVE_TAKE_DOWN] = _("TAKE DOWN"), + [MOVE_THRASH] = _("THRASH"), + [MOVE_DOUBLE_EDGE] = _("DOUBLE-EDGE"), + [MOVE_TAIL_WHIP] = _("TAIL WHIP"), + [MOVE_POISON_STING] = _("POISON STING"), + [MOVE_TWINEEDLE] = _("TWINEEDLE"), + [MOVE_PIN_MISSILE] = _("PIN MISSILE"), + [MOVE_LEER] = _("LEER"), + [MOVE_BITE] = _("BITE"), + [MOVE_GROWL] = _("GROWL"), + [MOVE_ROAR] = _("ROAR"), + [MOVE_SING] = _("SING"), + [MOVE_SUPERSONIC] = _("SUPERSONIC"), + [MOVE_SONIC_BOOM] = _("SONICBOOM"), + [MOVE_DISABLE] = _("DISABLE"), + [MOVE_ACID] = _("ACID"), + [MOVE_EMBER] = _("EMBER"), + [MOVE_FLAMETHROWER] = _("FLAMETHROWER"), + [MOVE_MIST] = _("MIST"), + [MOVE_WATER_GUN] = _("WATER GUN"), + [MOVE_HYDRO_PUMP] = _("HYDRO PUMP"), + [MOVE_SURF] = _("SURF"), + [MOVE_ICE_BEAM] = _("ICE BEAM"), + [MOVE_BLIZZARD] = _("BLIZZARD"), + [MOVE_PSYBEAM] = _("PSYBEAM"), + [MOVE_BUBBLE_BEAM] = _("BUBBLEBEAM"), + [MOVE_AURORA_BEAM] = _("AURORA BEAM"), + [MOVE_HYPER_BEAM] = _("HYPER BEAM"), + [MOVE_PECK] = _("PECK"), + [MOVE_DRILL_PECK] = _("DRILL PECK"), + [MOVE_SUBMISSION] = _("SUBMISSION"), + [MOVE_LOW_KICK] = _("LOW KICK"), + [MOVE_COUNTER] = _("COUNTER"), + [MOVE_SEISMIC_TOSS] = _("SEISMIC TOSS"), + [MOVE_STRENGTH] = _("STRENGTH"), + [MOVE_ABSORB] = _("ABSORB"), + [MOVE_MEGA_DRAIN] = _("MEGA DRAIN"), + [MOVE_LEECH_SEED] = _("LEECH SEED"), + [MOVE_GROWTH] = _("GROWTH"), + [MOVE_RAZOR_LEAF] = _("RAZOR LEAF"), + [MOVE_SOLAR_BEAM] = _("SOLARBEAM"), + [MOVE_POISON_POWDER] = _("POISONPOWDER"), + [MOVE_STUN_SPORE] = _("STUN SPORE"), + [MOVE_SLEEP_POWDER] = _("SLEEP POWDER"), + [MOVE_PETAL_DANCE] = _("PETAL DANCE"), + [MOVE_STRING_SHOT] = _("STRING SHOT"), + [MOVE_DRAGON_RAGE] = _("DRAGON RAGE"), + [MOVE_FIRE_SPIN] = _("FIRE SPIN"), + [MOVE_THUNDER_SHOCK] = _("THUNDERSHOCK"), + [MOVE_THUNDERBOLT] = _("THUNDERBOLT"), + [MOVE_THUNDER_WAVE] = _("THUNDER WAVE"), + [MOVE_THUNDER] = _("THUNDER"), + [MOVE_ROCK_THROW] = _("ROCK THROW"), + [MOVE_EARTHQUAKE] = _("EARTHQUAKE"), + [MOVE_FISSURE] = _("FISSURE"), + [MOVE_DIG] = _("DIG"), + [MOVE_TOXIC] = _("TOXIC"), + [MOVE_CONFUSION] = _("CONFUSION"), + [MOVE_PSYCHIC] = _("PSYCHIC"), + [MOVE_HYPNOSIS] = _("HYPNOSIS"), + [MOVE_MEDITATE] = _("MEDITATE"), + [MOVE_AGILITY] = _("AGILITY"), + [MOVE_QUICK_ATTACK] = _("QUICK ATTACK"), + [MOVE_RAGE] = _("RAGE"), + [MOVE_TELEPORT] = _("TELEPORT"), + [MOVE_NIGHT_SHADE] = _("NIGHT SHADE"), + [MOVE_MIMIC] = _("MIMIC"), + [MOVE_SCREECH] = _("SCREECH"), + [MOVE_DOUBLE_TEAM] = _("DOUBLE TEAM"), + [MOVE_RECOVER] = _("RECOVER"), + [MOVE_HARDEN] = _("HARDEN"), + [MOVE_MINIMIZE] = _("MINIMIZE"), + [MOVE_SMOKESCREEN] = _("SMOKESCREEN"), + [MOVE_CONFUSE_RAY] = _("CONFUSE RAY"), + [MOVE_WITHDRAW] = _("WITHDRAW"), + [MOVE_DEFENSE_CURL] = _("DEFENSE CURL"), + [MOVE_BARRIER] = _("BARRIER"), + [MOVE_LIGHT_SCREEN] = _("LIGHT SCREEN"), + [MOVE_HAZE] = _("HAZE"), + [MOVE_REFLECT] = _("REFLECT"), + [MOVE_FOCUS_ENERGY] = _("FOCUS ENERGY"), + [MOVE_BIDE] = _("BIDE"), + [MOVE_METRONOME] = _("METRONOME"), + [MOVE_MIRROR_MOVE] = _("MIRROR MOVE"), + [MOVE_SELF_DESTRUCT] = _("SELFDESTRUCT"), + [MOVE_EGG_BOMB] = _("EGG BOMB"), + [MOVE_LICK] = _("LICK"), + [MOVE_SMOG] = _("SMOG"), + [MOVE_SLUDGE] = _("SLUDGE"), + [MOVE_BONE_CLUB] = _("BONE CLUB"), + [MOVE_FIRE_BLAST] = _("FIRE BLAST"), + [MOVE_WATERFALL] = _("WATERFALL"), + [MOVE_CLAMP] = _("CLAMP"), + [MOVE_SWIFT] = _("SWIFT"), + [MOVE_SKULL_BASH] = _("SKULL BASH"), + [MOVE_SPIKE_CANNON] = _("SPIKE CANNON"), + [MOVE_CONSTRICT] = _("CONSTRICT"), + [MOVE_AMNESIA] = _("AMNESIA"), + [MOVE_KINESIS] = _("KINESIS"), + [MOVE_SOFT_BOILED] = _("SOFTBOILED"), + [MOVE_HI_JUMP_KICK] = _("HI JUMP KICK"), + [MOVE_GLARE] = _("GLARE"), + [MOVE_DREAM_EATER] = _("DREAM EATER"), + [MOVE_POISON_GAS] = _("POISON GAS"), + [MOVE_BARRAGE] = _("BARRAGE"), + [MOVE_LEECH_LIFE] = _("LEECH LIFE"), + [MOVE_LOVELY_KISS] = _("LOVELY KISS"), + [MOVE_SKY_ATTACK] = _("SKY ATTACK"), + [MOVE_TRANSFORM] = _("TRANSFORM"), + [MOVE_BUBBLE] = _("BUBBLE"), + [MOVE_DIZZY_PUNCH] = _("DIZZY PUNCH"), + [MOVE_SPORE] = _("SPORE"), + [MOVE_FLASH] = _("FLASH"), + [MOVE_PSYWAVE] = _("PSYWAVE"), + [MOVE_SPLASH] = _("SPLASH"), + [MOVE_ACID_ARMOR] = _("ACID ARMOR"), + [MOVE_CRABHAMMER] = _("CRABHAMMER"), + [MOVE_EXPLOSION] = _("EXPLOSION"), + [MOVE_FURY_SWIPES] = _("FURY SWIPES"), + [MOVE_BONEMERANG] = _("BONEMERANG"), + [MOVE_REST] = _("REST"), + [MOVE_ROCK_SLIDE] = _("ROCK SLIDE"), + [MOVE_HYPER_FANG] = _("HYPER FANG"), + [MOVE_SHARPEN] = _("SHARPEN"), + [MOVE_CONVERSION] = _("CONVERSION"), + [MOVE_TRI_ATTACK] = _("TRI ATTACK"), + [MOVE_SUPER_FANG] = _("SUPER FANG"), + [MOVE_SLASH] = _("SLASH"), + [MOVE_SUBSTITUTE] = _("SUBSTITUTE"), + [MOVE_STRUGGLE] = _("STRUGGLE"), + [MOVE_SKETCH] = _("SKETCH"), + [MOVE_TRIPLE_KICK] = _("TRIPLE KICK"), + [MOVE_THIEF] = _("THIEF"), + [MOVE_SPIDER_WEB] = _("SPIDER WEB"), + [MOVE_MIND_READER] = _("MIND READER"), + [MOVE_NIGHTMARE] = _("NIGHTMARE"), + [MOVE_FLAME_WHEEL] = _("FLAME WHEEL"), + [MOVE_SNORE] = _("SNORE"), + [MOVE_CURSE] = _("CURSE"), + [MOVE_FLAIL] = _("FLAIL"), + [MOVE_CONVERSION_2] = _("CONVERSION 2"), + [MOVE_AEROBLAST] = _("AEROBLAST"), + [MOVE_COTTON_SPORE] = _("COTTON SPORE"), + [MOVE_REVERSAL] = _("REVERSAL"), + [MOVE_SPITE] = _("SPITE"), + [MOVE_POWDER_SNOW] = _("POWDER SNOW"), + [MOVE_PROTECT] = _("PROTECT"), + [MOVE_MACH_PUNCH] = _("MACH PUNCH"), + [MOVE_SCARY_FACE] = _("SCARY FACE"), + [MOVE_FAINT_ATTACK] = _("FAINT ATTACK"), + [MOVE_SWEET_KISS] = _("SWEET KISS"), + [MOVE_BELLY_DRUM] = _("BELLY DRUM"), + [MOVE_SLUDGE_BOMB] = _("SLUDGE BOMB"), + [MOVE_MUD_SLAP] = _("MUD-SLAP"), + [MOVE_OCTAZOOKA] = _("OCTAZOOKA"), + [MOVE_SPIKES] = _("SPIKES"), + [MOVE_ZAP_CANNON] = _("ZAP CANNON"), + [MOVE_FORESIGHT] = _("FORESIGHT"), + [MOVE_DESTINY_BOND] = _("DESTINY BOND"), + [MOVE_PERISH_SONG] = _("PERISH SONG"), + [MOVE_ICY_WIND] = _("ICY WIND"), + [MOVE_DETECT] = _("DETECT"), + [MOVE_BONE_RUSH] = _("BONE RUSH"), + [MOVE_LOCK_ON] = _("LOCK-ON"), + [MOVE_OUTRAGE] = _("OUTRAGE"), + [MOVE_SANDSTORM] = _("SANDSTORM"), + [MOVE_GIGA_DRAIN] = _("GIGA DRAIN"), + [MOVE_ENDURE] = _("ENDURE"), + [MOVE_CHARM] = _("CHARM"), + [MOVE_ROLLOUT] = _("ROLLOUT"), + [MOVE_FALSE_SWIPE] = _("FALSE SWIPE"), + [MOVE_SWAGGER] = _("SWAGGER"), + [MOVE_MILK_DRINK] = _("MILK DRINK"), + [MOVE_SPARK] = _("SPARK"), + [MOVE_FURY_CUTTER] = _("FURY CUTTER"), + [MOVE_STEEL_WING] = _("STEEL WING"), + [MOVE_MEAN_LOOK] = _("MEAN LOOK"), + [MOVE_ATTRACT] = _("ATTRACT"), + [MOVE_SLEEP_TALK] = _("SLEEP TALK"), + [MOVE_HEAL_BELL] = _("HEAL BELL"), + [MOVE_RETURN] = _("RETURN"), + [MOVE_PRESENT] = _("PRESENT"), + [MOVE_FRUSTRATION] = _("FRUSTRATION"), + [MOVE_SAFEGUARD] = _("SAFEGUARD"), + [MOVE_PAIN_SPLIT] = _("PAIN SPLIT"), + [MOVE_SACRED_FIRE] = _("SACRED FIRE"), + [MOVE_MAGNITUDE] = _("MAGNITUDE"), + [MOVE_DYNAMIC_PUNCH] = _("DYNAMICPUNCH"), + [MOVE_MEGAHORN] = _("MEGAHORN"), + [MOVE_DRAGON_BREATH] = _("DRAGONBREATH"), + [MOVE_BATON_PASS] = _("BATON PASS"), + [MOVE_ENCORE] = _("ENCORE"), + [MOVE_PURSUIT] = _("PURSUIT"), + [MOVE_RAPID_SPIN] = _("RAPID SPIN"), + [MOVE_SWEET_SCENT] = _("SWEET SCENT"), + [MOVE_IRON_TAIL] = _("IRON TAIL"), + [MOVE_METAL_CLAW] = _("METAL CLAW"), + [MOVE_VITAL_THROW] = _("VITAL THROW"), + [MOVE_MORNING_SUN] = _("MORNING SUN"), + [MOVE_SYNTHESIS] = _("SYNTHESIS"), + [MOVE_MOONLIGHT] = _("MOONLIGHT"), + [MOVE_HIDDEN_POWER] = _("HIDDEN POWER"), + [MOVE_CROSS_CHOP] = _("CROSS CHOP"), + [MOVE_TWISTER] = _("TWISTER"), + [MOVE_RAIN_DANCE] = _("RAIN DANCE"), + [MOVE_SUNNY_DAY] = _("SUNNY DAY"), + [MOVE_CRUNCH] = _("CRUNCH"), + [MOVE_MIRROR_COAT] = _("MIRROR COAT"), + [MOVE_PSYCH_UP] = _("PSYCH UP"), + [MOVE_EXTREME_SPEED] = _("EXTREMESPEED"), + [MOVE_ANCIENT_POWER] = _("ANCIENTPOWER"), + [MOVE_SHADOW_BALL] = _("SHADOW BALL"), + [MOVE_FUTURE_SIGHT] = _("FUTURE SIGHT"), + [MOVE_ROCK_SMASH] = _("ROCK SMASH"), + [MOVE_WHIRLPOOL] = _("WHIRLPOOL"), + [MOVE_BEAT_UP] = _("BEAT UP"), + [MOVE_FAKE_OUT] = _("FAKE OUT"), + [MOVE_UPROAR] = _("UPROAR"), + [MOVE_STOCKPILE] = _("STOCKPILE"), + [MOVE_SPIT_UP] = _("SPIT UP"), + [MOVE_SWALLOW] = _("SWALLOW"), + [MOVE_HEAT_WAVE] = _("HEAT WAVE"), + [MOVE_HAIL] = _("HAIL"), + [MOVE_TORMENT] = _("TORMENT"), + [MOVE_FLATTER] = _("FLATTER"), + [MOVE_WILL_O_WISP] = _("WILL-O-WISP"), + [MOVE_MEMENTO] = _("MEMENTO"), + [MOVE_FACADE] = _("FACADE"), + [MOVE_FOCUS_PUNCH] = _("FOCUS PUNCH"), + [MOVE_SMELLING_SALT] = _("SMELLINGSALT"), + [MOVE_FOLLOW_ME] = _("FOLLOW ME"), + [MOVE_NATURE_POWER] = _("NATURE POWER"), + [MOVE_CHARGE] = _("CHARGE"), + [MOVE_TAUNT] = _("TAUNT"), + [MOVE_HELPING_HAND] = _("HELPING HAND"), + [MOVE_TRICK] = _("TRICK"), + [MOVE_ROLE_PLAY] = _("ROLE PLAY"), + [MOVE_WISH] = _("WISH"), + [MOVE_ASSIST] = _("ASSIST"), + [MOVE_INGRAIN] = _("INGRAIN"), + [MOVE_SUPERPOWER] = _("SUPERPOWER"), + [MOVE_MAGIC_COAT] = _("MAGIC COAT"), + [MOVE_RECYCLE] = _("RECYCLE"), + [MOVE_REVENGE] = _("REVENGE"), + [MOVE_BRICK_BREAK] = _("BRICK BREAK"), + [MOVE_YAWN] = _("YAWN"), + [MOVE_KNOCK_OFF] = _("KNOCK OFF"), + [MOVE_ENDEAVOR] = _("ENDEAVOR"), + [MOVE_ERUPTION] = _("ERUPTION"), + [MOVE_SKILL_SWAP] = _("SKILL SWAP"), + [MOVE_IMPRISON] = _("IMPRISON"), + [MOVE_REFRESH] = _("REFRESH"), + [MOVE_GRUDGE] = _("GRUDGE"), + [MOVE_SNATCH] = _("SNATCH"), + [MOVE_SECRET_POWER] = _("SECRET POWER"), + [MOVE_DIVE] = _("DIVE"), + [MOVE_ARM_THRUST] = _("ARM THRUST"), + [MOVE_CAMOUFLAGE] = _("CAMOUFLAGE"), + [MOVE_TAIL_GLOW] = _("TAIL GLOW"), + [MOVE_LUSTER_PURGE] = _("LUSTER PURGE"), + [MOVE_MIST_BALL] = _("MIST BALL"), + [MOVE_FEATHER_DANCE] = _("FEATHERDANCE"), + [MOVE_TEETER_DANCE] = _("TEETER DANCE"), + [MOVE_BLAZE_KICK] = _("BLAZE KICK"), + [MOVE_MUD_SPORT] = _("MUD SPORT"), + [MOVE_ICE_BALL] = _("ICE BALL"), + [MOVE_NEEDLE_ARM] = _("NEEDLE ARM"), + [MOVE_SLACK_OFF] = _("SLACK OFF"), + [MOVE_HYPER_VOICE] = _("HYPER VOICE"), + [MOVE_POISON_FANG] = _("POISON FANG"), + [MOVE_CRUSH_CLAW] = _("CRUSH CLAW"), + [MOVE_BLAST_BURN] = _("BLAST BURN"), + [MOVE_HYDRO_CANNON] = _("HYDRO CANNON"), + [MOVE_METEOR_MASH] = _("METEOR MASH"), + [MOVE_ASTONISH] = _("ASTONISH"), + [MOVE_WEATHER_BALL] = _("WEATHER BALL"), + [MOVE_AROMATHERAPY] = _("AROMATHERAPY"), + [MOVE_FAKE_TEARS] = _("FAKE TEARS"), + [MOVE_AIR_CUTTER] = _("AIR CUTTER"), + [MOVE_OVERHEAT] = _("OVERHEAT"), + [MOVE_ODOR_SLEUTH] = _("ODOR SLEUTH"), + [MOVE_ROCK_TOMB] = _("ROCK TOMB"), + [MOVE_SILVER_WIND] = _("SILVER WIND"), + [MOVE_METAL_SOUND] = _("METAL SOUND"), + [MOVE_GRASS_WHISTLE] = _("GRASSWHISTLE"), + [MOVE_TICKLE] = _("TICKLE"), + [MOVE_COSMIC_POWER] = _("COSMIC POWER"), + [MOVE_WATER_SPOUT] = _("WATER SPOUT"), + [MOVE_SIGNAL_BEAM] = _("SIGNAL BEAM"), + [MOVE_SHADOW_PUNCH] = _("SHADOW PUNCH"), + [MOVE_EXTRASENSORY] = _("EXTRASENSORY"), + [MOVE_SKY_UPPERCUT] = _("SKY UPPERCUT"), + [MOVE_SAND_TOMB] = _("SAND TOMB"), + [MOVE_SHEER_COLD] = _("SHEER COLD"), + [MOVE_MUDDY_WATER] = _("MUDDY WATER"), + [MOVE_BULLET_SEED] = _("BULLET SEED"), + [MOVE_AERIAL_ACE] = _("AERIAL ACE"), + [MOVE_ICICLE_SPEAR] = _("ICICLE SPEAR"), + [MOVE_IRON_DEFENSE] = _("IRON DEFENSE"), + [MOVE_BLOCK] = _("BLOCK"), + [MOVE_HOWL] = _("HOWL"), + [MOVE_DRAGON_CLAW] = _("DRAGON CLAW"), + [MOVE_FRENZY_PLANT] = _("FRENZY PLANT"), + [MOVE_BULK_UP] = _("BULK UP"), + [MOVE_BOUNCE] = _("BOUNCE"), + [MOVE_MUD_SHOT] = _("MUD SHOT"), + [MOVE_POISON_TAIL] = _("POISON TAIL"), + [MOVE_COVET] = _("COVET"), + [MOVE_VOLT_TACKLE] = _("VOLT TACKLE"), + [MOVE_MAGICAL_LEAF] = _("MAGICAL LEAF"), + [MOVE_WATER_SPORT] = _("WATER SPORT"), + [MOVE_CALM_MIND] = _("CALM MIND"), + [MOVE_LEAF_BLADE] = _("LEAF BLADE"), + [MOVE_DRAGON_DANCE] = _("DRAGON DANCE"), + [MOVE_ROCK_BLAST] = _("ROCK BLAST"), + [MOVE_SHOCK_WAVE] = _("SHOCK WAVE"), + [MOVE_WATER_PULSE] = _("WATER PULSE"), + [MOVE_DOOM_DESIRE] = _("DOOM DESIRE"), + [MOVE_PSYCHO_BOOST] = _("PSYCHO BOOST") }; From d080ebd0f06a67c61b1d1ad0fcb82848381c6f4a Mon Sep 17 00:00:00 2001 From: SphericalIce Date: Fri, 30 Dec 2022 23:59:45 +0000 Subject: [PATCH 06/33] Document oak_speech.c --- data/text/new_game_intro.inc | 44 +- ...{background_tilemap.bin => background.bin} | Bin .../{solid_colors.png => background.png} | Bin .../page_2.bin} | Bin .../page_3.bin} | Bin .../palette.pal} | 0 .../tiles.png} | Bin .../oak_speech/{leaf_pal.pal => leaf/pal.pal} | 0 .../oak_speech/{leaf_pic.png => leaf/pic.png} | Bin .../oak_speech/{oak_pal.pal => oak/pal.pal} | 0 .../oak_speech/{oak_pic.png => oak/pic.png} | Bin .../{pika1.png => pikachu_intro/body.png} | Bin .../{pika2.png => pikachu_intro/ears.png} | Bin .../{pika_eyes.png => pikachu_intro/eyes.png} | Bin .../pikachu.pal} | 0 .../tilemap.bin} | 0 ...rass_platform_palette.pal => platform.pal} | 0 .../{grass_platform.png => platform.png} | Bin .../oak_speech/{red_pal.pal => red/pal.pal} | 0 .../oak_speech/{red_pic.png => red/pic.png} | Bin .../{rival_pal.pal => rival/pal.pal} | 0 .../{rival_pic.png => rival/pic.png} | Bin include/event_scripts.h | 44 +- include/pokeball.h | 4 +- src/oak_speech.c | 1997 ++++++++++------- 25 files changed, 1178 insertions(+), 911 deletions(-) rename graphics/oak_speech/{background_tilemap.bin => background.bin} (100%) rename graphics/oak_speech/{solid_colors.png => background.png} (100%) rename graphics/oak_speech/{help_docs_page2_tilemap.bin => controls_guide/page_2.bin} (100%) rename graphics/oak_speech/{help_docs_page3_tilemap.bin => controls_guide/page_3.bin} (100%) rename graphics/oak_speech/{help_docs_palette.pal => controls_guide/palette.pal} (100%) rename graphics/oak_speech/{game_start_help_ui.png => controls_guide/tiles.png} (100%) rename graphics/oak_speech/{leaf_pal.pal => leaf/pal.pal} (100%) rename graphics/oak_speech/{leaf_pic.png => leaf/pic.png} (100%) rename graphics/oak_speech/{oak_pal.pal => oak/pal.pal} (100%) rename graphics/oak_speech/{oak_pic.png => oak/pic.png} (100%) rename graphics/oak_speech/{pika1.png => pikachu_intro/body.png} (100%) rename graphics/oak_speech/{pika2.png => pikachu_intro/ears.png} (100%) rename graphics/oak_speech/{pika_eyes.png => pikachu_intro/eyes.png} (100%) rename graphics/oak_speech/{pika_palette.pal => pikachu_intro/pikachu.pal} (100%) rename graphics/oak_speech/{new_game_adventure_intro_tilemap.bin => pikachu_intro/tilemap.bin} (100%) rename graphics/oak_speech/{grass_platform_palette.pal => platform.pal} (100%) rename graphics/oak_speech/{grass_platform.png => platform.png} (100%) rename graphics/oak_speech/{red_pal.pal => red/pal.pal} (100%) rename graphics/oak_speech/{red_pic.png => red/pic.png} (100%) rename graphics/oak_speech/{rival_pal.pal => rival/pal.pal} (100%) rename graphics/oak_speech/{rival_pic.png => rival/pic.png} (100%) diff --git a/data/text/new_game_intro.inc b/data/text/new_game_intro.inc index 504d0675f..da895d316 100644 --- a/data/text/new_game_intro.inc +++ b/data/text/new_game_intro.inc @@ -124,32 +124,32 @@ gNameChoice_Momo:: gNameChoice_Suzi:: .string "SUZI$" -gNewGame_HelpDocs1:: +gControlsGuide_Text_Intro:: .string "The various buttons will be explained in\n" .string "the order of their importance.$" -gNewGame_HelpDocs2:: +gControlsGuide_Text_DPad:: .string "Moves the main character.\n" .string "Also used to choose various data\n" .string "headings.$" -gNewGame_HelpDocs3:: +gControlsGuide_Text_AButton:: .string "Used to confirm a choice, check\n" .string "things, chat, and scroll text.$" -gNewGame_HelpDocs4:: +gControlsGuide_Text_BButton:: .string "Used to exit, cancel a choice,\n" .string "and cancel a mode.$" -gNewGame_HelpDocs5:: +gControlsGuide_Text_StartButton:: .string "Press this button to open the\n" .string "MENU.$" -gNewGame_HelpDocs6:: +gControlsGuide_Text_SelectButton:: .string "Used to shift items and to use\n" .string "a registered item.$" -gNewGame_HelpDocs7:: +gControlsGuide_Text_LRButtons:: .string "If you need help playing the\n" .string "game, or on how to do things,\n" .string "press the L or R Button.$" @@ -158,7 +158,7 @@ gOakText_AskPlayerGender:: .string "Now tell me. Are you a boy?\n" .string "Or are you a girl?$" -gNewGameAdventureIntro1:: +gPikachuIntro_Text_Page1:: .string "In the world which you are about to\n" .string "enter, you will embark on a grand\n" .string "adventure with you as the hero.\n" @@ -168,7 +168,7 @@ gNewGameAdventureIntro1:: .string "or caves. Gather information and\n" .string "hints from every source.$" -gNewGameAdventureIntro2:: +gPikachuIntro_Text_Page2:: .string "New paths will open to you by helping\n" .string "people in need, overcoming challenges,\n" .string "and solving mysteries.\n" @@ -177,7 +177,7 @@ gNewGameAdventureIntro2:: .string "others and attacked by wild creatures.\n" .string "Be brave and keep pushing on.$" -gNewGameAdventureIntro3:: +gPikachuIntro_Text_Page3:: .string "Through your adventure, we hope\n" .string "that you will interact with all sorts\n" .string "of people and achieve personal growth.\n" @@ -186,49 +186,49 @@ gNewGameAdventureIntro3:: .string "Press the A Button, and let your\n" .string "adventure begin!$" -gOakText_WelcomeToTheWorld:: +gOakSpeech_Text_WelcomeToTheWorld:: .string "Hello, there!\n" .string "Glad to meet you!\pWelcome to the world of POKéMON!\pMy name is OAK.\pPeople affectionately refer to me\n" .string "as the POKéMON PROFESSOR.\p$" -gOakText_WorldInhabited1:: +gOakSpeech_Text_ThisWorld:: .string "This world…$" -gOakText_WorldInhabited2:: +gOakSpeech_Text_IsInhabitedFarAndWide:: .string "…is inhabited far and wide by\n" .string "creatures called POKéMON.\p$" -gOakText_PetsBattlingStudy:: +gOakSpeech_Text_IStudyPokemon:: .string "For some people, POKéMON are pets.\n" .string "Others use them for battling.\pAs for myself…\pI study POKéMON as a profession.\p$" -gOakText_TellMeALittleAboutYourself:: +gOakSpeech_Text_TellMeALittleAboutYourself:: .string "But first, tell me a little about\n" .string "yourself.\p$" -gOakText_AskPlayerName:: +gOakSpeech_Text_YourNameWhatIsIt:: .string "Let's begin with your name.\n" .string "What is it?\p$" -gOakText_FinalizePlayerName:: +gOakSpeech_Text_SoYourNameIsPlayer:: .string "Right…\n" .string "So your name is {PLAYER}.$" -gOakText_IntroduceRival:: +gOakSpeech_Text_WhatWasHisName:: .string "This is my grandson.\pHe's been your rival since you both\n" .string "were babies.\p…Erm, what was his name now?$" -gOakText_AskRivalName:: +gOakSpeech_Text_YourRivalsNameWhatWasIt:: .string "Your rival's name, what was it now?$" -gOakText_ConfirmRivalName:: +gOakSpeech_Text_ConfirmRivalName:: .string "…Er, was it {RIVAL}?$" -gOakText_RememberRivalName:: +gOakSpeech_Text_RememberRivalsName:: .string "That's right! I remember now!\n" .string "His name is {RIVAL}!\p$" -gOakText_LegendAboutToUnfold:: +gOakSpeech_Text_LetsGo:: .string "{PLAYER}!\pYour very own POKéMON legend is\n" .string "about to unfold!\pA world of dreams and adventures\n" .string "with POKéMON awaits! Let's go!$" diff --git a/graphics/oak_speech/background_tilemap.bin b/graphics/oak_speech/background.bin similarity index 100% rename from graphics/oak_speech/background_tilemap.bin rename to graphics/oak_speech/background.bin diff --git a/graphics/oak_speech/solid_colors.png b/graphics/oak_speech/background.png similarity index 100% rename from graphics/oak_speech/solid_colors.png rename to graphics/oak_speech/background.png diff --git a/graphics/oak_speech/help_docs_page2_tilemap.bin b/graphics/oak_speech/controls_guide/page_2.bin similarity index 100% rename from graphics/oak_speech/help_docs_page2_tilemap.bin rename to graphics/oak_speech/controls_guide/page_2.bin diff --git a/graphics/oak_speech/help_docs_page3_tilemap.bin b/graphics/oak_speech/controls_guide/page_3.bin similarity index 100% rename from graphics/oak_speech/help_docs_page3_tilemap.bin rename to graphics/oak_speech/controls_guide/page_3.bin diff --git a/graphics/oak_speech/help_docs_palette.pal b/graphics/oak_speech/controls_guide/palette.pal similarity index 100% rename from graphics/oak_speech/help_docs_palette.pal rename to graphics/oak_speech/controls_guide/palette.pal diff --git a/graphics/oak_speech/game_start_help_ui.png b/graphics/oak_speech/controls_guide/tiles.png similarity index 100% rename from graphics/oak_speech/game_start_help_ui.png rename to graphics/oak_speech/controls_guide/tiles.png diff --git a/graphics/oak_speech/leaf_pal.pal b/graphics/oak_speech/leaf/pal.pal similarity index 100% rename from graphics/oak_speech/leaf_pal.pal rename to graphics/oak_speech/leaf/pal.pal diff --git a/graphics/oak_speech/leaf_pic.png b/graphics/oak_speech/leaf/pic.png similarity index 100% rename from graphics/oak_speech/leaf_pic.png rename to graphics/oak_speech/leaf/pic.png diff --git a/graphics/oak_speech/oak_pal.pal b/graphics/oak_speech/oak/pal.pal similarity index 100% rename from graphics/oak_speech/oak_pal.pal rename to graphics/oak_speech/oak/pal.pal diff --git a/graphics/oak_speech/oak_pic.png b/graphics/oak_speech/oak/pic.png similarity index 100% rename from graphics/oak_speech/oak_pic.png rename to graphics/oak_speech/oak/pic.png diff --git a/graphics/oak_speech/pika1.png b/graphics/oak_speech/pikachu_intro/body.png similarity index 100% rename from graphics/oak_speech/pika1.png rename to graphics/oak_speech/pikachu_intro/body.png diff --git a/graphics/oak_speech/pika2.png b/graphics/oak_speech/pikachu_intro/ears.png similarity index 100% rename from graphics/oak_speech/pika2.png rename to graphics/oak_speech/pikachu_intro/ears.png diff --git a/graphics/oak_speech/pika_eyes.png b/graphics/oak_speech/pikachu_intro/eyes.png similarity index 100% rename from graphics/oak_speech/pika_eyes.png rename to graphics/oak_speech/pikachu_intro/eyes.png diff --git a/graphics/oak_speech/pika_palette.pal b/graphics/oak_speech/pikachu_intro/pikachu.pal similarity index 100% rename from graphics/oak_speech/pika_palette.pal rename to graphics/oak_speech/pikachu_intro/pikachu.pal diff --git a/graphics/oak_speech/new_game_adventure_intro_tilemap.bin b/graphics/oak_speech/pikachu_intro/tilemap.bin similarity index 100% rename from graphics/oak_speech/new_game_adventure_intro_tilemap.bin rename to graphics/oak_speech/pikachu_intro/tilemap.bin diff --git a/graphics/oak_speech/grass_platform_palette.pal b/graphics/oak_speech/platform.pal similarity index 100% rename from graphics/oak_speech/grass_platform_palette.pal rename to graphics/oak_speech/platform.pal diff --git a/graphics/oak_speech/grass_platform.png b/graphics/oak_speech/platform.png similarity index 100% rename from graphics/oak_speech/grass_platform.png rename to graphics/oak_speech/platform.png diff --git a/graphics/oak_speech/red_pal.pal b/graphics/oak_speech/red/pal.pal similarity index 100% rename from graphics/oak_speech/red_pal.pal rename to graphics/oak_speech/red/pal.pal diff --git a/graphics/oak_speech/red_pic.png b/graphics/oak_speech/red/pic.png similarity index 100% rename from graphics/oak_speech/red_pic.png rename to graphics/oak_speech/red/pic.png diff --git a/graphics/oak_speech/rival_pal.pal b/graphics/oak_speech/rival/pal.pal similarity index 100% rename from graphics/oak_speech/rival_pal.pal rename to graphics/oak_speech/rival/pal.pal diff --git a/graphics/oak_speech/rival_pic.png b/graphics/oak_speech/rival/pic.png similarity index 100% rename from graphics/oak_speech/rival_pic.png rename to graphics/oak_speech/rival/pic.png diff --git a/include/event_scripts.h b/include/event_scripts.h index 49857a76b..388cc598a 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -748,29 +748,29 @@ extern const u8 gNameChoice_Norie[]; extern const u8 gNameChoice_Sai[]; extern const u8 gNameChoice_Momo[]; extern const u8 gNameChoice_Suzi[]; -extern const u8 gNewGame_HelpDocs1[]; -extern const u8 gNewGame_HelpDocs2[]; -extern const u8 gNewGame_HelpDocs3[]; -extern const u8 gNewGame_HelpDocs4[]; -extern const u8 gNewGame_HelpDocs5[]; -extern const u8 gNewGame_HelpDocs6[]; -extern const u8 gNewGame_HelpDocs7[]; +extern const u8 gControlsGuide_Text_Intro[]; +extern const u8 gControlsGuide_Text_DPad[]; +extern const u8 gControlsGuide_Text_AButton[]; +extern const u8 gControlsGuide_Text_BButton[]; +extern const u8 gControlsGuide_Text_StartButton[]; +extern const u8 gControlsGuide_Text_SelectButton[]; +extern const u8 gControlsGuide_Text_LRButtons[]; extern const u8 gOakText_AskPlayerGender[]; -extern const u8 gNewGameAdventureIntro1[]; -extern const u8 gNewGameAdventureIntro2[]; -extern const u8 gNewGameAdventureIntro3[]; -extern const u8 gOakText_WelcomeToTheWorld[]; -extern const u8 gOakText_WorldInhabited1[]; -extern const u8 gOakText_WorldInhabited2[]; -extern const u8 gOakText_PetsBattlingStudy[]; -extern const u8 gOakText_TellMeALittleAboutYourself[]; -extern const u8 gOakText_AskPlayerName[]; -extern const u8 gOakText_FinalizePlayerName[]; -extern const u8 gOakText_IntroduceRival[]; -extern const u8 gOakText_AskRivalName[]; -extern const u8 gOakText_ConfirmRivalName[]; -extern const u8 gOakText_RememberRivalName[]; -extern const u8 gOakText_LegendAboutToUnfold[]; +extern const u8 gPikachuIntro_Text_Page1[]; +extern const u8 gPikachuIntro_Text_Page2[]; +extern const u8 gPikachuIntro_Text_Page3[]; +extern const u8 gOakSpeech_Text_WelcomeToTheWorld[]; +extern const u8 gOakSpeech_Text_ThisWorld[]; +extern const u8 gOakSpeech_Text_IsInhabitedFarAndWide[]; +extern const u8 gOakSpeech_Text_IStudyPokemon[]; +extern const u8 gOakSpeech_Text_TellMeALittleAboutYourself[]; +extern const u8 gOakSpeech_Text_YourNameWhatIsIt[]; +extern const u8 gOakSpeech_Text_SoYourNameIsPlayer[]; +extern const u8 gOakSpeech_Text_WhatWasHisName[]; +extern const u8 gOakSpeech_Text_YourRivalsNameWhatWasIt[]; +extern const u8 gOakSpeech_Text_ConfirmRivalName[]; +extern const u8 gOakSpeech_Text_RememberRivalsName[]; +extern const u8 gOakSpeech_Text_LetsGo[]; // Help System extern const u8 Help_Text_WhatShouldIDo[]; diff --git a/include/pokeball.h b/include/pokeball.h index 0ef6d4357..5c4785f4c 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -36,8 +36,8 @@ extern const struct SpriteTemplate gBallSpriteTemplates[]; #define POKEBALL_OPPONENT_SENDOUT 0xFE u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow); -void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h); -u8 CreateTradePokeballSprite(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h); +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes); +u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 delay, u32 fadePalettes); void DoHitAnimHealthboxEffect(u8 bank); void LoadBallGfx(u8 ballId); void FreeBallGfx(u8 ballId); diff --git a/src/oak_speech.c b/src/oak_speech.c index 7f10528f6..32a9a6a37 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -17,111 +17,127 @@ #include "data.h" #include "constants/songs.h" +enum +{ + WIN_INTRO_TEXTBOX, + WIN_INTRO_BOYGIRL, + WIN_INTRO_YESNO, + WIN_INTRO_NAMES, + NUM_INTRO_WINDOWS, +}; + struct OakSpeechResources { - void *solidColorsGfx; - void *trainerPicTilemapBuffer; - void *unk_0008; - u8 filler_000C[4]; + void *oakSpeechBackgroundTiles; + void *trainerPicTilemap; + void *pikachuIntroTilemap; + void *unused1; u16 hasPlayerBeenNamed; - u16 unk_0012; - u16 unk_0014[4]; + u16 currentPage; + u16 windowIds[NUM_INTRO_WINDOWS]; u8 textColor[3]; u8 textSpeed; - u8 filler_0020[0x1800]; + u8 unused2[0x1800]; u8 bg2TilemapBuffer[0x400]; u8 bg1TilemapBuffer[0x800]; -}; //size=0x2420 +}; -EWRAM_DATA struct OakSpeechResources * sOakSpeechResources = NULL; +static EWRAM_DATA struct OakSpeechResources *sOakSpeechResources = NULL; -static void Task_OaksSpeech1(u8 taskId); -static void CreateHelpDocsPage1(void); -static void Task_OaksSpeech2(u8 taskId); -static void Task_OakSpeech3(u8 taskId); -static void Task_OakSpeech5(u8 taskId); -static void Task_OakSpeech6(u8 taskId); -static void Task_OakSpeech7(u8 taskId); -static void Task_OakSpeech8(u8 taskId); -static void Task_OakSpeech9(u8 taskId); -static void Task_OakSpeech10(u8 taskId); -static void Task_OakSpeech10(u8 taskId); -static void Task_OakSpeech11(u8 taskId); -static void Task_OakSpeech12(u8 taskId); -static void Task_OakSpeech13(u8 taskId); -static void Task_OakSpeech14(u8 taskId); -static void Task_OakSpeech15(u8 taskId); -static void Task_OakSpeech16(u8 taskId); -static void Task_OakSpeech17(u8 taskId); -static void Task_OakSpeech18(u8 taskId); -static void Task_OakSpeech19(u8 taskId); -static void Task_OakSpeech20(u8 taskId); -static void Task_OakSpeech21(u8 taskId); -static void Task_OakSpeech22(u8 taskId); -static void Task_OakSpeech23(u8 taskId); -static void Task_OakSpeech24(u8 taskId); -static void Task_OakSpeech29(u8 taskId); -static void Task_OakSpeech25(u8 taskId); -static void Task_OakSpeech26(u8 taskId); -static void Task_OakSpeech27(u8 taskId); -static void Task_OakSpeech30(u8 taskId); -static void Task_OakSpeech31(u8 taskId); -static void Task_OakSpeech32(u8 taskId); -static void Task_OakSpeech34(u8 taskId); -static void Task_OakSpeech33(u8 taskId); -static void Task_OakSpeech36(u8 taskId); -static void Task_OakSpeech37(u8 taskId); -static void Task_OakSpeech38(u8 taskId); -static void Task_OakSpeech38_3(u8 taskId); -static void Task_OakSpeech39(u8 taskId); -static void Task_OakSpeech38_1(u8 taskId); -static void Task_OakSpeech38_sub1(u8 taskId); -static void Task_OakSpeech38_2(u8 taskId); -static void Task_OakSpeech38_sub2(u8 taskId); -static void Task_OakSpeech40(u8 taskId); -static void Task_OakSpeech41(u8 taskId); -static void Task_OakSpeech42(u8 taskId); +static void Task_NewGameScene(u8); + +static void ControlsGuide_LoadPage1(void); +static void Task_ControlsGuide_HandleInput(u8); +static void Task_ControlsGuide_ChangePage(u8); +static void Task_ControlsGuide_Clear(u8); + +static void Task_PikachuIntro_LoadPage1(u8); +static void Task_PikachuIntro_HandleInput(u8); +static void Task_PikachuIntro_Clear(u8); + +static void Task_OakSpeech_Init(u8); +static void Task_OakSpeech_WelcomeToTheWorld(u8); +static void Task_OakSpeech_ThisWorld(u8); +static void Task_OakSpeech_ReleaseNidoranFFromPokeBall(u8); +static void Task_OakSpeech_IsInhabitedFarAndWide(u8); +static void Task_OakSpeech_IStudyPokemon(u8); +static void Task_OakSpeech_ReturnNidoranFToPokeBall(u8); +static void Task_OakSpeech_TellMeALittleAboutYourself(u8); +static void Task_OakSpeech_FadeOutOak(u8); +static void Task_OakSpeech_AskPlayerGender(u8); +static void Task_OakSpeech_ShowGenderOptions(u8); +static void Task_OakSpeech_HandleGenderInput(u8); +static void Task_OakSpeech_ClearGenderWindows(u8); +static void Task_OakSpeech_LoadPlayerPic(u8); +static void Task_OakSpeech_YourNameWhatIsIt(u8); +static void Task_OakSpeech_FadeOutForPlayerNamingScreen(u8); +static void Task_OakSpeech_HandleRivalNameInput(u8); +static void Task_OakSpeech_DoNamingScreen(u8); +static void Task_OakSpeech_ConfirmName(u8); +static void Task_OakSpeech_HandleConfirmNameInput(u8); +static void Task_OakSpeech_FadeOutPlayerPic(u8); +static void Task_OakSpeech_FadeOutRivalPic(u8); +static void Task_OakSpeech_FadeInRivalPic(u8); +static void Task_OakSpeech_AskRivalsName(u8); +static void Task_OakSpeech_ReshowPlayersPic(u8); +static void Task_OakSpeech_LetsGo(u8); +static void Task_OakSpeech_FadeOutBGM(u8); +static void Task_OakSpeech_SetUpExitAnimation(u8); +static void Task_OakSpeech_SetUpShrinkPlayerPic(u8); +static void Task_OakSpeech_ShrinkPlayerPic(u8); +static void Task_OakSpeech_SetUpDestroyPlatformSprites(u8); +static void Task_OakSpeech_DestroyPlatformSprites(u8); +static void Task_OakSpeech_SetUpFadePlayerPicWhite(u8); +static void Task_OakSpeech_FadePlayerPicWhite(u8); +static void Task_OakSpeech_FadePlayerPicToBlack(u8); +static void Task_OakSpeech_WaitForFade(u8); +static void Task_OakSpeech_FreeResources(u8); static void CB2_ReturnFromNamingScreen(void); -static void CreateNidoranFSprite(u8 taskId); -static void CreatePikaOrGrassPlatformSpriteAndLinkToCurrentTask(u8 taskId, u8 state); -static void DestroyLinkedPikaOrGrassPlatformSprites(u8 taskId, u8 state); -static void LoadOaksSpeechTrainerPic(u16 whichPic, u16 tileOffset); -static void DestroyOaksSpeechTrainerPic(void); -static void CreateFadeInTask(u8 taskId, u8 state); -static void CreateFadeOutTask(u8 taskId, u8 state); -static void PrintNameChoiceOptions(u8 taskId, u8 state); -static void GetDefaultName(u8 hasPlayerBeenNamed, u8 rivalNameChoice); +static void CreateNidoranFSprite(u8); +static void CreatePikachuOrPlatformSprites(u8, u8); +static void DestroyPikachuOrPlatformSprites(u8, u8); +static void LoadTrainerPic(u16, u16); +static void ClearTrainerPic(void); +static void CreateFadeInTask(u8, u8); +static void CreateFadeOutTask(u8, u8); +static void PrintNameChoiceOptions(u8, u8); +static void GetDefaultName(u8, u8); extern const u8 gText_Controls[]; extern const u8 gText_ABUTTONNext[]; extern const u8 gText_ABUTTONNext_BBUTTONBack[]; extern const u8 gText_Boy[]; extern const u8 gText_Girl[]; +extern const struct OamData gOamData_AffineOff_ObjBlend_32x32; +extern const struct OamData gOamData_AffineOff_ObjNormal_32x32; +extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; +extern const struct OamData gOamData_AffineOff_ObjNormal_16x8; -ALIGNED(4) static const u16 sHelpDocsPalette[] = INCBIN_U16("graphics/oak_speech/help_docs_palette.gbapal"); -static const u32 sOakSpeechGfx_GameStartHelpUI[] = INCBIN_U32("graphics/oak_speech/game_start_help_ui.4bpp.lz"); -static const u32 sNewGameAdventureIntroTilemap[] = INCBIN_U32("graphics/oak_speech/new_game_adventure_intro_tilemap.bin.lz"); -static const u32 sOakSpeechGfx_SolidColors[] = INCBIN_U32("graphics/oak_speech/solid_colors.4bpp.lz"); -static const u32 sOakSpeech_BackgroundTilemap[] = INCBIN_U32("graphics/oak_speech/background_tilemap.bin.lz"); -static const u16 sHelpDocsPage2Tilemap[] = INCBIN_U16("graphics/oak_speech/help_docs_page2_tilemap.bin"); -static const u16 sHelpDocsPage3Tilemap[] = INCBIN_U16("graphics/oak_speech/help_docs_page3_tilemap.bin"); -static const u16 sOakSpeechGfx_LeafPal[] = INCBIN_U16("graphics/oak_speech/leaf_pal.gbapal"); -static const u32 sOakSpeechGfx_LeafPic[] = INCBIN_U32("graphics/oak_speech/leaf_pic.8bpp.lz"); -static const u16 sOakSpeechGfx_RedPal[] = INCBIN_U16("graphics/oak_speech/red_pal.gbapal"); -static const u32 sOakSpeechGfx_RedPic[] = INCBIN_U32("graphics/oak_speech/red_pic.8bpp.lz"); -static const u16 sOakSpeechGfx_OakPal[] = INCBIN_U16("graphics/oak_speech/oak_pal.gbapal"); -static const u32 sOakSpeechGfx_OakPic[] = INCBIN_U32("graphics/oak_speech/oak_pic.8bpp.lz"); -static const u16 sOakSpeechGfx_RivalPal[] = INCBIN_U16("graphics/oak_speech/rival_pal.gbapal"); -static const u32 sOakSpeechGfx_RivalPic[] = INCBIN_U32("graphics/oak_speech/rival_pic.8bpp.lz"); -static const u16 sOakSpeech_GrassPlatformPalette[] = INCBIN_U16("graphics/oak_speech/grass_platform_palette.gbapal"); -static const u16 sOakSpeech_PikaPalette[] = INCBIN_U16("graphics/oak_speech/pika_palette.gbapal"); -static const u32 sOakSpeechGfx_GrassPlatform[] = INCBIN_U32("graphics/oak_speech/grass_platform.4bpp.lz"); -static const u32 sOakSpeechGfx_Pika1[] = INCBIN_U32("graphics/oak_speech/pika1.4bpp.lz"); -static const u32 sOakSpeechGfx_Pika2[] = INCBIN_U32("graphics/oak_speech/pika2.4bpp.lz"); -static const u32 sOakSpeechGfx_PikaEyes[] = INCBIN_U32("graphics/oak_speech/pika_eyes.4bpp.lz"); +static const u16 sControlsGuide_Pal[] = INCBIN_U16("graphics/oak_speech/controls_guide/palette.gbapal"); +static const u32 sControlsGuide_Tiles[] = INCBIN_U32("graphics/oak_speech/controls_guide/tiles.4bpp.lz"); +static const u32 sPikachuIntro_Tilemap[] = INCBIN_U32("graphics/oak_speech/pikachu_intro/tilemap.bin.lz"); +static const u32 sOakSpeech_Background_Tiles[] = INCBIN_U32("graphics/oak_speech/background.4bpp.lz"); +static const u32 sOakSpeech_Background_Tilemap[] = INCBIN_U32("graphics/oak_speech/background.bin.lz"); +static const u16 sControlsGuide_Tilemap_Page2[] = INCBIN_U16("graphics/oak_speech/controls_guide/page_2.bin"); +static const u16 sControlsGuide_Tilemap_Page3[] = INCBIN_U16("graphics/oak_speech/controls_guide/page_3.bin"); +static const u16 sOakSpeech_Leaf_Pal[] = INCBIN_U16("graphics/oak_speech/leaf/pal.gbapal"); +static const u32 sOakSpeech_Leaf_Tiles[] = INCBIN_U32("graphics/oak_speech/leaf/pic.8bpp.lz"); +static const u16 sOakSpeech_Red_Pal[] = INCBIN_U16("graphics/oak_speech/red/pal.gbapal"); +static const u32 sOakSpeech_Red_Tiles[] = INCBIN_U32("graphics/oak_speech/red/pic.8bpp.lz"); +static const u16 sOakSpeech_Oak_Pal[] = INCBIN_U16("graphics/oak_speech/oak/pal.gbapal"); +static const u32 sOakSpeech_Oak_Tiles[] = INCBIN_U32("graphics/oak_speech/oak/pic.8bpp.lz"); +static const u16 sOakSpeech_Rival_Pal[] = INCBIN_U16("graphics/oak_speech/rival/pal.gbapal"); +static const u32 sOakSpeech_Rival_Tiles[] = INCBIN_U32("graphics/oak_speech/rival/pic.8bpp.lz"); +static const u16 sOakSpeech_Platform_Pal[] = INCBIN_U16("graphics/oak_speech/platform.gbapal"); +static const u16 sPikachuIntro_Pikachu_Pal[] = INCBIN_U16("graphics/oak_speech/pikachu_intro/pikachu.gbapal"); +static const u32 sOakSpeech_Platform_Gfx[] = INCBIN_U32("graphics/oak_speech/platform.4bpp.lz"); +static const u32 sPikachuIntro_PikachuBody_Gfx[] = INCBIN_U32("graphics/oak_speech/pikachu_intro/body.4bpp.lz"); +static const u32 sPikachuIntro_PikachuEars_Gfx[] = INCBIN_U32("graphics/oak_speech/pikachu_intro/ears.4bpp.lz"); +static const u32 sPikachuIntro_PikachuEyes_Gfx[] = INCBIN_U32("graphics/oak_speech/pikachu_intro/eyes.4bpp.lz"); -static const struct BgTemplate sBgTemplates[3] = { +static const struct BgTemplate sBgTemplates[] = +{ { .bg = 0, .charBaseIndex = 2, @@ -129,208 +145,344 @@ static const struct BgTemplate sBgTemplates[3] = { .screenSize = 0, .paletteMode = 0, .priority = 0, - .baseTile = 0x000 - }, { + .baseTile = 0 + }, + { .bg = 1, .charBaseIndex = 0, .mapBaseIndex = 30, .screenSize = 0, .paletteMode = 0, .priority = 2, - .baseTile = 0x000 - }, { + .baseTile = 0 + }, + { .bg = 2, .charBaseIndex = 0, .mapBaseIndex = 28, .screenSize = 1, .paletteMode = 1, .priority = 1, - .baseTile = 0x000 + .baseTile = 0 } }; -static const struct WindowTemplate sHelpDocsWindowTemplates1[] = { +enum +{ + CONTROLS_GUIDE_PAGE_1_WINDOW, + NUM_CONTROLS_GUIDE_PAGE_1_WINDOWS, +}; + +static const struct WindowTemplate sControlsGuide_WindowTemplate_Page1[NUM_CONTROLS_GUIDE_PAGE_1_WINDOWS + 1] = +{ + [CONTROLS_GUIDE_PAGE_1_WINDOW] = { - .bg = 0x00, - .tilemapLeft = 0x00, - .tilemapTop = 0x07, - .width = 0x1e, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x0001 - }, DUMMY_WIN_TEMPLATE + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 7, + .width = 30, + .height = 4, + .paletteNum = 15, + .baseBlock = 1 + }, + DUMMY_WIN_TEMPLATE }; -static const struct WindowTemplate sHelpDocsWindowTemplates2[] = { +enum +{ + CONTROLS_GUIDE_PAGES_2_3_WINDOW_TOP, + CONTROLS_GUIDE_PAGES_2_3_WINDOW_MIDDLE, + CONTROLS_GUIDE_PAGES_2_3_WINDOW_BOTTOM, + NUM_CONTROLS_GUIDE_PAGES_2_3_WINDOWS, +}; + +static const struct WindowTemplate sControlsGuide_WindowTemplate_Page2[NUM_CONTROLS_GUIDE_PAGES_2_3_WINDOWS + 1] = +{ + [CONTROLS_GUIDE_PAGES_2_3_WINDOW_TOP] = { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x03, - .width = 0x18, - .height = 0x06, - .paletteNum = 0x0f, - .baseBlock = 0x0001 - }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0a, - .width = 0x18, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x0092 - }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0f, - .width = 0x18, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x00f3 - }, DUMMY_WIN_TEMPLATE -}; - -static const struct WindowTemplate sHelpDocsWindowTemplates3[] = { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 3, + .width = 24, + .height = 6, + .paletteNum = 15, + .baseBlock = 1 + }, + [CONTROLS_GUIDE_PAGES_2_3_WINDOW_MIDDLE] = { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x03, - .width = 0x18, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x0001 - }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x08, - .width = 0x18, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x0062 - }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0d, - .width = 0x18, - .height = 0x06, - .paletteNum = 0x0f, - .baseBlock = 0x00c3 - }, DUMMY_WIN_TEMPLATE -}; - -static const struct WindowTemplate *const sHelpDocsWindowTemplatePtrs[3] = { - sHelpDocsWindowTemplates1, - sHelpDocsWindowTemplates2, - sHelpDocsWindowTemplates3 -}; - -static const struct WindowTemplate sNewGameAdventureIntroWindowTemplates[] = { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 10, + .width = 24, + .height = 4, + .paletteNum = 15, + .baseBlock = 146 + }, + [CONTROLS_GUIDE_PAGES_2_3_WINDOW_BOTTOM] = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x04, - .width = 0x1c, - .height = 0x0f, - .paletteNum = 0x0f, - .baseBlock = 0x0001 - }, { - .bg = 0x00, - .tilemapLeft = 0x12, - .tilemapTop = 0x09, - .width = 0x09, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x0174 - }, { - .bg = 0x00, - .tilemapLeft = 0x02, - .tilemapTop = 0x02, - .width = 0x06, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x0180 - }, { - .bg = 0x00, - .tilemapLeft = 0x02, - .tilemapTop = 0x02, - .width = 0x0c, - .height = 0x0a, - .paletteNum = 0x0f, - .baseBlock = 0x0001 - }, DUMMY_WIN_TEMPLATE + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 15, + .width = 24, + .height = 4, + .paletteNum = 15, + .baseBlock = 243 + }, + DUMMY_WIN_TEMPLATE }; -static const u8 sTextColor_HelpSystem[4] = { - 0x00, 0x01, 0x02 +static const struct WindowTemplate sControlsGuide_WindowTemplate_Page3[NUM_CONTROLS_GUIDE_PAGES_2_3_WINDOWS + 1] = +{ + [CONTROLS_GUIDE_PAGES_2_3_WINDOW_TOP] = + { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 3, + .width = 24, + .height = 4, + .paletteNum = 15, + .baseBlock = 1 + }, + [CONTROLS_GUIDE_PAGES_2_3_WINDOW_MIDDLE] = + { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 8, + .width = 24, + .height = 4, + .paletteNum = 15, + .baseBlock = 98 + }, + [CONTROLS_GUIDE_PAGES_2_3_WINDOW_BOTTOM] = + { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 13, + .width = 24, + .height = 6, + .paletteNum = 15, + .baseBlock = 195 + }, + DUMMY_WIN_TEMPLATE }; -static const u8 sTextColor_OakSpeech[4] = { - 0x00, 0x02, 0x03 +enum +{ + CONTROLS_GUIDE_PAGE_1, + CONTROLS_GUIDE_PAGE_2, + CONTROLS_GUIDE_PAGE_3, + NUM_CONTROLS_GUIDE_PAGES, }; -static const u8 *const sNewGameAdventureIntroTextPointers[] = { - gNewGameAdventureIntro1, - gNewGameAdventureIntro2, - gNewGameAdventureIntro3 +static const struct WindowTemplate *const sControlsGuide_WindowTemplates[NUM_CONTROLS_GUIDE_PAGES] = +{ + [CONTROLS_GUIDE_PAGE_1] = sControlsGuide_WindowTemplate_Page1, + [CONTROLS_GUIDE_PAGE_2] = sControlsGuide_WindowTemplate_Page2, + [CONTROLS_GUIDE_PAGE_3] = sControlsGuide_WindowTemplate_Page3 }; -static const struct CompressedSpriteSheet sOakSpeech_PikaSpriteSheets[3] = { - { (const void *)sOakSpeechGfx_Pika1, 0x0400, 0x1001 }, - { (const void *)sOakSpeechGfx_Pika2, 0x0200, 0x1002 }, - { (const void *)sOakSpeechGfx_PikaEyes, 0x0080, 0x1003 }, +static const struct WindowTemplate sIntro_WindowTemplates[NUM_INTRO_WINDOWS + 1] = +{ + [WIN_INTRO_TEXTBOX] = + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 4, + .width = 28, + .height = 15, + .paletteNum = 15, + .baseBlock = 1 + }, + [WIN_INTRO_BOYGIRL] = + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 9, + .width = 9, + .height = 4, + .paletteNum = 15, + .baseBlock = 372 + }, + [WIN_INTRO_YESNO] = + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 2, + .width = 6, + .height = 4, + .paletteNum = 15, + .baseBlock = 384 + }, + [WIN_INTRO_NAMES] = + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 2, + .width = 12, + .height = 10, + .paletteNum = 15, + .baseBlock = 1 + }, + DUMMY_WIN_TEMPLATE }; -static const struct CompressedSpriteSheet sOakSpeech_GrassPlatformSpriteSheet = { - (const void *)sOakSpeechGfx_GrassPlatform, 0x0600, 0x1000 +static const u8 sTextColor_White[] = { 0, 1, 2, 0 }; +static const u8 sTextColor_DarkGray[] = { 0, 2, 3, 0 }; + +enum +{ + PIKACHU_INTRO_PAGE_1, + PIKACHU_INTRO_PAGE_2, + PIKACHU_INTRO_PAGE_3, + NUM_PIKACHU_INTRO_PAGES, }; -static const struct SpritePalette sOakSpeech_PikaSpritePal = { - (const void *)sOakSpeech_PikaPalette, 0x1001 +static const u8 *const sPikachuIntro_Strings[NUM_PIKACHU_INTRO_PAGES] = +{ + [PIKACHU_INTRO_PAGE_1] = gPikachuIntro_Text_Page1, + [PIKACHU_INTRO_PAGE_2] = gPikachuIntro_Text_Page2, + [PIKACHU_INTRO_PAGE_3] = gPikachuIntro_Text_Page3 }; -static const struct SpritePalette sOakSpeech_GrassPlatformSpritePal = { - (const void *)sOakSpeech_GrassPlatformPalette, 0x1000 +#define GFX_TAG_PLATFORM 0x1000 +#define GFX_TAG_PIKACHU 0x1001 +#define GFX_TAG_PIKACHU_EARS 0x1002 +#define GFX_TAG_PIKACHU_EYES 0x1003 + +#define PAL_TAG_PLATFORM 0x1000 +#define PAL_TAG_PIKACHU 0x1001 + +enum +{ + SPRITE_TYPE_PIKACHU, + SPRITE_TYPE_PLATFORM, }; -static const union AnimCmd sGrassPlatformAnim1[] = { +enum +{ + PIKACHU_BODY_PLATFORM_LEFT, + PIKACHU_EARS_PLATFORM_MIDDLE, + PIKACHU_EYES_PLATFORM_RIGHT, + NUM_PIKACHU_PLATFORM_SPRITES, +}; + +static const struct CompressedSpriteSheet sPikachuIntro_Pikachu_SpriteSheets[] = +{ + [PIKACHU_BODY_PLATFORM_LEFT] = + { + .data = sPikachuIntro_PikachuBody_Gfx, + .size = 0x400, + .tag = GFX_TAG_PIKACHU + }, + [PIKACHU_EARS_PLATFORM_MIDDLE] = + { + .data = sPikachuIntro_PikachuEars_Gfx, + .size = 0x200, + .tag = GFX_TAG_PIKACHU_EARS + }, + [PIKACHU_EYES_PLATFORM_RIGHT] = + { + .data = sPikachuIntro_PikachuEyes_Gfx, + .size = 0x80, + .tag = GFX_TAG_PIKACHU_EYES + }, +}; + +static const struct CompressedSpriteSheet sOakSpeech_Platform_SpriteSheet = +{ + .data = sOakSpeech_Platform_Gfx, + .size = 0x600, + .tag = GFX_TAG_PLATFORM +}; + +static const struct SpritePalette sPikachuIntro_Pikachu_SpritePalette = +{ + .data = sPikachuIntro_Pikachu_Pal, + .tag = PAL_TAG_PIKACHU +}; + +static const struct SpritePalette sOakSpeech_Platform_SpritePalette = +{ + .data = sOakSpeech_Platform_Pal, + .tag = PAL_TAG_PLATFORM +}; + +static const union AnimCmd sOakSpeech_PlatformLeft_Anim[] = +{ ANIMCMD_FRAME( 0, 0), ANIMCMD_END }; -static const union AnimCmd sGrassPlatformAnim2[] = { +static const union AnimCmd sOakSpeech_PlatformMiddle_Anim[] = +{ ANIMCMD_FRAME(16, 0), ANIMCMD_END }; -static const union AnimCmd sGrassPlatformAnim3[] = { +static const union AnimCmd sOakSpeech_PlatformRight_Anim[] = +{ ANIMCMD_FRAME(32, 0), ANIMCMD_END }; -static const union AnimCmd *const sGrassPlatformAnims1[] = { - sGrassPlatformAnim1 -}; -static const union AnimCmd *const sGrassPlatformAnims2[] = { - sGrassPlatformAnim2 -}; -static const union AnimCmd *const sGrassPlatformAnims3[] = { - sGrassPlatformAnim3 +static const union AnimCmd *const sOakSpeech_PlatformLeft_Anims[] = +{ + sOakSpeech_PlatformLeft_Anim }; -extern const struct OamData gOamData_AffineOff_ObjBlend_32x32; - -static const struct SpriteTemplate sOakSpeech_GrassPlatformSpriteTemplates[3] = { - { 0x1000, 0x1000, &gOamData_AffineOff_ObjBlend_32x32, sGrassPlatformAnims1, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, - { 0x1000, 0x1000, &gOamData_AffineOff_ObjBlend_32x32, sGrassPlatformAnims2, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, - { 0x1000, 0x1000, &gOamData_AffineOff_ObjBlend_32x32, sGrassPlatformAnims3, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, +static const union AnimCmd *const sOakSpeech_PlatformMiddle_Anims[] = +{ + sOakSpeech_PlatformMiddle_Anim }; -static const union AnimCmd sPikaAnim1[] = { +static const union AnimCmd *const sOakSpeech_PlatformRight_Anims[] = +{ + sOakSpeech_PlatformRight_Anim +}; + +static const struct SpriteTemplate sOakSpeech_Platform_SpriteTemplates[] = +{ + [PIKACHU_BODY_PLATFORM_LEFT] = + { + .tileTag = GFX_TAG_PLATFORM, + .paletteTag = PAL_TAG_PLATFORM, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = sOakSpeech_PlatformLeft_Anims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, + [PIKACHU_EARS_PLATFORM_MIDDLE] = + { + .tileTag = GFX_TAG_PLATFORM, + .paletteTag = PAL_TAG_PLATFORM, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = sOakSpeech_PlatformMiddle_Anims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, + [PIKACHU_EYES_PLATFORM_RIGHT] = + { + .tileTag = GFX_TAG_PLATFORM, + .paletteTag = PAL_TAG_PLATFORM, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = sOakSpeech_PlatformRight_Anims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, +}; + +static const union AnimCmd sPikachuIntro_PikachuBody_Anim[] = +{ ANIMCMD_FRAME( 0, 30), ANIMCMD_FRAME(16, 30), ANIMCMD_JUMP(0) }; -static const union AnimCmd sPikaAnim2[] = { +static const union AnimCmd sPikachuIntro_PikachuEars_Anim[] = +{ ANIMCMD_FRAME(0, 60), ANIMCMD_FRAME(0, 60), ANIMCMD_FRAME(0, 60), @@ -349,7 +501,8 @@ static const union AnimCmd sPikaAnim2[] = { ANIMCMD_JUMP(0) }; -static const union AnimCmd sPikaAnim3[] = { +static const union AnimCmd sPikachuIntro_PikachuEyes_Anim[] = +{ ANIMCMD_FRAME(0, 60), ANIMCMD_FRAME(0, 60), ANIMCMD_FRAME(0, 60), @@ -367,32 +520,71 @@ static const union AnimCmd sPikaAnim3[] = { ANIMCMD_JUMP(0) }; -static const union AnimCmd *const sPikaAnims1[] = { - sPikaAnim1 -}; -static const union AnimCmd *const sPikaAnims2[] = { - sPikaAnim2 -}; -static const union AnimCmd *const sPikaAnims3[] = { - sPikaAnim3 +static const union AnimCmd *const sPikachuIntro_PikachuBody_Anims[] = +{ + sPikachuIntro_PikachuBody_Anim }; -extern const struct OamData gOamData_AffineOff_ObjNormal_32x32; -extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; -extern const struct OamData gOamData_AffineOff_ObjNormal_16x8; - -static const struct SpriteTemplate sOakSpeech_PikaSpriteTemplates[3] = { - { 0x1001, 0x1001, &gOamData_AffineOff_ObjNormal_32x32, sPikaAnims1, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, - { 0x1002, 0x1001, &gOamData_AffineOff_ObjNormal_32x16, sPikaAnims2, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, - { 0x1003, 0x1001, &gOamData_AffineOff_ObjNormal_16x8, sPikaAnims3, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy } +static const union AnimCmd *const sPikachuIntro_PikachuEars_Anims[] = +{ + sPikachuIntro_PikachuEars_Anim }; -static const u8 *const sHelpDocsPtrs[] = { - gNewGame_HelpDocs2, gNewGame_HelpDocs3, gNewGame_HelpDocs4, - gNewGame_HelpDocs5, gNewGame_HelpDocs6, gNewGame_HelpDocs7 +static const union AnimCmd *const sPikachuIntro_PikachuEyes_Anims[] = +{ + sPikachuIntro_PikachuEyes_Anim }; -static const u8 *const sMaleNameChoices[] = { +static const struct SpriteTemplate sPikachuIntro_Pikachu_SpriteTemplates[NUM_PIKACHU_PLATFORM_SPRITES] = +{ + [PIKACHU_BODY_PLATFORM_LEFT] = + { + .tileTag = GFX_TAG_PIKACHU, + .paletteTag = PAL_TAG_PIKACHU, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sPikachuIntro_PikachuBody_Anims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, + [PIKACHU_EARS_PLATFORM_MIDDLE] = + { + .tileTag = GFX_TAG_PIKACHU_EARS, + .paletteTag = PAL_TAG_PIKACHU, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = sPikachuIntro_PikachuEars_Anims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, + [PIKACHU_EYES_PLATFORM_RIGHT] = + { + .tileTag = GFX_TAG_PIKACHU_EYES, + .paletteTag = PAL_TAG_PIKACHU, + .oam = &gOamData_AffineOff_ObjNormal_16x8, + .anims = sPikachuIntro_PikachuEyes_Anims, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + } +}; + +#define CONTROLS_GUIDE_STRINGS_PER_PAGE 3 + +static const u8 *const sControlsGuide_Pages2And3_Strings[CONTROLS_GUIDE_STRINGS_PER_PAGE * 2] = +{ + // Page 2 + gControlsGuide_Text_DPad, + gControlsGuide_Text_AButton, + gControlsGuide_Text_BButton, + // Page 3 + gControlsGuide_Text_StartButton, + gControlsGuide_Text_SelectButton, + gControlsGuide_Text_LRButtons +}; + +static const u8 *const sMaleNameChoices[] = +{ #if defined(FIRERED) gNameChoice_Red, gNameChoice_Fire, @@ -422,7 +614,8 @@ static const u8 *const sMaleNameChoices[] = { gNameChoice_Roak }; -static const u8 *const sFemaleNameChoices[] = { +static const u8 *const sFemaleNameChoices[] = +{ #if defined(FIRERED) gNameChoice_Red, gNameChoice_Fire, @@ -449,7 +642,8 @@ static const u8 *const sFemaleNameChoices[] = { gNameChoice_Suzi }; -static const u8 *const sRivalNameChoices[] = { +static const u8 *const sRivalNameChoices[] = +{ #if defined(FIRERED) gNameChoice_Green, gNameChoice_Gary, @@ -471,14 +665,14 @@ enum OAK_PIC }; -static void VBlankCB_NewGameOaksSpeech(void) +static void VBlankCB_NewGameScene(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void CB2_NewGameOaksSpeech(void) +static void CB2_NewGameScene(void) { RunTasks(); RunTextPrinters(); @@ -491,14 +685,25 @@ void StartNewGameScene(void) { gPlttBufferUnfaded[0] = RGB_BLACK; gPlttBufferFaded[0] = RGB_BLACK; - CreateTask(Task_OaksSpeech1, 0); - SetMainCallback2(CB2_NewGameOaksSpeech); + CreateTask(Task_NewGameScene, 0); + SetMainCallback2(CB2_NewGameScene); } -#define tTrainerPicPosX data[1] -#define tTrainerPicFadeState data[2] +#define tSpriteTimer data[0] +#define tTrainerPicPosX data[1] +#define tTrainerPicFadeState data[2] +#define tTimer data[3] +#define tNidoranFSpriteId data[4] +#define tTextCursorSpriteId data[5] +#define tPokeBallSpriteId data[6] +#define tPikachuPlatformSpriteId(i) data[7 + i] // Pikachu and the platform are built of three sprites, + // data[8] // so these are used to hold their sprite IDs + // data[9] // +#define tMenuWindowId data[13] +#define tTextboxWindowId data[14] +#define tDelta data[15] -static void Task_OaksSpeech1(u8 taskId) +static void Task_NewGameScene(u8 taskId) { switch (gMain.state) { @@ -517,7 +722,7 @@ static void Task_OaksSpeech1(u8 taskId) break; case 1: sOakSpeechResources = AllocZeroed(sizeof(*sOakSpeechResources)); - OakSpeechNidoranFSetup(1, 1); + OakSpeechNidoranFSetup(1, TRUE); break; case 2: SetGpuReg(REG_OFFSET_WIN0H, 0); @@ -532,13 +737,13 @@ static void Task_OaksSpeech1(u8 taskId) break; case 3: ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(1, sBgTemplates, NELEMS(sBgTemplates)); + InitBgsFromTemplates(1, sBgTemplates, ARRAY_COUNT(sBgTemplates)); SetBgTilemapBuffer(1, sOakSpeechResources->bg1TilemapBuffer); SetBgTilemapBuffer(2, sOakSpeechResources->bg2TilemapBuffer); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); gSpriteCoordOffsetX = 0; gSpriteCoordOffsetY = 0; break; @@ -547,39 +752,39 @@ static void Task_OaksSpeech1(u8 taskId) InitStandardTextBoxWindows(); InitTextBoxGfxAndPrinters(); Menu_LoadStdPalAt(0xD0); - LoadPalette(sHelpDocsPalette, 0x000, 0x080); - LoadPalette(GetTextWindowPalette(2) + 15, 0x000, 0x002); + LoadPalette(sControlsGuide_Pal, 0, 0x80); + LoadPalette(GetTextWindowPalette(2) + 15, 0, 2); break; case 5: sOakSpeechResources->textSpeed = GetTextSpeedSetting(); gTextFlags.canABSpeedUpPrint = TRUE; - DecompressAndCopyTileDataToVram(1, sOakSpeechGfx_GameStartHelpUI, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, sControlsGuide_Tiles, 0, 0, 0); break; case 6: if (FreeTempTileDataBuffersIfPossible()) return; - ClearDialogWindowAndFrame(0, 1); - FillBgTilemapBufferRect_Palette0(1, 0x0000, 0, 0, 32, 32); + ClearDialogWindowAndFrame(0, TRUE); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 32); CopyBgTilemapBufferToVram(1); break; case 7: CreateTopBarWindowLoadPalette(0, 30, 0, 13, 0x1C4); - FillBgTilemapBufferRect_Palette0(1, 0xD00F, 0, 0, 30, 2); - FillBgTilemapBufferRect_Palette0(1, 0xD002, 0, 2, 30, 1); - FillBgTilemapBufferRect_Palette0(1, 0xD00E, 0, 19, 30, 1); - CreateHelpDocsPage1(); + FillBgTilemapBufferRect_Palette0(1, 0xD00F, 0, 0, 30, 2); + FillBgTilemapBufferRect_Palette0(1, 0xD002, 0, 2, 30, 1); + FillBgTilemapBufferRect_Palette0(1, 0xD00E, 0, 19, 30, 1); + ControlsGuide_LoadPage1(); gPaletteFade.bufferTransferDisabled = FALSE; - gTasks[taskId].data[5] = CreateTextCursorSprite(0, 0xE6, 0x95, 0, 0); - BlendPalettes(PALETTES_ALL, 0x10, 0x00); + gTasks[taskId].tTextCursorSpriteId = CreateTextCursorSprite(0, 230, 149, 0, 0); + BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); break; case 10: BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); ShowBg(0); ShowBg(1); - SetVBlankCallback(VBlankCB_NewGameOaksSpeech); + SetVBlankCallback(VBlankCB_NewGameScene); PlayBGM(MUS_NEW_GAME_INSTRUCT); - gTasks[taskId].func = Task_OaksSpeech2; + gTasks[taskId].func = Task_ControlsGuide_HandleInput; gMain.state = 0; return; } @@ -587,228 +792,237 @@ static void Task_OaksSpeech1(u8 taskId) gMain.state++; } -static void CreateHelpDocsPage1(void) +static void ControlsGuide_LoadPage1(void) { - TopBarWindowPrintTwoStrings(gText_Controls, gText_ABUTTONNext, 0, 0, 1); - sOakSpeechResources->unk_0014[0] = AddWindow(sHelpDocsWindowTemplatePtrs[sOakSpeechResources->unk_0012]); - PutWindowTilemap(sOakSpeechResources->unk_0014[0]); - FillWindowPixelBuffer(sOakSpeechResources->unk_0014[0], 0x00); - AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[0], FONT_NORMAL, 2, 0, 1, 1, sTextColor_HelpSystem, 0, gNewGame_HelpDocs1); - CopyWindowToVram(sOakSpeechResources->unk_0014[0], COPYWIN_FULL); + TopBarWindowPrintTwoStrings(gText_Controls, gText_ABUTTONNext, FALSE, 0, TRUE); + sOakSpeechResources->windowIds[0] = AddWindow(sControlsGuide_WindowTemplates[sOakSpeechResources->currentPage]); + PutWindowTilemap(sOakSpeechResources->windowIds[0]); + FillWindowPixelBuffer(sOakSpeechResources->windowIds[0], PIXEL_FILL(0)); + AddTextPrinterParameterized4(sOakSpeechResources->windowIds[0], FONT_NORMAL, 2, 0, 1, 1, sTextColor_White, 0, gControlsGuide_Text_Intro); + CopyWindowToVram(sOakSpeechResources->windowIds[0], COPYWIN_FULL); FillBgTilemapBufferRect_Palette0(1, 0x3000, 1, 3, 5, 16); CopyBgTilemapBufferToVram(1); } -static void Task_OakSpeech4(u8 taskId) +static void Task_ControlsGuide_LoadPage(u8 taskId) { - u8 i = 0; - u8 r7 = sOakSpeechResources->unk_0012 - 1; - if (sOakSpeechResources->unk_0012 == 0) + u8 currWindow = 0; + u8 page2Or3 = sOakSpeechResources->currentPage - 1; // 0 if page 2, 1 if page 3 + if (sOakSpeechResources->currentPage == CONTROLS_GUIDE_PAGE_1) { - CreateHelpDocsPage1(); + ControlsGuide_LoadPage1(); } else { - TopBarWindowPrintString(gText_ABUTTONNext_BBUTTONBack, 0, 1); - for (i = 0; i < 3; i++) + TopBarWindowPrintString(gText_ABUTTONNext_BBUTTONBack, 0, TRUE); + for (currWindow = CONTROLS_GUIDE_PAGES_2_3_WINDOW_TOP; currWindow < NUM_CONTROLS_GUIDE_PAGES_2_3_WINDOWS; currWindow++) { - sOakSpeechResources->unk_0014[i] = AddWindow(&sHelpDocsWindowTemplatePtrs[sOakSpeechResources->unk_0012][i]); - PutWindowTilemap(sOakSpeechResources->unk_0014[i]); - FillWindowPixelBuffer(sOakSpeechResources->unk_0014[i], 0x00); - AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[i], FONT_NORMAL, 6, 0, 1, 1, sTextColor_HelpSystem, 0, sHelpDocsPtrs[i + r7 * 3]); - CopyWindowToVram(sOakSpeechResources->unk_0014[i], COPYWIN_FULL); + sOakSpeechResources->windowIds[currWindow] = AddWindow(&sControlsGuide_WindowTemplates[sOakSpeechResources->currentPage][currWindow]); + PutWindowTilemap(sOakSpeechResources->windowIds[currWindow]); + FillWindowPixelBuffer(sOakSpeechResources->windowIds[currWindow], PIXEL_FILL(0)); + AddTextPrinterParameterized4(sOakSpeechResources->windowIds[currWindow], FONT_NORMAL, 6, 0, 1, 1, sTextColor_White, 0, sControlsGuide_Pages2And3_Strings[currWindow + page2Or3 * CONTROLS_GUIDE_STRINGS_PER_PAGE]); + CopyWindowToVram(sOakSpeechResources->windowIds[currWindow], COPYWIN_FULL); } - if (sOakSpeechResources->unk_0012 == 1) - { - CopyToBgTilemapBufferRect(1, sHelpDocsPage2Tilemap, 1, 3, 5, 16); - } - else - { - CopyToBgTilemapBufferRect(1, sHelpDocsPage3Tilemap, 1, 3, 5, 16); - } + if (sOakSpeechResources->currentPage == CONTROLS_GUIDE_PAGE_2) + CopyToBgTilemapBufferRect(1, sControlsGuide_Tilemap_Page2, 1, 3, 5, 16); + else // CONTROLS_GUIDE_PAGE_3 + CopyToBgTilemapBufferRect(1, sControlsGuide_Tilemap_Page3, 1, 3, 5, 16); CopyBgTilemapBufferToVram(1); } - BeginNormalPaletteFade(0xFFFFDFFF, -1, 16, 0, GetTextWindowPalette(2)[15]); - gTasks[taskId].func = Task_OaksSpeech2; + BeginNormalPaletteFade(PALETTES_OBJECTS | 0xDFFF, -1, 16, 0, GetTextWindowPalette(2)[15]); + gTasks[taskId].func = Task_ControlsGuide_HandleInput; } -static void Task_OaksSpeech2(u8 taskId) +static void Task_ControlsGuide_HandleInput(u8 taskId) { - if (!gPaletteFade.active && JOY_NEW((A_BUTTON | B_BUTTON))) + if (!gPaletteFade.active) { - if (JOY_NEW(A_BUTTON)) + if(JOY_NEW((A_BUTTON | B_BUTTON))) { - gTasks[taskId].data[15] = 1; - if (sOakSpeechResources->unk_0012 < 2) + if (JOY_NEW(A_BUTTON)) { - BeginNormalPaletteFade(0xFFFFDFFF, -1, 0, 16, GetTextWindowPalette(2)[15]); + gTasks[taskId].tDelta = 1; + + if (sOakSpeechResources->currentPage < CONTROLS_GUIDE_PAGE_3) + BeginNormalPaletteFade(PALETTES_OBJECTS | 0xDFFF, -1, 0, 16, GetTextWindowPalette(2)[15]); } - } - else - { - if (sOakSpeechResources->unk_0012 != 0) + else // B_BUTTON { - gTasks[taskId].data[15] = -1; - BeginNormalPaletteFade(0xFFFFDFFF, -1, 0, 16, GetTextWindowPalette(2)[15]); + if (sOakSpeechResources->currentPage == CONTROLS_GUIDE_PAGE_1) + return; + + gTasks[taskId].tDelta = -1; + BeginNormalPaletteFade(PALETTES_OBJECTS | 0xDFFF, -1, 0, 16, GetTextWindowPalette(2)[15]); } - else - return; + + PlaySE(SE_SELECT); + gTasks[taskId].func = Task_ControlsGuide_ChangePage; } } - else - return; - PlaySE(SE_SELECT); - gTasks[taskId].func = Task_OakSpeech3; } -static void Task_OakSpeech3(u8 taskId) +static void Task_ControlsGuide_ChangePage(u8 taskId) { - u8 r8 = 0; + u8 numWindows = 0; u8 i; if (!gPaletteFade.active) { - switch (sOakSpeechResources->unk_0012) { - case 0: - r8 = 1; + switch (sOakSpeechResources->currentPage) + { + case CONTROLS_GUIDE_PAGE_1: + numWindows = NUM_CONTROLS_GUIDE_PAGE_1_WINDOWS; break; - case 1: - case 2: - r8 = 3; + case CONTROLS_GUIDE_PAGE_2: + case CONTROLS_GUIDE_PAGE_3: + numWindows = NUM_CONTROLS_GUIDE_PAGES_2_3_WINDOWS; break; } - sOakSpeechResources->unk_0012 += gTasks[taskId].data[15]; - if (sOakSpeechResources->unk_0012 < 3) + sOakSpeechResources->currentPage += gTasks[taskId].tDelta; + if (sOakSpeechResources->currentPage < NUM_CONTROLS_GUIDE_PAGES) { - for (i = 0; i < r8; i++) + for (i = 0; i < numWindows; i++) { - FillWindowPixelBuffer(sOakSpeechResources->unk_0014[i], 0x00); - ClearWindowTilemap(sOakSpeechResources->unk_0014[i]); - CopyWindowToVram(sOakSpeechResources->unk_0014[i], COPYWIN_FULL); - RemoveWindow(sOakSpeechResources->unk_0014[i]); - sOakSpeechResources->unk_0014[i] = 0; + FillWindowPixelBuffer(sOakSpeechResources->windowIds[i], PIXEL_FILL(0)); + ClearWindowTilemap(sOakSpeechResources->windowIds[i]); + CopyWindowToVram(sOakSpeechResources->windowIds[i], COPYWIN_FULL); + RemoveWindow(sOakSpeechResources->windowIds[i]); + sOakSpeechResources->windowIds[i] = 0; } - gTasks[taskId].func = Task_OakSpeech4; + gTasks[taskId].func = Task_ControlsGuide_LoadPage; } else { BeginNormalPaletteFade(PALETTES_ALL, 2, 0, 16, 0); - gTasks[taskId].func = Task_OakSpeech5; + gTasks[taskId].func = Task_ControlsGuide_Clear; } } } -static void Task_OakSpeech5(u8 taskId) +#undef tDelta + +static void Task_ControlsGuide_Clear(u8 taskId) { u8 i = 0; - if (!gPaletteFade.active) { - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_CONTROLS_GUIDE_PAGES_2_3_WINDOWS; i++) { - FillWindowPixelBuffer(sOakSpeechResources->unk_0014[i], 0x00); - ClearWindowTilemap(sOakSpeechResources->unk_0014[i]); - CopyWindowToVram(sOakSpeechResources->unk_0014[i], COPYWIN_FULL); - RemoveWindow(sOakSpeechResources->unk_0014[i]); - sOakSpeechResources->unk_0014[i] = 0; + FillWindowPixelBuffer(sOakSpeechResources->windowIds[i], PIXEL_FILL(0)); + ClearWindowTilemap(sOakSpeechResources->windowIds[i]); + CopyWindowToVram(sOakSpeechResources->windowIds[i], COPYWIN_FULL); + RemoveWindow(sOakSpeechResources->windowIds[i]); + sOakSpeechResources->windowIds[i] = 0; } - FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 2, 30, 18); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 2, 30, 18); CopyBgTilemapBufferToVram(1); - DestroyTextCursorSprite(gTasks[taskId].data[5]); - sOakSpeechResources->unk_0014[0] = RGB_BLACK; - LoadPalette(sOakSpeechResources->unk_0014, 0, 2); - gTasks[taskId].data[3] = 32; - gTasks[taskId].func = Task_OakSpeech6; + DestroyTextCursorSprite(gTasks[taskId].tTextCursorSpriteId); + sOakSpeechResources->windowIds[0] = RGB_BLACK; + LoadPalette(sOakSpeechResources->windowIds, 0, 2); + gTasks[taskId].tTimer = 32; + gTasks[taskId].func = Task_PikachuIntro_LoadPage1; } } -static void Task_OakSpeech6(u8 taskId) +enum { - s16 * data = gTasks[taskId].data; - u32 sp14 = 0; + PIKACHU_INTRO_SET_GPU_REGS, + PIKACHU_INTRO_HANDLE_INPUT, + PIKACHU_INTRO_PRINT_PAGE_TEXT, + PIKACHU_INTRO_FADE_IN_PAGE, + PIKACHU_INTRO_EXIT, +}; - if (data[3] != 0) - data[3]--; +#define tBlendTarget data[15] + +static void Task_PikachuIntro_LoadPage1(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u32 size = 0; + + if (tTimer != 0) + { + tTimer--; + } else { PlayBGM(MUS_NEW_GAME_INTRO); ClearTopBarWindow(); TopBarWindowPrintString(gText_ABUTTONNext, 0, 1); - sOakSpeechResources->unk_0008 = MallocAndDecompress(sNewGameAdventureIntroTilemap, &sp14); - CopyToBgTilemapBufferRect(1, sOakSpeechResources->unk_0008, 0, 2, 30, 19); + sOakSpeechResources->pikachuIntroTilemap = MallocAndDecompress(sPikachuIntro_Tilemap, &size); + CopyToBgTilemapBufferRect(1, sOakSpeechResources->pikachuIntroTilemap, 0, 2, 30, 19); CopyBgTilemapBufferToVram(1); - Free(sOakSpeechResources->unk_0008); - sOakSpeechResources->unk_0008 = NULL; - data[14] = AddWindow(&sNewGameAdventureIntroWindowTemplates[0]); - PutWindowTilemap(data[14]); - FillWindowPixelBuffer(data[14], 0x00); - CopyWindowToVram(data[14], COPYWIN_FULL); - sOakSpeechResources->unk_0012 = 0; - gMain.state = 0; - data[15] = 16; - AddTextPrinterParameterized4(data[14], FONT_NORMAL, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[0]); - data[5] = CreateTextCursorSprite(0, 0xe2, 0x91, 0, 0); - gSprites[data[5]].oam.objMode = ST_OAM_OBJ_BLEND; - gSprites[data[5]].oam.priority = 0; - CreatePikaOrGrassPlatformSpriteAndLinkToCurrentTask(taskId, 0); + Free(sOakSpeechResources->pikachuIntroTilemap); + sOakSpeechResources->pikachuIntroTilemap = NULL; + tTextboxWindowId = AddWindow(&sIntro_WindowTemplates[WIN_INTRO_TEXTBOX]); + PutWindowTilemap(tTextboxWindowId); + FillWindowPixelBuffer(tTextboxWindowId, PIXEL_FILL(0)); + CopyWindowToVram(tTextboxWindowId, COPYWIN_FULL); + sOakSpeechResources->currentPage = PIKACHU_INTRO_PAGE_1; + gMain.state = PIKACHU_INTRO_SET_GPU_REGS; + tBlendTarget = 16; + AddTextPrinterParameterized4(tTextboxWindowId, FONT_NORMAL, 3, 5, 1, 0, sTextColor_DarkGray, 0, sPikachuIntro_Strings[PIKACHU_INTRO_PAGE_1]); + tTextCursorSpriteId = CreateTextCursorSprite(0, 226, 145, 0, 0); + gSprites[tTextCursorSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[tTextCursorSpriteId].oam.priority = 0; + CreatePikachuOrPlatformSprites(taskId, SPRITE_TYPE_PIKACHU); BeginNormalPaletteFade(PALETTES_ALL, 2, 16, 0, 0); - gTasks[taskId].func = Task_OakSpeech7; + gTasks[taskId].func = Task_PikachuIntro_HandleInput; } } -static void Task_OakSpeech7(u8 taskId) +static void Task_PikachuIntro_HandleInput(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; switch (gMain.state) { - case 0: + case PIKACHU_INTRO_SET_GPU_REGS: if (!gPaletteFade.active) { - SetGpuReg(REG_OFFSET_WIN0H, 0x00F0); - SetGpuReg(REG_OFFSET_WIN0V, 0x10A0); - SetGpuReg(REG_OFFSET_WININ, 0x003F); - SetGpuReg(REG_OFFSET_WINOUT, 0x001F); + SetGpuReg(REG_OFFSET_WIN0H, DISPLAY_WIDTH); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(16, DISPLAY_HEIGHT)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - gMain.state = 1; + gMain.state = PIKACHU_INTRO_HANDLE_INPUT; } break; - case 1: + case PIKACHU_INTRO_HANDLE_INPUT: if (JOY_NEW((A_BUTTON | B_BUTTON))) { if (JOY_NEW(A_BUTTON)) { - sOakSpeechResources->unk_0012++; + sOakSpeechResources->currentPage++; } - else if (sOakSpeechResources->unk_0012 != 0) + else // B_BUTTON { - sOakSpeechResources->unk_0012--; - } - else - { - break; + if (sOakSpeechResources->currentPage != PIKACHU_INTRO_PAGE_1) + sOakSpeechResources->currentPage--; + else + break; } PlaySE(SE_SELECT); - if (sOakSpeechResources->unk_0012 == 3) + if (sOakSpeechResources->currentPage == NUM_PIKACHU_INTRO_PAGES) { - gMain.state = 4; + gMain.state = PIKACHU_INTRO_EXIT; } else { SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1); - SetGpuReg(REG_OFFSET_BLDALPHA, (16 - data[15]) | data[15]); + SetGpuReg(REG_OFFSET_BLDALPHA, (16 - tBlendTarget) | tBlendTarget); gMain.state++; } } break; - case 2: - data[15] -= 2; - SetGpuReg(REG_OFFSET_BLDALPHA, ((16 - data[15]) << 8) | data[15]); - if (data[15] <= 0) + case PIKACHU_INTRO_PRINT_PAGE_TEXT: + tBlendTarget -= 2; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(tBlendTarget, 16 - tBlendTarget)); + if (tBlendTarget <= 0) { - FillWindowPixelBuffer(data[14], 0x00); - AddTextPrinterParameterized4(data[14], FONT_NORMAL, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[sOakSpeechResources->unk_0012]); - if (sOakSpeechResources->unk_0012 == 0) + FillWindowPixelBuffer(tTextboxWindowId, PIXEL_FILL(0)); + AddTextPrinterParameterized4(tTextboxWindowId, FONT_NORMAL, 3, 5, 1, 0, sTextColor_DarkGray, 0, sPikachuIntro_Strings[sOakSpeechResources->currentPage]); + if (sOakSpeechResources->currentPage == PIKACHU_INTRO_PAGE_1) { ClearTopBarWindow(); TopBarWindowPrintString(gText_ABUTTONNext, 0, 1); @@ -821,343 +1035,348 @@ static void Task_OakSpeech7(u8 taskId) gMain.state++; } break; - case 3: - data[15] += 2; - SetGpuReg(REG_OFFSET_BLDALPHA, ((16 - data[15]) << 8) | data[15]); - if (data[15] >= 16) + case PIKACHU_INTRO_FADE_IN_PAGE: + tBlendTarget += 2; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(tBlendTarget, 16 - tBlendTarget)); + if (tBlendTarget >= 16) { - data[15] = 16; + tBlendTarget = 16; SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); - gMain.state = 1; + gMain.state = PIKACHU_INTRO_HANDLE_INPUT; } break; - case 4: - DestroyTextCursorSprite(gTasks[taskId].data[5]); + case PIKACHU_INTRO_EXIT: + DestroyTextCursorSprite(gTasks[taskId].tTextCursorSpriteId); PlayBGM(MUS_NEW_GAME_EXIT); - data[15] = 24; + tBlendTarget = 24; gMain.state++; break; default: - if (data[15] != 0) - data[15]--; + if (tBlendTarget != 0) + { + tBlendTarget--; + } else { gMain.state = 0; - sOakSpeechResources->unk_0012 = 0; + sOakSpeechResources->currentPage = 0; SetGpuReg(REG_OFFSET_WIN0H, 0); SetGpuReg(REG_OFFSET_WIN0V, 0); SetGpuReg(REG_OFFSET_WININ, 0); SetGpuReg(REG_OFFSET_WINOUT, 0); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); BeginNormalPaletteFade(PALETTES_ALL, 2, 0, 16, RGB_BLACK); - gTasks[taskId].func = Task_OakSpeech8; + gTasks[taskId].func = Task_PikachuIntro_Clear; } break; } } -static void Task_OakSpeech8(u8 taskId) -{ - s16 * data = gTasks[taskId].data; +#undef tBlendTarget +static void Task_PikachuIntro_Clear(u8 taskId) +{ + s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { DestroyTopBarWindow(); - FillWindowPixelBuffer(data[14], 0x00); - ClearWindowTilemap(data[14]); - CopyWindowToVram(data[14], COPYWIN_FULL); - RemoveWindow(data[14]); - data[14] = 0; - FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillWindowPixelBuffer(tTextboxWindowId, PIXEL_FILL(0)); + ClearWindowTilemap(tTextboxWindowId); + CopyWindowToVram(tTextboxWindowId, COPYWIN_FULL); + RemoveWindow(tTextboxWindowId); + tTextboxWindowId = 0; + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(1); - DestroyLinkedPikaOrGrassPlatformSprites(taskId, 0); - data[3] = 80; - gTasks[taskId].func = Task_OakSpeech9; + DestroyPikachuOrPlatformSprites(taskId, SPRITE_TYPE_PIKACHU); + tTimer = 80; + gTasks[taskId].func = Task_OakSpeech_Init; } } -static void Task_OakSpeech9(u8 taskId) +static void Task_OakSpeech_Init(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; u32 size = 0; - - if (data[3] != 0) - data[3]--; + if (tTimer != 0) + { + tTimer--; + } else { - sOakSpeechResources->solidColorsGfx = MallocAndDecompress(sOakSpeechGfx_SolidColors, &size); - LoadBgTiles(1, sOakSpeechResources->solidColorsGfx, size, 0); - CopyToBgTilemapBuffer(1, sOakSpeech_BackgroundTilemap, 0, 0); + sOakSpeechResources->oakSpeechBackgroundTiles = MallocAndDecompress(sOakSpeech_Background_Tiles, &size); + LoadBgTiles(1, sOakSpeechResources->oakSpeechBackgroundTiles, size, 0); + CopyToBgTilemapBuffer(1, sOakSpeech_Background_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); CreateNidoranFSprite(taskId); - LoadOaksSpeechTrainerPic(OAK_PIC, 0); - CreatePikaOrGrassPlatformSpriteAndLinkToCurrentTask(taskId, 1); + LoadTrainerPic(OAK_PIC, 0); + CreatePikachuOrPlatformSprites(taskId, SPRITE_TYPE_PLATFORM); PlayBGM(MUS_ROUTE24); BeginNormalPaletteFade(PALETTES_ALL, 5, 16, 0, RGB_BLACK); - data[3] = 80; + tTimer = 80; ShowBg(2); - gTasks[taskId].func = Task_OakSpeech10; + gTasks[taskId].func = Task_OakSpeech_WelcomeToTheWorld; } } -#define OaksSpeechPrintMessage(str, speed) ({ \ - DrawDialogueFrame(0, FALSE);\ - if (str != gStringVar4) \ - { \ - StringExpandPlaceholders(gStringVar4, str); \ +#define OakSpeechPrintMessage(str, speed) ({ \ + DrawDialogueFrame(0, FALSE); \ + if (str != gStringVar4) \ + { \ + StringExpandPlaceholders(gStringVar4, str); \ AddTextPrinterParameterized2(0, FONT_MALE, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ - } \ - else \ - { \ - AddTextPrinterParameterized2(0, FONT_MALE, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ - } \ - CopyWindowToVram(0, COPYWIN_FULL); \ + } \ + else \ + { \ + AddTextPrinterParameterized2(0, FONT_MALE, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ + } \ + CopyWindowToVram(0, COPYWIN_FULL); \ }) -static void Task_OakSpeech10(u8 taskId) +static void Task_OakSpeech_WelcomeToTheWorld(u8 taskId) { - s16 * data = gTasks[taskId].data; - + s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { - if (data[3] != 0) - data[3]--; + if (tTimer != 0) + { + tTimer--; + } else { - OaksSpeechPrintMessage(gOakText_WelcomeToTheWorld, sOakSpeechResources->textSpeed); - gTasks[taskId].func = Task_OakSpeech11; + OakSpeechPrintMessage(gOakSpeech_Text_WelcomeToTheWorld, sOakSpeechResources->textSpeed); + gTasks[taskId].func = Task_OakSpeech_ThisWorld; } } } -static void Task_OakSpeech11(u8 taskId) +static void Task_OakSpeech_ThisWorld(u8 taskId) { if (!IsTextPrinterActive(0)) { - OaksSpeechPrintMessage(gOakText_WorldInhabited1, sOakSpeechResources->textSpeed); - gTasks[taskId].data[3] = 30; - gTasks[taskId].func = Task_OakSpeech12; + OakSpeechPrintMessage(gOakSpeech_Text_ThisWorld, sOakSpeechResources->textSpeed); + gTasks[taskId].tTimer = 30; + gTasks[taskId].func = Task_OakSpeech_ReleaseNidoranFFromPokeBall; } } -static void Task_OakSpeech12(u8 taskId) +static void Task_OakSpeech_ReleaseNidoranFFromPokeBall(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; u8 spriteId; if (!IsTextPrinterActive(0)) { - if (data[3] != 0) - data[3]--; - // else { - spriteId = gTasks[taskId].data[4]; + if (tTimer != 0) + tTimer--; + spriteId = gTasks[taskId].tNidoranFSpriteId; gSprites[spriteId].invisible = FALSE; - gSprites[spriteId].data[0] = 0; - CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 0x64, 0x42, 0, 0, 32, 0xFFFF1FFF); - gTasks[taskId].func = Task_OakSpeech13; - gTasks[taskId].data[3] = 0; - // } + gSprites[spriteId].tSpriteTimer = 0; + CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 100, 66, 0, 0, 32, 0xFFFF1FFF); + gTasks[taskId].func = Task_OakSpeech_IsInhabitedFarAndWide; + gTasks[taskId].tTimer = 0; } } -static void Task_OakSpeech13(u8 taskId) +static void Task_OakSpeech_IsInhabitedFarAndWide(u8 taskId) { if (IsCryFinished()) { - if (gTasks[taskId].data[3] >= 96) - gTasks[taskId].func = Task_OakSpeech14; + if (gTasks[taskId].tTimer >= 96) + gTasks[taskId].func = Task_OakSpeech_IStudyPokemon; } - if (gTasks[taskId].data[3] < 0x4000) + if (gTasks[taskId].tTimer < 0x4000) { - gTasks[taskId].data[3]++; - if (gTasks[taskId].data[3] == 32) + gTasks[taskId].tTimer++; + if (gTasks[taskId].tTimer == 32) { - OaksSpeechPrintMessage(gOakText_WorldInhabited2, sOakSpeechResources->textSpeed); + OakSpeechPrintMessage(gOakSpeech_Text_IsInhabitedFarAndWide, sOakSpeechResources->textSpeed); PlayCry_Normal(SPECIES_NIDORAN_F, 0); } } } -static void Task_OakSpeech14(u8 taskId) +static void Task_OakSpeech_IStudyPokemon(u8 taskId) { if (!IsTextPrinterActive(0)) { - OaksSpeechPrintMessage(gOakText_PetsBattlingStudy, sOakSpeechResources->textSpeed); - gTasks[taskId].func = Task_OakSpeech15; + OakSpeechPrintMessage(gOakSpeech_Text_IStudyPokemon, sOakSpeechResources->textSpeed); + gTasks[taskId].func = Task_OakSpeech_ReturnNidoranFToPokeBall; } } -static void Task_OakSpeech15(u8 taskId) +static void Task_OakSpeech_ReturnNidoranFToPokeBall(u8 taskId) { u8 spriteId; if (!IsTextPrinterActive(0)) { - ClearDialogWindowAndFrame(0, 1); - spriteId = gTasks[taskId].data[4]; - gTasks[taskId].data[6] = CreateTradePokeballSprite(spriteId, gSprites[spriteId].oam.paletteNum, 0x64, 0x42, 0, 0, 32, 0xFFFF1F3F); - gTasks[taskId].data[3] = 48; - gTasks[taskId].data[0] = 64; - gTasks[taskId].func = Task_OakSpeech16; + ClearDialogWindowAndFrame(0, TRUE); + spriteId = gTasks[taskId].tNidoranFSpriteId; + gTasks[taskId].tPokeBallSpriteId = CreateTradePokeballSprite(spriteId, gSprites[spriteId].oam.paletteNum, 100, 66, 0, 0, 32, 0xFFFF1F3F); + gTasks[taskId].tTimer = 48; + gTasks[taskId].tSpriteTimer = 64; + gTasks[taskId].func = Task_OakSpeech_TellMeALittleAboutYourself; } } -static void Task_OakSpeech16(u8 taskId) +static void Task_OakSpeech_TellMeALittleAboutYourself(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; - if (data[0] != 0) + if (tSpriteTimer != 0) { - if (data[0] < 24) - { - gSprites[data[4]].y--; - } - data[0]--; + if (tSpriteTimer < 24) + gSprites[tNidoranFSpriteId].y--; + tSpriteTimer--; } else { - if (data[3] == 48) + if (tTimer == 48) { - DestroySprite(&gSprites[data[4]]); - DestroySprite(&gSprites[data[6]]); + DestroySprite(&gSprites[tNidoranFSpriteId]); + DestroySprite(&gSprites[tPokeBallSpriteId]); } - if (data[3] != 0) + if (tTimer != 0) { - data[3]--; + tTimer--; } else { - OaksSpeechPrintMessage(gOakText_TellMeALittleAboutYourself, sOakSpeechResources->textSpeed); - gTasks[taskId].func = Task_OakSpeech17; + OakSpeechPrintMessage(gOakSpeech_Text_TellMeALittleAboutYourself, sOakSpeechResources->textSpeed); + gTasks[taskId].func = Task_OakSpeech_FadeOutOak; } } } -static void Task_OakSpeech17(u8 taskId) +static void Task_OakSpeech_FadeOutOak(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!IsTextPrinterActive(0)) { ClearDialogWindowAndFrame(0, 1); CreateFadeInTask(taskId, 2); - data[3] = 48; - gTasks[taskId].func = Task_OakSpeech18; + tTimer = 48; + gTasks[taskId].func = Task_OakSpeech_AskPlayerGender; } } -static void Task_OakSpeech18(u8 taskId) +static void Task_OakSpeech_AskPlayerGender(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (tTrainerPicFadeState != 0) { - if (data[3] != 0) - data[3]--; + if (tTimer != 0) + { + tTimer--; + } else { tTrainerPicPosX = -60; - DestroyOaksSpeechTrainerPic(); - OaksSpeechPrintMessage(gOakText_AskPlayerGender, sOakSpeechResources->textSpeed); - gTasks[taskId].func = Task_OakSpeech19; + ClearTrainerPic(); + OakSpeechPrintMessage(gOakText_AskPlayerGender, sOakSpeechResources->textSpeed); + gTasks[taskId].func = Task_OakSpeech_ShowGenderOptions; } } } -static void Task_OakSpeech19(u8 taskId) +static void Task_OakSpeech_ShowGenderOptions(u8 taskId) { if (!IsTextPrinterActive(0)) { - gTasks[taskId].data[13] = AddWindow(&sNewGameAdventureIntroWindowTemplates[1]); - PutWindowTilemap(gTasks[taskId].data[13]); - DrawStdFrameWithCustomTileAndPalette(gTasks[taskId].data[13], 1, GetStdWindowBaseTileNum(), 14); - FillWindowPixelBuffer(gTasks[taskId].data[13], 0x11); + gTasks[taskId].tMenuWindowId = AddWindow(&sIntro_WindowTemplates[WIN_INTRO_BOYGIRL]); + PutWindowTilemap(gTasks[taskId].tMenuWindowId); + DrawStdFrameWithCustomTileAndPalette(gTasks[taskId].tMenuWindowId, TRUE, GetStdWindowBaseTileNum(), 14); + FillWindowPixelBuffer(gTasks[taskId].tMenuWindowId, PIXEL_FILL(1)); sOakSpeechResources->textColor[0] = 1; sOakSpeechResources->textColor[1] = 2; sOakSpeechResources->textColor[2] = 3; - AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_NORMAL, 8, 1, sOakSpeechResources->textColor, 0, gText_Boy); + AddTextPrinterParameterized3(gTasks[taskId].tMenuWindowId, FONT_NORMAL, 8, 1, sOakSpeechResources->textColor, 0, gText_Boy); sOakSpeechResources->textColor[0] = 1; sOakSpeechResources->textColor[1] = 2; sOakSpeechResources->textColor[2] = 3; - AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_NORMAL, 8, 17, sOakSpeechResources->textColor, 0, gText_Girl); - Menu_InitCursor(gTasks[taskId].data[13], FONT_NORMAL, 0, 1, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, 2, 0); - CopyWindowToVram(gTasks[taskId].data[13], COPYWIN_FULL); - gTasks[taskId].func = Task_OakSpeech20; + AddTextPrinterParameterized3(gTasks[taskId].tMenuWindowId, FONT_NORMAL, 8, 17, sOakSpeechResources->textColor, 0, gText_Girl); + Menu_InitCursor(gTasks[taskId].tMenuWindowId, FONT_NORMAL, 0, 1, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, 2, 0); + CopyWindowToVram(gTasks[taskId].tMenuWindowId, COPYWIN_FULL); + gTasks[taskId].func = Task_OakSpeech_HandleGenderInput; } } -static void Task_OakSpeech20(u8 taskId) +static void Task_OakSpeech_HandleGenderInput(u8 taskId) { s8 input = Menu_ProcessInputNoWrapAround(); switch (input) { - case 0: + case 0: // BOY gSaveBlock2Ptr->playerGender = MALE; break; - case 1: + case 1: // GIRL gSaveBlock2Ptr->playerGender = FEMALE; break; - case -1: - case -2: + case MENU_B_PRESSED: + case MENU_NOTHING_CHOSEN: return; } - gTasks[taskId].func = Task_OakSpeech21; + gTasks[taskId].func = Task_OakSpeech_ClearGenderWindows; } -static void Task_OakSpeech21(u8 taskId) +static void Task_OakSpeech_ClearGenderWindows(u8 taskId) { - s16 * data = gTasks[taskId].data; - ClearStdWindowAndFrameToTransparent(data[13], TRUE); - RemoveWindow(data[13]); - data[13] = 0; - ClearDialogWindowAndFrame(0, 1); + s16 *data = gTasks[taskId].data; + ClearStdWindowAndFrameToTransparent(tMenuWindowId, TRUE); + RemoveWindow(tMenuWindowId); + tMenuWindowId = WIN_INTRO_TEXTBOX; + ClearDialogWindowAndFrame(tMenuWindowId, TRUE); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); - gTasks[taskId].func = Task_OakSpeech22; + gTasks[taskId].func = Task_OakSpeech_LoadPlayerPic; } -static void Task_OakSpeech22(u8 taskId) +static void Task_OakSpeech_LoadPlayerPic(u8 taskId) { if (gSaveBlock2Ptr->playerGender == MALE) - LoadOaksSpeechTrainerPic(MALE_PLAYER_PIC, 0); + LoadTrainerPic(MALE_PLAYER_PIC, 0); else - LoadOaksSpeechTrainerPic(FEMALE_PLAYER_PIC, 0); + LoadTrainerPic(FEMALE_PLAYER_PIC, 0); CreateFadeOutTask(taskId, 2); - gTasks[taskId].data[3] = 32; - gTasks[taskId].func = Task_OakSpeech23; + gTasks[taskId].tTimer = 32; + gTasks[taskId].func = Task_OakSpeech_YourNameWhatIsIt; } -static void Task_OakSpeech23(u8 taskId) +static void Task_OakSpeech_YourNameWhatIsIt(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (tTrainerPicFadeState != 0) { - if (data[3] != 0) - data[3]--; + if (tTimer != 0) + { + tTimer--; + } else { tTrainerPicPosX = 0; - OaksSpeechPrintMessage(gOakText_AskPlayerName, sOakSpeechResources->textSpeed); - gTasks[taskId].func = Task_OakSpeech24; + OakSpeechPrintMessage(gOakSpeech_Text_YourNameWhatIsIt, sOakSpeechResources->textSpeed); + gTasks[taskId].func = Task_OakSpeech_FadeOutForPlayerNamingScreen; } } } -static void Task_OakSpeech24(u8 taskId) +static void Task_OakSpeech_FadeOutForPlayerNamingScreen(u8 taskId) { if (!IsTextPrinterActive(0)) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); sOakSpeechResources->hasPlayerBeenNamed = FALSE; - gTasks[taskId].func = Task_OakSpeech25; + gTasks[taskId].func = Task_OakSpeech_DoNamingScreen; } } -static void Task_OakSpeech35(u8 taskId) +static void Task_OakSpeech_MoveRivalDisplayNameOptions(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!IsTextPrinterActive(0)) { @@ -1165,59 +1384,57 @@ static void Task_OakSpeech35(u8 taskId) { tTrainerPicPosX -= 2; gSpriteCoordOffsetX += 2; - ChangeBgX(2, 0x200, 2); + ChangeBgX(2, 0x200, BG_COORD_SUB); } else { tTrainerPicPosX = -60; PrintNameChoiceOptions(taskId, sOakSpeechResources->hasPlayerBeenNamed); - gTasks[taskId].func = Task_OakSpeech29; + gTasks[taskId].func = Task_OakSpeech_HandleRivalNameInput; } } } -static void Task_OakSpeech28(u8 taskId) +static void Task_OakSpeech_RepeatNameQuestion(u8 taskId) { PrintNameChoiceOptions(taskId, sOakSpeechResources->hasPlayerBeenNamed); if (sOakSpeechResources->hasPlayerBeenNamed == FALSE) - { - OaksSpeechPrintMessage(gOakText_AskPlayerName, 0); - } + OakSpeechPrintMessage(gOakSpeech_Text_YourNameWhatIsIt, 0); else - { - OaksSpeechPrintMessage(gOakText_AskRivalName, 0); - } - gTasks[taskId].func = Task_OakSpeech29; + OakSpeechPrintMessage(gOakSpeech_Text_YourRivalsNameWhatWasIt, 0); + gTasks[taskId].func = Task_OakSpeech_HandleRivalNameInput; } -static void Task_OakSpeech29(u8 taskId) +#define tNameNotConfirmed data[15] + +static void Task_OakSpeech_HandleRivalNameInput(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; s8 input = Menu_ProcessInput(); switch (input) { - case 1: - case 2: - case 3: - case 4: + case 0: // NEW NAME PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(data[13], TRUE); - RemoveWindow(data[13]); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_OakSpeech_DoNamingScreen; + break; + case 1: // Default name options + case 2: // + case 3: // + case 4: // + PlaySE(SE_SELECT); + ClearStdWindowAndFrameToTransparent(tMenuWindowId, TRUE); + RemoveWindow(tMenuWindowId); GetDefaultName(sOakSpeechResources->hasPlayerBeenNamed, input - 1); - data[15] = 1; - gTasks[taskId].func = Task_OakSpeech26; + tNameNotConfirmed = TRUE; + gTasks[taskId].func = Task_OakSpeech_ConfirmName; break; - case 0: - PlaySE(SE_SELECT); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, 0); - gTasks[taskId].func = Task_OakSpeech25; - break; - case -1: + case MENU_B_PRESSED: break; } } -static void Task_OakSpeech25(u8 taskId) +static void Task_OakSpeech_DoNamingScreen(u8 taskId) { if (!gPaletteFade.active) { @@ -1228,275 +1445,302 @@ static void Task_OakSpeech25(u8 taskId) } else { - ClearStdWindowAndFrameToTransparent(gTasks[taskId].data[13], 1); - RemoveWindow(gTasks[taskId].data[13]); + ClearStdWindowAndFrameToTransparent(gTasks[taskId].tMenuWindowId, TRUE); + RemoveWindow(gTasks[taskId].tMenuWindowId); DoNamingScreen(NAMING_SCREEN_RIVAL, gSaveBlock1Ptr->rivalName, 0, 0, 0, CB2_ReturnFromNamingScreen); } - DestroyLinkedPikaOrGrassPlatformSprites(taskId, 1); + DestroyPikachuOrPlatformSprites(taskId, SPRITE_TYPE_PLATFORM); FreeAllWindowBuffers(); } } -static void Task_OakSpeech26(u8 taskId) +static void Task_OakSpeech_ConfirmName(u8 taskId) { - s16 * data = gTasks[taskId].data; - + s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { - if (data[15] == 1) + if (tNameNotConfirmed == TRUE) { if (sOakSpeechResources->hasPlayerBeenNamed == FALSE) - { - StringExpandPlaceholders(gStringVar4, gOakText_FinalizePlayerName); - } + StringExpandPlaceholders(gStringVar4, gOakSpeech_Text_SoYourNameIsPlayer); else - { - StringExpandPlaceholders(gStringVar4, gOakText_ConfirmRivalName); - } - OaksSpeechPrintMessage(gStringVar4, sOakSpeechResources->textSpeed); - data[15] = 0; - data[3] = 25; + StringExpandPlaceholders(gStringVar4, gOakSpeech_Text_ConfirmRivalName); + OakSpeechPrintMessage(gStringVar4, sOakSpeechResources->textSpeed); + tNameNotConfirmed = FALSE; + tTimer = 25; } else if (!IsTextPrinterActive(0)) { - if (data[3] != 0) - data[3]--; + if (tTimer != 0) + { + tTimer--; + } else { - CreateYesNoMenu(&sNewGameAdventureIntroWindowTemplates[2], FONT_NORMAL, 0, 2, GetStdWindowBaseTileNum(), 14, 0); - gTasks[taskId].func = Task_OakSpeech27; + CreateYesNoMenu(&sIntro_WindowTemplates[WIN_INTRO_YESNO], FONT_NORMAL, 0, 2, GetStdWindowBaseTileNum(), 14, 0); + gTasks[taskId].func = Task_OakSpeech_HandleConfirmNameInput; } } } } -static void Task_OakSpeech27(u8 taskId) +static void Task_OakSpeech_HandleConfirmNameInput(u8 taskId) { s8 input = Menu_ProcessInputNoWrapClearOnChoose(); switch (input) { - case 0: + case 0: // YES PlaySE(SE_SELECT); - gTasks[taskId].data[3] = 40; + gTasks[taskId].tTimer = 40; if (sOakSpeechResources->hasPlayerBeenNamed == FALSE) { - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(WIN_INTRO_TEXTBOX, TRUE); CreateFadeInTask(taskId, 2); - gTasks[taskId].func = Task_OakSpeech30; + gTasks[taskId].func = Task_OakSpeech_FadeOutPlayerPic; } else { - StringExpandPlaceholders(gStringVar4, gOakText_RememberRivalName); - OaksSpeechPrintMessage(gStringVar4, sOakSpeechResources->textSpeed); - gTasks[taskId].func = Task_OakSpeech31; + StringExpandPlaceholders(gStringVar4, gOakSpeech_Text_RememberRivalsName); + OakSpeechPrintMessage(gStringVar4, sOakSpeechResources->textSpeed); + gTasks[taskId].func = Task_OakSpeech_FadeOutRivalPic; } break; - case 1: - case -1: + case 1: // NO + case MENU_B_PRESSED: PlaySE(SE_SELECT); if (sOakSpeechResources->hasPlayerBeenNamed == FALSE) - gTasks[taskId].func = Task_OakSpeech24; + gTasks[taskId].func = Task_OakSpeech_FadeOutForPlayerNamingScreen; else - gTasks[taskId].func = Task_OakSpeech28; + gTasks[taskId].func = Task_OakSpeech_RepeatNameQuestion; break; } } -static void Task_OakSpeech30(u8 taskId) +static void Task_OakSpeech_FadeOutPlayerPic(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (tTrainerPicFadeState != 0) { - DestroyOaksSpeechTrainerPic(); - if (data[3] != 0) - data[3]--; + ClearTrainerPic(); + if (tTimer != 0) + tTimer--; else - gTasks[taskId].func = Task_OakSpeech32; + gTasks[taskId].func = Task_OakSpeech_FadeInRivalPic; } } -static void Task_OakSpeech31(u8 taskId) +static void Task_OakSpeech_FadeOutRivalPic(u8 taskId) { if (!IsTextPrinterActive(0)) { ClearDialogWindowAndFrame(0, 1); CreateFadeInTask(taskId, 2); - gTasks[taskId].func = Task_OakSpeech33; + gTasks[taskId].func = Task_OakSpeech_ReshowPlayersPic; } } -static void Task_OakSpeech32(u8 taskId) +static void Task_OakSpeech_FadeInRivalPic(u8 taskId) { - ChangeBgX(2, 0, 0); + ChangeBgX(2, 0, BG_COORD_SET); gTasks[taskId].tTrainerPicPosX = 0; gSpriteCoordOffsetX = 0; - LoadOaksSpeechTrainerPic(RIVAL_PIC, 0); + LoadTrainerPic(RIVAL_PIC, 0); CreateFadeOutTask(taskId, 2); - gTasks[taskId].func = Task_OakSpeech34; + gTasks[taskId].func = Task_OakSpeech_AskRivalsName; } -static void Task_OakSpeech34(u8 taskId) +static void Task_OakSpeech_AskRivalsName(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (tTrainerPicFadeState != 0) { - OaksSpeechPrintMessage(gOakText_IntroduceRival, sOakSpeechResources->textSpeed); + OakSpeechPrintMessage(gOakSpeech_Text_WhatWasHisName, sOakSpeechResources->textSpeed); sOakSpeechResources->hasPlayerBeenNamed = TRUE; - gTasks[taskId].func = Task_OakSpeech35; + gTasks[taskId].func = Task_OakSpeech_MoveRivalDisplayNameOptions; } } -static void Task_OakSpeech33(u8 taskId) +static void Task_OakSpeech_ReshowPlayersPic(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (tTrainerPicFadeState != 0) { - DestroyOaksSpeechTrainerPic(); - if (data[3] != 0) - data[3]--; + ClearTrainerPic(); + if (tTimer != 0) + { + tTimer--; + } else { if (gSaveBlock2Ptr->playerGender == MALE) - LoadOaksSpeechTrainerPic(MALE_PLAYER_PIC, 0); + LoadTrainerPic(MALE_PLAYER_PIC, 0); else - LoadOaksSpeechTrainerPic(FEMALE_PLAYER_PIC, 0); + LoadTrainerPic(FEMALE_PLAYER_PIC, 0); gTasks[taskId].tTrainerPicPosX = 0; gSpriteCoordOffsetX = 0; - ChangeBgX(2, 0, 0); + ChangeBgX(2, 0, BG_COORD_SET); CreateFadeOutTask(taskId, 2); - gTasks[taskId].func = Task_OakSpeech36; + gTasks[taskId].func = Task_OakSpeech_LetsGo; } } } -static void Task_OakSpeech36(u8 taskId) +static void Task_OakSpeech_LetsGo(u8 taskId) { if (gTasks[taskId].tTrainerPicFadeState != 0) { - StringExpandPlaceholders(gStringVar4, gOakText_LegendAboutToUnfold); - OaksSpeechPrintMessage(gStringVar4, sOakSpeechResources->textSpeed); - gTasks[taskId].data[3] = 30; - gTasks[taskId].func = Task_OakSpeech37; + StringExpandPlaceholders(gStringVar4, gOakSpeech_Text_LetsGo); + OakSpeechPrintMessage(gStringVar4, sOakSpeechResources->textSpeed); + gTasks[taskId].tTimer = 30; + gTasks[taskId].func = Task_OakSpeech_FadeOutBGM; } } -static void Task_OakSpeech37(u8 taskId) +static void Task_OakSpeech_FadeOutBGM(u8 taskId) { if (!IsTextPrinterActive(0)) { - if (gTasks[taskId].data[3] != 0) - gTasks[taskId].data[3]--; + if (gTasks[taskId].tTimer != 0) + { + gTasks[taskId].tTimer--; + } else { FadeOutBGM(4); - gTasks[taskId].func = Task_OakSpeech38; + gTasks[taskId].func = Task_OakSpeech_SetUpExitAnimation; } } } -static void Task_OakSpeech38(u8 taskId) +// The sOakSpeechResources struct's currentPage field is reused below as a timer for shrinking the player pic +#define shrinkTimer currentPage + +static void Task_OakSpeech_SetUpExitAnimation(u8 taskId) { - sOakSpeechResources->unk_0012 = 0; - Task_OakSpeech38_1(taskId); - Task_OakSpeech38_2(taskId); - Task_OakSpeech38_3(taskId); + sOakSpeechResources->shrinkTimer = 0; + Task_OakSpeech_SetUpDestroyPlatformSprites(taskId); + Task_OakSpeech_SetUpFadePlayerPicWhite(taskId); + Task_OakSpeech_SetUpShrinkPlayerPic(taskId); } -static void Task_OakSpeech38_3(u8 taskId) +#define tPlayerPicFadeOutTimer data[0] +#define tScaleDelta data[2] +#define tPlayerIsShrunk data[15] + +static void Task_OakSpeech_SetUpShrinkPlayerPic(u8 taskId) { - s16 * data = gTasks[taskId].data; - SetBgAttribute(2, 6, 1); - data[0] = 0; - tTrainerPicPosX = 0; - tTrainerPicFadeState = 256; - data[15] = 0; - gTasks[taskId].func = Task_OakSpeech39; + s16 *data = gTasks[taskId].data; + SetBgAttribute(2, BG_ATTR_WRAPAROUND, 1); + tPlayerPicFadeOutTimer = 0; + data[1] = 0; // assigned, but never read + tScaleDelta = 256; + tPlayerIsShrunk = FALSE; + gTasks[taskId].func = Task_OakSpeech_ShrinkPlayerPic; } -static void Task_OakSpeech39(u8 taskId) +static void Task_OakSpeech_ShrinkPlayerPic(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; s16 x, y; - u16 r0; + u16 oldScaleDelta; - sOakSpeechResources->unk_0012++; - if (sOakSpeechResources->unk_0012 % 20 == 0) + sOakSpeechResources->shrinkTimer++; + if (sOakSpeechResources->shrinkTimer % 20 == 0) { - if (sOakSpeechResources->unk_0012 == 40) + if (sOakSpeechResources->shrinkTimer == 40) PlaySE(SE_WARP_IN); - r0 = tTrainerPicFadeState; - tTrainerPicFadeState -= 32; - x = Q_8_8_inv(r0 - 8); - y = Q_8_8_inv(tTrainerPicFadeState - 16); - SetBgAffine(2, 0x7800, 0x5400, 0x78, 0x54, x, y, 0); - if (tTrainerPicFadeState <= 96) + oldScaleDelta = tScaleDelta; + tScaleDelta -= 32; + x = Q_8_8_inv(oldScaleDelta - 8); + y = Q_8_8_inv(tScaleDelta - 16); + SetBgAffine(2, 0x7800, 0x5400, 120, 84, x, y, 0); + if (tScaleDelta <= 96) { - data[15] = 1; - data[0] = 36; - gTasks[taskId].func = Task_OakSpeech40; + tPlayerIsShrunk = TRUE; + tPlayerPicFadeOutTimer = 36; + gTasks[taskId].func = Task_OakSpeech_FadePlayerPicToBlack; } } } -static void Task_OakSpeech38_1(u8 taskId) +#define tBGFadeStarted data[1] + +static void Task_OakSpeech_SetUpDestroyPlatformSprites(u8 taskId) { - u8 taskId2 = CreateTask(Task_OakSpeech38_sub1, 1); - s16 * data = gTasks[taskId2].data; - data[0] = 0; - data[1] = 0; - data[2] = 0; - data[15] = 0; - BeginNormalPaletteFade(0xFFFF0FCF, 4, 0, 16, RGB_BLACK); + u8 taskId2 = CreateTask(Task_OakSpeech_DestroyPlatformSprites, 1); + s16 *data = gTasks[taskId2].data; + data[0] = 0; // assigned, but never read + tBGFadeStarted = 0; + data[2] = 0; // assigned, but never read + data[15] = 0; // assigned, but never read + BeginNormalPaletteFade(PALETTES_OBJECTS | 0x0FCF, 4, 0, 16, RGB_BLACK); } -static void Task_OakSpeech38_sub1(u8 taskId) +static void Task_OakSpeech_DestroyPlatformSprites(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { - if (data[1] != 0) + if (tBGFadeStarted != 0) { DestroyTask(taskId); - DestroyLinkedPikaOrGrassPlatformSprites(taskId, 1); + // As this function's taskId is in fact taskId2 above, in + // Task_OakSpeech_SetUpDestroyPlatformSprites, the platform sprite + // IDs have not been assigned to this task's data[7], data[8] and + // data[9]. + // As a result, the function below will only delete the sprite with + // ID 0. + // This can be verified by looking at the sprite viewer in an + // emulator at the end of the Oak speech. + DestroyPikachuOrPlatformSprites(taskId, SPRITE_TYPE_PLATFORM); } else { - data[1]++; - BeginNormalPaletteFade(0x0000F000, 0, 0, 16, RGB_BLACK); + tBGFadeStarted++; + BeginNormalPaletteFade(0x0000 | 0xF000, 0, 0, 16, RGB_BLACK); } } } -static void Task_OakSpeech38_2(u8 taskId) +#undef tBGFadeStarted + +#define tPlayerPicFadeWhiteTimer data[0] +#define tUnderflowingTimer data[1] +#define tSecondaryTimer data[2] +#define tBlendCoefficient data[14] + +static void Task_OakSpeech_SetUpFadePlayerPicWhite(u8 taskId) { - u8 taskId2 = CreateTask(Task_OakSpeech38_sub2, 2); - s16 * data = gTasks[taskId2].data; - data[0] = 8; - data[1] = 0; - data[2] = 8; - data[14] = 0; - data[15] = 0; + u8 taskId2 = CreateTask(Task_OakSpeech_FadePlayerPicWhite, 2); + s16 *data = gTasks[taskId2].data; + tPlayerPicFadeWhiteTimer = 8; + tUnderflowingTimer = 0; + tSecondaryTimer = 8; + tBlendCoefficient = 0; + data[15] = 0; // assigned, but never read } -static void Task_OakSpeech38_sub2(u8 taskId) +static void Task_OakSpeech_FadePlayerPicWhite(u8 taskId) { - s16 * data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; u8 i; - if (data[0] != 0) - data[0]--; + if (tPlayerPicFadeWhiteTimer != 0) + { + tPlayerPicFadeWhiteTimer--; + } else { - if (data[1] <= 0 && data[2] != 0) - data[2]--; - BlendPalette(0x40, 0x20, data[14], RGB_WHITE); - data[14]++; - data[1]--; - data[0] = data[2]; - if (data[14] > 14) + if (tUnderflowingTimer <= 0 && tSecondaryTimer != 0) + tSecondaryTimer--; + BlendPalette(0x40, 0x20, tBlendCoefficient, RGB_WHITE); + tBlendCoefficient++; + tUnderflowingTimer--; + tPlayerPicFadeWhiteTimer = tSecondaryTimer; + if (tBlendCoefficient > 14) { for (i = 0; i < 32; i++) { @@ -1508,26 +1752,26 @@ static void Task_OakSpeech38_sub2(u8 taskId) } } -static void Task_OakSpeech40(u8 taskId) +static void Task_OakSpeech_FadePlayerPicToBlack(u8 taskId) { - if (gTasks[taskId].data[0] != 0) - gTasks[taskId].data[0]--; + if (gTasks[taskId].tPlayerPicFadeOutTimer != 0) + { + gTasks[taskId].tPlayerPicFadeOutTimer--; + } else { - BeginNormalPaletteFade(0x00000030, 2, 0, 16, RGB_BLACK); - gTasks[taskId].func = Task_OakSpeech41; + BeginNormalPaletteFade(0x0000 | 0x0030, 2, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_OakSpeech_WaitForFade; } } -static void Task_OakSpeech41(u8 taskId) +static void Task_OakSpeech_WaitForFade(u8 taskId) { if (!gPaletteFade.active) - { - gTasks[taskId].func = Task_OakSpeech42; - } + gTasks[taskId].func = Task_OakSpeech_FreeResources; } -static void Task_OakSpeech42(u8 taskId) +static void Task_OakSpeech_FreeResources(u8 taskId) { FreeAllWindowBuffers(); OakSpeechNidoranFFreeResources(); @@ -1557,13 +1801,13 @@ static void CB2_ReturnFromNamingScreen(void) break; case 1: ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(1, sBgTemplates, NELEMS(sBgTemplates)); + InitBgsFromTemplates(1, sBgTemplates, ARRAY_COUNT(sBgTemplates)); SetBgTilemapBuffer(1, sOakSpeechResources->bg1TilemapBuffer); SetBgTilemapBuffer(2, sOakSpeechResources->bg2TilemapBuffer); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); + ChangeBgX(1, 0, BG_COORD_SET); + ChangeBgY(1, 0, BG_COORD_SET); + ChangeBgX(2, 0, BG_COORD_SET); + ChangeBgY(2, 0, BG_COORD_SET); break; case 2: SetGpuReg(REG_OFFSET_WIN0H, 0); @@ -1578,36 +1822,38 @@ static void CB2_ReturnFromNamingScreen(void) FreeAllWindowBuffers(); InitStandardTextBoxWindows(); InitTextBoxGfxAndPrinters(); - LoadPalette(sHelpDocsPalette, 0, 0xe0); + LoadPalette(sControlsGuide_Pal, 0, 0xE0); break; case 4: - DecompressAndCopyTileDataToVram(1, sOakSpeechGfx_SolidColors, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, sOakSpeech_Background_Tiles, 0, 0, 0); break; case 5: if (FreeTempTileDataBuffersIfPossible()) return; - FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); - CopyToBgTilemapBuffer(1, sOakSpeech_BackgroundTilemap, 0, 0); - FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20); + CopyToBgTilemapBuffer(1, sOakSpeech_Background_Tilemap, 0, 0); + FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); break; case 6: - taskId = CreateTask(Task_OakSpeech26, 0); + taskId = CreateTask(Task_OakSpeech_ConfirmName, 0); if (sOakSpeechResources->hasPlayerBeenNamed == FALSE) { if (gSaveBlock2Ptr->playerGender == MALE) - LoadOaksSpeechTrainerPic(MALE_PLAYER_PIC, 0); + LoadTrainerPic(MALE_PLAYER_PIC, 0); else - LoadOaksSpeechTrainerPic(FEMALE_PLAYER_PIC, 0); + LoadTrainerPic(FEMALE_PLAYER_PIC, 0); } else - LoadOaksSpeechTrainerPic(RIVAL_PIC, 0); + { + LoadTrainerPic(RIVAL_PIC, 0); + } gTasks[taskId].tTrainerPicPosX = -60; gSpriteCoordOffsetX += 60; - ChangeBgX(2, -0x3C00, 0); - CreatePikaOrGrassPlatformSpriteAndLinkToCurrentTask(taskId, 1); - gTasks[taskId].data[15] = 1; + ChangeBgX(2, 0xFFFFC400, BG_COORD_SET); + CreatePikachuOrPlatformSprites(taskId, SPRITE_TYPE_PLATFORM); + gTasks[taskId].tNameNotConfirmed = TRUE; break; case 7: BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); @@ -1616,9 +1862,9 @@ static void CB2_ReturnFromNamingScreen(void) ShowBg(1); ShowBg(2); EnableInterrupts(INTR_FLAG_VBLANK); - SetVBlankCallback(VBlankCB_NewGameOaksSpeech); + SetVBlankCallback(VBlankCB_NewGameScene); gTextFlags.canABSpeedUpPrint = TRUE; - SetMainCallback2(CB2_NewGameOaksSpeech); + SetMainCallback2(CB2_NewGameScene); return; } @@ -1632,186 +1878,185 @@ static void CreateNidoranFSprite(u8 taskId) DecompressPicFromTable(&gMonFrontPicTable[SPECIES_NIDORAN_F], OakSpeechNidoranFGetBuffer(0), SPECIES_NIDORAN_F); LoadCompressedSpritePaletteUsingHeap(&gMonPaletteTable[SPECIES_NIDORAN_F]); SetMultiuseSpriteTemplateToPokemon(SPECIES_NIDORAN_F, 0); - spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x60, 0x60, 1); + spriteId = CreateSprite(&gMultiuseSpriteTemplate, 96, 96, 1); gSprites[spriteId].callback = SpriteCallbackDummy; gSprites[spriteId].oam.priority = 1; gSprites[spriteId].invisible = TRUE; - gTasks[taskId].data[4] = spriteId; + gTasks[taskId].tNidoranFSpriteId = spriteId; } -static void SpriteCB_PikaSync(struct Sprite *sprite) +#define sBodySpriteId data[0] + +static void SpriteCB_Pikachu(struct Sprite *sprite) { - sprite->y2 = gSprites[sprite->data[0]].animCmdIndex; + sprite->y2 = gSprites[sprite->sBodySpriteId].animCmdIndex; } -static void CreatePikaOrGrassPlatformSpriteAndLinkToCurrentTask(u8 taskId, u8 state) +static void CreatePikachuOrPlatformSprites(u8 taskId, u8 spriteType) { u8 spriteId; u8 i = 0; - switch (state) + switch (spriteType) { - case 0: - LoadCompressedSpriteSheet(&sOakSpeech_PikaSpriteSheets[0]); - LoadCompressedSpriteSheet(&sOakSpeech_PikaSpriteSheets[1]); - LoadCompressedSpriteSheet(&sOakSpeech_PikaSpriteSheets[2]); - LoadSpritePalette(&sOakSpeech_PikaSpritePal); - spriteId = CreateSprite(&sOakSpeech_PikaSpriteTemplates[0], 0x10, 0x11, 2); + case SPRITE_TYPE_PIKACHU: + LoadCompressedSpriteSheet(&sPikachuIntro_Pikachu_SpriteSheets[PIKACHU_BODY_PLATFORM_LEFT]); + LoadCompressedSpriteSheet(&sPikachuIntro_Pikachu_SpriteSheets[PIKACHU_EARS_PLATFORM_MIDDLE]); + LoadCompressedSpriteSheet(&sPikachuIntro_Pikachu_SpriteSheets[PIKACHU_EYES_PLATFORM_RIGHT]); + LoadSpritePalette(&sPikachuIntro_Pikachu_SpritePalette); + spriteId = CreateSprite(&sPikachuIntro_Pikachu_SpriteTemplates[PIKACHU_BODY_PLATFORM_LEFT], 16, 17, 2); gSprites[spriteId].oam.priority = 0; - gTasks[taskId].data[7] = spriteId; - spriteId = CreateSprite(&sOakSpeech_PikaSpriteTemplates[1], 0x10, 0x09, 3); + gTasks[taskId].tPikachuPlatformSpriteId(PIKACHU_BODY_PLATFORM_LEFT) = spriteId; + spriteId = CreateSprite(&sPikachuIntro_Pikachu_SpriteTemplates[PIKACHU_EARS_PLATFORM_MIDDLE], 16, 9, 3); gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].data[0] = gTasks[taskId].data[7]; - gSprites[spriteId].callback = SpriteCB_PikaSync; - gTasks[taskId].data[8] = spriteId; - spriteId = CreateSprite(&sOakSpeech_PikaSpriteTemplates[2], 0x18, 0x0D, 1); + gSprites[spriteId].sBodySpriteId = gTasks[taskId].tPikachuPlatformSpriteId(PIKACHU_BODY_PLATFORM_LEFT); + gSprites[spriteId].callback = SpriteCB_Pikachu; + gTasks[taskId].tPikachuPlatformSpriteId(PIKACHU_EARS_PLATFORM_MIDDLE) = spriteId; + spriteId = CreateSprite(&sPikachuIntro_Pikachu_SpriteTemplates[PIKACHU_EYES_PLATFORM_RIGHT], 24, 13, 1); gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].data[0] = gTasks[taskId].data[7]; - gSprites[spriteId].callback = SpriteCB_PikaSync; - gTasks[taskId].data[9] = spriteId; + gSprites[spriteId].sBodySpriteId = gTasks[taskId].tPikachuPlatformSpriteId(PIKACHU_BODY_PLATFORM_LEFT); + gSprites[spriteId].callback = SpriteCB_Pikachu; + gTasks[taskId].tPikachuPlatformSpriteId(PIKACHU_EYES_PLATFORM_RIGHT) = spriteId; break; - case 1: - LoadCompressedSpriteSheet(&sOakSpeech_GrassPlatformSpriteSheet); - LoadSpritePalette(&sOakSpeech_GrassPlatformSpritePal); - for (i = 0; i < 3; i++) + case SPRITE_TYPE_PLATFORM: + LoadCompressedSpriteSheet(&sOakSpeech_Platform_SpriteSheet); + LoadSpritePalette(&sOakSpeech_Platform_SpritePalette); + for (i = PIKACHU_BODY_PLATFORM_LEFT; i < NUM_PIKACHU_PLATFORM_SPRITES; i++) { - spriteId = CreateSprite(&sOakSpeech_GrassPlatformSpriteTemplates[i], i * 32 + 88, 0x70, 1); + spriteId = CreateSprite(&sOakSpeech_Platform_SpriteTemplates[i], i * 32 + 88, 112, 1); gSprites[spriteId].oam.priority = 2; gSprites[spriteId].animPaused = TRUE; gSprites[spriteId].coordOffsetEnabled = TRUE; - gTasks[taskId].data[7 + i] = spriteId; + gTasks[taskId].tPikachuPlatformSpriteId(i) = spriteId; } break; } } -static void DestroyLinkedPikaOrGrassPlatformSprites(u8 taskId, u8 state) +static void DestroyPikachuOrPlatformSprites(u8 taskId, u8 spriteType) { u8 i; + for (i = PIKACHU_BODY_PLATFORM_LEFT; i < NUM_PIKACHU_PLATFORM_SPRITES; i++) + DestroySprite(&gSprites[gTasks[taskId].tPikachuPlatformSpriteId(i)]); - for (i = 0; i < 3; i++) + switch (spriteType) { - DestroySprite(&gSprites[gTasks[taskId].data[7 + i]]); - } - - switch (state) - { - case 0: - FreeSpriteTilesByTag(0x1003); - FreeSpriteTilesByTag(0x1002); - FreeSpriteTilesByTag(0x1001); - FreeSpritePaletteByTag(0x1001); + case SPRITE_TYPE_PIKACHU: + FreeSpriteTilesByTag(GFX_TAG_PIKACHU_EYES); + FreeSpriteTilesByTag(GFX_TAG_PIKACHU_EARS); + FreeSpriteTilesByTag(GFX_TAG_PIKACHU); + FreeSpritePaletteByTag(PAL_TAG_PIKACHU); break; - case 1: - FreeSpriteTilesByTag(0x1000); - FreeSpritePaletteByTag(0x1000); + case SPRITE_TYPE_PLATFORM: + FreeSpriteTilesByTag(GFX_TAG_PLATFORM); + FreeSpritePaletteByTag(PAL_TAG_PLATFORM); break; } } -static void LoadOaksSpeechTrainerPic(u16 whichPic, u16 tileOffset) +static void LoadTrainerPic(u16 whichPic, u16 tileOffset) { u32 i; switch (whichPic) { case MALE_PLAYER_PIC: - LoadPalette(sOakSpeechGfx_RedPal, 0x40, 0x40); - LZ77UnCompVram(sOakSpeechGfx_RedPic, (void *)0x06000600 + tileOffset); + LoadPalette(sOakSpeech_Red_Pal, 0x40, 0x40); + LZ77UnCompVram(sOakSpeech_Red_Tiles, (void *)VRAM + 0x600 + tileOffset); break; case FEMALE_PLAYER_PIC: - LoadPalette(sOakSpeechGfx_LeafPal, 0x40, 0x40); - LZ77UnCompVram(sOakSpeechGfx_LeafPic, (void *)0x06000600 + tileOffset); + LoadPalette(sOakSpeech_Leaf_Pal, 0x40, 0x40); + LZ77UnCompVram(sOakSpeech_Leaf_Tiles, (void *)VRAM + 0x600 + tileOffset); break; case RIVAL_PIC: - LoadPalette(sOakSpeechGfx_RivalPal, 0x60, 0x40); - LZ77UnCompVram(sOakSpeechGfx_RivalPic, (void *)0x06000600 + tileOffset); + LoadPalette(sOakSpeech_Rival_Pal, 0x60, 0x40); + LZ77UnCompVram(sOakSpeech_Rival_Tiles, (void *)VRAM + 0x600 + tileOffset); break; case OAK_PIC: - LoadPalette(sOakSpeechGfx_OakPal, 0x60, 0x40); - LZ77UnCompVram(sOakSpeechGfx_OakPic, (void *)0x06000600 + tileOffset); + LoadPalette(sOakSpeech_Oak_Pal, 0x60, 0x40); + LZ77UnCompVram(sOakSpeech_Oak_Tiles, (void *)VRAM + 0x600 + tileOffset); break; default: return; } - sOakSpeechResources->trainerPicTilemapBuffer = AllocZeroed(0x60); + sOakSpeechResources->trainerPicTilemap = AllocZeroed(0x60); for (i = 0; i < 0x60; i++) - ((u8 *)sOakSpeechResources->trainerPicTilemapBuffer)[i] = i; - FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x10); - CopyRectToBgTilemapBufferRect(2, sOakSpeechResources->trainerPicTilemapBuffer, 0, 0, 8, 12, 11, 2, 8, 12, 0x10, (tileOffset / 64) + 0x18, 0x00); + ((u8 *)sOakSpeechResources->trainerPicTilemap)[i] = i; + FillBgTilemapBufferRect(2, 0, 0, 0, 32, 32, 16); + CopyRectToBgTilemapBufferRect(2, sOakSpeechResources->trainerPicTilemap, 0, 0, 8, 12, 11, 2, 8, 12, 16, (tileOffset / 64) + 24, 0); CopyBgTilemapBufferToVram(2); - Free(sOakSpeechResources->trainerPicTilemapBuffer); - sOakSpeechResources->trainerPicTilemapBuffer = 0; + Free(sOakSpeechResources->trainerPicTilemap); + sOakSpeechResources->trainerPicTilemap = 0; } -static void DestroyOaksSpeechTrainerPic(void) +static void ClearTrainerPic(void) { - FillBgTilemapBufferRect(2, 0x000, 11, 1, 8, 12, 0x10); + FillBgTilemapBufferRect(2, 0, 11, 1, 8, 12, 16); CopyBgTilemapBufferToVram(2); } #define tParentTaskId data[0] +#define tBlendTarget1 data[1] +#define tBlendTarget2 data[2] +#define tUnusedState data[3] +#define tFadeTimer data[4] static void Task_SlowFadeIn(u8 taskId) { u8 i = 0; - if (gTasks[taskId].data[1] == 0) + if (gTasks[taskId].tBlendTarget1 == 0) { gTasks[gTasks[taskId].tParentTaskId].tTrainerPicFadeState = 1; DestroyTask(taskId); - for (i = 0; i < 3; i++) - { - gSprites[gTasks[taskId].data[7 + i]].invisible = TRUE; - } + for (i = PIKACHU_BODY_PLATFORM_LEFT; i < NUM_PIKACHU_PLATFORM_SPRITES; i++) + gSprites[gTasks[taskId].tPikachuPlatformSpriteId(i)].invisible = TRUE; } else { - if (gTasks[taskId].data[4] != 0) - gTasks[taskId].data[4]--; + if (gTasks[taskId].tFadeTimer != 0) + { + gTasks[taskId].tFadeTimer--; + } else { - gTasks[taskId].data[4] = gTasks[taskId].data[3]; - gTasks[taskId].data[1]--; - gTasks[taskId].data[2]++; - if (gTasks[taskId].data[1] == 8) + gTasks[taskId].tFadeTimer = gTasks[taskId].tTimer; + gTasks[taskId].tBlendTarget1--; + gTasks[taskId].tBlendTarget2++; + if (gTasks[taskId].tBlendTarget1 == 8) { - for (i = 0; i < 3; i++) - { - gSprites[gTasks[taskId].data[7 + i]].invisible ^= TRUE; - } + for (i = PIKACHU_BODY_PLATFORM_LEFT; i < NUM_PIKACHU_PLATFORM_SPRITES; i++) + gSprites[gTasks[taskId].tPikachuPlatformSpriteId(i)].invisible ^= TRUE; } - SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].data[2] * 256) + gTasks[taskId].data[1]); + SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].tBlendTarget2 * 256) + gTasks[taskId].tBlendTarget1); } } } -static void CreateFadeInTask(u8 taskId, u8 state) +static void CreateFadeInTask(u8 taskId, u8 delay) { u8 taskId2; u8 i = 0; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); - SetGpuReg(REG_OFFSET_BLDALPHA, 0x10); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); SetGpuReg(REG_OFFSET_BLDY, 0); gTasks[taskId].tTrainerPicFadeState = 0; taskId2 = CreateTask(Task_SlowFadeIn, 0); gTasks[taskId2].tParentTaskId = taskId; - gTasks[taskId2].data[1] = 16; - gTasks[taskId2].data[2] = 0; - gTasks[taskId2].data[3] = state; - gTasks[taskId2].data[4] = state; - for (i = 0; i < 3; i++) - { - gTasks[taskId2].data[7 + i] = gTasks[taskId].data[7 + i]; - } + gTasks[taskId2].tBlendTarget1 = 16; + gTasks[taskId2].tBlendTarget2 = 0; + gTasks[taskId2].tUnusedState = delay; // assigned, but never read + gTasks[taskId2].tFadeTimer = delay; + for (i = PIKACHU_BODY_PLATFORM_LEFT; i < NUM_PIKACHU_PLATFORM_SPRITES; i++) + gTasks[taskId2].tPikachuPlatformSpriteId(i) = gTasks[taskId].tPikachuPlatformSpriteId(i); } static void Task_SlowFadeOut(u8 taskId) { u8 i = 0; - if (gTasks[taskId].data[1] == 16) + if (gTasks[taskId].tBlendTarget1 == 16) { if (!gPaletteFade.active) { @@ -1821,81 +2066,77 @@ static void Task_SlowFadeOut(u8 taskId) } else { - if (gTasks[taskId].data[4] != 0) - gTasks[taskId].data[4]--; + if (gTasks[taskId].tFadeTimer != 0) + { + gTasks[taskId].tFadeTimer--; + } else { - gTasks[taskId].data[4] = gTasks[taskId].data[3]; - gTasks[taskId].data[1] += 2; - gTasks[taskId].data[2] -= 2; - if (gTasks[taskId].data[1] == 8) + gTasks[taskId].tFadeTimer = gTasks[taskId].tTimer; + gTasks[taskId].tBlendTarget1 += 2; + gTasks[taskId].tBlendTarget2 -= 2; + if (gTasks[taskId].tBlendTarget1 == 8) { - for (i = 0; i < 3; i++) - { - gSprites[gTasks[taskId].data[7 + i]].invisible ^= TRUE; - } + for (i = PIKACHU_BODY_PLATFORM_LEFT; i < NUM_PIKACHU_PLATFORM_SPRITES; i++) + gSprites[gTasks[taskId].tPikachuPlatformSpriteId(i)].invisible ^= TRUE; } - SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].data[2] * 256) + gTasks[taskId].data[1]); + SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].tBlendTarget2 * 256) + gTasks[taskId].tBlendTarget1); } } } -static void CreateFadeOutTask(u8 taskId, u8 state) +static void CreateFadeOutTask(u8 taskId, u8 delay) { u8 taskId2; u8 i = 0; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); - SetGpuReg(REG_OFFSET_BLDALPHA, 0x1000); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); SetGpuReg(REG_OFFSET_BLDY, 0); gTasks[taskId].tTrainerPicFadeState = 0; + taskId2 = CreateTask(Task_SlowFadeOut, 0); gTasks[taskId2].tParentTaskId = taskId; - gTasks[taskId2].data[1] = 0; - gTasks[taskId2].data[2] = 16; - gTasks[taskId2].data[3] = state; - gTasks[taskId2].data[4] = state; - for (i = 0; i < 3; i++) - { - gTasks[taskId2].data[7 + i] = gTasks[taskId].data[7 + i]; - } + gTasks[taskId2].tBlendTarget1 = 0; + gTasks[taskId2].tBlendTarget2 = 16; + gTasks[taskId2].tUnusedState = delay; // assigned, but never read + gTasks[taskId2].tFadeTimer = delay; + for (i = PIKACHU_BODY_PLATFORM_LEFT; i < NUM_PIKACHU_PLATFORM_SPRITES; i++) + gTasks[taskId2].tPikachuPlatformSpriteId(i) = gTasks[taskId].tPikachuPlatformSpriteId(i); } static void PrintNameChoiceOptions(u8 taskId, u8 hasPlayerBeenNamed) { - s16 * data = gTasks[taskId].data; - const u8 *const * textPtrs; + s16 *data = gTasks[taskId].data; + const u8 *const *textPtrs; u8 i; - data[13] = AddWindow(&sNewGameAdventureIntroWindowTemplates[3]); - PutWindowTilemap(data[13]); - DrawStdFrameWithCustomTileAndPalette(data[13], 1, GetStdWindowBaseTileNum(), 14); - FillWindowPixelBuffer(gTasks[taskId].data[13], 0x11); - AddTextPrinterParameterized(data[13], FONT_NORMAL, gOtherText_NewName, 8, 1, 0, NULL); + tMenuWindowId = AddWindow(&sIntro_WindowTemplates[WIN_INTRO_NAMES]); + PutWindowTilemap(tMenuWindowId); + DrawStdFrameWithCustomTileAndPalette(tMenuWindowId, 1, GetStdWindowBaseTileNum(), 14); + FillWindowPixelBuffer(gTasks[taskId].tMenuWindowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(tMenuWindowId, FONT_NORMAL, gOtherText_NewName, 8, 1, 0, NULL); if (hasPlayerBeenNamed == FALSE) textPtrs = gSaveBlock2Ptr->playerGender == MALE ? sMaleNameChoices : sFemaleNameChoices; else textPtrs = sRivalNameChoices; - for (i = 0; i < 4; i++) - { - AddTextPrinterParameterized(data[13], FONT_NORMAL, textPtrs[i], 8, 16 * (i + 1) + 1, 0, NULL); - } - Menu_InitCursor(data[13], FONT_NORMAL, 0, 1, 16, 5, 0); - CopyWindowToVram(data[13], COPYWIN_FULL); + for (i = 0; i < ARRAY_COUNT(sRivalNameChoices); i++) + AddTextPrinterParameterized(tMenuWindowId, FONT_NORMAL, textPtrs[i], 8, 16 * (i + 1) + 1, 0, NULL); + Menu_InitCursor(tMenuWindowId, FONT_NORMAL, 0, 1, 16, 5, 0); + CopyWindowToVram(tMenuWindowId, COPYWIN_FULL); } static void GetDefaultName(u8 hasPlayerBeenNamed, u8 rivalNameChoice) { - const u8 * src; - u8 * dest; + const u8 *src; + u8 *dest; u8 i; - if (hasPlayerBeenNamed == FALSE) { if (gSaveBlock2Ptr->playerGender == MALE) - src = sMaleNameChoices[Random() % 19]; + src = sMaleNameChoices[Random() % ARRAY_COUNT(sMaleNameChoices)]; else - src = sFemaleNameChoices[Random() % 19]; + src = sFemaleNameChoices[Random() % ARRAY_COUNT(sFemaleNameChoices)]; dest = gSaveBlock2Ptr->playerName; } else @@ -1908,3 +2149,29 @@ static void GetDefaultName(u8 hasPlayerBeenNamed, u8 rivalNameChoice) for (; i < PLAYER_NAME_LENGTH + 1; i++) dest[i] = EOS; } + +#undef tSpriteTimer +#undef tTrainerPicPosX +#undef tTrainerPicFadeState +#undef tTimer +#undef tNidoranFSpriteId +#undef tTextCursorSpriteId +#undef tPokeBallSpriteId +#undef tMenuWindowId +#undef tTextboxWindowId +#undef tDelta +#undef tPlayerPicFadeOutTimer +#undef tScaleDelta +#undef tPlayerIsShrunk +#undef shrinkTimer +#undef tPlayerPicFadeWhiteTimer +#undef tUnderflowingTimer +#undef tSecondaryTimer +#undef tBlendCoefficient +#undef tNameNotConfirmed +#undef sBodySpriteId +#undef tParentTaskId +#undef tBlendTarget1 +#undef tBlendTarget2 +#undef tUnusedState +#undef tFadeTimer From 0348b58899397829df6dd2abe4902ec77ee730c3 Mon Sep 17 00:00:00 2001 From: SphericalIce Date: Sat, 31 Dec 2022 14:39:34 +0000 Subject: [PATCH 07/33] Rename gOakText_AskPlayerGender to fit naming convention --- data/text/new_game_intro.inc | 2 +- include/event_scripts.h | 2 +- src/oak_speech.c | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/data/text/new_game_intro.inc b/data/text/new_game_intro.inc index da895d316..103a41c39 100644 --- a/data/text/new_game_intro.inc +++ b/data/text/new_game_intro.inc @@ -154,7 +154,7 @@ gControlsGuide_Text_LRButtons:: .string "game, or on how to do things,\n" .string "press the L or R Button.$" -gOakText_AskPlayerGender:: +gOakSpeech_Text_AskPlayerGender:: .string "Now tell me. Are you a boy?\n" .string "Or are you a girl?$" diff --git a/include/event_scripts.h b/include/event_scripts.h index 388cc598a..a9603119c 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -755,7 +755,7 @@ extern const u8 gControlsGuide_Text_BButton[]; extern const u8 gControlsGuide_Text_StartButton[]; extern const u8 gControlsGuide_Text_SelectButton[]; extern const u8 gControlsGuide_Text_LRButtons[]; -extern const u8 gOakText_AskPlayerGender[]; +extern const u8 gOakSpeech_Text_AskPlayerGender[]; extern const u8 gPikachuIntro_Text_Page1[]; extern const u8 gPikachuIntro_Text_Page2[]; extern const u8 gPikachuIntro_Text_Page3[]; diff --git a/src/oak_speech.c b/src/oak_speech.c index 32a9a6a37..c576abdfb 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -1276,7 +1276,7 @@ static void Task_OakSpeech_AskPlayerGender(u8 taskId) { tTrainerPicPosX = -60; ClearTrainerPic(); - OakSpeechPrintMessage(gOakText_AskPlayerGender, sOakSpeechResources->textSpeed); + OakSpeechPrintMessage(gOakSpeech_Text_AskPlayerGender, sOakSpeechResources->textSpeed); gTasks[taskId].func = Task_OakSpeech_ShowGenderOptions; } } @@ -1374,6 +1374,7 @@ static void Task_OakSpeech_FadeOutForPlayerNamingScreen(u8 taskId) gTasks[taskId].func = Task_OakSpeech_DoNamingScreen; } } + static void Task_OakSpeech_MoveRivalDisplayNameOptions(u8 taskId) { s16 *data = gTasks[taskId].data; From 2070ea789625ec9a9d6f4697157357cd2e69eff9 Mon Sep 17 00:00:00 2001 From: SphericalIce Date: Sat, 31 Dec 2022 14:42:41 +0000 Subject: [PATCH 08/33] Format strings in new_game_intro.inc --- data/text/new_game_intro.inc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/data/text/new_game_intro.inc b/data/text/new_game_intro.inc index 103a41c39..c0ec77e45 100644 --- a/data/text/new_game_intro.inc +++ b/data/text/new_game_intro.inc @@ -188,7 +188,10 @@ gPikachuIntro_Text_Page3:: gOakSpeech_Text_WelcomeToTheWorld:: .string "Hello, there!\n" - .string "Glad to meet you!\pWelcome to the world of POKéMON!\pMy name is OAK.\pPeople affectionately refer to me\n" + .string "Glad to meet you!\p" + .string "Welcome to the world of POKéMON!\p" + .string "My name is OAK.\p" + .string "People affectionately refer to me\n" .string "as the POKéMON PROFESSOR.\p$" gOakSpeech_Text_ThisWorld:: @@ -200,7 +203,9 @@ gOakSpeech_Text_IsInhabitedFarAndWide:: gOakSpeech_Text_IStudyPokemon:: .string "For some people, POKéMON are pets.\n" - .string "Others use them for battling.\pAs for myself…\pI study POKéMON as a profession.\p$" + .string "Others use them for battling.\p" + .string "As for myself…\p" + .string "I study POKéMON as a profession.\p$" gOakSpeech_Text_TellMeALittleAboutYourself:: .string "But first, tell me a little about\n" @@ -215,8 +220,10 @@ gOakSpeech_Text_SoYourNameIsPlayer:: .string "So your name is {PLAYER}.$" gOakSpeech_Text_WhatWasHisName:: - .string "This is my grandson.\pHe's been your rival since you both\n" - .string "were babies.\p…Erm, what was his name now?$" + .string "This is my grandson.\p" + .string "He's been your rival since you both\n" + .string "were babies.\p" + .string "…Erm, what was his name now?$" gOakSpeech_Text_YourRivalsNameWhatWasIt:: .string "Your rival's name, what was it now?$" @@ -230,5 +237,6 @@ gOakSpeech_Text_RememberRivalsName:: gOakSpeech_Text_LetsGo:: .string "{PLAYER}!\pYour very own POKéMON legend is\n" - .string "about to unfold!\pA world of dreams and adventures\n" + .string "about to unfold!\p" + .string "A world of dreams and adventures\n" .string "with POKéMON awaits! Let's go!$" From 8e2d4b179e454445160c29a95600f8e4b1e47741 Mon Sep 17 00:00:00 2001 From: SphericalIce Date: Sat, 31 Dec 2022 14:48:57 +0000 Subject: [PATCH 09/33] Add missing newline in gOakSpeech_Text_LetsGo --- data/text/new_game_intro.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/text/new_game_intro.inc b/data/text/new_game_intro.inc index c0ec77e45..e667b68d9 100644 --- a/data/text/new_game_intro.inc +++ b/data/text/new_game_intro.inc @@ -236,7 +236,8 @@ gOakSpeech_Text_RememberRivalsName:: .string "His name is {RIVAL}!\p$" gOakSpeech_Text_LetsGo:: - .string "{PLAYER}!\pYour very own POKéMON legend is\n" + .string "{PLAYER}!\p" + .string "Your very own POKéMON legend is\n" .string "about to unfold!\p" .string "A world of dreams and adventures\n" .string "with POKéMON awaits! Let's go!$" From 39cdb7a0c623114c226c4e52d6a59748e11ea704 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 2 Jan 2023 12:37:52 -0500 Subject: [PATCH 10/33] Convert switch_map_menu.bin to png --- graphics/region_map/switch_map_menu.bin | Bin 4096 -> 0 bytes graphics/region_map/switch_map_menu.png | Bin 0 -> 527 bytes src/region_map.c | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 graphics/region_map/switch_map_menu.bin create mode 100644 graphics/region_map/switch_map_menu.png diff --git a/graphics/region_map/switch_map_menu.bin b/graphics/region_map/switch_map_menu.bin deleted file mode 100644 index d851eb1d665f598377c8894b2ba2f683d2e0bcc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmdT`yKciU4D3&K%7+BV7bsb@T3s^6&5|jTf2`@E-btcfR-qIQ;*`KyG%3n7kCr@5 z)ASCpUe4BDwjLI`RdDBi`wb%@Qv1d3M>UJj{Yt4ZkH@_iOya}0hfX}^#;{|N*PRfD0{_=pXb|;2Yc=aXIP#pX`*hi^lSZc&_ zBXtTnc8vx-a6ZB|QWv`<=KP4;0@TT2B`_ELYa~|20|JOUL}L!o6ug}!mP?WEY&n)G zlxpUCkb$N7RUF48%ag}m@cQv)Eg}6d8$%ypHWnw6fF(yVh$jEi18zcSCbknH-)TLj z#bW(5Rn5*K>F%L7fh?3LOPEpNVF%l`^Co(bH09LJt}1MZFM z10)#zAz2eda*uv+O@<5zBt)WL4AuCL{OlL@P$8240S%h9QZPgH~^9v_RvokM1CkARoiUe522;M5P` z6u@t@#d&VKBflo^h;#PU3GO6-su)5K=B9^F98Emn-67B4ByCVDLWElxF~COjr1)(> z!8M7H2H^M*(Kumpq(%7%;h#^dpO|x9=-3muH>8zHE!&@){D<&Or~IqC%eP8*@_z2~ t0?$I3%n-l7KjPaXl0-iO2mBil$y@$E>_G~VON`Hrnf@sM>IAHuzz_bVjc@<} diff --git a/graphics/region_map/switch_map_menu.png b/graphics/region_map/switch_map_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..c09282d0994c89d985b97dd6c50dfb06706f8131 GIT binary patch literal 527 zcmV+q0`UEbP)-kdpFgRE*nK`}8g&3j7!0RNoT|D?44g1J490004+ zNklmdL**02CR zg81IS^)D8m8; z0a1_wtdIR5c~{XBYkRd?`+1)RF* z*t{KJUUy?*N-N?z3_9@qG_qWP-+Dx=N&&FegkJ`HABp?DOEsbd3uDuHAq4>F?^FVS zPwgWDNO)9P41hlCa?%~_C^#HX0V?z5sqF)lsk210u RoBsd+002ovPDHLkV1k)e+n@jd literal 0 HcmV?d00001 diff --git a/src/region_map.c b/src/region_map.c index c451453b6..b73982834 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -406,7 +406,7 @@ static const u32 sPlayerIcon_Red[] = INCBIN_U32("graphics/region_map/player_icon static const u32 sPlayerIcon_Leaf[] = INCBIN_U32("graphics/region_map/player_icon_leaf.4bpp.lz"); static const u32 sRegionMap_Gfx[] = INCBIN_U32("graphics/region_map/region_map.4bpp.lz"); static const u32 sMapEdge_Gfx[] = INCBIN_U32("graphics/region_map/map_edge.4bpp.lz"); -static const u32 sSwitchMapMenu_Gfx[] = INCBIN_U32("graphics/region_map/switch_map_menu.bin.lz"); +static const u32 sSwitchMapMenu_Gfx[] = INCBIN_U32("graphics/region_map/switch_map_menu.4bpp.lz"); static const u32 sKanto_Tilemap[] = INCBIN_U32("graphics/region_map/kanto.bin.lz"); static const u32 sSevii123_Tilemap[] = INCBIN_U32("graphics/region_map/sevii_123.bin.lz"); static const u32 sSevii45_Tilemap[] = INCBIN_U32("graphics/region_map/sevii_45.bin.lz"); From 8ea6999f9a438e08999e4de0b01279fcf3f85793 Mon Sep 17 00:00:00 2001 From: Koen Van Kerckhoven Date: Mon, 2 Jan 2023 21:39:00 +0100 Subject: [PATCH 11/33] Update pokemon_special_anim_scene.c Give applicable names to undocumented symbols --- src/pokemon_special_anim_scene.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c index 39dbcf797..a53f536b4 100644 --- a/src/pokemon_special_anim_scene.c +++ b/src/pokemon_special_anim_scene.c @@ -153,31 +153,31 @@ static const struct OamData sOamData_MonSprite = { }; -static const union AffineAnimCmd gUnknown_84599E0[] = { +static const union AffineAnimCmd gAffineAnim_Zoom_0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_84599F0[] = { +static const union AffineAnimCmd gAffineAnim_Zoom_1[] = { AFFINEANIMCMD_FRAME(0x155, 0x155, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_8459A00[] = { +static const union AffineAnimCmd gAffineAnim_Zoom_2[] = { AFFINEANIMCMD_FRAME(0x1AA, 0x1AA, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_8459A10[] = { +static const union AffineAnimCmd gAffineAnim_Zoom_3[] = { AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), AFFINEANIMCMD_END }; static const union AffineAnimCmd *const sAffineAnimTable_Zoom[] = { - gUnknown_84599E0, - gUnknown_84599F0, - gUnknown_8459A00, - gUnknown_8459A10 + gAffineAnim_Zoom_0, + gAffineAnim_Zoom_1, + gAffineAnim_Zoom_2, + gAffineAnim_Zoom_3 }; static const struct SpriteTemplate sSpriteTemplate_MonSprite = { @@ -236,13 +236,13 @@ static const struct OamData sOamData_LevelUpVertical = { .paletteNum = 0 }; -static const union AnimCmd gUnknown_8459AC0[] = { +static const union AnimCmd gAnim_LevelUpVertical[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_END }; static const union AnimCmd *const sAnimTable_LevelUpVertical[] = { - gUnknown_8459AC0 + gAnim_LevelUpVertical }; static const struct SpriteTemplate sSpriteTemplate_LevelUpVertical = { @@ -295,22 +295,22 @@ static const struct OamData sOamData_UseItem_OutwardSpiralDots = { .paletteNum = 0 }; -static const union AnimCmd gUnknown_8459B0C[] = { +static const union AnimCmd gAnim_UseItem_OutwardSpiralDots_0[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(2, 4), ANIMCMD_END }; -static const union AnimCmd gUnknown_8459B1C[] = { +static const union AnimCmd gAnim_UseItem_OutwardSpiralDots_1[] = { ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(0, 4), ANIMCMD_END }; static const union AnimCmd *const sAnimTable_UseItem_OutwardSpiralDots[] = { - gUnknown_8459B0C, - gUnknown_8459B1C + gAnim_UseItem_OutwardSpiralDots_0, + gAnim_UseItem_OutwardSpiralDots_1 }; static const struct SpriteTemplate sSpriteTemplate_UseItem_OutwardSpiralDots = { From ce73dceebf39420a49c1d543ae0dfde915d726b6 Mon Sep 17 00:00:00 2001 From: Koen Van Kerckhoven Date: Mon, 2 Jan 2023 23:52:58 +0100 Subject: [PATCH 12/33] Fix static/global naming --- src/pokemon_special_anim_scene.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/pokemon_special_anim_scene.c b/src/pokemon_special_anim_scene.c index a53f536b4..a2e58d761 100644 --- a/src/pokemon_special_anim_scene.c +++ b/src/pokemon_special_anim_scene.c @@ -153,31 +153,31 @@ static const struct OamData sOamData_MonSprite = { }; -static const union AffineAnimCmd gAffineAnim_Zoom_0[] = { +static const union AffineAnimCmd sAffineAnim_Zoom_0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gAffineAnim_Zoom_1[] = { +static const union AffineAnimCmd sAffineAnim_Zoom_1[] = { AFFINEANIMCMD_FRAME(0x155, 0x155, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gAffineAnim_Zoom_2[] = { +static const union AffineAnimCmd sAffineAnim_Zoom_2[] = { AFFINEANIMCMD_FRAME(0x1AA, 0x1AA, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gAffineAnim_Zoom_3[] = { +static const union AffineAnimCmd sAffineAnim_Zoom_3[] = { AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), AFFINEANIMCMD_END }; static const union AffineAnimCmd *const sAffineAnimTable_Zoom[] = { - gAffineAnim_Zoom_0, - gAffineAnim_Zoom_1, - gAffineAnim_Zoom_2, - gAffineAnim_Zoom_3 + sAffineAnim_Zoom_0, + sAffineAnim_Zoom_1, + sAffineAnim_Zoom_2, + sAffineAnim_Zoom_3 }; static const struct SpriteTemplate sSpriteTemplate_MonSprite = { @@ -236,13 +236,13 @@ static const struct OamData sOamData_LevelUpVertical = { .paletteNum = 0 }; -static const union AnimCmd gAnim_LevelUpVertical[] = { +static const union AnimCmd sAnim_LevelUpVertical[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_END }; static const union AnimCmd *const sAnimTable_LevelUpVertical[] = { - gAnim_LevelUpVertical + sAnim_LevelUpVertical }; static const struct SpriteTemplate sSpriteTemplate_LevelUpVertical = { @@ -295,22 +295,22 @@ static const struct OamData sOamData_UseItem_OutwardSpiralDots = { .paletteNum = 0 }; -static const union AnimCmd gAnim_UseItem_OutwardSpiralDots_0[] = { +static const union AnimCmd sAnim_UseItem_OutwardSpiralDots_0[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(2, 4), ANIMCMD_END }; -static const union AnimCmd gAnim_UseItem_OutwardSpiralDots_1[] = { +static const union AnimCmd sAnim_UseItem_OutwardSpiralDots_1[] = { ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(0, 4), ANIMCMD_END }; static const union AnimCmd *const sAnimTable_UseItem_OutwardSpiralDots[] = { - gAnim_UseItem_OutwardSpiralDots_0, - gAnim_UseItem_OutwardSpiralDots_1 + sAnim_UseItem_OutwardSpiralDots_0, + sAnim_UseItem_OutwardSpiralDots_1 }; static const struct SpriteTemplate sSpriteTemplate_UseItem_OutwardSpiralDots = { From 41752b2b2a6d947445994827f521dd7524b484a8 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 3 Jan 2023 12:14:38 -0300 Subject: [PATCH 13/33] Mon pic coordinates to macros --- .../pokemon_graphics/back_pic_coordinates.h | 1760 ++++++++--------- .../pokemon_graphics/front_pic_coordinates.h | 1760 ++++++++--------- 2 files changed, 1760 insertions(+), 1760 deletions(-) diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index b8a96febc..17f818f45 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -2,2203 +2,2203 @@ const struct MonCoords gMonBackPicCoords[] = { [SPECIES_NONE] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_BULBASAUR] = { - .size = 0x64, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(48, 32), + .y_offset = 16, }, [SPECIES_IVYSAUR] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_VENUSAUR] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_CHARMANDER] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_CHARMELEON] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_CHARIZARD] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_SQUIRTLE] = { - .size = 0x75, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_WARTORTLE] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_BLASTOISE] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_CATERPIE] = { - .size = 0x55, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 15, }, [SPECIES_METAPOD] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_BUTTERFREE] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_WEEDLE] = { - .size = 0x56, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_KAKUNA] = { - .size = 0x46, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 10, }, [SPECIES_BEEDRILL] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_PIDGEY] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_PIDGEOTTO] = { - .size = 0x85, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 12, }, [SPECIES_PIDGEOT] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_RATTATA] = { - .size = 0x75, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 13, }, [SPECIES_RATICATE] = { - .size = 0x75, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 13, }, [SPECIES_SPEAROW] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_FEAROW] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_EKANS] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_ARBOK] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_PIKACHU] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_RAICHU] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_SANDSHREW] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_SANDSLASH] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_NIDORAN_F] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_NIDORINA] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_NIDOQUEEN] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_NIDORAN_M] = { - .size = 0x56, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 8, }, [SPECIES_NIDORINO] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_NIDOKING] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_CLEFAIRY] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_CLEFABLE] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_VULPIX] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_NINETALES] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_JIGGLYPUFF] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_WIGGLYTUFF] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_ZUBAT] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_GOLBAT] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_ODDISH] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_GLOOM] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_VILEPLUME] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_PARAS] = { - .size = 0x63, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(48, 24), + .y_offset = 20, }, [SPECIES_PARASECT] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_VENONAT] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_VENOMOTH] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_DIGLETT] = { - .size = 0x54, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 16, }, [SPECIES_DUGTRIO] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_MEOWTH] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_PERSIAN] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_PSYDUCK] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_GOLDUCK] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_MANKEY] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_PRIMEAPE] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_GROWLITHE] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_ARCANINE] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_POLIWAG] = { - .size = 0x74, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 16, }, [SPECIES_POLIWHIRL] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_POLIWRATH] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_ABRA] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_KADABRA] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_ALAKAZAM] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_MACHOP] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_MACHOKE] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_MACHAMP] = { - .size = 0x67, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 4, }, [SPECIES_BELLSPROUT] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_WEEPINBELL] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_VICTREEBEL] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_TENTACOOL] = { - .size = 0x56, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 10, }, [SPECIES_TENTACRUEL] = { - .size = 0x86, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 11, }, [SPECIES_GEODUDE] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_GRAVELER] = { - .size = 0x75, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 12, }, [SPECIES_GOLEM] = { - .size = 0x84, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(64, 32), + .y_offset = 16, }, [SPECIES_PONYTA] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_RAPIDASH] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_SLOWPOKE] = { - .size = 0x85, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, }, [SPECIES_SLOWBRO] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_MAGNEMITE] = { - .size = 0x43, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(32, 24), + .y_offset = 20, }, [SPECIES_MAGNETON] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_FARFETCHD] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_DODUO] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_DODRIO] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_SEEL] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_DEWGONG] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_GRIMER] = { - .size = 0x75, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 13, }, [SPECIES_MUK] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_SHELLDER] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_CLOYSTER] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_GASTLY] = { - .size = 0x85, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, }, [SPECIES_HAUNTER] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_GENGAR] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_ONIX] = { - .size = 0x78, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 0, }, [SPECIES_DROWZEE] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_HYPNO] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_KRABBY] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_KINGLER] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_VOLTORB] = { - .size = 0x55, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 14, }, [SPECIES_ELECTRODE] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_EXEGGCUTE] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_EXEGGUTOR] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_CUBONE] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_MAROWAK] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_HITMONLEE] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_HITMONCHAN] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_LICKITUNG] = { - .size = 0x85, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, }, [SPECIES_KOFFING] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_WEEZING] = { - .size = 0x85, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 12, }, [SPECIES_RHYHORN] = { - .size = 0x85, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 12, }, [SPECIES_RHYDON] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_CHANSEY] = { - .size = 0x85, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, }, [SPECIES_TANGELA] = { - .size = 0x85, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, }, [SPECIES_KANGASKHAN] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_HORSEA] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_SEADRA] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_GOLDEEN] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_SEAKING] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_STARYU] = { - .size = 0x75, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 13, }, [SPECIES_STARMIE] = { - .size = 0x85, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, }, [SPECIES_MR_MIME] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_SCYTHER] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_JYNX] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_ELECTABUZZ] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_MAGMAR] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_PINSIR] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_TAUROS] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_MAGIKARP] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_GYARADOS] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_LAPRAS] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_DITTO] = { - .size = 0x54, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 17, }, [SPECIES_EEVEE] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_VAPOREON] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_JOLTEON] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_FLAREON] = { - .size = 0x67, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 5, }, [SPECIES_PORYGON] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_OMANYTE] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_OMASTAR] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_KABUTO] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_KABUTOPS] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_AERODACTYL] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_SNORLAX] = { - .size = 0x86, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 11, }, [SPECIES_ARTICUNO] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_ZAPDOS] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_MOLTRES] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_DRATINI] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_DRAGONAIR] = { - .size = 0x78, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 0, }, [SPECIES_DRAGONITE] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_MEWTWO] = { - .size = 0x78, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_MEW] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_CHIKORITA] = { - .size = 0x56, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 10, }, [SPECIES_BAYLEEF] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_MEGANIUM] = { - .size = 0x78, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 0, }, [SPECIES_CYNDAQUIL] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_QUILAVA] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_TYPHLOSION] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_TOTODILE] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_CROCONAW] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_FERALIGATR] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_SENTRET] = { - .size = 0x67, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 5, }, [SPECIES_FURRET] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_HOOTHOOT] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_NOCTOWL] = { - .size = 0x68, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 3, }, [SPECIES_LEDYBA] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_LEDIAN] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_SPINARAK] = { - .size = 0x73, - .y_offset = 0x15, + .size = MON_COORDS_SIZE(56, 24), + .y_offset = 21, }, [SPECIES_ARIADOS] = { - .size = 0x86, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 11, }, [SPECIES_CROBAT] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_CHINCHOU] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_LANTURN] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_PICHU] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_CLEFFA] = { - .size = 0x65, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 15, }, [SPECIES_IGGLYBUFF] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_TOGEPI] = { - .size = 0x54, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 16, }, [SPECIES_TOGETIC] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_NATU] = { - .size = 0x54, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 17, }, [SPECIES_XATU] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_MAREEP] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_FLAAFFY] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_AMPHAROS] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_BELLOSSOM] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_MARILL] = { - .size = 0x75, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 12, }, [SPECIES_AZUMARILL] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_SUDOWOODO] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_POLITOED] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_HOPPIP] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_SKIPLOOM] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_JUMPLUFF] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_AIPOM] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_SUNKERN] = { - .size = 0x56, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 10, }, [SPECIES_SUNFLORA] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_YANMA] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_WOOPER] = { - .size = 0x85, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 15, }, [SPECIES_QUAGSIRE] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_ESPEON] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_UMBREON] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_MURKROW] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_SLOWKING] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_MISDREAVUS] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_UNOWN] = { - .size = 0x36, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(24, 48), + .y_offset = 8, }, [SPECIES_WOBBUFFET] = { - .size = 0x75, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 12, }, [SPECIES_GIRAFARIG] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_PINECO] = { - .size = 0x65, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 15, }, [SPECIES_FORRETRESS] = { - .size = 0x84, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(64, 32), + .y_offset = 16, }, [SPECIES_DUNSPARCE] = { - .size = 0x85, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 15, }, [SPECIES_GLIGAR] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_STEELIX] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SNUBBULL] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_GRANBULL] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_QWILFISH] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_SCIZOR] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_SHUCKLE] = { - .size = 0x56, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_HERACROSS] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_SNEASEL] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_TEDDIURSA] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_URSARING] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_SLUGMA] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_MAGCARGO] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_SWINUB] = { - .size = 0x63, - .y_offset = 0x15, + .size = MON_COORDS_SIZE(48, 24), + .y_offset = 21, }, [SPECIES_PILOSWINE] = { - .size = 0x75, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 13, }, [SPECIES_CORSOLA] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_REMORAID] = { - .size = 0x75, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 13, }, [SPECIES_OCTILLERY] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_DELIBIRD] = { - .size = 0x67, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, }, [SPECIES_MANTINE] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_SKARMORY] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_HOUNDOUR] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_HOUNDOOM] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_KINGDRA] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_PHANPY] = { - .size = 0x65, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_DONPHAN] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_PORYGON2] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_STANTLER] = { - .size = 0x78, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_SMEARGLE] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_TYROGUE] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_HITMONTOP] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_SMOOCHUM] = { - .size = 0x56, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 9, }, [SPECIES_ELEKID] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_MAGBY] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_MILTANK] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_BLISSEY] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_RAIKOU] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_ENTEI] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_SUICUNE] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_LARVITAR] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_PUPITAR] = { - .size = 0x67, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 5, }, [SPECIES_TYRANITAR] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_LUGIA] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_HO_OH] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_CELEBI] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_OLD_UNOWN_B] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_C] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_D] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_E] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_F] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_G] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_H] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_I] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_J] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_K] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_L] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_M] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_N] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_O] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_P] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_Q] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_R] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_S] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_T] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_U] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_V] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_W] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_X] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_Y] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_OLD_UNOWN_Z] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_TREECKO] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_GROVYLE] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_SCEPTILE] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_TORCHIC] = { - .size = 0x67, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 5, }, [SPECIES_COMBUSKEN] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_BLAZIKEN] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_MUDKIP] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_MARSHTOMP] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_SWAMPERT] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_POOCHYENA] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_MIGHTYENA] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_ZIGZAGOON] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_LINOONE] = { - .size = 0x85, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 15, }, [SPECIES_WURMPLE] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_SILCOON] = { - .size = 0x83, - .y_offset = 0x15, + .size = MON_COORDS_SIZE(64, 24), + .y_offset = 21, }, [SPECIES_BEAUTIFLY] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_CASCOON] = { - .size = 0x73, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(56, 24), + .y_offset = 20, }, [SPECIES_DUSTOX] = { - .size = 0x83, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(64, 24), + .y_offset = 20, }, [SPECIES_LOTAD] = { - .size = 0x75, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_LOMBRE] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_LUDICOLO] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_SEEDOT] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_NUZLEAF] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_SHIFTRY] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_NINCADA] = { - .size = 0x83, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(64, 24), + .y_offset = 20, }, [SPECIES_NINJASK] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_SHEDINJA] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_TAILLOW] = { - .size = 0x64, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(48, 32), + .y_offset = 17, }, [SPECIES_SWELLOW] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_SHROOMISH] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_BRELOOM] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_SPINDA] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_WINGULL] = { - .size = 0x85, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, }, [SPECIES_PELIPPER] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_SURSKIT] = { - .size = 0x86, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 11, }, [SPECIES_MASQUERAIN] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_WAILMER] = { - .size = 0x83, - .y_offset = 0x15, + .size = MON_COORDS_SIZE(64, 24), + .y_offset = 21, }, [SPECIES_WAILORD] = { - .size = 0x83, - .y_offset = 0x16, + .size = MON_COORDS_SIZE(64, 24), + .y_offset = 22, }, [SPECIES_SKITTY] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_DELCATTY] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_KECLEON] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_BALTOY] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_CLAYDOL] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_NOSEPASS] = { - .size = 0x85, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 12, }, [SPECIES_TORKOAL] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_SABLEYE] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_BARBOACH] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_WHISCASH] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_LUVDISC] = { - .size = 0x46, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 10, }, [SPECIES_CORPHISH] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_CRAWDAUNT] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_FEEBAS] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_MILOTIC] = { - .size = 0x68, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, [SPECIES_CARVANHA] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_SHARPEDO] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_TRAPINCH] = { - .size = 0x75, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 14, }, [SPECIES_VIBRAVA] = { - .size = 0x74, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 17, }, [SPECIES_FLYGON] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_MAKUHITA] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_HARIYAMA] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_ELECTRIKE] = { - .size = 0x84, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(64, 32), + .y_offset = 16, }, [SPECIES_MANECTRIC] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_NUMEL] = { - .size = 0x86, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 11, }, [SPECIES_CAMERUPT] = { - .size = 0x84, - .y_offset = 0x13, + .size = MON_COORDS_SIZE(64, 32), + .y_offset = 19, }, [SPECIES_SPHEAL] = { - .size = 0x64, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(48, 32), + .y_offset = 18, }, [SPECIES_SEALEO] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_WALREIN] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_CACNEA] = { - .size = 0x85, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 15, }, [SPECIES_CACTURNE] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_SNORUNT] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_GLALIE] = { - .size = 0x85, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 12, }, [SPECIES_LUNATONE] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_SOLROCK] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_AZURILL] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_SPOINK] = { - .size = 0x56, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_GRUMPIG] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_PLUSLE] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_MINUN] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_MAWILE] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_MEDITITE] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_MEDICHAM] = { - .size = 0x68, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 3, }, [SPECIES_SWABLU] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_ALTARIA] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_WYNAUT] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_DUSKULL] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_DUSCLOPS] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_ROSELIA] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_SLAKOTH] = { - .size = 0x85, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 15, }, [SPECIES_VIGOROTH] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_SLAKING] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_GULPIN] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_SWALOT] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_TROPIUS] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_WHISMUR] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_LOUDRED] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_EXPLOUD] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_CLAMPERL] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_HUNTAIL] = { - .size = 0x68, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 2, }, [SPECIES_GOREBYSS] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_ABSOL] = { - .size = 0x78, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_SHUPPET] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_BANETTE] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_SEVIPER] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_ZANGOOSE] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_RELICANTH] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_ARON] = { - .size = 0x54, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 17, }, [SPECIES_LAIRON] = { - .size = 0x84, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(64, 32), + .y_offset = 17, }, [SPECIES_AGGRON] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_CASTFORM] = { - .size = 0x45, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 13, }, [SPECIES_VOLBEAT] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_ILLUMISE] = { - .size = 0x67, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, }, [SPECIES_LILEEP] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_CRADILY] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_ANORITH] = { - .size = 0x83, - .y_offset = 0x17, + .size = MON_COORDS_SIZE(64, 24), + .y_offset = 23, }, [SPECIES_ARMALDO] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_RALTS] = { - .size = 0x45, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 13, }, [SPECIES_KIRLIA] = { - .size = 0x57, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(40, 56), + .y_offset = 6, }, [SPECIES_GARDEVOIR] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_BAGON] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_SHELGON] = { - .size = 0x85, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 13, }, [SPECIES_SALAMENCE] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_BELDUM] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_METANG] = { - .size = 0x84, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(64, 32), + .y_offset = 16, }, [SPECIES_METAGROSS] = { - .size = 0x83, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(64, 24), + .y_offset = 20, }, [SPECIES_REGIROCK] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_REGICE] = { - .size = 0x85, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, }, [SPECIES_REGISTEEL] = { - .size = 0x85, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 14, }, [SPECIES_KYOGRE] = { - .size = 0x84, - .y_offset = 0x13, + .size = MON_COORDS_SIZE(64, 32), + .y_offset = 19, }, [SPECIES_GROUDON] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_RAYQUAZA] = { - .size = 0x78, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 0, }, [SPECIES_LATIAS] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_LATIOS] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_JIRACHI] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_DEOXYS] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_CHIMECHO] = { - .size = 0x47, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(32, 56), + .y_offset = 7, }, [SPECIES_EGG] = { - .size = 0x36, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(24, 48), + .y_offset = 10, }, [SPECIES_UNOWN_B] = { - .size = 0x56, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 9, }, [SPECIES_UNOWN_C] = { - .size = 0x67, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, }, [SPECIES_UNOWN_D] = { - .size = 0x56, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 8, }, [SPECIES_UNOWN_E] = { - .size = 0x56, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 10, }, [SPECIES_UNOWN_F] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_UNOWN_G] = { - .size = 0x57, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(40, 56), + .y_offset = 5, }, [SPECIES_UNOWN_H] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_UNOWN_I] = { - .size = 0x37, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(24, 56), + .y_offset = 7, }, [SPECIES_UNOWN_J] = { - .size = 0x46, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 9, }, [SPECIES_UNOWN_K] = { - .size = 0x57, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(40, 56), + .y_offset = 7, }, [SPECIES_UNOWN_L] = { - .size = 0x46, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 10, }, [SPECIES_UNOWN_M] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_UNOWN_N] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_UNOWN_O] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_UNOWN_P] = { - .size = 0x46, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 10, }, [SPECIES_UNOWN_Q] = { - .size = 0x55, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 15, }, [SPECIES_UNOWN_R] = { - .size = 0x45, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 12, }, [SPECIES_UNOWN_S] = { - .size = 0x57, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(40, 56), + .y_offset = 4, }, [SPECIES_UNOWN_T] = { - .size = 0x45, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 13, }, [SPECIES_UNOWN_U] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_UNOWN_V] = { - .size = 0x56, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_UNOWN_W] = { - .size = 0x55, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 13, }, [SPECIES_UNOWN_X] = { - .size = 0x55, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 15, }, [SPECIES_UNOWN_Y] = { - .size = 0x46, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 10, }, [SPECIES_UNOWN_Z] = { - .size = 0x46, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 10, }, [SPECIES_UNOWN_EMARK] = { - .size = 0x37, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(24, 56), + .y_offset = 6, }, [SPECIES_UNOWN_QMARK] = { - .size = 0x47, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(32, 56), + .y_offset = 6, }, }; diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h index 1bb67f1f5..d521b615f 100644 --- a/src/data/pokemon_graphics/front_pic_coordinates.h +++ b/src/data/pokemon_graphics/front_pic_coordinates.h @@ -2,2202 +2,2202 @@ const struct MonCoords gMonFrontPicCoords[] = { [SPECIES_NONE] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_BULBASAUR] = { - .size = 0x55, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 16, }, [SPECIES_IVYSAUR] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_VENUSAUR] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_CHARMANDER] = { - .size = 0x55, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 13, }, [SPECIES_CHARMELEON] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_CHARIZARD] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_SQUIRTLE] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_WARTORTLE] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_BLASTOISE] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_CATERPIE] = { - .size = 0x54, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 16, }, [SPECIES_METAPOD] = { - .size = 0x54, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 20, }, [SPECIES_BUTTERFREE] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_WEEDLE] = { - .size = 0x54, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 17, }, [SPECIES_KAKUNA] = { - .size = 0x45, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 14, }, [SPECIES_BEEDRILL] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_PIDGEY] = { - .size = 0x55, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 13, }, [SPECIES_PIDGEOTTO] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_PIDGEOT] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_RATTATA] = { - .size = 0x65, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_RATICATE] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_SPEAROW] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_FEAROW] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_EKANS] = { - .size = 0x65, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 15, }, [SPECIES_ARBOK] = { - .size = 0x78, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_PIKACHU] = { - .size = 0x67, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 9, }, [SPECIES_RAICHU] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SANDSHREW] = { - .size = 0x56, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_SANDSLASH] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_NIDORAN_F] = { - .size = 0x54, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 16, }, [SPECIES_NIDORINA] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_NIDOQUEEN] = { - .size = 0x78, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 2, }, [SPECIES_NIDORAN_M] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_NIDORINO] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_NIDOKING] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_CLEFAIRY] = { - .size = 0x55, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 16, }, [SPECIES_CLEFABLE] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_VULPIX] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_NINETALES] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_JIGGLYPUFF] = { - .size = 0x55, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 16, }, [SPECIES_WIGGLYTUFF] = { - .size = 0x67, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 8, }, [SPECIES_ZUBAT] = { - .size = 0x66, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 13, }, [SPECIES_GOLBAT] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_ODDISH] = { - .size = 0x45, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 12, }, [SPECIES_GLOOM] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_VILEPLUME] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_PARAS] = { - .size = 0x64, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(48, 32), + .y_offset = 18, }, [SPECIES_PARASECT] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_VENONAT] = { - .size = 0x57, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 56), + .y_offset = 11, }, [SPECIES_VENOMOTH] = { - .size = 0x87, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 8, }, [SPECIES_DIGLETT] = { - .size = 0x54, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 17, }, [SPECIES_DUGTRIO] = { - .size = 0x75, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 12, }, [SPECIES_MEOWTH] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_PERSIAN] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_PSYDUCK] = { - .size = 0x56, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 9, }, [SPECIES_GOLDUCK] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_MANKEY] = { - .size = 0x66, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 14, }, [SPECIES_PRIMEAPE] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_GROWLITHE] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_ARCANINE] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_POLIWAG] = { - .size = 0x74, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 16, }, [SPECIES_POLIWHIRL] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_POLIWRATH] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_ABRA] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_KADABRA] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_ALAKAZAM] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_MACHOP] = { - .size = 0x46, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 11, }, [SPECIES_MACHOKE] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_MACHAMP] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_BELLSPROUT] = { - .size = 0x66, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 15, }, [SPECIES_WEEPINBELL] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_VICTREEBEL] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_TENTACOOL] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_TENTACRUEL] = { - .size = 0x78, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_GEODUDE] = { - .size = 0x74, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 18, }, [SPECIES_GRAVELER] = { - .size = 0x86, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 11, }, [SPECIES_GOLEM] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_PONYTA] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_RAPIDASH] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SLOWPOKE] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_SLOWBRO] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_MAGNEMITE] = { - .size = 0x53, - .y_offset = 0x16, + .size = MON_COORDS_SIZE(40, 24), + .y_offset = 22, }, [SPECIES_MAGNETON] = { - .size = 0x75, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 16, }, [SPECIES_FARFETCHD] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_DODUO] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_DODRIO] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_SEEL] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_DEWGONG] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_GRIMER] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_MUK] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_SHELLDER] = { - .size = 0x55, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 16, }, [SPECIES_CLOYSTER] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_GASTLY] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_HAUNTER] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_GENGAR] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_ONIX] = { - .size = 0x78, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_DROWZEE] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_HYPNO] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_KRABBY] = { - .size = 0x75, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 14, }, [SPECIES_KINGLER] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_VOLTORB] = { - .size = 0x44, - .y_offset = 0x13, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 19, }, [SPECIES_ELECTRODE] = { - .size = 0x55, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 14, }, [SPECIES_EXEGGCUTE] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_EXEGGUTOR] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_CUBONE] = { - .size = 0x65, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 13, }, [SPECIES_MAROWAK] = { - .size = 0x87, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 13, }, [SPECIES_HITMONLEE] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_HITMONCHAN] = { - .size = 0x67, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 4, }, [SPECIES_LICKITUNG] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_KOFFING] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_WEEZING] = { - .size = 0x88, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 7, }, [SPECIES_RHYHORN] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_RHYDON] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_CHANSEY] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_TANGELA] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_KANGASKHAN] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_HORSEA] = { - .size = 0x45, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 16, }, [SPECIES_SEADRA] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_GOLDEEN] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_SEAKING] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_STARYU] = { - .size = 0x66, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 13, }, [SPECIES_STARMIE] = { - .size = 0x67, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 10, }, [SPECIES_MR_MIME] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_SCYTHER] = { - .size = 0x78, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 2, }, [SPECIES_JYNX] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_ELECTABUZZ] = { - .size = 0x88, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 4, }, [SPECIES_MAGMAR] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_PINSIR] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_TAUROS] = { - .size = 0x88, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 5, }, [SPECIES_MAGIKARP] = { - .size = 0x77, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 11, }, [SPECIES_GYARADOS] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_LAPRAS] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_DITTO] = { - .size = 0x54, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 17, }, [SPECIES_EEVEE] = { - .size = 0x56, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 13, }, [SPECIES_VAPOREON] = { - .size = 0x67, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, }, [SPECIES_JOLTEON] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_FLAREON] = { - .size = 0x76, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 11, }, [SPECIES_PORYGON] = { - .size = 0x56, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_OMANYTE] = { - .size = 0x45, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 15, }, [SPECIES_OMASTAR] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_KABUTO] = { - .size = 0x54, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 20, }, [SPECIES_KABUTOPS] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_AERODACTYL] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_SNORLAX] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_ARTICUNO] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_ZAPDOS] = { - .size = 0x88, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 4, }, [SPECIES_MOLTRES] = { - .size = 0x88, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_DRATINI] = { - .size = 0x75, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_DRAGONAIR] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_DRAGONITE] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_MEWTWO] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_MEW] = { - .size = 0x77, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 13, }, [SPECIES_CHIKORITA] = { - .size = 0x75, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 13, }, [SPECIES_BAYLEEF] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_MEGANIUM] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_CYNDAQUIL] = { - .size = 0x55, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 14, }, [SPECIES_QUILAVA] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_TYPHLOSION] = { - .size = 0x78, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 0, }, [SPECIES_TOTODILE] = { - .size = 0x55, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 15, }, [SPECIES_CROCONAW] = { - .size = 0x67, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, }, [SPECIES_FERALIGATR] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SENTRET] = { - .size = 0x47, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(32, 56), + .y_offset = 4, }, [SPECIES_FURRET] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_HOOTHOOT] = { - .size = 0x55, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 13, }, [SPECIES_NOCTOWL] = { - .size = 0x58, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(40, 64), + .y_offset = 3, }, [SPECIES_LEDYBA] = { - .size = 0x56, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 12, }, [SPECIES_LEDIAN] = { - .size = 0x67, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 4, }, [SPECIES_SPINARAK] = { - .size = 0x54, - .y_offset = 0x13, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 19, }, [SPECIES_ARIADOS] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_CROBAT] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_CHINCHOU] = { - .size = 0x75, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 16, }, [SPECIES_LANTURN] = { - .size = 0x87, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 11, }, [SPECIES_PICHU] = { - .size = 0x45, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 12, }, [SPECIES_CLEFFA] = { - .size = 0x44, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 20, }, [SPECIES_IGGLYBUFF] = { - .size = 0x44, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 18, }, [SPECIES_TOGEPI] = { - .size = 0x34, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 20, }, [SPECIES_TOGETIC] = { - .size = 0x46, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 9, }, [SPECIES_NATU] = { - .size = 0x44, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 20, }, [SPECIES_XATU] = { - .size = 0x47, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(32, 56), + .y_offset = 7, }, [SPECIES_MAREEP] = { - .size = 0x55, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 16, }, [SPECIES_FLAAFFY] = { - .size = 0x56, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 10, }, [SPECIES_AMPHAROS] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_BELLOSSOM] = { - .size = 0x45, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 14, }, [SPECIES_MARILL] = { - .size = 0x65, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_AZUMARILL] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_SUDOWOODO] = { - .size = 0x67, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, }, [SPECIES_POLITOED] = { - .size = 0x67, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, }, [SPECIES_HOPPIP] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_SKIPLOOM] = { - .size = 0x55, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 15, }, [SPECIES_JUMPLUFF] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_AIPOM] = { - .size = 0x58, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(40, 64), + .y_offset = 3, }, [SPECIES_SUNKERN] = { - .size = 0x44, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 16, }, [SPECIES_SUNFLORA] = { - .size = 0x56, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 8, }, [SPECIES_YANMA] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_WOOPER] = { - .size = 0x54, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 16, }, [SPECIES_QUAGSIRE] = { - .size = 0x77, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 7, }, [SPECIES_ESPEON] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_UMBREON] = { - .size = 0x67, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 8, }, [SPECIES_MURKROW] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_SLOWKING] = { - .size = 0x58, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(40, 64), + .y_offset = 1, }, [SPECIES_MISDREAVUS] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_UNOWN] = { - .size = 0x35, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(24, 40), + .y_offset = 15, }, [SPECIES_WOBBUFFET] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_GIRAFARIG] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_PINECO] = { - .size = 0x56, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 10, }, [SPECIES_FORRETRESS] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_DUNSPARCE] = { - .size = 0x74, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 17, }, [SPECIES_GLIGAR] = { - .size = 0x78, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_STEELIX] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SNUBBULL] = { - .size = 0x55, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 13, }, [SPECIES_GRANBULL] = { - .size = 0x57, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(40, 56), + .y_offset = 6, }, [SPECIES_QWILFISH] = { - .size = 0x56, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 10, }, [SPECIES_SCIZOR] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SHUCKLE] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_HERACROSS] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_SNEASEL] = { - .size = 0x67, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 5, }, [SPECIES_TEDDIURSA] = { - .size = 0x46, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 11, }, [SPECIES_URSARING] = { - .size = 0x78, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_SLUGMA] = { - .size = 0x45, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 13, }, [SPECIES_MAGCARGO] = { - .size = 0x57, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(40, 56), + .y_offset = 13, }, [SPECIES_SWINUB] = { - .size = 0x43, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(32, 24), + .y_offset = 20, }, [SPECIES_PILOSWINE] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_CORSOLA] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_REMORAID] = { - .size = 0x55, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 14, }, [SPECIES_OCTILLERY] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_DELIBIRD] = { - .size = 0x56, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 8, }, [SPECIES_MANTINE] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_SKARMORY] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_HOUNDOUR] = { - .size = 0x56, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_HOUNDOOM] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_KINGDRA] = { - .size = 0x78, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 4, }, [SPECIES_PHANPY] = { - .size = 0x54, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 16, }, [SPECIES_DONPHAN] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_PORYGON2] = { - .size = 0x55, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 15, }, [SPECIES_STANTLER] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SMEARGLE] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_TYROGUE] = { - .size = 0x46, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 9, }, [SPECIES_HITMONTOP] = { - .size = 0x67, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 5, }, [SPECIES_SMOOCHUM] = { - .size = 0x35, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(24, 40), + .y_offset = 15, }, [SPECIES_ELEKID] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_MAGBY] = { - .size = 0x45, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 13, }, [SPECIES_MILTANK] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_BLISSEY] = { - .size = 0x77, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 6, }, [SPECIES_RAIKOU] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_ENTEI] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SUICUNE] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_LARVITAR] = { - .size = 0x46, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 9, }, [SPECIES_PUPITAR] = { - .size = 0x56, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 9, }, [SPECIES_TYRANITAR] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_LUGIA] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_HO_OH] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_CELEBI] = { - .size = 0x55, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 14, }, [SPECIES_OLD_UNOWN_B] = { - .size = 0x88, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_C] = { - .size = 0x88, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_D] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_E] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_F] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_G] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_H] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_I] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_J] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_K] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_L] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_M] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_N] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_O] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_P] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_Q] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_R] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_S] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_T] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_U] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_V] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_W] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_X] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_Y] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_OLD_UNOWN_Z] = { - .size = 0x88, - .y_offset = 0x06 + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 6, }, [SPECIES_TREECKO] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_GROVYLE] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_SCEPTILE] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_TORCHIC] = { - .size = 0x56, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 8, }, [SPECIES_COMBUSKEN] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_BLAZIKEN] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_MUDKIP] = { - .size = 0x56, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 12, }, [SPECIES_MARSHTOMP] = { - .size = 0x67, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, }, [SPECIES_SWAMPERT] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_POOCHYENA] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_MIGHTYENA] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_ZIGZAGOON] = { - .size = 0x85, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(64, 40), + .y_offset = 15, }, [SPECIES_LINOONE] = { - .size = 0x78, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_WURMPLE] = { - .size = 0x45, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 14, }, [SPECIES_SILCOON] = { - .size = 0x75, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 17, }, [SPECIES_BEAUTIFLY] = { - .size = 0x86, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 9, }, [SPECIES_CASCOON] = { - .size = 0x74, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 16, }, [SPECIES_DUSTOX] = { - .size = 0x86, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 15, }, [SPECIES_LOTAD] = { - .size = 0x65, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 14, }, [SPECIES_LOMBRE] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_LUDICOLO] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SEEDOT] = { - .size = 0x46, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 16, }, [SPECIES_NUZLEAF] = { - .size = 0x56, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 8, }, [SPECIES_SHIFTRY] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_NINCADA] = { - .size = 0x74, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 18, }, [SPECIES_NINJASK] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_SHEDINJA] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_TAILLOW] = { - .size = 0x64, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(48, 32), + .y_offset = 16, }, [SPECIES_SWELLOW] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_SHROOMISH] = { - .size = 0x54, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 16, }, [SPECIES_BRELOOM] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_SPINDA] = { - .size = 0x67, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 8, }, [SPECIES_WINGULL] = { - .size = 0x84, - .y_offset = 0x18, + .size = MON_COORDS_SIZE(64, 32), + .y_offset = 24, }, [SPECIES_PELIPPER] = { - .size = 0x77, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 4, }, [SPECIES_SURSKIT] = { - .size = 0x65, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 15, }, [SPECIES_MASQUERAIN] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_WAILMER] = { - .size = 0x75, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 15, }, [SPECIES_WAILORD] = { - .size = 0x87, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 10, }, [SPECIES_SKITTY] = { - .size = 0x66, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 11, }, [SPECIES_DELCATTY] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_KECLEON] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_BALTOY] = { - .size = 0x55, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 16, }, [SPECIES_CLAYDOL] = { - .size = 0x78, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 6, }, [SPECIES_NOSEPASS] = { - .size = 0x56, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 12, }, [SPECIES_TORKOAL] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_SABLEYE] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_BARBOACH] = { - .size = 0x46, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 11, }, [SPECIES_WHISCASH] = { - .size = 0x76, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 9, }, [SPECIES_LUVDISC] = { - .size = 0x46, - .y_offset = 0x18, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 24, }, [SPECIES_CORPHISH] = { - .size = 0x66, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 12, }, [SPECIES_CRAWDAUNT] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_FEEBAS] = { - .size = 0x46, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 13, }, [SPECIES_MILOTIC] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_CARVANHA] = { - .size = 0x67, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 6, }, [SPECIES_SHARPEDO] = { - .size = 0x78, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_TRAPINCH] = { - .size = 0x54, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(40, 32), + .y_offset = 16, }, [SPECIES_VIBRAVA] = { - .size = 0x86, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 12, }, [SPECIES_FLYGON] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_MAKUHITA] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_HARIYAMA] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_ELECTRIKE] = { - .size = 0x64, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(48, 32), + .y_offset = 18, }, [SPECIES_MANECTRIC] = { - .size = 0x67, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 4, }, [SPECIES_NUMEL] = { - .size = 0x65, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 15, }, [SPECIES_CAMERUPT] = { - .size = 0x87, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 9, }, [SPECIES_SPHEAL] = { - .size = 0x65, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 16, }, [SPECIES_SEALEO] = { - .size = 0x86, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 10, }, [SPECIES_WALREIN] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_CACNEA] = { - .size = 0x74, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 16, }, [SPECIES_CACTURNE] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_SNORUNT] = { - .size = 0x56, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_GLALIE] = { - .size = 0x76, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 10, }, [SPECIES_LUNATONE] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_SOLROCK] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_AZURILL] = { - .size = 0x55, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 15, }, [SPECIES_SPOINK] = { - .size = 0x46, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(32, 48), + .y_offset = 9, }, [SPECIES_GRUMPIG] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_PLUSLE] = { - .size = 0x56, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 14, }, [SPECIES_MINUN] = { - .size = 0x66, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 12, }, [SPECIES_MAWILE] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_MEDITITE] = { - .size = 0x65, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(48, 40), + .y_offset = 12, }, [SPECIES_MEDICHAM] = { - .size = 0x68, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 1, }, [SPECIES_SWABLU] = { - .size = 0x76, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 17, }, [SPECIES_ALTARIA] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_WYNAUT] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_DUSKULL] = { - .size = 0x66, - .y_offset = 0x0a, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 10, }, [SPECIES_DUSCLOPS] = { - .size = 0x77, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 5, }, [SPECIES_ROSELIA] = { - .size = 0x76, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 48), + .y_offset = 8, }, [SPECIES_SLAKOTH] = { - .size = 0x74, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(56, 32), + .y_offset = 18, }, [SPECIES_VIGOROTH] = { - .size = 0x78, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 0, }, [SPECIES_SLAKING] = { - .size = 0x86, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 8, }, [SPECIES_GULPIN] = { - .size = 0x55, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 18, }, [SPECIES_SWALOT] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_TROPIUS] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_WHISMUR] = { - .size = 0x55, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 14, }, [SPECIES_LOUDRED] = { - .size = 0x78, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_EXPLOUD] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_CLAMPERL] = { - .size = 0x55, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 14, }, [SPECIES_HUNTAIL] = { - .size = 0x78, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 3, }, [SPECIES_GOREBYSS] = { - .size = 0x86, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(64, 48), + .y_offset = 11, }, [SPECIES_ABSOL] = { - .size = 0x68, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(48, 64), + .y_offset = 0, }, [SPECIES_SHUPPET] = { - .size = 0x56, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 14, }, [SPECIES_BANETTE] = { - .size = 0x55, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 12, }, [SPECIES_SEVIPER] = { - .size = 0x77, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 8, }, [SPECIES_ZANGOOSE] = { - .size = 0x87, - .y_offset = 0x05, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 5, }, [SPECIES_RELICANTH] = { - .size = 0x77, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(56, 56), + .y_offset = 11, }, [SPECIES_ARON] = { - .size = 0x43, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(32, 24), + .y_offset = 20, }, [SPECIES_LAIRON] = { - .size = 0x75, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(56, 40), + .y_offset = 13, }, [SPECIES_AGGRON] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_CASTFORM] = { - .size = 0x34, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 17, }, [SPECIES_VOLBEAT] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_ILLUMISE] = { - .size = 0x56, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 8, }, [SPECIES_LILEEP] = { - .size = 0x67, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(48, 56), + .y_offset = 7, }, [SPECIES_CRADILY] = { - .size = 0x78, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 0, }, [SPECIES_ANORITH] = { - .size = 0x66, - .y_offset = 0x08, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 8, }, [SPECIES_ARMALDO] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_RALTS] = { - .size = 0x35, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(24, 40), + .y_offset = 15, }, [SPECIES_KIRLIA] = { - .size = 0x47, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(32, 56), + .y_offset = 6, }, [SPECIES_GARDEVOIR] = { - .size = 0x78, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 1, }, [SPECIES_BAGON] = { - .size = 0x56, - .y_offset = 0x0b, + .size = MON_COORDS_SIZE(40, 48), + .y_offset = 11, }, [SPECIES_SHELGON] = { - .size = 0x66, - .y_offset = 0x09, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 9, }, [SPECIES_SALAMENCE] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_BELDUM] = { - .size = 0x55, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(40, 40), + .y_offset = 15, }, [SPECIES_METANG] = { - .size = 0x87, - .y_offset = 0x07, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 7, }, [SPECIES_METAGROSS] = { - .size = 0x87, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 6, }, [SPECIES_REGIROCK] = { - .size = 0x78, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(56, 64), + .y_offset = 4, }, [SPECIES_REGICE] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_REGISTEEL] = { - .size = 0x88, - .y_offset = 0x03, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 3, }, [SPECIES_KYOGRE] = { - .size = 0x87, - .y_offset = 0x04, + .size = MON_COORDS_SIZE(64, 56), + .y_offset = 4, }, [SPECIES_GROUDON] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_RAYQUAZA] = { - .size = 0x88, - .y_offset = 0x00, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 0, }, [SPECIES_LATIAS] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_LATIOS] = { - .size = 0x88, - .y_offset = 0x02, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 2, }, [SPECIES_JIRACHI] = { - .size = 0x66, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(48, 48), + .y_offset = 13, }, [SPECIES_DEOXYS] = { - .size = 0x88, - .y_offset = 0x01, + .size = MON_COORDS_SIZE(64, 64), + .y_offset = 1, }, [SPECIES_CHIMECHO] = { - .size = 0x37, - .y_offset = 0x06, + .size = MON_COORDS_SIZE(24, 56), + .y_offset = 6, }, [SPECIES_EGG] = { - .size = 0x33, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(24, 24), + .y_offset = 20, }, [SPECIES_UNOWN_B] = { - .size = 0x34, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 16, }, [SPECIES_UNOWN_C] = { - .size = 0x44, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 16, }, [SPECIES_UNOWN_D] = { - .size = 0x44, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 16, }, [SPECIES_UNOWN_E] = { - .size = 0x44, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 17, }, [SPECIES_UNOWN_F] = { - .size = 0x44, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 17, }, [SPECIES_UNOWN_G] = { - .size = 0x35, - .y_offset = 0x0e, + .size = MON_COORDS_SIZE(24, 40), + .y_offset = 14, }, [SPECIES_UNOWN_H] = { - .size = 0x44, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 16, }, [SPECIES_UNOWN_I] = { - .size = 0x34, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 16, }, [SPECIES_UNOWN_J] = { - .size = 0x34, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 17, }, [SPECIES_UNOWN_K] = { - .size = 0x44, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 17, }, [SPECIES_UNOWN_L] = { - .size = 0x34, - .y_offset = 0x13, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 19, }, [SPECIES_UNOWN_M] = { - .size = 0x44, - .y_offset = 0x13, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 19, }, [SPECIES_UNOWN_N] = { - .size = 0x43, - .y_offset = 0x14, + .size = MON_COORDS_SIZE(32, 24), + .y_offset = 20, }, [SPECIES_UNOWN_O] = { - .size = 0x44, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 16, }, [SPECIES_UNOWN_P] = { - .size = 0x34, - .y_offset = 0x13, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 19, }, [SPECIES_UNOWN_Q] = { - .size = 0x43, - .y_offset = 0x15, + .size = MON_COORDS_SIZE(32, 24), + .y_offset = 21, }, [SPECIES_UNOWN_R] = { - .size = 0x34, - .y_offset = 0x13, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 19, }, [SPECIES_UNOWN_S] = { - .size = 0x45, - .y_offset = 0x0c, + .size = MON_COORDS_SIZE(32, 40), + .y_offset = 12, }, [SPECIES_UNOWN_T] = { - .size = 0x34, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 18, }, [SPECIES_UNOWN_U] = { - .size = 0x44, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 18, }, [SPECIES_UNOWN_V] = { - .size = 0x44, - .y_offset = 0x12, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 18, }, [SPECIES_UNOWN_W] = { - .size = 0x44, - .y_offset = 0x13, + .size = MON_COORDS_SIZE(32, 32), + .y_offset = 19, }, [SPECIES_UNOWN_X] = { - .size = 0x33, - .y_offset = 0x15, + .size = MON_COORDS_SIZE(24, 24), + .y_offset = 21, }, [SPECIES_UNOWN_Y] = { - .size = 0x34, - .y_offset = 0x11, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 17, }, [SPECIES_UNOWN_Z] = { - .size = 0x34, - .y_offset = 0x10, + .size = MON_COORDS_SIZE(24, 32), + .y_offset = 16, }, [SPECIES_UNOWN_EMARK] = { - .size = 0x35, - .y_offset = 0x0f, + .size = MON_COORDS_SIZE(24, 40), + .y_offset = 15, }, [SPECIES_UNOWN_QMARK] = { - .size = 0x35, - .y_offset = 0x0d, + .size = MON_COORDS_SIZE(24, 40), + .y_offset = 13, }, }; From f683ffa62856534a0e88d521873b9cf99b6cfc80 Mon Sep 17 00:00:00 2001 From: SphericalIce Date: Thu, 5 Jan 2023 09:12:11 +0000 Subject: [PATCH 14/33] Use the WIN_INTRO_TEXTBOX constant more --- src/oak_speech.c | 54 ++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/oak_speech.c b/src/oak_speech.c index c576abdfb..c08935e03 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -763,7 +763,7 @@ static void Task_NewGameScene(u8 taskId) case 6: if (FreeTempTileDataBuffersIfPossible()) return; - ClearDialogWindowAndFrame(0, TRUE); + ClearDialogWindowAndFrame(WIN_INTRO_TEXTBOX, TRUE); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 32); CopyBgTilemapBufferToVram(1); break; @@ -1119,18 +1119,18 @@ static void Task_OakSpeech_Init(u8 taskId) } } -#define OakSpeechPrintMessage(str, speed) ({ \ - DrawDialogueFrame(0, FALSE); \ - if (str != gStringVar4) \ - { \ - StringExpandPlaceholders(gStringVar4, str); \ - AddTextPrinterParameterized2(0, FONT_MALE, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ - } \ - else \ - { \ - AddTextPrinterParameterized2(0, FONT_MALE, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ - } \ - CopyWindowToVram(0, COPYWIN_FULL); \ +#define OakSpeechPrintMessage(str, speed) ({ \ + DrawDialogueFrame(WIN_INTRO_TEXTBOX, FALSE); \ + if (str != gStringVar4) \ + { \ + StringExpandPlaceholders(gStringVar4, str); \ + AddTextPrinterParameterized2(WIN_INTRO_TEXTBOX, FONT_MALE, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ + } \ + else \ + { \ + AddTextPrinterParameterized2(WIN_INTRO_TEXTBOX, FONT_MALE, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \ + } \ + CopyWindowToVram(WIN_INTRO_TEXTBOX, COPYWIN_FULL); \ }) static void Task_OakSpeech_WelcomeToTheWorld(u8 taskId) @@ -1152,7 +1152,7 @@ static void Task_OakSpeech_WelcomeToTheWorld(u8 taskId) static void Task_OakSpeech_ThisWorld(u8 taskId) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { OakSpeechPrintMessage(gOakSpeech_Text_ThisWorld, sOakSpeechResources->textSpeed); gTasks[taskId].tTimer = 30; @@ -1165,7 +1165,7 @@ static void Task_OakSpeech_ReleaseNidoranFFromPokeBall(u8 taskId) s16 *data = gTasks[taskId].data; u8 spriteId; - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { if (tTimer != 0) tTimer--; @@ -1198,7 +1198,7 @@ static void Task_OakSpeech_IsInhabitedFarAndWide(u8 taskId) static void Task_OakSpeech_IStudyPokemon(u8 taskId) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { OakSpeechPrintMessage(gOakSpeech_Text_IStudyPokemon, sOakSpeechResources->textSpeed); gTasks[taskId].func = Task_OakSpeech_ReturnNidoranFToPokeBall; @@ -1209,9 +1209,9 @@ static void Task_OakSpeech_ReturnNidoranFToPokeBall(u8 taskId) { u8 spriteId; - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { - ClearDialogWindowAndFrame(0, TRUE); + ClearDialogWindowAndFrame(WIN_INTRO_TEXTBOX, TRUE); spriteId = gTasks[taskId].tNidoranFSpriteId; gTasks[taskId].tPokeBallSpriteId = CreateTradePokeballSprite(spriteId, gSprites[spriteId].oam.paletteNum, 100, 66, 0, 0, 32, 0xFFFF1F3F); gTasks[taskId].tTimer = 48; @@ -1253,9 +1253,9 @@ static void Task_OakSpeech_FadeOutOak(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(WIN_INTRO_TEXTBOX, 1); CreateFadeInTask(taskId, 2); tTimer = 48; gTasks[taskId].func = Task_OakSpeech_AskPlayerGender; @@ -1284,7 +1284,7 @@ static void Task_OakSpeech_AskPlayerGender(u8 taskId) static void Task_OakSpeech_ShowGenderOptions(u8 taskId) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { gTasks[taskId].tMenuWindowId = AddWindow(&sIntro_WindowTemplates[WIN_INTRO_BOYGIRL]); PutWindowTilemap(gTasks[taskId].tMenuWindowId); @@ -1367,7 +1367,7 @@ static void Task_OakSpeech_YourNameWhatIsIt(u8 taskId) static void Task_OakSpeech_FadeOutForPlayerNamingScreen(u8 taskId) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); sOakSpeechResources->hasPlayerBeenNamed = FALSE; @@ -1379,7 +1379,7 @@ static void Task_OakSpeech_MoveRivalDisplayNameOptions(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { if (tTrainerPicPosX > -60) { @@ -1470,7 +1470,7 @@ static void Task_OakSpeech_ConfirmName(u8 taskId) tNameNotConfirmed = FALSE; tTimer = 25; } - else if (!IsTextPrinterActive(0)) + else if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { if (tTimer != 0) { @@ -1533,9 +1533,9 @@ static void Task_OakSpeech_FadeOutPlayerPic(u8 taskId) static void Task_OakSpeech_FadeOutRivalPic(u8 taskId) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { - ClearDialogWindowAndFrame(0, 1); + ClearDialogWindowAndFrame(WIN_INTRO_TEXTBOX, TRUE); CreateFadeInTask(taskId, 2); gTasks[taskId].func = Task_OakSpeech_ReshowPlayersPic; } @@ -1602,7 +1602,7 @@ static void Task_OakSpeech_LetsGo(u8 taskId) static void Task_OakSpeech_FadeOutBGM(u8 taskId) { - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_INTRO_TEXTBOX)) { if (gTasks[taskId].tTimer != 0) { From ef4ee97e26180c175073eb73c7009d5bb2058c43 Mon Sep 17 00:00:00 2001 From: SphericalIce Date: Thu, 5 Jan 2023 09:25:40 +0000 Subject: [PATCH 15/33] Give Oak Speech graphics files more accurate names --- .../palette.pal => bg_pals.pal} | 0 .../tiles.png => bg_tiles.png} | Bin .../page_2.bin => controls_guide_page_2.bin} | Bin .../page_3.bin => controls_guide_page_3.bin} | Bin .../{background.bin => oak_speech_bg.bin} | Bin .../{background.png => oak_speech_bg.png} | Bin src/oak_speech.c | 22 +++++++++--------- 7 files changed, 11 insertions(+), 11 deletions(-) rename graphics/oak_speech/{controls_guide/palette.pal => bg_pals.pal} (100%) rename graphics/oak_speech/{controls_guide/tiles.png => bg_tiles.png} (100%) rename graphics/oak_speech/{controls_guide/page_2.bin => controls_guide_page_2.bin} (100%) rename graphics/oak_speech/{controls_guide/page_3.bin => controls_guide_page_3.bin} (100%) rename graphics/oak_speech/{background.bin => oak_speech_bg.bin} (100%) rename graphics/oak_speech/{background.png => oak_speech_bg.png} (100%) diff --git a/graphics/oak_speech/controls_guide/palette.pal b/graphics/oak_speech/bg_pals.pal similarity index 100% rename from graphics/oak_speech/controls_guide/palette.pal rename to graphics/oak_speech/bg_pals.pal diff --git a/graphics/oak_speech/controls_guide/tiles.png b/graphics/oak_speech/bg_tiles.png similarity index 100% rename from graphics/oak_speech/controls_guide/tiles.png rename to graphics/oak_speech/bg_tiles.png diff --git a/graphics/oak_speech/controls_guide/page_2.bin b/graphics/oak_speech/controls_guide_page_2.bin similarity index 100% rename from graphics/oak_speech/controls_guide/page_2.bin rename to graphics/oak_speech/controls_guide_page_2.bin diff --git a/graphics/oak_speech/controls_guide/page_3.bin b/graphics/oak_speech/controls_guide_page_3.bin similarity index 100% rename from graphics/oak_speech/controls_guide/page_3.bin rename to graphics/oak_speech/controls_guide_page_3.bin diff --git a/graphics/oak_speech/background.bin b/graphics/oak_speech/oak_speech_bg.bin similarity index 100% rename from graphics/oak_speech/background.bin rename to graphics/oak_speech/oak_speech_bg.bin diff --git a/graphics/oak_speech/background.png b/graphics/oak_speech/oak_speech_bg.png similarity index 100% rename from graphics/oak_speech/background.png rename to graphics/oak_speech/oak_speech_bg.png diff --git a/src/oak_speech.c b/src/oak_speech.c index c08935e03..649107e7d 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -114,13 +114,13 @@ extern const struct OamData gOamData_AffineOff_ObjNormal_32x32; extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; extern const struct OamData gOamData_AffineOff_ObjNormal_16x8; -static const u16 sControlsGuide_Pal[] = INCBIN_U16("graphics/oak_speech/controls_guide/palette.gbapal"); -static const u32 sControlsGuide_Tiles[] = INCBIN_U32("graphics/oak_speech/controls_guide/tiles.4bpp.lz"); -static const u32 sPikachuIntro_Tilemap[] = INCBIN_U32("graphics/oak_speech/pikachu_intro/tilemap.bin.lz"); -static const u32 sOakSpeech_Background_Tiles[] = INCBIN_U32("graphics/oak_speech/background.4bpp.lz"); -static const u32 sOakSpeech_Background_Tilemap[] = INCBIN_U32("graphics/oak_speech/background.bin.lz"); -static const u16 sControlsGuide_Tilemap_Page2[] = INCBIN_U16("graphics/oak_speech/controls_guide/page_2.bin"); -static const u16 sControlsGuide_Tilemap_Page3[] = INCBIN_U16("graphics/oak_speech/controls_guide/page_3.bin"); +static const u16 sOakSpeech_Background_Pals[] = INCBIN_U16("graphics/oak_speech/bg_pals.gbapal"); // Shared by the Controls Guide, Pikachu Intro and Oak Speech scenes +static const u32 sControlsGuide_PikachuIntro_Background_Tiles[] = INCBIN_U32("graphics/oak_speech/bg_tiles.4bpp.lz"); +static const u32 sPikachuIntro_Background_Tilemap[] = INCBIN_U32("graphics/oak_speech/pikachu_intro/tilemap.bin.lz"); +static const u32 sOakSpeech_Background_Tiles[] = INCBIN_U32("graphics/oak_speech/oak_speech_bg.4bpp.lz"); +static const u32 sOakSpeech_Background_Tilemap[] = INCBIN_U32("graphics/oak_speech/oak_speech_bg.bin.lz"); +static const u16 sControlsGuide_Tilemap_Page2[] = INCBIN_U16("graphics/oak_speech/controls_guide_page_2.bin"); +static const u16 sControlsGuide_Tilemap_Page3[] = INCBIN_U16("graphics/oak_speech/controls_guide_page_3.bin"); static const u16 sOakSpeech_Leaf_Pal[] = INCBIN_U16("graphics/oak_speech/leaf/pal.gbapal"); static const u32 sOakSpeech_Leaf_Tiles[] = INCBIN_U32("graphics/oak_speech/leaf/pic.8bpp.lz"); static const u16 sOakSpeech_Red_Pal[] = INCBIN_U16("graphics/oak_speech/red/pal.gbapal"); @@ -752,13 +752,13 @@ static void Task_NewGameScene(u8 taskId) InitStandardTextBoxWindows(); InitTextBoxGfxAndPrinters(); Menu_LoadStdPalAt(0xD0); - LoadPalette(sControlsGuide_Pal, 0, 0x80); + LoadPalette(sOakSpeech_Background_Pals, 0, 0x80); LoadPalette(GetTextWindowPalette(2) + 15, 0, 2); break; case 5: sOakSpeechResources->textSpeed = GetTextSpeedSetting(); gTextFlags.canABSpeedUpPrint = TRUE; - DecompressAndCopyTileDataToVram(1, sControlsGuide_Tiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, sControlsGuide_PikachuIntro_Background_Tiles, 0, 0, 0); break; case 6: if (FreeTempTileDataBuffersIfPossible()) @@ -950,7 +950,7 @@ static void Task_PikachuIntro_LoadPage1(u8 taskId) PlayBGM(MUS_NEW_GAME_INTRO); ClearTopBarWindow(); TopBarWindowPrintString(gText_ABUTTONNext, 0, 1); - sOakSpeechResources->pikachuIntroTilemap = MallocAndDecompress(sPikachuIntro_Tilemap, &size); + sOakSpeechResources->pikachuIntroTilemap = MallocAndDecompress(sPikachuIntro_Background_Tilemap, &size); CopyToBgTilemapBufferRect(1, sOakSpeechResources->pikachuIntroTilemap, 0, 2, 30, 19); CopyBgTilemapBufferToVram(1); Free(sOakSpeechResources->pikachuIntroTilemap); @@ -1823,7 +1823,7 @@ static void CB2_ReturnFromNamingScreen(void) FreeAllWindowBuffers(); InitStandardTextBoxWindows(); InitTextBoxGfxAndPrinters(); - LoadPalette(sControlsGuide_Pal, 0, 0xE0); + LoadPalette(sOakSpeech_Background_Pals, 0, 0xE0); break; case 4: DecompressAndCopyTileDataToVram(1, sOakSpeech_Background_Tiles, 0, 0, 0); From fc4aa4fff7c77878068c6b6923f0e71d4aefd47f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 15 Dec 2022 16:00:33 -0500 Subject: [PATCH 16/33] Sync trade anim --- graphics/trade/ball.png | Bin 464 -> 0 bytes .../trade/{unknown_DDB444.pal => cursor.pal} | 0 graphics/trade/{buttons.png => cursor.png} | Bin graphics/trade/{misc.pal => link_mon.pal} | 0 .../trade/{glow1.png => link_mon_glow.png} | Bin .../trade/{glow2.png => link_mon_shadow.png} | Bin .../trade/{unknown_DDCF04.bin => menu.bin} | Bin graphics/trade/unknown_338EA4.pal | 15 - .../unused_DDCEE4.bin => trade/unused.bin} | Bin .../trade/{unknown_3308C0.pal => unused1.pal} | 0 ...3379A0.bin => wireless_signal_closeup.bin} | Bin include/pokemon.h | 2 +- src/graphics.c | 8 +- src/pokemon.c | 2 +- src/pokemon_summary_screen.c | 4 +- src/trade.c | 2 +- src/trade_scene.c | 2195 +++++++++-------- 17 files changed, 1117 insertions(+), 1111 deletions(-) delete mode 100644 graphics/trade/ball.png rename graphics/trade/{unknown_DDB444.pal => cursor.pal} (100%) rename graphics/trade/{buttons.png => cursor.png} (100%) rename graphics/trade/{misc.pal => link_mon.pal} (100%) rename graphics/trade/{glow1.png => link_mon_glow.png} (100%) rename graphics/trade/{glow2.png => link_mon_shadow.png} (100%) rename graphics/trade/{unknown_DDCF04.bin => menu.bin} (100%) delete mode 100644 graphics/trade/unknown_338EA4.pal rename graphics/{unused/unused_DDCEE4.bin => trade/unused.bin} (100%) rename graphics/trade/{unknown_3308C0.pal => unused1.pal} (100%) rename graphics/trade/{unknown_3379A0.bin => wireless_signal_closeup.bin} (100%) diff --git a/graphics/trade/ball.png b/graphics/trade/ball.png deleted file mode 100644 index 97cc86a6f79c9d20b0cbb2f5de67003c0aa9d97c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^0ziC#g&9cxfBdf&NErn9gt-3y|G$}mVGRSrRZY$R zbE<*dDO096Iyy>7NC4TGAggAYHvw5N+>h(+(-s|WL%4S3iR@+>!Vryo*zwsK1qY?9f&>fg7{zriTB3Jve^PzFVKGByk~(*-;Hq;kVwV2So@=|Z^n8WD5#wLI|9%|$aZh8eZIy=H-LB>9=6~|2 zp6XgqKKJfNzYUMZ(n#=IfmonIconSpriteId = CreateMonIcon(species, SpriteCallbackDummy, 24, 32, 0, personality, 1); } - if (!IsPokeSpriteNotFlipped(species)) + if (!IsMonSpriteNotFlipped(species)) gSprites[sMonSummaryScreen->monIconSpriteId].hFlip = TRUE; else gSprites[sMonSummaryScreen->monIconSpriteId].hFlip = FALSE; diff --git a/src/trade.c b/src/trade.c index 1ec5c5d11..e7de8d22d 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1423,7 +1423,7 @@ static void SetActiveMenuOptions(void) } else { - // Absent partner pokemno + // Absent partner pokemon sTradeMenu->optionsActive[i + PARTY_SIZE] = FALSE; } } diff --git a/src/trade_scene.c b/src/trade_scene.c index 3f2b1952e..47d5f191c 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -34,15 +34,24 @@ #include "constants/region_map_sections.h" #include "constants/moves.h" -#define TAG_GLOW1_TILES 5550 -#define TAG_GLOW_PAL 5551 -#define TAG_GLOW2_TILES 5552 -#define TAG_UNUSED_5553 5553 -#define TAG_CABLE_END_TILES 5554 -#define TAG_GBA_PAL 5555 -#define TAG_GBA_SCREEN_TILES 5556 -#define TAG_BALL_TILES 5557 -#define TAG_BALL_PAL 5558 +// Values for signaling to/from the link partner +enum { + STATUS_NONE, + STATUS_READY, + STATUS_CANCEL, +}; + +enum { + GFXTAG_LINK_MON_GLOW = 5550, + PALTAG_LINK_MON, + GFXTAG_LINK_MON_SHADOW, + TAG_UNUSED, + GFXTAG_CABLE_END, + PALTAG_GBA, + GFXTAG_GBA_SCREEN, + GFXTAG_POKEBALL, + PALTAG_POKEBALL, +}; struct InGameTrade { /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; @@ -50,7 +59,7 @@ struct InGameTrade { /*0x0E*/ u8 ivs[NUM_STATS]; /*0x14*/ u8 abilityNum; /*0x18*/ u32 otId; - /*0x1C*/ u8 conditions[5]; + /*0x1C*/ u8 conditions[CONTEST_CATEGORIES_COUNT]; /*0x24*/ u32 personality; /*0x28*/ u16 heldItem; /*0x2A*/ u8 mailNum; @@ -60,31 +69,31 @@ struct InGameTrade { /*0x38*/ u16 requestedSpecies; }; -struct TradeAnimationResources { - /*0x00*/ struct Pokemon mon; +struct { + /*0x00*/ struct Pokemon tempMon; // Used as a temp variable when swapping Pokémon /*0x64*/ u32 timer; /*0x68*/ u32 monPersonalities[2]; /*0x70*/ u8 filler_70[2]; - /*0x72*/ u8 tradeStatus1; - /*0x73*/ u8 tradeStatus2; + /*0x72*/ u8 playerFinishStatus; + /*0x73*/ u8 partnerFinishStatus; /*0x74*/ u16 linkData[10]; /*0x88*/ u8 linkTimeoutCheck1; /*0x89*/ u8 linkTimeoutCheck2; /*0x8A*/ u16 linkTimeoutTimer; - /*0x8C*/ u16 unk_8C; - /*0x8E*/ u8 pokePicSpriteIdxs[2]; - /*0x90*/ u8 tradeGlow1SpriteId; - /*0x91*/ u8 gbaScreenSpriteId; - /*0x92*/ u8 linkCableEndSpriteId; + /*0x8C*/ u16 neverRead_8C; + /*0x8E*/ u8 monSpriteIds[2]; + /*0x90*/ u8 connectionSpriteId1; // Multi-purpose sprite ids used during the transfer sequence + /*0x91*/ u8 connectionSpriteId2; + /*0x92*/ u8 cableEndSpriteId; /*0x93*/ u8 scheduleLinkTransfer; /*0x94*/ u16 state; /*0x96*/ u8 filler_96[0xD2 - 0x96]; - /*0xD2*/ u8 pokeballSpriteId; - /*0xD3*/ u8 pokeballSpriteId2; + /*0xD2*/ u8 releasePokeballSpriteId; + /*0xD3*/ u8 bouncingPokeballSpriteId; /*0xD4*/ u16 bg2texX; /*0xD6*/ u16 bg2texY; - /*0xD8*/ u16 unk_D8; - /*0xDA*/ u16 unk_DA; + /*0xD8*/ u16 neverRead_D8; + /*0xDA*/ u16 neverRead_DA; /*0xDC*/ u16 bg2srcX; /*0xDE*/ u16 bg2srcY; /*0xE0*/ s16 bg1vofs; @@ -95,10 +104,10 @@ struct TradeAnimationResources { /*0xEA*/ u16 bg2Zoom; /*0xEC*/ u16 bg2alpha; /*0xEE*/ bool8 isLinkTrade; - /*0xF0*/ u16 tradeSpecies[2]; + /*0xF0*/ u16 monSpecies[2]; /*0xF4*/ u16 cachedMapMusic; /*0xF6*/ u8 unk_F6; - /*0xF8*/ u16 monSpecies[2]; + /*0xF8*/ u16 questLogSpecies[2]; /*0xFC*/ u8 linkPartnerName[7]; /*0x103*/ u8 filler_103[1]; /*0x104*/ u8 textColor[3]; @@ -108,159 +117,157 @@ struct TradeAnimationResources { /*0x10A*/ u8 win0top; /*0x10B*/ u8 win0right; /*0x10C*/ u8 win0bottom; -}; +} static EWRAM_DATA * sTradeAnim = NULL; -static EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; - -static void SpriteCB_TradeGlowCable(struct Sprite *sprite); -static void SpriteCB_TradeGlowWireless(struct Sprite *sprite); -static void SpriteCB_TradeGlowCore(struct Sprite *sprite); -static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite *sprite); -static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite *sprite); -static void SpriteCB_TradeGBAScreen(struct Sprite *sprite); +static void SpriteCB_LinkMonGlow(struct Sprite *sprite); +static void SpriteCB_LinkMonGlowWireless(struct Sprite *sprite); +static void SpriteCB_LinkMonShadow(struct Sprite *sprite); +static void SpriteCB_CableEndSending(struct Sprite *sprite); +static void SpriteCB_CableEndReceiving(struct Sprite *sprite); +static void SpriteCB_GbaScreen(struct Sprite *sprite); static void TradeAnimInit_LoadGfx(void); -static void CB2_RunTradeAnim_InGameTrade(void); +static void CB2_InGameTrade(void); static void SetTradeSequenceBgGpuRegs(u8 idx); static void LoadTradeGbaSpriteGfx(void); static void TradeBufferOTnameAndNicknames(void); static u8 DoTradeAnim(void); static u8 DoTradeAnim_Cable(void); static u8 DoTradeAnim_Wireless(void); -static void SpriteCB_TradePokeball_Default(struct Sprite *sprite); -static void SpriteCB_TradePokeball_Outbound(struct Sprite *sprite); -static void SpriteCB_TradePokeball_Outbound2(struct Sprite *sprite); -static void SpriteCB_TradePokeball_Inbound(struct Sprite *sprite); +static void SpriteCB_BouncingPokeball(struct Sprite *sprite); +static void SpriteCB_BouncingPokeballDepart(struct Sprite *sprite); +static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *sprite); +static void SpriteCB_BouncingPokeballArrive(struct Sprite *sprite); static void BufferInGameTradeMonName(void); static void GetInGameTradeMail(struct Mail * mail, const struct InGameTrade * inGameTrade); -static void CB2_RunTradeAnim_LinkTrade(void); -static void CB2_WaitAndAckTradeComplete(void); -static void CB2_HandleTradeEnded(void); -static void LinkTrade_TearDownAssets(void); -static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId); +static void CB2_UpdateLinkTrade(void); +static void CB2_WaitTradeComplete(void); +static void CB2_SaveAndEndTrade(void); +static void CB2_FreeTradeAnim(void); +static void Task_InGameTrade(u8 taskId); static void CheckPartnersMonForRibbons(void); static void Task_AnimateWirelessSignal(u8 taskId); static void Task_OpenCenterWhiteColumn(u8 taskId); static void Task_CloseCenterWhiteColumn(u8 taskId); -static const u16 sTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); -static const u8 sTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); -static const u8 sPokeballSymbolTiles[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); -static const u16 sCableCloseupMap[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); -static const u16 sPokeballSymbolMap[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); -static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); -static const u16 sTradeGbaPal[] = INCBIN_U16("graphics/trade/gba.gbapal"); -static const u16 sShadowPalette[] = INCBIN_U16("graphics/trade/shadow.gbapal"); -static const u16 sBlackPalette[] = INCBIN_U16("graphics/trade/black.gbapal"); -static const u16 sTradeGlowPal[] = INCBIN_U16("graphics/trade/misc.gbapal"); -static const u8 sTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); -static const u8 sTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); -static const u8 sTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); -static const u8 sTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); -const u16 gTradeOrHatchMonShadowTilemap[] = INCBIN_U16("graphics/trade/shadow_map.bin"); -static const u8 sGbaAffineTiles[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); -static const u8 sFiller_08335760[64] = {}; -static const u8 sGbaAffineMapCable[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); -static const u8 sGbaAffineMapWireless[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); -static const u16 sGbaMapWireless[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); -static const u16 sGbaMapCable[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); -static const u32 sWirelessCloseupMap[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); +static const u16 sPokeball_Pal[] = INCBIN_U16("graphics/trade/pokeball.gbapal"); +static const u8 sPokeball_Gfx[] = INCBIN_U8("graphics/trade/pokeball.4bpp"); +static const u8 sPokeballSymbol_Gfx[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); // Unused +static const u16 sCableCloseup_Map[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); +static const u16 sPokeballSymbol_Map[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); +static const u16 sUnusedPal1[] = INCBIN_U16("graphics/trade/unused1.gbapal"); +static const u16 sGba_Pal[] = INCBIN_U16("graphics/trade/gba.gbapal"); +static const u16 sShadowPalette[] = INCBIN_U16("graphics/trade/shadow.gbapal"); +static const u16 sBlackPalette[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u16 sLinkMon_Pal[] = INCBIN_U16("graphics/trade/link_mon.gbapal"); +static const u8 sLinkMonGlow_Gfx[] = INCBIN_U8("graphics/trade/link_mon_glow.4bpp"); +static const u8 sLinkMonShadow_Gfx[] = INCBIN_U8("graphics/trade/link_mon_shadow.4bpp"); +static const u8 sCableEnd_Gfx[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); +static const u8 sGbaScreen_Gfx[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); +const u16 gTradeOrHatchMonShadowTilemap[] = INCBIN_U16("graphics/trade/shadow_map.bin"); +static const u8 sGbaAffine_Gfx[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); +static const u8 sEmptyGfx[64] = {}; +static const u8 sGbaAffineMapCable[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); +static const u8 sGbaAffineMapWireless[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); +static const u16 sGbaMapWireless[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); +static const u16 sGbaMapCable[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); +static const u32 sWirelessCloseup_Map[] = INCBIN_U32("graphics/trade/wireless_signal_closeup.bin.lz"); static const u16 sWirelessSignalAnimPals_Outbound[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); -static const u16 sWirelessSignalAnimPals_Inbound[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); -static const u16 sWirelessSignalAnimPals_Off[] = INCBIN_U16("graphics/trade/black.gbapal"); -static const u32 sWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); -static const u32 sWirelessSignalTilemap[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); +static const u16 sWirelessSignalAnimPals_Inbound[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); +static const u16 sWirelessSignalAnimPals_Off[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u32 sWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); +static const u32 sWirelessSignalTilemap[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); -static const struct OamData gOamData_826CD00 = { +static const struct OamData sOamData_Pokeball = { .affineMode = ST_OAM_AFFINE_NORMAL, .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16) }; -static const union AnimCmd gAnimCmd_826CD08[] = { - ANIMCMD_FRAME(0x00, 3), - ANIMCMD_FRAME(0x04, 3), - ANIMCMD_FRAME(0x08, 3), - ANIMCMD_FRAME(0x0c, 3), - ANIMCMD_FRAME(0x10, 3), - ANIMCMD_FRAME(0x14, 3), - ANIMCMD_FRAME(0x18, 3), - ANIMCMD_FRAME(0x1c, 3), - ANIMCMD_FRAME(0x20, 3), - ANIMCMD_FRAME(0x24, 3), - ANIMCMD_FRAME(0x28, 3), - ANIMCMD_FRAME(0x2c, 3), +static const union AnimCmd sAnim_Pokeball_SpinOnce[] = { + ANIMCMD_FRAME( 0, 3), + ANIMCMD_FRAME( 4, 3), + ANIMCMD_FRAME( 8, 3), + ANIMCMD_FRAME(12, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(20, 3), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(28, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(36, 3), + ANIMCMD_FRAME(40, 3), + ANIMCMD_FRAME(44, 3), ANIMCMD_LOOP(1), - ANIMCMD_FRAME(0x00, 3), + ANIMCMD_FRAME( 0, 3), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_826CD44[] = { - ANIMCMD_FRAME(0x00, 3), - ANIMCMD_FRAME(0x04, 3), - ANIMCMD_FRAME(0x08, 3), - ANIMCMD_FRAME(0x0c, 3), - ANIMCMD_FRAME(0x10, 3), - ANIMCMD_FRAME(0x14, 3), - ANIMCMD_FRAME(0x18, 3), - ANIMCMD_FRAME(0x1c, 3), - ANIMCMD_FRAME(0x20, 3), - ANIMCMD_FRAME(0x24, 3), - ANIMCMD_FRAME(0x28, 3), - ANIMCMD_FRAME(0x2c, 3), +static const union AnimCmd sAnim_Pokeball_SpinTwice[] = { + ANIMCMD_FRAME( 0, 3), + ANIMCMD_FRAME( 4, 3), + ANIMCMD_FRAME( 8, 3), + ANIMCMD_FRAME(12, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(20, 3), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(28, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(36, 3), + ANIMCMD_FRAME(40, 3), + ANIMCMD_FRAME(44, 3), ANIMCMD_LOOP(2), - ANIMCMD_FRAME(0x00, 3), + ANIMCMD_FRAME( 0, 3), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_826CD80[] = { - gAnimCmd_826CD08, - gAnimCmd_826CD44 +static const union AnimCmd *const sAnims_Pokeball[] = { + sAnim_Pokeball_SpinOnce, + sAnim_Pokeball_SpinTwice }; -static const union AffineAnimCmd gAffineAnimCmd_826CD88[] = { +static const union AffineAnimCmd sAffineAnim_Pokeball_Normal[] = { AFFINEANIMCMD_FRAME(0, 0, 0, 1), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gAffineAnimCmd_826CD98[] = { +static const union AffineAnimCmd sAffineAnim_Pokeball_Squish[] = { AFFINEANIMCMD_FRAME(-8, 0, 0, 20), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gAffineAnimCmd_826CDA8[] = { +static const union AffineAnimCmd sAffineAnim_Pokeball_Unsquish[] = { AFFINEANIMCMD_FRAME(96, 256, 0, 0), AFFINEANIMCMD_FRAME(0, 0, 0, 5), AFFINEANIMCMD_FRAME(8, 0, 0, 20), AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CDC8[] = { - gAffineAnimCmd_826CD88, - gAffineAnimCmd_826CD98, - gAffineAnimCmd_826CDA8 +static const union AffineAnimCmd *const sAffineAnims_Pokeball[] = { + sAffineAnim_Pokeball_Normal, + sAffineAnim_Pokeball_Squish, + sAffineAnim_Pokeball_Unsquish }; -static const struct SpriteSheet sTradeBallSpriteSheet = { - sTradeBallTiles, - 0x600, - TAG_BALL_TILES +static const struct SpriteSheet sPokeBallSpriteSheet = { + .data = sPokeball_Gfx, + .size = sizeof(sPokeball_Gfx), + .tag = GFXTAG_POKEBALL }; static const struct SpritePalette sTradeBallSpritePal = { - sTradeBallPalette, - TAG_BALL_PAL + .data = sPokeball_Pal, + .tag = PALTAG_POKEBALL }; -static const struct SpriteTemplate sTradePokeballSpriteTemplate = { - .tileTag = TAG_BALL_TILES, - .paletteTag = TAG_BALL_PAL, - .oam = &gOamData_826CD00, - .anims = gSpriteAnimTable_826CD80, - .affineAnims = gSpriteAffineAnimTable_826CDC8, - .callback = SpriteCB_TradePokeball_Default +static const struct SpriteTemplate sSpriteTemplate_Pokeball = { + .tileTag = GFXTAG_POKEBALL, + .paletteTag = PALTAG_POKEBALL, + .oam = &sOamData_Pokeball, + .anims = sAnims_Pokeball, + .affineAnims = sAffineAnims_Pokeball, + .callback = SpriteCB_BouncingPokeball }; -static const struct OamData gOamData_826CDFC = { +static const struct OamData sOamData_LinkMonGlow = { .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, .shape = SPRITE_SHAPE(32x32), @@ -268,179 +275,184 @@ static const struct OamData gOamData_826CDFC = { .priority = 1 }; -static const union AnimCmd gAnimCmd_826CE04[] = { - ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), +static const union AnimCmd sAnim_LinkMonGlow[] = { + ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), // ? The graphic is a perfect circle, no need to flip ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_826CE0C[] = { - gAnimCmd_826CE04 +static const union AnimCmd *const sAnims_LinkMonGlow[] = { + sAnim_LinkMonGlow }; -static const union AffineAnimCmd gAffineAnimCmd_826CE10[] = { +static const union AffineAnimCmd sAffineAnim_LinkMonGlow[] = { AFFINEANIMCMD_FRAME(-10, -10, 0, 5), AFFINEANIMCMD_FRAME( 10, 10, 0, 5), AFFINEANIMCMD_JUMP(0) }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CE28[] = { - gAffineAnimCmd_826CE10 +static const union AffineAnimCmd *const sAffineAnims_LinkMonGlow[] = { + sAffineAnim_LinkMonGlow }; -static const struct SpriteSheet sTradeGlow1SpriteSheet = { - sTradeGlow1Tiles, - 0x200, - TAG_GLOW1_TILES +static const struct SpriteSheet sSpriteSheet_LinkMonGlow = { + .data = sLinkMonGlow_Gfx, + .size = sizeof(sLinkMonGlow_Gfx), + .tag = GFXTAG_LINK_MON_GLOW }; -static const struct SpritePalette sTradeGlowSpritePal = { - sTradeGlowPal, - TAG_GLOW_PAL +static const struct SpritePalette sSpritePalette_LinkMon = { + .data = sLinkMon_Pal, + .tag = PALTAG_LINK_MON }; -static const struct SpritePalette sTradeGbaSpritePal = { - sTradeGbaPal, - TAG_GBA_PAL +static const struct SpritePalette sSpritePalette_Gba = { + .data = sGba_Pal, + .tag = PALTAG_GBA }; -static const struct SpriteTemplate sTradeGlow1SpriteTemplate = { - .tileTag = TAG_GLOW1_TILES, - .paletteTag = TAG_GLOW_PAL, - .oam = &gOamData_826CDFC, - .anims = gSpriteAnimTable_826CE0C, - .affineAnims = gSpriteAffineAnimTable_826CE28, - .callback = SpriteCB_TradeGlowCable +static const struct SpriteTemplate sSpriteTemplate_LinkMonGlow = { + .tileTag = GFXTAG_LINK_MON_GLOW, + .paletteTag = PALTAG_LINK_MON, + .oam = &sOamData_LinkMonGlow, + .anims = sAnims_LinkMonGlow, + .affineAnims = sAffineAnims_LinkMonGlow, + .callback = SpriteCB_LinkMonGlow }; -static const struct OamData gOamData_826CE5C = { +static const struct OamData sOamData_LinkMonShadow = { .shape = SPRITE_SHAPE(16x32), .size = SPRITE_SIZE(16x32), .priority = 1 }; -static const union AnimCmd gAnimCmd_826CE64[] = { +static const union AnimCmd sAnim_LinkMonShadow_Big[] = { ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_826CE6C[] = { +static const union AnimCmd sAnim_LinkMonShadow_Small[] = { ANIMCMD_FRAME(8, 5, .hFlip = TRUE, .vFlip = TRUE), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_826CE74[] = { - gAnimCmd_826CE64, - gAnimCmd_826CE6C +enum { + ANIM_LINKMON_BIG, + ANIM_LINKMON_SMALL, }; -static const struct SpriteSheet sTradeGlow2SpriteSheet = { - sTradeGlow2Tiles, - 0x300, - TAG_GLOW2_TILES +static const union AnimCmd *const sAnims_LinkMonShadow[] = { + [ANIM_LINKMON_BIG] = sAnim_LinkMonShadow_Big, + [ANIM_LINKMON_SMALL] = sAnim_LinkMonShadow_Small, }; -static const struct SpriteTemplate sGlowBallSpriteTemplate = { - .tileTag = TAG_GLOW2_TILES, - .paletteTag = TAG_GLOW_PAL, - .oam = &gOamData_826CE5C, - .anims = gSpriteAnimTable_826CE74, +static const struct SpriteSheet sSpriteSheet_LinkMonShadow = { + .data = sLinkMonShadow_Gfx, + .size = 0x300, + .tag = GFXTAG_LINK_MON_SHADOW +}; + +static const struct SpriteTemplate sSpriteTemplate_LinkMonShadow = { + .tileTag = GFXTAG_LINK_MON_SHADOW, + .paletteTag = PALTAG_LINK_MON, + .oam = &sOamData_LinkMonShadow, + .anims = sAnims_LinkMonShadow, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_TradeGlowCore + .callback = SpriteCB_LinkMonShadow }; -static const struct OamData gOamData_826CE9C = { +static const struct OamData sOamData_CableEnd = { .shape = SPRITE_SHAPE(16x32), .size = SPRITE_SIZE(16x32), .priority = 1 }; -static const union AnimCmd gAnimCmd_826CEA4[] = { +static const union AnimCmd sAnim_CableEnd[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_826CEAC[] = { - gAnimCmd_826CEA4 +static const union AnimCmd *const sAnims_CableEnd[] = { + sAnim_CableEnd }; -static const struct SpriteSheet sTradeCableEndSpriteSheet = { - sTradeCableEndTiles, - 0x100, - TAG_CABLE_END_TILES +static const struct SpriteSheet sSpriteSheet_CableEnd = { + .data = sCableEnd_Gfx, + .size = 0x100, + .tag = GFXTAG_CABLE_END }; -static const struct SpriteTemplate sGameLinkCableEndSpriteTemplate = { - .tileTag = TAG_CABLE_END_TILES, - .paletteTag = TAG_GBA_PAL, - .oam = &gOamData_826CE9C, - .anims = gSpriteAnimTable_826CEAC, +static const struct SpriteTemplate sSpriteTemplate_CableEnd = { + .tileTag = GFXTAG_CABLE_END, + .paletteTag = PALTAG_GBA, + .oam = &sOamData_CableEnd, + .anims = sAnims_CableEnd, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_GameLinkCableEnd_Outbound + .callback = SpriteCB_CableEndSending }; -static const struct OamData gOamData_826CED0 = { +static const struct OamData sOamData_GbaScreen = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -static const union AnimCmd gAnimCmd_826CED8[] = { - ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x60, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), +static const union AnimCmd sAnim_GbaScreen_Long[] = { + ANIMCMD_FRAME( 0, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(64, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(96, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(64, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME( 0, 2, .hFlip = TRUE, .vFlip = TRUE), ANIMCMD_LOOP(8), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_826CEFC[] = { - ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x60, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), +static const union AnimCmd sAnim_GbaScreen_Short[] = { + ANIMCMD_FRAME( 0, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(64, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(96, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(64, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(32, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME( 0, 2, .hFlip = TRUE, .vFlip = TRUE), ANIMCMD_LOOP(2), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_826CF20[] = { - gAnimCmd_826CED8 +static const union AnimCmd *const sAnims_GbaScreen_Long[] = { + sAnim_GbaScreen_Long }; -static const union AnimCmd *const gSpriteAnimTable_826CF24[] = { - gAnimCmd_826CEFC +static const union AnimCmd *const sAnims_GbaScreen_Short[] = { + sAnim_GbaScreen_Short }; static const struct SpriteSheet sTradeGBAScreenSpriteSheet = { - sTradeGBAScreenTiles, - 0x1000, - TAG_GBA_SCREEN_TILES + .data = sGbaScreen_Gfx, + .size = sizeof(sGbaScreen_Gfx), + .tag = GFXTAG_GBA_SCREEN }; -static const struct SpriteTemplate sTradeGBAScreenSpriteTemplate1 = { - .tileTag = TAG_GBA_SCREEN_TILES, - .paletteTag = TAG_GBA_PAL, - .oam = &gOamData_826CED0, - .anims = gSpriteAnimTable_826CF20, +static const struct SpriteTemplate sSpriteTemplate_GbaScreenFlash_Long = { + .tileTag = GFXTAG_GBA_SCREEN, + .paletteTag = PALTAG_GBA, + .oam = &sOamData_GbaScreen, + .anims = sAnims_GbaScreen_Long, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_TradeGBAScreen + .callback = SpriteCB_GbaScreen }; -static const struct SpriteTemplate sTradeGBAScreenSpriteTemplate2 = { - .tileTag = TAG_GBA_SCREEN_TILES, - .paletteTag = TAG_GBA_PAL, - .oam = &gOamData_826CED0, - .anims = gSpriteAnimTable_826CF24, +static const struct SpriteTemplate sSpriteTemplate_GbaScreenFlash_Short = { + .tileTag = GFXTAG_GBA_SCREEN, + .paletteTag = PALTAG_GBA, + .oam = &sOamData_GbaScreen, + .anims = sAnims_GbaScreen_Short, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_TradeGBAScreen + .callback = SpriteCB_GbaScreen }; -static const u16 sTradeGlow2PaletteAnimTable[] = { +static const u16 sLinkMonShadow_Pal[] = { RGB(18, 24, 31), RGB(18, 24, 31), RGB(18, 24, 31), @@ -455,13 +467,13 @@ static const u16 sTradeGlow2PaletteAnimTable[] = { RGB(31, 31, 31) }; -static const union AffineAnimCmd gAffineAnimCmd_826CF78[] = { +static const union AffineAnimCmd sAffineAnim_CrossingMonPic[] = { AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_JUMP(0) }; -static const union AffineAnimCmd *const sSpriteAffineAnimTable_PlayerPokePicAlt[] = { - gAffineAnimCmd_826CF78 +static const union AffineAnimCmd *const sAffineAnims_CrossingMonPics[] = { + sAffineAnim_CrossingMonPic }; #include "data/ingame_trades.h" @@ -590,66 +602,58 @@ static const u8 sWirelessSignalAnimParams[][2] = { {16, -1} }; -// Sprite callback for link cable trade glow -static void SpriteCB_TradeGlowCable(struct Sprite *sprite) +static void SpriteCB_LinkMonGlow(struct Sprite *sprite) { - sprite->data[0]++; - if (sprite->data[0] == 10) + if (++sprite->data[0] == 10) { PlaySE(SE_BALL); sprite->data[0] = 0; } } -// Sprite callback for wireless trade glow -static void SpriteCB_TradeGlowWireless(struct Sprite *sprite) +static void SpriteCB_LinkMonGlowWireless(struct Sprite *sprite) { - if (!sprite->invisible) + if (!sprite->invisible && ++sprite->data[0] == 10) { - sprite->data[0]++; - if (sprite->data[0] == 10) - { - PlaySE(SE_M_SWAGGER2); - sprite->data[0] = 0; - } + PlaySE(SE_M_SWAGGER2); + sprite->data[0] = 0; } } // Palette flash for trade glow core -static void SpriteCB_TradeGlowCore(struct Sprite *sprite) +static void SpriteCB_LinkMonShadow(struct Sprite *sprite) { if (sprite->data[1] == 0) { - sprite->data[0]++; - if (sprite->data[0] == 12) + if (++sprite->data[0] == 12) sprite->data[0] = 0; - LoadPalette(&sTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + LoadPalette(&sLinkMonShadow_Pal[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); } } -// Move down for 10 frames -static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite *sprite) +// Move cable down offscreen +static void SpriteCB_CableEndSending(struct Sprite *sprite) { sprite->data[0]++; sprite->y2++; + if (sprite->data[0] == 10) DestroySprite(sprite); } -// Move up for 10 frames -static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite *sprite) +// Move cable up onscreen +static void SpriteCB_CableEndReceiving(struct Sprite *sprite) { sprite->data[0]++; sprite->y2--; + if (sprite->data[0] == 10) DestroySprite(sprite); } -// Play a sound every 15 frames -static void SpriteCB_TradeGBAScreen(struct Sprite *sprite) +static void SpriteCB_GbaScreen(struct Sprite *sprite) { - sprite->data[0]++; - if (sprite->data[0] == 15) + if (++sprite->data[0] == 15) { PlaySE(SE_M_MINIMIZE); sprite->data[0] = 0; @@ -659,7 +663,7 @@ static void SpriteCB_TradeGBAScreen(struct Sprite *sprite) static void SetTradeBGAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, sTradeData->bg2texX * 0x100, sTradeData->bg2texY * 0x100, sTradeData->bg2srcX, sTradeData->bg2srcY, sTradeData->sXY, sTradeData->sXY, sTradeData->bg2alpha); + DoBgAffineSet(&affine, sTradeAnim->bg2texX * 0x100, sTradeAnim->bg2texY * 0x100, sTradeAnim->bg2srcX, sTradeAnim->bg2srcY, sTradeAnim->sXY, sTradeAnim->sXY, sTradeAnim->bg2alpha); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -668,18 +672,18 @@ static void SetTradeBGAffine(void) SetGpuReg(REG_OFFSET_BG2Y, affine.dy); } -static void TradeAnim_UpdateBgRegs(void) +static void SetTradeGpuRegs(void) { u16 dispcnt; - SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeAnim->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeAnim->bg1hofs); dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); if ((dispcnt & 7) == DISPCNT_MODE_0) { - SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeAnim->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeAnim->bg2hofs); } else { @@ -689,86 +693,86 @@ static void TradeAnim_UpdateBgRegs(void) static void VBlankCB_TradeAnim(void) { - TradeAnim_UpdateBgRegs(); + SetTradeGpuRegs(); LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void InitLinkTimeoutTracker(void) +static void ClearLinkTimeoutTimer(void) { - sTradeData->linkTimeoutTimer = 0; - sTradeData->linkTimeoutCheck1 = 0; - sTradeData->linkTimeoutCheck2 = 0; + sTradeAnim->linkTimeoutTimer = 0; + sTradeAnim->linkTimeoutCheck1 = 0; + sTradeAnim->linkTimeoutCheck2 = 0; } static void CheckLinkTimeout(void) { - if (sTradeData->linkTimeoutCheck1 == sTradeData->linkTimeoutCheck2) - sTradeData->linkTimeoutTimer++; + if (sTradeAnim->linkTimeoutCheck1 == sTradeAnim->linkTimeoutCheck2) + sTradeAnim->linkTimeoutTimer++; else - sTradeData->linkTimeoutTimer = 0; + sTradeAnim->linkTimeoutTimer = 0; - if (sTradeData->linkTimeoutTimer > 300) + if (sTradeAnim->linkTimeoutTimer > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); - sTradeData->linkTimeoutTimer = 0; - sTradeData->linkTimeoutCheck2 = 0; - sTradeData->linkTimeoutCheck1 = 0; + sTradeAnim->linkTimeoutTimer = 0; + sTradeAnim->linkTimeoutCheck2 = 0; + sTradeAnim->linkTimeoutCheck1 = 0; } - sTradeData->linkTimeoutCheck2 = sTradeData->linkTimeoutCheck1; + sTradeAnim->linkTimeoutCheck2 = sTradeAnim->linkTimeoutCheck1; } -static u32 GetMultiplayerIdOfLinkTrade(void) +static u32 TradeGetMultiplayerId(void) { if (gReceivedRemoteLinkPlayers) return GetMultiplayerId(); return 0; } -static void LoadTradeMonPic(u8 whichParty, u8 action) +static void LoadTradeMonPic(u8 whichParty, u8 state) { int pos = 0; struct Pokemon * mon = NULL; u16 species; u32 personality; - if (whichParty == 0) + if (whichParty == TRADE_PLAYER) { - mon = &gPlayerParty[gSelectedTradeMonPositions[0]]; - pos = 1; + mon = &gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]]; + pos = B_POSITION_OPPONENT_LEFT; } - /*else*/ if (whichParty == 1) + if (whichParty == TRADE_PARTNER) { - mon = &gEnemyParty[gSelectedTradeMonPositions[1] % PARTY_SIZE]; - pos = 3; + mon = &gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE]; + pos = B_POSITION_OPPONENT_RIGHT; } - switch (action) + switch (state) { case 0: // Load graphics species = GetMonData(mon, MON_DATA_SPECIES2); personality = GetMonData(mon, MON_DATA_PERSONALITY); - if (whichParty == 0) + if (whichParty == TRADE_PLAYER) HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); else HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - sTradeData->tradeSpecies[whichParty] = species; - sTradeData->monPersonalities[whichParty] = personality; + sTradeAnim->monSpecies[whichParty] = species; + sTradeAnim->monPersonalities[whichParty] = personality; break; case 1: // Create sprite SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; - gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + sTradeAnim->monSpriteIds[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeAnim->monSpriteIds[whichParty]].invisible = TRUE; + gSprites[sTradeAnim->monSpriteIds[whichParty]].callback = SpriteCallbackDummy; break; } } @@ -780,37 +784,37 @@ void CB2_LinkTrade(void) case 0: if (!gReceivedRemoteLinkPlayers) { - gLinkType = 0x1144; + gLinkType = LINKTYPE_TRADE_DISCONNECTED; CloseLink(); } - sTradeData = AllocZeroed(sizeof(struct TradeAnimationResources)); + sTradeAnim = AllocZeroed(sizeof(*sTradeAnim)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); SetVBlankCallback(VBlankCB_TradeAnim); TradeAnimInit_LoadGfx(); - InitLinkTimeoutTracker(); + ClearLinkTimeoutTimer(); gMain.state++; - sTradeData->unk_8C = 0; - sTradeData->state = 0; - sTradeData->isLinkTrade = TRUE; - sTradeData->bg2texX = 64; - sTradeData->bg2texY = 64; - sTradeData->unk_D8 = 0; - sTradeData->unk_DA = 0; - sTradeData->bg2srcX = 120; - sTradeData->bg2srcY = 80; - sTradeData->sXY = 256; - sTradeData->bg2alpha = 0; + sTradeAnim->neverRead_8C = 0; + sTradeAnim->state = 0; + sTradeAnim->isLinkTrade = TRUE; + sTradeAnim->bg2texX = 64; + sTradeAnim->bg2texY = 64; + sTradeAnim->neverRead_D8 = 0; + sTradeAnim->neverRead_DA = 0; + sTradeAnim->bg2srcX = DISPLAY_WIDTH / 2; + sTradeAnim->bg2srcY = DISPLAY_HEIGHT / 2; + sTradeAnim->sXY = 256; + sTradeAnim->bg2alpha = 0; break; case 1: if (!gReceivedRemoteLinkPlayers) { - sTradeData->isCableTrade = TRUE; + sTradeAnim->isCableTrade = TRUE; OpenLink(); gMain.state++; - sTradeData->timer = 0; + sTradeAnim->timer = 0; } else { @@ -818,10 +822,9 @@ void CB2_LinkTrade(void) } break; case 2: - sTradeData->timer++; - if (sTradeData->timer > 60) + if (++sTradeAnim->timer > 60) { - sTradeData->timer = 0; + sTradeAnim->timer = 0; gMain.state++; } break; @@ -830,8 +833,7 @@ void CB2_LinkTrade(void) { if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) { - sTradeData->timer++; - if (sTradeData->timer > 30) + if (++sTradeAnim->timer > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -849,43 +851,41 @@ void CB2_LinkTrade(void) break; case 4: CheckLinkTimeout(); - if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == 1) - { + if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) gMain.state++; - } break; case 5: - sTradeData->tradeStatus1 = 0; - sTradeData->tradeStatus2 = 0; - sTradeData->scheduleLinkTransfer = 0; - LoadTradeMonPic(0, 0); + sTradeAnim->playerFinishStatus = 0; + sTradeAnim->partnerFinishStatus = 0; + sTradeAnim->scheduleLinkTransfer = 0; + LoadTradeMonPic(TRADE_PLAYER, 0); gMain.state++; break; case 6: - LoadTradeMonPic(0, 1); + LoadTradeMonPic(TRADE_PLAYER, 1); gMain.state++; break; case 7: - LoadTradeMonPic(1, 0); + LoadTradeMonPic(TRADE_PARTNER, 0); gMain.state++; break; case 8: - LoadTradeMonPic(1, 1); + LoadTradeMonPic(TRADE_PARTNER, 1); LinkTradeDrawWindow(); gMain.state++; break; case 9: LoadTradeGbaSpriteGfx(); - LoadSpriteSheet(&sTradeBallSpriteSheet); + LoadSpriteSheet(&sPokeBallSpriteSheet); LoadSpritePalette(&sTradeBallSpritePal); gMain.state++; break; case 10: BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); ShowBg(0); - sTradeData->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_SPECIES2); - sTradeData->monSpecies[1] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_SPECIES2); - memcpy(sTradeData->linkPartnerName, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); + sTradeAnim->questLogSpecies[TRADE_PLAYER] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_SPECIES2); + sTradeAnim->questLogSpecies[TRADE_PARTNER] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_SPECIES2); + memcpy(sTradeAnim->linkPartnerName, gLinkPlayers[GetMultiplayerId() ^ 1].name, PLAYER_NAME_LENGTH); gMain.state++; break; case 11: @@ -901,7 +901,7 @@ void CB2_LinkTrade(void) LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); } - SetMainCallback2(CB2_RunTradeAnim_LinkTrade); + SetMainCallback2(CB2_UpdateLinkTrade); } break; } @@ -929,7 +929,7 @@ static void TradeAnimInit_LoadGfx(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); @@ -949,54 +949,54 @@ static void TradeAnimInit_LoadGfx(void) LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0x000, 0x20); } -static void CB2_InitTradeAnim_InGameTrade(void) +static void CB2_InitInGameTrade(void) { u8 otName[11]; switch (gMain.state) { case 0: - gSelectedTradeMonPositions[0] = gSpecialVar_0x8005; - gSelectedTradeMonPositions[1] = 6; + gSelectedTradeMonPositions[TRADE_PLAYER] = gSpecialVar_0x8005; + gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE; StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); StringCopy(gLinkPlayers[1].name, otName); - sTradeData = AllocZeroed(sizeof(*sTradeData)); + sTradeAnim = AllocZeroed(sizeof(*sTradeAnim)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); SetVBlankCallback(VBlankCB_TradeAnim); TradeAnimInit_LoadGfx(); - sTradeData->isLinkTrade = FALSE; - sTradeData->unk_8C = 0; - sTradeData->state = 0; - sTradeData->bg2texX = 64; - sTradeData->bg2texY = 64; - sTradeData->unk_D8 = 0; - sTradeData->unk_DA = 0; - sTradeData->bg2srcX = 120; - sTradeData->bg2srcY = 80; - sTradeData->sXY = 256; - sTradeData->bg2alpha = 0; - sTradeData->timer = 0; + sTradeAnim->isLinkTrade = FALSE; + sTradeAnim->neverRead_8C = 0; + sTradeAnim->state = 0; + sTradeAnim->bg2texX = 64; + sTradeAnim->bg2texY = 64; + sTradeAnim->neverRead_D8 = 0; + sTradeAnim->neverRead_DA = 0; + sTradeAnim->bg2srcX = DISPLAY_WIDTH / 2; + sTradeAnim->bg2srcY = DISPLAY_HEIGHT / 2; + sTradeAnim->sXY = 256; + sTradeAnim->bg2alpha = 0; + sTradeAnim->timer = 0; gMain.state = 5; break; case 5: - LoadTradeMonPic(0, 0); + LoadTradeMonPic(TRADE_PLAYER, 0); gMain.state++; break; case 6: - LoadTradeMonPic(0, 1); + LoadTradeMonPic(TRADE_PLAYER, 1); gMain.state++; break; case 7: - LoadTradeMonPic(1, 0); + LoadTradeMonPic(TRADE_PARTNER, 0); ShowBg(0); gMain.state++; break; case 8: - LoadTradeMonPic(1, 1); + LoadTradeMonPic(TRADE_PARTNER, 1); FillWindowPixelBuffer(0, PIXEL_FILL(15)); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_FULL); @@ -1004,7 +1004,7 @@ static void CB2_InitTradeAnim_InGameTrade(void) break; case 9: LoadTradeGbaSpriteGfx(); - LoadSpriteSheet(&sTradeBallSpriteSheet); + LoadSpriteSheet(&sPokeBallSpriteSheet); LoadSpritePalette(&sTradeBallSpritePal); gMain.state++; break; @@ -1019,7 +1019,7 @@ static void CB2_InitTradeAnim_InGameTrade(void) gMain.state++; break; case 12: - SetMainCallback2(CB2_RunTradeAnim_InGameTrade); + SetMainCallback2(CB2_InGameTrade); break; } @@ -1030,7 +1030,7 @@ static void CB2_InitTradeAnim_InGameTrade(void) UpdatePaletteFade(); } -static void ReceivedMonSetPokedexFlags(u8 partyIdx) +static void UpdatePokedexForReceivedMon(u8 partyIdx) { struct Pokemon * mon = &gPlayerParty[partyIdx]; @@ -1044,7 +1044,7 @@ static void ReceivedMonSetPokedexFlags(u8 partyIdx) } } -static void RS_TryEnableNationalPokedex(void) +static void TryEnableNationalDexFromLinkPartner(void) { u8 mpId = GetMultiplayerId(); // Originally in Ruby but commented out @@ -1064,45 +1064,44 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); // The mail attached to the sent Pokemon no longer exists in your file. - if (playerMail != 0xFF) + if (playerMail != MAIL_NONE) ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); - // This is where the actual trade happens!! - sTradeData->mon = *playerMon; - *playerMon = *partnerMon; - *partnerMon = sTradeData->mon; + SWAP(*playerMon, *partnerMon, sTradeAnim->tempMon); // By default, a Pokemon received from a trade will have 70 Friendship. + // Eggs use Friendship to track egg cycles, so don't set this on Eggs. friendship = 70; if (!GetMonData(playerMon, MON_DATA_IS_EGG)) SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); // Associate your partner's mail with the Pokemon they sent over. - if (partnerMail != 0xFF) + if (partnerMail != MAIL_NONE) GiveMailToMon2(playerMon, &gLinkPartnerMail[partnerMail]); - ReceivedMonSetPokedexFlags(playerPartyIdx); + UpdatePokedexForReceivedMon(playerPartyIdx); if (gReceivedRemoteLinkPlayers) - RS_TryEnableNationalPokedex(); + TryEnableNationalDexFromLinkPartner(); } static void HandleLinkDataSend(void) { - switch (sTradeData->scheduleLinkTransfer) + switch (sTradeAnim->scheduleLinkTransfer) { case 1: if (IsLinkTaskFinished()) { - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, 20); - sTradeData->scheduleLinkTransfer++; + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeAnim->linkData, sizeof(sTradeAnim->linkData)); + sTradeAnim->scheduleLinkTransfer++; } + // fallthrough case 2: - sTradeData->scheduleLinkTransfer = 0; + sTradeAnim->scheduleLinkTransfer = 0; break; } } -static void CB2_RunTradeAnim_InGameTrade(void) +static void CB2_InGameTrade(void) { DoTradeAnim(); RunTasks(); @@ -1117,8 +1116,8 @@ static void SetTradeSequenceBgGpuRegs(u8 state) switch (state) { case 0: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 0xB4; + sTradeAnim->bg2vofs = 0; + sTradeAnim->bg2hofs = 0xB4; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); LoadPalette(gTradeGba2_Pal, 0x10, 0x60); @@ -1126,12 +1125,12 @@ static void SetTradeSequenceBgGpuRegs(u8 state) DmaCopy16Defvars(3, gTradeOrHatchMonShadowTilemap, (void *)BG_SCREEN_ADDR(18), 0x1000); break; case 1: - sTradeData->bg1hofs = 0; - sTradeData->bg1vofs = 0x15C; + sTradeAnim->bg1hofs = 0; + sTradeAnim->bg1vofs = 0x15C; SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); - if (sTradeData->isCableTrade) + if (sTradeAnim->isCableTrade) { DmaCopy16Defvars(3, sGbaMapCable, (void *)BG_SCREEN_ADDR(5), 0x1000); } @@ -1143,18 +1142,18 @@ static void SetTradeSequenceBgGpuRegs(u8 state) SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; case 2: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; - if (!sTradeData->isCableTrade) + sTradeAnim->bg1vofs = 0; + sTradeAnim->bg1hofs = 0; + if (!sTradeAnim->isCableTrade) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - LZ77UnCompVram(sWirelessCloseupMap, (void *)BG_SCREEN_ADDR(5)); + LZ77UnCompVram(sWirelessCloseup_Map, (void *)BG_SCREEN_ADDR(5)); BlendPalettes(0x000000008, 0x10, RGB_BLACK); } else { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - DmaCopy16Defvars(3, sCableCloseupMap, (void *)BG_SCREEN_ADDR(5), 0x800); + DmaCopy16Defvars(3, sCableCloseup_Map, (void *)BG_SCREEN_ADDR(5), 0x800); BlendPalettes(0x00000001, 0x10, RGB_BLACK); } break; @@ -1162,19 +1161,19 @@ static void SetTradeSequenceBgGpuRegs(u8 state) LoadPalette(sWirelessSignalAnimPals_Off, 0x30, 0x20); LZ77UnCompVram(sWirelessSignal4bpp, BG_CHAR_ADDR(1)); LZ77UnCompVram(sWirelessSignalTilemap, BG_SCREEN_ADDR(18)); - sTradeData->bg2vofs = 0x50; + sTradeAnim->bg2vofs = 0x50; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); break; case 4: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeData->bg2texX = 0x40; - sTradeData->bg2texY = 0x5C; - sTradeData->sXY = 0x20; - sTradeData->bg2Zoom = 0x400; - sTradeData->bg2alpha = 0; - DmaCopyLarge16(3, sGbaAffineTiles, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) + sTradeAnim->bg2texX = 0x40; + sTradeAnim->bg2texY = 0x5C; + sTradeAnim->sXY = 0x20; + sTradeAnim->bg2Zoom = 0x400; + sTradeAnim->bg2alpha = 0; + DmaCopyLarge16(3, sGbaAffine_Gfx, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeAnim->isCableTrade) { DmaCopy16Defvars(3, sGbaAffineMapCable, (void *)BG_SCREEN_ADDR(18), 0x100); } @@ -1184,21 +1183,21 @@ static void SetTradeSequenceBgGpuRegs(u8 state) } break; case 5: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; + sTradeAnim->bg1vofs = 0; + sTradeAnim->bg1hofs = 0; break; case 6: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); - sTradeData->bg2texX = 0x40; - sTradeData->bg2texY = 0x5C; - sTradeData->sXY = 0x100; - sTradeData->bg2Zoom = 0x80; - sTradeData->bg2srcX = 0x78; - sTradeData->bg2srcY = 0x50; - sTradeData->bg2alpha = 0; - DmaCopyLarge16(3, sGbaAffineTiles, BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) + sTradeAnim->bg2texX = 0x40; + sTradeAnim->bg2texY = 0x5C; + sTradeAnim->sXY = 0x100; + sTradeAnim->bg2Zoom = 0x80; + sTradeAnim->bg2srcX = 0x78; + sTradeAnim->bg2srcY = 0x50; + sTradeAnim->bg2alpha = 0; + DmaCopyLarge16(3, sGbaAffine_Gfx, BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeAnim->isCableTrade) { DmaCopy16Defvars(3, sGbaAffineMapCable, (void *)BG_SCREEN_ADDR(18), 0x100); } @@ -1208,8 +1207,8 @@ static void SetTradeSequenceBgGpuRegs(u8 state) } break; case 7: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 0; + sTradeAnim->bg2vofs = 0; + sTradeAnim->bg2hofs = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); LoadPalette(gTradeGba2_Pal, 0x10, 0x60); @@ -1221,12 +1220,12 @@ static void SetTradeSequenceBgGpuRegs(u8 state) static void LoadTradeGbaSpriteGfx(void) { - LoadSpriteSheet(&sTradeGlow1SpriteSheet); - LoadSpriteSheet(&sTradeGlow2SpriteSheet); - LoadSpriteSheet(&sTradeCableEndSpriteSheet); + LoadSpriteSheet(&sSpriteSheet_LinkMonGlow); + LoadSpriteSheet(&sSpriteSheet_LinkMonShadow); + LoadSpriteSheet(&sSpriteSheet_CableEnd); LoadSpriteSheet(&sTradeGBAScreenSpriteSheet); - LoadSpritePalette(&sTradeGlowSpritePal); - LoadSpritePalette(&sTradeGbaSpritePal); + LoadSpritePalette(&sSpritePalette_LinkMon); + LoadSpritePalette(&sSpritePalette_Gba); } static void TradeBufferOTnameAndNicknames(void) @@ -1234,13 +1233,13 @@ static void TradeBufferOTnameAndNicknames(void) u8 nickname[20]; u8 mpId; const struct InGameTrade * inGameTrade; - if (sTradeData->isLinkTrade) + if (sTradeAnim->isLinkTrade) { mpId = GetMultiplayerId(); StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); - GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_NICKNAME, nickname); + GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(gStringVar3, nickname); - GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_NICKNAME, nickname); + GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(gStringVar2, nickname); } else @@ -1253,414 +1252,478 @@ static void TradeBufferOTnameAndNicknames(void) } } +// returns TRUE if it finished a link trade, FALSE if it finished an in-game trade or if sequence is still going static bool8 DoTradeAnim(void) { - if (sTradeData->isCableTrade) + if (sTradeAnim->isCableTrade) return DoTradeAnim_Cable(); else return DoTradeAnim_Wireless(); } +// Below are the states for the main switch in DoTradeAnim_Cable and DoTradeAnim_Wireless +// When DoTradeAnim_Wireless has a unique version of a state used by DoTradeAnim_Cable, it adds the below modifier +#define STATE_WIRELESS 100 +enum { + STATE_START, + STATE_MON_SLIDE_IN, + // 2-9 unused + STATE_SEND_MSG = 10, + STATE_BYE_BYE, + STATE_POKEBALL_DEPART, + STATE_POKEBALL_DEPART_WAIT, + STATE_FADE_OUT_TO_GBA_SEND, + // 15-19 unused + STATE_WAIT_FADE_OUT_TO_GBA_SEND = 20, + STATE_FADE_IN_TO_GBA_SEND, + STATE_WAIT_FADE_IN_TO_GBA_SEND, + STATE_GBA_ZOOM_OUT, + STATE_GBA_FLASH_SEND, + STATE_GBA_STOP_FLASH_SEND, + STATE_PAN_AWAY_GBA, + STATE_CREATE_LINK_MON_LEAVING, + STATE_LINK_MON_TRAVEL_OUT, + STATE_FADE_OUT_TO_CROSSING, + STATE_WAIT_FADE_OUT_TO_CROSSING, + STATE_FADE_IN_TO_CROSSING, + STATE_WAIT_FADE_IN_TO_CROSSING, + STATE_CROSSING_LINK_MONS_ENTER, + STATE_CROSSING_BLEND_WHITE_1, + STATE_CROSSING_BLEND_WHITE_2, + STATE_CROSSING_BLEND_WHITE_3, + STATE_CROSSING_CREATE_MON_PICS, + STATE_CROSSING_MON_PICS_MOVE, + STATE_CROSSING_LINK_MONS_EXIT, + STATE_CREATE_LINK_MON_ARRIVING, + STATE_FADE_OUT_TO_GBA_RECV, + STATE_WAIT_FADE_OUT_TO_GBA_RECV, + STATE_LINK_MON_TRAVEL_IN, + STATE_PAN_TO_GBA, + STATE_DESTROY_LINK_MON, + STATE_LINK_MON_ARRIVED_DELAY, + STATE_MOVE_GBA_TO_CENTER, + STATE_GBA_FLASH_RECV, + STATE_UNUSED, + STATE_GBA_STOP_FLASH_RECV, + STATE_GBA_ZOOM_IN, + STATE_FADE_OUT_TO_NEW_MON, + // 53-59 unused + STATE_WAIT_FADE_OUT_TO_NEW_MON = 60, + STATE_FADE_IN_TO_NEW_MON, + STATE_WAIT_FADE_IN_TO_NEW_MON, + STATE_POKEBALL_ARRIVE, + STATE_FADE_POKEBALL_TO_NORMAL, + STATE_POKEBALL_ARRIVE_WAIT, + STATE_SHOW_NEW_MON, + STATE_NEW_MON_MSG, + STATE_TAKE_CARE_OF_MON, + STATE_AFTER_NEW_MON_DELAY, + STATE_CHECK_RIBBONS, + STATE_END_LINK_TRADE, + STATE_TRY_EVOLUTION, + STATE_FADE_OUT_END, + STATE_WAIT_FADE_OUT_END, + // Special states + STATE_GBA_FLASH_SEND_WIRELESS = STATE_GBA_FLASH_SEND + STATE_WIRELESS, + STATE_GBA_STOP_FLASH_SEND_WIRELESS, + STATE_WAIT_WIRELESS_SIGNAL_SEND, + STATE_PAN_TO_GBA_WIRELESS = STATE_PAN_TO_GBA + STATE_WIRELESS, + STATE_DESTROY_LINK_MON_WIRELESS, + STATE_WAIT_WIRELESS_SIGNAL_RECV, + STATE_DELAY_FOR_MON_ANIM = 167, + STATE_LINK_MON_TRAVEL_OFFSCREEN = 200, + STATE_WAIT_FOR_MON_CRY = 267, +}; + static bool8 DoTradeAnim_Cable(void) { u16 evoTarget; - switch (sTradeData->state) + switch (sTradeAnim->state) { - case 0: - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[0]].x2 = -180; - gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); + case STATE_START: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = -180; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PLAYER]].y_offset; + sTradeAnim->state++; + sTradeAnim->cachedMapMusic = GetCurrentMapMusic(); PlayNewMapMusic(MUS_EVOLUTION); break; - case 1: - if (sTradeData->bg2hofs > 0) + case STATE_MON_SLIDE_IN: + if (sTradeAnim->bg2hofs > 0) { - gSprites[sTradeData->pokePicSpriteIdxs[0]].x2 += 3; - sTradeData->bg2hofs -= 3; + // Sliding + gSprites[sTradeAnim->monSpriteIds[0]].x2 += 3; + sTradeAnim->bg2hofs -= 3; } else { - gSprites[sTradeData->pokePicSpriteIdxs[0]].x2 = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = 10; + // Pokémon has arrived onscreen + gSprites[sTradeAnim->monSpriteIds[0]].x2 = 0; + sTradeAnim->bg2hofs = 0; + sTradeAnim->state = STATE_SEND_MSG; } break; - case 10: + case STATE_SEND_MSG: StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); DrawTextOnTradeWindow(0, gStringVar4, 0); - if (sTradeData->tradeSpecies[0] != SPECIES_EGG) - { - PlayCry_Normal(sTradeData->tradeSpecies[0], 0); - } + if (sTradeAnim->monSpecies[TRADE_PLAYER] != SPECIES_EGG) + PlayCry_Normal(sTradeAnim->monSpecies[TRADE_PLAYER], 0); - sTradeData->state = 11; - sTradeData->timer = 0; + sTradeAnim->state = STATE_BYE_BYE; + sTradeAnim->timer = 0; break; - case 11: - if (++sTradeData->timer == 80) + case STATE_BYE_BYE: + if (++sTradeAnim->timer == 80) { - sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; + sTradeAnim->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeAnim->monSpriteIds[TRADE_PLAYER], gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); DrawTextOnTradeWindow(0, gStringVar4, 0); } break; - case 12: - if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + case STATE_POKEBALL_DEPART: + if (gSprites[sTradeAnim->releasePokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Outbound; - DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); - sTradeData->state++; + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; + DestroySprite(&gSprites[sTradeAnim->releasePokeballSpriteId]); + sTradeAnim->state++; } break; - case 13: + case STATE_POKEBALL_DEPART_WAIT: // The game waits here for the sprite to finish its animation sequence. break; - case 14: + case STATE_FADE_OUT_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = 20; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_GBA_SEND; break; - case 20: + case STATE_WAIT_FADE_OUT_TO_GBA_SEND: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(4); FillWindowPixelBuffer(0, PIXEL_FILL(15)); CopyWindowToVram(0, COPYWIN_FULL); - sTradeData->state++; + sTradeAnim->state++; } break; - case 21: + case STATE_FADE_IN_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case 22: + case STATE_WAIT_FADE_IN_TO_GBA_SEND: if (!gPaletteFade.active) - { - sTradeData->state = 23; - } + sTradeAnim->state = STATE_GBA_ZOOM_OUT; break; - case 23: - if (sTradeData->bg2Zoom > 0x100) + case STATE_GBA_ZOOM_OUT: + if (sTradeAnim->bg2Zoom > 0x100) { - sTradeData->bg2Zoom -= 0x34; + sTradeAnim->bg2Zoom -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->bg2Zoom = 0x80; - sTradeData->state++; - sTradeData->timer = 0; + sTradeAnim->bg2Zoom = 0x80; + sTradeAnim->state++; + sTradeAnim->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; + sTradeAnim->sXY = 0x8000 / sTradeAnim->bg2Zoom; break; - case 24: - if (++sTradeData->timer > 20) + case STATE_GBA_FLASH_SEND: + if (++sTradeAnim->timer > 20) { SetTradeBGAffine(); - sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); + sTradeAnim->state++; } break; - case 25: - if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) + case STATE_GBA_STOP_FLASH_SEND: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); - sTradeData->state++; + sTradeAnim->state++; } break; - case 26: - if (--sTradeData->bg1vofs == 316) - { - sTradeData->state++; - } - if (sTradeData->bg1vofs == 328) - { - sTradeData->linkCableEndSpriteId = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); - } + case STATE_PAN_AWAY_GBA: + if (--sTradeAnim->bg1vofs == 316) + sTradeAnim->state++; + + if (sTradeAnim->bg1vofs == 328) + sTradeAnim->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); break; - case 27: - sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, 80, 3); - sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); - sTradeData->state++; + case STATE_CREATE_LINK_MON_LEAVING: + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, 80, 3); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->state++; break; - case 28: - if ((sTradeData->bg1vofs -= 2) == 166) - { - sTradeData->state = 200; - } + case STATE_LINK_MON_TRAVEL_OUT: + if ((sTradeAnim->bg1vofs -= 2) == 166) + sTradeAnim->state = STATE_LINK_MON_TRAVEL_OFFSCREEN; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; - case 200: - gSprites[sTradeData->tradeGlow1SpriteId].y -= 2; - gSprites[sTradeData->gbaScreenSpriteId].y -= 2; - if (gSprites[sTradeData->tradeGlow1SpriteId].y < -8) - { - sTradeData->state = 29; - } + case STATE_LINK_MON_TRAVEL_OFFSCREEN: + gSprites[sTradeAnim->connectionSpriteId1].y -= 2; + gSprites[sTradeAnim->connectionSpriteId2].y -= 2; + if (gSprites[sTradeAnim->connectionSpriteId1].y < -8) + sTradeAnim->state = STATE_FADE_OUT_TO_CROSSING; break; - case 29: + case STATE_FADE_OUT_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state = 30; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_CROSSING; break; - case 30: + case STATE_WAIT_FADE_OUT_TO_CROSSING: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; + sTradeAnim->state++; } break; - case 31: + case STATE_FADE_IN_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); + sTradeAnim->state++; break; - case 32: + case STATE_WAIT_FADE_IN_TO_CROSSING: if (!gPaletteFade.active) { PlaySE(SE_WARP_OUT); - sTradeData->state++; + sTradeAnim->state++; } - gSprites[sTradeData->tradeGlow1SpriteId].y2 -= 3; - gSprites[sTradeData->gbaScreenSpriteId].y2 += 3; + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; break; - case 33: - gSprites[sTradeData->tradeGlow1SpriteId].y2 -= 3; - gSprites[sTradeData->gbaScreenSpriteId].y2 += 3; - if (gSprites[sTradeData->tradeGlow1SpriteId].y2 <= -90) + case STATE_CROSSING_LINK_MONS_ENTER: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -90) { - gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; - gSprites[sTradeData->gbaScreenSpriteId].data[1] = 1; - sTradeData->state++; + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 1; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 1; + sTradeAnim->state++; } break; - case 34: + case STATE_CROSSING_BLEND_WHITE_1: BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case 35: + case STATE_CROSSING_BLEND_WHITE_2: BlendPalettes(0x1, 0, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case 36: + case STATE_CROSSING_BLEND_WHITE_3: BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case 37: - if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + case STATE_CROSSING_CREATE_MON_PICS: + if (!IsMonSpriteNotFlipped(sTradeAnim->monSpecies[TRADE_PLAYER])) { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt; - gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; - CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + CalcCenterToCornerVec(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } else { - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - gSprites[sTradeData->pokePicSpriteIdxs[0]].x = 60; - gSprites[sTradeData->pokePicSpriteIdxs[1]].x = 180; - gSprites[sTradeData->pokePicSpriteIdxs[0]].y = 192; - gSprites[sTradeData->pokePicSpriteIdxs[1]].y = -32; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; - sTradeData->state++; + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x = 60; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 180; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y = 192; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = -32; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; + sTradeAnim->state++; break; - case 38: - gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 -= 3; - gSprites[sTradeData->pokePicSpriteIdxs[1]].y2 += 3; - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 >= -163) + case STATE_CROSSING_MON_PICS_MOVE: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 += 3; + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT + && gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) { PlaySE(SE_WARP_IN); } - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 < -222) + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -222) { - gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; - gSprites[sTradeData->gbaScreenSpriteId].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 0; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 0; + sTradeAnim->state++; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; BlendPalettes(0x1, 0, RGB_WHITEALPHA); } break; - case 39: - gSprites[sTradeData->tradeGlow1SpriteId].y2 -= 3; - gSprites[sTradeData->gbaScreenSpriteId].y2 += 3; - if (gSprites[sTradeData->tradeGlow1SpriteId].y2 <= -222) + case STATE_CROSSING_LINK_MONS_EXIT: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -222) { BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); + sTradeAnim->state++; + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); } break; - case 40: + case STATE_CREATE_LINK_MON_ARRIVING: if (!gPaletteFade.active) { - sTradeData->state++; + sTradeAnim->state++; SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; - sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, -20, 3); - sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); + sTradeAnim->bg1vofs = 166; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, -20, 3); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); } break; - case 41: + case STATE_FADE_OUT_TO_GBA_RECV: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case 42: + case STATE_WAIT_FADE_OUT_TO_GBA_RECV: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) + sTradeAnim->state++; + break; + case STATE_LINK_MON_TRAVEL_IN: + gSprites[sTradeAnim->connectionSpriteId1].y2 += 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 + gSprites[sTradeAnim->connectionSpriteId1].y == 64) + sTradeAnim->state++; + break; + case STATE_PAN_TO_GBA: + if ((sTradeAnim->bg1vofs += 2) > 316) { - sTradeData->state++; + sTradeAnim->bg1vofs = 316; + sTradeAnim->state++; } break; - case 43: - gSprites[sTradeData->tradeGlow1SpriteId].y2 += 3; - gSprites[sTradeData->gbaScreenSpriteId].y2 += 3; - if (gSprites[sTradeData->tradeGlow1SpriteId].y2 + gSprites[sTradeData->tradeGlow1SpriteId].y == 64) + case STATE_DESTROY_LINK_MON: + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); + sTradeAnim->state++; + sTradeAnim->timer = 0; + break; + case STATE_LINK_MON_ARRIVED_DELAY: + if (++sTradeAnim->timer == 10) + sTradeAnim->state++; + break; + case STATE_MOVE_GBA_TO_CENTER: + if (++sTradeAnim->bg1vofs > 348) { - sTradeData->state++; + sTradeAnim->bg1vofs = 348; + sTradeAnim->state++; + } + if (sTradeAnim->bg1vofs == 328 && sTradeAnim->isCableTrade) + { + sTradeAnim->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); + gSprites[sTradeAnim->cableEndSpriteId].callback = SpriteCB_CableEndReceiving; } break; - case 44: - if ((sTradeData->bg1vofs += 2) > 316) - { - sTradeData->bg1vofs = 316; - sTradeData->state++; - } + case STATE_GBA_FLASH_RECV: + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); + sTradeAnim->state = STATE_GBA_STOP_FLASH_RECV; break; - case 45: - DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); - sTradeData->state++; - sTradeData->timer = 0; - break; - case 46: - if (++sTradeData->timer == 10) + case STATE_GBA_STOP_FLASH_RECV: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - sTradeData->state++; - } - break; - case 47: - if (++sTradeData->bg1vofs > 348) - { - sTradeData->bg1vofs = 348; - sTradeData->state++; - } - if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) - { - sTradeData->linkCableEndSpriteId = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); - gSprites[sTradeData->linkCableEndSpriteId].callback = SpriteCB_GameLinkCableEnd_Inbound; - } - break; - case 48: - sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); - sTradeData->state = 50; - break; - case 50: - if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) - { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; + sTradeAnim->state++; PlaySE(SE_M_SAND_ATTACK); } break; - case 51: - if (sTradeData->bg2Zoom < 0x400) + case STATE_GBA_ZOOM_IN: + if (sTradeAnim->bg2Zoom < 0x400) { - sTradeData->bg2Zoom += 0x34; + sTradeAnim->bg2Zoom += 0x34; } else { - sTradeData->bg2Zoom = 0x400; - sTradeData->state++; + sTradeAnim->bg2Zoom = 0x400; + sTradeAnim->state++; } - sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; + sTradeAnim->sXY = 0x8000 / sTradeAnim->bg2Zoom; break; - case 52: + case STATE_FADE_OUT_TO_NEW_MON: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = 60; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_NEW_MON; break; - case 60: + case STATE_WAIT_FADE_OUT_TO_NEW_MON: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(5); SetTradeSequenceBgGpuRegs(7); gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; + sTradeAnim->state++; } break; - case 61: + case STATE_FADE_IN_TO_NEW_MON: gPaletteFade.bufferTransferDisabled = FALSE; BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case 62: + case STATE_WAIT_FADE_IN_TO_NEW_MON: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) { - sTradeData->state++; + sTradeAnim->state++; } break; - case 63: - sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->pokeballSpriteId2].data[3] = 74; - gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->pokeballSpriteId2], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->pokeballSpriteId2], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_POKEBALL_ARRIVE: + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].data[3] = 74; + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; + StartSpriteAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 2); + BlendPalettes(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeAnim->state++; + sTradeAnim->timer = 0; break; - case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; + case STATE_FADE_POKEBALL_TO_NORMAL: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeAnim->state++; break; - case 65: - if (gSprites[sTradeData->pokeballSpriteId2].callback == SpriteCallbackDummy) + case STATE_POKEBALL_ARRIVE_WAIT: + if (gSprites[sTradeAnim->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) { - HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); - sTradeData->state++; + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeAnim->monSpecies[TRADE_PARTNER]], + gMonSpritesGfxPtr->sprites[B_POSITION_OPPONENT_RIGHT], + sTradeAnim->monSpecies[TRADE_PARTNER], + sTradeAnim->monPersonalities[TRADE_PARTNER]); + sTradeAnim->state++; } break; - case 66: - gSprites[sTradeData->pokePicSpriteIdxs[1]].x = 120; - gSprites[sTradeData->pokePicSpriteIdxs[1]].y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; - gSprites[sTradeData->pokePicSpriteIdxs[1]].x2 = 0; - gSprites[sTradeData->pokePicSpriteIdxs[1]].y2 = 0; - StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->pokeballSpriteId2]); - DestroySprite(&gSprites[sTradeData->pokeballSpriteId2]); - sTradeData->state++; + case STATE_SHOW_NEW_MON: + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 120; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PARTNER]].y_offset + 60; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x2 = 0; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 = 0; + StartSpriteAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + CreatePokeballSpriteToReleaseMon(sTradeAnim->monSpriteIds[TRADE_PARTNER], gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + DestroySprite(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + sTradeAnim->state++; break; - case 67: + case STATE_NEW_MON_MSG: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | @@ -1668,86 +1731,72 @@ static bool8 DoTradeAnim_Cable(void) DISPCNT_OBJ_ON); StringExpandPlaceholders(gStringVar4, gText_XSentOverY); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = 167; - sTradeData->timer = 0; + sTradeAnim->state = STATE_DELAY_FOR_MON_ANIM; + sTradeAnim->timer = 0; break; - // 167 and 267 are extra cases added in for animations - case 167: - if (++sTradeData->timer > 60) + case STATE_DELAY_FOR_MON_ANIM: + if (++sTradeAnim->timer > 60) { - if (sTradeData->tradeSpecies[1] != SPECIES_EGG) - { - PlayCry_Normal(sTradeData->tradeSpecies[1], 0); - } - sTradeData->state = 267; - sTradeData->timer = 0; + if (sTradeAnim->monSpecies[TRADE_PARTNER] != SPECIES_EGG) + PlayCry_Normal(sTradeAnim->monSpecies[TRADE_PARTNER], 0); + sTradeAnim->state = STATE_WAIT_FOR_MON_CRY; + sTradeAnim->timer = 0; } break; - case 267: + case STATE_WAIT_FOR_MON_CRY: if (IsCryFinished()) - { - sTradeData->state = 68; - } + sTradeAnim->state = STATE_TAKE_CARE_OF_MON; break; - case 68: - if (++sTradeData->timer == 10) - { + case STATE_TAKE_CARE_OF_MON: + if (++sTradeAnim->timer == 10) PlayFanfare(MUS_EVOLVED); - } - if (sTradeData->timer == 250) + + if (sTradeAnim->timer == 250) { - sTradeData->state++; + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; + sTradeAnim->timer = 0; } break; - case 69: - if (++sTradeData->timer == 60) - { - sTradeData->state++; - } + case STATE_AFTER_NEW_MON_DELAY: + if (++sTradeAnim->timer == 60) + sTradeAnim->state++; break; - case 70: + case STATE_CHECK_RIBBONS: CheckPartnersMonForRibbons(); - sTradeData->state++; + sTradeAnim->state++; break; - case 71: - if (sTradeData->isLinkTrade) - { + case STATE_END_LINK_TRADE: + if (sTradeAnim->isLinkTrade) return TRUE; - } else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } + sTradeAnim->state++; break; - case 72: // Only if in-game trade + case STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], EVO_MODE_TRADE, ITEM_NONE); + gCB2_AfterEvolution = CB2_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE); if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); - } - sTradeData->state++; + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[1], gSelectedTradeMonPositions[TRADE_PLAYER]); + sTradeAnim->state++; break; - case 73: + case STATE_FADE_OUT_END: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case 74: + case STATE_WAIT_FADE_OUT_END: if (!gPaletteFade.active) { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) + PlayNewMapMusic(sTradeAnim->cachedMapMusic); + if (sTradeAnim) { FreeAllWindowBuffers(); Free(GetBgTilemapBuffer(3)); Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); + FREE_AND_SET_NULL(sTradeAnim); } SetMainCallback2(CB2_ReturnToField); BufferInGameTradeMonName(); @@ -1758,430 +1807,423 @@ static bool8 DoTradeAnim_Cable(void) return FALSE; } +// Task data for Task_AnimateWirelessSignal +#define tIdx data[0] +#define tCounter data[1] +#define tSignalComingBack data[2] + static bool8 DoTradeAnim_Wireless(void) { u16 evoTarget; - switch (sTradeData->state) + switch (sTradeAnim->state) { - case 0: - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[0]].x2 = -180; - gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); + case STATE_START: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = -180; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PLAYER]].y_offset; + sTradeAnim->state++; + sTradeAnim->cachedMapMusic = GetCurrentMapMusic(); PlayNewMapMusic(MUS_EVOLUTION); break; - case 1: - if (sTradeData->bg2hofs > 0) + case STATE_MON_SLIDE_IN: + if (sTradeAnim->bg2hofs > 0) { - gSprites[sTradeData->pokePicSpriteIdxs[0]].x2 += 3; - sTradeData->bg2hofs -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 += 3; + sTradeAnim->bg2hofs -= 3; } else { - gSprites[sTradeData->pokePicSpriteIdxs[0]].x2 = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = 10; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = 0; + sTradeAnim->bg2hofs = 0; + sTradeAnim->state = STATE_SEND_MSG; } break; - case 10: + case STATE_SEND_MSG: StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); DrawTextOnTradeWindow(0, gStringVar4, 0); - if (sTradeData->tradeSpecies[0] != SPECIES_EGG) - { - PlayCry_Normal(sTradeData->tradeSpecies[0], 0); - } + if (sTradeAnim->monSpecies[TRADE_PLAYER] != SPECIES_EGG) + PlayCry_Normal(sTradeAnim->monSpecies[TRADE_PLAYER], 0); - sTradeData->state = 11; - sTradeData->timer = 0; + sTradeAnim->state = STATE_BYE_BYE; + sTradeAnim->timer = 0; break; - case 11: - if (++sTradeData->timer == 80) + case STATE_BYE_BYE: + if (++sTradeAnim->timer == 80) { - sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; + sTradeAnim->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeAnim->monSpriteIds[TRADE_PLAYER], gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); DrawTextOnTradeWindow(0, gStringVar4, 0); } break; - case 12: - if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + case STATE_POKEBALL_DEPART: + if (gSprites[sTradeAnim->releasePokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Outbound; - DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); - sTradeData->state++; + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; + DestroySprite(&gSprites[sTradeAnim->releasePokeballSpriteId]); + sTradeAnim->state++; } break; - case 13: + case STATE_POKEBALL_DEPART_WAIT: // The game waits here for the sprite to finish its animation sequence. break; - case 14: + case STATE_FADE_OUT_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = 20; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_GBA_SEND; break; - case 20: + case STATE_WAIT_FADE_OUT_TO_GBA_SEND: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(4); FillWindowPixelBuffer(0, PIXEL_FILL(15)); CopyWindowToVram(0, COPYWIN_FULL); - sTradeData->state++; + sTradeAnim->state++; } break; - case 21: + case STATE_FADE_IN_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case 22: + case STATE_WAIT_FADE_IN_TO_GBA_SEND: if (!gPaletteFade.active) - { - sTradeData->state = 23; - } + sTradeAnim->state = STATE_GBA_ZOOM_OUT; break; - case 23: - if (sTradeData->bg2Zoom > 0x100) + case STATE_GBA_ZOOM_OUT: + if (sTradeAnim->bg2Zoom > 0x100) { - sTradeData->bg2Zoom -= 0x34; + sTradeAnim->bg2Zoom -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->bg2Zoom = 0x80; - sTradeData->state = 124; - sTradeData->timer = 0; + sTradeAnim->bg2Zoom = 0x80; + sTradeAnim->state = STATE_GBA_FLASH_SEND_WIRELESS; + sTradeAnim->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; + sTradeAnim->sXY = 0x8000 / sTradeAnim->bg2Zoom; break; - case 124: - if (++sTradeData->timer > 20) + case STATE_GBA_FLASH_SEND_WIRELESS: + if (++sTradeAnim->timer > 20) { SetTradeSequenceBgGpuRegs(3); - sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate2, 120, 80, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Short, 120, 80, 0); + sTradeAnim->state++; } break; - case 125: - if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) + case STATE_GBA_STOP_FLASH_SEND_WIRELESS: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG2); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); + + // Start wireless signal effect CreateTask(Task_AnimateWirelessSignal, 5); - sTradeData->state++; + sTradeAnim->state++; } break; - case 126: + case STATE_WAIT_WIRELESS_SIGNAL_SEND: if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) - { - sTradeData->state = 26; - } + sTradeAnim->state = STATE_PAN_AWAY_GBA; break; - case 26: - if (--sTradeData->bg1vofs == 316) - { - sTradeData->state++; - } + case STATE_PAN_AWAY_GBA: + if (--sTradeAnim->bg1vofs == 316) + sTradeAnim->state++; break; - case 27: - sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, 80, 3); - gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; - sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); - sTradeData->state++; + case STATE_CREATE_LINK_MON_LEAVING: + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, 80, 3); + gSprites[sTradeAnim->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->state++; break; - case 28: - if ((sTradeData->bg1vofs -= 3) == 166) - { - sTradeData->state = 200; - } + case STATE_LINK_MON_TRAVEL_OUT: + if ((sTradeAnim->bg1vofs -= 3) == 166) + sTradeAnim->state = STATE_LINK_MON_TRAVEL_OFFSCREEN; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; - case 200: - gSprites[sTradeData->tradeGlow1SpriteId].y -= 2; - gSprites[sTradeData->gbaScreenSpriteId].y -= 2; - if (gSprites[sTradeData->tradeGlow1SpriteId].y < -8) - { - sTradeData->state = 29; - } + case STATE_LINK_MON_TRAVEL_OFFSCREEN: + gSprites[sTradeAnim->connectionSpriteId1].y -= 2; + gSprites[sTradeAnim->connectionSpriteId2].y -= 2; + if (gSprites[sTradeAnim->connectionSpriteId1].y < -8) + sTradeAnim->state = STATE_FADE_OUT_TO_CROSSING; break; - case 29: + case STATE_FADE_OUT_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state = 30; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_CROSSING; break; - case 30: + case STATE_WAIT_FADE_OUT_TO_CROSSING: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; + sTradeAnim->state++; } break; - case 31: + case STATE_FADE_IN_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); + sTradeAnim->state++; break; - case 32: + case STATE_WAIT_FADE_IN_TO_CROSSING: if (!gPaletteFade.active) { PlaySE(SE_WARP_OUT); - sTradeData->state++; + sTradeAnim->state++; } - gSprites[sTradeData->tradeGlow1SpriteId].y2 -= 3; - gSprites[sTradeData->gbaScreenSpriteId].y2 += 3; + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; break; - case 33: - gSprites[sTradeData->tradeGlow1SpriteId].y2 -= 3; - gSprites[sTradeData->gbaScreenSpriteId].y2 += 3; - if (gSprites[sTradeData->tradeGlow1SpriteId].y2 <= -90) + case STATE_CROSSING_LINK_MONS_ENTER: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -90) { - gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; - gSprites[sTradeData->gbaScreenSpriteId].data[1] = 1; - sTradeData->state++; + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 1; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 1; + sTradeAnim->state++; CreateTask(Task_OpenCenterWhiteColumn, 5); } break; - case 34: + case STATE_CROSSING_BLEND_WHITE_1: BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case 35: + case STATE_CROSSING_BLEND_WHITE_2: BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case 36: + case STATE_CROSSING_BLEND_WHITE_3: BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case 37: - if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + case STATE_CROSSING_CREATE_MON_PICS: + if (!IsMonSpriteNotFlipped(sTradeAnim->monSpecies[TRADE_PLAYER])) { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt; - gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; - CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + CalcCenterToCornerVec(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } else { - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - gSprites[sTradeData->pokePicSpriteIdxs[0]].x = 40; - gSprites[sTradeData->pokePicSpriteIdxs[1]].x = 200; - gSprites[sTradeData->pokePicSpriteIdxs[0]].y = 192; - gSprites[sTradeData->pokePicSpriteIdxs[1]].y = -32; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; - sTradeData->state++; + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x = 40; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 200; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y = 192; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = -32; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; + sTradeAnim->state++; break; - case 38: - gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 -= 3; - gSprites[sTradeData->pokePicSpriteIdxs[1]].y2 += 3; - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 >= -163) + case STATE_CROSSING_MON_PICS_MOVE: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 += 3; + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT + && gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) { PlaySE(SE_WARP_IN); } - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].y2 < -222) + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -222) { - gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; - gSprites[sTradeData->gbaScreenSpriteId].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 0; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 0; + sTradeAnim->state++; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; CreateTask(Task_CloseCenterWhiteColumn, 5); } break; - case 39: - gSprites[sTradeData->tradeGlow1SpriteId].y2 -= 3; - gSprites[sTradeData->gbaScreenSpriteId].y2 += 3; - if (gSprites[sTradeData->tradeGlow1SpriteId].y2 <= -222) + case STATE_CROSSING_LINK_MONS_EXIT: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -222) { BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); + sTradeAnim->state++; + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); } break; - case 40: + case STATE_CREATE_LINK_MON_ARRIVING: if (!gPaletteFade.active) { - sTradeData->state++; + sTradeAnim->state++; SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; + sTradeAnim->bg1vofs = 166; SetTradeSequenceBgGpuRegs(3); - sTradeData->bg2vofs = 412; - sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, -20, 3); - gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; - sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); + sTradeAnim->bg2vofs = 412; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, -20, 3); + gSprites[sTradeAnim->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], 1); } break; - case 41: + case STATE_FADE_OUT_TO_GBA_RECV: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case 42: + case STATE_WAIT_FADE_OUT_TO_GBA_RECV: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) + sTradeAnim->state++; + break; + case STATE_LINK_MON_TRAVEL_IN: + gSprites[sTradeAnim->connectionSpriteId1].y2 += 4; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 4; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 + gSprites[sTradeAnim->connectionSpriteId1].y == 64) { - sTradeData->state++; + sTradeAnim->state = STATE_PAN_TO_GBA_WIRELESS; + sTradeAnim->timer = 0; } break; - case 43: - gSprites[sTradeData->tradeGlow1SpriteId].y2 += 4; - gSprites[sTradeData->gbaScreenSpriteId].y2 += 4; - if (gSprites[sTradeData->tradeGlow1SpriteId].y2 + gSprites[sTradeData->tradeGlow1SpriteId].y == 64) - { - sTradeData->state = 144; - sTradeData->timer = 0; - } - break; - case 144: + case STATE_PAN_TO_GBA_WIRELESS: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - sTradeData->bg1vofs += 3; - sTradeData->bg2vofs += 3; - if (++sTradeData->timer == 10) + sTradeAnim->bg1vofs += 3; + sTradeAnim->bg2vofs += 3; + if (++sTradeAnim->timer == 10) { u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); - gTasks[taskId].data[2] = TRUE; + gTasks[taskId].tSignalComingBack = TRUE; } - if (sTradeData->bg1vofs > 316) + if (sTradeAnim->bg1vofs > 316) { - sTradeData->bg1vofs = 316; - sTradeData->state++; + sTradeAnim->bg1vofs = 316; + sTradeAnim->state++; } break; - case 145: - DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_DESTROY_LINK_MON_WIRELESS: + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); + sTradeAnim->state++; + sTradeAnim->timer = 0; break; - case 146: + case STATE_WAIT_WIRELESS_SIGNAL_RECV: if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) { - sTradeData->state = 46; - sTradeData->timer = 0; + sTradeAnim->state = STATE_LINK_MON_ARRIVED_DELAY; + sTradeAnim->timer = 0; } break; - case 46: - if (++sTradeData->timer == 10) + case STATE_LINK_MON_ARRIVED_DELAY: + if (++sTradeAnim->timer == 10) + sTradeAnim->state++; + break; + case STATE_MOVE_GBA_TO_CENTER: + if (++sTradeAnim->bg1vofs > 348) { - sTradeData->state++; + sTradeAnim->bg1vofs = 348; + sTradeAnim->state++; } break; - case 47: - if (++sTradeData->bg1vofs > 348) - { - sTradeData->bg1vofs = 348; - sTradeData->state++; - } + case STATE_GBA_FLASH_RECV: + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); + sTradeAnim->state = STATE_GBA_STOP_FLASH_RECV; break; - case 48: - sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); - sTradeData->state = 50; - break; - case 50: - if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) + case STATE_GBA_STOP_FLASH_RECV: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; + sTradeAnim->state++; PlaySE(SE_M_SAND_ATTACK); } break; - case 51: - if (sTradeData->bg2Zoom < 0x400) + case STATE_GBA_ZOOM_IN: + if (sTradeAnim->bg2Zoom < 0x400) { - sTradeData->bg2Zoom += 0x34; + sTradeAnim->bg2Zoom += 0x34; } else { - sTradeData->bg2Zoom = 0x400; - sTradeData->state++; + sTradeAnim->bg2Zoom = 0x400; + sTradeAnim->state++; } - sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; + sTradeAnim->sXY = 0x8000 / sTradeAnim->bg2Zoom; break; - case 52: + case STATE_FADE_OUT_TO_NEW_MON: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = 60; + sTradeAnim->state = 60; break; - - case 60: + case STATE_WAIT_FADE_OUT_TO_NEW_MON: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(5); SetTradeSequenceBgGpuRegs(7); gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; + sTradeAnim->state++; } break; - case 61: + case STATE_FADE_IN_TO_NEW_MON: gPaletteFade.bufferTransferDisabled = FALSE; BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case 62: + case STATE_WAIT_FADE_IN_TO_NEW_MON: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) + sTradeAnim->state++; + break; + case STATE_POKEBALL_ARRIVE: + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].data[3] = 74; + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; + StartSpriteAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 2); + BlendPalettes(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeAnim->state++; + sTradeAnim->timer = 0; + break; + case STATE_FADE_POKEBALL_TO_NORMAL: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeAnim->state++; + break; + case STATE_POKEBALL_ARRIVE_WAIT: + if (gSprites[sTradeAnim->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->state++; + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeAnim->monSpecies[TRADE_PARTNER]], + gMonSpritesGfxPtr->sprites[B_POSITION_OPPONENT_RIGHT], + sTradeAnim->monSpecies[TRADE_PARTNER], + sTradeAnim->monPersonalities[TRADE_PARTNER]); + sTradeAnim->state++; } break; - case 63: - sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->pokeballSpriteId2].data[3] = 74; - gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->pokeballSpriteId2], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->pokeballSpriteId2], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_SHOW_NEW_MON: + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 120; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PARTNER]].y_offset + 60; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x2 = 0; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 = 0; + StartSpriteAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + CreatePokeballSpriteToReleaseMon(sTradeAnim->monSpriteIds[TRADE_PARTNER], gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + DestroySprite(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + sTradeAnim->state++; break; - case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 65: - if (gSprites[sTradeData->pokeballSpriteId2].callback == SpriteCallbackDummy) - { - HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); - sTradeData->state++; - } - break; - case 66: - gSprites[sTradeData->pokePicSpriteIdxs[1]].x = 120; - gSprites[sTradeData->pokePicSpriteIdxs[1]].y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; - gSprites[sTradeData->pokePicSpriteIdxs[1]].x2 = 0; - gSprites[sTradeData->pokePicSpriteIdxs[1]].y2 = 0; - StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->pokeballSpriteId2]); - DestroySprite(&gSprites[sTradeData->pokeballSpriteId2]); - sTradeData->state++; - break; - case 67: + case STATE_NEW_MON_MSG: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | @@ -2189,86 +2231,72 @@ static bool8 DoTradeAnim_Wireless(void) DISPCNT_OBJ_ON); StringExpandPlaceholders(gStringVar4, gText_XSentOverY); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = 167; - sTradeData->timer = 0; + sTradeAnim->state = STATE_DELAY_FOR_MON_ANIM; + sTradeAnim->timer = 0; break; - // 167 and 267 are extra cases added in for animations - case 167: - if (++sTradeData->timer > 60) + case STATE_DELAY_FOR_MON_ANIM: + if (++sTradeAnim->timer > 60) { - if (sTradeData->tradeSpecies[1] != SPECIES_EGG) - { - PlayCry_Normal(sTradeData->tradeSpecies[1], 0); - } - sTradeData->state = 267; - sTradeData->timer = 0; + if (sTradeAnim->monSpecies[TRADE_PARTNER] != SPECIES_EGG) + PlayCry_Normal(sTradeAnim->monSpecies[TRADE_PARTNER], 0); + sTradeAnim->state = STATE_WAIT_FOR_MON_CRY; + sTradeAnim->timer = 0; } break; - case 267: + case STATE_WAIT_FOR_MON_CRY: if (IsCryFinished()) - { - sTradeData->state = 68; - } + sTradeAnim->state = STATE_TAKE_CARE_OF_MON; break; - case 68: - if (++sTradeData->timer == 10) - { + case STATE_TAKE_CARE_OF_MON: + if (++sTradeAnim->timer == 10) PlayFanfare(MUS_EVOLVED); - } - if (sTradeData->timer == 250) + + if (sTradeAnim->timer == 250) { - sTradeData->state++; + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; + sTradeAnim->timer = 0; } break; - case 69: - if (++sTradeData->timer == 60) - { - sTradeData->state++; - } + case STATE_AFTER_NEW_MON_DELAY: + if (++sTradeAnim->timer == 60) + sTradeAnim->state++; break; - case 70: + case STATE_CHECK_RIBBONS: CheckPartnersMonForRibbons(); - sTradeData->state++; + sTradeAnim->state++; break; - case 71: - if (sTradeData->isLinkTrade) - { + case STATE_END_LINK_TRADE: + if (sTradeAnim->isLinkTrade) return TRUE; - } else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } + sTradeAnim->state++; break; - case 72: // Only if in-game trade + case STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], EVO_MODE_TRADE, ITEM_NONE); + gCB2_AfterEvolution = CB2_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE); if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); - } - sTradeData->state++; + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); + sTradeAnim->state++; break; - case 73: + case STATE_FADE_OUT_END: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case 74: + case STATE_WAIT_FADE_OUT_END: if (!gPaletteFade.active) { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) + PlayNewMapMusic(sTradeAnim->cachedMapMusic); + if (sTradeAnim) { FreeAllWindowBuffers(); Free(GetBgTilemapBuffer(3)); Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); + FREE_AND_SET_NULL(sTradeAnim); } SetMainCallback2(CB2_ReturnToField); BufferInGameTradeMonName(); @@ -2279,7 +2307,9 @@ static bool8 DoTradeAnim_Wireless(void) return FALSE; } -static void CB2_TryEvolveAfterTrade(void) +// Try to evolve a Pokémon received in a link trade +// In-game trades resolve evolution during the trade sequence, in STATE_TRY_EVOLUTION +static void CB2_TryLinkTradeEvolution(void) { u16 evoSpecies; switch (gMain.state) @@ -2289,13 +2319,13 @@ static void CB2_TryEvolveAfterTrade(void) gSoftResetDisabled = TRUE; break; case 4: - gCB2_AfterEvolution = CB2_HandleTradeEnded; - evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], EVO_MODE_TRADE, 0); + gCB2_AfterEvolution = CB2_SaveAndEndTrade; + evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, 0); if (evoSpecies != SPECIES_NONE) - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoSpecies, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoSpecies, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); else - SetMainCallback2(CB2_HandleTradeEnded); - gSelectedTradeMonPositions[0] = 0xFF; + SetMainCallback2(CB2_SaveAndEndTrade); + gSelectedTradeMonPositions[TRADE_PLAYER] = 0xFF; break; } if (!HasLinkErrorOccurred()) @@ -2308,25 +2338,25 @@ static void CB2_TryEvolveAfterTrade(void) static void HandleLinkDataReceive(void) { u8 recvStatus; - GetMultiplayerIdOfLinkTrade(); + TradeGetMultiplayerId(); // no effect call, ret val ignored recvStatus = GetBlockReceivedStatus(); if (recvStatus & (1 << 0)) { - if (gBlockRecvBuffer[0][0] == 0xDCBA) - SetMainCallback2(CB2_TryEvolveAfterTrade); - if (gBlockRecvBuffer[0][0] == 0xABCD) - sTradeData->tradeStatus1 = 1; + if (gBlockRecvBuffer[0][0] == LINKCMD_CONFIRM_FINISH_TRADE) + SetMainCallback2(CB2_TryLinkTradeEvolution); + if (gBlockRecvBuffer[0][0] == LINKCMD_READY_FINISH_TRADE) + sTradeAnim->playerFinishStatus = STATUS_READY; ResetBlockReceivedFlag(0); } if (recvStatus & (1 << 1)) { - if (gBlockRecvBuffer[1][0] == 0xABCD) - sTradeData->tradeStatus2 = 1; + if (gBlockRecvBuffer[1][0] == LINKCMD_READY_FINISH_TRADE) + sTradeAnim->partnerFinishStatus = STATUS_READY; ResetBlockReceivedFlag(1); } } -static void SpriteCB_TradePokeball_Default(struct Sprite *sprite) +static void SpriteCB_BouncingPokeball(struct Sprite *sprite) { sprite->y += sprite->data[0] / 10; sprite->data[5] += sprite->data[1]; @@ -2347,39 +2377,36 @@ static void SpriteCB_TradePokeball_Default(struct Sprite *sprite) } } -static void SpriteCB_TradePokeball_Outbound(struct Sprite *sprite) +static void SpriteCB_BouncingPokeballDepart(struct Sprite *sprite) { sprite->y2 += sTradeBallVerticalVelocityTable[sprite->data[0]]; if (sprite->data[0] == 22) PlaySE(SE_BALL_BOUNCE_1); - sprite->data[0]++; - if (sprite->data[0] == 44) + if (++sprite->data[0] == 44) { PlaySE(SE_M_MEGA_KICK); - sprite->callback = SpriteCB_TradePokeball_Outbound2; + sprite->callback = SpriteCB_BouncingPokeballDepartEnd; sprite->data[0] = 0; BeginNormalPaletteFade(1 << (sprite->oam.paletteNum + 16), -1, 0, 16, RGB_WHITEALPHA); } } -static void SpriteCB_TradePokeball_Outbound2(struct Sprite *sprite) +static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *sprite) { if (sprite->data[1] == 20) StartSpriteAffineAnim(sprite, 1); - sprite->data[1]++; - if (sprite->data[1] > 20) + if (++sprite->data[1] > 20) { sprite->y2 -= sTradeBallVerticalVelocityTable[sprite->data[0]]; - sprite->data[0]++; - if (sprite->data[0] == 23) + if (++sprite->data[0] == 23) { DestroySprite(sprite); - sTradeData->state = 14; + sTradeAnim->state = 14; } } } -static void SpriteCB_TradePokeball_Inbound(struct Sprite *sprite) +static void SpriteCB_BouncingPokeballArrive(struct Sprite *sprite) { if (sprite->data[2] == 0) { @@ -2400,8 +2427,7 @@ static void SpriteCB_TradePokeball_Inbound(struct Sprite *sprite) if (sprite->data[0] == 107) PlaySE(SE_BALL_BOUNCE_4); sprite->y2 += sTradeBallVerticalVelocityTable[sprite->data[0]]; - sprite->data[0]++; - if (sprite->data[0] == 108) + if (++sprite->data[0] == 108) sprite->callback = SpriteCallbackDummy; } } @@ -2436,7 +2462,7 @@ static void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) u8 metLocation = METLOC_IN_GAME_TRADE; struct Pokemon * tradeMon = &gEnemyParty[0]; u8 mailNum; - CreateMon(tradeMon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); + CreateMon(tradeMon, inGameTrade->species, level, USE_RANDOM_IVS, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); SetMonData(tradeMon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); SetMonData(tradeMon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); SetMonData(tradeMon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]); @@ -2499,16 +2525,16 @@ void CreateInGameTradePokemon(void) CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); } -static void CB2_RunTradeAnim_LinkTrade(void) +static void CB2_UpdateLinkTrade(void) { if (DoTradeAnim() == TRUE) { - DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[0]]); - FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[1]]); - TradeMons(gSelectedTradeMonPositions[0], gSelectedTradeMonPositions[1] % 6); - sTradeData->linkData[0] = 0xABCD; - sTradeData->scheduleLinkTransfer = 1; - SetMainCallback2(CB2_WaitAndAckTradeComplete); + DestroySprite(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]]); + FreeSpriteOamMatrix(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]]); + TradeMons(gSelectedTradeMonPositions[TRADE_PLAYER], gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE); + sTradeAnim->linkData[0] = LINKCMD_READY_FINISH_TRADE; + sTradeAnim->scheduleLinkTransfer = 1; + SetMainCallback2(CB2_WaitTradeComplete); } HandleLinkDataSend(); HandleLinkDataReceive(); @@ -2519,16 +2545,18 @@ static void CB2_RunTradeAnim_LinkTrade(void) UpdatePaletteFade(); } -static void CB2_WaitAndAckTradeComplete(void) +static void CB2_WaitTradeComplete(void) { - u8 mpId = GetMultiplayerIdOfLinkTrade(); + u8 mpId = TradeGetMultiplayerId(); HandleLinkDataReceive(); - if (mpId == 0 && sTradeData->tradeStatus1 == 1 && sTradeData->tradeStatus2 == 1) + if (mpId == 0 + && sTradeAnim->playerFinishStatus == STATUS_READY + && sTradeAnim->partnerFinishStatus == STATUS_READY) { - sTradeData->linkData[0] = 0xDCBA; - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, 20); - sTradeData->tradeStatus1 = 2; - sTradeData->tradeStatus2 = 2; + sTradeAnim->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE; + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeAnim->linkData, sizeof(sTradeAnim->linkData)); + sTradeAnim->playerFinishStatus = STATUS_CANCEL; + sTradeAnim->partnerFinishStatus = STATUS_CANCEL; } RunTasks(); AnimateSprites(); @@ -2536,7 +2564,7 @@ static void CB2_WaitAndAckTradeComplete(void) UpdatePaletteFade(); } -static void CB2_HandleTradeEnded(void) +static void CB2_SaveAndEndTrade(void) { switch (gMain.state) { @@ -2548,24 +2576,20 @@ static void CB2_HandleTradeEnded(void) case 1: SetLinkStandbyCallback(); gMain.state = 100; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 100: - if (++sTradeData->timer > 180) + if (++sTradeAnim->timer > 180) { gMain.state = 101; - sTradeData->timer = 0; + sTradeAnim->timer = 0; } if (IsLinkTaskFinished()) - { gMain.state = 2; - } break; case 101: if (IsLinkTaskFinished()) - { gMain.state = 2; - } break; case 2: gMain.state = 50; @@ -2575,11 +2599,11 @@ static void CB2_HandleTradeEnded(void) case 50: if (InUnionRoom()) { - SetQuestLogEvent(QL_EVENT_LINK_TRADED_UNION, sTradeData->monSpecies); + SetQuestLogEvent(QL_EVENT_LINK_TRADED_UNION, sTradeAnim->questLogSpecies); } else { - SetQuestLogEvent(QL_EVENT_LINK_TRADED, sTradeData->monSpecies); + SetQuestLogEvent(QL_EVENT_LINK_TRADED, sTradeAnim->questLogSpecies); IncrementGameStat(GAME_STAT_POKEMON_TRADES); } if (gWirelessCommType) @@ -2587,13 +2611,11 @@ static void CB2_HandleTradeEnded(void) SetContinueGameWarpStatusToDynamicWarp(); LinkFullSave_Init(); gMain.state++; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 51: - if (++sTradeData->timer == 5) - { + if (++sTradeAnim->timer == 5) gMain.state++; - } break; case 52: if (LinkFullSave_WriteSector()) @@ -2603,38 +2625,35 @@ static void CB2_HandleTradeEnded(void) } else { - sTradeData->timer = 0; + // Save isn't finished, delay again + sTradeAnim->timer = 0; gMain.state = 51; } break; case 4: LinkFullSave_ReplaceLastSector(); gMain.state = 40; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 40: - if (++sTradeData->timer > 50) + if (++sTradeAnim->timer > 50) { if (GetMultiplayerId() == 0) - { - sTradeData->timer = Random() % 30; - } + sTradeAnim->timer = Random() % 30; else - { - sTradeData->timer = 0; - } + sTradeAnim->timer = 0; gMain.state = 41; } break; case 41: - if (sTradeData->timer == 0) + if (sTradeAnim->timer == 0) { SetLinkStandbyCallback(); gMain.state = 42; } else { - sTradeData->timer--; + sTradeAnim->timer--; } break; case 42: @@ -2645,7 +2664,7 @@ static void CB2_HandleTradeEnded(void) } break; case 5: - if (++sTradeData->timer > 60) + if (++sTradeAnim->timer > 60) { gMain.state++; SetLinkStandbyCallback(); @@ -2669,13 +2688,9 @@ static void CB2_HandleTradeEnded(void) if (IsBGMStopped() == TRUE) { if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu) - { SetLinkStandbyCallback(); - } else - { SetCloseLinkCallback(); - } gMain.state++; } break; @@ -2685,13 +2700,13 @@ static void CB2_HandleTradeEnded(void) if (IsLinkRfuTaskFinished()) { gSoftResetDisabled = FALSE; - SetMainCallback2(LinkTrade_TearDownAssets); + SetMainCallback2(CB2_FreeTradeAnim); } } else if (!gReceivedRemoteLinkPlayers) { gSoftResetDisabled = FALSE; - SetMainCallback2(LinkTrade_TearDownAssets); + SetMainCallback2(CB2_FreeTradeAnim); } break; } @@ -2704,7 +2719,7 @@ static void CB2_HandleTradeEnded(void) UpdatePaletteFade(); } -static void LinkTrade_TearDownAssets(void) +static void CB2_FreeTradeAnim(void) { if (!gPaletteFade.active) { @@ -2713,7 +2728,7 @@ static void LinkTrade_TearDownAssets(void) Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); + FREE_AND_SET_NULL(sTradeAnim); if (gWirelessCommType != 0) DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(gMain.savedCallback); @@ -2727,16 +2742,16 @@ static void LinkTrade_TearDownAssets(void) void DoInGameTradeScene(void) { LockPlayerFieldControls(); - CreateTask(Task_WaitFadeAndStartInGameTradeAnim, 10); + CreateTask(Task_InGameTrade, 10); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); HelpSystem_Disable(); } -static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId) +static void Task_InGameTrade(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(CB2_InitTradeAnim_InGameTrade); + SetMainCallback2(CB2_InitInGameTrade); gFieldCallback = FieldCB_ContinueScriptHandleMusic; DestroyTask(taskId); } @@ -2744,13 +2759,12 @@ static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId) static void CheckPartnersMonForRibbons(void) { - u8 nRibbons = 0; + u8 numRibbons = 0; u8 i; - for (i = 0; i < 12; i++) - { - nRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_CHAMPION_RIBBON + i); - } - if (nRibbons != 0) + for (i = 0; i < (MON_DATA_UNUSED_RIBBONS - MON_DATA_CHAMPION_RIBBON); i++) + numRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_CHAMPION_RIBBON + i); + + if (numRibbons != 0) FlagSet(FLAG_SYS_RIBBON_GET); } @@ -2762,53 +2776,62 @@ void LoadTradeAnimGfx(void) void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) { FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - sTradeData->textColor[0] = 15; - sTradeData->textColor[1] = 1; - sTradeData->textColor[2] = 6; - AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 2, 0, 2, sTradeData->textColor, speed, str); + sTradeAnim->textColor[0] = 15; + sTradeAnim->textColor[1] = 1; + sTradeAnim->textColor[2] = 6; + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 2, 0, 2, sTradeAnim->textColor, speed, str); CopyWindowToVram(windowId, COPYWIN_FULL); } static void Task_AnimateWirelessSignal(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 r2 = 16 * sWirelessSignalAnimParams[data[0]][0]; - if (data[2] == 0) + u16 paletteIdx = 16 * sWirelessSignalAnimParams[tIdx][0]; + + if (!tSignalComingBack) { - if (r2 == 0x100) + if (paletteIdx == 0x100) LoadPalette(sWirelessSignalAnimPals_Off, 0x30, 0x20); else - LoadPalette(&sWirelessSignalAnimPals_Outbound[r2], 0x30, 0x20); + LoadPalette(&sWirelessSignalAnimPals_Outbound[paletteIdx], 0x30, 0x20); } else { - if (r2 == 0x100) + if (paletteIdx == 0x100) LoadPalette(sWirelessSignalAnimPals_Off, 0x30, 0x20); else - LoadPalette(&sWirelessSignalAnimPals_Inbound[r2], 0x30, 0x20); + LoadPalette(&sWirelessSignalAnimPals_Inbound[paletteIdx], 0x30, 0x20); } - if (sWirelessSignalAnimParams[data[0]][0] == 0 && data[1] == 0) + + if (sWirelessSignalAnimParams[tIdx][0] == 0 && tCounter == 0) PlaySE(SE_M_HEAL_BELL); - if (data[1] == sWirelessSignalAnimParams[data[0]][1]) + + if (tCounter == sWirelessSignalAnimParams[tIdx][1]) { - data[0]++; - data[1] = 0; - if (sWirelessSignalAnimParams[data[0]][1] == 0xFF) + tIdx++; + tCounter = 0; + if (sWirelessSignalAnimParams[tIdx][1] == 0xFF) DestroyTask(taskId); } else - data[1]++; + { + tCounter++; + } } +#undef tIdx +#undef tCounter +#undef tSignalComingBack + static void Task_OpenCenterWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) { - sTradeData->win0left = sTradeData->win0right = 120; - sTradeData->win0top = 0; - sTradeData->win0bottom = 160; + sTradeAnim->win0left = sTradeAnim->win0right = DISPLAY_WIDTH / 2; + sTradeAnim->win0top = 0; + sTradeAnim->win0bottom = DISPLAY_HEIGHT; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | @@ -2816,17 +2839,15 @@ static void Task_OpenCenterWhiteColumn(u8 taskId) WININ_WIN0_OBJ); } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeAnim->win0left, sTradeAnim->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeAnim->win0top, sTradeAnim->win0bottom)); data[0]++; - sTradeData->win0left -= 5; - sTradeData->win0right += 5; + sTradeAnim->win0left -= 5; + sTradeAnim->win0right += 5; - if (sTradeData->win0left < 80) - { + if (sTradeAnim->win0left < 80) DestroyTask(taskId); - } } static void Task_CloseCenterWhiteColumn(u8 taskId) @@ -2835,24 +2856,24 @@ static void Task_CloseCenterWhiteColumn(u8 taskId) if (data[0] == 0) { - sTradeData->win0left = 80; - sTradeData->win0right = 160; + sTradeAnim->win0left = 80; + sTradeAnim->win0right = DISPLAY_WIDTH - 80; SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_OBJ); } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeAnim->win0left, sTradeAnim->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeAnim->win0top, sTradeAnim->win0bottom)); - if (sTradeData->win0left != 120) + if (sTradeAnim->win0left != DISPLAY_WIDTH / 2) { data[0]++; - sTradeData->win0left += 5; - sTradeData->win0right -= 5; + sTradeAnim->win0left += 5; + sTradeAnim->win0right -= 5; - if (sTradeData->win0left >= 116) + if (sTradeAnim->win0left > DISPLAY_WIDTH / 2 - 5) BlendPalettes(0x8, 0, RGB_WHITEALPHA); } else From 1ad8469e8ec1d916ea10902f4a661a3fa16cc961 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 11 Jan 2023 14:25:21 -0500 Subject: [PATCH 17/33] Support reducing png bit depth --- tools/gbagfx/convert_png.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/gbagfx/convert_png.c b/tools/gbagfx/convert_png.c index 4f1b39e6d..a5fefbd8b 100644 --- a/tools/gbagfx/convert_png.c +++ b/tools/gbagfx/convert_png.c @@ -62,10 +62,7 @@ static unsigned char *ConvertBitDepth(unsigned char *src, int srcBitDepth, int d for (j = 8 - srcBitDepth; j >= 0; j -= srcBitDepth) { - unsigned char pixel = (srcByte >> j) % (1 << srcBitDepth); - - if (pixel >= (1 << destBitDepth)) - FATAL_ERROR("Image exceeds the maximum color value for a %ibpp image.\n", destBitDepth); + unsigned char pixel = (srcByte >> j) % (1 << destBitDepth); *dest |= pixel << destBit; destBit -= destBitDepth; if (destBit < 0) From 7710148fbc436bb66e568d71213ff76c5b5fae7e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 11 Jan 2023 15:05:14 -0500 Subject: [PATCH 18/33] Colorize door animations --- graphics/door_anims/dept_store.png | Bin 370 -> 255 bytes graphics/door_anims/general.png | Bin 380 -> 265 bytes graphics/door_anims/hideout_elevator.png | Bin 368 -> 315 bytes graphics/door_anims/joyful_game_corner.png | Bin 365 -> 250 bytes graphics/door_anims/one_island_poke_center.png | Bin 373 -> 258 bytes graphics/door_anims/pallet.png | Bin 394 -> 279 bytes graphics/door_anims/pewter.png | Bin 393 -> 278 bytes graphics/door_anims/pokemon_fan_club.png | Bin 392 -> 277 bytes graphics/door_anims/rocket_warehouse.png | Bin 387 -> 272 bytes graphics/door_anims/safari_zone.png | Bin 384 -> 270 bytes graphics/door_anims/saffron.png | Bin 376 -> 262 bytes graphics/door_anims/sevii_123.png | Bin 362 -> 247 bytes graphics/door_anims/sevii_45.png | Bin 362 -> 247 bytes graphics/door_anims/sevii_67.png | Bin 362 -> 247 bytes graphics/door_anims/silph_co.png | Bin 371 -> 256 bytes graphics/door_anims/silph_co_elevator.png | Bin 373 -> 316 bytes graphics/door_anims/sliding_double.png | Bin 371 -> 256 bytes graphics/door_anims/sliding_single.png | Bin 339 -> 224 bytes graphics/door_anims/ss_anne.png | Bin 433 -> 319 bytes graphics/door_anims/teleporter.png | Bin 470 -> 357 bytes .../door_anims/trainer_tower_lobby_elevator.png | Bin 375 -> 318 bytes .../door_anims/trainer_tower_roof_elevator.png | Bin 369 -> 316 bytes graphics/door_anims/vermilion.png | Bin 376 -> 262 bytes graphics/door_anims/viridian.png | Bin 369 -> 254 bytes include/constants/metatile_labels.h | 2 +- src/data/tilesets/graphics.h | 6 ++++-- src/data/tilesets/headers.h | 8 ++++---- src/field_door.c | 6 +++++- 28 files changed, 14 insertions(+), 8 deletions(-) diff --git a/graphics/door_anims/dept_store.png b/graphics/door_anims/dept_store.png index 914b1d56c303fb44a5080f61bcf758e9011de18e..07efce86a743faf64ea9bab98c877e64cc1b927b 100644 GIT binary patch delta 238 zcmV;z0H)Qw0nDlT3T~K zN^0ibq|LNyoYntxz4l_H-b#bTF=C{1&7{o=b;kez0E$UOK~xx(jgLzT!!Qs-eM!+1 zOuXsZ0^^(~(2Hb~eOA3oHMZO4N2$Q#A@FD>jL(&ng)@|8CTC@TL4Hi6tS0H5m?wG( z4kQh-kWh6C==#E_a@DUFP*jzM`&_|L_Mn+t$SMc&{>GF+}2W zZ@)L!VFLl@+G*=Hy;l?0d}3qBR(ZGASY5*^)pXnKXYMNwJW~9Sp>}3FC$gCWxQle(e*7b95)iB!eSuS9QrZH|1pO5RUlm6rbbjZKDmj>gv~g!nBxDg3(g zy4KI8dbRc69fK{~UA5loU0UdOtKsd!scR2@yYOA}cl&Da7#La^n^_rHY8x0>85k(6WL}S=AvZrIGp!Q0hQKeo Rg@GCvJYD@<);T3K0RRxjczOT; diff --git a/graphics/door_anims/general.png b/graphics/door_anims/general.png index 44b047626189c3c1e229d8afa503c8f1adae7676..0e0b67c2de3478e1a3d55c06193b881cdfe05c36 100644 GIT binary patch delta 248 zcmV;z0H)Qw0nDlT3T~K zN@|>YV#TbB|ILf;lylx{V$D)YtRN{$gT>}2LH+;$0F+5YK~xx(h0x0p10e_oV0+3X zjr_3!9w{KY73{bj#BL)hJENCy`UVgfL(Zy&-x3V*z*3*z4des3gUgB#u z&pD!{bbN9tY9Qo}1Rxs-CJB~kAptX5v+eJ%Y~+UIC4TCP^qQrF*-Q`z4&NRfIQ)$0 yzxF}Y%!(YW0jo`AbtZF#1v@Zk7t|~7T(Y9$)VUX`bM7%PC3|$v{GxkMK%QCZ@tGG5 zMKw~NruSPcc%o{X_IZx7&y|l}E;$+=vXTx)A~RGX7PYdR$vC@h|Nc!Ar8iCga#;J5 zskh|joenYw?xg06V!dKY{{a6|Qfhm9d$hEq z|NsAkgHoiVV#URrYNV{i&DG7EAgq+d&7|h$#sAI4YUbwVw}1Pvb^rhXiAh93R5*?8 zlCcWIFbqVca~3b|kfr_qA1yv5jU$;9GQ}Ye4AL76l1^raOpY_+Z`<0w~uzfs@-0000nB6Z`RLt6JK`9Zl;tn-yZOl2+>~}zZA1fvb}on+tap^yN_1S=fARv=k&cTg&>crmbgZgq$HN4 zS|t~y0x1R~10w@n17lqSvk(JAD-$Ct6BBI%11kfAr%!I?plHa=PsvQH#I0e<&cq8K O?|ZuXxvX;z0H)Qw0nDlT3T~K zN^0ibq|LNyoYntxz4l_H-b#bTF=C{1&7{o=b;kez0EJ0JK~xx(mCvya!!Qg4K+cjz z1Gw-cL?)oqTL8b2=W~8Ab;?~?rl3WUTZ9eT@81{(@AaOOPeK5i|7-=WhRVCZi|)(lelgR7+eVN>UO_QmvAU zQh^kMk%5tcu7R7lzsDZ)L L)z4*}Q$iB}`}=fz diff --git a/graphics/door_anims/one_island_poke_center.png b/graphics/door_anims/one_island_poke_center.png index d651b5d408880802ebdf73ae8fe9088c8fe08a34..21f670f2d7032cc2f4cf6f9e0d6878ed47296764 100644 GIT binary patch delta 241 zcmV;z0H)Qw0nDlT3T~K zN^0ibq|LNyoYntxz4l_H-b#bTF=C{1&7{o=b;kez0F6mRK~xx(jnB;ugD?yQU@vKP z0@Dp_DL?Z>VgU{ez=b=f?$YNJiOQt{AD%uX0>4n*3{y9%FKP&Jg0e1Vh+9ZwGedN! zBhQlw!cUa_1RI4Bq}=C0ybm3H{-a=(4rS>O4!}RZks59|wF7zbwHbYyBY7X(@M$00 r=K=%f`FWRrZl)X|5y}w~@zduGdtkZ}0*miV00000NkvXXu0mjfWs7K# literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsMMJeG@2cmjn4k`w*PKr|EsDFz1bkB8ZTRIjItV~E7% z-t%X9n+fL+Ytl+DkHZ+H&~hs@h_p0V>3tEl`uJ5{Fr0df+P*-!Cv z6gGX5nJKva!m}eiF9h6ceb;c<3w{>P32~kfG2i^AUCEc7ZU?m@Pv2N5)=*!!SoKbX zH~Xt6+1kHU+&|mx*m&7)&w2SZGg7Ok*Pqi7TPT<$DE0C3bLOynM+%mCmwf~}Otr){ zq9i4;B-JXpC>2OC7#SED=o%R78kmI`7+RT_S(#dB8yHv_7(8bc{)3_+H$NpatrE9} UX%VX(fEpM)UHx3vIVCg!01&QqqyPW_ diff --git a/graphics/door_anims/pallet.png b/graphics/door_anims/pallet.png index 7882f461d5145120a797ce385e8a5e0e6ff572f2..1bc68a6e7887aea4a5d06051eb428693790f4ef7 100644 GIT binary patch delta 262 zcmV+h0r~!l1D67j8Gi!+008Q7=VSl?05DKYR7L*)|MvF(-sbkb#onB(y?c9uT3T~K zN@|?V_F|mwIeXs!&9wHUgWij3y<$px&7`!TY+(QZ0HR4mK~xx(h0wbZ!ypU>V0KEM zEfgjIU3?e1K<7a+Knf4!j@F%-A$lP0Oq0L*P6(vKm6De2`+q_w*bE=V@l?dNFN}Ok zb?-Q9)uX0Jt(^jFRARgfl^6j?d<%d?2*5(e1qwRop=Nq1a*rTgk<+1w_ckES`H?!H zBLEs;wdvjftF7S;F!u4bkC*8b{DVjl1bL_Ej0?hy3^T%v@jo`}2a_1EyUD@2>Hq)$ M07*qoM6N<$f{YJ(WB>pF literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsK2qK^~AUjT&!k`w*PKr|EsDFz1bkB8ZT)FMw8#}J9j ztrs>59#-IC4G5cHy}d;4ge%(#g?9?FJB$4c7%z&wG!9W|++pln_tlSM$>G)s=l*_k zS$>1}d)wEm6B4aiKhFMhZDYm#z6FYmI$SJzoN|rcO-?#HU5_M*2rZn<#4h`_zGe8Xtp00i_>zopr0I$M=&j0`b diff --git a/graphics/door_anims/pewter.png b/graphics/door_anims/pewter.png index 35dc63e92f9267a14f121a6ed345d5860c464044..c22f07f82a4a3505e42565cead3dc33789d90fd5 100644 GIT binary patch delta 261 zcmV+g0s8)l1C|1i8Gi!+008Q7=VSl?05DKYR7DsmQug-$=I;N+&EAxxw0nDlT3T~K zN@|?V_F|mwIeXsTYGTb&O5W!7{{a900RM^2Is5V0KEI zH54WQT^!m#<4H0=3J>6h-i;Y5dLZshlfU{-2&BW6l9uiJLVhRM3?IeuRK&I~jC@OV z?>KAKqozo$odRrBV!R8L7y(Fp3xGrjz(U6b3OeYaW_l@dk04!<)1ip>HXzOUkvgCw z02*Mm>D~aVt>FzY_VKolm+2JzgGdnsd8g=%3&M;HGs2AVKQ`+J|3|A|pVZnd00000 LNkvXXu0mjf*n@Z< literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsL(st2qVUjhmVBq#cnfoLcOQVa~<9}lwwsfC^{jv*44 zTQ6)BJgmUO8c;S#`n!qT0avyYDtQXJg?`pBS|7c3nw$N%YH2|-aloj z`^0q}nYkzAB`!Ss;U{|~kb}46#+R%Ghp(+*llmQUd-l&Da7#La^nFEow nfq|8Qfz1EYg(wmr1tjz&ED>;z0H)Qw0nDlT3T~K zN@_}bv|6OqIa-v}lriqKQq9fYbG`OTgTNCnEBBFy0oHb1h;j$720BmRi;Wl!9>d*$ zacp1IfN{iF2JpzU{L2%>@<>N5>ku{g_Kx%&U+^;+XZRUE|MLbcsG);c;D+n~0000< KMNUMnLSTXc4t0_M literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsKG+(H@3%Yi}y$%%etAR3B+6a$0z$HVMEYJsPVV~E7% z(hF~SnG|{05~kT)WX)q+b8uG1@`>?x`g!?+wq$4T0`q2-CFB6 z9xz_NoNa&Ef<}`ZW&^hkUk`IT9G2YixNXCaE)@<@m7tIbOSE>~(h!{+v9sT1$*%3M zPrR|tF#k}@WSirX< n0|Owr@yIk_2q9_6%}>cptHiD0z)ZcrKn)C@u6{1-oD!Mmq|M&uq_o9*dxKh9b3saK&Bc_o ztb3f4YUZ43#dAumVlk9bAkE(90000000945eSrV~0GmlfK~xx(h0n1K0x=8)P|t#N z6IeGv!UBnZks@QIxPq}#P_PT%M@~Qv2^U{aifsKz))in#x_B%AL+Yag45{}9l-q&r zgws=X9P572{GcNYm^uIiWk}Y2R?#t%S%-z#XK^I<>5kf^G)HMWEDi*nVERUFz8;9~ z2MHcbZ1D|WR{hxrWB$NmjMvw{eEkEaGr|nh8DZem=LsMfeE-z!-aG&R002ovPDHLk FV1lp`Zc_jN literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsK?DmTL7bAUnu$%%etAR3B+6a$0z$HVMEYPP3~V~E7% z*7F;AnGAVY1I{}+PTZ)WVHDOSa(^eQhnhuY)8reh|CQAhEIGyF{kwAhdTbQ^FyZM= zM!89Pj2|YH^g8U5-QhoDo>1YM&kH^&T(r8v!En}Q$ql>J5%QXG$GI!#_eSjTR|uLQ z(xA1wOj4({eSdJ{EFKa!7Syd<5!-u zZc<~M^d+2i4$zsZC9V-ADTyViR>?)FK#IZ0z{o(?z*yJ7EX2Uj%EZ#j*g)IBz{Tlfx*+&&t;ucLK6UgXL}t0 diff --git a/graphics/door_anims/safari_zone.png b/graphics/door_anims/safari_zone.png index a713663fd1f44759ee2477671680cba233478c38..fae7fd50efd486672242eb0829051e90b8855997 100644 GIT binary patch delta 253 zcmVmq(Mq*dwYY6T2j4xbKaDL|HYh~ zoUFaY)#mQ*F=ARul!H>mlxpUzr0%R@YIC-b46pzI0GUZdK~xx(rOq)9!ypU=P_E!A zWJR$;?m?6s0MvAEq;miC0vWpeA@1BNPxEe_8%VsNyTkUC&I=~74B$M4G@%rjTM*2Sdc^n~4RMtbX!-xZ7B zCd_B;e!Vc|j{csR90n}=+`0EOcwZAc$x-CWI&s0?_E&%SCrC;iS^Vh8+pZ4r8paq2 z!)nX0LO-AzRZCnWN>UO_QmvAUQh^kMk%5tcu7RgTe~DWM4fJU4n? diff --git a/graphics/door_anims/saffron.png b/graphics/door_anims/saffron.png index 21962600be93943c4ee92080b49e9d90e0a9ae1f..3f9ca5640f0a86a513e454e58e47b5c0cef2001c 100644 GIT binary patch delta 245 zcmeyt)W$SHvYwfNf#Fr*^AsRu5a1Ky`k&$d(W6K2-Fr4=$(HKsW=F5AZ{Pl(UGjfP z^V#aCB|upS0&;!Bb3ySCA4gC zJTvdvounSm){v{q{q27Ub|_shN)DKkwZigz-V&*f&9<`7Q%?$BpIlzJ(`I91r&nSt z1Fs5$LTdw8GuvK+13J0yC%a9Tdvs&+x1@Ge&gb)4gg-Id-0sf4&Ug`X{oTdc{~p}U sc2M71c#Q96;^}>g*3WEn?|x=HE@12HY;+lC7j!}yo7n5pv>W5UkOIG7f+>EDJ4lyUN&dmo>Tk=* z^jw|)?)lS`cfSXhD8^3wap0Is#)(tHzM(fKTvbUpsKFSU`ZoE}n@!G4>679lJ}f!; z>vD-=y@JH;YKL!gTe~DWM4fABuUD diff --git a/graphics/door_anims/sevii_123.png b/graphics/door_anims/sevii_123.png index e49c7c3db6cced07204587ecdf5e9470c95a61a8..00dca20b87549c919eb5de02369b4db71cb26bec 100644 GIT binary patch delta 230 zcmVAti8>9dxKh9b3saK=H8^$ z#e>DHYOIt>?&gc$#f#OwYQ5&9tlp$^&7|rmeGvcv0D?(GK~xx(h0r?=10f6qP|lJr zwS!PTW*+b&qid>aTe;;}5#V!Rs@H gGB`shgEMaPT+KjcRC0Z{1ONa407*qoM6N<$g0mQElK=n! literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsLhY8UjAWr0Eh$%%etAR3B+6a$0z$HVMEs>##EF+}2W z>ji5*W!C8<`)MX5lF z!N|bKK-a)n*T5{qz|hLX)XLaU+rYrez##tUlhr61a`RI%(<*Um(3=q>4%EQl>FVdQ I&MBb@0N8SIH2?qr diff --git a/graphics/door_anims/sevii_45.png b/graphics/door_anims/sevii_45.png index e8f7d9c7b3fbf9ecac05c5a33a5138e27057c4cf..00dca20b87549c919eb5de02369b4db71cb26bec 100644 GIT binary patch delta 230 zcmVAti8>9dxKh9b3saK=H8^$ z#e>DHYOIt>?&gc$#f#OwYQ5&9tlp$^&7|rmeGvcv0D?(GK~xx(h0r?=10f6qP|lJr zwS!PTW*+b&qid>aTe;;}5#V!Rs@H gGB`shgEMaPT+KjcRC0Z{1ONa407*qoM6N<$g0mQElK=n! literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsMM24ZKooC698Bq#cnfoLcOQVa~<9}lwwsU}Ys#}J9j ztrx8Mm=$?g0^Ze6&^=}w)%co2@cPSddK+bXMAk3z`FbQ@hwH$iOx6|rXW5f`^uO#X zxN01b>^=R@hGU6Vyg5Z2GE007D%7JkvgS`0-OZQwt^ASIi?)AW3!dLny17)kc)NV# z&f^wLpRe1@`o1ST?4Za14Anlb1M@=Z36=<1B1Y?w*4p?a`RI%(<*UmP*~Aw4Aj8j>FVdQ I&MBb@0KY16(*OVf diff --git a/graphics/door_anims/sevii_67.png b/graphics/door_anims/sevii_67.png index e146010ab33ee77a6f695610ace14d84892215a8..00dca20b87549c919eb5de02369b4db71cb26bec 100644 GIT binary patch delta 230 zcmVAti8>9dxKh9b3saK=H8^$ z#e>DHYOIt>?&gc$#f#OwYQ5&9tlp$^&7|rmeGvcv0D?(GK~xx(h0r?=10f6qP|lJr zwS!PTW*+b&qid>aTe;;}5#V!Rs@H gGB`shgEMaPT+KjcRC0Z{1ONa407*qoM6N<$g0mQElK=n! literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsKCoZFTJ+yV*-Bq#cnfoLcOQVa~<9}lwwsU}Ys#}J9j ztrx8Mm=$?g0^Ze6&^=}w)%co2@cPSddK+bXMAk3z`FbQ@hwH$iOx6|rXW5f`^uO#X zxN01b>^=R@hGU6Vyg5Z2GE007D%7JkvgS`0-OZQwt^ASIi?)AW3!dLny17)kc)NV# z&f^wLpRe1@`o1ST?4Za14AoQ11ke#Z37@_kXZEWDT;>N{FKbJO57R*^y4Cd8W=oX{an^L HB{Ts5(3o++ diff --git a/graphics/door_anims/silph_co.png b/graphics/door_anims/silph_co.png index cc50aeaeb1dc29f4dccbbb9fadac0daea6342651..729de5df03cf2b8e98966949d2028993a123135d 100644 GIT binary patch delta 239 zcmV;z0H)Qw0nDlT3T~K zN^0ibq|LNyoYntxz4l_H-b#bTF=C{1&7{o=b;kez0EyTC#7t zV%1p3YrMM(sn7&NguKsoXJfc6)c pedzNqQW@WDdjvIN4MB}lpEq2Nv=>}ogO>mR002ovPDHLkV1l&zXs!SN literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsKu0Le}>4l{LGxzhK@46%=H8TIHHr!Cqc55Z0pw`x}0=BiT-}nvf8VrvW zEO=R!@aoolgB)#x{L`irZBI^nk+yLD304M=TBcgR2=3Q~i(c{u|7O)xJ-R_@^5>+^ zMJi7IJhLKXH_fTo$N2knf9-?M`azQSbE;cRi+B@zqvwm4Za9@aRc~Q8&{?V_t`Q|E zi6yC4$wjF^iowXh$UxV?Sl7TT#K6$X*ucubOxplR8r=TR%!r~PH$NpatrE9}Rf~4- Q1!`dMboFyt=akR{0E>`z0RR91 diff --git a/graphics/door_anims/silph_co_elevator.png b/graphics/door_anims/silph_co_elevator.png index 11b1981b04f016ff515c3683e0f5ebdbd0b4ab03..17d3a5ab6bf06ecbaa88264cad830709e522d9d7 100644 GIT binary patch delta 301 zcmey$w1;VeL_G&H0|SFHKhq>2#aJBV?!>U}oXkrgCn3Nm#P#acH9qpI%ZX!}yV&E*WKqS4rXx)XDIcHzEU=NbFjrf&HLl>by^7XPm21ht1v{p9WbU?b xvAeh2UhQ*XL14ApqHAY0H{bZi{Lxh2xKqaT`dk+i7ND~jJYD@<);T3K0RXKllP>@O literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#W;RA$1}3Fv4}d}f$%%etAR34jfEWx?4=`T^GI~8-978nD zC*R;@t_DF#-i z2?rSx8xFC`=mJ;=s^3k?pI|oR2!;z0H)Qw0nDlT3T~K zN^0ibq|LNyoYntxz4l_H-b#bTF=C{1&7{o=b;kez0Efje7>3fu}zH2MmXkm>zm0Xkxq!^40j0|)QjCBpnLJSP83=OP|4YUmmtPBkD&U8qkXvob^$xN%ntwDaG R!BU_G22WQ%mvv4FO#u1kb=Lp@ diff --git a/graphics/door_anims/sliding_single.png b/graphics/door_anims/sliding_single.png index b57a391581ecfcb5df3396d335981a654351a902..b9d489fc8c56fd6b71a3c287a4e4829a9198f2c4 100644 GIT binary patch delta 207 zcmV;=05Jd40^k9V8Gi!+008Q7=VSl?05DKYR7C&)0QUC(&ED>;z0H)Qw0nDlT3T~K zN^0ibq|LNyoYntxz4l_H-b#bTF=C{1&7{o=b;kez0BcD^K~xx(ozB4tfG`XN&@34; zL7ENPkpvg<;=Lz#F(yGvC<=ZEyi@*%76H9O)92VV+i%FKSxBH&3NU$TMGFB&VBB-{ z_c@A01(Ty<24`s51D`SCb&q_YXbk!Z#b#u1hL?@tjMyXho)iA=!7@Yd^H2Z)002ov JPDHLkV1n>MT@e5P literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsLT;&;}Z?F9-6Bq#cnfoLcOQVa~<9}lwwsccUd#}J9j zbI%>*Y%t(qy>RBy%5r@@C5xclj#%8hm7Vo$czjGN5!4Ih>A*Dc8A`Q>>bEhV6Bdhdds8_nP6 z314>H8(?|s@noR2swJ)wB`Jv|saDBFsX&Us$iT=z*T7iUz%0bT(8|En%FsyLz`)AD jV9v#^lPDT;^HVa@DsgLg+hbG;)WG2B>gTe~DWM4fFuG+w diff --git a/graphics/door_anims/ss_anne.png b/graphics/door_anims/ss_anne.png index 1a5f91bb2e454de268b7b7ee2a5a776f53f9f5c3..c45063432eb2b23c73405611f55d40f8ba0ffa8d 100644 GIT binary patch delta 303 zcmV+~0nq-j1HS^08Gi!+008Fy?~?!k05DKYR7IT4oKjM1b90N7l&rnI&EDST|NsBA zv`Wp*V*meQVq&a=gVm&@|AS&Fq>EC`w0lm5m@WVS0Ln>3K~yM_#n3?t!Y~j8&|D#* z+ZJl}LYWg3dIhiGX}if<6K{|np(ZmwQHw$m!C5_~lQi?y8Gohr;Dmb9(I{mOT>S&} zlh(n<7+l811J~K#fLY*yV-jNwtISO8vND>^3tSs^+pRZubJt+D847&wy_5!p2CY+zW%R8_c%?SmvHHbt=YocZ08it)C5TTN+my96Ss^xb)VJZ zD{?Ub`Bt1uAN6L}EvWT68L_rk+amJ8joZu@xOEE7CiS?TJhP#sYa^R>LHDtbHKrF9 zCT~5HVyL7l**7Kh-#g9KO_PEr?wF%=WnDzwbpJ~2<3U2dIvQq{^1R@2@aaAv9jthG z;)To)Q*<0^_UPD$2CUfVBYNf2%zx9*hj)CP_o=S!ev^51<9(-T^=0IvXk}t-Wn!RhU|?ln@Go;3 gFes5Uk zXsA*>gFL|l*m{BnFCYa+k@C*bMd;}2=IkjvKov(9rDG>elYg|a6~RgThwwojFXRUi z&Ej|w3TO~&L=Xi5Q4oX>in$PphyXD`oFf8_rif#QByh4u1(K0KbSCSOoMDV1$^-m7 zXH{Tuzdec?Wec20!_Bg@n(-_)HDZI!QbTUG3k$|qZIp~&;Ggo_l^a|tFcat>RQAx@ zsch}lPx?8UeooY96v_^G4ewlZ;J%@`^6f%d3RP`b$WmJHt9CRl8voKy{noHS`Wf%T n-+|PZEmGdWASDB4@I^mQu^;%H#inHX00000NkvXXu0mjfc+j5G literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#W;RA6jbCRST7W_V$%%etAR34jfEWx?4=`T^GTwQ*IEHAP zKYPKD>yUv6+XM4bon01P-x%f{x_S0$V8KgEIi)_Qk4%&19k|9UQd7aEt0nkk?m-hz z>1e?tj(^%eI3D7D&n}q1IAboyiU|@&1eR+i%~G4t(JN3a$b4~5hBHgW4Z*kXS2)~k zG6`^Pd@)a#?-j4H@Ji-S3J;VDvbG-7e|S|vkT>sgrvLt(R%g6i#5PZDob`t7m(KLk ziXQ(Hza4ig>+WK`!FJAhu3*eDE8+65lk3>F$?xrHyWXHv`1U97ow$J5r+EvsSi8++ zLNraExLUKtHrKyg{^xasVh#U4p%vj}9I4F91$1vbYOa%;XwK3iIj6u3=yTN)*NBpo z#FA92w?xg06V!dKY{{a6|Qfhm9d$hEq z|NsAcN|cmpwC2_J&8*el)mp{9LA|swtfU~-&07Be|Nj90$bT|um;e9(j7da6R5*?8 zlFt1|u4+Z=Ge_FihT1{kyJ*{I0gm@4k$(6++5635Bbx3tc9Us*AM{-C4 zQh%aQhddjAD!?*|(lEjD&SKuJjlu*=5E~F2QT%v56t4@E6LX@JUU2GPBru*xXL`$SykV*^2(Ct=CT`Mv-E002ovPDHLkV1k`Z BlI;Kh literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#W;RA+D}j85UZ9Xba-v@uhz4Q>AO?ff1I$-}jDAlS#}JM4 z$rjA4Ji8Y%$S-E*l1Ou6Jj~PKpzg$b=fLK21%ZPV?5sRIJbS+1i%UpwFkoR#eZP0F zhK2_}+oZQO@9)_%1iinvcW?D~xeJNq3mFbd%=l2rz382xf<%)*n}Vq1`Ae5R1xPM% zU@($U;0f5#(9G)89NDZ=^Wq>w8yAOy;iUy}ZN~GSE;2Sa#LkdT~> zMwFx^mZVxG7o`Fz1|tI_16>1ST?4Za14AoQATrQ4Ft9Q(_`YMN5{ic0{FKbJO57US So+{1*g@UK6pUXO@geCxAO>DFP diff --git a/graphics/door_anims/trainer_tower_roof_elevator.png b/graphics/door_anims/trainer_tower_roof_elevator.png index 87111311b3730701e08fae84c28c79dcf2194658..774cedf75fbcc8ab56c94740f254c29606c1700a 100644 GIT binary patch delta 301 zcmV+|0n+~Q0=xo{7=H)@0000Z4+4?^0004VQb$4nuFf3k0001BP)t-s)zz$0Qfhm9 zd&Rxg|NsAL#cJl&d;iT^|L(w?xg06V!dKY{{a7#l$3jWdtzc@ zQc`OF)mrAHO8)@=-sbMb&794PbF8ea-sZjLtcw5u0RR90zklOtpa1{>ib+I4R5*?8 zlCciMFbG89+{KGKWQo-O|If-t+S*{%8IveavII|FfRoiBbMbQQ_z}e7kcUH(LlThM z7lk_HSpif5mQj?736^IT<7sUbCRl>lg5Zea;`vZ~8YnmBL@BM{)(<2y`6sqxQ*gMi zuxXn(SU!HIzb5l>a**=BT7;d zOH!?pi&B9UgOP!efv$nEu7O#IfuWVDk(H5wwt<0_fq|HpwgrlY-29Zxv`X9>(#0pY Pfc)?2>gTe~DWM4fmKtmr1tjz&ED>;z0H)Qw0nDlT3T~K zN@_}bv|6OqIa-v}lriqKQq9fYbG`OTgTtKv133D~oUs6RFzmn`Klk|n3`VHY3ZPfv00000NkvXXu0mjf?i+6s literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ0wfrI9P#J^QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`g%xsK`+?K8dDL^5CxF~7&Wapt3DdWfF`2(eX4%L+v|xo&tgMa}*RKoCjyksl9sJGM8#W6%;>eO=^c@H~qum*%J@G87|F=b0d^Jlkd zcN`x-ns(a$z^0s&eNJClnCuMm<)>WYylgZ7LYi>uUA+Swn`8Jj&iODOYg9T^cQeI< zvsY2IxMNaEBKP#D%kmnhMUTIjyFu!}_UX*`v$}0EQsq`w%k4bfeChwi>VBKL34iyd k%xh5fvg>WLdHR!S#ktJgFZ}n~16{@7>FVdQ&MBb@0NPY z)N>no4?A$M2DI%y#9K0L)5Lt{>MbTQrLEd&AM6iw<(%wv`pUv&H`7qS#(q@G5n zoxgcPOXNCsmh@|k+Z@78_n)y+X*o7Qz&gZZ^M+RMt*7|ET$i1H(fXinL;h~&`%%3% z8L4u)>2kHFnkW4a^y;*!yYOdk+B^pJD!bmcy3@rBngt@)ro^lK0y;{y#5JNMC9x#c zD!C{XNHG{07#Zjq80#9Cg%}uG8JSv{m}(msSQ!|2{$hTFq9HdwB{QuOw+4&lyW@Zw O7(8A5T-G@yGywoM;c*@S diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index a9642eeac..4816800fe 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -94,7 +94,7 @@ // gTileset_VermilionCity #define METATILE_VermilionCity_Door 0x29E -#define METATILE_VermilionCity_PokemonFanClubDoor 0x2E1 // Used to reference door tiles in field_door.c, but the metatile in the tileset is dummied +#define METATILE_VermilionCity_SSAnneWarp 0x2E1 // gTileset_VermilionGym #define METATILE_VermilionGym_Floor 0x281 diff --git a/src/data/tilesets/graphics.h b/src/data/tilesets/graphics.h index f82df8a6e..5e6791a66 100644 --- a/src/data/tilesets/graphics.h +++ b/src/data/tilesets/graphics.h @@ -922,9 +922,11 @@ const u16 gTilesetPalettes_SeaCottage[][16] = INCBIN_U16("data/tilesets/secondary/sea_cottage/palettes/15.gbapal"), }; -const u32 gTilesetTiles_SilphCo[] = INCBIN_U32("data/tilesets/secondary/condominiums/tiles.4bpp.lz"); +// Shared by SilphCo +const u32 gTilesetTiles_Condominiums[] = INCBIN_U32("data/tilesets/secondary/condominiums/tiles.4bpp.lz"); -const u16 gTilesetPalettes_SilphCo[][16] = +// Shared by SilphCo +const u16 gTilesetPalettes_Condominiums[][16] = { INCBIN_U16("data/tilesets/secondary/condominiums/palettes/00.gbapal"), INCBIN_U16("data/tilesets/secondary/condominiums/palettes/01.gbapal"), diff --git a/src/data/tilesets/headers.h b/src/data/tilesets/headers.h index 2e4ddb901..676bd2105 100644 --- a/src/data/tilesets/headers.h +++ b/src/data/tilesets/headers.h @@ -497,8 +497,8 @@ const struct Tileset gTileset_SilphCo = { .isCompressed = TRUE, .isSecondary = TRUE, - .tiles = gTilesetTiles_SilphCo, - .palettes = gTilesetPalettes_SilphCo, + .tiles = gTilesetTiles_Condominiums, + .palettes = gTilesetPalettes_Condominiums, .metatiles = gMetatiles_SilphCo, .metatileAttributes = gMetatileAttributes_SilphCo, .callback = InitTilesetAnim_SilphCo, @@ -585,8 +585,8 @@ const struct Tileset gTileset_Condominiums = { .isCompressed = TRUE, .isSecondary = TRUE, - .tiles = gTilesetTiles_SilphCo, - .palettes = gTilesetPalettes_SilphCo, + .tiles = gTilesetTiles_Condominiums, + .palettes = gTilesetPalettes_Condominiums, .metatiles = gMetatiles_Condominiums, .metatileAttributes = gMetatileAttributes_Condominiums, .callback = NULL, diff --git a/src/field_door.c b/src/field_door.c index e9f403d7c..c2cd4e6f0 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -251,7 +251,11 @@ static const struct DoorGraphics sDoorGraphics[] = { {METATILE_CeruleanCity_Door, DOOR_SOUND_NORMAL, 0, sDoorAnimTiles_Cerulean, sDoorAnimPalettes_Cerulean}, {METATILE_LavenderTown_Door, DOOR_SOUND_NORMAL, 0, sDoorAnimTiles_Lavender, sDoorAnimPalettes_Lavender}, {METATILE_VermilionCity_Door, DOOR_SOUND_NORMAL, 0, sDoorAnimTiles_Vermilion, sDoorAnimPalettes_Vermilion}, - {METATILE_VermilionCity_PokemonFanClubDoor, DOOR_SOUND_NORMAL, 0, sDoorAnimTiles_PokemonFanClub, sDoorAnimPalettes_PokemonFanClub}, +/* Below was presumably intended for the door to the Pokemon Fan Club. The metatile is surrounded by metatiles for the fan club building. + Its animation tiles are similar to the Vermilion door above, and the building on the map uses that metatile instead. The unused tiles + have the pokeball above the door in view, but on the map the pokeball above the door is too high to be in view. + The metatile below was subsequently re-used for the warp to enter the SS Anne from the harbor, which has no door. */ + {METATILE_VermilionCity_SSAnneWarp, DOOR_SOUND_NORMAL, 0, sDoorAnimTiles_PokemonFanClub, sDoorAnimPalettes_PokemonFanClub}, {METATILE_CeladonCity_DeptStoreDoor, DOOR_SOUND_SLIDING, 0, sDoorAnimTiles_DeptStore, sDoorAnimPalettes_DeptStore}, {METATILE_FuchsiaCity_Door, DOOR_SOUND_NORMAL, 0, sDoorAnimTiles_Fuchsia, sDoorAnimPalettes_Fuchsia}, {METATILE_FuchsiaCity_SafariZoneDoor, DOOR_SOUND_SLIDING, 0, sDoorAnimTiles_SafariZone, sDoorAnimPalettes_SafariZone}, From 5f3b69f01d66786682b70d98df6d57754606df13 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sat, 14 Jan 2023 21:12:36 -0500 Subject: [PATCH 19/33] Update INSTALL.md Syncing changes from emerald --- INSTALL.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 0ae7a2eae..8ab5b7220 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -9,7 +9,7 @@ If you run into trouble, ask for help on Discord or IRC (see [README.md](README. ## Windows Windows has instructions for building with three possible terminals, providing 3 different options in case the user stumbles upon unexpected errors. -- [Windows 10 (WSL1)](#windows-10-wsl1) (**Fastest, highly recommended**, Windows 10 only) +- [Windows 10/11 (WSL1)](#windows-1011-wsl1) (**Fastest, highly recommended**, Windows 10 and 11 only) - [Windows (msys2)](#windows-msys2) (Second fastest) - [Windows (Cygwin)](#windows-cygwin) (Slowest) @@ -26,7 +26,7 @@ All of the Windows instructions assume that the default drive is C:\\. If this d **A note of caution**: As Windows 7 is officially unsupported by Microsoft and Windows 8 has very little usage, some maintainers are unwilling to maintain the Windows 7/8 instructions. Thus, these instructions may break in the future with fixes taking longer than fixes to the Windows 10 instructions. -## Windows 10 (WSL1) +## Windows 10/11 (WSL1) WSL1 is the preferred terminal to build **pokefirered**. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL). - If WSL (Debian or Ubuntu) is **not installed**, then go to [Installing WSL1](#Installing-WSL1). - Otherwise, if WSL is installed, but it **hasn't previously been set up for another decompilation project**, then go to [Setting up WSL1](#Setting-up-WSL1). @@ -548,4 +548,4 @@ To compile the `modern` target with this toolchain, the subdirectories `lib`, `i * [porymap](https://github.com/huderlem/porymap) for viewing and editing maps * [poryscript](https://github.com/huderlem/poryscript) for scripting ([VS Code extension](https://marketplace.visualstudio.com/items?itemName=karathan.poryscript)) -* [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps \ No newline at end of file +* [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps From b8089d184e8484b1ad33ce40b8ef36da437a8ef9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 15 Jan 2023 16:35:14 -0500 Subject: [PATCH 20/33] Fix GetMovePpPinterYpos typo --- src/pokemon_summary_screen.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 9f80a54e8..f7af5fcb8 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2510,7 +2510,7 @@ static void PrintSkillsPage(void) } #define GetMoveNamePrinterYpos(x) ((x) * 28 + 5) -#define GetMovePpPinterYpos(x) ((x) * 28 + 16) +#define GetMovePpPrinterYpos(x) ((x) * 28 + 16) static void PrintMovesPage(void) { @@ -2567,14 +2567,14 @@ static void PokeSum_PrintMoveName(u8 i) colorIdx = 1; } - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 36, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 36, GetMovePpPrinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, gText_PokeSum_PP); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 46 + sMonSkillsPrinterXpos->curPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveCurPpStrBufs[i]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 46 + sMonSkillsPrinterXpos->curPp[i], GetMovePpPrinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveCurPpStrBufs[i]); if (sMonSummaryScreen->moveIds[i] != MOVE_NONE) { - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 58, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, gText_Slash); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 64 + sMonSkillsPrinterXpos->maxPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveMaxPpStrBufs[i]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 58, GetMovePpPrinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, gText_Slash); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 64 + sMonSkillsPrinterXpos->maxPp[i], GetMovePpPrinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveMaxPpStrBufs[i]); } } From edb3182144be115bfe7bc0052ef0e260d76cae63 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 16 Jan 2023 20:06:32 -0500 Subject: [PATCH 21/33] Sync Building Guidance with pokeemerald --- INSTALL.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 8ab5b7220..b3ea173aa 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -404,21 +404,16 @@ If you aren't in the pokefirered directory already, then **change directory** to ```bash cd pokefirered ``` -To build **pokefirered.gba** for the first time and confirm it matches the official ROM image (Note: to speed up builds, see [Parallel builds](#parallel-builds)): +To build **pokefirered.gba** (Note: to speed up builds, see [Parallel builds](#parallel-builds)): ```bash -make compare +make ``` -If an OK is returned, then the installation went smoothly. +If it has built successfully you will have the output file **pokefirered.gba** in your project folder.
Note for Windows... > If you switched terminals since the last build (e.g. from msys2 to WSL1), you must run `make clean-tools` once before any subsequent `make` commands.
-To build **pokefirered.gba** with your changes: -```bash -make -``` - ## Build pokeleafgreen and REV1 Pokemon FireRed and LeafGreen were both released together. As such, this project is capable of building both ROMs. To do so, simply run ```bash @@ -449,11 +444,20 @@ Replace `` with the number that the `nproc` command returned. `nproc` is not available on macOS. The alternative is `sysctl -n hw.ncpu` ([relevant Stack Overflow thread](https://stackoverflow.com/questions/1715580)). -## Debug info +## Compare ROM to the original -To build **pokefirered.elf** with enhanced debug info: +For contributing, or if you'd simply like to verify that your ROM is identical to the original game, run: ```bash -make DINFO=1 +make compare # or compare_leafgreen, compare_firered_rev1, compare_leafgreen_rev1 +``` +If it matches, you will see the following at the end of the output: +```bash +pokefirered.gba: OK +``` +If there are any changes from the original game, you will instead see: +```bash +pokefirered.gba: FAILED +shasum: WARNING: 1 computed checksum did NOT match ``` ## devkitARM's C compiler From dd90956cbbcb5d3e59b91feff27f97200b968746 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 17 Jan 2023 21:23:33 -0500 Subject: [PATCH 22/33] Clarify MB_SEMI_DEEP_WATER name --- include/constants/metatile_behaviors.h | 2 +- include/metatile_behavior.h | 4 ++-- src/battle_setup.c | 2 +- src/field_control_avatar.c | 2 +- src/metatile_behavior.c | 13 +++++++------ src/party_menu.c | 4 ++-- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 4e71cdb7e..38a02075f 100644 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -12,7 +12,7 @@ #define MB_MOUNTAIN_TOP 0x0C // #define MB_POND_WATER 0x10 -#define MB_SEMI_DEEP_WATER 0x11 +#define MB_FAST_WATER 0x11 #define MB_DEEP_WATER 0x12 #define MB_WATERFALL 0x13 // diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 6e129c830..e378e77ff 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -26,7 +26,7 @@ bool8 MetatileBehavior_IsLadder(u8 metatileBehavior); bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior); bool8 MetatileBehavior_IsDeepSouthWarp(u8 metatileBehavior); bool8 MetatileBehavior_IsSurfable(u8 metatileBehavior); -bool8 MetatileBehavior_IsSemiDeepWater(u8 metatileBehavior); +bool8 MetatileBehavior_IsFastWater(u8 metatileBehavior); bool8 MetatileBehavior_IsEastArrowWarp(u8 metatileBehavior); bool8 MetatileBehavior_IsWestArrowWarp(u8 metatileBehavior); bool8 MetatileBehavior_IsNorthArrowWarp(u8 metatileBehavior); @@ -64,7 +64,7 @@ bool8 MetatileBehavior_IsUnableToEmerge(u8 metatileBehavior); bool8 MetatileBehavior_IsShallowFlowingWater(u8 metatileBehavior); bool8 MetatileBehavior_IsThinIce(u8 metatileBehavior); bool8 MetatileBehavior_IsCrackedIce(u8 metatileBehavior); -bool8 MetatileBehavior_IsDeepSemiDeepOrSplashingWater(u8 metatileBehavior); +bool8 MetatileBehavior_IsDeepWaterTerrain(u8 metatileBehavior); bool8 MetatileBehavior_IsSurfableAndNotWaterfall(u8 metatileBehavior); bool8 MetatileBehavior_IsEastBlocked(u8 metatileBehavior); bool8 MetatileBehavior_IsWestBlocked(u8 metatileBehavior); diff --git a/src/battle_setup.c b/src/battle_setup.c index 3a08e6610..36c9eac1b 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -497,7 +497,7 @@ u8 BattleSetup_GetTerrainId(void) return BATTLE_TERRAIN_WATER; return BATTLE_TERRAIN_PLAIN; } - if (MetatileBehavior_IsDeepSemiDeepOrSplashingWater(tileBehavior)) + if (MetatileBehavior_IsDeepWaterTerrain(tileBehavior)) return BATTLE_TERRAIN_WATER; if (MetatileBehavior_IsSurfable(tileBehavior)) return BATTLE_TERRAIN_POND; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 31dd27e17..9a7d55edc 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -600,7 +600,7 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me static const u8 *GetInteractedWaterScript(struct MapPosition *unused1, u8 metatileBehavior, u8 direction) { - if (MetatileBehavior_IsSemiDeepWater(metatileBehavior) == TRUE &&PartyHasMonWithSurf() == TRUE) + if (MetatileBehavior_IsFastWater(metatileBehavior) == TRUE && PartyHasMonWithSurf() == TRUE) return EventScript_CurrentTooFast; if (FlagGet(FLAG_BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) return EventScript_UseSurf; diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 81b9fc239..ce2736647 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -4,7 +4,7 @@ static const bool8 sBehaviorSurfable[NUM_METATILE_BEHAVIORS] = { [MB_POND_WATER] = TRUE, - [MB_SEMI_DEEP_WATER] = TRUE, + [MB_FAST_WATER] = TRUE, [MB_DEEP_WATER] = TRUE, [MB_WATERFALL] = TRUE, [MB_OCEAN_WATER] = TRUE, @@ -209,9 +209,10 @@ bool8 MetatileBehavior_IsSurfable(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsSemiDeepWater(u8 metatileBehavior) +// Water that's too fast to surf on +bool8 MetatileBehavior_IsFastWater(u8 metatileBehavior) { - if (metatileBehavior == MB_SEMI_DEEP_WATER) + if (metatileBehavior == MB_FAST_WATER) return TRUE; else return FALSE; @@ -476,7 +477,7 @@ bool8 MetatileBehavior_IsMountain(u8 metatileBehavior) bool8 MetatileBehavior_IsDiveable(u8 metatileBehavior) { - if (metatileBehavior >= MB_SEMI_DEEP_WATER && metatileBehavior <= MB_DEEP_WATER) + if (metatileBehavior >= MB_FAST_WATER && metatileBehavior <= MB_DEEP_WATER) return TRUE; else return FALSE; @@ -514,9 +515,9 @@ bool8 MetatileBehavior_IsCrackedIce(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsDeepSemiDeepOrSplashingWater(u8 metatileBehavior) +bool8 MetatileBehavior_IsDeepWaterTerrain(u8 metatileBehavior) { - if ((metatileBehavior >= MB_SEMI_DEEP_WATER && metatileBehavior <= MB_DEEP_WATER) + if ((metatileBehavior >= MB_FAST_WATER && metatileBehavior <= MB_DEEP_WATER) || metatileBehavior == MB_OCEAN_WATER) return TRUE; else diff --git a/src/party_menu.c b/src/party_menu.c index d19354c5b..f87119218 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4063,7 +4063,7 @@ static bool8 SetUpFieldMove_Surf(void) s16 x, y; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - if (MetatileBehavior_IsSemiDeepWater(MapGridGetMetatileBehaviorAt(x, y)) != TRUE + if (MetatileBehavior_IsFastWater(MapGridGetMetatileBehaviorAt(x, y)) != TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) { @@ -4085,7 +4085,7 @@ static void DisplayCantUseSurfMessage(void) else { GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - if (MetatileBehavior_IsSemiDeepWater(MapGridGetMetatileBehaviorAt(x, y)) == TRUE) + if (MetatileBehavior_IsFastWater(MapGridGetMetatileBehaviorAt(x, y)) == TRUE) DisplayPartyMenuStdMessage(PARTY_MSG_CURRENT_TOO_FAST); else if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE17)) && ((gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE17)) From d6dddddf7d880525046d0c702d79f206d583f36e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 23 Jan 2023 21:14:05 -0500 Subject: [PATCH 23/33] Colorize oak_speech graphics --- graphics/oak_speech/bg_pals.pal | 67 -------------------------- graphics/oak_speech/bg_tiles.png | Bin 1118 -> 1333 bytes graphics/oak_speech/leaf/pic.png | Bin 1219 -> 1755 bytes graphics/oak_speech/oak/pic.png | Bin 1172 -> 1733 bytes graphics/oak_speech/oak_speech_bg.png | Bin 110 -> 167 bytes graphics/oak_speech/red/pic.png | Bin 1087 -> 1673 bytes graphics/oak_speech/rival/pic.png | Bin 970 -> 1547 bytes 7 files changed, 67 deletions(-) delete mode 100644 graphics/oak_speech/bg_pals.pal diff --git a/graphics/oak_speech/bg_pals.pal b/graphics/oak_speech/bg_pals.pal deleted file mode 100644 index b6905b913..000000000 --- a/graphics/oak_speech/bg_pals.pal +++ /dev/null @@ -1,67 +0,0 @@ -JASC-PAL -0100 -64 -16 115 230 -65 139 131 -82 148 139 -106 164 156 -131 180 172 -156 197 189 -180 213 205 -205 230 222 -230 246 238 -255 0 255 -255 0 255 -0 90 16 -255 0 0 -49 82 205 -255 255 255 -32 32 32 -16 115 230 -255 255 164 -255 255 106 -222 222 90 -189 189 74 -156 156 57 -156 156 57 -123 123 49 -90 90 32 -57 57 16 -255 0 0 -255 0 0 -255 0 0 -255 0 0 -255 0 0 -0 0 0 -238 230 172 -115 180 197 -156 213 238 -205 238 246 -246 255 255 -230 246 246 -106 106 106 -74 82 106 -82 98 180 -230 246 246 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 74 139 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 0 255 -123 123 123 -172 172 156 -197 197 197 -222 222 222 -238 238 238 -255 255 255 diff --git a/graphics/oak_speech/bg_tiles.png b/graphics/oak_speech/bg_tiles.png index 419858b1bfb2b42711610528ac1631c565963f9a..80af31b5299c76ecf25fbe21a9fdee657b48d5b3 100644 GIT binary patch literal 1333 zcmZ8hc}$ac82){znKqJULoqlzw7t3^3VQK$t(na%=c)_R~8l~9EbiJ+8A z##xGTQ=t~D9B!ktCyl0-|eUdkMZ*YSA33w77 z06+*}`EZd8BhJC0kf_sUyh0Kr8A+Zmw8RDNSyaOFLAJ zFME1)TAe{}1V#iP!rBM`joV{18YvVC!Z#W#jYff18=+FMrBXTqk%$%%L7~$>Gye}{ ziC!lcHg-r~>U;DCgVCrn7z6?Vn=9Z(H6k@a_|n+oFDL)?h!~MbBu6xMbZE6&yVDc#XXxhl9m8c- z&dk4+#3)We^T^`za;s=@A#Ue~dFqeG>$9`7{Uq+-AJDD5%ch{Tl>nzySfJYRyF3e) zN>-->Mf+$LppKB?KL_#5gX?R~KyvCs0tK^p4Jf4;K5MQdDd7`|AU`ki{B&*wg7XHP zupHXPu(Fy@w%f~zQ_Wr<=3==fpf(Vs*<^qGfp(S-r}3(-YDxc8i~WxTZf=dw@K1g} zja~SzK&;R+@?zdm<4Iu3(Uwm=Zo>CK@zO1<4>?A|E#lLz?I5Hn3yb1H6F&#l; zwAZbQ2U^*@&B;xSZCHEBy#3?}2s~z(Q)Ky+=OJrzn~vpI1~$Zbu0#9s>rbZBlcKOK!P6$Okc0qs-s0__r>V!f7K+MU zE!AzA_}tDoGoJFs@Xi@}eI!Vk!`5WE2LvtHkK_YlM`??-TP^E0>P7dQqBn97gA3V0 z+P8Yv>z5}UJ>7O-n`Klu#Po)Ek9_Qi-uy0z_6>M*F|z2iJ!aXVp53{BQeUOvpV<1x0jcn$Es})E?KBcGX0c& zn$*}*4D0O32BlNeF3xaj`Z4^Ym>|b-f+`sMbX7J8y#RZG@l2VaNEY5k$%4#)nQ~FtU6>gxVe&$fVs@M~S-;C!cGY}}p= z@NDw1clYnC)ZzDGm#cIcg-<6WK*PLyz_*~b!c$|(6jJZKO=!t9N5ch_XfV-KRWE-5 zau(fo@6UUPQ`itZ$}bYV3uU<8b8TzZ-`8Ea+Kh5>V3p9}Q+0c0?9~+}eA2scDJG5x zN}A5RRGH220AuOyVEE8aN7nkEBlNDz&Rqf}Ne)^aF==K{Gi@>_u>>>15o>UP?#H>~ zbM;oVJJ3I2z>@GatsO3~_U`ttdD(DiAGnBfGa5i7=Hu+0000no6k7_00bpTL_t(og}s)&Zrd;r$C)~r9ogv|NbUp3 zradcx)445z%-Xd00fM|i-yjH(zJ?YdZ_qqI5hR_v6iii(1$)OY9c9V3kTwUw{)^)M zcsw2{F=;FUyCimXd;j?O^y6Cnqk%5K@+@01Y98R~#@Ka#0DlMD20&+ov;t6H-G0?} z|LxiVzC8WZ_74Dsu?>JaTno6oadt@o0oaQGnDpHM#5MwmiM=2gCH{SY4nf^shDN_0 zU=&4R7oa+XsigWrh0{U+7M5ufYIJo)kp;}6Xkq~ZeBPJ`LM@T*JTYw*!a^TfSSKV%2!L$w5sNGg_! z5j{^kAp$Lu~V19NQpp>PX0uH+5@bgBZR$SD$ zA`+*6Am;lHfKPou=>Ve?H8jsqtCWIY%m!o%Is+PD3h5cQ;!>R#32FntPE#m>1VVIx zCFkx;seiPdGu*#Nv&j^l#GY9k4G1ua0~tF&o3YwytO4_7hb7e z%LSd@&6hI=Ft9HF(iXY}{8Ed+VHqaLufQg8(gmnsq28i^H{6{9R0s%10D$^(0DF3` znL0B)fDB<3!6OV{zlAD^Fa_Q0O(oR;`S7S$ z0pdol5m&8Li?jwvTZ(Esqx=kpA00Tea~?(7$J1hv+8opX$db-51%Q|Jr@CS;2Q{FA z9e=!719VtKOxxBD4=Kqj7v#RQmv0kM&-Fwiio3K+CJGCt&^M+8fZc bT>yUpNCXZ1A67XX00000NkvXXu0mjfjv4LI diff --git a/graphics/oak_speech/leaf/pic.png b/graphics/oak_speech/leaf/pic.png index 1825f9960d4d639da90a4f6fc7901bc71a8b72d8..d71e38ca256ce8dc2171b1df35f21d1552ffec7b 100644 GIT binary patch literal 1755 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3-p4Nw?f$U|?nl@Ck7(KDy-pyR+ZUZn?T- z%9`e^EHB5iOS+d-Clz}cdT9#WyLWHPmMzWA%|Ss?nwp0H|NjSSZ{B+~YtELS<~fE@ z#R`s53=BZwz4z_~tyyE4l*Dkgxq5F_(vl#rZcD=?34u}bN5f|@r=QDBb2@=}VVb9l zV@O2n+ZnI(78?k(R+_$P;=PixqtjcV_W$-9#%7rcQClB>Ilu18MXgw!`TdV)a+Y~a zy8om1{tx{{k1Ar{t>SinTBlMkS$H8{FV*JYRQKA*Ae#j?C*ql>ysFx}%BZC~re$?g zU2J(%x0bpP$APb04|i4VJv5(#U!x)Hg4WVKtXp61FtJ$Tm$~=d!pD~-W-YL3S*+oZ zn0u`9kI3Y$W=#PS%!gV{*kes9%q9hhFhm?>h|bE6kh|`EZAHjO`@TaAfi5qFle8!jhP$SsUtcE_qO;$i=N7e6#a{_T<|$zp*S@B*Ll?|F3f1O7{Rh zhpZ=ieXf1?xAzwgyuYpI@v=!w8e8VSon82aA=f9vQ!sJAt!gd%fg5JN*@34T4DKr* zayb`%-$dcT;-yX2hdO*@(hgRe`wH9HGH`G{oUvx#>tC6N+TXuylIYK>@icgu$i|Sv z$QI!6$WCQ$o%4r=D>e){3+GKY5cm?W-^A4Tj$zw{^PipnofR_Bow4Hef^=>M9ZuE~ zEe#drImIFj8w~VZV|UMb8g;EFWlnIpgMDB3$?P7Fr#=PGz6D-46&GqKJX!qw)r|b& zwRzXq-a9OuCBAt3h2oqY`LX98TLk-gvnX&@_4ViemN=fNIK`=NNACQF+uQDbh?yZ~ z6Pu>_aKZjO1px+Q4viH&8)O;xu-%zsTVR&j@LG}KgO~$Dg2>fJED79ODh{Y@EBO83 z_dUiNabo8ln{?}{{L7h~dP8iJ&YWU9amCFGg6nskoOI;%#|g6@>3j&6=a~2Ud&`yd z#K>t94y!hu|G%uo&P83JKbWOKj=_0zzw3?juNVS$x6V~q-So+lqxi6KpN7*u=1or+ z8>H>DIiCLhSH%8YRKR-nRZod-HxKzv)H|R$7mAQ~afO+A;6v z|I0FAuI@R$lIylC%*z)}W^P;dcGowK17g>=y;WfUaPkGqgT}C�QHb&F8okgiKnW z_~G`a4<<_G2iW|yZ?sDpCVUX{yZl&Y%G2K;rZn@3wOF1o`giod-5f^W!`oC?{ynUV zT)oQ5U#@MHlnTTDcT07ys~>RqBjxbPrRd@JU%%??E?#)m%gOMi?}78Z$~>`q&pq}{ z5P4KNC7x^V2fY`J1@~^gZn%4s|I7b^Ka8?lpL0Kd(*Uev7#KWV{an^LB{Ts5oTNzo delta 1210 zcmV;r1V#JX4Z{hL8Gir(004-tD>MKA1d2&SK~z|U?U+q(+eQ$EpIM3&C51NZ_R{{G z7KIxWEqI780s7~1=*2k@5Q4@C@^6X+1=^^VWJ&zm=|R*NxhqS}p_lAw1xb0DJ-X0?@49@y~AnemW*0$FB3(Q~*8u^M3+p)PJ9V@cUp-pDGxi4KNON z`h*18*$fD`o6s+GG>l;~pU;y<-DiXkU~C}%2>K!3NWO6jx}z{QRZp031)sPEh(BCY zyF%e+U@GDm)i{nJhWKy2hWZQ!782!S^Yfb=ph!;#Xp&&x`*n>Iz~jVT&>x!ZJ*kVL z2;zW*}4l~8o^IX5b*&s}of zOce6fZ42-pi{Q$ZGpno=lvM8+iR*Tu1jyS{U1+W6xS#EVj z>=QZ$pdirCMZhTbYyfJ6JWqfaG{@rvFF@W$Wx;GVi+_!>8i3mgK7i~33<3;ARWG9c z$}Q+=EZGHw#f0UcnnG^~To%id0kZf4V2(hqGSEYXFr1!fLUs`WMM2!;a#EJ4!iB>L z-OH545x_KkEvA4_&|x@Z5CW9T_KoZ?xL+SXO~DX>0IQOS**)R_Wshq#=xyWJB-;N0+{j3YXQ)T zUWvZUxCEeR1=3Mevq8ih>S~=uB~o9Nh$euYwSV)#S(URv!D!k5Xifc z3!*>u3JO7~q5hg2wXVM4zRszJ^d2Az!zda+@E3|x-vjXW*&hLBHhT~OEXX3R7fw-6 zXL=QEc9p@#s2wg*UY-i@O18{uK|^V(w004kChX}WiVT{QB>3$#fP+4!@Sv(<6rqdY znSYTEw`S0E2f732)8oFe(DW4r+Oco~{90F)wcBQtBngU#f+vjc0W6O&TAwjn0oVZQ z!$|l{FapMm(i8*RNkh66{PTekc!VEB#E4)4tKC`i$dgB?Q$W{ehy_8lZS&DL)8lSC zV7Y-gyi*<%_ESj#qV0#_$qbr)@csQ-d4I43blASr$4uBS07{zCrhgn@=PVVJfqT~W z_~4zYZhd&8>Yb4MPE^)G1gHQ)&$I2cx3egW&I8zw<4p;Ui~J;moyLs{J_=736rk~f zn}Qp_f=(v8-_sIw;uLk}!Cg=Fuu{xH#NOSW2mm78F+g#>q1`4Z=zc4_wW^z0>3<{! zU0KERXmJ7D1p=xEgvIyfahgz9>u29?-Kw=`m@vXF11LwJOO6Uo(8A| zP%f*(3N{jeq*ak!0BPf=RsnpBC^HH78-)+RQ#z?7z`7FQ=$~=>EAybA4B%V;|38}l Y0=#O-2eap diff --git a/graphics/oak_speech/oak/pic.png b/graphics/oak_speech/oak/pic.png index 9ac6029449e434aac5603007834636523e12d8f9..2fb9cc863f487fb1e4fdc36f0310c6a3d0789785 100644 GIT binary patch literal 1733 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3-p4Nw?f$U|?nl@Ck7(KDy-pv$Oa1&N(`z zILpiN-MuMi_ZF|26V+Yqm=tCBpW*-6v-hf-=U94W{r~?TsF#7^|C%ZHnv2&2ITk;= zx8>~7Ia}6rFPT$aT^to;2~v-SM$I1$pTV4dGEN`20p^7UPZ!6Kh}O3^I`i%*2(TsW zU&VN`n_+S5*RS9HrhjPs?r~t{l~u1o&K|pX?)l8dt#eJz{{QhjdC81A2A}@p$qN!P z_bBl6>$JT}dRAFArzLSt_NVV}5>LBd;V>3z?_|39#VCwPpe=Aqt~KxF264q@r{tbx z&WYl>GO=MJ*NhBdg9-b%4EqD+Ij5B_8t+@@y!yl$aB6bHdJe;I zrn7677}$v>TyWN1(3*979^=DmhNvr?JRB#DCrpXwKk#w99#Bd0nt(JVudeBn%ouXHlL{stA zm$f_89hB{l+zXXBH)~#l#EUP2QyCnl2%Wo8r_Zpw|BEc+HvQR0*^UToee&!5MFsi) z-3;k6jI|3U2iMsqd`wH8;C@W@=0pbX*eM*G2WGGQZmlE~&S!C0*`Y-?;ldTBkMoq4 z{9(EAzExa7pJ8o{_6_~U_p==s*EgKprNPkWdV+EGDubsE6-+TwO}dhdsX44~bU(1U z*2FqVIr6pCGJa6hWn8n>X5Df@frK;cj;Czr-}}j#!1(X9NP%#){_VbV^V+^{>f(v` zy^ba3`$wGy?`e+{_cKH@9<#Rk&)u+_o%4>>-eOj#6OC8)EVgVq!K!)LnCD$w-fYpm zAEv70Fqm(+#-_wPp^sbr)6$lNpylii)0HIMYx?6#^$M=(&!yiBA8s#V zuV~3PH-4^u%#QiQ_bmaJ>QCKUm2v6#Ouxljm(72{qT&AfN$f*YQOjR${{?16f7rq; zV0u88x##Z}OPw_jxGww!Muj}Rp=ewL6QV&=i z7Cs=J93ADz_JVgs)r;{%0U&0ANVI&5d0Qpowj=)h(3?eYvW1O8-p+cR%bo2r`dj(x(ktwJ8bSAIWS zE0u6CyT4M3vV`J6V_X4}CZ2#-`#>+3fK6OK!(JW96 Nvd$@?2>@1*a9RKW delta 1163 zcmV;61a$kw4U`Fx8Gir(004-tD>MKA1Y1c&K~z|U?U+4t8c7g_pYB-+PFQ6HhF|E^ zMRwLd@cA531Wu%1=tL!HWeG9e7tAi2{RaE0F1g8IyC2^EnwdqM-&^{d{{I914L~va z^lt$F{ObS@;PMSpxBS^-BIAwpO>&&~h#3X^g@lG6+^$ame1EOIT`GSdwg_W6a2MPF z0z^QhYcy8I>*(&w)oO)DU#(Wl4@O7ucpsR%04uOcRL5j2gs%s>ttx-vj}sJpHV5}4 z0US=u0oRUWG3kyE4}9?1`V;_wQJO=%XR)xJqK^Zv?Sp7h3WP=ZqJ75WfbT0*Vr3YC z_m`WN$@nk<@PEz$Ph^=w7c3dA6UG*5{5+yFF!WHC&%a-?`gQuJ|tih`{I zA(C&TvH5W_gtT5IIr&)y1PE_29DTv4`Xxjl$XgbM0K;jAbWn~1wtav)f{^)-gy6m7 z>*>gUyMH!J=AbRbAQIjP1Av3uYYQMMO2~StAJ9#KpJheN9}I=y4#YRpZ0Zxd*mMB5 zw+8_pZLp4NfP0nA3~-}*QwN}6y+sI>JdwJWvSBjO8-6DF+TExQDKOGO(^7DYJBo-q zVD_z2)HcD?mfbR5R-eQ z=un_!>}KL_xT;>(*$W{n_^gs|bx0A(03RRKf&|l^i(vW%0hrAfmkVj6qfX*FmiLdY z_l`Z}5uAtM?(XLRv!H@5E^_}ymN$v0a45r`0x(kr<|)zkL;#QJuy37A8%5cJqAo4K zTz|R01pKk6y}JN5z#6uSOPc;2aK2ZVYy7#uc~r|z>GrnXJivpvoC{DGJkQIbq&kUuKCH%N(PS(Jy?`D?ZWhP*gpfm{s3f3For8URpat}o&NxA`o|%Dxf%QxJBp_uF;1l91Q2flXyE$k|ch-_Q&0E&YIl6bt)w5@x-Fx=! z-G7GvK*SIw@SlOfFzD?6|Nj*f6qXjvoC(xx8Xj>4 z4`!wso@50MR;HRBK8*v%HQ1S)c#_U2HZd~Hy&Rpmg5SQk38OnP&mTCSkrUY!9bYfgW)-b qgIWp)j%&0t)%5TIr4)|IC`m9(vX05F5 zN6YJ8E&u0Rxu*XS|C-83yUt`w^XCH5GM_E_N)F0DzIXoQfu2M&9%u9O#+(yo#NRo* zabfaY1;*Zz1D1vfK^+WdBpcqhyjXIEh3h(R^NS5jVj5i-A7|T1e7>{IcT&Sy?Nt-P zxgKZ!T$B-I=Ww+0vI+C?ipg4ASPHZxKJ3rCeZ@0lW`+b~?}I(hbSm{l)}(xKZ}njd zm>S`~;N%H$)7zgXSp7@q-lMa+>yu@sR%dbh74H>nik}*O z%QkkgAJ~>#^{?z}Z1`uc&;QDHZ_PC3JQcTI&Wa)D!0y*yZ=GHeyHX@=4}U|s8AH%9 z?gbl|e^;FFwM-Y*H&`%4Y}Ebo zx1GW4!gVu-HygROsW0dk*644z&6u7m_CSWI?^T{|twe3yby44@;@{Rxhi?B8rh^m14ZG?{BS*)VOm^Hw&avzNI*G}$zv?_uW_=F;Bm9F>OXYw_v~ zZ|)vrp0n)_?}5q8r#uv6_%pcT8rZwr6LlPTuhcU{OiYfD{tmORWY#z z-yq8Em>b7*U{*i#4X&Q3*|Hi*j2e+A6VLX#H?W8m%Ur08f0_H@Sy4t~t-D@kz?=A* ztcTWGa#?qhpRuZ3`L=bL#x}7}3|_X;GwfI|MO85O+&u94>l`n168`XdNIEloG0U&;>*ILQBDPFWxXOm(CBxHx-4~wf9R3dC(gx2Me{b;>*3;8u zTGMdzp0w9;rj#7U#ie`;z9%2|SuMaV;d|L^FO%9v)&oaHp1(C{x!}YkurENqZGrG{ zhSNp2?05sX-V5AyT3pfV`8w6`a>_rkJD-Cdh2E(CTy>0*_rV9hlP-)E(TW}xcJG;1 z1?hU95x6F=yTr;?|M0JBH<1SMWdYC6uh6~dYHzS7_~k-v`~ULS_4yb$?p=D;@f27` OFnGH9xvXMKA1O`b&K~z|U?U+q(+eQ$EpIMUfhp0$)-GhHm z0~k3J(8b51zpZeQOAtUv(vO4xOfT)BwGmmABTM8?4-~Br&aR~7P@u?OY^`P=&O0-^ zvy>=bHryAk{|fjD_`d+sT?RM650URBz8i0FK&AZnS%8~Hp?~5vfQSKZngA&Z-X=t1 zaP$0l1rXaRk_81W^E^NEs(_3R1pMUC%SqZxnO1BM|dX>mV#I%zT%{V6OqobgzaKE_Q>-FSOgr1 zSE9!@Q|X;kowyI52N=nGQt4viB0^(;4;@IS`qYU9 zDiVX&43s0$X$Io~uMP#gb}~Pw<8%&p8T6mbNQMBTqJFDucZ7@nNM zCls>A1AoAGyY%*xfJnE?#hM4tUmPI8{|OHM0$`y$BC>BC+&U4DgUdQ0_2^czw+AA^ zU}NSK{xMBWfB@62xxB{|=x;~S0^B-)KQ_$@a?=CrxD%jk%@)u#tPKxt9WWgLY_-#E zSph&j9?s0^R!JL96$yDcc%Tm@^noUsu7G4W0DmZsS-6#L2`-1qGHnBH`}oJ{0H`Pv zb%1~;0qF|kE%SB^1YFMF#=}l>X%|8p-~e7Y2Y4#+4YulZED3fNngh|fmF_@?Zv)0C z`cMNl_RiHDl<^j*4H%BqH)Si5HM>zqfG)PzTM~xfO(rjw|I7M*zM3ztT0+b^7_J>X z*MDzT&$u#d1Eu_S2`Go_E?8qn2g%@i325)neE@4CIrNohdjwj`9)P%pIG`NDDvG9t z0HA)^(5(3!&P2?EZPliReE`>G-JQ)>&k#WBj$ALfuEN*J$SaS^=0~XZzveZop7&1R z)q5vk`S;p;5Vc$g0MbnWDxpM1Jdlk$Rewms?mN=T7c&($;7wHlek~8nwe29-fDF`o zxBg|Q5CRgsLuCDS<-pcp1BO{q02<8xYFLNrdp=4+aq3oulvP5(spw)4zwV2`)(j v=y~gsvE$dg)fkb2@#42PAT<8_pG5x!srGRm^sw`600000NkvXXu0mjf%}M)_ diff --git a/graphics/oak_speech/rival/pic.png b/graphics/oak_speech/rival/pic.png index 317cbc0387a9072adac5a6df162c485c01cb2cb1..ed31011d218996b99add7b3d77ba984178e674bf 100644 GIT binary patch literal 1547 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3-p4Nw?f$U|?nl@Ck7(KDy-pv$Oa1&N(`z zILpiN-CnP&b1e5(Yjy`|E~(DCckkZOqer{DyOWZV93371|NjrvzGcdm?yT-CudE=$ zp#Ka&A?)Z|bMx7tpi%Qj!)Gw3ACL6?84L_e$2?seLn2z=PLIxitRT?(H=K9f!H-LY zXZ&A3x4SSSC{t4D?P0CO$M{3fAD?OLa3}G{mF0F{{k4vmGk%P9n)BT5kWIUQhyshj z`aiBm1yo&j^C||k&g3+lp&P@()}rUYBi7phewid5LwEO$I&Y4!YSljgA#-t}j<>{{IQ&Cn%pZdiJ457P$06yfGm z2P-?=Y-l>I4sL6keFDT)^S+EB3TkgDhYF z{R6)i^KY2kc$;;@F^7NUGi**hVloht*dV`-WkYm1v;R61|Gghv?z7K0cZ5^pU*jW# zyPO803^y;&>)*=gkj~Jj^!%H;aKpI?a~1_Hneuw=)CIrhHypflcrznoLD$-r%*gF; zE7*FHKg%rpTDF^$d57SG#Xi3Zb8-`R7v{d+xArxk0>gdoh^t4Q=v2LHh!Qy9R^;Nh zA+lad;DB0r(YJeBCUPfOmrSu#X5{%5svKbJAlC3uCWOsnZqTWYn?;l48B!`Au}gjV zQoA7&7{EUBf8TZ6u_?H4nY^?^__M9XFW=9cx9qpTXHJg>o(KJ{4O_M_B`^r8ODil7 z`QoD8@J+zrDuYHt%Bu&Lv=5{()|V7~o1oj^-sGICXu7Q9Im3L0@*`mm7vuW^InVO> z{Y`$~B&uK=@;v(X49W+P8Gir(004-tD>MKA1CdEYK~z|U?U>DO+g1>TzZw203p-6;u?P?^ zib9J#h8IN81zQ+-MYmC5%Mv-$1xd-OW+<^H1ZXv*c0GI%VJSP-V zAKdk?UXbjqSts_!!B}|LECgt!I6e~)Xd{dapw)@C<2dlH4TZ!`Y()^j6x>|^Ts(?I z$Y45tw6A=Sv5nph0q)EZFozzmr5d$dF9F)Z-3zyBUjsV<--elxM#0_1t=`wL+W{nj z%mBneo}gy8+ke*8vpb6zv^+o8rEG!f1>~lxWBaTcx2$R2mn%TZ)m$#8#RSa{et2xM zSz1hh$#n2HGW$6Oe3dcwo|?}y_{or$7x0ZHrAXe=02;O16~58AQ|6!P#$I*|Me#2H z4D_k40r--Mm~$dupsLv@h+~AFoC9c3yL~KmN~1nPn17Mb6ma`kfn=q80RRev>hLQD z$pISe!GC-@G)Ka0n4gWslhk8d&s3xU%`j2^8qV)M^TMJF#%-WsE|uZX2-LWduq$K? znwwWY+~Gzf>?)~*ePvTIJHW?fPJCFw3fz4#w;>7NpF1H2c-R9kr+W#71*Pup0fj6I z=I7WtTz^-t0x*%Ggbfq}cql;sJS)f;V5@+*h!og(*GWdhr9=YlL1}IjI42MT{5sqy zh98cy$-&b`4<7m_=m1pAH;W81Kgj;Eoa`$w|ycoadMD2 zkmmrW1X%a5a5{^h5GVoE@i^jVyZ7+`l0H#;zB`#u**|EYSmZ=rtDdj70AQ@+@^oVX z0Do}WgVVb~2=Lhk0qw`0OFw zMGZy#p9TWZUwKa)6X4Ltn=vFFl8Dl*7)Qxf>zqMT6k0gNVPmasM&^ZpfrFNud>sgu z Date: Mon, 23 Jan 2023 22:41:05 -0500 Subject: [PATCH 24/33] Update sOakSpeech_Background_Pals path --- src/oak_speech.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/oak_speech.c b/src/oak_speech.c index 649107e7d..d5b2ba7ba 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -114,7 +114,7 @@ extern const struct OamData gOamData_AffineOff_ObjNormal_32x32; extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; extern const struct OamData gOamData_AffineOff_ObjNormal_16x8; -static const u16 sOakSpeech_Background_Pals[] = INCBIN_U16("graphics/oak_speech/bg_pals.gbapal"); // Shared by the Controls Guide, Pikachu Intro and Oak Speech scenes +static const u16 sOakSpeech_Background_Pals[] = INCBIN_U16("graphics/oak_speech/bg_tiles.gbapal"); // Shared by the Controls Guide, Pikachu Intro and Oak Speech scenes static const u32 sControlsGuide_PikachuIntro_Background_Tiles[] = INCBIN_U32("graphics/oak_speech/bg_tiles.4bpp.lz"); static const u32 sPikachuIntro_Background_Tilemap[] = INCBIN_U32("graphics/oak_speech/pikachu_intro/tilemap.bin.lz"); static const u32 sOakSpeech_Background_Tiles[] = INCBIN_U32("graphics/oak_speech/oak_speech_bg.4bpp.lz"); From ffe2844139f8f3616c1a3de6a0b0ca6c98ddc318 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 24 Jan 2023 17:37:41 -0500 Subject: [PATCH 25/33] Colorize region map graphics --- graphics/region_map/background.png | Bin 84 -> 144 bytes graphics/region_map/map_edge.pal | 19 ------------------- graphics/region_map/map_edge.png | Bin 495 -> 556 bytes graphics/region_map/region_map.png | Bin 3407 -> 3846 bytes 4 files changed, 19 deletions(-) delete mode 100644 graphics/region_map/map_edge.pal diff --git a/graphics/region_map/background.png b/graphics/region_map/background.png index 26fb0c84c75cb24424caa8a6bd33defe0e6f7e00..ae1447db6e6f89a3dcaca08f4a86fac25c772cd1 100644 GIT binary patch delta 125 zcmWHUz&Js&oSA`vp|WN{29Poc@Ck7R(*OVeKYRARJL;KTA&_jPZ!4!j+w~`3{A!v3@XPqNHcvqkRimnGDnT! Y<*E3!tM*(=0xDzhboFyt=akR{0BQm@3;+NC delta 65 zcmbQh7&1Z9ngIy1Px7|`DQQm^#}JO0$v^m6j%743s=Q!gJZCV=#ZhZECqo*u{npa{ QkO+`+Pgg&ebxsLQ07b+ShX4Qo diff --git a/graphics/region_map/map_edge.pal b/graphics/region_map/map_edge.pal deleted file mode 100644 index e6eff3c7e..000000000 --- a/graphics/region_map/map_edge.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -139 74 49 -180 82 49 -230 115 49 -246 205 49 -189 156 41 -57 164 49 -82 213 49 -222 189 49 -255 0 255 -255 0 255 -164 164 164 -230 230 238 -65 65 74 -115 115 115 -255 255 255 diff --git a/graphics/region_map/map_edge.png b/graphics/region_map/map_edge.png index 149e64abe85a9dcd4ec80a2298024bff53e99543..4def326bfcf7029d0260415975762515115ba1e2 100644 GIT binary patch delta 542 zcmV+(0^$Ad1FQs)8Gi!+001ZqZ599k05DKYR7C&)0EL!$ry0k=s+K~zYI)zm+3!Y~vDa9TelpK~5n@m> z2i~Qw@+`h}Nv<69$#kV@!r!)%VP41*U}73rrYW8Pz-C9p9PsuK03>ev{gzfS11uf@ z6q^Ui0g&L@2PpJ$ng$Ng`Gk9DfkZ!X2?35Pb&}<6vl{@1qCk!~v6}#nS5m?QHcr3_ z>or0^$BUv~U4JtJ=sPB^|5R*&F0R^^&H*eSqDs1=haDgyFhMBgBNuOgTAG6}0%*Ab zP?^@o4ET7J*L-~hl-w{6RPM3?T-OQ)msUcofFW~IVKK%lPR2c~&Z2zB@*&Q#sLCFI6lB%+8w@@Xy z3ecxiRaG^Ao2nNhAOo0~25wb_Cjf9h5itjRKLh}Y)$#aAtACgQ?hgQp%>&s0sIl$? z6#Cdr0|%&l%{??gt)AF~0LO*c$!v8#4S++Qqd-%eO#sJJDd7PVC*X?91tFl~d7fO? zr3Ta;9an#*Ya0f9JS`Hw zJ_0gsm7u1HmwiVP*o}c;m}Y>3i;F2B7$$Bn0k!017VoEC4?; Wg-9GFI@-Yi0000Ge|_`%^E^cS|(D~ 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 L{#d0cHSzxdpM2KW literal 3407 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 bVZ3Muw~P~OWoc*Ez8v7X)7`P&o|W`}5Qx!* From 240cf616ff02c82e313802ee4ad30d5b8472898a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 26 Jan 2023 22:30:16 -0500 Subject: [PATCH 26/33] Colorize berry crush graphics --- graphics/berry_crush/berry_crush.pal | 99 ------------------ graphics/berry_crush/berry_crush.png | Bin 2151 -> 0 bytes graphics/berry_crush/crusher.png | Bin 0 -> 2502 bytes graphics/berry_crush/crusher_base.png | Bin 639 -> 626 bytes .../{data_EB0ADC.bin => text_windows.bin} | 0 include/graphics.h | 2 +- src/berry_crush.c | 2 +- src/graphics.c | 7 +- 8 files changed, 5 insertions(+), 105 deletions(-) delete mode 100644 graphics/berry_crush/berry_crush.pal delete mode 100644 graphics/berry_crush/berry_crush.png create mode 100644 graphics/berry_crush/crusher.png rename graphics/berry_crush/{data_EB0ADC.bin => text_windows.bin} (100%) diff --git a/graphics/berry_crush/berry_crush.pal b/graphics/berry_crush/berry_crush.pal deleted file mode 100644 index 8ee3398d5..000000000 --- a/graphics/berry_crush/berry_crush.pal +++ /dev/null @@ -1,99 +0,0 @@ -JASC-PAL -0100 -96 -98 172 180 -255 213 156 -255 197 139 -255 164 106 -238 131 82 -222 123 74 -213 98 49 -197 82 41 -156 213 189 -123 180 156 -222 156 255 -172 123 222 -255 0 255 -255 0 255 -230 230 255 -65 74 90 -156 148 172 -255 213 156 -255 197 139 -255 164 106 -238 131 82 -222 123 74 -213 98 49 -197 82 41 -255 238 0 -230 189 0 -180 180 180 -139 139 139 -255 0 255 -255 0 255 -230 230 255 -65 74 90 -156 148 172 -255 213 156 -255 197 139 -255 164 106 -238 131 82 -222 123 74 -213 98 49 -197 82 41 -197 213 246 -255 255 255 -238 238 246 -205 205 213 -255 0 255 -255 0 255 -230 230 255 -65 74 90 -255 180 255 -164 172 172 -98 106 115 -123 131 139 -139 148 156 -148 222 164 -156 189 222 -197 213 246 -180 164 115 -205 189 148 -213 205 172 -230 222 189 -246 238 205 -139 123 74 -74 131 189 -65 74 90 -0 0 0 -148 222 164 -164 230 172 -180 238 189 -197 246 205 -213 255 222 -238 255 238 -255 255 255 -65 180 238 -255 255 255 -0 197 57 -255 255 255 -246 213 0 -255 0 255 -246 238 205 -139 123 74 -255 164 106 -164 172 172 -98 106 115 -123 131 139 -139 148 156 -115 156 189 -156 189 222 -197 213 246 -180 164 115 -205 189 148 -213 205 172 -230 222 189 -246 238 205 -139 123 74 -74 131 189 -65 74 90 diff --git a/graphics/berry_crush/berry_crush.png b/graphics/berry_crush/berry_crush.png deleted file mode 100644 index 6e43adb27bf0226c4d175b9dee89bb4b0566856b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2151 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 Vzggl@6aVAK_w@?&taN8&{{aplayerCount; ++i) { CopyToBgTilemapBufferRect( diff --git a/src/graphics.c b/src/graphics.c index 0cdca0e46..031b3be9c 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1392,7 +1392,6 @@ const u32 gTradeGba_Gfx[] = INCBIN_U32("graphics/link/gba.4bpp"); const u16 gUnknown_8EAFE80[] = INCBIN_U16("graphics/interface/blank2.gbapal"); -const u16 gBerryCrush_Crusher_Pal[] = INCBIN_U16("graphics/berry_crush/berry_crush.gbapal"); -const u16 gUnknown_8EAFF60[] = INCBIN_U16("graphics/unknown/unknown_EAFF60.gbapal"); -const u32 gBerryCrush_Crusher_Gfx[] = INCBIN_U32("graphics/berry_crush/berry_crush.4bpp.lz"); -const u32 gBerryCrush_Crusher_Tilemap[] = INCBIN_U32("graphics/berry_crush/data_EB0ADC.bin.lz"); +const u16 gBerryCrush_Crusher_Pal[] = INCBIN_U16("graphics/berry_crush/crusher.gbapal"); +const u32 gBerryCrush_Crusher_Gfx[] = INCBIN_U32("graphics/berry_crush/crusher.4bpp.lz"); +const u32 gBerryCrush_TextWindows_Tilemap[] = INCBIN_U32("graphics/berry_crush/text_windows.bin.lz"); From 719d3d3cc65a3bc32835be3b0d668c734637ae1f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 26 Jan 2023 23:20:03 -0500 Subject: [PATCH 27/33] Colorize teachy tv graphics --- .../teachy_tv/{bg1_tilemap.bin => screen.bin} | Bin graphics/teachy_tv/tiles.png | Bin 1760 -> 1971 bytes .../teachy_tv/{bg2_tilemap.bin => title.bin} | Bin include/graphics.h | 8 +++---- src/graphics.c | 8 +++---- src/teachy_tv.c | 20 +++++++++--------- 6 files changed, 18 insertions(+), 18 deletions(-) rename graphics/teachy_tv/{bg1_tilemap.bin => screen.bin} (100%) rename graphics/teachy_tv/{bg2_tilemap.bin => title.bin} (100%) diff --git a/graphics/teachy_tv/bg1_tilemap.bin b/graphics/teachy_tv/screen.bin similarity index 100% rename from graphics/teachy_tv/bg1_tilemap.bin rename to graphics/teachy_tv/screen.bin diff --git a/graphics/teachy_tv/tiles.png b/graphics/teachy_tv/tiles.png index fdf32ca305c9aeab9be89e10177f4cef11a6ef7e..ecc121d02ff984e57a7e6cd0888396490c9d7bfa 100644 GIT binary patch literal 1971 zcmZWqdpOhkAOC!}iN_xVPzktVI{C-O+kH_Qj z`2wj7;~hSg0Ia*>;p`X~eRAv~>)cg}0(B4WZIiqH_&{chW9Tf>eta(B)h@W{=&cai zRhx75z8u@f6(0Wv6{y~yL{0ixZ%A9Vv|Atbx||v2ebBG%U2F9Cws@7;IpdC>>8IY- zu`n{+NnqfLTNKH!iw>%UzULAXro0UMfvsdypTP+e;s)Y7ZNr2`kBgG)M7Ual(a+pZ!y_N-PttE8nkt+hpvc63J&Ln6nJ5A{CgMB-T)zwx(9Oe<~&AXPLxZ)9)+!0MTLQ2XgLFT4W;YDMeFmSn`_y?3#Fz)38%A~Am+)6 zxmrhj@dz}UVFE-OH_oGF4UKBSJm?rvcYT_eI?}%XomHl#sny7@7oN=@EA#zb*J|s& zo{>y4NY*P@aB*KT0Ib0C?N~1I0x~m4HER0Ha2tl8z~$9QfY=vLrQ{{48rM9Q@O&CJ zGgQ}ne!Ech<#a@IXwMT9QP*bw#8T_qZ4{*g)~n>x*`nFP7%$5$^!!AZOi6I!asDQY z%r73>mG_*HeUtpc?7fwJg~6pwB3ILJwdC*}RCn&HW1y7d+Ae zLCpYxR@T?wsdl+>J#5X8p}OX8(|x|m=D%m7K08iP)u@Ax>Yk=`XS(ysHZfcScKXi< zAWV!_$Eoa3iCr%@;+pVWn;_l`Pw*@Bt}eKhhB|ZXiI(A7D_+N>2JcrKa#${eVd~$E z1;lVN{P*FLG|!Jsc(4QJksXY|=@LoSb#?JAV>q*bptWz_;@VOW^s3ARB56U?l=DFW z{FOYg`wGvu`p8N5kKM^(gYKf3r;G@Xkt@dV7Lb49R9-^+IA%h#I%buVG>Dd?8yHR8 zZgDwPaO+}s!)lBmHkgw}dU()jQUPIt8ln$~o}QZIE+wHfvV=J;67q89*ygzf&UnS^ zwB@AF`3aZGDGB!GfI4yLlIg0p!`hAe_i{!vFMm)~KCp)KPO8xm%4c(&Q)@!q&-{Hn z@XJCLbGFv3w`FB{YF1XMvb7Qq3w!Gw_vCJpvz#pL>2fm>1RYg?+pe)Td@UEQ8h4;= zN7B*_0TciDCBM(<$);L}8-3OoJ<(aKOMu5BCmaKGtSN97HJ5Q>V8`BA)qzFE`Ux7;;|#>+s9zLx|vF)P5YI{m|XdL#k3YEhHWxAAbvbux@QsRG&*n?M}45i_GbiX!a% z)(?>_-Z*m~EMgV*bH=9tXtL)I4=2e*q4TtMq9Ptb;(%|n+s0&~(U3h$Cb@zp)` z8OZx{RTGhaNE~RA(H`Im2(F0;LHmf+^Y##tSw;60Q0Yny*MlA)SCyg!&h2T@pjE52 zVT+@m_+Yr+VTMQru8NY#uA2)mC;=uF?|n_5rekiZf87RW?JrH5IeasAj?yuU>P-LT zXPKhZzWa|LkIFsO4k$Xd@>9Bgd{}ZA$^`?Xs?!STrYoO_z~M$(E>L}JV6e^34P2Aw z4xn97OAFfIVc~A<6-|Xa9P>&xNv8U%8YsFh!*x^d4T@hConzo3Lzc@itnR;r=me-0 zF$6b*B{FYw(cGI2@(B`IC|FjvYRwL&;Nm6OP}8ovbC6JolcV;2W|j<|pY_c{fcAV& VS@z)GUg_fn9xgu4H=O9F{tNT6gP{Nb delta 1756 zcmV<21|#{i58w@u7=Hu+0002mWJqEF00yT?L_t(og}s{k=tddZb_!E3Z0v&cMNQb{}<+)Cj+JDri$8>+1LVKESX|)JY zG3L1@!;jhlwivK^jO|<619TJ#&|PwYMy@zd0^lRI>tz7Fi!RW}l~V~g#lh)*37~66 z-mt6Ob&~*_Dcbaw1N82N2WaJT0lp{Tz%koMz@G_70E~(N%mo29F@ho>$pNSUx_9BL zfU!d^F!)4~1AireI>;+2uCU3G5N<=;7nK(;B;XGMh$*oE@Hg6S>}>25lDHy(WT&$I zaxK8dv&!~bfXd4?J=m_id^Qj850Rb391PIC4@Vz0@$uR+fm*d4V-D+wc|Wb zQLpQssl!69zh;K-CoF zI{^;AJAdHU1pqxGIe?e+{Zj$ini2qswKhRz+F(tzCB-&pdE)_7>!g`Af;L^KW!_Td z`dixwTCz|JBdL7<)rChQ0Nh;nAlsuo>$OjowNYNP!Oq&(SS|!SfQ6qUd-m2Tqmnkz zVw<&Z3tujfC$A$19m1Iq{<^Y)QcJMj?*k%y(6$=^xLpP7w;l@v-Xp>8L1VA_TDvsd+*B%hu z;uvGXhoNmq)1bpHp73IlZt<)iV3$?|bbm?!Z36ThKnC9Sw#LsHZlghmaf!BRKcFn~ za`*4#=)sW*+d!D7SfGI`lIw#z(wbY^)W+TZNdS)F>41l|TyRI*?Q+9{^dbNb=Wo9C zYUTcXV$$($*@sVduDzbs+?nqH4|Lk=Pkf}GjfIfeXgvPn`?Cfo{I%A5?iDAz*nf~C zm*bo;vS)JIo_Irvgj;9xA{$c;;FD?Ss z7|`Sw#c9%s$zUOR=1NmH>QHwSwRQWjXkFf1g4RiU35y zR8|4p5LNI4M^^#>-w0;_ZXPh8$A7uQB*X{+;9j;(KLRqbHJl+JE;8?Wi~#0=2bil> z0B&dzfw2K#_9DQ}17P{yjop7U3+M+xBkl|{05|qHreNfAPd`8iz?(S$7rjV9-`TI}hN(hd;lp{WNfZxE^8_X91K1^x|tShnd17OVlxBaeo#-F~kT) z0?;--oJ?-<1pvkni+IHgK;hYkH_oYeOcekaLntE5!zKexuxm5(g$*$j08~gWVu%0$ zguBb2us1S>A^?-XDL4;HSb+o7*BADI>rez-iXz&OHr4hu0qC8pgLC2R%ZJ}Qpx+Bg z@I}0eD_C(#jQgI&{n?M__kR+2>Jy6_a?fYrE)M|rd0UwBDFyv`*83H5$;fldHDCZF zA*7|@?MGU3!nrhO&Vjz%N0m3a3DBv{ea5*DUilK!7n>jh30mX$ljVQbEpL{YWMAO`0000buffer1); + SetBgTilemapBuffer(1, sResources->screenTilemap); SetBgTilemapBuffer(2, sResources->buffer2); SetBgTilemapBuffer(3, sResources->buffer3); SetGpuReg(REG_OFFSET_DISPCNT, 0x3040); @@ -527,10 +527,10 @@ static void TeachyTvLoadGraphic(void) { u16 src = RGB_BLACK; ResetTempTileDataBuffers(); - DecompressAndCopyTileDataToVram(1, gUnknown_8E86240, 0, 0, 0); - LZDecompressWram(gUnknown_8E86BE8, sResources->buffer1); - LZDecompressWram(gUnknown_8E86D6C, sResources->buffer4); - LoadCompressedPalette(gUnknown_8E86F98, 0, 0x80); + DecompressAndCopyTileDataToVram(1, gTeachyTv_Gfx, 0, 0, 0); + LZDecompressWram(gTeachyTvScreen_Tilemap, sResources->screenTilemap); + LZDecompressWram(gTeachyTvTitle_Tilemap, sResources->titleTilemap); + LoadCompressedPalette(gTeachTv_Pal, 0, 0x80); LoadPalette(&src, 0, sizeof(src)); LoadSpritePalette(&gSpritePalette_GeneralFieldEffect1); TeachyTvLoadBg3Map(sResources->buffer3); @@ -758,7 +758,7 @@ static void TTVcmd_TransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) TeachyTvBg2AnimController(); if (++data[2] > 63) { - CopyToBgTilemapBufferRect_ChangePalette(2, sResources->buffer4, 0, 0, 0x20, 0x20, 0x11); + CopyToBgTilemapBufferRect_ChangePalette(2, sResources->titleTilemap, 0, 0, 0x20, 0x20, 0x11); TeachyTvSetSpriteCoordsAndSwitchFrame(data[1], 8, 0x38, 7); ScheduleBgCopyTilemapToVram(2); data[2] = 0; From 7c0a589e58a247fb4d77edf59687ea6c51c16d6b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 26 Jan 2023 23:59:05 -0500 Subject: [PATCH 28/33] Fix diploma colors --- graphics/diploma/diploma.pal | 35 ----------------------------------- graphics/diploma/diploma.png | Bin 2924 -> 3172 bytes include/graphics.h | 2 +- src/graphics.c | 2 +- src/teachy_tv.c | 2 +- 5 files changed, 3 insertions(+), 38 deletions(-) delete mode 100644 graphics/diploma/diploma.pal diff --git a/graphics/diploma/diploma.pal b/graphics/diploma/diploma.pal deleted file mode 100644 index 3ba0bc65d..000000000 --- a/graphics/diploma/diploma.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -123 205 172 -255 0 255 -222 230 139 -205 246 156 -230 222 164 -197 238 172 -205 230 213 -213 246 172 -205 230 164 -238 255 156 -197 238 172 -222 230 238 -222 238 238 -213 246 172 -246 238 172 -238 238 139 -123 205 172 -255 0 255 -255 0 255 -246 246 205 -230 230 148 -230 230 148 -230 230 148 -238 238 164 -222 222 148 -255 238 180 -238 230 164 -238 222 180 -246 246 164 -246 230 131 -246 230 172 -222 238 222 diff --git a/graphics/diploma/diploma.png b/graphics/diploma/diploma.png index 2bf9cb27a07600563e87a40aaab52a744ab2d01b..5f7003dddfa4a0c3eff02ab03d82f861e0776b8b 100644 GIT binary patch delta 3134 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 jt`IC5uscreenTilemap); LZDecompressWram(gTeachyTvTitle_Tilemap, sResources->titleTilemap); - LoadCompressedPalette(gTeachTv_Pal, 0, 0x80); + LoadCompressedPalette(gTeachyTv_Pal, 0, 0x80); LoadPalette(&src, 0, sizeof(src)); LoadSpritePalette(&gSpritePalette_GeneralFieldEffect1); TeachyTvLoadBg3Map(sResources->buffer3); From b354b3714f8551de1c860c2d9968ded90d007973 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 27 Jan 2023 00:33:03 -0500 Subject: [PATCH 29/33] Fix fame checker colors --- graphics/fame_checker/bg.pal | 35 ----------------------------------- graphics/fame_checker/bg.png | Bin 955 -> 8756 bytes 2 files changed, 35 deletions(-) delete mode 100644 graphics/fame_checker/bg.pal diff --git a/graphics/fame_checker/bg.pal b/graphics/fame_checker/bg.pal deleted file mode 100644 index 9fc41db87..000000000 --- a/graphics/fame_checker/bg.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -246 222 82 -255 255 156 -246 222 82 -255 238 98 -255 255 213 -255 172 106 -222 148 74 -255 246 222 -156 148 164 -238 230 180 -255 255 213 -123 123 123 -213 213 213 -255 255 255 -106 106 106 -24 98 197 -246 222 82 -172 164 90 -148 156 230 -98 106 180 -123 131 205 -255 255 255 -213 213 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -115 0 0 -0 255 0 -205 213 213 -238 238 246 -106 106 106 diff --git a/graphics/fame_checker/bg.png b/graphics/fame_checker/bg.png index 5116e448069fcffcf9ce0f8b7b55c7bee2d1b18d..2e5864eaeb20598d72b400d0863e30177fd45c7c 100644 GIT binary patch literal 8756 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 From e9db20bad0e165d0f94ff017a875f8f4ad976538 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 27 Jan 2023 00:44:32 -0500 Subject: [PATCH 30/33] Colorize easy chat input frame --- graphics/easy_chat/text_input_frame.png | Bin 221 -> 260 bytes graphics/fame_checker/bg.png | Bin 8756 -> 1015 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/easy_chat/text_input_frame.png b/graphics/easy_chat/text_input_frame.png index 5dd47f481fcf46d4ea127c47f370f18b961a67b7..c0fbba87d39dda01c548859dc89e6d4a78c85bde 100644 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Eu!VDxcYag)#DT4r?5ZB_POaAXI{@-nRHVG(% z4*tK}^8f$U;^N{hd$-)Xdhh@L|Bfxi-+-$6JzX3_B&M#NV90mKfX7w0^z9=V2F?B2 zP6F5F>{#A$%Ty@6f%yQdz=IolD|meNoUE*p%u!lutyNvL>&U4MGmZpQymo96?&@TS zVO0?Oe{lBl0>?92d26Lwf;wuVdezuvp8^XkMGZ_o;<5!Xz(exy>0~0m)Y)ZZZp^EMP4g?vi@MMug$vOy{nrP+42kSy60NIZhr$sNkl6Y6d42A9V#PM`V zj+f4#Ow0SfWo;vj1OkL(oLPEjWxXFlV9!()=mxriPN1u!sj99|M5J78)w=;WrKJtO zEqW&ah~P;8Rz(1?0RwRI0e&Do4p656usnZCV6!<7Ai4z{z^_#V;QDiwAvo`=)&P75 zy?;0WhN}=jdwVj#?Sld|SZm2n+av`Y+pPeXN$_o&4SqcX&GZE=(BKr8DieUM0L|jN zOxXa&Qga5PwYg!7mmLA%V>Qy%bxj@;Iw_@kkOJXS&qxgL2b2I9H~^(6&L#j!1Ulq^ER~87>>2?@ z0q*yW09}WNC_S}_fGP6;0|L0;X9DW)6Zq~*CLUmX6aef;+(i$w6PRf{fQ|x~Eq`DE zNPNjAI_|5H|I=H63xI%K0L21yoP7v@$sLsg;GQa2zHk2kz}s5{z&%xZ{hWUmfE_ja z&jjKKbWDbp1aKn|_TLN;-vTEB5&zZL3>O1LlhBEP=kGn$>;(G&&3A779=&@c1U}WkQOK>0n z|7uqPpbG%7FSl|4S+>UknAdwTfb6`Rh7f@N2Tmb?A+|#DCtlFC7iv_zmVd@To4tO9 zV7n9``9W4!%*GAKJrw_WT6qzyOTB&_DtZn7>L9 ziVRW_ibObeElnd<%|lc5bIB^*|MmBzPXqwZKrgl*0U&pvJdX+igd(sJ!28cYGI??V z_=p_{@Ji$Y;EF)U=n9NXe_>O0$IboCI07g!imf05K!!;GqRHYKNdVlf_z&>;0J!9o z0FdN-0DwI;0suN_3}_`Rtq_3hNmCHO=<5NP(0{!MxGO&#z#O}y0saBwTNYvVcJ>JX O0000# delta 8689 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 Date: Fri, 27 Jan 2023 10:26:20 -0500 Subject: [PATCH 31/33] Colorize misc interface graphics, decompress tilemaps --- graphics/berry_pouch/background.pal | 51 ---------------------- graphics/berry_pouch/background.png | Bin 491 -> 614 bytes graphics/interface/hold_icons.pal | 19 -------- graphics/interface/hold_icons.png | Bin 120 -> 177 bytes graphics/shop_menu/shop_menu.pal | 35 --------------- graphics/shop_menu/shop_menu.png | Bin 261 -> 6037 bytes graphics/shop_menu/shop_tilemap.bin | Bin 316 -> 2048 bytes graphics/shop_menu/shop_tm_hm_tilemap.bin | Bin 312 -> 2048 bytes src/graphics.c | 4 +- 9 files changed, 2 insertions(+), 107 deletions(-) delete mode 100644 graphics/berry_pouch/background.pal delete mode 100644 graphics/interface/hold_icons.pal delete mode 100644 graphics/shop_menu/shop_menu.pal diff --git a/graphics/berry_pouch/background.pal b/graphics/berry_pouch/background.pal deleted file mode 100644 index 3398ff143..000000000 --- a/graphics/berry_pouch/background.pal +++ /dev/null @@ -1,51 +0,0 @@ -JASC-PAL -0100 -48 -0 65 90 -255 0 255 -41 57 82 -65 180 164 -255 0 255 -255 0 255 -106 205 197 -164 205 238 -189 238 255 -255 255 205 -180 189 180 -148 148 148 -238 230 172 -106 106 106 -106 156 238 -0 90 131 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -189 213 213 -238 255 255 -222 246 255 -255 255 255 -164 222 255 -16 172 222 -0 82 115 -0 115 139 -0 123 197 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -189 213 213 -238 255 255 -222 246 255 -255 255 255 -164 222 255 -24 82 180 -0 90 131 -24 82 180 -24 82 180 diff --git a/graphics/berry_pouch/background.png b/graphics/berry_pouch/background.png index 14113b2f933d7dfe08d0278447727b4f9521ef29..ee3f0b3771d039775ffcd3d1a3ebdfbd36cef60a 100644 GIT binary patch delta 553 zcmaFO{ETISgcJue0|P_VF+K+%#aJBV?!>U}oXkrgXTn5PlX@VH3HDyS`tJY#d*A*8 z!IFFb1=ieS2r6bM?q;Yyim4bVf~H;~XbVGBGmr$LTfdj<0qt$^ba4#v=-fN~VqUWW zkE^mGYn0osj+R~ZU;qCvQtV{jnUG_g`F!oseU`ij7o8Kenwcq8rNHv4ye{>TXZU)i zQ&Kuo%@GF{8(L`I2$1@~SkB8-czMA$_G=63w$-H%EX{L9Gt_CR|g&$k@Lr3{lrKQEM4zREDU@aUO{h5UT=%Ju06Okbv+Vwm0C z7%nwut2*;lxjE(H%=%Ir-rh`DyTfG13;C7z3itCKWOhH+&XD)q@WG`AZ}?{LPMFOm zeK?-C;KwXpr~6iWxcI)$Hs)~P)tI~~u7bNp=(CfB%+{R`KF{mCbV-SAPxe70Zbpmj zjR}!040FCcW4M!Be1QAMe}5X8A^;1JX6zEGHd!I1(I$+k`%coH)H^_gfW(1J|Eh-OtPCeNpze@>LY? ztp6Hp%?@n8_XDY2`R$o&xNp3*w!4?)knwKz_iGLD3%9IxbrQYj2Z}~dS3eh)bxsLQ E0K4Pq0ssI2 delta 429 zcmV;e0aE_v1nUEk7!3pi0002LHse76001zNGBkhB&^ng@00DMML_t(Ijg^(LZi6ro zhW$<+QC`PO#EeokT}y{PK%^*ZC0@Z#(25NSWnpIXnxzuGvwgun+o1kS;O^tY97YiW zB6$w?#>Ze^C{<5kRLuamBmz=HeQ(30hV=@YoFM|X3~vUqWx&3P45y0=Rq!}6Trxmp z$N_&@!%OE?;{=P2HB)|_AzBoV|m(8c<~$UEX&My(;|4G!hG{IJTT%bKTog+3&4N?2+9WcSCco~(186x<_!iOX{3FT0d98rG|mKo$D48aCEyhg XH-8p+qToI|00000NkvXXu0mjfO3JS) diff --git a/graphics/interface/hold_icons.pal b/graphics/interface/hold_icons.pal deleted file mode 100644 index e31d717c9..000000000 --- a/graphics/interface/hold_icons.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -57 205 106 -255 255 255 -213 213 255 -148 148 180 -255 246 156 -222 222 115 -246 82 41 -164 90 82 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -98 98 98 diff --git a/graphics/interface/hold_icons.png b/graphics/interface/hold_icons.png index 15df00440bc69660313f69f9e7a1d7acbaa850dd..53eeedde38e217c9bb54ae6cb8d4f8185110cfcb 100644 GIT binary patch delta 159 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 P00000NkvXXu0mjf6SS92 delta 245 zcmV6kH*v-0KDw2N1G>#JiWQpzq5+f;F{=AoxL>mtRN-N$B|&ij{E5gHSGWpluca zijl+Z4K0P@cW@qt6XAzW+*lZ00NU8(As%54bi9TQhtf=7%WmOjb>tipZ(2^5Ko4mD zA4)7ZIh+cB<6Cnm&G#F?`h~#WB2s&>8%6dW`T#o%p@`@pndYGK{jTfCZl9szL~s72B;JNjqi` zjGsUc=ez#;1i1Y4=_hi--`#)8Uaz|E`}s5E57_Dc3)rLnUx|vS(HNur79G(W+YQbC V)*mnulV$%I_NezeTmpYi-~ir77Iy#u literal 316 zcmbV|%WVQd5JamCnB`-$d>3(HjN?E}D5QW000KaQ5H4q4a}Rb3 z&r5ED=*rzU{MOeC|0_l|u15>9odNU0fvF=QAv?F%*z6gr3}344RC)p9PG~?2=RrD diff --git a/graphics/shop_menu/shop_tm_hm_tilemap.bin b/graphics/shop_menu/shop_tm_hm_tilemap.bin index 92fbb7dade9d23b73b811bae28c4845b3f7f9ba8..4d0a67f0578b73cebb725c5025f4f06ff581f251 100644 GIT binary patch literal 2048 zcmeH_xe|aN3`Exh#iMX+yzl@2N5NJg89GPu>NkPSMtDz*gu#wTVVV?z2xy&s9ASJ_S+Ia%QF&tirgD;!OBLNJ6Qjt5&4-gTHzT@s zex~__<;Tp<AYC-f_jH>0pTYSv_teJH$3Qv9 ZP^Z=*O|P Date: Fri, 27 Jan 2023 11:39:49 -0500 Subject: [PATCH 32/33] Fix map preview screen colors --- graphics/map_preview/altering_cave/pal.pal | 35 --------------- graphics/map_preview/altering_cave/tiles.png | Bin 4029 -> 4089 bytes graphics/map_preview/berry_forest/pal.pal | 35 --------------- graphics/map_preview/berry_forest/tiles.png | Bin 5264 -> 5080 bytes graphics/map_preview/cerulean_cave/pal.pal | 35 --------------- graphics/map_preview/cerulean_cave/tiles.png | Bin 3893 -> 3874 bytes graphics/map_preview/digletts_cave/pal.pal | 35 --------------- graphics/map_preview/digletts_cave/tiles.png | Bin 4657 -> 4665 bytes graphics/map_preview/dotted_hole/pal.pal | 35 --------------- graphics/map_preview/dotted_hole/tiles.png | Bin 3852 -> 3898 bytes graphics/map_preview/icefall_cave/pal.pal | 35 --------------- graphics/map_preview/icefall_cave/tiles.png | Bin 4828 -> 4927 bytes graphics/map_preview/lost_cave/pal.pal | 35 --------------- graphics/map_preview/lost_cave/tiles.png | Bin 3964 -> 4006 bytes graphics/map_preview/monean_chamber/pal.pal | 35 --------------- graphics/map_preview/monean_chamber/tiles.png | Bin 4441 -> 4574 bytes graphics/map_preview/mt_ember/pal.pal | 35 --------------- graphics/map_preview/mt_ember/tiles.png | Bin 4684 -> 4675 bytes graphics/map_preview/mt_moon/pal.pal | 35 --------------- graphics/map_preview/mt_moon/tiles.png | Bin 5240 -> 5280 bytes graphics/map_preview/pokemon_mansion/pal.pal | 35 --------------- .../map_preview/pokemon_mansion/tiles.png | Bin 5133 -> 5270 bytes graphics/map_preview/pokemon_tower/pal.pal | 35 --------------- graphics/map_preview/pokemon_tower/tiles.png | Bin 2982 -> 2976 bytes graphics/map_preview/power_plant/pal.pal | 35 --------------- graphics/map_preview/power_plant/tiles.png | Bin 3490 -> 3501 bytes graphics/map_preview/rock_tunnel/pal.pal | 35 --------------- graphics/map_preview/rock_tunnel/tiles.png | Bin 4550 -> 4642 bytes graphics/map_preview/rocket_hideout/pal.pal | 35 --------------- graphics/map_preview/rocket_hideout/tiles.png | Bin 1593 -> 1667 bytes graphics/map_preview/rocket_warehouse/pal.pal | 35 --------------- .../map_preview/rocket_warehouse/tiles.png | Bin 1878 -> 2037 bytes graphics/map_preview/safari_zone/pal.pal | 35 --------------- graphics/map_preview/safari_zone/tiles.png | Bin 4379 -> 14718 bytes graphics/map_preview/seafoam_islands/pal.pal | 35 --------------- .../map_preview/seafoam_islands/tiles.png | Bin 4408 -> 4463 bytes graphics/map_preview/silph_co/pal.pal | 35 --------------- graphics/map_preview/silph_co/tiles.png | Bin 3504 -> 3472 bytes graphics/map_preview/victory_road/pal.pal | 35 --------------- graphics/map_preview/victory_road/tiles.png | Bin 4738 -> 15205 bytes graphics/map_preview/viridian_forest/pal.pal | 35 --------------- .../map_preview/viridian_forest/tiles.png | Bin 4916 -> 4871 bytes src/map_preview_screen.c | 42 +++++++++--------- 43 files changed, 21 insertions(+), 756 deletions(-) delete mode 100644 graphics/map_preview/altering_cave/pal.pal delete mode 100644 graphics/map_preview/berry_forest/pal.pal delete mode 100644 graphics/map_preview/cerulean_cave/pal.pal delete mode 100644 graphics/map_preview/digletts_cave/pal.pal delete mode 100644 graphics/map_preview/dotted_hole/pal.pal delete mode 100644 graphics/map_preview/icefall_cave/pal.pal delete mode 100644 graphics/map_preview/lost_cave/pal.pal delete mode 100644 graphics/map_preview/monean_chamber/pal.pal delete mode 100644 graphics/map_preview/mt_ember/pal.pal delete mode 100644 graphics/map_preview/mt_moon/pal.pal delete mode 100644 graphics/map_preview/pokemon_mansion/pal.pal delete mode 100644 graphics/map_preview/pokemon_tower/pal.pal delete mode 100644 graphics/map_preview/power_plant/pal.pal delete mode 100644 graphics/map_preview/rock_tunnel/pal.pal delete mode 100644 graphics/map_preview/rocket_hideout/pal.pal delete mode 100644 graphics/map_preview/rocket_warehouse/pal.pal delete mode 100644 graphics/map_preview/safari_zone/pal.pal delete mode 100644 graphics/map_preview/seafoam_islands/pal.pal delete mode 100644 graphics/map_preview/silph_co/pal.pal delete mode 100644 graphics/map_preview/victory_road/pal.pal delete mode 100644 graphics/map_preview/viridian_forest/pal.pal diff --git a/graphics/map_preview/altering_cave/pal.pal b/graphics/map_preview/altering_cave/pal.pal deleted file mode 100644 index f451adce2..000000000 --- a/graphics/map_preview/altering_cave/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -255 255 0 -65 74 90 -139 205 123 -90 164 98 -213 205 172 -189 172 139 -156 205 164 -230 230 205 -148 213 106 -189 222 197 -148 131 90 -238 230 189 -213 246 255 -164 205 255 -205 230 255 -238 246 255 -255 255 90 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/map_preview/altering_cave/tiles.png b/graphics/map_preview/altering_cave/tiles.png index 46dbcfde39844abd6598380465c9da908706d96a..29b90475c3faf35a9096b948e8529ae4491088b2 100644 GIT binary patch delta 4055 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 AYXATM delta 3857 zcmV+s5AN`y9BZe*j01m)OL_t(&ft{I4ZyVPY zfafo8<4qbE7@6w=nrIPpCsTib(k#+lH={_9xwJNg*J8H;1l@7VO##82mI9PC3unZ3 zMv)R@W;VP3zk6bSa{omc{YC?@-mGTcqU5wxP-LEumte>1F*U^8upWo z5Z*+B;n;`az35}%7=+-a7#{0J@gTu*7f!9(KAc#@y^A^Rwo=t+L;Z?yYGFw$m`X`_ z%tM{M65ggbSqLp+O2}OjVT!Z>H%jb?1|NIF0hfu)|%%pFU)JJ;JiS% zAkiDC9Pf1}`7?R04c7vAli&hi-oSr+<-#m4Pf=@>+(&EH80J_-eTH$6;$`<(u(-as zV$Fl&e!Qk|jxgk!=WNnYkJ`{4RE1-Krv+L45`wSKYJ|T@+LDjQk}Z63Ld-;PBXqCib%1lM&JW_RHQ*`lbI zoIex|*z)C^b^tpH4;G90sY0+3z)0THWr{mMAnIiiZ4CSIo+o&WZx|HVUEOZv4}c-p zGAHZ4eUU;{I-8Av;88QBL5`? z*$!{%81yhlEjlXa^E%5;_mMf?vrq7F9hxu>Cvj0!m&+o{KsJ2H9NeN$DD_W#5|%~~ zM}#qu8NtO0wNJb_=z!=&#jFT5YFjwM$z(kWu|=S3J+c) zmY-Vqm3qmvMqcEFKcatpwnTW((1jjFp|gBd!9V)If-#HCj2yOi%rHGbTyRyUh?)^S zmCb7Kb}>UP6F8rG5%Ik%w0bSC>$hFl)7yBg;I(`q=3v4sg6}AVY2fT>wr{;`{KOy= z*lK*#%xZWT6mJ6HEHC2iVLGJIp%6*zb#}%k6i) z0Iq8l{5*vB7|5r37QkCL@8DlNxFg?r9{;B`tAC=|KUnzjFBb0Ty%)r7_LIBAeAIh< zfA0i)ijT$`G|}0zPHnub(0cE-F^!io#vNRii;`Nf^0$AJ+XjBkr0KvS6_sqmr1zIi z)7&CGX>P6BEv<2J0L$I){{t7mVG9u4c!I5;SHLXyd-PVr&0Y0_o}~xjR)RD(*3I4DD?Y@%Rd6S*XdF~kcnq>I^Vy_TFj{<9 zRn-qOPg#FoJ9Wtl7`=pO;UC^dUiOaIC8H*KzJevW@IOv#DNMU~jMST5$s8Zl`KtOC zJaFE74r0;QR`sZL7B#vsF5dj+JoK*f8CxBNQ5x|EsCHGoxj27(9>AK$Bi=t+@dO%C zPMbepRBy`iya)Uvwpmw>ShXr@s_#)o1^*#@bdsH82SHTURr-KDvGKO!w)L98j z-XB!_TG>Moq4^C3T~Zf~cyU*SUbYfLnEZ~!4dxAA_~W6^1w;18P;JV#LxE8Zcz>OB zZ0_tqk}2@WkWkp-@Of2b2Ook$wTVa19X@|Yw{R_m|G$KqATD5z=PDn$v_`N49m$;h-*+jJlO0zIE~!H;)QjN!c+yKO$6Q<4EwHz ziEt-{L-@C(0mE2dcko8kA=~i1gVATh*n_k7f%RY=4%Ygh2R|ga18=opJBek{CtH8$ zl`Xuzy+QX=0&PW->T=Tg8Kf58LAXy|A+w}ylv43n;l2-V35*e>n>$kak7F+WIe6&7 zslw9XU|sve0ry$rSX)02!vhPmuGF0RpWz*WA&0gU-VWfn3l9aR?g}?~x^RLHT>-}m zr@sP=VggH-E*dK2KzaJ5+q!_&9ho4&eC7(_{ra^x^dm+}DEbfJ>Jl zENcQd;kvKOX$QwXys7XyH3e`17NezT%ynkC&9(X#jElJMg_COx(>iHs*m`}^f|Eqc z(y?#hcJga5H}MqK4oZJLc0E0B-ocU*I|K58EW$r4Q1bdi@V3CICpi&N26}(T!t}^p zZ^J~RQ=j6ZFMQZnn*OBzJp!&O-s}p z0jzR!`o)>pgNJcY9Dl7avxz0A_}hX*(onh9!S2s=>WAck+F!g3U|bj_64s4x&yBTCSCvfxf6d|2)xcmm~OmW0c*=5mvVUFl_x19c+WsC)$~EfNZTD; z^LAo!k2tozVZm1n)&v0j+Wu*dpPg9TCLrh3j=)aBoa&oJZX!mJ!WiWiHUjIwK1N+% z;mdq^^&M7UrxAM?v^*MPfD7{gTrUBvuWH<5IU`Mrh_uhK@_oXUXj^{>E2!g8atCG3 z@C@4!Sc{^PQv|Z|JjdGgSgM9bicv+u%?@tC0JVe*yv%D(1cJfdS6ujZ6;AR9iiRK1 zvYdm+8CLuN#@ZbRC&D#HuUwsRY_x`kRj9I_W3lpTIm3!2yjvEt*>cLQ5EG%-aACk| z39G0{7zjmpR@=&CKE;172f&6KgIe9x(jUDpYpxAbnU-L#tAU{i7d||;86s7`S~!N^ za#E0j*b#|xk;2`odWeI9EfI4H6O;>^wPegcn~aZu&^yo(=r{kh4C$hyii!W zl9FY)^f^eH*sR&<;5@P^P1=fY#>T>4o!QvbscUO9_gU~sGIbdQ3s2Ez$z|#ATI*?} z$f%2qG^C^j2#bF*4i)K44M9a|7Mop1n$rqP-=`=}5$1!GTd9S*4aG#}M4nr%`hQ+z z`&104mCCx@Kauq0W30~r9Rz<`ctaD-8W$Dp4ttpFI0g8f%_>pU^)*N`f1l>w))p?_ zVc&pEtgWh=yKY)>A5M6 zu`$aSo}kjQ5+q+s!N&^b=Lm+faqu<55TU#&8cS!*^=_+#_l(`th~R6PM#)W+7yewP zHn$C(G$vRUq2Q)DYb?DR7MMu&XDE2WVm%3w+M!*Q-LN|4j5fyF>%oQ^YA98v1IZRX zGmU@eD~7ohClfNM(w&0KABwZv#vi!U@7+95AbocEvk#4|XxHpoSzTS=zkgo_A~Q!5 z-0Ze(L=MQsLAJQ70v0eiunOOV-X(zti|q1lbQy9yti#AXP2ix#HQ;xb%^my%3fm#F zBMyv|X&2X{(LXQm8k84W+TlgAON#OW+ed#F+z6qLN{7B~!4BsR3bi6u%B7OO5BtT^ z)!mTxKG&Y)55XRHcWK)d3t#Qs4@>S058mxaUIZ^R4!~CTDR5Zk;Kc#|tAf?|evt`9 z&5(tIg~l!n+*@Rp1jVbPVGu>cf}yAVpsWI>ErygOC948x8%kIN4Tb=EQ(KnDYn55a3xyA4FT7m^sD-63#2*&)OM1d@g|n=) zulcUP66sban*6!2JK8D79!5b+>Z69ss%S+Iq|*#vv4-Ja!Gh6&y-h!k@Wy`uIZ=*} Tp}wwx00000NkvXXu0mjf^d^2+ diff --git a/graphics/map_preview/digletts_cave/pal.pal b/graphics/map_preview/digletts_cave/pal.pal deleted file mode 100644 index 923d83144..000000000 --- a/graphics/map_preview/digletts_cave/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -255 255 0 -49 57 74 -197 197 205 -189 180 172 -148 148 115 -222 238 246 -90 98 90 -106 148 106 -222 222 180 -189 189 148 -164 164 123 -156 197 123 -115 164 82 -106 106 98 -197 222 156 -74 74 65 -255 255 90 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/map_preview/digletts_cave/tiles.png b/graphics/map_preview/digletts_cave/tiles.png index 543cc2e8501852db7d95de8912620f1110a74477..e42544456db2e7063e5ec2b2015306d68fb7d238 100644 GIT binary patch delta 4635 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 delta 4627 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 Yzx-3#y*q_LssI2007*qoM6N<$f^qS8?f?J) delta 3816 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 delta 4800 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 diff --git a/graphics/map_preview/monean_chamber/pal.pal b/graphics/map_preview/monean_chamber/pal.pal deleted file mode 100644 index ce72a4891..000000000 --- a/graphics/map_preview/monean_chamber/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -255 255 0 -74 82 98 -205 213 139 -156 164 82 -123 131 82 -213 189 164 -222 230 164 -115 189 106 -172 213 131 -172 148 123 -213 238 238 -230 205 180 -131 106 98 -180 189 123 -197 230 255 -230 246 255 -255 255 90 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/map_preview/monean_chamber/tiles.png b/graphics/map_preview/monean_chamber/tiles.png index f53026124785de8c84bedc530fd920ab35eb2ed1..ca23b6ecfdd4fd3b3a329430a4977e8a117b13da 100644 GIT binary patch delta 4544 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 delta 4655 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 diff --git a/graphics/map_preview/mt_moon/pal.pal b/graphics/map_preview/mt_moon/pal.pal deleted file mode 100644 index 9a858a8c6..000000000 --- a/graphics/map_preview/mt_moon/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -255 255 0 -74 82 98 -230 238 255 -65 131 90 -115 180 115 -156 213 148 -205 205 230 -230 222 255 -222 222 180 -115 106 90 -148 139 98 -172 164 115 -205 197 164 -205 197 164 -205 230 255 -238 230 213 -255 255 90 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/map_preview/mt_moon/tiles.png b/graphics/map_preview/mt_moon/tiles.png index 5bada0e75ba797a4cd7e8bccc34e92658b325898..31c3581981c4df21a4380f682abaeb8272a10c6f 100644 GIT binary patch delta 5255 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 N002ovPDHLkV1ic89gF|~ delta 5215 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 DaJd%L delta 5107 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 V+%2q diff --git a/graphics/map_preview/pokemon_tower/pal.pal b/graphics/map_preview/pokemon_tower/pal.pal deleted file mode 100644 index 93f4847ae..000000000 --- a/graphics/map_preview/pokemon_tower/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -255 255 0 -222 213 246 -213 230 213 -172 180 205 -205 197 156 -180 205 180 -148 164 148 -238 246 238 -238 230 189 -230 238 255 -148 156 180 -255 246 205 -172 164 123 -115 123 148 -197 205 230 -238 246 255 -255 255 90 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/map_preview/pokemon_tower/tiles.png b/graphics/map_preview/pokemon_tower/tiles.png index 0539f23805dcd6efb74c6376abbaeeaf85b3e3fc..7bc8274c11f75049dcb5f5f0ff243ae6846d99db 100644 GIT binary patch delta 2933 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 l{3pT7Bb002ovPDHLkV1j6{w*mkF diff --git a/graphics/map_preview/power_plant/pal.pal b/graphics/map_preview/power_plant/pal.pal deleted file mode 100644 index 49e5d6800..000000000 --- a/graphics/map_preview/power_plant/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -255 255 0 -74 82 98 -255 246 205 -189 180 189 -189 189 222 -230 222 123 -222 205 205 -246 230 230 -139 156 189 -222 238 255 -106 123 156 -213 189 164 -164 156 164 -238 246 255 -255 238 238 -255 255 255 -255 255 90 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/map_preview/power_plant/tiles.png b/graphics/map_preview/power_plant/tiles.png index 0d152cf2d9fb51df7486abb55ba1f090ea6d37bf..345b80d0196cf36add687a508124097ae807ba6b 100644 GIT binary patch delta 3462 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 diff --git a/graphics/map_preview/rock_tunnel/pal.pal b/graphics/map_preview/rock_tunnel/pal.pal deleted file mode 100644 index 1412128d0..000000000 --- a/graphics/map_preview/rock_tunnel/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -255 255 0 -65 74 90 -238 246 246 -74 156 106 -115 197 115 -156 230 148 -205 205 189 -222 222 205 -238 238 222 -123 123 90 -164 164 123 -197 197 148 -213 213 180 -230 230 197 -213 238 255 -255 255 255 -255 255 90 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/map_preview/rock_tunnel/tiles.png b/graphics/map_preview/rock_tunnel/tiles.png index 68c63c2d3d989d28e7fd90d29ea70ca0831e2fa6..2e078ff1edf5f5f8ebad5ad7b89cdaee634aa139 100644 GIT binary patch delta 4612 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 M07*qoM6N<$g3nn06#xJL delta 1539 zcmV+e2K@Ph4Y>@E7!3pi0002UoGE$$001zNGBkgVBwTm^00qQJL_t(og`Jo^Ya2-z z$M-AfD~xb*T7d&AbO%>lK&a4F0vk0~T)@Q!0&XslC^cMFW zT(~f}42Bdgf&@;rd0yt_8SSpL&fl?P?aXif&oeVSFODLRV!eDE^^f|;{n02B-bez-+Dhs&Qs{cm`GHG(0p+1}1B) z&;hz_YEfZHH<6B9YelM7mNX(tMJk676_X z9*NrXi7@R1)9Yj_@q7JW3F-tx-j}XYisDL7hhL)-jZHwI?~6|GJCuWK&XkmHgN1)X z0K@0!)>*)F%}oHH$vtWx96RT#YI26?_QK>` zt?SO9NQOx+75%6t4=8egf82Ta?BjofAC*Yufmb9C#~4}QjBnB|XM`zP$g7q!j^1ISORFZ>ya+TL+d1DK25;Inyo$D4 zla*~lvIBEf778-X{>U;9uT~e`;9-G<**{N#P48Pcy?HI*!5-N3er^iWn>2rowg=wy zZ6l1mpBp+o6>y%Hg>WsKa=t(0wHxPa3f2LfJ84xkz#kth9OrkS8k}YSLVTa}kYT@e znKues#wmr0Mx&oTfz6a2mN~U}cXzGu8P7PeikO7}4>;tUW$)8#s7RSYte8uho?au& zGfu2uW(h)=oU?Z+!Teqgi|l_-Si?u(pIYZ&!W(17}>b zYtDFhweYDX7$)to7~;&a(bRSe+Wb!l#?w8(r?=c;m~lZf$3{bTTU#xNhK`PpcXziq zsC4+wb)j+Q*l2i%^v9(S;>=B9Q$In)G=+{nfp6~ZTeD9AyJ!^lI5~gQF?!AQUKzO) zD^>N+5{SBIM9$!ioBa%{Z8qj~P8u7Z4GDn|hFPxou>Ln&IC$)XWM>Ie*u0A?!)~l` zH40O#IU{5*WYcNj3%8I4)nI!eTgrsH!sZ3G9o-qmI*}NVjWF&8;|F;W`Jbm?+{0m@ zm5oE=Qf|1HYuKP5Y=nRPbw()xQ-u&_A&kptg!5dkw-V-cwi%8c46|-zZp{*o+hIy6 zQZK6N2=B-E18$pbIm6=#A z^hF5gLc8Eb=bq5Fg&nu%%*VG7rro~*_A-@o#0$Ql$La!JgzC#BRy=!LE<3?4b^)Ic zR;!2tD@kuC22&Eo&+(8u}zw=Mb5I={H!- zdHukawJmcnpK7nloFdzX`QRBix4^jFSeSw`VN*^RhHWmlGq44w^Sgwn)1S3VF`T|} z2YA{MF3iors|mK!7M8=Y^6CylpzeXJK;wze6#h~1M;dD$91Ggy=r7FJvVdLO4KPmG zop77;c-+DHss&ywera)zJzT~X)^!*8I+MhqeFPIKer?Ujabgz0Ny3BL)Bf002ovPDHLkV1l2E@WB88 diff --git a/graphics/map_preview/rocket_warehouse/pal.pal b/graphics/map_preview/rocket_warehouse/pal.pal deleted file mode 100644 index c4fffd171..000000000 --- a/graphics/map_preview/rocket_warehouse/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -255 255 0 -98 106 123 -139 180 172 -222 213 172 -238 238 246 -246 238 197 -189 156 131 -222 189 164 -213 213 222 -222 238 222 -139 156 139 -197 222 197 -197 230 180 -131 139 156 -238 205 180 -255 255 255 -255 255 90 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/map_preview/rocket_warehouse/tiles.png b/graphics/map_preview/rocket_warehouse/tiles.png index 0ac5d6048db70869bdf791c38a8578bc3ea46082..ea8a3d2d37d6b28c73fd038f480ef51da4efa872 100644 GIT binary patch delta 1987 zcmV;!2R!)J4)qU^7#auz0002@dtHm&UKc>&yZA{f$<_8`l0zF1C4zZZ0G zmS^C??|?IztDIka3Ji(-v0%|MnriB=EYD00Zca4zU2>ywr~9}H%5F_T9(NesRL)6F zB!d$NgOgi#28<7ZBgaW?Its2&H^60}x-mpDu&d-d;F6=wuq(oU!Qd5Lur6%|t4IUR zUZH}&F61G2tc~w@qnI?OzU|c`VzTMaY|^xsg*scwTxHw7zrVL_n{s+w9r8d``UE)1 zB%ws|T`$h{0=`V zI3fqZ4uQ{`1V+BOwbBP4qu{)-DB7E8y^zm<9R(i%-ggWAi$8zH)B-r%29Wj8zl3KQ zT+KEHb}cw2;2F>}o>&F&@gISYQ83OEz>u*FPzFgJVbQ#Q#wL4zP^+7|;)!L|?+(@X zlnG4L1EV(sVD+AAadysS84nuIbz5Em>oyuS>X8@P)u+3Sg+w#8_-`e=h2CNCGCm2exH0 z?`qr;BaR4N@VO_ml;Ot+8jp~jxdz*?8Yg?IOExusN)JAR!4NjdU}vtuI|kd@#uE4{ zgh8RqWgFYL$0s zvI-}dM~*@E{deLB|Y<6 zNx%bAx{23vtRN0<>PmTq@o_-onbtX>u@!8Y#R9ml!_!UqTe=hpRE=AI@Yd=>hX z-CMqFJ>?zn)!qomRObJi0QJOpmYjkWYtfqPHdvKG@KcTHtQ;E!9_RNp7BZ9(>J-YY z$C>kp#zpRdnSCuiJD%HrJp?Q}2H(_}W9iwkzwqhMoyvaOJ+PzHcyi1RaQijj=f`7U zhgT*i)M{L{3KOg#__k0k(C(;@_Ubp?6>ZCK$-AAQ2_$kue+oAIPx3r$zp7k{e*zZc z-;*@L1^P3vaP=@z*nIE+EOIYqnJ|mbbV+m@ytA|WV(PxkjC&s*taaT>Q!}~C{TmI) VkU@i@VZ;Cc002ovPDHLkV1hKdxK;oF delta 1827 zcmV+;2i*Ae57rKl7!3pi0000oi?Edd001zNGBkgR1f^X700!YnL_t(og{_#+i`zyN z$MrAdUy!?y$}9n^CcRey=OkF;wkP{ga6@2wX^2V>J`^wLmj6MAmZ~I&J!b!p?Ww0y z`{qJd3x$QM@5j8+8)+oFp)XlWmgb}HoA*ZZW*h`yC0S@Jg0u2b!CxL?k0oG81YNi& z3k84k!C}JzxQx26YeR71fkALYvZG;Tx6d`${Y7}TSit`UeVz@#r0&4=0;MOSd=d|5fV;@`^7;mCA4b6)wcF@+3IYux?y1 zTy|i%;7LMh&N3g28P#b~@Ow##o*W(6SJ3c=@#o>bWwN-#b366&f4d5m>` zGM$`F;x~6@m;?f7SjNyumJENRDG1=nd~`ATw3eyXfq8Aw!1f^%D?A0^zaINwZrV|v z#M6*>R&)3V!rO?g3qPsrl?l?B+1e~(^4ba~1zQ)cEqq~>WAfSxC%%BmD6|<<2G2O7 zP=oMx5H@>29WxNV;81UqBrYx~2>-ys z-9GogZaApNM`4-J+&;H*>;tVq2VJ*65;$~WlMsN>GyXHMqz#_d480z>qb&WW3tG87 zx19!?fef?o5=>^~ogRPJIl|AMcVQ`oZYlU?*HM1nRgPp~)hZ;rYPJt#{Qn$A+`52;!c@cr}ZbdxWD~Dl)fg z!;x*UkL)J7D6n`X@Htng%QXwyJ=SX*AO(w;3Wf#C>&s5T^T2=B%LXQAFEe+KwcLAP z>!rZq?N>1LvtKi3kM*(-W-l##Zu;SDlcFA&Lh>@RaCpuU9EK|j*t_53ILm%wST{)1 z6i3)~^bQ{WeU>?knUp?o5Ya*&zc_FO1~%KThEi zNx>Ca5;d=+T7Z9PWpTR>>eSd9_^Z=qGKe&sYGpE37E3C6vYtt_uu``7v@$(8Q6NT({0KDU#k z6&U4om(F zcClFT3o@gGcVQamJ+Qo7X7~IwbL=~Y`;>(>yXSxVR7IR5&}VwN_$92_uJC7wmFv$Cj0;t+P1yfN+4B9c zs>iEUo@-%aLvUm5fq!8((EV`HSc|dyO9xsl-3zglr+lwRczuj@IBOb{w R4*&}Q002ovPDHLkV1gLjcY6Q; diff --git a/graphics/map_preview/safari_zone/pal.pal b/graphics/map_preview/safari_zone/pal.pal deleted file mode 100644 index 0434848d8..000000000 --- a/graphics/map_preview/safari_zone/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -0 0 0 -222 230 213 -222 213 148 -197 230 148 -213 238 164 -123 164 90 -230 246 246 -222 238 246 -213 222 255 -180 222 98 -205 180 115 -205 213 197 -180 156 106 -164 197 90 -222 238 197 -222 246 213 -255 255 90 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -189 222 98 -172 205 90 -115 172 65 -222 213 148 -139 197 98 -205 180 115 -205 230 246 -180 156 106 -222 238 246 -189 213 255 -197 230 148 diff --git a/graphics/map_preview/safari_zone/tiles.png b/graphics/map_preview/safari_zone/tiles.png index a226f731e4c5b238ce12d5af0f713094f715487b..ccf1d87a5f2f6e2062395c96aa7e601469cb5776 100644 GIT binary patch literal 14718 zcmV-^If2HBP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3>fl3Y2CMgO^qUIOP~IRpo@-a#+F&!u}RC8es& zs;#BUP=ts38wlVIAYQriKmUE*fAMGd;ax7R*HNqIPab*1$v549{(SxoKEJQ;Py6e4 z;n&xleP8#HmlFS`&yV$d-#>Z1{B)rFecgV2-L>^SPX8V#{5bIYlXPZ%|9xNo9w^1n z>*4#e8{f~({L}4x|BLH;*zduA|2a1nV;7E>qKhYmSi zhE)E%c5a?OFW!&uep@>~zptlXm%{n_eM9|ijlQpk^4sg_$7$j(R}}s}^Dn=s7Nh_9 z&rfT2@9y`W&)v;jS*hy2H}%)8yzh7;S&`HGSmkfyzry$J{Z;;TZgCN@O*DQY z&bLD6%scST7&utq6aV<@{`BJiSP6gUR(f$xys!A|{HHWR+usAQM4Y>DF(DBFUrFXr zgKsgm5Lm}fd?r^OQ;tRiLMd?vcZp3(mEiQKbMu)N-g{$-pO=9a0#Q;;jnIrV30BU9 z{Asz9L$jokT`8rOR(cs_)>LyXwboXJQM09%TWPhm*4t>ar=EN1wYT2;=ySx8fUq*^ zXm0c|#+;mVa_GsYC-0ckq9w~#tXi{f!{#D=R$gV*)mC3)%^i2zl>e@~x!w2J^Mpex zoqWovr=5PrnU`F<>E>H*z3uip?)(w8@GaY4q85IO+`o@n_(n|;%kO>d@2K%|YkwUg z2u_M(M#N$cM7${iBy?2Fd=EKCMNTpELjYDHQ42-E*+CH_g8774Zuk+qza#f=U*MoBL~szR-)PZwb04afEY@lw01TbZ-n-H!0h zd-yY!rl7%CI$muhryf?(8@$(B>dwLK*&0hy+6ifw$SrX&)@o5>b8v>v`+A?}j18#u zdQWXBW)`}KolhLS7E%C&oRyo-*Oz{Bo2-1C&2n#-z?Yj!u~b*KRtq&cIaSV6e6%<$+59U zJLR%Si<4SoZRbk&?Add?Wet{*JDmH1{pa{-J+sm~rCn`?L$a+yRL6CYLW}9lx+#bS zqaWqZs2t0Wbx4WEQr3991x~{??6fZNhi;5(_4ku`n!y$82c?;!5hcV2;Fn30+}#h=la#c^4X zb>m`jL#%sp(V)XTE7{q~BNm*a-@;K(((z`2&PwlOb?UcpbJXQVE}7q~LiQ|G=aQz5 zS-Gro8ac}vH66E34%ErOzIN`ur_Ev+_3Vu+8ZiuiiQ`K_-aFzU|5(h;uYIJz+*vb_ z0gakaU0txEsHhE1$Q6os21|TKUE!X&``n3DVx1S*AA_|sxpeP#In?65-WEBx=Y_(p zAQDDFFJ@cd1P3NRAqx`2*39ql^R{|>AcgA;B;@T4py`y_s;BOlt3lFp2*^|h8~i~_ zP+I~K5Q1#=)LMb(;jT^UhBfDLm*cc_lty>d#%)p>hSl4L5G6`#~b-)nRWC;+~T zrZQB5dGG|`aGaHsYAxMZTb6q6Tqq_OCah)atP*Y?5YgR<1RaGK!R8wT0Gxck$!y#j zwj%`TSU42>ZL78&ZPm`g)^> z)g+__p+euA+^lVdmH|If8y0Gv-&32`A)_E_9#zu6pc+AvAPq)%NovJFywA*0j2nU%1-Smd)y zS!W7g4Mwnf5{wZx#57%REFQmy3)gDGn6*V$eZ@S_j*ScUwHHnrp$35M!Ym1zE+b)M z!t#qkpKeS@0Q9(Pd7!?`(-uj)4zgvRtgE1Ow;y5frUuAZpJ<>pGHb328~|78j+I}E z0o72A*IAJZXpNGs51{+(Cj7aH7@pH`5#(+LJwYm#IycS)a4u)b_tL1r1?qu2K?DbI z!41IcO(~FP(r2?{`QAt}eKTn^0buLZla0w{36BNd8|lFEKM z$V-BToFN;tI5l(743Zl8W*mOBnp0!NIyFfYN(IDo8z33DO)T;mR6h{Pn=Aqa$c#lj zq7zyoIXqe;v*Za?V5BC{%}pW|Aje63%v6G0da7d%N1d_8lt0qO13yS2QpUrxiDDX4 zOpq%}Uf?RoeCxcVNhC15bq_!ZUW|@J&W6e!EPjAP;ap*J5?H1=@kXIUax{$1;ehHY2@yY^)@&xP4KTW9&8t zzD%4e{j~}Qt7pbYtx`YaH|iFXjXok5D;0uF>QpKPD5 zH=JNq?luTO;aCoi(&OvdR4#>7ku@^y$qYlMoJ5A?LM>L@K+IfY%3mk@~-)L%F59^QZA;U+5fv64WM=qlS6oHCE$x54q z?DWrV>UBt}z$qZu8Q>$Uir&oljZ+qtz)IA?)vkt6xzvFXQ*=EhX&e@NK`K+?d!k1s zbb^d2@pMwBsyxmj2g%|HhjSHpDfqCSh$(_%T7XzLIygC>q<=UW5|Z*p1LVPalM95m zNd6QEtfVRP7&86_QHmPn*aYJae>D@UCyxkHU1Shx!n%U2c$oAK zozcxeZ;|%og9P)v4~3u6LHmHg&xusuNC6F%Eeft z4XC&{kQI1b2nppAfln!HXX?x}OeU9O$Sm$3dk?8^=!zA9t%5%wKY=tKDiOE^>O=Zs zrOQCdl?LfMe$%C`(J?nKE&+dzfx`}avkIAE9fbDiGoscO>I0=6S$X{EcnXM2D`2)k zu^VTO{9>um@Ni#?QZmSA5`d-Xq!T$c_UTv`0P?_I)I5oTec1?DU?dCN>yl$Ts1F?5 zlt)OiZzZ5`_~=l55n4hnYJygzYdQoK@oH`I%jCF6#UjLbZU6{j+ZN=;K=Nny3ZTz= z8s=HjgFGbTRza+@jG+0fgwrPnFQX^{D0!Bp#NCLR&fO+l8_9_Eg`>dr(k^@g*EP&;y-$TCy z8F8l`0XiWL*acA@BtTL8M!uq&GhQj+lJP9K_q!?P;)*2rLfKb}s$hpnfuX-Im0>8H zFQx$6%VbD}-^Hs7y^S&Ib-ivQDB~ajqzA-K6i~dF3(|*Qj@W`~&17rU5?lJd-ELqp zu~=3ynCc6Fk6^mXpfHQw(P_8_2_8N^v;%#UzsGvQ( z=&yr5i$v2RjHGcod_^L}+>td@9&y(pLA3zcqeHLM4R_ZkHn3J4hXH4%_8}!9A&k9` z9KaJ+5_m-Qf})H&2CdWrJVP^0oP(K0_k#Q+l?C)s>C?3+AxMsqwUiBRK0uh%H~F6_ zUP2aM>JVpc7huH}au*#%1MUbea>ThgvYF5Cc4c_4ZVKK!t#g%puMHbke?ax1B_)SY zNAKcR7tDvIB)KLggs9<7Yl(ugMBekmom#?r?O-4X=V$n$sERwl`Gj0`$t^FMCxdWS1D>f54 zk#DhA+JZ1(bq~x6+1&w@T;W|jQj!;?DA3shlUNXlTr%#sHu8)c3AdFVH0*jBlsaILFi(3o5T3R=KvR%&gv`0Fue&?%wmI7a4Z%GGVS20vR5ipd4C7_ z$wGke144IQs+2rlcv-3o{__<s=WVN zLd_f4bS14eiZifw0X_QUUPm7l=>oD@oiho1H6>IOB`sQYNBg!2mGhdc;A)` z2U8a2!nfwQa})=mUedOt*|mP*G_j;qi3gg|Asi2fN9H_ifx{bw4vYXVymM)dqAs3D zSf~=xBr^cM)sRh`>w*}%Kvo9*3Rf>+0R_-We-0#c0*2!390(ImfqN~mh!hxN{Sr6^ zx}IJ6Ja`u<=Y2kr04hWr*oV$lcBMe}PDu_IE%+FDj%)=*SpvBXmg`*ByGm}%P1ajR z(2jtS0yZfTTqanCBJsz~4I$Nn9ZWz2L;?mOy)HVaqyuVk{g~Qv&y{aPevbzZc~5l@ z42KX(S;2uE92dPx4obgpa}-7cD#2_>Gr+p)iAh)zwFuf#f028}N`RwH{VAB*J?%R& z7-YZtD`*Q?KwBf2DbzIJg<2#NqdMg>w1~f=Zem9mA%r@M*GqGzd{Mg@<9#ICuXZ^Q z6jT(roOD!~Z-a^`swslmb|YE@B*F*5!bq>>wBg3dq20a)mkW-N3$?#JSx7sgG?BF= z36)M!M1Yk-fimC|B=AL5AWPu2onLEL9a9}JZ<)@(YA)<8ATle2h>4j?Zb~`L51~>D zOYoH_fywC|%N4pHlp^K}+!o8i0AdxE8nO~L5Li=#gpje`keyIV9Vf2zbr_17yR&7L zT2^-i~ZaENE2|<|yS9-x$WD$9pI1Nw$ zwZ+hkYa!wsopQ&bR_Iixv3 zaW&+M165CK$xvfU`&Pt_3&jl*RTOHh-(HiQ>$ zw{a&V$-xTzX# zJ9`b8Wrz{#8!@f+lGnbh_J{U7P{s0U^DKa%Ml* z$I=cH+6m0UdbEn5hIrjXC5Tc`AEmqr5MYQTj1W(Tm4A9Z9K50CQDI#+@%!QXQAMi9hb>kSqcXHKvU#h8Oig=LAx;baGMGcB)aS8a2KQqS$^x{`YZOr2cxZGeDv_h3_R+l@-M}z3 z9jgKKm8u5b<28hr!i&wS)K|`sMa8Ge@=*0;8)aFsE}_><;%nSuz1`ywDV_`VE#MHh zQmJ-LFF1`oaK$^4bOY15F!Z8uQ99*=C)Xep{uQf-#z9-gh;-vFbHZt2O)&Ph(U4os zCa4UH!I3d}hwt+W()dWI1Gi{Tuq;djwo|cznKVG9OCV^Y=)}&yCh<8Ubg+Iw+Sm-d z|0!Kv)g*C$&@S9Tm5I~#U^46-E-I_JTe3Da+yaAeZty2Kv&b_o-{PRfOAN2g!_2N>B}Htn-hk>I`d^%vd*xk$yK?@(ge zr`47(`iH{d>R^)r!{ORlY%qTTyBU!LSOW(b5wG1IO{An-k%4L867Z^?0}XkptcE!E@6Mr{3Cd=%Ry9>E?#1-5!7EKBP@!z)0JSOcRc(I?+ ztJ$(yMC1(F3#upV_3N-hWw^kn`cT0b8EiNpji%UYD4Y612nZAtEQ%ii)^I8NsdaTQ zNUrNVyw{*owEoPtWJ)#E(=|-squG}9(!5wYuc^Av;yNmct}Z#Xw-RU3UN$lw&5mUP zN#QRtn8naQgtpdr-^Gm@wSZwGOSM1SH0HtWs_BitDY%gXjDQtg6FvK2AS(40h+Ne8zPfF%}gbW*87hO9E0w>*YJ+rY%$c*!o1 z2im2xw7s-rt;@-%scC}YMPLj_DBq6#G*X%n7r4`3^cud#qmqZNN!{jv+TsRqBikJMZYS$hjW!=YPODrchb+t=wM+1u7 zT7h&;lcc_@iC}V6z&zFy>{t7d^JxHHTeH&5h)I-Y7bn$Tw0Q+8tt!lhFqaaH>VrR6 z$*BFOPA#70Gp;yxnN8M5o41rmg1??yeW6?M7I?(3pe8<|M$*v^PLq1Gvos>C{DlD2 zH8Jf$!Nwi|nz7GKog?l0CvBZAN49kB=@Y%zBGiB*aQik1G{k@^!*TKPu9ik>XG?Vh zX&GDsNTG6YAYF9!lupygD$JWqH-g#WGCn;HWcLyMoAEALqNJVGinr%dP5XU-5K78r znFLf-$*?94JBIENw6G4ITNX>rg?R_yHZ&9@-vnkAKa>D!Sx{S=iHHZX*Z2}z&}-^z zZ#=W7#IZTJ%{a>r2o4YaEslcHzZ4h}`|QxSMsmqHUmR`(v)5=>2OQe9{(`B0LP6i3i(xK@i)FOpqVnhC15bB~u>52jg8 zkD^}4W3n#=8Kit0gi7iV8Cb;f^TZp6 z6uh?Ii7}yRn&8ydRDQsuZAef-%|a}Wn1moAB%yareQj4Y(-c9Sh8Yr>daM|x5A;f; zMbX%^ny(&3ssZGv4&>$@$b57xu_0DDv)EMUg;}KAhFaJq;DDqgq}8>H207NFAt0*A zYlwsFzH(&TVeB|BTx{-cKPrC%UaR)-8tV#i{Oq`M^xo0ZE_x4MegQ zO>+>Gqm1p^Y6PlLx}vt8$e*PKS%d{hk}VsJ=gwJMazt%ulLD&?P$TQm14-=>Ed~l+ zU5KO8M-9i4Sc*L#0hh3n>iv@zD4*f5zyK>T4ON4Uk`@PL!eZc)xO-?G&8J>fO{j zriz0kB)*trPzc0G=5Tihq5$K=T@a4kFQzuLLqgM5vfQcqnK)K~L<`1-@ zc_TIp;~|ElK5;%MJD_GvOL>^K0h4YxYV#myk5;6qjQtEtSP}PfX~?+i#A-sDaMX(1 zl33yWq@g$sKBDAjIa)p+^*c(O8tCL~dxn8ip+~z57{_+js6aI8f=lz@3pYbFwSkBW zU-Jq{5Me<>^hLTGFOBA6ok(+Sl6439YEEC&58_QPBhZti%Tl)jE34-PWG5#w@a2lS z%0TB9jA&E{R5{Hd^YN8uR?TQ!tdP2Sn31IkSp#HaKvGiYgnDXcTI1uC#PHg3G9$Op z78V`qD4=d*3VIZ4LElHiyYe^yb0>Q@q_2^Z*W$uZLEZA$GOR^U3+Y&`xwu$(?EB&p z2@C*2JaFrJsEZJ(GePWTuUk!UWG}=SU~9p+=HH7ZjWEJaW11SC!kYWMiY98fsW-=j zECoZj1kH#@8flJEv&Y&(!F(U%JlbUQMYAX*f*DUhVvp8f8*jO>F;0jtykI`UhWakS~2{a#?&yb7OI9GA4YL8KqHMcFkvN zNZ#z(DHt1g5-DeKgM#lb3lO*HMAW|L#pNJMGcF2!#6_&7=L`9Op4>FS5WGNon~t>y zU^h6TDTm`{V18*z@^Azc(`Z#aQ5U(<*_QenFcz`y8maW!A@&_)*41>u2NpB2ptEW0 z3ydOe$*7@Nv=5jaUIn!E6G7wy)s6_An$hwrW7q)z4Z@qY+)LdT%uERPyRanhX_gDv z;JaX2?V@3PhdR$>s5X3}9{=l~@mFfNa-1@F2!*mkkneepsF4x=@H6jaZ&nHl!LJfj?&adz9yN&B9H?lgFc7m zDK?ifiu@5yLQU~{s9~fag%c|^qlfrF0`+1XuWpf$8Y;r-*j3URXvGKSrM(kGCz7#< zPpR#xrvp7E|6N`V$}ZyNfJ8m=AmdCi7EQh(rYcMV^Q!B+BRqg7|1>sh)zl02LpBZy z$KIc*IZ8x?x~qE+uR%3I+<~rFpIJ{2YP$(z0@&jxdtadvrsVZpg1WARU2P>|-Q0W} zi-)a8yp256L%UbApa`PZPO+_lm9Ae&fpd*y=TQ4wz@%YBZLo~XJ)1VX%X@b1J$<14 z_M@(kylug!L2QWy_Uva zkj4_%8dIi7)zsEDaCvjJ=N|VaeIRiZHT3)TjW!OO2qT4-jMLUG7x1Q%>mt#nDK@x3 z$lug4X1S)ru~v9g4`3b9@`ZL-XHnSfHjA^b@D?*&eeOMC4(b(Q0`pW@CMe`t2!*s{qGuMU(vV$O++AvpV zn-hq919=3267KtilF+5fmDao==P|0iN11!$! zuNg}R%4kfU6ps#fvK2QCis3pC6NX{j(ZJtRyan!QbBkBikA{ZJ)3u-NtByCtVEv{#pywgKKSx;k1lxY%J?%2W^3o z*$Bw02Rh7?<4qxVSv!nD)3{wTI2Lekxl7M+r+jiRkKWgS;ns73>dQ4vy>$&nX%3uA ze49}BZ4~I~a}kRnXte3HF<3}~G2!c`htgRZwH4uGm+)2%7J(fS3<@M(UM@3gj!gTmCQwn!LOV9DP|KQ}(_@+l{h@~hs6;t$ z(=KLO5~Y+MDp-Afkqd99DB(IZOVrrk!etNe4JA)vY1UR`v`zmf22>|0RA8~8sdJnO zUK&;c1At_CT0oyth|nzD+T5DxZvca=jix79J*Zo0@-b4V)%OZs zLkc*s_e?RBr(Fm=L#2nNBc%@VpusT)V4Vgc2tmL_#OV?T9+Z$y&c`6D#S)qzO%1gq zyr(b)tMa@>g0blVH#D9e``X&{RENDI*WReaC^^pe;2t#z^~R(pMZKObCEO(?J+^}` z&<24f8T9Bw(Sy<)8{&0c&t#w;;H|Bx!Z(;pF!*=90o|S@0JY0(O^=jl*k2Pk&>O3Z zgn;!*xT5UIN5zNd$USx>0v=usHW-3@imNVTJBFxDY(^GlBiAw1AX&U3l1 z|6Rv=WBG_^zErhyKpx5v&#Aq{nYSK?)qp}k(2y0#8BKI(q-kT<&v%z7X_$_sTYBUh z-$-_8Y)?b}n3IbfMCIuzd4iQo~W}_9Sne2d$Hy64S$5uiSMW;=VQ7LyadrQjQi&K+je0IiB}SY1eKl$m8|+ zHX3s2(TglYZsq-dG6YFJj5ztK2dU89Srf%!q4&Tr6yhW$Afv73$pw&4jNJinrkP3- zMlDF(_tXRBS6g7{th=?n{J(UeFEa1g-$eib0ANr|R7C&)0N&=+-qn=F=9Ja$q&9rmP)y1@&YNW+l-tNWT_SOIYTK4w;N@9D})ztt10KMK~tj$_; ztU=z@l#9h;&9rmP=JvFlYToYlz19E4=9E;-lZpTU00Cl4M??UK1szBL000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2j>AB5(5v}-9h*O01!q=L_t(|+RdAZa_cG*hOvOS zkc3@x=0sUea`XOgIrIh%0$ItOxi#31Z7qCsH;u6PV+@zS{^4T&KfzyhIaA@+?wtOK zBXE2EGZcpR8=((W1-En#?}BSwThX>X>$-X^?48!Yd*H(wpa{Cl+&5sO`j$<~NtW{^&<-$oBGr=eO;D z&<61{wcw5Fz_(OE2LDl|#+;eT_#4PPW{Lug@>;8;IN$!!G}mxeXHoE!it} zy;P;zko}<3rvo>CDsUNPDat^4rX+5V?=Rmj&ttG~-?Vu-5k5Y2HSh26dOvP}N{NQt zfa`vveTU@tn*11>B7M%{jYs8u`Dn>Cw)RHX(a%kcxqmZwd!d1C`;rQ&_IIlIW0-k3CR(cP3pOGdHl`Pt`mV;z5}yLT3cAnVgSGX~&tN2^ zV*+z4Qlvk`$IyZo6(7}$GGSo%5g5xm$9a1}@+)+(59v|x&Z8T|M|WPu=$d^7{F+mm zi*QqvX)N!gOl{xZ=!ak=zrqIre|+$$iZSoy=pNj0_4PVqNuO8zu)^k$3T^y$!CKZ- z`1|FuEX##T`lP^2o~CJ5thvKI?56s}Ib*LE4aP4|S9q9maAFtMy6(6qpi)=i68NIQ z3$o2slLdyp8rk{)pTo8Hv~U4!bYvI|KCiiB`o0Bo9i$4pl#;>g%4bXv>>l@AnRejH z;DAYvABTKho2!SRWLWMjjKD(Hf@936aQ`z)}`s$hO#O@W=iI#bC1f1 z{voor?bxQ_BKQQeHDJhI24qub28H?QVY&3dc}sO<17?etzs;>Wt9-2vEjv_<)iF=g z55P-P%CM*or5(j?0?QyK;I_?=3~sTPQlYXq;cIe8zdqX<_9%fYvsgQp7- zo-w-g8J-n*F5tS^Px{L8$kX*#cX#*b?)MO5z{lOCX9%Wia9vr&t%rhr&(d4q%iZ1s z@Y2%;cwqy=y?|!|40q$gkTiM(7Y1NFS2gV&!tj;EukR!(1 zCL;}FRVGQr-B6COr9o4i%6PFX9$)|lbfhOZ*QAu1xL>XAh7X6S=OhDfWi#)Tw|uNR z&P|hi!>`CgXM5_~!2&KC;1YOE*+x$;&Os77had54-sf366=1yS$lK#cC)uMc-%O;K}-&Djcf8j2Cp`aq%K%!X}sNG zSaS*C;7{GdF4x`&l}d`}-8yRljV0U|=;fW94Z$}23u1;=*c5=Y(LoEMy~lK7+H#A| zUSpa*+i(q6d_Kj&Ec@!51$sIw+#;m4XRnviOuc49u@ zAYrfenvMxiPl@$}ACill4GD^6n&3F=>k_3HoX;Ydw?Oq^x23;0$U-Zi0W=6$OD||e zaxKIJJdCgO8Jn2~iJ9PCviD{Ma6+e$M_tgoM1v1j23i^OXyD^kNI=0}pyNJ^;CT)` zFua?vu3?To&N!6QqbVV(VYZNKu7h1x_D6&Uc!eF=6BtbL%_DZ$nxDDYBMTh7EbU3% z6~Mj)b2035{RlYLbhvvmKqiO;*qX=?c8pINC;+@h?+?LI#uXgih89P%Qnvy6{AIFJ zm>fN3m-;H4lm4X9;RxLJ^kZ(`##p+G0mbEqMayH_cL1)j;gBkU4a}vBoPafZrksys zu*UKjQPGC6EhXE$X!?u;!UOOQR2p%Jl!LX=nVq)IHXMROWnzp+q$ZgtG&?Yt(t*0* zI3PrgVv0f+rvSO27fn90IJSce_TB970}tojiQG4Np2y&UGmaulJ+NxUJP+L6uRUFz z{6Trpv7{Mfa!rQ0%3OhUxYK7dXiym>9%NL^!JgB^R{5CQQEKewal>rmN!xHt-n*S& zHclMrxN~*fcW-k@4b=}1yv&B`+APhYOG6r-6E*I@9WJHQVd}D_);8B-bU*&|q>@r6 zDq~epGdJK+Me}np@UVAwJa4kniM;%&cnVX`DI03~W4bvU_)cA_0q)DT^f@)Ez%SEX$7;a4 zJjS5$1q)M`s;7pqlhLhWVCG^A%5_Cq+|Dp*Ufs5){F;@Ki&F-x&UV&w?9N9OWFI@N zFqx1YjI~Fdx}$8vUl_5}uZ-&ixBf0upTHOOY-<^(lHd7uO}=xJN3a%Lb>`Tc$X8dV z7^_JxyVYCHG|uVVmfWY(gvyrbu()zh?Io0H^DX=~kK6d~M>y+?!TBzZZvhX%TpF-~b-I2b=le!s1Xhmdg600u;q#f{rpX`Ii>CB8~h`%oNSI2HPyz;De!WJyH`aZtS5Il4_-i- zQ5|#=+?Cq2+~r}>2kwKV!IyFAsS9%bdY$}aTGRrR!HVgn6-Esfe@5hvh@)1%T*j-@ z%Q3iFa2#`=E**=<3*e9A+Uy=_v8tNPQSIk@(|FkKN-44&;{^C@XKu+o!HSk+xgUdB}(p|vQWZ}I-L?CPOW_3x!!JE;DjgaPU>JCo`gKKg!3S6TC2W>&D( z;5{{3z5@|scf|Nv*K5H+-A;;(wDOav8YY`T?q?QfGx)YnRPa5u@$e5lEnqQOq3jUa zA2R-4jEOyG=6rsv`rF`CCR!Yf%RC?DHhwB9kRlSfRr(QDiYUPd{4p&N^+xki4lWG5 zvD}08A+;JrL=>#jpbhFp>ZXc(jLqd9Q14+;fx$8rQHHoiBjWT{NBbIA!z#wPw1oRy zD7(1ZVtD$NQ5Lpawl!Fnr7{7HuCGpsyPO;jNHxLh1kk$0 zn%2{2hrzsdVC@ZV{5cr(P#)ocnl^w=0haCo1zVT&XR-Ll5_nPI)9H}85#%G57ZXSo z0bo)KkSxS?u3psuGJOLarfHJJ7%)0iix|p{DJ# z<}OMx)PT({3$>i+xGK4pV?CL-GpK_S3>pwnkptbzf`-c-&7EZGQyG?ewH|jW9b34k zr+CNvn7}AsLdzk%u)fxjTz7t|pv5c;y5mRy!&d5tsn>w6!+TE0yCh;FGS>qT^+ybb zh1_**V>_<|uP~7SREWfcU=SZ(3QThyyb@O{ z03HH@1znsKCAd7rV7jdjVDvqJA+^Ehfl`e%I3Po^D6+N%jBCKttmZzk zh6a*U0e~Fz6}4x$Auk>A>Stu}S8+8gY)mXnVynF-6Va8GPu76U$>m}?L>pa>AT&MF z0&|e{ejMatP>OO4xo0TP!5 zTf{ubs`^%@#kmSi3~AvP*KZ40f-XykR`i9q6kCI@m1|?!09~mD2bV<`^Q=1KovtSI5(zlJZeAB_9 zF0}XM%Q6YdiL{<*&Z4%JG}V!MHOG`(9=hPX;!$MSek9c?7Bf9+4GAq`b1%!}tXF|I zxH|Pz0(t$Vr&t1=r&_q5r4MDTs0e^?xsbw(X;iBsdgM~3kwgqtv9T=B+p?m~>-mxU z6sMA{c1O|0cOsopF=@uF$*MHB_yj14BRqko$LvuV%~Az4vsghm`H+3FvSWD1&(8d-cI?{ z1!q@@YIq-EoZAfy?MZHG1=0}A@AKsIMYoYJV_V{(YkM85RwJ3CQDz>>wC5NfjfsOE z{QwNt!EWc8ALzpxat|C2z#?hv%hS(Z2L{}dPCc#!dQeW12Vf}w0e6I8&lkKWR{#J2 M07*qoM6N<$g4r<6YXATM delta 4348 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%0D7g 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 LNkvXXu0mjf;^|)t delta 3465 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 diff --git a/graphics/map_preview/victory_road/pal.pal b/graphics/map_preview/victory_road/pal.pal deleted file mode 100644 index 828ff7e22..000000000 --- a/graphics/map_preview/victory_road/pal.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -255 255 0 -74 82 98 -222 238 246 -98 139 106 -131 172 98 -164 205 123 -180 189 197 -205 213 222 -222 230 238 -139 131 74 -172 172 98 -197 197 123 -213 205 148 -222 213 156 -213 230 246 -246 246 246 -0 0 0 -246 246 255 -74 98 123 -213 213 213 -0 0 0 -131 172 98 -164 205 123 -139 131 74 -172 172 98 -197 197 123 -213 205 148 -222 213 156 -148 189 131 -205 213 222 -222 238 246 -98 139 106 diff --git a/graphics/map_preview/victory_road/tiles.png b/graphics/map_preview/victory_road/tiles.png index a4a6b610409bec7e706ba315b6c6c1e5cd3623c3..157b03b1662ea8b55fc99bab3cc4a529dc3ca543 100644 GIT binary patch literal 15205 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 delta 4710 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 LMNUMnLSO-c@giDJ diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c index cf74f1950..068ddfedd 100644 --- a/src/map_preview_screen.c +++ b/src/map_preview_screen.c @@ -17,67 +17,67 @@ static EWRAM_DATA bool8 sAllocedBg0TilemapBuffer = FALSE; static void Task_RunMapPreviewScreenForest(u8 taskId); -static const u8 sViridianForestMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/viridian_forest/pal.gbapal"); +static const u8 sViridianForestMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/viridian_forest/tiles.gbapal"); static const u8 sViridianForestMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/viridian_forest/tiles.4bpp.lz"); static const u8 sViridianForestMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/viridian_forest/tilemap.bin.lz"); -static const u8 sRockTunnelMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/rock_tunnel/pal.gbapal"); +static const u8 sRockTunnelMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/rock_tunnel/tiles.gbapal"); static const u8 sRockTunnelMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/rock_tunnel/tiles.4bpp.lz"); static const u8 sRockTunnelMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/rock_tunnel/tilemap.bin.lz"); -static const u8 sRocketHideoutMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/rocket_hideout/pal.gbapal"); +static const u8 sRocketHideoutMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/rocket_hideout/tiles.gbapal"); static const u8 sRocketHideoutMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/rocket_hideout/tiles.4bpp.lz"); static const u8 sRocketHideoutMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/rocket_hideout/tilemap.bin.lz"); -static const u8 sPowerPlantMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/power_plant/pal.gbapal"); +static const u8 sPowerPlantMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/power_plant/tiles.gbapal"); static const u8 sPowerPlantMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/power_plant/tiles.4bpp.lz"); static const u8 sPowerPlantMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/power_plant/tilemap.bin.lz"); -static const u8 sPokemonMansionMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/pokemon_mansion/pal.gbapal"); +static const u8 sPokemonMansionMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/pokemon_mansion/tiles.gbapal"); static const u8 sPokemonMansionMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/pokemon_mansion/tiles.4bpp.lz"); static const u8 sPokemonMansionMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/pokemon_mansion/tilemap.bin.lz"); -static const u8 sPokemonTowerMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/pokemon_tower/pal.gbapal"); +static const u8 sPokemonTowerMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/pokemon_tower/tiles.gbapal"); static const u8 sPokemonTowerMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/pokemon_tower/tiles.4bpp.lz"); static const u8 sPokemonTowerMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/pokemon_tower/tilemap.bin.lz"); -static const u8 sSilphCoMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/silph_co/pal.gbapal"); +static const u8 sSilphCoMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/silph_co/tiles.gbapal"); static const u8 sSilphCoMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/silph_co/tiles.4bpp.lz"); static const u8 sSilphCoMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/silph_co/tilemap.bin.lz"); -static const u8 sMtMoonMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/mt_moon/pal.gbapal"); +static const u8 sMtMoonMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/mt_moon/tiles.gbapal"); static const u8 sMtMoonMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/mt_moon/tiles.4bpp.lz"); static const u8 sMtMoonMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/mt_moon/tilemap.bin.lz"); -static const u8 sSeafoamIslandsMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/seafoam_islands/pal.gbapal"); +static const u8 sSeafoamIslandsMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/seafoam_islands/tiles.gbapal"); static const u8 sSeafoamIslandsMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/seafoam_islands/tiles.4bpp.lz"); static const u8 sSeafoamIslandsMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/seafoam_islands/tilemap.bin.lz"); -static const u8 sRocketWarehouseMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/rocket_warehouse/pal.gbapal"); +static const u8 sRocketWarehouseMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/rocket_warehouse/tiles.gbapal"); static const u8 sRocketWarehouseMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/rocket_warehouse/tiles.4bpp.lz"); static const u8 sRocketWarehouseMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/rocket_warehouse/tilemap.bin.lz"); -static const u8 sVictoryRoadMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/victory_road/pal.gbapal"); +static const u8 sVictoryRoadMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/victory_road/tiles.gbapal"); static const u8 sVictoryRoadMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/victory_road/tiles.4bpp.lz"); static const u8 sVictoryRoadMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/victory_road/tilemap.bin.lz"); -static const u8 sMtEmberMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/mt_ember/pal.gbapal"); +static const u8 sMtEmberMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/mt_ember/tiles.gbapal"); static const u8 sMtEmberMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/mt_ember/tiles.4bpp.lz"); static const u8 sMtEmberMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/mt_ember/tilemap.bin.lz"); -static const u8 sSafariZoneMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/safari_zone/pal.gbapal"); +static const u8 sSafariZoneMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/safari_zone/tiles.gbapal"); static const u8 sSafariZoneMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/safari_zone/tiles.4bpp.lz"); static const u8 sSafariZoneMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/safari_zone/tilemap.bin.lz"); -static const u8 sMoneanChamberMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/monean_chamber/pal.gbapal"); +static const u8 sMoneanChamberMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/monean_chamber/tiles.gbapal"); static const u8 sMoneanChamberMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/monean_chamber/tiles.4bpp.lz"); static const u8 sMoneanChamberMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/monean_chamber/tilemap.bin.lz"); -static const u8 sDottedHoleMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/dotted_hole/pal.gbapal"); +static const u8 sDottedHoleMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/dotted_hole/tiles.gbapal"); static const u8 sDottedHoleMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/dotted_hole/tiles.4bpp.lz"); static const u8 sDottedHoleMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/dotted_hole/tilemap.bin.lz"); -static const u8 sCeruleanCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/cerulean_cave/pal.gbapal"); +static const u8 sCeruleanCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/cerulean_cave/tiles.gbapal"); static const u8 sCeruleanCaveMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/cerulean_cave/tiles.4bpp.lz"); static const u8 sCeruleanCaveMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/cerulean_cave/tilemap.bin.lz"); -static const u8 sDiglettsCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/digletts_cave/pal.gbapal"); +static const u8 sDiglettsCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/digletts_cave/tiles.gbapal"); static const u8 sDiglettsCaveMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/digletts_cave/tiles.4bpp.lz"); static const u8 sDiglettsCaveMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/digletts_cave/tilemap.bin.lz"); -static const u8 sLostCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/lost_cave/pal.gbapal"); +static const u8 sLostCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/lost_cave/tiles.gbapal"); static const u8 sLostCaveMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/lost_cave/tiles.4bpp.lz"); static const u8 sLostCaveMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/lost_cave/tilemap.bin.lz"); -static const u8 sBerryForestMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/berry_forest/pal.gbapal"); +static const u8 sBerryForestMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/berry_forest/tiles.gbapal"); static const u8 sBerryForestMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/berry_forest/tiles.4bpp.lz"); static const u8 sBerryForestMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/berry_forest/tilemap.bin.lz"); -static const u8 sIcefallCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/icefall_cave/pal.gbapal"); +static const u8 sIcefallCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/icefall_cave/tiles.gbapal"); static const u8 sIcefallCaveMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/icefall_cave/tiles.4bpp.lz"); static const u8 sIcefallCaveMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/icefall_cave/tilemap.bin.lz"); -static const u8 sAlteringCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/altering_cave/pal.gbapal"); +static const u8 sAlteringCaveMapPreviewPalette[] = INCBIN_U8("graphics/map_preview/altering_cave/tiles.gbapal"); static const u8 sAlteringCaveMapPreviewTiles[] = INCBIN_U8("graphics/map_preview/altering_cave/tiles.4bpp.lz"); static const u8 sAlteringCaveMapPreviewTilemap[] = INCBIN_U8("graphics/map_preview/altering_cave/tilemap.bin.lz"); From d5632c28977bde5c4ad50a32d639cf28e1530055 Mon Sep 17 00:00:00 2001 From: cbt6 <91667135+cbt6@users.noreply.github.com> Date: Mon, 30 Jan 2023 00:04:57 +0800 Subject: [PATCH 33/33] Colorize Pokemon storage wallpapers --- .../pokemon_storage/wallpapers/beach/box.pal | 19 ----- .../wallpapers/beach/tiles.png | Bin 818 -> 885 bytes .../wallpapers/beach/title.pal | 19 ----- .../pokemon_storage/wallpapers/cave/box.pal | 19 ----- .../pokemon_storage/wallpapers/cave/tiles.png | Bin 694 -> 771 bytes .../pokemon_storage/wallpapers/cave/title.pal | 19 ----- .../pokemon_storage/wallpapers/city/box.pal | 19 ----- .../pokemon_storage/wallpapers/city/tiles.png | Bin 484 -> 536 bytes .../pokemon_storage/wallpapers/city/title.pal | 19 ----- .../pokemon_storage/wallpapers/crag/box.pal | 19 ----- .../pokemon_storage/wallpapers/crag/tiles.png | Bin 729 -> 770 bytes .../pokemon_storage/wallpapers/crag/title.pal | 19 ----- .../pokemon_storage/wallpapers/desert/box.pal | 19 ----- .../wallpapers/desert/tiles.png | Bin 657 -> 686 bytes .../wallpapers/desert/title.pal | 19 ----- .../pokemon_storage/wallpapers/forest/box.pal | 19 ----- .../wallpapers/forest/tiles.png | Bin 743 -> 721 bytes .../wallpapers/forest/title.pal | 19 ----- .../wallpapers/pokecenter/box.pal | 19 ----- .../wallpapers/pokecenter/tiles.png | Bin 707 -> 734 bytes .../wallpapers/pokecenter/title.pal | 19 ----- .../pokemon_storage/wallpapers/river/box.pal | 19 ----- .../wallpapers/river/tiles.png | Bin 622 -> 656 bytes .../wallpapers/river/title.pal | 19 ----- .../wallpapers/savanna/box.pal | 19 ----- .../wallpapers/savanna/tiles.png | Bin 529 -> 562 bytes .../wallpapers/savanna/title.pal | 19 ----- .../wallpapers/seafloor/box.pal | 19 ----- .../wallpapers/seafloor/tiles.png | Bin 659 -> 701 bytes .../wallpapers/seafloor/title.pal | 19 ----- .../pokemon_storage/wallpapers/simple/box.pal | 19 ----- .../wallpapers/simple/tiles.png | Bin 347 -> 400 bytes .../wallpapers/simple/title.pal | 19 ----- .../pokemon_storage/wallpapers/sky/box.pal | 19 ----- .../pokemon_storage/wallpapers/sky/tiles.png | Bin 614 -> 682 bytes .../pokemon_storage/wallpapers/sky/title.pal | 19 ----- .../pokemon_storage/wallpapers/snow/box.pal | 19 ----- .../pokemon_storage/wallpapers/snow/tiles.png | Bin 607 -> 671 bytes .../pokemon_storage/wallpapers/snow/title.pal | 19 ----- .../pokemon_storage/wallpapers/stars/box.pal | 19 ----- .../wallpapers/stars/tiles.png | Bin 571 -> 624 bytes .../wallpapers/stars/title.pal | 19 ----- .../pokemon_storage/wallpapers/tiles/box.pal | 19 ----- .../wallpapers/tiles/tiles.png | Bin 444 -> 502 bytes .../wallpapers/tiles/title.pal | 19 ----- .../wallpapers/volcano/box.pal | 19 ----- .../wallpapers/volcano/tiles.png | Bin 720 -> 749 bytes .../wallpapers/volcano/title.pal | 19 ----- src/pokemon_storage_system_graphics.c | 80 ++++-------------- 49 files changed, 16 insertions(+), 672 deletions(-) delete mode 100644 graphics/pokemon_storage/wallpapers/beach/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/beach/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/cave/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/cave/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/city/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/city/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/crag/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/crag/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/desert/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/desert/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/forest/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/forest/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/pokecenter/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/pokecenter/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/river/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/river/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/savanna/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/savanna/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/seafloor/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/seafloor/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/simple/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/simple/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/sky/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/sky/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/snow/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/snow/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/stars/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/stars/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/tiles/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/tiles/title.pal delete mode 100644 graphics/pokemon_storage/wallpapers/volcano/box.pal delete mode 100644 graphics/pokemon_storage/wallpapers/volcano/title.pal diff --git a/graphics/pokemon_storage/wallpapers/beach/box.pal b/graphics/pokemon_storage/wallpapers/beach/box.pal deleted file mode 100644 index b7cb930c4..000000000 --- a/graphics/pokemon_storage/wallpapers/beach/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -255 255 222 -246 238 180 -238 230 148 -238 222 131 -222 205 115 -213 189 98 -205 164 90 -197 172 65 -255 98 197 -255 148 172 -49 213 205 -164 230 213 -0 0 0 -82 98 255 -49 65 156 diff --git a/graphics/pokemon_storage/wallpapers/beach/tiles.png b/graphics/pokemon_storage/wallpapers/beach/tiles.png index f2594ae8839bc6a2cefb1512a63f67fe64acb014..fcabb6cc27c2e107af89196cccd86d048604760a 100644 GIT binary patch delta 874 zcmV-w1C{);2K5Gz7=H)@0001;w}I>c003Z6OjJex|Noq7ImPDx#rFT^|Nmm7VwB!F zy`)<9=A{4jwD#_#V%61)=FR{A|59TAF+rUF|NsC0-uCXa?&g&4-h=`#s8G7G1bka=G6cI08(QAF+rRQ#Iwo(00PiSL_t(|oPVvB4VS7Q5Qf1I*i369 zanE`?_5c6noevn$wbg82J0ik74)YqN)L-eeQ-25Oc1i%nPQ3|e6QC@f9lyzBfJ_@0 z#+Vio$N;&aUAbNArzZfY%5=O0IL8dC*|97f$^Ac_BcR$QBq%6HEKBz)00sWnh=8gV z8Q}S`06>BO)?#P$QU3TPp!!w>9@C2f}!7t}Pne^BJhbbeFs1K!reda+x) zZt-Nb%z>AZzf7M&szpc0nva>9=D@OAAELCihbdqZ(HwrNIasUtqG4DB+)-*FAWmM) zAOY?S*neUDSpb*IWuJ{F1~|79fIq?vaBjE#47m1UM-mV8ei$B)tREHbXQT~)>o8FO z@L!61t|x%&@Rcb7P78p?GT{C-(L(_Eb-pCsA5Q>}x$X?;@PA^8cYYc0xfGuOPUMFt zfJHH&EY#edmjJk}Q!v`>;fQws*5`YkuHah5>wmrWddD&P@LJSzpFuu_V5y3^HFw_W4Hr z&||LdESaycdR!f@wU>4kkoyX&hZ>V@^#GK3|Q-x-xq4PWZ)oo_O&Mh`yAR$ zHNf0s{iDyZUC*GW=j9&8x>CCZF!43-UpHj%AE>FYdJ3rtmjD0&07*qoM6N<$f^b!} AlmGw# delta 807 zcmV+?1K9la2C@c_7=Hu<00013M{Ml?001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00O;9L_t(|oQ;&fZxb;T$Nd*j z-2mMfE@{L-m)H#wYM1kKhN=vO^C4B~66L&Qh(OKA8nH1|iGRcdsg(W;-O@5O3k`yS zh946X@E;KTY&W^&l1snJ%R8Sxe)89M_XxR-{$%KOz$ilo@H4au=o_Gz)GSan05!@v zO(qMf|FD|yI;4x_EdJ2ICx%)A{KX2~DKX8tJ%ev!tN>{-MhaEEoBA>UfcR0hpf(LK zqbabV)Kdd2Ie%&;W$b4G^R_;yf|Bv`BW3nAuzi!v{dgCan zAAV_$G_aNiK9B0_qr*}CV*>${-5__*j#B2byG6-hp?~@q#X)YnPtF$V+~>ZZ<9@4^ z0tUt5Ce6`e@j(l9n)%U~hc#ZI)xb&_vy9?#p!01?8+hl@`i@)NXVmvwPN(g5``FWe z?KjQ04lon1amK21+-SFZy<-o7JGwtiCh&G=TEPI=K$afBcLaWV88-iEz|R8kgLWNe zdHeI(%zr?rvB~)And^Dl0y$;nY)%`<4Nz(tDQ9!qKyH9v7I@`edk=MgoB)zGuY3z^ zB!IP~O%0fa7bSq1jb9bX#L_}wNHxGg2oCdEUkTtG2!z0(rel)#OxDu3AWt;Sp$xc+ z@0xshj^jWVDhnQ91%NOVn0xOrS3(@;v4XBdG=GN6K%59TkOItjPe2fGQPw5&CTlfZ zvfHWEq|Ro1c@Z*}XE-E!wJ9OG!j;ldk?6n}A$ke!A7PvEw`KdZ>9p4GJK%dDFj6m# z@w?l}v&##>NCDPwHwY@Bz(@gk_E`H3S$>NFM!G`K>z2#F(Kp6|JsjXM0Q$yA0l@JQ l3LxuSM;dT`ZDy$o{{bCTHlYa@UWNbw002ovPDHLkV1oEYe}4b~ diff --git a/graphics/pokemon_storage/wallpapers/beach/title.pal b/graphics/pokemon_storage/wallpapers/beach/title.pal deleted file mode 100644 index 360d77bde..000000000 --- a/graphics/pokemon_storage/wallpapers/beach/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -156 106 57 -197 230 255 -197 246 255 -230 255 255 -98 164 98 -148 222 57 -189 164 90 -246 230 164 -255 246 180 -246 238 164 -98 213 213 -139 230 205 -255 255 255 -82 98 255 -49 65 156 diff --git a/graphics/pokemon_storage/wallpapers/cave/box.pal b/graphics/pokemon_storage/wallpapers/cave/box.pal deleted file mode 100644 index 6b783cdd5..000000000 --- a/graphics/pokemon_storage/wallpapers/cave/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -246 213 131 -213 180 98 -180 148 65 -148 115 32 -115 82 0 -82 49 0 -49 16 0 -139 90 115 -156 106 131 -115 65 90 -0 0 0 -238 238 238 -255 255 255 -90 90 131 -49 49 90 diff --git a/graphics/pokemon_storage/wallpapers/cave/tiles.png b/graphics/pokemon_storage/wallpapers/cave/tiles.png index 8a1a6e81ea9394e7a13fdf9e2bcc45b42f1f900d..28890b95342cd8515af638922fd367e986ddb875 100644 GIT binary patch delta 759 zcmdnS+RQdVqMn19fq`M}_Qp3rDj~op#P$FG|IdzAU)_?lWs2jJVuj)$packXM-|V> zYA$w+0gNdjZ)ad&it}`F45^q? ze{|a2qSXdGEsyt~cHmE_Vt@aC+E&%*X*rXZ>@ZHZzASR|m%y8*-xYtRE}Q+!`oQO9 z91HTh7<)?3vF+4YyfsKmL{`jq(%Pd8)0mZ%zC4~E(DJWkv8znNf~bAn&Jt128zy9I zQIYv;|NrD+#RE1E>Mxj_Xa2`-%jnQ1HeZq1P<(1Vj~nxnD=`dDqK&lN99+4VCQI;Y zJk~TiVCW#qc=LS>LxPZ!BI6?d^CvcIdgSa}wj*J}4aS#t2g(?}9;kKDyUFLE#F23M z@)u5r9c+Hfp0BTP@%b(3@WkcI?TQ$N(mbCt-GXnU=CL+~Gu-lcxvisJX=fYzNmIvD z%)5h*|Lnauw_at_?-&^san1zQ2K`+O2IayBzA!G#vu2prAK=e?g<;ofjk~)}y;{b& z;kK4?Ks7gmL5uCVL!vH6I1-$hFC2Z$Vj%0dAz^ObE2&dnSKl{lne1>A%a&o|WPFpm z{N>tk!AG^(oSX*BKZm}JNLJ2_<)5X#L-)>XwlZ;sGt6CPJzwh2Kfb;D+Ak|4RHeQ@{%hBj zLY>pQa_jD&pDdfc^w)ca*LqVJ-4}Bo*i~;VxZth*IlBix#H_d<%)d|=$8avnok@rL zeSD4lhpVs8GwAJ)XV_I0bF<*Hp+dIsC%O9HruF+y3H^C47qx*~Dr|pf)ph&UI;Axw zt~($7&333T+itM-`_<0BUi0-C3zI)S+!CjBXzGEb2cAnGShKFVdQ&MBb@0LQ~#ssI20 delta 682 zcmV;b0#*Hk2DSx|7=Hu<00013M{Ml?001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00KctL_t(|oTZgtZqzUk#&ZHH z=Kvs2=wpTCNjLzpFVNT=p;zFMJNA7`dE%)-Z~&J1V`tq}@PDqvNX|O;FW&jSjGeB# zCe}t=2OJt905n2@F?pZT0;V5Q^fMxkK8FHcfV5bks}BnzaX#>k0E4G{x=U`LOAHAo z8sPa9|IdSUeZBwspy37|=rxL{ z#4mIQ$iBz|-lGCT@dv~znuk1qqX2*!&h~@$Xhca=qf#-7L#zeL0PW_arVTlF1$+i{ zr~7<+76gJ}^9JFz}{6Gz;+Yi-Z96p}7G+6!?a=9+E&Tmk2qZ<2O_PIngtA72Z%*Rv!u@yX@W^y)ix`ipgqQ4XxUice?2 z%OQ-s#U+!G+Zpf(%NUgi%f#&*_=O<^UYt|mb|VfLd3cKcA4v*83#VP+FO<;NH!gce QdH?_b07*qoM6N<$f)95ylmGw# diff --git a/graphics/pokemon_storage/wallpapers/cave/title.pal b/graphics/pokemon_storage/wallpapers/cave/title.pal deleted file mode 100644 index f6e731395..000000000 --- a/graphics/pokemon_storage/wallpapers/cave/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -230 197 123 -213 180 98 -180 148 65 -148 115 32 -115 82 0 -0 0 0 -0 0 0 -139 90 115 -156 106 131 -115 65 90 -0 0 0 -230 230 230 -255 255 255 -90 90 131 -49 49 90 diff --git a/graphics/pokemon_storage/wallpapers/city/box.pal b/graphics/pokemon_storage/wallpapers/city/box.pal deleted file mode 100644 index ba67b3414..000000000 --- a/graphics/pokemon_storage/wallpapers/city/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -255 255 246 -255 238 246 -230 213 222 -205 189 197 -164 148 156 -139 123 131 -0 0 0 -0 0 0 -180 164 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -156 123 82 -115 82 41 diff --git a/graphics/pokemon_storage/wallpapers/city/tiles.png b/graphics/pokemon_storage/wallpapers/city/tiles.png index f5684850afc67772d4f6be3f1b345fa7e8394edb..48588ef6ddbef5559a94733c96020caf5a53c7d1 100644 GIT binary patch delta 523 zcmV+m0`&dl1DFJm7=H)@0001a5DeP@003Z6OjJex|Nr*(_F99*d!*Hz#pY6jb91DW zw7tcYoTPJmgHl>zy}jn%_V&Hi)tq}$YDysg|NsC0_W$no=GETKy~U)IoQr#d00000 z006Y4tN;K200000000000GxYLb5bd{gP=qJ00DDJL_t(|oPV{I*{*{i5J0h*Fc{Qc z!6tp7|NobFMnD#=rJ5chOJz>MARB0uoRF-wOnWNf1Ew2?72$h03KO_R_cthKje#pd9 delta 470 zcmV;{0V)2N1mpvd7=Hu<0002I;NjW;001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00D1FL_t(|oRyPLPJ=)chvx(~ zQkVXT)C*Yf0H)vxibr7U(&z;g!<8_G->Ab!c~ z6y^&vzsWp8y4VaY9JPGH#DU!*{ID-fxUjF|xMW{&xM1oy{f{t~QG}y47c9<5APa|u zm~4mGK&LQ4#G~?nf}>yyT7@S4!ny}ibdrVjIh^CcD1`Zo~am~DVDfL(Xaap9ZY*~cQ;rqv~v@vb+lt7@@ zB)d;;=|U&OaePPPcm*S!F=0<`91xOZMJfF7kqJuUfS`mvk^@1OSttU;qFB M07*qoM6N<$f>CJRrvLx| diff --git a/graphics/pokemon_storage/wallpapers/city/title.pal b/graphics/pokemon_storage/wallpapers/city/title.pal deleted file mode 100644 index a5387638a..000000000 --- a/graphics/pokemon_storage/wallpapers/city/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -246 246 246 -90 131 197 -123 164 213 -156 197 230 -82 131 115 -115 164 148 -180 189 197 -148 156 164 -115 123 131 -82 90 98 -189 189 230 -222 246 246 -189 213 213 -156 123 82 -106 74 32 diff --git a/graphics/pokemon_storage/wallpapers/crag/box.pal b/graphics/pokemon_storage/wallpapers/crag/box.pal deleted file mode 100644 index f72b27d13..000000000 --- a/graphics/pokemon_storage/wallpapers/crag/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -222 222 222 -189 189 189 -156 156 156 -123 123 123 -90 90 90 -57 57 57 -41 41 41 -222 189 205 -197 164 180 -172 139 156 -246 213 230 -238 238 238 -255 255 255 -213 189 82 -172 148 41 diff --git a/graphics/pokemon_storage/wallpapers/crag/tiles.png b/graphics/pokemon_storage/wallpapers/crag/tiles.png index bfdc0a7e36a9b4e8fabbeae99a8bdcbeb25f9acc..f47111a9e66abb31c58d95db382fed1ee1ff6549 100644 GIT binary patch delta 758 zcmVw5*Gq_SNR@?(YBp|JA)xtduDLG?3;100Lb}L_t(|oPVvB>r#U-5QUqu8k3n8 zZEXd9(D#2!_nKrO(1;!?mz4e3?Aa0zhyT)fr~VIc+NlJ1-KjP}h^(*=0O0}TV-SS$ z@M;M-nvHG`tVn+p?`0&0O=C|-Bg+=m?W+S+4nEG|iCY77+W_(p7`UtXf9|#cLXbYF zRQ;3yFY9uvfPbzHKoAfE5a)iE0VtrGl7S(#0k9jq4~Jvw6Fl*rI!yWmFT=cg>>!FC z^e(1QuX>E2BSm{(5L|NaXaH&l5)uHjqYQxr7fwr#RZH281rusjTQdL`TLzT6-3ibt23&Ijw>tymi?1&kNY^U8Q8W}9 zL3P0OZX^I&`Ny${@B2F7djBq@0RGpZ9|Qr19xkeY>D%a$0O0A^k3|wIfX7@D15U8= z_B8X%r~p1{@dD@&fEy#~MO^vONCp@No93|#FmGu7NHV@IG!El@XwhNz4lRzU(-Qzr zB<0l0%=n}YFknAPZ@?Kpes0zV0Heee`1C_A65BPKS$zt#$LVRdOPr^wFEYpvlR%z; o@oLP+6&J?zII4tk&=ThHKV811vcq8JYybcN07*qoM6N<$g2hp0ApigX delta 717 zcmV;;0y6!A2H6FW7=Hu<0002LHse76001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00Lx5L_t(|oQ;*gj?+L8#{C4G zR^o~)LJ`CRpdh3xD3Edm1qBj8N`dIoQLnrbLUfn32Ut52qJOk!-X?;8D9oRVicnF| z5N2i_dmSgf`x46=&u?ev8|^wtauuz6bTy#tkphz*?E$7lggwBNym!C^C|CoJgZR1k z9z496Qpy9|@%wSCIt!9vWbu0gi0+Tg^|6V8-#b8AE=_5g9(>)jf$<>pp|1X^03SxN z1~Kq#4=@@T!+*e|a(N)b=rs3|VNf3L2TsYR$ph5JSfZQCnI4_OPk#)WS+{G4$&bbrwRR_0f5*VJ=rFaSA_3yV)G_`|fFDM6gU4NC{}>ns;MQJ1 z4)HMP$$z0XtcSNH!SPJ@!|=|T4EV0EhFO>uDkh46o7KJvHc8@8EF$1;Fgy!3=Oizn zbBKVS0eHF5El?0@jtGctt|oILU8MnzVwLy<-8k zqZ-DlBia>g&>A3=7%X_XBGkQ`p;+*|V!;J(okq0*I0r)Tb1e!{``3Djb2O|CXtXIg2mmJW%T>*EaqiSW;jB+<``q00000NkvXXu0mjfJ@G{h diff --git a/graphics/pokemon_storage/wallpapers/crag/title.pal b/graphics/pokemon_storage/wallpapers/crag/title.pal deleted file mode 100644 index c4f85c644..000000000 --- a/graphics/pokemon_storage/wallpapers/crag/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -222 222 222 -189 189 189 -222 189 205 -197 164 180 -172 139 156 -246 213 230 -139 139 131 -189 189 189 -156 156 156 -123 123 123 -213 189 65 -230 230 230 -255 255 255 -213 189 82 -172 148 41 diff --git a/graphics/pokemon_storage/wallpapers/desert/box.pal b/graphics/pokemon_storage/wallpapers/desert/box.pal deleted file mode 100644 index c5ca027d2..000000000 --- a/graphics/pokemon_storage/wallpapers/desert/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -255 238 189 -255 213 164 -230 189 139 -205 164 115 -180 139 90 -156 115 65 -131 90 41 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -164 139 82 -123 98 41 diff --git a/graphics/pokemon_storage/wallpapers/desert/tiles.png b/graphics/pokemon_storage/wallpapers/desert/tiles.png index 373749994149e4b1d9cb25f9c1ee63040ceb3024..4e6dcec04780490cf1a7ef5174da6e628aab7097 100644 GIT binary patch delta 674 zcmbQpx{h^%L_G&H0|P_VF+K+%l@Q<);`$#1y3g)yes(nJ*_Nm^OV(IgTCQ2MrnDyVa|If03ik5T-RVQhJl)u~i|LT%wd%MprDc;f@HK*9IIZ6{~9vXnCFI#(P z3j+far>Bc!NX4A`wbNctTC5<@Dk;n@Y@Wh&=+EWv^{1E4_Ga#8PAt|*?wHpt5$U`xHf_Q}3k9Xtj5 zo8S6RNH!7ZVTxS*n_EQk^)1c;Ab>zLs}k*OcZqh7FB6-MuOX zVLKSV)Vu1>nEYdo;+KO{k9{+WVhVSdG3(KGaeZ&629Xto(|qOxuQgfy`FQGo-U|Zm zPa9_M*tf;G=D8^F=23vYzL4r>qI`em~wG z-C(&!-9#(j+<~v)Z9`azd9m$+-S{wvP2fh9Ews2TxxE zspIb%Zi_uuILNs*_tuQZ9>*O2eQ&wK7@#(peaC*G>Q%xGM)sXd4j~NgvK#)V)LSVr z$UPU&wD)6hUwM~NZq9j5hgVh)c0c>hU}!A4^epEBE%q5{VaGm;G2H7tx3*yUmdrbE zH0qb$TC#ev%y)(lS()}<)3z1eiEcbn)%#Urt!dBKWu@_~iFO}ubM=HxWBi<*TH?-{ zSJwJHfBBZReD188Gv>L5td#Cg2r0Z1?D$D~jaX(G!#}33oh{PG;wv_Tl8mRTpUXO@ GgeCxv#WHdL delta 644 zcmV-~0(r;HL_|b0GczJ0A`uZ00001QfV@Ef00JCIL_t(|oQ;&fa??N%#_tKp zTpuWuxPhTTA}$yjYZVs^jU%TcmCy?qM(QYi6!fTog3>J==YJ-3)DW04DGa1wGAV#J z!0g_g;>+nz{LOey_Wtgh`_{T;Y!m(I&}P80LkbvoXfvQ^%M?Z)$pGrv8yQh`r0e*j zllRnfWkvjnz?U6T3-Fg59vH2GtH9q^4f-aOrr88t z`?Pl`#Dq?N9dMOpnE}o&i)M)mXsH(k^B)uNyZz#5V1Lyr22T;#x(Vpgoc<(gpl)zZ zjqv+fF5Z}p08b=!Hg|ha0oV(`k8tC?e}}*=oDW6uR=jR%00A^WS{v|#fOF2;1O7w6 z>jLO9<15!a{yeb11W~$DE4?V{*`W=vlWLim>)}xWdzn&dVy=fr1zc$0m3|EvC*4_D zfE{!3QhftG3)r$_E`I5|d1wLG4!-EIt4NK&sYgHnfr_ryTC)IW(Ev@VwGKeAyBoww zwKh2nLfDVO@xdU9;syuW2uZSk@GuU>dvOiG{UJmVq|c);N|X8_13Y;g1H@?(&{}s0 e^-Qc*xBee?>B;U(OqBfq0000*WgIfRp|D=mjdtxd7|NrLytj+(FwB~!9&0>SJN@|=jQiB)( z007O^tgN()00000000000Hljjdtxb!m>1Om00JyYL_t(|oPVvC>vrlO5QV2k;3Qc> zPmFf8Ka%%<%g!)d5*cW;-74zN%tv5nc>(w<*%$S90JyxS)c=;$vEE8aM-t$qP^Z(W z>&~pM!*|}Q9APs7ltwAVMPXEE`awLxW&&uIQho}m3q`tigw2-%zl3HQpNlU86a&ZXy83j?Rq3^^4m%@kus; zFt}kv4*UA(`0}a=#wfo#%7k!D;WSM!DqJ)wg@NYf74KoaSG6qDbe-qh{l2c7_ff%r4sgBi z6ah=23gCMG*eC(Y{$-T`%g0V@2K?V?Su23`QA+?!)3$%Q$$)pMKLWP8-75f50WcTw z90o+qqOLO~f5ThrTJpc(<}bWe0HmM#t)Hf$Ha>us@EZXATWB@^4Ct&AyW+ll&Yx|- r**U2%EerRu4Zx4uIZn0dI|BFy*R+ZvX!oN_00000NkvXXu0mjfu})4S delta 731 zcmV<10wn#>1?L5j7=Hu<0002LHse76001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00MGJL_t(|oQ;&fkJB&|$1MTl zajMuEa=JeNl4E1a%Wy?3T;dZ0qwR^Y_Jmj~vEB_uV(UUGHh+ey{U=!H38X@qm}vh4 z!h0_yanm2yud4Rh{KG$>12=@E<`QQz_*pe=>Y*qP$6ph z*93eo#?yCso=+!vKH@^u@(g^*$9sQ1l;#8jS6_;I1H>^8Wr%n z1l}_6tGp8)79QYf;$#V&dcd)-xeUrk4``hnYE-4I00x>w5v1w*Dr$DSJ^;|#V!2Eb zSW637h+6>B0oV)NSv5;^n)CA(aJMKIheMRb&EmKP+>^L^b%lD{fPba2`O6JDf=B=W N002ovPDHLkV1j?6RL=ka diff --git a/graphics/pokemon_storage/wallpapers/forest/title.pal b/graphics/pokemon_storage/wallpapers/forest/title.pal deleted file mode 100644 index 1b4166087..000000000 --- a/graphics/pokemon_storage/wallpapers/forest/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -246 255 230 -255 255 213 -222 255 189 -197 246 164 -156 255 139 -123 222 106 -90 189 74 -172 123 41 -205 213 172 -172 180 139 -148 156 115 -123 131 90 -255 255 255 -164 139 82 -123 98 41 diff --git a/graphics/pokemon_storage/wallpapers/pokecenter/box.pal b/graphics/pokemon_storage/wallpapers/pokecenter/box.pal deleted file mode 100644 index 60b96bbd9..000000000 --- a/graphics/pokemon_storage/wallpapers/pokecenter/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 115 -41 82 82 -65 115 115 -115 164 156 -90 131 82 -131 172 123 -172 213 172 -189 230 197 -213 255 222 -255 164 139 -213 213 230 -0 0 255 -0 0 255 -0 0 255 -0 0 255 -255 255 255 diff --git a/graphics/pokemon_storage/wallpapers/pokecenter/tiles.png b/graphics/pokemon_storage/wallpapers/pokecenter/tiles.png index e82b88e077b7e2f15331271d32fbbbbe47e57eb6..182ac6a5a39f486b4b65070c4182f1fe6d8f7366 100644 GIT binary patch delta 722 zcmV;@0xkW+1>Oaa7=H)@0001;w}I>c003Z6OjJex|8pr)QbBWbbEKTbtd#$xi~q%} z009300RR8yti8>})z#*Uw3MXHtmfwC|NsC0|8pr)QbBWbbEKSFgHnU6d#u&0z2?Q$ z|K9(ki`CWU009300RI30{{R60|NsAdx&i0_00KElL_t(|oPXVx(UO8N3`GkIJfP48 zSL*u0|NrH-C2fVoonf+M?9E^tDs(1L&QKfV!?5t()4(-|?4KmvnX_ z7w!rJf*Rcei6G8I;Rgv|r$?h&B*b9^G~)a@4{7k3`j;ql51=f|H1(ePmt_F}*9Sg3 zAz2kldwa6#wSVrpv@QVPswZF7c|Z$J7HY9cVSGicmKJi51W{UphaA9ti4K;(IFuAhF`|Rl0nCBReY-q@ zugCL8VCqv8uw+0=BJY$F#4Y`>L{zLGp^W5)+PXw2X;p*k_e!R8~Y;%3da`;7ALmA7dHn`rPd2-kr~uF@kk-Z zOQ%rlfp9kPVum1gz=dtSm*)vdBl-Y{HO zLL<#q#(#V>2}hfzZ#bb7=U=Ni2S^@PZ#d23z{gvHjk#c@#Zr;HL_|b0GczJ0A`uZ00001QfV@Ef00K@)L_t(|oV}DiZxcZfhF76S z+&{pPsF8dP9YTWAo!1?rx^tNh(^;Ybcd1>uH;U4;3jBdfcYkh(NBIFrSRf@)jB?9- z?B1@=Uy&m57XI4jUeC<%%Ydp6VB+H0*lKq`uJm=^`$ivXlvbxm&_ z0ayeD;GN|+O~9Pb&k1B83kI7kZnp@A?hy3*R8vJP?@X{)P83tBr{TASd zF^lS#lT8q?8h?S(M~~-7)D{F(83N$*H!N?lV23LL%E%zHAmH(WD2q4Iv-YZvMJmMw z1^ORnnbFxyccB(lTO3$uaCukCWq1JQkpuo>Ei_a_4qE~5V9d$o9j3DO7vABgIRm&b zU)O^4mHCSnXmG}b>A1cDC0{O#`5r1bKzU~+W?zi?7Jn)zfH*rKx`fRRz&Wlu*w}&8 zaA-e|9q2wA4u`FT%gqibz64TeJ#H62 zebn|{UH_M+?~_R7qc003Z6OjJex|Nrj)|IPpZr2qee-rfKJ00000 z000000048e0F>1jwDvjX=H~zZ|Fo29i)umt|NrLyoW=ipq~=vDoH5Jm<2C&@@! zR4naGc>lL7xslyuH=uF)*}<`JPGWWmo=)$|@M7L4xV)H6AfJ!0sS1R9VJ4x15+ES) zLgpMPfCHj|?YI<-1pi+Dt%gkk-BABEgSG;0aSr6NE2y@SmW&`>^05;vI7XdeyujAs zLbQ48AHIcrNPoexHS`k(f=a`as815u6Jif9mnjPJ3ky|=`jrfVD$k(j-o^{6bLP;# z6l4=eaEW#PZ>Z#E zEs-D&P7aB9xxI7}q&uK8-<;pRLPHDq8Z^~#XcP>!@*d778)L@tdb{1HX<5MMnDGDS z1lI{A3VcivMsS@TAe*4%%|Z*z17%5qFBG#df+dd$f^mfWc&7!Q6dwgJ_lXgZIdSDV zEQp!s`N!uMJ*70(Oo56vTjnHT6*fuF(7BJK+I ds(=QF^dIA~v)uyoP`dyC002ovPDHLkV1gZhH!lDH delta 609 zcmV-n0-pVl1?~ip7=Hu<00013M{Ml?001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00H?)L_t(|oSl`sN&`U@hW7~! zYw3cJ5lb5tJF94E>m%e9ENy*-83-bznF%7>Zty`8h{nn)Yk#eU>p5rcn`AclBf0(G zT+Tmd$1K}LbwaxVi-ZVJ+ax(}0YV7&5`+wX8GJWrKCj?TlPWAyvF44}cAughe$V?9sGb zSc?G3W!rZfMt{JXj&d&S69HSOF!g%(lraEi;nYHfE^~mH-Pq2}^E`|5J98fC1cHjQ zb7sZZl(AO>47`^YCH(DIidCwb;9=1~^7^o1Ua0cGA14B4QZmb;h|e1V=RSE8+Z&Hx zV#AP&Q-{wJoSeYY5g@xXJ`NMXv5cr6W;SIV)4*)HuYacwqPDi(l?T3Q_}JO~JdXi8 zT-$jp09MIo2Y@E2EbDavU7{E(oiA=SYF(3LK^bxxwI+432GEy2VBLKJ^+-Tr?z>nL zMN1?@cn2U|tRFhc=q&pGjKH2LSQevG%av(M7=H)@0001%m5eO_003Z6OjJex|Nq|J-o3rO?*ISQ=JvhK-Z?or z-ri!Qq$zWxDU`)Zy}d!^=H~zZ|Gk`2lyfQn|NsC0gWld^y}d!4oFIF909slAIXM8m zy+MPtIdh~b&COEo?(YBp|Gk`2lyfP1XBasE00E6jL_t(|oPWKRjc$V=5P(TqQ(+OR zR=d&!-v2EJ@_PtMS+((cI^Ckv2jm4Cbplo)7|KvqBk0NuUU1oS zE?~bEd_03IXhi`bR^Z1rf?5;*MsNYGQUKQ!I%+`YL;g=d4u-j^6L_fh^dg1_<>nz6 zlN*4LT|jT4;D1YlRjWW>LUmBkvpx&Pw(oHi+oFj8Wckr{Y}Tq5(F^FouSy9ZU=2h9 z)RNB-34%6UjX{w~@nO)B?Sgj;Ix4kZ{Y)4NcIA!s`%t|QX1x;#4N6LjGrK8PAdH}) z^vny!acrv{HG*ks6zGqw5lmBa`Hf&6eK`W#iN|AESAQv^V~34LrV7El0<6INbr3NH z!Mr{roPcHoGA|HMfb;_WI*$P%3j&!Uj9^e--bgSldBHuGZw0JFlV@2Af-L(Pq-CoW zd}n#T(@61&ipJZlee$^g@=`4lnf^eKTv4TSZWN!*VDqRA=Pza8;BHj^!7Xr~Up<55 nCbpL@SssGA8MwR1QOf@TgwcRmnWC^t00000NkvXXu0mjfF9QJ? delta 515 zcmV+e0{s251d#-g7=Hu<0000}WnnA;001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00EpyL_t(|oSl@vPQx$|#{C3T z9atHHcmULjp%N3x$VS-^TVA13CB(vzfDmikjvXN31rQcb0e=-psQj6j2on+$!RI?S zP7@o!r@FrQezE;s;xN{v{LWVjf&i~8dMN>^2H>L(%uGEMb)au*4}jZ_Rt?zy4Y1Cz zgQ@@-0McsUJH%YczW`lS6F{5YLUn3l^`U~uGu7CNZAmHIEnk!CZi&eyvNCTKlWG>=-&dP{&HUW5_*+f8L6#^{>Faf|N zaE`MapNBUDkT?2=8ekF5P9?CE=ZuP@yz`_iR|J4OM$B4(X8>N? z%x>^o0-g(iL+p9(8sy%(dC?8RLiO;ns(67WU^PUM&3y8sp@9voWk@#5kA?=`5IDrw zfVDv@g#nm0r+oz044`G&oPIJ7v}*vBjnfRvp#v};kI+E{ilUP%_?77zppQe0kXQtS z&S$Z82DySbPDh!FWNTg`%`Pl6&>Ba+kM}ojQm91J3_qd#h)4-S;KBd^002ovPDHLk FV1jI2;rjpp diff --git a/graphics/pokemon_storage/wallpapers/savanna/title.pal b/graphics/pokemon_storage/wallpapers/savanna/title.pal deleted file mode 100644 index 1c1742cc2..000000000 --- a/graphics/pokemon_storage/wallpapers/savanna/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -222 222 222 -189 189 189 -238 255 255 -213 230 246 -189 205 222 -57 57 57 -222 222 98 -164 164 41 -115 164 41 -148 197 74 -189 189 65 -230 230 230 -255 255 255 -189 156 82 -148 115 41 diff --git a/graphics/pokemon_storage/wallpapers/seafloor/box.pal b/graphics/pokemon_storage/wallpapers/seafloor/box.pal deleted file mode 100644 index 43b2eecab..000000000 --- a/graphics/pokemon_storage/wallpapers/seafloor/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -164 213 255 -131 180 255 -98 148 222 -65 115 189 -32 82 156 -0 49 123 -0 16 90 -139 90 115 -156 106 131 -115 65 90 -0 0 0 -238 238 238 -255 255 255 -148 180 41 -106 139 0 diff --git a/graphics/pokemon_storage/wallpapers/seafloor/tiles.png b/graphics/pokemon_storage/wallpapers/seafloor/tiles.png index 192f7126c0d682d6c6cd12996588a613d3b4a6ee..e662d247c5d49541d15696140be76919628e6730 100644 GIT binary patch delta 689 zcmbQtx|el=L_G&H0|P_VF+K+%l@Q<);`;yp|K=_KlcwBrEZ(aSG>1VV2`B>u-BHDJ zvYLw>qk!yZ&z=F5P1&NE)y)88EV+uR#ju(|APQOiyLa#4>Q9TXa4;}1NqD+AhE&X{ zUpp;#bCZHV>&{N&n?AQp72Y=g{a;@>eS50-L7n#(nIz9Cze_Yy{OA4G+=@qnHPxO;Q;<_)o@vK92hwlT9TIbr4h zX3ebWOQcWSpTVS6c=X}BC*}#V0Z9)WuFsX;$;7jEL*yHQknceZH$-=s++XGWkLAU~ zaMufwt`{`Fs~=zxQuSBdy}5T9^N|URD#ad}FB^RRef5{jQ_@PABHsF0KtSZ1SKn%F zb^%$oHT}&Vv*LS0;gWxW@7ZqH2i7S~HRJiS3coGrFn z-~Y(w+abM-q2T`upAAC$UmG2`Ytx~$fS*A$pWF6-?t00DN`t-i0t_=3#Y-*~{bl)J zYW7El-%JNh54+EdU<_-HK3U(r-oRddP1JFvC#D+OYZb0sFxY>OzvJHzhKErfVv^bQ z1Fz0)`}ZV}XXSl{q;-6TvnBo7dftj1c%JnoXIW*Fu+_m;LAx0*6y7swuHSV3;l4hZ zTUH8BvUJa%eA!vK@=D%1g&M6bbxe;s>tuxr-=+zA?mgJIG~M#bpZc^nodt6`l@5Rs No~Nsy%Q~loCID&lIk*4- delta 646 zcmV;10(t$t1(OAk7=Hu<0002LHse76001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00JIKL_t(|oQ;&fZrd;r#`y#d z+Ux=BG(*Q&LXfQSNe>X11QMX=A`(enpks!hh3v5|40~=61b=xSkNG!ssxxJca>pZO zQI@NGGC_m<@p#`!q!91XVyzzAfM*8o*6F@rK+5Rjsy1W!)dPcG0}v(ON}#{n2*?JY z!>R&{xx_8HRefUF{|rd*M5kMm2M)`TP8+aPkK}TIXgnTAb#0>@&_5Ushjy@6gFG zMnJ3e#1BSs;(&j5!j+_)#X3wW00TuKg0)~Pv47=(4G#dg&Jr;s4&d*R%EZDcj={x> zY0LtsBUo~QJiuxN8nphp?@0-ZwEcf{{V@#WDo0y%H=^o zVA{UH%H=^oVETc8CqBko1p}d}R~lqsrxCFGvXlc>ue`2(&53b<|5Fa4j4?`Uqp5em zwqdbNgR@E*MZE*|zFQf#X;Ou7YN&U>Uj{DtQ_nDXmJJN`4yf9kOJg@kDFv6qM%Cv0 z1@}(1#D65q90HpdK`G3V9;F)rGC?^~FPvW-p&u()KEX$*K1D~$B>FSZ?D|sYgQ0o4REY*GgK9O@&A7syOfyw!I$4IeKGU(Ic%$FQ6eEV zb5^9-`@NgLRn2{#d8&0ISH19qIqnGuFWNdxEjY)t;eGa9#w7wqbxVVE7`I!+y`IU$ zF_ZEA>wVpr;HL_|b0GczJ0A`uZ00001QfV@Ef008DmL_t(|oaNI!4uUWg2k;lY zfZRaXoJ{C!Tx52ktZp2|xH|R%4tN4&b1mLL524Yy_B|*mP=BJ%{s&TCe|e!F01Snd zG80}src6J8FaQ`c)?gbb%)>XWDr|!|iX*P{3tQYMXTJ~P4T6&9ues*{Ybst4NHGj# zp>t{h9AK!p+wzqMDJDr$v))`#96&Ey7o`{k3_&=n=JzhJQ~-hR)o}pD0Y+wi;sCFx zb3k42{08WU*+r0{{e3xBm2BYO?|8Y0000)b9U0Getok(HO(=TzyZtlPec0$Abg*KcXVAg# zmB-8+`7caAcN$17yS7PD{LYPs3-t=dlf|vmBzNV&x z{mt7AG@fx+xxHEQ)tvi{Pt$2F=N{SlD?J{C)SkH0jNCoSL z_UH*x*3W#r1VU@XMxx7uL&D;vV*$WCgn{4*yxddcx>}iTWwkyzatNUbe4cE`FZt85%53Eys zYH55>aEHOCIXe|>C+fLeOlH^HalS{PAitzCWTj8R{CE}-AJ@jHX|79~z8<}?=)jjP z6XM0ziVEjwt`@%`K4D9fLPW=dUAAPs!<&}p^ zF0Pw($fRxS-h;tRn{TS8 k4_%rM)I?jQwJiQ4->g4x#kSPV=RqmU)78&qol`;+0KRNA+W-In delta 601 zcmV-f0;c_{1?B{h7=Hu<0002LHse76001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00HqyL_t(|oQ;&dPQx$|$MXbK zya2jj27gA%ec1VQDE}$7e?9wu zcfKI_kG6w)-3NRMV21R(6X0e@w;o^(^XmJ~1FRzxdLmqla0!elvv~{HZqiFpii!}( zi?kL44XupPW*CSj5!;)9A6Pm6g_-a|k|YQ`EuGHm6czOQ0@Va?ztpsw=K_#AfM%d9 z&DaMR0&0rFm=OGf7XT9~72$=nANazfGQ|fXkdWE{2G==A03DFm zIuQhXw0b63HpRfMr9Lnk0A?r#y28wql;CL`DvuTcUsW5eq5_Gy=n@qG7%7agj0*F_ z%EB7Rxr{o)cHv@h#c&;&;YZ{0u-l{kz+Nq^qz5{G*nh$_;EkBOy$GWLz#2!p2plwq z2Ls>?Y5hPzb9fNYGW|lp+ac>{CqUcO4=oBX_5ysaD6v3)))h<-Psf?UdY`T4%R}Of$V@=xL?#DE*EYP&MNnHe*R|1ThHaFk(5!wXq=C#c# z0vF*AAX1i=tD>?Ka@Ldo^a3qKG+E`T=Bke}tD@dF500000NkvXXu0mjf9P$uC diff --git a/graphics/pokemon_storage/wallpapers/sky/title.pal b/graphics/pokemon_storage/wallpapers/sky/title.pal deleted file mode 100644 index 951f59ecf..000000000 --- a/graphics/pokemon_storage/wallpapers/sky/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -238 255 255 -205 255 255 -164 255 255 -123 213 246 -90 180 213 -57 148 180 -24 115 148 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -230 230 230 -255 255 255 -205 139 41 -164 98 0 diff --git a/graphics/pokemon_storage/wallpapers/snow/box.pal b/graphics/pokemon_storage/wallpapers/snow/box.pal deleted file mode 100644 index 01e46d027..000000000 --- a/graphics/pokemon_storage/wallpapers/snow/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -230 230 230 -205 205 205 -139 148 189 -106 115 156 -74 82 123 -41 49 90 -8 16 57 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -238 238 238 -255 255 255 -213 131 139 -172 90 98 diff --git a/graphics/pokemon_storage/wallpapers/snow/tiles.png b/graphics/pokemon_storage/wallpapers/snow/tiles.png index 00225d6fccfe16a45cd4406228ea4400bc7fa30b..531effeeb4fb6aa69fd8c8763a20564afb16bacc 100644 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^4nSN?DgY|G+T6V+DhX4)rePF^fF-i}ckkZ8)hm2+tz}?f{N?H57*a9k z>a?@dniY6jIk#;f%mv3^wc8%}8qvoX8)lvGL*#iQJ!~Uobgbnw4PXdh>qe{?Zrjlm2U63uD;tHE*IllS1w3)NF<$v(MJe{=>nr zz;R9x!;bdS2@&_^n=g}C!+W{&fajV^v!_bGSS`kACcRYj!Kz;?8WP{KJ2NUc@TO=t z&G1w%VmHiBo!KmLL3_Uu#{<8W(ymNwu5C;Osf#rj7XMUMFsabcPdFaIZRHT|=bmBh zk((a;`q<+6&-f0xF4FcbvW}4yoRFJo)bp6Hf^UjreOd*_Bc+2k{8eb$@7%{zm-?wYQLN0a2*PQzXda7=Hu<0002LHse76001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00HVrL_t(|oVAocZ`&{s#q|jq z9Ia%#0%FlogP1x@a+&Vv%=?~IbdU|Vy!89 zNvf%k(^r5st(mA=rxV~b2oRYtMQDMt(w0_SO_}$fx0OtZ=7fb+}PKi3C5KIpo#Xvzw88i7+55%&afJZ@c$p^q?5|z(f zMwVw%qekn!W-DXhyw8xFJY|5%Y02x5*PVE;sQj{l(tmJ%4*tx%)czf@Z<|!;J9w=<#eMBdD_KTH-n2U0zT}M3O4No4uP{9Qypwt72p8) z6@c4N_DfR6te*&oZSJ-dvrs2_%9z-}yB g2EfiHyx}JQ0f)KD-G<7jm;e9(07*qoM6N<$f-GbW?EnA( diff --git a/graphics/pokemon_storage/wallpapers/snow/title.pal b/graphics/pokemon_storage/wallpapers/snow/title.pal deleted file mode 100644 index 437ccb934..000000000 --- a/graphics/pokemon_storage/wallpapers/snow/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -230 230 230 -205 205 205 -139 148 189 -106 115 156 -74 82 123 -172 180 222 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -230 230 230 -255 255 255 -213 131 139 -172 90 98 diff --git a/graphics/pokemon_storage/wallpapers/stars/box.pal b/graphics/pokemon_storage/wallpapers/stars/box.pal deleted file mode 100644 index fc4215468..000000000 --- a/graphics/pokemon_storage/wallpapers/stars/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 115 -106 8 115 -156 41 148 -205 74 180 -123 98 139 -164 139 189 -197 172 222 -213 189 230 -230 205 246 -164 246 74 -222 255 148 -255 106 189 -255 156 230 -115 156 255 -180 213 255 -255 255 255 diff --git a/graphics/pokemon_storage/wallpapers/stars/tiles.png b/graphics/pokemon_storage/wallpapers/stars/tiles.png index 51c9f86749d30f7428ddba365af20170a7c63184..611228a53f28da8bf2fa2b3cf67d49f299d8aaa9 100644 GIT binary patch delta 611 zcmV-p0-XK31n>lq7=H)@0001a5DeP@003Z6OjJex|8r^xbDSxZ%}TUNYMf$w&3lXg z?(R9&oO_(+QnaLl)oQ(*bH$6aq~_Jt|NsC0|8r^xbDSxZ%}TU;VvD4Uy~V8F)xGBC z&Gw}BO5XpJ|7yMeoaS?!|FqTr|NsB;o%7QG00GNML_t(|oPVX2?V5rh5QUNaO6(!6 zplz%Bzsv>3fdN5x+w;TFr}J`<8DVTk=b|nbt+n!hJY>ZG3E-SNz$Mk31IV>FuPk8g zpXUsqPSr|TA>dA>=XuHinw44)(3<+yb;zrN&u6NqBs6th|y-DfO$^+aRNK-D2!YJ0V4u1 z^)aOi2|ARu^(F)W1Oc3L{*WN}BT+zB;T=T&VK{<*2QUG~-T`{&J_h9~Fseip)=^qm znI7;$fa`4vcs`%sD25ePPH@-(>?Sa7^Kqbn$K&yZVt<{jsGS5-wsjEz^{|~lwoO9; z@AvzKVgu}JE=2&CnlsM~_Ii;e$d#Yk7et(a0yxi{E_-6vD=xvDWYynA0PGWgMYi!n ziKXIfQC!?rS!IA|5MU0jj{w2}{NbnaSvCN0jH}?Mq4#FBrz8{fRZ4jbiVom@6002ovPDHLkV1nVLDlh;5 delta 558 zcmV+}0@3~O1iJ)~7=Hu<0002I;NjW;001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00G8HL_t(|oQ0G{0~s8Dz!KT=RlU{qf*cW=YV$E%mVCO>vN7O1rX*r zBmlUcw1QcKZg6KzK%|2iLnqvoPJ`LYfzUM=;r3W;TL6H!9B4@|wI@yp&_{p~sFnsw1$lh@X78Di_pq1?7@4)ax w7%BrxI44BxiUjq1fYOdkY)rC`K)XD|H+_kJo?2`dr~m)}07*qoM6N<$f_{knJOBUy diff --git a/graphics/pokemon_storage/wallpapers/stars/title.pal b/graphics/pokemon_storage/wallpapers/stars/title.pal deleted file mode 100644 index e7b45e524..000000000 --- a/graphics/pokemon_storage/wallpapers/stars/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 115 -106 8 115 -156 41 148 -205 74 180 -74 106 156 -98 123 205 -123 139 255 -238 238 57 -213 156 123 -156 230 82 -180 164 131 -213 106 189 -156 115 197 -139 180 164 -230 213 213 -255 255 255 diff --git a/graphics/pokemon_storage/wallpapers/tiles/box.pal b/graphics/pokemon_storage/wallpapers/tiles/box.pal deleted file mode 100644 index 9ff5c0789..000000000 --- a/graphics/pokemon_storage/wallpapers/tiles/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 115 -156 90 41 -205 106 8 -230 156 8 -131 131 131 -156 156 156 -180 180 180 -197 197 197 -213 213 213 -0 0 255 -0 0 255 -0 0 255 -164 156 156 -172 172 164 -197 197 189 -255 255 255 diff --git a/graphics/pokemon_storage/wallpapers/tiles/tiles.png b/graphics/pokemon_storage/wallpapers/tiles/tiles.png index 1b3443a0a9c22b0ea697ae6ce45d5d41b17293fc..6247b5561250e09f384465c34ecee734115abdbe 100644 GIT binary patch delta 488 zcmdnP{Ec~nL_G&H0|UcU=e}(~Dj~op#P$FG;yF>8XR|n-&Ea5R_zyu#=5${@y9UT^ zZf;((WXYB-TaF$*diCnn{~&-+50srVXAWEzN&B2NYnB{6x)-QAs%l9P0|R5Ar;B4q z#hm)3Q%~|WD+o9+@|)^7u5{(U^8f!CrA<8E+RNT2O*xaCz~=HoE!a^;!b+i@i$l@x zLyJq}o;HCRj(NF_77rg=*vTzEY`c@gqq8}|+lA3SF`4l(qaf?+s^|k6r&&6uHGKAR z&^*g(#c-;KZ%^E5qw^nZ3+nu34S9kJ>J%?5tqxF~CiN|{rR?YgeUhm~tScQ5eNU2&?+`+%O5M(Kh| z>oe~@GTo|W+hRQ9N@Fii9oM(J4L_6FWVkjZ$D}UU>iPLMk4o}(7AtXqB9oBsa!)>n zCFEP=xc@Q_OcZA-Ig;#hbG?z8qu~0-E4P`uPG8Vr?s>p!`h?@JuZ3RIH%Q<-6Fk*W zNxQMJ`oc%&gRKWrnC`GTz3(WDt@UqkV0&lN;QNO4%zK`Pzu7PDjcfj=@rn@`mkge+ KelF{r5}E)KYu%av delta 430 zcmV;f0a5<;1H1!}7=Hu<0000`vtzda001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00BoyL_t(|oQ>1LO~Wu02H*%5 zXf_}fcck>f4IyQPZczD@6A~#KGzTVWnSl0eA(}ElEf%OO!G9f@_kKSoG%~LO*N$$CO9@=p9Dt^2wzXtKH_bbP z`5<`Scz|@^@g;!elLwWe$TsHHwD6Nt4v#Va)%3xvKvHZI08ME@RkUCd05>Io{L(+a zWpLvF>btB1<9{rb(3~>>i&@%%v+#W67syvt`~XJ>B;fvcu? YZ_mMuB;F#0od5s;07*qoM6N<$f?yiL-~a#s diff --git a/graphics/pokemon_storage/wallpapers/tiles/title.pal b/graphics/pokemon_storage/wallpapers/tiles/title.pal deleted file mode 100644 index efcd01fa6..000000000 --- a/graphics/pokemon_storage/wallpapers/tiles/title.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 115 -156 90 41 -205 106 8 -230 156 8 -0 0 255 -0 0 255 -0 0 255 -164 156 139 -213 205 172 -0 0 255 -131 131 131 -164 164 164 -180 180 180 -197 197 197 -213 213 213 -255 255 255 diff --git a/graphics/pokemon_storage/wallpapers/volcano/box.pal b/graphics/pokemon_storage/wallpapers/volcano/box.pal deleted file mode 100644 index 8ea563b6e..000000000 --- a/graphics/pokemon_storage/wallpapers/volcano/box.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -255 255 255 -255 246 230 -255 238 205 -255 205 172 -246 172 139 -213 139 106 -180 106 74 -148 74 41 -246 156 98 -222 131 74 -205 115 57 -180 82 24 -238 238 238 -255 255 255 -213 131 139 -172 90 98 diff --git a/graphics/pokemon_storage/wallpapers/volcano/tiles.png b/graphics/pokemon_storage/wallpapers/volcano/tiles.png index 812ce08c9d3ae19f8b736e1dad6ef1106ed242de..d4d0bf8a067228c584df59aa213a4287a6a18b66 100644 GIT binary patch delta 737 zcmV<70v`R)1?>fp7=H)@0001;w}I>c003Z6OjJex|Nq|J-o3rOi^ zyH4XKzOdi_Ef;}=5I?&P+p9gENp0YK2uVq;)K6*Z)XxEKor-|5Aw2}?#(W*1gXm$< zEqeo?2mhzJEAP>afTK3n+Htf7K8rov5>d$8N7U%AQeaD;jpAAezzIQWGy>-L0q&IA z1z@25(|i_iiGSCCegnz7MZm@D3Nn|fhyb#&u=!7~apkI4bKpKR%_N!>viV9xw#%kJ1-0ICu2ZSDquJ7NS(J^xr7Hv;Ak zxlSa2>hS}>5TH+-4r+AKa9L8tK-ky{LRPK3rlKk(!1q?^X=tti_#h{Q$?tu!aGE`! zt9GR6AAbSUpUQh$pH1!ivfRJE9_xA>$ukMZ-viuNAp-1$8i4!yohSlI|9;c~`?t`+ zfL}uU(EuE|b_6U->R%ppz-P@*fK-pQ0jLTAcMc#g+us1B*E`zWg#xdC(>v(|i4pQw z0qI)r+_q;e(3q*RvBq_3YGdppvE6 Tof>|N00000NkvXXu0mjf>!fYY delta 708 zcmV;#0z3Wf1<(bM7=Hu<00013M{Ml?001yhOjJex|Nrjp?%mzp%*@QYySu8Ys+pOY zh=_=HcXwuHW>r;HL_|b0GczJ0A`uZ00001QfV@Ef00LV{L_t(|oV}F4j?+L8#`g(0 zt)**`?BojQxSY^66o4&p1qJ9#hv@POloU{`k!ZLkvl2o&D1YL49YBI2N2sVSS0Pbh zW@dMt%^#aoe1$FV{AOmqNp_XmMT;Ko2F!XSKp833S|3E;5%4(6GJ0i69FKvtEFZ1J zO3sKYXq}X$#j-}fuumD@=jWVM6h$6Xl&A7OA&c_>Y%0xe5OCEAq)85HcF}AB?z8Ud z;R&enDFdHIqkm&#&PJ_{NQdc=T0HXr#VdF@S`iP;SNH~ofypXxsC62E2>}3LX!*Em z`vJUFfC%Wlr#d-ZccLf_@I2GQ?UN9|;>Y~n8u7rqS^|hDLs^L%698(A=Q`1YX#0_8 zm66w!3@0v9$*{!IL`bDY$-rk;a3=AJ0K=7(G|)HkgMZ7UVHx9Q0`gY*Lm8Ayl1UlI z(5I~-0AGC)$0`7ilRXT;Z&!e0m48SaH!E;R>Z1cjcNni23+#`(0MeG9i4VQyr`X&Q<$nM;U=ai8qjrke0++KkK7H--ELP|V z0=|@dNMzmEP#K`EkxwTBzo6!;jHueSy?KxHQ9Zi~(ibhS+R$7W3oXDkYkAluL0`&k qq(}b+V6Q!LUVG%c_O+<{EBpm5a$w3d=7}Z%0000