Misc battle documentation

This commit is contained in:
GriffinR
2021-01-22 23:22:37 -05:00
parent 4228509e95
commit a392cca928
24 changed files with 456 additions and 494 deletions

View File

@@ -421,8 +421,8 @@ struct BattleStruct
u16 castformPalette[MAX_BATTLERS_COUNT][16]; u16 castformPalette[MAX_BATTLERS_COUNT][16];
u8 field_180; // weird field, used in battle_main.c, once accessed as an array of u32 overwriting the field below u8 field_180; // weird field, used in battle_main.c, once accessed as an array of u32 overwriting the field below
u8 field_181; u8 field_181;
u8 field_182; u8 vsScreenHealthFlagsLo;
u8 field_183; u8 vsScreenHealthFlagsHi; // Last bit is 'has frontier pass'
struct BattleEnigmaBerry battleEnigmaBerry; struct BattleEnigmaBerry battleEnigmaBerry;
u8 wishPerishSongState; u8 wishPerishSongState;
u8 wishPerishSongBattlerId; u8 wishPerishSongBattlerId;

View File

@@ -148,7 +148,7 @@ void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union Aff
bool8 RunAffineAnimFromTaskData(struct Task *task); bool8 RunAffineAnimFromTaskData(struct Task *task);
void AnimThrowProjectile(struct Sprite *sprite); void AnimThrowProjectile(struct Sprite *sprite);
void sub_80A6BFC(struct BattleAnimBgData *unk, u8 unused); void sub_80A6BFC(struct BattleAnimBgData *unk, u8 unused);
u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10); u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, bool32 ignoreDeoxysForm);
void sub_80A749C(struct Sprite *sprite); void sub_80A749C(struct Sprite *sprite);
void TradeMenuBouncePartySprites(struct Sprite *sprite); void TradeMenuBouncePartySprites(struct Sprite *sprite);
void DestroyAnimVisualTaskAndDisableBlend(u8 taskId); void DestroyAnimVisualTaskAndDisableBlend(u8 taskId);

View File

@@ -5,7 +5,6 @@ void AllocateBattleSpritesData(void);
void FreeBattleSpritesData(void); void FreeBattleSpritesData(void);
u16 ChooseMoveAndTargetInBattlePalace(void); u16 ChooseMoveAndTargetInBattlePalace(void);
void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite); void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite);
void sub_805D770(struct Sprite *sprite, bool8 arg1);
void SpriteCB_TrainerSlideIn(struct Sprite *sprite); void SpriteCB_TrainerSlideIn(struct Sprite *sprite);
void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status); void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status);
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument); bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument);

View File

@@ -49,19 +49,18 @@ void CB2_QuitRecordedBattle(void);
void sub_8038528(struct Sprite* sprite); void sub_8038528(struct Sprite* sprite);
void sub_8038A04(void); // unused void sub_8038A04(void); // unused
void VBlankCB_Battle(void); void VBlankCB_Battle(void);
void nullsub_17(struct Sprite *sprite); void SpriteCB_VsLetterDummy(struct Sprite *sprite);
void sub_8038B74(struct Sprite *sprite); void SpriteCB_VsLetterInit(struct Sprite *sprite);
void CB2_InitEndLinkBattle(void); void CB2_InitEndLinkBattle(void);
u32 sub_80391E0(u8 arrayId, u8 caseId); u32 GetBattleBgTemplateData(u8 arrayId, u8 caseId);
u32 sub_80397C4(u32 setId, u32 tableId); u32 GetBattleWindowTemplatePixelWidth(u32 setId, u32 tableId);
void SpriteCb_WildMon(struct Sprite *sprite); void SpriteCb_WildMon(struct Sprite *sprite);
void SpriteCallbackDummy_2(struct Sprite *sprite); void SpriteCallbackDummy_2(struct Sprite *sprite);
void SpriteCB_FaintOpponentMon(struct Sprite *sprite); void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite); void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite);
void SpriteCb_HideAsMoveTarget(struct Sprite *sprite); void SpriteCb_HideAsMoveTarget(struct Sprite *sprite);
void SpriteCb_OpponentMonFromBall(struct Sprite *sprite); void SpriteCb_OpponentMonFromBall(struct Sprite *sprite);
void sub_8039BB4(struct Sprite *sprite); void SpriteCB_BattleSpriteStartSlideLeft(struct Sprite *sprite);
void sub_80105DC(struct Sprite *sprite);
void SpriteCB_FaintSlideAnim(struct Sprite *sprite); void SpriteCB_FaintSlideAnim(struct Sprite *sprite);
void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d); void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d);
void EndBounceEffect(u8 battlerId, bool8 b); void EndBounceEffect(u8 battlerId, bool8 b);
@@ -86,8 +85,8 @@ void SpecialStatusesClear(void);
extern struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE]; extern struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE];
extern const struct SpriteTemplate gUnknown_0831AC88; extern const struct SpriteTemplate gUnknown_0831AC88;
extern const struct OamData gOamData_831ACA8; extern const struct OamData gOamData_BattleSpriteOpponentSide;
extern const struct OamData gOamData_831ACB0; extern const struct OamData gOamData_BattleSpritePlayerSide;
extern const u8 gTypeEffectiveness[336]; extern const u8 gTypeEffectiveness[336];
extern const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1]; extern const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1];
extern const struct TrainerMoney gTrainerMoneyTable[]; extern const struct TrainerMoney gTrainerMoneyTable[];

View File

@@ -69,13 +69,13 @@ struct Trainer
#define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F)) #define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F))
extern const u16 gUnknown_082FF1D8[]; extern const u16 gMinigameDigits_Pal[];
extern const u32 gUnknown_082FF1F8[]; extern const u32 gMinigameDigits_Gfx[];
extern const struct SpriteFrameImage gUnknown_082FF3A8[]; extern const struct SpriteFrameImage gBattlerPicTable_PlayerLeft[];
extern const struct SpriteFrameImage gUnknown_082FF3C8[]; extern const struct SpriteFrameImage gBattlerPicTable_OpponentLeft[];
extern const struct SpriteFrameImage gUnknown_082FF3E8[]; extern const struct SpriteFrameImage gBattlerPicTable_PlayerRight[];
extern const struct SpriteFrameImage gUnknown_082FF408[]; extern const struct SpriteFrameImage gBattlerPicTable_OpponentRight[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Brendan[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Brendan[];
extern const struct SpriteFrameImage gTrainerBackPicTable_May[]; extern const struct SpriteFrameImage gTrainerBackPicTable_May[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Red[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Red[];
@@ -85,8 +85,8 @@ extern const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Wally[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Wally[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Steven[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Steven[];
extern const union AffineAnimCmd *const gUnknown_082FF618[]; extern const union AffineAnimCmd *const gAffineAnims_BattleSpritePlayerSide[];
extern const union AffineAnimCmd *const gUnknown_082FF694[]; extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[];
extern const union AffineAnimCmd *const gUnknown_082FF6C0[]; extern const union AffineAnimCmd *const gUnknown_082FF6C0[];
extern const union AnimCmd *const gUnknown_082FF70C[]; extern const union AnimCmd *const gUnknown_082FF70C[];

View File

@@ -266,7 +266,7 @@ extern const u8 gPPUpSetMask[];
extern const u8 gPPUpAddMask[]; extern const u8 gPPUpAddMask[];
extern const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2]; extern const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2];
extern const u16 gLinkPlayerFacilityClasses[]; extern const u16 gLinkPlayerFacilityClasses[];
extern const struct SpriteTemplate gUnknown_08329D98[]; extern const struct SpriteTemplate gBattlerSpriteTemplates[];
extern const s8 gNatureStatTable[][5]; extern const s8 gNatureStatTable[][5];
void ZeroBoxMonData(struct BoxPokemon *boxMon); void ZeroBoxMonData(struct BoxPokemon *boxMon);
@@ -287,7 +287,7 @@ void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 m
void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId);
void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest);
void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId);
bool8 sub_80688F8(u8 caseId, u8 battlerId); bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId);
void SetDeoxysStats(void); void SetDeoxysStats(void);
u16 GetUnionRoomTrainerPic(void); u16 GetUnionRoomTrainerPic(void);
u16 GetUnionRoomTrainerClass(void); u16 GetUnionRoomTrainerClass(void);

View File

@@ -95,16 +95,16 @@ static void Cmd_if_equal_(void);
static void Cmd_if_not_equal_(void); static void Cmd_if_not_equal_(void);
static void Cmd_if_user_goes(void); static void Cmd_if_user_goes(void);
static void Cmd_if_user_doesnt_go(void); static void Cmd_if_user_doesnt_go(void);
static void Cmd_nullsub_2A(void); static void Cmd_nop_2A(void);
static void Cmd_nullsub_2B(void); static void Cmd_nop_2B(void);
static void Cmd_count_usable_party_mons(void); static void Cmd_count_usable_party_mons(void);
static void Cmd_get_considered_move(void); static void Cmd_get_considered_move(void);
static void Cmd_get_considered_move_effect(void); static void Cmd_get_considered_move_effect(void);
static void Cmd_get_ability(void); static void Cmd_get_ability(void);
static void Cmd_get_highest_type_effectiveness(void); static void Cmd_get_highest_type_effectiveness(void);
static void Cmd_if_type_effectiveness(void); static void Cmd_if_type_effectiveness(void);
static void Cmd_nullsub_32(void); static void Cmd_nop_32(void);
static void Cmd_nullsub_33(void); static void Cmd_nop_33(void);
static void Cmd_if_status_in_party(void); static void Cmd_if_status_in_party(void);
static void Cmd_if_status_not_in_party(void); static void Cmd_if_status_not_in_party(void);
static void Cmd_get_weather(void); static void Cmd_get_weather(void);
@@ -135,12 +135,12 @@ static void Cmd_get_move_type_from_result(void);
static void Cmd_get_move_power_from_result(void); static void Cmd_get_move_power_from_result(void);
static void Cmd_get_move_effect_from_result(void); static void Cmd_get_move_effect_from_result(void);
static void Cmd_get_protect_count(void); static void Cmd_get_protect_count(void);
static void Cmd_nullsub_52(void); static void Cmd_nop_52(void);
static void Cmd_nullsub_53(void); static void Cmd_nop_53(void);
static void Cmd_nullsub_54(void); static void Cmd_nop_54(void);
static void Cmd_nullsub_55(void); static void Cmd_nop_55(void);
static void Cmd_nullsub_56(void); static void Cmd_nop_56(void);
static void Cmd_nullsub_57(void); static void Cmd_nop_57(void);
static void Cmd_call(void); static void Cmd_call(void);
static void Cmd_goto(void); static void Cmd_goto(void);
static void Cmd_end(void); static void Cmd_end(void);
@@ -204,16 +204,16 @@ static const BattleAICmdFunc sBattleAICmdTable[] =
Cmd_if_not_equal_, // 0x27 Cmd_if_not_equal_, // 0x27
Cmd_if_user_goes, // 0x28 Cmd_if_user_goes, // 0x28
Cmd_if_user_doesnt_go, // 0x29 Cmd_if_user_doesnt_go, // 0x29
Cmd_nullsub_2A, // 0x2A Cmd_nop_2A, // 0x2A
Cmd_nullsub_2B, // 0x2B Cmd_nop_2B, // 0x2B
Cmd_count_usable_party_mons, // 0x2C Cmd_count_usable_party_mons, // 0x2C
Cmd_get_considered_move, // 0x2D Cmd_get_considered_move, // 0x2D
Cmd_get_considered_move_effect, // 0x2E Cmd_get_considered_move_effect, // 0x2E
Cmd_get_ability, // 0x2F Cmd_get_ability, // 0x2F
Cmd_get_highest_type_effectiveness, // 0x30 Cmd_get_highest_type_effectiveness, // 0x30
Cmd_if_type_effectiveness, // 0x31 Cmd_if_type_effectiveness, // 0x31
Cmd_nullsub_32, // 0x32 Cmd_nop_32, // 0x32
Cmd_nullsub_33, // 0x33 Cmd_nop_33, // 0x33
Cmd_if_status_in_party, // 0x34 Cmd_if_status_in_party, // 0x34
Cmd_if_status_not_in_party, // 0x35 Cmd_if_status_not_in_party, // 0x35
Cmd_get_weather, // 0x36 Cmd_get_weather, // 0x36
@@ -244,12 +244,12 @@ static const BattleAICmdFunc sBattleAICmdTable[] =
Cmd_get_move_power_from_result, // 0x4F Cmd_get_move_power_from_result, // 0x4F
Cmd_get_move_effect_from_result, // 0x50 Cmd_get_move_effect_from_result, // 0x50
Cmd_get_protect_count, // 0x51 Cmd_get_protect_count, // 0x51
Cmd_nullsub_52, // 0x52 Cmd_nop_52, // 0x52
Cmd_nullsub_53, // 0x53 Cmd_nop_53, // 0x53
Cmd_nullsub_54, // 0x54 Cmd_nop_54, // 0x54
Cmd_nullsub_55, // 0x55 Cmd_nop_55, // 0x55
Cmd_nullsub_56, // 0x56 Cmd_nop_56, // 0x56
Cmd_nullsub_57, // 0x57 Cmd_nop_57, // 0x57
Cmd_call, // 0x58 Cmd_call, // 0x58
Cmd_goto, // 0x59 Cmd_goto, // 0x59
Cmd_end, // 0x5A Cmd_end, // 0x5A
@@ -1278,11 +1278,11 @@ static void Cmd_if_user_doesnt_go(void)
gAIScriptPtr += 6; gAIScriptPtr += 6;
} }
static void Cmd_nullsub_2A(void) static void Cmd_nop_2A(void)
{ {
} }
static void Cmd_nullsub_2B(void) static void Cmd_nop_2B(void)
{ {
} }
@@ -1539,11 +1539,11 @@ static void Cmd_if_type_effectiveness(void)
gAIScriptPtr += 6; gAIScriptPtr += 6;
} }
static void Cmd_nullsub_32(void) static void Cmd_nop_32(void)
{ {
} }
static void Cmd_nullsub_33(void) static void Cmd_nop_33(void)
{ {
} }
@@ -2134,27 +2134,27 @@ static void Cmd_get_protect_count(void)
gAIScriptPtr += 2; gAIScriptPtr += 2;
} }
static void Cmd_nullsub_52(void) static void Cmd_nop_52(void)
{ {
} }
static void Cmd_nullsub_53(void) static void Cmd_nop_53(void)
{ {
} }
static void Cmd_nullsub_54(void) static void Cmd_nop_54(void)
{ {
} }
static void Cmd_nullsub_55(void) static void Cmd_nop_55(void)
{ {
} }
static void Cmd_nullsub_56(void) static void Cmd_nop_56(void)
{ {
} }
static void Cmd_nullsub_57(void) static void Cmd_nop_57(void)
{ {
} }

