mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-05 10:52:35 +01:00
Add Moxie
This commit is contained in:
parent
16d38f5343
commit
d991d669da
@ -1385,6 +1385,10 @@
|
||||
various \battler, VARIOUS_RESTORE_PP
|
||||
.endm
|
||||
|
||||
.macro tryactivatemoxie battler
|
||||
various \battler, VARIOUS_TRY_ACTIVATE_MOXIE
|
||||
.endm
|
||||
|
||||
@ helpful macros
|
||||
.macro setstatchanger stat, stages, down
|
||||
setbyte sSTATCHANGER \stat | \stages << 4 | \down << 7
|
||||
|
@ -3201,6 +3201,7 @@ BattleScript_FaintTarget::
|
||||
dofaintanimation BS_TARGET
|
||||
cleareffectsonfaint BS_TARGET
|
||||
printstring STRINGID_TARGETFAINTED
|
||||
tryactivatemoxie BS_ATTACKER
|
||||
return
|
||||
|
||||
BattleScript_GiveExp::
|
||||
|
@ -78,7 +78,8 @@
|
||||
#define VARIOUS_RESTORE_TARGET 30
|
||||
#define VARIOUS_INSTANT_HP_DROP 31
|
||||
#define VARIOUS_CLEAR_STATUS 32
|
||||
#define VARIOUS_RESTORE_PP 33
|
||||
#define VARIOUS_RESTORE_PP 33
|
||||
#define VARIOUS_TRY_ACTIVATE_MOXIE 34
|
||||
|
||||
// atk80, dmg manipulation
|
||||
#define ATK80_DMG_CHANGE_SIGN 0
|
||||
|
@ -3316,14 +3316,10 @@ static void atk23_getexp(void)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static void atk24(void)
|
||||
static bool32 IsBattleLostForPlayer(void)
|
||||
{
|
||||
u16 HP_count = 0;
|
||||
s32 i;
|
||||
|
||||
if (gBattleControllerExecFlags)
|
||||
return;
|
||||
u32 i;
|
||||
u32 HP_count = 0;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
|
||||
{
|
||||
@ -3335,7 +3331,7 @@ static void atk24(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)
|
||||
&& (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->field_2A0 & gBitTable[i])))
|
||||
@ -3345,10 +3341,15 @@ static void atk24(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (HP_count == 0)
|
||||
gBattleOutcome |= B_OUTCOME_LOST;
|
||||
return (HP_count == 0);
|
||||
}
|
||||
|
||||
for (HP_count = 0, i = 0; i < 6; i++)
|
||||
static bool32 IsBattleWonForPlayer(void)
|
||||
{
|
||||
u32 i;
|
||||
u32 HP_count = 0;
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG)
|
||||
&& (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->field_2A1 & gBitTable[i])))
|
||||
@ -3357,11 +3358,22 @@ static void atk24(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (HP_count == 0)
|
||||
return (HP_count == 0);
|
||||
}
|
||||
|
||||
static void atk24(void)
|
||||
{
|
||||
if (gBattleControllerExecFlags)
|
||||
return;
|
||||
|
||||
if (IsBattleLostForPlayer())
|
||||
gBattleOutcome |= B_OUTCOME_LOST;
|
||||
if (IsBattleWonForPlayer())
|
||||
gBattleOutcome |= B_OUTCOME_WON;
|
||||
|
||||
if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
|
||||
{
|
||||
s32 i;
|
||||
s32 foundPlayer;
|
||||
s32 foundOpponent;
|
||||
|
||||
@ -3398,301 +3410,6 @@ static void atk24(void)
|
||||
gBattlescriptCurrInstr += 5;
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void atk24(void)
|
||||
{
|
||||
asm("\n\
|
||||
.syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r8\n\
|
||||
push {r7}\n\
|
||||
movs r6, 0\n\
|
||||
ldr r0, =gBattleControllerExecFlags\n\
|
||||
ldr r0, [r0]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804ACE2\n\
|
||||
b _0804AF22\n\
|
||||
_0804ACE2:\n\
|
||||
ldr r0, =gBattleTypeFlags\n\
|
||||
ldr r0, [r0]\n\
|
||||
movs r1, 0x80\n\
|
||||
lsls r1, 15\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804AD48\n\
|
||||
ldr r0, =gPartnerTrainerId\n\
|
||||
ldrh r1, [r0]\n\
|
||||
ldr r0, =0x00000c03\n\
|
||||
cmp r1, r0\n\
|
||||
bne _0804AD48\n\
|
||||
movs r5, 0\n\
|
||||
_0804ACFC:\n\
|
||||
movs r0, 0x64\n\
|
||||
adds r1, r5, 0\n\
|
||||
muls r1, r0\n\
|
||||
ldr r0, =gPlayerParty\n\
|
||||
adds r4, r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0xB\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804AD2C\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x2D\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0804AD2C\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x39\n\
|
||||
bl GetMonData\n\
|
||||
adds r0, r6, r0\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r6, r0, 16\n\
|
||||
_0804AD2C:\n\
|
||||
adds r5, 0x1\n\
|
||||
cmp r5, 0x2\n\
|
||||
ble _0804ACFC\n\
|
||||
b _0804ADA8\n\
|
||||
.pool\n\
|
||||
_0804AD48:\n\
|
||||
movs r5, 0\n\
|
||||
_0804AD4A:\n\
|
||||
movs r0, 0x64\n\
|
||||
adds r1, r5, 0\n\
|
||||
muls r1, r0\n\
|
||||
ldr r0, =gPlayerParty\n\
|
||||
adds r4, r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0xB\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804ADA2\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x2D\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0804ADA2\n\
|
||||
ldr r0, =gBattleTypeFlags\n\
|
||||
ldr r0, [r0]\n\
|
||||
movs r1, 0x80\n\
|
||||
lsls r1, 11\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804AD94\n\
|
||||
ldr r0, =gBattleStruct\n\
|
||||
ldr r0, [r0]\n\
|
||||
movs r1, 0xA8\n\
|
||||
lsls r1, 2\n\
|
||||
adds r0, r1\n\
|
||||
ldrb r1, [r0]\n\
|
||||
ldr r2, =gBitTable\n\
|
||||
lsls r0, r5, 2\n\
|
||||
adds r0, r2\n\
|
||||
ldr r0, [r0]\n\
|
||||
ands r1, r0\n\
|
||||
cmp r1, 0\n\
|
||||
bne _0804ADA2\n\
|
||||
_0804AD94:\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x39\n\
|
||||
bl GetMonData\n\
|
||||
adds r0, r6, r0\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r6, r0, 16\n\
|
||||
_0804ADA2:\n\
|
||||
adds r5, 0x1\n\
|
||||
cmp r5, 0x5\n\
|
||||
ble _0804AD4A\n\
|
||||
_0804ADA8:\n\
|
||||
cmp r6, 0\n\
|
||||
bne _0804ADB6\n\
|
||||
ldr r0, =gBattleOutcome\n\
|
||||
ldrb r1, [r0]\n\
|
||||
movs r2, 0x2\n\
|
||||
orrs r1, r2\n\
|
||||
strb r1, [r0]\n\
|
||||
_0804ADB6:\n\
|
||||
movs r6, 0\n\
|
||||
movs r5, 0\n\
|
||||
_0804ADBA:\n\
|
||||
movs r0, 0x64\n\
|
||||
adds r1, r5, 0\n\
|
||||
muls r1, r0\n\
|
||||
ldr r0, =gEnemyParty\n\
|
||||
adds r4, r1, r0\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0xB\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804AE10\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x2D\n\
|
||||
bl GetMonData\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0804AE10\n\
|
||||
ldr r0, =gBattleTypeFlags\n\
|
||||
ldr r0, [r0]\n\
|
||||
movs r1, 0x80\n\
|
||||
lsls r1, 11\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804AE02\n\
|
||||
ldr r0, =gBattleStruct\n\
|
||||
ldr r0, [r0]\n\
|
||||
ldr r1, =0x000002a1\n\
|
||||
adds r0, r1\n\
|
||||
ldrb r1, [r0]\n\
|
||||
ldr r2, =gBitTable\n\
|
||||
lsls r0, r5, 2\n\
|
||||
adds r0, r2\n\
|
||||
ldr r0, [r0]\n\
|
||||
ands r1, r0\n\
|
||||
cmp r1, 0\n\
|
||||
bne _0804AE10\n\
|
||||
_0804AE02:\n\
|
||||
adds r0, r4, 0\n\
|
||||
movs r1, 0x39\n\
|
||||
bl GetMonData\n\
|
||||
adds r0, r6, r0\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r6, r0, 16\n\
|
||||
_0804AE10:\n\
|
||||
adds r5, 0x1\n\
|
||||
cmp r5, 0x5\n\
|
||||
ble _0804ADBA\n\
|
||||
ldr r2, =gBattleOutcome\n\
|
||||
cmp r6, 0\n\
|
||||
bne _0804AE24\n\
|
||||
ldrb r0, [r2]\n\
|
||||
movs r1, 0x1\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r2]\n\
|
||||
_0804AE24:\n\
|
||||
ldrb r0, [r2]\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0804AF1A\n\
|
||||
ldr r0, =gBattleTypeFlags\n\
|
||||
ldr r1, [r0]\n\
|
||||
ldr r2, =0x02000002\n\
|
||||
ands r1, r2\n\
|
||||
mov r8, r0\n\
|
||||
cmp r1, 0\n\
|
||||
beq _0804AF1A\n\
|
||||
movs r3, 0\n\
|
||||
movs r5, 0\n\
|
||||
ldr r0, =gBattlersCount\n\
|
||||
ldrb r1, [r0]\n\
|
||||
mov r12, r0\n\
|
||||
ldr r7, =gBattlescriptCurrInstr\n\
|
||||
cmp r3, r1\n\
|
||||
bge _0804AE70\n\
|
||||
ldr r0, =gHitMarker\n\
|
||||
movs r6, 0x80\n\
|
||||
lsls r6, 21\n\
|
||||
ldr r4, [r0]\n\
|
||||
adds r2, r1, 0\n\
|
||||
ldr r1, =gSpecialStatuses\n\
|
||||
_0804AE54:\n\
|
||||
adds r0, r6, 0\n\
|
||||
lsls r0, r5\n\
|
||||
ands r0, r4\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804AE68\n\
|
||||
ldrb r0, [r1]\n\
|
||||
lsls r0, 25\n\
|
||||
cmp r0, 0\n\
|
||||
blt _0804AE68\n\
|
||||
adds r3, 0x1\n\
|
||||
_0804AE68:\n\
|
||||
adds r1, 0x28\n\
|
||||
adds r5, 0x2\n\
|
||||
cmp r5, r2\n\
|
||||
blt _0804AE54\n\
|
||||
_0804AE70:\n\
|
||||
movs r2, 0\n\
|
||||
movs r5, 0x1\n\
|
||||
mov r4, r12\n\
|
||||
ldrb r1, [r4]\n\
|
||||
cmp r5, r1\n\
|
||||
bge _0804AEAA\n\
|
||||
ldr r0, =gHitMarker\n\
|
||||
movs r4, 0x80\n\
|
||||
lsls r4, 21\n\
|
||||
mov r12, r4\n\
|
||||
ldr r6, [r0]\n\
|
||||
ldr r0, =gSpecialStatuses\n\
|
||||
adds r4, r1, 0\n\
|
||||
adds r1, r0, 0\n\
|
||||
adds r1, 0x14\n\
|
||||
_0804AE8E:\n\
|
||||
mov r0, r12\n\
|
||||
lsls r0, r5\n\
|
||||
ands r0, r6\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804AEA2\n\
|
||||
ldrb r0, [r1]\n\
|
||||
lsls r0, 25\n\
|
||||
cmp r0, 0\n\
|
||||
blt _0804AEA2\n\
|
||||
adds r2, 0x1\n\
|
||||
_0804AEA2:\n\
|
||||
adds r1, 0x28\n\
|
||||
adds r5, 0x2\n\
|
||||
cmp r5, r4\n\
|
||||
blt _0804AE8E\n\
|
||||
_0804AEAA:\n\
|
||||
mov r1, r8\n\
|
||||
ldr r0, [r1]\n\
|
||||
movs r1, 0x40\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804AEF0\n\
|
||||
adds r0, r2, r3\n\
|
||||
cmp r0, 0x1\n\
|
||||
bgt _0804AEF8\n\
|
||||
b _0804AF12\n\
|
||||
.pool\n\
|
||||
_0804AEF0:\n\
|
||||
cmp r2, 0\n\
|
||||
beq _0804AF12\n\
|
||||
cmp r3, 0\n\
|
||||
beq _0804AF12\n\
|
||||
_0804AEF8:\n\
|
||||
ldr r2, [r7]\n\
|
||||
ldrb r1, [r2, 0x1]\n\
|
||||
ldrb r0, [r2, 0x2]\n\
|
||||
lsls r0, 8\n\
|
||||
adds r1, r0\n\
|
||||
ldrb r0, [r2, 0x3]\n\
|
||||
lsls r0, 16\n\
|
||||
adds r1, r0\n\
|
||||
ldrb r0, [r2, 0x4]\n\
|
||||
lsls r0, 24\n\
|
||||
adds r1, r0\n\
|
||||
str r1, [r7]\n\
|
||||
b _0804AF22\n\
|
||||
_0804AF12:\n\
|
||||
ldr r0, [r7]\n\
|
||||
adds r0, 0x5\n\
|
||||
str r0, [r7]\n\
|
||||
b _0804AF22\n\
|
||||
_0804AF1A:\n\
|
||||
ldr r1, =gBattlescriptCurrInstr\n\
|
||||
ldr r0, [r1]\n\
|
||||
adds r0, 0x5\n\
|
||||
str r0, [r1]\n\
|
||||
_0804AF22:\n\
|
||||
pop {r3}\n\
|
||||
mov r8, r3\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n\
|
||||
.syntax divided");
|
||||
}
|
||||
|
||||
#endif // NONMATCHING
|
||||
|
||||
static void MoveValuesCleanUp(void)
|
||||
{
|
||||
@ -6653,6 +6370,24 @@ static void atk76_various(void)
|
||||
data[i] = gBattleMons[gActiveBattler].ppBonuses;
|
||||
BtlController_EmitSetMonData(0, REQUEST_PP_DATA_BATTLE, 0, 5, data);
|
||||
break;
|
||||
case VARIOUS_TRY_ACTIVATE_MOXIE:
|
||||
if (GetBattlerAbility(gActiveBattler) == ABILITY_MOXIE
|
||||
&& (gLastHitBy[gBattlerTarget] == 0xFF || gLastHitBy[gBattlerTarget] == gBattlerAttacker)
|
||||
&& gBattleStruct->moveTarget[gBattlerAttacker] == gBattlerTarget
|
||||
&& gBattlerTarget != gBattlerAttacker
|
||||
&& gCurrentTurnActionNumber == GetBattlerTurnOrderNum(gBattlerAttacker)
|
||||
&& !IsBattleLostForPlayer()
|
||||
&& !IsBattleWonForPlayer()
|
||||
&& gBattleMons[gBattlerAttacker].statStages[STAT_ATK] != 0xC)
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].statStages[STAT_ATK]++;
|
||||
SET_STATCHANGER(STAT_ATK, 1, FALSE);
|
||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 3);
|
||||
gBattlescriptCurrInstr = BattleScript_AttackerAbilityStatRaise;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
gBattlescriptCurrInstr += 3;
|
||||
|
Loading…
x
Reference in New Issue
Block a user