Gen 8 moves initial commit

Full credit to Nunuchu42 and cfmnephrite for this code.
This commit is contained in:
BuffelSaft 2021-11-04 19:50:54 +13:00
parent b615bc6dcd
commit 28e78cb6c4
12 changed files with 298 additions and 17 deletions

View File

@ -1878,6 +1878,36 @@
.4byte \ptr .4byte \ptr
.endm .endm
.macro trynoretreat battler:req, ptr:req
various \battler, VARIOUS_TRY_NO_RETREAT
.4byte \ptr
.endm
.macro trytarshot battler:req, ptr:req
various \battler, VARIOUS_TRY_TAR_SHOT
.4byte \ptr
.endm
.macro trynextdart ptr:req
various BS_ATTACKER, VARIOUS_TRY_NEXT_DART
.4byte \ptr
.endm
.macro checkpoltergeist battler:req, ptr:req
various \battler, VARIOUS_CHECK_POLTERGEIST
.4byte \ptr
.endm
.macro setoctolock battler:req, ptr:req
various \battler, VARIOUS_SET_OCTOLOCK
.4byte \ptr
.endm
.macro cutonethirdhpraisestats ptr:req
various BS_ATTACKER, VARIOUS_CUT_1_3_HP_RAISE_STATS
.4byte \ptr
.endm
@ helpful macros @ helpful macros
.macro setstatchanger stat:req, stages:req, down:req .macro setstatchanger stat:req, stages:req, down:req
setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7 setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7

View File

@ -392,6 +392,115 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectSparklySwirl @ EFFECT_SPARKLY_SWIRL .4byte BattleScript_EffectSparklySwirl @ EFFECT_SPARKLY_SWIRL
.4byte BattleScript_EffectPlasmaFists @ EFFECT_PLASMA_FISTS .4byte BattleScript_EffectPlasmaFists @ EFFECT_PLASMA_FISTS
.4byte BattleScript_EffectHyperspaceFury @ EFFECT_HYPERSPACE_FURY .4byte BattleScript_EffectHyperspaceFury @ EFFECT_HYPERSPACE_FURY
.4byte BattleScript_EffectJawLock @ EFFECT_JAW_LOCK
.4byte BattleScript_EffectNoRetreat @ EFFECT_NO_RETREAT
.4byte BattleScript_EffectTarShot @ EFFECT_TAR_SHOT
.4byte BattleScript_EffectPoltergeist @ EFFECT_POLTERGEIST
.4byte BattleScript_EffectOctolock @ EFFECT_OCTOLOCK
.4byte BattleScript_EffectClangorousSoul @ EFFECT_CLANGOROUS_SOUL
.4byte BattleScript_EffectHit @ EFFECT_BOLT_BEAK
BattleScript_EffectClangorousSoul:
attackcanceler
attackstring
ppreduce
cutonethirdhpraisestats BattleScript_ButItFailed
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
attackanimation
waitanimation
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
call BattleScript_AllStatsUp
goto BattleScript_MoveEnd
BattleScript_EffectOctolock:
attackcanceler
jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
setoctolock BS_TARGET, BattleScript_ButItFailed
attackanimation
waitanimation
printstring STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_OctolockEndTurn::
playanimation BS_ATTACKER, B_ANIM_TURN_TRAP, 0
jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_OctolockLowerDef
jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_OctolockTryLowerSpDef
goto BattleScript_OctolockEnd2
BattleScript_OctolockLowerDef:
playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, STAT_CHANGE_NEGATIVE
jumpifability BS_TARGET, ABILITY_BIG_PECKS, BattleScript_OctolockTryLowerSpDef
setstatchanger STAT_DEF, 1, TRUE
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_OctolockTryLowerSpDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_OctolockTryLowerSpDef
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_OctolockTryLowerSpDef::
setstatchanger STAT_SPDEF, 1, TRUE
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_OctolockEnd2
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_OctolockEnd2
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_OctolockEnd2::
end2
BattleScript_EffectPoltergeist:
attackcanceler
attackstring
ppreduce
checkpoltergeist BS_TARGET, BattleScript_ButItFailed
printstring STRINGID_ABOUTTOUSEPOLTERGEIST
waitmessage 0x40
goto BattleScript_HitFromCritCalc
BattleScript_EffectTarShot:
attackcanceler
jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
setstatchanger STAT_SPEED, 1, TRUE
attackanimation
waitanimation
statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_TryTarShot
setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_TryTarShot:
trytarshot BS_TARGET, BattleScript_MoveEnd
printstring STRINGID_PKMNBECAMEWEAKERTOFIRE
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_EffectNoRetreat:
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
trynoretreat BS_TARGET, BattleScript_ButItFailed
attackanimation
waitanimation
call BattleScript_AllStatsUp
jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_MoveEnd
setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE
seteffectprimary
printstring STRINGID_CANTESCAPEDUETOUSEDMOVE
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_EffectJawLock:
setmoveeffect MOVE_EFFECT_TRAP_BOTH | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_BothCanNoLongerEscape::
printstring STRINGID_BOTHCANNOLONGERESCAPE
waitmessage 0x40
return
BattleScript_EffectHyperspaceFury: BattleScript_EffectHyperspaceFury:
jumpifspecies BS_ATTACKER, SPECIES_TREECKO, BattleScript_EffectHyperspaceFuryUnbound jumpifspecies BS_ATTACKER, SPECIES_TREECKO, BattleScript_EffectHyperspaceFuryUnbound
@ -1707,7 +1816,7 @@ BattleScript_EffectSoak:
attackanimation attackanimation
waitanimation waitanimation
trysoak BattleScript_ButItFailed trysoak BattleScript_ButItFailed
printstring STRINGID_TRANSFORMEDINTOWATERTYPE printstring STRINGID_TARGETCHANGEDTYPE
waitmessage B_WAIT_TIME_LONG waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd goto BattleScript_MoveEnd

