diff options
-rw-r--r-- | asm/battle_ai.s | 103 | ||||
-rw-r--r-- | src/battle_ai.c | 37 |
2 files changed, 37 insertions, 103 deletions
diff --git a/asm/battle_ai.s b/asm/battle_ai.s index 829768e17..426790c89 100644 --- a/asm/battle_ai.s +++ b/asm/battle_ai.s @@ -6,109 +6,6 @@ .text - thumb_func_start BattleAICmd_if_status_in_party -BattleAICmd_if_status_in_party: @ 8108964 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _0810897C @ =gAIScriptPtr - ldr r1, [r0] - ldrb r1, [r1, 0x1] - cmp r1, 0x1 - bne _081089A4 - ldr r1, _08108980 @ =gEnemyParty - b _081089A6 - .align 2, 0 -_0810897C: .4byte gAIScriptPtr -_08108980: .4byte gEnemyParty -_08108984: - ldr r3, _081089A0 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2, 0x6] - ldrb r0, [r2, 0x7] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x8] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x9] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08108A12 - .align 2, 0 -_081089A0: .4byte gAIScriptPtr -_081089A4: - ldr r1, _08108A20 @ =gPlayerParty -_081089A6: - mov r9, r1 - ldr r1, [r0] - ldrb r7, [r1, 0x2] - ldrb r0, [r1, 0x3] - lsls r0, 8 - orrs r7, r0 - ldrb r0, [r1, 0x4] - lsls r0, 16 - orrs r7, r0 - ldrb r0, [r1, 0x5] - lsls r0, 24 - orrs r7, r0 - movs r0, 0 - mov r8, r0 - movs r1, 0xCE - lsls r1, 1 - mov r10, r1 -_081089C8: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - add r4, r9 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - cmp r5, 0 - beq _08108A00 - cmp r5, r10 - beq _08108A00 - cmp r6, 0 - beq _08108A00 - cmp r0, r7 - beq _08108984 -_08108A00: - movs r0, 0x1 - add r8, r0 - mov r1, r8 - cmp r1, 0x5 - ble _081089C8 - ldr r1, _08108A24 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0xA - str r0, [r1] -_08108A12: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08108A20: .4byte gPlayerParty -_08108A24: .4byte gAIScriptPtr - thumb_func_end BattleAICmd_if_status_in_party - thumb_func_start BattleAICmd_if_status_not_in_party BattleAICmd_if_status_not_in_party: @ 8108A28 push {r4-r7,lr} diff --git a/src/battle_ai.c b/src/battle_ai.c index 1b703679d..7c9b7f17e 100644 --- a/src/battle_ai.c +++ b/src/battle_ai.c @@ -1329,3 +1329,40 @@ void BattleAICmd_unk_32(void) void BattleAICmd_unk_33(void) {} + +void BattleAICmd_if_status_in_party(void) +{ + struct Pokemon *party; + int i; + u32 statusToCompareTo; + + if (gAIScriptPtr[1] == USER) + { + party = gEnemyParty; + } + else if (0) + { + // what is going on here? + follow_jump: + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + return; + } + else + { + party = gPlayerParty; + } + + statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2); + + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&party[i], MON_DATA_SPECIES); + u16 hp = GetMonData(&party[i], MON_DATA_HP); + u32 status = GetMonData(&party[i], MON_DATA_STATUS); + + if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) + goto follow_jump; + } + + gAIScriptPtr += 10; +} |