diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2016-11-14 22:28:20 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-11-14 19:28:20 -0800 |
commit | a07e8aa2f473ffe4217e0d48c20c14c67b9e9d99 (patch) | |
tree | cbf6e3e9bb51a3495df47a93ebb8dbb0bf744e4d /src | |
parent | c293f7966e4e991e404631dd445d29ce1f43542b (diff) |
Start decompiling battle_ai.c cmd functions (#100)
* begin decompiling battle AI macros
* decompile more battle AI macros
* nonmatching function
* decompile BattleAICmd_get_ability
* current nonmatching work
* get BattleAICmd_unk_30 a bit closer
* get battle_ai.c into a mergable state.
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_ai.c | 1383 |
1 files changed, 1346 insertions, 37 deletions
diff --git a/src/battle_ai.c b/src/battle_ai.c index ec15a7bf6..945176b64 100644 --- a/src/battle_ai.c +++ b/src/battle_ai.c @@ -3,45 +3,70 @@ #include "pokemon.h" #include "rng.h" +#define AIScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) +#define AIScriptRead16(ptr) ((ptr)[0] | (ptr)[1] << 8) +#define AIScriptRead8(ptr) ((ptr)[0]) + +/* +this file is a mess. I stopped part way because it starts to involve a huge struct that begins at 0x2000000 and goes +all the way to at least 0x2016800, in addition to extremely hard functions that I can't seem to get right. I am leaving this file +as it currently is until someone bothers to document this huge struct. +*/ + extern u8 sub_8015A98(u8, u8, u8); extern u8 battle_side_get_owner(u8); -extern u32 battle_get_per_side_status(u8); +extern s16 battle_get_per_side_status(u8); +extern u8 b_first_side(u8, u8, u8); extern u16 gUnknown_020239F8; extern u8 gUnknown_02024A60; extern u8 gUnknown_02024C07; extern u8 gUnknown_02024C08; 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_02024C34[]; -extern u8 *gUnknown_02039238; +extern u32 gUnknown_02024ACC[]; +extern u32 gUnknown_02024C98[]; +extern u16 gUnknown_02024C7A[]; +extern struct BattlePokemon gUnknown_02024A8C[]; +extern u8 gUnknown_030042E0[]; +extern u8 *gAIScriptPtr; extern u16 gTrainerBattleOpponent; -extern struct Trainer gTrainers[]; extern u32 gBitTable[]; extern u8 *BattleAIs[]; +extern struct Trainer gTrainers[]; extern struct BattlePokemon gBattleMons[]; +extern struct BattleMove gBattleMoves[]; +extern struct BaseStats gBaseStats[]; extern void (*gBattleAICmdTable[])(void); struct UnknownStruct1 { - u16 unk0[2][8]; - u8 unk20[2]; - u8 unk22[2]; - u16 items[4]; - u8 unk8; +/* 0x00 */ u16 unk0[2][8]; +/* 0x20 */ u8 unk20[2]; +/* 0x22 */ u8 unk22[2]; +/* 0x24 */ u16 items[4]; +/* 0x2C */ u8 unk8; }; -struct UnknownStruct2 -{ - u8 unk0; - u8 unk1; - u16 unk2; - u8 unk4[4]; - u8 filler8[4]; - u32 aiFlags; - u8 unk10; - u8 unk11; - u8 filler12[6]; - u8 unk18[4]; +struct UnknownStruct2 /* 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 unk11; +/* 0x12 */ u8 filler12[6]; +/* 0x18 */ u8 unk18[4]; }; struct UnknownStruct3 @@ -50,6 +75,22 @@ struct UnknownStruct3 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 UnknownStruct2 unk_2016800; extern struct UnknownStruct1 unk_2016A00; extern struct UnknownStruct3 unk_2016C00; @@ -88,14 +129,14 @@ void sub_810715C(void) for(i = 0; (u32)i < 28; i++) data[i] = 0; for(i = 0; i < 4; i++) - unk_2016800.unk4[i] = 100; + unk_2016800.score[i] = 100; r7 = sub_8015A98(gUnknown_02024A60, 0, 0xFF); for(i = 0; i < 4; i++) { u16 rand; if(gBitTable[i] & r7) - unk_2016800.unk4[i] = 0; + unk_2016800.score[i] = 0; rand = Random(); unk_2016800.unk18[i] = 100 - (rand & 0xF); } @@ -139,26 +180,26 @@ u8 sub_81072A8(void) } unk_2016800.aiFlags >>= 1; unk_2016800.unk11++; - unk_2016800.unk1 = 0; + unk_2016800.moveConsidered = 0; } if(unk_2016800.unk10 & 2) return 4; if(unk_2016800.unk10 & 4) return 5; r5 = 1; - arr1[0] = unk_2016800.unk4[0]; + arr1[0] = unk_2016800.score[0]; arr2[0] = 0; for(i = 1; i < 4; i++) { - if(arr1[0] < (s8)unk_2016800.unk4[i]) + if(arr1[0] < (s8)unk_2016800.score[i]) { r5 = 1; - arr1[0] = unk_2016800.unk4[i]; + arr1[0] = unk_2016800.score[i]; arr2[0] = i; } - if(arr1[0] == (s8)unk_2016800.unk4[i]) + if(arr1[0] == (s8)unk_2016800.score[i]) { - arr1[r5] = unk_2016800.unk4[i]; + arr1[r5] = unk_2016800.score[i]; arr2[r5++] = i; } } @@ -174,29 +215,29 @@ void sub_8107374(void) case 3: //Needed to match. break; case 0: - gUnknown_02039238 = BattleAIs[unk_2016800.unk11]; - if(gBattleMons[gUnknown_02024C07].pp[unk_2016800.unk1] == 0) + gAIScriptPtr = BattleAIs[unk_2016800.unk11]; + if(gBattleMons[gUnknown_02024C07].pp[unk_2016800.moveConsidered] == 0) { unk_2016800.unk2 = 0; } else { - unk_2016800.unk2 = gBattleMons[gUnknown_02024C07].moves[unk_2016800.unk1]; + unk_2016800.unk2 = gBattleMons[gUnknown_02024C07].moves[unk_2016800.moveConsidered]; } unk_2016800.unk0++; break; case 1: if(unk_2016800.unk2 != 0) - gBattleAICmdTable[*(u8 *)gUnknown_02039238](); //weird... + gBattleAICmdTable[*(u8 *)gAIScriptPtr](); //weird... else { - unk_2016800.unk4[unk_2016800.unk1] = 0; + unk_2016800.score[unk_2016800.moveConsidered] = 0; unk_2016800.unk10 |= 1; } if(unk_2016800.unk10 & 1) { - unk_2016800.unk1++; - if(unk_2016800.unk1 < 4 && !(unk_2016800.unk10 & 8)) + unk_2016800.moveConsidered++; + if(unk_2016800.moveConsidered < 4 && !(unk_2016800.unk10 & 8)) unk_2016800.unk0 = 0; else unk_2016800.unk0++; @@ -276,11 +317,1279 @@ void unref_sub_81074A0(u8 a) void sub_81074C4(u8 a, u8 b) { if(battle_side_get_owner(a) == 0) - unk_2016A00.unk20[battle_get_per_side_status(a) % 2] = b; + unk_2016A00.unk20[battle_get_per_side_status(a) & 1] = b; } void sub_81074F8(u8 a, u8 b) { if(battle_side_get_owner(a) == 0) - unk_2016A00.unk22[battle_get_per_side_status(a) % 2] = b; + unk_2016A00.unk22[battle_get_per_side_status(a) & 1] = 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 = AIScriptRead32(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 = AIScriptRead32(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 = AIScriptRead32(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 = AIScriptRead32(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +void BattleAICmd_score(void) +{ + unk_2016800.score[unk_2016800.moveConsidered] += gAIScriptPtr[1]; // add the result to the array of the move consider's score. + + if(unk_2016800.score[unk_2016800.moveConsidered] < 0) // if the score is negative, flatten it to 0. + unk_2016800.score[unk_2016800.moveConsidered] = 0; + + gAIScriptPtr += 2; // AI return. +} + +void BattleAICmd_if_hp_less_than(void) +{ + u16 var; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) < gAIScriptPtr[2]) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +void BattleAICmd_if_hp_more_than(void) +{ + u16 var; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) > gAIScriptPtr[2]) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +void BattleAICmd_if_hp_equal(void) +{ + u16 var; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) == gAIScriptPtr[2]) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +void BattleAICmd_if_hp_not_equal(void) +{ + u16 var; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) != gAIScriptPtr[2]) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +void BattleAICmd_if_status(void) +{ + u16 var; + u32 temp; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (gBattleMons[var].status1 & temp) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +void BattleAICmd_if_not_status(void) +{ + u16 var; + u32 temp; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (!(gBattleMons[var].status1 & temp)) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +void BattleAICmd_if_status2(void) +{ + u8 var; + u32 temp; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (gBattleMons[var].status2 & temp) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +void BattleAICmd_if_not_status2(void) +{ + u8 var; + u32 temp; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (!(gBattleMons[var].status2 & temp)) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +void BattleAICmd_if_status3(void) +{ + u8 var; + u32 temp; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if ( gUnknown_02024C98[var] & temp ) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +void BattleAICmd_if_not_status3(void) +{ + u8 var; + u32 temp; + + if ( gAIScriptPtr[1] == 1 ) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + + temp = AIScriptRead32(gAIScriptPtr + 2); + + if (!(gUnknown_02024C98[var] & temp)) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +void BattleAICmd_if_status4(void) +{ + u8 var; + u32 temp; + u32 temp2; + + if ( gAIScriptPtr[1] == 1 ) + 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 = AIScriptRead32(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +void BattleAICmd_if_not_status4(void) +{ + u8 var; + u32 temp; + u32 temp2; + + if (gAIScriptPtr[1] == 1) + 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 = AIScriptRead32(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +void BattleAICmd_if_less_than(void) +{ + if (unk_2016800.unk8 < gAIScriptPtr[1]) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +void BattleAICmd_if_more_than(void) +{ + if (unk_2016800.unk8 > gAIScriptPtr[1]) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +void BattleAICmd_if_equal(void) +{ + if (unk_2016800.unk8 == gAIScriptPtr[1]) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +void BattleAICmd_if_not_equal(void) +{ + if (unk_2016800.unk8 != gAIScriptPtr[1]) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +void BattleAICmd_if_less_than_32(void) +{ + u8 *temp = AIScriptRead32(gAIScriptPtr + 1); + + if (unk_2016800.unk8 < *temp) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; +} + +void BattleAICmd_if_more_than_32(void) +{ + u8 *temp = AIScriptRead32(gAIScriptPtr + 1); + + if (unk_2016800.unk8 > *temp) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; +} + +void BattleAICmd_if_equal_32(void) +{ + u8 *temp = AIScriptRead32(gAIScriptPtr + 1); + + if (unk_2016800.unk8 == *temp) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; } + +void BattleAICmd_if_not_equal_32(void) +{ + u8 *temp = AIScriptRead32(gAIScriptPtr + 1); + + if (unk_2016800.unk8 != *temp) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; +} + +void BattleAICmd_if_move(void) +{ + u16 move = AIScriptRead16(gAIScriptPtr + 1); + + if (unk_2016800.unk2 == move) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +void BattleAICmd_if_not_move(void) +{ + u16 move = AIScriptRead16(gAIScriptPtr + 1); + + if (unk_2016800.unk2 != move) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +void BattleAICmd_if_in_bytes(void) +{ + u8 *ptr = AIScriptRead32(gAIScriptPtr + 1); + + while(*ptr != 0xFF) + { + if(unk_2016800.unk8 == *ptr) + { + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 5); + return; + } + ptr++; + } + gAIScriptPtr += 9; +} + +void BattleAICmd_if_not_in_bytes(void) +{ + u8 *ptr = AIScriptRead32(gAIScriptPtr + 1); + + while(*ptr != 0xFF) + { + if(unk_2016800.unk8 == *ptr) + { + gAIScriptPtr += 9; + return; + } + ptr++; + } + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 5); +} + +void BattleAICmd_if_in_words(void) +{ + u16 *ptr = AIScriptRead32(gAIScriptPtr + 1); + + while(*ptr != 0xFFFF) + { + if(unk_2016800.unk8 == *ptr) + { + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 5); + return; + } + ptr++; + } + gAIScriptPtr += 9; +} + +void BattleAICmd_if_not_in_words(void) +{ + u16 *ptr = AIScriptRead32(gAIScriptPtr + 1); + + while(*ptr != 0xFFFF) + { + if(unk_2016800.unk8 == *ptr) + { + gAIScriptPtr += 9; + return; + } + ptr++; + } + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 5); +} + +void BattleAICmd_if_user_can_damage(void) +{ + s32 i; + + for(i = 0; i < 4; i++) + { + if (gBattleMons[gUnknown_02024C07].moves[i] != 0 + && gBattleMoves[gBattleMons[gUnknown_02024C07].moves[i]].power != 0) + break; + } + if(i == 4) + gAIScriptPtr += 5; + else + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 1); +} + +void BattleAICmd_if_user_cant_damage(void) +{ + s32 i; + + for(i = 0; i < 4; i++) + { + if (gBattleMons[gUnknown_02024C07].moves[i] != 0 + && gBattleMoves[gBattleMons[gUnknown_02024C07].moves[i]].power != 0) + break; + } + if(i != 4) + gAIScriptPtr += 5; + else + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 1); +} + +void BattleAICmd_unk_21(void) +{ + unk_2016800.unk8 = gUnknown_030042E0[19]; + gAIScriptPtr += 1; +} + +void BattleAICmd_get_type(void) +{ + u8 typeVar = gAIScriptPtr[1]; + + switch(typeVar) + { + case 1: + unk_2016800.unk8 = gBattleMons[gUnknown_02024C07].type1; + break; + case 0: + unk_2016800.unk8 = gBattleMons[gUnknown_02024C08].type1; + break; + case 3: + unk_2016800.unk8 = gBattleMons[gUnknown_02024C07].type2; + break; + case 2: + unk_2016800.unk8 = gBattleMons[gUnknown_02024C08].type2; + break; + case 4: + unk_2016800.unk8 = gBattleMoves[unk_2016800.unk2].type; + break; + } + gAIScriptPtr += 2; +} + +void BattleAICmd_unk_23(void) +{ + unk_2016800.unk8 = gBattleMoves[unk_2016800.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\ +_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\ +_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\ +_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\ +_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\ +_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\ +_08108328: .4byte gUnknown_083F62BC\n\ +_0810832C: .4byte 0x0000ffff\n\ +_08108330: .4byte gBattleMoves\n\ +_08108334: .4byte 0x02016800\n\ +_08108338: .4byte gUnknown_02024DEC\n\ +_0810833C: .4byte 0xfffff81c\n\ +_08108340: .4byte gUnknown_02024C68\n\ +_08108344: .4byte gCritMultiplier\n\ +_08108348: .4byte gBattleMons\n\ +_0810834C: .4byte gUnknown_02024C07\n\ +_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\ +_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\ +_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\ +_081083A4: .4byte 0x02016800\n\ +_081083A8: .4byte gAIScriptPtr\n\ +_081083AC:\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\ +_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\ +_081083D0: .4byte gAIScriptPtr\n\ + .syntax divided\n"); +} + +void BattleAICmd_get_move(void) +{ + if ( gAIScriptPtr[1] == 1 ) + unk_2016800.unk8 = gUnknown_02024C34[gUnknown_02024C07]; + else + unk_2016800.unk8 = gUnknown_02024C34[gUnknown_02024C08]; + + gAIScriptPtr += 2; +} + +void BattleAICmd_if_type(void) +{ + if ( gAIScriptPtr[1] == unk_2016800.unk8 ) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +void BattleAICmd_unk_27(void) // if_not_type +{ + if ( gAIScriptPtr[1] != unk_2016800.unk8 ) + gAIScriptPtr = AIScriptRead32(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +void BattleAICmd_if_would_go_first(void) +{ + if ( b_first_side(gUnknown_02024C07, gUnknown_02024C08, 1) == gAIScriptPtr[1] ) + gAIScriptPtr = AIScriptRead32(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 = AIScriptRead32(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +void BattleAICmd_unk_2A(void) +{} + +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\ +_08108550: .4byte 0x02016800\n\ +_08108554: .4byte gAIScriptPtr\n\ +_08108558: .4byte gUnknown_02024C07\n\ +_0810855C:\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\ +_08108574:\n\ + ldr r0, _081085B4 @ =gUnknown_020239F8\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 gUnknown_020239F8\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\ +_081085C6:\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\ +_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\ +_08108624: .4byte gUnknown_02024A6A\n\ +_08108628: .4byte 0x02016800\n\ +_0810862C: .4byte gAIScriptPtr\n\ + .syntax divided"); +} + +void BattleAICmd_unk_2D(void) +{ + unk_2016800.unk8 = unk_2016800.unk2; + gAIScriptPtr += 1; +} + +void BattleAICmd_unk_2E(void) +{ + unk_2016800.unk8 = gBattleMoves[unk_2016800.unk2].effect; + gAIScriptPtr += 1; +} + +void BattleAICmd_get_ability(void) +{ + u8 var; + + if(gAIScriptPtr[1] == 1) + var = gUnknown_02024C07; + else + var = gUnknown_02024C08; + if(battle_side_get_owner(var) == 0) + { + //register u8 unk asm("r1") = battle_get_per_side_status(var) & 1; + s32 unk = battle_get_per_side_status(var) & 1; + + if(unk_2016A00.unk20[unk] != 0) + { + ((struct UnknownStruct2 *)((u8 *)&unk_2016A00 - 512))->unk8 = unk_2016A00.unk20[unk]; + gAIScriptPtr += 2; + return; + } + //_081086C8 + if(gBattleMons[var].ability == 0x17 || gBattleMons[var].ability == 0x2A || gBattleMons[var].ability == 0x47) + { + //_081086E4 + unk_2016800.unk8 = gBattleMons[var].ability; + gAIScriptPtr += 2; + return; + } + //_081086FC + if(gBaseStats[gBattleMons[var].species].ability1 != 0) + { + if(gBaseStats[gBattleMons[var].species].ability2 != 0) + { + if(Random() & 1) + { + ((struct UnknownStruct2 *)((u8 *)&unk_2016A00 - 512))->unk8 = gBaseStats[gBattleMons[var].species].ability1; + gAIScriptPtr += 2; + return; + } + //_0810873C + else + { + ((struct UnknownStruct2 *)((u8 *)&unk_2016A00 - 512))->unk8 = gBaseStats[gBattleMons[var].species].ability2; + gAIScriptPtr += 2; + return; + } + } + //_08108754 + else + { + ((struct UnknownStruct2 *)((u8 *)&unk_2016A00 - 512))->unk8 = gBaseStats[gBattleMons[var].species].ability1; + gAIScriptPtr += 2; + return; + } + } + //_08108764 + else + { + ((struct UnknownStruct2 *)((u8 *)&unk_2016A00 - 512))->unk8 = gBaseStats[gBattleMons[var].species].ability2; + gAIScriptPtr += 2; + return; + } + } + //_08108774 + unk_2016800.unk8 = gBattleMons[var].ability; + gAIScriptPtr += 2; +} + +// 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 UnknownStruct2 unk_2016800; +} 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.unk_2016800.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.unk_2016800.unk8 < gUnknown_02024BEC) + ewram.unk_2016800.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"); +} +#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\ +_081088D6:\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\ +_081088EA:\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\ +_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\ +_08108928: .4byte gUnknown_02024DEC\n\ +_0810892C: .4byte 0x02000000\n\ +_08108930: .4byte 0x0001601c\n\ +_08108934: .4byte gUnknown_02024C68\n\ +_08108938: .4byte gCritMultiplier\n\ +_0810893C: .4byte gUnknown_02024BEC\n\ +_08108940: .4byte gUnknown_02024BE6\n\ +_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\ +_08108954:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +void BattleAICmd_unk_32(void) +{} + +void BattleAICmd_unk_33(void) +{} |