View File

@ -112,6 +112,9 @@ struct DisableStruct
u8 throatChopTimer; u8 throatChopTimer;
u8 usedMoves:4; u8 usedMoves:4;
u8 wrapTurns; u8 wrapTurns;
u8 noRetreat:1;
u8 tarShot:1;
u8 octolock:1;
}; };
struct ProtectStruct struct ProtectStruct

View File

@ -407,5 +407,7 @@ extern const u8 BattleScript_WanderingSpiritActivates[];
extern const u8 BattleScript_MirrorArmorReflect[]; extern const u8 BattleScript_MirrorArmorReflect[];
extern const u8 BattleScript_GooeyActivates[]; extern const u8 BattleScript_GooeyActivates[];
extern const u8 BattleScript_PastelVeilActivates[]; extern const u8 BattleScript_PastelVeilActivates[];
extern const u8 BattleScript_BothCanNoLongerEscape[];
extern const u8 BattleScript_OctolockEndTurn[];
#endif // GUARD_BATTLE_SCRIPTS_H #endif // GUARD_BATTLE_SCRIPTS_H

View File

@ -357,7 +357,8 @@
#define MOVE_EFFECT_INCINERATE 0x44 #define MOVE_EFFECT_INCINERATE 0x44
#define MOVE_EFFECT_BUG_BITE 0x45 #define MOVE_EFFECT_BUG_BITE 0x45
#define MOVE_EFFECT_RECOIL_HP_25 0x46 #define MOVE_EFFECT_RECOIL_HP_25 0x46
#define NUM_MOVE_EFFECTS 0x47 #define MOVE_EFFECT_TRAP_BOTH 0x47
#define NUM_MOVE_EFFECTS 0x48
#define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_AFFECTS_USER 0x4000
#define MOVE_EFFECT_CERTAIN 0x8000 #define MOVE_EFFECT_CERTAIN 0x8000

View File

@ -375,7 +375,14 @@
#define EFFECT_SPARKLY_SWIRL 369 #define EFFECT_SPARKLY_SWIRL 369
#define EFFECT_PLASMA_FISTS 370 #define EFFECT_PLASMA_FISTS 370
#define EFFECT_HYPERSPACE_FURY 371 #define EFFECT_HYPERSPACE_FURY 371
#define EFFECT_JAW_LOCK 372
#define EFFECT_NO_RETREAT 373
#define EFFECT_TAR_SHOT 374
#define EFFECT_POLTERGEIST 375
#define EFFECT_OCTOLOCK 376
#define EFFECT_CLANGOROUS_SOUL 377
#define EFFECT_BOLT_BEAK 378
#define NUM_BATTLE_MOVE_EFFECTS 372 #define NUM_BATTLE_MOVE_EFFECTS 379
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H

View File

