mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
Moved ChooseAiMove nonmatching to C file
This commit is contained in:
parent
fb220bff0e
commit
b0b0b958d2
499
asm/itcm.s
499
asm/itcm.s
|
|
@ -4137,502 +4137,3 @@ sub_01FFB62C: ; 0x01FFB62C
|
|||
.global _01FFB654
|
||||
_01FFB654:
|
||||
.byte 0x05, 0x03, 0x00, 0x00
|
||||
|
||||
; https://decomp.me/scratch/zg7V6
|
||||
#ifndef NONMATCHING
|
||||
arm_func_start ChooseAiMove
|
||||
ChooseAiMove: ; 0x01FFB658
|
||||
#ifdef JAPAN
|
||||
#define CHOOSE_AI_MOVE_OFFSET -4
|
||||
#else
|
||||
#define CHOOSE_AI_MOVE_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #0x44
|
||||
ldr r1, _01FFBD14 ; =DUNGEON_PTR
|
||||
mov sl, r0
|
||||
ldr r0, [r1]
|
||||
ldr r7, [sl, #0xb4]
|
||||
add r0, r0, #0x4000
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0x36]
|
||||
#else
|
||||
ldrb r0, [r0, #0xda]
|
||||
#endif
|
||||
bl AreMovesEnabled
|
||||
cmp r0, #0
|
||||
beq _01FFBD0C
|
||||
mov r0, sl
|
||||
mov r1, #0
|
||||
bl MonsterCannotAttack
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
mov r0, sl
|
||||
mov r1, #1
|
||||
bl ShouldMonsterRunAwayAndShowEffect
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
ldr r0, [sl, #0xb4]
|
||||
ldrb r0, [r0, #0xbc]
|
||||
cmp r0, #3
|
||||
bne _01FFB6CC
|
||||
mov r0, sl
|
||||
bl IsMonsterCornered
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
_01FFB6CC:
|
||||
mov r0, sl
|
||||
mov r1, #8
|
||||
bl IsTacticSet
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
ldrb r0, [r7, #0xd0]
|
||||
cmp r0, #2
|
||||
bne _01FFB700
|
||||
ldr r0, _01FFBD18 ; =AI_CONFUSED_NO_ATTACK_CHANCE
|
||||
ldrsh r0, [r0]
|
||||
bl DungeonRandOutcome__022EAB20
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
_01FFB700:
|
||||
ldrb r0, [r7, #0xd2]
|
||||
cmp r0, #0
|
||||
beq _01FFB7A8
|
||||
mov r8, #0
|
||||
add r6, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov r4, r8
|
||||
mov r5, #1
|
||||
b _01FFB7A0
|
||||
_01FFB720:
|
||||
ldrb r0, [r6, r8, lsl #3]
|
||||
mov r1, r8, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, r5
|
||||
moveq r0, r4
|
||||
tst r0, #0xff
|
||||
beq _01FFB79C
|
||||
mov r0, sl
|
||||
add r1, r6, r1
|
||||
bl IsChargingTwoTurnMove
|
||||
cmp r0, #0
|
||||
beq _01FFB79C
|
||||
ldrb r0, [r7, #0xd4]
|
||||
cmp r0, r8
|
||||
bne _01FFB79C
|
||||
b _01FFB774
|
||||
_01FFB760:
|
||||
add r0, r7, r8, lsl #3
|
||||
ldrb r0, [r0, #0x124 + CHOOSE_AI_MOVE_OFFSET]
|
||||
tst r0, #2
|
||||
beq _01FFB77C
|
||||
sub r8, r8, #1
|
||||
_01FFB774:
|
||||
cmp r8, #0
|
||||
bgt _01FFB760
|
||||
_01FFB77C:
|
||||
ldrb r2, [r7, #0x4c]
|
||||
mov r1, r8, lsl #0x10
|
||||
add r0, r7, #0x4a
|
||||
mov r1, r1, asr #0x10
|
||||
bl SetActionUseMoveAi
|
||||
mov r0, sl
|
||||
bl UpdateAiTargetPos
|
||||
b _01FFBD0C
|
||||
_01FFB79C:
|
||||
add r8, r8, #1
|
||||
_01FFB7A0:
|
||||
cmp r8, #4
|
||||
blt _01FFB720
|
||||
_01FFB7A8:
|
||||
mov r5, #0
|
||||
str r5, [sp]
|
||||
mov r0, r5
|
||||
add r4, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov r2, r5
|
||||
mov r3, #1
|
||||
_01FFB7C0:
|
||||
ldrb r1, [r4, r0, lsl #3]
|
||||
add r6, r4, r0, lsl #3
|
||||
tst r1, #1
|
||||
movne r1, r3
|
||||
moveq r1, r2
|
||||
tst r1, #0xff
|
||||
beq _01FFB7F8
|
||||
ldrb r1, [r6]
|
||||
tst r1, #4
|
||||
ldrne r1, [sp]
|
||||
addne r1, r1, #1
|
||||
strne r1, [sp]
|
||||
ldrb r1, [r6, #6]
|
||||
add r5, r5, r1
|
||||
_01FFB7F8:
|
||||
add r0, r0, #1
|
||||
cmp r0, #4
|
||||
blt _01FFB7C0
|
||||
cmp r5, #0
|
||||
bne _01FFB84C
|
||||
add r0, sp, #0x14
|
||||
mov r1, #0x160
|
||||
bl InitMove
|
||||
add r0, sp, #0x1c
|
||||
add r2, sp, #0x14
|
||||
mov r1, sl
|
||||
bl AiConsiderMove
|
||||
ldrb r0, [sp, #0x1c]
|
||||
cmp r0, #0
|
||||
beq _01FFBD0C
|
||||
ldrb r1, [sp, #0x1d]
|
||||
add r0, r7, #0x4a
|
||||
bl SetActionStruggle
|
||||
mov r0, sl
|
||||
bl UpdateAiTargetPos
|
||||
b _01FFBD0C
|
||||
_01FFB84C:
|
||||
mov r0, sl
|
||||
mov r1, #0xb
|
||||
bl IqSkillIsEnabled
|
||||
mov r5, r0
|
||||
mov r0, sl
|
||||
mov r1, #0x17
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
mov r8, #0
|
||||
and r0, r0, #0xff
|
||||
str r0, [sp, #4]
|
||||
mov r2, r8
|
||||
mov r1, #1
|
||||
add r0, sp, #0xc
|
||||
_01FFB88C:
|
||||
strb r1, [r0, r2]
|
||||
add r2, r2, #1
|
||||
cmp r2, #4
|
||||
blt _01FFB88C
|
||||
ldr r0, [sp, #4]
|
||||
cmp r0, #0
|
||||
beq _01FFB96C
|
||||
mov r2, #0
|
||||
mov r3, r2
|
||||
mov r4, #0x63
|
||||
add r0, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov sb, r2
|
||||
add r6, sp, #0xc
|
||||
mov lr, #1
|
||||
b _01FFB938
|
||||
_01FFB8C8:
|
||||
ldrb ip, [r0, r3, lsl #3]
|
||||
add r1, r0, r3, lsl #3
|
||||
tst ip, #1
|
||||
movne ip, lr
|
||||
moveq ip, #0
|
||||
tst ip, #0xff
|
||||
beq _01FFB940
|
||||
cmp r3, #0
|
||||
beq _01FFB928
|
||||
ldrb ip, [r1]
|
||||
tst ip, #2
|
||||
bne _01FFB928
|
||||
add ip, r2, #1
|
||||
cmp ip, r3
|
||||
cmplt r4, #2
|
||||
bge _01FFB91C
|
||||
b _01FFB914
|
||||
_01FFB90C:
|
||||
strb sb, [r6, r2]
|
||||
add r2, r2, #1
|
||||
_01FFB914:
|
||||
cmp r2, r3
|
||||
blt _01FFB90C
|
||||
_01FFB91C:
|
||||
ldrb r4, [r1, #6]
|
||||
mov r2, r3
|
||||
b _01FFB934
|
||||
_01FFB928:
|
||||
ldrb r1, [r1, #6]
|
||||
cmp r4, r1
|
||||
movge r4, r1
|
||||
_01FFB934:
|
||||
add r3, r3, #1
|
||||
_01FFB938:
|
||||
cmp r3, #4
|
||||
blt _01FFB8C8
|
||||
_01FFB940:
|
||||
add r0, r2, #1
|
||||
cmp r0, r3
|
||||
cmplt r4, #2
|
||||
bge _01FFB96C
|
||||
mov r1, #0
|
||||
add r0, sp, #0xc
|
||||
b _01FFB964
|
||||
_01FFB95C:
|
||||
strb r1, [r0, r2]
|
||||
add r2, r2, #1
|
||||
_01FFB964:
|
||||
cmp r2, r3
|
||||
blt _01FFB95C
|
||||
_01FFB96C:
|
||||
add r0, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov sb, #0
|
||||
str r0, [sp, #8]
|
||||
add r4, sp, #0x1c
|
||||
_01FFB97C:
|
||||
mov r0, #0
|
||||
strb r0, [r4, sb, lsl #3]
|
||||
ldr r0, [sp, #8]
|
||||
add r6, r0, sb, lsl #3
|
||||
ldrb r0, [r0, sb, lsl #3]
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
addne r0, sp, #0xc
|
||||
ldrneb r0, [r0, sb]
|
||||
cmpne r0, #0
|
||||
beq _01FFBA7C
|
||||
ldr r2, [sp, #4]
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl CanAiUseMove
|
||||
cmp r0, #0
|
||||
beq _01FFBA7C
|
||||
ldrb r0, [r6]
|
||||
tst r0, #4
|
||||
beq _01FFBA7C
|
||||
mov r0, #1
|
||||
strb r0, [r4, sb, lsl #3]
|
||||
ldrb r0, [r7, #0xd2]
|
||||
mov r2, sb, lsl #3
|
||||
cmp r0, #0xb
|
||||
bne _01FFBA38
|
||||
ldrh r0, [r6, #4]
|
||||
cmp r0, #0x80
|
||||
addeq r1, r4, r2
|
||||
moveq r0, #0
|
||||
streq r0, [r1, #4]
|
||||
beq _01FFBA7C
|
||||
mov r0, sl
|
||||
mov r1, r6
|
||||
bl GetMoveTypeForMonster
|
||||
cmp r0, #5
|
||||
addne r1, r4, sb, lsl #3
|
||||
movne r0, #1
|
||||
strne r0, [r1, #4]
|
||||
bne _01FFBA70
|
||||
mov r0, r6
|
||||
bl GetMoveAiWeight
|
||||
add r1, r4, sb, lsl #3
|
||||
str r0, [r1, #4]
|
||||
b _01FFBA70
|
||||
_01FFBA38:
|
||||
cmp r5, #0
|
||||
beq _01FFBA60
|
||||
ldr r1, [sp, #8]
|
||||
add r0, r4, r2
|
||||
add r2, r1, r2
|
||||
mov r1, sl
|
||||
bl AiConsiderMove
|
||||
add r1, r4, sb, lsl #3
|
||||
str r0, [r1, #4]
|
||||
b _01FFBA70
|
||||
_01FFBA60:
|
||||
mov r0, r6
|
||||
bl GetMoveAiWeight
|
||||
add r1, r4, sb, lsl #3
|
||||
str r0, [r1, #4]
|
||||
_01FFBA70:
|
||||
add r0, r4, sb, lsl #3
|
||||
ldr r0, [r0, #4]
|
||||
add r8, r8, r0
|
||||
_01FFBA7C:
|
||||
add sb, sb, #1
|
||||
cmp sb, #4
|
||||
blt _01FFB97C
|
||||
mov r2, #0
|
||||
mov r0, sl
|
||||
mov r1, #0x17
|
||||
str r2, [sp, #0x40]
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
bne _01FFBAF0
|
||||
ldrb r0, [r7, #0xd2]
|
||||
cmp r0, #0xb
|
||||
beq _01FFBAF0
|
||||
mov r1, #1
|
||||
strb r1, [sp, #0x3c]
|
||||
ldrb r0, [r7, #0xd2]
|
||||
cmp r0, #0xb
|
||||
streq r1, [sp, #0x40]
|
||||
beq _01FFBAE8
|
||||
cmp r5, #0
|
||||
movne r0, #2
|
||||
strne r0, [sp, #0x40]
|
||||
ldreq r0, [sp]
|
||||
ldreq r1, _01FFBD1C ; =AI_REGULAR_ATTACK_WEIGHTS
|
||||
moveq r0, r0, lsl #1
|
||||
ldreqsh r0, [r1, r0]
|
||||
streq r0, [sp, #0x40]
|
||||
_01FFBAE8:
|
||||
ldr r0, [sp, #0x40]
|
||||
add r8, r8, r0
|
||||
_01FFBAF0:
|
||||
cmp r5, #0
|
||||
beq _01FFBB80
|
||||
mov r0, #0
|
||||
mov r8, r0
|
||||
mov r5, r0
|
||||
mov r2, r0
|
||||
add r3, sp, #0x1c
|
||||
_01FFBB0C:
|
||||
ldrb r1, [r3, r5, lsl #3]
|
||||
mov r4, r5, lsl #3
|
||||
cmp r1, #0
|
||||
add r1, r3, r4
|
||||
streq r2, [r1, #4]
|
||||
beq _01FFBB30
|
||||
ldr r1, [r1, #4]
|
||||
cmp r0, r1
|
||||
movlt r0, r1
|
||||
_01FFBB30:
|
||||
add r5, r5, #1
|
||||
cmp r5, #5
|
||||
blt _01FFBB0C
|
||||
mov r1, #0
|
||||
mov r3, r1
|
||||
add r5, sp, #0x1c
|
||||
_01FFBB48:
|
||||
ldrb r2, [r5, r1, lsl #3]
|
||||
mov r4, r1, lsl #3
|
||||
cmp r2, #0
|
||||
beq _01FFBB74
|
||||
add r4, r5, r4
|
||||
ldr r2, [r4, #4]
|
||||
cmp r0, r2
|
||||
strne r3, [r4, #4]
|
||||
add r2, r5, r1, lsl #3
|
||||
ldr r2, [r2, #4]
|
||||
add r8, r8, r2
|
||||
_01FFBB74:
|
||||
add r1, r1, #1
|
||||
cmp r1, #5
|
||||
blt _01FFBB48
|
||||
_01FFBB80:
|
||||
cmp r8, #0
|
||||
beq _01FFBD0C
|
||||
mov r0, r8
|
||||
bl DungeonRandInt
|
||||
mov r5, r0
|
||||
mov r4, #0
|
||||
mov r0, sl
|
||||
mov r1, #0x4e
|
||||
mov r6, r4
|
||||
bl AbilityIsActiveVeneer
|
||||
cmp r0, #0
|
||||
beq _01FFBBD8
|
||||
mov r0, sl
|
||||
bl ov29_02338350
|
||||
cmp r0, #0
|
||||
bne _01FFBBD8
|
||||
mov r6, #1
|
||||
add r1, sp, #0x10
|
||||
mov r0, sl
|
||||
mov r2, r6
|
||||
bl TargetRegularAttack
|
||||
mov fp, r0
|
||||
_01FFBBD8:
|
||||
cmp r6, #0
|
||||
bne _01FFBC10
|
||||
mov r0, sl
|
||||
mov r1, #0x17
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
movne fp, #0
|
||||
strne fp, [sp, #0x10]
|
||||
bne _01FFBC10
|
||||
add r1, sp, #0x10
|
||||
mov r0, sl
|
||||
mov r2, #1
|
||||
bl TargetRegularAttack
|
||||
mov fp, r0
|
||||
_01FFBC10:
|
||||
mov r8, #0
|
||||
add r3, sp, #0x1c
|
||||
b _01FFBCE4
|
||||
_01FFBC1C:
|
||||
ldrb r0, [r3, r8, lsl #3]
|
||||
mov r2, r8, lsl #3
|
||||
cmp r0, #0
|
||||
addne r0, r3, r2
|
||||
ldrne r1, [r0, #4]
|
||||
cmpne r1, #0
|
||||
beq _01FFBCE0
|
||||
add r4, r4, r1
|
||||
cmp r4, r5
|
||||
blt _01FFBCE0
|
||||
cmp r6, #0
|
||||
bne _01FFBC54
|
||||
cmp r8, #4
|
||||
bne _01FFBC78
|
||||
_01FFBC54:
|
||||
cmp fp, #0
|
||||
beq _01FFBCEC
|
||||
ldr r1, [sp, #0x10]
|
||||
add r0, r7, #0x4a
|
||||
and r1, r1, #0xff
|
||||
bl SetActionRegularAttack
|
||||
mov r0, sl
|
||||
bl UpdateAiTargetPos
|
||||
b _01FFBD0C
|
||||
_01FFBC78:
|
||||
add r3, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov r1, sl
|
||||
add r2, r3, r2
|
||||
bl AiConsiderMove
|
||||
add r0, sp, #0x1c
|
||||
ldrb r0, [r0, r8, lsl #3]
|
||||
cmp r0, #0
|
||||
beq _01FFBCEC
|
||||
mov r1, r8
|
||||
b _01FFBCB4
|
||||
_01FFBCA0:
|
||||
add r0, r7, r1, lsl #3
|
||||
ldrb r0, [r0, #0x124 + CHOOSE_AI_MOVE_OFFSET]
|
||||
tst r0, #2
|
||||
beq _01FFBCBC
|
||||
sub r1, r1, #1
|
||||
_01FFBCB4:
|
||||
cmp r1, #0
|
||||
bgt _01FFBCA0
|
||||
_01FFBCBC:
|
||||
add r0, sp, #0x1d
|
||||
ldrb r2, [r0, r8, lsl #3]
|
||||
mov r1, r1, lsl #0x10
|
||||
add r0, r7, #0x4a
|
||||
mov r1, r1, asr #0x10
|
||||
bl SetActionUseMoveAi
|
||||
mov r0, sl
|
||||
bl UpdateAiTargetPos
|
||||
b _01FFBD0C
|
||||
_01FFBCE0:
|
||||
add r8, r8, #1
|
||||
_01FFBCE4:
|
||||
cmp r8, #5
|
||||
blt _01FFBC1C
|
||||
_01FFBCEC:
|
||||
cmp fp, #0
|
||||
beq _01FFBD0C
|
||||
ldr r1, [sp, #0x10]
|
||||
add r0, r7, #0x4a
|
||||
and r1, r1, #0xff
|
||||
bl SetActionRegularAttack
|
||||
mov r0, sl
|
||||
bl UpdateAiTargetPos
|
||||
_01FFBD0C:
|
||||
add sp, sp, #0x44
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_01FFBD14: .word DUNGEON_PTR
|
||||
_01FFBD18: .word AI_CONFUSED_NO_ATTACK_CHANCE
|
||||
_01FFBD1C: .word AI_REGULAR_ATTACK_WEIGHTS
|
||||
arm_func_end ChooseAiMove
|
||||
#endif
|
||||
|
|
|
|||
6
include/dungeon_ai_parameters.h
Normal file
6
include/dungeon_ai_parameters.h
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef PMDSKY_DUNGEON_AI_PARAMETERS_H
|
||||
#define PMDSKY_DUNGEON_AI_PARAMETERS_H
|
||||
|
||||
extern const s16 AI_REGULAR_ATTACK_WEIGHTS[5];
|
||||
|
||||
#endif //PMDSKY_DUNGEON_AI_PARAMETERS_H
|
||||
4
lib/include/nitro/itcm_begin.h
Normal file
4
lib/include/nitro/itcm_begin.h
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#include <nitro/section.h>
|
||||
#ifdef SDK_ARM9
|
||||
#pragma section ITCM begin
|
||||
#endif
|
||||
4
lib/include/nitro/itcm_end.h
Normal file
4
lib/include/nitro/itcm_end.h
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#include <nitro/section.h>
|
||||
#ifdef SDK_ARM9
|
||||
#pragma section ITCM end
|
||||
#endif
|
||||
14
lib/include/nitro/section.h
Normal file
14
lib/include/nitro/section.h
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#ifndef NITRO_SECTION_H_
|
||||
#define NITRO_SECTION_H_
|
||||
|
||||
#ifdef SDK_ARM9
|
||||
#pragma define_section ITCM ".itcm" ".itcm.bss" abs32 RWX
|
||||
#pragma define_section DTCM ".dtcm" ".dtcm.bss" abs32 RWX
|
||||
#else
|
||||
#pragma define_section WRAM ".wram" ".wram.bss" abs32 RWX
|
||||
#endif
|
||||
|
||||
#pragma define_section PARENT ".parent" abs32 RWX
|
||||
#pragma define_section VERSION ".version" abs32 RWX
|
||||
|
||||
#endif //NITRO_SECTION_H_
|
||||
2
main.lsf
2
main.lsf
|
|
@ -189,7 +189,7 @@ Overlay OVY_10
|
|||
Object asm/overlay_10_rodata_022C4584.o
|
||||
Object src/dungeon_parameters_1.o
|
||||
Object asm/overlay_10_rodata_022C464C.o
|
||||
Object src/dungeon_ai_itcm.o
|
||||
Object src/dungeon_ai_parameters.o
|
||||
Object asm/overlay_10_rodata_022C490C.o
|
||||
}
|
||||
Overlay OVY_11
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include "dungeon_action.h"
|
||||
#include "dungeon_action_helper.h"
|
||||
#include "dungeon_ai_attack.h"
|
||||
#include "dungeon_ai_parameters.h"
|
||||
#include "dungeon_ai_targeting.h"
|
||||
#include "dungeon_capabilities_3.h"
|
||||
#include "dungeon_capabilities_4.h"
|
||||
|
|
@ -19,10 +20,6 @@
|
|||
|
||||
#define REGULAR_ATTACK_INDEX 4
|
||||
|
||||
// The weight of the regular attack in the weighted random when the AI is deciding which move to use, depending on how many other attacks the AI can currently use.
|
||||
// Each index in the array corresponds to the number of attacks (0-4) the AI can use (i.e., is enabled and has PP remaining).
|
||||
const s16 AI_REGULAR_ATTACK_WEIGHTS[5] = { 100, 20, 30, 40, 50 };
|
||||
|
||||
extern bool8 ov29_02338350(struct entity *monster);
|
||||
extern bool8 TargetRegularAttack(struct entity *pokemon, u32 *target_dir, bool8 skip_petrified);
|
||||
extern void SetActionRegularAttack(struct action_data *monster_action, u8 direction);
|
||||
|
|
@ -31,6 +28,10 @@ extern bool8 CanAiUseMove(struct entity *monster, u32 move_index, bool8 extra_ch
|
|||
extern enum type_id GetMoveTypeForMonster(struct entity *entity, struct move *move);
|
||||
extern u8 GetMoveAiWeight(struct move *move);
|
||||
|
||||
#ifdef SDK_ARM9
|
||||
#include <nitro/itcm_begin.h>
|
||||
#endif //SDK_ARM9
|
||||
|
||||
// https://decomp.me/scratch/zg7V6
|
||||
#ifdef NONMATCHING
|
||||
void ChooseAiMove(struct entity *monster)
|
||||
|
|
@ -291,4 +292,500 @@ void ChooseAiMove(struct entity *monster)
|
|||
UpdateAiTargetPos(monster);
|
||||
}
|
||||
}
|
||||
#else
|
||||
asm void ChooseAiMove(struct entity *monster)
|
||||
{
|
||||
#ifdef JAPAN
|
||||
#define CHOOSE_AI_MOVE_OFFSET -4
|
||||
#else
|
||||
#define CHOOSE_AI_MOVE_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0x44
|
||||
ldr r1, =DUNGEON_PTR
|
||||
mov r10, r0
|
||||
ldr r0, [r1]
|
||||
ldr r7, [r10, #0xb4]
|
||||
add r0, r0, #0x4000
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0x36]
|
||||
#else
|
||||
ldrb r0, [r0, #0xda]
|
||||
#endif
|
||||
bl AreMovesEnabled
|
||||
cmp r0, #0
|
||||
beq _01FFBD0C
|
||||
mov r0, r10
|
||||
mov r1, #0
|
||||
bl MonsterCannotAttack
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
mov r0, r10
|
||||
mov r1, #1
|
||||
bl ShouldMonsterRunAwayAndShowEffect
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
ldr r0, [r10, #0xb4]
|
||||
ldrb r0, [r0, #0xbc]
|
||||
cmp r0, #3
|
||||
bne _01FFB6CC
|
||||
mov r0, r10
|
||||
bl IsMonsterCornered
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
_01FFB6CC:
|
||||
mov r0, r10
|
||||
mov r1, #8
|
||||
bl IsTacticSet
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
ldrb r0, [r7, #0xd0]
|
||||
cmp r0, #2
|
||||
bne _01FFB700
|
||||
ldr r0, =AI_CONFUSED_NO_ATTACK_CHANCE
|
||||
ldrsh r0, [r0]
|
||||
bl DungeonRandOutcome__022EAB20
|
||||
cmp r0, #0
|
||||
bne _01FFBD0C
|
||||
_01FFB700:
|
||||
ldrb r0, [r7, #0xd2]
|
||||
cmp r0, #0
|
||||
beq _01FFB7A8
|
||||
mov r8, #0
|
||||
add r6, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov r4, r8
|
||||
mov r5, #1
|
||||
b _01FFB7A0
|
||||
_01FFB720:
|
||||
ldrb r0, [r6, r8, lsl #3]
|
||||
mov r1, r8, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, r5
|
||||
moveq r0, r4
|
||||
tst r0, #0xff
|
||||
beq _01FFB79C
|
||||
mov r0, r10
|
||||
add r1, r6, r1
|
||||
bl IsChargingTwoTurnMove
|
||||
cmp r0, #0
|
||||
beq _01FFB79C
|
||||
ldrb r0, [r7, #0xd4]
|
||||
cmp r0, r8
|
||||
bne _01FFB79C
|
||||
b _01FFB774
|
||||
_01FFB760:
|
||||
add r0, r7, r8, lsl #3
|
||||
ldrb r0, [r0, #0x124 + CHOOSE_AI_MOVE_OFFSET]
|
||||
tst r0, #2
|
||||
beq _01FFB77C
|
||||
sub r8, r8, #1
|
||||
_01FFB774:
|
||||
cmp r8, #0
|
||||
bgt _01FFB760
|
||||
_01FFB77C:
|
||||
ldrb r2, [r7, #0x4c]
|
||||
mov r1, r8, lsl #0x10
|
||||
add r0, r7, #0x4a
|
||||
mov r1, r1, asr #0x10
|
||||
bl SetActionUseMoveAi
|
||||
mov r0, r10
|
||||
bl UpdateAiTargetPos
|
||||
b _01FFBD0C
|
||||
_01FFB79C:
|
||||
add r8, r8, #1
|
||||
_01FFB7A0:
|
||||
cmp r8, #4
|
||||
blt _01FFB720
|
||||
_01FFB7A8:
|
||||
mov r5, #0
|
||||
str r5, [sp]
|
||||
mov r0, r5
|
||||
add r4, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov r2, r5
|
||||
mov r3, #1
|
||||
_01FFB7C0:
|
||||
ldrb r1, [r4, r0, lsl #3]
|
||||
add r6, r4, r0, lsl #3
|
||||
tst r1, #1
|
||||
movne r1, r3
|
||||
moveq r1, r2
|
||||
tst r1, #0xff
|
||||
beq _01FFB7F8
|
||||
ldrb r1, [r6]
|
||||
tst r1, #4
|
||||
ldrne r1, [sp]
|
||||
addne r1, r1, #1
|
||||
strne r1, [sp]
|
||||
ldrb r1, [r6, #6]
|
||||
add r5, r5, r1
|
||||
_01FFB7F8:
|
||||
add r0, r0, #1
|
||||
cmp r0, #4
|
||||
blt _01FFB7C0
|
||||
cmp r5, #0
|
||||
bne _01FFB84C
|
||||
add r0, sp, #0x14
|
||||
mov r1, #0x160
|
||||
bl InitMove
|
||||
add r0, sp, #0x1c
|
||||
add r2, sp, #0x14
|
||||
mov r1, r10
|
||||
bl AiConsiderMove
|
||||
ldrb r0, [sp, #0x1c]
|
||||
cmp r0, #0
|
||||
beq _01FFBD0C
|
||||
ldrb r1, [sp, #0x1d]
|
||||
add r0, r7, #0x4a
|
||||
bl SetActionStruggle
|
||||
mov r0, r10
|
||||
bl UpdateAiTargetPos
|
||||
b _01FFBD0C
|
||||
_01FFB84C:
|
||||
mov r0, r10
|
||||
mov r1, #0xb
|
||||
bl IqSkillIsEnabled
|
||||
mov r5, r0
|
||||
mov r0, r10
|
||||
mov r1, #0x17
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
mov r8, #0
|
||||
and r0, r0, #0xff
|
||||
str r0, [sp, #4]
|
||||
mov r2, r8
|
||||
mov r1, #1
|
||||
add r0, sp, #0xc
|
||||
_01FFB88C:
|
||||
strb r1, [r0, r2]
|
||||
add r2, r2, #1
|
||||
cmp r2, #4
|
||||
blt _01FFB88C
|
||||
ldr r0, [sp, #4]
|
||||
cmp r0, #0
|
||||
beq _01FFB96C
|
||||
mov r2, #0
|
||||
mov r3, r2
|
||||
mov r4, #0x63
|
||||
add r0, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov r9, r2
|
||||
add r6, sp, #0xc
|
||||
mov lr, #1
|
||||
b _01FFB938
|
||||
_01FFB8C8:
|
||||
ldrb ip, [r0, r3, lsl #3]
|
||||
add r1, r0, r3, lsl #3
|
||||
tst ip, #1
|
||||
movne ip, lr
|
||||
moveq ip, #0
|
||||
tst ip, #0xff
|
||||
beq _01FFB940
|
||||
cmp r3, #0
|
||||
beq _01FFB928
|
||||
ldrb ip, [r1]
|
||||
tst ip, #2
|
||||
bne _01FFB928
|
||||
add ip, r2, #1
|
||||
cmp ip, r3
|
||||
cmplt r4, #2
|
||||
bge _01FFB91C
|
||||
b _01FFB914
|
||||
_01FFB90C:
|
||||
strb r9, [r6, r2]
|
||||
add r2, r2, #1
|
||||
_01FFB914:
|
||||
cmp r2, r3
|
||||
blt _01FFB90C
|
||||
_01FFB91C:
|
||||
ldrb r4, [r1, #6]
|
||||
mov r2, r3
|
||||
b _01FFB934
|
||||
_01FFB928:
|
||||
ldrb r1, [r1, #6]
|
||||
cmp r4, r1
|
||||
movge r4, r1
|
||||
_01FFB934:
|
||||
add r3, r3, #1
|
||||
_01FFB938:
|
||||
cmp r3, #4
|
||||
blt _01FFB8C8
|
||||
_01FFB940:
|
||||
add r0, r2, #1
|
||||
cmp r0, r3
|
||||
cmplt r4, #2
|
||||
bge _01FFB96C
|
||||
mov r1, #0
|
||||
add r0, sp, #0xc
|
||||
b _01FFB964
|
||||
_01FFB95C:
|
||||
strb r1, [r0, r2]
|
||||
add r2, r2, #1
|
||||
_01FFB964:
|
||||
cmp r2, r3
|
||||
blt _01FFB95C
|
||||
_01FFB96C:
|
||||
add r0, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov r9, #0
|
||||
str r0, [sp, #8]
|
||||
add r4, sp, #0x1c
|
||||
_01FFB97C:
|
||||
mov r0, #0
|
||||
strb r0, [r4, r9, lsl #3]
|
||||
ldr r0, [sp, #8]
|
||||
add r6, r0, r9, lsl #3
|
||||
ldrb r0, [r0, r9, lsl #3]
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
addne r0, sp, #0xc
|
||||
ldrneb r0, [r0, r9]
|
||||
cmpne r0, #0
|
||||
beq _01FFBA7C
|
||||
ldr r2, [sp, #4]
|
||||
mov r0, r10
|
||||
mov r1, r9
|
||||
bl CanAiUseMove
|
||||
cmp r0, #0
|
||||
beq _01FFBA7C
|
||||
ldrb r0, [r6]
|
||||
tst r0, #4
|
||||
beq _01FFBA7C
|
||||
mov r0, #1
|
||||
strb r0, [r4, r9, lsl #3]
|
||||
ldrb r0, [r7, #0xd2]
|
||||
mov r2, r9, lsl #3
|
||||
cmp r0, #0xb
|
||||
bne _01FFBA38
|
||||
ldrh r0, [r6, #4]
|
||||
cmp r0, #0x80
|
||||
addeq r1, r4, r2
|
||||
moveq r0, #0
|
||||
streq r0, [r1, #4]
|
||||
beq _01FFBA7C
|
||||
mov r0, r10
|
||||
mov r1, r6
|
||||
bl GetMoveTypeForMonster
|
||||
cmp r0, #5
|
||||
addne r1, r4, r9, lsl #3
|
||||
movne r0, #1
|
||||
strne r0, [r1, #4]
|
||||
bne _01FFBA70
|
||||
mov r0, r6
|
||||
bl GetMoveAiWeight
|
||||
add r1, r4, r9, lsl #3
|
||||
str r0, [r1, #4]
|
||||
b _01FFBA70
|
||||
_01FFBA38:
|
||||
cmp r5, #0
|
||||
beq _01FFBA60
|
||||
ldr r1, [sp, #8]
|
||||
add r0, r4, r2
|
||||
add r2, r1, r2
|
||||
mov r1, r10
|
||||
bl AiConsiderMove
|
||||
add r1, r4, r9, lsl #3
|
||||
str r0, [r1, #4]
|
||||
b _01FFBA70
|
||||
_01FFBA60:
|
||||
mov r0, r6
|
||||
bl GetMoveAiWeight
|
||||
add r1, r4, r9, lsl #3
|
||||
str r0, [r1, #4]
|
||||
_01FFBA70:
|
||||
add r0, r4, r9, lsl #3
|
||||
ldr r0, [r0, #4]
|
||||
add r8, r8, r0
|
||||
_01FFBA7C:
|
||||
add r9, r9, #1
|
||||
cmp r9, #4
|
||||
blt _01FFB97C
|
||||
mov r2, #0
|
||||
mov r0, r10
|
||||
mov r1, #0x17
|
||||
str r2, [sp, #0x40]
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
bne _01FFBAF0
|
||||
ldrb r0, [r7, #0xd2]
|
||||
cmp r0, #0xb
|
||||
beq _01FFBAF0
|
||||
mov r1, #1
|
||||
strb r1, [sp, #0x3c]
|
||||
ldrb r0, [r7, #0xd2]
|
||||
cmp r0, #0xb
|
||||
streq r1, [sp, #0x40]
|
||||
beq _01FFBAE8
|
||||
cmp r5, #0
|
||||
movne r0, #2
|
||||
strne r0, [sp, #0x40]
|
||||
ldreq r0, [sp]
|
||||
ldreq r1, =AI_REGULAR_ATTACK_WEIGHTS
|
||||
moveq r0, r0, lsl #1
|
||||
ldreqsh r0, [r1, r0]
|
||||
streq r0, [sp, #0x40]
|
||||
_01FFBAE8:
|
||||
ldr r0, [sp, #0x40]
|
||||
add r8, r8, r0
|
||||
_01FFBAF0:
|
||||
cmp r5, #0
|
||||
beq _01FFBB80
|
||||
mov r0, #0
|
||||
mov r8, r0
|
||||
mov r5, r0
|
||||
mov r2, r0
|
||||
add r3, sp, #0x1c
|
||||
_01FFBB0C:
|
||||
ldrb r1, [r3, r5, lsl #3]
|
||||
mov r4, r5, lsl #3
|
||||
cmp r1, #0
|
||||
add r1, r3, r4
|
||||
streq r2, [r1, #4]
|
||||
beq _01FFBB30
|
||||
ldr r1, [r1, #4]
|
||||
cmp r0, r1
|
||||
movlt r0, r1
|
||||
_01FFBB30:
|
||||
add r5, r5, #1
|
||||
cmp r5, #5
|
||||
blt _01FFBB0C
|
||||
mov r1, #0
|
||||
mov r3, r1
|
||||
add r5, sp, #0x1c
|
||||
_01FFBB48:
|
||||
ldrb r2, [r5, r1, lsl #3]
|
||||
mov r4, r1, lsl #3
|
||||
cmp r2, #0
|
||||
beq _01FFBB74
|
||||
add r4, r5, r4
|
||||
ldr r2, [r4, #4]
|
||||
cmp r0, r2
|
||||
strne r3, [r4, #4]
|
||||
add r2, r5, r1, lsl #3
|
||||
ldr r2, [r2, #4]
|
||||
add r8, r8, r2
|
||||
_01FFBB74:
|
||||
add r1, r1, #1
|
||||
cmp r1, #5
|
||||
blt _01FFBB48
|
||||
_01FFBB80:
|
||||
cmp r8, #0
|
||||
beq _01FFBD0C
|
||||
mov r0, r8
|
||||
bl DungeonRandInt
|
||||
mov r5, r0
|
||||
mov r4, #0
|
||||
mov r0, r10
|
||||
mov r1, #0x4e
|
||||
mov r6, r4
|
||||
bl AbilityIsActiveVeneer
|
||||
cmp r0, #0
|
||||
beq _01FFBBD8
|
||||
mov r0, r10
|
||||
bl ov29_02338350
|
||||
cmp r0, #0
|
||||
bne _01FFBBD8
|
||||
mov r6, #1
|
||||
add r1, sp, #0x10
|
||||
mov r0, r10
|
||||
mov r2, r6
|
||||
bl TargetRegularAttack
|
||||
mov r11, r0
|
||||
_01FFBBD8:
|
||||
cmp r6, #0
|
||||
bne _01FFBC10
|
||||
mov r0, r10
|
||||
mov r1, #0x17
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
movne r11, #0
|
||||
strne r11, [sp, #0x10]
|
||||
bne _01FFBC10
|
||||
add r1, sp, #0x10
|
||||
mov r0, r10
|
||||
mov r2, #1
|
||||
bl TargetRegularAttack
|
||||
mov r11, r0
|
||||
_01FFBC10:
|
||||
mov r8, #0
|
||||
add r3, sp, #0x1c
|
||||
b _01FFBCE4
|
||||
_01FFBC1C:
|
||||
ldrb r0, [r3, r8, lsl #3]
|
||||
mov r2, r8, lsl #3
|
||||
cmp r0, #0
|
||||
addne r0, r3, r2
|
||||
ldrne r1, [r0, #4]
|
||||
cmpne r1, #0
|
||||
beq _01FFBCE0
|
||||
add r4, r4, r1
|
||||
cmp r4, r5
|
||||
blt _01FFBCE0
|
||||
cmp r6, #0
|
||||
bne _01FFBC54
|
||||
cmp r8, #4
|
||||
bne _01FFBC78
|
||||
_01FFBC54:
|
||||
cmp r11, #0
|
||||
beq _01FFBCEC
|
||||
ldr r1, [sp, #0x10]
|
||||
add r0, r7, #0x4a
|
||||
and r1, r1, #0xff
|
||||
bl SetActionRegularAttack
|
||||
mov r0, r10
|
||||
bl UpdateAiTargetPos
|
||||
b _01FFBD0C
|
||||
_01FFBC78:
|
||||
add r3, r7, #0x124 + CHOOSE_AI_MOVE_OFFSET
|
||||
mov r1, r10
|
||||
add r2, r3, r2
|
||||
bl AiConsiderMove
|
||||
add r0, sp, #0x1c
|
||||
ldrb r0, [r0, r8, lsl #3]
|
||||
cmp r0, #0
|
||||
beq _01FFBCEC
|
||||
mov r1, r8
|
||||
b _01FFBCB4
|
||||
_01FFBCA0:
|
||||
add r0, r7, r1, lsl #3
|
||||
ldrb r0, [r0, #0x124 + CHOOSE_AI_MOVE_OFFSET]
|
||||
tst r0, #2
|
||||
beq _01FFBCBC
|
||||
sub r1, r1, #1
|
||||
_01FFBCB4:
|
||||
cmp r1, #0
|
||||
bgt _01FFBCA0
|
||||
_01FFBCBC:
|
||||
add r0, sp, #0x1d
|
||||
ldrb r2, [r0, r8, lsl #3]
|
||||
mov r1, r1, lsl #0x10
|
||||
add r0, r7, #0x4a
|
||||
mov r1, r1, asr #0x10
|
||||
bl SetActionUseMoveAi
|
||||
mov r0, r10
|
||||
bl UpdateAiTargetPos
|
||||
b _01FFBD0C
|
||||
_01FFBCE0:
|
||||
add r8, r8, #1
|
||||
_01FFBCE4:
|
||||
cmp r8, #5
|
||||
blt _01FFBC1C
|
||||
_01FFBCEC:
|
||||
cmp r11, #0
|
||||
beq _01FFBD0C
|
||||
ldr r1, [sp, #0x10]
|
||||
add r0, r7, #0x4a
|
||||
and r1, r1, #0xff
|
||||
bl SetActionRegularAttack
|
||||
mov r0, r10
|
||||
bl UpdateAiTargetPos
|
||||
_01FFBD0C:
|
||||
add sp, sp, #0x44
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SDK_ARM9
|
||||
#include <nitro/itcm_end.h>
|
||||
#endif //SDK_ARM9
|
||||
|
|
|
|||
3
src/dungeon_ai_parameters.c
Normal file
3
src/dungeon_ai_parameters.c
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
// The weight of the regular attack in the weighted random when the AI is deciding which move to use, depending on how many other attacks the AI can currently use.
|
||||
// Each index in the array corresponds to the number of attacks (0-4) the AI can use (i.e., is enabled and has PP remaining).
|
||||
const s16 AI_REGULAR_ATTACK_WEIGHTS[5] = { 100, 20, 30, 40, 50 };
|
||||
Loading…
Reference in New Issue
Block a user