matched several functions from pokeem

This commit is contained in:
jiangzhengwenjz
2019-06-25 14:27:57 +08:00
parent 56dabd4626
commit 1182626739
6 changed files with 198 additions and 1505 deletions
+32 -296
View File
@@ -6,6 +6,7 @@
#include "constants/abilities.h"
#include "constants/battle_ai.h"
#include "constants/battle_move_effects.h"
#include "constants/moves.h"
extern u16 Random(void);
extern void sub_80C7164(void);
@@ -230,10 +231,7 @@ static const BattleAICmdFunc sBattleAICmdTable[] =
BattleAICmd_if_not_taunted, // 0x5D
};
#ifdef NONMATCHING
static
#endif
const u16 sDiscouragedPowerfulMoveEffects[] =
static const u16 sDiscouragedPowerfulMoveEffects[] =
{
EFFECT_EXPLOSION,
EFFECT_DREAM_EATER,
@@ -970,331 +968,69 @@ static void BattleAICmd_get_move_power(void)
gAIScriptPtr += 1;
}
// still a nonmatching
#ifdef NONMATCHING
static void BattleAICmd_is_most_powerful_move(void)
{
int i, j;
s32 damages[MAX_MON_MOVES];
s32 i, checkedMove;
s32 moveDmgs[4];
for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
{
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sDiscouragedPowerfulMoveEffects[i])
break;
}
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1
&& sDiscouragedPowerfulMoveEffects[i] == 0xFFFF)
&& sDiscouragedPowerfulMoveEffects[i] == 0xFFFF)
{
gDynamicBasePower = 0;
eDynamicMoveType = 0;
eDmgMultiplier = 1;
*(&gBattleStruct->dynamicMoveType) = 0;
gBattleScripting.dmgMultiplier = 1;
gMoveResultFlags = 0;
gCritMultiplier = 1;
for (i = 0; i < MAX_MON_MOVES; i++)
for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
{
for (j = 0; sDiscouragedPowerfulMoveEffects[j] != 0xFFFF; j++)
{ // _08108276
if (gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == sDiscouragedPowerfulMoveEffects[j])
for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
{
if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sDiscouragedPowerfulMoveEffects[i])
break;
}
// _081082BA
if (gBattleMons[gBankAttacker].moves[i]
&& sDiscouragedPowerfulMoveEffects[j] == 0xFFFF
&& gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power > 1)
if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE
&& sDiscouragedPowerfulMoveEffects[i] == 0xFFFF
&& gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power > 1)
{
gCurrentMove = gBattleMons[gBankAttacker].moves[i];
AI_CalcDmg(gBankAttacker, gBankTarget);
TypeCalc(gCurrentMove, gBankAttacker, gBankTarget);
damages[i] = (gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[i]) / 100;
if (damages[i] == 0) // moves always do at least 1 damage.
damages[i] = 1;
gCurrentMove = gBattleMons[sBattler_AI].moves[checkedMove];
AI_CalcDmg(sBattler_AI, gBattlerTarget);
TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
moveDmgs[checkedMove] = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[checkedMove] / 100;
if (moveDmgs[checkedMove] == 0)
moveDmgs[checkedMove] = 1;
}
else
{
damages[i] = 0;
moveDmgs[checkedMove] = 0;
}
}
for (i = 0; i < MAX_MON_MOVES; i++)
if (damages[i] > damages[AI_THINKING_STRUCT->movesetIndex])
for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
{
if (moveDmgs[checkedMove] > moveDmgs[AI_THINKING_STRUCT->movesetIndex])
break;
}
if (i == MAX_MON_MOVES)
AI_THINKING_STRUCT->funcResult = 2;
if (checkedMove == MAX_MON_MOVES)
AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL; // Is the most powerful.
else
AI_THINKING_STRUCT->funcResult = 1;
AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL; // Not the most powerful.
}
else
{
AI_THINKING_STRUCT->funcResult = 0;
AI_THINKING_STRUCT->funcResult = MOVE_POWER_DISCOURAGED; // Highly discouraged in terms of power.
}
gAIScriptPtr += 1;
gAIScriptPtr++;
}
#else
NAKED
static void BattleAICmd_is_most_powerful_move(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
push {r5-r7}\n\
sub sp, 0x14\n\
movs r3, 0\n\
ldr r0, _080C80A4 @ =sDiscouragedPowerfulMoveEffects\n\
ldrh r1, [r0]\n\
ldr r5, _080C80A8 @ =0x0000ffff\n\
ldr r6, _080C80AC @ =gBattleMoves\n\
ldr r2, _080C80B0 @ =gBattleResources\n\
cmp r1, r5\n\
beq _080C7FA2\n\
ldr r0, [r2]\n\
ldr r0, [r0, 0x14]\n\
ldrh r1, [r0, 0x2]\n\
lsls r0, r1, 1\n\
adds r0, r1\n\
lsls r0, 2\n\
adds r0, r6\n\
ldrb r4, [r0]\n\
ldr r1, _080C80A4 @ =sDiscouragedPowerfulMoveEffects\n\
_080C7F92:\n\
ldrh r0, [r1]\n\
cmp r4, r0\n\
beq _080C7FA2\n\
adds r1, 0x2\n\
adds r3, 0x1\n\
ldrh r0, [r1]\n\
cmp r0, r5\n\
bne _080C7F92\n\
_080C7FA2:\n\
ldr r0, [r2]\n\
ldr r0, [r0, 0x14]\n\
ldrh r1, [r0, 0x2]\n\
lsls r0, r1, 1\n\
adds r0, r1\n\
lsls r0, 2\n\
adds r0, r6\n\
ldrb r0, [r0, 0x1]\n\
cmp r0, 0x1\n\
bhi _080C7FB8\n\
b _080C8142\n\
_080C7FB8:\n\
lsls r0, r3, 1\n\
ldr r1, _080C80A4 @ =sDiscouragedPowerfulMoveEffects\n\
adds r0, r1\n\
ldrh r3, [r0]\n\
ldr r0, _080C80A8 @ =0x0000ffff\n\
cmp r3, r0\n\
beq _080C7FC8\n\
b _080C8142\n\
_080C7FC8:\n\
ldr r0, _080C80B4 @ =gDynamicBasePower\n\
movs r1, 0\n\
strh r1, [r0]\n\
ldr r0, _080C80B8 @ =gBattleStruct\n\
ldr r0, [r0]\n\
strb r1, [r0, 0x13]\n\
ldr r0, _080C80BC @ =gBattleScripting\n\
movs r2, 0x1\n\
strb r2, [r0, 0xE]\n\
ldr r0, _080C80C0 @ =gMoveResultFlags\n\
strb r1, [r0]\n\
ldr r0, _080C80C4 @ =gCritMultiplier\n\
strb r2, [r0]\n\
movs r6, 0\n\
mov r9, r3\n\
ldr r2, _080C80A4 @ =sDiscouragedPowerfulMoveEffects\n\
ldrh r2, [r2]\n\
str r2, [sp, 0x10]\n\
_080C7FEC:\n\
movs r3, 0\n\
ldr r5, _080C80C8 @ =gBattleMons\n\
lsls r4, r6, 1\n\
ldr r7, _080C80CC @ =sBattler_AI\n\
lsls r0, r6, 2\n\
mov r8, r0\n\
adds r1, r6, 0x1\n\
mov r10, r1\n\
ldr r2, [sp, 0x10]\n\
cmp r2, r9\n\
beq _080C8030\n\
ldr r2, _080C80AC @ =gBattleMoves\n\
ldrb r1, [r7]\n\
movs r0, 0x58\n\
muls r0, r1\n\
adds r0, r4, r0\n\
adds r1, r5, 0\n\
adds r1, 0xC\n\
adds r0, r1\n\
ldrh r1, [r0]\n\
lsls r0, r1, 1\n\
adds r0, r1\n\
lsls r0, 2\n\
adds r0, r2\n\
ldrb r2, [r0]\n\
ldr r1, _080C80A4 @ =sDiscouragedPowerfulMoveEffects\n\
_080C8020:\n\
ldrh r0, [r1]\n\
cmp r2, r0\n\
beq _080C8030\n\
adds r1, 0x2\n\
adds r3, 0x1\n\
ldrh r0, [r1]\n\
cmp r0, r9\n\
bne _080C8020\n\
_080C8030:\n\
ldrb r1, [r7]\n\
movs r0, 0x58\n\
muls r0, r1\n\
adds r0, r4, r0\n\
adds r1, r5, 0\n\
adds r1, 0xC\n\
adds r1, r0, r1\n\
ldrh r0, [r1]\n\
cmp r0, 0\n\
beq _080C80DC\n\
lsls r0, r3, 1\n\
ldr r2, _080C80A4 @ =sDiscouragedPowerfulMoveEffects\n\
adds r0, r2\n\
ldrh r0, [r0]\n\
cmp r0, r9\n\
bne _080C80DC\n\
ldr r0, _080C80AC @ =gBattleMoves\n\
ldrh r2, [r1]\n\
lsls r1, r2, 1\n\
adds r1, r2\n\
lsls r1, 2\n\
adds r1, r0\n\
ldrb r0, [r1, 0x1]\n\
cmp r0, 0x1\n\
bls _080C80DC\n\
ldr r5, _080C80D0 @ =gCurrentMove\n\
strh r2, [r5]\n\
ldrb r0, [r7]\n\
ldr r4, _080C80D4 @ =gBattlerTarget\n\
ldrb r1, [r4]\n\
bl AI_CalcDmg\n\
ldrh r0, [r5]\n\
ldrb r1, [r7]\n\
ldrb r2, [r4]\n\
bl TypeCalc\n\
mov r4, sp\n\
add r4, r8\n\
ldr r2, _080C80D8 @ =gBattleMoveDamage\n\
ldr r0, _080C80B0 @ =gBattleResources\n\
ldr r0, [r0]\n\
ldr r0, [r0, 0x14]\n\
adds r0, 0x18\n\
adds r0, r6\n\
ldrb r1, [r0]\n\
ldr r0, [r2]\n\
muls r0, r1\n\
movs r1, 0x64\n\
bl __divsi3\n\
str r0, [r4]\n\
cmp r0, 0\n\
bne _080C80E4\n\
movs r0, 0x1\n\
str r0, [r4]\n\
b _080C80E4\n\
.align 2, 0\n\
_080C80A4: .4byte sDiscouragedPowerfulMoveEffects\n\
_080C80A8: .4byte 0x0000ffff\n\
_080C80AC: .4byte gBattleMoves\n\
_080C80B0: .4byte gBattleResources\n\
_080C80B4: .4byte gDynamicBasePower\n\
_080C80B8: .4byte gBattleStruct\n\
_080C80BC: .4byte gBattleScripting\n\
_080C80C0: .4byte gMoveResultFlags\n\
_080C80C4: .4byte gCritMultiplier\n\
_080C80C8: .4byte gBattleMons\n\
_080C80CC: .4byte sBattler_AI\n\
_080C80D0: .4byte gCurrentMove\n\
_080C80D4: .4byte gBattlerTarget\n\
_080C80D8: .4byte gBattleMoveDamage\n\
_080C80DC:\n\
mov r1, sp\n\
add r1, r8\n\
movs r0, 0\n\
str r0, [r1]\n\
_080C80E4:\n\
mov r6, r10\n\
cmp r6, 0x3\n\
bgt _080C80EC\n\
b _080C7FEC\n\
_080C80EC:\n\
movs r6, 0\n\
ldr r2, _080C8130 @ =gBattleResources\n\
ldr r0, [r2]\n\
ldr r0, [r0, 0x14]\n\
ldrb r0, [r0, 0x1]\n\
lsls r0, 2\n\
add r0, sp\n\
ldr r1, [sp]\n\
ldr r0, [r0]\n\
ldr r5, _080C8134 @ =gAIScriptPtr\n\
cmp r1, r0\n\
bgt _080C8122\n\
adds r4, r2, 0\n\
mov r3, sp\n\
_080C8108:\n\
adds r3, 0x4\n\
adds r6, 0x1\n\
cmp r6, 0x3\n\
bgt _080C8122\n\
ldr r0, [r4]\n\
ldr r0, [r0, 0x14]\n\
ldrb r0, [r0, 0x1]\n\
lsls r0, 2\n\
add r0, sp\n\
ldr r1, [r3]\n\
ldr r0, [r0]\n\
cmp r1, r0\n\
ble _080C8108\n\
_080C8122:\n\
cmp r6, 0x4\n\
bne _080C8138\n\
ldr r0, [r2]\n\
ldr r1, [r0, 0x14]\n\
movs r0, 0x2\n\
str r0, [r1, 0x8]\n\
b _080C814C\n\
.align 2, 0\n\
_080C8130: .4byte gBattleResources\n\
_080C8134: .4byte gAIScriptPtr\n\
_080C8138:\n\
ldr r0, [r2]\n\
ldr r1, [r0, 0x14]\n\
movs r0, 0x1\n\
str r0, [r1, 0x8]\n\
b _080C814C\n\
_080C8142:\n\
ldr r0, [r2]\n\
ldr r1, [r0, 0x14]\n\
movs r0, 0\n\
str r0, [r1, 0x8]\n\
ldr r5, _080C8164 @ =gAIScriptPtr\n\
_080C814C:\n\
ldr r0, [r5]\n\
adds r0, 0x1\n\
str r0, [r5]\n\
add sp, 0x14\n\
pop {r3-r5}\n\
mov r8, r3\n\
mov r9, r4\n\
mov r10, r5\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
.align 2, 0\n\
_080C8164: .4byte gAIScriptPtr\n\
.syntax divided\n");
}
#endif
static void BattleAICmd_get_move(void)
{