Moves with accuracy 0 bypass accuracy checks; Heal Block move effect done

This commit is contained in:
DizzyEggg 2018-07-30 20:41:16 +02:00
parent d24ab9daac
commit 44a454ecb4
7 changed files with 45 additions and 25 deletions

View File

@ -401,8 +401,9 @@
.byte \param1 .byte \param1
.endm .endm
.macro nop_4A .macro sethealblock ptr
.byte 0x4a .byte 0x4a
.4byte \ptr
.endm .endm
.macro returnatktoball .macro returnatktoball

View File

@ -57,7 +57,7 @@ gBattleScriptsForMoveEffects:: @ 82D86A8
.4byte BattleScript_EffectSuperFang .4byte BattleScript_EffectSuperFang
.4byte BattleScript_EffectDragonRage .4byte BattleScript_EffectDragonRage
.4byte BattleScript_EffectTrap .4byte BattleScript_EffectTrap
.4byte BattleScript_EffectPlaceholder43 .4byte BattleScript_EffectHealBlock
.4byte BattleScript_EffectDoubleHit .4byte BattleScript_EffectDoubleHit
.4byte BattleScript_EffectRecoilIfMiss .4byte BattleScript_EffectRecoilIfMiss
.4byte BattleScript_EffectMist .4byte BattleScript_EffectMist
@ -540,6 +540,18 @@ BattleScript_CaptivateCheckAcc:
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
goto BattleScript_StatDownFromAttackString goto BattleScript_StatDownFromAttackString
BattleScript_EffectHealBlock:
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
sethealblock BattleScript_ButItFailed
attackanimation
waitanimation
printstring STRINGID_PKMNPREVENTEDFROMHEALING
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_EffectHitEscape: BattleScript_EffectHitEscape:
attackcanceler attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
@ -583,7 +595,6 @@ BattleScript_HitEscapeEnd:
end end
BattleScript_EffectAlwaysHit: BattleScript_EffectAlwaysHit:
BattleScript_EffectPlaceholder43:
BattleScript_EffectEvasionDownHit: BattleScript_EffectEvasionDownHit:
BattleScript_EffectVitalThrow: BattleScript_EffectVitalThrow:
BattleScript_EffectUnused60: BattleScript_EffectUnused60:
@ -1875,7 +1886,7 @@ BattleScript_EffectMeanLook::
attackcanceler attackcanceler
attackstring attackstring
ppreduce ppreduce
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_ButItFailed jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_ButItFailed
jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
attackanimation attackanimation

View File

@ -44,7 +44,7 @@
#define EFFECT_SUPER_FANG 40 #define EFFECT_SUPER_FANG 40
#define EFFECT_DRAGON_RAGE 41 #define EFFECT_DRAGON_RAGE 41
#define EFFECT_TRAP 42 #define EFFECT_TRAP 42
#define EFFECT_PLACEHOLDER_43 43 #define EFFECT_HEAL_BLOCK 43
#define EFFECT_DOUBLE_HIT 44 #define EFFECT_DOUBLE_HIT 44
#define EFFECT_RECOIL_IF_MISS 45 #define EFFECT_RECOIL_IF_MISS 45
#define EFFECT_MIST 46 #define EFFECT_MIST 46

View File

@ -47,7 +47,6 @@
#define BS_OPPONENT2 14 #define BS_OPPONENT2 14
// atk 01, accuracy calc // atk 01, accuracy calc
#define NO_ACC_CALC 0xFFFE
#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF #define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
#define ACC_CURR_MOVE 0 #define ACC_CURR_MOVE 0

View File