@ -198,6 +198,11 @@
#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 125 #define VARIOUS_JUMP_IF_WEATHER_AFFECTED 125
#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 126 #define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 126
#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 127 #define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 127
#define VARIOUS_TRY_NO_RETREAT 128
#define VARIOUS_TRY_TAR_SHOT 129
#define VARIOUS_CHECK_POLTERGEIST 130
#define VARIOUS_SET_OCTOLOCK 131
#define VARIOUS_CUT_1_3_HP_RAISE_STATS 132
// Cmd_manipulatedamage // Cmd_manipulatedamage
#define DMG_CHANGE_SIGN 0 #define DMG_CHANGE_SIGN 0

View File

@ -420,7 +420,7 @@
#define STRINGID_HURLEDINTOTHEAIR 416 #define STRINGID_HURLEDINTOTHEAIR 416
#define STRINGID_HELDITEMSLOSEEFFECTS 417 #define STRINGID_HELDITEMSLOSEEFFECTS 417
#define STRINGID_FELLSTRAIGHTDOWN 418 #define STRINGID_FELLSTRAIGHTDOWN 418
#define STRINGID_TRANSFORMEDINTOWATERTYPE 419 #define STRINGID_TARGETCHANGEDTYPE 419
#define STRINGID_PKMNACQUIREDSIMPLE 420 #define STRINGID_PKMNACQUIREDSIMPLE 420
#define STRINGID_EMPTYSTRING5 421 #define STRINGID_EMPTYSTRING5 421
#define STRINGID_KINDOFFER 422 #define STRINGID_KINDOFFER 422
@ -601,8 +601,13 @@
#define STRINGID_SWAPPEDABILITIES 598 #define STRINGID_SWAPPEDABILITIES 598
#define STRINGID_PASTELVEILPROTECTED 599 #define STRINGID_PASTELVEILPROTECTED 599
#define STRINGID_PASTELVEILENTERS 600 #define STRINGID_PASTELVEILENTERS 600
#define STRINGID_BOTHCANNOLONGERESCAPE 601
#define STRINGID_CANTESCAPEDUETOUSEDMOVE 602
#define STRINGID_PKMNBECAMEWEAKERTOFIRE 603
#define STRINGID_ABOUTTOUSEPOLTERGEIST 604
#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 605
#define BATTLESTRINGS_COUNT 601 #define BATTLESTRINGS_COUNT 606
// The below IDs are all indexes into battle message tables, // The below IDs are all indexes into battle message tables,
// used to determine which of a set of messages to print. // used to determine which of a set of messages to print.

View File