View File

@@ -2321,7 +2321,7 @@ void AnimTask_TransformMon(u8 taskId)
if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies)) if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0; gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
else else
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694; gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteOpponentSide;
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0); StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
} }
@@ -3248,7 +3248,7 @@ void AnimTask_RolePlaySilhouette(u8 taskId)
coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
spriteId = sub_80A8394(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, 1); spriteId = CreateAdditionalMonSpriteForMoveAnim(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, TRUE);
gSprites[spriteId].oam.priority = priority; gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
@@ -5066,7 +5066,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
} }
} }
spriteId2 = sub_80A8394(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0); spriteId2 = CreateAdditionalMonSpriteForMoveAnim(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, FALSE);
if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies != SPECIES_NONE) if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies != SPECIES_NONE)
BlendPalette((gSprites[spriteId2].oam.paletteNum * 16) | 0x100, 16, 6, RGB_WHITE); BlendPalette((gSprites[spriteId2].oam.paletteNum * 16) | 0x100, 16, 6, RGB_WHITE);

View File

@@ -79,11 +79,15 @@ static const u8 sCastformBackSpriteYCoords[] =
0, // HAIL 0, // HAIL
}; };
static const struct SpriteTemplate sUnknown_08525F90[] = // Placeholders for pokemon sprites to be created for a move animation effect (e.g. Role Play / Snatch)
#define TAG_MOVE_EFFECT_MON_1 55125
#define TAG_MOVE_EFFECT_MON_2 55126
static const struct SpriteTemplate sSpriteTemplate_MoveEffectMons[] =
{ {
{ {
.tileTag = 55125, .tileTag = TAG_MOVE_EFFECT_MON_1,
.paletteTag = 55125, .paletteTag = TAG_MOVE_EFFECT_MON_1,
.oam = &gOamData_AffineNormal_ObjNormal_64x64, .oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
@@ -91,8 +95,8 @@ static const struct SpriteTemplate sUnknown_08525F90[] =
.callback = SpriteCallbackDummy, .callback = SpriteCallbackDummy,
}, },
{ {
.tileTag = 55126, .tileTag = TAG_MOVE_EFFECT_MON_2,
.paletteTag = 55126, .paletteTag = TAG_MOVE_EFFECT_MON_2,
.oam = &gOamData_AffineNormal_ObjNormal_64x64, .oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
@@ -101,10 +105,10 @@ static const struct SpriteTemplate sUnknown_08525F90[] =
} }
}; };
static const struct SpriteSheet sUnknown_08525FC0[] = static const struct SpriteSheet sSpriteSheet_MoveEffectMons[] =
{ {
{ gMiscBlank_Gfx, 0x800, 55125, }, { gMiscBlank_Gfx, 0x800, TAG_MOVE_EFFECT_MON_1, },
{ gMiscBlank_Gfx, 0x800, 55126, }, { gMiscBlank_Gfx, 0x800, TAG_MOVE_EFFECT_MON_2, },
}; };
u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
@@ -2021,18 +2025,19 @@ u8 GetBattlerSpriteBGPriorityRank(u8 battlerId)
return 1; return 1;
} }
u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10) // Create pokemon sprite to be used for a move animation effect (e.g. Role Play / Snatch)
u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, bool32 ignoreDeoxysForm)
{ {
u8 spriteId; u8 spriteId;
u16 sheet = LoadSpriteSheet(&sUnknown_08525FC0[a3]); u16 sheet = LoadSpriteSheet(&sSpriteSheet_MoveEffectMons[id]);
u16 palette = AllocSpritePalette(sUnknown_08525F90[a3].paletteTag); u16 palette = AllocSpritePalette(sSpriteTemplate_MoveEffectMons[id].paletteTag);
if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->buffer == NULL) if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->buffer == NULL)
gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000);
if (!isBackpic) if (!isBackpic)
{ {
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20);
if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) if (ignoreDeoxysForm == TRUE || ShouldIgnoreDeoxysForm(5, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species],
gMonSpritesGfxPtr->buffer, gMonSpritesGfxPtr->buffer,
species, species,
@@ -2048,7 +2053,7 @@ u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority
else else
{ {
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20);
if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) if (ignoreDeoxysForm == TRUE || ShouldIgnoreDeoxysForm(5, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species],
gMonSpritesGfxPtr->buffer, gMonSpritesGfxPtr->buffer,
species, species,
@@ -2066,9 +2071,9 @@ u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority
FREE_AND_SET_NULL(gMonSpritesGfxPtr->buffer); FREE_AND_SET_NULL(gMonSpritesGfxPtr->buffer);
if (!isBackpic) if (!isBackpic)
spriteId = CreateSprite(&sUnknown_08525F90[a3], x, y + gMonFrontPicCoords[species].y_offset, subpriority); spriteId = CreateSprite(&sSpriteTemplate_MoveEffectMons[id], x, y + gMonFrontPicCoords[species].y_offset, subpriority);
else else
spriteId = CreateSprite(&sUnknown_08525F90[a3], x, y + gMonBackPicCoords[species].y_offset, subpriority); spriteId = CreateSprite(&sSpriteTemplate_MoveEffectMons[id], x, y + gMonBackPicCoords[species].y_offset, subpriority);
if (IsContest()) if (IsContest())
{ {

View File

@@ -40,10 +40,10 @@ static void AnimTask_WaitAndRestoreVisibility(u8);
const u16 gUnknown_08597418 = RGB(31, 31, 31); const u16 gUnknown_08597418 = RGB(31, 31, 31);
// These belong in battle_intro.c, but there putting them there causes 2 bytes of alignment padding // These belong in battle_intro.c, but putting them there causes 2 bytes of alignment padding
// between the two .rodata segments. Perhaps battle_intro.c actually belongs in this file, too. // between the two .rodata segments. Perhaps battle_intro.c actually belongs in this file, too.
const u8 gUnknown_0859741A[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT}; const u8 gBattleAnimBgCntSet[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT};
const u8 gUnknown_0859741E[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT}; const u8 gBattleAnimBgCntGet[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT};
void AnimTask_BlendBattleAnimPal(u8 taskId) void AnimTask_BlendBattleAnimPal(u8 taskId)
{ {

View File

@@ -100,7 +100,7 @@ static const struct SpriteTemplate sVsLetter_V_SpriteTemplate =
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = sVsLetterAffineAnimTable, .affineAnims = sVsLetterAffineAnimTable,
.callback = nullsub_17 .callback = SpriteCB_VsLetterDummy
}; };
static const struct SpriteTemplate sVsLetter_S_SpriteTemplate = static const struct SpriteTemplate sVsLetter_S_SpriteTemplate =
@@ -111,7 +111,7 @@ static const struct SpriteTemplate sVsLetter_S_SpriteTemplate =
.anims = gDummySpriteAnimTable, .anims = gDummySpriteAnimTable,
.images = NULL, .images = NULL,
.affineAnims = sVsLetterAffineAnimTable, .affineAnims = sVsLetterAffineAnimTable,
.callback = nullsub_17 .callback = SpriteCB_VsLetterDummy
}; };
static const struct CompressedSpriteSheet sVsLettersSpriteSheet = static const struct CompressedSpriteSheet sVsLettersSpriteSheet =

View File

@@ -357,9 +357,9 @@ void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite)
} }
} }
void sub_805D770(struct Sprite *sprite, bool8 arg1) static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 arg1)
{ {
sprite->animPaused = 1; sprite->animPaused = TRUE;
sprite->callback = SpriteCallbackDummy; sprite->callback = SpriteCallbackDummy;
if (!arg1) if (!arg1)
@@ -629,7 +629,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
otId = GetMonData(mon, MON_DATA_OT_ID); otId = GetMonData(mon, MON_DATA_OT_ID);
position = GetBattlerPosition(battlerId); position = GetBattlerPosition(battlerId);
if (sub_80688F8(1, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) if (ShouldIgnoreDeoxysForm(1, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
{ {
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species],
gMonSpritesGfxPtr->sprites.ptr[position], gMonSpritesGfxPtr->sprites.ptr[position],
@@ -1255,7 +1255,7 @@ void AllocateMonSpritesGfx(void)
for (i = 0; i < MAX_BATTLERS_COUNT; i++) for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{ {
gMonSpritesGfxPtr->sprites.ptr[i] = gMonSpritesGfxPtr->firstDecompressed + (i * 0x2000); gMonSpritesGfxPtr->sprites.ptr[i] = gMonSpritesGfxPtr->firstDecompressed + (i * 0x2000);
*(gMonSpritesGfxPtr->templates + i) = gUnknown_08329D98[i]; *(gMonSpritesGfxPtr->templates + i) = gBattlerSpriteTemplates[i];
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
{ {

View File

@@ -13,8 +13,8 @@
static EWRAM_DATA u16 sBgCnt = 0; static EWRAM_DATA u16 sBgCnt = 0;
extern const u8 gUnknown_0859741A[]; extern const u8 gBattleAnimBgCntSet[];
extern const u8 gUnknown_0859741E[]; extern const u8 gBattleAnimBgCntGet[];
static void BattleIntroSlide1(u8); static void BattleIntroSlide1(u8);
static void BattleIntroSlide2(u8); static void BattleIntroSlide2(u8);
@@ -24,23 +24,23 @@ static void BattleIntroSlidePartner(u8);
static const TaskFunc sBattleIntroSlideFuncs[] = static const TaskFunc sBattleIntroSlideFuncs[] =
{ {
BattleIntroSlide1, // BATTLE_TERRAIN_GRASS [BATTLE_TERRAIN_GRASS] = BattleIntroSlide1,
BattleIntroSlide1, // BATTLE_TERRAIN_LONG_GRASS [BATTLE_TERRAIN_LONG_GRASS] = BattleIntroSlide1,
BattleIntroSlide2, // BATTLE_TERRAIN_SAND [BATTLE_TERRAIN_SAND] = BattleIntroSlide2,
BattleIntroSlide2, // BATTLE_TERRAIN_UNDERWATER [BATTLE_TERRAIN_UNDERWATER] = BattleIntroSlide2,
BattleIntroSlide2, // BATTLE_TERRAIN_WATER [BATTLE_TERRAIN_WATER] = BattleIntroSlide2,
BattleIntroSlide1, // BATTLE_TERRAIN_POND [BATTLE_TERRAIN_POND] = BattleIntroSlide1,
BattleIntroSlide1, // BATTLE_TERRAIN_MOUNTAIN [BATTLE_TERRAIN_MOUNTAIN] = BattleIntroSlide1,
BattleIntroSlide1, // BATTLE_TERRAIN_CAVE [BATTLE_TERRAIN_CAVE] = BattleIntroSlide1,
BattleIntroSlide3, // BATTLE_TERRAIN_BUILDING [BATTLE_TERRAIN_BUILDING] = BattleIntroSlide3,
BattleIntroSlide3, // BATTLE_TERRAIN_PLAIN [BATTLE_TERRAIN_PLAIN] = BattleIntroSlide3,
}; };
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value) void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value)
{ {
if (bgId < 4) if (bgId < 4)
{ {
sBgCnt = GetGpuReg(gUnknown_0859741A[bgId]); sBgCnt = GetGpuReg(gBattleAnimBgCntSet[bgId]);
switch (attributeId) switch (attributeId)
{ {
case BG_ANIM_SCREEN_SIZE: case BG_ANIM_SCREEN_SIZE:
@@ -66,7 +66,7 @@ void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value)
break; break;
} }
SetGpuReg(gUnknown_0859741A[bgId], sBgCnt); SetGpuReg(gBattleAnimBgCntSet[bgId], sBgCnt);
} }
} }
@@ -76,7 +76,7 @@ int GetAnimBgAttribute(u8 bgId, u8 attributeId)
if (bgId < 4) if (bgId < 4)
{ {
bgCnt = GetGpuReg(gUnknown_0859741E[bgId]); bgCnt = GetGpuReg(gBattleAnimBgCntGet[bgId]);
switch (attributeId) switch (attributeId)
{ {
case BG_ANIM_SCREEN_SIZE: case BG_ANIM_SCREEN_SIZE:
@@ -99,6 +99,9 @@ int GetAnimBgAttribute(u8 bgId, u8 attributeId)
return 0; return 0;
} }
#define tState data[0]
#define tTerrain data[1]
void HandleIntroSlide(u8 terrain) void HandleIntroSlide(u8 terrain)
{ {
u8 taskId; u8 taskId;
@@ -125,8 +128,8 @@ void HandleIntroSlide(u8 terrain)
taskId = CreateTask(sBattleIntroSlideFuncs[terrain], 0); taskId = CreateTask(sBattleIntroSlideFuncs[terrain], 0);
} }
gTasks[taskId].data[0] = 0; gTasks[taskId].tState = 0;
gTasks[taskId].data[1] = terrain; gTasks[taskId].tTerrain = terrain;
gTasks[taskId].data[2] = 0; gTasks[taskId].data[2] = 0;
gTasks[taskId].data[3] = 0; gTasks[taskId].data[3] = 0;
gTasks[taskId].data[4] = 0; gTasks[taskId].data[4] = 0;
@@ -134,7 +137,7 @@ void HandleIntroSlide(u8 terrain)
gTasks[taskId].data[6] = 0; gTasks[taskId].data[6] = 0;
} }
void sub_811828C(u8 taskId) static void BattleIntroSlideEnd(u8 taskId)
{ {
DestroyTask(taskId); DestroyTask(taskId);
gBattle_BG1_X = 0; gBattle_BG1_X = 0;
@@ -153,24 +156,24 @@ static void BattleIntroSlide1(u8 taskId)
int i; int i;
gBattle_BG1_X += 6; gBattle_BG1_X += 6;
switch (gTasks[taskId].data[0]) switch (gTasks[taskId].tState)
{ {
case 0: case 0:
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{ {
gTasks[taskId].data[2] = 16; gTasks[taskId].data[2] = 16;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
} }
else else
{ {
gTasks[taskId].data[2] = 1; gTasks[taskId].data[2] = 1;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
} }
break; break;
case 1: case 1:
if (--gTasks[taskId].data[2] == 0) if (--gTasks[taskId].data[2] == 0)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
} }
break; break;
@@ -178,7 +181,7 @@ static void BattleIntroSlide1(u8 taskId)
gBattle_WIN0V -= 0xFF; gBattle_WIN0V -= 0xFF;
if ((gBattle_WIN0V & 0xFF00) == 0x3000) if ((gBattle_WIN0V & 0xFF00) == 0x3000)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
gTasks[taskId].data[2] = 240; gTasks[taskId].data[2] = 240;
gTasks[taskId].data[3] = 32; gTasks[taskId].data[3] = 32;
gIntroSlideFlags &= ~1; gIntroSlideFlags &= ~1;
@@ -191,7 +194,7 @@ static void BattleIntroSlide1(u8 taskId)
} }
else else
{ {
if (gTasks[taskId].data[1] == 1) if (gTasks[taskId].tTerrain == BATTLE_TERRAIN_LONG_GRASS)
{ {
if (gBattle_BG1_Y != 0xFFB0) if (gBattle_BG1_Y != 0xFFB0)
gBattle_BG1_Y -= 2; gBattle_BG1_Y -= 2;
@@ -219,7 +222,7 @@ static void BattleIntroSlide1(u8 taskId)
if (!gTasks[taskId].data[2]) if (!gTasks[taskId].data[2])
{ {
gScanlineEffect.state = 3; gScanlineEffect.state = 3;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE); CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
@@ -228,7 +231,7 @@ static void BattleIntroSlide1(u8 taskId)
} }
break; break;
case 4: case 4:
sub_811828C(taskId); BattleIntroSlideEnd(taskId);
break; break;
} }
} }
@@ -237,18 +240,18 @@ static void BattleIntroSlide2(u8 taskId)
{ {
int i; int i;
switch (gTasks[taskId].data[1]) switch (gTasks[taskId].tTerrain)
{ {
case 2: case BATTLE_TERRAIN_SAND:
case 4: case BATTLE_TERRAIN_WATER:
gBattle_BG1_X += 8; gBattle_BG1_X += 8;
break; break;
case 3: case BATTLE_TERRAIN_UNDERWATER:
gBattle_BG1_X += 6; gBattle_BG1_X += 6;
break; break;
} }
if (gTasks[taskId].data[1] == 4) if (gTasks[taskId].tTerrain == BATTLE_TERRAIN_WATER)
{ {
gBattle_BG1_Y = Cos2(gTasks[taskId].data[6]) / 512 - 8; gBattle_BG1_Y = Cos2(gTasks[taskId].data[6]) / 512 - 8;
if (gTasks[taskId].data[6] < 180) if (gTasks[taskId].data[6] < 180)
@@ -260,25 +263,25 @@ static void BattleIntroSlide2(u8 taskId)
gTasks[taskId].data[6] = 0; gTasks[taskId].data[6] = 0;
} }
switch (gTasks[taskId].data[0]) switch (gTasks[taskId].tState)
{ {
case 0: case 0:
gTasks[taskId].data[4] = 16; gTasks[taskId].data[4] = 16;
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{ {
gTasks[taskId].data[2] = 16; gTasks[taskId].data[2] = 16;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
} }
else else
{ {
gTasks[taskId].data[2] = 1; gTasks[taskId].data[2] = 1;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
} }
break; break;
case 1: case 1:
if (--gTasks[taskId].data[2] == 0) if (--gTasks[taskId].data[2] == 0)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
} }
break; break;
@@ -286,7 +289,7 @@ static void BattleIntroSlide2(u8 taskId)
gBattle_WIN0V -= 0xFF; gBattle_WIN0V -= 0xFF;
if ((gBattle_WIN0V & 0xFF00) == 0x3000) if ((gBattle_WIN0V & 0xFF00) == 0x3000)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
gTasks[taskId].data[2] = 240; gTasks[taskId].data[2] = 240;
gTasks[taskId].data[3] = 32; gTasks[taskId].data[3] = 32;
gTasks[taskId].data[5] = 1; gTasks[taskId].data[5] = 1;
@@ -328,7 +331,7 @@ static void BattleIntroSlide2(u8 taskId)
if (!gTasks[taskId].data[2]) if (!gTasks[taskId].data[2])
{ {
gScanlineEffect.state = 3; gScanlineEffect.state = 3;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE); CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
@@ -337,11 +340,11 @@ static void BattleIntroSlide2(u8 taskId)
} }
break; break;
case 4: case 4:
sub_811828C(taskId); BattleIntroSlideEnd(taskId);
break; break;
} }
if (gTasks[taskId].data[0] != 4) if (gTasks[taskId].tState != 4)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0)); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0));
} }
@@ -350,7 +353,7 @@ static void BattleIntroSlide3(u8 taskId)
int i; int i;
gBattle_BG1_X += 8; gBattle_BG1_X += 8;
switch (gTasks[taskId].data[0]) switch (gTasks[taskId].tState)
{ {
case 0: case 0:
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ);
@@ -360,18 +363,18 @@ static void BattleIntroSlide3(u8 taskId)
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))
{ {
gTasks[taskId].data[2] = 16; gTasks[taskId].data[2] = 16;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
} }
else else
{ {
gTasks[taskId].data[2] = 1; gTasks[taskId].data[2] = 1;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
} }
break; break;
case 1: case 1:
if (--gTasks[taskId].data[2] == 0) if (--gTasks[taskId].data[2] == 0)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
} }
break; break;
@@ -379,7 +382,7 @@ static void BattleIntroSlide3(u8 taskId)
gBattle_WIN0V -= 0xFF; gBattle_WIN0V -= 0xFF;
if ((gBattle_WIN0V & 0xFF00) == 0x3000) if ((gBattle_WIN0V & 0xFF00) == 0x3000)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
gTasks[taskId].data[2] = 240; gTasks[taskId].data[2] = 240;
gTasks[taskId].data[3] = 32; gTasks[taskId].data[3] = 32;
gTasks[taskId].data[5] = 1; gTasks[taskId].data[5] = 1;
@@ -416,7 +419,7 @@ static void BattleIntroSlide3(u8 taskId)
if (!gTasks[taskId].data[2]) if (!gTasks[taskId].data[2])
{ {
gScanlineEffect.state = 3; gScanlineEffect.state = 3;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE); CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
@@ -425,11 +428,11 @@ static void BattleIntroSlide3(u8 taskId)
} }
break; break;
case 4: case 4:
sub_811828C(taskId); BattleIntroSlideEnd(taskId);
break; break;
} }
if (gTasks[taskId].data[0] != 4) if (gTasks[taskId].tState != 4)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0)); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0));
} }
@@ -437,7 +440,7 @@ static void BattleIntroSlideLink(u8 taskId)
{ {
int i; int i;
if (gTasks[taskId].data[0] > 1 && !gTasks[taskId].data[4]) if (gTasks[taskId].tState > 1 && !gTasks[taskId].data[4])
{ {
u16 var0 = gBattle_BG1_X & 0x8000; u16 var0 = gBattle_BG1_X & 0x8000;
if (var0 || gBattle_BG1_X < 80) if (var0 || gBattle_BG1_X < 80)
@@ -453,20 +456,20 @@ static void BattleIntroSlideLink(u8 taskId)
} }
} }
switch (gTasks[taskId].data[0]) switch (gTasks[taskId].tState)
{ {
case 0: case 0:
gTasks[taskId].data[2] = 32; gTasks[taskId].data[2] = 32;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
break; break;
case 1: case 1:
if (--gTasks[taskId].data[2] == 0) if (--gTasks[taskId].data[2] == 0)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
gSprites[gBattleStruct->linkBattleVsSpriteId_V].oam.objMode = ST_OAM_OBJ_WINDOW; gSprites[gBattleStruct->linkBattleVsSpriteId_V].oam.objMode = ST_OAM_OBJ_WINDOW;
gSprites[gBattleStruct->linkBattleVsSpriteId_V].callback = sub_8038B74; gSprites[gBattleStruct->linkBattleVsSpriteId_V].callback = SpriteCB_VsLetterInit;
gSprites[gBattleStruct->linkBattleVsSpriteId_S].oam.objMode = ST_OAM_OBJ_WINDOW; gSprites[gBattleStruct->linkBattleVsSpriteId_S].oam.objMode = ST_OAM_OBJ_WINDOW;
gSprites[gBattleStruct->linkBattleVsSpriteId_S].callback = sub_8038B74; gSprites[gBattleStruct->linkBattleVsSpriteId_S].callback = SpriteCB_VsLetterInit;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2);
} }
@@ -475,7 +478,7 @@ static void BattleIntroSlideLink(u8 taskId)
gBattle_WIN0V -= 0xFF; gBattle_WIN0V -= 0xFF;
if ((gBattle_WIN0V & 0xFF00) == 0x3000) if ((gBattle_WIN0V & 0xFF00) == 0x3000)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
gTasks[taskId].data[2] = 240; gTasks[taskId].data[2] = 240;
gTasks[taskId].data[3] = 32; gTasks[taskId].data[3] = 32;
gIntroSlideFlags &= ~1; gIntroSlideFlags &= ~1;
@@ -498,7 +501,7 @@ static void BattleIntroSlideLink(u8 taskId)
if (!gTasks[taskId].data[2]) if (!gTasks[taskId].data[2])
{ {
gScanlineEffect.state = 3; gScanlineEffect.state = 3;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
@@ -506,23 +509,23 @@ static void BattleIntroSlideLink(u8 taskId)
} }
break; break;
case 4: case 4:
sub_811828C(taskId); BattleIntroSlideEnd(taskId);
break; break;
} }
} }
static void BattleIntroSlidePartner(u8 taskId) static void BattleIntroSlidePartner(u8 taskId)
{ {
switch (gTasks[taskId].data[0]) switch (gTasks[taskId].tState)
{ {
case 0: case 0:
gTasks[taskId].data[2] = 1; gTasks[taskId].data[2] = 1;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
break; break;
case 1: case 1:
if (--gTasks[taskId].data[2] == 0) if (--gTasks[taskId].data[2] == 0)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT512x256); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT512x256);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON);
@@ -540,7 +543,7 @@ static void BattleIntroSlidePartner(u8 taskId)
if ((gBattle_WIN0V & 0xFF00) == 0x2000) if ((gBattle_WIN0V & 0xFF00) == 0x2000)
{ {
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
gTasks[taskId].data[2] = 240; gTasks[taskId].data[2] = 240;
gIntroSlideFlags &= ~1; gIntroSlideFlags &= ~1;
} }
@@ -555,7 +558,7 @@ static void BattleIntroSlidePartner(u8 taskId)
gBattle_BG1_X = gTasks[taskId].data[2]; gBattle_BG1_X = gTasks[taskId].data[2];
gBattle_BG2_X = -gTasks[taskId].data[2]; gBattle_BG2_X = -gTasks[taskId].data[2];
if (!gTasks[taskId].data[2]) if (!gTasks[taskId].data[2])
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
break; break;
case 4: case 4:
gBattle_BG0_Y += 2; gBattle_BG0_Y += 2;
@@ -572,11 +575,11 @@ static void BattleIntroSlidePartner(u8 taskId)
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
gScanlineEffect.state = 3; gScanlineEffect.state = 3;
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
} }
break; break;
case 5: case 5:
sub_811828C(taskId); BattleIntroSlideEnd(taskId);
break; break;
} }
} }

