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
|
.global _01FFB654
|
||||||
_01FFB654:
|
_01FFB654:
|
||||||
.byte 0x05, 0x03, 0x00, 0x00
|
.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 asm/overlay_10_rodata_022C4584.o
|
||||||
Object src/dungeon_parameters_1.o
|
Object src/dungeon_parameters_1.o
|
||||||
Object asm/overlay_10_rodata_022C464C.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
|
Object asm/overlay_10_rodata_022C490C.o
|
||||||
}
|
}
|
||||||
Overlay OVY_11
|
Overlay OVY_11
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include "dungeon_action.h"
|
#include "dungeon_action.h"
|
||||||
#include "dungeon_action_helper.h"
|
#include "dungeon_action_helper.h"
|
||||||
#include "dungeon_ai_attack.h"
|
#include "dungeon_ai_attack.h"
|
||||||
|
#include "dungeon_ai_parameters.h"
|
||||||
#include "dungeon_ai_targeting.h"
|
#include "dungeon_ai_targeting.h"
|
||||||
#include "dungeon_capabilities_3.h"
|
#include "dungeon_capabilities_3.h"
|
||||||
#include "dungeon_capabilities_4.h"
|
#include "dungeon_capabilities_4.h"
|
||||||
|
|
@ -19,10 +20,6 @@
|
||||||
|
|
||||||
#define REGULAR_ATTACK_INDEX 4
|
#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 ov29_02338350(struct entity *monster);
|
||||||
extern bool8 TargetRegularAttack(struct entity *pokemon, u32 *target_dir, bool8 skip_petrified);
|
extern bool8 TargetRegularAttack(struct entity *pokemon, u32 *target_dir, bool8 skip_petrified);
|
||||||
extern void SetActionRegularAttack(struct action_data *monster_action, u8 direction);
|
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 enum type_id GetMoveTypeForMonster(struct entity *entity, struct move *move);
|
||||||
extern u8 GetMoveAiWeight(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
|
// https://decomp.me/scratch/zg7V6
|
||||||
#ifdef NONMATCHING
|
#ifdef NONMATCHING
|
||||||
void ChooseAiMove(struct entity *monster)
|
void ChooseAiMove(struct entity *monster)
|
||||||
|
|
@ -291,4 +292,500 @@ void ChooseAiMove(struct entity *monster)
|
||||||
UpdateAiTargetPos(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
|
#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