Incinerate

This commit is contained in:
DizzyEggg 2019-05-10 15:12:33 +02:00
parent d027bb0d7a
commit 824a95fe07
10 changed files with 94 additions and 4 deletions

View File

@ -2417,6 +2417,43 @@ Move_CIRCLE_THROW:
end
Move_INCINERATE:
loadspritegfx ANIM_TAG_SMALL_EMBER
monbg ANIM_TARGET
monbgprio_28 ANIM_TARGET
setalpha 12, 8
delay 1
createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
playsewithpan SE_W172, SOUND_PAN_ATTACKER
createvisualtask AnimTask_SwayMon, 5, 0, 3, 0xc00, 8, ANIM_TARGET
createvisualtask AnimTask_SwayMon, 5, 0, 3, 0xc00, 8, ANIM_DEF_PARTNER
delay 3
createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
delay 3
createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
playsewithpan SE_W172, SOUND_PAN_ATTACKER
delay 3
createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
delay 3
createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
playsewithpan SE_W172, SOUND_PAN_ATTACKER
delay 3
createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
delay 3
createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
playsewithpan SE_W172, SOUND_PAN_ATTACKER
delay 3
createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
delay 5
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 8, 1
createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 0, 8, 1
createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB_RED, 12, 1, 1
createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_DEF_PARTNER, RGB_RED, 12, 1, 1
playsewithpan SE_W172, SOUND_PAN_ATTACKER
delay 5
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 0, 9
waitforvisualfinish
clearmonbg ANIM_TARGET
blendoff
end
Move_QUASH:

View File

@ -353,6 +353,16 @@ gBattleScriptsForMoveEffects:: @ 82D86A8
.4byte BattleScript_EffectLaserFocus
.4byte BattleScript_EffectMagneticFlux
.4byte BattleScript_EffectGearUp
.4byte BattleScript_EffectIncinerate
BattleScript_EffectIncinerate:
setmoveeffect MOVE_EFFECT_INCINERATE | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_MoveEffectIncinerate::
printstring STRINGID_INCINERATEBURN
waitmessage 0x40
return
BattleScript_EffectCoreEnforcer:
setmoveeffect MOVE_EFFECT_CORE_ENFORCER | MOVE_EFFECT_CERTAIN

View File

@ -321,5 +321,6 @@ extern const u8 BattleScript_AirBaloonMsgPop[];
extern const u8 BattleScript_ItemHurtRet[];
extern const u8 BattleScript_ToxicOrb[];
extern const u8 BattleScript_FlameOrb[];
extern const u8 BattleScript_MoveEffectIncinerate[];
#endif // GUARD_BATTLE_SCRIPTS_H

View File

@ -330,6 +330,7 @@
#define MOVE_EFFECT_HAPPY_HOUR 0x41
#define MOVE_EFFECT_CORE_ENFORCER 0x42
#define MOVE_EFFECT_THROAT_CHOP 0x43
#define MOVE_EFFECT_INCINERATE 0x44
#define MOVE_EFFECT_AFFECTS_USER 0x4000
#define MOVE_EFFECT_CERTAIN 0x8000

View File

@ -341,5 +341,6 @@
#define EFFECT_LASER_FOCUS 335
#define EFFECT_MAGNETIC_FLUX 336
#define EFFECT_GEAR_UP 337
#define EFFECT_INCINERATE 338
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H

View File

@ -537,6 +537,7 @@
#define STRINGID_TARGETATEITEM 533
#define STRINGID_AIRBALLOONFLOAT 534
#define STRINGID_AIRBALLOONPOP 535
#define STRINGID_INCINERATEBURN 536
#define BATTLESTRINGS_COUNT 530

View File

@ -662,9 +662,11 @@ static const u8 sText_BerryDmgReducing[] = _("{B_LAST_ITEM} weakened the damage\
static const u8 sText_TargetAteItem[] = _("{B_DEF_NAME_WITH_PREFIX} ate its {B_LAST_ITEM}!");
static const u8 sText_AirBalloonFloat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air\nwith its {B_LAST_ITEM}!");
static const u8 sText_AirBalloonPop[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} popped!");
static const u8 sText_IncinerateBurn[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwas burnt up!");
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
{
[STRINGID_INCINERATEBURN - 12] = sText_IncinerateBurn,
[STRINGID_AIRBALLOONPOP - 12] = sText_AirBalloonPop,
[STRINGID_AIRBALLOONFLOAT - 12] = sText_AirBalloonFloat,
[STRINGID_TARGETATEITEM - 12] = sText_TargetAteItem,

View File

@ -2876,6 +2876,19 @@ void SetMoveEffect(bool32 primary, u32 certain)
gDisableStructs[gEffectBattler].throatChopTimer = 2;
gBattlescriptCurrInstr++;
break;
case MOVE_EFFECT_INCINERATE:
if (GetBattlerHoldEffect(gEffectBattler, FALSE) == HOLD_EFFECT_GEMS
|| (gBattleMons[gEffectBattler].item >= FIRST_BERRY_INDEX && gBattleMons[gEffectBattler].item <= LAST_BERRY_INDEX))
{
gLastUsedItem = gBattleMons[gEffectBattler].item;
gBattleMons[gEffectBattler].item = 0;
gActiveBattler = gEffectBattler;
BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gEffectBattler].item);
MarkBattlerForControllerExec(gActiveBattler);
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_MoveEffectIncinerate;
}
break;
}
}
}

View File

@ -7153,7 +7153,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_INCINERATE] =
{
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
.effect = EFFECT_INCINERATE,
.power = 60,
.type = TYPE_FIRE,
.accuracy = 100,

View File

@ -256,6 +256,30 @@ const struct SpriteTemplate gEmberFlareSpriteTemplate =
.callback = AnimEmberFlare,
};
const union AnimCmd gIncinerateAnim1[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(16, 4),
ANIMCMD_FRAME(32, 2),
ANIMCMD_JUMP(0),
};
const union AnimCmd *const gIncinerateAnims[] =
{
gIncinerateAnim1,
};
const struct SpriteTemplate gIncinerateSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gUnknown_08524914,
.anims = gIncinerateAnims,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation,
};
const struct SpriteTemplate gUnknown_08595504 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
@ -653,7 +677,7 @@ void AnimFireRing(struct Sprite *sprite)
}
static void AnimFireRingStep1(struct Sprite *sprite)
{
{
UpdateFireRingCircleOffset(sprite);
if (++sprite->data[0] == 0x12)
@ -713,7 +737,7 @@ static void UpdateFireRingCircleOffset(struct Sprite *sprite)
// arg 1: initial y pixel offset
// arg 2: duration
// arg 3: x delta
// arg 4: y delta
// arg 4: y delta
// AnimFireCross(struct Sprite *sprite)
static void AnimFireCross(struct Sprite *sprite)
{
@ -1093,7 +1117,7 @@ static void sub_8109AFC(struct Sprite *sprite)
case 2:
sprite->pos2.x = Sin(sprite->data[2], sprite->data[4]);
sprite->data[2] = (sprite->data[2] + 4) & 0xFF;
if (++sprite->data[3] == 31)
{
sprite->pos1.x += sprite->pos2.x;