View File

@@ -93,7 +93,7 @@ static void sub_80398D0(struct Sprite *sprite);
static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite); static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite);
static void SpriteCb_BlinkVisible(struct Sprite *sprite); static void SpriteCb_BlinkVisible(struct Sprite *sprite);
static void SpriteCallbackDummy_3(struct Sprite *sprite); static void SpriteCallbackDummy_3(struct Sprite *sprite);
static void oac_poke_ally_(struct Sprite *sprite); static void SpriteCB_BattleSpriteSlideLeft(struct Sprite *sprite);
static void TurnValuesCleanUp(bool8 var0); static void TurnValuesCleanUp(bool8 var0);
static void SpriteCB_BounceEffect(struct Sprite *sprite); static void SpriteCB_BounceEffect(struct Sprite *sprite);
static void BattleStartClearSetData(void); static void BattleStartClearSetData(void);
@@ -275,7 +275,7 @@ const struct SpriteTemplate gUnknown_0831AC88 =
static const u8 sText_ShedinjaJpnName[] = _("ヌケニン"); // Nukenin static const u8 sText_ShedinjaJpnName[] = _("ヌケニン"); // Nukenin
const struct OamData gOamData_831ACA8 = const struct OamData gOamData_BattleSpriteOpponentSide =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL, .affineMode = ST_OAM_AFFINE_NORMAL,
@@ -290,7 +290,7 @@ const struct OamData gOamData_831ACA8 =
.affineParam = 0, .affineParam = 0,
}; };
const struct OamData gOamData_831ACB0 = const struct OamData gOamData_BattleSpritePlayerSide =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL, .affineMode = ST_OAM_AFFINE_NORMAL,
@@ -306,10 +306,10 @@ const struct OamData gOamData_831ACB0 =
}; };
// Unknown and unused data. Feel free to remove. // Unknown and unused data. Feel free to remove.
static const u16 gUnknown_0831ACB8[] = {0, 5, 0xfffe, 0}; static const u16 sUnused1[] = {0, 5, 0xfffe, 0};
static const u16 *const gUnknown_0831ACC0 = gUnknown_0831ACB8; static const u16 *const sUnused1Ptr = sUnused1;
static const u16 gUnknown_0831ACC4[] = {0xfff0, 0, 0x0400, 0, 0, 0, 0x3c00, 0, 0x7ffe, 1, 0, 0}; static const u16 sUnused2[] = {0xfff0, 0, 0x0400, 0, 0, 0, 0x3c00, 0, 0x7ffe, 1, 0, 0};
static const u16 *const gUnknown_0831ACDC = gUnknown_0831ACC4; static const u16 *const sUnused2Ptr = sUnused2;
static const s8 gUnknown_0831ACE0[] ={-32, -16, -16, -32, -32, 0, 0, 0}; static const s8 gUnknown_0831ACE0[] ={-32, -16, -16, -32, -32, 0, 0, 0};
@@ -700,39 +700,45 @@ static void CB2_InitBattleInternal(void)
gBattleCommunication[MULTIUSE_STATE] = 0; gBattleCommunication[MULTIUSE_STATE] = 0;
} }
static void sub_8036A5C(void) #define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \
{ for ((i) = 0; (i) < PARTY_SIZE; (i)++) \
u16 r6 = 0; { \
u16 species = 0; u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES2); \
u16 hp = 0; u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \
u32 status = 0; u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \
s32 i; \
if (species == SPECIES_NONE) \
for (i = 0; i < PARTY_SIZE; i++) continue; \
{ \
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); /* Is healthy mon? */ \
hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); if (species != SPECIES_EGG && hp != 0 && status == 0) \
status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); (flags) |= 1 << (i) * 2; \
\
if (species == SPECIES_NONE) if (species == SPECIES_NONE) /* Redundant */ \
continue; continue; \
if (species != SPECIES_EGG && hp != 0 && status == 0) \
r6 |= 1 << i * 2; /* Is Egg or statused? */ \
if (hp != 0 && (species == SPECIES_EGG || status != 0)) \
if (species == SPECIES_NONE) (flags) |= 2 << (i) * 2; \
continue; \
if (hp != 0 && (species == SPECIES_EGG || status != 0)) if (species == SPECIES_NONE) /* Redundant */ \
r6 |= 2 << i * 2; continue; \
\
if (species == SPECIES_NONE) /* Is fainted? */ \
continue; if (species != SPECIES_EGG && hp == 0) \
if (species != SPECIES_EGG && hp == 0) (flags) |= 3 << (i) * 2; \
r6 |= 3 << i * 2;
} }
gBattleStruct->field_182 = r6; // For Vs Screen at link battle start
*(&gBattleStruct->field_183) = r6 >> 8; static void BufferPartyVsScreenHealth_AtStart(void)
gBattleStruct->field_183 |= FlagGet(FLAG_SYS_FRONTIER_PASS) << 7; {
u16 flags = 0;
s32 i;
BUFFER_PARTY_VS_SCREEN_STATUS(gPlayerParty, flags, i);
gBattleStruct->vsScreenHealthFlagsLo = flags;
*(&gBattleStruct->vsScreenHealthFlagsHi) = flags >> 8;
gBattleStruct->vsScreenHealthFlagsHi |= FlagGet(FLAG_SYS_FRONTIER_PASS) << 7;
} }
static void SetPlayerBerryDataInBattleStruct(void) static void SetPlayerBerryDataInBattleStruct(void)
@@ -969,7 +975,7 @@ static void CB2_HandleStartBattle(void)
{ {
*(&gBattleStruct->field_180) = 0; *(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3; *(&gBattleStruct->field_181) = 3;
sub_8036A5C(); BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct(); SetPlayerBerryDataInBattleStruct();
if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM) if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
@@ -1005,7 +1011,7 @@ static void CB2_HandleStartBattle(void)
gTasks[taskId].data[1] = 0x10E; gTasks[taskId].data[1] = 0x10E;
gTasks[taskId].data[2] = 0x5A; gTasks[taskId].data[2] = 0x5A;
gTasks[taskId].data[5] = 0; gTasks[taskId].data[5] = 0;
gTasks[taskId].data[3] = gBattleStruct->field_182 | (gBattleStruct->field_183 << 8); gTasks[taskId].data[3] = gBattleStruct->vsScreenHealthFlagsLo | (gBattleStruct->vsScreenHealthFlagsHi << 8);
gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1]; gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1];
sub_8185F90(gBlockRecvBuffer[playerMultiplayerId][1]); sub_8185F90(gBlockRecvBuffer[playerMultiplayerId][1]);
sub_8185F90(gBlockRecvBuffer[enemyMultiplayerId][1]); sub_8185F90(gBlockRecvBuffer[enemyMultiplayerId][1]);
@@ -1177,7 +1183,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
{ {
*(&gBattleStruct->field_180) = 0; *(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3; *(&gBattleStruct->field_181) = 3;
sub_8036A5C(); BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct(); SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32); SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32);
gBattleCommunication[MULTIUSE_STATE] = 2; gBattleCommunication[MULTIUSE_STATE] = 2;
@@ -1564,7 +1570,7 @@ static void CB2_HandleStartMultiBattle(void)
{ {
*(&gBattleStruct->field_180) = 0; *(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3; *(&gBattleStruct->field_181) = 3;
sub_8036A5C(); BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct(); SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32); SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32);
@@ -2064,12 +2070,12 @@ void VBlankCB_Battle(void)
ScanlineEffect_InitHBlankDmaTransfer(); ScanlineEffect_InitHBlankDmaTransfer();
} }
void nullsub_17(struct Sprite *sprite) void SpriteCB_VsLetterDummy(struct Sprite *sprite)
{ {
} }
static void sub_8038B04(struct Sprite *sprite) static void SpriteCB_VsLetter(struct Sprite *sprite)
{ {
if (sprite->data[0] != 0) if (sprite->data[0] != 0)
sprite->pos1.x = sprite->data[1] + ((sprite->data[2] & 0xFF00) >> 8); sprite->pos1.x = sprite->data[1] + ((sprite->data[2] & 0xFF00) >> 8);
@@ -2087,48 +2093,19 @@ static void sub_8038B04(struct Sprite *sprite)
} }
} }
void sub_8038B74(struct Sprite *sprite) void SpriteCB_VsLetterInit(struct Sprite *sprite)
{ {
StartSpriteAffineAnim(sprite, 1); StartSpriteAffineAnim(sprite, 1);
sprite->callback = sub_8038B04; sprite->callback = SpriteCB_VsLetter;
PlaySE(SE_MUGSHOT); PlaySE(SE_MUGSHOT);
} }
#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \ static void BufferPartyVsScreenHealth_AtEnd(u8 taskId)
for ((i) = 0; (i) < PARTY_SIZE; (i)++) \
{ \
u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES2); \
u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \
u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \
\
if (species == SPECIES_NONE) \
continue; \
\
/* Is healthy mon? */ \
if (species != SPECIES_EGG && hp != 0 && status == 0) \
(flags) |= 1 << (i) * 2; \
\
if (species == SPECIES_NONE) /* Redundant */ \
continue; \
\
/* Is Egg or statused? */ \
if (hp != 0 && (species == SPECIES_EGG || status != 0)) \
(flags) |= 2 << (i) * 2; \
\
if (species == SPECIES_NONE) /* Redundant */ \
continue; \
\
/* Is fainted? */ \
if (species != SPECIES_EGG && hp == 0) \
(flags) |= 3 << (i) * 2; \
}
static void LoadPartyDataForLinkVsScreen(u8 taskId)
{ {
struct Pokemon *party1 = NULL; struct Pokemon *party1 = NULL;
struct Pokemon *party2 = NULL; struct Pokemon *party2 = NULL;
u8 multiplayerId = gBattleScripting.multiplayerId; u8 multiplayerId = gBattleScripting.multiplayerId;
u32 statusFlags; u32 flags;
s32 i; s32 i;
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
@@ -2153,13 +2130,13 @@ static void LoadPartyDataForLinkVsScreen(u8 taskId)
party2 = gEnemyParty; party2 = gEnemyParty;
} }
statusFlags = 0; flags = 0;
BUFFER_PARTY_VS_SCREEN_STATUS(party1, statusFlags, i); BUFFER_PARTY_VS_SCREEN_STATUS(party1, flags, i);
gTasks[taskId].data[3] = statusFlags; gTasks[taskId].data[3] = flags;
statusFlags = 0; flags = 0;
BUFFER_PARTY_VS_SCREEN_STATUS(party2, statusFlags, i); BUFFER_PARTY_VS_SCREEN_STATUS(party2, flags, i);
gTasks[taskId].data[4] = statusFlags; gTasks[taskId].data[4] = flags;
} }
void CB2_InitEndLinkBattle(void) void CB2_InitEndLinkBattle(void)
@@ -2232,7 +2209,7 @@ void CB2_InitEndLinkBattle(void)
gTasks[taskId].data[1] = 0x10E; gTasks[taskId].data[1] = 0x10E;
gTasks[taskId].data[2] = 0x5A; gTasks[taskId].data[2] = 0x5A;
gTasks[taskId].data[5] = 1; gTasks[taskId].data[5] = 1;
LoadPartyDataForLinkVsScreen(taskId); BufferPartyVsScreenHealth_AtEnd(taskId);
SetMainCallback2(CB2_EndLinkBattle); SetMainCallback2(CB2_EndLinkBattle);
gBattleCommunication[MULTIUSE_STATE] = 0; gBattleCommunication[MULTIUSE_STATE] = 0;
@@ -2366,7 +2343,7 @@ static void EndLinkBattleInSteps(void)
} }
} }
u32 sub_80391E0(u8 arrayId, u8 caseId) u32 GetBattleBgTemplateData(u8 arrayId, u8 caseId)
{ {
u32 ret = 0; u32 ret = 0;
@@ -2387,7 +2364,7 @@ u32 sub_80391E0(u8 arrayId, u8 caseId)
case 4: case 4:
ret = gBattleBgTemplates[arrayId].paletteMode; ret = gBattleBgTemplates[arrayId].paletteMode;
break; break;
case 5: case 5: // Only this case is used
ret = gBattleBgTemplates[arrayId].priority; ret = gBattleBgTemplates[arrayId].priority;
break; break;
case 6: case 6:
@@ -2618,7 +2595,7 @@ static void TryCorrectShedinjaLanguage(struct Pokemon *mon)
} }
} }
u32 sub_80397C4(u32 setId, u32 tableId) u32 GetBattleWindowTemplatePixelWidth(u32 setId, u32 tableId)
{ {
return gBattleWindowTemplates[setId][tableId].width * 8; return gBattleWindowTemplates[setId][tableId].width * 8;
} }
@@ -2670,7 +2647,8 @@ void SpriteCallbackDummy_2(struct Sprite *sprite)
} }
static void sub_80398BC(struct Sprite *sprite) // unused? // Unused
static void sub_80398BC(struct Sprite *sprite)
{ {
sprite->data[3] = 6; sprite->data[3] = 6;
sprite->data[4] = 1; sprite->data[4] = 1;
@@ -2803,12 +2781,13 @@ void SpriteCb_OpponentMonFromBall(struct Sprite *sprite)
} }
} }
void sub_8039BB4(struct Sprite *sprite) // This callback is frequently overwritten by SpriteCB_TrainerSlideIn
void SpriteCB_BattleSpriteStartSlideLeft(struct Sprite *sprite)
{ {
sprite->callback = oac_poke_ally_; sprite->callback = SpriteCB_BattleSpriteSlideLeft;
} }
static void oac_poke_ally_(struct Sprite *sprite) static void SpriteCB_BattleSpriteSlideLeft(struct Sprite *sprite)
{ {
if (!(gIntroSlideFlags & 1)) if (!(gIntroSlideFlags & 1))
{ {
@@ -2821,7 +2800,8 @@ static void oac_poke_ally_(struct Sprite *sprite)
} }
} }
void sub_80105DC(struct Sprite *sprite) // Unused
static void sub_80105DC(struct Sprite *sprite)
{ {
sprite->callback = SpriteCallbackDummy_3; sprite->callback = SpriteCallbackDummy_3;
} }

