mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
Moved AiConsiderMove nonmatching to C file
This commit is contained in:
parent
bf59433653
commit
ea0f80715b
|
|
@ -1,26 +0,0 @@
|
|||
#pragma once
|
||||
.public abs
|
||||
.public AI_CAN_ATTACK_IN_DIRECTION
|
||||
.public AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
|
||||
.public AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
.public AI_POTENTIAL_ATTACK_TARGETS
|
||||
.public CanAttackInDirection
|
||||
.public CanSeeTarget
|
||||
.public DIRECTIONS_XY
|
||||
.public DUNGEON_PTR
|
||||
.public DungeonRandInt
|
||||
.public EntityIsValid__02319F8C
|
||||
.public GetDirectionTowardsPosition
|
||||
.public GetEntityMoveTargetAndRange
|
||||
.public GetMoveTargetAndRange
|
||||
.public GetMoveTypeForMonster
|
||||
.public GetTile
|
||||
.public IqSkillIsEnabled
|
||||
.public IsAiTargetEligible
|
||||
.public IsBlinded
|
||||
.public IsTargetInRange
|
||||
.public IsUsableWhileTaunted
|
||||
.public ResetAiCanAttackInDirection
|
||||
.public StatusCheckerCheck
|
||||
.public TryAddTargetToAiTargetList
|
||||
.public WeightMoveWithIqSkills
|
||||
|
|
@ -1,508 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "overlay_29_02319880.inc"
|
||||
|
||||
.text
|
||||
|
||||
; https://decomp.me/scratch/jVfou
|
||||
#ifndef NONMATCHING
|
||||
arm_func_start AiConsiderMove
|
||||
AiConsiderMove: ; 0x02319880
|
||||
#ifdef JAPAN
|
||||
#define AI_CONSIDER_MOVE_OFFSET -0xA4
|
||||
#else
|
||||
#define AI_CONSIDER_MOVE_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #0x2c
|
||||
mov sl, r1
|
||||
str r0, [sp, #8]
|
||||
mov r0, #1
|
||||
mov sb, r2
|
||||
ldr r6, [sl, #0xb4]
|
||||
str r0, [sp, #0x14]
|
||||
mov r5, #0
|
||||
bl ResetAiCanAttackInDirection
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
mov r2, #1
|
||||
bl GetEntityMoveTargetAndRange
|
||||
str r0, [sp, #0x24]
|
||||
mov r0, sl
|
||||
mov r1, #8
|
||||
bl IqSkillIsEnabled
|
||||
mov r4, r0
|
||||
ldr r0, [sp, #8]
|
||||
mov r1, r5
|
||||
strb r1, [r0]
|
||||
ldrb r0, [r6, #0xd0]
|
||||
cmp r0, #5
|
||||
bne _023198F8
|
||||
mov r0, sb
|
||||
bl IsUsableWhileTaunted
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
beq _02319F64
|
||||
_023198F8:
|
||||
cmp r4, #0
|
||||
beq _02319918
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl StatusCheckerCheck
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
beq _02319F64
|
||||
_02319918:
|
||||
mov r0, sb
|
||||
mov r1, #0
|
||||
bl GetMoveTargetAndRange
|
||||
ldr r1, _02319F6C ; =0x00000273
|
||||
cmp r0, r1
|
||||
bne _02319958
|
||||
ldrsh r3, [r6, #0x12]
|
||||
ldrsh r2, [r6, #0x16]
|
||||
add r0, r1, #0x174
|
||||
add r2, r3, r2
|
||||
cmp r2, r0
|
||||
movgt r2, r0
|
||||
ldrsh r0, [r6, #0x10]
|
||||
cmp r0, r2
|
||||
moveq r0, #1
|
||||
beq _02319F64
|
||||
_02319958:
|
||||
ldr r0, [sp, #0x24]
|
||||
ands r7, r0, #0xf0
|
||||
cmpne r7, #0x10
|
||||
cmpne r7, #0x20
|
||||
bne _02319A54
|
||||
mov r0, sl
|
||||
mov r1, #1
|
||||
bl IsBlinded
|
||||
cmp r0, #0
|
||||
beq _023199C0
|
||||
ldrb r6, [r6, #0x4c]
|
||||
ldr r4, _02319F70 ; =AI_CAN_ATTACK_IN_DIRECTION
|
||||
ldrb r0, [r4, r6]
|
||||
cmp r0, #0
|
||||
bne _02319E88
|
||||
ldr r1, _02319F74 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
|
||||
mov r3, #1
|
||||
ldr r0, _02319F78 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
mov r2, #0x63
|
||||
strb r3, [r4, r6]
|
||||
strb r6, [r1]
|
||||
str r2, [r0]
|
||||
mov r1, #0
|
||||
str r1, [r0, #0x20]
|
||||
add r5, r5, #1
|
||||
b _02319E88
|
||||
_023199C0:
|
||||
ldr fp, _02319F7C ; =DIRECTIONS_XY
|
||||
mov r8, #0
|
||||
_023199C8:
|
||||
mov r1, r8, lsl #2
|
||||
add r0, fp, r8, lsl #2
|
||||
ldrsh r6, [sl, #4]
|
||||
ldrsh r3, [fp, r1]
|
||||
ldrsh r2, [sl, #6]
|
||||
ldrsh r1, [r0, #2]
|
||||
add r0, r6, r3
|
||||
add r1, r2, r1
|
||||
bl GetTile
|
||||
ldr r6, [r0, #0xc]
|
||||
cmp r6, #0
|
||||
beq _02319A44
|
||||
ldr r0, [r6]
|
||||
cmp r0, #1
|
||||
bne _02319A44
|
||||
cmp r7, #0x10
|
||||
cmpne r7, #0x20
|
||||
beq _02319A24
|
||||
mov r0, sl
|
||||
mov r1, r8
|
||||
bl CanAttackInDirection
|
||||
cmp r0, #0
|
||||
beq _02319A44
|
||||
_02319A24:
|
||||
str sb, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, sl
|
||||
mov r3, r6
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319A44:
|
||||
add r8, r8, #1
|
||||
cmp r8, #8
|
||||
blt _023199C8
|
||||
b _02319E88
|
||||
_02319A54:
|
||||
cmp r7, #0x30
|
||||
bne _02319AC8
|
||||
ldr r7, _02319F80 ; =DUNGEON_PTR
|
||||
mov r6, #0
|
||||
_02319A64:
|
||||
ldr r0, [r7]
|
||||
add r0, r0, r6, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
|
||||
mov r0, r8
|
||||
bl EntityIsValid__02319F8C
|
||||
cmp r0, #0
|
||||
beq _02319AB8
|
||||
mov r0, sl
|
||||
mov r1, r8
|
||||
bl CanSeeTarget
|
||||
cmp r0, #0
|
||||
beq _02319AB8
|
||||
str sb, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, sl
|
||||
mov r3, r8
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319AB8:
|
||||
add r6, r6, #1
|
||||
cmp r6, #0x14
|
||||
blt _02319A64
|
||||
b _02319E88
|
||||
_02319AC8:
|
||||
cmp r7, #0x40
|
||||
bne _02319BB0
|
||||
mov r8, #0
|
||||
_02319AD4:
|
||||
ldr r0, _02319F7C ; =DIRECTIONS_XY
|
||||
mov r2, r8, lsl #2
|
||||
add r0, r0, r8, lsl #2
|
||||
ldrsh r6, [r0, #2]
|
||||
ldr r0, _02319F7C ; =DIRECTIONS_XY
|
||||
ldrsh r1, [sl, #6]
|
||||
ldrsh r7, [r0, r2]
|
||||
ldrsh r0, [sl, #4]
|
||||
add r1, r1, r6
|
||||
add r0, r0, r7
|
||||
bl GetTile
|
||||
mov fp, r0
|
||||
mov r0, sl
|
||||
mov r1, r8
|
||||
bl CanAttackInDirection
|
||||
cmp r0, #0
|
||||
beq _02319BA0
|
||||
ldr r3, [fp, #0xc]
|
||||
cmp r3, #0
|
||||
beq _02319B58
|
||||
ldr r0, [r3]
|
||||
cmp r0, #1
|
||||
bne _02319B58
|
||||
str sb, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, sl
|
||||
str r4, [sp, #4]
|
||||
mov fp, r5
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
cmp fp, r5
|
||||
bne _02319BA0
|
||||
_02319B58:
|
||||
ldrsh r0, [sl, #4]
|
||||
ldrsh r1, [sl, #6]
|
||||
add r0, r0, r7, lsl #1
|
||||
add r1, r1, r6, lsl #1
|
||||
bl GetTile
|
||||
ldr r3, [r0, #0xc]
|
||||
cmp r3, #0
|
||||
beq _02319BA0
|
||||
ldr r0, [r3]
|
||||
cmp r0, #1
|
||||
bne _02319BA0
|
||||
str sb, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, sl
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319BA0:
|
||||
add r8, r8, #1
|
||||
cmp r8, #8
|
||||
blt _02319AD4
|
||||
b _02319E88
|
||||
_02319BB0:
|
||||
cmp r7, #0x50
|
||||
cmpne r7, #0x80
|
||||
cmpne r7, #0x90
|
||||
bne _02319E00
|
||||
cmp r7, #0x50
|
||||
moveq r0, #0xa
|
||||
streq r0, [sp, #0xc]
|
||||
movne r0, #1
|
||||
strne r0, [sp, #0xc]
|
||||
cmp r7, #0x90
|
||||
moveq r0, #2
|
||||
streq r0, [sp, #0xc]
|
||||
mov r0, #0
|
||||
str r0, [sp, #0x20]
|
||||
mvn r0, #0
|
||||
str r0, [sp, #0x28]
|
||||
_02319BF0:
|
||||
ldr r0, _02319F80 ; =DUNGEON_PTR
|
||||
ldr r1, [r0]
|
||||
ldr r0, [sp, #0x20]
|
||||
add r0, r1, r0, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r0, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
|
||||
str r0, [sp, #0x18]
|
||||
bl EntityIsValid__02319F8C
|
||||
cmp r0, #0
|
||||
ldrne r0, [sp, #0x18]
|
||||
cmpne sl, r0
|
||||
beq _02319DE8
|
||||
ldr r1, [sp, #0x18]
|
||||
add r0, sl, #4
|
||||
add r1, r1, #4
|
||||
bl GetDirectionTowardsPosition
|
||||
ldr r1, _02319F70 ; =AI_CAN_ATTACK_IN_DIRECTION
|
||||
str r0, [sp, #0x1c]
|
||||
ldrb r0, [r1, r0]
|
||||
cmp r0, #0
|
||||
bne _02319DE8
|
||||
ldr r1, [sp, #0x18]
|
||||
mov r0, sl
|
||||
bl CanSeeTarget
|
||||
cmp r0, #0
|
||||
beq _02319DE8
|
||||
ldr r0, [sp, #0x18]
|
||||
ldrsh r6, [sl, #4]
|
||||
ldrsh fp, [r0, #4]
|
||||
sub r0, r6, fp
|
||||
bl abs
|
||||
str r0, [sp, #0x10]
|
||||
ldr r0, [sp, #0x18]
|
||||
ldrsh r8, [sl, #6]
|
||||
ldrsh r7, [r0, #6]
|
||||
sub r0, r8, r7
|
||||
bl abs
|
||||
ldr r1, [sp, #0x10]
|
||||
cmp r1, r0
|
||||
movgt r2, r1
|
||||
movle r2, r0
|
||||
cmp r2, #0xa
|
||||
movgt r0, #0
|
||||
bgt _02319D50
|
||||
ldr r1, [sp, #0xc]
|
||||
cmp r2, r1
|
||||
movgt r0, #0
|
||||
bgt _02319D50
|
||||
ldr r1, [sp, #0x10]
|
||||
cmp r1, r0
|
||||
ldr r0, [sp, #0x28]
|
||||
bne _02319CF8
|
||||
cmp r6, fp
|
||||
cmplt r8, r7
|
||||
movlt r0, #1
|
||||
blt _02319D44
|
||||
cmp r6, fp
|
||||
bge _02319CE4
|
||||
cmp r8, r7
|
||||
movgt r0, #3
|
||||
bgt _02319D44
|
||||
_02319CE4:
|
||||
cmp r6, fp
|
||||
cmpgt r8, r7
|
||||
movgt r0, #5
|
||||
movle r0, #7
|
||||
b _02319D44
|
||||
_02319CF8:
|
||||
cmp r6, fp
|
||||
bne _02319D0C
|
||||
cmp r8, r7
|
||||
movlt r0, #0
|
||||
blt _02319D44
|
||||
_02319D0C:
|
||||
cmp r6, fp
|
||||
bge _02319D20
|
||||
cmp r8, r7
|
||||
moveq r0, #2
|
||||
beq _02319D44
|
||||
_02319D20:
|
||||
cmp r6, fp
|
||||
bne _02319D34
|
||||
cmp r8, r7
|
||||
movgt r0, #4
|
||||
bgt _02319D44
|
||||
_02319D34:
|
||||
cmp r6, fp
|
||||
ble _02319D44
|
||||
cmp r8, r7
|
||||
moveq r0, #6
|
||||
_02319D44:
|
||||
cmp r0, #0
|
||||
movge r0, #1
|
||||
movlt r0, #0
|
||||
_02319D50:
|
||||
cmp r0, #0
|
||||
beq _02319DE8
|
||||
str r4, [sp]
|
||||
ldr r0, [sp, #0x24]
|
||||
ldr r2, [sp, #0x18]
|
||||
mov r1, sl
|
||||
mov r3, sb
|
||||
bl IsAiTargetEligible
|
||||
cmp r0, #0
|
||||
beq _02319DE8
|
||||
ldr r1, [sp, #0x18]
|
||||
ldr r2, [sp, #0x1c]
|
||||
ldr r3, [sp, #0xc]
|
||||
mov r0, sl
|
||||
bl IsTargetInRange
|
||||
cmp r0, #0
|
||||
beq _02319DE8
|
||||
ldr r1, _02319F70 ; =AI_CAN_ATTACK_IN_DIRECTION
|
||||
ldr r0, [sp, #0x1c]
|
||||
mov r2, #1
|
||||
strb r2, [r1, r0]
|
||||
mov r1, r0
|
||||
ldr r0, _02319F74 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
|
||||
strb r1, [r0, r5]
|
||||
mov r0, sl
|
||||
mov r1, sb
|
||||
bl GetMoveTypeForMonster
|
||||
mov r3, r0
|
||||
ldr r1, [sp, #0x24]
|
||||
ldr r2, [sp, #0x18]
|
||||
mov r0, sl
|
||||
bl WeightMoveWithIqSkills
|
||||
ldr r1, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
str r0, [r1, r5, lsl #2]
|
||||
ldr r1, [sp, #0x18]
|
||||
ldr r0, _02319F88 ; =AI_POTENTIAL_ATTACK_TARGETS
|
||||
str r1, [r0, r5, lsl #2]
|
||||
add r5, r5, #1
|
||||
_02319DE8:
|
||||
ldr r0, [sp, #0x20]
|
||||
add r0, r0, #1
|
||||
str r0, [sp, #0x20]
|
||||
cmp r0, #0x14
|
||||
blt _02319BF0
|
||||
b _02319E88
|
||||
_02319E00:
|
||||
cmp r7, #0x60
|
||||
bne _02319E60
|
||||
ldr r7, _02319F80 ; =DUNGEON_PTR
|
||||
mov r6, #0
|
||||
_02319E10:
|
||||
ldr r0, [r7]
|
||||
add r0, r0, r6, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
|
||||
mov r0, r8
|
||||
bl EntityIsValid__02319F8C
|
||||
cmp r0, #0
|
||||
beq _02319E50
|
||||
str sb, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, sl
|
||||
mov r3, r8
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319E50:
|
||||
add r6, r6, #1
|
||||
cmp r6, #0x14
|
||||
blt _02319E10
|
||||
b _02319E88
|
||||
_02319E60:
|
||||
cmp r7, #0x70
|
||||
bne _02319E88
|
||||
str sb, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r2, sl
|
||||
mov r3, sl
|
||||
mov r0, #0
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319E88:
|
||||
cmp r5, #0
|
||||
ldreq r0, [sp, #8]
|
||||
moveq r1, #0
|
||||
streqb r1, [r0]
|
||||
beq _02319F60
|
||||
mov r0, #0
|
||||
str r0, [sp, #0x14]
|
||||
mov r4, r0
|
||||
ldr r3, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
b _02319EC4
|
||||
_02319EB0:
|
||||
ldr r2, [r3, r4, lsl #2]
|
||||
ldr r1, [sp, #0x14]
|
||||
add r4, r4, #1
|
||||
cmp r1, r2
|
||||
strlt r2, [sp, #0x14]
|
||||
_02319EC4:
|
||||
cmp r4, r5
|
||||
blt _02319EB0
|
||||
mov r6, #0
|
||||
mov r2, r6
|
||||
ldr r4, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
b _02319EF0
|
||||
_02319EDC:
|
||||
ldr r3, [r4, r6, lsl #2]
|
||||
ldr r1, [sp, #0x14]
|
||||
cmp r1, r3
|
||||
strne r2, [r4, r6, lsl #2]
|
||||
add r6, r6, #1
|
||||
_02319EF0:
|
||||
cmp r6, r5
|
||||
blt _02319EDC
|
||||
mov r3, #0
|
||||
ldr r2, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
b _02319F10
|
||||
_02319F04:
|
||||
ldr r1, [r2, r3, lsl #2]
|
||||
add r3, r3, #1
|
||||
add r0, r0, r1
|
||||
_02319F10:
|
||||
cmp r3, r5
|
||||
blt _02319F04
|
||||
bl DungeonRandInt
|
||||
mov r3, #0
|
||||
ldr r2, _02319F84 ; =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
b _02319F38
|
||||
_02319F28:
|
||||
ldr r1, [r2, r3, lsl #2]
|
||||
subs r0, r0, r1
|
||||
bmi _02319F40
|
||||
add r3, r3, #1
|
||||
_02319F38:
|
||||
cmp r3, r5
|
||||
blt _02319F28
|
||||
_02319F40:
|
||||
ldr r1, _02319F74 ; =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
|
||||
ldr r0, [sp, #8]
|
||||
mov r2, #1
|
||||
strb r2, [r0]
|
||||
ldrb r2, [r1, r3]
|
||||
mov r1, #8
|
||||
strb r2, [r0, #1]
|
||||
str r1, [r0, #4]
|
||||
_02319F60:
|
||||
ldr r0, [sp, #0x14]
|
||||
_02319F64:
|
||||
add sp, sp, #0x2c
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_02319F6C: .word 0x00000273
|
||||
_02319F70: .word AI_CAN_ATTACK_IN_DIRECTION
|
||||
_02319F74: .word AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
|
||||
_02319F78: .word AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
_02319F7C: .word DIRECTIONS_XY
|
||||
_02319F80: .word DUNGEON_PTR
|
||||
_02319F84: .word AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
_02319F88: .word AI_POTENTIAL_ATTACK_TARGETS
|
||||
arm_func_end AiConsiderMove
|
||||
#endif
|
||||
|
|
@ -10,6 +10,8 @@ AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS:
|
|||
.space 0x8
|
||||
.global AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
AI_POTENTIAL_ATTACK_TARGET_WEIGHTS:
|
||||
.global AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2
|
||||
AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2:
|
||||
.space 0x20
|
||||
.global AI_POTENTIAL_ATTACK_TARGETS
|
||||
AI_POTENTIAL_ATTACK_TARGETS:
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ struct ai_possible_move
|
|||
s32 weight;
|
||||
};
|
||||
|
||||
// Sets all values in AI_CAN_ATTACK_IN_DIRECTION to false.
|
||||
void ResetAiCanAttackInDirection();
|
||||
// The AI uses this function to check if a move has any potential targets, to calculate the list of potential targets and to calculate the move's special weight. The weight is calculated using WeightMoveWithIqSkills.
|
||||
// This function also sets the flag can_be_used on the ai_possible_move struct if it makes sense to use it.
|
||||
// The weight returned by this function is not the same as GetMoveAiWeight. If the AI does not have Weak-Type Picker, AiConsiderMove is called after the AI has selected which move it will use (using GetMoveAiWeight). It determines whether it makes sense for the AI to actually use the chosen move (i.e., whether targets are in range), and which direction the AI will use the move in if so. The return value of this function is not used anywhere in this case.
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
#ifndef PMDSKY_DUNGEON_AI_ATTACK_2_H
|
||||
#define PMDSKY_DUNGEON_AI_ATTACK_2_H
|
||||
|
||||
// Sets all values in AI_CAN_ATTACK_IN_DIRECTION to false.
|
||||
void ResetAiCanAttackInDirection();
|
||||
|
||||
#endif //PMDSKY_DUNGEON_AI_ATTACK_2_H
|
||||
2
main.lsf
2
main.lsf
|
|
@ -474,8 +474,6 @@ Overlay OVY_29
|
|||
Object src/overlay_29_02318E4C.o
|
||||
Object asm/overlay_29_02318E70.o
|
||||
Object src/inflict_status.o
|
||||
Object src/dungeon_ai_attack_2.o
|
||||
Object asm/overlay_29_02319880.o
|
||||
Object src/dungeon_ai_attack.o
|
||||
Object asm/overlay_29_0231A364.o
|
||||
Object src/dungeon_ai_attack_1.o
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#include "dungeon_ai_attack.h"
|
||||
#include "dg_random.h"
|
||||
#include "dungeon_ai_attack_1.h"
|
||||
#include "dungeon_ai_attack_2.h"
|
||||
#include "dungeon_ai_targeting_1.h"
|
||||
#include "dungeon_capabilities_4.h"
|
||||
#include "dungeon_logic.h"
|
||||
|
|
@ -32,6 +31,14 @@ extern bool8 ov29_023007DC(struct entity *entity);
|
|||
extern bool8 IsMonsterSleeping(struct entity *monster);
|
||||
extern u8 GetMoveAccuracyOrAiChance(struct move *move, u32 which);
|
||||
|
||||
void ResetAiCanAttackInDirection()
|
||||
{
|
||||
for (s32 i = 0; i < NUM_DIRECTIONS; i++)
|
||||
{
|
||||
AI_CAN_ATTACK_IN_DIRECTION[i] = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/jVfou
|
||||
#ifdef NONMATCHING
|
||||
u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *monster, struct move *move)
|
||||
|
|
@ -252,6 +259,501 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
|
|||
|
||||
return move_weight;
|
||||
}
|
||||
#else
|
||||
// AI_POTENTIAL_ATTACK_TARGET_WEIGHTS is defined two separate times in the ASM, so define it twice here to match.
|
||||
extern s32 AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2[NUM_DIRECTIONS];
|
||||
|
||||
asm u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *monster, struct move *move)
|
||||
{
|
||||
#ifdef JAPAN
|
||||
#define AI_CONSIDER_MOVE_OFFSET -0xA4
|
||||
#else
|
||||
#define AI_CONSIDER_MOVE_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}
|
||||
sub sp, sp, #0x2c
|
||||
mov r10, r1
|
||||
str r0, [sp, #8]
|
||||
mov r0, #1
|
||||
mov r9, r2
|
||||
ldr r6, [r10, #0xb4]
|
||||
str r0, [sp, #0x14]
|
||||
mov r5, #0
|
||||
bl ResetAiCanAttackInDirection
|
||||
mov r0, r10
|
||||
mov r1, r9
|
||||
mov r2, #1
|
||||
bl GetEntityMoveTargetAndRange
|
||||
str r0, [sp, #0x24]
|
||||
mov r0, r10
|
||||
mov r1, #8
|
||||
bl IqSkillIsEnabled
|
||||
mov r4, r0
|
||||
ldr r0, [sp, #8]
|
||||
mov r1, r5
|
||||
strb r1, [r0]
|
||||
ldrb r0, [r6, #0xd0]
|
||||
cmp r0, #5
|
||||
bne _023198F8
|
||||
mov r0, r9
|
||||
bl IsUsableWhileTaunted
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
beq _02319F64
|
||||
_023198F8:
|
||||
cmp r4, #0
|
||||
beq _02319918
|
||||
mov r0, r10
|
||||
mov r1, r9
|
||||
bl StatusCheckerCheck
|
||||
cmp r0, #0
|
||||
moveq r0, #1
|
||||
beq _02319F64
|
||||
_02319918:
|
||||
mov r0, r9
|
||||
mov r1, #0
|
||||
bl GetMoveTargetAndRange
|
||||
ldr r1, =0x00000273
|
||||
cmp r0, r1
|
||||
bne _02319958
|
||||
ldrsh r3, [r6, #0x12]
|
||||
ldrsh r2, [r6, #0x16]
|
||||
add r0, r1, #0x174
|
||||
add r2, r3, r2
|
||||
cmp r2, r0
|
||||
movgt r2, r0
|
||||
ldrsh r0, [r6, #0x10]
|
||||
cmp r0, r2
|
||||
moveq r0, #1
|
||||
beq _02319F64
|
||||
_02319958:
|
||||
ldr r0, [sp, #0x24]
|
||||
ands r7, r0, #0xf0
|
||||
cmpne r7, #0x10
|
||||
cmpne r7, #0x20
|
||||
bne _02319A54
|
||||
mov r0, r10
|
||||
mov r1, #1
|
||||
bl IsBlinded
|
||||
cmp r0, #0
|
||||
beq _023199C0
|
||||
ldrb r6, [r6, #0x4c]
|
||||
ldr r4, =AI_CAN_ATTACK_IN_DIRECTION
|
||||
ldrb r0, [r4, r6]
|
||||
cmp r0, #0
|
||||
bne _02319E88
|
||||
ldr r1, =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
|
||||
mov r3, #1
|
||||
ldr r0, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS
|
||||
mov r2, #0x63
|
||||
strb r3, [r4, r6]
|
||||
strb r6, [r1]
|
||||
str r2, [r0]
|
||||
mov r1, #0
|
||||
str r1, [r0, #0x20]
|
||||
add r5, r5, #1
|
||||
b _02319E88
|
||||
_023199C0:
|
||||
ldr r11, =DIRECTIONS_XY
|
||||
mov r8, #0
|
||||
_023199C8:
|
||||
mov r1, r8, lsl #2
|
||||
add r0, r11, r8, lsl #2
|
||||
ldrsh r6, [r10, #4]
|
||||
ldrsh r3, [r11, r1]
|
||||
ldrsh r2, [r10, #6]
|
||||
ldrsh r1, [r0, #2]
|
||||
add r0, r6, r3
|
||||
add r1, r2, r1
|
||||
bl GetTile
|
||||
ldr r6, [r0, #0xc]
|
||||
cmp r6, #0
|
||||
beq _02319A44
|
||||
ldr r0, [r6]
|
||||
cmp r0, #1
|
||||
bne _02319A44
|
||||
cmp r7, #0x10
|
||||
cmpne r7, #0x20
|
||||
beq _02319A24
|
||||
mov r0, r10
|
||||
mov r1, r8
|
||||
bl CanAttackInDirection
|
||||
cmp r0, #0
|
||||
beq _02319A44
|
||||
_02319A24:
|
||||
str r9, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, r10
|
||||
mov r3, r6
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319A44:
|
||||
add r8, r8, #1
|
||||
cmp r8, #8
|
||||
blt _023199C8
|
||||
b _02319E88
|
||||
_02319A54:
|
||||
cmp r7, #0x30
|
||||
bne _02319AC8
|
||||
ldr r7, =DUNGEON_PTR
|
||||
mov r6, #0
|
||||
_02319A64:
|
||||
ldr r0, [r7]
|
||||
add r0, r0, r6, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
|
||||
mov r0, r8
|
||||
bl EntityIsValid__02319F8C
|
||||
cmp r0, #0
|
||||
beq _02319AB8
|
||||
mov r0, r10
|
||||
mov r1, r8
|
||||
bl CanSeeTarget
|
||||
cmp r0, #0
|
||||
beq _02319AB8
|
||||
str r9, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, r10
|
||||
mov r3, r8
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319AB8:
|
||||
add r6, r6, #1
|
||||
cmp r6, #0x14
|
||||
blt _02319A64
|
||||
b _02319E88
|
||||
_02319AC8:
|
||||
cmp r7, #0x40
|
||||
bne _02319BB0
|
||||
mov r8, #0
|
||||
_02319AD4:
|
||||
ldr r0, =DIRECTIONS_XY
|
||||
mov r2, r8, lsl #2
|
||||
add r0, r0, r8, lsl #2
|
||||
ldrsh r6, [r0, #2]
|
||||
ldr r0, =DIRECTIONS_XY
|
||||
ldrsh r1, [r10, #6]
|
||||
ldrsh r7, [r0, r2]
|
||||
ldrsh r0, [r10, #4]
|
||||
add r1, r1, r6
|
||||
add r0, r0, r7
|
||||
bl GetTile
|
||||
mov r11, r0
|
||||
mov r0, r10
|
||||
mov r1, r8
|
||||
bl CanAttackInDirection
|
||||
cmp r0, #0
|
||||
beq _02319BA0
|
||||
ldr r3, [r11, #0xc]
|
||||
cmp r3, #0
|
||||
beq _02319B58
|
||||
ldr r0, [r3]
|
||||
cmp r0, #1
|
||||
bne _02319B58
|
||||
str r9, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, r10
|
||||
str r4, [sp, #4]
|
||||
mov r11, r5
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
cmp r11, r5
|
||||
bne _02319BA0
|
||||
_02319B58:
|
||||
ldrsh r0, [r10, #4]
|
||||
ldrsh r1, [r10, #6]
|
||||
add r0, r0, r7, lsl #1
|
||||
add r1, r1, r6, lsl #1
|
||||
bl GetTile
|
||||
ldr r3, [r0, #0xc]
|
||||
cmp r3, #0
|
||||
beq _02319BA0
|
||||
ldr r0, [r3]
|
||||
cmp r0, #1
|
||||
bne _02319BA0
|
||||
str r9, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, r10
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319BA0:
|
||||
add r8, r8, #1
|
||||
cmp r8, #8
|
||||
blt _02319AD4
|
||||
b _02319E88
|
||||
_02319BB0:
|
||||
cmp r7, #0x50
|
||||
cmpne r7, #0x80
|
||||
cmpne r7, #0x90
|
||||
bne _02319E00
|
||||
cmp r7, #0x50
|
||||
moveq r0, #0xa
|
||||
streq r0, [sp, #0xc]
|
||||
movne r0, #1
|
||||
strne r0, [sp, #0xc]
|
||||
cmp r7, #0x90
|
||||
moveq r0, #2
|
||||
streq r0, [sp, #0xc]
|
||||
mov r0, #0
|
||||
str r0, [sp, #0x20]
|
||||
mvn r0, #0
|
||||
str r0, [sp, #0x28]
|
||||
_02319BF0:
|
||||
ldr r0, =DUNGEON_PTR
|
||||
ldr r1, [r0]
|
||||
ldr r0, [sp, #0x20]
|
||||
add r0, r1, r0, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r0, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
|
||||
str r0, [sp, #0x18]
|
||||
bl EntityIsValid__02319F8C
|
||||
cmp r0, #0
|
||||
ldrne r0, [sp, #0x18]
|
||||
cmpne r10, r0
|
||||
beq _02319DE8
|
||||
ldr r1, [sp, #0x18]
|
||||
add r0, r10, #4
|
||||
add r1, r1, #4
|
||||
bl GetDirectionTowardsPosition
|
||||
ldr r1, =AI_CAN_ATTACK_IN_DIRECTION
|
||||
str r0, [sp, #0x1c]
|
||||
ldrb r0, [r1, r0]
|
||||
cmp r0, #0
|
||||
bne _02319DE8
|
||||
ldr r1, [sp, #0x18]
|
||||
mov r0, r10
|
||||
bl CanSeeTarget
|
||||
cmp r0, #0
|
||||
beq _02319DE8
|
||||
ldr r0, [sp, #0x18]
|
||||
ldrsh r6, [r10, #4]
|
||||
ldrsh r11, [r0, #4]
|
||||
sub r0, r6, r11
|
||||
bl abs
|
||||
str r0, [sp, #0x10]
|
||||
ldr r0, [sp, #0x18]
|
||||
ldrsh r8, [r10, #6]
|
||||
ldrsh r7, [r0, #6]
|
||||
sub r0, r8, r7
|
||||
bl abs
|
||||
ldr r1, [sp, #0x10]
|
||||
cmp r1, r0
|
||||
movgt r2, r1
|
||||
movle r2, r0
|
||||
cmp r2, #0xa
|
||||
movgt r0, #0
|
||||
bgt _02319D50
|
||||
ldr r1, [sp, #0xc]
|
||||
cmp r2, r1
|
||||
movgt r0, #0
|
||||
bgt _02319D50
|
||||
ldr r1, [sp, #0x10]
|
||||
cmp r1, r0
|
||||
ldr r0, [sp, #0x28]
|
||||
bne _02319CF8
|
||||
cmp r6, r11
|
||||
cmplt r8, r7
|
||||
movlt r0, #1
|
||||
blt _02319D44
|
||||
cmp r6, r11
|
||||
bge _02319CE4
|
||||
cmp r8, r7
|
||||
movgt r0, #3
|
||||
bgt _02319D44
|
||||
_02319CE4:
|
||||
cmp r6, r11
|
||||
cmpgt r8, r7
|
||||
movgt r0, #5
|
||||
movle r0, #7
|
||||
b _02319D44
|
||||
_02319CF8:
|
||||
cmp r6, r11
|
||||
bne _02319D0C
|
||||
cmp r8, r7
|
||||
movlt r0, #0
|
||||
blt _02319D44
|
||||
_02319D0C:
|
||||
cmp r6, r11
|
||||
bge _02319D20
|
||||
cmp r8, r7
|
||||
moveq r0, #2
|
||||
beq _02319D44
|
||||
_02319D20:
|
||||
cmp r6, r11
|
||||
bne _02319D34
|
||||
cmp r8, r7
|
||||
movgt r0, #4
|
||||
bgt _02319D44
|
||||
_02319D34:
|
||||
cmp r6, r11
|
||||
ble _02319D44
|
||||
cmp r8, r7
|
||||
moveq r0, #6
|
||||
_02319D44:
|
||||
cmp r0, #0
|
||||
movge r0, #1
|
||||
movlt r0, #0
|
||||
_02319D50:
|
||||
cmp r0, #0
|
||||
beq _02319DE8
|
||||
str r4, [sp]
|
||||
ldr r0, [sp, #0x24]
|
||||
ldr r2, [sp, #0x18]
|
||||
mov r1, r10
|
||||
mov r3, r9
|
||||
bl IsAiTargetEligible
|
||||
cmp r0, #0
|
||||
beq _02319DE8
|
||||
ldr r1, [sp, #0x18]
|
||||
ldr r2, [sp, #0x1c]
|
||||
ldr r3, [sp, #0xc]
|
||||
mov r0, r10
|
||||
bl IsTargetInRange
|
||||
cmp r0, #0
|
||||
beq _02319DE8
|
||||
ldr r1, =AI_CAN_ATTACK_IN_DIRECTION
|
||||
ldr r0, [sp, #0x1c]
|
||||
mov r2, #1
|
||||
strb r2, [r1, r0]
|
||||
mov r1, r0
|
||||
ldr r0, =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
|
||||
strb r1, [r0, r5]
|
||||
mov r0, r10
|
||||
mov r1, r9
|
||||
bl GetMoveTypeForMonster
|
||||
mov r3, r0
|
||||
ldr r1, [sp, #0x24]
|
||||
ldr r2, [sp, #0x18]
|
||||
mov r0, r10
|
||||
bl WeightMoveWithIqSkills
|
||||
ldr r1, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2
|
||||
str r0, [r1, r5, lsl #2]
|
||||
ldr r1, [sp, #0x18]
|
||||
ldr r0, =AI_POTENTIAL_ATTACK_TARGETS
|
||||
str r1, [r0, r5, lsl #2]
|
||||
add r5, r5, #1
|
||||
_02319DE8:
|
||||
ldr r0, [sp, #0x20]
|
||||
add r0, r0, #1
|
||||
str r0, [sp, #0x20]
|
||||
cmp r0, #0x14
|
||||
blt _02319BF0
|
||||
b _02319E88
|
||||
_02319E00:
|
||||
cmp r7, #0x60
|
||||
bne _02319E60
|
||||
ldr r7, =DUNGEON_PTR
|
||||
mov r6, #0
|
||||
_02319E10:
|
||||
ldr r0, [r7]
|
||||
add r0, r0, r6, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r8, [r0, #0xb78 + AI_CONSIDER_MOVE_OFFSET]
|
||||
mov r0, r8
|
||||
bl EntityIsValid__02319F8C
|
||||
cmp r0, #0
|
||||
beq _02319E50
|
||||
str r9, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r0, r5
|
||||
mov r2, r10
|
||||
mov r3, r8
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319E50:
|
||||
add r6, r6, #1
|
||||
cmp r6, #0x14
|
||||
blt _02319E10
|
||||
b _02319E88
|
||||
_02319E60:
|
||||
cmp r7, #0x70
|
||||
bne _02319E88
|
||||
str r9, [sp]
|
||||
ldr r1, [sp, #0x24]
|
||||
mov r2, r10
|
||||
mov r3, r10
|
||||
mov r0, #0
|
||||
str r4, [sp, #4]
|
||||
bl TryAddTargetToAiTargetList
|
||||
mov r5, r0
|
||||
_02319E88:
|
||||
cmp r5, #0
|
||||
ldreq r0, [sp, #8]
|
||||
moveq r1, #0
|
||||
streqb r1, [r0]
|
||||
beq _02319F60
|
||||
mov r0, #0
|
||||
str r0, [sp, #0x14]
|
||||
mov r4, r0
|
||||
ldr r3, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2
|
||||
b _02319EC4
|
||||
_02319EB0:
|
||||
ldr r2, [r3, r4, lsl #2]
|
||||
ldr r1, [sp, #0x14]
|
||||
add r4, r4, #1
|
||||
cmp r1, r2
|
||||
strlt r2, [sp, #0x14]
|
||||
_02319EC4:
|
||||
cmp r4, r5
|
||||
blt _02319EB0
|
||||
mov r6, #0
|
||||
mov r2, r6
|
||||
ldr r4, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2
|
||||
b _02319EF0
|
||||
_02319EDC:
|
||||
ldr r3, [r4, r6, lsl #2]
|
||||
ldr r1, [sp, #0x14]
|
||||
cmp r1, r3
|
||||
strne r2, [r4, r6, lsl #2]
|
||||
add r6, r6, #1
|
||||
_02319EF0:
|
||||
cmp r6, r5
|
||||
blt _02319EDC
|
||||
mov r3, #0
|
||||
ldr r2, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2
|
||||
b _02319F10
|
||||
_02319F04:
|
||||
ldr r1, [r2, r3, lsl #2]
|
||||
add r3, r3, #1
|
||||
add r0, r0, r1
|
||||
_02319F10:
|
||||
cmp r3, r5
|
||||
blt _02319F04
|
||||
bl DungeonRandInt
|
||||
mov r3, #0
|
||||
ldr r2, =AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2
|
||||
b _02319F38
|
||||
_02319F28:
|
||||
ldr r1, [r2, r3, lsl #2]
|
||||
subs r0, r0, r1
|
||||
bmi _02319F40
|
||||
add r3, r3, #1
|
||||
_02319F38:
|
||||
cmp r3, r5
|
||||
blt _02319F28
|
||||
_02319F40:
|
||||
ldr r1, =AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS
|
||||
ldr r0, [sp, #8]
|
||||
mov r2, #1
|
||||
strb r2, [r0]
|
||||
ldrb r2, [r1, r3]
|
||||
mov r1, #8
|
||||
strb r2, [r0, #1]
|
||||
str r1, [r0, #4]
|
||||
_02319F60:
|
||||
ldr r0, [sp, #0x14]
|
||||
_02319F64:
|
||||
add sp, sp, #0x2c
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||
}
|
||||
#endif
|
||||
|
||||
bool8 EntityIsValid__02319F8C(struct entity *entity)
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
#include "dungeon_ai_attack_2.h"
|
||||
#include "direction.h"
|
||||
#include "util.h"
|
||||
|
||||
extern bool8 AI_CAN_ATTACK_IN_DIRECTION[NUM_DIRECTIONS];
|
||||
|
||||
void ResetAiCanAttackInDirection()
|
||||
{
|
||||
for (s32 i = 0; i < NUM_DIRECTIONS; i++)
|
||||
{
|
||||
AI_CAN_ATTACK_IN_DIRECTION[i] = FALSE;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user