diff options
Diffstat (limited to 'src/battle_ai.c')
-rw-r--r-- | src/battle_ai.c | 1709 |
1 files changed, 751 insertions, 958 deletions
diff --git a/src/battle_ai.c b/src/battle_ai.c index 19ccfef99..e60bf478f 100644 --- a/src/battle_ai.c +++ b/src/battle_ai.c @@ -12,28 +12,28 @@ enum { - TARGET, - USER + TARGET, + USER }; +extern void move_effectiveness_something(u16, u8, u8); + extern u16 gBattleTypeFlags; extern u8 gUnknown_02024A60; -extern u8 gUnknown_02024C07; -extern u8 gUnknown_02024C08; +extern u16 gUnknown_02024BE6; +extern u32 gUnknown_02024BEC; +extern u8 gUnknown_02024C07; // something player? +extern u8 gUnknown_02024C08; // something opponent? extern u8 gUnknown_02024C0C; -extern u16 gUnknown_02024DEC; extern u8 gUnknown_02024C68; -extern u32 gUnknown_02024BEC; -extern u8 gUnknown_0201601C; -extern u8 gUnknown_0201601F; -extern u16 gUnknown_02024BE6; -extern u8 gCritMultiplier; +extern u16 gUnknown_02024DEC; extern u16 gUnknown_02024C34[]; extern u32 gUnknown_02024ACC[]; extern u32 gUnknown_02024C98[]; extern u16 gUnknown_02024C7A[]; extern struct BattlePokemon gUnknown_02024A8C[]; extern u8 gUnknown_030042E0[]; +extern u8 gCritMultiplier; extern u16 gTrainerBattleOpponent; extern u32 gBitTable[]; extern u8 *BattleAIs[]; @@ -43,10 +43,10 @@ extern struct BattleMove gBattleMoves[]; extern struct BaseStats gBaseStats[]; extern void (*gBattleAICmdTable[])(void); -/* -gAIScriptPtr is a pointer to the next battle AI cmd command to read. -when a command finishes processing, gAIScriptPtr is incremented by -the number of bytes that the current command had reserved for arguments +/* +gAIScriptPtr is a pointer to the next battle AI cmd command to read. +when a command finishes processing, gAIScriptPtr is incremented by +the number of bytes that the current command had reserved for arguments in order to read the next command correctly. refer to battle_ai_scripts.s for the AI scripts. */ @@ -61,43 +61,12 @@ struct UnknownStruct1 /* 0x2C */ u8 unk8; }; -struct AI_ThinkingStruct /* 0x2016800 */ -{ -/* 0x00 */ u8 unk0; -/* 0x01 */ u8 moveConsidered; -/* 0x02 */ u16 unk2; -/* 0x04 */ s8 score[4]; // score? -/* 0x08 */ u32 unk8; -/* 0x0C */ u32 aiFlags; -/* 0x10 */ u8 unk10; -/* 0x11 */ u8 aiLogicId; -/* 0x12 */ u8 filler12[6]; -/* 0x18 */ u8 unk18[4]; -}; - struct UnknownStruct3 { u8 filler0[0x20]; u8 unk20; }; -struct SmallBattleStruct1 -{ - u8 unk1; - u8 unk2; - u8 unk3; - u8 unk4; -}; - -// move to battle.h before PR. -struct BattleStruct /* 0x2000000 */ -{ - u8 filler0[0x1601C]; - struct SmallBattleStruct1 unk; -}; - -extern struct BattleStruct unk_2000000; -extern struct AI_ThinkingStruct gAIThinkingSpace; extern struct UnknownStruct1 unk_2016A00; extern struct UnknownStruct3 unk_2016C00; @@ -110,10 +79,10 @@ void BattleAI_HandleItemUseBeforeAISetup(void) { s32 i; u8 *data = (u8 *)&unk_2016A00; - + for (i = 0; (u32)i < 48; i++) data[i] = 0; - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 0x400 && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) { @@ -147,7 +116,7 @@ void BattleAI_SetupAIData(void) for(i = 0; i < 4; i++) { u16 rand; - + if(gBitTable[i] & r7) gAIThinkingSpace.score[i] = 0; rand = Random(); @@ -156,11 +125,11 @@ void BattleAI_SetupAIData(void) unk_2016C00.unk20 = 0; gUnknown_02024C07 = gUnknown_02024A60; - + if(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { gUnknown_02024C08 = Random() & 2; - + if(gUnknown_02024C0C & gBitTable[gUnknown_02024C08]) gUnknown_02024C08 ^= 2; } @@ -184,7 +153,7 @@ u8 BattleAI_GetAIActionToUse(void) u8 arr2[4]; u8 r5; s32 i; - + sub_810745C(); while(gAIThinkingSpace.aiFlags != 0) { @@ -263,68 +232,25 @@ void BattleAI_DoAIProcessing(void) } } -#ifdef NONMATCHING void sub_810745C(void) { s32 i; - + for(i = 0; i < 8; i++) { - if(unk_2016A00.unk0[gUnknown_02024C08 / 2][i] == 0) + // this is the same as dividing it by 2, but for some reason, >> 1 is needed to match the asm. + if(unk_2016A00.unk0[gUnknown_02024C08 >> 1][i] == 0) { - //gUnknown_02024C34[gUnknown_02024C08] += 0; - unk_2016A00.unk0[gUnknown_02024C08 / 2][i] = gUnknown_02024C34[gUnknown_02024C08]; + unk_2016A00.unk0[gUnknown_02024C08 >> 1][i] = gUnknown_02024C34[gUnknown_02024C08]; return; } } } -#else -__attribute__((naked)) -void sub_810745C(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - movs r2, 0\n\ - ldr r3, _08107488 @ =gUnknown_02024C08\n\ - ldr r5, _0810748C @ =0x02016a00\n\ - ldr r6, _08107490 @ =gUnknown_02024C34\n\ - adds r4, r3, 0\n\ -_08107468:\n\ - lsls r0, r2, 1\n\ - ldrb r1, [r4]\n\ - lsrs r1, 1\n\ - lsls r1, 4\n\ - adds r0, r1\n\ - adds r1, r0, r5\n\ - ldrh r0, [r1]\n\ - cmp r0, 0\n\ - bne _08107494\n\ - ldrb r0, [r3]\n\ - lsls r0, 1\n\ - adds r0, r6\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - b _0810749A\n\ - .align 2, 0\n\ -_08107488: .4byte gUnknown_02024C08\n\ -_0810748C: .4byte 0x02016a00\n\ -_08107490: .4byte gUnknown_02024C34\n\ -_08107494:\n\ - adds r2, 0x1\n\ - cmp r2, 0x7\n\ - ble _08107468\n\ -_0810749A:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); -} -#endif void unref_sub_81074A0(u8 a) { s32 i; - + for(i = 0; i < 8; i++) unk_2016A00.unk0[a / 2][i] = 0; } @@ -343,358 +269,358 @@ void sub_81074F8(u8 a, u8 b) void BattleAICmd_if_random(void) { - u16 random = Random(); - - if (!(random % 256 >= gAIScriptPtr[1])) // roll a random value. is it less than the parameter of the if_random call? (96 on if_random 80 will return true) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + u16 random = Random(); + + if (!(random % 256 >= gAIScriptPtr[1])) // roll a random value. is it less than the parameter of the if_random call? (96 on if_random 80 will return true) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_if_not_random(void) { - u16 random = Random(); - - if (!(random % 256 <= gAIScriptPtr[1])) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + u16 random = Random(); + + if (!(random % 256 <= gAIScriptPtr[1])) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_if_random_1(void) // if RNG Value equal to { - u16 random = Random(); - - if (random % 256 == gAIScriptPtr[1]) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + u16 random = Random(); + + if (random % 256 == gAIScriptPtr[1]) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_if_not_random_1(void) // if RNG value not equal to { - u16 random = Random(); - - if (random % 256 != gAIScriptPtr[1]) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + u16 random = Random(); + + if (random % 256 != gAIScriptPtr[1]) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_score(void) { - gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] += gAIScriptPtr[1]; // add the result to the array of the move consider's score. - - if(gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] < 0) // if the score is negative, flatten it to 0. - gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] = 0; + gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] += gAIScriptPtr[1]; // add the result to the array of the move consider's score. - gAIScriptPtr += 2; // AI return. + if(gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] < 0) // if the score is negative, flatten it to 0. + gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] = 0; + + gAIScriptPtr += 2; // AI return. } void BattleAICmd_if_hp_less_than(void) { - u16 var; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) < gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; + u16 var; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) < gAIScriptPtr[2]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; } void BattleAICmd_if_hp_more_than(void) { - u16 var; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) > gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; + u16 var; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) > gAIScriptPtr[2]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; } void BattleAICmd_if_hp_equal(void) { - u16 var; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) == gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; + u16 var; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) == gAIScriptPtr[2]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; } void BattleAICmd_if_hp_not_equal(void) { - u16 var; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) != gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; + u16 var; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) != gAIScriptPtr[2]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; } void BattleAICmd_if_status(void) { - u16 var; - u32 temp; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - temp = AIScriptRead32(gAIScriptPtr + 2); - - if (gBattleMons[var].status1 & temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; + u16 var; + u32 temp; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (gBattleMons[var].status1 & temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; } void BattleAICmd_if_not_status(void) { - u16 var; - u32 temp; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - temp = AIScriptRead32(gAIScriptPtr + 2); - - if (!(gBattleMons[var].status1 & temp)) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; + u16 var; + u32 temp; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (!(gBattleMons[var].status1 & temp)) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; } void BattleAICmd_if_status2(void) { - u8 var; - u32 temp; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - temp = AIScriptRead32(gAIScriptPtr + 2); - - if (gBattleMons[var].status2 & temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; + u8 var; + u32 temp; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (gBattleMons[var].status2 & temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; } void BattleAICmd_if_not_status2(void) { - u8 var; - u32 temp; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - temp = AIScriptRead32(gAIScriptPtr + 2); - - if (!(gBattleMons[var].status2 & temp)) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; + u8 var; + u32 temp; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (!(gBattleMons[var].status2 & temp)) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; } void BattleAICmd_if_status3(void) { - u8 var; - u32 temp; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - temp = AIScriptRead32(gAIScriptPtr + 2); - - if ( gUnknown_02024C98[var] & temp ) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; + u8 var; + u32 temp; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if ( gUnknown_02024C98[var] & temp ) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; } void BattleAICmd_if_not_status3(void) { - u8 var; - u32 temp; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - temp = AIScriptRead32(gAIScriptPtr + 2); - - if (!(gUnknown_02024C98[var] & temp)) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; + u8 var; + u32 temp; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (!(gUnknown_02024C98[var] & temp)) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; } void BattleAICmd_if_status4(void) { - u8 var; - u32 temp; - u32 temp2; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - temp = battle_get_per_side_status(var) & 1; - temp2 = AIScriptRead32(gAIScriptPtr + 2); - - if ( gUnknown_02024C7A[temp] & temp2 ) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; + u8 var; + u32 temp; + u32 temp2; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = battle_get_per_side_status(var) & 1; + temp2 = AIScriptRead32(gAIScriptPtr + 2); + + if ( gUnknown_02024C7A[temp] & temp2 ) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; } void BattleAICmd_if_not_status4(void) { - u8 var; - u32 temp; - u32 temp2; - - if (gAIScriptPtr[1] == USER) - var = gUnknown_02024C07; - else - var = gUnknown_02024C08; - - temp = battle_get_per_side_status(var) & 1; - temp2 = AIScriptRead32(gAIScriptPtr + 2); - - if (!(gUnknown_02024C7A[temp] & temp2)) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; + u8 var; + u32 temp; + u32 temp2; + + if (gAIScriptPtr[1] == USER) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = battle_get_per_side_status(var) & 1; + temp2 = AIScriptRead32(gAIScriptPtr + 2); + + if (!(gUnknown_02024C7A[temp] & temp2)) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; } void BattleAICmd_if_less_than(void) { - if (gAIThinkingSpace.unk8 < gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + if (gAIThinkingSpace.unk8 < gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_if_more_than(void) { - if (gAIThinkingSpace.unk8 > gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + if (gAIThinkingSpace.unk8 > gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_if_equal(void) { - if (gAIThinkingSpace.unk8 == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + if (gAIThinkingSpace.unk8 == gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_if_not_equal(void) { - if (gAIThinkingSpace.unk8 != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + if (gAIThinkingSpace.unk8 != gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_if_less_than_32(void) { - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); - if (gAIThinkingSpace.unk8 < *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; + if (gAIThinkingSpace.unk8 < *temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; } void BattleAICmd_if_more_than_32(void) { - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); - if (gAIThinkingSpace.unk8 > *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; + if (gAIThinkingSpace.unk8 > *temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; } void BattleAICmd_if_equal_32(void) { - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); - if (gAIThinkingSpace.unk8 == *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; + if (gAIThinkingSpace.unk8 == *temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; } void BattleAICmd_if_not_equal_32(void) { - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); - if (gAIThinkingSpace.unk8 != *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; + if (gAIThinkingSpace.unk8 != *temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; } void BattleAICmd_if_move(void) { - u16 move = AIScriptRead16(gAIScriptPtr + 1); + u16 move = AIScriptRead16(gAIScriptPtr + 1); - if (gAIThinkingSpace.unk2 == move) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; + if (gAIThinkingSpace.unk2 == move) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; } void BattleAICmd_if_not_move(void) { - u16 move = AIScriptRead16(gAIScriptPtr + 1); + u16 move = AIScriptRead16(gAIScriptPtr + 1); - if (gAIThinkingSpace.unk2 != move) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; + if (gAIThinkingSpace.unk2 != move) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; } void BattleAICmd_if_in_bytes(void) { u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); - + while(*ptr != 0xFF) { if(gAIThinkingSpace.unk8 == *ptr) @@ -710,7 +636,7 @@ void BattleAICmd_if_in_bytes(void) void BattleAICmd_if_not_in_bytes(void) { u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); - + while(*ptr != 0xFF) { if(gAIThinkingSpace.unk8 == *ptr) @@ -726,7 +652,7 @@ void BattleAICmd_if_not_in_bytes(void) void BattleAICmd_if_in_words(void) { u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1); - + while(*ptr != 0xFFFF) { if(gAIThinkingSpace.unk8 == *ptr) @@ -742,7 +668,7 @@ void BattleAICmd_if_in_words(void) void BattleAICmd_if_not_in_words(void) { u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1); - + while(*ptr != 0xFFFF) { if(gAIThinkingSpace.unk8 == *ptr) @@ -758,7 +684,7 @@ void BattleAICmd_if_not_in_words(void) void BattleAICmd_if_user_can_damage(void) { s32 i; - + for(i = 0; i < 4; i++) { if (gBattleMons[gUnknown_02024C07].moves[i] != 0 @@ -774,7 +700,7 @@ void BattleAICmd_if_user_can_damage(void) void BattleAICmd_if_user_cant_damage(void) { s32 i; - + for(i = 0; i < 4; i++) { if (gBattleMons[gUnknown_02024C07].moves[i] != 0 @@ -789,204 +715,204 @@ void BattleAICmd_if_user_cant_damage(void) void BattleAICmd_unk_21(void) { - gAIThinkingSpace.unk8 = gUnknown_030042E0[19]; - gAIScriptPtr += 1; + gAIThinkingSpace.unk8 = gUnknown_030042E0[19]; + gAIScriptPtr += 1; } void BattleAICmd_get_type(void) { - u8 typeVar = gAIScriptPtr[1]; - - switch(typeVar) - { - case 1: - gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type1; - break; - case 0: - gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type1; - break; - case 3: - gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type2; - break; - case 2: - gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type2; - break; - case 4: - gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].type; - break; - } - gAIScriptPtr += 2; + u8 typeVar = gAIScriptPtr[1]; + + switch(typeVar) + { + case 1: + gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type1; + break; + case 0: + gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type1; + break; + case 3: + gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type2; + break; + case 2: + gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type2; + break; + case 4: + gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].type; + break; + } + gAIScriptPtr += 2; } void BattleAICmd_unk_23(void) { - gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].power; - gAIScriptPtr += 1; + gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].power; + gAIScriptPtr += 1; } __attribute__((naked)) void BattleAICmd_unk_24(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, _08108328 @ =gUnknown_083F62BC\n\ - ldrh r1, [r0]\n\ - ldr r4, _0810832C @ =0x0000ffff\n\ - ldr r6, _08108330 @ =gBattleMoves\n\ - ldr r5, _08108334 @ =0x02016800\n\ - cmp r1, r4\n\ - beq _0810822E\n\ - ldrh r1, [r5, 0x2]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrb r2, [r0]\n\ - ldr r1, _08108328 @ =gUnknown_083F62BC\n\ + 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, _08108328 @ =gUnknown_083F62BC\n\ + ldrh r1, [r0]\n\ + ldr r4, _0810832C @ =0x0000ffff\n\ + ldr r6, _08108330 @ =gBattleMoves\n\ + ldr r5, _08108334 @ =0x02016800\n\ + cmp r1, r4\n\ + beq _0810822E\n\ + ldrh r1, [r5, 0x2]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r2, [r0]\n\ + ldr r1, _08108328 @ =gUnknown_083F62BC\n\ _0810821E:\n\ - ldrh r0, [r1]\n\ - cmp r2, r0\n\ - beq _0810822E\n\ - adds r1, 0x2\n\ - adds r3, 0x1\n\ - ldrh r0, [r1]\n\ - cmp r0, r4\n\ - bne _0810821E\n\ + ldrh r0, [r1]\n\ + cmp r2, r0\n\ + beq _0810822E\n\ + adds r1, 0x2\n\ + adds r3, 0x1\n\ + ldrh r0, [r1]\n\ + cmp r0, r4\n\ + bne _0810821E\n\ _0810822E:\n\ - ldrh r0, [r5, 0x2]\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r6\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0x1\n\ - bhi _08108240\n\ - b _081083B2\n\ + ldrh r0, [r5, 0x2]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0x1\n\ + bhi _08108240\n\ + b _081083B2\n\ _08108240:\n\ - lsls r0, r3, 1\n\ - ldr r1, _08108328 @ =gUnknown_083F62BC\n\ - adds r0, r1\n\ - ldrh r3, [r0]\n\ - ldr r0, _0810832C @ =0x0000ffff\n\ - cmp r3, r0\n\ - beq _08108250\n\ - b _081083B2\n\ + lsls r0, r3, 1\n\ + ldr r1, _08108328 @ =gUnknown_083F62BC\n\ + adds r0, r1\n\ + ldrh r3, [r0]\n\ + ldr r0, _0810832C @ =0x0000ffff\n\ + cmp r3, r0\n\ + beq _08108250\n\ + b _081083B2\n\ _08108250:\n\ - ldr r0, _08108338 @ =gUnknown_02024DEC\n\ - movs r1, 0\n\ - strh r1, [r0]\n\ - ldr r2, _0810833C @ =0xfffff81c\n\ - adds r0, r5, r2\n\ - strb r1, [r0]\n\ - adds r2, 0x3\n\ - adds r0, r5, r2\n\ - movs r2, 0x1\n\ - strb r2, [r0]\n\ - ldr r0, _08108340 @ =gUnknown_02024C68\n\ - strb r1, [r0]\n\ - ldr r0, _08108344 @ =gCritMultiplier\n\ - strb r2, [r0]\n\ - movs r6, 0\n\ - mov r9, r3\n\ - ldr r0, _08108328 @ =gUnknown_083F62BC\n\ - ldrh r0, [r0]\n\ - str r0, [sp, 0x10]\n\ + ldr r0, _08108338 @ =gUnknown_02024DEC\n\ + movs r1, 0\n\ + strh r1, [r0]\n\ + ldr r2, _0810833C @ =0xfffff81c\n\ + adds r0, r5, r2\n\ + strb r1, [r0]\n\ + adds r2, 0x3\n\ + adds r0, r5, r2\n\ + movs r2, 0x1\n\ + strb r2, [r0]\n\ + ldr r0, _08108340 @ =gUnknown_02024C68\n\ + strb r1, [r0]\n\ + ldr r0, _08108344 @ =gCritMultiplier\n\ + strb r2, [r0]\n\ + movs r6, 0\n\ + mov r9, r3\n\ + ldr r0, _08108328 @ =gUnknown_083F62BC\n\ + ldrh r0, [r0]\n\ + str r0, [sp, 0x10]\n\ _08108276:\n\ - movs r3, 0\n\ - ldr r5, _08108348 @ =gBattleMons\n\ - lsls r4, r6, 1\n\ - ldr r7, _0810834C @ =gUnknown_02024C07\n\ - lsls r1, r6, 2\n\ - mov r8, r1\n\ - adds r2, r6, 0x1\n\ - mov r10, r2\n\ - ldr r0, [sp, 0x10]\n\ - cmp r0, r9\n\ - beq _081082BA\n\ - ldr r2, _08108330 @ =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, _08108328 @ =gUnknown_083F62BC\n\ + movs r3, 0\n\ + ldr r5, _08108348 @ =gBattleMons\n\ + lsls r4, r6, 1\n\ + ldr r7, _0810834C @ =gUnknown_02024C07\n\ + lsls r1, r6, 2\n\ + mov r8, r1\n\ + adds r2, r6, 0x1\n\ + mov r10, r2\n\ + ldr r0, [sp, 0x10]\n\ + cmp r0, r9\n\ + beq _081082BA\n\ + ldr r2, _08108330 @ =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, _08108328 @ =gUnknown_083F62BC\n\ _081082AA:\n\ - ldrh r0, [r1]\n\ - cmp r2, r0\n\ - beq _081082BA\n\ - adds r1, 0x2\n\ - adds r3, 0x1\n\ - ldrh r0, [r1]\n\ - cmp r0, r9\n\ - bne _081082AA\n\ + ldrh r0, [r1]\n\ + cmp r2, r0\n\ + beq _081082BA\n\ + adds r1, 0x2\n\ + adds r3, 0x1\n\ + ldrh r0, [r1]\n\ + cmp r0, r9\n\ + bne _081082AA\n\ _081082BA:\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 _0810835C\n\ - lsls r0, r3, 1\n\ - ldr r2, _08108328 @ =gUnknown_083F62BC\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - cmp r0, r9\n\ - bne _0810835C\n\ - ldr r0, _08108330 @ =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 _0810835C\n\ - ldr r5, _08108350 @ =gUnknown_02024BE6\n\ - strh r2, [r5]\n\ - ldrb r0, [r7]\n\ - ldr r4, _08108354 @ =gUnknown_02024C08\n\ - ldrb r1, [r4]\n\ - bl sub_801CAF8\n\ - ldrh r0, [r5]\n\ - ldrb r1, [r7]\n\ - ldrb r2, [r4]\n\ - bl move_effectiveness_something\n\ - mov r4, sp\n\ - add r4, r8\n\ - ldr r2, _08108358 @ =gUnknown_02024BEC\n\ - ldr r0, _08108334 @ =0x02016800\n\ - adds r0, 0x18\n\ - adds r0, r6, r0\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 _08108364\n\ - movs r0, 0x1\n\ - str r0, [r4]\n\ - b _08108364\n\ - .align 2, 0\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 _0810835C\n\ + lsls r0, r3, 1\n\ + ldr r2, _08108328 @ =gUnknown_083F62BC\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + cmp r0, r9\n\ + bne _0810835C\n\ + ldr r0, _08108330 @ =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 _0810835C\n\ + ldr r5, _08108350 @ =gUnknown_02024BE6\n\ + strh r2, [r5]\n\ + ldrb r0, [r7]\n\ + ldr r4, _08108354 @ =gUnknown_02024C08\n\ + ldrb r1, [r4]\n\ + bl sub_801CAF8\n\ + ldrh r0, [r5]\n\ + ldrb r1, [r7]\n\ + ldrb r2, [r4]\n\ + bl move_effectiveness_something\n\ + mov r4, sp\n\ + add r4, r8\n\ + ldr r2, _08108358 @ =gUnknown_02024BEC\n\ + ldr r0, _08108334 @ =0x02016800\n\ + adds r0, 0x18\n\ + adds r0, r6, r0\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 _08108364\n\ + movs r0, 0x1\n\ + str r0, [r4]\n\ + b _08108364\n\ + .align 2, 0\n\ _08108328: .4byte gUnknown_083F62BC\n\ _0810832C: .4byte 0x0000ffff\n\ _08108330: .4byte gBattleMoves\n\ @@ -1001,113 +927,113 @@ _08108350: .4byte gUnknown_02024BE6\n\ _08108354: .4byte gUnknown_02024C08\n\ _08108358: .4byte gUnknown_02024BEC\n\ _0810835C:\n\ - mov r1, sp\n\ - add r1, r8\n\ - movs r0, 0\n\ - str r0, [r1]\n\ + mov r1, sp\n\ + add r1, r8\n\ + movs r0, 0\n\ + str r0, [r1]\n\ _08108364:\n\ - mov r6, r10\n\ - cmp r6, 0x3\n\ - ble _08108276\n\ - movs r6, 0\n\ - ldr r1, _081083A4 @ =0x02016800\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 2\n\ - add r0, sp\n\ - ldr r2, [sp]\n\ - ldr r0, [r0]\n\ - adds r5, r1, 0\n\ - ldr r4, _081083A8 @ =gAIScriptPtr\n\ - cmp r2, r0\n\ - bgt _0810839A\n\ - adds r3, r5, 0\n\ - mov r2, sp\n\ + mov r6, r10\n\ + cmp r6, 0x3\n\ + ble _08108276\n\ + movs r6, 0\n\ + ldr r1, _081083A4 @ =0x02016800\n\ + ldrb r0, [r1, 0x1]\n\ + lsls r0, 2\n\ + add r0, sp\n\ + ldr r2, [sp]\n\ + ldr r0, [r0]\n\ + adds r5, r1, 0\n\ + ldr r4, _081083A8 @ =gAIScriptPtr\n\ + cmp r2, r0\n\ + bgt _0810839A\n\ + adds r3, r5, 0\n\ + mov r2, sp\n\ _08108384:\n\ - adds r2, 0x4\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _0810839A\n\ - ldrb r0, [r3, 0x1]\n\ - lsls r0, 2\n\ - add r0, sp\n\ - ldr r1, [r2]\n\ - ldr r0, [r0]\n\ - cmp r1, r0\n\ - ble _08108384\n\ + adds r2, 0x4\n\ + adds r6, 0x1\n\ + cmp r6, 0x3\n\ + bgt _0810839A\n\ + ldrb r0, [r3, 0x1]\n\ + lsls r0, 2\n\ + add r0, sp\n\ + ldr r1, [r2]\n\ + ldr r0, [r0]\n\ + cmp r1, r0\n\ + ble _08108384\n\ _0810839A:\n\ - cmp r6, 0x4\n\ - bne _081083AC\n\ - movs r0, 0x2\n\ - str r0, [r5, 0x8]\n\ - b _081083B8\n\ - .align 2, 0\n\ + cmp r6, 0x4\n\ + bne _081083AC\n\ + movs r0, 0x2\n\ + str r0, [r5, 0x8]\n\ + b _081083B8\n\ + .align 2, 0\n\ _081083A4: .4byte 0x02016800\n\ _081083A8: .4byte gAIScriptPtr\n\ _081083AC:\n\ - movs r0, 0x1\n\ - str r0, [r5, 0x8]\n\ - b _081083B8\n\ + movs r0, 0x1\n\ + str r0, [r5, 0x8]\n\ + b _081083B8\n\ _081083B2:\n\ - movs r0, 0\n\ - str r0, [r5, 0x8]\n\ - ldr r4, _081083D0 @ =gAIScriptPtr\n\ + movs r0, 0\n\ + str r0, [r5, 0x8]\n\ + ldr r4, _081083D0 @ =gAIScriptPtr\n\ _081083B8:\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - str r0, [r4]\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\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + str r0, [r4]\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\ _081083D0: .4byte gAIScriptPtr\n\ - .syntax divided\n"); + .syntax divided\n"); } void BattleAICmd_get_move(void) { - if (gAIScriptPtr[1] == USER) - gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C07]; - else - gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C08]; + if (gAIScriptPtr[1] == USER) + gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C07]; + else + gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C08]; - gAIScriptPtr += 2; + gAIScriptPtr += 2; } void BattleAICmd_if_type(void) { - if ( gAIScriptPtr[1] == gAIThinkingSpace.unk8 ) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + if ( gAIScriptPtr[1] == gAIThinkingSpace.unk8 ) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_unk_27(void) // if_not_type { - if ( gAIScriptPtr[1] != gAIThinkingSpace.unk8 ) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + if ( gAIScriptPtr[1] != gAIThinkingSpace.unk8 ) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_if_would_go_first(void) { - if ( b_first_side(gUnknown_02024C07, gUnknown_02024C08, 1) == gAIScriptPtr[1] ) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + if ( b_first_side(gUnknown_02024C07, gUnknown_02024C08, 1) == gAIScriptPtr[1] ) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_if_would_not_go_first(void) { - if ( b_first_side(gUnknown_02024C07, gUnknown_02024C08, 1) != gAIScriptPtr[1] ) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; + if ( b_first_side(gUnknown_02024C07, gUnknown_02024C08, 1) != gAIScriptPtr[1] ) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; } void BattleAICmd_unk_2A(void) @@ -1119,143 +1045,143 @@ void BattleAICmd_unk_2B(void) __attribute__((naked)) void BattleAICmd_count_alive_pokemon(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - ldr r1, _08108550 @ =0x02016800\n\ - movs r0, 0\n\ - str r0, [r1, 0x8]\n\ - ldr r0, _08108554 @ =gAIScriptPtr\n\ - ldr r0, [r0]\n\ - ldrb r0, [r0, 0x1]\n\ - cmp r0, 0x1\n\ - bne _0810855C\n\ - ldr r0, _08108558 @ =gUnknown_02024C07\n\ - b _0810855E\n\ - .align 2, 0\n\ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + ldr r1, _08108550 @ =0x02016800\n\ + movs r0, 0\n\ + str r0, [r1, 0x8]\n\ + ldr r0, _08108554 @ =gAIScriptPtr\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x1]\n\ + cmp r0, 0x1\n\ + bne _0810855C\n\ + ldr r0, _08108558 @ =gUnknown_02024C07\n\ + b _0810855E\n\ + .align 2, 0\n\ _08108550: .4byte 0x02016800\n\ _08108554: .4byte gAIScriptPtr\n\ _08108558: .4byte gUnknown_02024C07\n\ _0810855C:\n\ - ldr r0, _081085A8 @ =gUnknown_02024C08\n\ + ldr r0, _081085A8 @ =gUnknown_02024C08\n\ _0810855E:\n\ - ldrb r5, [r0]\n\ - adds r0, r5, 0\n\ - bl battle_side_get_owner\n\ - lsls r0, 24\n\ - ldr r1, _081085AC @ =gEnemyParty\n\ - mov r9, r1\n\ - cmp r0, 0\n\ - bne _08108574\n\ - ldr r0, _081085B0 @ =gPlayerParty\n\ - mov r9, r0\n\ + ldrb r5, [r0]\n\ + adds r0, r5, 0\n\ + bl battle_side_get_owner\n\ + lsls r0, 24\n\ + ldr r1, _081085AC @ =gEnemyParty\n\ + mov r9, r1\n\ + cmp r0, 0\n\ + bne _08108574\n\ + ldr r0, _081085B0 @ =gPlayerParty\n\ + mov r9, r0\n\ _08108574:\n\ - ldr r0, _081085B4 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _081085BC\n\ - ldr r4, _081085B8 @ =gUnknown_02024A6A\n\ - lsls r0, r5, 1\n\ - adds r0, r4\n\ - ldrb r0, [r0]\n\ - mov r8, r0\n\ - adds r0, r5, 0\n\ - bl battle_get_per_side_status\n\ - movs r1, 0x2\n\ - eors r0, r1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl battle_get_side_with_given_state\n\ - lsls r0, 24\n\ - lsrs r0, 23\n\ - adds r0, r4\n\ - ldrb r6, [r0]\n\ - b _081085C6\n\ - .align 2, 0\n\ + ldr r0, _081085B4 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _081085BC\n\ + ldr r4, _081085B8 @ =gUnknown_02024A6A\n\ + lsls r0, r5, 1\n\ + adds r0, r4\n\ + ldrb r0, [r0]\n\ + mov r8, r0\n\ + adds r0, r5, 0\n\ + bl battle_get_per_side_status\n\ + movs r1, 0x2\n\ + eors r0, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl battle_get_side_with_given_state\n\ + lsls r0, 24\n\ + lsrs r0, 23\n\ + adds r0, r4\n\ + ldrb r6, [r0]\n\ + b _081085C6\n\ + .align 2, 0\n\ _081085A8: .4byte gUnknown_02024C08\n\ _081085AC: .4byte gEnemyParty\n\ _081085B0: .4byte gPlayerParty\n\ _081085B4: .4byte gBattleTypeFlags\n\ _081085B8: .4byte gUnknown_02024A6A\n\ _081085BC:\n\ - ldr r1, _08108624 @ =gUnknown_02024A6A\n\ - lsls r0, r5, 1\n\ - adds r0, r1\n\ - ldrb r6, [r0]\n\ - mov r8, r6\n\ + ldr r1, _08108624 @ =gUnknown_02024A6A\n\ + lsls r0, r5, 1\n\ + adds r0, r1\n\ + ldrb r6, [r0]\n\ + mov r8, r6\n\ _081085C6:\n\ - movs r5, 0\n\ - ldr r7, _08108628 @ =0x02016800\n\ + movs r5, 0\n\ + ldr r7, _08108628 @ =0x02016800\n\ _081085CA:\n\ - cmp r5, r8\n\ - beq _08108608\n\ - cmp r5, r6\n\ - beq _08108608\n\ - movs r0, 0x64\n\ - muls r0, r5\n\ - mov r1, r9\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _08108608\n\ - adds r0, r4, 0\n\ - movs r1, 0x41\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _08108608\n\ - adds r0, r4, 0\n\ - movs r1, 0x41\n\ - bl GetMonData\n\ - movs r1, 0xCE\n\ - lsls r1, 1\n\ - cmp r0, r1\n\ - beq _08108608\n\ - ldr r0, [r7, 0x8]\n\ - adds r0, 0x1\n\ - str r0, [r7, 0x8]\n\ + cmp r5, r8\n\ + beq _08108608\n\ + cmp r5, r6\n\ + beq _08108608\n\ + movs r0, 0x64\n\ + muls r0, r5\n\ + mov r1, r9\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08108608\n\ + adds r0, r4, 0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08108608\n\ + adds r0, r4, 0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + movs r1, 0xCE\n\ + lsls r1, 1\n\ + cmp r0, r1\n\ + beq _08108608\n\ + ldr r0, [r7, 0x8]\n\ + adds r0, 0x1\n\ + str r0, [r7, 0x8]\n\ _08108608:\n\ - adds r5, 0x1\n\ - cmp r5, 0x5\n\ - ble _081085CA\n\ - ldr r1, _0810862C @ =gAIScriptPtr\n\ - ldr r0, [r1]\n\ - adds r0, 0x2\n\ - str r0, [r1]\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ + adds r5, 0x1\n\ + cmp r5, 0x5\n\ + ble _081085CA\n\ + ldr r1, _0810862C @ =gAIScriptPtr\n\ + ldr r0, [r1]\n\ + adds r0, 0x2\n\ + str r0, [r1]\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ _08108624: .4byte gUnknown_02024A6A\n\ _08108628: .4byte 0x02016800\n\ _0810862C: .4byte gAIScriptPtr\n\ - .syntax divided"); + .syntax divided"); } void BattleAICmd_unk_2D(void) { - gAIThinkingSpace.unk8 = gAIThinkingSpace.unk2; - gAIScriptPtr += 1; + gAIThinkingSpace.unk8 = gAIThinkingSpace.unk2; + gAIScriptPtr += 1; } void BattleAICmd_unk_2E(void) { - gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].effect; - gAIScriptPtr += 1; + gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].effect; + gAIScriptPtr += 1; } void BattleAICmd_get_ability(void) { u8 var; - + if(gAIScriptPtr[1] == USER) var = gUnknown_02024C07; else @@ -1321,270 +1247,137 @@ void BattleAICmd_get_ability(void) } } -// this should probably be in battle.h after this file is fully decompiled. -extern struct -{ - u8 unknownStuff[0x16000]; - struct - { - u8 filler0[0x1C]; - u8 unk1C; - u8 filler1D[2]; - u8 unk1F; - u8 filler16020[0x7E0]; - } unk_2016000; - struct AI_ThinkingStruct gAIThinkingSpace; -} ewram; //0x02000000 - -#ifdef NONMATCHING void BattleAICmd_unk_30(void) { - s32 loopCounter; - - gUnknown_02024DEC = 0; - ewram.unk_2016000.unk1C = 0; - ewram.unk_2016000.unk1F = 1; - gUnknown_02024C68 = 0; - gCritMultiplier = 1; - ewram.gAIThinkingSpace.unk8 = 0; - - for(loopCounter = 0; loopCounter <= 3; loopCounter++) - { - gUnknown_02024BEC = 40; - gUnknown_02024BE6 = gBattleMons[gUnknown_02024C07].moves[loopCounter]; - - if (gUnknown_02024BE6) - { - move_effectiveness_something(gUnknown_02024BE6, gUnknown_02024C07, gUnknown_02024C08); - - // reduce by 1/3. - if (gUnknown_02024BEC == 120) - gUnknown_02024BEC = 80; - if(gUnknown_02024BEC == 240) - gUnknown_02024BEC = 160; - if(gUnknown_02024BEC == 30) - gUnknown_02024BEC = 20; - if(gUnknown_02024BEC == 15) - gUnknown_02024BEC = 10; - - if(gUnknown_02024C68 & 8) - gUnknown_02024BEC = 0; - - if (ewram.gAIThinkingSpace.unk8 < gUnknown_02024BEC) - ewram.gAIThinkingSpace.unk8 = gUnknown_02024BEC; - } - } - gAIScriptPtr += 1; -} -#else -__attribute__((naked)) -void BattleAICmd_unk_30(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - ldr r0, _0810885C @ =gUnknown_02024DEC\n\ - movs r2, 0\n\ - strh r2, [r0]\n\ - ldr r1, _08108860 @ =0x02000000\n\ - ldr r3, _08108864 @ =0x0001601c\n\ - adds r0, r1, r3\n\ - movs r4, 0\n\ - strb r2, [r0]\n\ - adds r3, 0x3\n\ - adds r0, r1, r3\n\ - movs r3, 0x1\n\ - strb r3, [r0]\n\ - ldr r0, _08108868 @ =gUnknown_02024C68\n\ - strb r2, [r0]\n\ - ldr r0, _0810886C @ =gCritMultiplier\n\ - strb r3, [r0]\n\ - movs r0, 0xB4\n\ - lsls r0, 9\n\ - adds r1, r0\n\ - str r4, [r1, 0x8]\n\ - movs r5, 0\n\ - ldr r4, _08108870 @ =gUnknown_02024BEC\n\ - ldr r7, _08108874 @ =gUnknown_02024BE6\n\ - ldr r3, _08108878 @ =gUnknown_02024A8C\n\ - mov r8, r3\n\ - ldr r6, _0810887C @ =gUnknown_02024C07\n\ -_081087DA:\n\ - movs r0, 0x28\n\ - str r0, [r4]\n\ - lsls r1, r5, 1\n\ - ldrb r2, [r6]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r1, r0\n\ - add r1, r8\n\ - ldrh r0, [r1]\n\ - strh r0, [r7]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _08108844\n\ - ldrh r0, [r7]\n\ - ldrb r1, [r6]\n\ - ldr r2, _08108880 @ =gUnknown_02024C08\n\ - ldrb r2, [r2]\n\ - bl move_effectiveness_something\n\ - ldr r0, [r4]\n\ - cmp r0, 0x78\n\ - bne _0810880A\n\ - movs r0, 0x50\n\ - str r0, [r4]\n\ -_0810880A:\n\ - ldr r0, [r4]\n\ - cmp r0, 0xF0\n\ - bne _08108814\n\ - movs r0, 0xA0\n\ - str r0, [r4]\n\ -_08108814:\n\ - ldr r0, [r4]\n\ - cmp r0, 0x1E\n\ - bne _0810881E\n\ - movs r0, 0x14\n\ - str r0, [r4]\n\ -_0810881E:\n\ - ldr r0, [r4]\n\ - cmp r0, 0xF\n\ - bne _08108828\n\ - movs r0, 0xA\n\ - str r0, [r4]\n\ -_08108828:\n\ - ldr r0, _08108868 @ =gUnknown_02024C68\n\ - ldrb r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08108838\n\ - movs r0, 0\n\ - str r0, [r4]\n\ -_08108838:\n\ - ldr r2, _08108884 @ =0x02016800\n\ - ldr r0, [r2, 0x8]\n\ - ldr r1, [r4]\n\ - cmp r0, r1\n\ - bcs _08108844\n\ - str r1, [r2, 0x8]\n\ -_08108844:\n\ - adds r5, 0x1\n\ - cmp r5, 0x3\n\ - ble _081087DA\n\ - ldr r1, _08108888 @ =gAIScriptPtr\n\ - ldr r0, [r1]\n\ - adds r0, 0x1\n\ - str r0, [r1]\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0810885C: .4byte gUnknown_02024DEC\n\ -_08108860: .4byte 0x02000000\n\ -_08108864: .4byte 0x0001601c\n\ -_08108868: .4byte gUnknown_02024C68\n\ -_0810886C: .4byte gCritMultiplier\n\ -_08108870: .4byte gUnknown_02024BEC\n\ -_08108874: .4byte gUnknown_02024BE6\n\ -_08108878: .4byte gUnknown_02024A8C\n\ -_0810887C: .4byte gUnknown_02024C07\n\ -_08108880: .4byte gUnknown_02024C08\n\ -_08108884: .4byte 0x02016800\n\ -_08108888: .4byte gAIScriptPtr\n\ - .syntax divided\n"); + s32 i; + struct AI_ThinkingStruct *ai; + struct AI_ThinkingStruct *ai2; + + gUnknown_02024DEC = 0; + battle_2000000.unk.unk1 = 0; + battle_2000000.unk.unk4 = 1; + gUnknown_02024C68 = 0; + gCritMultiplier = 1; + ai = &battle_2000000.ai; + ai->unk8 = 0; + + for(i = 0; i < 4; i++) + { + gUnknown_02024BEC = 40; + gUnknown_02024BE6 = gBattleMons[gUnknown_02024C07].moves[i]; + + if (gUnknown_02024BE6) + { + move_effectiveness_something(gUnknown_02024BE6, gUnknown_02024C07, gUnknown_02024C08); + + // reduce by 1/3. + if (gUnknown_02024BEC == 120) + gUnknown_02024BEC = 80; + if(gUnknown_02024BEC == 240) + gUnknown_02024BEC = 160; + if(gUnknown_02024BEC == 30) + gUnknown_02024BEC = 20; + if(gUnknown_02024BEC == 15) + gUnknown_02024BEC = 10; + + if(gUnknown_02024C68 & 8) + gUnknown_02024BEC = 0; + + ai2 = &battle_2000000.ai; + if (ai2->unk8 < gUnknown_02024BEC) + ai2->unk8 = gUnknown_02024BEC; + } + } + gAIScriptPtr += 1; } -#endif // same function as above but no for loop. __attribute__((naked)) void BattleAICmd_if_damage_bonus(void) { - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - ldr r0, _08108928 @ =gUnknown_02024DEC\n\ - movs r1, 0\n\ - strh r1, [r0]\n\ - ldr r2, _0810892C @ =0x02000000\n\ - ldr r3, _08108930 @ =0x0001601c\n\ - adds r0, r2, r3\n\ - strb r1, [r0]\n\ - adds r3, 0x3\n\ - adds r0, r2, r3\n\ - movs r3, 0x1\n\ - strb r3, [r0]\n\ - ldr r5, _08108934 @ =gUnknown_02024C68\n\ - strb r1, [r5]\n\ - ldr r0, _08108938 @ =gCritMultiplier\n\ - strb r3, [r0]\n\ - ldr r4, _0810893C @ =gUnknown_02024BEC\n\ - movs r0, 0x28\n\ - str r0, [r4]\n\ - ldr r1, _08108940 @ =gUnknown_02024BE6\n\ - movs r0, 0xB4\n\ - lsls r0, 9\n\ - adds r2, r0\n\ - ldrh r0, [r2, 0x2]\n\ - strh r0, [r1]\n\ - ldrh r0, [r1]\n\ - ldr r1, _08108944 @ =gUnknown_02024C07\n\ - ldrb r1, [r1]\n\ - ldr r2, _08108948 @ =gUnknown_02024C08\n\ - ldrb r2, [r2]\n\ - bl move_effectiveness_something\n\ - ldr r0, [r4]\n\ - cmp r0, 0x78\n\ - bne _081088D6\n\ - movs r0, 0x50\n\ - str r0, [r4]\n\ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r0, _08108928 @ =gUnknown_02024DEC\n\ + movs r1, 0\n\ + strh r1, [r0]\n\ + ldr r2, _0810892C @ =0x02000000\n\ + ldr r3, _08108930 @ =0x0001601c\n\ + adds r0, r2, r3\n\ + strb r1, [r0]\n\ + adds r3, 0x3\n\ + adds r0, r2, r3\n\ + movs r3, 0x1\n\ + strb r3, [r0]\n\ + ldr r5, _08108934 @ =gUnknown_02024C68\n\ + strb r1, [r5]\n\ + ldr r0, _08108938 @ =gCritMultiplier\n\ + strb r3, [r0]\n\ + ldr r4, _0810893C @ =gUnknown_02024BEC\n\ + movs r0, 0x28\n\ + str r0, [r4]\n\ + ldr r1, _08108940 @ =gUnknown_02024BE6\n\ + movs r0, 0xB4\n\ + lsls r0, 9\n\ + adds r2, r0\n\ + ldrh r0, [r2, 0x2]\n\ + strh r0, [r1]\n\ + ldrh r0, [r1]\n\ + ldr r1, _08108944 @ =gUnknown_02024C07\n\ + ldrb r1, [r1]\n\ + ldr r2, _08108948 @ =gUnknown_02024C08\n\ + ldrb r2, [r2]\n\ + bl move_effectiveness_something\n\ + ldr r0, [r4]\n\ + cmp r0, 0x78\n\ + bne _081088D6\n\ + movs r0, 0x50\n\ + str r0, [r4]\n\ _081088D6:\n\ - ldr r0, [r4]\n\ - cmp r0, 0xF0\n\ - bne _081088E0\n\ - movs r0, 0xA0\n\ - str r0, [r4]\n\ + ldr r0, [r4]\n\ + cmp r0, 0xF0\n\ + bne _081088E0\n\ + movs r0, 0xA0\n\ + str r0, [r4]\n\ _081088E0:\n\ - ldr r0, [r4]\n\ - cmp r0, 0x1E\n\ - bne _081088EA\n\ - movs r0, 0x14\n\ - str r0, [r4]\n\ + ldr r0, [r4]\n\ + cmp r0, 0x1E\n\ + bne _081088EA\n\ + movs r0, 0x14\n\ + str r0, [r4]\n\ _081088EA:\n\ - ldr r0, [r4]\n\ - cmp r0, 0xF\n\ - bne _081088F4\n\ - movs r0, 0xA\n\ - str r0, [r4]\n\ + ldr r0, [r4]\n\ + cmp r0, 0xF\n\ + bne _081088F4\n\ + movs r0, 0xA\n\ + str r0, [r4]\n\ _081088F4:\n\ - ldrb r1, [r5]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08108902\n\ - movs r0, 0\n\ - str r0, [r4]\n\ + ldrb r1, [r5]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08108902\n\ + movs r0, 0\n\ + str r0, [r4]\n\ _08108902:\n\ - ldrb r0, [r4]\n\ - ldr r3, _0810894C @ =gAIScriptPtr\n\ - ldr r2, [r3]\n\ - ldrb r1, [r2, 0x1]\n\ - cmp r0, r1\n\ - bne _08108950\n\ - ldrb r1, [r2, 0x2]\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 16\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x5]\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - str r1, [r3]\n\ - b _08108954\n\ - .align 2, 0\n\ + ldrb r0, [r4]\n\ + ldr r3, _0810894C @ =gAIScriptPtr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + cmp r0, r1\n\ + bne _08108950\n\ + ldrb r1, [r2, 0x2]\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x5]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ + b _08108954\n\ + .align 2, 0\n\ _08108928: .4byte gUnknown_02024DEC\n\ _0810892C: .4byte 0x02000000\n\ _08108930: .4byte 0x0001601c\n\ @@ -1596,13 +1389,13 @@ _08108944: .4byte gUnknown_02024C07\n\ _08108948: .4byte gUnknown_02024C08\n\ _0810894C: .4byte gAIScriptPtr\n\ _08108950:\n\ - adds r0, r2, 0x6\n\ - str r0, [r3]\n\ + adds r0, r2, 0x6\n\ + str r0, [r3]\n\ _08108954:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); } void BattleAICmd_unk_32(void) |