View File

@@ -3001,7 +3001,7 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId)
if (printerTemplate.x == 0xFF) if (printerTemplate.x == 0xFF)
{ {
u32 width = sub_80397C4(gBattleScripting.windowsType, windowId); u32 width = GetBattleWindowTemplatePixelWidth(gBattleScripting.windowsType, windowId);
s32 alignX = GetStringCenterAlignXOffsetWithLetterSpacing(printerTemplate.fontId, printerTemplate.currentChar, width, printerTemplate.letterSpacing); s32 alignX = GetStringCenterAlignXOffsetWithLetterSpacing(printerTemplate.fontId, printerTemplate.currentChar, width, printerTemplate.letterSpacing);
printerTemplate.x = printerTemplate.currentX = alignX; printerTemplate.x = printerTemplate.currentX = alignX;
} }

View File

@@ -3135,7 +3135,7 @@ static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 ind
if (IsSpeciesNotUnown(species)) if (IsSpeciesNotUnown(species))
gSprites[spriteId].affineAnims = gUnknown_082FF6C0; gSprites[spriteId].affineAnims = gUnknown_082FF6C0;
else else
gSprites[spriteId].affineAnims = gUnknown_082FF694; gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteOpponentSide;
StartSpriteAffineAnim(gSprites + spriteId, 0); StartSpriteAffineAnim(gSprites + spriteId, 0);
return spriteId; return spriteId;

