summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnonymousRandomPerson <chenghanngan.us@gmail.com>2022-02-21 15:59:34 -0500
committerAnonymousRandomPerson <chenghanngan.us@gmail.com>2022-02-21 17:03:34 -0500
commit598a588589cb581b269f2e46373c657ec897a3a3 (patch)
tree7a7cc3f2b8fc689e764b2a09f20233897f8ada9c
parent33d2d6175067e75cd222b8f05234221ec2d2b82b (diff)
Decomped CanAttackInFront()
-rw-r--r--asm/code_8057144.s6
-rw-r--r--asm/code_805CEB8.s2
-rw-r--r--asm/code_8070E3C.s418
-rw-r--r--asm/code_8071214.s311
-rw-r--r--data/data_8106FB5.s10
-rw-r--r--data/data_8106FDD.s6
-rw-r--r--include/dungeon_ai_targeting.h9
-rw-r--r--include/dungeon_ai_targeting_1.h (renamed from include/dungeon_ai.h)4
-rw-r--r--include/dungeon_ai_targeting_2.h (renamed from include/dungeon_ai_1.h)4
-rwxr-xr-xld_script.txt10
-rw-r--r--src/dungeon_ai_attack.c8
-rw-r--r--src/dungeon_ai_item_weight.c2
-rw-r--r--src/dungeon_ai_items.c2
-rw-r--r--src/dungeon_ai_targeting.c62
-rw-r--r--src/dungeon_ai_targeting_1.c (renamed from src/dungeon_ai.c)2
-rw-r--r--src/dungeon_ai_targeting_2.c (renamed from src/dungeon_ai_1.c)2
-rw-r--r--src/dungeon_capabilities_1.c6
17 files changed, 415 insertions, 449 deletions
diff --git a/asm/code_8057144.s b/asm/code_8057144.s
index e3b2bf9..dc65f27 100644
--- a/asm/code_8057144.s
+++ b/asm/code_8057144.s
@@ -285,8 +285,8 @@ _08057340:
bx r1
thumb_func_end sub_8057308
- thumb_func_start IsMoveUsable
-IsMoveUsable:
+ thumb_func_start IsMoveUsable_1
+IsMoveUsable_1:
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -357,7 +357,7 @@ _080573C0:
pop {r4-r7}
pop {r1}
bx r1
- thumb_func_end IsMoveUsable
+ thumb_func_end IsMoveUsable_1
thumb_func_start IsMoveUsable_2
IsMoveUsable_2:
diff --git a/asm/code_805CEB8.s b/asm/code_805CEB8.s
index 6448a5c..d318b14 100644
--- a/asm/code_805CEB8.s
+++ b/asm/code_805CEB8.s
@@ -12715,7 +12715,7 @@ _0806376A:
bgt _08063788
mov r0, r8
movs r2, 0x1
- bl IsMoveUsable
+ bl IsMoveUsable_1
lsls r0, 24
lsrs r0, 24
negs r1, r0
diff --git a/asm/code_8070E3C.s b/asm/code_8070E3C.s
index 3f644aa..5c8a0a7 100644
--- a/asm/code_8070E3C.s
+++ b/asm/code_8070E3C.s
@@ -394,420 +394,4 @@ _08071132:
bx r1
thumb_func_end sub_8071058
- thumb_func_start CanAttackInFront
-CanAttackInFront:
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- ldr r0, [r4, 0x70]
- movs r1, 0x2
- ldrsh r0, [r0, r1]
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bhi _08071152
- movs r5, 0x2
-_08071152:
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- ldr r1, _080711B0
- lsls r2, r6, 2
- adds r2, r1
- movs r3, 0
- ldrsh r1, [r2, r3]
- adds r0, r1
- movs r3, 0x6
- ldrsh r1, [r4, r3]
- movs r3, 0x2
- ldrsh r2, [r2, r3]
- adds r1, r2
- bl GetMapTile_1
- adds r2, r0, 0
- ldrh r1, [r2]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0807120C
- ldr r0, [r2, 0x10]
- cmp r0, 0
- beq _0807118A
- bl GetEntityType
- cmp r0, 0x1
- bne _0807120C
-_0807118A:
- bl IsFixedDungeon
- lsls r0, 24
- cmp r0, 0
- bne _080711DC
- ldr r0, [r4, 0x70]
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _080711AC
- adds r0, r4, 0
- movs r1, 0x9
- bl HasItem
- lsls r0, 24
- cmp r0, 0
- beq _080711B4
-_080711AC:
- movs r5, 0x3
- b _080711DC
- .align 2, 0
-_080711B0: .4byte gAdjacentTileOffsets
-_080711B4:
- adds r0, r4, 0
- movs r1, 0xC
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- bne _080711DA
- adds r0, r4, 0
- movs r1, 0xD
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _080711DC
- movs r0, 0x1
- ands r0, r6
- movs r5, 0x3
- cmp r0, 0
- beq _080711DC
-_080711DA:
- movs r5, 0x2
-_080711DC:
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- bl GetMapTile_1
- adds r2, r0, 0
- adds r1, r2, 0
- adds r1, 0xA
- adds r1, r5
- ldr r2, _08071208
- movs r0, 0x7
- ands r0, r6
- adds r0, r2
- ldrb r1, [r1]
- ldrb r0, [r0]
- ands r0, r1
- cmp r0, 0
- beq _0807120C
- movs r0, 0x1
- b _0807120E
- .align 2, 0
-_08071208: .4byte gDirectionBitMasks_2
-_0807120C:
- movs r0, 0
-_0807120E:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end CanAttackInFront
-
- thumb_func_start CanMoveForward
-CanMoveForward:
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- adds r7, r1, 0
- mov r8, r2
- ldr r0, [r4, 0x70]
- movs r1, 0x2
- ldrsh r0, [r0, r1]
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0
- mov r2, r8
- strb r0, [r2]
- movs r3, 0x4
- ldrsh r0, [r4, r3]
- ldr r1, _0807130C
- lsls r2, r7, 2
- adds r2, r1
- movs r3, 0
- ldrsh r1, [r2, r3]
- adds r0, r1
- movs r3, 0x6
- ldrsh r1, [r4, r3]
- movs r3, 0x2
- ldrsh r2, [r2, r3]
- adds r1, r2
- bl GetMapTile_1
- adds r5, r0, 0
- ldrh r1, [r5]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08071260
- b _0807137E
-_08071260:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08071286
- ldr r0, _08071310
- ldr r0, [r0]
- ldr r1, _08071314
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08071286
- adds r0, r4, 0
- movs r1, 0xF
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _08071286
- b _0807137E
-_08071286:
- ldr r0, [r5, 0x14]
- cmp r0, 0
- beq _080712B8
- adds r0, r4, 0
- movs r1, 0xE
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _080712B8
- ldr r0, [r5, 0x14]
- bl GetEntityType
- cmp r0, 0x2
- bne _080712B8
- ldr r0, [r5, 0x14]
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807137E
- ldr r0, [r4, 0x70]
- adds r0, 0xE8
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _0807137E
-_080712B8:
- ldrh r1, [r5]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0x2
- bne _080712E6
- ldr r1, _08071318
- ldr r0, _08071310
- ldr r0, [r0]
- ldr r2, _0807131C
- adds r0, r2
- movs r3, 0
- ldrsh r0, [r0, r3]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080712E6
- adds r0, r4, 0
- movs r1, 0x14
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- bne _0807137E
-_080712E6:
- bl IsFixedDungeon
- lsls r0, 24
- cmp r0, 0
- bne _08071348
- ldr r0, [r4, 0x70]
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _08071308
- adds r0, r4, 0
- movs r1, 0x9
- bl HasItem
- lsls r0, 24
- cmp r0, 0
- beq _08071320
-_08071308:
- movs r6, 0x3
- b _08071348
- .align 2, 0
-_0807130C: .4byte gAdjacentTileOffsets
-_08071310: .4byte gDungeonGlobalData
-_08071314: .4byte 0x00000671
-_08071318: .4byte gDungeonWaterType
-_0807131C: .4byte 0x00003a0e
-_08071320:
- adds r0, r4, 0
- movs r1, 0xC
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- bne _08071346
- adds r0, r4, 0
- movs r1, 0xD
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _08071348
- movs r0, 0x1
- ands r0, r7
- movs r6, 0x3
- cmp r0, 0
- beq _08071348
-_08071346:
- movs r6, 0x2
-_08071348:
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- bl GetMapTile_1
- adds r0, 0xA
- adds r0, r6
- ldr r2, _08071374
- movs r1, 0x7
- ands r1, r7
- adds r1, r2
- ldrb r2, [r0]
- ldrb r0, [r1]
- ands r0, r2
- cmp r0, 0
- beq _0807137E
- ldr r0, [r5, 0x10]
- cmp r0, 0
- bne _08071378
- movs r0, 0x1
- b _08071380
- .align 2, 0
-_08071374: .4byte gDirectionBitMasks_3
-_08071378:
- movs r0, 0x1
- mov r3, r8
- strb r0, [r3]
-_0807137E:
- movs r0, 0
-_08071380:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end CanMoveForward
-
- thumb_func_start IsAtJunction
-IsAtJunction:
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, [r4, 0x70]
- movs r1, 0x2
- ldrsh r0, [r0, r1]
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r5, r0, 24
- bl IsFixedDungeon
- lsls r0, 24
- cmp r0, 0
- bne _080713E2
- ldr r0, [r4, 0x70]
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _080713E0
- adds r0, r4, 0
- movs r1, 0x9
- bl HasItem
- lsls r0, 24
- cmp r0, 0
- bne _080713E0
- adds r0, r4, 0
- movs r1, 0xC
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _080713D2
- movs r5, 0x2
- b _080713E2
-_080713D2:
- adds r0, r4, 0
- movs r1, 0xD
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _080713E2
-_080713E0:
- movs r5, 0x3
-_080713E2:
- cmp r5, 0x3
- bne _08071408
- ldr r4, [r4, 0x70]
- movs r0, 0x64
- bl DungeonRandomCapped
- movs r1, 0xFD
- lsls r1, 1
- adds r2, r4, r1
- ldrh r1, [r2]
- adds r1, r0
- strh r1, [r2]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0xC7
- ble _08071458
- movs r0, 0
- strh r0, [r2]
- b _08071468
-_08071408:
- ldr r1, _0807145C
- ldr r0, _08071460
- ldr r0, [r0]
- ldr r2, _08071464
- adds r0, r2
- movs r2, 0
- ldrsh r0, [r0, r2]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08071432
- cmp r5, 0x1
- bne _08071432
- adds r0, r4, 0
- movs r1, 0x14
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _08071432
- movs r5, 0
-_08071432:
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- bl GetMapTile_1
- adds r0, 0xA
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0x54
- beq _08071468
- cmp r0, 0x51
- beq _08071468
- cmp r0, 0x45
- beq _08071468
- cmp r0, 0x15
- beq _08071468
- cmp r0, 0x55
- beq _08071468
-_08071458:
- movs r0, 0
- b _0807146A
- .align 2, 0
-_0807145C: .4byte gDungeonWaterType
-_08071460: .4byte gDungeonGlobalData
-_08071464: .4byte 0x00003a0e
-_08071468:
- movs r0, 0x1
-_0807146A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end IsAtJunction
-
- .align 2, 0
+ .align 2, 0 \ No newline at end of file
diff --git a/asm/code_8071214.s b/asm/code_8071214.s
new file mode 100644
index 0000000..a32189f
--- /dev/null
+++ b/asm/code_8071214.s
@@ -0,0 +1,311 @@
+ #include "asm/constants/gba_constants.inc"
+ #include "asm/macros.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start CanMoveForward
+CanMoveForward:
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ adds r4, r0, 0
+ adds r7, r1, 0
+ mov r8, r2
+ ldr r0, [r4, 0x70]
+ movs r1, 0x2
+ ldrsh r0, [r0, r1]
+ bl GetCrossableTerrain
+ lsls r0, 24
+ lsrs r6, r0, 24
+ movs r0, 0
+ mov r2, r8
+ strb r0, [r2]
+ movs r3, 0x4
+ ldrsh r0, [r4, r3]
+ ldr r1, _0807130C
+ lsls r2, r7, 2
+ adds r2, r1
+ movs r3, 0
+ ldrsh r1, [r2, r3]
+ adds r0, r1
+ movs r3, 0x6
+ ldrsh r1, [r4, r3]
+ movs r3, 0x2
+ ldrsh r2, [r2, r3]
+ adds r1, r2
+ bl GetMapTile_1
+ adds r5, r0, 0
+ ldrh r1, [r5]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ beq _08071260
+ b _0807137E
+_08071260:
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ beq _08071286
+ ldr r0, _08071310
+ ldr r0, [r0]
+ ldr r1, _08071314
+ adds r0, r1
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _08071286
+ adds r0, r4, 0
+ movs r1, 0xF
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _08071286
+ b _0807137E
+_08071286:
+ ldr r0, [r5, 0x14]
+ cmp r0, 0
+ beq _080712B8
+ adds r0, r4, 0
+ movs r1, 0xE
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _080712B8
+ ldr r0, [r5, 0x14]
+ bl GetEntityType
+ cmp r0, 0x2
+ bne _080712B8
+ ldr r0, [r5, 0x14]
+ adds r0, 0x20
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _0807137E
+ ldr r0, [r4, 0x70]
+ adds r0, 0xE8
+ ldrb r0, [r0]
+ cmp r0, 0x3
+ beq _0807137E
+_080712B8:
+ ldrh r1, [r5]
+ movs r0, 0x3
+ ands r0, r1
+ cmp r0, 0x2
+ bne _080712E6
+ ldr r1, _08071318
+ ldr r0, _08071310
+ ldr r0, [r0]
+ ldr r2, _0807131C
+ adds r0, r2
+ movs r3, 0
+ ldrsh r0, [r0, r3]
+ adds r0, r1
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ bne _080712E6
+ adds r0, r4, 0
+ movs r1, 0x14
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ bne _0807137E
+_080712E6:
+ bl IsFixedDungeon
+ lsls r0, 24
+ cmp r0, 0
+ bne _08071348
+ ldr r0, [r4, 0x70]
+ adds r0, 0xE4
+ ldrb r0, [r0]
+ cmp r0, 0x3
+ beq _08071308
+ adds r0, r4, 0
+ movs r1, 0x9
+ bl HasItem
+ lsls r0, 24
+ cmp r0, 0
+ beq _08071320
+_08071308:
+ movs r6, 0x3
+ b _08071348
+ .align 2, 0
+_0807130C: .4byte gAdjacentTileOffsets
+_08071310: .4byte gDungeonGlobalData
+_08071314: .4byte 0x00000671
+_08071318: .4byte gDungeonWaterType
+_0807131C: .4byte 0x00003a0e
+_08071320:
+ adds r0, r4, 0
+ movs r1, 0xC
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ bne _08071346
+ adds r0, r4, 0
+ movs r1, 0xD
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _08071348
+ movs r0, 0x1
+ ands r0, r7
+ movs r6, 0x3
+ cmp r0, 0
+ beq _08071348
+_08071346:
+ movs r6, 0x2
+_08071348:
+ movs r1, 0x4
+ ldrsh r0, [r4, r1]
+ movs r2, 0x6
+ ldrsh r1, [r4, r2]
+ bl GetMapTile_1
+ adds r0, 0xA
+ adds r0, r6
+ ldr r2, _08071374
+ movs r1, 0x7
+ ands r1, r7
+ adds r1, r2
+ ldrb r2, [r0]
+ ldrb r0, [r1]
+ ands r0, r2
+ cmp r0, 0
+ beq _0807137E
+ ldr r0, [r5, 0x10]
+ cmp r0, 0
+ bne _08071378
+ movs r0, 0x1
+ b _08071380
+ .align 2, 0
+_08071374: .4byte gDirectionBitMasks_3
+_08071378:
+ movs r0, 0x1
+ mov r3, r8
+ strb r0, [r3]
+_0807137E:
+ movs r0, 0
+_08071380:
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end CanMoveForward
+
+ thumb_func_start IsAtJunction
+IsAtJunction:
+ push {r4,r5,lr}
+ adds r4, r0, 0
+ ldr r0, [r4, 0x70]
+ movs r1, 0x2
+ ldrsh r0, [r0, r1]
+ bl GetCrossableTerrain
+ lsls r0, 24
+ lsrs r5, r0, 24
+ bl IsFixedDungeon
+ lsls r0, 24
+ cmp r0, 0
+ bne _080713E2
+ ldr r0, [r4, 0x70]
+ adds r0, 0xE4
+ ldrb r0, [r0]
+ cmp r0, 0x3
+ beq _080713E0
+ adds r0, r4, 0
+ movs r1, 0x9
+ bl HasItem
+ lsls r0, 24
+ cmp r0, 0
+ bne _080713E0
+ adds r0, r4, 0
+ movs r1, 0xC
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _080713D2
+ movs r5, 0x2
+ b _080713E2
+_080713D2:
+ adds r0, r4, 0
+ movs r1, 0xD
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _080713E2
+_080713E0:
+ movs r5, 0x3
+_080713E2:
+ cmp r5, 0x3
+ bne _08071408
+ ldr r4, [r4, 0x70]
+ movs r0, 0x64
+ bl DungeonRandomCapped
+ movs r1, 0xFD
+ lsls r1, 1
+ adds r2, r4, r1
+ ldrh r1, [r2]
+ adds r1, r0
+ strh r1, [r2]
+ lsls r1, 16
+ asrs r1, 16
+ cmp r1, 0xC7
+ ble _08071458
+ movs r0, 0
+ strh r0, [r2]
+ b _08071468
+_08071408:
+ ldr r1, _0807145C
+ ldr r0, _08071460
+ ldr r0, [r0]
+ ldr r2, _08071464
+ adds r0, r2
+ movs r2, 0
+ ldrsh r0, [r0, r2]
+ adds r0, r1
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ bne _08071432
+ cmp r5, 0x1
+ bne _08071432
+ adds r0, r4, 0
+ movs r1, 0x14
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _08071432
+ movs r5, 0
+_08071432:
+ movs r1, 0x4
+ ldrsh r0, [r4, r1]
+ movs r2, 0x6
+ ldrsh r1, [r4, r2]
+ bl GetMapTile_1
+ adds r0, 0xA
+ adds r0, r5
+ ldrb r0, [r0]
+ cmp r0, 0x54
+ beq _08071468
+ cmp r0, 0x51
+ beq _08071468
+ cmp r0, 0x45
+ beq _08071468
+ cmp r0, 0x15
+ beq _08071468
+ cmp r0, 0x55
+ beq _08071468
+_08071458:
+ movs r0, 0
+ b _0807146A
+ .align 2, 0
+_0807145C: .4byte gDungeonWaterType
+_08071460: .4byte gDungeonGlobalData
+_08071464: .4byte 0x00003a0e
+_08071468:
+ movs r0, 0x1
+_0807146A:
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end IsAtJunction
+
+ .align 2, 0
diff --git a/data/data_8106FB5.s b/data/data_8106FB5.s
index dc32b18..e958b9f 100644
--- a/data/data_8106FB5.s
+++ b/data/data_8106FB5.s
@@ -19,13 +19,3 @@ gUnknown_8106FC5: @ 8106FC5
gUnknown_8106FCD: @ 8106FCD
@ replacing .incbin "baserom.gba", 0x00106fcd, 0x8
.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
-
- .global gDirectionBitMasks_2
-gDirectionBitMasks_2: @ 8106FD5
-@ replacing .incbin "baserom.gba", 0x00106fd5, 0x8
- .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
-
- .global gDirectionBitMasks_3
-gDirectionBitMasks_3: @ 8106FDD
-@ replacing .incbin "baserom.gba", 0x00106fdd, 0x8
- .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
diff --git a/data/data_8106FDD.s b/data/data_8106FDD.s
new file mode 100644
index 0000000..4e984ab
--- /dev/null
+++ b/data/data_8106FDD.s
@@ -0,0 +1,6 @@
+ .section .rodata
+
+ .global gDirectionBitMasks_3
+gDirectionBitMasks_3: @ 8106FDD
+@ replacing .incbin "baserom.gba", 0x00106fdd, 0x8
+ .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 \ No newline at end of file
diff --git a/include/dungeon_ai_targeting.h b/include/dungeon_ai_targeting.h
new file mode 100644
index 0000000..945c490
--- /dev/null
+++ b/include/dungeon_ai_targeting.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_DUNGEON_AI_TARGETING_H
+#define GUARD_DUNGEON_AI_TARGETING_H
+
+#include "dungeon_entity.h"
+
+// 0x71138
+bool8 CanAttackInFront(struct DungeonEntity *pokemon, s32 direction);
+
+#endif
diff --git a/include/dungeon_ai.h b/include/dungeon_ai_targeting_1.h
index e3f7a37..49b700f 100644
--- a/include/dungeon_ai.h
+++ b/include/dungeon_ai_targeting_1.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_DUNGEON_AI_H
-#define GUARD_DUNGEON_AI_H
+#ifndef GUARD_DUNGEON_AI_TARGETING_1_H
+#define GUARD_DUNGEON_AI_TARGETING_1_H
#include "dungeon_entity.h"
diff --git a/include/dungeon_ai_1.h b/include/dungeon_ai_targeting_2.h
index dace65a..c314646 100644
--- a/include/dungeon_ai_1.h
+++ b/include/dungeon_ai_targeting_2.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_DUNGEON_AI_1_H
-#define GUARD_DUNGEON_AI_1_H
+#ifndef GUARD_DUNGEON_AI_TARGETING_2_H
+#define GUARD_DUNGEON_AI_TARGETING_2_H
#include "dungeon_entity.h"
diff --git a/ld_script.txt b/ld_script.txt
index cb2019c..71a1ad7 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -224,9 +224,11 @@ SECTIONS {
asm/code_8070BC0.o(.text);
src/dungeon_capabilities_1.o(.text);
asm/code_8070E3C.o(.text);
- src/dungeon_ai.o(.text);
+ src/dungeon_ai_targeting.o(.text);
+ asm/code_8071214.o(.text);
+ src/dungeon_ai_targeting_1.o(.text);
asm/code_8071518.o(.text);
- src/dungeon_ai_1.o(.text);
+ src/dungeon_ai_targeting_2.o(.text);
asm/code_807167C.o(.text);
src/dungeon_pokemon_attributes.o(.text);
asm/code_80718D8.o(.text);
@@ -423,7 +425,9 @@ SECTIONS {
data/data_8106A4C.o(.rodata);
src/dungeon_capabilities_1.o(.rodata);
data/data_8106FB5.o(.rodata);
- src/dungeon_ai_1.o(.rodata);
+ src/dungeon_ai_targeting.o(.rodata);
+ data/data_8106FDD.o(.rodata);
+ src/dungeon_ai_targeting_2.o(.rodata);
data/data_8107010.o(.rodata);
src/friend_area.o(.rodata);
data/data_810AC60.o(.rodata);
diff --git a/src/dungeon_ai_attack.c b/src/dungeon_ai_attack.c
index 092bab5..7368e66 100644
--- a/src/dungeon_ai_attack.c
+++ b/src/dungeon_ai_attack.c
@@ -10,7 +10,8 @@
#include "constants/type.h"
#include "charge_move.h"
#include "dungeon_action.h"
-#include "dungeon_ai.h"
+#include "dungeon_ai_targeting.h"
+#include "dungeon_ai_targeting_1.h"
#include "dungeon_ai_attack_1.h"
#include "dungeon_capabilities_1.h"
#include "dungeon_global_data.h"
@@ -37,9 +38,8 @@ extern s32 gPotentialTargetWeights_2[NUM_DIRECTIONS];
extern u8 gPotentialAttackTargetDirections[NUM_DIRECTIONS];
extern struct DungeonEntity *gPotentialTargets[NUM_DIRECTIONS];
-extern bool8 IsMoveUsable(struct DungeonEntity*, s32, bool8);
+extern bool8 IsMoveUsable_1(struct DungeonEntity*, s32, bool8);
extern bool8 TargetRegularAttack(struct DungeonEntity*, u32*, bool8);
-extern bool8 CanAttackInFront(struct DungeonEntity*, s32);
extern s32 WeightMoveIfUsable(s32, s32, struct DungeonEntity*, struct DungeonEntity*, struct PokemonMove*, bool8);
extern bool8 IsTargetInLineRange(struct DungeonEntity*, struct DungeonEntity*, s32);
extern bool8 CanUseStatusMove(s32, struct DungeonEntity*, struct DungeonEntity*, struct PokemonMove*, bool8);
@@ -182,7 +182,7 @@ void DecideAttack(struct DungeonEntity *pokemon)
move = &pokemonData->moves[i];
if (move->moveFlags & MOVE_FLAG_EXISTS &&
willNotUnlinkMove[i] &&
- IsMoveUsable(pokemon, i, hasPPChecker) &&
+ IsMoveUsable_1(pokemon, i, hasPPChecker) &&
move->moveFlags & MOVE_FLAG_ENABLED)
{
moveTargetResults[i].moveUsable = TRUE;
diff --git a/src/dungeon_ai_item_weight.c b/src/dungeon_ai_item_weight.c
index 08652b2..ce79ad4 100644
--- a/src/dungeon_ai_item_weight.c
+++ b/src/dungeon_ai_item_weight.c
@@ -3,7 +3,7 @@
#include "constants/status.h"
#include "constants/targeting.h"
-#include "dungeon_ai_1.h"
+#include "dungeon_ai_targeting_2.h"
#include "dungeon_map_access.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util.h"
diff --git a/src/dungeon_ai_items.c b/src/dungeon_ai_items.c
index 52aacc4..0135c62 100644
--- a/src/dungeon_ai_items.c
+++ b/src/dungeon_ai_items.c
@@ -6,10 +6,10 @@
#include "constants/status.h"
#include "constants/targeting.h"
#include "dungeon_action.h"
-#include "dungeon_ai_1.h"
#include "dungeon_ai_attack_1.h"
#include "dungeon_ai_item_weight.h"
#include "dungeon_ai_items.h"
+#include "dungeon_ai_targeting_2.h"
#include "dungeon_capabilities.h"
#include "dungeon_capabilities_1.h"
#include "dungeon_entity.h"
diff --git a/src/dungeon_ai_targeting.c b/src/dungeon_ai_targeting.c
new file mode 100644
index 0000000..ec5abd9
--- /dev/null
+++ b/src/dungeon_ai_targeting.c
@@ -0,0 +1,62 @@
+#include "global.h"
+#include "dungeon_ai_targeting.h"
+
+#include "constants/iq_skill.h"
+#include "constants/item.h"
+#include "constants/status.h"
+#include "dungeon_engine.h"
+#include "dungeon_items.h"
+#include "dungeon_map_access.h"
+#include "dungeon_movement.h"
+#include "dungeon_pokemon_attributes.h"
+#include "dungeon_util.h"
+#include "map.h"
+
+const u8 gDirectionBitMasks_2[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
+
+bool8 CanAttackInFront(struct DungeonEntity *pokemon, s32 direction)
+{
+ u8 crossableTerrain = GetCrossableTerrain(pokemon->entityData->entityID);
+ struct MapTile *tile;
+ if (crossableTerrain < CROSSABLE_TERRAIN_CREVICE)
+ {
+ crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
+ }
+ tile = GetMapTile_1(pokemon->posWorld.x + gAdjacentTileOffsets[direction].x,
+ pokemon->posWorld.y + gAdjacentTileOffsets[direction].y);
+ if (!(tile->tileType & TILE_TYPE_MAP_EDGE) &&
+ (tile->pokemon == NULL || GetEntityType(tile->pokemon) == ENTITY_POKEMON))
+ {
+ if (!IsFixedDungeon())
+ {
+ if (pokemon->entityData->transformStatus == TRANSFORM_STATUS_MOBILE ||
+ HasItem(pokemon, ITEM_ID_MOBILE_SCARF))
+ {
+ crossableTerrain = CROSSABLE_TERRAIN_WALL;
+ }
+ else if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER))
+ {
+ // BUG: If the Pokémon is a Ghost type that can normally attack through walls,
+ // All-Terrain Hiker/Super Mobile may make the AI think it can't attack through walls.
+ crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
+ }
+ else if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE))
+ {
+ if ((direction & 1) != 0)
+ {
+ crossableTerrain = CROSSABLE_TERRAIN_CREVICE;
+ }
+ else
+ {
+ crossableTerrain = CROSSABLE_TERRAIN_WALL;
+ }
+ }
+ }
+ tile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y);
+ if (tile->canMoveAdjacent[crossableTerrain] & gDirectionBitMasks_2[direction & DIRECTION_MASK])
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
diff --git a/src/dungeon_ai.c b/src/dungeon_ai_targeting_1.c
index b2e3b2e..5ff76b0 100644
--- a/src/dungeon_ai.c
+++ b/src/dungeon_ai_targeting_1.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "dungeon_ai.h"
+#include "dungeon_ai_targeting_1.h"
#include "constants/ability.h"
#include "constants/tactic.h"
diff --git a/src/dungeon_ai_1.c b/src/dungeon_ai_targeting_2.c
index 78c899f..83319e1 100644
--- a/src/dungeon_ai_1.c
+++ b/src/dungeon_ai_targeting_2.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "dungeon_ai_1.h"
+#include "dungeon_ai_targeting_2.h"
#include "constants/status.h"
#include "constants/targeting.h"
diff --git a/src/dungeon_capabilities_1.c b/src/dungeon_capabilities_1.c
index 605f9e9..ef566fe 100644
--- a/src/dungeon_capabilities_1.c
+++ b/src/dungeon_capabilities_1.c
@@ -5,7 +5,7 @@
#include "constants/iq_skill.h"
#include "constants/status.h"
#include "charge_move.h"
-#include "dungeon_ai.h"
+#include "dungeon_ai_targeting_1.h"
#include "dungeon_capabilities.h"
#include "dungeon_engine.h"
#include "dungeon_items.h"
@@ -15,7 +15,7 @@
#include "dungeon_util.h"
#include "map.h"
-const u8 gDirectionBitMasks[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
+const u8 gDirectionBitMasks_1[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
static inline bool8 JoinLocationCannotUseItems(struct DungeonEntityData *pokemonData)
{
@@ -119,7 +119,7 @@ bool8 CanMoveInDirection(struct DungeonEntity *pokemon, u32 facingDir)
}
}
currentMapTile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y);
- if (!(currentMapTile->canMoveAdjacent[crossableTerrain] & gDirectionBitMasks[facingDir & DIRECTION_MASK]))
+ if (!(currentMapTile->canMoveAdjacent[crossableTerrain] & gDirectionBitMasks_1[facingDir & DIRECTION_MASK]))
{
return FALSE;
}