mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-24 14:59:13 -05:00
Merge pull request #164 from AnonymousRandomPerson/main
Some checks failed
build / build (push) Has been cancelled
Some checks failed
build / build (push) Has been cancelled
Moved nonmatching ASM to C files
This commit is contained in:
commit
9532c3cbd1
|
|
@ -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
|
||||
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
|
||||
|
|
|
|||
|
|
@ -1426,7 +1426,7 @@ _0208AAE4:
|
|||
mov r0, r4
|
||||
mov r1, r6
|
||||
mvn r2, #0
|
||||
bl _dgeq
|
||||
bl _dgr
|
||||
bls _0208AB10
|
||||
ldr r0, [sp, #0xd0]
|
||||
mov r2, #1
|
||||
|
|
@ -1626,7 +1626,7 @@ sub_0208AD28: ; 0x0208AD28
|
|||
mov r0, r6
|
||||
mov r1, r7
|
||||
mvn r2, #0
|
||||
bl _dgeq
|
||||
bl _dgr
|
||||
bls _0208ADEC
|
||||
_0208ADE0:
|
||||
ldr r0, _0208AE04 ; =_022BCA70
|
||||
|
|
@ -2993,7 +2993,7 @@ _0208C104:
|
|||
mov r3, r1
|
||||
mov r0, r4
|
||||
mov r1, sl
|
||||
bl _dgeq
|
||||
bl _dgr
|
||||
bls _0208C238
|
||||
ldr r0, _0208BA48 ; =0x8800759C
|
||||
ldr r1, _0208BA4C ; =0x7E37E43C
|
||||
|
|
@ -6338,9 +6338,9 @@ sub_0208EED4: ; 0x0208EED4
|
|||
bx lr
|
||||
arm_func_end sub_0208EED4
|
||||
|
||||
; Other names: _d_fge
|
||||
arm_func_start _dgeq
|
||||
_dgeq: ; 0x0208EEDC
|
||||
; Other names: _d_fgt
|
||||
arm_func_start _dgr
|
||||
_dgr: ; 0x0208EEDC
|
||||
mov ip, #0x200000
|
||||
cmn ip, r1, lsl #1
|
||||
bhs _0208EF50
|
||||
|
|
@ -6384,7 +6384,7 @@ _0208EF64:
|
|||
cmp r2, #0
|
||||
bhi _0208EF0C
|
||||
b _0208EEF0
|
||||
arm_func_end _dgeq
|
||||
arm_func_end _dgr
|
||||
|
||||
; Other names: _d_fle
|
||||
arm_func_start _dleq
|
||||
|
|
|
|||
|
|
@ -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
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -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
|
||||
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
|
||||
|
|
@ -3,6 +3,10 @@
|
|||
|
||||
#include "dungeon_mode.h"
|
||||
|
||||
// Determines if using a given move against its intended targets would be redundant because all of them already have the effect caused by said move. Used for moves that affect the user or allies.
|
||||
// attacker: Pointer to the entity that is considering using the move
|
||||
// move: Move pointer
|
||||
// return: True if it makes sense to use the move, false if it would be redundant given the effects it causes and the effects that all the targets already have.
|
||||
bool8 StatusCheckerCheck(struct entity *attacker, struct move *move);
|
||||
// Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity).
|
||||
bool8 EntityIsValid__02333FAC(struct entity *entity);
|
||||
|
|
|
|||
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_
|
||||
4
main.lsf
4
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
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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 };
|
||||
1149
src/move_checks.c
1149
src/move_checks.c
File diff suppressed because it is too large
Load Diff
|
|
@ -109,12 +109,7 @@ new_asm_header = f"""\t.include "asm/macros.inc"
|
|||
new_asm_name = f'{new_asm_base_name}.s'
|
||||
|
||||
new_asm_lines = original_lines[function_end_line + 1:]
|
||||
if nonmatching:
|
||||
original_asm_lines = original_lines[:function_end_line + 1]
|
||||
original_asm_lines.append('#endif\n')
|
||||
original_asm_lines[function_start_line] = '#ifndef NONMATCHING\n' + original_asm_lines[function_start_line]
|
||||
else:
|
||||
original_asm_lines = original_lines[:function_start_line - 1]
|
||||
original_asm_lines = original_lines[:function_start_line - 1]
|
||||
|
||||
with open(LSF_FILE_PATH, 'r') as lsf_file:
|
||||
lsf_lines = lsf_file.readlines()
|
||||
|
|
@ -177,9 +172,39 @@ function_body = f"""{function_header}
|
|||
{{
|
||||
|
||||
}}"""
|
||||
|
||||
if nonmatching:
|
||||
asm_lines = original_lines[function_start_line + 2 : function_end_line - 1]
|
||||
for i, line in enumerate(asm_lines):
|
||||
# Replace some register mnemonics with numbered registers. These don't work when ASM is embedded in C.
|
||||
if not line.startswith('bl') and line.startswith('\t'):
|
||||
space_index = line.find(' ')
|
||||
line = line[:space_index] + line[space_index:].replace('sb', 'r9').replace('sl', 'r10').replace('fp', 'r11')
|
||||
|
||||
semicolon_index = line.find(';')
|
||||
if semicolon_index >= 0:
|
||||
if 'jump table' in line or 'case' in line:
|
||||
# Jump tables have comments, but semicolons are not recognized as comment markers in embedded ASM, so remove them.
|
||||
line = line[:semicolon_index - 1]
|
||||
else:
|
||||
# Replace word values at the end of the function.
|
||||
# They are conveniently already included within the ASM as comments.
|
||||
line = line[:line.find('_')] + line[semicolon_index + 2:]
|
||||
|
||||
asm_lines[i] = line
|
||||
|
||||
# .align is not needed in embedded ASM
|
||||
if '.align' in asm_lines[-1]:
|
||||
asm_lines = asm_lines[:-1]
|
||||
|
||||
asm_string = str.join('', asm_lines)
|
||||
|
||||
function_body = f"""#ifdef NONMATCHING
|
||||
{function_body}
|
||||
#else
|
||||
asm {function_header}
|
||||
{{
|
||||
{asm_string}}}
|
||||
#endif"""
|
||||
|
||||
# Add the extracted function to a .h and .c file.
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ LANGUAGE_KEYS_PMDSKY_DEBUG_TO_XMAP = {
|
|||
LANGUAGE_KEYS_XMAP_TO_PMDSKY_DEBUG = {value: key for key, value in LANGUAGE_KEYS_PMDSKY_DEBUG_TO_XMAP.items()}
|
||||
|
||||
# Symbols with duplicate addresses that should be ignored.
|
||||
SYMBOL_BLACKLIST = set([
|
||||
PMDSKY_DEBUG_SYMBOL_BLACKLIST = set([
|
||||
'GAME_STATE_VALUES',
|
||||
'MEMORY_ALLOCATION_TABLE'
|
||||
])
|
||||
|
|
@ -81,7 +81,7 @@ def read_pmdsky_debug_symbols() -> Dict[str, Dict[str, Dict[int, SymbolDetails]]
|
|||
|
||||
addresses: int | List[int] = symbol['address'][language]
|
||||
symbol_name: str = symbol['name']
|
||||
if symbol_name in SYMBOL_BLACKLIST:
|
||||
if symbol_name in PMDSKY_DEBUG_SYMBOL_BLACKLIST:
|
||||
continue
|
||||
|
||||
if 'aliases' in symbol:
|
||||
|
|
|
|||
|
|
@ -8,6 +8,11 @@ HEADER_FOLDER = 'include'
|
|||
XMAP_PATH_ARM7 = os.path.join('sub', 'build', 'arm7.nef.xMAP')
|
||||
MAIN_LSF_PATH = 'main.lsf'
|
||||
|
||||
# Symbols with duplicate addresses that should be ignored.
|
||||
XMAP_SYMBOL_BLACKLIST = set([
|
||||
'AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2'
|
||||
])
|
||||
|
||||
"""
|
||||
Dictionary format:
|
||||
{
|
||||
|
|
@ -78,6 +83,10 @@ def read_xmap_symbols_for_language(language: str) -> Dict[str, Dict[int, SymbolD
|
|||
elif current_section is not None and line.startswith(' ') and ('.text' in line or '.itcm' in line or line_is_data(line)) and len(line) > 28 and line[28] not in NON_FUNCTION_SYMBOLS:
|
||||
symbol_split = line[28:-1].split('\t')
|
||||
symbol_name = symbol_split[0]
|
||||
|
||||
if symbol_name in XMAP_SYMBOL_BLACKLIST:
|
||||
continue
|
||||
|
||||
symbol_address = int(line[2:10], 16)
|
||||
if line_is_data(line):
|
||||
if not symbol_name.startswith('$'):
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user