View File

@@ -8,12 +8,11 @@
#include "constants/trainers.h" #include "constants/trainers.h"
#include "constants/battle_ai.h" #include "constants/battle_ai.h"
const u16 gUnknown_082FF1D8[] = INCBIN_U16("graphics/link/minigame_digits.gbapal"); const u16 gMinigameDigits_Pal[] = INCBIN_U16("graphics/link/minigame_digits.gbapal");
const u32 gUnknown_082FF1F8[] = INCBIN_U32("graphics/link/minigame_digits.4bpp.lz"); const u32 gMinigameDigits_Gfx[] = INCBIN_U32("graphics/link/minigame_digits.4bpp.lz");
// unused static const u32 sMinigameDigitsThin_Gfx[] = INCBIN_U32("graphics/link/minigame_digits2.4bpp.lz"); // Unused
const u32 gUnknown_082FF2B8[] = INCBIN_U32("graphics/link/minigame_digits2.4bpp.lz");
const struct SpriteFrameImage gUnknown_082FF3A8[] = const struct SpriteFrameImage gBattlerPicTable_PlayerLeft[] =
{ {
gHeap + 0x8000, 0x800, gHeap + 0x8000, 0x800,
gHeap + 0x8800, 0x800, gHeap + 0x8800, 0x800,
@@ -21,7 +20,7 @@ const struct SpriteFrameImage gUnknown_082FF3A8[] =
gHeap + 0x9800, 0x800, gHeap + 0x9800, 0x800,
}; };
const struct SpriteFrameImage gUnknown_082FF3C8[] = const struct SpriteFrameImage gBattlerPicTable_OpponentLeft[] =
{ {
gHeap + 0xA000, 0x800, gHeap + 0xA000, 0x800,
gHeap + 0xA800, 0x800, gHeap + 0xA800, 0x800,
@@ -29,7 +28,7 @@ const struct SpriteFrameImage gUnknown_082FF3C8[] =
gHeap + 0xB800, 0x800, gHeap + 0xB800, 0x800,
}; };
const struct SpriteFrameImage gUnknown_082FF3E8[] = const struct SpriteFrameImage gBattlerPicTable_PlayerRight[] =
{ {
gHeap + 0xC000, 0x800, gHeap + 0xC000, 0x800,
gHeap + 0xC800, 0x800, gHeap + 0xC800, 0x800,
@@ -37,7 +36,7 @@ const struct SpriteFrameImage gUnknown_082FF3E8[] =
gHeap + 0xD800, 0x800, gHeap + 0xD800, 0x800,
}; };
const struct SpriteFrameImage gUnknown_082FF408[] = const struct SpriteFrameImage gBattlerPicTable_OpponentRight[] =
{ {
gHeap + 0xE000, 0x800, gHeap + 0xE000, 0x800,
gHeap + 0xE800, 0x800, gHeap + 0xE800, 0x800,
@@ -189,7 +188,7 @@ static const union AffineAnimCmd gUnknown_082FF600[] =
AFFINEANIMCMD_END, AFFINEANIMCMD_END,
}; };
const union AffineAnimCmd *const gUnknown_082FF618[] = const union AffineAnimCmd *const gAffineAnims_BattleSpritePlayerSide[] =
{ {
gUnknown_082FF548, gUnknown_082FF548,
gUnknown_082FF568, gUnknown_082FF568,
@@ -229,7 +228,7 @@ static const union AffineAnimCmd gUnknown_082FF684[] =
AFFINEANIMCMD_END, AFFINEANIMCMD_END,
}; };
const union AffineAnimCmd *const gUnknown_082FF694[] = const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[] =
{ {
gUnknown_082FF548, gUnknown_082FF548,
gUnknown_082FF568, gUnknown_082FF568,
@@ -313,8 +312,7 @@ const union AnimCmd *const gUnknown_082FF70C[] =
#include "data/pokemon_graphics/front_pic_anims.h" #include "data/pokemon_graphics/front_pic_anims.h"
#include "data/pokemon_graphics/front_pic_table.h" #include "data/pokemon_graphics/front_pic_table.h"
// unused static const u32 sUnused[] =
const u32 gUnknown830AF4C[] =
{ {
0x00000888, 0x00000888, 0x00000888, 0x00000888, 0x00000888, 0x00000888, 0x00000888, 0x00000888,
0x00000088, 0x00000888, 0x00000888, 0x00000886, 0x00000088, 0x00000888, 0x00000888, 0x00000886,

View File

@@ -1522,8 +1522,8 @@ static void sub_8140174(void)
gBattle_BG1_X = 0; gBattle_BG1_X = 0;
gBattle_BG1_Y = 0; gBattle_BG1_Y = 0;
gBattle_BG2_X = 0; gBattle_BG2_X = 0;
SetBgAttribute(1, BG_ATTR_PRIORITY, sub_80391E0(1, 5)); SetBgAttribute(1, BG_ATTR_PRIORITY, GetBattleBgTemplateData(1, 5));
SetBgAttribute(2, BG_ATTR_PRIORITY, sub_80391E0(2, 5)); SetBgAttribute(2, BG_ATTR_PRIORITY, GetBattleBgTemplateData(2, 5));
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
Free(sEvoMovingBgPtr); Free(sEvoMovingBgPtr);
} }

View File

@@ -34,13 +34,13 @@ static void sub_8075970(struct Sprite *sprite);
static void HandleBallAnimEnd(struct Sprite *sprite); static void HandleBallAnimEnd(struct Sprite *sprite);
static void sub_8075FB4(struct Sprite *sprite); static void sub_8075FB4(struct Sprite *sprite);
static void sub_80760F8(struct Sprite *sprite); static void sub_80760F8(struct Sprite *sprite);
static void sub_8076524(struct Sprite *sprite); static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite);
static void sub_80765E0(struct Sprite *sprite); static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite);
static void sub_80767D4(struct Sprite *sprite); static void SpriteCB_TradePokeball(struct Sprite *sprite);
static void sub_807687C(struct Sprite *sprite); static void SpriteCB_TradePokeballSendOff(struct Sprite *sprite);
static void sub_80768F0(struct Sprite *sprite); static void SpriteCB_TradePokeballEnd(struct Sprite *sprite);
static void sub_80769A8(struct Sprite *sprite); static void SpriteCB_HealthboxSlideInDelayed(struct Sprite *sprite);
static void sub_80769CC(struct Sprite *sprite); static void SpriteCB_HealthboxSlideIn(struct Sprite *sprite);
static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite); static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite);
static u16 GetBattlerPokeballItemId(u8 battlerId); static u16 GetBattlerPokeballItemId(u8 battlerId);
@@ -61,34 +61,34 @@ static u16 GetBattlerPokeballItemId(u8 battlerId);
const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] = const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] =
{ {
{gInterfaceGfx_PokeBall, 384, GFX_TAG_POKEBALL}, [BALL_POKE] = {gInterfaceGfx_PokeBall, 384, GFX_TAG_POKEBALL},
{gInterfaceGfx_GreatBall, 384, GFX_TAG_GREATBALL}, [BALL_GREAT] = {gInterfaceGfx_GreatBall, 384, GFX_TAG_GREATBALL},
{gInterfaceGfx_SafariBall, 384, GFX_TAG_SAFARIBALL}, [BALL_SAFARI] = {gInterfaceGfx_SafariBall, 384, GFX_TAG_SAFARIBALL},
{gInterfaceGfx_UltraBall, 384, GFX_TAG_ULTRABALL}, [BALL_ULTRA] = {gInterfaceGfx_UltraBall, 384, GFX_TAG_ULTRABALL},
{gInterfaceGfx_MasterBall, 384, GFX_TAG_MASTERBALL}, [BALL_MASTER] = {gInterfaceGfx_MasterBall, 384, GFX_TAG_MASTERBALL},
{gInterfaceGfx_NetBall, 384, GFX_TAG_NETBALL}, [BALL_NET] = {gInterfaceGfx_NetBall, 384, GFX_TAG_NETBALL},
{gInterfaceGfx_DiveBall, 384, GFX_TAG_DIVEBALL}, [BALL_DIVE] = {gInterfaceGfx_DiveBall, 384, GFX_TAG_DIVEBALL},
{gInterfaceGfx_NestBall, 384, GFX_TAG_NESTBALL}, [BALL_NEST] = {gInterfaceGfx_NestBall, 384, GFX_TAG_NESTBALL},
{gInterfaceGfx_RepeatBall, 384, GFX_TAG_REPEATBALL}, [BALL_REPEAT] = {gInterfaceGfx_RepeatBall, 384, GFX_TAG_REPEATBALL},
{gInterfaceGfx_TimerBall, 384, GFX_TAG_TIMERBALL}, [BALL_TIMER] = {gInterfaceGfx_TimerBall, 384, GFX_TAG_TIMERBALL},
{gInterfaceGfx_LuxuryBall, 384, GFX_TAG_LUXURYBALL}, [BALL_LUXURY] = {gInterfaceGfx_LuxuryBall, 384, GFX_TAG_LUXURYBALL},
{gInterfaceGfx_PremierBall, 384, GFX_TAG_PREMIERBALL}, [BALL_PREMIER] = {gInterfaceGfx_PremierBall, 384, GFX_TAG_PREMIERBALL},
}; };
const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] = const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] =
{ {
{gInterfacePal_PokeBall, GFX_TAG_POKEBALL}, [BALL_POKE] = {gInterfacePal_PokeBall, GFX_TAG_POKEBALL},
{gInterfacePal_GreatBall, GFX_TAG_GREATBALL}, [BALL_GREAT] = {gInterfacePal_GreatBall, GFX_TAG_GREATBALL},
{gInterfacePal_SafariBall, GFX_TAG_SAFARIBALL}, [BALL_SAFARI] = {gInterfacePal_SafariBall, GFX_TAG_SAFARIBALL},
{gInterfacePal_UltraBall, GFX_TAG_ULTRABALL}, [BALL_ULTRA] = {gInterfacePal_UltraBall, GFX_TAG_ULTRABALL},
{gInterfacePal_MasterBall, GFX_TAG_MASTERBALL}, [BALL_MASTER] = {gInterfacePal_MasterBall, GFX_TAG_MASTERBALL},
{gInterfacePal_NetBall, GFX_TAG_NETBALL}, [BALL_NET] = {gInterfacePal_NetBall, GFX_TAG_NETBALL},
{gInterfacePal_DiveBall, GFX_TAG_DIVEBALL}, [BALL_DIVE] = {gInterfacePal_DiveBall, GFX_TAG_DIVEBALL},
{gInterfacePal_NestBall, GFX_TAG_NESTBALL}, [BALL_NEST] = {gInterfacePal_NestBall, GFX_TAG_NESTBALL},
{gInterfacePal_RepeatBall, GFX_TAG_REPEATBALL}, [BALL_REPEAT] = {gInterfacePal_RepeatBall, GFX_TAG_REPEATBALL},
{gInterfacePal_TimerBall, GFX_TAG_TIMERBALL}, [BALL_TIMER] = {gInterfacePal_TimerBall, GFX_TAG_TIMERBALL},
{gInterfacePal_LuxuryBall, GFX_TAG_LUXURYBALL}, [BALL_LUXURY] = {gInterfacePal_LuxuryBall, GFX_TAG_LUXURYBALL},
{gInterfacePal_PremierBall, GFX_TAG_PREMIERBALL}, [BALL_PREMIER] = {gInterfacePal_PremierBall, GFX_TAG_PREMIERBALL},
}; };
static const struct OamData sBallOamData = static const struct OamData sBallOamData =
@@ -996,6 +996,7 @@ static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32
return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE); return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE);
} }
// Pokeball in Birch intro, and when receiving via trade
void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species) void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species)
{ {
u8 spriteId; u8 spriteId;
@@ -1017,12 +1018,12 @@ void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y,
gSprites[spriteId].data[3] = h; gSprites[spriteId].data[3] = h;
gSprites[spriteId].data[4] = h >> 0x10; gSprites[spriteId].data[4] = h >> 0x10;
gSprites[spriteId].oam.priority = oamPriority; gSprites[spriteId].oam.priority = oamPriority;
gSprites[spriteId].callback = sub_8076524; gSprites[spriteId].callback = SpriteCB_PokeballReleaseMon;
gSprites[monSpriteId].invisible = TRUE; gSprites[monSpriteId].invisible = TRUE;
} }
static void sub_8076524(struct Sprite *sprite) static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite)
{ {
if (sprite->data[1] == 0) if (sprite->data[1] == 0)
{ {
@@ -1039,7 +1040,7 @@ static void sub_8076524(struct Sprite *sprite)
StartSpriteAnim(sprite, 1); StartSpriteAnim(sprite, 1);
AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5); AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5);
sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4); sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4);
sprite->callback = sub_80765E0; sprite->callback = SpriteCB_ReleasedMonFlyOut;
gSprites[r7].invisible = FALSE; gSprites[r7].invisible = FALSE;
StartSpriteAffineAnim(&gSprites[r7], 1); StartSpriteAffineAnim(&gSprites[r7], 1);
AnimateSprite(&gSprites[r7]); AnimateSprite(&gSprites[r7]);
@@ -1052,7 +1053,7 @@ static void sub_8076524(struct Sprite *sprite)
} }
} }
static void sub_80765E0(struct Sprite *sprite) static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite)
{ {
bool8 r12 = FALSE; bool8 r12 = FALSE;
bool8 r6 = FALSE; bool8 r6 = FALSE;
@@ -1111,16 +1112,16 @@ u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPrior
gSprites[spriteId].data[3] = h; gSprites[spriteId].data[3] = h;
gSprites[spriteId].data[4] = h >> 16; gSprites[spriteId].data[4] = h >> 16;
gSprites[spriteId].oam.priority = oamPriority; gSprites[spriteId].oam.priority = oamPriority;
gSprites[spriteId].callback = sub_80767D4; gSprites[spriteId].callback = SpriteCB_TradePokeball;
return spriteId; return spriteId;
} }
static void sub_80767D4(struct Sprite *sprite) static void SpriteCB_TradePokeball(struct Sprite *sprite)
{ {
if (sprite->data[1] == 0) if (sprite->data[1] == 0)
{ {
u8 r6; u8 r6;
u8 r7 = sprite->data[0]; u8 monSpriteId = sprite->data[0];
u8 r8 = sprite->data[2]; u8 r8 = sprite->data[2];
u32 r5 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); u32 r5 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16);
@@ -1132,15 +1133,15 @@ static void sub_80767D4(struct Sprite *sprite)
StartSpriteAnim(sprite, 1); StartSpriteAnim(sprite, 1);
AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6); AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6);
sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5); sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5);
sprite->callback = sub_807687C; sprite->callback = SpriteCB_TradePokeballSendOff;
#ifdef BUGFIX #ifdef BUGFIX
// FIX: If this is used on a sprite that has previously had an affine animation, it will not // FIX: If this is used on a sprite that has previously had an affine animation, it will not
// play the shrink anim properly due to being paused. Works together with the fix to `sub_817F77C`. // play the shrink anim properly due to being paused. Works together with the fix to `sub_817F77C`.
gSprites[r7].affineAnimPaused = FALSE; gSprites[monSpriteId].affineAnimPaused = FALSE;
#endif // BUGFIX #endif // BUGFIX
StartSpriteAffineAnim(&gSprites[r7], 2); StartSpriteAffineAnim(&gSprites[monSpriteId], 2);
AnimateSprite(&gSprites[r7]); AnimateSprite(&gSprites[monSpriteId]);
gSprites[r7].data[1] = 0; gSprites[monSpriteId].data[1] = 0;
} }
else else
{ {
@@ -1148,29 +1149,29 @@ static void sub_80767D4(struct Sprite *sprite)
} }
} }
static void sub_807687C(struct Sprite *sprite) static void SpriteCB_TradePokeballSendOff(struct Sprite *sprite)
{ {
u8 r1; u8 monSpriteId;
sprite->data[5]++; sprite->data[5]++;
if (sprite->data[5] == 11) if (sprite->data[5] == 11)
PlaySE(SE_BALL_TRADE); PlaySE(SE_BALL_TRADE);
r1 = sprite->data[0]; monSpriteId = sprite->data[0];
if (gSprites[r1].affineAnimEnded) if (gSprites[monSpriteId].affineAnimEnded)
{ {
StartSpriteAnim(sprite, 2); StartSpriteAnim(sprite, 2);
gSprites[r1].invisible = TRUE; gSprites[monSpriteId].invisible = TRUE;
sprite->data[5] = 0; sprite->data[5] = 0;
sprite->callback = sub_80768F0; sprite->callback = SpriteCB_TradePokeballEnd;
} }
else else
{ {
gSprites[r1].data[1] += 96; gSprites[monSpriteId].data[1] += 96;
gSprites[r1].pos2.y = -gSprites[r1].data[1] >> 8; gSprites[monSpriteId].pos2.y = -gSprites[monSpriteId].data[1] >> 8;
} }
} }
static void sub_80768F0(struct Sprite *sprite) static void SpriteCB_TradePokeballEnd(struct Sprite *sprite)
{ {
if (sprite->animEnded) if (sprite->animEnded)
sprite->callback = SpriteCallbackDummy; sprite->callback = SpriteCallbackDummy;
@@ -1181,45 +1182,54 @@ static void Unref_DestroySpriteAndFreeResources(struct Sprite *sprite)
DestroySpriteAndFreeResources(sprite); DestroySpriteAndFreeResources(sprite);
} }
#define sSpeedX data[0]
#define sSpeedY data[1]
#define sDelayTimer data[1]
void StartHealthboxSlideIn(u8 battlerId) void StartHealthboxSlideIn(u8 battlerId)
{ {
struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]]; struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]];
healthboxSprite->data[0] = 5; healthboxSprite->sSpeedX = 5;
healthboxSprite->data[1] = 0; healthboxSprite->sSpeedY = 0;
healthboxSprite->pos2.x = 0x73; healthboxSprite->pos2.x = 0x73;
healthboxSprite->pos2.y = 0; healthboxSprite->pos2.y = 0;
healthboxSprite->callback = sub_80769CC; healthboxSprite->callback = SpriteCB_HealthboxSlideIn;
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{ {
healthboxSprite->data[0] = -healthboxSprite->data[0]; healthboxSprite->sSpeedX = -healthboxSprite->sSpeedX;
healthboxSprite->data[1] = -healthboxSprite->data[1]; healthboxSprite->sSpeedY = -healthboxSprite->sSpeedY;
healthboxSprite->pos2.x = -healthboxSprite->pos2.x; healthboxSprite->pos2.x = -healthboxSprite->pos2.x;
healthboxSprite->pos2.y = -healthboxSprite->pos2.y; healthboxSprite->pos2.y = -healthboxSprite->pos2.y;
} }
gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]); gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]);
if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT) if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)
healthboxSprite->callback = sub_80769A8; healthboxSprite->callback = SpriteCB_HealthboxSlideInDelayed;
} }
static void sub_80769A8(struct Sprite *sprite) static void SpriteCB_HealthboxSlideInDelayed(struct Sprite *sprite)
{ {
sprite->data[1]++; sprite->sDelayTimer++;
if (sprite->data[1] == 20) if (sprite->sDelayTimer == 20)
{ {
sprite->data[1] = 0; sprite->sDelayTimer = 0;
sprite->callback = sub_80769CC; sprite->callback = SpriteCB_HealthboxSlideIn;
} }
} }
static void sub_80769CC(struct Sprite *sprite) static void SpriteCB_HealthboxSlideIn(struct Sprite *sprite)
{ {
sprite->pos2.x -= sprite->data[0]; sprite->pos2.x -= sprite->sSpeedX;
sprite->pos2.y -= sprite->data[1]; sprite->pos2.y -= sprite->sSpeedY;
if (sprite->pos2.x == 0 && sprite->pos2.y == 0) if (sprite->pos2.x == 0 && sprite->pos2.y == 0)
sprite->callback = SpriteCallbackDummy; sprite->callback = SpriteCallbackDummy;
} }
#undef sSpeedX
#undef sSpeedY
#undef sDelayTimer
void DoHitAnimHealthboxEffect(u8 battlerId) void DoHitAnimHealthboxEffect(u8 battlerId)
{ {
u8 spriteId; u8 spriteId;

View File

@@ -1350,32 +1350,32 @@ const struct SpindaSpot gSpindaSpotGraphics[] =
const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
{ {
// Atk Def Spd Sp.Atk Sp.Def // Atk Def Spd Sp.Atk Sp.Def
{ 0, 0, 0, 0, 0}, // Hardy [NATURE_HARDY] = { 0, 0, 0, 0, 0},
{ +1, -1, 0, 0, 0}, // Lonely [NATURE_LONELY] = { +1, -1, 0, 0, 0},
{ +1, 0, -1, 0, 0}, // Brave [NATURE_BRAVE] = { +1, 0, -1, 0, 0},
{ +1, 0, 0, -1, 0}, // Adamant [NATURE_ADAMANT] = { +1, 0, 0, -1, 0},
{ +1, 0, 0, 0, -1}, // Naughty [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1},
{ -1, +1, 0, 0, 0}, // Bold [NATURE_BOLD] = { -1, +1, 0, 0, 0},
{ 0, 0, 0, 0, 0}, // Docile [NATURE_DOCILE] = { 0, 0, 0, 0, 0},
{ 0, +1, -1, 0, 0}, // Relaxed [NATURE_RELAXED] = { 0, +1, -1, 0, 0},
{ 0, +1, 0, -1, 0}, // Impish [NATURE_IMPISH] = { 0, +1, 0, -1, 0},
{ 0, +1, 0, 0, -1}, // Lax [NATURE_LAX] = { 0, +1, 0, 0, -1},
{ -1, 0, +1, 0, 0}, // Timid [NATURE_TIMID] = { -1, 0, +1, 0, 0},
{ 0, -1, +1, 0, 0}, // Hasty [NATURE_HASTY] = { 0, -1, +1, 0, 0},
{ 0, 0, 0, 0, 0}, // Serious [NATURE_SERIOUS] = { 0, 0, 0, 0, 0},
{ 0, 0, +1, -1, 0}, // Jolly [NATURE_JOLLY] = { 0, 0, +1, -1, 0},
{ 0, 0, +1, 0, -1}, // Naive [NATURE_NAIVE] = { 0, 0, +1, 0, -1},
{ -1, 0, 0, +1, 0}, // Modest [NATURE_MODEST] = { -1, 0, 0, +1, 0},
{ 0, -1, 0, +1, 0}, // Mild [NATURE_MILD] = { 0, -1, 0, +1, 0},
{ 0, 0, -1, +1, 0}, // Quiet [NATURE_QUIET] = { 0, 0, -1, +1, 0},
{ 0, 0, 0, 0, 0}, // Bashful [NATURE_BASHFUL] = { 0, 0, 0, 0, 0},
{ 0, 0, 0, +1, -1}, // Rash [NATURE_RASH] = { 0, 0, 0, +1, -1},
{ -1, 0, 0, 0, +1}, // Calm [NATURE_CALM] = { -1, 0, 0, 0, +1},
{ 0, -1, 0, 0, +1}, // Gentle [NATURE_GENTLE] = { 0, -1, 0, 0, +1},
{ 0, 0, -1, 0, +1}, // Sassy [NATURE_SASSY] = { 0, 0, -1, 0, +1},
{ 0, 0, 0, -1, +1}, // Careful [NATURE_CAREFUL] = { 0, 0, 0, -1, +1},
{ 0, 0, 0, 0, 0}, // Quirky [NATURE_QUIRKY] = { 0, 0, 0, 0, 0},
}; };
#include "data/pokemon/tmhm_learnsets.h" #include "data/pokemon/tmhm_learnsets.h"
@@ -1937,119 +1937,119 @@ static const u8 sHoldEffectToType[][2] =
{HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL}, {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL},
}; };
const struct SpriteTemplate gUnknown_08329D98[MAX_BATTLERS_COUNT] = const struct SpriteTemplate gBattlerSpriteTemplates[MAX_BATTLERS_COUNT] =
{ {
{ // B_POSITION_PLAYER_LEFT [B_POSITION_PLAYER_LEFT] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gUnknown_082FF3A8, .images = gBattlerPicTable_PlayerLeft,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
{ // B_POSITION_OPPONENT_LEFT [B_POSITION_OPPONENT_LEFT] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACA8, .oam = &gOamData_BattleSpriteOpponentSide,
.anims = NULL, .anims = NULL,
.images = gUnknown_082FF3C8, .images = gBattlerPicTable_OpponentLeft,
.affineAnims = gUnknown_082FF694, .affineAnims = gAffineAnims_BattleSpriteOpponentSide,
.callback = SpriteCb_WildMon, .callback = SpriteCb_WildMon,
}, },
{ // B_POSITION_PLAYER_RIGHT [B_POSITION_PLAYER_RIGHT] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gUnknown_082FF3E8, .images = gBattlerPicTable_PlayerRight,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
{ // B_POSITION_OPPONENT_RIGHT [B_POSITION_OPPONENT_RIGHT] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACA8, .oam = &gOamData_BattleSpriteOpponentSide,
.anims = NULL, .anims = NULL,
.images = gUnknown_082FF408, .images = gBattlerPicTable_OpponentRight,
.affineAnims = gUnknown_082FF694, .affineAnims = gAffineAnims_BattleSpriteOpponentSide,
.callback = SpriteCb_WildMon .callback = SpriteCb_WildMon
}, },
}; };
static const struct SpriteTemplate gSpriteTemplateTable_TrainerBackSprites[] = static const struct SpriteTemplate sTrainerBackSpriteTemplates[] =
{ {
{ [TRAINER_BACK_PIC_BRENDAN] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gTrainerBackPicTable_Brendan, .images = gTrainerBackPicTable_Brendan,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
{ [TRAINER_BACK_PIC_MAY] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gTrainerBackPicTable_May, .images = gTrainerBackPicTable_May,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
{ [TRAINER_BACK_PIC_RED] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gTrainerBackPicTable_Red, .images = gTrainerBackPicTable_Red,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
{ [TRAINER_BACK_PIC_LEAF] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gTrainerBackPicTable_Leaf, .images = gTrainerBackPicTable_Leaf,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
{ [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gTrainerBackPicTable_RubySapphireBrendan, .images = gTrainerBackPicTable_RubySapphireBrendan,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
{ [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gTrainerBackPicTable_RubySapphireMay, .images = gTrainerBackPicTable_RubySapphireMay,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
{ [TRAINER_BACK_PIC_WALLY] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gTrainerBackPicTable_Wally, .images = gTrainerBackPicTable_Wally,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
{ [TRAINER_BACK_PIC_STEVEN] = {
.tileTag = 0xFFFF, .tileTag = 0xFFFF,
.paletteTag = 0, .paletteTag = 0,
.oam = &gOamData_831ACB0, .oam = &gOamData_BattleSpritePlayerSide,
.anims = NULL, .anims = NULL,
.images = gTrainerBackPicTable_Steven, .images = gTrainerBackPicTable_Steven,
.affineAnims = gUnknown_082FF618, .affineAnims = gAffineAnims_BattleSpritePlayerSide,
.callback = sub_8039BB4, .callback = SpriteCB_BattleSpriteStartSlideLeft,
}, },
}; };
@@ -2623,14 +2623,15 @@ void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u
SetMonData(mon, MON_DATA_OBEDIENCE, &obedient); SetMonData(mon, MON_DATA_OBEDIENCE, &obedient);
} }
bool8 sub_80688F8(u8 caseId, u8 battlerId) // If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form
bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
{ {
switch (caseId) switch (caseId)
{ {
case 0: case 0:
default: default:
return FALSE; return FALSE;
case 1: case 1: // Player's side in battle
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
return FALSE; return FALSE;
if (!gMain.inBattle) if (!gMain.inBattle)
@@ -2640,7 +2641,7 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId)
break; break;
case 2: case 2:
break; break;
case 3: case 3: // Summary Screen
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
return FALSE; return FALSE;
if (!gMain.inBattle) if (!gMain.inBattle)
@@ -2650,7 +2651,7 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId)
return FALSE; return FALSE;
case 4: case 4:
break; break;
case 5: case 5: // In move animation, e.g. in Role Play or Snatch
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{ {
if (!gMain.inBattle) if (!gMain.inBattle)
@@ -3454,7 +3455,7 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition)
else if (gUnknown_020249B4[1]) else if (gUnknown_020249B4[1])
gMultiuseSpriteTemplate = gUnknown_020249B4[1]->templates[battlerPosition]; gMultiuseSpriteTemplate = gUnknown_020249B4[1]->templates[battlerPosition];
else else
gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition]; gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
gMultiuseSpriteTemplate.paletteTag = speciesTag; gMultiuseSpriteTemplate.paletteTag = speciesTag;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT) if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
@@ -3470,7 +3471,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
gMultiuseSpriteTemplate.paletteTag = trainerSpriteId; gMultiuseSpriteTemplate.paletteTag = trainerSpriteId;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT) if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
{ {
gMultiuseSpriteTemplate = gSpriteTemplateTable_TrainerBackSprites[trainerSpriteId]; gMultiuseSpriteTemplate = sTrainerBackSpriteTemplates[trainerSpriteId];
gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId]; gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId];
} }
else else
@@ -3478,7 +3479,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
if (gMonSpritesGfxPtr != NULL) if (gMonSpritesGfxPtr != NULL)
gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition]; gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else else
gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition]; gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[trainerSpriteId]; gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[trainerSpriteId];
} }
} }
@@ -3488,7 +3489,7 @@ void SetMultiuseSpriteTemplateToTrainerFront(u16 arg0, u8 battlerPosition)
if (gMonSpritesGfxPtr != NULL) if (gMonSpritesGfxPtr != NULL)
gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition]; gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else else
gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition]; gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
gMultiuseSpriteTemplate.paletteTag = arg0; gMultiuseSpriteTemplate.paletteTag = arg0;
gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[arg0]; gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[arg0];
@@ -5594,96 +5595,63 @@ u16 SpeciesToCryId(u16 species)
return gSpeciesIdToCryId[species - (SPECIES_TREECKO - 1)]; return gSpeciesIdToCryId[species - (SPECIES_TREECKO - 1)];
} }
void sub_806D544(u16 species, u32 personality, u8 *dest) #define DRAW_SPINDA_SPOTS \
{ \
int i; \
for (i = 0; i < 4; i++) \
{ \
int j; \
u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); \
u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); \
\
for (j = 0; j < 16; j++) \
{ \
int k; \
s32 row = gSpindaSpotGraphics[i].image[j]; \
\
for (k = x; k < x + 16; k++) \
{ \
u8 *val = dest + ((k / 8) * 32) + \
((k % 8) / 2) + \
((y >> 3) << 8) + \
((y & 7) << 2); \
\
if (row & 1) \
{ \
if (k & 1) \
{ \
if ((u8)((*val & 0xF0) - 0x10) <= 0x20) \
*val += 0x40; \
} \
else \
{ \
if ((u8)((*val & 0xF) - 0x01) <= 0x02) \
*val += 0x04; \
} \
} \
\
row >>= 1; \
} \
\
y++; \
} \
\
personality >>= 8; \
} \
}
static void DrawSpindaSpotsUnused(u16 species, u32 personality, u8 *dest)
{ {
if (species == SPECIES_SPINDA if (species == SPECIES_SPINDA
&& dest != gMonSpritesGfxPtr->sprites.ptr[0] && dest != gMonSpritesGfxPtr->sprites.ptr[0]
&& dest != gMonSpritesGfxPtr->sprites.ptr[2]) && dest != gMonSpritesGfxPtr->sprites.ptr[2])
{ DRAW_SPINDA_SPOTS;
int i;
for (i = 0; i < 4; i++)
{
int j;
u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
for (j = 0; j < 16; j++)
{
int k;
s32 row = gSpindaSpotGraphics[i].image[j];
for (k = x; k < x + 16; k++)
{
u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
if (row & 1)
{
if (k & 1)
{
if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
*val += 0x40;
}
else
{
if ((u8)((*val & 0xF) - 0x01) <= 0x02)
*val += 0x04;
}
}
row >>= 1;
}
y++;
}
personality >>= 8;
}
}
} }
void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4) void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, bool8 isFrontPic)
{ {
if (species == SPECIES_SPINDA && a4) if (species == SPECIES_SPINDA && isFrontPic)
{ DRAW_SPINDA_SPOTS;
int i;
for (i = 0; i < 4; i++)
{
int j;
u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
for (j = 0; j < 16; j++)
{
int k;
s32 row = gSpindaSpotGraphics[i].image[j];
for (k = x; k < x + 16; k++)
{
u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
if (row & 1)
{
if (k & 1)
{
if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
*val += 0x40;
}
else
{
if ((u8)((*val & 0xF) - 0x01) <= 0x02)
*val += 0x04;
}
}
row >>= 1;
}
y++;
}
personality >>= 8;
}
}
} }
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies) void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
@@ -6824,7 +6792,7 @@ static void sub_806F160(struct Unknown_806F160_Struct* structPtr)
u16 i, j; u16 i, j;
for (i = 0; i < structPtr->field_0_0; i++) for (i = 0; i < structPtr->field_0_0; i++)
{ {
structPtr->templates[i] = gUnknown_08329D98[i]; structPtr->templates[i] = gBattlerSpriteTemplates[i];
for (j = 0; j < structPtr->field_1; j++) for (j = 0; j < structPtr->field_1; j++)
{ {
structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800]; structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800];

View File

@@ -1047,7 +1047,7 @@ static void sub_817F77C(struct Sprite *sprite)
{ {
// FIX: Reset these back to normal after they were changed so Poké Ball catch/release // FIX: Reset these back to normal after they were changed so Poké Ball catch/release
// animations without a screen transition in between don't break // animations without a screen transition in between don't break
sprite->affineAnims = gUnknown_082FF694; sprite->affineAnims = gAffineAnims_BattleSpriteOpponentSide;
} }
#endif // BUGFIX #endif // BUGFIX
} }