@ -549,7 +549,7 @@ static const u8 sText_BecameNimble[] =_("{B_ATK_NAME_WITH_PREFIX} became nimble!
static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!"); static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!");
static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which\nPokémon's held items lose their effects!"); static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which\nPokémon's held items lose their effects!");
static const u8 sText_FellStraightDown[] =_("{B_DEF_NAME_WITH_PREFIX} fell\nstraight down!"); static const u8 sText_FellStraightDown[] =_("{B_DEF_NAME_WITH_PREFIX} fell\nstraight down!");
static const u8 sText_TransformedIntoWaterType[] =_("{B_DEF_NAME_WITH_PREFIX} transformed\ninto the water type!"); static const u8 sText_TargetChangedType[] =_("{B_DEF_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!");
static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!"); static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!");
static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind offer!"); static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind offer!");
static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}'s stat changes\nwere removed!"); static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}'s stat changes\nwere removed!");
@ -727,6 +727,11 @@ static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} allows the\nu
static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities\nwith its target!"); static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities\nwith its target!");
static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!"); static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!");
static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!"); static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!");
static const u8 sText_BothCanNoLongerEscape[] = _("Neither POKéMON can run away!");
static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape\nbecause it used {B_CURRENT_MOVE}!");
static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became\nweaker to fire!");
static const u8 sText_PkmnAboutToBeAttackedByItsItem[] = _("{B_DEF_NAME_WITH_PREFIX} is about\nto be attacked by its {B_BUFF1}!");
static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape\nbecause of {B_CURRENT_MOVE}!");
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
{ {
@ -1208,7 +1213,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_HURLEDINTOTHEAIR - 12] = sText_HurledIntoTheAir, [STRINGID_HURLEDINTOTHEAIR - 12] = sText_HurledIntoTheAir,
[STRINGID_HELDITEMSLOSEEFFECTS - 12] = sText_HeldItemsLoseEffects, [STRINGID_HELDITEMSLOSEEFFECTS - 12] = sText_HeldItemsLoseEffects,
[STRINGID_FELLSTRAIGHTDOWN - 12] = sText_FellStraightDown, [STRINGID_FELLSTRAIGHTDOWN - 12] = sText_FellStraightDown,
[STRINGID_TRANSFORMEDINTOWATERTYPE - 12] = sText_TransformedIntoWaterType, [STRINGID_TARGETCHANGEDTYPE - 12] = sText_TargetChangedType,
[STRINGID_PKMNACQUIREDSIMPLE - 12] = sText_PkmnAcquiredSimple, [STRINGID_PKMNACQUIREDSIMPLE - 12] = sText_PkmnAcquiredSimple,
[STRINGID_EMPTYSTRING5 - 12] = sText_EmptyString4, [STRINGID_EMPTYSTRING5 - 12] = sText_EmptyString4,
[STRINGID_KINDOFFER - 12] = sText_KindOffer, [STRINGID_KINDOFFER - 12] = sText_KindOffer,
@ -1318,6 +1323,11 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_AURABREAKENTERS - 12] = sText_AuraBreakActivates, [STRINGID_AURABREAKENTERS - 12] = sText_AuraBreakActivates,
[STRINGID_COMATOSEENTERS - 12] = sText_ComatoseActivates, [STRINGID_COMATOSEENTERS - 12] = sText_ComatoseActivates,
[STRINGID_SCREENCLEANERENTERS - 12] = sText_ScreenCleanerActivates, [STRINGID_SCREENCLEANERENTERS - 12] = sText_ScreenCleanerActivates,
[STRINGID_BOTHCANNOLONGERESCAPE - 12] = sText_BothCanNoLongerEscape,
[STRINGID_CANTESCAPEDUETOUSEDMOVE - 12] = sText_CantEscapeDueToUsedMove,
[STRINGID_PKMNBECAMEWEAKERTOFIRE - 12] = sText_PkmnBecameWeakerToFire,
[STRINGID_ABOUTTOUSEPOLTERGEIST - 12] = sText_PkmnAboutToBeAttackedByItsItem,
[STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE - 12] = sText_CantEscapeBecauseOfCurrentMove,
}; };
const u16 gMentalHerbCureStringIds[] = const u16 gMentalHerbCureStringIds[] =

View File