@ -4528,7 +4528,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_SPECIAL, .split = SPLIT_SPECIAL,
}, },
{ // MOVE_HEAL_BLOCK { // MOVE_HEAL_BLOCK
.effect = EFFECT_PLACEHOLDER_209, // Needs a custom move effect .effect = EFFECT_HEAL_BLOCK,
.power = 0, .power = 0,
.type = TYPE_PSYCHIC, .type = TYPE_PSYCHIC,
.accuracy = 100, .accuracy = 100,
@ -5812,7 +5812,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_STATUS, .split = SPLIT_STATUS,
}, },
{ // MOVE_HEAVY_SLAM { // MOVE_HEAVY_SLAM
.effect = EFFECT_PLACEHOLDER_209, // Needs a custom move effect .effect = EFFECT_HEAT_CRASH,
.power = 1, .power = 1,
.type = TYPE_STEEL, .type = TYPE_STEEL,
.accuracy = 100, .accuracy = 100,
@ -5980,7 +5980,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_SPECIAL, .split = SPLIT_SPECIAL,
}, },
{ // MOVE_CHIP_AWAY { // MOVE_CHIP_AWAY
.effect = EFFECT_HIT .effect = EFFECT_HIT,
.power = 70, .power = 70,
.type = TYPE_NORMAL, .type = TYPE_NORMAL,
.accuracy = 100, .accuracy = 100,
@ -6220,7 +6220,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_SPECIAL, .split = SPLIT_SPECIAL,
}, },
{ // MOVE_WATER_PLEDGE { // MOVE_WATER_PLEDGE
.effect = EFFECT_PLEDGE .effect = EFFECT_PLEDGE,
.power = 80, .power = 80,
.type = TYPE_WATER, .type = TYPE_WATER,
.accuracy = 100, .accuracy = 100,
@ -6232,7 +6232,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_SPECIAL, .split = SPLIT_SPECIAL,
}, },
{ // MOVE_FIRE_PLEDGE { // MOVE_FIRE_PLEDGE
.effect = EFFECT_PLEDGE .effect = EFFECT_PLEDGE,
.power = 80, .power = 80,
.type = TYPE_FIRE, .type = TYPE_FIRE,
.accuracy = 100, .accuracy = 100,
@ -6244,7 +6244,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_SPECIAL, .split = SPLIT_SPECIAL,
}, },
{ // MOVE_GRASS_PLEDGE { // MOVE_GRASS_PLEDGE
.effect = EFFECT_PLEDGE .effect = EFFECT_PLEDGE,
.power = 80, .power = 80,
.type = TYPE_GRASS, .type = TYPE_GRASS,
.accuracy = 100, .accuracy = 100,
@ -6448,7 +6448,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_SPECIAL, .split = SPLIT_SPECIAL,
}, },
{ // MOVE_STEAMROLLER { // MOVE_STEAMROLLER
.effect = EFFECT_PLACEHOLDER_209, // Needs a custom move effect .effect = EFFECT_FLINCH_MINIMIZE_HIT,
.power = 65, .power = 65,
.type = TYPE_BUG, .type = TYPE_BUG,
.accuracy = 100, .accuracy = 100,
@ -6496,7 +6496,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_SPECIAL, .split = SPLIT_SPECIAL,
}, },
{ // MOVE_TAIL_SLAP { // MOVE_TAIL_SLAP
.effect = EFFECT_PLACEHOLDER_209, // Needs a custom move effect (different percentages for hitting compared to doubleslap) .effect = EFFECT_MULTI_HIT,
.power = 25, .power = 25,
.type = TYPE_NORMAL, .type = TYPE_NORMAL,
.accuracy = 85, .accuracy = 85,
@ -7036,7 +7036,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_SPECIAL, .split = SPLIT_SPECIAL,
}, },
{ // MOVE_BOOMBURST { // MOVE_BOOMBURST
.effect = EFFECT_PLACEHOLDER_209, // Needs a custom move effect (Doesn't affect pokemon with SOUNDPROOF) .effect = EFFECT_HIT,
.power = 140, .power = 140,
.type = TYPE_NORMAL, .type = TYPE_NORMAL,
.accuracy = 100, .accuracy = 100,
@ -7084,7 +7084,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_GEN6] =
.split = SPLIT_STATUS, .split = SPLIT_STATUS,
}, },
{ // MOVE_CONFIDE { // MOVE_CONFIDE
.effect = EFFECT_PLACEHOLDER_209, // Needs a custom move effect .effect = EFFECT_SPECIAL_ATTACK_DOWN,
.power = 0, .power = 0,
.type = TYPE_NORMAL, .type = TYPE_NORMAL,
.accuracy = 0, .accuracy = 0,

View File

@ -575,8 +575,8 @@ static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX}s type
static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} recieved {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}"); static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} recieved {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}");
static const u8 sText_EmbargoEnds[] = _("{B_DEF_NAME_WITH_PREFIX}can\nuse items again!"); static const u8 sText_EmbargoEnds[] = _("{B_DEF_NAME_WITH_PREFIX}can\nuse items again!");
static const u8 sText_MagnetRiseEnds[] = _("{B_ATK_NAME_WITH_PREFIX}s electromagnetism\nwore off!"); static const u8 sText_MagnetRiseEnds[] = _("{B_ATK_NAME_WITH_PREFIX}s electromagnetism\nwore off!");
static const u8 sText_HealBlockEnds[] = _("{B_DEF_NAME_WITH_PREFIX}s Heal Block\nwore off!"); static const u8 sText_HealBlockEnds[] = _("{B_ATK_NAME_WITH_PREFIX}s Heal Block\nwore off!");
static const u8 sText_TelekinesisEnds[] = _("{B_DEF_NAME_WITH_PREFIX} was freed\nfrom the telekinesis!"); static const u8 sText_TelekinesisEnds[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom the telekinesis!");
static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM}s tailwind\n petered out!"); static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM}s tailwind\n petered out!");
static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM}s Lucky Chant\n wore off!"); static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM}s Lucky Chant\n wore off!");
static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to\nnormal!"); static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to\nnormal!");