View File

@@ -3426,8 +3426,8 @@ static void sub_802DB8C(void)
static const u8 gUnknown_082FE1DF[] = {2, 2, 0, 0, 1, 1, 1, 0, 0, 2, 0, 0, 0}; static const u8 gUnknown_082FE1DF[] = {2, 2, 0, 0, 1, 1, 1, 0, 0, 2, 0, 0, 0};
static const struct CompressedSpriteSheet gUnknown_082FE1EC = {gUnknown_082FF1F8, 0, 0x320}; static const struct CompressedSpriteSheet sSpriteSheet_Digits = {gMinigameDigits_Gfx, 0, 0x320};
static const struct SpritePalette gUnknown_082FE1F4 = {gUnknown_082FF1D8, 0x320}; static const struct SpritePalette sSpritePalette_Digits = {gMinigameDigits_Pal, 0x320};
static const u16 gUnknown_082FE1FC[] = {0x06, 0x08, 0x10, 0x08}; static const u16 gUnknown_082FE1FC[] = {0x06, 0x08, 0x10, 0x08};
static const u16 gUnknown_082FE204[] = {0x06, 0x08, 0x0b, 0x06, 0x10, 0x08}; static const u16 gUnknown_082FE204[] = {0x06, 0x08, 0x0b, 0x06, 0x10, 0x08};
@@ -3513,8 +3513,8 @@ static void sub_802DD08(void)
ptr->xDelta = 8; ptr->xDelta = 8;
ptr->x = 108; ptr->x = 108;
ptr->y = 6; ptr->y = 6;
ptr->spriteSheet = (void*) &gUnknown_082FE1EC; ptr->spriteSheet = (void*) &sSpriteSheet_Digits;
ptr->spritePal = &gUnknown_082FE1F4; ptr->spritePal = &sSpritePalette_Digits;
DigitObjUtil_Init(2); DigitObjUtil_Init(2);
DigitObjUtil_CreatePrinter(0, 0, ptr); DigitObjUtil_CreatePrinter(0, 0, ptr);