@ -3399,6 +3399,21 @@ void SetMoveEffect(bool32 primary, u32 certain)
gBattlescriptCurrInstr = BattleScript_MoveEffectBugBite; gBattlescriptCurrInstr = BattleScript_MoveEffectBugBite;
} }
break; break;
case MOVE_EFFECT_TRAP_BOTH:
if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION))
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_BothCanNoLongerEscape;
}
if (!gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION)
gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker;
if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION))
gDisableStructs[gBattlerAttacker].battlerPreventingEscape = gBattlerTarget;
gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION;
gBattleMons[gBattlerAttacker].status2 |= STATUS2_ESCAPE_PREVENTION;
break;
} }
} }
} }
@ -8154,13 +8169,15 @@ static void Cmd_various(void)
} }
return; return;
case VARIOUS_TRY_SOAK: case VARIOUS_TRY_SOAK:
if (gBattleMons[gBattlerTarget].type1 == TYPE_WATER && gBattleMons[gBattlerTarget].type2 == TYPE_WATER) if (gBattleMons[gBattlerTarget].type1 == gBattleMoves[gCurrentMove].type
&& gBattleMons[gBattlerTarget].type2 == gBattleMoves[gCurrentMove].type)
{ {
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
} }
else else
{ {
SET_BATTLER_TYPE(gBattlerTarget, TYPE_WATER); SET_BATTLER_TYPE(gBattlerTarget, gBattleMoves[gCurrentMove].type);
PREPARE_TYPE_BUFFER(gBattleTextBuff1, gBattleMoves[gCurrentMove].type);
gBattlescriptCurrInstr += 7; gBattlescriptCurrInstr += 7;
} }
return; return;
@ -9017,6 +9034,79 @@ static void Cmd_various(void)
if (gBattleStruct->stickyWebUser != 0xFF) if (gBattleStruct->stickyWebUser != 0xFF)
gBattlerAttacker = gBattleStruct->stickyWebUser; gBattlerAttacker = gBattleStruct->stickyWebUser;
break; break;
case VARIOUS_CUT_1_3_HP_RAISE_STATS:
{
bool8 atLeastOneStatBoosted = FALSE;
bool8 hasContrary = (GetBattlerAbility(gBattlerAttacker) == ABILITY_CONTRARY);
u16 hpFraction = min(1, gBattleMons[gBattlerAttacker].maxHP / 3);
for (i = 1; i < NUM_STATS; i++)
{
if (!(gBattleMons[gBattlerAttacker].statStages[i] == MAX_STAT_STAGE
|| (hasContrary && gBattleMons[gBattlerAttacker].statStages[i] == MIN_STAT_STAGE)))
{
atLeastOneStatBoosted = TRUE;
break;
}
}
if (atLeastOneStatBoosted && gBattleMons[gBattlerAttacker].hp > hpFraction)
{
gBattleMoveDamage = hpFraction;
gBattlescriptCurrInstr += 7;
}
else
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
}
}
return;
case VARIOUS_SET_OCTOLOCK:
if (gDisableStructs[gActiveBattler].octolock)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
}
else
{
gDisableStructs[gActiveBattler].octolock = 1;
gBattleMons[gActiveBattler].status2 |= STATUS2_ESCAPE_PREVENTION;
gDisableStructs[gActiveBattler].battlerPreventingEscape = gBattlerAttacker;
gBattlescriptCurrInstr += 7;
}
return;
case VARIOUS_CHECK_POLTERGEIST:
if (gBattleMons[gActiveBattler].item == ITEM_NONE
|| gFieldStatuses & STATUS_FIELD_MAGIC_ROOM
|| GetBattlerAbility(gActiveBattler) == ABILITY_KLUTZ)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
}
else
{
PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].item);
gBattlescriptCurrInstr += 7;
}
return;
case VARIOUS_TRY_NO_RETREAT:
if (gDisableStructs[gActiveBattler].noRetreat)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
else
{
if (!(gBattleMons[gActiveBattler].status2 & STATUS2_ESCAPE_PREVENTION))
gDisableStructs[gActiveBattler].noRetreat = 1;
gBattlescriptCurrInstr += 7;
}
return;
case VARIOUS_TRY_TAR_SHOT:
if (gDisableStructs[gActiveBattler].tarShot)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
}
else
{
gDisableStructs[gActiveBattler].tarShot = 1;
gBattlescriptCurrInstr += 7;
}
return;
} }
gBattlescriptCurrInstr += 3; gBattlescriptCurrInstr += 3;

View File

@ -2382,6 +2382,7 @@ enum
ENDTURN_NIGHTMARES, ENDTURN_NIGHTMARES,
ENDTURN_CURSE, ENDTURN_CURSE,
ENDTURN_WRAP, ENDTURN_WRAP,
ENDTURN_OCTOLOCK,
ENDTURN_UPROAR, ENDTURN_UPROAR,
ENDTURN_THRASH, ENDTURN_THRASH,
ENDTURN_FLINCH, ENDTURN_FLINCH,
@ -2652,6 +2653,18 @@ u8 DoBattlerEndTurnEffects(void)
} }
gBattleStruct->turnEffectsTracker++; gBattleStruct->turnEffectsTracker++;
break; break;
case ENDTURN_OCTOLOCK:
if (gDisableStructs[gActiveBattler].octolock
&& !(GetBattlerAbility(gActiveBattler) == ABILITY_CLEAR_BODY
|| GetBattlerAbility(gActiveBattler) == ABILITY_FULL_METAL_BODY
|| GetBattlerAbility(gActiveBattler) == ABILITY_WHITE_SMOKE))
{
gBattlerTarget = gActiveBattler;
BattleScriptExecute(BattleScript_OctolockEndTurn);
effect++;
}
gBattleStruct->turnEffectsTracker++;
break;
case ENDTURN_UPROAR: // uproar case ENDTURN_UPROAR: // uproar
if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR) if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR)
{ {
@ -7731,6 +7744,10 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef)
&& (gDisableStructs[battlerDef].isFirstTurn != 2 || B_PAYBACK_SWITCH_BOOST < GEN_5)) && (gDisableStructs[battlerDef].isFirstTurn != 2 || B_PAYBACK_SWITCH_BOOST < GEN_5))
basePower *= 2; basePower *= 2;
break; break;
case EFFECT_BOLT_BEAK:
if (GetBattlerTurnOrderNum(battlerAtk) < GetBattlerTurnOrderNum(battlerDef))
basePower *= 2;
break;
case EFFECT_ROUND: case EFFECT_ROUND:
if (gChosenMoveByBattler[BATTLE_PARTNER(battlerAtk)] == MOVE_ROUND && !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)])) if (gChosenMoveByBattler[BATTLE_PARTNER(battlerAtk)] == MOVE_ROUND && !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)]))
basePower *= 2; basePower *= 2;
@ -8741,6 +8758,8 @@ u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 bat
modifier = CalcTypeEffectivenessMultiplierInternal(move, moveType, battlerAtk, battlerDef, recordAbilities, modifier); modifier = CalcTypeEffectivenessMultiplierInternal(move, moveType, battlerAtk, battlerDef, recordAbilities, modifier);
if (gBattleMoves[move].effect == EFFECT_TWO_TYPED_MOVE) if (gBattleMoves[move].effect == EFFECT_TWO_TYPED_MOVE)
modifier = CalcTypeEffectivenessMultiplierInternal(move, gBattleMoves[move].argument, battlerAtk, battlerDef, recordAbilities, modifier); modifier = CalcTypeEffectivenessMultiplierInternal(move, gBattleMoves[move].argument, battlerAtk, battlerDef, recordAbilities, modifier);
else if (moveType == TYPE_FIRE && gDisableStructs[battlerDef].tarShot)
modifier = CalcTypeEffectivenessMultiplierInternal(move, moveType, battlerAtk, battlerDef, recordAbilities, UQ_4_12(2.0));
} }
if (recordAbilities) if (recordAbilities)

