Merge pull request #540 from GriffinRichards/sync-b-anim
Sync battle anim
This commit is contained in:
@@ -245,7 +245,7 @@ $(C_BUILDDIR)/isagbprn.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE)
|
||||
$(C_BUILDDIR)/isagbprn.o: CFLAGS := -mthumb-interwork
|
||||
|
||||
$(C_BUILDDIR)/trainer_tower.o: CFLAGS += -ffreestanding
|
||||
$(C_BUILDDIR)/flying.o: CFLAGS += -ffreestanding
|
||||
$(C_BUILDDIR)/battle_anim_flying.o: CFLAGS += -ffreestanding
|
||||
|
||||
$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE)
|
||||
$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
.byte 0x02
|
||||
.4byte \template
|
||||
.if \anim_battler == ANIM_TARGET
|
||||
.byte 0x80 | (\subpriority_offset & 0x7F)
|
||||
.byte ANIMSPRITE_IS_TARGET | (\subpriority_offset & 0x7F)
|
||||
.else
|
||||
.byte (\subpriority_offset & 0x7F)
|
||||
.endif
|
||||
@@ -34,20 +34,20 @@
|
||||
.Lcreatetask_\@_2:
|
||||
.endm
|
||||
|
||||
.macro delay param0:req
|
||||
.macro delay frames:req
|
||||
.byte 0x4
|
||||
.byte \param0
|
||||
.byte \frames
|
||||
.endm
|
||||
|
||||
.macro waitforvisualfinish
|
||||
.byte 0x5
|
||||
.endm
|
||||
|
||||
.macro hang1
|
||||
.macro nop
|
||||
.byte 0x6
|
||||
.endm
|
||||
|
||||
.macro hang2
|
||||
.macro nop2
|
||||
.byte 0x7
|
||||
.endm
|
||||
|
||||
@@ -79,30 +79,30 @@
|
||||
.byte 0xd
|
||||
.endm
|
||||
|
||||
.macro call param0:req
|
||||
.macro call ptr:req
|
||||
.byte 0xe
|
||||
.4byte \param0
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
.macro return
|
||||
.byte 0xf
|
||||
.endm
|
||||
|
||||
.macro setarg param0:req, param1:req
|
||||
.macro setarg argId:req, value:req
|
||||
.byte 0x10
|
||||
.byte \param0
|
||||
.2byte \param1
|
||||
.byte \argId
|
||||
.2byte \value
|
||||
.endm
|
||||
|
||||
.macro choosetwoturnanim param0:req, param1:req
|
||||
.macro choosetwoturnanim ptr1:req, ptr2:req
|
||||
.byte 0x11
|
||||
.4byte \param0
|
||||
.4byte \param1
|
||||
.4byte \ptr1
|
||||
.4byte \ptr2
|
||||
.endm
|
||||
|
||||
.macro jumpifmoveturn param0:req, ptr:req
|
||||
.macro jumpifmoveturn value:req, ptr:req
|
||||
.byte 0x12
|
||||
.byte \param0
|
||||
.byte \value
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
@@ -144,13 +144,13 @@
|
||||
.byte \pan
|
||||
.endm
|
||||
|
||||
.macro panse_1B se:req, param1:req, param2:req, param3:req, param4:req
|
||||
.macro panse se:req, currentPan:req, targetPan:req, incrementPan:req, delay:req
|
||||
.byte 0x1b
|
||||
.2byte \se
|
||||
.byte \param1
|
||||
.byte \param2
|
||||
.byte \param3
|
||||
.byte \param4
|
||||
.byte \currentPan
|
||||
.byte \targetPan
|
||||
.byte \incrementPan
|
||||
.byte \delay
|
||||
.endm
|
||||
|
||||
.macro loopsewithpan se:req, pan:req, wait:req, times:req
|
||||
@@ -168,9 +168,9 @@
|
||||
.byte \wait
|
||||
.endm
|
||||
|
||||
.macro setbldcnt param0:req
|
||||
.macro setbldcnt bldcnt:req
|
||||
.byte 0x1e
|
||||
.2byte \param0
|
||||
.2byte \bldcnt
|
||||
.endm
|
||||
|
||||
.macro createsoundtask addr:req, argv:vararg
|
||||
@@ -186,19 +186,19 @@
|
||||
.byte 0x20
|
||||
.endm
|
||||
|
||||
.macro jumpargeq param0:req, param1:req, ptr:req
|
||||
.macro jumpargeq argId:req, value:req, ptr:req
|
||||
.byte 0x21
|
||||
.byte \param0
|
||||
.2byte \param1
|
||||
.byte \argId
|
||||
.2byte \value
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
.macro monbg_22 battler:req
|
||||
.macro monbg_static battler:req
|
||||
.byte 0x22
|
||||
.byte \battler
|
||||
.endm
|
||||
|
||||
.macro clearmonbg_23 battler:req
|
||||
.macro clearmonbg_static battler:req
|
||||
.byte 0x23
|
||||
.byte \battler
|
||||
.endm
|
||||
@@ -208,41 +208,41 @@
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
.macro fadetobgfromset param0:req, param1:req, param2:req
|
||||
.macro fadetobgfromset bgOpponent:req, bgPlayer:req, bgContest:req
|
||||
.byte 0x25
|
||||
.byte \param0
|
||||
.byte \param1
|
||||
.byte \param2
|
||||
.byte \bgOpponent
|
||||
.byte \bgPlayer
|
||||
.byte \bgContest
|
||||
.endm
|
||||
|
||||
.macro panse_26 se:req, param1:req, param2:req, param3:req, param4:req
|
||||
.macro panse_adjustnone se:req, currentPan:req, targetPan:req, incrementPan:req, delay:req
|
||||
.byte 0x26
|
||||
.2byte \se
|
||||
.byte \param1
|
||||
.byte \param2
|
||||
.byte \param3
|
||||
.byte \param4
|
||||
.byte \currentPan
|
||||
.byte \targetPan
|
||||
.byte \incrementPan
|
||||
.byte \delay
|
||||
.endm
|
||||
|
||||
.macro panse_27 se:req, param1:req, param2:req, param3:req, param4:req
|
||||
.macro panse_adjustall se:req, currentPan:req, targetPan:req, incrementPan:req, delay:req
|
||||
.byte 0x27
|
||||
.2byte \se
|
||||
.byte \param1
|
||||
.byte \param2
|
||||
.byte \param3
|
||||
.byte \param4
|
||||
.byte \currentPan
|
||||
.byte \targetPan
|
||||
.byte \incrementPan
|
||||
.byte \delay
|
||||
.endm
|
||||
|
||||
.macro monbgprio_28 battler:req
|
||||
.macro splitbgprio battler:req
|
||||
.byte 0x28
|
||||
.byte \battler
|
||||
.endm
|
||||
|
||||
.macro monbgprio_29
|
||||
.macro splitbgprio_all
|
||||
.byte 0x29
|
||||
.endm
|
||||
|
||||
.macro monbgprio_2A battler:req
|
||||
.macro splitbgprio_foes battler:req
|
||||
.byte 0x2a
|
||||
.byte \battler
|
||||
.endm
|
||||
@@ -257,12 +257,12 @@
|
||||
.byte \battler
|
||||
.endm
|
||||
|
||||
.macro doublebattle_2D battler:req
|
||||
.macro teamattack_moveback battler:req
|
||||
.byte 0x2d
|
||||
.byte \battler
|
||||
.endm
|
||||
|
||||
.macro doublebattle_2E battler:req
|
||||
.macro teamattack_movefwd battler:req
|
||||
.byte 0x2e
|
||||
.byte \battler
|
||||
.endm
|
||||
|
||||
@@ -488,3 +488,26 @@
|
||||
.set OAM_SIZE_8x32, OAM_SIZE_1 | OAM_V_RECTANGLE
|
||||
.set OAM_SIZE_16x32, OAM_SIZE_2 | OAM_V_RECTANGLE
|
||||
.set OAM_SIZE_32x64, OAM_SIZE_3 | OAM_V_RECTANGLE
|
||||
|
||||
@ BLDCNT
|
||||
|
||||
.set BLDCNT_TGT1_BG0, 1 << 0
|
||||
.set BLDCNT_TGT1_BG1, 1 << 1
|
||||
.set BLDCNT_TGT1_BG2, 1 << 2
|
||||
.set BLDCNT_TGT1_BG3, 1 << 3
|
||||
.set BLDCNT_TGT1_OBJ, 1 << 4
|
||||
.set BLDCNT_TGT1_BD, 1 << 5
|
||||
.set BLDCNT_TGT1_ALL, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD
|
||||
|
||||
.set BLDCNT_EFFECT_NONE, 0 << 6
|
||||
.set BLDCNT_EFFECT_BLEND, 1 << 6
|
||||
.set BLDCNT_EFFECT_LIGHTEN, 2 << 6
|
||||
.set BLDCNT_EFFECT_DARKEN, 3 << 6
|
||||
|
||||
.set BLDCNT_TGT2_BG0, 1 << 8
|
||||
.set BLDCNT_TGT2_BG1, 1 << 9
|
||||
.set BLDCNT_TGT2_BG2, 1 << 10
|
||||
.set BLDCNT_TGT2_BG3, 1 << 11
|
||||
.set BLDCNT_TGT2_OBJ, 1 << 12
|
||||
.set BLDCNT_TGT2_BD, 1 << 13
|
||||
.set BLDCNT_TGT2_ALL, BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD
|
||||
|
||||
+3394
-3397
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,7 @@
|
||||
#include "constants/songs.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/game_stat.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
.include "asm/macros/battle_script.inc"
|
||||
@ Define these here since misc_constants.inc conflicts with the C headers
|
||||
.set NULL, 0
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "constants/pokemon.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/game_stat.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
.include "asm/macros/battle_script.inc"
|
||||
@ Define these here since misc_constants.inc conflicts with the C headers
|
||||
.set NULL, 0
|
||||
@@ -209,7 +209,7 @@ BattleScript_PokeFluteEnd::
|
||||
finishaction
|
||||
|
||||
BattleScript_WatchesCarefully::
|
||||
printfromtable gSafariPokeblockResultStringIds
|
||||
printfromtable gSafariReactionStringIds
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
playanimation BS_OPPONENT1, B_ANIM_SAFARI_REACTION
|
||||
end2
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gSmokescreenImpactSpriteSheet::
|
||||
obj_tiles gSmokescreenImpactTiles, 0x0180, 55019
|
||||
|
||||
gSmokescreenImpactSpritePalette::
|
||||
obj_pal gSmokescreenImpactPalette, 55019
|
||||
|
||||
gOamData_835099C::
|
||||
.4byte 0x40000000, 0x00000400
|
||||
|
||||
gAnimCmd_82509A4::
|
||||
obj_image_anim_frame 0, 4
|
||||
obj_image_anim_frame 4, 4
|
||||
obj_image_anim_frame 8, 4
|
||||
obj_image_anim_end
|
||||
|
||||
gAnimCmd_82509B4::
|
||||
obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
|
||||
obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP
|
||||
obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP
|
||||
obj_image_anim_end
|
||||
|
||||
gAnimCmd_82509C4::
|
||||
obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP
|
||||
obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP
|
||||
obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP
|
||||
obj_image_anim_end
|
||||
|
||||
gAnimCmd_82509D4::
|
||||
obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
|
||||
obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
|
||||
obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
|
||||
obj_image_anim_end
|
||||
|
||||
gSpriteAnimTable_82509E4::
|
||||
.4byte gAnimCmd_82509A4
|
||||
.4byte gAnimCmd_82509B4
|
||||
.4byte gAnimCmd_82509C4
|
||||
.4byte gAnimCmd_82509D4
|
||||
|
||||
gSmokescreenImpactSpriteTemplate::
|
||||
spr_template 55019, 55019, gOamData_835099C, gSpriteAnimTable_82509E4, NULL, gDummySpriteAffineAnimTable, SpriteCB_DestroySprite
|
||||
|
||||
gSpriteSheet_EnemyShadow::
|
||||
obj_tiles gFile_graphics_battle_interface_enemy_mon_shadow_sheet, 0x0080, 55129
|
||||
|
||||
gOamData_8250A14::
|
||||
.4byte 0x40004000, 0x00000c00
|
||||
|
||||
gSpriteTemplate_EnemyShadow::
|
||||
spr_template 55129, 55039, gOamData_8250A14, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_SetInvisible
|
||||
+2
-2
@@ -402,8 +402,8 @@ struct BattleStruct
|
||||
u8 runTries;
|
||||
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1];
|
||||
u8 field_78; // unused
|
||||
u8 safariGoNearCounter;
|
||||
u8 safariPkblThrowCounter;
|
||||
u8 safariRockThrowCounter;
|
||||
u8 safariBaitThrowCounter;
|
||||
u8 safariEscapeFactor;
|
||||
u8 safariCatchFactor;
|
||||
u8 linkBattleVsSpriteId_V;
|
||||
|
||||
+74
-364
@@ -17,6 +17,36 @@ enum
|
||||
BG_ANIM_SCREEN_BASE_BLOCK
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
BATTLER_COORD_X,
|
||||
BATTLER_COORD_Y,
|
||||
BATTLER_COORD_X_2,
|
||||
BATTLER_COORD_Y_PIC_OFFSET,
|
||||
BATTLER_COORD_Y_PIC_OFFSET_DEFAULT,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
BATTLER_COORD_ATTR_HEIGHT,
|
||||
BATTLER_COORD_ATTR_WIDTH,
|
||||
BATTLER_COORD_ATTR_TOP,
|
||||
BATTLER_COORD_ATTR_BOTTOM,
|
||||
BATTLER_COORD_ATTR_LEFT,
|
||||
BATTLER_COORD_ATTR_RIGHT,
|
||||
BATTLER_COORD_ATTR_RAW_BOTTOM,
|
||||
};
|
||||
|
||||
// battle_anim_status_effects.s
|
||||
#define STAT_ANIM_PLUS1 15
|
||||
#define STAT_ANIM_PLUS2 39
|
||||
#define STAT_ANIM_MINUS1 22
|
||||
#define STAT_ANIM_MINUS2 46
|
||||
#define STAT_ANIM_MULTIPLE_PLUS1 55
|
||||
#define STAT_ANIM_MULTIPLE_PLUS2 56
|
||||
#define STAT_ANIM_MULTIPLE_MINUS1 57
|
||||
#define STAT_ANIM_MULTIPLE_MINUS2 58
|
||||
|
||||
struct BattleAnimBgData
|
||||
{
|
||||
u8 *bgTiles;
|
||||
@@ -60,9 +90,8 @@ extern u8 gBattleAnimTarget;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern s32 gAnimMoveDmg;
|
||||
extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_2037F24;
|
||||
extern u8 gAnimCustomPanning;
|
||||
|
||||
// battle_anim.c
|
||||
extern const struct OamData gOamData_AffineOff_ObjNormal_8x8;
|
||||
extern const struct OamData gOamData_AffineOff_ObjNormal_16x16;
|
||||
extern const struct OamData gOamData_AffineOff_ObjNormal_32x32;
|
||||
@@ -135,8 +164,27 @@ extern const struct OamData gOamData_AffineDouble_ObjBlend_8x16;
|
||||
extern const struct OamData gOamData_AffineDouble_ObjBlend_8x32;
|
||||
extern const struct OamData gOamData_AffineDouble_ObjBlend_16x32;
|
||||
extern const struct OamData gOamData_AffineDouble_ObjBlend_32x64;
|
||||
extern const struct MonCoords gCastformFrontSpriteCoords[];
|
||||
extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
|
||||
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
|
||||
extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate;
|
||||
extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate;
|
||||
extern const struct SpriteTemplate gWaterHitSplatSpriteTemplate;
|
||||
extern const struct SpriteTemplate gWishStarSpriteTemplate;
|
||||
extern const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate;
|
||||
extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate;
|
||||
extern const union AffineAnimCmd *const gAffineAnims_Bite[];
|
||||
extern const union AffineAnimCmd *const gAffineAnims_Droplet[];
|
||||
extern const union AffineAnimCmd *const gGrowingRingAffineAnimTable[];
|
||||
extern const union AnimCmd *const gAnims_SmallBubblePair[];
|
||||
extern const union AnimCmd *const gAnims_BasicFire[];
|
||||
extern const union AnimCmd *const gAnims_WaterMudOrb[];
|
||||
extern const union AnimCmd *const gAnims_WaterBubble[];
|
||||
extern const union AnimCmd *const gMusicNotesAnimTable[];
|
||||
extern const u8 *const gBattleAnims_StatusConditions[];
|
||||
extern const u8 *const gBattleAnims_Moves[];
|
||||
extern const u16 gMovesWithQuietBGM[];
|
||||
|
||||
void MoveBattlerSpriteToBG(u8 battlerId, u8);
|
||||
void ResetBattleAnimBg(u8);
|
||||
void ClearBattleAnimationVars(void);
|
||||
@@ -152,209 +200,19 @@ s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
|
||||
bool8 IsBattlerSpriteVisible(u8 battlerId);
|
||||
s16 KeepPanInRange(s16 a, s32 oldPan);
|
||||
void RelocateBattleBgPal(u16 paletteNum, u16 *dest, s32 offset, u8 largeScreen);
|
||||
|
||||
// battle_intro.c
|
||||
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
|
||||
s32 GetAnimBgAttribute(u8 bgId, u8 attributeId);
|
||||
void HandleIntroSlide(u8 terrain);
|
||||
void BattleIntroSlideEnd(u8 taskId);
|
||||
void CopyBattlerSpriteToBg(s32 bgId, u8 x, u8 y, u8 battlerPosition, u8 palno, u8 *tilesDest, u16 *tilemapDest, u16 tilesOffset);
|
||||
|
||||
// battle_anim_effects_1.c
|
||||
extern const union AnimCmd *const gMusicNotesAnimTable[];
|
||||
extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate;
|
||||
void AnimMovePowderParticle(struct Sprite *);
|
||||
void AnimPowerAbsorptionOrb(struct Sprite *);
|
||||
void AnimSolarBeamBigOrb(struct Sprite *);
|
||||
void AnimSolarBeamSmallOrb(struct Sprite *);
|
||||
void AnimAbsorptionOrb(struct Sprite *);
|
||||
void AnimHyperBeamOrb(struct Sprite *);
|
||||
void AnimSporeParticle(struct Sprite *);
|
||||
void AnimPetalDanceBigFlower(struct Sprite *);
|
||||
void AnimPetalDanceSmallFlower(struct Sprite *);
|
||||
void AnimRazorLeafParticle(struct Sprite *);
|
||||
void AnimLeechSeed(struct Sprite *);
|
||||
void AnimTranslateLinearSingleSineWave(struct Sprite *);
|
||||
void AnimMoveTwisterParticle(struct Sprite *);
|
||||
void AnimConstrictBinding(struct Sprite *);
|
||||
void AnimMimicOrb(struct Sprite *);
|
||||
void AnimIngrainRoot(struct Sprite *);
|
||||
void AnimFrenzyPlantRoot(struct Sprite *);
|
||||
void AnimIngrainOrb(struct Sprite *);
|
||||
void AnimPresent(struct Sprite *);
|
||||
void AnimKnockOffItem(struct Sprite *);
|
||||
void AnimPresentHealParticle(struct Sprite *);
|
||||
void AnimItemSteal(struct Sprite *);
|
||||
void AnimTrickBag(struct Sprite *);
|
||||
void AnimFlyingParticle(struct Sprite *);
|
||||
void AnimNeedleArmSpike(struct Sprite *);
|
||||
void AnimSlidingHit(struct Sprite *);
|
||||
void AnimWhipHit(struct Sprite *);
|
||||
void AnimFlickeringPunch(struct Sprite *);
|
||||
void AnimCuttingSlice(struct Sprite *);
|
||||
void AnimAirCutterSlice(struct Sprite *);
|
||||
void AnimCirclingMusicNote(struct Sprite *);
|
||||
void AnimProtect(struct Sprite *);
|
||||
void AnimMilkBottle(struct Sprite *);
|
||||
void AnimGrantingStars(struct Sprite *);
|
||||
void AnimSparkingStars(struct Sprite *);
|
||||
void AnimBubbleBurst(struct Sprite *);
|
||||
void AnimSleepLetterZ(struct Sprite *);
|
||||
void AnimLockOnTarget(struct Sprite *);
|
||||
void AnimLockOnMoveTarget(struct Sprite *);
|
||||
void AnimBowMon(struct Sprite *);
|
||||
void AnimTipMon(struct Sprite *);
|
||||
void AnimSlashSlice(struct Sprite *);
|
||||
void AnimFalseSwipeSlice(struct Sprite *);
|
||||
void AnimFalseSwipePositionedSlice(struct Sprite *);
|
||||
void AnimEndureEnergy(struct Sprite *);
|
||||
void AnimSharpenSphere(struct Sprite *);
|
||||
void AnimConversion(struct Sprite *);
|
||||
void AnimConversion2(struct Sprite *);
|
||||
void AnimMoon(struct Sprite *);
|
||||
void AnimMoonlightSparkle(struct Sprite *);
|
||||
void AnimHornHit(struct Sprite *);
|
||||
void AnimSuperFang(struct Sprite *);
|
||||
void AnimWavyMusicNotes(struct Sprite *);
|
||||
void AnimFlyingMusicNotes(struct Sprite *);
|
||||
void AnimBellyDrumHand(struct Sprite *);
|
||||
void AnimSlowFlyingMusicNotes(struct Sprite *);
|
||||
void AnimThoughtBubble(struct Sprite *);
|
||||
void AnimMetronomeFinger(struct Sprite *);
|
||||
void AnimFollowMeFinger(struct Sprite *);
|
||||
void AnimTauntFinger(struct Sprite *);
|
||||
void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite);
|
||||
void AnimTask_ShrinkTargetCopy(u8 taskId);
|
||||
|
||||
// battle_anim_effects_2.c
|
||||
extern const union AffineAnimCmd *const gGrowingRingAffineAnimTable[];
|
||||
void AnimCirclingFinger(struct Sprite *);
|
||||
void AnimBouncingMusicNote(struct Sprite *);
|
||||
void AnimVibrateBattlerBack(struct Sprite *);
|
||||
void AnimMovingClamp(struct Sprite *);
|
||||
void Anim_KinesisZapEnergy(struct Sprite *);
|
||||
void Anim_SwordsDanceBlade(struct Sprite *);
|
||||
void AnimSonicBoomProjectile(struct Sprite *);
|
||||
void AnimAirWaveProjectile(struct Sprite *);
|
||||
void AnimVoidLines(struct Sprite *);
|
||||
void AnimCoinThrow(struct Sprite *);
|
||||
void AnimFallingCoin(struct Sprite *);
|
||||
void AnimBulletSeed(struct Sprite *);
|
||||
void AnimRazorWindTornado(struct Sprite *);
|
||||
void AnimViceGripPincer(struct Sprite *);
|
||||
void AnimGuillotinePincer(struct Sprite *);
|
||||
void AnimBreathPuff(struct Sprite *);
|
||||
void AnimAngerMark(struct Sprite *);
|
||||
void AnimPencil(struct Sprite *);
|
||||
void AnimBlendThinRing(struct Sprite *);
|
||||
void AnimHyperVoiceRing(struct Sprite *);
|
||||
void AnimUproarRing(struct Sprite *);
|
||||
void AnimSoftBoiledEgg(struct Sprite *);
|
||||
void AnimSpeedDust(struct Sprite *);
|
||||
void AnimHealBellMusicNote(struct Sprite *);
|
||||
void AnimMagentaHeart(struct Sprite *);
|
||||
void AnimRedHeartProjectile(struct Sprite *);
|
||||
void AnimParticuleBurst(struct Sprite *);
|
||||
void AnimRedHeartRising(struct Sprite *);
|
||||
void AnimOrbitFast(struct Sprite *);
|
||||
void AnimOrbitScatter(struct Sprite *);
|
||||
void AnimSpitUpOrb(struct Sprite *);
|
||||
void AnimEyeSparkle(struct Sprite *);
|
||||
void AnimAngel(struct Sprite *);
|
||||
void AnimPinkHeart(struct Sprite *);
|
||||
void AnimDevil(struct Sprite *);
|
||||
void AnimFurySwipes(struct Sprite *);
|
||||
void AnimMovementWaves(struct Sprite *);
|
||||
void AnimJaggedMusicNote(struct Sprite *);
|
||||
void AnimPerishSongMusicNote2(struct Sprite *);
|
||||
void AnimPerishSongMusicNote(struct Sprite *);
|
||||
void AnimGuardRing(struct Sprite *);
|
||||
|
||||
// battle_anim_effects_3.c
|
||||
extern const struct SpriteTemplate gWishStarSpriteTemplate;
|
||||
extern const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate;
|
||||
void AnimBlackSmoke(struct Sprite *);
|
||||
void AnimWhiteHalo(struct Sprite *);
|
||||
void AnimTealAlert(struct Sprite *);
|
||||
void AnimMeanLookEye(struct Sprite *);
|
||||
void AnimSpikes(struct Sprite *);
|
||||
void AnimLeer(struct Sprite *);
|
||||
void AnimLetterZ(struct Sprite *);
|
||||
void AnimFang(struct Sprite *);
|
||||
void AnimSpotlight(struct Sprite *);
|
||||
void AnimClappingHand(struct Sprite *);
|
||||
void AnimClappingHand2(struct Sprite *);
|
||||
void AnimRapidSpin(struct Sprite *);
|
||||
void AnimTriAttackTriangle(struct Sprite *);
|
||||
void AnimBatonPassPokeball(struct Sprite *);
|
||||
void AnimWishStar(struct Sprite *);
|
||||
void AnimMiniTwinklingStar(struct Sprite *);
|
||||
void AnimSwallowBlueOrb(struct Sprite *);
|
||||
void AnimGreenStar(struct Sprite *);
|
||||
void AnimWeakFrustrationAngerMark(struct Sprite *);
|
||||
void AnimSweetScentPetal(struct Sprite *);
|
||||
void AnimPainSplitProjectile(struct Sprite *);
|
||||
void AnimFlatterConfetti(struct Sprite *);
|
||||
void AnimFlatterSpotlight(struct Sprite *);
|
||||
void AnimReversalOrb(struct Sprite *);
|
||||
void AnimYawnCloud(struct Sprite *);
|
||||
void AnimSmokeBallEscapeCloud(struct Sprite *);
|
||||
void AnimFacadeSweatDrop(struct Sprite *);
|
||||
void AnimRoarNoiseLine(struct Sprite *);
|
||||
void AnimGlareEyeDot(struct Sprite *);
|
||||
void AnimAssistPawprint(struct Sprite *);
|
||||
void AnimSmellingSaltsHand(struct Sprite *);
|
||||
void AnimSmellingSaltExclamation(struct Sprite *);
|
||||
void AnimHelpingHandClap(struct Sprite *);
|
||||
void AnimForesightMagnifyingGlass(struct Sprite *);
|
||||
void AnimMeteorMashStar(struct Sprite *);
|
||||
void AnimBlockX(struct Sprite *);
|
||||
void AnimUnusedItemBagSteal(struct Sprite *);
|
||||
void AnimParticuleBurst(struct Sprite *);
|
||||
void AnimKnockOffStrike(struct Sprite *);
|
||||
void AnimRecycle(struct Sprite *);
|
||||
|
||||
// battle_anim_special.c
|
||||
void TryShinyAnimation(u8 battler, struct Pokemon *mon);
|
||||
u8 ItemIdToBallId(u16 itemId);
|
||||
u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId);
|
||||
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
|
||||
void DoLoadHealthboxPalsForLevelUp(u8 *, u8 *, u8 battlerId);
|
||||
void DoFreeHealthboxPalsForLevelUp(u8 batterId);
|
||||
|
||||
enum
|
||||
{
|
||||
BATTLER_COORD_X,
|
||||
BATTLER_COORD_Y,
|
||||
BATTLER_COORD_X_2,
|
||||
BATTLER_COORD_Y_PIC_OFFSET,
|
||||
BATTLER_COORD_Y_PIC_OFFSET_DEFAULT,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
BATTLER_COORD_ATTR_HEIGHT,
|
||||
BATTLER_COORD_ATTR_WIDTH,
|
||||
BATTLER_COORD_ATTR_TOP,
|
||||
BATTLER_COORD_ATTR_BOTTOM,
|
||||
BATTLER_COORD_ATTR_LEFT,
|
||||
BATTLER_COORD_ATTR_RIGHT,
|
||||
BATTLER_COORD_ATTR_RAW_BOTTOM,
|
||||
};
|
||||
|
||||
// battle_anim_status_effects.s
|
||||
#define STAT_ANIM_PLUS1 15
|
||||
#define STAT_ANIM_PLUS2 39
|
||||
#define STAT_ANIM_MINUS1 22
|
||||
#define STAT_ANIM_MINUS2 46
|
||||
#define STAT_ANIM_MULTIPLE_PLUS1 55
|
||||
#define STAT_ANIM_MULTIPLE_PLUS2 56
|
||||
#define STAT_ANIM_MULTIPLE_MINUS1 57
|
||||
#define STAT_ANIM_MULTIPLE_MINUS2 58
|
||||
void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
|
||||
|
||||
// battle_anim_mons.c
|
||||
extern const struct MonCoords gCastformFrontSpriteCoords[];
|
||||
u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType);
|
||||
u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType);
|
||||
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
|
||||
@@ -363,15 +221,15 @@ u8 GetGhostSpriteDefault_Y(u8 battlerId);
|
||||
u8 GetBattlerYCoordWithElevation(u8 battlerId);
|
||||
u8 GetAnimBattlerSpriteId(u8 animBattler);
|
||||
void StoreSpriteCallbackInData6(struct Sprite *sprite, SpriteCallback callback);
|
||||
void TranslateSpriteInCircleOverDuration(struct Sprite *sprite);
|
||||
void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite);
|
||||
void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite);
|
||||
void TranslateSpriteInCircle(struct Sprite *sprite);
|
||||
void TranslateSpriteInGrowingCircle(struct Sprite *sprite);
|
||||
void TranslateSpriteInEllipse(struct Sprite *sprite);
|
||||
void WaitAnimForDuration(struct Sprite *sprite);
|
||||
void SetupLinearTranslationWithFixedDuration(struct Sprite *sprite);
|
||||
void ConvertPosDataToTranslateLinearData(struct Sprite *sprite);
|
||||
void TranslateSpriteLinear(struct Sprite *sprite);
|
||||
void TranslateSpriteLinearFixedPoint(struct Sprite *sprite);
|
||||
void TranslateMonSpriteLinear(struct Sprite *sprite);
|
||||
void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite);
|
||||
void TranslateSpriteLinearById(struct Sprite *sprite);
|
||||
void TranslateSpriteLinearByIdFixedPoint(struct Sprite *sprite);
|
||||
void TranslateSpriteLinearAndFlicker(struct Sprite *sprite);
|
||||
void DestroySpriteAndMatrix(struct Sprite *sprite);
|
||||
void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite);
|
||||
@@ -400,19 +258,19 @@ void InitAnimBgTilemapBuffer(u32 bgId, const void *src);
|
||||
void AnimLoadCompressedBgTilemap(u32 bgId, const u32 *src);
|
||||
u8 GetBattleBgPaletteNum(void);
|
||||
void ToggleBg3Mode(bool8 arg0);
|
||||
void StartSpriteLinearTranslationFromCurrentPos(struct Sprite *sprite);
|
||||
void TradeMenuBouncePartySprites(struct Sprite *sprite);
|
||||
void InitSpriteDataForLinearTranslation(struct Sprite *sprite);
|
||||
void InitAnimLinearTranslation(struct Sprite *sprite);
|
||||
void StartAnimLinearTranslation(struct Sprite *sprite);
|
||||
void PlayerThrowBall_StartAnimLinearTranslation(struct Sprite *sprite);
|
||||
bool8 AnimTranslateLinear(struct Sprite *sprite);
|
||||
void RunLinearTranslation_ThenceSetCBtoStoredInData6(struct Sprite *sprite);
|
||||
void BattleAnim_InitLinearTranslationWithDuration(struct Sprite *sprite);
|
||||
void BattleAnim_InitAndRunLinearTranslationWithDuration(struct Sprite *sprite);
|
||||
void AnimTranslateLinear_WithFollowup(struct Sprite *sprite);
|
||||
void InitAnimLinearTranslationWithSpeed(struct Sprite *sprite);
|
||||
void InitAnimLinearTranslationWithSpeedAndPos(struct Sprite *sprite);
|
||||
void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite);
|
||||
bool8 AnimFastTranslateLinear(struct Sprite *sprite);
|
||||
void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite);
|
||||
void InitAndStartAnimFastLinearTranslationWithSpeed(struct Sprite *sprite);
|
||||
void InitAnimFastLinearTranslationWithSpeedAndPos(struct Sprite *sprite);
|
||||
void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation);
|
||||
void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode);
|
||||
void ResetSpriteRotScale(u8 spriteId);
|
||||
@@ -421,18 +279,15 @@ void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 x
|
||||
void TryResetSpriteAffineState(struct Sprite *sprite);
|
||||
u16 ArcTan2Neg(s16 a, s16 b);
|
||||
void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor);
|
||||
u32 SelectBattleAnimSpriteAndBgPalettes(bool8 battleBackground, bool8 attacker, bool8 target, bool8 attackerPartner, bool8 targetPartner, bool8 a6, bool8 a7);
|
||||
u32 SelectBattlerSpritePalettes(bool8 playerLeft, bool8 playerRight, bool8 foeLeft, bool8 foeRight);
|
||||
u32 GetBattlePalettesMask(bool8 battleBackground, bool8 attacker, bool8 target, bool8 attackerPartner, bool8 targetPartner, bool8 a6, bool8 a7);
|
||||
u32 GetBattleMonSpritePalettesMask(bool8 playerLeft, bool8 playerRight, bool8 foeLeft, bool8 foeRight);
|
||||
u8 GetSpritePalIdxByBattler(u8 a1);
|
||||
void AnimSpriteOnMonPos(struct Sprite *sprite);
|
||||
void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
|
||||
void AnimThrowProjectile(struct Sprite *sprite);
|
||||
void AnimSnoreZ(struct Sprite *sprite);
|
||||
void AnimTravelDiagonally(struct Sprite *sprite);
|
||||
s16 CloneBattlerSpriteWithBlend(u8 animBattler);
|
||||
void obj_delete_but_dont_free_vram(struct Sprite *sprite);
|
||||
void AnimTask_AlphaFadeIn(u8 taskId);
|
||||
void AnimTask_BlendMonInAndOut(u8 task);
|
||||
void AnimTask_BlendPalInAndOutByTag(u8 taskId);
|
||||
void DestroySpriteWithActiveSheet(struct Sprite *sprite);
|
||||
void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds);
|
||||
bool8 RunAffineAnimFromTaskData(struct Task *task);
|
||||
void SetBattlerSpriteYOffsetFromYScale(u8 spriteId);
|
||||
@@ -441,173 +296,28 @@ void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr);
|
||||
void *LoadPointerFromVars(s16 lo, s16 hi);
|
||||
void BattleAnimHelper_SetSpriteSquashParams(struct Task *task, u8 spriteId, s16 xScale0, s16 yScale0, s16 xScale1, s16 yScale1, u16 duration);
|
||||
u8 BattleAnimHelper_RunSpriteSquash(struct Task *task);
|
||||
void AnimTask_GetFrustrationPowerLevel(u8 taskId);
|
||||
void ResetSpritePriorityOfAllVisibleBattlers(void);
|
||||
void InitPrioritiesForVisibleBattlers(void);
|
||||
u8 GetBattlerSpriteSubpriority(u8 battlerId);
|
||||
u8 GetBattlerSpriteBGPriority(u8 battlerId);
|
||||
|
||||
// Returns 2 if player left or opp right
|
||||
// Returns 1 if player right or opp left
|
||||
u8 GetBattlerSpriteBGPriorityRank(u8 battlerId);
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 templateId, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 ignoreDeoxys);
|
||||
void DestroySpriteAndFreeResources_(struct Sprite *sprite);
|
||||
s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr);
|
||||
void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y);
|
||||
u8 CreateCloneOfSpriteInWindowMode(s32 battlerId, u8 spriteId, s32 species);
|
||||
void SpriteCB_AnimTranslateSpriteLinearAndFlicker(struct Sprite *sprite);
|
||||
void SpriteCB_AnimTranslateSpriteLinearAndFlicker2(struct Sprite *sprite);
|
||||
void SpriteCB_TrackOffsetFromAttackerAndWaitAnim(struct Sprite *sprite);
|
||||
void AnimTask_AttackerPunchWithTrace(u8 taskId);
|
||||
void SpriteCB_WeatherBallUp(struct Sprite *sprite);
|
||||
u8 CreateInvisibleSpriteCopy(s32 battlerId, u8 spriteId, s32 species);
|
||||
void AnimTranslateLinearAndFlicker_Flipped(struct Sprite *sprite);
|
||||
void AnimTranslateLinearAndFlicker(struct Sprite *sprite);
|
||||
void AnimSpinningSparkle(struct Sprite *sprite);
|
||||
void AnimWeatherBallUp(struct Sprite *sprite);
|
||||
void AnimWeatherBallDown(struct Sprite *sprite);
|
||||
|
||||
// battle_anim_mon_movement.c
|
||||
void AnimTask_ShakeMon(u8 taskId);
|
||||
void AnimTask_ShakeMon2(u8 taskId);
|
||||
void AnimTask_ShakeMonInPlace(u8 taskId);
|
||||
void AnimTask_ShakeAndSinkMon(u8 taskId);
|
||||
void AnimTask_TranslateMonElliptical(u8 taskId);
|
||||
void AnimTask_TranslateMonEllipticalRespectSide(u8 taskId);
|
||||
void AnimTask_WindUpLunge(u8 taskId);
|
||||
void AnimTask_SlideOffScreen(u8 taskId);
|
||||
void AnimTask_SwayMon(u8 taskId);
|
||||
void AnimTask_ScaleMonAndRestore(u8 taskId);
|
||||
void AnimTask_RotateMonSpriteToSide(u8 taskId);
|
||||
void AnimTask_RotateMonToSideAndRestore(u8 taskId);
|
||||
void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId);
|
||||
|
||||
// normal.c
|
||||
extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate;
|
||||
extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate;
|
||||
extern const struct SpriteTemplate gWaterHitSplatSpriteTemplate;
|
||||
u32 UnpackSelectedBattleAnimPalettes(s16 selector);
|
||||
void AnimTask_CurseBlendEffect(u8 taskId);
|
||||
void AnimTask_BlendColorCycleExclude(u8 taskId);
|
||||
void AnimTask_BlendColorCycleByTag(u8 taskId);
|
||||
void AnimTask_FlashAnimTagWithColor(u8 taskId);
|
||||
void AnimTask_InvertScreenColor(u8 taskId);
|
||||
void AnimTask_ShakeBattleTerrain(u8 taskId);
|
||||
|
||||
// ground.c
|
||||
void AnimTask_DigDownMovement(u8 taskId);
|
||||
void AnimTask_DigUpMovement(u8 taskId);
|
||||
void AnimParticleBurst(struct Sprite *);
|
||||
void AnimMoveTwisterParticle(struct Sprite *);
|
||||
u32 UnpackSelectedBattlePalettes(s16 selector);
|
||||
void AnimTask_HorizontalShake(u8 taskId);
|
||||
void AnimTask_IsPowerOver99(u8 taskId);
|
||||
void AnimTask_PositionFissureBgOnBattler(u8 taskId);
|
||||
|
||||
// dragon.c
|
||||
void AnimTask_DragonDanceWaver(u8 taskId);
|
||||
|
||||
// ghost.c
|
||||
void AnimTask_NightShadeClone(u8 taskId);
|
||||
void AnimTask_NightmareClone(u8 taskId);
|
||||
void AnimTask_SpiteTargetShadow(u8 taskId);
|
||||
void AnimTask_DestinyBondWhiteShadow(u8 taskId);
|
||||
void AnimTask_CurseStretchingBlackBg(u8 taskId);
|
||||
void AnimTask_GrudgeFlames(u8 taskId);
|
||||
void sub_80B6BBC(u8 taskId);
|
||||
|
||||
// rock.c
|
||||
void AnimTask_LoadSandstormBackground(u8 taskId);
|
||||
void AnimTask_Rollout(u8 taskId);
|
||||
void AnimTask_GetSeismicTossDamageLevel(u8 taskId);
|
||||
void AnimTask_MoveSeismicTossBg(u8 taskId);
|
||||
void AnimTask_SeismicTossBgAccelerateDownAtEnd(u8 taskId);
|
||||
|
||||
// psychic.c
|
||||
void AnimTask_MeditateStretchAttacker(u8 taskId);
|
||||
void AnimTask_Teleport(u8 taskId);
|
||||
void AnimTask_ImprisonOrbs(u8 taskId);
|
||||
void AnimTask_SkillSwap(u8 taskId);
|
||||
void AnimTask_ExtrasensoryDistortion(u8 taskId);
|
||||
void AnimTask_TransparentCloneGrowAndShrink(u8 taskId);
|
||||
|
||||
// dark.c
|
||||
extern const union AffineAnimCmd *const gAffineAnims_Bite[];
|
||||
void AnimTask_AttackerFadeToInvisible(u8 taskId);
|
||||
void AnimTask_AttackerFadeFromInvisible(u8 taskId);
|
||||
void AnimTask_InitAttackerFadeFromInvisible(u8 taskId);
|
||||
void AnimTask_MoveAttackerMementoShadow(u8 taskId);
|
||||
void AnimTask_MoveTargetMementoShadow(u8 taskId);
|
||||
void AnimTask_InitMementoShadow(u8 taskId);
|
||||
void sub_80B8664(u8 taskId);
|
||||
void AnimTask_MetallicShine(u8 taskId);
|
||||
void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId);
|
||||
void GetIsDoomDesireHitTurn(u8 taskId);
|
||||
|
||||
// flying.c
|
||||
void AnimTask_AnimateGustTornadoPalette(u8 taskId);
|
||||
void DestroyAnimSpriteAfterTimer(struct Sprite *sprite);
|
||||
void AnimTask_DrillPeckHitSplats(u8 taskId);
|
||||
|
||||
// poison.c
|
||||
extern const union AffineAnimCmd *const gAffineAnims_Droplet[];
|
||||
|
||||
// fighting.c
|
||||
void AnimTask_MoveSkyUppercutBg(u8 taskId);
|
||||
|
||||
// ice.c
|
||||
extern const union AnimCmd *const gAnims_SmallBubblePair[];
|
||||
void AnimTask_Haze1(u8 taskId);
|
||||
void AnimTask_LoadMistTiles(u8 taskId);
|
||||
void AnimTask_Hail1(u8 taskId);
|
||||
void AnimTask_GetRolloutCounter(u8 taskId);
|
||||
|
||||
// electric.c
|
||||
void AnimTask_ElectricBolt(u8 taskId);
|
||||
void AnimTask_ElectricChargingParticles(u8 taskId);
|
||||
void AnimTask_VoltTackleAttackerReappear(u8 taskId);
|
||||
void AnimTask_VoltTackleBolt(u8 taskId);
|
||||
void AnimTask_ShockWaveProgressingBolt(u8 taskId);
|
||||
void AnimTask_ShockWaveLightning(u8 taskId);
|
||||
|
||||
// fire.c
|
||||
extern const union AnimCmd *const gAnims_BasicFire[];
|
||||
void AnimTask_EruptionLaunchRocks(u8 taskId);
|
||||
void AnimTask_ShakeTargetInPattern(u8 taskId);
|
||||
void AnimTask_BlendBackground(u8 taskId);
|
||||
void AnimTask_MoveHeatWaveTargets(u8 taskId);
|
||||
|
||||
// water.c
|
||||
extern const union AnimCmd *const gAnims_WaterMudOrb[];
|
||||
extern const union AnimCmd *const gAnims_WaterBubble[];
|
||||
void AnimWaterPulseRing(struct Sprite *sprite);
|
||||
|
||||
// smokescreen.c
|
||||
u8 SmokescreenImpact(s16 x, s16 y, u8 a3);
|
||||
|
||||
// battle_anim_utility_funcs.c
|
||||
void AnimTask_BlendSelected(u8 taskId);
|
||||
void AnimTask_BlendExcept(u8 taskId);
|
||||
void AnimTask_SetCamouflageBlend(u8 taskId);
|
||||
void AnimTask_BlendParticle(u8 taskId);
|
||||
void AnimTask_HardwarePaletteFade(u8 taskId);
|
||||
void AnimTask_CloneBattlerSpriteWithBlend(u8 taskId);
|
||||
void AnimTask_SetUpCurseBackground(u8 taskId);
|
||||
void InitStatsChangeAnimation(u8 taskId);
|
||||
void AnimTask_BlendNonAttackerPalettes(u8 taskId);
|
||||
void AnimTask_StartSlidingBg(u8 taskId);
|
||||
void AnimTask_GetAttackerSide(u8 taskId);
|
||||
void AnimTask_GetTargetSide(u8 taskId);
|
||||
void AnimTask_GetTargetIsAttackerPartner(u8 taskId);
|
||||
void AnimTask_SetAllNonAttackersInvisiblity(u8 taskId);
|
||||
void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette);
|
||||
void AnimTask_GetBattleTerrain(u8 taskId);
|
||||
void AnimTask_AllocBackupPalBuffer(u8 taskId);
|
||||
void AnimTask_FreeBackupPalBuffer(u8 taskId);
|
||||
void AnimTask_CopyPalUnfadedToBackup(u8 taskId);
|
||||
void AnimTask_CopyPalUnfadedFromBackup(u8 taskId);
|
||||
void AnimTask_CopyPalFadedToUnfaded(u8 taskId);
|
||||
void AnimTask_IsContest(u8 taskId);
|
||||
void AnimTask_SetAnimAttackerAndTargetForEffectTgt(u8 taskId);
|
||||
void AnimTask_IsTargetSameSide(u8 taskId);
|
||||
void AnimTask_SetAnimTargetToBattlerTarget(u8 taskId);
|
||||
void AnimTask_SetAnimAttackerAndTargetForEffectAtk(u8 taskId);
|
||||
void AnimTask_SetAttackerInvisibleWaitForSignal(u8 taskId);
|
||||
|
||||
// battle_anim_scripts.s
|
||||
extern const u8 *const gBattleAnims_StatusConditions[];
|
||||
extern const u16 gMovesWithQuietBGM[];
|
||||
extern const u8 *const gBattleAnims_Moves[];
|
||||
|
||||
#endif // GUARD_BATTLE_ANIM_H
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define GUARD_BATTLE_MESSAGE_H
|
||||
|
||||
#include "global.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
|
||||
// for 0xFD
|
||||
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
#define ANIM_TAG_SPOTLIGHT (ANIM_SPRITES_START + 227)
|
||||
#define ANIM_TAG_LETTER_Z (ANIM_SPRITES_START + 228)
|
||||
#define ANIM_TAG_RAPID_SPIN (ANIM_SPRITES_START + 229)
|
||||
#define ANIM_TAG_TRI_FORCE_TRIANGLE (ANIM_SPRITES_START + 230)
|
||||
#define ANIM_TAG_TRI_ATTACK_TRIANGLE (ANIM_SPRITES_START + 230)
|
||||
#define ANIM_TAG_WISP_ORB (ANIM_SPRITES_START + 231)
|
||||
#define ANIM_TAG_WISP_FIRE (ANIM_SPRITES_START + 232)
|
||||
#define ANIM_TAG_GOLD_STARS (ANIM_SPRITES_START + 233)
|
||||
@@ -276,7 +276,7 @@
|
||||
#define ANIM_TAG_GREEN_SPIKE (ANIM_SPRITES_START + 266)
|
||||
#define ANIM_TAG_WHITE_CIRCLE_OF_LIGHT (ANIM_SPRITES_START + 267)
|
||||
#define ANIM_TAG_GLOWY_BLUE_ORB (ANIM_SPRITES_START + 268)
|
||||
#define ANIM_TAG_SAFARI_BAIT (ANIM_SPRITES_START + 269)
|
||||
#define ANIM_TAG_SAFARI_BAIT (ANIM_SPRITES_START + 269)
|
||||
#define ANIM_TAG_WHITE_FEATHER (ANIM_SPRITES_START + 270)
|
||||
#define ANIM_TAG_SPARKLE_6 (ANIM_SPRITES_START + 271)
|
||||
#define ANIM_TAG_SPLASH (ANIM_SPRITES_START + 272)
|
||||
@@ -318,7 +318,7 @@
|
||||
#define SOUND_PAN_TARGET 63
|
||||
|
||||
// move background ids
|
||||
#define BG_DARK_ 0 // the same as BG_DARK but is unused
|
||||
#define BG_NONE 0 // the same as BG_DARK
|
||||
#define BG_DARK 1
|
||||
#define BG_GHOST 2
|
||||
#define BG_PSYCHIC 3
|
||||
@@ -346,59 +346,62 @@
|
||||
#define BG_SOLAR_BEAM_PLAYER 25
|
||||
#define BG_SOLAR_BEAM_CONTESTS 26
|
||||
|
||||
// table ids for general animations
|
||||
#define B_ANIM_CASTFORM_CHANGE 0x0
|
||||
#define B_ANIM_STATS_CHANGE 0x1
|
||||
#define B_ANIM_SUBSTITUTE_FADE 0x2
|
||||
#define B_ANIM_SUBSTITUTE_APPEAR 0x3
|
||||
#define B_ANIM_BAIT_THROW 0x4
|
||||
#define B_ANIM_ITEM_KNOCKOFF 0x5
|
||||
#define B_ANIM_TURN_TRAP 0x6
|
||||
#define B_ANIM_HELD_ITEM_EFFECT 0x7
|
||||
#define B_ANIM_SMOKEBALL_ESCAPE 0x8
|
||||
#define B_ANIM_FOCUS_BAND 0x9
|
||||
#define B_ANIM_RAIN_CONTINUES 0xA
|
||||
#define B_ANIM_SUN_CONTINUES 0xB
|
||||
#define B_ANIM_SANDSTORM_CONTINUES 0xC
|
||||
#define B_ANIM_HAIL_CONTINUES 0xD
|
||||
#define B_ANIM_LEECH_SEED_DRAIN 0xE
|
||||
#define B_ANIM_MON_HIT 0xF
|
||||
#define B_ANIM_ITEM_STEAL 0x10
|
||||
#define B_ANIM_SNATCH_MOVE 0x11
|
||||
#define B_ANIM_FUTURE_SIGHT_HIT 0x12
|
||||
#define B_ANIM_DOOM_DESIRE_HIT 0x13
|
||||
#define B_ANIM_FOCUS_PUNCH_SETUP 0x14
|
||||
#define B_ANIM_INGRAIN_HEAL 0x15
|
||||
#define B_ANIM_WISH_HEAL 0x16
|
||||
#define B_ANIM_MON_SCARED 0x17
|
||||
#define B_ANIM_GHOST_GET_OUT 0x18
|
||||
#define B_ANIM_SILPH_SCOPED 0x19
|
||||
#define B_ANIM_ROCK_THROW 0x1A
|
||||
#define B_ANIM_SAFARI_REACTION 0x1B
|
||||
// table ids for general animations (gBattleAnims_General)
|
||||
#define B_ANIM_CASTFORM_CHANGE 0
|
||||
#define B_ANIM_STATS_CHANGE 1
|
||||
#define B_ANIM_SUBSTITUTE_FADE 2
|
||||
#define B_ANIM_SUBSTITUTE_APPEAR 3
|
||||
#define B_ANIM_BAIT_THROW 4
|
||||
#define B_ANIM_ITEM_KNOCKOFF 5
|
||||
#define B_ANIM_TURN_TRAP 6
|
||||
#define B_ANIM_HELD_ITEM_EFFECT 7
|
||||
#define B_ANIM_SMOKEBALL_ESCAPE 8
|
||||
#define B_ANIM_FOCUS_BAND 9
|
||||
#define B_ANIM_RAIN_CONTINUES 10
|
||||
#define B_ANIM_SUN_CONTINUES 11
|
||||
#define B_ANIM_SANDSTORM_CONTINUES 12
|
||||
#define B_ANIM_HAIL_CONTINUES 13
|
||||
#define B_ANIM_LEECH_SEED_DRAIN 14
|
||||
#define B_ANIM_MON_HIT 15
|
||||
#define B_ANIM_ITEM_STEAL 16
|
||||
#define B_ANIM_SNATCH_MOVE 17
|
||||
#define B_ANIM_FUTURE_SIGHT_HIT 18
|
||||
#define B_ANIM_DOOM_DESIRE_HIT 19
|
||||
#define B_ANIM_FOCUS_PUNCH_SETUP 20
|
||||
#define B_ANIM_INGRAIN_HEAL 21
|
||||
#define B_ANIM_WISH_HEAL 22
|
||||
#define B_ANIM_MON_SCARED 23
|
||||
#define B_ANIM_GHOST_GET_OUT 24
|
||||
#define B_ANIM_SILPH_SCOPED 25
|
||||
#define B_ANIM_ROCK_THROW 26
|
||||
#define B_ANIM_SAFARI_REACTION 27
|
||||
|
||||
// special animations table
|
||||
#define B_ANIM_LVL_UP 0x0
|
||||
#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1
|
||||
#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2
|
||||
#define B_ANIM_BALL_THROW 0x3
|
||||
#define B_ANIM_SAFARI_BALL_THROW 0x4
|
||||
#define B_ANIM_SUBSTITUTE_TO_MON 0x5
|
||||
#define B_ANIM_MON_TO_SUBSTITUTE 0x6
|
||||
// special animations table (gBattleAnims_Special)
|
||||
#define B_ANIM_LVL_UP 0
|
||||
#define B_ANIM_SWITCH_OUT_PLAYER_MON 1
|
||||
#define B_ANIM_SWITCH_OUT_OPPONENT_MON 2
|
||||
#define B_ANIM_BALL_THROW 3
|
||||
#define B_ANIM_BALL_THROW_WITH_TRAINER 4
|
||||
#define B_ANIM_SUBSTITUTE_TO_MON 5
|
||||
#define B_ANIM_MON_TO_SUBSTITUTE 6
|
||||
|
||||
// status animation table
|
||||
#define B_ANIM_STATUS_PSN 0x0
|
||||
#define B_ANIM_STATUS_CONFUSION 0x1
|
||||
#define B_ANIM_STATUS_BRN 0x2
|
||||
#define B_ANIM_STATUS_INFATUATION 0x3
|
||||
#define B_ANIM_STATUS_SLP 0x4
|
||||
#define B_ANIM_STATUS_PRZ 0x5
|
||||
#define B_ANIM_STATUS_FRZ 0x6
|
||||
#define B_ANIM_STATUS_CURSED 0x7
|
||||
#define B_ANIM_STATUS_NIGHTMARE 0x8
|
||||
#define B_ANIM_STATUS_WRAPPED 0x9 // does not actually exist
|
||||
// status animation table (gBattleAnims_StatusConditions)
|
||||
#define B_ANIM_STATUS_PSN 0
|
||||
#define B_ANIM_STATUS_CONFUSION 1
|
||||
#define B_ANIM_STATUS_BRN 2
|
||||
#define B_ANIM_STATUS_INFATUATION 3
|
||||
#define B_ANIM_STATUS_SLP 4
|
||||
#define B_ANIM_STATUS_PRZ 5
|
||||
#define B_ANIM_STATUS_FRZ 6
|
||||
#define B_ANIM_STATUS_CURSED 7
|
||||
#define B_ANIM_STATUS_NIGHTMARE 8
|
||||
#define B_ANIM_STATUS_WRAPPED 9 // does not actually exist
|
||||
|
||||
// Most tasks return a value to gBattleAnimArgs[7].
|
||||
#define ARG_RET_ID 0x7
|
||||
#define ARG_RET_ID 7
|
||||
|
||||
// For createsprite macro to use internally
|
||||
#define ANIMSPRITE_IS_TARGET (1 << 7)
|
||||
|
||||
// Trapping Wrap-like moves end turn animation.
|
||||
#define TRAP_ANIM_BIND 0
|
||||
@@ -415,6 +418,22 @@
|
||||
#define ANIM_WEATHER_SANDSTORM 3
|
||||
#define ANIM_WEATHER_HAIL 4
|
||||
|
||||
// Flags given to various functions to indicate which palettes to consider.
|
||||
// Handled by UnpackSelectedBattlePalettes
|
||||
#define F_PAL_BG (1 << 0)
|
||||
#define F_PAL_ATTACKER (1 << 1)
|
||||
#define F_PAL_TARGET (1 << 2)
|
||||
#define F_PAL_ATK_PARTNER (1 << 3)
|
||||
#define F_PAL_DEF_PARTNER (1 << 4)
|
||||
#define F_PAL_ANIM_1 (1 << 5) // Palette set for GetBattleAnimBg1Data/GetBattleAnimBgDataByPriorityRank. Only used (ineffectually?) by Aromatherapy.
|
||||
#define F_PAL_ANIM_2 (1 << 6) // Palette set for GetBattleAnimBgData/GetBattleAnimBgDataByPriorityRank. Unused.
|
||||
#define F_PAL_ATK_SIDE (F_PAL_ATTACKER | F_PAL_ATK_PARTNER)
|
||||
#define F_PAL_DEF_SIDE (F_PAL_TARGET | F_PAL_DEF_PARTNER)
|
||||
#define F_PAL_BATTLERS (F_PAL_ATK_SIDE | F_PAL_DEF_SIDE)
|
||||
// The below are only used by AnimTask_BlendBattleAnimPal to get battler sprite palettes by position rather than by role.
|
||||
// It's redundant with F_PAL_BATTLERS, because they're only ever used together to refer to all the battlers at once.
|
||||
#define F_PAL_BATTLERS_2 (1 << 7 | 1 << 8 | 1 << 9 | 1 << 10)
|
||||
|
||||
// Battle mon back animations.
|
||||
#define BACK_ANIM_NONE 0x00
|
||||
#define BACK_ANIM_H_SLIDE_QUICK 0x01
|
||||
|
||||
@@ -551,10 +551,11 @@
|
||||
#define B_MSG_CREPT_CLOSER 0
|
||||
#define B_MSG_CANT_GET_CLOSER 1
|
||||
|
||||
// gSafariPokeblockResultStringIds
|
||||
#define B_MSG_MON_WATCHING 0
|
||||
#define B_MSG_MON_ANGRY 1
|
||||
#define B_MSG_MON_EATING 2
|
||||
// gSafariReactionStringIds
|
||||
#define B_MSG_MON_WATCHING 0
|
||||
#define B_MSG_MON_ANGRY 1
|
||||
#define B_MSG_MON_EATING 2
|
||||
#define NUM_SAFARI_REACTIONS 3
|
||||
|
||||
// gFlashFireStringIds
|
||||
#define B_MSG_FLASH_FIRE_BOOST 0
|
||||
@@ -0,0 +1,25 @@
|
||||
#ifndef GUARD_RGB_H
|
||||
#define GUARD_RGB_H
|
||||
|
||||
#define GET_R(color) ((color) & 0x1F)
|
||||
#define GET_G(color) (((color) >> 5) & 0x1F)
|
||||
#define GET_B(color) (((color) >> 10) & 0x1F)
|
||||
|
||||
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
|
||||
#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
|
||||
#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F))
|
||||
|
||||
#define RGB_ALPHA (1 << 15)
|
||||
#define IS_ALPHA(color) ((color) & RGB_ALPHA)
|
||||
|
||||
#define RGB_BLACK RGB(0, 0, 0)
|
||||
#define RGB_WHITE RGB(31, 31, 31)
|
||||
#define RGB_RED RGB(31, 0, 0)
|
||||
#define RGB_GREEN RGB(0, 31, 0)
|
||||
#define RGB_BLUE RGB(0, 0, 31)
|
||||
#define RGB_YELLOW RGB(31, 31, 0)
|
||||
#define RGB_MAGENTA RGB(31, 0, 31)
|
||||
#define RGB_CYAN RGB(0, 31, 31)
|
||||
#define RGB_WHITEALPHA (RGB_WHITE | RGB_ALPHA)
|
||||
|
||||
#endif // GUARD_RGB_H
|
||||
@@ -14,6 +14,10 @@ struct MonCoords
|
||||
u8 y_offset;
|
||||
};
|
||||
|
||||
#define MON_COORDS_SIZE(width, height)(DIV_ROUND_UP(width, 8) << 4 | DIV_ROUND_UP(height, 8))
|
||||
#define GET_MON_COORDS_WIDTH(size)((size >> 4) * 8)
|
||||
#define GET_MON_COORDS_HEIGHT(size)((size & 0xF) * 8)
|
||||
|
||||
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
|
||||
extern const u8 gMoveNames[][13];
|
||||
|
||||
|
||||
@@ -79,20 +79,6 @@
|
||||
|
||||
#define TOTAL_OBJ_TILE_COUNT 1024
|
||||
|
||||
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
|
||||
#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
|
||||
#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F))
|
||||
|
||||
#define RGB_BLACK RGB(0, 0, 0)
|
||||
#define RGB_WHITE RGB(31, 31, 31)
|
||||
#define RGB_RED RGB(31, 0, 0)
|
||||
#define RGB_GREEN RGB(0, 31, 0)
|
||||
#define RGB_BLUE RGB(0, 0, 31)
|
||||
#define RGB_YELLOW RGB(31, 31, 0)
|
||||
#define RGB_MAGENTA RGB(31, 0, 31)
|
||||
#define RGB_CYAN RGB(0, 31, 31)
|
||||
#define RGB_WHITEALPHA (RGB_WHITE | 0x8000)
|
||||
|
||||
// Some functions are strictly inline asm
|
||||
#define NAKED __attribute__((naked))
|
||||
#define UNUSED __attribute__((unused))
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "constants/vars.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/easy_chat.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
// Prevent cross-jump optimization.
|
||||
#define BLOCK_CROSS_JUMP asm("");
|
||||
|
||||
+8
-4
@@ -3687,6 +3687,10 @@ extern const u32 gBattleStatMask8_Pal[];
|
||||
extern const u32 gBattleStatMask1_Tilemap[];
|
||||
extern const u32 gBattleStatMask2_Tilemap[];
|
||||
|
||||
extern const u32 gSmokescreenImpactTiles[];
|
||||
extern const u32 gSmokescreenImpactPalette[];
|
||||
extern const u32 gEnemyMonShadow_Gfx[];
|
||||
|
||||
// battle anim particle gfx
|
||||
extern const u32 gBattleAnimSpriteGfx_Bone[];
|
||||
extern const u32 gBattleAnimSpriteGfx_Spark[];
|
||||
@@ -3908,7 +3912,7 @@ extern const u32 gBattleAnimSpriteGfx_Pokeball[];
|
||||
extern const u32 gBattleAnimSpriteGfx_Spotlight[];
|
||||
extern const u32 gBattleAnimSpriteGfx_LetterZ[];
|
||||
extern const u32 gBattleAnimSpriteGfx_RapidSpin[];
|
||||
extern const u32 gBattleAnimSpriteGfx_TriForceTriangle[];
|
||||
extern const u32 gBattleAnimSpriteGfx_TriAttackTriangle[];
|
||||
extern const u32 gBattleAnimSpriteGfx_WispOrb[];
|
||||
extern const u32 gBattleAnimSpriteGfx_WispFire[];
|
||||
extern const u32 gBattleAnimSpriteGfx_GoldStars[];
|
||||
@@ -4161,7 +4165,7 @@ extern const u32 gBattleAnimSpritePal_JaggedMusicNote[];
|
||||
extern const u32 gBattleAnimSpritePal_Pokeball[];
|
||||
extern const u32 gBattleAnimSpritePal_LetterZ[];
|
||||
extern const u32 gBattleAnimSpritePal_RapidSpin[];
|
||||
extern const u32 gBattleAnimSpritePal_TriForceTriangle[];
|
||||
extern const u32 gBattleAnimSpritePal_TriAttackTriangle[];
|
||||
extern const u32 gBattleAnimSpritePal_WispOrb[];
|
||||
extern const u32 gBattleAnimSpritePal_GoldStars[];
|
||||
extern const u32 gBattleAnimSpritePal_EclipsingOrb[];
|
||||
@@ -4215,8 +4219,8 @@ extern const u32 gBattleAnimSpritePal_WhipHit[];
|
||||
extern const u32 gBattleAnimSpritePal_BlueRing2[];
|
||||
|
||||
// battle anim task
|
||||
extern const u32 gUnknown_D2EC24_Gfx[];
|
||||
extern const u32 gUnknown_D2EC24_Tilemap[];
|
||||
extern const u32 gUnusedLevelupAnimationGfx[];
|
||||
extern const u32 gUnusedLevelupAnimationTilemap[];
|
||||
extern const u32 gCureBubblesGfx[];
|
||||
extern const u32 gCureBubblesPal[];
|
||||
extern const u32 gCureBubblesTilemap[];
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ void sub_80716F8(const u16 *src, u16 *dst, u16 count, u8 a4);
|
||||
void sub_80717A8(u32 a1, s8 a2, u8 a3, u8 a4, u16 a5, u8 a6, u8 a7);
|
||||
bool32 sub_807185C(u8 var);
|
||||
void sub_8071898(void);
|
||||
void ResetPaletteStructByUid(u16 a1);
|
||||
void PaletteStruct_ResetById(u16 a1);
|
||||
void ResetPaletteStruct(u8 paletteNum);
|
||||
|
||||
#endif // GUARD_PALETTE_H
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "global.h"
|
||||
|
||||
#define MAX_SPRITES 64
|
||||
#define SPRITE_NONE 0xFF
|
||||
#define TAG_NONE 0xFFFF
|
||||
|
||||
struct SpriteSheet
|
||||
|
||||
+32
-32
@@ -81,7 +81,7 @@ SECTIONS {
|
||||
src/blend_palette.o(.text);
|
||||
src/daycare.o(.text);
|
||||
src/battle_interface.o(.text);
|
||||
src/smokescreen.o(.text);
|
||||
src/battle_anim_smokescreen.o(.text);
|
||||
src/pokeball.o(.text);
|
||||
src/load_save.o(.text);
|
||||
src/trade.o(.text);
|
||||
@@ -162,21 +162,21 @@ SECTIONS {
|
||||
src/item_use.o(.text);
|
||||
src/battle_anim_effects_1.o(.text);
|
||||
src/battle_anim_effects_2.o(.text);
|
||||
src/water.o(.text);
|
||||
src/fire.o(.text);
|
||||
src/electric.o(.text);
|
||||
src/ice.o(.text);
|
||||
src/fighting.o(.text);
|
||||
src/poison.o(.text);
|
||||
src/flying.o(.text);
|
||||
src/psychic.o(.text);
|
||||
src/bug.o(.text);
|
||||
src/rock.o(.text);
|
||||
src/ghost.o(.text);
|
||||
src/dragon.o(.text);
|
||||
src/dark.o(.text);
|
||||
src/ground.o(.text);
|
||||
src/normal.o(.text);
|
||||
src/battle_anim_water.o(.text);
|
||||
src/battle_anim_fire.o(.text);
|
||||
src/battle_anim_electric.o(.text);
|
||||
src/battle_anim_ice.o(.text);
|
||||
src/battle_anim_fight.o(.text);
|
||||
src/battle_anim_poison.o(.text);
|
||||
src/battle_anim_flying.o(.text);
|
||||
src/battle_anim_psychic.o(.text);
|
||||
src/battle_anim_bug.o(.text);
|
||||
src/battle_anim_rock.o(.text);
|
||||
src/battle_anim_ghost.o(.text);
|
||||
src/battle_anim_dragon.o(.text);
|
||||
src/battle_anim_dark.o(.text);
|
||||
src/battle_anim_ground.o(.text);
|
||||
src/battle_anim_normal.o(.text);
|
||||
src/battle_anim_utility_funcs.o(.text);
|
||||
src/battle_intro.o(.text);
|
||||
src/bike.o(.text);
|
||||
@@ -409,7 +409,7 @@ SECTIONS {
|
||||
src/battle_util.o(.rodata);
|
||||
src/battle_script_commands.o(.rodata);
|
||||
src/battle_controller_player.o(.rodata);
|
||||
data/smokescreen.o(.rodata);
|
||||
src/battle_anim_smokescreen.o(.rodata);
|
||||
src/battle_controller_opponent.o(.rodata);
|
||||
src/battle_controller_link_opponent.o(.rodata);
|
||||
src/pokemon.o(.rodata);
|
||||
@@ -474,21 +474,21 @@ SECTIONS {
|
||||
src/item_use.o(.rodata);
|
||||
src/battle_anim_effects_1.o(.rodata);
|
||||
src/battle_anim_effects_2.o(.rodata);
|
||||
src/water.o(.rodata);
|
||||
src/fire.o(.rodata);
|
||||
src/electric.o(.rodata);
|
||||
src/ice.o(.rodata);
|
||||
src/fighting.o(.rodata);
|
||||
src/poison.o(.rodata);
|
||||
src/flying.o(.rodata);
|
||||
src/psychic.o(.rodata);
|
||||
src/bug.o(.rodata);
|
||||
src/rock.o(.rodata);
|
||||
src/ghost.o(.rodata);
|
||||
src/dragon.o(.rodata);
|
||||
src/dark.o(.rodata);
|
||||
src/ground.o(.rodata);
|
||||
src/normal.o(.rodata);
|
||||
src/battle_anim_water.o(.rodata);
|
||||
src/battle_anim_fire.o(.rodata);
|
||||
src/battle_anim_electric.o(.rodata);
|
||||
src/battle_anim_ice.o(.rodata);
|
||||
src/battle_anim_fight.o(.rodata);
|
||||
src/battle_anim_poison.o(.rodata);
|
||||
src/battle_anim_flying.o(.rodata);
|
||||
src/battle_anim_psychic.o(.rodata);
|
||||
src/battle_anim_bug.o(.rodata);
|
||||
src/battle_anim_rock.o(.rodata);
|
||||
src/battle_anim_ghost.o(.rodata);
|
||||
src/battle_anim_dragon.o(.rodata);
|
||||
src/battle_anim_dark.o(.rodata);
|
||||
src/battle_anim_ground.o(.rodata);
|
||||
src/battle_anim_normal.o(.rodata);
|
||||
src/battle_anim_utility_funcs.o(.rodata);
|
||||
src/battle_intro.o(.rodata);
|
||||
src/bike.o(.rodata);
|
||||
|
||||
@@ -1714,13 +1714,13 @@ static void Cmd_if_random_safari_flee(void)
|
||||
{
|
||||
u8 safariFleeRate;
|
||||
|
||||
if (gBattleStruct->safariGoNearCounter)
|
||||
if (gBattleStruct->safariRockThrowCounter)
|
||||
{
|
||||
safariFleeRate = gBattleStruct->safariEscapeFactor * 2;
|
||||
if (safariFleeRate > 20)
|
||||
safariFleeRate = 20;
|
||||
}
|
||||
else if (gBattleStruct->safariPkblThrowCounter != 0)
|
||||
else if (gBattleStruct->safariBaitThrowCounter != 0)
|
||||
{
|
||||
safariFleeRate = gBattleStruct->safariEscapeFactor / 4;
|
||||
if (safariFleeRate == 0)
|
||||
|
||||
+200
-1811
File diff suppressed because it is too large
Load Diff
@@ -6,16 +6,16 @@
|
||||
static void AnimMegahornHorn(struct Sprite *sprite);
|
||||
static void AnimLeechLifeNeedle(struct Sprite *sprite);
|
||||
static void AnimTranslateWebThread(struct Sprite *sprite);
|
||||
static void AnimTranslateWebThread_Step(struct Sprite *sprite);
|
||||
static void AnimStringWrap(struct Sprite *sprite);
|
||||
static void AnimStringWrap_Step(struct Sprite *sprite);
|
||||
static void AnimSpiderWeb(struct Sprite *sprite);
|
||||
static void AnimSpiderWeb_Step(struct Sprite *sprite);
|
||||
static void AnimSpiderWeb_End(struct Sprite *sprite);
|
||||
static void AnimTranslateStinger(struct Sprite *sprite);
|
||||
static void AnimMissileArc(struct Sprite *sprite);
|
||||
static void AnimMissileArc_Step(struct Sprite *sprite);
|
||||
static void AnimTailGlowOrb(struct Sprite *sprite);
|
||||
static void sub_80B41C0(struct Sprite *sprite);
|
||||
static void sub_80B4274(struct Sprite *sprite);
|
||||
static void sub_80B42E8(struct Sprite *sprite);
|
||||
static void sub_80B4344(struct Sprite *sprite);
|
||||
static void AnimMissileArcStep(struct Sprite *sprite);
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_MegahornHorn_0[] =
|
||||
{
|
||||
@@ -210,11 +210,11 @@ static void AnimMegahornHorn(struct Sprite *sprite)
|
||||
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
}
|
||||
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
|
||||
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
sprite->callback = StartAnimLinearTranslation;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
@@ -231,11 +231,11 @@ static void AnimLeechLifeNeedle(struct Sprite *sprite)
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
}
|
||||
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
|
||||
sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
|
||||
sprite->data[0] = gBattleAnimArgs[2];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->callback = StartAnimLinearTranslation;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
@@ -257,19 +257,19 @@ static void AnimTranslateWebThread(struct Sprite *sprite)
|
||||
sprite->data[3] = sprite->y;
|
||||
if (!gBattleAnimArgs[4])
|
||||
{
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
|
||||
}
|
||||
BattleAnim_InitLinearTranslationWithDuration(sprite);
|
||||
InitAnimLinearTranslationWithSpeed(sprite);
|
||||
sprite->data[5] = gBattleAnimArgs[3];
|
||||
sprite->callback = sub_80B41C0;
|
||||
sprite->callback = AnimTranslateWebThread_Step;
|
||||
}
|
||||
|
||||
static void sub_80B41C0(struct Sprite *sprite)
|
||||
static void AnimTranslateWebThread_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (AnimTranslateLinear(sprite))
|
||||
{
|
||||
@@ -290,10 +290,10 @@ static void AnimStringWrap(struct Sprite *sprite)
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
||||
sprite->y += 8;
|
||||
sprite->callback = sub_80B4274;
|
||||
sprite->callback = AnimStringWrap_Step;
|
||||
}
|
||||
|
||||
static void sub_80B4274(struct Sprite *sprite)
|
||||
static void AnimStringWrap_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[0] == 3)
|
||||
{
|
||||
@@ -311,10 +311,10 @@ static void AnimSpiderWeb(struct Sprite *sprite)
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
|
||||
sprite->data[0] = 16;
|
||||
sprite->callback = sub_80B42E8;
|
||||
sprite->callback = AnimSpiderWeb_Step;
|
||||
}
|
||||
|
||||
static void sub_80B42E8(struct Sprite *sprite)
|
||||
static void AnimSpiderWeb_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[2] < 20)
|
||||
{
|
||||
@@ -328,12 +328,12 @@ static void sub_80B42E8(struct Sprite *sprite)
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = sub_80B4344;
|
||||
sprite->callback = AnimSpiderWeb_End;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B4344(struct Sprite *sprite)
|
||||
static void AnimSpiderWeb_End(struct Sprite *sprite)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
@@ -377,8 +377,8 @@ static void AnimTranslateStinger(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
InitSpritePosToAnimAttacker(sprite, 1);
|
||||
lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
|
||||
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
|
||||
lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
rot = ArcTan2Neg(lVarX - sprite->x, lVarY - sprite->y);
|
||||
rot += 0xC000;
|
||||
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot);
|
||||
@@ -402,15 +402,15 @@ static void AnimMissileArc(struct Sprite *sprite)
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
sprite->data[5] = gBattleAnimArgs[5];
|
||||
InitAnimArcTranslation(sprite);
|
||||
sprite->callback = AnimMissileArcStep;
|
||||
sprite->callback = AnimMissileArc_Step;
|
||||
sprite->invisible = TRUE;
|
||||
}
|
||||
|
||||
static void AnimMissileArcStep(struct Sprite *sprite)
|
||||
static void AnimMissileArc_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = FALSE;
|
||||
|
||||
@@ -447,15 +447,15 @@ static void AnimMissileArcStep(struct Sprite *sprite)
|
||||
|
||||
static void AnimTailGlowOrb(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18;
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 18;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18;
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 18;
|
||||
}
|
||||
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
||||
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
|
||||
@@ -6,23 +6,24 @@
|
||||
#include "trig.h"
|
||||
#include "util.h"
|
||||
|
||||
static void sub_80B7ACC(struct Sprite *sprite);
|
||||
static void AnimUnusedBagSteal(struct Sprite *sprite);
|
||||
static void AnimUnusedBagSteal_Step(struct Sprite *sprite);
|
||||
static void AnimBite(struct Sprite *sprite);
|
||||
static void AnimTearDrop(struct Sprite *sprite);
|
||||
static void AnimClawSlash(struct Sprite *sprite);
|
||||
static void AnimTask_AttackerFadeToInvisible_Step(u8 taskId);
|
||||
static void AnimTask_AttackerFadeFromInvisible_Step(u8 taskId);
|
||||
static void sub_80B7B48(struct Sprite *sprite);
|
||||
static void sub_80B7C10(struct Sprite *sprite);
|
||||
static void sub_80B7C50(struct Sprite *sprite);
|
||||
static void sub_80B7D88(struct Sprite *sprite);
|
||||
static void sub_80B856C(u8 priority);
|
||||
static void sub_80B7F58(u8 taskId);
|
||||
static void sub_80B843C(struct Task *task);
|
||||
static void sub_80B82C0(u8 taskId);
|
||||
static void sub_80B8920(u8 taskId);
|
||||
static void AnimBite_Step1(struct Sprite *sprite);
|
||||
static void AnimBite_Step2(struct Sprite *sprite);
|
||||
static void AnimTearDrop_Step(struct Sprite *sprite);
|
||||
static void SetAllBattlersSpritePriority(u8 priority);
|
||||
static void AnimTask_MoveAttackerMementoShadow_Step(u8 taskId);
|
||||
static void DoMementoShadowEffect(struct Task *task);
|
||||
static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId);
|
||||
static void AnimTask_MetallicShine_Step(u8 taskId);
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E7878 =
|
||||
// Unused
|
||||
const struct SpriteTemplate sUnusedBagStealSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_TIED_BAG,
|
||||
.paletteTag = ANIM_TAG_TIED_BAG,
|
||||
@@ -30,7 +31,7 @@ const struct SpriteTemplate gUnknown_83E7878 =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80B7ACC,
|
||||
.callback = AnimUnusedBagSteal,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_Bite_0[] =
|
||||
@@ -265,7 +266,7 @@ void AnimTask_InitAttackerFadeFromInvisible(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
static void sub_80B7ACC(struct Sprite *sprite)
|
||||
static void AnimUnusedBagSteal(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
@@ -276,11 +277,11 @@ static void sub_80B7ACC(struct Sprite *sprite)
|
||||
sprite->data[3] = -sprite->data[1];
|
||||
sprite->data[4] = -sprite->data[2];
|
||||
sprite->data[6] = 0xFFD8;
|
||||
sprite->callback = sub_80B7B48;
|
||||
sprite->callback = AnimUnusedBagSteal_Step;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_80B7B48(struct Sprite *sprite)
|
||||
static void AnimUnusedBagSteal_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[3] += sprite->data[1];
|
||||
sprite->data[4] += sprite->data[2];
|
||||
@@ -306,6 +307,7 @@ static void sub_80B7B48(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
// Move sprite inward for Bite/Crunch and Clamp
|
||||
static void AnimBite(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
@@ -314,20 +316,20 @@ static void AnimBite(struct Sprite *sprite)
|
||||
sprite->data[0] = gBattleAnimArgs[3];
|
||||
sprite->data[1] = gBattleAnimArgs[4];
|
||||
sprite->data[2] = gBattleAnimArgs[5];
|
||||
sprite->callback = sub_80B7C10;
|
||||
sprite->callback = AnimBite_Step1;
|
||||
}
|
||||
|
||||
static void sub_80B7C10(struct Sprite *sprite)
|
||||
static void AnimBite_Step1(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[4] += sprite->data[0];
|
||||
sprite->data[5] += sprite->data[1];
|
||||
sprite->x2 = sprite->data[4] >> 8;
|
||||
sprite->y2 = sprite->data[5] >> 8;
|
||||
if (++sprite->data[3] == sprite->data[2])
|
||||
sprite->callback = sub_80B7C50;
|
||||
sprite->callback = AnimBite_Step2;
|
||||
}
|
||||
|
||||
static void sub_80B7C50(struct Sprite *sprite)
|
||||
static void AnimBite_Step2(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[4] -= sprite->data[0];
|
||||
sprite->data[5] -= sprite->data[1];
|
||||
@@ -337,12 +339,13 @@ static void sub_80B7C50(struct Sprite *sprite)
|
||||
DestroySpriteAndMatrix(sprite);
|
||||
}
|
||||
|
||||
// Launches a tear drop away from the battler. Used by Fake Tears
|
||||
static void AnimTearDrop(struct Sprite *sprite)
|
||||
{
|
||||
u8 battler;
|
||||
s8 xOffset;
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battler = gBattleAnimTarget;
|
||||
@@ -376,10 +379,10 @@ static void AnimTearDrop(struct Sprite *sprite)
|
||||
sprite->data[4] = sprite->y + 12;
|
||||
sprite->data[5] = -12;
|
||||
InitAnimArcTranslation(sprite);
|
||||
sprite->callback = sub_80B7D88;
|
||||
sprite->callback = AnimTearDrop_Step;
|
||||
}
|
||||
|
||||
static void sub_80B7D88(struct Sprite *sprite)
|
||||
static void AnimTearDrop_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
DestroySpriteAndMatrix(sprite);
|
||||
@@ -416,7 +419,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
|
||||
scanlineParams.dmaDest = ®_BG1VOFS;
|
||||
var0 = WINOUT_WIN01_BG1;
|
||||
if (!IsContest())
|
||||
gBattle_BG2_X += 240;
|
||||
gBattle_BG2_X += DISPLAY_WIDTH;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -426,7 +429,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
|
||||
scanlineParams.dmaDest = ®_BG2VOFS;
|
||||
var0 = WINOUT_WIN01_BG2;
|
||||
if (!IsContest())
|
||||
gBattle_BG1_X += 240;
|
||||
gBattle_BG1_X += DISPLAY_WIDTH;
|
||||
}
|
||||
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
|
||||
scanlineParams.initState = 1;
|
||||
@@ -436,7 +439,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
|
||||
task->data[0] = 0;
|
||||
task->data[1] = 0;
|
||||
task->data[2] = 0;
|
||||
sub_80B856C(3);
|
||||
SetAllBattlersSpritePriority(3);
|
||||
for (i = 0; i < 112; ++i)
|
||||
{
|
||||
gScanlineEffectRegBuffers[0][i] = task->data[10];
|
||||
@@ -446,12 +449,12 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | (var0 ^ (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR)));
|
||||
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
|
||||
gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
|
||||
gBattle_WIN0V = 160;
|
||||
gBattle_WIN0V = DISPLAY_HEIGHT;
|
||||
|
||||
task->func = sub_80B7F58;
|
||||
task->func = AnimTask_MoveAttackerMementoShadow_Step;
|
||||
}
|
||||
|
||||
static void sub_80B7F58(u8 taskId)
|
||||
static void AnimTask_MoveAttackerMementoShadow_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -477,13 +480,13 @@ static void sub_80B7F58(u8 taskId)
|
||||
break;
|
||||
case 1:
|
||||
task->data[4] -= 8;
|
||||
sub_80B843C(task);
|
||||
DoMementoShadowEffect(task);
|
||||
if (task->data[4] < task->data[8])
|
||||
++task->data[0];
|
||||
break;
|
||||
case 2:
|
||||
task->data[4] -= 8;
|
||||
sub_80B843C(task);
|
||||
DoMementoShadowEffect(task);
|
||||
task->data[14] += 4;
|
||||
task->data[15] -= 4;
|
||||
if (task->data[14] >= task->data[15])
|
||||
@@ -527,12 +530,12 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
|
||||
if (task->data[3] == 1)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
|
||||
gBattle_BG2_X += 240;
|
||||
gBattle_BG2_X += DISPLAY_WIDTH;
|
||||
}
|
||||
else
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
|
||||
gBattle_BG1_X += 240;
|
||||
gBattle_BG1_X += DISPLAY_WIDTH;
|
||||
}
|
||||
++task->data[0];
|
||||
}
|
||||
@@ -549,7 +552,7 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
|
||||
task->data[10] = gBattle_BG2_Y;
|
||||
FillPalette(RGB_BLACK, 9 * 16, 32);
|
||||
}
|
||||
sub_80B856C(3);
|
||||
SetAllBattlersSpritePriority(3);
|
||||
++task->data[0];
|
||||
break;
|
||||
case 2:
|
||||
@@ -592,17 +595,17 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
|
||||
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
|
||||
gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
|
||||
gBattle_WIN0V = 160;
|
||||
gBattle_WIN0V = DISPLAY_HEIGHT;
|
||||
task->data[0] = 0;
|
||||
task->data[1] = 0;
|
||||
task->data[2] = 0;
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8));
|
||||
task->func = sub_80B82C0;
|
||||
task->func = AnimTask_MoveTargetMementoShadow_Step;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B82C0(u8 taskId)
|
||||
static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId)
|
||||
{
|
||||
u8 pos;
|
||||
u16 i;
|
||||
@@ -614,7 +617,7 @@ static void sub_80B82C0(u8 taskId)
|
||||
task->data[5] += 8;
|
||||
if (task->data[5] >= task->data[7])
|
||||
task->data[5] = task->data[7];
|
||||
sub_80B843C(task);
|
||||
DoMementoShadowEffect(task);
|
||||
if (task->data[5] == task->data[7])
|
||||
++task->data[0];
|
||||
break;
|
||||
@@ -632,7 +635,7 @@ static void sub_80B82C0(u8 taskId)
|
||||
task->data[4] += 8;
|
||||
if (task->data[4] >= task->data[6])
|
||||
task->data[4] = task->data[6];
|
||||
sub_80B843C(task);
|
||||
DoMementoShadowEffect(task);
|
||||
if (task->data[4] == task->data[6] && task->data[1])
|
||||
{
|
||||
task->data[1] = 0;
|
||||
@@ -672,7 +675,7 @@ static void sub_80B82C0(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B843C(struct Task *task)
|
||||
static void DoMementoShadowEffect(struct Task *task)
|
||||
{
|
||||
s32 var0, var1, var4;
|
||||
s16 var2, i;
|
||||
@@ -711,15 +714,14 @@ static void sub_80B843C(struct Task *task)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B856C(u8 priority)
|
||||
static void SetAllBattlersSpritePriority(u8 priority)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
|
||||
{
|
||||
u8 spriteId = GetAnimBattlerSpriteId(i);
|
||||
|
||||
if (spriteId != 0xFF)
|
||||
if (spriteId != SPRITE_NONE)
|
||||
gSprites[spriteId].oam.priority = priority;
|
||||
}
|
||||
}
|
||||
@@ -738,7 +740,7 @@ void AnimTask_InitMementoShadow(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void sub_80B8664(u8 taskId)
|
||||
void AnimTask_MementoHandleBg(u8 taskId)
|
||||
{
|
||||
bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE;
|
||||
|
||||
@@ -748,6 +750,7 @@ void sub_80B8664(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
// Animates a deep slash from a claw. Used by Metal Claw, Dragon Claw, and Crush Claw
|
||||
static void AnimClawSlash(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
@@ -799,7 +802,7 @@ void AnimTask_MetallicShine(u8 taskId)
|
||||
else
|
||||
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
|
||||
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
newSpriteId = CreateCloneOfSpriteInWindowMode(gBattleAnimAttacker, spriteId, species);
|
||||
newSpriteId = CreateInvisibleSpriteCopy(gBattleAnimAttacker, spriteId, species);
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
AnimLoadCompressedBgTilemap(animBg.bgId, gMetalShineTilemap);
|
||||
AnimLoadCompressedBgGfx(animBg.bgId, gMetalShineGfx, animBg.tilesOffset);
|
||||
@@ -816,10 +819,10 @@ void AnimTask_MetallicShine(u8 taskId)
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[6] = priorityChanged;
|
||||
gTasks[taskId].func = sub_80B8920;
|
||||
gTasks[taskId].func = AnimTask_MetallicShine_Step;
|
||||
}
|
||||
|
||||
static void sub_80B8920(u8 taskId)
|
||||
static void AnimTask_MetallicShine_Step(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
u16 paletteNum;
|
||||
@@ -863,7 +866,7 @@ static void sub_80B8920(u8 taskId)
|
||||
// Changes battler's palette to either greyscale or original.
|
||||
// arg0: which battler
|
||||
// arg1: 0 grayscale, 1 original
|
||||
void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
|
||||
void AnimTask_SetGrayscaleOrOriginalPal(u8 taskId)
|
||||
{
|
||||
u8 spriteId, battler;
|
||||
bool8 calcSpriteId = FALSE;
|
||||
@@ -871,10 +874,10 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
|
||||
|
||||
switch (gBattleAnimArgs[0])
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case ANIM_ATTACKER:
|
||||
case ANIM_TARGET:
|
||||
case ANIM_ATK_PARTNER:
|
||||
case ANIM_DEF_PARTNER:
|
||||
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
break;
|
||||
case 4:
|
||||
@@ -894,7 +897,7 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
|
||||
calcSpriteId = TRUE;
|
||||
break;
|
||||
default:
|
||||
spriteId = 0xFF;
|
||||
spriteId = SPRITE_NONE;
|
||||
break;
|
||||
}
|
||||
if (calcSpriteId)
|
||||
@@ -903,9 +906,9 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
|
||||
if (IsBattlerSpriteVisible(battler))
|
||||
spriteId = gBattlerSpriteIds[battler];
|
||||
else
|
||||
spriteId = 0xFF;
|
||||
spriteId = SPRITE_NONE;
|
||||
}
|
||||
if (spriteId != 0xFF)
|
||||
if (spriteId != SPRITE_NONE)
|
||||
SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, gBattleAnimArgs[1]);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
@@ -913,8 +916,8 @@ void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
|
||||
void GetIsDoomDesireHitTurn(u8 taskId)
|
||||
{
|
||||
if (gAnimMoveTurn < 2)
|
||||
gBattleAnimArgs[7] = 0;
|
||||
gBattleAnimArgs[ARG_RET_ID] = FALSE;
|
||||
if (gAnimMoveTurn == 2)
|
||||
gBattleAnimArgs[7] = 1;
|
||||
gBattleAnimArgs[ARG_RET_ID] = TRUE;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
@@ -4,19 +4,19 @@
|
||||
#include "task.h"
|
||||
#include "trig.h"
|
||||
|
||||
static void sub_80B725C(struct Sprite *sprite);
|
||||
static void AnimOutrageFlame(struct Sprite *sprite);
|
||||
static void AnimDragonFireToTarget(struct Sprite *sprite);
|
||||
static void AnimDragonRageFirePlume(struct Sprite *sprite);
|
||||
static void AnimDragonDanceOrb(struct Sprite *sprite);
|
||||
static void AnimOverheatFlame(struct Sprite *sprite);
|
||||
static void sub_80B74D8(struct Sprite *sprite);
|
||||
static void sub_80B76B0(u8 taskId);
|
||||
static void sub_80B776C(struct Task *task);
|
||||
static void sub_80B7894(struct Sprite *sprite);
|
||||
static void AnimDragonDanceOrb_Step(struct Sprite *sprite);
|
||||
static void AnimTask_DragonDanceWaver_Step(u8 taskId);
|
||||
static void UpdateDragonDanceScanlineEffect(struct Task *task);
|
||||
static void AnimOverheatFlame_Step(struct Sprite *sprite);
|
||||
|
||||
static EWRAM_DATA u16 gUnknown_20399A4[7] = {0};
|
||||
static EWRAM_DATA u16 sUnusedOverheatData[7] = {0};
|
||||
|
||||
static const union AnimCmd gUnknown_83E7710[] =
|
||||
static const union AnimCmd sAnim_OutrageOverheatFire_0[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 4),
|
||||
ANIMCMD_FRAME(16, 4),
|
||||
@@ -26,9 +26,9 @@ static const union AnimCmd gUnknown_83E7710[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_83E7728[] =
|
||||
static const union AnimCmd *const sAnims_OutrageOverheatFire[] =
|
||||
{
|
||||
gUnknown_83E7710,
|
||||
sAnim_OutrageOverheatFire_0,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gOutrageFlameSpriteTemplate =
|
||||
@@ -36,10 +36,10 @@ const struct SpriteTemplate gOutrageFlameSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_SMALL_EMBER,
|
||||
.paletteTag = ANIM_TAG_SMALL_EMBER,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = gUnknown_83E7728,
|
||||
.anims = sAnims_OutrageOverheatFire,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80B725C,
|
||||
.callback = AnimOutrageFlame,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_DragonBreathFire_0[] =
|
||||
@@ -180,16 +180,16 @@ const struct SpriteTemplate gOverheatFlameSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_SMALL_EMBER,
|
||||
.paletteTag = ANIM_TAG_SMALL_EMBER,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = gUnknown_83E7728,
|
||||
.anims = sAnims_OutrageOverheatFire,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimOverheatFlame,
|
||||
};
|
||||
|
||||
static void sub_80B725C(struct Sprite *sprite)
|
||||
static void AnimOutrageFlame(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
{
|
||||
sprite->x -= gBattleAnimArgs[0];
|
||||
@@ -210,11 +210,11 @@ static void sub_80B725C(struct Sprite *sprite)
|
||||
sprite->callback = TranslateSpriteLinearAndFlicker;
|
||||
}
|
||||
|
||||
static void sub_80B72F8(struct Sprite *sprite)
|
||||
static void StartDragonFireTranslation(struct Sprite *sprite)
|
||||
{
|
||||
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
{
|
||||
sprite->x -= gBattleAnimArgs[1];
|
||||
@@ -239,13 +239,13 @@ static void AnimDragonRageFirePlume(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
|
||||
}
|
||||
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[1]);
|
||||
sprite->y += gBattleAnimArgs[2];
|
||||
@@ -253,11 +253,12 @@ static void AnimDragonRageFirePlume(struct Sprite *sprite)
|
||||
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
||||
}
|
||||
|
||||
// For Dragon Breath and Dragon Rage
|
||||
static void AnimDragonFireToTarget(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
sub_80B72F8(sprite);
|
||||
StartDragonFireTranslation(sprite);
|
||||
}
|
||||
|
||||
static void AnimDragonDanceOrb(struct Sprite *sprite)
|
||||
@@ -265,8 +266,8 @@ static void AnimDragonDanceOrb(struct Sprite *sprite)
|
||||
u16 r5;
|
||||
u16 r0;
|
||||
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[4] = 0;
|
||||
sprite->data[5] = 1;
|
||||
sprite->data[6] = gBattleAnimArgs[0];
|
||||
@@ -278,10 +279,10 @@ static void AnimDragonDanceOrb(struct Sprite *sprite)
|
||||
sprite->data[7] = r0 / 2;
|
||||
sprite->x2 = Cos(sprite->data[6], sprite->data[7]);
|
||||
sprite->y2 = Sin(sprite->data[6], sprite->data[7]);
|
||||
sprite->callback = sub_80B74D8;
|
||||
sprite->callback = AnimDragonDanceOrb_Step;
|
||||
}
|
||||
|
||||
static void sub_80B74D8(struct Sprite *sprite)
|
||||
static void AnimDragonDanceOrb_Step(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
@@ -319,26 +320,28 @@ static void sub_80B74D8(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
// Wavers the attacker back and forth. Progressing vertical wave of scanline shifts
|
||||
// Used by Dragon Dance
|
||||
void AnimTask_DragonDanceWaver(u8 taskId)
|
||||
{
|
||||
struct ScanlineEffectParams sp;
|
||||
struct ScanlineEffectParams scanlineParams;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
u16 i;
|
||||
u8 r1;
|
||||
|
||||
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
|
||||
{
|
||||
sp.dmaDest = ®_BG1HOFS;
|
||||
scanlineParams.dmaDest = ®_BG1HOFS;
|
||||
task->data[2] = gBattle_BG1_X;
|
||||
}
|
||||
else
|
||||
{
|
||||
sp.dmaDest = ®_BG2HOFS;
|
||||
scanlineParams.dmaDest = ®_BG2HOFS;
|
||||
task->data[2] = gBattle_BG2_X;
|
||||
}
|
||||
sp.dmaControl = 0xA2600001;
|
||||
sp.initState = 1;
|
||||
sp.unused9 = 0;
|
||||
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
|
||||
scanlineParams.initState = 1;
|
||||
scanlineParams.unused9 = 0;
|
||||
r1 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
|
||||
task->data[3] = r1 - 32;
|
||||
task->data[4] = r1 + 32;
|
||||
@@ -349,11 +352,11 @@ void AnimTask_DragonDanceWaver(u8 taskId)
|
||||
gScanlineEffectRegBuffers[0][i] = task->data[2];
|
||||
gScanlineEffectRegBuffers[1][i] = task->data[2];
|
||||
}
|
||||
ScanlineEffect_SetParams(sp);
|
||||
task->func = sub_80B76B0;
|
||||
ScanlineEffect_SetParams(scanlineParams);
|
||||
task->func = AnimTask_DragonDanceWaver_Step;
|
||||
}
|
||||
|
||||
static void sub_80B76B0(u8 taskId)
|
||||
static void AnimTask_DragonDanceWaver_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -366,12 +369,12 @@ static void sub_80B76B0(u8 taskId)
|
||||
if (++task->data[6] == 3)
|
||||
++task->data[0];
|
||||
}
|
||||
sub_80B776C(task);
|
||||
UpdateDragonDanceScanlineEffect(task);
|
||||
break;
|
||||
case 1:
|
||||
if (++task->data[1] > 0x3C)
|
||||
++task->data[0];
|
||||
sub_80B776C(task);
|
||||
UpdateDragonDanceScanlineEffect(task);
|
||||
break;
|
||||
case 2:
|
||||
if (++task->data[7] > 1)
|
||||
@@ -380,7 +383,7 @@ static void sub_80B76B0(u8 taskId)
|
||||
if (--task->data[6] == 0)
|
||||
++task->data[0];
|
||||
}
|
||||
sub_80B776C(task);
|
||||
UpdateDragonDanceScanlineEffect(task);
|
||||
break;
|
||||
case 3:
|
||||
gScanlineEffect.state = 3;
|
||||
@@ -392,7 +395,7 @@ static void sub_80B76B0(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B776C(struct Task *task)
|
||||
static void UpdateDragonDanceScanlineEffect(struct Task *task)
|
||||
{
|
||||
u16 i, r3 = task->data[5];
|
||||
|
||||
@@ -406,21 +409,21 @@ static void sub_80B776C(struct Task *task)
|
||||
|
||||
static void AnimOverheatFlame(struct Sprite *sprite)
|
||||
{
|
||||
s32 i, r6 = (gBattleAnimArgs[2] * 3) / 5;
|
||||
s32 i, yAmplitude = (gBattleAnimArgs[2] * 3) / 5;
|
||||
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[4];
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[4];
|
||||
sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]);
|
||||
sprite->data[2] = Sin(gBattleAnimArgs[1], r6);
|
||||
sprite->data[2] = Sin(gBattleAnimArgs[1], yAmplitude);
|
||||
sprite->x += sprite->data[1] * gBattleAnimArgs[0];
|
||||
sprite->y += sprite->data[2] * gBattleAnimArgs[0];
|
||||
sprite->data[3] = gBattleAnimArgs[3];
|
||||
sprite->callback = sub_80B7894;
|
||||
sprite->callback = AnimOverheatFlame_Step;
|
||||
for (i = 0; i < 7; ++i)
|
||||
gUnknown_20399A4[i] = sprite->data[i];
|
||||
sUnusedOverheatData[i] = sprite->data[i];
|
||||
}
|
||||
|
||||
static void sub_80B7894(struct Sprite *sprite)
|
||||
static void AnimOverheatFlame_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[4] += sprite->data[1];
|
||||
sprite->data[5] += sprite->data[2];
|
||||
+498
-431
File diff suppressed because it is too large
Load Diff
+257
-204
File diff suppressed because it is too large
Load Diff
+372
-255
File diff suppressed because it is too large
Load Diff
@@ -5,9 +5,9 @@
|
||||
#include "constants/songs.h"
|
||||
|
||||
static void AnimLightning(struct Sprite *sprite);
|
||||
static void sub_80ADC58(struct Sprite *sprite);
|
||||
static void sub_80ADCB8(struct Sprite *sprite);
|
||||
static void sub_80ADD4C(struct Sprite *sprite);
|
||||
static void AnimUnusedSpinningFist(struct Sprite *sprite);
|
||||
static void AnimUnusedCirclingShock(struct Sprite *sprite);
|
||||
static void AnimSparkElectricity(struct Sprite *sprite);
|
||||
static void AnimZapCannonSpark(struct Sprite *sprite);
|
||||
static void AnimThunderboltOrb(struct Sprite *sprite);
|
||||
static void AnimSparkElectricityFlashing(struct Sprite *sprite);
|
||||
@@ -20,19 +20,19 @@ static void AnimVoltTackleOrbSlide(struct Sprite *sprite);
|
||||
static void AnimVoltTackleBolt(struct Sprite *sprite);
|
||||
static void AnimGrowingShockWaveOrb(struct Sprite *sprite);
|
||||
static void AnimShockWaveProgressingBolt(struct Sprite *sprite);
|
||||
static void sub_80ADC3C(struct Sprite *sprite);
|
||||
static void sub_80ADC9C(struct Sprite *sprite);
|
||||
static void sub_80ADF38(struct Sprite *sprite);
|
||||
static void sub_80AE130(struct Sprite *sprite);
|
||||
static void sub_80AE278(u8 taskId);
|
||||
static void sub_80AE4F4(struct Sprite *sprite);
|
||||
static void sub_80AE5BC(u8 taskId);
|
||||
static void sub_80AE704(struct Sprite *sprite);
|
||||
static void sub_80AE83C(struct Sprite *sprite);
|
||||
static bool8 sub_80AEB98(struct Task *task, u8 taskId);
|
||||
static bool8 sub_80AEE74(struct Task *task, u8 taskId);
|
||||
static bool8 sub_80AF058(struct Task *task, u8 taskId);
|
||||
static void sub_80AF0C8(struct Sprite *sprite);
|
||||
static void AnimLightning_Step(struct Sprite *sprite);
|
||||
static void AnimUnusedSpinningFist_Step(struct Sprite *sprite);
|
||||
static void AnimZapCannonSpark_Step(struct Sprite *sprite);
|
||||
static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite);
|
||||
static void AnimTask_ElectricBolt_Step(u8 taskId);
|
||||
static void AnimThunderWave_Step(struct Sprite *sprite);
|
||||
static void AnimTask_ElectricChargingParticles_Step(u8 taskId);
|
||||
static void AnimElectricChargingParticles(struct Sprite *sprite);
|
||||
static void AnimVoltTackleOrbSlide_Step(struct Sprite *sprite);
|
||||
static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId);
|
||||
static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId);
|
||||
static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId);
|
||||
static void AnimShockWaveLightning(struct Sprite *sprite);
|
||||
|
||||
static const union AnimCmd sAnim_Lightning[] =
|
||||
{
|
||||
@@ -60,7 +60,7 @@ const struct SpriteTemplate gLightningSpriteTemplate =
|
||||
.callback = AnimLightning,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83E5F50[] =
|
||||
static const union AffineAnimCmd sAffineAnim_UnusedSpinningFist[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20),
|
||||
@@ -68,23 +68,23 @@ static const union AffineAnimCmd gUnknown_83E5F50[] =
|
||||
AFFINEANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const gUnknown_83E5F70[] =
|
||||
static const union AffineAnimCmd *const sAffineAnims_UnusedSpinningFist[] =
|
||||
{
|
||||
gUnknown_83E5F50,
|
||||
sAffineAnim_UnusedSpinningFist,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E5F74 =
|
||||
static const struct SpriteTemplate sUnusedSpinningFistSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gUnknown_83E5F70,
|
||||
.callback = sub_80ADC58,
|
||||
.affineAnims = sAffineAnims_UnusedSpinningFist,
|
||||
.callback = AnimUnusedSpinningFist,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_83E5F8C[] =
|
||||
static const union AnimCmd sAnim_UnusedCirclingShock[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_FRAME(16, 5),
|
||||
@@ -95,20 +95,20 @@ static const union AnimCmd gUnknown_83E5F8C[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_83E5FA8[] =
|
||||
static const union AnimCmd *const sAnims_UnusedCirclingShock[] =
|
||||
{
|
||||
gUnknown_83E5F8C,
|
||||
sAnim_UnusedCirclingShock,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E5FAC =
|
||||
static const struct SpriteTemplate sUnusedCirclingShockSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_SHOCK,
|
||||
.paletteTag = ANIM_TAG_SHOCK,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = gUnknown_83E5FA8,
|
||||
.anims = sAnims_UnusedCirclingShock,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80ADCB8,
|
||||
.callback = AnimUnusedCirclingShock,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSparkElectricitySpriteTemplate =
|
||||
@@ -119,7 +119,7 @@ const struct SpriteTemplate gSparkElectricitySpriteTemplate =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80ADD4C,
|
||||
.callback = AnimSparkElectricity,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gZapCannonBallSpriteTemplate =
|
||||
@@ -458,31 +458,31 @@ static void AnimLightning(struct Sprite *sprite)
|
||||
else
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
sprite->callback = sub_80ADC3C;
|
||||
sprite->callback = AnimLightning_Step;
|
||||
}
|
||||
|
||||
static void sub_80ADC3C(struct Sprite *sprite)
|
||||
static void AnimLightning_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->animEnded)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
static void sub_80ADC58(struct Sprite *sprite)
|
||||
static void AnimUnusedSpinningFist(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
sprite->x -= gBattleAnimArgs[0];
|
||||
else
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
sprite->callback = sub_80ADC9C;
|
||||
sprite->callback = AnimUnusedSpinningFist_Step;
|
||||
}
|
||||
|
||||
static void sub_80ADC9C(struct Sprite *sprite)
|
||||
static void AnimUnusedSpinningFist_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->affineAnimEnded)
|
||||
DestroySpriteAndMatrix(sprite);
|
||||
}
|
||||
|
||||
static void sub_80ADCB8(struct Sprite *sprite)
|
||||
static void AnimUnusedCirclingShock(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
@@ -501,10 +501,10 @@ static void sub_80ADCB8(struct Sprite *sprite)
|
||||
sprite->data[2] = gBattleAnimArgs[3];
|
||||
sprite->data[3] = gBattleAnimArgs[4];
|
||||
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
||||
sprite->callback = TranslateSpriteInCircleOverDuration;
|
||||
sprite->callback = TranslateSpriteInCircle;
|
||||
}
|
||||
|
||||
static void sub_80ADD4C(struct Sprite *sprite)
|
||||
static void AnimSparkElectricity(struct Sprite *sprite)
|
||||
{
|
||||
u8 battler;
|
||||
u32 matrixNum;
|
||||
@@ -512,20 +512,20 @@ static void sub_80ADD4C(struct Sprite *sprite)
|
||||
|
||||
switch (gBattleAnimArgs[4])
|
||||
{
|
||||
case 0:
|
||||
case ANIM_ATTACKER:
|
||||
battler = gBattleAnimAttacker;
|
||||
break;
|
||||
case 1:
|
||||
case ANIM_TARGET:
|
||||
default:
|
||||
battler = gBattleAnimTarget;
|
||||
break;
|
||||
case 2:
|
||||
case ANIM_ATK_PARTNER:
|
||||
if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battler = BATTLE_PARTNER(gBattleAnimAttacker);
|
||||
break;
|
||||
case 3:
|
||||
case ANIM_DEF_PARTNER:
|
||||
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
|
||||
battler = BATTLE_PARTNER(gBattleAnimTarget);
|
||||
else
|
||||
@@ -568,11 +568,11 @@ static void AnimZapCannonSpark(struct Sprite *sprite)
|
||||
sprite->data[6] = gBattleAnimArgs[5];
|
||||
sprite->data[7] = gBattleAnimArgs[4];
|
||||
sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
|
||||
sprite->callback = sub_80ADF38;
|
||||
sprite->callback = AnimZapCannonSpark_Step;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_80ADF38(struct Sprite *sprite)
|
||||
static void AnimZapCannonSpark_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (!AnimTranslateLinear(sprite))
|
||||
{
|
||||
@@ -588,7 +588,7 @@ static void sub_80ADF38(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80ADFB0(struct Sprite *sprite)
|
||||
static void AnimThunderboltOrb_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (--sprite->data[5] == -1)
|
||||
{
|
||||
@@ -608,7 +608,7 @@ static void AnimThunderboltOrb(struct Sprite *sprite)
|
||||
sprite->data[3] = gBattleAnimArgs[0];
|
||||
sprite->data[4] = gBattleAnimArgs[3];
|
||||
sprite->data[5] = gBattleAnimArgs[3];
|
||||
sprite->callback = sub_80ADFB0;
|
||||
sprite->callback = AnimThunderboltOrb_Step;
|
||||
}
|
||||
|
||||
static void AnimSparkElectricityFlashing(struct Sprite *sprite)
|
||||
@@ -629,11 +629,11 @@ static void AnimSparkElectricityFlashing(struct Sprite *sprite)
|
||||
sprite->data[6] = gBattleAnimArgs[5];
|
||||
sprite->data[7] = gBattleAnimArgs[4];
|
||||
sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
|
||||
sprite->callback = sub_80AE130;
|
||||
sprite->callback = AnimSparkElectricityFlashing_Step;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_80AE130(struct Sprite *sprite)
|
||||
static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x2 = Sin(sprite->data[7], sprite->data[5]);
|
||||
sprite->y2 = Cos(sprite->data[7], sprite->data[5]);
|
||||
@@ -644,6 +644,7 @@ static void sub_80AE130(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
// Electricity arcs around the target. Used for Paralysis and various electric move hits
|
||||
static void AnimElectricity(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimTarget(sprite, FALSE);
|
||||
@@ -657,15 +658,16 @@ static void AnimElectricity(struct Sprite *sprite)
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
|
||||
// The vertical falling thunder bolt used in Thunder Wave/Shock/Bolt
|
||||
void AnimTask_ElectricBolt(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].func = sub_80AE278;
|
||||
gTasks[taskId].func = AnimTask_ElectricBolt_Step;
|
||||
}
|
||||
|
||||
static void sub_80AE278(u8 taskId)
|
||||
static void AnimTask_ElectricBolt_Step(u8 taskId)
|
||||
{
|
||||
u16 r8;
|
||||
u16 r2;
|
||||
@@ -735,18 +737,19 @@ static void AnimElectricBoltSegment(struct Sprite *sprite)
|
||||
{
|
||||
if (!sprite->data[0])
|
||||
{
|
||||
sprite->oam.shape = ST_OAM_V_RECTANGLE;
|
||||
sprite->oam.size = ST_OAM_SIZE_0;
|
||||
sprite->oam.shape = SPRITE_SHAPE(8x16);
|
||||
sprite->oam.size = SPRITE_SIZE(8x16);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.shape = ST_OAM_SQUARE;
|
||||
sprite->oam.size = ST_OAM_SIZE_1;
|
||||
sprite->oam.shape = SPRITE_SHAPE(16x16);
|
||||
sprite->oam.size = SPRITE_SIZE(16x16);
|
||||
}
|
||||
if (++sprite->data[1] == 15)
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
|
||||
// The horizontal bands of electricity used in Thunder Wave
|
||||
static void AnimThunderWave(struct Sprite *sprite)
|
||||
{
|
||||
u8 spriteId;
|
||||
@@ -756,11 +759,11 @@ static void AnimThunderWave(struct Sprite *sprite)
|
||||
spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority);
|
||||
gSprites[spriteId].oam.tileNum += 8;
|
||||
++gAnimVisualTaskCount;
|
||||
gSprites[spriteId].callback = sub_80AE4F4;
|
||||
sprite->callback = sub_80AE4F4;
|
||||
gSprites[spriteId].callback = AnimThunderWave_Step;
|
||||
sprite->callback = AnimThunderWave_Step;
|
||||
}
|
||||
|
||||
static void sub_80AE4F4(struct Sprite *sprite)
|
||||
static void AnimThunderWave_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[0] == 3)
|
||||
{
|
||||
@@ -771,6 +774,7 @@ static void sub_80AE4F4(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
// Animates small electric orbs moving from around the battler inward. For Charge/Shock Wave
|
||||
void AnimTask_ElectricChargingParticles(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -793,10 +797,10 @@ void AnimTask_ElectricChargingParticles(u8 taskId)
|
||||
task->data[11] = gBattleAnimArgs[3];
|
||||
task->data[12] = 0;
|
||||
task->data[13] = gBattleAnimArgs[2];
|
||||
task->func = sub_80AE5BC;
|
||||
task->func = AnimTask_ElectricChargingParticles_Step;
|
||||
}
|
||||
|
||||
static void sub_80AE5BC(u8 taskId)
|
||||
static void AnimTask_ElectricChargingParticles_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -821,7 +825,7 @@ static void sub_80AE5BC(u8 taskId)
|
||||
sprite->data[4] = task->data[15];
|
||||
sprite->data[5] = taskId;
|
||||
InitAnimLinearTranslation(sprite);
|
||||
StoreSpriteCallbackInData6(sprite, sub_80AE704);
|
||||
StoreSpriteCallbackInData6(sprite, AnimElectricChargingParticles);
|
||||
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
||||
if (++task->data[9] > 15)
|
||||
task->data[9] = 0;
|
||||
@@ -842,7 +846,7 @@ static void sub_80AE5BC(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80AE6D0(struct Sprite *sprite)
|
||||
static void AnimElectricChargingParticles_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (AnimTranslateLinear(sprite))
|
||||
{
|
||||
@@ -851,15 +855,15 @@ static void sub_80AE6D0(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80AE704(struct Sprite *sprite)
|
||||
static void AnimElectricChargingParticles(struct Sprite *sprite)
|
||||
{
|
||||
StartSpriteAnim(sprite, 1);
|
||||
sprite->callback = sub_80AE6D0;
|
||||
sprite->callback = AnimElectricChargingParticles_Step;
|
||||
}
|
||||
|
||||
static void AnimGrowingChargeOrb(struct Sprite *sprite)
|
||||
{
|
||||
if (!gBattleAnimArgs[0])
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
@@ -873,9 +877,10 @@ static void AnimGrowingChargeOrb(struct Sprite *sprite)
|
||||
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
|
||||
}
|
||||
|
||||
// The quick electric burst at the end of Charge / during the Volt Tackle hit
|
||||
static void AnimElectricPuff(struct Sprite *sprite)
|
||||
{
|
||||
if (!gBattleAnimArgs[0])
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
@@ -891,6 +896,7 @@ static void AnimElectricPuff(struct Sprite *sprite)
|
||||
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
||||
}
|
||||
|
||||
// Creates an orb of electricity that grows then slides off-screen. The attacker slides with it
|
||||
static void AnimVoltTackleOrbSlide(struct Sprite *sprite)
|
||||
{
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
@@ -900,10 +906,10 @@ static void AnimVoltTackleOrbSlide(struct Sprite *sprite)
|
||||
sprite->data[7] = 16;
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
|
||||
sprite->data[7] *= -1;
|
||||
sprite->callback = sub_80AE83C;
|
||||
sprite->callback = AnimVoltTackleOrbSlide_Step;
|
||||
}
|
||||
|
||||
static void sub_80AE83C(struct Sprite *sprite)
|
||||
static void AnimVoltTackleOrbSlide_Step(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
@@ -975,6 +981,7 @@ void AnimTask_VoltTackleAttackerReappear(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// The horizontal bolts of electricity for Volt Tackle
|
||||
void AnimTask_VoltTackleBolt(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -1036,7 +1043,7 @@ void AnimTask_VoltTackleBolt(u8 taskId)
|
||||
if (++task->data[2] > 0)
|
||||
{
|
||||
task->data[2] = 0;
|
||||
if (sub_80AEB98(task, taskId) || sub_80AEB98(task, taskId))
|
||||
if (CreateVoltTackleBolt(task, taskId) || CreateVoltTackleBolt(task, taskId))
|
||||
++task->data[0];
|
||||
}
|
||||
break;
|
||||
@@ -1047,7 +1054,7 @@ void AnimTask_VoltTackleBolt(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 sub_80AEB98(struct Task *task, u8 taskId)
|
||||
static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&gVoltTackleBoltSpriteTemplate, task->data[3], task->data[5], 35);
|
||||
|
||||
@@ -1112,7 +1119,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
|
||||
task->data[4] = 7;
|
||||
task->data[5] = -1;
|
||||
task->data[11] = 12;
|
||||
task->data[12] = BattleAnimAdjustPanning(task->data[11] - 76);
|
||||
task->data[12] = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
|
||||
task->data[13] = BattleAnimAdjustPanning(SOUND_PAN_TARGET);
|
||||
task->data[14] = task->data[12];
|
||||
task->data[15] = (task->data[13] - task->data[12]) / 3;
|
||||
@@ -1122,7 +1129,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
|
||||
if (++task->data[1] > 0)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
if (sub_80AEE74(task, taskId))
|
||||
if (CreateShockWaveBoltSprite(task, taskId))
|
||||
{
|
||||
if (task->data[2] == 5)
|
||||
task->data[0] = 3;
|
||||
@@ -1172,7 +1179,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 sub_80AEE74(struct Task *task, u8 taskId)
|
||||
static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&sShockWaveProgressingBoltSpriteTemplate, task->data[6], task->data[7], 35);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
@@ -1206,6 +1213,7 @@ static bool8 sub_80AEE74(struct Task *task, u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// Just runs timer for sprite. See AnimTask_ShockWaveProgressingBolt
|
||||
static void AnimShockWaveProgressingBolt(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[0] > 12)
|
||||
@@ -1234,7 +1242,7 @@ void AnimTask_ShockWaveLightning(u8 taskId)
|
||||
if (++task->data[1] > 1)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
if (sub_80AF058(task, taskId))
|
||||
if (CreateShockWaveLightningSprite(task, taskId))
|
||||
++task->data[0];
|
||||
}
|
||||
break;
|
||||
@@ -1245,13 +1253,13 @@ void AnimTask_ShockWaveLightning(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 sub_80AF058(struct Task *task, u8 taskId)
|
||||
static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&gLightningSpriteTemplate, task->data[13], task->data[14], task->data[12]);
|
||||
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].callback = sub_80AF0C8;
|
||||
gSprites[spriteId].callback = AnimShockWaveLightning;
|
||||
gSprites[spriteId].data[6] = taskId;
|
||||
gSprites[spriteId].data[7] = 10;
|
||||
++task->data[10];
|
||||
@@ -1262,7 +1270,7 @@ static bool8 sub_80AF058(struct Task *task, u8 taskId)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_80AF0C8(struct Sprite *sprite)
|
||||
static void AnimShockWaveLightning(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->animEnded)
|
||||
{
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "task.h"
|
||||
#include "trig.h"
|
||||
|
||||
static void unc_080B08A0(struct Sprite *sprite);
|
||||
static void AnimUnusedHumanoidFoot(struct Sprite *sprite);
|
||||
static void AnimSlideHandOrFootToTarget(struct Sprite *sprite);
|
||||
static void AnimJumpKick(struct Sprite *sprite);
|
||||
static void AnimBasicFistOrFoot(struct Sprite *sprite);
|
||||
@@ -23,19 +23,19 @@ static void AnimSuperpowerFireball(struct Sprite *sprite);
|
||||
static void AnimArmThrustHit(struct Sprite *sprite);
|
||||
static void AnimRevengeScratch(struct Sprite *sprite);
|
||||
static void AnimFocusPunchFist(struct Sprite *sprite);
|
||||
static void sub_80B0B2C(struct Sprite *sprite);
|
||||
static void sub_80B0BD8(struct Sprite *sprite);
|
||||
static void sub_80B0CB4(struct Sprite *sprite);
|
||||
static void AnimFistOrFootRandomPos_Step(struct Sprite *sprite);
|
||||
static void AnimCrossChopHand_Step(struct Sprite *sprite);
|
||||
static void AnimSlidingKick_Step(struct Sprite *sprite);
|
||||
static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite);
|
||||
static void AnimStompFootStep(struct Sprite *sprite);
|
||||
static void AnimStompFootEnd(struct Sprite *sprite);
|
||||
static void sub_80B0EF0(struct Sprite *sprite);
|
||||
static void sub_80B1050(struct Sprite *sprite);
|
||||
static void sub_80B111C(struct Sprite *sprite);
|
||||
static void sub_80B11E4(struct Sprite *sprite);
|
||||
static void sub_80B12A4(struct Sprite *sprite);
|
||||
static void AnimBrickBreakWall_Step(struct Sprite *sprite);
|
||||
static void AnimBrickBreakWallShard_Step(struct Sprite *sprite);
|
||||
static void AnimSuperpowerOrb_Step(struct Sprite *sprite);
|
||||
static void AnimSuperpowerRock_Step1(struct Sprite *sprite);
|
||||
static void AnimSuperpowerRock_Step2(struct Sprite *sprite);
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E668C =
|
||||
static const struct SpriteTemplate sUnusedHumanoidFootSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_HUMANOID_FOOT,
|
||||
.paletteTag = ANIM_TAG_HUMANOID_FOOT,
|
||||
@@ -43,54 +43,46 @@ const struct SpriteTemplate gUnknown_83E668C =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = unc_080B08A0,
|
||||
.callback = AnimUnusedHumanoidFoot,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_HandOrFoot[] =
|
||||
static const union AnimCmd sAnim_Fist[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_SlidingKick_0[] =
|
||||
static const union AnimCmd sAnim_FootWide[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_SlidingKick_1[] =
|
||||
static const union AnimCmd sAnim_FootTall[] =
|
||||
{
|
||||
ANIMCMD_FRAME(32, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_CrossChopHand_0[] =
|
||||
static const union AnimCmd sAnim_HandLeft[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_CrossChopHand_1[] =
|
||||
static const union AnimCmd sAnim_HandRight[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 1, .hFlip = TRUE),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_HandOrFoot[] =
|
||||
static const union AnimCmd *const sAnims_HandsAndFeet[] =
|
||||
{
|
||||
sAnim_HandOrFoot,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_SlidingKick[] =
|
||||
{
|
||||
sAnim_SlidingKick_0,
|
||||
sAnim_SlidingKick_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_CrossChopHand[] =
|
||||
{
|
||||
sAnim_CrossChopHand_0,
|
||||
sAnim_CrossChopHand_1,
|
||||
sAnim_Fist,
|
||||
sAnim_FootWide,
|
||||
sAnim_FootTall,
|
||||
sAnim_HandLeft,
|
||||
sAnim_HandRight,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gKarateChopSpriteTemplate =
|
||||
@@ -98,7 +90,7 @@ const struct SpriteTemplate gKarateChopSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_HandOrFoot,
|
||||
.anims = sAnims_HandsAndFeet,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimSlideHandOrFootToTarget,
|
||||
@@ -109,7 +101,7 @@ const struct SpriteTemplate gJumpKickSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_HandOrFoot,
|
||||
.anims = sAnims_HandsAndFeet,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimJumpKick,
|
||||
@@ -120,7 +112,7 @@ const struct SpriteTemplate gFistFootSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_HandOrFoot,
|
||||
.anims = sAnims_HandsAndFeet,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimBasicFistOrFoot,
|
||||
@@ -131,7 +123,7 @@ const struct SpriteTemplate gFistFootRandomPosSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_HandOrFoot,
|
||||
.anims = sAnims_HandsAndFeet,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimFistOrFootRandomPos,
|
||||
@@ -142,7 +134,7 @@ const struct SpriteTemplate gCrossChopHandSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_CrossChopHand,
|
||||
.anims = &sAnims_HandsAndFeet[3],
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimCrossChopHand,
|
||||
@@ -153,7 +145,7 @@ const struct SpriteTemplate gSlidingKickSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_SlidingKick,
|
||||
.anims = &sAnims_HandsAndFeet[1],
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimSlidingKick,
|
||||
@@ -171,12 +163,13 @@ static const union AffineAnimCmd *const sAffineAnims_SpinningHandOrFoot[] =
|
||||
sAffineAnim_SpinningHandOrFoot,
|
||||
};
|
||||
|
||||
// Blaze Kick / Meteor Mash
|
||||
const struct SpriteTemplate gSpinningHandOrFootSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
|
||||
.anims = sAnims_HandOrFoot,
|
||||
.anims = sAnims_HandsAndFeet,
|
||||
.images = NULL,
|
||||
.affineAnims = sAffineAnims_SpinningHandOrFoot,
|
||||
.callback = AnimSpinningKickOrPunch,
|
||||
@@ -199,7 +192,7 @@ const struct SpriteTemplate gMegaPunchKickSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
|
||||
.anims = sAnims_HandOrFoot,
|
||||
.anims = sAnims_HandsAndFeet,
|
||||
.images = NULL,
|
||||
.affineAnims = sAffineAnims_MegaPunchKick,
|
||||
.callback = AnimSpinningKickOrPunch,
|
||||
@@ -210,7 +203,7 @@ const struct SpriteTemplate gStompFootSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_SlidingKick,
|
||||
.anims = &sAnims_HandsAndFeet[1],
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimStompFoot,
|
||||
@@ -301,7 +294,7 @@ const struct SpriteTemplate gArmThrustHandSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_HandOrFoot,
|
||||
.anims = sAnims_HandsAndFeet,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimArmThrustHit,
|
||||
@@ -405,13 +398,13 @@ const struct SpriteTemplate gFocusPunchFistSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
||||
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
|
||||
.anims = sAnims_HandOrFoot,
|
||||
.anims = sAnims_HandsAndFeet,
|
||||
.images = NULL,
|
||||
.affineAnims = sAffineAnims_FocusPunchFist,
|
||||
.callback = AnimFocusPunchFist,
|
||||
};
|
||||
|
||||
static void unc_080B08A0(struct Sprite *sprite)
|
||||
static void AnimUnusedHumanoidFoot(struct Sprite *sprite)
|
||||
{
|
||||
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
@@ -429,7 +422,7 @@ static void AnimSlideHandOrFootToTarget(struct Sprite *sprite)
|
||||
}
|
||||
StartSpriteAnim(sprite, gBattleAnimArgs[6]);
|
||||
gBattleAnimArgs[6] = 0;
|
||||
AnimSnoreZ(sprite);
|
||||
AnimTravelDiagonally(sprite);
|
||||
}
|
||||
|
||||
static void AnimJumpKick(struct Sprite *sprite)
|
||||
@@ -475,8 +468,8 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite)
|
||||
if (gBattleAnimArgs[2] < 0)
|
||||
gBattleAnimArgs[2] = Random() % 5;
|
||||
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
|
||||
sprite->x = GetBattlerSpriteCoord(battler, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(battler, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2;
|
||||
yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
|
||||
x = Random() % xMod;
|
||||
@@ -491,19 +484,19 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite)
|
||||
sprite->y += y;
|
||||
sprite->data[0] = gBattleAnimArgs[1];
|
||||
sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->x, sprite->y, sprite->subpriority + 1);
|
||||
if (sprite->data[7] != 64)
|
||||
if (sprite->data[7] != MAX_SPRITES)
|
||||
{
|
||||
StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0);
|
||||
gSprites[sprite->data[7]].callback = SpriteCallbackDummy;
|
||||
}
|
||||
sprite->callback = sub_80B0B2C;
|
||||
sprite->callback = AnimFistOrFootRandomPos_Step;
|
||||
}
|
||||
|
||||
static void sub_80B0B2C(struct Sprite *sprite)
|
||||
static void AnimFistOrFootRandomPos_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
if (sprite->data[7] != 64)
|
||||
if (sprite->data[7] != MAX_SPRITES)
|
||||
{
|
||||
FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum);
|
||||
DestroySprite(&gSprites[sprite->data[7]]);
|
||||
@@ -531,10 +524,10 @@ static void AnimCrossChopHand(struct Sprite *sprite)
|
||||
}
|
||||
sprite->data[4] = sprite->y - 20;
|
||||
sprite->callback = StartAnimLinearTranslation;
|
||||
StoreSpriteCallbackInData6(sprite, sub_80B0BD8);
|
||||
StoreSpriteCallbackInData6(sprite, AnimCrossChopHand_Step);
|
||||
}
|
||||
|
||||
static void sub_80B0BD8(struct Sprite *sprite)
|
||||
static void AnimCrossChopHand_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[5] == 11)
|
||||
{
|
||||
@@ -550,6 +543,7 @@ static void sub_80B0BD8(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
// Rolling Kick / Low Kick
|
||||
static void AnimSlidingKick(struct Sprite *sprite)
|
||||
{
|
||||
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT)
|
||||
@@ -566,10 +560,10 @@ static void AnimSlidingKick(struct Sprite *sprite)
|
||||
sprite->data[5] = gBattleAnimArgs[5];
|
||||
sprite->data[6] = gBattleAnimArgs[4];
|
||||
sprite->data[7] = 0;
|
||||
sprite->callback = sub_80B0CB4;
|
||||
sprite->callback = AnimSlidingKick_Step;
|
||||
}
|
||||
|
||||
static void sub_80B0CB4(struct Sprite *sprite)
|
||||
static void AnimSlidingKick_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (!AnimTranslateLinear(sprite))
|
||||
{
|
||||
@@ -622,8 +616,8 @@ static void AnimStompFootStep(struct Sprite *sprite)
|
||||
if (--sprite->data[0] == -1)
|
||||
{
|
||||
sprite->data[0] = 6;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->callback = StartAnimLinearTranslation;
|
||||
StoreSpriteCallbackInData6(sprite, AnimStompFootEnd);
|
||||
}
|
||||
@@ -658,17 +652,18 @@ static void AnimDizzyPunchDuck(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
// The wall that appears when Brick Break is going to shatter the target's defensive wall
|
||||
static void AnimBrickBreakWall(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
|
||||
}
|
||||
sprite->x += gBattleAnimArgs[1];
|
||||
sprite->y += gBattleAnimArgs[2];
|
||||
@@ -676,10 +671,10 @@ static void AnimBrickBreakWall(struct Sprite *sprite)
|
||||
sprite->data[1] = gBattleAnimArgs[3];
|
||||
sprite->data[2] = gBattleAnimArgs[4];
|
||||
sprite->data[3] = 0;
|
||||
sprite->callback = sub_80B0EF0;
|
||||
sprite->callback = AnimBrickBreakWall_Step;
|
||||
}
|
||||
|
||||
static void sub_80B0EF0(struct Sprite *sprite)
|
||||
static void AnimBrickBreakWall_Step(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
@@ -709,17 +704,18 @@ static void sub_80B0EF0(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
// Piece of shattered defensive wall flies off. Used by Brick Break when the target has a defensive wall
|
||||
static void AnimBrickBreakWallShard(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3];
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[2];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[3];
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3];
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3];
|
||||
}
|
||||
sprite->oam.tileNum += gBattleAnimArgs[1] * 16;
|
||||
sprite->data[0] = 0;
|
||||
@@ -745,10 +741,10 @@ static void AnimBrickBreakWallShard(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
return;
|
||||
}
|
||||
sprite->callback = sub_80B1050;
|
||||
sprite->callback = AnimBrickBreakWallShard_Step;
|
||||
}
|
||||
|
||||
static void sub_80B1050(struct Sprite *sprite)
|
||||
static void AnimBrickBreakWallShard_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x += sprite->data[6];
|
||||
sprite->y += sprite->data[7];
|
||||
@@ -760,8 +756,8 @@ static void AnimSuperpowerOrb(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
|
||||
sprite->data[7] = gBattleAnimTarget;
|
||||
}
|
||||
@@ -773,25 +769,26 @@ static void AnimSuperpowerOrb(struct Sprite *sprite)
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[1] = 12;
|
||||
sprite->data[2] = 8;
|
||||
sprite->callback = sub_80B111C;
|
||||
sprite->callback = AnimSuperpowerOrb_Step;
|
||||
}
|
||||
|
||||
static void sub_80B111C(struct Sprite *sprite)
|
||||
static void AnimSuperpowerOrb_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[0] == 180)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
sprite->data[0] = 16;
|
||||
sprite->data[1] = sprite->x;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_X_2);
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], BATTLER_COORD_Y_PIC_OFFSET);
|
||||
InitAnimLinearTranslation(sprite);
|
||||
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
||||
sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6;
|
||||
sprite->callback = AnimTranslateLinear_WithFollowup;
|
||||
}
|
||||
}
|
||||
|
||||
// Floating rock that flies off to hit the target. Used by Superpower
|
||||
static void AnimSuperpowerRock(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = gBattleAnimArgs[0];
|
||||
@@ -800,10 +797,10 @@ static void AnimSuperpowerRock(struct Sprite *sprite)
|
||||
StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->y << 8));
|
||||
sprite->data[6] = gBattleAnimArgs[1];
|
||||
sprite->oam.tileNum += gBattleAnimArgs[2] * 4;
|
||||
sprite->callback = sub_80B11E4;
|
||||
sprite->callback = AnimSuperpowerRock_Step1;
|
||||
}
|
||||
|
||||
static void sub_80B11E4(struct Sprite *sprite)
|
||||
static void AnimSuperpowerRock_Step1(struct Sprite *sprite)
|
||||
{
|
||||
void *var0;
|
||||
|
||||
@@ -821,20 +818,20 @@ static void sub_80B11E4(struct Sprite *sprite)
|
||||
}
|
||||
else
|
||||
{
|
||||
s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||||
s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
|
||||
sprite->data[0] = pos2 - pos0;
|
||||
sprite->data[1] = pos3 - pos1;
|
||||
sprite->data[2] = sprite->x << 4;
|
||||
sprite->data[3] = sprite->y << 4;
|
||||
sprite->callback = sub_80B12A4;
|
||||
sprite->callback = AnimSuperpowerRock_Step2;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B12A4(struct Sprite *sprite)
|
||||
static void AnimSuperpowerRock_Step2(struct Sprite *sprite)
|
||||
{
|
||||
u16 edgeX;
|
||||
|
||||
@@ -851,10 +848,10 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
|
||||
{
|
||||
u8 battler;
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattlerAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
battler = gBattleAnimTarget;
|
||||
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
|
||||
}
|
||||
@@ -869,15 +866,15 @@ static void AnimSuperpowerFireball(struct Sprite *sprite)
|
||||
sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP);
|
||||
sprite->data[0] = 16;
|
||||
sprite->data[1] = sprite->x;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(battler, 2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(battler, 3);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
InitAnimLinearTranslation(sprite);
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6;
|
||||
sprite->callback = AnimTranslateLinear_WithFollowup;
|
||||
}
|
||||
|
||||
static void sub_80B13D4(struct Sprite *sprite)
|
||||
static void AnimArmThrustHit_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] == sprite->data[4])
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -888,8 +885,8 @@ static void AnimArmThrustHit(struct Sprite *sprite)
|
||||
{
|
||||
u8 turn;
|
||||
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[1] = gBattleAnimArgs[3];
|
||||
sprite->data[2] = gBattleAnimArgs[0];
|
||||
sprite->data[3] = gBattleAnimArgs[1];
|
||||
@@ -905,12 +902,12 @@ static void AnimArmThrustHit(struct Sprite *sprite)
|
||||
StartSpriteAnim(sprite, sprite->data[1]);
|
||||
sprite->x2 = sprite->data[2];
|
||||
sprite->y2 = sprite->data[3];
|
||||
sprite->callback = sub_80B13D4;
|
||||
sprite->callback = AnimArmThrustHit_Step;
|
||||
}
|
||||
|
||||
static void AnimRevengeScratch(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[2] == 0)
|
||||
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
|
||||
InitSpritePosToAnimAttacker(sprite, 0);
|
||||
else
|
||||
InitSpritePosToAnimTarget(sprite, FALSE);
|
||||
@@ -922,6 +919,7 @@ static void AnimRevengeScratch(struct Sprite *sprite)
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
|
||||
// Fist shrinks toward target and shakes
|
||||
static void AnimFocusPunchFist(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->affineAnimEnded)
|
||||
+273
-184
@@ -10,8 +10,8 @@ static void AnimFireSpiralInward(struct Sprite *sprite);
|
||||
static void AnimFireSpread(struct Sprite *sprite);
|
||||
static void AnimLargeFlame(struct Sprite *sprite);
|
||||
static void AnimFirePlume(struct Sprite *sprite);
|
||||
static void sub_80ACAA8(struct Sprite *sprite);
|
||||
static void sub_80ACBB0(struct Sprite *sprite);
|
||||
static void AnimUnusedSmallEmber(struct Sprite *sprite);
|
||||
static void AnimSunlight(struct Sprite *sprite);
|
||||
static void AnimEmberFlare(struct Sprite *sprite);
|
||||
static void AnimBurnFlame(struct Sprite *sprite);
|
||||
static void AnimFireRing(struct Sprite *sprite);
|
||||
@@ -21,22 +21,22 @@ static void AnimEruptionLaunchRock(struct Sprite *sprite);
|
||||
static void AnimEruptionFallingRock(struct Sprite *sprite);
|
||||
static void AnimWillOWispOrb(struct Sprite *sprite);
|
||||
static void AnimWillOWispFire(struct Sprite *sprite);
|
||||
static void sub_80ACA6C(struct Sprite *sprite);
|
||||
static void sub_80ACB1C(struct Sprite *sprite);
|
||||
static void AnimLargeFlame_Step(struct Sprite *sprite);
|
||||
static void AnimUnusedSmallEmber_Step(struct Sprite *sprite);
|
||||
static void AnimFireRing_Step1(struct Sprite *sprite);
|
||||
static void AnimFireRing_Step2(struct Sprite *sprite);
|
||||
static void AnimFireRing_Step3(struct Sprite *sprite);
|
||||
static void UpdateFireRingCircleOffset(struct Sprite *sprite);
|
||||
static void sub_80ACE28(struct Sprite *sprite);
|
||||
static void sub_80ACE50(struct Sprite *sprite);
|
||||
static void AnimFireSpiralOutward_Step1(struct Sprite *sprite);
|
||||
static void AnimFireSpiralOutward_Step2(struct Sprite *sprite);
|
||||
static void AnimTask_EruptionLaunchRocks_Step(u8 taskId);
|
||||
static void sub_80AD1F8(u8 spriteId, u8 taskId, u8 a3);
|
||||
static u16 sub_80AD374(u8 spriteId);
|
||||
static void sub_80AD3C8(struct Sprite *sprite, s16 x, s16 y);
|
||||
static void sub_80AD3E4(struct Sprite *sprite);
|
||||
static void sub_80AD4A8(struct Sprite *sprite);
|
||||
static void sub_80AD690(struct Sprite *sprite);
|
||||
static void sub_80AD870(u8 taskId);
|
||||
static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3);
|
||||
static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId);
|
||||
static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 x, s16 y);
|
||||
static void UpdateEruptionLaunchRockPos(struct Sprite *sprite);
|
||||
static void AnimEruptionFallingRock_Step(struct Sprite *sprite);
|
||||
static void AnimWillOWispOrb_Step(struct Sprite *sprite);
|
||||
static void AnimTask_MoveHeatWaveTargets_Step(u8 taskId);
|
||||
|
||||
static const union AnimCmd sAnim_FireSpiralSpread_0[] =
|
||||
{
|
||||
@@ -160,7 +160,7 @@ const struct SpriteTemplate gFirePlumeSpriteTemplate =
|
||||
.callback = AnimFirePlume,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E5CB8 =
|
||||
static const struct SpriteTemplate sUnusedEmberFirePlumeSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_SMALL_EMBER,
|
||||
.paletteTag = ANIM_TAG_SMALL_EMBER,
|
||||
@@ -171,7 +171,7 @@ const struct SpriteTemplate gUnknown_83E5CB8 =
|
||||
.callback = AnimFirePlume,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_83E5CD0[] =
|
||||
static const union AnimCmd sAnim_UnusedSmallEmber[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 6),
|
||||
ANIMCMD_FRAME(32, 6),
|
||||
@@ -179,20 +179,20 @@ static const union AnimCmd gUnknown_83E5CD0[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_83E5CE0[] =
|
||||
static const union AnimCmd *const sAnims_UnusedSmallEmber[] =
|
||||
{
|
||||
gUnknown_83E5CD0,
|
||||
sAnim_UnusedSmallEmber,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E5CE4 =
|
||||
static const struct SpriteTemplate sUnusedSmallEmberSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_SMALL_EMBER,
|
||||
.paletteTag = ANIM_TAG_SMALL_EMBER,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = gUnknown_83E5CE0,
|
||||
.anims = sAnims_UnusedSmallEmber,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80ACAA8,
|
||||
.callback = AnimUnusedSmallEmber,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_SunlightRay[] =
|
||||
@@ -215,7 +215,7 @@ const struct SpriteTemplate gSunlightRaySpriteTemplate =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = sAffineAnims_SunlightRay,
|
||||
.callback = sub_80ACBB0,
|
||||
.callback = AnimSunlight,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BasicFire[] =
|
||||
@@ -289,22 +289,22 @@ static const union AnimCmd *const sAnims_FireBlastCross[] =
|
||||
sAnim_FireBlastCross,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83E5DBC[] =
|
||||
static const union AffineAnimCmd sAffineAnim_Unused_0[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
|
||||
AFFINEANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_83E5DCC[] =
|
||||
static const union AffineAnimCmd sAffineAnim_Unused_1[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
|
||||
AFFINEANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const gUnknown_83E5DDC[] =
|
||||
static const union AffineAnimCmd *const sAffineAnims_Unused[] =
|
||||
{
|
||||
gUnknown_83E5DBC,
|
||||
gUnknown_83E5DCC,
|
||||
sAffineAnim_Unused_0,
|
||||
sAffineAnim_Unused_1,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gFireBlastCrossSpriteTemplate =
|
||||
@@ -351,7 +351,7 @@ static const struct SpriteTemplate gEruptionLaunchRockSpriteTemplate =
|
||||
.callback = AnimEruptionLaunchRock,
|
||||
};
|
||||
|
||||
static const s16 sEruptionLaunchRockCoords[][2] =
|
||||
static const s16 sEruptionLaunchRockSpeeds[][2] =
|
||||
{
|
||||
{-2, -5},
|
||||
{-1, -1},
|
||||
@@ -457,6 +457,7 @@ static const s8 sShakeDirsPattern1[16] =
|
||||
-1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1,
|
||||
};
|
||||
|
||||
// For the first stage of Fire Punch
|
||||
static void AnimFireSpiralInward(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = gBattleAnimArgs[0];
|
||||
@@ -465,10 +466,11 @@ static void AnimFireSpiralInward(struct Sprite *sprite)
|
||||
sprite->data[3] = 0x1E;
|
||||
sprite->data[4] = 0xFE00;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
|
||||
sprite->callback = TranslateSpriteInGrowingCircle;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
// For the impact spread of fire sprites for moves like Blaze Kick or Fire Punch
|
||||
static void AnimFireSpread(struct Sprite *sprite)
|
||||
{
|
||||
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
|
||||
@@ -498,7 +500,7 @@ static void AnimFirePlume(struct Sprite *sprite)
|
||||
sprite->data[1] = gBattleAnimArgs[2];
|
||||
sprite->data[4] = gBattleAnimArgs[3];
|
||||
sprite->data[3] = gBattleAnimArgs[5];
|
||||
sprite->callback = sub_80ACA6C;
|
||||
sprite->callback = AnimLargeFlame_Step;
|
||||
}
|
||||
|
||||
static void AnimLargeFlame(struct Sprite *sprite)
|
||||
@@ -518,10 +520,10 @@ static void AnimLargeFlame(struct Sprite *sprite)
|
||||
sprite->data[1] = gBattleAnimArgs[2];
|
||||
sprite->data[4] = gBattleAnimArgs[3];
|
||||
sprite->data[3] = gBattleAnimArgs[5];
|
||||
sprite->callback = sub_80ACA6C;
|
||||
sprite->callback = AnimLargeFlame_Step;
|
||||
}
|
||||
|
||||
static void sub_80ACA6C(struct Sprite *sprite)
|
||||
static void AnimLargeFlame_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[0] < sprite->data[4])
|
||||
{
|
||||
@@ -532,7 +534,7 @@ static void sub_80ACA6C(struct Sprite *sprite)
|
||||
DestroySpriteAndMatrix(sprite);
|
||||
}
|
||||
|
||||
static void sub_80ACAA8(struct Sprite *sprite)
|
||||
static void AnimUnusedSmallEmber(struct Sprite *sprite)
|
||||
{
|
||||
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
@@ -551,10 +553,10 @@ static void sub_80ACAA8(struct Sprite *sprite)
|
||||
sprite->data[3] = gBattleAnimArgs[5];
|
||||
sprite->data[4] = gBattleAnimArgs[6];
|
||||
sprite->data[5] = 0;
|
||||
sprite->callback = sub_80ACB1C;
|
||||
sprite->callback = AnimUnusedSmallEmber_Step;
|
||||
}
|
||||
|
||||
static void sub_80ACB1C(struct Sprite *sprite)
|
||||
static void AnimUnusedSmallEmber_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[3])
|
||||
{
|
||||
@@ -576,8 +578,8 @@ static void sub_80ACB1C(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
//sunlight
|
||||
static void sub_80ACBB0(struct Sprite *sprite)
|
||||
// Sunlight from Sunny Day / sunny weather
|
||||
static void AnimSunlight(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = 0;
|
||||
sprite->y = 0;
|
||||
@@ -588,8 +590,6 @@ static void sub_80ACBB0(struct Sprite *sprite)
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
|
||||
//fire 2
|
||||
|
||||
// Animates the secondary effect of MOVE_EMBER, where the flames grow and slide
|
||||
// horizontally a bit.
|
||||
// arg 0: initial x pixel offset
|
||||
@@ -605,7 +605,7 @@ static void AnimEmberFlare(struct Sprite *sprite)
|
||||
&& (gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)
|
||||
|| gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)))
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
sprite->callback = AnimSnoreZ;
|
||||
sprite->callback = AnimTravelDiagonally;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
@@ -613,7 +613,7 @@ static void AnimBurnFlame(struct Sprite *sprite)
|
||||
{
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
sprite->callback = AnimSnoreZ;
|
||||
sprite->callback = AnimTravelDiagonally;
|
||||
}
|
||||
|
||||
// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST
|
||||
@@ -626,7 +626,7 @@ static void AnimBurnFlame(struct Sprite *sprite)
|
||||
//void AnimFireRing(struct Sprite *sprite)
|
||||
static void AnimFireRing(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimAttacker(sprite, 1);
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
sprite->data[7] = gBattleAnimArgs[2];
|
||||
sprite->data[0] = 0;
|
||||
sprite->callback = AnimFireRing_Step1;
|
||||
@@ -706,19 +706,19 @@ static void AnimFireSpiralOutward(struct Sprite *sprite)
|
||||
sprite->data[0] = gBattleAnimArgs[3];
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = WaitAnimForDuration;
|
||||
StoreSpriteCallbackInData6(sprite, sub_80ACE28);
|
||||
StoreSpriteCallbackInData6(sprite, AnimFireSpiralOutward_Step1);
|
||||
}
|
||||
|
||||
static void sub_80ACE28(struct Sprite *sprite)
|
||||
static void AnimFireSpiralOutward_Step1(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = FALSE;
|
||||
sprite->data[0] = sprite->data[1];
|
||||
sprite->data[1] = 0;
|
||||
sprite->callback = sub_80ACE50;
|
||||
sprite->callback = AnimFireSpiralOutward_Step2;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_80ACE50(struct Sprite *sprite)
|
||||
static void AnimFireSpiralOutward_Step2(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x2 = Sin(sprite->data[1], sprite->data[2] >> 8);
|
||||
sprite->y2 = Cos(sprite->data[1], sprite->data[2] >> 8);
|
||||
@@ -728,258 +728,337 @@ static void sub_80ACE50(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
void AnimTask_EruptionLaunchRocks(u8 taskId) // initialize animation task for Move_ERUPTION?
|
||||
#define IDX_ACTIVE_SPRITES 6 // Used by the sprite callback to modify the number of active sprites
|
||||
|
||||
#define tState data[0]
|
||||
#define tTimer1 data[1]
|
||||
#define tTimer2 data[2]
|
||||
#define tTimer3 data[3]
|
||||
#define tAttackerY data[4]
|
||||
#define tAttackerSide data[5]
|
||||
#define tActiveSprites data[IDX_ACTIVE_SPRITES]
|
||||
// data[8]-data[15] used by BattleAnimHelper_SetSpriteSquashParams / BattleAnimHelper_RunSpriteSquash
|
||||
#define tAttackerSpriteId data[15]
|
||||
|
||||
#define sSpeedDelay data[0]
|
||||
#define sLaunchStage data[1]
|
||||
#define sX data[2]
|
||||
#define sY data[3]
|
||||
#define sSpeedX data[4]
|
||||
#define sSpeedY data[5]
|
||||
#define sTaskId data[6]
|
||||
#define sActiveSpritesIdx data[7]
|
||||
|
||||
// Animates first stage of Eruption where the attacker squishes and launches rocks away from themself
|
||||
void AnimTask_EruptionLaunchRocks(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
task->data[0] = 0;
|
||||
task->data[1] = 0;
|
||||
task->data[2] = 0;
|
||||
task->data[3] = 0;
|
||||
task->data[4] = gSprites[task->data[15]].y;
|
||||
task->data[5] = GetBattlerSide(gBattleAnimAttacker);
|
||||
task->data[6] = 0;
|
||||
task->tAttackerSpriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
task->tState = 0;
|
||||
task->tTimer1 = 0;
|
||||
task->tTimer2 = 0;
|
||||
task->tTimer3 = 0;
|
||||
task->tAttackerY = gSprites[task->tAttackerSpriteId].y;
|
||||
task->tAttackerSide = GetBattlerSide(gBattleAnimAttacker);
|
||||
task->tActiveSprites = 0;
|
||||
PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
|
||||
task->func = AnimTask_EruptionLaunchRocks_Step;
|
||||
}
|
||||
|
||||
static void AnimTask_EruptionLaunchRocks_Step(u8 taskId) // animate Move_ERUPTION?
|
||||
static void AnimTask_EruptionLaunchRocks_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20);
|
||||
++task->data[0];
|
||||
// fall through
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0x100, 0x100, 0xE0, 0x200, 32);
|
||||
task->tState++;
|
||||
case 1:
|
||||
if (++task->data[1] > 1)
|
||||
if (++task->tTimer1 > 1)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
if (++task->data[2] & 0x1)
|
||||
gSprites[task->data[15]].x2 = 3;
|
||||
task->tTimer1 = 0;
|
||||
|
||||
if (++task->tTimer2 & 1)
|
||||
gSprites[task->tAttackerSpriteId].x2 = 3;
|
||||
else
|
||||
gSprites[task->data[15]].x2 = -3;
|
||||
gSprites[task->tAttackerSpriteId].x2 = -3;
|
||||
}
|
||||
if (task->data[5])
|
||||
|
||||
if (task->tAttackerSide != B_SIDE_PLAYER)
|
||||
{
|
||||
if (++task->data[3] > 4)
|
||||
if (++task->tTimer3 > 4)
|
||||
{
|
||||
task->data[3] = 0;
|
||||
++gSprites[task->data[15]].y;
|
||||
task->tTimer3 = 0;
|
||||
gSprites[task->tAttackerSpriteId].y++;
|
||||
}
|
||||
}
|
||||
|
||||
if(!BattleAnimHelper_RunSpriteSquash(task))
|
||||
{
|
||||
SetBattlerSpriteYOffsetFromYScale(task->data[15]);
|
||||
gSprites[task->data[15]].x2 = 0;
|
||||
task->data[1] = 0;
|
||||
task->data[2] = 0;
|
||||
task->data[3] = 0;
|
||||
++task->data[0];
|
||||
SetBattlerSpriteYOffsetFromYScale(task->tAttackerSpriteId);
|
||||
gSprites[task->tAttackerSpriteId].x2 = 0;
|
||||
|
||||
task->tTimer1 = 0;
|
||||
task->tTimer2 = 0;
|
||||
task->tTimer3 = 0;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (++task->data[1] > 4)
|
||||
if (++task->tTimer1 > 4)
|
||||
{
|
||||
if (task->data[5])
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6);
|
||||
if (task->tAttackerSide != B_SIDE_PLAYER)
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xF0, 6);
|
||||
else
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6);
|
||||
task->data[1] = 0;
|
||||
++task->data[0];
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xC0, 6);
|
||||
|
||||
task->tTimer1 = 0;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (!BattleAnimHelper_RunSpriteSquash(task))
|
||||
{
|
||||
sub_80AD1F8(task->data[15], taskId, 6);
|
||||
++task->data[0];
|
||||
CreateEruptionLaunchRocks(task->tAttackerSpriteId, taskId, IDX_ACTIVE_SPRITES);
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (++task->data[1] > 1)
|
||||
if (++task->tTimer1 > 1)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
if (++task->data[2] & 1)
|
||||
gSprites[task->data[15]].y2 += 3;
|
||||
task->tTimer1 = 0;
|
||||
|
||||
if (++task->tTimer2 & 1)
|
||||
gSprites[task->tAttackerSpriteId].y2 += 3;
|
||||
else
|
||||
gSprites[task->data[15]].y2 -= 3;
|
||||
gSprites[task->tAttackerSpriteId].y2 -= 3;
|
||||
}
|
||||
if (++task->data[3] > 0x18)
|
||||
|
||||
if (++task->tTimer3 > 24)
|
||||
{
|
||||
if (task->data[5])
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8);
|
||||
if (task->tAttackerSide != B_SIDE_PLAYER)
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0x180, 0xF0, 0x100, 0x100, 8);
|
||||
else
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8);
|
||||
if (task->data[2] & 1)
|
||||
gSprites[task->data[15]].y2 -= 3;
|
||||
task->data[1] = 0;
|
||||
task->data[2] = 0;
|
||||
task->data[3] = 0;
|
||||
++task->data[0];
|
||||
BattleAnimHelper_SetSpriteSquashParams(task, task->tAttackerSpriteId, 0x180, 0xC0, 0x100, 0x100, 8);
|
||||
|
||||
if (task->tTimer2 & 1)
|
||||
gSprites[task->tAttackerSpriteId].y2 -= 3;
|
||||
|
||||
task->tTimer1 = 0;
|
||||
task->tTimer2 = 0;
|
||||
task->tTimer3 = 0;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (task->data[5])
|
||||
--gSprites[task->data[15]].y;
|
||||
if (task->tAttackerSide != B_SIDE_PLAYER)
|
||||
gSprites[task->tAttackerSpriteId].y--;
|
||||
|
||||
if (!BattleAnimHelper_RunSpriteSquash(task))
|
||||
{
|
||||
gSprites[task->data[15]].y = task->data[4];
|
||||
ResetSpriteRotScale(task->data[15]);
|
||||
|
||||
task->data[2] = 0;
|
||||
++task->data[0];
|
||||
gSprites[task->tAttackerSpriteId].y = task->tAttackerY;
|
||||
ResetSpriteRotScale(task->tAttackerSpriteId);
|
||||
task->tTimer2 = 0;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (!task->data[6])
|
||||
if (task->tActiveSprites == 0)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80AD1F8(u8 spriteId, u8 taskId, u8 a3)
|
||||
static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 activeSpritesIdx)
|
||||
{
|
||||
u16 i, j;
|
||||
s8 sign;
|
||||
u16 y = sub_80AD374(spriteId);
|
||||
|
||||
u16 y = GetEruptionLaunchRockInitialYPos(spriteId);
|
||||
u16 x = gSprites[spriteId].x;
|
||||
|
||||
if(GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||||
if(!GetBattlerSide(gBattleAnimAttacker))
|
||||
{
|
||||
x -= 0xC;
|
||||
x -= 12;
|
||||
sign = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
x += 0x10;
|
||||
x += 16;
|
||||
sign = -1;
|
||||
}
|
||||
for (i = 0, j = 0; i <= 6; ++i)
|
||||
|
||||
for (i = 0, j = 0; i <= 6; i++)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&gEruptionLaunchRockSpriteTemplate, x, y, 2);
|
||||
|
||||
if (spriteId != 0x40)
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].oam.tileNum += j * 4 + 0x40;
|
||||
|
||||
if (++j >= 5)
|
||||
j = 0;
|
||||
sub_80AD3C8(&gSprites[spriteId], sEruptionLaunchRockCoords[i][0] * sign, sEruptionLaunchRockCoords[i][1]);
|
||||
gSprites[spriteId].data[6] = taskId;
|
||||
gSprites[spriteId].data[7] = a3;
|
||||
++gTasks[taskId].data[a3];
|
||||
|
||||
InitEruptionLaunchRockCoordData(&gSprites[spriteId], sEruptionLaunchRockSpeeds[i][0] * sign, sEruptionLaunchRockSpeeds[i][1]);
|
||||
gSprites[spriteId].sTaskId = taskId;
|
||||
gSprites[spriteId].sActiveSpritesIdx = activeSpritesIdx;
|
||||
|
||||
gTasks[taskId].data[activeSpritesIdx]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void AnimEruptionLaunchRock(struct Sprite *sprite)
|
||||
{
|
||||
sub_80AD3E4(sprite);
|
||||
UpdateEruptionLaunchRockPos(sprite);
|
||||
|
||||
if (sprite->invisible)
|
||||
{
|
||||
--gTasks[sprite->data[6]].data[sprite->data[7]];
|
||||
gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--;
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
static u16 sub_80AD374(u8 spriteId)
|
||||
static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId)
|
||||
{
|
||||
u16 var1 = gSprites[spriteId].y + gSprites[spriteId].y2 + gSprites[spriteId].centerToCornerVecY;
|
||||
s16 y = gSprites[spriteId].y + gSprites[spriteId].y2 + gSprites[spriteId].centerToCornerVecY;
|
||||
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||||
var1 = ((var1 << 16) + 0x4A0000) >> 16;
|
||||
y += 74;
|
||||
else
|
||||
var1 = ((var1 << 16) + 0x2C0000) >> 16;
|
||||
return var1;
|
||||
y += 44;
|
||||
|
||||
return y;
|
||||
}
|
||||
|
||||
static void sub_80AD3C8(struct Sprite *sprite, s16 x, s16 y)
|
||||
static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 speedX, s16 speedY)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[2] = (u16)sprite->x * 8;
|
||||
sprite->data[3] = (u16)sprite->y * 8;
|
||||
sprite->data[4] = x * 8;
|
||||
sprite->data[5] = y * 8;
|
||||
sprite->sSpeedDelay = 0;
|
||||
sprite->sLaunchStage = 0;
|
||||
sprite->sX = (u16)sprite->x * 8;
|
||||
sprite->sY = (u16)sprite->y * 8;
|
||||
sprite->sSpeedX = speedX * 8;
|
||||
sprite->sSpeedY = speedY * 8;
|
||||
}
|
||||
|
||||
static void sub_80AD3E4(struct Sprite *sprite)
|
||||
static void UpdateEruptionLaunchRockPos(struct Sprite *sprite)
|
||||
{
|
||||
s32 var1;
|
||||
|
||||
if (++sprite->data[0] > 2)
|
||||
int extraLaunchSpeed;
|
||||
if (++sprite->sSpeedDelay > 2)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
++sprite->data[1];
|
||||
var1 = (u16)sprite->data[1] * (u16)sprite->data[1];
|
||||
sprite->data[3] += var1;
|
||||
sprite->sSpeedDelay = 0;
|
||||
++sprite->sLaunchStage;
|
||||
extraLaunchSpeed = (u16)sprite->sLaunchStage * (u16)sprite->sLaunchStage;
|
||||
sprite->sY += extraLaunchSpeed;
|
||||
}
|
||||
sprite->data[2] += sprite->data[4];
|
||||
sprite->x = sprite->data[2] >> 3;
|
||||
sprite->data[3] += sprite->data[5];
|
||||
sprite->y = sprite->data[3] >> 3;
|
||||
if (sprite->x < -8 || sprite->x > 0xf8 || sprite->y < -8 || sprite->y > 120)
|
||||
|
||||
sprite->sX += sprite->sSpeedX;
|
||||
sprite->x = sprite->sX >> 3;
|
||||
sprite->sY += sprite->sSpeedY;
|
||||
sprite->y = sprite->sY >> 3;
|
||||
|
||||
if (sprite->x < -8 || sprite->x > DISPLAY_WIDTH + 8 || sprite->y < -8 || sprite->y > 120)
|
||||
sprite->invisible = TRUE;
|
||||
}
|
||||
|
||||
#undef IDX_ACTIVE_SPRITES
|
||||
#undef tState
|
||||
#undef tTimer1
|
||||
#undef tTimer2
|
||||
#undef tTimer3
|
||||
#undef tAttackerY
|
||||
#undef tAttackerSide
|
||||
#undef tActiveSprites
|
||||
#undef tAttackerSpriteId
|
||||
#undef sSpeedDelay
|
||||
#undef sLaunchStage
|
||||
#undef sX
|
||||
#undef sY
|
||||
#undef sSpeedX
|
||||
#undef sSpeedY
|
||||
#undef sTaskId
|
||||
#undef sActiveSpritesIdx
|
||||
|
||||
#define sState data[0]
|
||||
#define sBounceTimer data[1]
|
||||
#define sBounceDir data[2]
|
||||
#define sEndTimer data[3]
|
||||
#define sFallDelay data[6]
|
||||
#define sTargetY data[7]
|
||||
|
||||
static void AnimEruptionFallingRock(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = gBattleAnimArgs[0];
|
||||
sprite->y = gBattleAnimArgs[1];
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[2] = 0;
|
||||
sprite->data[6] = gBattleAnimArgs[2];
|
||||
sprite->data[7] = gBattleAnimArgs[3];
|
||||
|
||||
sprite->sState = 0;
|
||||
sprite->sBounceTimer = 0;
|
||||
sprite->sBounceDir = 0;
|
||||
sprite->sFallDelay = gBattleAnimArgs[2];
|
||||
sprite->sTargetY = gBattleAnimArgs[3];
|
||||
|
||||
sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
|
||||
sprite->callback = sub_80AD4A8;
|
||||
sprite->callback = AnimEruptionFallingRock_Step;
|
||||
}
|
||||
|
||||
static void sub_80AD4A8(struct Sprite *sprite)
|
||||
static void AnimEruptionFallingRock_Step(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
switch (sprite->sState)
|
||||
{
|
||||
case 0:
|
||||
if (sprite->data[6] != 0)
|
||||
// Wait to begin falling
|
||||
if (sprite->sFallDelay != 0)
|
||||
{
|
||||
--sprite->data[6];
|
||||
sprite->sFallDelay--;
|
||||
return;
|
||||
}
|
||||
++sprite->data[0];
|
||||
|
||||
sprite->sState++;
|
||||
// fall through
|
||||
case 1:
|
||||
// Rock is falling
|
||||
sprite->y += 8;
|
||||
if (sprite->y >= sprite->data[7])
|
||||
if (sprite->y >= sprite->sTargetY)
|
||||
{
|
||||
sprite->y = sprite->data[7];
|
||||
++sprite->data[0];
|
||||
sprite->y = sprite->sTargetY;
|
||||
sprite->sState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (++sprite->data[1] > 1)
|
||||
// Bounce up and down on landing spot
|
||||
if (++sprite->sBounceTimer > 1)
|
||||
{
|
||||
sprite->data[1] = 0;
|
||||
if ((++sprite->data[2] & 1) != 0)
|
||||
sprite->sBounceTimer = 0;
|
||||
if ((++sprite->sBounceDir & 1) != 0)
|
||||
sprite->y2 = -3;
|
||||
else
|
||||
sprite->y2 = 3;
|
||||
}
|
||||
if (++sprite->data[3] > 16)
|
||||
|
||||
if (++sprite->sEndTimer > 16)
|
||||
DestroyAnimSprite(sprite);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#undef sState
|
||||
#undef sBounceTimer
|
||||
#undef sBounceDir
|
||||
#undef sEndTimer
|
||||
#undef sFallDelay
|
||||
#undef sTargetY
|
||||
|
||||
//wisp orb
|
||||
static void AnimWillOWispOrb(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
case 0:
|
||||
InitSpritePosToAnimAttacker(sprite, 0);
|
||||
InitSpritePosToAnimAttacker(sprite, FALSE);
|
||||
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
|
||||
sprite->data[7] = gBattleAnimArgs[2];
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
@@ -1016,14 +1095,14 @@ static void AnimWillOWispOrb(struct Sprite *sprite)
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
BattleAnim_InitLinearTranslationWithDuration(sprite);
|
||||
sprite->callback = sub_80AD690;
|
||||
InitAnimLinearTranslationWithSpeed(sprite);
|
||||
sprite->callback = AnimWillOWispOrb_Step;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80AD690(struct Sprite *sprite)
|
||||
static void AnimWillOWispOrb_Step(struct Sprite *sprite)
|
||||
{
|
||||
s16 initialData5, newData5;
|
||||
|
||||
@@ -1034,7 +1113,7 @@ static void sub_80AD690(struct Sprite *sprite)
|
||||
sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
|
||||
newData5 = sprite->data[5];
|
||||
if ((initialData5 == 0 || initialData5 > 196) && newData5 > 0 && sprite->data[7] == 0)
|
||||
PlaySE12WithPanning(SE_M_FLAME_WHEEL, gUnknown_2037F24);
|
||||
PlaySE12WithPanning(SE_M_FLAME_WHEEL, gAnimCustomPanning);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1042,7 +1121,6 @@ static void sub_80AD690(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
//wisp fire
|
||||
static void AnimWillOWispFire(struct Sprite *sprite)
|
||||
{
|
||||
if (!sprite->data[0])
|
||||
@@ -1083,10 +1161,10 @@ void AnimTask_MoveHeatWaveTargets(u8 taskId)
|
||||
task->data[13] = IsBattlerSpriteVisible(gBattleAnimTarget ^ BIT_FLANK) + 1;
|
||||
task->data[14] = GetAnimBattlerSpriteId(ANIM_TARGET);
|
||||
task->data[15] = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
|
||||
task->func = sub_80AD870;
|
||||
task->func = AnimTask_MoveHeatWaveTargets_Step;
|
||||
}
|
||||
|
||||
static void sub_80AD870(u8 taskId)
|
||||
static void AnimTask_MoveHeatWaveTargets_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -1153,7 +1231,7 @@ static void sub_80AD870(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// Used to add a color mask to the battle interface / HUD in Heat Wave.
|
||||
// Used to add a color mask to the battle background.
|
||||
// arg 0: opacity
|
||||
// arg 1: color code
|
||||
void AnimTask_BlendBackground(u8 taskId)
|
||||
@@ -1165,29 +1243,40 @@ void AnimTask_BlendBackground(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
#define tShakeNum data[0]
|
||||
#define tMaxShakes data[1]
|
||||
#define tShakeOffset data[2] // Never read, gBattleAnimArgs[1] is used directly instead
|
||||
#define tVertical data[3]
|
||||
#define tPatternId data[4]
|
||||
|
||||
// Shakes target horizontally or vertically tMaxShakes times, following a set pattern of alternations
|
||||
void AnimTask_ShakeTargetInPattern(u8 taskId)
|
||||
{
|
||||
s8 unk;
|
||||
s8 dir;
|
||||
u8 spriteId;
|
||||
|
||||
if (gTasks[taskId].data[0] == 0)
|
||||
if (gTasks[taskId].tShakeNum == 0)
|
||||
{
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].tMaxShakes = gBattleAnimArgs[0];
|
||||
gTasks[taskId].tShakeOffset = gBattleAnimArgs[1];
|
||||
gTasks[taskId].tVertical = gBattleAnimArgs[2];
|
||||
gTasks[taskId].tPatternId = gBattleAnimArgs[3];
|
||||
}
|
||||
++gTasks[taskId].data[0];
|
||||
gTasks[taskId].tShakeNum++;
|
||||
|
||||
spriteId = gBattlerSpriteIds[gBattleAnimTarget];
|
||||
if (!gTasks[taskId].data[4])
|
||||
unk = sShakeDirsPattern0[gTasks[taskId].data[0] % 10];
|
||||
|
||||
if (gTasks[taskId].tPatternId == 0)
|
||||
dir = sShakeDirsPattern0[gTasks[taskId].tShakeNum % 10];
|
||||
else
|
||||
unk = sShakeDirsPattern1[gTasks[taskId].data[0] % 10];
|
||||
if (gTasks[taskId].data[3] == 1)
|
||||
gSprites[spriteId].y2 = gBattleAnimArgs[1] * unk < 0 ? -(gBattleAnimArgs[1] * unk) : gBattleAnimArgs[1] * unk;
|
||||
dir = sShakeDirsPattern1[gTasks[taskId].tShakeNum % 10];
|
||||
|
||||
if (gTasks[taskId].tVertical == TRUE)
|
||||
gSprites[spriteId].y2 = gBattleAnimArgs[1] * dir < 0 ? -(gBattleAnimArgs[1] * dir) : gBattleAnimArgs[1] * dir;
|
||||
else
|
||||
gSprites[spriteId].x2 = gBattleAnimArgs[1] * unk;
|
||||
if (gTasks[taskId].data[0] == gTasks[taskId].data[1])
|
||||
gSprites[spriteId].x2 = gBattleAnimArgs[1] * dir;
|
||||
|
||||
if (gTasks[taskId].tShakeNum == gTasks[taskId].tMaxShakes)
|
||||
{
|
||||
gSprites[spriteId].x2 = 0;
|
||||
gSprites[spriteId].y2 = 0;
|
||||
@@ -11,29 +11,29 @@ static void AnimAirWaveCrescent(struct Sprite *sprite);
|
||||
static void AnimFlyBallUp(struct Sprite *sprite);
|
||||
static void AnimFlyBallAttack(struct Sprite *sprite);
|
||||
static void AnimFallingFeather(struct Sprite *sprite);
|
||||
static void sub_80B24C0(struct Sprite *sprite);
|
||||
static void sub_80B2514(struct Sprite *sprite);
|
||||
static void AnimUnusedBubbleThrow(struct Sprite *sprite);
|
||||
static void AnimUnusedFeather(struct Sprite *sprite);
|
||||
static void AnimWhirlwindLine(struct Sprite *sprite);
|
||||
static void AnimBounceBallShrink(struct Sprite *sprite);
|
||||
static void AnimBounceBallLand(struct Sprite *sprite);
|
||||
static void AnimDiveBall(struct Sprite *sprite);
|
||||
static void AnimDiveWaterSplash(struct Sprite *sprite);
|
||||
static void AnimSprayWaterDroplet(struct Sprite *sprite);
|
||||
static void sub_80B2CE4(struct Sprite *sprite);
|
||||
static void AnimUnusedFlashingLight(struct Sprite *sprite);
|
||||
static void AnimSkyAttackBird(struct Sprite *sprite);
|
||||
static void sub_80B190C(struct Sprite *sprite);
|
||||
static void sub_80B198C(u8 taskId);
|
||||
static void sub_80B1A9C(struct Sprite *sprite);
|
||||
static void sub_80B1BF8(struct Sprite *sprite);
|
||||
static void sub_80B1CC0(struct Sprite *sprite);
|
||||
static void AnimEllipticalGust_Step(struct Sprite *sprite);
|
||||
static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId);
|
||||
static void AnimGustToTarget_Step(struct Sprite *sprite);
|
||||
static void AnimFlyBallUp_Step(struct Sprite *sprite);
|
||||
static void AnimFlyBallAttack_Step(struct Sprite *sprite);
|
||||
static void AnimFallingFeather_Step(struct Sprite *sprite);
|
||||
static void sub_80B268C(struct Sprite *sprite);
|
||||
static void sub_80B2820(struct Sprite *sprite);
|
||||
static void sub_80B2A50(struct Sprite *sprite);
|
||||
static void sub_80B2AB0(struct Sprite *sprite);
|
||||
static void sub_80B2C88(struct Sprite *sprite);
|
||||
static void sub_80B2CF8(struct Sprite *sprite);
|
||||
static void sub_80B2E20(struct Sprite *sprite);
|
||||
static void AnimUnusedFeather_Step(struct Sprite *sprite);
|
||||
static void AnimWhirlwindLine_Step(struct Sprite *sprite);
|
||||
static void AnimDiveBall_Step1(struct Sprite *sprite);
|
||||
static void AnimDiveBall_Step2(struct Sprite *sprite);
|
||||
static void AnimSprayWaterDroplet_Step(struct Sprite *sprite);
|
||||
static void AnimUnusedFlashingLight_Step(struct Sprite *sprite);
|
||||
static void AnimSkyAttackBird_Step(struct Sprite *sprite);
|
||||
|
||||
const struct SpriteTemplate gEllipticalGustSpriteTemplate =
|
||||
{
|
||||
@@ -177,10 +177,9 @@ const struct SpriteTemplate gFallingFeatherSpriteTemplate =
|
||||
.callback = AnimFallingFeather,
|
||||
};
|
||||
|
||||
// not used
|
||||
static const u16 gUnknown_83E6C18[] = INCBIN_U16("graphics/battle_anims/unk_83E6C18.gbapal");
|
||||
static const u16 sUnusedPal[] = INCBIN_U16("graphics/battle_anims/unk_83E6C18.gbapal");
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E6C38 =
|
||||
static const struct SpriteTemplate sUnusedBubbleThrowSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_SMALL_BUBBLES,
|
||||
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
|
||||
@@ -188,10 +187,10 @@ const struct SpriteTemplate gUnknown_83E6C38 =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80B24C0,
|
||||
.callback = AnimUnusedBubbleThrow,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E6C50 =
|
||||
static const struct SpriteTemplate sUnusedFeatherSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_WHITE_FEATHER,
|
||||
.paletteTag = ANIM_TAG_WHITE_FEATHER,
|
||||
@@ -199,7 +198,7 @@ const struct SpriteTemplate gUnknown_83E6C50 =
|
||||
.anims = sAnims_FallingFeather,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80B2514,
|
||||
.callback = AnimUnusedFeather,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_WhirlwindLines[] =
|
||||
@@ -301,8 +300,7 @@ const struct SpriteTemplate gDiveBallSpriteTemplate =
|
||||
.callback = AnimDiveBall,
|
||||
};
|
||||
|
||||
// not used
|
||||
static const union AffineAnimCmd gUnknown_83E6D58[] =
|
||||
static const union AffineAnimCmd sAnim_Unused[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12),
|
||||
@@ -310,10 +308,9 @@ static const union AffineAnimCmd gUnknown_83E6D58[] =
|
||||
AFFINEANIMCMD_END,
|
||||
};
|
||||
|
||||
// not used
|
||||
static const union AffineAnimCmd *const gUnknown_83E6D80[] =
|
||||
static const union AffineAnimCmd *const sAnims_Unused[] =
|
||||
{
|
||||
gUnknown_83E6D58,
|
||||
sAnim_Unused,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gDiveWaterSplashSpriteTemplate =
|
||||
@@ -338,7 +335,7 @@ const struct SpriteTemplate gSprayWaterDropletSpriteTemplate =
|
||||
.callback = AnimSprayWaterDroplet,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E6DAC =
|
||||
static const struct SpriteTemplate sUnusedFlashingLightSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
|
||||
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
|
||||
@@ -346,7 +343,7 @@ const struct SpriteTemplate gUnknown_83E6DAC =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80B2CE4,
|
||||
.callback = AnimUnusedFlashingLight,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSkyAttackBirdSpriteTemplate =
|
||||
@@ -365,11 +362,11 @@ static void AnimEllipticalGust(struct Sprite *sprite)
|
||||
InitSpritePosToAnimTarget(sprite, FALSE);
|
||||
sprite->y += 20;
|
||||
sprite->data[1] = 191;
|
||||
sprite->callback = sub_80B190C;
|
||||
sprite->callback = AnimEllipticalGust_Step;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_80B190C(struct Sprite *sprite)
|
||||
static void AnimEllipticalGust_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x2 = Sin(sprite->data[1], 32);
|
||||
sprite->y2 = Cos(sprite->data[1], 8);
|
||||
@@ -379,15 +376,16 @@ static void sub_80B190C(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
// Animates the palette on the gust tornado to make it look like its spinning
|
||||
void AnimTask_AnimateGustTornadoPalette(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[0] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_GUST);
|
||||
gTasks[taskId].func = sub_80B198C;
|
||||
gTasks[taskId].func = AnimTask_AnimateGustTornadoPalette_Step;
|
||||
}
|
||||
|
||||
static void sub_80B198C(u8 taskId)
|
||||
static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId)
|
||||
{
|
||||
u8 data2;
|
||||
u16 temp;
|
||||
@@ -423,10 +421,10 @@ static void AnimGustToTarget(struct Sprite *sprite)
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
InitAnimLinearTranslation(sprite);
|
||||
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
|
||||
StoreSpriteCallbackInData6(sprite, sub_80B1A9C);
|
||||
StoreSpriteCallbackInData6(sprite, AnimGustToTarget_Step);
|
||||
}
|
||||
|
||||
static void sub_80B1A9C(struct Sprite *sprite)
|
||||
static void AnimGustToTarget_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (AnimTranslateLinear(sprite))
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -472,11 +470,11 @@ static void AnimFlyBallUp(struct Sprite *sprite)
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
sprite->data[0] = gBattleAnimArgs[2];
|
||||
sprite->data[1] = gBattleAnimArgs[3];
|
||||
sprite->callback = sub_80B1BF8;
|
||||
sprite->callback = AnimFlyBallUp_Step;
|
||||
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
|
||||
}
|
||||
|
||||
static void sub_80B1BF8(struct Sprite *sprite)
|
||||
static void AnimFlyBallUp_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] > 0)
|
||||
{
|
||||
@@ -495,7 +493,7 @@ static void AnimFlyBallAttack(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
{
|
||||
sprite->x = 272;
|
||||
sprite->x = DISPLAY_WIDTH + 32;
|
||||
sprite->y = -32;
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
}
|
||||
@@ -510,10 +508,10 @@ static void AnimFlyBallAttack(struct Sprite *sprite)
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
InitAnimLinearTranslation(sprite);
|
||||
sprite->callback = sub_80B1CC0;
|
||||
sprite->callback = AnimFlyBallAttack_Step;
|
||||
}
|
||||
|
||||
static void sub_80B1CC0(struct Sprite *sprite)
|
||||
static void AnimFlyBallAttack_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = 1;
|
||||
AnimTranslateLinear(sprite);
|
||||
@@ -524,8 +522,8 @@ static void sub_80B1CC0(struct Sprite *sprite)
|
||||
sprite->data[3] &= 0xFF;
|
||||
}
|
||||
if (sprite->x + sprite->x2 < -32
|
||||
|| sprite->x + sprite->x2 > 272
|
||||
|| sprite->y + sprite->y2 > 160)
|
||||
|| sprite->x + sprite->x2 > DISPLAY_WIDTH + 32
|
||||
|| sprite->y + sprite->y2 > DISPLAY_HEIGHT)
|
||||
{
|
||||
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = FALSE;
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -883,7 +881,7 @@ static void AnimFallingFeather_Step(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B24C0(struct Sprite *sprite)
|
||||
static void AnimUnusedBubbleThrow(struct Sprite *sprite)
|
||||
{
|
||||
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
@@ -891,7 +889,7 @@ static void sub_80B24C0(struct Sprite *sprite)
|
||||
sprite->callback = TranslateAnimSpriteToTargetMonLocation;
|
||||
}
|
||||
|
||||
static void sub_80B2514(struct Sprite *sprite)
|
||||
static void AnimUnusedFeather(struct Sprite *sprite)
|
||||
{
|
||||
u8 matrixNum;
|
||||
s16 rn, sinVal;
|
||||
@@ -935,10 +933,10 @@ static void sub_80B2514(struct Sprite *sprite)
|
||||
sprite->animNum = 1;
|
||||
sprite->hFlip = TRUE;
|
||||
}
|
||||
sprite->callback = sub_80B268C;
|
||||
sprite->callback = AnimUnusedFeather_Step;
|
||||
}
|
||||
|
||||
static void sub_80B268C(struct Sprite *sprite)
|
||||
static void AnimUnusedFeather_Step(struct Sprite *sprite)
|
||||
{
|
||||
struct FeatherDanceData fData;
|
||||
struct FeatherDanceData *tData = (struct FeatherDanceData *)sprite->data;
|
||||
@@ -992,12 +990,12 @@ static void AnimWhirlwindLine(struct Sprite *sprite)
|
||||
u16 arg;
|
||||
u8 mult;
|
||||
|
||||
if (!gBattleAnimArgs[2])
|
||||
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
|
||||
InitSpritePosToAnimAttacker(sprite, 0);
|
||||
else
|
||||
InitSpritePosToAnimTarget(sprite, FALSE);
|
||||
if ((!gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||||
|| (gBattleAnimArgs[2] == 1 && GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER))
|
||||
if ((gBattleAnimArgs[2] == ANIM_ATTACKER && GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||||
|| (gBattleAnimArgs[2] == ANIM_TARGET && GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER))
|
||||
sprite->x += 8;
|
||||
SeekSpriteAnim(sprite, gBattleAnimArgs[4]);
|
||||
sprite->x -= 32;
|
||||
@@ -1007,10 +1005,10 @@ static void AnimWhirlwindLine(struct Sprite *sprite)
|
||||
sprite->x2 += mult * arg;
|
||||
sprite->data[0] = arg;
|
||||
sprite->data[7] = gBattleAnimArgs[3];
|
||||
sprite->callback = sub_80B2820;
|
||||
sprite->callback = AnimWhirlwindLine_Step;
|
||||
}
|
||||
|
||||
static void sub_80B2820(struct Sprite *sprite)
|
||||
static void AnimWhirlwindLine_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x2 += sprite->data[1] >> 8;
|
||||
if (++sprite->data[0] == 6)
|
||||
@@ -1064,7 +1062,7 @@ static void AnimBounceBallLand(struct Sprite *sprite)
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
case 0:
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
|
||||
sprite->y2 = -sprite->y - 32;
|
||||
++sprite->data[0];
|
||||
break;
|
||||
@@ -1089,11 +1087,11 @@ static void AnimDiveBall(struct Sprite *sprite)
|
||||
InitSpritePosToAnimAttacker(sprite, 1);
|
||||
sprite->data[0] = gBattleAnimArgs[2];
|
||||
sprite->data[1] = gBattleAnimArgs[3];
|
||||
sprite->callback = sub_80B2A50;
|
||||
sprite->callback = AnimDiveBall_Step1;
|
||||
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
|
||||
}
|
||||
|
||||
static void sub_80B2A50(struct Sprite *sprite)
|
||||
static void AnimDiveBall_Step1(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] > 0)
|
||||
{
|
||||
@@ -1108,11 +1106,11 @@ static void sub_80B2A50(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = TRUE;
|
||||
if (sprite->data[3]++ > 20)
|
||||
sprite->callback = sub_80B2AB0;
|
||||
sprite->callback = AnimDiveBall_Step2;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B2AB0(struct Sprite *sprite)
|
||||
static void AnimDiveBall_Step2(struct Sprite *sprite)
|
||||
{
|
||||
sprite->y2 += sprite->data[2] >> 8;
|
||||
if (sprite->y + sprite->y2 > -32)
|
||||
@@ -1131,13 +1129,13 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
|
||||
case 0:
|
||||
if (!gBattleAnimArgs[0])
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
|
||||
}
|
||||
sprite->data[1] = 512;
|
||||
TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0);
|
||||
@@ -1166,6 +1164,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
// Launches a water droplet away from the specified battler. Used by Astonish and Dive
|
||||
static void AnimSprayWaterDroplet(struct Sprite *sprite)
|
||||
{
|
||||
s32 v1 = 0x1FF & Random();
|
||||
@@ -1185,18 +1184,18 @@ static void AnimSprayWaterDroplet(struct Sprite *sprite)
|
||||
sprite->oam.matrixNum = ST_OAM_HFLIP;
|
||||
if (gBattleAnimArgs[1] == 0)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32;
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 32;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 32;
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32;
|
||||
}
|
||||
sprite->callback = sub_80B2C88;
|
||||
sprite->callback = AnimSprayWaterDroplet_Step;
|
||||
}
|
||||
|
||||
static void sub_80B2C88(struct Sprite *sprite)
|
||||
static void AnimSprayWaterDroplet_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[2] == 0)
|
||||
{
|
||||
@@ -1216,14 +1215,14 @@ static void sub_80B2C88(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
static void sub_80B2CE4(struct Sprite *sprite)
|
||||
static void AnimUnusedFlashingLight(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[6] = 0;
|
||||
sprite->data[7] = 64;
|
||||
sprite->callback = sub_80B2CF8;
|
||||
sprite->callback = AnimUnusedFlashingLight_Step;
|
||||
}
|
||||
|
||||
static void sub_80B2CF8(struct Sprite *sprite)
|
||||
static void AnimUnusedFlashingLight_Step(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
@@ -1248,8 +1247,8 @@ static void AnimSkyAttackBird(struct Sprite *sprite)
|
||||
s16 posx = sprite->x;
|
||||
s16 posy = sprite->y;
|
||||
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[4] = sprite->x << 4;
|
||||
sprite->data[5] = sprite->y << 4;
|
||||
sprite->data[6] = ((posx - sprite->x) << 4) / 12;
|
||||
@@ -1257,22 +1256,22 @@ static void AnimSkyAttackBird(struct Sprite *sprite)
|
||||
rotation = ArcTan2Neg(posx - sprite->x, posy - sprite->y);
|
||||
rotation += 49152;
|
||||
TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation);
|
||||
sprite->callback = sub_80B2E20;
|
||||
sprite->callback = AnimSkyAttackBird_Step;
|
||||
}
|
||||
|
||||
static void sub_80B2E20(struct Sprite *sprite)
|
||||
static void AnimSkyAttackBird_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[4] += sprite->data[6];
|
||||
sprite->data[5] += sprite->data[7];
|
||||
sprite->x = sprite->data[4] >> 4;
|
||||
sprite->y = sprite->data[5] >> 4;
|
||||
if (sprite->x > 285 || sprite->x < -45
|
||||
if (sprite->x > DISPLAY_WIDTH + 45 || sprite->x < -45
|
||||
|| sprite->y > 157 || sprite->y < -45)
|
||||
DestroySpriteAndMatrix(sprite);
|
||||
}
|
||||
|
||||
// not used
|
||||
static void sub_80B2E64(u8 taskId)
|
||||
// Unused
|
||||
static void AnimTask_SetAttackerVisibility(u8 taskId)
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
@@ -9,39 +9,39 @@
|
||||
#include "constants/songs.h"
|
||||
|
||||
static void AnimConfuseRayBallBounce(struct Sprite *sprite);
|
||||
static void sub_80B52D0(struct Sprite *sprite);
|
||||
static void sub_80B5344(struct Sprite *sprite);
|
||||
static void sub_80B53C0(struct Sprite *sprite);
|
||||
static void AnimConfuseRayBallBounce_Step1(struct Sprite *sprite);
|
||||
static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite);
|
||||
static void UpdateConfuseRayBallBlend(struct Sprite *sprite);
|
||||
static void AnimConfuseRayBallSpiral(struct Sprite *sprite);
|
||||
static void sub_80B5470(struct Sprite *sprite);
|
||||
static void sub_80B5570(u8 taskId);
|
||||
static void sub_80B55C8(u8 taskId);
|
||||
static void AnimConfuseRayBallSpiral_Step(struct Sprite *sprite);
|
||||
static void AnimTask_NightShadeClone_Step1(u8 taskId);
|
||||
static void AnimTask_NightShadeClone_Step2(u8 taskId);
|
||||
static void AnimShadowBall(struct Sprite *sprite);
|
||||
static void AnimShadowBallStep(struct Sprite *sprite);
|
||||
static void AnimShadowBall_Step(struct Sprite *sprite);
|
||||
static void AnimLick(struct Sprite *sprite);
|
||||
static void sub_80B5810(struct Sprite *sprite);
|
||||
static void sub_80B59D4(u8 taskId);
|
||||
static void sub_80B5AD4(u8 taskId);
|
||||
static void sub_80B5D38(u8 taskId);
|
||||
static void sub_80B5DCC(u8 taskId);
|
||||
static void AnimLick_Step(struct Sprite *sprite);
|
||||
static void AnimTask_NightmareClone_Step(u8 taskId);
|
||||
static void AnimTask_SpiteTargetShadow_Step1(u8 taskId);
|
||||
static void AnimTask_SpiteTargetShadow_Step2(u8 taskId);
|
||||
static void AnimTask_SpiteTargetShadow_Step3(u8 taskId);
|
||||
static void AnimDestinyBondWhiteShadow(struct Sprite *sprite);
|
||||
static void sub_80B5FE0(struct Sprite *sprite);
|
||||
static void sub_80B623C(u8 taskId);
|
||||
static void sub_80B6468(u8 taskId);
|
||||
static void sub_80B65F0(u8 taskId);
|
||||
static void AnimDestinyBondWhiteShadow_Step(struct Sprite *sprite);
|
||||
static void AnimTask_DestinyBondWhiteShadow_Step(u8 taskId);
|
||||
static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId);
|
||||
static void AnimTask_CurseStretchingBlackBg_Step2(u8 taskId);
|
||||
static void AnimCurseNail(struct Sprite *sprite);
|
||||
static void sub_80B66A8(struct Sprite *sprite);
|
||||
static void sub_80B6728(struct Sprite *sprite);
|
||||
static void sub_80B67A0(struct Sprite *sprite);
|
||||
static void AnimCurseNail_Step1(struct Sprite *sprite);
|
||||
static void AnimCurseNail_Step2(struct Sprite *sprite);
|
||||
static void AnimCurseNail_End(struct Sprite *sprite);
|
||||
static void AnimGhostStatusSprite(struct Sprite *sprite);
|
||||
static void sub_80B68A8(struct Sprite *sprite);
|
||||
static void sub_80B696C(u8 taskId);
|
||||
static void AnimGhostStatusSprite_End(struct Sprite *sprite);
|
||||
static void AnimTask_GrudgeFlames_Step(u8 taskId);
|
||||
static void AnimGrudgeFlame(struct Sprite *sprite);
|
||||
static void sub_80B7158(struct Sprite *sprite);
|
||||
static void sub_80B6BE4(u8 taskId);
|
||||
static void sub_80B6F30(u8 taskId);
|
||||
static void sub_80B6FC4(u8 taskId);
|
||||
static void sub_80B71B0(struct Sprite *sprite);
|
||||
static void AnimMonMoveCircular(struct Sprite *sprite);
|
||||
static void AnimTask_GhostGetOut_Step1(u8 taskId);
|
||||
static void AnimTask_GhostGetOut_Step2(u8 taskId);
|
||||
static void AnimTask_GhostGetOut_Step3(u8 taskId);
|
||||
static void AnimMonMoveCircular_Step(struct Sprite *sprite);
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_ConfuseRayBallBounce[] =
|
||||
{
|
||||
@@ -125,17 +125,15 @@ const struct SpriteTemplate gLickSpriteTemplate =
|
||||
.callback = AnimLick,
|
||||
};
|
||||
|
||||
// not used
|
||||
static const union AffineAnimCmd gUnknown_83E7654[] =
|
||||
static const union AffineAnimCmd sAffineAnim_Unused[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
|
||||
AFFINEANIMCMD_END,
|
||||
};
|
||||
|
||||
// not used
|
||||
static const union AffineAnimCmd *const gUnknown_83E7664[] =
|
||||
static const union AffineAnimCmd *const sAffineAnims_Unused[] =
|
||||
{
|
||||
gUnknown_83E7654,
|
||||
sAffineAnim_Unused,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gDestinyBondWhiteShadowSpriteTemplate =
|
||||
@@ -207,7 +205,8 @@ const struct SpriteTemplate gGrudgeFlameSpriteTemplate =
|
||||
.callback = AnimGrudgeFlame,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E76F8 =
|
||||
// Unused
|
||||
static const struct SpriteTemplate sMonMoveCircularSpriteTemplate =
|
||||
{
|
||||
.tileTag = 0,
|
||||
.paletteTag = 0,
|
||||
@@ -215,7 +214,7 @@ const struct SpriteTemplate gUnknown_83E76F8 =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80B7158,
|
||||
.callback = AnimMonMoveCircular,
|
||||
};
|
||||
|
||||
static void AnimConfuseRayBallBounce(struct Sprite *sprite)
|
||||
@@ -223,24 +222,24 @@ static void AnimConfuseRayBallBounce(struct Sprite *sprite)
|
||||
InitSpritePosToAnimAttacker(sprite, 1);
|
||||
sprite->data[0] = gBattleAnimArgs[2];
|
||||
sprite->data[1] = sprite->x;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
BattleAnim_InitLinearTranslationWithDuration(sprite);
|
||||
sprite->callback = sub_80B52D0;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
InitAnimLinearTranslationWithSpeed(sprite);
|
||||
sprite->callback = AnimConfuseRayBallBounce_Step1;
|
||||
sprite->data[6] = 16;
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, sprite->data[6]);
|
||||
}
|
||||
|
||||
static void sub_80B52D0(struct Sprite *sprite)
|
||||
static void AnimConfuseRayBallBounce_Step1(struct Sprite *sprite)
|
||||
{
|
||||
s16 r0, r2;
|
||||
|
||||
sub_80B53C0(sprite);
|
||||
UpdateConfuseRayBallBlend(sprite);
|
||||
if (AnimTranslateLinear(sprite))
|
||||
{
|
||||
sprite->callback = sub_80B5344;
|
||||
sprite->callback = AnimConfuseRayBallBounce_Step2;
|
||||
return;
|
||||
}
|
||||
sprite->x2 += Sin(sprite->data[5], 10);
|
||||
@@ -252,10 +251,10 @@ static void sub_80B52D0(struct Sprite *sprite)
|
||||
return;
|
||||
if (r0 <= 0)
|
||||
return;
|
||||
PlaySE12WithPanning(SE_M_CONFUSE_RAY, gUnknown_2037F24);
|
||||
PlaySE12WithPanning(SE_M_CONFUSE_RAY, gAnimCustomPanning);
|
||||
}
|
||||
|
||||
static void sub_80B5344(struct Sprite *sprite)
|
||||
static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite)
|
||||
{
|
||||
s16 r2, r0;
|
||||
|
||||
@@ -275,11 +274,11 @@ static void sub_80B5344(struct Sprite *sprite)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_80B53C0(sprite);
|
||||
UpdateConfuseRayBallBlend(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B53C0(struct Sprite *sprite)
|
||||
static void UpdateConfuseRayBallBlend(struct Sprite *sprite)
|
||||
{
|
||||
s16 r0;
|
||||
|
||||
@@ -309,11 +308,11 @@ static void sub_80B53C0(struct Sprite *sprite)
|
||||
static void AnimConfuseRayBallSpiral(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimTarget(sprite, TRUE);
|
||||
sprite->callback = sub_80B5470;
|
||||
sprite->callback = AnimConfuseRayBallSpiral_Step;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_80B5470(struct Sprite *sprite)
|
||||
static void AnimConfuseRayBallSpiral_Step(struct Sprite *sprite)
|
||||
{
|
||||
u16 temp1;
|
||||
|
||||
@@ -332,6 +331,7 @@ static void sub_80B5470(struct Sprite *sprite)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
// Creates a large transparent clone of the attacker centered on their position which shrinks to original size
|
||||
void AnimTask_NightShadeClone(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
@@ -346,10 +346,10 @@ void AnimTask_NightShadeClone(u8 taskId)
|
||||
gTasks[taskId].data[1] = *gBattleAnimArgs;
|
||||
gTasks[taskId].data[2] = 0;
|
||||
gTasks[taskId].data[3] = 16;
|
||||
gTasks[taskId].func = sub_80B5570;
|
||||
gTasks[taskId].func = AnimTask_NightShadeClone_Step1;
|
||||
}
|
||||
|
||||
static void sub_80B5570(u8 taskId)
|
||||
static void AnimTask_NightShadeClone_Step1(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[10] += 1;
|
||||
if (gTasks[taskId].data[10] == 3)
|
||||
@@ -360,11 +360,11 @@ static void sub_80B5570(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[2], gTasks[taskId].data[3]));
|
||||
if (gTasks[taskId].data[2] != 9)
|
||||
return;
|
||||
gTasks[taskId].func = sub_80B55C8;
|
||||
gTasks[taskId].func = AnimTask_NightShadeClone_Step2;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B55C8(u8 taskId)
|
||||
static void AnimTask_NightShadeClone_Step2(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
@@ -398,8 +398,8 @@ static void AnimShadowBall(struct Sprite *sprite)
|
||||
s16 oldPosX = sprite->x;
|
||||
s16 oldPosY = sprite->y;
|
||||
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[1] = gBattleAnimArgs[0];
|
||||
sprite->data[2] = gBattleAnimArgs[1];
|
||||
@@ -408,10 +408,10 @@ static void AnimShadowBall(struct Sprite *sprite)
|
||||
sprite->data[5] = sprite->y << 4;
|
||||
sprite->data[6] = ((oldPosX - sprite->x) << 4) / (gBattleAnimArgs[0] << 1);
|
||||
sprite->data[7] = ((oldPosY - sprite->y) << 4) / (gBattleAnimArgs[0] << 1);
|
||||
sprite->callback = AnimShadowBallStep;
|
||||
sprite->callback = AnimShadowBall_Step;
|
||||
}
|
||||
|
||||
static void AnimShadowBallStep(struct Sprite *sprite)
|
||||
static void AnimShadowBall_Step(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
@@ -429,8 +429,8 @@ static void AnimShadowBallStep(struct Sprite *sprite)
|
||||
sprite->data[2] -= 1;
|
||||
if (sprite->data[2] > 0)
|
||||
break;
|
||||
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[4] = sprite->x << 4;
|
||||
sprite->data[5] = sprite->y << 4;
|
||||
sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3];
|
||||
@@ -445,8 +445,8 @@ static void AnimShadowBallStep(struct Sprite *sprite)
|
||||
sprite->data[3] -= 1;
|
||||
if (sprite->data[3] > 0)
|
||||
break;
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[0] += 1;
|
||||
break;
|
||||
case 3:
|
||||
@@ -458,10 +458,10 @@ static void AnimShadowBallStep(struct Sprite *sprite)
|
||||
static void AnimLick(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimTarget(sprite, TRUE);
|
||||
sprite->callback = sub_80B5810;
|
||||
sprite->callback = AnimLick_Step;
|
||||
}
|
||||
|
||||
static void sub_80B5810(struct Sprite *sprite)
|
||||
static void AnimLick_Step(struct Sprite *sprite)
|
||||
{
|
||||
bool8 r5 = FALSE;
|
||||
bool8 r6 = FALSE;
|
||||
@@ -507,12 +507,13 @@ static void sub_80B5810(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
// Creates a transparent clone of the target which drifts up and away to the side
|
||||
void AnimTask_NightmareClone(u8 taskId)
|
||||
{
|
||||
struct Task *task;
|
||||
|
||||
task = &gTasks[taskId];
|
||||
task->data[0] = CloneBattlerSpriteWithBlend(1);
|
||||
task->data[0] = CloneBattlerSpriteWithBlend(ANIM_TARGET);
|
||||
if (task->data[0] < 0)
|
||||
{
|
||||
DestroyAnimVisualTask(taskId);
|
||||
@@ -539,10 +540,10 @@ void AnimTask_NightmareClone(u8 taskId)
|
||||
gSprites[task->data[0]].data[4] = 0;
|
||||
StoreSpriteCallbackInData6(&gSprites[task->data[0]], SpriteCallbackDummy);
|
||||
gSprites[task->data[0]].callback = TranslateSpriteLinearFixedPoint;
|
||||
task->func = sub_80B59D4;
|
||||
task->func = AnimTask_NightmareClone_Step;
|
||||
}
|
||||
|
||||
static void sub_80B59D4(u8 taskId)
|
||||
static void AnimTask_NightmareClone_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task;
|
||||
|
||||
@@ -563,7 +564,7 @@ static void sub_80B59D4(u8 taskId)
|
||||
break;
|
||||
if (task->data[1] <= 80)
|
||||
break;
|
||||
obj_delete_but_dont_free_vram(&gSprites[task->data[0]]);
|
||||
DestroySpriteWithActiveSheet(&gSprites[task->data[0]]);
|
||||
task->data[4] = 1;
|
||||
break;
|
||||
case 1:
|
||||
@@ -579,17 +580,18 @@ static void sub_80B59D4(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// Creates a blended copy of the target that wavers in front of them
|
||||
void AnimTask_SpiteTargetShadow(u8 taskId)
|
||||
{
|
||||
struct Task *task;
|
||||
|
||||
task = &gTasks[taskId];
|
||||
task->data[15] = 0;
|
||||
task->func = sub_80B5AD4;
|
||||
task->func = AnimTask_SpiteTargetShadow_Step1;
|
||||
task->func(taskId);
|
||||
}
|
||||
|
||||
static void sub_80B5AD4(u8 taskId)
|
||||
static void AnimTask_SpiteTargetShadow_Step1(u8 taskId)
|
||||
{
|
||||
s16 startLine;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -670,7 +672,7 @@ static void sub_80B5AD4(u8 taskId)
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
|
||||
else
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
|
||||
task->func = sub_80B5D38;
|
||||
task->func = AnimTask_SpiteTargetShadow_Step2;
|
||||
++task->data[15];
|
||||
break;
|
||||
default:
|
||||
@@ -679,7 +681,7 @@ static void sub_80B5AD4(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B5D38(u8 taskId)
|
||||
static void AnimTask_SpiteTargetShadow_Step2(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -693,12 +695,12 @@ static void sub_80B5D38(u8 taskId)
|
||||
if (task->data[1] == 128)
|
||||
{
|
||||
task->data[15] = 0;
|
||||
task->func = sub_80B5DCC;
|
||||
task->func = AnimTask_SpiteTargetShadow_Step3;
|
||||
task->func(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B5DCC(u8 taskId)
|
||||
static void AnimTask_SpiteTargetShadow_Step3(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
u8 rank = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget);
|
||||
@@ -718,7 +720,7 @@ static void sub_80B5DCC(u8 taskId)
|
||||
break;
|
||||
case 2:
|
||||
gSprites[task->data[14]].invisible = TRUE;
|
||||
obj_delete_but_dont_free_vram(&gSprites[task->data[0]]);
|
||||
DestroySpriteWithActiveSheet(&gSprites[task->data[0]]);
|
||||
FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
@@ -740,17 +742,17 @@ static void AnimDestinyBondWhiteShadow(struct Sprite *sprite)
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||||
battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28;
|
||||
battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
||||
battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28;
|
||||
battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
|
||||
battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28;
|
||||
battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
|
||||
battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28;
|
||||
}
|
||||
else
|
||||
{
|
||||
battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
||||
battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28;
|
||||
battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||||
battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28;
|
||||
battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
|
||||
battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 28;
|
||||
battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
|
||||
battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 28;
|
||||
}
|
||||
yDiff = battler2Y - battler1Y;
|
||||
sprite->data[0] = battler1X * 16;
|
||||
@@ -764,11 +766,11 @@ static void AnimDestinyBondWhiteShadow(struct Sprite *sprite)
|
||||
sprite->oam.priority = 2;
|
||||
sprite->x = battler1X;
|
||||
sprite->y = battler1Y;
|
||||
sprite->callback = sub_80B5FE0;
|
||||
sprite->callback = AnimDestinyBondWhiteShadow_Step;
|
||||
sprite->invisible = TRUE;
|
||||
}
|
||||
|
||||
static void sub_80B5FE0(struct Sprite *sprite)
|
||||
static void AnimDestinyBondWhiteShadow_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[4])
|
||||
{
|
||||
@@ -798,11 +800,11 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
|
||||
task->data[8] = 0;
|
||||
task->data[9] = 16;
|
||||
task->data[10] = gBattleAnimArgs[0];
|
||||
baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM);
|
||||
if (!IsContest())
|
||||
{
|
||||
for (battler = 0; battler < 4; ++battler)
|
||||
for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler)
|
||||
{
|
||||
if (battler != gBattleAnimAttacker
|
||||
&& battler != (gBattleAnimAttacker ^ 2)
|
||||
@@ -811,7 +813,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
|
||||
spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
x = GetBattlerSpriteCoord(battler, 2);
|
||||
x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
|
||||
y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_BOTTOM);
|
||||
gSprites[spriteId].data[0] = baseX << 4;
|
||||
gSprites[spriteId].data[1] = baseY << 4;
|
||||
@@ -820,7 +822,7 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
|
||||
gSprites[spriteId].data[4] = gBattleAnimArgs[1];
|
||||
gSprites[spriteId].data[5] = x;
|
||||
gSprites[spriteId].data[6] = y;
|
||||
gSprites[spriteId].callback = sub_80B5FE0;
|
||||
gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step;
|
||||
task->data[task->data[12] + 13] = spriteId;
|
||||
++task->data[12];
|
||||
}
|
||||
@@ -841,15 +843,15 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
|
||||
gSprites[spriteId].data[4] = gBattleAnimArgs[1];
|
||||
gSprites[spriteId].data[5] = x;
|
||||
gSprites[spriteId].data[6] = y;
|
||||
gSprites[spriteId].callback = sub_80B5FE0;
|
||||
gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step;
|
||||
task->data[13] = spriteId;
|
||||
task->data[12] = 1;
|
||||
}
|
||||
}
|
||||
task->func = sub_80B623C;
|
||||
task->func = AnimTask_DestinyBondWhiteShadow_Step;
|
||||
}
|
||||
|
||||
static void sub_80B623C(u8 taskId)
|
||||
static void AnimTask_DestinyBondWhiteShadow_Step(u8 taskId)
|
||||
{
|
||||
u16 i;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -933,7 +935,7 @@ void AnimTask_CurseStretchingBlackBg(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_WINOUT, ((WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) |
|
||||
(WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR)));
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN));
|
||||
SetGpuReg(REG_OFFSET_BLDY, 0x10);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 16);
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest())
|
||||
startX = 40;
|
||||
else
|
||||
@@ -951,10 +953,10 @@ void AnimTask_CurseStretchingBlackBg(u8 taskId)
|
||||
gTasks[taskId].data[4] = bottomDistance;
|
||||
gTasks[taskId].data[5] = startX;
|
||||
gTasks[taskId].data[6] = startY;
|
||||
gTasks[taskId].func = sub_80B6468;
|
||||
gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step1;
|
||||
}
|
||||
|
||||
static void sub_80B6468(u8 taskId)
|
||||
static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId)
|
||||
{
|
||||
s16 step, leftDistance, rightDistance, topDistance, bottomDistance, startX, startY;
|
||||
u16 left, right, top, bottom, selectedPalettes;
|
||||
@@ -980,15 +982,15 @@ static void sub_80B6468(u8 taskId)
|
||||
right = 240;
|
||||
top = 0;
|
||||
bottom = 112;
|
||||
selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
|
||||
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0));
|
||||
gTasks[taskId].func = sub_80B65F0;
|
||||
gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step2;
|
||||
}
|
||||
gBattle_WIN0H = WIN_RANGE(left, right);
|
||||
gBattle_WIN0V = WIN_RANGE(top, bottom);
|
||||
}
|
||||
|
||||
static void sub_80B65F0(u8 taskId)
|
||||
static void AnimTask_CurseStretchingBlackBg_Step2(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
@@ -1023,10 +1025,10 @@ static void AnimCurseNail(struct Sprite *sprite)
|
||||
sprite->x += xDelta;
|
||||
sprite->data[1] = xDelta2;
|
||||
sprite->data[0] = 60;
|
||||
sprite->callback = sub_80B66A8;
|
||||
sprite->callback = AnimCurseNail_Step1;
|
||||
}
|
||||
|
||||
static void sub_80B66A8(struct Sprite *sprite)
|
||||
static void AnimCurseNail_Step1(struct Sprite *sprite)
|
||||
{
|
||||
u16 var0;
|
||||
|
||||
@@ -1047,7 +1049,7 @@ static void sub_80B66A8(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = 30;
|
||||
sprite->callback = WaitAnimForDuration;
|
||||
StoreSpriteCallbackInData6(sprite, sub_80B6728);
|
||||
StoreSpriteCallbackInData6(sprite, AnimCurseNail_Step2);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1057,7 +1059,7 @@ static void sub_80B66A8(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B6728(struct Sprite *sprite)
|
||||
static void AnimCurseNail_Step2(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
@@ -1079,12 +1081,12 @@ static void sub_80B6728(struct Sprite *sprite)
|
||||
if (sprite->data[2] == 16)
|
||||
{
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = sub_80B67A0;
|
||||
sprite->callback = AnimCurseNail_End;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B67A0(struct Sprite *sprite)
|
||||
static void AnimCurseNail_End(struct Sprite *sprite)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
@@ -1125,12 +1127,12 @@ static void AnimGhostStatusSprite(struct Sprite *sprite)
|
||||
if (coeffB == 16 && coeffA == 0)
|
||||
{
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = sub_80B68A8;
|
||||
sprite->callback = AnimGhostStatusSprite_End;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B68A8(struct Sprite *sprite)
|
||||
static void AnimGhostStatusSprite_End(struct Sprite *sprite)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
@@ -1143,7 +1145,7 @@ void AnimTask_GrudgeFlames(u8 taskId)
|
||||
|
||||
task->data[0] = 0;
|
||||
task->data[1] = 16;
|
||||
task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
|
||||
task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2) + 8;
|
||||
task->data[7] = 0;
|
||||
@@ -1154,10 +1156,10 @@ void AnimTask_GrudgeFlames(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
|
||||
task->data[8] = 0;
|
||||
task->func = sub_80B696C;
|
||||
task->func = AnimTask_GrudgeFlames_Step;
|
||||
}
|
||||
|
||||
static void sub_80B696C(u8 taskId)
|
||||
static void AnimTask_GrudgeFlames_Step(u8 taskId)
|
||||
{
|
||||
u16 i;
|
||||
u8 spriteId;
|
||||
@@ -1260,16 +1262,18 @@ static void AnimGrudgeFlame(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80B6BBC(u8 taskId)
|
||||
// Used by the ghost Marowak when it hasn't been revealed by the Silph Scope.
|
||||
// Animates a shimmering copy of the attacker (the ghost) accompanied by the 'Scary Face' graphics
|
||||
void AnimTask_GhostGetOut(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
task->data[15] = 0;
|
||||
task->func = sub_80B6BE4;
|
||||
sub_80B6BE4(taskId);
|
||||
task->func = AnimTask_GhostGetOut_Step1;
|
||||
task->func(taskId);
|
||||
}
|
||||
|
||||
static void sub_80B6BE4(u8 taskId)
|
||||
static void AnimTask_GhostGetOut_Step1(u8 taskId)
|
||||
{
|
||||
s16 y;
|
||||
struct BattleAnimBgData animBgData;
|
||||
@@ -1365,14 +1369,14 @@ static void sub_80B6BE4(u8 taskId)
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
|
||||
else
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
|
||||
task->func = sub_80B6F30;
|
||||
task->func = AnimTask_GhostGetOut_Step2;
|
||||
task->data[15] = 0;
|
||||
break;
|
||||
}
|
||||
++task->data[15];
|
||||
}
|
||||
|
||||
static void sub_80B6F30(u8 taskId)
|
||||
static void AnimTask_GhostGetOut_Step2(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -1386,12 +1390,12 @@ static void sub_80B6F30(u8 taskId)
|
||||
if (task->data[1] == 128)
|
||||
{
|
||||
task->data[15] = 0;
|
||||
task->func = sub_80B6FC4;
|
||||
sub_80B6FC4(taskId);
|
||||
task->func = AnimTask_GhostGetOut_Step3;
|
||||
task->func(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B6FC4(u8 taskId)
|
||||
static void AnimTask_GhostGetOut_Step3(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -1447,7 +1451,7 @@ static void sub_80B6FC4(u8 taskId)
|
||||
++task->data[15];
|
||||
}
|
||||
|
||||
static void sub_80B7158(struct Sprite *sprite)
|
||||
static void AnimMonMoveCircular(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = TRUE;
|
||||
sprite->data[5] = gBattlerSpriteIds[gBattleAnimAttacker];
|
||||
@@ -1455,11 +1459,11 @@ static void sub_80B7158(struct Sprite *sprite)
|
||||
sprite->data[1] = 10;
|
||||
sprite->data[2] = gBattleAnimArgs[0];
|
||||
sprite->data[3] = gBattleAnimArgs[1];
|
||||
sprite->callback = sub_80B71B0;
|
||||
sprite->callback = AnimMonMoveCircular_Step;
|
||||
gSprites[sprite->data[5]].y += 8;
|
||||
}
|
||||
|
||||
static void sub_80B71B0(struct Sprite *sprite)
|
||||
static void AnimMonMoveCircular_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[3])
|
||||
{
|
||||
@@ -9,22 +9,22 @@ static void AnimBonemerangProjectile(struct Sprite *sprite);
|
||||
static void AnimBoneHitProjectile(struct Sprite *sprite);
|
||||
static void AnimDirtScatter(struct Sprite *sprite);
|
||||
static void AnimMudSportDirt(struct Sprite *sprite);
|
||||
static void AnimFissureDirtPlumeParticle(struct Sprite *sprite);
|
||||
static void AnimDirtPlumeParticle(struct Sprite *sprite);
|
||||
static void AnimDigDirtMound(struct Sprite *sprite);
|
||||
static void AnimBonemerangProjectileStep(struct Sprite *sprite);
|
||||
static void AnimBonemerangProjectileEnd(struct Sprite *sprite);
|
||||
static void AnimBonemerangProjectile_Step(struct Sprite *sprite);
|
||||
static void AnimBonemerangProjectile_End(struct Sprite *sprite);
|
||||
static void AnimMudSportDirtRising(struct Sprite *sprite);
|
||||
static void AnimMudSportDirtFalling(struct Sprite *sprite);
|
||||
static void sub_80B8ED4(u8 taskId);
|
||||
static void sub_80B908C(u8 taskId);
|
||||
static void sub_80B92B8(u8 useBg1, s16 y, s16 endY);
|
||||
static void sub_80B912C(u8 taskId);
|
||||
static void sub_80B91B0(u8 taskId);
|
||||
static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite);
|
||||
static void sub_80B9584(u8 taskId);
|
||||
static void sub_80B967C(u8 taskId);
|
||||
static void sub_80B9760(struct Task *task);
|
||||
static void sub_80B98A8(u8 taskId);
|
||||
static void AnimTask_DigBounceMovement(u8 taskId);
|
||||
static void AnimTask_DigDisappear(u8 taskId);
|
||||
static void SetDigScanlineEffect(u8 useBg1, s16 y, s16 endY);
|
||||
static void AnimTask_DigSetVisibleUnderground(u8 taskId);
|
||||
static void AnimTask_DigRiseUpFromHole(u8 taskId);
|
||||
static void AnimDirtPlumeParticle_Step(struct Sprite *sprite);
|
||||
static void AnimTask_ShakeTerrain(u8 taskId);
|
||||
static void AnimTask_ShakeBattlers(u8 taskId);
|
||||
static void SetBattlersXOffsetForShake(struct Task *task);
|
||||
static void WaitForFissureCompletion(u8 taskId);
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_Bonemerang[] =
|
||||
{
|
||||
@@ -122,7 +122,7 @@ const struct SpriteTemplate gDirtPlumeSpriteTemplate =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimFissureDirtPlumeParticle,
|
||||
.callback = AnimDirtPlumeParticle,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gDirtMoundSpriteTemplate =
|
||||
@@ -140,17 +140,17 @@ const struct SpriteTemplate gDirtMoundSpriteTemplate =
|
||||
// a boomerang. After hitting the target mon, it comes back to the user.
|
||||
static void AnimBonemerangProjectile(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[0] = 20;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[5] = -40;
|
||||
InitAnimArcTranslation(sprite);
|
||||
sprite->callback = AnimBonemerangProjectileStep;
|
||||
sprite->callback = AnimBonemerangProjectile_Step;
|
||||
}
|
||||
|
||||
static void AnimBonemerangProjectileStep(struct Sprite *sprite)
|
||||
static void AnimBonemerangProjectile_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
{
|
||||
@@ -159,15 +159,15 @@ static void AnimBonemerangProjectileStep(struct Sprite *sprite)
|
||||
sprite->y2 = 0;
|
||||
sprite->x2 = 0;
|
||||
sprite->data[0] = 20;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[5] = 40;
|
||||
InitAnimArcTranslation(sprite);
|
||||
sprite->callback = AnimBonemerangProjectileEnd;
|
||||
sprite->callback = AnimBonemerangProjectile_End;
|
||||
}
|
||||
}
|
||||
|
||||
static void AnimBonemerangProjectileEnd(struct Sprite *sprite)
|
||||
static void AnimBonemerangProjectile_End(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -186,8 +186,8 @@ static void AnimBoneHitProjectile(struct Sprite *sprite)
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
sprite->callback = StartAnimLinearTranslation;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
@@ -204,8 +204,8 @@ static void AnimDirtScatter(struct Sprite *sprite)
|
||||
s16 xOffset, yOffset;
|
||||
|
||||
InitSpritePosToAnimAttacker(sprite, 1);
|
||||
targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 2);
|
||||
targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 3);
|
||||
targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
xOffset = Random() & 0x1F;
|
||||
yOffset = Random() & 0x1F;
|
||||
if (xOffset > 16)
|
||||
@@ -229,8 +229,8 @@ static void AnimMudSportDirt(struct Sprite *sprite)
|
||||
++sprite->oam.tileNum;
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
|
||||
sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1;
|
||||
sprite->callback = AnimMudSportDirtRising;
|
||||
}
|
||||
@@ -283,14 +283,14 @@ void AnimTask_DigDownMovement(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
task->func = sub_80B8ED4;
|
||||
if (gBattleAnimArgs[0] == FALSE)
|
||||
task->func = AnimTask_DigBounceMovement;
|
||||
else
|
||||
task->func = sub_80B908C;
|
||||
task->func = AnimTask_DigDisappear;
|
||||
task->func(taskId);
|
||||
}
|
||||
|
||||
static void sub_80B8ED4(u8 taskId)
|
||||
static void AnimTask_DigBounceMovement(u8 taskId)
|
||||
{
|
||||
u8 var0;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -319,7 +319,7 @@ static void sub_80B8ED4(u8 taskId)
|
||||
++task->data[0];
|
||||
break;
|
||||
case 1:
|
||||
sub_80B92B8(task->data[11], task->data[14], task->data[15]);
|
||||
SetDigScanlineEffect(task->data[11], task->data[14], task->data[15]);
|
||||
++task->data[0];
|
||||
break;
|
||||
case 2:
|
||||
@@ -358,7 +358,7 @@ static void sub_80B8ED4(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B908C(u8 taskId)
|
||||
static void AnimTask_DigDisappear(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
|
||||
@@ -376,15 +376,15 @@ void AnimTask_DigUpMovement(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
task->func = sub_80B912C;
|
||||
if (gBattleAnimArgs[0] == FALSE)
|
||||
task->func = AnimTask_DigSetVisibleUnderground;
|
||||
else
|
||||
task->func = sub_80B91B0;
|
||||
task->func = AnimTask_DigRiseUpFromHole;
|
||||
|
||||
task->func(taskId);
|
||||
}
|
||||
|
||||
static void sub_80B912C(u8 taskId)
|
||||
static void AnimTask_DigSetVisibleUnderground(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -394,7 +394,7 @@ static void sub_80B912C(u8 taskId)
|
||||
task->data[10] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
gSprites[task->data[10]].invisible = FALSE;
|
||||
gSprites[task->data[10]].x2 = 0;
|
||||
gSprites[task->data[10]].y2 = 160 - gSprites[task->data[10]].y;
|
||||
gSprites[task->data[10]].y2 = DISPLAY_HEIGHT - gSprites[task->data[10]].y;
|
||||
++task->data[0];
|
||||
break;
|
||||
case 1:
|
||||
@@ -402,7 +402,7 @@ static void sub_80B912C(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B91B0(u8 taskId)
|
||||
static void AnimTask_DigRiseUpFromHole(u8 taskId)
|
||||
{
|
||||
u8 var0;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -422,7 +422,7 @@ static void sub_80B91B0(u8 taskId)
|
||||
++task->data[0];
|
||||
break;
|
||||
case 1:
|
||||
sub_80B92B8(task->data[11], 0, task->data[15]);
|
||||
SetDigScanlineEffect(task->data[11], 0, task->data[15]);
|
||||
++task->data[0];
|
||||
break;
|
||||
case 2:
|
||||
@@ -443,7 +443,7 @@ static void sub_80B91B0(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B92B8(u8 useBG1, s16 y, s16 endY)
|
||||
static void SetDigScanlineEffect(u8 useBG1, s16 y, s16 endY)
|
||||
{
|
||||
s16 bgX;
|
||||
struct ScanlineEffectParams scanlineParams;
|
||||
@@ -485,7 +485,7 @@ static void sub_80B92B8(u8 useBG1, s16 y, s16 endY)
|
||||
// arg 3: target y offset
|
||||
// arg 4: wave amplitude
|
||||
// arg 5: duration
|
||||
static void AnimFissureDirtPlumeParticle(struct Sprite *sprite)
|
||||
static void AnimDirtPlumeParticle(struct Sprite *sprite)
|
||||
{
|
||||
s8 battler;
|
||||
s16 xOffset;
|
||||
@@ -500,17 +500,17 @@ static void AnimFissureDirtPlumeParticle(struct Sprite *sprite)
|
||||
xOffset *= -1;
|
||||
gBattleAnimArgs[2] *= -1;
|
||||
}
|
||||
sprite->x = GetBattlerSpriteCoord(battler, 2) + xOffset;
|
||||
sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + xOffset;
|
||||
sprite->y = GetBattlerYCoordWithElevation(battler) + 30;
|
||||
sprite->data[0] = gBattleAnimArgs[5];
|
||||
sprite->data[2] = sprite->x + gBattleAnimArgs[2];
|
||||
sprite->data[4] = sprite->y + gBattleAnimArgs[3];
|
||||
sprite->data[5] = gBattleAnimArgs[4];
|
||||
InitAnimArcTranslation(sprite);
|
||||
sprite->callback = AnimFissureDirtPlumeParticleStep;
|
||||
sprite->callback = AnimDirtPlumeParticle_Step;
|
||||
}
|
||||
|
||||
static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite)
|
||||
static void AnimDirtPlumeParticle_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -530,7 +530,7 @@ static void AnimDigDirtMound(struct Sprite *sprite)
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battler = gBattleAnimTarget;
|
||||
sprite->x = GetBattlerSpriteCoord(battler, 0) - 16 + (gBattleAnimArgs[1] * 32);
|
||||
sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X) - 16 + (gBattleAnimArgs[1] * 32);
|
||||
sprite->y = GetBattlerYCoordWithElevation(battler) + 32;
|
||||
sprite->oam.tileNum += gBattleAnimArgs[1] * 8;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
@@ -538,151 +538,178 @@ static void AnimDigDirtMound(struct Sprite *sprite)
|
||||
sprite->callback = WaitAnimForDuration;
|
||||
}
|
||||
|
||||
#define tState data[0]
|
||||
#define tDelay data[1]
|
||||
#define tTimer data[2]
|
||||
#define tMaxTime data[3]
|
||||
#define tbattlerSpriteIds(i) data[9 + (i)]
|
||||
#define tNumBattlers data[13] // AnimTask_ShakeBattlers
|
||||
#define tInitialX data[13] // AnimTask_ShakeTerrain
|
||||
#define tHorizOffset data[14]
|
||||
#define tInitHorizOffset data[15]
|
||||
|
||||
// Shakes battler(s) or the battle terrain back and forth horizontally. Used by e.g. Earthquake, Eruption
|
||||
// arg0: What to shake. 0-3 for any specific battler, MAX_BATTLERS_COUNT for all battlers, MAX_BATTLERS_COUNT + 1 for the terrain
|
||||
// arg1: Shake intensity, used to calculate horizontal pixel offset (if 0, use move power instead)
|
||||
// arg2: Length of time to shake for
|
||||
void AnimTask_HorizontalShake(u8 taskId)
|
||||
{
|
||||
u16 i;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
if (gBattleAnimArgs[1])
|
||||
task->data[14] = task->data[15] = gBattleAnimArgs[1] + 3;
|
||||
if (gBattleAnimArgs[1] != 0)
|
||||
task->tHorizOffset = task->tInitHorizOffset = gBattleAnimArgs[1] + 3;
|
||||
else
|
||||
task->data[14] = task->data[15] = (gAnimMovePower / 10) + 3;
|
||||
task->tHorizOffset = task->tInitHorizOffset = (gAnimMovePower / 10) + 3;
|
||||
|
||||
task->data[3] = gBattleAnimArgs[2];
|
||||
task->tMaxTime = gBattleAnimArgs[2];
|
||||
switch (gBattleAnimArgs[0])
|
||||
{
|
||||
case 5:
|
||||
task->data[13] = gBattle_BG3_X;
|
||||
task->func = sub_80B9584;
|
||||
case MAX_BATTLERS_COUNT + 1: // Shake terrain
|
||||
task->tInitialX = gBattle_BG3_X;
|
||||
task->func = AnimTask_ShakeTerrain;
|
||||
break;
|
||||
case 4:
|
||||
task->data[13] = 0;
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
|
||||
case MAX_BATTLERS_COUNT: // Shake all battlers
|
||||
task->tNumBattlers = 0;
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
if (IsBattlerSpriteVisible(i))
|
||||
{
|
||||
task->data[task->data[13] + 9] = gBattlerSpriteIds[i];
|
||||
++task->data[13];
|
||||
task->tbattlerSpriteIds(task->tNumBattlers) = gBattlerSpriteIds[i];
|
||||
task->tNumBattlers++;
|
||||
}
|
||||
}
|
||||
task->func = sub_80B967C;
|
||||
task->func = AnimTask_ShakeBattlers;
|
||||
break;
|
||||
default:
|
||||
task->data[9] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
if (task->data[9] == 0xFF)
|
||||
default: // Shake specific battler
|
||||
task->tbattlerSpriteIds(0) = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
if (task->tbattlerSpriteIds(0) == SPRITE_NONE)
|
||||
{
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
task->data[13] = 1;
|
||||
task->func = sub_80B967C;
|
||||
task->tNumBattlers = 1;
|
||||
task->func = AnimTask_ShakeBattlers;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B9584(u8 taskId)
|
||||
static void AnimTask_ShakeTerrain(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
if (++task->data[1] > 1)
|
||||
if (++task->tDelay > 1)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
if ((task->data[2] & 1) == 0)
|
||||
gBattle_BG3_X = task->data[13] + task->data[15];
|
||||
task->tDelay = 0;
|
||||
if ((task->tTimer & 1) == 0)
|
||||
gBattle_BG3_X = task->tInitialX + task->tInitHorizOffset;
|
||||
else
|
||||
gBattle_BG3_X = task->data[13] - task->data[15];
|
||||
gBattle_BG3_X = task->tInitialX - task->tInitHorizOffset;
|
||||
|
||||
if (++task->data[2] == task->data[3])
|
||||
if (++task->tTimer == task->tMaxTime)
|
||||
{
|
||||
task->data[2] = 0;
|
||||
--task->data[14];
|
||||
++task->data[0];
|
||||
task->tTimer = 0;
|
||||
task->tHorizOffset--;
|
||||
task->tState++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (++task->data[1] > 1)
|
||||
if (++task->tDelay > 1)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
if ((task->data[2] & 1) == 0)
|
||||
gBattle_BG3_X = task->data[13] + task->data[14];
|
||||
task->tDelay = 0;
|
||||
if ((task->tTimer & 1) == 0)
|
||||
gBattle_BG3_X = task->tInitialX + task->tHorizOffset;
|
||||
else
|
||||
gBattle_BG3_X = task->data[13] - task->data[14];
|
||||
gBattle_BG3_X = task->tInitialX - task->tHorizOffset;
|
||||
|
||||
if (++task->data[2] == 4)
|
||||
if (++task->tTimer == 4)
|
||||
{
|
||||
task->data[2] = 0;
|
||||
if (--task->data[14] == 0)
|
||||
++task->data[0];
|
||||
task->tTimer = 0;
|
||||
if (--task->tHorizOffset == 0)
|
||||
task->tState++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
gBattle_BG3_X = task->data[13];
|
||||
gBattle_BG3_X = task->tInitialX;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B967C(u8 taskId)
|
||||
static void AnimTask_ShakeBattlers(u8 taskId)
|
||||
{
|
||||
u16 i;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
if (++task->data[1] > 1)
|
||||
if (++task->tDelay > 1)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
sub_80B9760(task);
|
||||
if (++task->data[2] == task->data[3])
|
||||
task->tDelay = 0;
|
||||
SetBattlersXOffsetForShake(task);
|
||||
if (++task->tTimer == task->tMaxTime)
|
||||
{
|
||||
task->data[2] = 0;
|
||||
--task->data[14];
|
||||
++task->data[0];
|
||||
task->tTimer = 0;
|
||||
task->tHorizOffset--;
|
||||
task->tState++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (++task->data[1] > 1)
|
||||
if (++task->tDelay > 1)
|
||||
{
|
||||
task->data[1] = 0;
|
||||
sub_80B9760(task);
|
||||
if (++task->data[2] == 4)
|
||||
task->tDelay = 0;
|
||||
SetBattlersXOffsetForShake(task);
|
||||
if (++task->tTimer == 4)
|
||||
{
|
||||
task->data[2] = 0;
|
||||
if (--task->data[14] == 0)
|
||||
++task->data[0];
|
||||
task->tTimer = 0;
|
||||
if (--task->tHorizOffset == 0)
|
||||
task->tState++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
for (i = 0; i < task->data[13]; ++i)
|
||||
gSprites[task->data[9 + i]].x2 = 0;
|
||||
for (i = 0; i < task->tNumBattlers; i++)
|
||||
gSprites[task->tbattlerSpriteIds(i)].x2 = 0;
|
||||
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B9760(struct Task *task)
|
||||
static void SetBattlersXOffsetForShake(struct Task *task)
|
||||
{
|
||||
u16 i, xOffset;
|
||||
|
||||
if ((task->data[2] & 1) == 0)
|
||||
xOffset = (task->data[14] / 2) + (task->data[14] & 1);
|
||||
if ((task->tTimer & 1) == 0)
|
||||
xOffset = (task->tHorizOffset / 2) + (task->tHorizOffset & 1);
|
||||
else
|
||||
xOffset = -(task->data[14] / 2);
|
||||
for (i = 0; i < task->data[13]; ++i)
|
||||
gSprites[task->data[9 + i]].x2 = xOffset;
|
||||
xOffset = -(task->tHorizOffset / 2);
|
||||
|
||||
for (i = 0; i < task->tNumBattlers; i++)
|
||||
{
|
||||
gSprites[task->tbattlerSpriteIds(i)].x2 = xOffset;
|
||||
}
|
||||
}
|
||||
|
||||
#undef tState
|
||||
#undef tDelay
|
||||
#undef tTimer
|
||||
#undef tMaxTime
|
||||
#undef tbattlerSpriteIds
|
||||
#undef tNumBattlers
|
||||
#undef tInitialX
|
||||
#undef tHorizOffset
|
||||
#undef tInitHorizOffset
|
||||
|
||||
void AnimTask_IsPowerOver99(u8 taskId)
|
||||
{
|
||||
gBattleAnimArgs[15] = gAnimMovePower > 99;
|
||||
@@ -696,19 +723,21 @@ void AnimTask_PositionFissureBgOnBattler(u8 taskId)
|
||||
|
||||
if (gBattleAnimArgs[0] > 1)
|
||||
battler ^= BIT_FLANK;
|
||||
newTask = &gTasks[CreateTask(sub_80B98A8, gBattleAnimArgs[1])];
|
||||
newTask->data[1] = (32 - GetBattlerSpriteCoord(battler, 2)) & 0x1FF;
|
||||
newTask->data[2] = (64 - GetBattlerSpriteCoord(battler, 3)) & 0xFF;
|
||||
newTask = &gTasks[CreateTask(WaitForFissureCompletion, gBattleAnimArgs[1])];
|
||||
newTask->data[1] = (32 - GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2)) & 0x1FF;
|
||||
newTask->data[2] = (64 - GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET)) & 0xFF;
|
||||
gBattle_BG3_X = newTask->data[1];
|
||||
gBattle_BG3_Y = newTask->data[2];
|
||||
newTask->data[3] = gBattleAnimArgs[2];
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
static void sub_80B98A8(u8 taskId)
|
||||
static void WaitForFissureCompletion(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
// Holds the BG3 offsets until gBattleAnimArgs[7]
|
||||
// is set to a special terminator value.
|
||||
if (gBattleAnimArgs[7] == task->data[3])
|
||||
{
|
||||
gBattle_BG3_X = 0;
|
||||
@@ -9,21 +9,21 @@
|
||||
|
||||
struct HailStruct
|
||||
{
|
||||
s32 unk0:10;
|
||||
s32 unk1:10;
|
||||
s32 unk2:8;
|
||||
s32 x:10;
|
||||
s32 y:10;
|
||||
s32 bPosition:8;
|
||||
s32 unk3:4;
|
||||
};
|
||||
|
||||
static void sub_80AF108(struct Sprite *sprite);
|
||||
static void sub_80AF28C(struct Sprite *sprite);
|
||||
static void AnimUnusedIceCrystalThrow(struct Sprite *sprite);
|
||||
static void AnimUnusedIceCrystalThrow_Step(struct Sprite *sprite);
|
||||
static void AnimIcePunchSwirlingParticle(struct Sprite *sprite);
|
||||
static void AnimIceBeamParticle(struct Sprite *sprite);
|
||||
static void AnimIceEffectParticle(struct Sprite *sprite);
|
||||
static void AnimFlickerIceEffectParticle(struct Sprite *sprite);
|
||||
static void AnimSwirlingSnowball(struct Sprite *sprite);
|
||||
static void AnimSwirlingSnowball_Step1(struct Sprite *sprite);
|
||||
static void AnimSwirlingSnowball_Step2(struct Sprite *sprite);
|
||||
static void AnimSwirlingSnowball_Step3(struct Sprite *sprite);
|
||||
static void AnimSwirlingSnowball_End(struct Sprite *sprite);
|
||||
static void AnimMoveParticleBeyondTarget(struct Sprite *sprite);
|
||||
static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite);
|
||||
@@ -39,25 +39,24 @@ static void InitIceBallAnim(struct Sprite *sprite);
|
||||
static void AnimThrowIceBall(struct Sprite *sprite);
|
||||
static void InitIceBallParticle(struct Sprite *sprite);
|
||||
static void AnimIceBallParticle(struct Sprite *sprite);
|
||||
static void AnimTask_Haze2(u8 taskId);
|
||||
static void AnimTask_OverlayFogTiles(u8 taskId);
|
||||
static void AnimTask_HazeScrollingFog_Step(u8 taskId);
|
||||
static void AnimTask_MistBallFog_Step(u8 taskId);
|
||||
static void AnimTask_Hail2(u8 taskId);
|
||||
static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c);
|
||||
|
||||
static const union AnimCmd gUnknown_83E62C0[] =
|
||||
static const union AnimCmd sAnim_Unused[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(1, 5, .hFlip = TRUE),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_83E62CC[] =
|
||||
static const union AnimCmd *const sAnims_Unused[] =
|
||||
{
|
||||
gUnknown_83E62C0,
|
||||
sAnim_Unused,
|
||||
};
|
||||
|
||||
// not used
|
||||
static const struct SpriteTemplate gUnknown_83E62D0 =
|
||||
static const struct SpriteTemplate sUnusedIceCrystalThrowSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
@@ -65,10 +64,10 @@ static const struct SpriteTemplate gUnknown_83E62D0 =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80AF108,
|
||||
.callback = AnimUnusedIceCrystalThrow,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_83E62E8[] =
|
||||
static const union AnimCmd sAnim_IceCrystalLargeChunk[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_END,
|
||||
@@ -105,10 +104,10 @@ static const union AnimCmd sAnim_SmallBubblePair[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
// unused
|
||||
static const union AnimCmd *const gUnknown_83E631C[] =
|
||||
// Unused, contains just the top left corner of the large ice crystal
|
||||
static const union AnimCmd *const sAnims_IceCrystalLargeChunk[] =
|
||||
{
|
||||
gUnknown_83E62E8,
|
||||
sAnim_IceCrystalLargeChunk,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_IceCrystalLarge[] =
|
||||
@@ -245,7 +244,7 @@ const struct SpriteTemplate gSwirlingSnowballSpriteTemplate =
|
||||
.anims = sAnims_Snowball,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimSwirlingSnowball_Step1,
|
||||
.callback = AnimSwirlingSnowball,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gBlizzardIceCrystalSpriteTemplate =
|
||||
@@ -332,7 +331,7 @@ const struct SpriteTemplate gSmogCloudSpriteTemplate =
|
||||
.callback = InitSwirlingFogAnim,
|
||||
};
|
||||
|
||||
static const u8 gUnknown_83E64D4[] =
|
||||
static const u8 sHazeBlendAmounts[] =
|
||||
{
|
||||
0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9,
|
||||
};
|
||||
@@ -348,7 +347,7 @@ const struct SpriteTemplate gMistBallSpriteTemplate =
|
||||
.callback = AnimThrowMistBall,
|
||||
};
|
||||
|
||||
static const u8 gUnknown_83E6500[] =
|
||||
static const u8 sMistBlendAmounts[] =
|
||||
{
|
||||
0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5,
|
||||
};
|
||||
@@ -366,16 +365,16 @@ const struct SpriteTemplate gPoisonGasCloudSpriteTemplate =
|
||||
|
||||
static const struct HailStruct sHailCoordData[] =
|
||||
{
|
||||
{100, 120, 0, 2},
|
||||
{85, 120, 0, 0},
|
||||
{242, 120, 1, 1},
|
||||
{66, 120, 2, 1},
|
||||
{182, 120, 3, 0},
|
||||
{60, 120, 0, 2},
|
||||
{214, 120, 1, 0},
|
||||
{113, 120, 0, 1},
|
||||
{210, 120, 3, 1},
|
||||
{38, 120, 2, 0},
|
||||
{.x = 100, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
|
||||
{.x = 85, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 0},
|
||||
{.x = 242, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 1},
|
||||
{.x = 66, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 1},
|
||||
{.x = 182, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 0},
|
||||
{.x = 60, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
|
||||
{.x = 214, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 0},
|
||||
{.x = 113, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 1},
|
||||
{.x = 210, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 1},
|
||||
{.x = 38, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 0},
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_HailParticle_0[] =
|
||||
@@ -518,8 +517,7 @@ const struct SpriteTemplate gIceBallImpactShardSpriteTemplate =
|
||||
.callback = InitIceBallParticle,
|
||||
};
|
||||
|
||||
// not used
|
||||
static void sub_80AF108(struct Sprite *sprite)
|
||||
static void AnimUnusedIceCrystalThrow(struct Sprite *sprite)
|
||||
{
|
||||
s16 targetX, targetY, attackerX, attackerY;
|
||||
|
||||
@@ -533,13 +531,15 @@ static void sub_80AF108(struct Sprite *sprite)
|
||||
sprite->data[2] = gBattleAnimArgs[2] + targetX;
|
||||
sprite->data[3] = gBattleAnimArgs[1] + attackerY;
|
||||
sprite->data[4] = gBattleAnimArgs[3] + targetY;
|
||||
SetupLinearTranslationWithFixedDuration(sprite);
|
||||
ConvertPosDataToTranslateLinearData(sprite);
|
||||
// won't match with while loop
|
||||
for (; (targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192); targetX += sprite->data[1], targetY += sprite->data[2])
|
||||
for (; (targetX >= -32 && targetX <= DISPLAY_WIDTH + 32) && (targetY >= -32 && targetY <= DISPLAY_HEIGHT + 32);
|
||||
targetX += sprite->data[1], targetY += sprite->data[2])
|
||||
;
|
||||
sprite->data[1] = -sprite->data[1];
|
||||
sprite->data[2] = -sprite->data[2];
|
||||
for (; (attackerX >= -32 && attackerX <= 272) && (attackerY >= -32 && attackerY <= 192); attackerX += sprite->data[1], attackerY += sprite->data[2])
|
||||
for (; (attackerX >= -32 && attackerX <= DISPLAY_WIDTH + 32) && (attackerY >= -32 && attackerY <= DISPLAY_HEIGHT + 32);
|
||||
attackerX += sprite->data[1], attackerY += sprite->data[2])
|
||||
;
|
||||
sprite->x = attackerX;
|
||||
sprite->y = attackerY;
|
||||
@@ -548,14 +548,13 @@ static void sub_80AF108(struct Sprite *sprite)
|
||||
sprite->data[2] = targetX;
|
||||
sprite->data[3] = attackerY;
|
||||
sprite->data[4] = targetY;
|
||||
SetupLinearTranslationWithFixedDuration(sprite);
|
||||
ConvertPosDataToTranslateLinearData(sprite);
|
||||
sprite->data[3] = gBattleAnimArgs[5];
|
||||
sprite->data[4] = gBattleAnimArgs[6];
|
||||
sprite->callback = sub_80AF28C;
|
||||
sprite->callback = AnimUnusedIceCrystalThrow_Step;
|
||||
}
|
||||
|
||||
// not used
|
||||
static void sub_80AF28C(struct Sprite *sprite)
|
||||
static void AnimUnusedIceCrystalThrow_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] != 0)
|
||||
{
|
||||
@@ -584,7 +583,7 @@ static void AnimIcePunchSwirlingParticle(struct Sprite *sprite)
|
||||
sprite->data[3] = 30;
|
||||
sprite->data[4] = -512;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
|
||||
sprite->callback = TranslateSpriteInGrowingCircle;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
@@ -645,7 +644,7 @@ static void AnimFlickerIceEffectParticle(struct Sprite *sprite)
|
||||
// arg 3: target y offset
|
||||
// arg 4: particle speed
|
||||
// arg 5: multiple targets? (boolean)
|
||||
static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
|
||||
static void AnimSwirlingSnowball(struct Sprite *sprite)
|
||||
{
|
||||
s32 i;
|
||||
s16 tempDataHolder[8];
|
||||
@@ -676,8 +675,9 @@ static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = 1;
|
||||
AnimFastTranslateLinear(sprite);
|
||||
if ((u32)(sprite->x + sprite->x2 + 16) > 272
|
||||
|| sprite->y + sprite->y2 > 160
|
||||
if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16
|
||||
|| sprite->x + sprite->x2 < -16
|
||||
|| sprite->y + sprite->y2 > DISPLAY_HEIGHT
|
||||
|| sprite->y + sprite->y2 < -16)
|
||||
break;
|
||||
}
|
||||
@@ -686,11 +686,11 @@ static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
|
||||
sprite->x2 = sprite->y2 = 0;
|
||||
for (i = 0; i < 8; ++i)
|
||||
sprite->data[i] = tempDataHolder[i];
|
||||
sprite->callback = InitAndStartAnimFastLinearTranslationWithSpeed;
|
||||
StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step2);
|
||||
sprite->callback = InitAnimFastLinearTranslationWithSpeedAndPos;
|
||||
StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step1);
|
||||
}
|
||||
|
||||
static void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
|
||||
static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
|
||||
{
|
||||
s16 tempVar;
|
||||
|
||||
@@ -703,11 +703,11 @@ static void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
|
||||
sprite->data[3] = Sin(sprite->data[0], tempVar);
|
||||
sprite->data[4] = Cos(sprite->data[0], 0xF);
|
||||
sprite->data[5] = 0;
|
||||
sprite->callback = AnimSwirlingSnowball_Step3;
|
||||
sprite->callback = AnimSwirlingSnowball_Step2;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void AnimSwirlingSnowball_Step3(struct Sprite *sprite)
|
||||
static void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
|
||||
{
|
||||
s16 tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20;
|
||||
|
||||
@@ -780,8 +780,9 @@ static void AnimMoveParticleBeyondTarget(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = 1;
|
||||
AnimFastTranslateLinear(sprite);
|
||||
if ((u32)(sprite->x + sprite->x2 + 16) > 272
|
||||
|| sprite->y + sprite->y2 > 160
|
||||
if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16
|
||||
|| sprite->x + sprite->x2 < -16
|
||||
|| sprite->y + sprite->y2 > DISPLAY_HEIGHT
|
||||
|| sprite->y + sprite->y2 < -16)
|
||||
break;
|
||||
}
|
||||
@@ -806,8 +807,9 @@ static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite)
|
||||
sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF;
|
||||
if (sprite->data[0] == 1)
|
||||
{
|
||||
if ((u32)(sprite->x + sprite->x2 + 16) > 272
|
||||
|| sprite->y + sprite->y2 > 160
|
||||
if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 16
|
||||
|| sprite->x + sprite->x2 < -16
|
||||
|| sprite->y + sprite->y2 > DISPLAY_HEIGHT
|
||||
|| sprite->y + sprite->y2 < -16)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
@@ -927,7 +929,7 @@ static void AnimSwirlingFogAnim(struct Sprite *sprite)
|
||||
}
|
||||
|
||||
// Fades mons to black and places foggy overlay in Haze.
|
||||
void AnimTask_Haze1(u8 taskId)
|
||||
void AnimTask_HazeScrollingFog(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
|
||||
@@ -947,10 +949,10 @@ void AnimTask_Haze1(u8 taskId)
|
||||
LoadPalette(&gDefaultWeatherSpritePalette, animBg.paletteId * 16, 32);
|
||||
if (IsContest())
|
||||
RelocateBattleBgPal(animBg.paletteId, animBg.bgTilemap, 0, 0);
|
||||
gTasks[taskId].func = AnimTask_Haze2;
|
||||
gTasks[taskId].func = AnimTask_HazeScrollingFog_Step;
|
||||
}
|
||||
|
||||
static void AnimTask_Haze2(u8 taskId)
|
||||
static void AnimTask_HazeScrollingFog_Step(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
|
||||
@@ -962,7 +964,7 @@ static void AnimTask_Haze2(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[10] = 0;
|
||||
++gTasks[taskId].data[9];
|
||||
gTasks[taskId].data[11] = gUnknown_83E64D4[gTasks[taskId].data[9]];
|
||||
gTasks[taskId].data[11] = sHazeBlendAmounts[gTasks[taskId].data[9]];
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
|
||||
if (gTasks[taskId].data[11] == 9)
|
||||
{
|
||||
@@ -1024,8 +1026,7 @@ static void AnimThrowMistBall(struct Sprite *sprite)
|
||||
sprite->callback = TranslateAnimSpriteToTargetMonLocation;
|
||||
}
|
||||
|
||||
// Displays misty background in Mist Ball.
|
||||
void AnimTask_LoadMistTiles(u8 taskId)
|
||||
void AnimTask_MistBallFog(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
|
||||
@@ -1046,10 +1047,10 @@ void AnimTask_LoadMistTiles(u8 taskId)
|
||||
if (IsContest())
|
||||
RelocateBattleBgPal(animBg.paletteId, animBg.bgTilemap, 0, 0);
|
||||
gTasks[taskId].data[15] = -1;
|
||||
gTasks[taskId].func = AnimTask_OverlayFogTiles;
|
||||
gTasks[taskId].func = AnimTask_MistBallFog_Step;
|
||||
}
|
||||
|
||||
static void AnimTask_OverlayFogTiles(u8 taskId)
|
||||
static void AnimTask_MistBallFog_Step(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
|
||||
@@ -1058,7 +1059,7 @@ static void AnimTask_OverlayFogTiles(u8 taskId)
|
||||
{
|
||||
case 0:
|
||||
gTasks[taskId].data[9] += 1;
|
||||
gTasks[taskId].data[11] = gUnknown_83E6500[gTasks[taskId].data[9]];
|
||||
gTasks[taskId].data[11] = sMistBlendAmounts[gTasks[taskId].data[9]];
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 17 - gTasks[taskId].data[11]));
|
||||
if (gTasks[taskId].data[11] == 5)
|
||||
{
|
||||
@@ -1230,7 +1231,7 @@ static void MovePoisonGasCloud(struct Sprite *sprite)
|
||||
sprite->data[2] = -0x10;
|
||||
++sprite->data[7];
|
||||
sprite->x2 = sprite->y2 = 0;
|
||||
BattleAnim_InitLinearTranslationWithDuration(sprite);
|
||||
InitAnimLinearTranslationWithSpeed(sprite);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -1249,7 +1250,7 @@ static void MovePoisonGasCloud(struct Sprite *sprite)
|
||||
}
|
||||
|
||||
// Creates Hail.
|
||||
void AnimTask_Hail1(u8 taskId)
|
||||
void AnimTask_Hail(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -1310,7 +1311,7 @@ static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId,
|
||||
|
||||
if (unk != 2)
|
||||
{
|
||||
id = GetBattlerAtPosition(sHailCoordData[hailStructId].unk2);
|
||||
id = GetBattlerAtPosition(sHailCoordData[hailStructId].bPosition);
|
||||
if (IsBattlerSpriteVisible(id))
|
||||
{
|
||||
possibleBool = TRUE;
|
||||
@@ -1330,14 +1331,14 @@ static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId,
|
||||
}
|
||||
else
|
||||
{
|
||||
battlerX = (sHailCoordData[hailStructId].unk0);
|
||||
battlerY = (sHailCoordData[hailStructId].unk1);
|
||||
battlerX = sHailCoordData[hailStructId].x;
|
||||
battlerY = sHailCoordData[hailStructId].y;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
battlerX = (sHailCoordData[hailStructId].unk0);
|
||||
battlerY = (sHailCoordData[hailStructId].unk1);
|
||||
battlerX = sHailCoordData[hailStructId].x;
|
||||
battlerY = sHailCoordData[hailStructId].y;
|
||||
}
|
||||
spriteX = battlerX - ((battlerY + 8) / 2);
|
||||
id = CreateSprite(&sHailParticleSpriteTemplate, spriteX, -8, 18);
|
||||
+117
-114
@@ -7,27 +7,27 @@
|
||||
#undef abs
|
||||
#define abs(x) ((x) < 0 ? -(x) : (x))
|
||||
|
||||
static void AnimTask_ShakeMonStep(u8 taskId);
|
||||
static void AnimTask_ShakeMon_Step(u8 taskId);
|
||||
static void AnimTask_ShakeMon2Step(u8 taskId);
|
||||
static void AnimTask_ShakeMonInPlaceStep(u8 taskId);
|
||||
static void AnimTask_ShakeAndSinkMonStep(u8 taskId);
|
||||
static void AnimTask_TranslateMonEllipticalStep(u8 taskId);
|
||||
static void AnimTask_ShakeMonInPlace_Step(u8 taskId);
|
||||
static void AnimTask_ShakeAndSinkMon_Step(u8 taskId);
|
||||
static void AnimTask_TranslateMonElliptical_Step(u8 taskId);
|
||||
static void DoHorizontalLunge(struct Sprite *sprite);
|
||||
static void ReverseHorizontalLungeDirection(struct Sprite *sprite);
|
||||
static void DoVerticalDip(struct Sprite *sprite);
|
||||
static void ReverseVerticalDipDirection(struct Sprite *sprite);
|
||||
static void SlideMonToOriginalPos(struct Sprite *sprite);
|
||||
static void SlideMonToOriginalPosStep(struct Sprite *sprite);
|
||||
static void SlideMonToOriginalPos_Step(struct Sprite *sprite);
|
||||
static void SlideMonToOffset(struct Sprite *sprite);
|
||||
static void sub_8099394(struct Sprite *sprite);
|
||||
static void sub_809946C(struct Sprite *sprite);
|
||||
static void AnimTask_WindUpLungePart1(u8 taskId);
|
||||
static void AnimTask_WindUpLungePart2(u8 taskId);
|
||||
static void sub_80996B8(u8 taskId);
|
||||
static void AnimTask_SwayMonStep(u8 taskId);
|
||||
static void AnimTask_ScaleMonAndRestoreStep(u8 taskId);
|
||||
static void sub_8099B54(u8 taskId);
|
||||
static void sub_8099CB8(u8 taskId);
|
||||
static void SlideMonToOffsetAndBack(struct Sprite *sprite);
|
||||
static void SlideMonToOffsetAndBack_End(struct Sprite *sprite);
|
||||
static void AnimTask_WindUpLunge_Step1(u8 taskId);
|
||||
static void AnimTask_WindUpLunge_Step2(u8 taskId);
|
||||
static void AnimTask_SlideOffScreen_Step(u8 taskId);
|
||||
static void AnimTask_SwayMon_Step(u8 taskId);
|
||||
static void AnimTask_ScaleMonAndRestore_Step(u8 taskId);
|
||||
static void AnimTask_RotateMonSpriteToSide_Step(u8 taskId);
|
||||
static void AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step(u8 taskId);
|
||||
|
||||
const struct SpriteTemplate gHorizontalLungeSpriteTemplate =
|
||||
{
|
||||
@@ -81,7 +81,7 @@ const struct SpriteTemplate gSlideMonToOffsetAndBackSpriteTemplate =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_8099394,
|
||||
.callback = SlideMonToOffsetAndBack,
|
||||
};
|
||||
|
||||
// Task to facilitate simple shaking of a pokemon's picture in battle.
|
||||
@@ -95,24 +95,24 @@ void AnimTask_ShakeMon(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
|
||||
if (spriteId == 0xFF)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
else
|
||||
if (spriteId == SPRITE_NONE)
|
||||
{
|
||||
gSprites[spriteId].x2 = gBattleAnimArgs[1];
|
||||
gSprites[spriteId].y2 = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].func = AnimTask_ShakeMonStep;
|
||||
gTasks[taskId].func(taskId);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
}
|
||||
gSprites[spriteId].x2 = gBattleAnimArgs[1];
|
||||
gSprites[spriteId].y2 = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].func = AnimTask_ShakeMon_Step;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
static void AnimTask_ShakeMonStep(u8 taskId)
|
||||
static void AnimTask_ShakeMon_Step(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
{
|
||||
@@ -152,7 +152,7 @@ void AnimTask_ShakeMon2(u8 taskId)
|
||||
if (gBattleAnimArgs[0] < MAX_BATTLERS_COUNT)
|
||||
{
|
||||
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
if (spriteId == 0xFF)
|
||||
if (spriteId == SPRITE_NONE)
|
||||
abort = TRUE;
|
||||
}
|
||||
else if (gBattleAnimArgs[0] != 8)
|
||||
@@ -178,21 +178,23 @@ void AnimTask_ShakeMon2(u8 taskId)
|
||||
}
|
||||
else
|
||||
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
|
||||
|
||||
if (abort)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
else
|
||||
{
|
||||
gSprites[spriteId].x2 = gBattleAnimArgs[1];
|
||||
gSprites[spriteId].y2 = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].func = AnimTask_ShakeMon2Step;
|
||||
gTasks[taskId].func(taskId);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
}
|
||||
|
||||
gSprites[spriteId].x2 = gBattleAnimArgs[1];
|
||||
gSprites[spriteId].y2 = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].func = AnimTask_ShakeMon2Step;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
static void AnimTask_ShakeMon2Step(u8 taskId)
|
||||
@@ -231,25 +233,25 @@ void AnimTask_ShakeMonInPlace(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
|
||||
if (spriteId == 0xFF)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
else
|
||||
if (spriteId == SPRITE_NONE)
|
||||
{
|
||||
gSprites[spriteId].x2 += gBattleAnimArgs[1];
|
||||
gSprites[spriteId].y2 += gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[3] = 0;
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[1] * 2;
|
||||
gTasks[taskId].data[6] = gBattleAnimArgs[2] * 2;
|
||||
gTasks[taskId].func = AnimTask_ShakeMonInPlaceStep;
|
||||
gTasks[taskId].func(taskId);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
}
|
||||
gSprites[spriteId].x2 += gBattleAnimArgs[1];
|
||||
gSprites[spriteId].y2 += gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[3] = 0;
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[1] * 2;
|
||||
gTasks[taskId].data[6] = gBattleAnimArgs[2] * 2;
|
||||
gTasks[taskId].func = AnimTask_ShakeMonInPlace_Step;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
static void AnimTask_ShakeMonInPlaceStep(u8 taskId)
|
||||
static void AnimTask_ShakeMonInPlace_Step(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
{
|
||||
@@ -299,22 +301,22 @@ void AnimTask_ShakeAndSinkMon(u8 taskId)
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].func = AnimTask_ShakeAndSinkMonStep;
|
||||
gTasks[taskId].func = AnimTask_ShakeAndSinkMon_Step;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
static void AnimTask_ShakeAndSinkMonStep(u8 taskId)
|
||||
static void AnimTask_ShakeAndSinkMon_Step(u8 taskId)
|
||||
{
|
||||
u8 spriteId = gTasks[taskId].data[0];
|
||||
s16 data1 = gTasks[taskId].data[1];
|
||||
s16 x = gTasks[taskId].data[1];
|
||||
if (gTasks[taskId].data[2] == gTasks[taskId].data[8]++)
|
||||
{
|
||||
gTasks[taskId].data[8] = 0;
|
||||
if (gSprites[spriteId].x2 == data1)
|
||||
data1 = -data1;
|
||||
gSprites[spriteId].x2 += data1;
|
||||
if (gSprites[spriteId].x2 == x)
|
||||
x = -x;
|
||||
gSprites[spriteId].x2 += x;
|
||||
}
|
||||
gTasks[taskId].data[1] = data1;
|
||||
gTasks[taskId].data[1] = x;
|
||||
gTasks[taskId].data[9] += gTasks[taskId].data[3];
|
||||
gSprites[spriteId].y2 = gTasks[taskId].data[9] >> 8;
|
||||
if (--gTasks[taskId].data[4] == 0)
|
||||
@@ -342,11 +344,11 @@ void AnimTask_TranslateMonElliptical(u8 taskId)
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[4] = wavePeriod;
|
||||
gTasks[taskId].func = AnimTask_TranslateMonEllipticalStep;
|
||||
gTasks[taskId].func = AnimTask_TranslateMonElliptical_Step;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
static void AnimTask_TranslateMonEllipticalStep(u8 taskId)
|
||||
static void AnimTask_TranslateMonElliptical_Step(u8 taskId)
|
||||
{
|
||||
u8 spriteId = gTasks[taskId].data[0];
|
||||
gSprites[spriteId].x2 = Sin(gTasks[taskId].data[5], gTasks[taskId].data[1]);
|
||||
@@ -395,14 +397,14 @@ static void DoHorizontalLunge(struct Sprite *sprite)
|
||||
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
|
||||
sprite->data[4] = gBattleAnimArgs[0];
|
||||
StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection);
|
||||
sprite->callback = TranslateMonSpriteLinear;
|
||||
sprite->callback = TranslateSpriteLinearById;
|
||||
}
|
||||
|
||||
static void ReverseHorizontalLungeDirection(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = sprite->data[4];
|
||||
sprite->data[1] = -sprite->data[1];
|
||||
sprite->callback = TranslateMonSpriteLinear;
|
||||
sprite->callback = TranslateSpriteLinearById;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
|
||||
@@ -422,14 +424,14 @@ static void DoVerticalDip(struct Sprite *sprite)
|
||||
sprite->data[3] = spriteId;
|
||||
sprite->data[4] = gBattleAnimArgs[0];
|
||||
StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection);
|
||||
sprite->callback = TranslateMonSpriteLinear;
|
||||
sprite->callback = TranslateSpriteLinearById;
|
||||
}
|
||||
|
||||
static void ReverseVerticalDipDirection(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = sprite->data[4];
|
||||
sprite->data[2] = -sprite->data[2];
|
||||
sprite->callback = TranslateMonSpriteLinear;
|
||||
sprite->callback = TranslateSpriteLinearById;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
|
||||
@@ -462,19 +464,19 @@ static void SlideMonToOriginalPos(struct Sprite *sprite)
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[7] = gBattleAnimArgs[1];
|
||||
sprite->data[7] |= spriteId << 8;
|
||||
sprite->callback = SlideMonToOriginalPosStep;
|
||||
sprite->callback = SlideMonToOriginalPos_Step;
|
||||
}
|
||||
|
||||
static void SlideMonToOriginalPosStep(struct Sprite *sprite)
|
||||
static void SlideMonToOriginalPos_Step(struct Sprite *sprite)
|
||||
{
|
||||
u8 data7 = sprite->data[7];
|
||||
struct Sprite *otherSprite = &gSprites[sprite->data[7] >> 8];
|
||||
struct Sprite *monSprite = &gSprites[sprite->data[7] >> 8];
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
if (data7 == 1 || data7 == 0)
|
||||
otherSprite->x2 = 0;
|
||||
monSprite->x2 = 0;
|
||||
if (data7 == 2 || data7 == 0)
|
||||
otherSprite->y2 = 0;
|
||||
monSprite->y2 = 0;
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
else
|
||||
@@ -482,8 +484,8 @@ static void SlideMonToOriginalPosStep(struct Sprite *sprite)
|
||||
sprite->data[0]--;
|
||||
sprite->data[3] += sprite->data[1];
|
||||
sprite->data[4] += sprite->data[2];
|
||||
otherSprite->x2 = (sprite->data[3] >> 8) + sprite->data[5];
|
||||
otherSprite->y2 = (sprite->data[4] >> 8) + sprite->data[6];
|
||||
monSprite->x2 = (sprite->data[3] >> 8) + sprite->data[5];
|
||||
monSprite->y2 = (sprite->data[4] >> 8) + sprite->data[6];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,12 +500,12 @@ static void SlideMonToOriginalPosStep(struct Sprite *sprite)
|
||||
static void SlideMonToOffset(struct Sprite *sprite)
|
||||
{
|
||||
u8 battlerId;
|
||||
u8 spriteId;
|
||||
u8 monSpriteId;
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
else
|
||||
battlerId = gBattleAnimTarget;
|
||||
spriteId = gBattlerSpriteIds[battlerId];
|
||||
monSpriteId = gBattlerSpriteIds[battlerId];
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
{
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
@@ -511,25 +513,25 @@ static void SlideMonToOffset(struct Sprite *sprite)
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
}
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[1] = gSprites[spriteId].x;
|
||||
sprite->data[2] = gSprites[spriteId].x + gBattleAnimArgs[1];
|
||||
sprite->data[3] = gSprites[spriteId].y;
|
||||
sprite->data[4] = gSprites[spriteId].y + gBattleAnimArgs[2];
|
||||
sprite->data[1] = gSprites[monSpriteId].x;
|
||||
sprite->data[2] = gSprites[monSpriteId].x + gBattleAnimArgs[1];
|
||||
sprite->data[3] = gSprites[monSpriteId].y;
|
||||
sprite->data[4] = gSprites[monSpriteId].y + gBattleAnimArgs[2];
|
||||
InitSpriteDataForLinearTranslation(sprite);
|
||||
sprite->data[3] = 0;
|
||||
sprite->data[4] = 0;
|
||||
sprite->data[5] = spriteId;
|
||||
sprite->data[5] = monSpriteId;
|
||||
sprite->invisible = TRUE;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
sprite->callback = TranslateMonSpriteLinearFixedPoint;
|
||||
sprite->callback = TranslateSpriteLinearByIdFixedPoint;
|
||||
}
|
||||
|
||||
static void sub_8099394(struct Sprite *sprite)
|
||||
static void SlideMonToOffsetAndBack(struct Sprite *sprite)
|
||||
{
|
||||
u8 battlerId;
|
||||
u8 spriteId;
|
||||
sprite->invisible = TRUE;
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
battlerId = gBattleAnimAttacker;
|
||||
else
|
||||
battlerId = gBattleAnimTarget;
|
||||
@@ -553,11 +555,11 @@ static void sub_8099394(struct Sprite *sprite)
|
||||
if (gBattleAnimArgs[5] == 0)
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
else
|
||||
StoreSpriteCallbackInData6(sprite, sub_809946C);
|
||||
sprite->callback = TranslateMonSpriteLinearFixedPoint;
|
||||
StoreSpriteCallbackInData6(sprite, SlideMonToOffsetAndBack_End);
|
||||
sprite->callback = TranslateSpriteLinearByIdFixedPoint;
|
||||
}
|
||||
|
||||
static void sub_809946C(struct Sprite *sprite)
|
||||
static void SlideMonToOffsetAndBack_End(struct Sprite *sprite)
|
||||
{
|
||||
gSprites[sprite->data[5]].x2 = 0;
|
||||
gSprites[sprite->data[5]].y2 = 0;
|
||||
@@ -590,10 +592,10 @@ void AnimTask_WindUpLunge(u8 taskId)
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[5] * 256 / gBattleAnimArgs[6];
|
||||
gTasks[taskId].data[6] = gBattleAnimArgs[6];
|
||||
gTasks[taskId].data[7] = wavePeriod;
|
||||
gTasks[taskId].func = AnimTask_WindUpLungePart1;
|
||||
gTasks[taskId].func = AnimTask_WindUpLunge_Step1;
|
||||
}
|
||||
|
||||
static void AnimTask_WindUpLungePart1(u8 taskId)
|
||||
static void AnimTask_WindUpLunge_Step1(u8 taskId)
|
||||
{
|
||||
u8 spriteId = gTasks[taskId].data[0];
|
||||
gTasks[taskId].data[11] += gTasks[taskId].data[1];
|
||||
@@ -601,10 +603,10 @@ static void AnimTask_WindUpLungePart1(u8 taskId)
|
||||
gSprites[spriteId].y2 = Sin((u8)(gTasks[taskId].data[10] >> 8), gTasks[taskId].data[2]);
|
||||
gTasks[taskId].data[10] += gTasks[taskId].data[7];
|
||||
if (--gTasks[taskId].data[3] == 0)
|
||||
gTasks[taskId].func = AnimTask_WindUpLungePart2;
|
||||
gTasks[taskId].func = AnimTask_WindUpLunge_Step2;
|
||||
}
|
||||
|
||||
static void AnimTask_WindUpLungePart2(u8 taskId)
|
||||
static void AnimTask_WindUpLunge_Step2(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
@@ -620,17 +622,18 @@ static void AnimTask_WindUpLungePart2(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// To move a mon off-screen when pushed out by Roar/Whirlwind
|
||||
void AnimTask_SlideOffScreen(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
switch (gBattleAnimArgs[0])
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case ANIM_ATTACKER:
|
||||
case ANIM_TARGET:
|
||||
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
break;
|
||||
case 2:
|
||||
case ANIM_ATK_PARTNER:
|
||||
if (!IsBattlerSpriteVisible(gBattleAnimAttacker ^ BIT_FLANK))
|
||||
{
|
||||
DestroyAnimVisualTask(taskId);
|
||||
@@ -638,7 +641,7 @@ void AnimTask_SlideOffScreen(u8 taskId)
|
||||
}
|
||||
spriteId = gBattlerSpriteIds[gBattleAnimAttacker ^ BIT_FLANK];
|
||||
break;
|
||||
case 3:
|
||||
case ANIM_DEF_PARTNER:
|
||||
if (!IsBattlerSpriteVisible(gBattleAnimTarget ^ BIT_FLANK))
|
||||
{
|
||||
DestroyAnimVisualTask(taskId);
|
||||
@@ -655,14 +658,14 @@ void AnimTask_SlideOffScreen(u8 taskId)
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
else
|
||||
gTasks[taskId].data[1] = -gBattleAnimArgs[1];
|
||||
gTasks[taskId].func = sub_80996B8;
|
||||
gTasks[taskId].func = AnimTask_SlideOffScreen_Step;
|
||||
}
|
||||
|
||||
static void sub_80996B8(u8 taskId)
|
||||
static void AnimTask_SlideOffScreen_Step(u8 taskId)
|
||||
{
|
||||
u8 spriteId = gTasks[taskId].data[0];
|
||||
gSprites[spriteId].x2 += gTasks[taskId].data[1];
|
||||
if (gSprites[spriteId].x2 + gSprites[spriteId].x < -0x20 || gSprites[spriteId].x2 + gSprites[spriteId].x > 0x110)
|
||||
if (gSprites[spriteId].x2 + gSprites[spriteId].x < -32 || gSprites[spriteId].x2 + gSprites[spriteId].x > DISPLAY_WIDTH + 32)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
@@ -690,10 +693,10 @@ void AnimTask_SwayMon(u8 taskId)
|
||||
else
|
||||
gTasks[taskId].data[5] = gBattleAnimTarget;
|
||||
gTasks[taskId].data[12] = 1;
|
||||
gTasks[taskId].func = AnimTask_SwayMonStep;
|
||||
gTasks[taskId].func = AnimTask_SwayMon_Step;
|
||||
}
|
||||
|
||||
static void AnimTask_SwayMonStep(u8 taskId)
|
||||
static void AnimTask_SwayMon_Step(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
u32 waveIndex;
|
||||
@@ -745,10 +748,10 @@ void AnimTask_ScaleMonAndRestore(u8 taskId)
|
||||
gTasks[taskId].data[4] = spriteId;
|
||||
gTasks[taskId].data[10] = 0x100;
|
||||
gTasks[taskId].data[11] = 0x100;
|
||||
gTasks[taskId].func = AnimTask_ScaleMonAndRestoreStep;
|
||||
gTasks[taskId].func = AnimTask_ScaleMonAndRestore_Step;
|
||||
}
|
||||
|
||||
static void AnimTask_ScaleMonAndRestoreStep(u8 taskId)
|
||||
static void AnimTask_ScaleMonAndRestore_Step(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
gTasks[taskId].data[10] += gTasks[taskId].data[0];
|
||||
@@ -789,7 +792,7 @@ void AnimTask_RotateMonSpriteToSide(u8 taskId)
|
||||
gTasks[taskId].data[7] = 1;
|
||||
else
|
||||
{
|
||||
if (gBattleAnimArgs[2] == 0)
|
||||
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
|
||||
gTasks[taskId].data[7] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : 0;
|
||||
else
|
||||
gTasks[taskId].data[7] = GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER ? 1 : 0;
|
||||
@@ -802,16 +805,17 @@ void AnimTask_RotateMonSpriteToSide(u8 taskId)
|
||||
tmp = gTasks[taskId].data[4];
|
||||
gTasks[taskId].data[4] = -tmp;
|
||||
}
|
||||
gTasks[taskId].func = sub_8099B54;
|
||||
gTasks[taskId].func = AnimTask_RotateMonSpriteToSide_Step;
|
||||
}
|
||||
|
||||
// Rotates mon to side and back to original position. For Peck and when a held item activates
|
||||
void AnimTask_RotateMonToSideAndRestore(u8 taskId)
|
||||
{
|
||||
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]);
|
||||
PrepareBattlerSpriteForRotScale(spriteId, 0);
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[0];
|
||||
if (gBattleAnimArgs[2] == 0)
|
||||
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
@@ -831,16 +835,15 @@ void AnimTask_RotateMonToSideAndRestore(u8 taskId)
|
||||
gTasks[taskId].data[7] = 1;
|
||||
if (gTasks[taskId].data[7] )
|
||||
{
|
||||
s16 tmp;
|
||||
tmp = gTasks[taskId].data[3];
|
||||
s16 tmp = gTasks[taskId].data[3];
|
||||
gTasks[taskId].data[3] = -tmp;
|
||||
tmp = gTasks[taskId].data[4];
|
||||
gTasks[taskId].data[4] = -tmp;
|
||||
}
|
||||
gTasks[taskId].func = sub_8099B54;
|
||||
gTasks[taskId].func = AnimTask_RotateMonSpriteToSide_Step;
|
||||
}
|
||||
|
||||
static void sub_8099B54(u8 taskId)
|
||||
static void AnimTask_RotateMonSpriteToSide_Step(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[3] += gTasks[taskId].data[4];
|
||||
SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
|
||||
@@ -895,10 +898,10 @@ void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId)
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].func = sub_8099CB8;
|
||||
gTasks[taskId].func = AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step;
|
||||
}
|
||||
|
||||
static void sub_8099CB8(u8 taskId)
|
||||
static void AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
if (++task->data[0] > task->data[1])
|
||||
|
||||
+349
-238
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@
|
||||
static void AnimConfusionDuck(struct Sprite *sprite);
|
||||
static void AnimSimplePaletteBlend(struct Sprite *sprite);
|
||||
static void AnimComplexPaletteBlend(struct Sprite *sprite);
|
||||
static void sub_80B9B8C(struct Sprite *sprite);
|
||||
static void AnimCirclingSparkle(struct Sprite *sprite);
|
||||
static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite);
|
||||
static void AnimHitSplatBasic(struct Sprite *sprite);
|
||||
static void AnimHitSplatHandleInvert(struct Sprite *sprite);
|
||||
@@ -17,22 +17,22 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite);
|
||||
static void AnimCrossImpact(struct Sprite *sprite);
|
||||
static void AnimFlashingHitSplat(struct Sprite *sprite);
|
||||
static void AnimHitSplatPersistent(struct Sprite *sprite);
|
||||
static void AnimConfusionDuckStep(struct Sprite *sprite);
|
||||
static void AnimSimplePaletteBlendStep(struct Sprite *sprite);
|
||||
static void sub_80B9AD0(struct Sprite *sprite);
|
||||
static void sub_80B9B5C(struct Sprite *sprite);
|
||||
static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
|
||||
static void sub_80B9C7C(u8 taskId);
|
||||
static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
|
||||
static void sub_80B9DF0(u8 taskId);
|
||||
static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
|
||||
static void sub_80B9F04(u8 taskId);
|
||||
static void sub_80B9FD8(u8 taskId);
|
||||
static void sub_80BA090(u8 taskId);
|
||||
static void sub_80BA3CC(void);
|
||||
static void sub_80BA320(struct Sprite *sprite);
|
||||
static void sub_80BA4D0(u8 taskId);
|
||||
static void sub_80BA7BC(struct Sprite *sprite);
|
||||
static void AnimConfusionDuck_Step(struct Sprite *sprite);
|
||||
static void AnimSimplePaletteBlend_Step(struct Sprite *sprite);
|
||||
static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite);
|
||||
static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite);
|
||||
static void BlendColorCycle(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
|
||||
static void AnimTask_BlendColorCycleLoop(u8 taskId);
|
||||
static void BlendColorCycleExclude(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
|
||||
static void AnimTask_BlendColorCycleExcludeLoop(u8 taskId);
|
||||
static void BlendColorCycleByTag(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
|
||||
static void AnimTask_BlendColorCycleByTagLoop(u8 taskId);
|
||||
static void AnimTask_FlashAnimTagWithColor_Step1(u8 taskId);
|
||||
static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId);
|
||||
static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void);
|
||||
static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite);
|
||||
static void AnimTask_ShakeBattleTerrain_Step(u8 taskId);
|
||||
static void AnimFlashingHitSplat_Step(struct Sprite *sprite);
|
||||
|
||||
|
||||
static const union AnimCmd sAnim_ConfusionDuck_0[] =
|
||||
@@ -92,7 +92,7 @@ const struct SpriteTemplate gComplexPaletteBlendSpriteTemplate =
|
||||
.callback = AnimComplexPaletteBlend,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_83E7B54[] =
|
||||
static const union AnimCmd sAnim_CirclingSparkle[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_FRAME(16, 3),
|
||||
@@ -102,20 +102,21 @@ static const union AnimCmd gUnknown_83E7B54[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_83E7B6C[] =
|
||||
static const union AnimCmd *const sAnims_CirclingSparkle[] =
|
||||
{
|
||||
gUnknown_83E7B54,
|
||||
sAnim_CirclingSparkle,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E7B70 =
|
||||
// Unused
|
||||
static const struct SpriteTemplate sCirclingSparkleSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_SPARKLE_4,
|
||||
.paletteTag = ANIM_TAG_SPARKLE_4,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = gUnknown_83E7B6C,
|
||||
.anims = sAnims_CirclingSparkle,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80B9B8C,
|
||||
.callback = AnimCirclingSparkle,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gShakeMonOrTerrainSpriteTemplate =
|
||||
@@ -275,11 +276,11 @@ static void AnimConfusionDuck(struct Sprite *sprite)
|
||||
StartSpriteAnim(sprite, 1);
|
||||
}
|
||||
sprite->data[3] = gBattleAnimArgs[4];
|
||||
sprite->callback = AnimConfusionDuckStep;
|
||||
sprite->callback = AnimConfusionDuck_Step;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void AnimConfusionDuckStep(struct Sprite *sprite)
|
||||
static void AnimConfusionDuck_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x2 = Cos(sprite->data[0], 30);
|
||||
sprite->y2 = Sin(sprite->data[0], 10);
|
||||
@@ -300,36 +301,36 @@ static void AnimConfusionDuckStep(struct Sprite *sprite)
|
||||
// arg 4: blend color
|
||||
static void AnimSimplePaletteBlend(struct Sprite *sprite)
|
||||
{
|
||||
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
|
||||
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
|
||||
|
||||
BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]);
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = AnimSimplePaletteBlendStep;
|
||||
sprite->callback = AnimSimplePaletteBlend_Step;
|
||||
}
|
||||
|
||||
// Unpacks a bitfield and returns a bitmask of its selected palettes.
|
||||
// Bits 0-6 of the selector parameter result in the following palettes being selected:
|
||||
// 0: battle background palettes (BG palettes 1, 2, and 3)
|
||||
// 1: gBattleAnimAttacker OBJ palette
|
||||
// 2: gBattleAnimTarget OBJ palette
|
||||
// 3: gBattleAnimAttacker partner OBJ palette
|
||||
// 4: gBattleAnimTarget partner OBJ palette
|
||||
// 5: BG palette 4
|
||||
// 6: BG palette 5
|
||||
u32 UnpackSelectedBattleAnimPalettes(s16 selector)
|
||||
// 0: F_PAL_BG, battle background palettes (BG palettes 1, 2, and 3)
|
||||
// 1: F_PAL_ATTACKER, gBattleAnimAttacker OBJ palette
|
||||
// 2: F_PAL_TARGET, gBattleAnimTarget OBJ palette
|
||||
// 3: F_PAL_ATK_PARTNER, gBattleAnimAttacker partner OBJ palette
|
||||
// 4: F_PAL_DEF_PARTNER, gBattleAnimTarget partner OBJ palette
|
||||
// 5: F_PAL_ANIM_1, BG palette 8
|
||||
// 6: F_PAL_ANIM_2, BG palette 9
|
||||
u32 UnpackSelectedBattlePalettes(s16 selector)
|
||||
{
|
||||
u8 battleBackground = selector & 1;
|
||||
u8 attacker = (selector >> 1) & 1;
|
||||
u8 target = (selector >> 2) & 1;
|
||||
u8 attackerPartner = (selector >> 3) & 1;
|
||||
u8 targetPartner = (selector >> 4) & 1;
|
||||
u8 arg5 = (selector >> 5) & 1;
|
||||
u8 arg6 = (selector >> 6) & 1;
|
||||
u8 anim1 = (selector >> 5) & 1;
|
||||
u8 anim2 = (selector >> 6) & 1;
|
||||
|
||||
return SelectBattleAnimSpriteAndBgPalettes(battleBackground, attacker, target, attackerPartner, targetPartner, arg5, arg6);
|
||||
return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, anim1, anim2);
|
||||
}
|
||||
|
||||
static void AnimSimplePaletteBlendStep(struct Sprite *sprite)
|
||||
static void AnimSimplePaletteBlend_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -347,13 +348,13 @@ static void AnimComplexPaletteBlend(struct Sprite *sprite)
|
||||
sprite->data[5] = gBattleAnimArgs[5];
|
||||
sprite->data[6] = gBattleAnimArgs[6];
|
||||
sprite->data[7] = gBattleAnimArgs[0];
|
||||
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
|
||||
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
|
||||
BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]);
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = sub_80B9AD0;
|
||||
sprite->callback = AnimComplexPaletteBlend_Step1;
|
||||
}
|
||||
|
||||
static void sub_80B9AD0(struct Sprite *sprite)
|
||||
static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite)
|
||||
{
|
||||
u32 selectedPalettes;
|
||||
|
||||
@@ -366,10 +367,10 @@ static void sub_80B9AD0(struct Sprite *sprite)
|
||||
return;
|
||||
if (sprite->data[2] == 0)
|
||||
{
|
||||
sprite->callback = sub_80B9B5C;
|
||||
sprite->callback = AnimComplexPaletteBlend_Step2;
|
||||
return;
|
||||
}
|
||||
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
|
||||
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
|
||||
if (sprite->data[1] & 0x100)
|
||||
BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]);
|
||||
else
|
||||
@@ -379,19 +380,19 @@ static void sub_80B9AD0(struct Sprite *sprite)
|
||||
--sprite->data[2];
|
||||
}
|
||||
|
||||
static void sub_80B9B5C(struct Sprite *sprite)
|
||||
static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite)
|
||||
{
|
||||
u32 selectedPalettes;
|
||||
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
|
||||
selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]);
|
||||
BlendPalettes(selectedPalettes, 0, 0);
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B9B8C(struct Sprite *sprite)
|
||||
static void AnimCirclingSparkle(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
@@ -402,57 +403,75 @@ static void sub_80B9B8C(struct Sprite *sprite)
|
||||
sprite->data[4] = 112;
|
||||
sprite->data[5] = 0;
|
||||
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
||||
sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
|
||||
sprite->callback = TranslateSpriteInGrowingCircle;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
void AnimTask_CurseBlendEffect(u8 taskId)
|
||||
// Task data for AnimTask_BlendColorCycle, AnimTask_BlendColorCycleExclude, and AnimTask_BlendColorCycleByTag
|
||||
#define tPalSelector data[0] // AnimTask_BlendColorCycle
|
||||
#define tPalTag data[0] // AnimTask_BlendColorCycleByTag
|
||||
#define tDelay data[1]
|
||||
#define tNumBlends data[2]
|
||||
#define tInitialBlendY data[3]
|
||||
#define tTargetBlendY data[4]
|
||||
#define tBlendColor data[5]
|
||||
#define tRestoreBlend data[8]
|
||||
#define tPalSelectorHi data[9]
|
||||
#define tPalSelectorLo data[10]
|
||||
|
||||
// Blends mon/screen to designated color or back alternately tNumBlends times
|
||||
// Many uses of this task only set a tNumBlends of 2, which has the effect of blending to a color and back once
|
||||
void AnimTask_BlendColorCycle(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[0] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[5];
|
||||
gTasks[taskId].data[8] = 0;
|
||||
sub_80B9C2C(taskId, 0, gTasks[taskId].data[4]);
|
||||
gTasks[taskId].func = sub_80B9C7C;
|
||||
gTasks[taskId].tPalSelector = gBattleAnimArgs[0];
|
||||
gTasks[taskId].tDelay = gBattleAnimArgs[1];
|
||||
gTasks[taskId].tNumBlends = gBattleAnimArgs[2];
|
||||
gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3];
|
||||
gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4];
|
||||
gTasks[taskId].tBlendColor = gBattleAnimArgs[5];
|
||||
gTasks[taskId].tRestoreBlend = FALSE;
|
||||
BlendColorCycle(taskId, 0, gTasks[taskId].tTargetBlendY);
|
||||
gTasks[taskId].func = AnimTask_BlendColorCycleLoop;
|
||||
}
|
||||
|
||||
static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
|
||||
static void BlendColorCycle(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
|
||||
{
|
||||
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gTasks[taskId].data[0]);
|
||||
|
||||
BeginNormalPaletteFade(selectedPalettes,
|
||||
gTasks[taskId].data[1],
|
||||
initialBlendAmount,
|
||||
targetBlendAmount,
|
||||
gTasks[taskId].data[5]);
|
||||
--gTasks[taskId].data[2];
|
||||
gTasks[taskId].data[8] ^= 1;
|
||||
u32 selectedPalettes = UnpackSelectedBattlePalettes(gTasks[taskId].tPalSelector);
|
||||
BeginNormalPaletteFade(
|
||||
selectedPalettes,
|
||||
gTasks[taskId].tDelay,
|
||||
startBlendAmount,
|
||||
targetBlendAmount,
|
||||
gTasks[taskId].tBlendColor);
|
||||
|
||||
gTasks[taskId].tNumBlends--;
|
||||
gTasks[taskId].tRestoreBlend ^= 1;
|
||||
}
|
||||
|
||||
static void sub_80B9C7C(u8 taskId)
|
||||
static void AnimTask_BlendColorCycleLoop(u8 taskId)
|
||||
{
|
||||
u8 initialBlendAmount, targetBlendAmount;
|
||||
|
||||
u8 startBlendAmount, targetBlendAmount;
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
if (gTasks[taskId].data[2] > 0)
|
||||
if (gTasks[taskId].tNumBlends > 0)
|
||||
{
|
||||
if (gTasks[taskId].data[8] == 0)
|
||||
if (!gTasks[taskId].tRestoreBlend)
|
||||
{
|
||||
initialBlendAmount = gTasks[taskId].data[3];
|
||||
targetBlendAmount = gTasks[taskId].data[4];
|
||||
// Blend to designated color
|
||||
startBlendAmount = gTasks[taskId].tInitialBlendY;
|
||||
targetBlendAmount = gTasks[taskId].tTargetBlendY;
|
||||
}
|
||||
else
|
||||
{
|
||||
initialBlendAmount = gTasks[taskId].data[4];
|
||||
targetBlendAmount = gTasks[taskId].data[3];
|
||||
// Blend back to original color
|
||||
startBlendAmount = gTasks[taskId].tTargetBlendY;
|
||||
targetBlendAmount = gTasks[taskId].tInitialBlendY;
|
||||
}
|
||||
if (gTasks[taskId].data[2] == 1)
|
||||
|
||||
if (gTasks[taskId].tNumBlends == 1)
|
||||
targetBlendAmount = 0;
|
||||
sub_80B9C2C(taskId, initialBlendAmount, targetBlendAmount);
|
||||
|
||||
BlendColorCycle(taskId, startBlendAmount, targetBlendAmount);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -461,64 +480,73 @@ static void sub_80B9C7C(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// See AnimTask_BlendColorCycle. Same, but excludes Attacker and Target
|
||||
void AnimTask_BlendColorCycleExclude(u8 taskId)
|
||||
{
|
||||
s32 battler;
|
||||
int battler;
|
||||
u32 selectedPalettes = 0;
|
||||
|
||||
gTasks[taskId].data[0] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[5];
|
||||
gTasks[taskId].data[8] = 0;
|
||||
for (battler = 0; battler < gBattlersCount; ++battler)
|
||||
gTasks[taskId].tDelay = gBattleAnimArgs[1];
|
||||
gTasks[taskId].tNumBlends = gBattleAnimArgs[2];
|
||||
gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3];
|
||||
gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4];
|
||||
gTasks[taskId].tBlendColor = gBattleAnimArgs[5];
|
||||
gTasks[taskId].tRestoreBlend = 0;
|
||||
|
||||
for (battler = 0; battler < gBattlersCount; battler++)
|
||||
{
|
||||
if (battler != gBattleAnimAttacker && battler != gBattleAnimTarget)
|
||||
selectedPalettes |= 1 << (battler + 16);
|
||||
}
|
||||
|
||||
if (gBattleAnimArgs[0] == 1)
|
||||
selectedPalettes |= 0xE;
|
||||
gTasks[taskId].data[9] = selectedPalettes >> 16;
|
||||
gTasks[taskId].data[10] = selectedPalettes & 0xFF;
|
||||
sub_80B9DA0(taskId, 0, gTasks[taskId].data[4]);
|
||||
gTasks[taskId].func = sub_80B9DF0;
|
||||
|
||||
gTasks[taskId].tPalSelectorHi = selectedPalettes >> 16;
|
||||
gTasks[taskId].tPalSelectorLo = selectedPalettes & 0xFF;
|
||||
BlendColorCycleExclude(taskId, 0, gTasks[taskId].tTargetBlendY);
|
||||
gTasks[taskId].func = AnimTask_BlendColorCycleExcludeLoop;
|
||||
}
|
||||
|
||||
static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
|
||||
static void BlendColorCycleExclude(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
|
||||
{
|
||||
u32 selectedPalettes = ((u16)gTasks[taskId].data[9] << 16) | (u16)gTasks[taskId].data[10];
|
||||
|
||||
BeginNormalPaletteFade(selectedPalettes,
|
||||
gTasks[taskId].data[1],
|
||||
initialBlendAmount,
|
||||
targetBlendAmount,
|
||||
gTasks[taskId].data[5]);
|
||||
--gTasks[taskId].data[2];
|
||||
gTasks[taskId].data[8] ^= 1;
|
||||
u32 selectedPalettes = ((u16)gTasks[taskId].tPalSelectorHi << 16) | (u16)gTasks[taskId].tPalSelectorLo;
|
||||
BeginNormalPaletteFade(
|
||||
selectedPalettes,
|
||||
gTasks[taskId].tDelay,
|
||||
startBlendAmount,
|
||||
targetBlendAmount,
|
||||
gTasks[taskId].tBlendColor);
|
||||
|
||||
gTasks[taskId].tNumBlends--;
|
||||
gTasks[taskId].tRestoreBlend ^= 1;
|
||||
}
|
||||
|
||||
static void sub_80B9DF0(u8 taskId)
|
||||
static void AnimTask_BlendColorCycleExcludeLoop(u8 taskId)
|
||||
{
|
||||
u8 initialBlendAmount, targetBlendAmount;
|
||||
|
||||
u8 startBlendAmount, targetBlendAmount;
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
if (gTasks[taskId].data[2] > 0)
|
||||
if (gTasks[taskId].tNumBlends > 0)
|
||||
{
|
||||
if (gTasks[taskId].data[8] == 0)
|
||||
if (!gTasks[taskId].tRestoreBlend)
|
||||
{
|
||||
initialBlendAmount = gTasks[taskId].data[3];
|
||||
targetBlendAmount = gTasks[taskId].data[4];
|
||||
// Blend to designated color
|
||||
startBlendAmount = gTasks[taskId].tInitialBlendY;
|
||||
targetBlendAmount = gTasks[taskId].tTargetBlendY;
|
||||
}
|
||||
else
|
||||
{
|
||||
initialBlendAmount = gTasks[taskId].data[4];
|
||||
targetBlendAmount = gTasks[taskId].data[3];
|
||||
// Blend back to original color
|
||||
startBlendAmount = gTasks[taskId].tTargetBlendY;
|
||||
targetBlendAmount = gTasks[taskId].tInitialBlendY;
|
||||
}
|
||||
|
||||
if (gTasks[taskId].data[2] == 1)
|
||||
if (gTasks[taskId].tNumBlends == 1)
|
||||
targetBlendAmount = 0;
|
||||
sub_80B9DA0(taskId, initialBlendAmount, targetBlendAmount);
|
||||
|
||||
BlendColorCycleExclude(taskId, startBlendAmount, targetBlendAmount);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -527,56 +555,59 @@ static void sub_80B9DF0(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// See AnimTask_BlendColorCycle. Same, but selects palette by ANIM_TAG_*
|
||||
void AnimTask_BlendColorCycleByTag(u8 taskId)
|
||||
{
|
||||
u8 paletteIndex;
|
||||
gTasks[taskId].tPalTag = gBattleAnimArgs[0];
|
||||
gTasks[taskId].tDelay = gBattleAnimArgs[1];
|
||||
gTasks[taskId].tNumBlends = gBattleAnimArgs[2];
|
||||
gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3];
|
||||
gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4];
|
||||
gTasks[taskId].tBlendColor = gBattleAnimArgs[5];
|
||||
gTasks[taskId].tRestoreBlend = FALSE;
|
||||
|
||||
gTasks[taskId].data[0] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||||
gTasks[taskId].data[5] = gBattleAnimArgs[5];
|
||||
gTasks[taskId].data[8] = 0;
|
||||
sub_80B9EA8(taskId, 0, gTasks[taskId].data[4]);
|
||||
gTasks[taskId].func = sub_80B9F04;
|
||||
BlendColorCycleByTag(taskId, 0, gTasks[taskId].tTargetBlendY);
|
||||
gTasks[taskId].func = AnimTask_BlendColorCycleByTagLoop;
|
||||
}
|
||||
|
||||
static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
|
||||
static void BlendColorCycleByTag(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount)
|
||||
{
|
||||
u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].data[0]);
|
||||
|
||||
BeginNormalPaletteFade(1 << (paletteIndex + 16),
|
||||
gTasks[taskId].data[1],
|
||||
initialBlendAmount,
|
||||
targetBlendAmount,
|
||||
gTasks[taskId].data[5]);
|
||||
--gTasks[taskId].data[2];
|
||||
gTasks[taskId].data[8] ^= 1;
|
||||
u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].tPalTag);
|
||||
BeginNormalPaletteFade(
|
||||
1 << (paletteIndex + 16),
|
||||
gTasks[taskId].tDelay,
|
||||
startBlendAmount,
|
||||
targetBlendAmount,
|
||||
gTasks[taskId].tBlendColor);
|
||||
|
||||
gTasks[taskId].tNumBlends--;
|
||||
gTasks[taskId].tRestoreBlend ^= 1;
|
||||
}
|
||||
|
||||
static void sub_80B9F04(u8 taskId)
|
||||
static void AnimTask_BlendColorCycleByTagLoop(u8 taskId)
|
||||
{
|
||||
u8 initialBlendAmount, targetBlendAmount;
|
||||
|
||||
u8 startBlendAmount, targetBlendAmount;
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
if (gTasks[taskId].data[2] > 0)
|
||||
if (gTasks[taskId].tNumBlends > 0)
|
||||
{
|
||||
if (gTasks[taskId].data[8] == 0)
|
||||
if (!gTasks[taskId].tRestoreBlend)
|
||||
{
|
||||
initialBlendAmount = gTasks[taskId].data[3];
|
||||
targetBlendAmount = gTasks[taskId].data[4];
|
||||
// Blend to designated color
|
||||
startBlendAmount = gTasks[taskId].tInitialBlendY;
|
||||
targetBlendAmount = gTasks[taskId].tTargetBlendY;
|
||||
}
|
||||
else
|
||||
{
|
||||
initialBlendAmount = gTasks[taskId].data[4];
|
||||
targetBlendAmount = gTasks[taskId].data[3];
|
||||
// Blend back to original color
|
||||
startBlendAmount = gTasks[taskId].tTargetBlendY;
|
||||
targetBlendAmount = gTasks[taskId].tInitialBlendY;
|
||||
}
|
||||
|
||||
if (gTasks[taskId].data[2] == 1)
|
||||
if (gTasks[taskId].tNumBlends == 1)
|
||||
targetBlendAmount = 0;
|
||||
sub_80B9EA8(taskId, initialBlendAmount, targetBlendAmount);
|
||||
|
||||
BlendColorCycleByTag(taskId, startBlendAmount, targetBlendAmount);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -585,6 +616,18 @@ static void sub_80B9F04(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
#undef tPalSelector
|
||||
#undef tPalTag
|
||||
#undef tDelay
|
||||
#undef tNumBlends
|
||||
#undef tInitialBlendY
|
||||
#undef tTargetBlendY
|
||||
#undef tBlendColor
|
||||
#undef tRestoreBlend
|
||||
#undef tPalSelectorHi
|
||||
#undef tPalSelectorLo
|
||||
|
||||
// Flashes the specified anim tag with given color. Used e.g. to flash the particles red in Hyper Beam
|
||||
void AnimTask_FlashAnimTagWithColor(u8 taskId)
|
||||
{
|
||||
u8 paletteIndex;
|
||||
@@ -603,10 +646,10 @@ void AnimTask_FlashAnimTagWithColor(u8 taskId)
|
||||
gBattleAnimArgs[4],
|
||||
gBattleAnimArgs[4],
|
||||
gBattleAnimArgs[3]);
|
||||
gTasks[taskId].func = sub_80B9FD8;
|
||||
gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step1;
|
||||
}
|
||||
|
||||
static void sub_80B9FD8(u8 taskId)
|
||||
static void AnimTask_FlashAnimTagWithColor_Step1(u8 taskId)
|
||||
{
|
||||
u32 selectedPalettes;
|
||||
|
||||
@@ -619,7 +662,7 @@ static void sub_80B9FD8(u8 taskId)
|
||||
return;
|
||||
if (gTasks[taskId].data[2] == 0)
|
||||
{
|
||||
gTasks[taskId].func = sub_80BA090;
|
||||
gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step2;
|
||||
return;
|
||||
}
|
||||
selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16);
|
||||
@@ -640,7 +683,7 @@ static void sub_80B9FD8(u8 taskId)
|
||||
--gTasks[taskId].data[2];
|
||||
}
|
||||
|
||||
static void sub_80BA090(u8 taskId)
|
||||
static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId)
|
||||
{
|
||||
u32 selectedPalettes;
|
||||
|
||||
@@ -659,7 +702,7 @@ void AnimTask_InvertScreenColor(u8 taskId)
|
||||
u8 targetBattler = gBattleAnimTarget;
|
||||
|
||||
if (gBattleAnimArgs[0] & 0x100)
|
||||
selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
|
||||
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
if (gBattleAnimArgs[1] & 0x100)
|
||||
selectedPalettes |= (0x10000 << attackerBattler);
|
||||
if (gBattleAnimArgs[2] & 0x100)
|
||||
@@ -668,8 +711,16 @@ void AnimTask_InvertScreenColor(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
// not used
|
||||
static void sub_80BA16C(u8 taskId)
|
||||
// Unused
|
||||
#define tTimer data[0]
|
||||
#define tLength data[1]
|
||||
#define tFlagsScenery data[2]
|
||||
#define tFlagsAttacker data[3]
|
||||
#define tFlagsTarget data[4]
|
||||
#define tColorR data[5]
|
||||
#define tColorG data[6]
|
||||
#define tColorB data[7]
|
||||
static void AnimTask_TintPalettes(u8 taskId)
|
||||
{
|
||||
u8 attackerBattler;
|
||||
u8 targetBattler;
|
||||
@@ -708,6 +759,15 @@ static void sub_80BA16C(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
#undef tTimer
|
||||
#undef tLength
|
||||
#undef tFlagsScenery
|
||||
#undef tFlagsAttacker
|
||||
#undef tFlagsTarget
|
||||
#undef tColorR
|
||||
#undef tColorG
|
||||
#undef tColorB
|
||||
|
||||
static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite)
|
||||
{
|
||||
u16 var0;
|
||||
@@ -737,11 +797,11 @@ static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite)
|
||||
sprite->data[5] = gBattleAnimArgs[3];
|
||||
var0 = sprite->data[5] - 2;
|
||||
if (var0 < 2)
|
||||
sub_80BA3CC();
|
||||
sprite->callback = sub_80BA320;
|
||||
AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled();
|
||||
sprite->callback = AnimShakeMonOrBattleTerrain_Step;
|
||||
}
|
||||
|
||||
static void sub_80BA320(struct Sprite *sprite)
|
||||
static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite)
|
||||
{
|
||||
u8 i;
|
||||
u16 var0;
|
||||
@@ -766,58 +826,70 @@ static void sub_80BA320(struct Sprite *sprite)
|
||||
var0 = sprite->data[5] - 2;
|
||||
if (var0 < 2)
|
||||
for (i = 0; i < gBattlersCount; ++i)
|
||||
gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = 0;
|
||||
gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = FALSE;
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80BA3CC(void)
|
||||
static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void)
|
||||
{
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 0;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 0;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = FALSE;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = FALSE;
|
||||
if (gBattleAnimArgs[4] == 2)
|
||||
{
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleAnimArgs[4] == 0)
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE;
|
||||
else
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// Task data for AnimTask_ShakeBattleTerrain
|
||||
#define tXOffset data[0]
|
||||
#define tYOffset data[1]
|
||||
#define tNumShakes data[2]
|
||||
#define tTimer data[3]
|
||||
#define tShakeDelay data[8]
|
||||
|
||||
// Can shake battle terrain back and forth on the X or down and back to original pos on Y (cant shake up from orig pos)
|
||||
// arg0: x offset of shake
|
||||
// arg1: y offset of shake
|
||||
// arg2: number of shakes
|
||||
// arg3: time between shakes
|
||||
void AnimTask_ShakeBattleTerrain(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[0] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[2] = gBattleAnimArgs[2];
|
||||
gTasks[taskId].data[3] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].data[8] = gBattleAnimArgs[3];
|
||||
gTasks[taskId].tXOffset = gBattleAnimArgs[0];
|
||||
gTasks[taskId].tYOffset = gBattleAnimArgs[1];
|
||||
gTasks[taskId].tNumShakes = gBattleAnimArgs[2];
|
||||
gTasks[taskId].tTimer = gBattleAnimArgs[3];
|
||||
gTasks[taskId].tShakeDelay = gBattleAnimArgs[3];
|
||||
gBattle_BG3_X = gBattleAnimArgs[0];
|
||||
gBattle_BG3_Y = gBattleAnimArgs[1];
|
||||
gTasks[taskId].func = sub_80BA4D0;
|
||||
gTasks[taskId].func = AnimTask_ShakeBattleTerrain_Step;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
static void sub_80BA4D0(u8 taskId)
|
||||
static void AnimTask_ShakeBattleTerrain_Step(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
if (gTasks[taskId].tTimer == 0)
|
||||
{
|
||||
if (gBattle_BG3_X == gTasks[taskId].data[0])
|
||||
gBattle_BG3_X = -gTasks[taskId].data[0];
|
||||
if (gBattle_BG3_X == gTasks[taskId].tXOffset)
|
||||
gBattle_BG3_X = -gTasks[taskId].tXOffset;
|
||||
else
|
||||
gBattle_BG3_X = gTasks[taskId].data[0];
|
||||
gBattle_BG3_X = gTasks[taskId].tXOffset;
|
||||
|
||||
if (gBattle_BG3_Y == -gTasks[taskId].data[1])
|
||||
if (gBattle_BG3_Y == -gTasks[taskId].tYOffset)
|
||||
gBattle_BG3_Y = 0;
|
||||
else
|
||||
gBattle_BG3_Y = -gTasks[taskId].data[1];
|
||||
gBattle_BG3_Y = -gTasks[taskId].tYOffset;
|
||||
|
||||
gTasks[taskId].data[3] = gTasks[taskId].data[8];
|
||||
if (--gTasks[taskId].data[2] == 0)
|
||||
gTasks[taskId].tTimer = gTasks[taskId].tShakeDelay;
|
||||
if (--gTasks[taskId].tNumShakes == 0)
|
||||
{
|
||||
gBattle_BG3_X = 0;
|
||||
gBattle_BG3_Y = 0;
|
||||
@@ -826,26 +898,33 @@ static void sub_80BA4D0(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
--gTasks[taskId].data[3];
|
||||
gTasks[taskId].tTimer--;
|
||||
}
|
||||
}
|
||||
|
||||
#undef tXOffset
|
||||
#undef tYOffset
|
||||
#undef tNumShakes
|
||||
#undef tTimer
|
||||
#undef tShakeDelay
|
||||
|
||||
static void AnimHitSplatBasic(struct Sprite *sprite)
|
||||
{
|
||||
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
|
||||
if (gBattleAnimArgs[2] == 0)
|
||||
InitSpritePosToAnimAttacker(sprite, 1);
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
else
|
||||
InitSpritePosToAnimTarget(sprite, TRUE);
|
||||
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
}
|
||||
|
||||
// Same as basic hit splat but takes a length of time to persist for (arg4)
|
||||
static void AnimHitSplatPersistent(struct Sprite *sprite)
|
||||
{
|
||||
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
|
||||
if (gBattleAnimArgs[2] == 0)
|
||||
InitSpritePosToAnimAttacker(sprite, 1);
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
else
|
||||
InitSpritePosToAnimTarget(sprite, TRUE);
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
@@ -853,6 +932,8 @@ static void AnimHitSplatPersistent(struct Sprite *sprite)
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSpriteAfterTimer);
|
||||
}
|
||||
|
||||
// For paired hit splats whose position is inverted when used by the opponent on the player.
|
||||
// Used by Twineedle and Spike Cannon
|
||||
static void AnimHitSplatHandleInvert(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER && !IsContest())
|
||||
@@ -865,8 +946,8 @@ static void AnimHitSplatRandom(struct Sprite *sprite)
|
||||
if (gBattleAnimArgs[1] == -1)
|
||||
gBattleAnimArgs[1] = Random() & 3;
|
||||
StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]);
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
InitSpritePosToAnimAttacker(sprite, 0);
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
InitSpritePosToAnimAttacker(sprite, FALSE);
|
||||
else
|
||||
InitSpritePosToAnimTarget(sprite, FALSE);
|
||||
sprite->x2 += (Random() % 48) - 24;
|
||||
@@ -889,8 +970,8 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite)
|
||||
|
||||
static void AnimCrossImpact(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[2] == 0)
|
||||
InitSpritePosToAnimAttacker(sprite, 1);
|
||||
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
else
|
||||
InitSpritePosToAnimTarget(sprite, TRUE);
|
||||
sprite->data[0] = gBattleAnimArgs[3];
|
||||
@@ -901,14 +982,14 @@ static void AnimCrossImpact(struct Sprite *sprite)
|
||||
static void AnimFlashingHitSplat(struct Sprite *sprite)
|
||||
{
|
||||
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
|
||||
if (gBattleAnimArgs[2] == 0)
|
||||
InitSpritePosToAnimAttacker(sprite, 1);
|
||||
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
else
|
||||
InitSpritePosToAnimTarget(sprite, TRUE);
|
||||
sprite->callback = sub_80BA7BC;
|
||||
sprite->callback = AnimFlashingHitSplat_Step;
|
||||
}
|
||||
|
||||
static void sub_80BA7BC(struct Sprite *sprite)
|
||||
static void AnimFlashingHitSplat_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible ^= 1;
|
||||
if (sprite->data[0]++ > 12)
|
||||
@@ -7,10 +7,10 @@ static void AnimAcidPoisonBubble(struct Sprite *sprite);
|
||||
static void AnimSludgeBombHitParticle(struct Sprite *sprite);
|
||||
static void AnimAcidPoisonDroplet(struct Sprite *sprite);
|
||||
static void AnimBubbleEffect(struct Sprite *sprite);
|
||||
static void sub_80B1684(struct Sprite *sprite);
|
||||
static void sub_80B1728(struct Sprite *sprite);
|
||||
static void sub_80B1798(struct Sprite *sprite);
|
||||
static void AnimBubbleEffectStep(struct Sprite *sprite);
|
||||
static void AnimSludgeProjectile_Step(struct Sprite *sprite);
|
||||
static void AnimAcidPoisonBubble_Step(struct Sprite *sprite);
|
||||
static void AnimSludgeBombHitParticle_Step(struct Sprite *sprite);
|
||||
static void AnimBubbleEffect_Step(struct Sprite *sprite);
|
||||
|
||||
static const union AnimCmd sAnim_ToxicBubble[] =
|
||||
{
|
||||
@@ -194,10 +194,10 @@ static void AnimSludgeProjectile(struct Sprite *sprite)
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[5] = -30;
|
||||
InitAnimArcTranslation(sprite);
|
||||
sprite->callback = sub_80B1684;
|
||||
sprite->callback = AnimSludgeProjectile_Step;
|
||||
}
|
||||
|
||||
static void sub_80B1684(struct Sprite *sprite)
|
||||
static void AnimSludgeProjectile_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -218,10 +218,10 @@ static void AnimAcidPoisonBubble(struct Sprite *sprite)
|
||||
sprite->data[4] = l2 + gBattleAnimArgs[5];
|
||||
sprite->data[5] = -30;
|
||||
InitAnimArcTranslation(sprite);
|
||||
sprite->callback = sub_80B1728;
|
||||
sprite->callback = AnimAcidPoisonBubble_Step;
|
||||
}
|
||||
|
||||
static void sub_80B1728(struct Sprite *sprite)
|
||||
static void AnimAcidPoisonBubble_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
DestroyAnimSprite(sprite);
|
||||
@@ -237,10 +237,10 @@ static void AnimSludgeBombHitParticle(struct Sprite *sprite)
|
||||
InitSpriteDataForLinearTranslation(sprite);
|
||||
sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2];
|
||||
sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2];
|
||||
sprite->callback = sub_80B1798;
|
||||
sprite->callback = AnimSludgeBombHitParticle_Step;
|
||||
}
|
||||
|
||||
static void sub_80B1798(struct Sprite *sprite)
|
||||
static void AnimSludgeBombHitParticle_Step(struct Sprite *sprite)
|
||||
{
|
||||
TranslateSpriteLinearFixedPoint(sprite);
|
||||
sprite->data[1] -= sprite->data[5];
|
||||
@@ -284,10 +284,10 @@ static void AnimBubbleEffect(struct Sprite *sprite)
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
}
|
||||
sprite->callback = AnimBubbleEffectStep;
|
||||
sprite->callback = AnimBubbleEffect_Step;
|
||||
}
|
||||
|
||||
static void AnimBubbleEffectStep(struct Sprite *sprite)
|
||||
static void AnimBubbleEffect_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF;
|
||||
sprite->x2 = Sin(sprite->data[0], 4);
|
||||
@@ -12,18 +12,18 @@ static void AnimQuestionMark(struct Sprite *sprite);
|
||||
static void AnimRedX(struct Sprite *sprite);
|
||||
static void AnimSkillSwapOrb(struct Sprite *sprite);
|
||||
static void AnimPsychoBoost(struct Sprite *sprite);
|
||||
static void sub_80B300C(struct Sprite *sprite);
|
||||
static void sub_80B3044(struct Sprite *sprite);
|
||||
static void sub_80B30B0(struct Sprite *sprite);
|
||||
static void sub_80B3168(struct Sprite *sprite);
|
||||
static void sub_80B3384(struct Sprite *sprite);
|
||||
static void sub_80B33B8(struct Sprite *sprite);
|
||||
static void sub_80B3454(u8 taskId);
|
||||
static void sub_80B34DC(u8 taskId);
|
||||
static void sub_80B3618(u8 taskId);
|
||||
static void sub_80B3980(u8 taskId);
|
||||
static void sub_80B3B78(u8 taskId);
|
||||
static void sub_80B3D78(u8 taskId);
|
||||
static void AnimDefensiveWall_Step2(struct Sprite *sprite);
|
||||
static void AnimDefensiveWall_Step3(struct Sprite *sprite);
|
||||
static void AnimDefensiveWall_Step4(struct Sprite *sprite);
|
||||
static void AnimDefensiveWall_Step5(struct Sprite *sprite);
|
||||
static void AnimQuestionMark_Step1(struct Sprite *sprite);
|
||||
static void AnimQuestionMark_Step2(struct Sprite *sprite);
|
||||
static void AnimTask_MeditateStretchAttacker_Step(u8 taskId);
|
||||
static void AnimTask_Teleport_Step(u8 taskId);
|
||||
static void AnimTask_ImprisonOrbs_Step(u8 taskId);
|
||||
static void AnimTask_SkillSwap_Step(u8 taskId);
|
||||
static void AnimTask_ExtrasensoryDistortion_Step(u8 taskId);
|
||||
static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId);
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_PsychUpSpiral[] =
|
||||
{
|
||||
@@ -415,6 +415,7 @@ const struct SpriteTemplate gPsychoBoostOrbSpriteTemplate =
|
||||
.callback = AnimPsychoBoost,
|
||||
};
|
||||
|
||||
// For the rectangular wall sprite used by Reflect, Mirror Coat, etc
|
||||
static void AnimDefensiveWall(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest())
|
||||
@@ -459,20 +460,22 @@ static void AnimDefensiveWall(struct Sprite *sprite)
|
||||
if (IsContest())
|
||||
sprite->y += 9;
|
||||
sprite->data[0] = 256 + IndexOfSpritePaletteTag(gBattleAnimArgs[2]) * 16;
|
||||
sprite->callback = sub_80B300C;
|
||||
sub_80B300C(sprite);
|
||||
sprite->callback = AnimDefensiveWall_Step2;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_80B300C(struct Sprite *sprite)
|
||||
// AnimDefensiveWall_Step1 is removed in FRLG from the removal of Contest handling
|
||||
|
||||
static void AnimDefensiveWall_Step2(struct Sprite *sprite)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3]));
|
||||
if (sprite->data[3] == 13)
|
||||
sprite->callback = sub_80B3044;
|
||||
sprite->callback = AnimDefensiveWall_Step3;
|
||||
else
|
||||
++sprite->data[3];
|
||||
}
|
||||
|
||||
static void sub_80B3044(struct Sprite *sprite)
|
||||
static void AnimDefensiveWall_Step3(struct Sprite *sprite)
|
||||
{
|
||||
u16 color;
|
||||
u16 startOffset;
|
||||
@@ -487,11 +490,11 @@ static void sub_80B3044(struct Sprite *sprite)
|
||||
gPlttBufferFaded[startOffset + i] = gPlttBufferFaded[startOffset + i - 1];
|
||||
gPlttBufferFaded[startOffset + 1] = color;
|
||||
if (++sprite->data[2] == 16)
|
||||
sprite->callback = sub_80B30B0;
|
||||
sprite->callback = AnimDefensiveWall_Step4;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B30B0(struct Sprite *sprite)
|
||||
static void AnimDefensiveWall_Step4(struct Sprite *sprite)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3]));
|
||||
if (--sprite->data[3] == -1)
|
||||
@@ -508,11 +511,11 @@ static void sub_80B30B0(struct Sprite *sprite)
|
||||
gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
|
||||
}
|
||||
sprite->invisible = TRUE;
|
||||
sprite->callback = sub_80B3168;
|
||||
sprite->callback = AnimDefensiveWall_Step5;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B3168(struct Sprite *sprite)
|
||||
static void AnimDefensiveWall_Step5(struct Sprite *sprite)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
@@ -531,13 +534,14 @@ static void sub_80B3168(struct Sprite *sprite)
|
||||
sprite->callback = DestroyAnimSprite;
|
||||
}
|
||||
|
||||
// Animates the sparkle that appears during Reflect or Light Screen/Mirror Coat
|
||||
static void AnimWallSparkle(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
int arg3 = gBattleAnimArgs[3];
|
||||
bool32 ignoreOffsets = gBattleAnimArgs[3];
|
||||
bool8 respectMonPicOffsets = FALSE;
|
||||
if (arg3 == 0)
|
||||
if (!ignoreOffsets)
|
||||
respectMonPicOffsets = TRUE;
|
||||
if (!IsContest() && IsDoubleBattle())
|
||||
{
|
||||
@@ -589,6 +593,7 @@ static void AnimBentSpoon(struct Sprite *sprite)
|
||||
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
||||
}
|
||||
|
||||
// Used by Amnesia
|
||||
static void AnimQuestionMark(struct Sprite *sprite)
|
||||
{
|
||||
s16 x = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2;
|
||||
@@ -600,20 +605,20 @@ static void AnimQuestionMark(struct Sprite *sprite)
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + y;
|
||||
if (sprite->y < 16)
|
||||
sprite->y = 16;
|
||||
StoreSpriteCallbackInData6(sprite, sub_80B3384);
|
||||
StoreSpriteCallbackInData6(sprite, AnimQuestionMark_Step1);
|
||||
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
||||
}
|
||||
|
||||
static void sub_80B3384(struct Sprite *sprite)
|
||||
static void AnimQuestionMark_Step1(struct Sprite *sprite)
|
||||
{
|
||||
sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
sprite->affineAnims = sAffineAnims_QuestionMark;
|
||||
sprite->data[0] = 0;
|
||||
InitSpriteAffineAnim(sprite);
|
||||
sprite->callback = sub_80B33B8;
|
||||
sprite->callback = AnimQuestionMark_Step2;
|
||||
}
|
||||
|
||||
static void sub_80B33B8(struct Sprite *sprite)
|
||||
static void AnimQuestionMark_Step2(struct Sprite *sprite)
|
||||
{
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
@@ -640,10 +645,10 @@ void AnimTask_MeditateStretchAttacker(u8 taskId)
|
||||
|
||||
task->data[0] = spriteId;
|
||||
PrepareAffineAnimInTaskData(task, spriteId, sAffineAnim_MeditateStretchAttacker);
|
||||
task->func = sub_80B3454;
|
||||
task->func = AnimTask_MeditateStretchAttacker_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3454(u8 taskId)
|
||||
static void AnimTask_MeditateStretchAttacker_Step(u8 taskId)
|
||||
{
|
||||
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
|
||||
DestroyAnimVisualTask(taskId);
|
||||
@@ -659,10 +664,10 @@ void AnimTask_Teleport(u8 taskId)
|
||||
task->data[2] = 0;
|
||||
task->data[3] = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 4 : 8;
|
||||
PrepareAffineAnimInTaskData(task, task->data[0], sAffineAnim_Teleport);
|
||||
task->func = sub_80B34DC;
|
||||
task->func = AnimTask_Teleport_Step;
|
||||
}
|
||||
|
||||
static void sub_80B34DC(u8 taskId)
|
||||
static void AnimTask_Teleport_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -682,7 +687,7 @@ static void sub_80B34DC(u8 taskId)
|
||||
else
|
||||
{
|
||||
gSprites[task->data[0]].invisible = TRUE;
|
||||
gSprites[task->data[0]].x = 272;
|
||||
gSprites[task->data[0]].x = DISPLAY_WIDTH + 32;
|
||||
ResetSpriteRotScale(task->data[0]);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
@@ -704,10 +709,10 @@ void AnimTask_ImprisonOrbs(u8 taskId)
|
||||
task->data[12] = var0 > var1 ? var0 : var1;
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
|
||||
task->func = sub_80B3618;
|
||||
task->func = AnimTask_ImprisonOrbs_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3618(u8 taskId)
|
||||
static void AnimTask_ImprisonOrbs_Step(u8 taskId)
|
||||
{
|
||||
u16 i;
|
||||
u8 spriteId;
|
||||
@@ -757,7 +762,7 @@ static void sub_80B3618(u8 taskId)
|
||||
if (++task->data[1] == 32)
|
||||
{
|
||||
for (i = 8; i < 13; ++i)
|
||||
if (task->data[i] != 64)
|
||||
if (task->data[i] != MAX_SPRITES)
|
||||
DestroySprite(&gSprites[task->data[i]]);
|
||||
++task->data[0];
|
||||
}
|
||||
@@ -773,7 +778,7 @@ static void sub_80B3618(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B37A4(struct Sprite *sprite)
|
||||
static void AnimRedX_Step(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[1] > sprite->data[0] - 10)
|
||||
sprite->invisible = sprite->data[1] & 1;
|
||||
@@ -790,7 +795,7 @@ static void AnimRedX(struct Sprite *sprite)
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
}
|
||||
sprite->data[0] = gBattleAnimArgs[1];
|
||||
sprite->callback = sub_80B37A4;
|
||||
sprite->callback = AnimRedX_Step;
|
||||
}
|
||||
|
||||
void AnimTask_SkillSwap(u8 taskId)
|
||||
@@ -799,7 +804,7 @@ void AnimTask_SkillSwap(u8 taskId)
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
if (gBattleAnimArgs[0] == 1)
|
||||
if (gBattleAnimArgs[0] == ANIM_TARGET)
|
||||
{
|
||||
task->data[10] = -10;
|
||||
task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8;
|
||||
@@ -836,10 +841,10 @@ void AnimTask_SkillSwap(u8 taskId)
|
||||
}
|
||||
}
|
||||
task->data[1] = 6;
|
||||
task->func = sub_80B3980;
|
||||
task->func = AnimTask_SkillSwap_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3980(u8 taskId)
|
||||
static void AnimTask_SkillSwap_Step(u8 taskId)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -881,6 +886,8 @@ static void AnimSkillSwapOrb(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
// The scanline effect that distorts the target during Extrasensory by segmenting the mon vertically and shifting the slices
|
||||
// arg0: Stage. Stage 0 is a slight right distortion, 1 is a medium left distortion, and 2 is a severe right distortion
|
||||
void AnimTask_ExtrasensoryDistortion(u8 taskId)
|
||||
{
|
||||
s16 i;
|
||||
@@ -932,10 +939,10 @@ void AnimTask_ExtrasensoryDistortion(u8 taskId)
|
||||
scanlineParams.initState = 1;
|
||||
scanlineParams.unused9 = 0;
|
||||
ScanlineEffect_SetParams(scanlineParams);
|
||||
task->func = sub_80B3B78;
|
||||
task->func = AnimTask_ExtrasensoryDistortion_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3B78(u8 taskId)
|
||||
static void AnimTask_ExtrasensoryDistortion_Step(u8 taskId)
|
||||
{
|
||||
s16 sineIndex, i;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -969,6 +976,8 @@ static void sub_80B3B78(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// Creates a cloned transparent sprite of the battler that grows and then shrinks back to original size. Used by Extrasensory
|
||||
// arg0: battler
|
||||
void AnimTask_TransparentCloneGrowAndShrink(u8 taskId)
|
||||
{
|
||||
s16 spriteId;
|
||||
@@ -998,10 +1007,10 @@ void AnimTask_TransparentCloneGrowAndShrink(u8 taskId)
|
||||
task->data[13] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
task->data[14] = matrixNum;
|
||||
task->data[15] = spriteId;
|
||||
task->func = sub_80B3D78;
|
||||
task->func = AnimTask_TransparentCloneGrowAndShrink_Step;
|
||||
}
|
||||
|
||||
static void sub_80B3D78(u8 taskId)
|
||||
static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -1024,7 +1033,7 @@ static void sub_80B3D78(u8 taskId)
|
||||
++task->data[0];
|
||||
break;
|
||||
case 2:
|
||||
obj_delete_but_dont_free_vram(&gSprites[task->data[15]]);
|
||||
DestroySpriteWithActiveSheet(&gSprites[task->data[15]]);
|
||||
++task->data[0];
|
||||
break;
|
||||
case 3:
|
||||
@@ -8,21 +8,21 @@
|
||||
|
||||
static void AnimFallingRock(struct Sprite *sprite);
|
||||
static void AnimRockFragment(struct Sprite *sprite);
|
||||
static void AnimDirtParticleAcrossScreen(struct Sprite *sprite);
|
||||
static void AnimFlyingSandCrescent(struct Sprite *sprite);
|
||||
static void AnimRaiseSprite(struct Sprite *sprite);
|
||||
static void sub_80B4D00(u8 taskId);
|
||||
static void AnimTask_Rollout_Step(u8 taskId);
|
||||
static void AnimRolloutParticle(struct Sprite *sprite);
|
||||
static void AnimRockTomb(struct Sprite *sprite);
|
||||
static void AnimRockBlastRock(struct Sprite *sprite);
|
||||
static void AnimRockScatter(struct Sprite *sprite);
|
||||
static void AnimParticleInVortex(struct Sprite *sprite);
|
||||
static void sub_80B46B4(struct Sprite *sprite);
|
||||
static void sub_80B47C4(struct Sprite *sprite);
|
||||
static void sub_80B490C(u8 taskId);
|
||||
static void sub_80B4E70(struct Task *task);
|
||||
static u8 sub_80B4FB8(void);
|
||||
static void sub_80B5024(struct Sprite *sprite);
|
||||
static void sub_80B50F8(struct Sprite *sprite);
|
||||
static void AnimFallingRock_Step(struct Sprite *sprite);
|
||||
static void AnimParticleInVortex_Step(struct Sprite *sprite);
|
||||
static void AnimTask_LoadSandstormBackground_Step(u8 taskId);
|
||||
static void CreateRolloutDirtSprite(struct Task *task);
|
||||
static u8 GetRolloutCounter(void);
|
||||
static void AnimRockTomb_Step(struct Sprite *sprite);
|
||||
static void AnimRockScatter_Step(struct Sprite *sprite);
|
||||
|
||||
static const union AnimCmd sAnim_FlyingRock_0[] =
|
||||
{
|
||||
@@ -125,7 +125,7 @@ const struct SpriteTemplate gFlyingSandCrescentSpriteTemplate =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimDirtParticleAcrossScreen,
|
||||
.callback = AnimFlyingSandCrescent,
|
||||
};
|
||||
|
||||
static const struct Subsprite sFlyingSandSubsprites[] =
|
||||
@@ -133,16 +133,16 @@ static const struct Subsprite sFlyingSandSubsprites[] =
|
||||
{
|
||||
.x = -16,
|
||||
.y = 0,
|
||||
.shape = ST_OAM_H_RECTANGLE,
|
||||
.size = 2,
|
||||
.shape = SPRITE_SHAPE(32x16),
|
||||
.size = SPRITE_SIZE(32x16),
|
||||
.tileOffset = 0,
|
||||
.priority = 1,
|
||||
},
|
||||
{
|
||||
.x = 16,
|
||||
.y = 0,
|
||||
.shape = ST_OAM_H_RECTANGLE,
|
||||
.size = 2,
|
||||
.shape = SPRITE_SHAPE(32x16),
|
||||
.size = SPRITE_SIZE(32x16),
|
||||
.tileOffset = 8,
|
||||
.priority = 1,
|
||||
},
|
||||
@@ -153,37 +153,37 @@ static const struct SubspriteTable sFlyingSandSubspriteTable[] =
|
||||
{ NELEMS(sFlyingSandSubsprites), sFlyingSandSubsprites },
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BasicRock_0[] =
|
||||
static const union AnimCmd sAnim_Rock_Biggest[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_BasicRock_1[] =
|
||||
static const union AnimCmd sAnim_Rock_Bigger[] =
|
||||
{
|
||||
ANIMCMD_FRAME(16, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_WeatherBallRockDown_0[] =
|
||||
static const union AnimCmd sAnim_Rock_Big[] =
|
||||
{
|
||||
ANIMCMD_FRAME(32, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_WeatherBallRockDown_1[] =
|
||||
static const union AnimCmd sAnim_Rock_Small[] =
|
||||
{
|
||||
ANIMCMD_FRAME(48, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_TwisterRock_0[] =
|
||||
static const union AnimCmd sAnim_Rock_Smaller[] =
|
||||
{
|
||||
ANIMCMD_FRAME(64, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_TwisterRock_1[] =
|
||||
static const union AnimCmd sAnim_Rock_Smallest[] =
|
||||
{
|
||||
ANIMCMD_FRAME(80, 1),
|
||||
ANIMCMD_END,
|
||||
@@ -191,20 +191,12 @@ static const union AnimCmd sAnim_TwisterRock_1[] =
|
||||
|
||||
static const union AnimCmd *const sAnims_BasicRock[] =
|
||||
{
|
||||
sAnim_BasicRock_0,
|
||||
sAnim_BasicRock_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_WeatherBallRockDown[] =
|
||||
{
|
||||
sAnim_WeatherBallRockDown_0,
|
||||
sAnim_WeatherBallRockDown_1,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_TwisterRock[] =
|
||||
{
|
||||
sAnim_TwisterRock_0,
|
||||
sAnim_TwisterRock_1,
|
||||
sAnim_Rock_Biggest,
|
||||
sAnim_Rock_Bigger,
|
||||
sAnim_Rock_Big,
|
||||
sAnim_Rock_Small,
|
||||
sAnim_Rock_Smaller,
|
||||
sAnim_Rock_Smallest,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gAncientPowerRockSpriteTemplate =
|
||||
@@ -229,7 +221,7 @@ const struct SpriteTemplate gRolloutMudSpriteTemplate =
|
||||
.callback = AnimRolloutParticle,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_83E74F0 =
|
||||
const struct SpriteTemplate gRolloutRockSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_ROCKS,
|
||||
.paletteTag = ANIM_TAG_ROCKS,
|
||||
@@ -296,7 +288,7 @@ const struct SpriteTemplate gTwisterRockSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_ROCKS,
|
||||
.paletteTag = ANIM_TAG_ROCKS,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_TwisterRock,
|
||||
.anims = &sAnims_BasicRock[4],
|
||||
.images = NULL,
|
||||
.affineAnims = sAffineAnims_BasicRock,
|
||||
.callback = AnimMoveTwisterParticle,
|
||||
@@ -307,7 +299,7 @@ const struct SpriteTemplate gWeatherBallRockDownSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_ROCKS,
|
||||
.paletteTag = ANIM_TAG_ROCKS,
|
||||
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
|
||||
.anims = sAnims_WeatherBallRockDown,
|
||||
.anims = &sAnims_BasicRock[2],
|
||||
.images = NULL,
|
||||
.affineAnims = sAffineAnims_BasicRock,
|
||||
.callback = AnimWeatherBallDown,
|
||||
@@ -327,12 +319,12 @@ static void AnimFallingRock(struct Sprite *sprite)
|
||||
sprite->data[3] = 16;
|
||||
sprite->data[4] = -70;
|
||||
sprite->data[5] = gBattleAnimArgs[2];
|
||||
StoreSpriteCallbackInData6(sprite, sub_80B46B4);
|
||||
sprite->callback = TranslateSpriteInEllipseOverDuration;
|
||||
StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step);
|
||||
sprite->callback = TranslateSpriteInEllipse;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_80B46B4(struct Sprite *sprite)
|
||||
static void AnimFallingRock_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x += sprite->data[5];
|
||||
sprite->data[0] = 192;
|
||||
@@ -341,10 +333,11 @@ static void sub_80B46B4(struct Sprite *sprite)
|
||||
sprite->data[3] = 32;
|
||||
sprite->data[4] = -24;
|
||||
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
||||
sprite->callback = TranslateSpriteInEllipseOverDuration;
|
||||
sprite->callback = TranslateSpriteInEllipse;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
// Animates the rock particles that are shown on the impact for Rock Blast / Rock Smash
|
||||
static void AnimRockFragment(struct Sprite *sprite)
|
||||
{
|
||||
StartSpriteAnim(sprite, gBattleAnimArgs[5]);
|
||||
@@ -366,6 +359,7 @@ static void AnimRockFragment(struct Sprite *sprite)
|
||||
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
||||
}
|
||||
|
||||
// Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb
|
||||
static void AnimParticleInVortex(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[6] == 0)
|
||||
@@ -376,10 +370,10 @@ static void AnimParticleInVortex(struct Sprite *sprite)
|
||||
sprite->data[1] = gBattleAnimArgs[2];
|
||||
sprite->data[2] = gBattleAnimArgs[4];
|
||||
sprite->data[3] = gBattleAnimArgs[5];
|
||||
sprite->callback = sub_80B47C4;
|
||||
sprite->callback = AnimParticleInVortex_Step;
|
||||
}
|
||||
|
||||
static void sub_80B47C4(struct Sprite *sprite)
|
||||
static void AnimParticleInVortex_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[4] += sprite->data[1];
|
||||
sprite->y2 = -(sprite->data[4] >> 8);
|
||||
@@ -416,10 +410,10 @@ void AnimTask_LoadSandstormBackground(u8 taskId)
|
||||
if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
var0 = 1;
|
||||
gTasks[taskId].data[0] = var0;
|
||||
gTasks[taskId].func = sub_80B490C;
|
||||
gTasks[taskId].func = AnimTask_LoadSandstormBackground_Step;
|
||||
}
|
||||
|
||||
static void sub_80B490C(u8 taskId)
|
||||
static void AnimTask_LoadSandstormBackground_Step(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
|
||||
@@ -487,7 +481,7 @@ static void sub_80B490C(u8 taskId)
|
||||
// arg 1: projectile speed
|
||||
// arg 2: y pixel drop
|
||||
// arg 3: ??? unknown (possibly a color bit)
|
||||
static void AnimDirtParticleAcrossScreen(struct Sprite *sprite)
|
||||
static void AnimFlyingSandCrescent(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] == 0)
|
||||
{
|
||||
@@ -518,7 +512,7 @@ static void AnimDirtParticleAcrossScreen(struct Sprite *sprite)
|
||||
sprite->data[4] &= 0xFF;
|
||||
if (sprite->data[5] == 0)
|
||||
{
|
||||
if (sprite->x + sprite->x2 > 272)
|
||||
if (sprite->x + sprite->x2 > DISPLAY_WIDTH + 32)
|
||||
{
|
||||
sprite->callback = DestroyAnimSprite;
|
||||
}
|
||||
@@ -550,23 +544,23 @@ static void AnimRaiseSprite(struct Sprite *sprite)
|
||||
void AnimTask_Rollout(u8 taskId)
|
||||
{
|
||||
u16 var0, var1, var2, var3;
|
||||
u8 var4;
|
||||
u8 rolloutCounter;
|
||||
s32 var5;
|
||||
s16 pan1, pan2;
|
||||
struct Task *task;
|
||||
|
||||
task = &gTasks[taskId];
|
||||
var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24;
|
||||
var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24;
|
||||
var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 24;
|
||||
var2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
var3 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 24;
|
||||
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
|
||||
var3 = var1;
|
||||
var4 = sub_80B4FB8();
|
||||
if (var4 == 1)
|
||||
rolloutCounter = GetRolloutCounter();
|
||||
if (rolloutCounter == 1)
|
||||
task->data[8] = 32;
|
||||
else
|
||||
task->data[8] = 48 - (var4 * 8);
|
||||
task->data[8] = 48 - (rolloutCounter * 8);
|
||||
task->data[0] = 0;
|
||||
task->data[11] = 0;
|
||||
task->data[9] = 0;
|
||||
@@ -585,12 +579,12 @@ void AnimTask_Rollout(u8 taskId)
|
||||
pan2 = BattleAnimAdjustPanning(SOUND_PAN_TARGET);
|
||||
task->data[13] = pan1;
|
||||
task->data[14] = (pan2 - pan1) / task->data[8];
|
||||
task->data[1] = var4;
|
||||
task->data[1] = rolloutCounter;
|
||||
task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
task->func = sub_80B4D00;
|
||||
task->func = AnimTask_Rollout_Step;
|
||||
}
|
||||
|
||||
static void sub_80B4D00(u8 taskId)
|
||||
static void AnimTask_Rollout_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task;
|
||||
|
||||
@@ -634,7 +628,7 @@ static void sub_80B4D00(u8 taskId)
|
||||
if (++task->data[9] >= task->data[10])
|
||||
{
|
||||
task->data[9] = 0;
|
||||
sub_80B4E70(task);
|
||||
CreateRolloutDirtSprite(task);
|
||||
task->data[13] += task->data[14];
|
||||
PlaySE12WithPanning(SE_M_DIG, task->data[13]);
|
||||
}
|
||||
@@ -650,10 +644,10 @@ static void sub_80B4D00(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B4E70(struct Task *task)
|
||||
static void CreateRolloutDirtSprite(struct Task *task)
|
||||
{
|
||||
const struct SpriteTemplate *spriteTemplate;
|
||||
s32 var0;
|
||||
s32 tileOffset;
|
||||
u16 x, y;
|
||||
u8 spriteId;
|
||||
|
||||
@@ -661,20 +655,20 @@ static void sub_80B4E70(struct Task *task)
|
||||
{
|
||||
case 1:
|
||||
spriteTemplate = &gRolloutMudSpriteTemplate;
|
||||
var0 = 0;
|
||||
tileOffset = 0;
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
spriteTemplate = &gUnknown_83E74F0;
|
||||
var0 = 80;
|
||||
spriteTemplate = &gRolloutRockSpriteTemplate;
|
||||
tileOffset = 80;
|
||||
break;
|
||||
case 4:
|
||||
spriteTemplate = &gUnknown_83E74F0;
|
||||
var0 = 64;
|
||||
spriteTemplate = &gRolloutRockSpriteTemplate;
|
||||
tileOffset = 64;
|
||||
break;
|
||||
case 5:
|
||||
spriteTemplate = &gUnknown_83E74F0;
|
||||
var0 = 48;
|
||||
spriteTemplate = &gRolloutRockSpriteTemplate;
|
||||
tileOffset = 48;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
@@ -689,7 +683,7 @@ static void sub_80B4E70(struct Task *task)
|
||||
gSprites[spriteId].data[2] = ((task->data[12] * 20) + x) + (task->data[1] * 3);
|
||||
gSprites[spriteId].data[4] = y;
|
||||
gSprites[spriteId].data[5] = -16 - (task->data[1] * 2);
|
||||
gSprites[spriteId].oam.tileNum += var0;
|
||||
gSprites[spriteId].oam.tileNum += tileOffset;
|
||||
InitAnimArcTranslation(&gSprites[spriteId]);
|
||||
++task->data[11];
|
||||
}
|
||||
@@ -700,15 +694,15 @@ static void AnimRolloutParticle(struct Sprite *sprite)
|
||||
{
|
||||
if (TranslateAnimHorizontalArc(sprite))
|
||||
{
|
||||
u8 taskId = FindTaskIdByFunc(sub_80B4D00);
|
||||
u8 taskId = FindTaskIdByFunc(AnimTask_Rollout_Step);
|
||||
|
||||
if (taskId != TAIL_SENTINEL)
|
||||
if (taskId != TASK_NONE)
|
||||
--gTasks[taskId].data[11];
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
static u8 sub_80B4FB8(void)
|
||||
static u8 GetRolloutCounter(void)
|
||||
{
|
||||
u8 retVal = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer;
|
||||
u8 var0 = retVal - 1;
|
||||
@@ -726,11 +720,11 @@ static void AnimRockTomb(struct Sprite *sprite)
|
||||
sprite->data[3] -= gBattleAnimArgs[2];
|
||||
sprite->data[0] = 3;
|
||||
sprite->data[1] = gBattleAnimArgs[3];
|
||||
sprite->callback = sub_80B5024;
|
||||
sprite->callback = AnimRockTomb_Step;
|
||||
sprite->invisible = TRUE;
|
||||
}
|
||||
|
||||
static void sub_80B5024(struct Sprite *sprite)
|
||||
static void AnimRockTomb_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = FALSE;
|
||||
if (sprite->data[3] != 0)
|
||||
@@ -758,18 +752,18 @@ static void AnimRockBlastRock(struct Sprite *sprite)
|
||||
|
||||
static void AnimRockScatter(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
sprite->data[1] = gBattleAnimArgs[0];
|
||||
sprite->data[2] = gBattleAnimArgs[1];
|
||||
sprite->data[5] = gBattleAnimArgs[2];
|
||||
StartSpriteAnim(sprite, gBattleAnimArgs[3]);
|
||||
sprite->callback = sub_80B50F8;
|
||||
sprite->callback = AnimRockScatter_Step;
|
||||
}
|
||||
|
||||
static void sub_80B50F8(struct Sprite *sprite)
|
||||
static void AnimRockScatter_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] += 8;
|
||||
sprite->data[3] += sprite->data[1];
|
||||
@@ -783,11 +777,11 @@ static void sub_80B50F8(struct Sprite *sprite)
|
||||
void AnimTask_GetSeismicTossDamageLevel(u8 taskId)
|
||||
{
|
||||
if (gAnimMoveDmg < 33)
|
||||
gBattleAnimArgs[7] = 0;
|
||||
gBattleAnimArgs[ARG_RET_ID] = 0;
|
||||
if ((u32)gAnimMoveDmg - 33 < 33)
|
||||
gBattleAnimArgs[7] = 1;
|
||||
gBattleAnimArgs[ARG_RET_ID] = 1;
|
||||
if (gAnimMoveDmg > 65)
|
||||
gBattleAnimArgs[7] = 2;
|
||||
gBattleAnimArgs[ARG_RET_ID] = 2;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,197 @@
|
||||
#include "global.h"
|
||||
#include "battle_gfx_sfx_util.h"
|
||||
#include "decompress.h"
|
||||
#include "graphics.h"
|
||||
#include "util.h"
|
||||
|
||||
#define TAG_SMOKESCREEN 55019
|
||||
|
||||
#define PALTAG_SHADOW 55039
|
||||
#define GFXTAG_SHADOW 55129
|
||||
|
||||
static void SpriteCB_SmokescreenImpactMain(struct Sprite *);
|
||||
static void SpriteCB_SmokescreenImpact(struct Sprite *);
|
||||
|
||||
static const struct CompressedSpriteSheet sSmokescreenImpactSpriteSheet =
|
||||
{
|
||||
.data = gSmokescreenImpactTiles, .size = 0x180, .tag = TAG_SMOKESCREEN
|
||||
};
|
||||
|
||||
static const struct CompressedSpritePalette sSmokescreenImpactSpritePalette =
|
||||
{
|
||||
.data = gSmokescreenImpactPalette, .tag = TAG_SMOKESCREEN
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_SmokescreenImpact =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(16x16),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(16x16),
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_SmokescreenImpact_0[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 4),
|
||||
ANIMCMD_FRAME(4, 4),
|
||||
ANIMCMD_FRAME(8, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_SmokescreenImpact_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(4, 4, .hFlip = TRUE),
|
||||
ANIMCMD_FRAME(8, 4, .hFlip = TRUE),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_SmokescreenImpact_2[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 4, .vFlip = TRUE),
|
||||
ANIMCMD_FRAME(4, 4, .vFlip = TRUE),
|
||||
ANIMCMD_FRAME(8, 4, .vFlip = TRUE),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_SmokescreenImpact_3[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 4, .hFlip = TRUE, .vFlip = TRUE),
|
||||
ANIMCMD_FRAME(4, 4, .hFlip = TRUE, .vFlip = TRUE),
|
||||
ANIMCMD_FRAME(8, 4, .hFlip = TRUE, .vFlip = TRUE),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_SmokescreenImpact[] =
|
||||
{
|
||||
sAnim_SmokescreenImpact_0,
|
||||
sAnim_SmokescreenImpact_1,
|
||||
sAnim_SmokescreenImpact_2,
|
||||
sAnim_SmokescreenImpact_3,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSmokescreenImpactSpriteTemplate =
|
||||
{
|
||||
.tileTag = TAG_SMOKESCREEN,
|
||||
.paletteTag = TAG_SMOKESCREEN,
|
||||
.oam = &sOamData_SmokescreenImpact,
|
||||
.anims = sAnims_SmokescreenImpact,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_SmokescreenImpact
|
||||
};
|
||||
|
||||
const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow =
|
||||
{
|
||||
.data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = GFXTAG_SHADOW
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_EnemyShadow =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(32x8),
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = SPRITE_SIZE(32x8),
|
||||
.tileNum = 0,
|
||||
.priority = 3,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSpriteTemplate_EnemyShadow =
|
||||
{
|
||||
.tileTag = GFXTAG_SHADOW,
|
||||
.paletteTag = PALTAG_SHADOW,
|
||||
.oam = &sOamData_EnemyShadow,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_SetInvisible
|
||||
};
|
||||
|
||||
#define sActiveSprites data[0]
|
||||
#define sPersist data[1]
|
||||
|
||||
#define sMainSpriteId data[0]
|
||||
|
||||
u8 SmokescreenImpact(s16 x, s16 y, bool8 persist)
|
||||
{
|
||||
u8 mainSpriteId;
|
||||
u8 spriteId1, spriteId2, spriteId3, spriteId4;
|
||||
struct Sprite *mainSprite;
|
||||
|
||||
if (GetSpriteTileStartByTag(sSmokescreenImpactSpriteSheet.tag) == 0xFFFF)
|
||||
{
|
||||
LoadCompressedSpriteSheetUsingHeap(&sSmokescreenImpactSpriteSheet);
|
||||
LoadCompressedSpritePaletteUsingHeap(&sSmokescreenImpactSpritePalette);
|
||||
}
|
||||
|
||||
mainSpriteId = CreateInvisibleSpriteWithCallback(SpriteCB_SmokescreenImpactMain);
|
||||
mainSprite = &gSprites[mainSpriteId];
|
||||
mainSprite->sPersist = persist;
|
||||
|
||||
// Top left sprite
|
||||
spriteId1 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2);
|
||||
gSprites[spriteId1].sMainSpriteId = mainSpriteId;
|
||||
mainSprite->sActiveSprites++;
|
||||
AnimateSprite(&gSprites[spriteId1]);
|
||||
|
||||
// Top right sprite
|
||||
spriteId2 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y - 16, 2);
|
||||
gSprites[spriteId2].sMainSpriteId = mainSpriteId;
|
||||
mainSprite->sActiveSprites++;
|
||||
StartSpriteAnim(&gSprites[spriteId2], 1);
|
||||
AnimateSprite(&gSprites[spriteId2]);
|
||||
|
||||
// Bottom left sprite
|
||||
spriteId3 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y, 2);
|
||||
gSprites[spriteId3].sMainSpriteId = mainSpriteId;
|
||||
mainSprite->sActiveSprites++;
|
||||
StartSpriteAnim(&gSprites[spriteId3], 2);
|
||||
AnimateSprite(&gSprites[spriteId3]);
|
||||
|
||||
// Bottom right sprite
|
||||
spriteId4 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y, 2);
|
||||
gSprites[spriteId4].sMainSpriteId = mainSpriteId;
|
||||
mainSprite->sActiveSprites++;
|
||||
StartSpriteAnim(&gSprites[spriteId4], 3);
|
||||
AnimateSprite(&gSprites[spriteId4]);
|
||||
|
||||
return mainSpriteId;
|
||||
}
|
||||
|
||||
static void SpriteCB_SmokescreenImpactMain(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->sActiveSprites == 0)
|
||||
{
|
||||
FreeSpriteTilesByTag(sSmokescreenImpactSpriteSheet.tag);
|
||||
FreeSpritePaletteByTag(sSmokescreenImpactSpritePalette.tag);
|
||||
if (!sprite->sPersist)
|
||||
DestroySprite(sprite);
|
||||
else
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_SmokescreenImpact(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->animEnded)
|
||||
{
|
||||
gSprites[sprite->sMainSpriteId].sActiveSprites--;
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
@@ -6,14 +6,21 @@
|
||||
#include "constants/battle_anim.h"
|
||||
#include "constants/sound.h"
|
||||
|
||||
static void sub_80DCE78(u8 taskId);
|
||||
static void sub_80DCEE4(u8 taskId);
|
||||
static void sub_80DCFE8(u8 taskId);
|
||||
static void sub_80DD270(u8 taskId);
|
||||
static void sub_80DD390(u8 taskId);
|
||||
static void sub_80DD4D4(u8 taskId);
|
||||
static void SoundTask_FireBlast_Step1(u8 taskId);
|
||||
static void SoundTask_FireBlast_Step2(u8 taskId);
|
||||
static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId);
|
||||
static void SoundTask_PlayDoubleCry_Step(u8 taskId);
|
||||
static void SoundTask_PlayCryWithEcho_Step(u8 taskId);
|
||||
static void SoundTask_AdjustPanningVar_Step(u8 taskId);
|
||||
|
||||
void sub_80DCE10(u8 taskId)
|
||||
// Loops the specified sound effect and pans from the
|
||||
// attacker to the target. The second specified sound effect
|
||||
// is played at the very end. This task is effectively
|
||||
// hardcoded to the move FIRE_BLAST due to the baked-in
|
||||
// durations.
|
||||
// arg 0: looped sound effect
|
||||
// arg 1: ending sound effect
|
||||
void SoundTask_FireBlast(u8 taskId)
|
||||
{
|
||||
s8 pan1, pan2, panIncrement;
|
||||
|
||||
@@ -26,10 +33,10 @@ void sub_80DCE10(u8 taskId)
|
||||
gTasks[taskId].data[3] = pan2;
|
||||
gTasks[taskId].data[4] = panIncrement;
|
||||
gTasks[taskId].data[10] = 10;
|
||||
gTasks[taskId].func = sub_80DCE78;
|
||||
gTasks[taskId].func = SoundTask_FireBlast_Step1;
|
||||
}
|
||||
|
||||
static void sub_80DCE78(u8 taskId)
|
||||
static void SoundTask_FireBlast_Step1(u8 taskId)
|
||||
{
|
||||
s16 pan = gTasks[taskId].data[2];
|
||||
s8 panIncrement = gTasks[taskId].data[4];
|
||||
@@ -38,7 +45,7 @@ static void sub_80DCE78(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[10] = 5;
|
||||
gTasks[taskId].data[11] = 0;
|
||||
gTasks[taskId].func = sub_80DCEE4;
|
||||
gTasks[taskId].func = SoundTask_FireBlast_Step2;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -52,7 +59,7 @@ static void sub_80DCE78(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80DCEE4(u8 taskId)
|
||||
static void SoundTask_FireBlast_Step2(u8 taskId)
|
||||
{
|
||||
if (++gTasks[taskId].data[10] == 6)
|
||||
{
|
||||
@@ -88,11 +95,11 @@ void SoundTask_LoopSEAdjustPanning(u8 taskId)
|
||||
gTasks[taskId].data[10] = 0;
|
||||
gTasks[taskId].data[11] = sourcePan;
|
||||
gTasks[taskId].data[12] = r9;
|
||||
gTasks[taskId].func = sub_80DCFE8;
|
||||
sub_80DCFE8(taskId);
|
||||
gTasks[taskId].func = SoundTask_LoopSEAdjustPanning_Step;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
static void sub_80DCFE8(u8 taskId)
|
||||
static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[12]++ == gTasks[taskId].data[6])
|
||||
{
|
||||
@@ -131,6 +138,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
|
||||
battlerId = BATTLE_PARTNER(gBattleAnimAttacker);
|
||||
else
|
||||
battlerId = BATTLE_PARTNER(gBattleAnimTarget);
|
||||
|
||||
// Check if battler is visible.
|
||||
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER)
|
||||
&& !IsBattlerSpriteVisible(battlerId))
|
||||
@@ -182,7 +190,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_GROWL_1);
|
||||
else // DOUBLE_CRY_ROAR
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_ROAR_1);
|
||||
gTasks[taskId].func = sub_80DD270;
|
||||
gTasks[taskId].func = SoundTask_PlayDoubleCry_Step;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -190,7 +198,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80DD270(u8 taskId)
|
||||
static void SoundTask_PlayDoubleCry_Step(u8 taskId)
|
||||
{
|
||||
u16 species = gTasks[taskId].data[1];
|
||||
s8 pan = gTasks[taskId].data[2];
|
||||
@@ -199,7 +207,7 @@ static void sub_80DD270(u8 taskId)
|
||||
{
|
||||
++gTasks[taskId].data[9];
|
||||
}
|
||||
else if (gTasks[taskId].data[0] == TAIL_SENTINEL)
|
||||
else if (gTasks[taskId].data[0] == DOUBLE_CRY_GROWL)
|
||||
{
|
||||
if (!IsCryPlaying())
|
||||
{
|
||||
@@ -207,10 +215,13 @@ static void sub_80DD270(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
else if (!IsCryPlaying())
|
||||
else // DOUBLE_CRY_ROAR
|
||||
{
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_ROAR_2);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
if (!IsCryPlaying())
|
||||
{
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_ROAR_2);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,19 +233,21 @@ void SoundTask_WaitForCry(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void sub_80DD334(u8 taskId)
|
||||
#define tSpecies data[1]
|
||||
#define tPan data[2]
|
||||
#define tState data[9]
|
||||
|
||||
void SoundTask_PlayCryWithEcho(u8 taskId)
|
||||
{
|
||||
u16 species;
|
||||
s8 pan;
|
||||
|
||||
pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
|
||||
s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
|
||||
species = gAnimBattlerSpecies[gBattleAnimAttacker];
|
||||
gTasks[taskId].data[1] = species;
|
||||
gTasks[taskId].data[2] = pan;
|
||||
gTasks[taskId].tSpecies = species;
|
||||
gTasks[taskId].tPan = pan;
|
||||
if (species != SPECIES_NONE)
|
||||
{
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_ECHO_START);
|
||||
gTasks[taskId].func = sub_80DD390;
|
||||
gTasks[taskId].func = SoundTask_PlayCryWithEcho_Step;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -242,23 +255,27 @@ void sub_80DD334(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80DD390(u8 taskId)
|
||||
static void SoundTask_PlayCryWithEcho_Step(u8 taskId)
|
||||
{
|
||||
|
||||
if (gTasks[taskId].data[9] < 2)
|
||||
if (gTasks[taskId].tState < 2)
|
||||
{
|
||||
++gTasks[taskId].data[9];
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
else if (!IsCryPlaying())
|
||||
{
|
||||
u16 species = gTasks[taskId].data[1];
|
||||
s8 pan = gTasks[taskId].data[2];
|
||||
u16 species = gTasks[taskId].tSpecies;
|
||||
s8 pan = gTasks[taskId].tPan;
|
||||
|
||||
PlayCry_ByMode(species, pan, CRY_MODE_ECHO_END);
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
#undef tSpecies
|
||||
#undef tPan
|
||||
#undef tState
|
||||
|
||||
void SoundTask_PlaySE1WithPanning(u8 taskId)
|
||||
{
|
||||
u16 songId = gBattleAnimArgs[0];
|
||||
@@ -277,6 +294,8 @@ void SoundTask_PlaySE2WithPanning(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
// Adjusts panning and assigns it to gAnimCustomPanning. Doesnt play sound.
|
||||
// Used by Confuse Ray and Will-O-Wisp (see uses of gAnimCustomPanning)
|
||||
void SoundTask_AdjustPanningVar(u8 taskId)
|
||||
{
|
||||
s8 targetPan = gBattleAnimArgs[1];
|
||||
@@ -292,11 +311,11 @@ void SoundTask_AdjustPanningVar(u8 taskId)
|
||||
gTasks[taskId].data[5] = r9;
|
||||
gTasks[taskId].data[10] = 0;
|
||||
gTasks[taskId].data[11] = sourcePan;
|
||||
gTasks[taskId].func = sub_80DD4D4;
|
||||
sub_80DD4D4(taskId);
|
||||
gTasks[taskId].func = SoundTask_AdjustPanningVar_Step;
|
||||
gTasks[taskId].func(taskId);
|
||||
}
|
||||
|
||||
static void sub_80DD4D4(u8 taskId)
|
||||
static void SoundTask_AdjustPanningVar_Step(u8 taskId)
|
||||
{
|
||||
u16 oldPan, panIncrement = gTasks[taskId].data[3];
|
||||
|
||||
@@ -307,7 +326,7 @@ static void sub_80DD4D4(u8 taskId)
|
||||
gTasks[taskId].data[11] = panIncrement + oldPan;
|
||||
gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan);
|
||||
}
|
||||
gUnknown_2037F24 = gTasks[taskId].data[11];
|
||||
gAnimCustomPanning = gTasks[taskId].data[11];
|
||||
if (gTasks[taskId].data[11] == gTasks[taskId].data[2])
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_main.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_interface.h"
|
||||
#include "decompress.h"
|
||||
@@ -442,8 +443,8 @@ UNUSED void AnimTask_UnusedLevelUpHealthBox(u8 taskId)
|
||||
gSprites[spriteId3].callback = SpriteCallbackDummy;
|
||||
gSprites[spriteId4].callback = SpriteCallbackDummy;
|
||||
GetBattleAnimBg1Data(&animBgData);
|
||||
AnimLoadCompressedBgTilemap(animBgData.bgId, gUnknown_D2EC24_Tilemap);
|
||||
AnimLoadCompressedBgGfx(animBgData.bgId, gUnknown_D2EC24_Gfx, animBgData.tilesOffset);
|
||||
AnimLoadCompressedBgTilemap(animBgData.bgId, gUnusedLevelupAnimationTilemap);
|
||||
AnimLoadCompressedBgGfx(animBgData.bgId, gUnusedLevelupAnimationGfx, animBgData.tilesOffset);
|
||||
LoadCompressedPalette(gCureBubblesPal, animBgData.paletteId << 4, 32);
|
||||
gBattle_BG1_X = -gSprites[spriteId3].x + 32;
|
||||
gBattle_BG1_Y = -gSprites[spriteId3].y - 32;
|
||||
@@ -660,7 +661,7 @@ void AnimTask_SwitchOutBallEffect(u8 taskId)
|
||||
priority = gSprites[spriteId].oam.priority;
|
||||
subpriority = gSprites[spriteId].subpriority;
|
||||
gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId);
|
||||
selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
|
||||
selectedPalettes = GetBattlePalettesMask(1, 0, 0, 0, 0, 0, 0);
|
||||
gTasks[taskId].data[11] = LaunchBallFadeMonTask(0, gBattleAnimAttacker, selectedPalettes, ballId);
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
@@ -2037,7 +2038,7 @@ void AnimTask_IsAttackerBehindSubstitute(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void AnimTask_TargetToEffectBattler(u8 taskId)
|
||||
void AnimTask_SetTargetToEffectBattler(u8 taskId)
|
||||
{
|
||||
gBattleAnimTarget = gEffectBattler;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
@@ -2278,7 +2279,7 @@ void AnimTask_SafariOrGhost_DecideAnimSides(u8 taskId)
|
||||
|
||||
void AnimTask_SafariGetReaction(u8 taskId)
|
||||
{
|
||||
if (gBattleCommunication[MULTISTRING_CHOOSER] > 2)
|
||||
if (gBattleCommunication[MULTISTRING_CHOOSER] >= NUM_SAFARI_REACTIONS)
|
||||
gBattleAnimArgs[7] = 0;
|
||||
else
|
||||
gBattleAnimArgs[7] = gBattleCommunication[MULTISTRING_CHOOSER];
|
||||
|
||||
@@ -9,19 +9,17 @@
|
||||
#include "constants/battle_anim.h"
|
||||
#include "constants/pokemon.h"
|
||||
|
||||
// Function Declarations
|
||||
static u8 sub_8078178(u8 battlerId, bool8 b);
|
||||
static void sub_80782BC(u8 taskId);
|
||||
static void sub_80784D8(u8 taskId);
|
||||
static void sub_8078528(u8 taskId);
|
||||
static void sub_80785D8(u8 taskId);
|
||||
static void sub_807862C(u8 taskId);
|
||||
static u8 Task_FlashingCircleImpacts(u8 battlerId, bool8 b);
|
||||
static void Task_UpdateFlashingCircleImpacts(u8 taskId);
|
||||
static void AnimTask_FrozenIceCube_Step1(u8 taskId);
|
||||
static void AnimTask_FrozenIceCube_Step2(u8 taskId);
|
||||
static void AnimTask_FrozenIceCube_Step3(u8 taskId);
|
||||
static void AnimTask_FrozenIceCube_Step4(u8 taskId);
|
||||
static void Task_DoStatusAnimation(u8 taskId);
|
||||
static void sub_807834C(struct Sprite *sprite);
|
||||
static void sub_8078380(struct Sprite *sprite);
|
||||
static void AnimFlashingCircleImpact(struct Sprite *sprite);
|
||||
static void AnimFlashingCircleImpact_Step(struct Sprite *sprite);
|
||||
|
||||
// Data
|
||||
static const union AnimCmd sUnknown_83BF3E0[] =
|
||||
static const union AnimCmd sAnim_FlickeringOrb[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_FRAME(4, 3),
|
||||
@@ -30,42 +28,44 @@ static const union AnimCmd sUnknown_83BF3E0[] =
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_83BF3F4[] =
|
||||
static const union AnimCmd *const sAnims_FlickeringOrb[] =
|
||||
{
|
||||
sUnknown_83BF3E0
|
||||
sAnim_FlickeringOrb
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSpriteTemplate_83BF3F8 =
|
||||
// Unused
|
||||
static const struct SpriteTemplate sFlickeringOrbSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_ORB,
|
||||
.paletteTag = ANIM_TAG_ORB,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_16x16,
|
||||
.anims = sSpriteAnimTable_83BF3F4,
|
||||
.anims = sAnims_FlickeringOrb,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker2,
|
||||
.callback = AnimTranslateLinearAndFlicker,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSpriteTemplate_83BF410 =
|
||||
// Unused
|
||||
static const struct SpriteTemplate sFlickeringOrbFlippedSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_ORB,
|
||||
.paletteTag = ANIM_TAG_ORB,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_16x16,
|
||||
.anims = sSpriteAnimTable_83BF3F4,
|
||||
.anims = sAnims_FlickeringOrb,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker,
|
||||
.callback = AnimTranslateLinearAndFlicker_Flipped,
|
||||
};
|
||||
|
||||
static const union AnimCmd sUnknown_83BF428[] =
|
||||
static const union AnimCmd sAnim_WeatherBallNormal[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_83BF430[] =
|
||||
static const union AnimCmd *const sAnims_WeatherBallNormal[] =
|
||||
{
|
||||
sUnknown_83BF428
|
||||
sAnim_WeatherBallNormal
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gWeatherBallUpSpriteTemplate =
|
||||
@@ -73,10 +73,10 @@ const struct SpriteTemplate gWeatherBallUpSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_WEATHER_BALL,
|
||||
.paletteTag = ANIM_TAG_WEATHER_BALL,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sSpriteAnimTable_83BF430,
|
||||
.anims = sAnims_WeatherBallNormal,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_WeatherBallUp,
|
||||
.callback = AnimWeatherBallUp,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gWeatherBallNormalDownSpriteTemplate =
|
||||
@@ -84,13 +84,13 @@ const struct SpriteTemplate gWeatherBallNormalDownSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_WEATHER_BALL,
|
||||
.paletteTag = ANIM_TAG_WEATHER_BALL,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sSpriteAnimTable_83BF430,
|
||||
.anims = sAnims_WeatherBallNormal,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimWeatherBallDown,
|
||||
};
|
||||
|
||||
static const union AnimCmd sUnknown_83BF464[] =
|
||||
static const union AnimCmd sAnim_SpinningSparkle[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 3),
|
||||
ANIMCMD_FRAME(16, 3),
|
||||
@@ -100,23 +100,24 @@ static const union AnimCmd sUnknown_83BF464[] =
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_83BF47C[] =
|
||||
static const union AnimCmd *const sAnims_SpinningSparkle[] =
|
||||
{
|
||||
sUnknown_83BF464
|
||||
sAnim_SpinningSparkle
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSpriteTemplate_83BF480 =
|
||||
const struct SpriteTemplate gSpinningSparkleSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_SPARKLE_4,
|
||||
.paletteTag = ANIM_TAG_SPARKLE_4,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sSpriteAnimTable_83BF47C,
|
||||
.anims = sAnims_SpinningSparkle,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_TrackOffsetFromAttackerAndWaitAnim,
|
||||
.callback = AnimSpinningSparkle,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSpriteTemplate_83BF498 =
|
||||
// Unused
|
||||
static const struct SpriteTemplate sFlickeringFootSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_MONSTER_FOOT,
|
||||
.paletteTag = ANIM_TAG_MONSTER_FOOT,
|
||||
@@ -124,95 +125,98 @@ const struct SpriteTemplate gSpriteTemplate_83BF498 =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker2,
|
||||
.callback = AnimTranslateLinearAndFlicker,
|
||||
};
|
||||
|
||||
static const union AnimCmd sUnknown_83BF4B0[] =
|
||||
static const union AnimCmd sAnim_FlickeringImpact_0[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd sUnknown_83BF4B8[] =
|
||||
static const union AnimCmd sAnim_FlickeringImpact_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd sUnknown_83BF4C0[] =
|
||||
static const union AnimCmd sAnim_FlickeringImpact_2[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAniimTable_83BF4C8[] =
|
||||
static const union AnimCmd *const sAnims_FlickeringImpact[] =
|
||||
{
|
||||
sUnknown_83BF4B0,
|
||||
sUnknown_83BF4B8,
|
||||
sUnknown_83BF4C0
|
||||
sAnim_FlickeringImpact_0,
|
||||
sAnim_FlickeringImpact_1,
|
||||
sAnim_FlickeringImpact_2
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSpriteTemplate_83BF4D4 =
|
||||
// Unused
|
||||
static const struct SpriteTemplate sFlickeringImpactSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_IMPACT,
|
||||
.paletteTag = ANIM_TAG_IMPACT,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sSpriteAniimTable_83BF4C8,
|
||||
.anims = sAnims_FlickeringImpact,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker2,
|
||||
.callback = AnimTranslateLinearAndFlicker,
|
||||
};
|
||||
|
||||
static const union AnimCmd sUnknown_83BF4EC[] =
|
||||
static const union AnimCmd sAnim_FlickeringShrinkOrb[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 15),
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_83BF4F4[] =
|
||||
static const union AnimCmd *const sAnims_FlickeringShrinkOrb[] =
|
||||
{
|
||||
sUnknown_83BF4EC
|
||||
sAnim_FlickeringShrinkOrb
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sUnknown_83BF4F8[] =
|
||||
static const union AffineAnimCmd sAffineAnim_FlickeringShrinkOrb[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(96, 96, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(2, 2, 0, 1),
|
||||
AFFINEANIMCMD_JUMP(1)
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const sSpriteAffineAnimTable_83BF510[] =
|
||||
static const union AffineAnimCmd *const sAffineAnims_FlickeringShrinkOrb[] =
|
||||
{
|
||||
sUnknown_83BF4F8
|
||||
sAffineAnim_FlickeringShrinkOrb
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSpriteTemplate_83BF514 =
|
||||
// Unused
|
||||
static const struct SpriteTemplate sFlickeringShrinkOrbSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_ORB,
|
||||
.paletteTag = ANIM_TAG_ORB,
|
||||
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
|
||||
.anims = sSpriteAnimTable_83BF4F4,
|
||||
.anims = sAnims_FlickeringShrinkOrb,
|
||||
.images = NULL,
|
||||
.affineAnims = sSpriteAffineAnimTable_83BF510,
|
||||
.callback = SpriteCB_AnimTranslateSpriteLinearAndFlicker,
|
||||
.affineAnims = sAffineAnims_FlickeringShrinkOrb,
|
||||
.callback = AnimTranslateLinearAndFlicker_Flipped,
|
||||
};
|
||||
|
||||
static const u8 sUnknown_83BF52C[] = _("TASK OVER\nタスクがオ-バ-しました");
|
||||
// Presumably some debug text
|
||||
static const u8 sText_TaskOver[] = _("TASK OVER\nタスクがオ-バ-しました");
|
||||
|
||||
static const struct Subsprite sSubsprites_83BF544[] =
|
||||
static const struct Subsprite sFrozenIceCubeSubsprites[] =
|
||||
{
|
||||
{.x = -16, .y = -16, .shape = SPRITE_SHAPE(8x8), .size = 3, .tileOffset = 0, .priority = 2},
|
||||
{.x = -16, .y = 48, .shape = SPRITE_SHAPE(16x8), .size = 3, .tileOffset = 64, .priority = 2},
|
||||
{.x = 48, .y = -16, .shape = SPRITE_SHAPE(8x16), .size = 3, .tileOffset = 96, .priority = 2},
|
||||
{.x = 48, .y = 48, .shape = SPRITE_SHAPE(8x8), .size = 2, .tileOffset = 128, .priority = 2},
|
||||
{.x = -16, .y = -16, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), .tileOffset = 0, .priority = 2},
|
||||
{.x = -16, .y = 48, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .tileOffset = 64, .priority = 2},
|
||||
{.x = 48, .y = -16, .shape = SPRITE_SHAPE(32x64), .size = SPRITE_SIZE(32x64), .tileOffset = 96, .priority = 2},
|
||||
{.x = 48, .y = 48, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), .tileOffset = 128, .priority = 2},
|
||||
};
|
||||
|
||||
static const struct SubspriteTable sUnknown_83BF554[] =
|
||||
static const struct SubspriteTable sFrozenIceCubeSubspriteTable[] =
|
||||
{
|
||||
{NELEMS(sSubsprites_83BF544), sSubsprites_83BF544},
|
||||
{NELEMS(sFrozenIceCubeSubsprites), sFrozenIceCubeSubsprites},
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sUnknown_83BF55C =
|
||||
static const struct SpriteTemplate sFrozenIceCubeSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_ICE_CUBE,
|
||||
.paletteTag = ANIM_TAG_ICE_CUBE,
|
||||
@@ -223,7 +227,7 @@ static const struct SpriteTemplate sUnknown_83BF55C =
|
||||
.callback = SpriteCallbackDummy,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sUnknown_83BF574 =
|
||||
static const struct SpriteTemplate sFlashingCircleImpactSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_CIRCLE_IMPACT,
|
||||
.paletteTag = ANIM_TAG_CIRCLE_IMPACT,
|
||||
@@ -231,14 +235,14 @@ static const struct SpriteTemplate sUnknown_83BF574 =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_807834C,
|
||||
.callback = AnimFlashingCircleImpact,
|
||||
};
|
||||
|
||||
// Functions
|
||||
static u8 sub_8078178(u8 battlerId, bool8 b)
|
||||
// Unused
|
||||
static u8 Task_FlashingCircleImpacts(u8 battlerId, bool8 b)
|
||||
{
|
||||
u8 battlerSpriteId = gBattlerSpriteIds[battlerId];
|
||||
u8 taskId = CreateTask(sub_80782BC, 10);
|
||||
u8 taskId = CreateTask(Task_UpdateFlashingCircleImpacts, 10);
|
||||
u8 spriteId2;
|
||||
u8 i;
|
||||
|
||||
@@ -250,7 +254,7 @@ static u8 sub_8078178(u8 battlerId, bool8 b)
|
||||
gTasks[taskId].data[1] = RGB_RED;
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
spriteId2 = CreateSprite(&sUnknown_83BF574, gSprites[battlerSpriteId].x, gSprites[battlerSpriteId].y + 32, 0);
|
||||
spriteId2 = CreateSprite(&sFlashingCircleImpactSpriteTemplate, gSprites[battlerSpriteId].x, gSprites[battlerSpriteId].y + 32, 0);
|
||||
gSprites[spriteId2].data[0] = i * 51;
|
||||
gSprites[spriteId2].data[1] = -256;
|
||||
gSprites[spriteId2].invisible = TRUE;
|
||||
@@ -263,7 +267,7 @@ static u8 sub_8078178(u8 battlerId, bool8 b)
|
||||
gTasks[taskId].data[1] = RGB_BLUE;
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
spriteId2 = CreateSprite(&sUnknown_83BF574, gSprites[battlerSpriteId].x, gSprites[battlerSpriteId].y - 32, 0);
|
||||
spriteId2 = CreateSprite(&sFlashingCircleImpactSpriteTemplate, gSprites[battlerSpriteId].x, gSprites[battlerSpriteId].y - 32, 0);
|
||||
gSprites[spriteId2].data[0] = i * 51;
|
||||
gSprites[spriteId2].data[1] = 256;
|
||||
gSprites[spriteId2].invisible = TRUE;
|
||||
@@ -275,7 +279,7 @@ static u8 sub_8078178(u8 battlerId, bool8 b)
|
||||
return taskId;
|
||||
}
|
||||
|
||||
static void sub_80782BC(u8 taskId)
|
||||
static void Task_UpdateFlashingCircleImpacts(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[2] == 2)
|
||||
{
|
||||
@@ -308,13 +312,13 @@ static void sub_80782BC(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_807834C(struct Sprite *sprite)
|
||||
static void AnimFlashingCircleImpact(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[6] == 0)
|
||||
{
|
||||
sprite->invisible = FALSE;
|
||||
sprite->callback = sub_8078380;
|
||||
sub_8078380(sprite);
|
||||
sprite->callback = AnimFlashingCircleImpact_Step;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -322,7 +326,7 @@ static void sub_807834C(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8078380(struct Sprite *sprite)
|
||||
static void AnimFlashingCircleImpact_Step(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x2 = Cos(sprite->data[0], 32);
|
||||
sprite->y2 = Sin(sprite->data[0], 8);
|
||||
@@ -354,21 +358,21 @@ void AnimTask_FrozenIceCube(u8 taskId)
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||||
spriteId = CreateSprite(&sUnknown_83BF55C, x, y, 4);
|
||||
if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == TAG_NONE)
|
||||
spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4);
|
||||
if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF)
|
||||
gSprites[spriteId].invisible = TRUE;
|
||||
|
||||
SetSubspriteTables(&gSprites[spriteId], sUnknown_83BF554);
|
||||
SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable);
|
||||
gTasks[taskId].data[15] = spriteId;
|
||||
gTasks[taskId].func = sub_80784D8;
|
||||
gTasks[taskId].func = AnimTask_FrozenIceCube_Step1;
|
||||
}
|
||||
|
||||
static void sub_80784D8(u8 taskId)
|
||||
static void AnimTask_FrozenIceCube_Step1(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[1]++;
|
||||
if (gTasks[taskId].data[1] == 10)
|
||||
{
|
||||
gTasks[taskId].func = sub_8078528;
|
||||
gTasks[taskId].func = AnimTask_FrozenIceCube_Step2;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
}
|
||||
else
|
||||
@@ -379,7 +383,7 @@ static void sub_80784D8(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8078528(u8 taskId)
|
||||
static void AnimTask_FrozenIceCube_Step2(u8 taskId)
|
||||
{
|
||||
u8 palIndex = IndexOfSpritePaletteTag(ANIM_TAG_ICE_CUBE);
|
||||
|
||||
@@ -405,19 +409,19 @@ static void sub_8078528(u8 taskId)
|
||||
if (gTasks[taskId].data[4] == 2)
|
||||
{
|
||||
gTasks[taskId].data[1] = 9;
|
||||
gTasks[taskId].func = sub_80785D8;
|
||||
gTasks[taskId].func = AnimTask_FrozenIceCube_Step3;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80785D8(u8 taskId)
|
||||
static void AnimTask_FrozenIceCube_Step3(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[1]--;
|
||||
if (gTasks[taskId].data[1] == -1)
|
||||
{
|
||||
gTasks[taskId].func = sub_807862C;
|
||||
gTasks[taskId].func = AnimTask_FrozenIceCube_Step4;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
}
|
||||
else
|
||||
@@ -428,7 +432,7 @@ static void sub_80785D8(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_807862C(u8 taskId)
|
||||
static void AnimTask_FrozenIceCube_Step4(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[1]++;
|
||||
if (gTasks[taskId].data[1] == 37)
|
||||
|
||||
@@ -18,22 +18,22 @@ struct AnimStatsChangeData
|
||||
|
||||
static void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes);
|
||||
static void AnimTask_BlendSpriteColor_Step2(u8 taskId);
|
||||
static void Task_WaitHardwarePaletteFade(u8 taskId);
|
||||
static void Task_DoCloneBattlerSpriteWithBlend(u8 taskId);
|
||||
static void Task_FinishCloneBattlerSpriteWithBlend(struct Sprite *sprite);
|
||||
static void AnimTask_HardwarePaletteFade_Step(u8 taskId);
|
||||
static void AnimTask_TraceMonBlended_Step(u8 taskId);
|
||||
static void AnimMonTrace(struct Sprite *sprite);
|
||||
static void AnimTask_DrawFallingWhiteLinesOnAttacker_Step(u8 taskId);
|
||||
static void StatsChangeAnimation_Step1(u8 taskId);
|
||||
static void StatsChangeAnimation_Step2(u8 taskId);
|
||||
static void StatsChangeAnimation_Step3(u8 taskId);
|
||||
static void sub_80BB6CC(u8 taskId);
|
||||
static void sub_80BB790(u32 selectedPalettes, u16 color);
|
||||
static void sub_80BB8A4(u8 taskId);
|
||||
static void sub_80BBC2C(u8 taskId);
|
||||
static void sub_80BC19C(u8 taskId);
|
||||
static void AnimTask_Flash_Step(u8 taskId);
|
||||
static void SetPalettesToColor(u32 selectedPalettes, u16 color);
|
||||
static void AnimTask_UpdateSlidingBg(u8 taskId);
|
||||
static void UpdateMonScrollingBgMask(u8 taskId);
|
||||
static void AnimTask_WaitAndRestoreVisibility(u8 taskId);
|
||||
|
||||
static EWRAM_DATA struct AnimStatsChangeData *sAnimStatsChangeData = NULL;
|
||||
|
||||
static const u16 sRgbWhite[] = { RGB(31, 31, 31) };
|
||||
static const u16 sRgbWhite[] = { RGB_WHITE };
|
||||
const u8 gBattleAnimRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT };
|
||||
const u8 gBattleIntroRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT };
|
||||
|
||||
@@ -50,11 +50,11 @@ const u8 gBattleIntroRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, RE
|
||||
// 8: Player battler right
|
||||
// 9: Enemy battler left
|
||||
// 10: Enemy battler right
|
||||
void AnimTask_BlendSelected(u8 taskId)
|
||||
void AnimTask_BlendBattleAnimPal(u8 taskId)
|
||||
{
|
||||
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
|
||||
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
|
||||
|
||||
selectedPalettes |= SelectBattlerSpritePalettes(
|
||||
selectedPalettes |= GetBattleMonSpritePalettesMask(
|
||||
(gBattleAnimArgs[0] >> 7) & 1,
|
||||
(gBattleAnimArgs[0] >> 8) & 1,
|
||||
(gBattleAnimArgs[0] >> 9) & 1,
|
||||
@@ -72,26 +72,26 @@ void AnimTask_BlendSelected(u8 taskId)
|
||||
// 5: Blend all
|
||||
// 6: Neither bg nor attacker's partner
|
||||
// 7: Neither bg nor target's partner
|
||||
void AnimTask_BlendExcept(u8 taskId)
|
||||
void AnimTask_BlendBattleAnimPalExclude(u8 taskId)
|
||||
{
|
||||
u8 battler;
|
||||
u32 selectedPalettes;
|
||||
u8 animBattlers[2];
|
||||
|
||||
animBattlers[1] = 0xFF;
|
||||
selectedPalettes = UnpackSelectedBattleAnimPalettes(1);
|
||||
selectedPalettes = UnpackSelectedBattlePalettes(1);
|
||||
switch (gBattleAnimArgs[0])
|
||||
{
|
||||
case 2:
|
||||
selectedPalettes = 0;
|
||||
// fall through
|
||||
case 0:
|
||||
case ANIM_ATTACKER:
|
||||
animBattlers[0] = gBattleAnimAttacker;
|
||||
break;
|
||||
case 3:
|
||||
selectedPalettes = 0;
|
||||
// fall through
|
||||
case 1:
|
||||
case ANIM_TARGET:
|
||||
animBattlers[0] = gBattleAnimTarget;
|
||||
break;
|
||||
case 4:
|
||||
@@ -122,7 +122,7 @@ void AnimTask_BlendExcept(u8 taskId)
|
||||
|
||||
void AnimTask_SetCamouflageBlend(u8 taskId)
|
||||
{
|
||||
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
|
||||
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
|
||||
|
||||
switch (gBattleTerrain)
|
||||
{
|
||||
@@ -217,16 +217,17 @@ void AnimTask_HardwarePaletteFade(u8 taskId)
|
||||
gBattleAnimArgs[2],
|
||||
gBattleAnimArgs[3],
|
||||
gBattleAnimArgs[4]);
|
||||
gTasks[taskId].func = Task_WaitHardwarePaletteFade;
|
||||
gTasks[taskId].func = AnimTask_HardwarePaletteFade_Step;
|
||||
}
|
||||
|
||||
static void Task_WaitHardwarePaletteFade(u8 taskId)
|
||||
static void AnimTask_HardwarePaletteFade_Step(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void AnimTask_CloneBattlerSpriteWithBlend(u8 taskId)
|
||||
// Used to leave blended traces of a mon, usually to imply speed as in Agility or Aerial Ace
|
||||
void AnimTask_TraceMonBlended(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -236,9 +237,9 @@ void AnimTask_CloneBattlerSpriteWithBlend(u8 taskId)
|
||||
task->data[3] = gBattleAnimArgs[2];
|
||||
task->data[4] = gBattleAnimArgs[3];
|
||||
task->data[5] = 0;
|
||||
task->func = Task_DoCloneBattlerSpriteWithBlend;
|
||||
task->func = AnimTask_TraceMonBlended_Step;
|
||||
}
|
||||
static void Task_DoCloneBattlerSpriteWithBlend(u8 taskId)
|
||||
static void AnimTask_TraceMonBlended_Step(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
@@ -257,7 +258,7 @@ static void Task_DoCloneBattlerSpriteWithBlend(u8 taskId)
|
||||
gSprites[task->data[6]].data[0] = task->data[3];
|
||||
gSprites[task->data[6]].data[1] = taskId;
|
||||
gSprites[task->data[6]].data[2] = 5;
|
||||
gSprites[task->data[6]].callback = Task_FinishCloneBattlerSpriteWithBlend;
|
||||
gSprites[task->data[6]].callback = AnimMonTrace;
|
||||
++task->data[5];
|
||||
}
|
||||
--task->data[4];
|
||||
@@ -270,7 +271,7 @@ static void Task_DoCloneBattlerSpriteWithBlend(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_FinishCloneBattlerSpriteWithBlend(struct Sprite *sprite)
|
||||
static void AnimMonTrace(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0])
|
||||
{
|
||||
@@ -279,11 +280,12 @@ static void Task_FinishCloneBattlerSpriteWithBlend(struct Sprite *sprite)
|
||||
else
|
||||
{
|
||||
--gTasks[sprite->data[1]].data[sprite->data[2]];
|
||||
obj_delete_but_dont_free_vram(sprite);
|
||||
DestroySpriteWithActiveSheet(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
void AnimTask_SetUpCurseBackground(u8 taskId)
|
||||
// Only used by Curse for non-Ghost mons
|
||||
void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId)
|
||||
{
|
||||
u16 species;
|
||||
s32 newSpriteId;
|
||||
@@ -330,7 +332,7 @@ void AnimTask_SetUpCurseBackground(u8 taskId)
|
||||
else
|
||||
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
|
||||
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
newSpriteId = CreateCloneOfSpriteInWindowMode(gBattleAnimAttacker, spriteId, species);
|
||||
newSpriteId = CreateInvisibleSpriteCopy(gBattleAnimAttacker, spriteId, species);
|
||||
GetBattleAnimBg1Data(&animBgData);
|
||||
AnimLoadCompressedBgTilemap(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap);
|
||||
if (IsContest())
|
||||
@@ -446,11 +448,11 @@ static void StatsChangeAnimation_Step2(u8 taskId)
|
||||
u8 battlerSpriteId;
|
||||
|
||||
battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler1];
|
||||
spriteId = CreateCloneOfSpriteInWindowMode(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species);
|
||||
spriteId = CreateInvisibleSpriteCopy(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species);
|
||||
if (sAnimStatsChangeData->data[3])
|
||||
{
|
||||
battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2];
|
||||
newSpriteId = CreateCloneOfSpriteInWindowMode(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species);
|
||||
newSpriteId = CreateInvisibleSpriteCopy(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species);
|
||||
}
|
||||
GetBattleAnimBg1Data(&animBgData);
|
||||
if (sAnimStatsChangeData->data[0] == 0)
|
||||
@@ -580,19 +582,19 @@ static void StatsChangeAnimation_Step3(u8 taskId)
|
||||
|
||||
void AnimTask_Flash(u8 taskId)
|
||||
{
|
||||
u32 selectedPalettes = SelectBattlerSpritePalettes(1, 1, 1, 1);
|
||||
u32 selectedPalettes = GetBattleMonSpritePalettesMask(1, 1, 1, 1);
|
||||
|
||||
sub_80BB790(selectedPalettes, 0);
|
||||
SetPalettesToColor(selectedPalettes, 0);
|
||||
gTasks[taskId].data[14] = selectedPalettes >> 16;
|
||||
selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
|
||||
sub_80BB790(selectedPalettes, 0xFFFF);
|
||||
selectedPalettes = GetBattlePalettesMask(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
|
||||
SetPalettesToColor(selectedPalettes, 0xFFFF);
|
||||
gTasks[taskId].data[15] = selectedPalettes;
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].func = sub_80BB6CC;
|
||||
gTasks[taskId].func = AnimTask_Flash_Step;
|
||||
}
|
||||
|
||||
static void sub_80BB6CC(u8 taskId)
|
||||
static void AnimTask_Flash_Step(u8 taskId)
|
||||
{
|
||||
u16 i;
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -637,7 +639,7 @@ static void sub_80BB6CC(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80BB790(u32 selectedPalettes, u16 color)
|
||||
static void SetPalettesToColor(u32 selectedPalettes, u16 color)
|
||||
{
|
||||
u16 i, curOffset, paletteOffset;
|
||||
|
||||
@@ -665,7 +667,7 @@ void AnimTask_StartSlidingBg(u8 taskId)
|
||||
u8 newTaskId;
|
||||
|
||||
ToggleBg3Mode(0);
|
||||
newTaskId = CreateTask(sub_80BB8A4, 5);
|
||||
newTaskId = CreateTask(AnimTask_UpdateSlidingBg, 5);
|
||||
if (gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
{
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
@@ -678,7 +680,7 @@ void AnimTask_StartSlidingBg(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
static void sub_80BB8A4(u8 taskId)
|
||||
static void AnimTask_UpdateSlidingBg(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[10] += gTasks[taskId].data[1];
|
||||
gTasks[taskId].data[11] += gTasks[taskId].data[2];
|
||||
@@ -713,6 +715,7 @@ void AnimTask_GetTargetIsAttackerPartner(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
// For hiding or subsequently revealing all other battlers
|
||||
void AnimTask_SetAllNonAttackersInvisiblity(u8 taskId)
|
||||
{
|
||||
u16 battler;
|
||||
@@ -723,7 +726,7 @@ void AnimTask_SetAllNonAttackersInvisiblity(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette)
|
||||
void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 scrollSpeed, u8 battler1, bool8 includePartner, u8 numFadeSteps, u8 fadeStepDelay, u8 duration, const u32 *gfx, const u32 *tilemap, const u32 *palette)
|
||||
{
|
||||
u16 species;
|
||||
u8 spriteId, newSpriteId = 0;
|
||||
@@ -731,8 +734,8 @@ void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 ar
|
||||
struct BattleAnimBgData animBgData;
|
||||
u8 battler2 = BATTLE_PARTNER(battler1);
|
||||
|
||||
if (IsContest() || (arg4 && !IsBattlerSpriteVisible(battler2)))
|
||||
arg4 = 0;
|
||||
if (IsContest() || (includePartner && !IsBattlerSpriteVisible(battler2)))
|
||||
includePartner = FALSE;
|
||||
gBattle_WIN0H = 0;
|
||||
gBattle_WIN0V = 0;
|
||||
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
|
||||
@@ -753,9 +756,9 @@ void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 ar
|
||||
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
|
||||
else
|
||||
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
|
||||
spriteId = CreateCloneOfSpriteInWindowMode(battler1, gBattlerSpriteIds[battler1], species);
|
||||
if (arg4)
|
||||
newSpriteId = CreateCloneOfSpriteInWindowMode(battler2, gBattlerSpriteIds[battler2], species);
|
||||
spriteId = CreateInvisibleSpriteCopy(battler1, gBattlerSpriteIds[battler1], species);
|
||||
if (includePartner)
|
||||
newSpriteId = CreateInvisibleSpriteCopy(battler2, gBattlerSpriteIds[battler2], species);
|
||||
GetBattleAnimBg1Data(&animBgData);
|
||||
AnimLoadCompressedBgTilemap(animBgData.bgId, tilemap);
|
||||
if (IsContest())
|
||||
@@ -764,17 +767,17 @@ void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 ar
|
||||
LoadCompressedPalette(palette, animBgData.paletteId * 16, 32);
|
||||
gBattle_BG1_X = 0;
|
||||
gBattle_BG1_Y = 0;
|
||||
gTasks[taskId].data[1] = arg2;
|
||||
gTasks[taskId].data[4] = arg5;
|
||||
gTasks[taskId].data[5] = arg7;
|
||||
gTasks[taskId].data[6] = arg6;
|
||||
gTasks[taskId].data[1] = scrollSpeed;
|
||||
gTasks[taskId].data[4] = numFadeSteps;
|
||||
gTasks[taskId].data[5] = duration;
|
||||
gTasks[taskId].data[6] = fadeStepDelay;
|
||||
gTasks[taskId].data[0] = spriteId;
|
||||
gTasks[taskId].data[2] = arg4;
|
||||
gTasks[taskId].data[2] = includePartner;
|
||||
gTasks[taskId].data[3] = newSpriteId;
|
||||
gTasks[taskId].func = sub_80BBC2C;
|
||||
gTasks[taskId].func = UpdateMonScrollingBgMask;
|
||||
}
|
||||
|
||||
static void sub_80BBC2C(u8 taskId)
|
||||
static void UpdateMonScrollingBgMask(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[13] += gTasks[taskId].data[1] < 0 ? -gTasks[taskId].data[1] : gTasks[taskId].data[1];
|
||||
if (gTasks[taskId].data[1] < 0)
|
||||
@@ -856,7 +859,7 @@ void AnimTask_CopyPalUnfadedToBackup(u8 taskId)
|
||||
s32 paletteIndex = 0;
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
for (selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
|
||||
for (selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
(selectedPalettes & 1) == 0;
|
||||
++paletteIndex)
|
||||
selectedPalettes >>= 1;
|
||||
@@ -874,7 +877,7 @@ void AnimTask_CopyPalUnfadedFromBackup(u8 taskId)
|
||||
s32 paletteIndex = 0;
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
for (selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
|
||||
for (selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
(selectedPalettes & 1) == 0;
|
||||
++paletteIndex)
|
||||
selectedPalettes >>= 1;
|
||||
@@ -892,7 +895,7 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId)
|
||||
s32 paletteIndex = 0;
|
||||
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
for (selectedPalettes = SelectBattleAnimSpriteAndBgPalettes(1, 0, 0, 0, 0, 0, 0);
|
||||
for (selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
|
||||
(selectedPalettes & 1) == 0;
|
||||
++paletteIndex)
|
||||
selectedPalettes >>= 1;
|
||||
@@ -907,9 +910,9 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId)
|
||||
void AnimTask_IsContest(u8 taskId)
|
||||
{
|
||||
if (IsContest())
|
||||
gBattleAnimArgs[7] = 1;
|
||||
gBattleAnimArgs[ARG_RET_ID] = TRUE;
|
||||
else
|
||||
gBattleAnimArgs[7] = 0;
|
||||
gBattleAnimArgs[ARG_RET_ID] = FALSE;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
@@ -923,9 +926,9 @@ void AnimTask_SetAnimAttackerAndTargetForEffectTgt(u8 taskId)
|
||||
void AnimTask_IsTargetSameSide(u8 taskId)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
gBattleAnimArgs[7] = 1;
|
||||
gBattleAnimArgs[ARG_RET_ID] = TRUE;
|
||||
else
|
||||
gBattleAnimArgs[7] = 0;
|
||||
gBattleAnimArgs[ARG_RET_ID] = FALSE;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
@@ -952,12 +955,12 @@ void AnimTask_SetAttackerInvisibleWaitForSignal(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[0] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible;
|
||||
gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = 1;
|
||||
gTasks[taskId].func = sub_80BC19C;
|
||||
gTasks[taskId].func = AnimTask_WaitAndRestoreVisibility;
|
||||
--gAnimVisualTaskCount;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80BC19C(u8 taskId)
|
||||
static void AnimTask_WaitAndRestoreVisibility(u8 taskId)
|
||||
{
|
||||
if (gBattleAnimArgs[7] == 0x1000)
|
||||
{
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
#include "trig.h"
|
||||
#include "util.h"
|
||||
|
||||
#define ISO_RANDOMIZE2(val)(1103515245 * (val) + 12345)
|
||||
|
||||
static void AnimRainDrop(struct Sprite *);
|
||||
static void AnimRainDrop_Step(struct Sprite *);
|
||||
static void AnimWaterBubbleProjectile(struct Sprite *);
|
||||
@@ -55,9 +53,8 @@ static void AnimTask_WaterSport_Step(u8);
|
||||
static void CreateWaterSportDroplet(struct Task *);
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite *, s32, s32);
|
||||
|
||||
// Both unused? Comment copied from pokeemerald
|
||||
static const u8 gUnknown_83E44F4[] = INCBIN_U8("graphics/battle_anims/unk_83E44F4.4bpp");
|
||||
static const u8 gUnknown_83E4874[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.bin");
|
||||
static const u8 sUnusedWater_Gfx[] = INCBIN_U8("graphics/battle_anims/unk_83E44F4.4bpp");
|
||||
static const u8 sUnusedWater[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.bin");
|
||||
|
||||
static const union AnimCmd sAnim_RainDrop[] =
|
||||
{
|
||||
@@ -488,8 +485,8 @@ void AnimTask_CreateRaindrops(u8 taskId)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1)
|
||||
{
|
||||
x = Random() % 240;
|
||||
y = Random() % 80;
|
||||
x = Random() % DISPLAY_WIDTH;
|
||||
y = Random() % (DISPLAY_HEIGHT / 2);
|
||||
CreateSprite(&gRainDropSpriteTemplate, x, y, 4);
|
||||
}
|
||||
if (gTasks[taskId].data[0] == gTasks[taskId].data[3])
|
||||
@@ -521,23 +518,23 @@ static void AnimWaterBubbleProjectile(struct Sprite *sprite)
|
||||
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
|
||||
sprite->animPaused = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
|
||||
sprite->animPaused = TRUE;
|
||||
}
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
sprite->data[0] = gBattleAnimArgs[6];
|
||||
sprite->data[1] = sprite->x;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
InitAnimLinearTranslation(sprite);
|
||||
spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
|
||||
sprite->data[5] = spriteId;
|
||||
@@ -599,9 +596,9 @@ static void AnimAuroraBeamRings(struct Sprite *sprite)
|
||||
unkArg = gBattleAnimArgs[2];
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[1] = sprite->x;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + unkArg;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + unkArg;
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
InitAnimLinearTranslation(sprite);
|
||||
sprite->callback = AnimAuroraBeamRings_Step;
|
||||
sprite->affineAnimPaused = TRUE;
|
||||
@@ -653,9 +650,9 @@ static void AnimToTargetInSinWave(struct Sprite *sprite)
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
sprite->data[0] = 30;
|
||||
sprite->data[1] = sprite->x;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[3] = sprite->y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
InitAnimLinearTranslation(sprite);
|
||||
sprite->data[5] = 0xD200 / sprite->data[0];
|
||||
sprite->data[7] = gBattleAnimArgs[3];
|
||||
@@ -708,8 +705,8 @@ static void AnimHydroCannonCharge(struct Sprite *sprite)
|
||||
{
|
||||
u8 priority;
|
||||
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
|
||||
sprite->y2 = -10;
|
||||
priority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
|
||||
if (!IsContest())
|
||||
@@ -755,14 +752,14 @@ static void AnimHydroCannonBeam(struct Sprite *sprite)
|
||||
else
|
||||
animType = FALSE;
|
||||
if ((u8)gBattleAnimArgs[5] == 0)
|
||||
coordType = 3;
|
||||
coordType = BATTLER_COORD_Y_PIC_OFFSET;
|
||||
else
|
||||
coordType = 1;
|
||||
InitSpritePosToAnimAttacker(sprite, animType);
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3];
|
||||
sprite->callback = StartAnimLinearTranslation;
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
@@ -1173,8 +1170,8 @@ static u8 GetWaterSpoutPowerForAnim(void)
|
||||
static void CreateWaterSpoutLaunchDroplets(struct Task *task, u8 taskId)
|
||||
{
|
||||
s16 i;
|
||||
s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||||
s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
s16 trigIndex = 172;
|
||||
u8 subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
|
||||
s16 increment = 4 - task->data[1];
|
||||
@@ -1347,8 +1344,8 @@ void AnimTask_WaterSport(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||||
task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||||
task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
task->data[7] = (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) ? 1 : -1;
|
||||
if (IsContest())
|
||||
task->data[7] *= -1;
|
||||
@@ -1520,8 +1517,8 @@ static void AnimWaterPulseRingBubble(struct Sprite *sprite)
|
||||
void AnimWaterPulseRing(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||||
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->data[3] = gBattleAnimArgs[2];
|
||||
sprite->data[4] = gBattleAnimArgs[3];
|
||||
sprite->callback = AnimWaterPulseRing_Step;
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "battle_interface.h"
|
||||
#include "battle_message.h"
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
@@ -1662,7 +1661,7 @@ static void OakOldManHandleSuccessBallThrowAnim(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
|
||||
gDoingBattleAnim = TRUE;
|
||||
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
@@ -1672,7 +1671,7 @@ static void OakOldManHandleBallThrowAnim(void)
|
||||
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
|
||||
gDoingBattleAnim = TRUE;
|
||||
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "teachy_tv.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
@@ -376,7 +376,7 @@ static void SafariHandleSuccessBallThrowAnim(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
|
||||
gDoingBattleAnim = TRUE;
|
||||
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
@@ -386,7 +386,7 @@ static void SafariHandleBallThrowAnim(void)
|
||||
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
|
||||
gDoingBattleAnim = TRUE;
|
||||
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_SAFARI_BALL_THROW);
|
||||
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER);
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
|
||||
+21
-22
@@ -9,7 +9,6 @@
|
||||
#include "battle_message.h"
|
||||
#include "battle_scripts.h"
|
||||
#include "battle_setup.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "berry.h"
|
||||
#include "data.h"
|
||||
#include "decompress.h"
|
||||
@@ -2274,8 +2273,8 @@ static void BattleStartClearSetData(void)
|
||||
gLeveledUpInBattle = 0;
|
||||
gAbsentBattlerFlags = 0;
|
||||
gBattleStruct->runTries = 0;
|
||||
gBattleStruct->safariGoNearCounter = 0;
|
||||
gBattleStruct->safariPkblThrowCounter = 0;
|
||||
gBattleStruct->safariRockThrowCounter = 0;
|
||||
gBattleStruct->safariBaitThrowCounter = 0;
|
||||
*(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275;
|
||||
*(&gBattleStruct->safariEscapeFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].safariZoneFleeRate * 100 / 1275;
|
||||
if (gBattleStruct->safariEscapeFactor <= 1)
|
||||
@@ -4331,32 +4330,32 @@ static void HandleAction_WatchesCarefully(void)
|
||||
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
|
||||
gBattle_BG0_X = 0;
|
||||
gBattle_BG0_Y = 0;
|
||||
if (gBattleStruct->safariGoNearCounter != 0)
|
||||
if (gBattleStruct->safariRockThrowCounter != 0)
|
||||
{
|
||||
--gBattleStruct->safariGoNearCounter;
|
||||
if (gBattleStruct->safariGoNearCounter == 0)
|
||||
--gBattleStruct->safariRockThrowCounter;
|
||||
if (gBattleStruct->safariRockThrowCounter == 0)
|
||||
{
|
||||
*(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(gEnemyParty, MON_DATA_SPECIES)].catchRate * 100 / 1275;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_WATCHING;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_ANGRY;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleStruct->safariPkblThrowCounter != 0)
|
||||
if (gBattleStruct->safariBaitThrowCounter != 0)
|
||||
{
|
||||
--gBattleStruct->safariPkblThrowCounter;
|
||||
if (gBattleStruct->safariPkblThrowCounter == 0)
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
--gBattleStruct->safariBaitThrowCounter;
|
||||
if (gBattleStruct->safariBaitThrowCounter == 0)
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_WATCHING;
|
||||
else
|
||||
gBattleCommunication[5] = 2;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_EATING;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MON_WATCHING;
|
||||
}
|
||||
}
|
||||
gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0];
|
||||
@@ -4379,10 +4378,10 @@ static void HandleAction_ThrowBait(void)
|
||||
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
|
||||
gBattle_BG0_X = 0;
|
||||
gBattle_BG0_Y = 0;
|
||||
gBattleStruct->safariPkblThrowCounter += Random() % 5 + 2;
|
||||
if (gBattleStruct->safariPkblThrowCounter > 6)
|
||||
gBattleStruct->safariPkblThrowCounter = 6;
|
||||
gBattleStruct->safariGoNearCounter = 0;
|
||||
gBattleStruct->safariBaitThrowCounter += Random() % 5 + 2;
|
||||
if (gBattleStruct->safariBaitThrowCounter > 6)
|
||||
gBattleStruct->safariBaitThrowCounter = 6;
|
||||
gBattleStruct->safariRockThrowCounter = 0;
|
||||
gBattleStruct->safariCatchFactor >>= 1;
|
||||
if (gBattleStruct->safariCatchFactor <= 2)
|
||||
gBattleStruct->safariCatchFactor = 3;
|
||||
@@ -4395,10 +4394,10 @@ static void HandleAction_ThrowRock(void)
|
||||
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
|
||||
gBattle_BG0_X = 0;
|
||||
gBattle_BG0_Y = 0;
|
||||
gBattleStruct->safariGoNearCounter += Random() % 5 + 2;
|
||||
if (gBattleStruct->safariGoNearCounter > 6)
|
||||
gBattleStruct->safariGoNearCounter = 6;
|
||||
gBattleStruct->safariPkblThrowCounter = 0;
|
||||
gBattleStruct->safariRockThrowCounter += Random() % 5 + 2;
|
||||
if (gBattleStruct->safariRockThrowCounter > 6)
|
||||
gBattleStruct->safariRockThrowCounter = 6;
|
||||
gBattleStruct->safariBaitThrowCounter = 0;
|
||||
gBattleStruct->safariCatchFactor <<= 1;
|
||||
if (gBattleStruct->safariCatchFactor > 20)
|
||||
gBattleStruct->safariCatchFactor = 20;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "strings.h"
|
||||
@@ -1186,7 +1185,7 @@ const u16 gInobedientStringIds[] =
|
||||
[B_MSG_PRETEND_NOT_NOTICE] = STRINGID_PKMNPRETENDNOTNOTICE
|
||||
};
|
||||
|
||||
const u16 gSafariPokeblockResultStringIds[] =
|
||||
const u16 gSafariReactionStringIds[NUM_SAFARI_REACTIONS] =
|
||||
{
|
||||
[B_MSG_MON_WATCHING] = STRINGID_PKMNWATCHINGCAREFULLY,
|
||||
[B_MSG_MON_ANGRY] = STRINGID_PKMNANGRY,
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#include "battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_scripts.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_interface.h"
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "battle_message.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "constants/battle.h"
|
||||
#include "constants/moves.h"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -22,7 +22,6 @@
|
||||
#include "task.h"
|
||||
#include "text_window.h"
|
||||
#include "trig.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/pokemon.h"
|
||||
|
||||
+5
-5
@@ -779,8 +779,8 @@ const u32 gBattleAnimSpriteGfx_Roots[] = INCBIN_U32("graphics/battle_anims/sprit
|
||||
const u32 gBattleAnimSpritePal_ItemBag[] = INCBIN_U32("graphics/battle_anims/sprites/item_bag.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_ItemBag[] = INCBIN_U32("graphics/battle_anims/sprites/item_bag.4bpp.lz");
|
||||
|
||||
const u32 gBattleAnimSpritePal_TriForceTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_TriForceTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.4bpp.lz");
|
||||
const u32 gBattleAnimSpritePal_TriAttackTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_TriAttackTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.4bpp.lz");
|
||||
|
||||
const u32 gBattleAnimSpritePal_LetterZ[] = INCBIN_U32("graphics/battle_anims/sprites/letter_z.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_LetterZ[] = INCBIN_U32("graphics/battle_anims/sprites/letter_z.4bpp.lz");
|
||||
@@ -915,8 +915,8 @@ const u32 gBattleAnimSpriteGfx_TagHand[] = INCBIN_U32("graphics/battle_anims/spr
|
||||
|
||||
const u32 gBattleAnimSpriteGfx_NoiseLine[] = INCBIN_U32("graphics/battle_anims/sprites/noise_line.4bpp.lz");
|
||||
|
||||
const u32 gUnknown_D2EC24_Gfx[] = INCBIN_U32("graphics/battle_anims/masks/unknown_D2EC24.4bpp.lz");
|
||||
const u32 gUnknown_D2EC24_Tilemap[] = INCBIN_U32("graphics/battle_anims/masks/unknown_D2EC24.bin.lz");
|
||||
const u32 gUnusedLevelupAnimationGfx[] = INCBIN_U32("graphics/battle_anims/masks/unknown_D2EC24.4bpp.lz");
|
||||
const u32 gUnusedLevelupAnimationTilemap[] = INCBIN_U32("graphics/battle_anims/masks/unknown_D2EC24.bin.lz");
|
||||
|
||||
const u32 gBattleAnimSpriteGfx_SmallRedEye[] = INCBIN_U32("graphics/battle_anims/sprites/small_red_eye.4bpp.lz");
|
||||
const u32 gBattleAnimSpritePal_SmallRedEye[] = INCBIN_U32("graphics/battle_anims/sprites/small_red_eye.gbapal.lz");
|
||||
@@ -1021,7 +1021,7 @@ const u32 gBattleAnimSpritePal_Protect[] = INCBIN_U32("graphics/battle_anims/spr
|
||||
|
||||
const u32 gBattleAnimBgPalette_MuddyWater[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_muddy.gbapal.lz");
|
||||
|
||||
const u32 gFile_graphics_battle_interface_enemy_mon_shadow_sheet[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz");
|
||||
const u32 gEnemyMonShadow_Gfx[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz");
|
||||
|
||||
const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[] = INCBIN_U32("graphics/battle_interface/ball_status_bar.4bpp.lz");
|
||||
|
||||
|
||||
+2
-2
@@ -319,7 +319,7 @@ static void sub_80709B4(struct PaletteStruct *a1)
|
||||
return;
|
||||
if (val > 2)
|
||||
return;
|
||||
ResetPaletteStructByUid(a1->base->uid);
|
||||
PaletteStruct_ResetById(a1->base->uid);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -328,7 +328,7 @@ static void sub_80709B4(struct PaletteStruct *a1)
|
||||
}
|
||||
}
|
||||
|
||||
void ResetPaletteStructByUid(u16 a1)
|
||||
void PaletteStruct_ResetById(u16 a1)
|
||||
{
|
||||
u8 paletteNum = GetPaletteNumByUid(a1);
|
||||
if (paletteNum != 16)
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "decompress.h"
|
||||
#include "util.h"
|
||||
|
||||
static void SmokescreenImpact_Callback(struct Sprite *sprite);
|
||||
|
||||
extern const struct CompressedSpriteSheet gSmokescreenImpactSpriteSheet;
|
||||
extern const struct CompressedSpritePalette gSmokescreenImpactSpritePalette;
|
||||
extern const struct SpriteTemplate gSmokescreenImpactSpriteTemplate;
|
||||
|
||||
u8 SmokescreenImpact(s16 x, s16 y, u8 a3)
|
||||
{
|
||||
u8 mainSpriteId;
|
||||
u8 spriteId1, spriteId2, spriteId3, spriteId4;
|
||||
struct Sprite *mainSprite;
|
||||
|
||||
if (GetSpriteTileStartByTag(gSmokescreenImpactSpriteSheet.tag) == 0xFFFF)
|
||||
{
|
||||
LoadCompressedSpriteSheetUsingHeap(&gSmokescreenImpactSpriteSheet);
|
||||
LoadCompressedSpritePaletteUsingHeap(&gSmokescreenImpactSpritePalette);
|
||||
}
|
||||
|
||||
mainSpriteId = CreateInvisibleSpriteWithCallback(SmokescreenImpact_Callback);
|
||||
mainSprite = &gSprites[mainSpriteId];
|
||||
mainSprite->data[1] = a3;
|
||||
|
||||
spriteId1 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2);
|
||||
gSprites[spriteId1].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
AnimateSprite(&gSprites[spriteId1]);
|
||||
|
||||
spriteId2 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y - 16, 2);
|
||||
gSprites[spriteId2].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
StartSpriteAnim(&gSprites[spriteId2], 1);
|
||||
AnimateSprite(&gSprites[spriteId2]);
|
||||
|
||||
spriteId3 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y, 2);
|
||||
gSprites[spriteId3].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
StartSpriteAnim(&gSprites[spriteId3], 2);
|
||||
AnimateSprite(&gSprites[spriteId3]);
|
||||
|
||||
spriteId4 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y, 2);
|
||||
gSprites[spriteId4].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
StartSpriteAnim(&gSprites[spriteId4], 3);
|
||||
AnimateSprite(&gSprites[spriteId4]);
|
||||
|
||||
return mainSpriteId;
|
||||
}
|
||||
|
||||
static void SmokescreenImpact_Callback(struct Sprite *sprite)
|
||||
{
|
||||
if (!sprite->data[0])
|
||||
{
|
||||
FreeSpriteTilesByTag(gSmokescreenImpactSpriteSheet.tag);
|
||||
FreeSpritePaletteByTag(gSmokescreenImpactSpritePalette.tag);
|
||||
if (!sprite->data[1])
|
||||
DestroySprite(sprite);
|
||||
else
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
}
|
||||
|
||||
void SpriteCB_DestroySprite(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->animEnded)
|
||||
{
|
||||
gSprites[sprite->data[0]].data[0]--;
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -2140,7 +2140,7 @@ static void HandleRedrawTradeMenuOnSide(u8 side)
|
||||
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]++;
|
||||
StartSpriteLinearTranslationFromCurrentPos(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]);
|
||||
TradeMenuBouncePartySprites(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]);
|
||||
CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, side * 15, 0, 15, 17, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@
|
||||
.include "src/safari_zone.o"
|
||||
.include "src/item_use.o"
|
||||
.include "src/battle_anim_effects_1.o"
|
||||
.include "src/dragon.o"
|
||||
.include "src/battle_anim_dragon.o"
|
||||
.include "src/battle_anim_utility_funcs.o"
|
||||
.include "src/battle_intro.o"
|
||||
.include "src/easy_chat.o"
|
||||
|
||||
Reference in New Issue
Block a user