View File

@@ -3857,7 +3857,7 @@ static u8 LoadMonGfxAndSprite(struct Pokemon *mon, s16 *state)
case 0: case 0:
if (gMain.inBattle) if (gMain.inBattle)
{ {
if (sub_80688F8(3, sMonSummaryScreen->curMonIndex)) if (ShouldIgnoreDeoxysForm(3, sMonSummaryScreen->curMonIndex))
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid);
else else
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid);

View File

@@ -262,12 +262,12 @@ u16 CreatePicSprite2(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s1
sCreatingSpriteTemplate.images = images; sCreatingSpriteTemplate.images = images;
if (flags2 == 0x01) if (flags2 == 0x01)
{ {
sCreatingSpriteTemplate.affineAnims = gUnknown_082FF694; sCreatingSpriteTemplate.affineAnims = gAffineAnims_BattleSpriteOpponentSide;
sCreatingSpriteTemplate.oam = &gUnknown_0860B06C; sCreatingSpriteTemplate.oam = &gUnknown_0860B06C;
} }
else if (flags2 == 0x00) else if (flags2 == 0x00)
{ {
sCreatingSpriteTemplate.affineAnims = gUnknown_082FF618; sCreatingSpriteTemplate.affineAnims = gAffineAnims_BattleSpritePlayerSide;
sCreatingSpriteTemplate.oam = &gUnknown_0860B06C; sCreatingSpriteTemplate.oam = &gUnknown_0860B06C;
} }
else else