View File

@ -10771,7 +10771,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_JAW_LOCK] = [MOVE_JAW_LOCK] =
{ {
.effect = EFFECT_MEAN_LOOK, .effect = EFFECT_JAW_LOCK,
.power = 80, .power = 80,
.type = TYPE_DARK, .type = TYPE_DARK,
.accuracy = 100, .accuracy = 100,
@ -10799,7 +10799,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_NO_RETREAT] = [MOVE_NO_RETREAT] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO .effect = EFFECT_NO_RETREAT,
.power = 0, .power = 0,
.type = TYPE_FIGHTING, .type = TYPE_FIGHTING,
.accuracy = 0, .accuracy = 0,
@ -10827,7 +10827,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_MAGIC_POWDER] = [MOVE_MAGIC_POWDER] =
{ {
.effect = EFFECT_THIRD_TYPE, .effect = EFFECT_SOAK,
.power = 0, .power = 0,
.type = TYPE_PSYCHIC, .type = TYPE_PSYCHIC,
.accuracy = 100, .accuracy = 100,
@ -10870,7 +10870,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_OCTOLOCK] = [MOVE_OCTOLOCK] =
{ {
.effect = EFFECT_MEAN_LOOK, .effect = EFFECT_OCTOLOCK,
.power = 0, .power = 0,
.type = TYPE_FIGHTING, .type = TYPE_FIGHTING,
.accuracy = 100, .accuracy = 100,
@ -10884,7 +10884,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_BOLT_BEAK] = [MOVE_BOLT_BEAK] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO .effect = EFFECT_BOLT_BEAK,
.power = 85, .power = 85,
.type = TYPE_ELECTRIC, .type = TYPE_ELECTRIC,
.accuracy = 100, .accuracy = 100,
@ -10898,7 +10898,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_FISHIOUS_REND] = [MOVE_FISHIOUS_REND] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO. same as bolt beak .effect = EFFECT_BOLT_BEAK,
.power = 85, .power = 85,
.type = TYPE_WATER, .type = TYPE_WATER,
.accuracy = 100, .accuracy = 100,
@ -10926,7 +10926,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_CLANGOROUS_SOUL] = [MOVE_CLANGOROUS_SOUL] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO .effect = EFFECT_CLANGOROUS_SOUL,
.power = 0, .power = 0,
.type = TYPE_DRAGON, .type = TYPE_DRAGON,
.accuracy = 100, .accuracy = 100,
@ -11402,7 +11402,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
[MOVE_POLTERGEIST] = [MOVE_POLTERGEIST] =
{ {
.effect = EFFECT_PLACEHOLDER, //TODO .effect = EFFECT_POLTERGEIST,
.power = 110, .power = 110,
.type = TYPE_GHOST, .type = TYPE_GHOST,
.accuracy = 90, .accuracy = 90,