View File

@ -166,7 +166,7 @@ static void atk46_playanimation2(void);
static void atk47_setgraphicalstatchangevalues(void); static void atk47_setgraphicalstatchangevalues(void);
static void atk48_playstatchangeanimation(void); static void atk48_playstatchangeanimation(void);
static void atk49_moveend(void); static void atk49_moveend(void);
static void atk4A_nop(void); static void atk4A_sethealblock(void);
static void atk4B_returnatktoball(void); static void atk4B_returnatktoball(void);
static void atk4C_getswitchedmondata(void); static void atk4C_getswitchedmondata(void);
static void atk4D_switchindataupdate(void); static void atk4D_switchindataupdate(void);
@ -424,7 +424,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atk47_setgraphicalstatchangevalues, atk47_setgraphicalstatchangevalues,
atk48_playstatchangeanimation, atk48_playstatchangeanimation,
atk49_moveend, atk49_moveend,
atk4A_nop, atk4A_sethealblock,
atk4B_returnatktoball, atk4B_returnatktoball,
atk4C_getswitchedmondata, atk4C_getswitchedmondata,
atk4D_switchindataupdate, atk4D_switchindataupdate,
@ -1150,11 +1150,11 @@ static void atk01_accuracycheck(void)
{ {
u16 move = T2_READ_16(gBattlescriptCurrInstr + 5); u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
if (move == 0xFFFE || move == 0xFFFF) if (move == NO_ACC_CALC_CHECK_LOCK_ON || gBattleMoves[move].accuracy == 0)
{ {
if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
gBattlescriptCurrInstr += 7; gBattlescriptCurrInstr += 7;
else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) else if (gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else if (!JumpIfMoveAffectedByProtect(0)) else if (!JumpIfMoveAffectedByProtect(0))
gBattlescriptCurrInstr += 7; gBattlescriptCurrInstr += 7;
@ -4356,9 +4356,18 @@ static void atk49_moveend(void)
gBattlescriptCurrInstr += 3; gBattlescriptCurrInstr += 3;
} }
static void atk4A_nop(void) static void atk4A_sethealblock(void)
{ {
gBattlescriptCurrInstr++; if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
gStatuses3[gBattlerTarget] |= STATUS3_HEAL_BLOCK;
gDisableStructs[gBattlerTarget].healBlockTimer = 5;
gBattlescriptCurrInstr += 5;
}
} }
static void atk4B_returnatktoball(void) static void atk4B_returnatktoball(void)