summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/code_8049590.s4
-rw-r--r--asm/code_80701A4.s985
-rw-r--r--asm/code_807034C.s970
-rw-r--r--include/dungeon_ai_movement.h9
-rw-r--r--include/dungeon_movement.h6
-rwxr-xr-xld_script.txt4
-rw-r--r--src/dungeon_ai_movement.c287
-rw-r--r--src/dungeon_capabilities_1.c2
-rw-r--r--src/dungeon_movement.c287
-rw-r--r--sym_ewram.txt2
10 files changed, 1288 insertions, 1268 deletions
diff --git a/asm/code_8049590.s b/asm/code_8049590.s
index 846f24c..07f51c4 100644
--- a/asm/code_8049590.s
+++ b/asm/code_8049590.s
@@ -4,7 +4,7 @@
.syntax unified
.text
-
+
thumb_func_start GetMapEntity
GetMapEntity:
push {r4,r5,lr}
@@ -292,7 +292,7 @@ _080497F8: .4byte 0x00003a0e
_080497FC: .4byte gDungeonFileArchive
_08049800: .4byte gUnknown_202F18C
_08049804: .4byte gUnknown_202EE8C
-_08049808: .4byte gUnknown_202F314
+_08049808: .4byte gWalkableTileToCrossableTerrain
_0804980C: .4byte gDungeonWaterType
_08049810:
strb r6, [r2, 0x4]
diff --git a/asm/code_80701A4.s b/asm/code_80701A4.s
index d8549f9..04b317b 100644
--- a/asm/code_80701A4.s
+++ b/asm/code_80701A4.s
@@ -211,989 +211,4 @@ _08070322:
bx r1
thumb_func_end sub_80701A4
- thumb_func_start GetCrossableTerrain
-GetCrossableTerrain:
- push {lr}
- lsls r0, 16
- asrs r0, 16
- bl GetWalkableTiles
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x3
- bhi _0807033E
- adds r0, r1, 0
- b _08070344
-_0807033E:
- ldr r0, _08070348
- adds r0, r1, r0
- ldrb r0, [r0]
-_08070344:
- pop {r1}
- bx r1
- .align 2, 0
-_08070348: .4byte gUnknown_202F314
- thumb_func_end GetCrossableTerrain
-
- thumb_func_start sub_807034C
-sub_807034C:
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 16
- asrs r2, r0, 16
- ldr r0, [r4, 0x10]
- cmp r0, 0
- bne _08070398
- ldrh r1, [r4]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08070398
- adds r0, r2, 0
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r2, r0, 24
- ldrh r0, [r4]
- movs r1, 0x3
- ands r1, r0
- cmp r2, 0x1
- beq _08070388
- cmp r2, 0x1
- bgt _08070382
- cmp r2, 0
- beq _0807038C
- b _08070390
-_08070382:
- cmp r2, 0x2
- beq _08070394
- b _08070390
-_08070388:
- cmp r1, 0x2
- beq _08070390
-_0807038C:
- cmp r1, 0x1
- bne _08070398
-_08070390:
- movs r0, 0
- b _0807039A
-_08070394:
- cmp r1, 0
- bne _08070390
-_08070398:
- movs r0, 0x1
-_0807039A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807034C
-
- thumb_func_start sub_80703A0
-sub_80703A0:
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- ldr r7, [r6, 0x70]
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- bl GetMapTileAtPosition
- adds r5, r0, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- blt _08070456
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- cmp r1, 0
- blt _08070456
- cmp r0, 0x37
- bgt _08070456
- cmp r1, 0x1F
- bgt _08070456
- ldr r0, [r5, 0x10]
- cmp r0, 0
- bne _08070456
- ldrh r1, [r5]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08070456
- bl IsFixedDungeon
- lsls r0, 24
- cmp r0, 0
- bne _08070400
- adds r0, r7, 0
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _0807044E
- adds r0, r6, 0
- movs r1, 0x9
- bl HasItem
- lsls r0, 24
- cmp r0, 0
- bne _0807044E
-_08070400:
- movs r1, 0x2
- ldrsh r0, [r7, r1]
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r4, r0, 24
- ldrh r0, [r5]
- movs r5, 0x3
- ands r5, r0
- adds r0, r6, 0
- movs r1, 0xC
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _08070422
- movs r4, 0x2
-_08070422:
- adds r0, r6, 0
- movs r1, 0xD
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _08070432
- movs r4, 0x3
-_08070432:
- cmp r4, 0x1
- beq _08070446
- cmp r4, 0x1
- bgt _08070440
- cmp r4, 0
- beq _0807044A
- b _0807044E
-_08070440:
- cmp r4, 0x2
- beq _08070452
- b _0807044E
-_08070446:
- cmp r5, 0x2
- beq _0807044E
-_0807044A:
- cmp r5, 0x1
- bne _08070456
-_0807044E:
- movs r0, 0
- b _08070458
-_08070452:
- cmp r5, 0
- bne _0807044E
-_08070456:
- movs r0, 0x1
-_08070458:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80703A0
-
- thumb_func_start CanCrossWalls
-CanCrossWalls:
- push {r4,lr}
- adds r1, r0, 0
- ldr r0, [r1, 0x70]
- adds r4, r0, 0
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _08070492
- adds r0, r1, 0
- movs r1, 0x9
- bl HasItem
- lsls r0, 24
- cmp r0, 0
- bne _08070492
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _08070492
- movs r0, 0
- b _08070494
-_08070492:
- movs r0, 0x1
-_08070494:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end CanCrossWalls
-
- thumb_func_start sub_807049C
-sub_807049C:
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- ldr r7, [r6, 0x70]
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- bl GetMapTileAtPosition
- adds r5, r0, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- blt _0807055A
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- cmp r1, 0
- blt _0807055A
- cmp r0, 0x37
- bgt _0807055A
- cmp r1, 0x1F
- bgt _0807055A
- ldrh r1, [r5]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0807055A
- ldr r0, [r5, 0x10]
- cmp r0, 0
- beq _080704E2
- bl GetEntityType
- cmp r0, 0x1
- bne _0807055A
-_080704E2:
- bl IsFixedDungeon
- lsls r0, 24
- cmp r0, 0
- bne _08070504
- adds r0, r7, 0
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _08070552
- adds r0, r6, 0
- movs r1, 0x9
- bl HasItem
- lsls r0, 24
- cmp r0, 0
- bne _08070552
-_08070504:
- movs r1, 0x2
- ldrsh r0, [r7, r1]
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r4, r0, 24
- ldrh r0, [r5]
- movs r5, 0x3
- ands r5, r0
- adds r0, r6, 0
- movs r1, 0xC
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _08070526
- movs r4, 0x2
-_08070526:
- adds r0, r6, 0
- movs r1, 0xD
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _08070536
- movs r4, 0x3
-_08070536:
- cmp r4, 0x1
- beq _0807054A
- cmp r4, 0x1
- bgt _08070544
- cmp r4, 0
- beq _0807054E
- b _08070552
-_08070544:
- cmp r4, 0x2
- beq _08070556
- b _08070552
-_0807054A:
- cmp r5, 0x2
- beq _08070552
-_0807054E:
- cmp r5, 0x1
- bne _0807055A
-_08070552:
- movs r0, 0
- b _0807055C
-_08070556:
- cmp r5, 0
- bne _08070552
-_0807055A:
- movs r0, 0x1
-_0807055C:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_807049C
-
- thumb_func_start sub_8070564
-sub_8070564:
- push {r4-r6,lr}
- adds r4, r1, 0
- ldr r6, [r0, 0x70]
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- bl GetMapTileAtPosition
- adds r5, r0, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- blt _080705E6
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- cmp r1, 0
- blt _080705E6
- cmp r0, 0x37
- bgt _080705E6
- cmp r1, 0x1F
- bgt _080705E6
- ldrh r1, [r5]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _080705E6
- ldr r0, [r5, 0x10]
- cmp r0, 0
- beq _080705A8
- bl GetEntityType
- cmp r0, 0x1
- bne _080705E6
-_080705A8:
- movs r1, 0x2
- ldrsh r0, [r6, r1]
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- ldrh r0, [r5]
- movs r1, 0x3
- ands r1, r0
- adds r0, r1, 0
- cmp r2, 0x1
- beq _080705DE
- cmp r2, 0x1
- bgt _080705CC
- cmp r2, 0
- beq _080705D8
- b _080705D4
-_080705CC:
- cmp r3, 0x3
- bgt _080705D4
- cmp r1, 0
- beq _080705E6
-_080705D4:
- movs r0, 0
- b _080705E8
-_080705D8:
- cmp r1, 0x1
- bne _080705E6
- b _080705D4
-_080705DE:
- cmp r1, 0x2
- beq _080705D4
- cmp r0, 0x1
- beq _080705D4
-_080705E6:
- movs r0, 0x1
-_080705E8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8070564
-
- thumb_func_start sub_80705F0
-sub_80705F0:
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- ldr r7, [r6, 0x70]
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- bl GetMapTileAtPosition
- adds r5, r0, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- blt _0807069A
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- cmp r1, 0
- blt _0807069A
- cmp r0, 0x37
- bgt _0807069A
- cmp r1, 0x1F
- bgt _0807069A
- ldrh r1, [r5]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0807069A
- ldr r0, [r5, 0x10]
- cmp r0, 0
- beq _08070636
- bl GetEntityType
- cmp r0, 0x1
- bne _0807069A
-_08070636:
- bl IsFixedDungeon
- lsls r0, 24
- cmp r0, 0
- bne _08070658
- adds r0, r7, 0
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _08070696
- adds r0, r6, 0
- movs r1, 0x9
- bl HasItem
- lsls r0, 24
- cmp r0, 0
- bne _08070696
-_08070658:
- movs r1, 0x2
- ldrsh r0, [r7, r1]
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r4, r0, 24
- ldrh r0, [r5]
- movs r5, 0x3
- ands r5, r0
- adds r0, r6, 0
- movs r1, 0xC
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _0807067A
- movs r4, 0x2
-_0807067A:
- adds r0, r6, 0
- movs r1, 0xD
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _0807068A
- movs r4, 0x3
-_0807068A:
- cmp r4, 0
- blt _08070696
- cmp r4, 0x2
- bgt _08070696
- cmp r5, 0
- beq _0807069A
-_08070696:
- movs r0, 0
- b _0807069C
-_0807069A:
- movs r0, 0x1
-_0807069C:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80705F0
-
- thumb_func_start sub_80706A4
-sub_80706A4:
- push {r4-r7,lr}
- adds r7, r0, 0
- adds r4, r1, 0
- ldr r6, [r7, 0x70]
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- bl GetMapTileAtPosition
- adds r5, r0, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- blt _0807076A
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- cmp r1, 0
- blt _0807076A
- cmp r0, 0x37
- bgt _0807076A
- cmp r1, 0x1F
- bgt _0807076A
- ldrh r1, [r5]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0807076A
- ldr r0, [r5, 0x10]
- cmp r0, 0
- beq _080706F2
- bl GetEntityType
- cmp r0, 0x1
- bne _0807076A
- ldr r0, [r5, 0x10]
- ldr r0, [r0, 0x70]
- cmp r0, r6
- bne _0807076A
-_080706F2:
- bl IsFixedDungeon
- lsls r0, 24
- cmp r0, 0
- bne _08070714
- adds r0, r6, 0
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _08070762
- adds r0, r7, 0
- movs r1, 0x9
- bl HasItem
- lsls r0, 24
- cmp r0, 0
- bne _08070762
-_08070714:
- movs r1, 0x2
- ldrsh r0, [r6, r1]
- bl GetCrossableTerrain
- lsls r0, 24
- lsrs r4, r0, 24
- ldrh r0, [r5]
- movs r5, 0x3
- ands r5, r0
- adds r0, r7, 0
- movs r1, 0xC
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _08070736
- movs r4, 0x2
-_08070736:
- adds r0, r7, 0
- movs r1, 0xD
- bl HasIQSkill
- lsls r0, 24
- cmp r0, 0
- beq _08070746
- movs r4, 0x3
-_08070746:
- cmp r4, 0x1
- beq _0807075A
- cmp r4, 0x1
- bgt _08070754
- cmp r4, 0
- beq _0807075E
- b _08070762
-_08070754:
- cmp r4, 0x2
- beq _08070766
- b _08070762
-_0807075A:
- cmp r5, 0x2
- beq _08070762
-_0807075E:
- cmp r5, 0x1
- bne _0807076A
-_08070762:
- movs r0, 0
- b _0807076C
-_08070766:
- cmp r5, 0
- bne _08070762
-_0807076A:
- movs r0, 0x1
-_0807076C:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80706A4
-
- thumb_func_start GetMovementSpeed
-GetMovementSpeed:
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r5, [r6, 0x70]
- movs r4, 0
- movs r0, 0x84
- lsls r0, 1
- adds r1, r5, r0
- movs r2, 0x4
-_08070784:
- ldrb r0, [r1, 0x5]
- cmp r0, 0
- beq _0807078C
- subs r4, 0x1
-_0807078C:
- ldrb r0, [r1]
- cmp r0, 0
- beq _08070794
- adds r4, 0x1
-_08070794:
- adds r1, 0x1
- subs r2, 0x1
- cmp r2, 0
- bge _08070784
- adds r0, r5, 0
- adds r0, 0xAC
- ldrb r0, [r0]
- cmp r0, 0x4
- bne _080707A8
- subs r4, 0x1
-_080707A8:
- movs r1, 0x2
- ldrsh r0, [r5, r1]
- bl GetMoveSpeed
- adds r4, r0
- adds r0, r6, 0
- movs r1, 0x6
- bl HasType
- lsls r0, 24
- cmp r0, 0
- beq _080707D0
- adds r0, r6, 0
- bl GetWeather
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x7
- bne _080707D0
- adds r4, 0x1
-_080707D0:
- movs r0, 0x4
- ldrsh r1, [r5, r0]
- ldr r0, _0807081C
- cmp r1, r0
- bne _080707DC
- adds r4, 0x1
-_080707DC:
- movs r0, 0x2
- ldrsh r1, [r5, r0]
- movs r0, 0xBE
- lsls r0, 1
- cmp r1, r0
- bne _080707FE
- ldrb r0, [r5, 0x6]
- cmp r0, 0
- beq _080707FE
- ldr r0, _08070820
- ldr r0, [r0]
- ldr r1, _08070824
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _080707FE
- adds r4, 0x1
-_080707FE:
- cmp r4, 0
- bge _08070804
- movs r4, 0
-_08070804:
- cmp r4, 0x4
- ble _0807080A
- movs r4, 0x4
-_0807080A:
- movs r1, 0x82
- lsls r1, 1
- adds r0, r5, r1
- str r4, [r0]
- adds r0, r4, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0807081C: .4byte 0x000001a3
-_08070820: .4byte gDungeonGlobalData
-_08070824: .4byte 0x0000066e
- thumb_func_end GetMovementSpeed
-
- thumb_func_start sub_8070828
-sub_8070828:
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- movs r5, 0
- bl EntityExists
- lsls r0, 24
- cmp r0, 0
- bne _08070840
- movs r0, 0
- b _080708AE
-_08070840:
- adds r0, r4, 0
- movs r1, 0x1B
- bl HasAbility
- lsls r0, 24
- cmp r0, 0
- beq _0807085E
- adds r0, r4, 0
- bl GetWeather
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _0807085E
- movs r5, 0x1
-_0807085E:
- adds r0, r4, 0
- movs r1, 0x4A
- bl HasAbility
- lsls r0, 24
- cmp r0, 0
- beq _0807087C
- adds r0, r4, 0
- bl GetWeather
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0807087C
- movs r5, 0x1
-_0807087C:
- cmp r6, 0
- beq _080708A0
- ldr r0, [r4, 0x70]
- movs r1, 0x40
- adds r2, r5, 0
- bl SetVisualFlags
- lsls r0, 24
- cmp r0, 0
- beq _080708A0
- adds r0, r4, 0
- bl sub_80429B4
- ldr r0, _080708A8
- ldr r1, [r0]
- adds r0, r4, 0
- bl SendMessage
-_080708A0:
- cmp r5, 0
- bne _080708AC
- movs r0, 0x1
- b _080708AE
- .align 2, 0
-_080708A8: .4byte gUnknown_80FEE80
-_080708AC:
- movs r0, 0x2
-_080708AE:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8070828
-
- thumb_func_start SetMessageArgument_2
-SetMessageArgument_2:
- push {r4,r5,lr}
- adds r3, r0, 0
- adds r4, r2, 0
- ldr r0, _080708E8
- ldr r2, [r0]
- ldr r5, _080708EC
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, 0
- bne _080708DC
- adds r5, 0x6
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, 0
- bne _080708DC
- adds r0, r1, 0
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080708F4
-_080708DC:
- ldrb r0, [r1, 0x6]
- cmp r0, 0
- beq _080708F4
- ldr r0, _080708F0
- b _08070900
- .align 2, 0
-_080708E8: .4byte gDungeonGlobalData
-_080708EC: .4byte 0x0001820a
-_080708F0: .4byte gUnknown_80F8988
-_080708F4:
- adds r0, r1, 0
- adds r0, 0xC8
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _08070910
- ldr r0, _0807090C
-_08070900:
- ldr r1, [r0]
- adds r0, r3, 0
- bl strcpy
- b _0807095A
- .align 2, 0
-_0807090C: .4byte gUnknown_80F8968
-_08070910:
- ldrb r0, [r1, 0x6]
- cmp r0, 0
- beq _08070942
- adds r0, r1, 0
- adds r0, 0x40
- ldrb r0, [r0]
- cmp r0, 0x4A
- beq _0807092A
- adds r0, r1, 0
- adds r0, 0xA4
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08070936
-_0807092A:
- movs r0, 0x4
- ldrsh r1, [r1, r0]
- adds r0, r3, 0
- bl CopyYellowSpeciesNametoBuffer
- b _0807095A
-_08070936:
- movs r5, 0x4
- ldrsh r1, [r1, r5]
- adds r0, r3, 0
- bl CopyCyanSpeciesNametoBuffer
- b _0807095A
-_08070942:
- ldr r2, _08070960
- ldrb r1, [r1, 0xA]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08070964
- adds r0, r1
- ldr r1, [r2]
- adds r1, r0
- adds r0, r3, 0
- adds r2, r4, 0
- bl sub_808D9DC
-_0807095A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08070960: .4byte gRecruitedPokemonRef
-_08070964: .4byte 0x00008df8
- thumb_func_end SetMessageArgument_2
-
- thumb_func_start sub_8070968
-sub_8070968:
- push {r4,lr}
- adds r4, r0, 0
- adds r3, r2, 0
- adds r0, r1, 0
- adds r0, 0xC8
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _08070990
- ldr r1, _08070988
- adds r2, 0x30
- ldr r0, _0807098C
- ldr r3, [r0]
- adds r0, r4, 0
- bl ExpandPlaceholdersBuffer
- b _080709BA
- .align 2, 0
-_08070988: .4byte gUnknown_8106FA4
-_0807098C: .4byte gUnknown_80F8974
-_08070990:
- ldrb r0, [r1, 0x6]
- cmp r0, 0
- beq _080709A2
- movs r0, 0x4
- ldrsh r1, [r1, r0]
- adds r0, r4, 0
- bl CopyCyanSpeciesNametoBuffer
- b _080709BA
-_080709A2:
- ldr r2, _080709C0
- ldrb r1, [r1, 0xA]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080709C4
- adds r0, r1
- ldr r1, [r2]
- adds r1, r0
- adds r0, r4, 0
- adds r2, r3, 0
- bl sub_808D9DC
-_080709BA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080709C0: .4byte gRecruitedPokemonRef
-_080709C4: .4byte 0x00008df8
- thumb_func_end sub_8070968
-
- thumb_func_start sub_80709C8
-sub_80709C8:
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _080709F8
- ldr r2, [r0]
- ldr r4, _080709FC
- adds r0, r2, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _080709EE
- adds r4, 0x6
- adds r0, r2, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _080709EE
- adds r0, r1, 0
- adds r0, 0xE4
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08070A04
-_080709EE:
- ldrb r0, [r1, 0x6]
- cmp r0, 0
- beq _08070A04
- ldr r0, _08070A00
- b _08070A10
- .align 2, 0
-_080709F8: .4byte gDungeonGlobalData
-_080709FC: .4byte 0x0001820a
-_08070A00: .4byte gUnknown_80F8994
-_08070A04:
- adds r0, r1, 0
- adds r0, 0xC8
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _08070A20
- ldr r0, _08070A1C
-_08070A10:
- ldr r1, [r0]
- adds r0, r3, 0
- bl strcpy
- b _08070A48
- .align 2, 0
-_08070A1C: .4byte gUnknown_80F8974
-_08070A20:
- ldrb r0, [r1, 0x6]
- cmp r0, 0
- beq _08070A32
- movs r0, 0x4
- ldrsh r1, [r1, r0]
- adds r0, r3, 0
- bl CopySpeciesNametoBuffer
- b _08070A48
-_08070A32:
- ldr r2, _08070A50
- ldrb r1, [r1, 0xA]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08070A54
- adds r0, r1
- ldr r1, [r2]
- adds r1, r0
- adds r0, r3, 0
- bl sub_808DA0C
-_08070A48:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08070A50: .4byte gRecruitedPokemonRef
-_08070A54: .4byte 0x00008df8
- thumb_func_end sub_80709C8
-
.align 2, 0 \ No newline at end of file
diff --git a/asm/code_807034C.s b/asm/code_807034C.s
new file mode 100644
index 0000000..8ce57cc
--- /dev/null
+++ b/asm/code_807034C.s
@@ -0,0 +1,970 @@
+ #include "asm/constants/gba_constants.inc"
+ #include "asm/macros.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start sub_807034C
+sub_807034C:
+ push {r4,lr}
+ adds r4, r1, 0
+ lsls r0, 16
+ asrs r2, r0, 16
+ ldr r0, [r4, 0x10]
+ cmp r0, 0
+ bne _08070398
+ ldrh r1, [r4]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ bne _08070398
+ adds r0, r2, 0
+ bl GetCrossableTerrain
+ lsls r0, 24
+ lsrs r2, r0, 24
+ ldrh r0, [r4]
+ movs r1, 0x3
+ ands r1, r0
+ cmp r2, 0x1
+ beq _08070388
+ cmp r2, 0x1
+ bgt _08070382
+ cmp r2, 0
+ beq _0807038C
+ b _08070390
+_08070382:
+ cmp r2, 0x2
+ beq _08070394
+ b _08070390
+_08070388:
+ cmp r1, 0x2
+ beq _08070390
+_0807038C:
+ cmp r1, 0x1
+ bne _08070398
+_08070390:
+ movs r0, 0
+ b _0807039A
+_08070394:
+ cmp r1, 0
+ bne _08070390
+_08070398:
+ movs r0, 0x1
+_0807039A:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_807034C
+
+ thumb_func_start sub_80703A0
+sub_80703A0:
+ push {r4-r7,lr}
+ adds r6, r0, 0
+ adds r4, r1, 0
+ ldr r7, [r6, 0x70]
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ bl GetMapTileAtPosition
+ adds r5, r0, 0
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ cmp r0, 0
+ blt _08070456
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ cmp r1, 0
+ blt _08070456
+ cmp r0, 0x37
+ bgt _08070456
+ cmp r1, 0x1F
+ bgt _08070456
+ ldr r0, [r5, 0x10]
+ cmp r0, 0
+ bne _08070456
+ ldrh r1, [r5]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ bne _08070456
+ bl IsFixedDungeon
+ lsls r0, 24
+ cmp r0, 0
+ bne _08070400
+ adds r0, r7, 0
+ adds r0, 0xE4
+ ldrb r0, [r0]
+ cmp r0, 0x3
+ beq _0807044E
+ adds r0, r6, 0
+ movs r1, 0x9
+ bl HasItem
+ lsls r0, 24
+ cmp r0, 0
+ bne _0807044E
+_08070400:
+ movs r1, 0x2
+ ldrsh r0, [r7, r1]
+ bl GetCrossableTerrain
+ lsls r0, 24
+ lsrs r4, r0, 24
+ ldrh r0, [r5]
+ movs r5, 0x3
+ ands r5, r0
+ adds r0, r6, 0
+ movs r1, 0xC
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _08070422
+ movs r4, 0x2
+_08070422:
+ adds r0, r6, 0
+ movs r1, 0xD
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _08070432
+ movs r4, 0x3
+_08070432:
+ cmp r4, 0x1
+ beq _08070446
+ cmp r4, 0x1
+ bgt _08070440
+ cmp r4, 0
+ beq _0807044A
+ b _0807044E
+_08070440:
+ cmp r4, 0x2
+ beq _08070452
+ b _0807044E
+_08070446:
+ cmp r5, 0x2
+ beq _0807044E
+_0807044A:
+ cmp r5, 0x1
+ bne _08070456
+_0807044E:
+ movs r0, 0
+ b _08070458
+_08070452:
+ cmp r5, 0
+ bne _0807044E
+_08070456:
+ movs r0, 0x1
+_08070458:
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_80703A0
+
+ thumb_func_start CanCrossWalls
+CanCrossWalls:
+ push {r4,lr}
+ adds r1, r0, 0
+ ldr r0, [r1, 0x70]
+ adds r4, r0, 0
+ adds r0, 0xE4
+ ldrb r0, [r0]
+ cmp r0, 0x3
+ beq _08070492
+ adds r0, r1, 0
+ movs r1, 0x9
+ bl HasItem
+ lsls r0, 24
+ cmp r0, 0
+ bne _08070492
+ movs r1, 0x2
+ ldrsh r0, [r4, r1]
+ bl GetCrossableTerrain
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x3
+ beq _08070492
+ movs r0, 0
+ b _08070494
+_08070492:
+ movs r0, 0x1
+_08070494:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end CanCrossWalls
+
+ thumb_func_start sub_807049C
+sub_807049C:
+ push {r4-r7,lr}
+ adds r6, r0, 0
+ adds r4, r1, 0
+ ldr r7, [r6, 0x70]
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ bl GetMapTileAtPosition
+ adds r5, r0, 0
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ cmp r0, 0
+ blt _0807055A
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ cmp r1, 0
+ blt _0807055A
+ cmp r0, 0x37
+ bgt _0807055A
+ cmp r1, 0x1F
+ bgt _0807055A
+ ldrh r1, [r5]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ bne _0807055A
+ ldr r0, [r5, 0x10]
+ cmp r0, 0
+ beq _080704E2
+ bl GetEntityType
+ cmp r0, 0x1
+ bne _0807055A
+_080704E2:
+ bl IsFixedDungeon
+ lsls r0, 24
+ cmp r0, 0
+ bne _08070504
+ adds r0, r7, 0
+ adds r0, 0xE4
+ ldrb r0, [r0]
+ cmp r0, 0x3
+ beq _08070552
+ adds r0, r6, 0
+ movs r1, 0x9
+ bl HasItem
+ lsls r0, 24
+ cmp r0, 0
+ bne _08070552
+_08070504:
+ movs r1, 0x2
+ ldrsh r0, [r7, r1]
+ bl GetCrossableTerrain
+ lsls r0, 24
+ lsrs r4, r0, 24
+ ldrh r0, [r5]
+ movs r5, 0x3
+ ands r5, r0
+ adds r0, r6, 0
+ movs r1, 0xC
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _08070526
+ movs r4, 0x2
+_08070526:
+ adds r0, r6, 0
+ movs r1, 0xD
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _08070536
+ movs r4, 0x3
+_08070536:
+ cmp r4, 0x1
+ beq _0807054A
+ cmp r4, 0x1
+ bgt _08070544
+ cmp r4, 0
+ beq _0807054E
+ b _08070552
+_08070544:
+ cmp r4, 0x2
+ beq _08070556
+ b _08070552
+_0807054A:
+ cmp r5, 0x2
+ beq _08070552
+_0807054E:
+ cmp r5, 0x1
+ bne _0807055A
+_08070552:
+ movs r0, 0
+ b _0807055C
+_08070556:
+ cmp r5, 0
+ bne _08070552
+_0807055A:
+ movs r0, 0x1
+_0807055C:
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_807049C
+
+ thumb_func_start sub_8070564
+sub_8070564:
+ push {r4-r6,lr}
+ adds r4, r1, 0
+ ldr r6, [r0, 0x70]
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ bl GetMapTileAtPosition
+ adds r5, r0, 0
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ cmp r0, 0
+ blt _080705E6
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ cmp r1, 0
+ blt _080705E6
+ cmp r0, 0x37
+ bgt _080705E6
+ cmp r1, 0x1F
+ bgt _080705E6
+ ldrh r1, [r5]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ bne _080705E6
+ ldr r0, [r5, 0x10]
+ cmp r0, 0
+ beq _080705A8
+ bl GetEntityType
+ cmp r0, 0x1
+ bne _080705E6
+_080705A8:
+ movs r1, 0x2
+ ldrsh r0, [r6, r1]
+ bl GetCrossableTerrain
+ lsls r0, 24
+ lsrs r2, r0, 24
+ adds r3, r2, 0
+ ldrh r0, [r5]
+ movs r1, 0x3
+ ands r1, r0
+ adds r0, r1, 0
+ cmp r2, 0x1
+ beq _080705DE
+ cmp r2, 0x1
+ bgt _080705CC
+ cmp r2, 0
+ beq _080705D8
+ b _080705D4
+_080705CC:
+ cmp r3, 0x3
+ bgt _080705D4
+ cmp r1, 0
+ beq _080705E6
+_080705D4:
+ movs r0, 0
+ b _080705E8
+_080705D8:
+ cmp r1, 0x1
+ bne _080705E6
+ b _080705D4
+_080705DE:
+ cmp r1, 0x2
+ beq _080705D4
+ cmp r0, 0x1
+ beq _080705D4
+_080705E6:
+ movs r0, 0x1
+_080705E8:
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8070564
+
+ thumb_func_start sub_80705F0
+sub_80705F0:
+ push {r4-r7,lr}
+ adds r6, r0, 0
+ adds r4, r1, 0
+ ldr r7, [r6, 0x70]
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ bl GetMapTileAtPosition
+ adds r5, r0, 0
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ cmp r0, 0
+ blt _0807069A
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ cmp r1, 0
+ blt _0807069A
+ cmp r0, 0x37
+ bgt _0807069A
+ cmp r1, 0x1F
+ bgt _0807069A
+ ldrh r1, [r5]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ bne _0807069A
+ ldr r0, [r5, 0x10]
+ cmp r0, 0
+ beq _08070636
+ bl GetEntityType
+ cmp r0, 0x1
+ bne _0807069A
+_08070636:
+ bl IsFixedDungeon
+ lsls r0, 24
+ cmp r0, 0
+ bne _08070658
+ adds r0, r7, 0
+ adds r0, 0xE4
+ ldrb r0, [r0]
+ cmp r0, 0x3
+ beq _08070696
+ adds r0, r6, 0
+ movs r1, 0x9
+ bl HasItem
+ lsls r0, 24
+ cmp r0, 0
+ bne _08070696
+_08070658:
+ movs r1, 0x2
+ ldrsh r0, [r7, r1]
+ bl GetCrossableTerrain
+ lsls r0, 24
+ lsrs r4, r0, 24
+ ldrh r0, [r5]
+ movs r5, 0x3
+ ands r5, r0
+ adds r0, r6, 0
+ movs r1, 0xC
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _0807067A
+ movs r4, 0x2
+_0807067A:
+ adds r0, r6, 0
+ movs r1, 0xD
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _0807068A
+ movs r4, 0x3
+_0807068A:
+ cmp r4, 0
+ blt _08070696
+ cmp r4, 0x2
+ bgt _08070696
+ cmp r5, 0
+ beq _0807069A
+_08070696:
+ movs r0, 0
+ b _0807069C
+_0807069A:
+ movs r0, 0x1
+_0807069C:
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_80705F0
+
+ thumb_func_start sub_80706A4
+sub_80706A4:
+ push {r4-r7,lr}
+ adds r7, r0, 0
+ adds r4, r1, 0
+ ldr r6, [r7, 0x70]
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ bl GetMapTileAtPosition
+ adds r5, r0, 0
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ cmp r0, 0
+ blt _0807076A
+ movs r2, 0x2
+ ldrsh r1, [r4, r2]
+ cmp r1, 0
+ blt _0807076A
+ cmp r0, 0x37
+ bgt _0807076A
+ cmp r1, 0x1F
+ bgt _0807076A
+ ldrh r1, [r5]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ bne _0807076A
+ ldr r0, [r5, 0x10]
+ cmp r0, 0
+ beq _080706F2
+ bl GetEntityType
+ cmp r0, 0x1
+ bne _0807076A
+ ldr r0, [r5, 0x10]
+ ldr r0, [r0, 0x70]
+ cmp r0, r6
+ bne _0807076A
+_080706F2:
+ bl IsFixedDungeon
+ lsls r0, 24
+ cmp r0, 0
+ bne _08070714
+ adds r0, r6, 0
+ adds r0, 0xE4
+ ldrb r0, [r0]
+ cmp r0, 0x3
+ beq _08070762
+ adds r0, r7, 0
+ movs r1, 0x9
+ bl HasItem
+ lsls r0, 24
+ cmp r0, 0
+ bne _08070762
+_08070714:
+ movs r1, 0x2
+ ldrsh r0, [r6, r1]
+ bl GetCrossableTerrain
+ lsls r0, 24
+ lsrs r4, r0, 24
+ ldrh r0, [r5]
+ movs r5, 0x3
+ ands r5, r0
+ adds r0, r7, 0
+ movs r1, 0xC
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _08070736
+ movs r4, 0x2
+_08070736:
+ adds r0, r7, 0
+ movs r1, 0xD
+ bl HasIQSkill
+ lsls r0, 24
+ cmp r0, 0
+ beq _08070746
+ movs r4, 0x3
+_08070746:
+ cmp r4, 0x1
+ beq _0807075A
+ cmp r4, 0x1
+ bgt _08070754
+ cmp r4, 0
+ beq _0807075E
+ b _08070762
+_08070754:
+ cmp r4, 0x2
+ beq _08070766
+ b _08070762
+_0807075A:
+ cmp r5, 0x2
+ beq _08070762
+_0807075E:
+ cmp r5, 0x1
+ bne _0807076A
+_08070762:
+ movs r0, 0
+ b _0807076C
+_08070766:
+ cmp r5, 0
+ bne _08070762
+_0807076A:
+ movs r0, 0x1
+_0807076C:
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_80706A4
+
+ thumb_func_start GetMovementSpeed
+GetMovementSpeed:
+ push {r4-r6,lr}
+ adds r6, r0, 0
+ ldr r5, [r6, 0x70]
+ movs r4, 0
+ movs r0, 0x84
+ lsls r0, 1
+ adds r1, r5, r0
+ movs r2, 0x4
+_08070784:
+ ldrb r0, [r1, 0x5]
+ cmp r0, 0
+ beq _0807078C
+ subs r4, 0x1
+_0807078C:
+ ldrb r0, [r1]
+ cmp r0, 0
+ beq _08070794
+ adds r4, 0x1
+_08070794:
+ adds r1, 0x1
+ subs r2, 0x1
+ cmp r2, 0
+ bge _08070784
+ adds r0, r5, 0
+ adds r0, 0xAC
+ ldrb r0, [r0]
+ cmp r0, 0x4
+ bne _080707A8
+ subs r4, 0x1
+_080707A8:
+ movs r1, 0x2
+ ldrsh r0, [r5, r1]
+ bl GetMoveSpeed
+ adds r4, r0
+ adds r0, r6, 0
+ movs r1, 0x6
+ bl HasType
+ lsls r0, 24
+ cmp r0, 0
+ beq _080707D0
+ adds r0, r6, 0
+ bl GetWeather
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x7
+ bne _080707D0
+ adds r4, 0x1
+_080707D0:
+ movs r0, 0x4
+ ldrsh r1, [r5, r0]
+ ldr r0, _0807081C
+ cmp r1, r0
+ bne _080707DC
+ adds r4, 0x1
+_080707DC:
+ movs r0, 0x2
+ ldrsh r1, [r5, r0]
+ movs r0, 0xBE
+ lsls r0, 1
+ cmp r1, r0
+ bne _080707FE
+ ldrb r0, [r5, 0x6]
+ cmp r0, 0
+ beq _080707FE
+ ldr r0, _08070820
+ ldr r0, [r0]
+ ldr r1, _08070824
+ adds r0, r1
+ ldrb r0, [r0]
+ cmp r0, 0
+ beq _080707FE
+ adds r4, 0x1
+_080707FE:
+ cmp r4, 0
+ bge _08070804
+ movs r4, 0
+_08070804:
+ cmp r4, 0x4
+ ble _0807080A
+ movs r4, 0x4
+_0807080A:
+ movs r1, 0x82
+ lsls r1, 1
+ adds r0, r5, r1
+ str r4, [r0]
+ adds r0, r4, 0
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0807081C: .4byte 0x000001a3
+_08070820: .4byte gDungeonGlobalData
+_08070824: .4byte 0x0000066e
+ thumb_func_end GetMovementSpeed
+
+ thumb_func_start sub_8070828
+sub_8070828:
+ push {r4-r6,lr}
+ adds r4, r0, 0
+ lsls r1, 24
+ lsrs r6, r1, 24
+ movs r5, 0
+ bl EntityExists
+ lsls r0, 24
+ cmp r0, 0
+ bne _08070840
+ movs r0, 0
+ b _080708AE
+_08070840:
+ adds r0, r4, 0
+ movs r1, 0x1B
+ bl HasAbility
+ lsls r0, 24
+ cmp r0, 0
+ beq _0807085E
+ adds r0, r4, 0
+ bl GetWeather
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x4
+ bne _0807085E
+ movs r5, 0x1
+_0807085E:
+ adds r0, r4, 0
+ movs r1, 0x4A
+ bl HasAbility
+ lsls r0, 24
+ cmp r0, 0
+ beq _0807087C
+ adds r0, r4, 0
+ bl GetWeather
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x1
+ bne _0807087C
+ movs r5, 0x1
+_0807087C:
+ cmp r6, 0
+ beq _080708A0
+ ldr r0, [r4, 0x70]
+ movs r1, 0x40
+ adds r2, r5, 0
+ bl SetVisualFlags
+ lsls r0, 24
+ cmp r0, 0
+ beq _080708A0
+ adds r0, r4, 0
+ bl sub_80429B4
+ ldr r0, _080708A8
+ ldr r1, [r0]
+ adds r0, r4, 0
+ bl SendMessage
+_080708A0:
+ cmp r5, 0
+ bne _080708AC
+ movs r0, 0x1
+ b _080708AE
+ .align 2, 0
+_080708A8: .4byte gUnknown_80FEE80
+_080708AC:
+ movs r0, 0x2
+_080708AE:
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8070828
+
+ thumb_func_start SetMessageArgument_2
+SetMessageArgument_2:
+ push {r4,r5,lr}
+ adds r3, r0, 0
+ adds r4, r2, 0
+ ldr r0, _080708E8
+ ldr r2, [r0]
+ ldr r5, _080708EC
+ adds r0, r2, r5
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _080708DC
+ adds r5, 0x6
+ adds r0, r2, r5
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _080708DC
+ adds r0, r1, 0
+ adds r0, 0xE4
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ bne _080708F4
+_080708DC:
+ ldrb r0, [r1, 0x6]
+ cmp r0, 0
+ beq _080708F4
+ ldr r0, _080708F0
+ b _08070900
+ .align 2, 0
+_080708E8: .4byte gDungeonGlobalData
+_080708EC: .4byte 0x0001820a
+_080708F0: .4byte gUnknown_80F8988
+_080708F4:
+ adds r0, r1, 0
+ adds r0, 0xC8
+ ldrb r0, [r0]
+ cmp r0, 0x2
+ bne _08070910
+ ldr r0, _0807090C
+_08070900:
+ ldr r1, [r0]
+ adds r0, r3, 0
+ bl strcpy
+ b _0807095A
+ .align 2, 0
+_0807090C: .4byte gUnknown_80F8968
+_08070910:
+ ldrb r0, [r1, 0x6]
+ cmp r0, 0
+ beq _08070942
+ adds r0, r1, 0
+ adds r0, 0x40
+ ldrb r0, [r0]
+ cmp r0, 0x4A
+ beq _0807092A
+ adds r0, r1, 0
+ adds r0, 0xA4
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ bne _08070936
+_0807092A:
+ movs r0, 0x4
+ ldrsh r1, [r1, r0]
+ adds r0, r3, 0
+ bl CopyYellowSpeciesNametoBuffer
+ b _0807095A
+_08070936:
+ movs r5, 0x4
+ ldrsh r1, [r1, r5]
+ adds r0, r3, 0
+ bl CopyCyanSpeciesNametoBuffer
+ b _0807095A
+_08070942:
+ ldr r2, _08070960
+ ldrb r1, [r1, 0xA]
+ movs r0, 0x64
+ muls r0, r1
+ ldr r1, _08070964
+ adds r0, r1
+ ldr r1, [r2]
+ adds r1, r0
+ adds r0, r3, 0
+ adds r2, r4, 0
+ bl sub_808D9DC
+_0807095A:
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08070960: .4byte gRecruitedPokemonRef
+_08070964: .4byte 0x00008df8
+ thumb_func_end SetMessageArgument_2
+
+ thumb_func_start sub_8070968
+sub_8070968:
+ push {r4,lr}
+ adds r4, r0, 0
+ adds r3, r2, 0
+ adds r0, r1, 0
+ adds r0, 0xC8
+ ldrb r0, [r0]
+ cmp r0, 0x2
+ bne _08070990
+ ldr r1, _08070988
+ adds r2, 0x30
+ ldr r0, _0807098C
+ ldr r3, [r0]
+ adds r0, r4, 0
+ bl ExpandPlaceholdersBuffer
+ b _080709BA
+ .align 2, 0
+_08070988: .4byte gUnknown_8106FA4
+_0807098C: .4byte gUnknown_80F8974
+_08070990:
+ ldrb r0, [r1, 0x6]
+ cmp r0, 0
+ beq _080709A2
+ movs r0, 0x4
+ ldrsh r1, [r1, r0]
+ adds r0, r4, 0
+ bl CopyCyanSpeciesNametoBuffer
+ b _080709BA
+_080709A2:
+ ldr r2, _080709C0
+ ldrb r1, [r1, 0xA]
+ movs r0, 0x64
+ muls r0, r1
+ ldr r1, _080709C4
+ adds r0, r1
+ ldr r1, [r2]
+ adds r1, r0
+ adds r0, r4, 0
+ adds r2, r3, 0
+ bl sub_808D9DC
+_080709BA:
+ pop {r4}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_080709C0: .4byte gRecruitedPokemonRef
+_080709C4: .4byte 0x00008df8
+ thumb_func_end sub_8070968
+
+ thumb_func_start sub_80709C8
+sub_80709C8:
+ push {r4,lr}
+ adds r3, r0, 0
+ ldr r0, _080709F8
+ ldr r2, [r0]
+ ldr r4, _080709FC
+ adds r0, r2, r4
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _080709EE
+ adds r4, 0x6
+ adds r0, r2, r4
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _080709EE
+ adds r0, r1, 0
+ adds r0, 0xE4
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ bne _08070A04
+_080709EE:
+ ldrb r0, [r1, 0x6]
+ cmp r0, 0
+ beq _08070A04
+ ldr r0, _08070A00
+ b _08070A10
+ .align 2, 0
+_080709F8: .4byte gDungeonGlobalData
+_080709FC: .4byte 0x0001820a
+_08070A00: .4byte gUnknown_80F8994
+_08070A04:
+ adds r0, r1, 0
+ adds r0, 0xC8
+ ldrb r0, [r0]
+ cmp r0, 0x2
+ bne _08070A20
+ ldr r0, _08070A1C
+_08070A10:
+ ldr r1, [r0]
+ adds r0, r3, 0
+ bl strcpy
+ b _08070A48
+ .align 2, 0
+_08070A1C: .4byte gUnknown_80F8974
+_08070A20:
+ ldrb r0, [r1, 0x6]
+ cmp r0, 0
+ beq _08070A32
+ movs r0, 0x4
+ ldrsh r1, [r1, r0]
+ adds r0, r3, 0
+ bl CopySpeciesNametoBuffer
+ b _08070A48
+_08070A32:
+ ldr r2, _08070A50
+ ldrb r1, [r1, 0xA]
+ movs r0, 0x64
+ muls r0, r1
+ ldr r1, _08070A54
+ adds r0, r1
+ ldr r1, [r2]
+ adds r1, r0
+ adds r0, r3, 0
+ bl sub_808DA0C
+_08070A48:
+ pop {r4}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08070A50: .4byte gRecruitedPokemonRef
+_08070A54: .4byte 0x00008df8
+ thumb_func_end sub_80709C8
+
+ .align 2, 0 \ No newline at end of file
diff --git a/include/dungeon_ai_movement.h b/include/dungeon_ai_movement.h
new file mode 100644
index 0000000..27bb00f
--- /dev/null
+++ b/include/dungeon_ai_movement.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_DUNGEON_AI_MOVEMENT_H
+#define GUARD_DUNGEON_AI_MOVEMENT_H
+
+#include "dungeon_entity.h"
+
+// 0x75990
+void DecideAction(struct DungeonEntity *pokemon);
+
+#endif
diff --git a/include/dungeon_movement.h b/include/dungeon_movement.h
index e3ab174..d15ef1b 100644
--- a/include/dungeon_movement.h
+++ b/include/dungeon_movement.h
@@ -1,9 +1,7 @@
#ifndef GUARD_DUNGEON_MOVEMENT_H
#define GUARD_DUNGEON_MOVEMENT_H
-#include "dungeon_entity.h"
-
-// 0x75990
-void DecideAction(struct DungeonEntity *pokemon);
+// 0x70328
+u8 GetCrossableTerrain(s16 species);
#endif
diff --git a/ld_script.txt b/ld_script.txt
index 6562b0f..cca6013 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -209,6 +209,8 @@ SECTIONS {
asm/code_806CD90.o(.text);
src/status_checks.o(.text);
asm/code_80701A4.o(.text);
+ src/dungeon_movement.o(.text);
+ asm/code_807034C.o(.text);
src/status_checks_1.o(.text);
asm/code_8070B48.o(.text);
src/dungeon_capabilities.o(.text);
@@ -225,7 +227,7 @@ SECTIONS {
asm/code_80718D8.o(.text);
src/dungeon_ai_items.o(.text);
asm/code_8073CF0.o(.text);
- src/dungeon_movement.o(.text);
+ src/dungeon_ai_movement.o(.text);
asm/code_8075BA4.o(.text);
src/dungeon_ai_attack.o(.text);
asm/code_807CABC.o(.text);
diff --git a/src/dungeon_ai_movement.c b/src/dungeon_ai_movement.c
new file mode 100644
index 0000000..bc109eb
--- /dev/null
+++ b/src/dungeon_ai_movement.c
@@ -0,0 +1,287 @@
+#include "global.h"
+#include "dungeon_ai_movement.h"
+
+#include "constants/dungeon_action.h"
+#include "constants/direction.h"
+#include "constants/iq_skill.h"
+#include "constants/status.h"
+#include "constants/targeting.h"
+#include "code_80521D0.h"
+#include "dungeon_action.h"
+#include "dungeon_ai_items.h"
+#include "dungeon_capabilities_1.h"
+#include "dungeon_global_data.h"
+#include "dungeon_pokemon_attributes_1.h"
+#include "dungeon_random.h"
+#include "dungeon_util.h"
+#include "dungeon_util_1.h"
+#include "dungeon_visibility.h"
+#include "map.h"
+#include "pokemon.h"
+#include "status_checks.h"
+
+extern char gAvailablePokemonNames[];
+extern char *gPtrCouldntBeUsedMessage;
+extern char *gPtrItsaMonsterHouseMessage;
+
+extern void SendImmobilizeEndMessage(struct DungeonEntity*, struct DungeonEntity*);
+extern void SetMessageArgument(char[], struct DungeonEntity*, u32);
+extern void ResetAction(u16*);
+extern void DecideAttack(struct DungeonEntity*);
+extern void MoveIfPossible(struct DungeonEntity*, bool8);
+extern u8 sub_8044B28(void);
+extern void sub_807AB38(struct DungeonEntity *, u32);
+extern void sub_8041888(u32);
+extern u8 sub_803F428(s16 *);
+extern void sub_803E708(u32, u32);
+extern struct DungeonEntity *GetLeaderEntity();
+extern void TargetTileInFront(struct DungeonEntity *);
+
+u32 sub_8075818(struct DungeonEntity *entity)
+{
+ struct MapTile *tile;
+ struct DungeonEntityData *entityData;
+ struct DungeonEntity *subEntity;
+ struct ItemSlot *item;
+ u8 *trapData; // TODO: turn into struct when more research is done..
+ u8 r1;
+
+ entityData = entity->entityData;
+ if(EntityExists(entity))
+ {
+ tile = GetMapEntityForDungeonEntity(entity);
+ if(HasIQSkill(entity, IQ_SKILL_SUPER_MOBILE))
+ if(!(tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)))
+ return 1;
+ subEntity = tile->mapObject;
+ if(subEntity != NULL)
+ {
+ switch(GetEntityType(subEntity))
+ {
+ case ENTITY_NONE:
+ case ENTITY_POKEMON:
+ case 4:
+ case 5:
+ break;
+ case ENTITY_TRAP:
+ trapData = (u8*) GetTrapData(subEntity);
+ r1 = 0;
+ if(trapData[1] == 0)
+ {
+ if(!subEntity->visible || entityData->isEnemy)
+ goto flag_check;
+ else
+ goto error;
+ }
+ else if(trapData[1] == 1)
+ {
+ if(!entityData->isEnemy)
+ goto flag_check;
+ else
+ goto error;
+ }
+ else if(trapData[1] == 2)
+ {
+ if(!entityData->isEnemy)
+ r1 = 1;
+ }
+flag_check:
+ if(r1 == 0)
+ break;
+ else
+ goto error;
+ case ENTITY_ITEM:
+ if(!entityData->isLeader)
+ {
+ if(!(entityData->heldItem.itemFlags & ITEM_FLAG_EXISTS))
+ {
+ if(!(tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)))
+ {
+ if(entityData->isEnemy)
+ break;
+ else
+ {
+ item = GetItemData(subEntity);
+ if(!(item->itemFlags & ITEM_FLAG_FOR_SALE))
+ {
+ return 1;
+ }
+ }
+ }
+ else
+ {
+ item = GetItemData(subEntity);
+ if(!(item->itemFlags & ITEM_FLAG_FOR_SALE))
+ {
+error:
+ return 1;
+ }
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ return 0;
+}
+
+void sub_8075900(struct DungeonEntity *pokemon, u8 r1)
+{
+ if(EntityExists(pokemon))
+ {
+ if(!pokemon->entityData->isEnemy)
+ {
+ if(!sub_8044B28())
+ {
+ if(!gDungeonGlobalData->monsterHouseActive)
+ {
+ if((GetMapEntityForDungeonEntity(pokemon)->tileType & TILE_TYPE_MONSTER_HOUSE))
+ {
+ // It's a monster house!
+ SendMessage(GetLeaderEntity(), gPtrItsaMonsterHouseMessage);
+ gDungeonGlobalData->unk672 = 1;
+ sub_807AB38(pokemon, r1);
+ sub_8041888(0);
+ if(sub_803F428(&pokemon->posWorld.x) != 0)
+ sub_803E708(0x78, 0x39);
+ }
+ }
+ }
+ }
+ }
+}
+
+void DecideAction(struct DungeonEntity *pokemon)
+{
+ struct DungeonEntityData *pokemonData = pokemon->entityData;
+ if (pokemonData->flags & MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED)
+ {
+ if (pokemonData->immobilizeStatus == IMMOBILIZE_STATUS_PETRIFIED)
+ {
+ SendImmobilizeEndMessage(pokemon, pokemon);
+ }
+ }
+ else
+ {
+ pokemonData->targetingDecoy = TARGETING_DECOY_NONE;
+ if (pokemonData->clientType == CLIENT_TYPE_NONE || IsMovingClient(pokemon))
+ {
+ if (pokemonData->clientType != CLIENT_TYPE_CLIENT && pokemonData->useHeldItem)
+ {
+ if (CannotUseItems(pokemon))
+ {
+ pokemonData->useHeldItem = FALSE;
+ SetMessageArgument(gAvailablePokemonNames, pokemon, 0);
+ SendMessage(pokemon, gPtrCouldntBeUsedMessage);
+ return;
+ }
+ DecideUseItem(pokemon);
+ if (pokemonData->action.action != DUNGEON_ACTION_NONE)
+ {
+ return;
+ }
+ }
+ if (!HasStatusAffectingActions(pokemon))
+ {
+ if (gDungeonGlobalData->decoyActive)
+ {
+ s32 i;
+ struct DungeonEntity *target;
+ for (i = 0; i < DUNGEON_MAX_POKEMON; i++)
+ {
+ target = gDungeonGlobalData->allPokemon[i];
+ if (EntityExists(target) &&
+ target->entityData->waitingStatus == WAITING_STATUS_DECOY &&
+ CanSee(pokemon, target))
+ {
+ bool8 enemyDecoy = target->entityData->enemyDecoy;
+ u8 targetingDecoy = TARGETING_DECOY_TEAM;
+ if (enemyDecoy)
+ {
+ targetingDecoy = TARGETING_DECOY_WILD;
+ }
+ pokemonData->targetingDecoy = targetingDecoy;
+ break;
+ }
+ }
+ }
+ ResetAction(&pokemonData->action.action);
+ if (pokemonData->clientType == CLIENT_TYPE_CLIENT)
+ {
+ SetWalkAction(&pokemonData->action, pokemonData->entityID);
+ pokemonData->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS);
+ pokemonData->targetPosition.x = pokemon->posWorld.x;
+ pokemonData->targetPosition.y = pokemon->posWorld.y - 1;
+ }
+ else
+ {
+ DecideUseItem(pokemon);
+ if (pokemonData->action.action == DUNGEON_ACTION_NONE)
+ {
+ if (!HasIQSkill(pokemon, IQ_SKILL_DEDICATED_TRAVELER))
+ {
+ DecideAttack(pokemon);
+ if (pokemonData->action.action != DUNGEON_ACTION_NONE)
+ {
+ return;
+ }
+ if (pokemonData->volatileStatus == VOLATILE_STATUS_CONFUSED)
+ {
+ SetWalkAction(&pokemonData->action, pokemonData->entityID);
+ }
+ else
+ {
+ if (!GetIsMoving(pokemonData->entityID))
+ {
+ return;
+ }
+ MoveIfPossible(pokemon, TRUE);
+ }
+ }
+ else
+ {
+ if (pokemonData->volatileStatus == VOLATILE_STATUS_CONFUSED)
+ {
+ SetWalkAction(&pokemonData->action, pokemonData->entityID);
+ }
+ else
+ {
+ if (GetIsMoving(pokemonData->entityID))
+ {
+ MoveIfPossible(pokemon, TRUE);
+ }
+ if (pokemonData->action.action > DUNGEON_ACTION_WAIT)
+ {
+ return;
+ }
+ DecideAttack(pokemon);
+ if (pokemonData->action.action <= DUNGEON_ACTION_WAIT)
+ {
+ return;
+ }
+ pokemonData->notAdjacentToTarget = FALSE;
+ pokemonData->movingIntoTarget = FALSE;
+ pokemonData->waiting = FALSE;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void sub_8075BA4(struct DungeonEntity *param_1,char param_2)
+{
+ struct DungeonEntityData * iVar2 = param_1->entityData;
+
+ if ((param_2 != '\0') && (iVar2->volatileStatus == VOLATILE_STATUS_COWERING)) {
+ iVar2->action.facingDir = (iVar2->action.facingDir + 4) & DIRECTION_MASK;
+ TargetTileInFront(param_1);
+ }
+ else if (iVar2->volatileStatus == VOLATILE_STATUS_CONFUSED) {
+ iVar2->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS);
+ TargetTileInFront(param_1);
+ }
+}
diff --git a/src/dungeon_capabilities_1.c b/src/dungeon_capabilities_1.c
index 7ad12d8..c4eb53e 100644
--- a/src/dungeon_capabilities_1.c
+++ b/src/dungeon_capabilities_1.c
@@ -9,13 +9,13 @@
#include "dungeon_capabilities.h"
#include "dungeon_items.h"
#include "dungeon_map_access.h"
+#include "dungeon_movement.h"
#include "dungeon_pokemon_attributes_1.h"
#include "dungeon_util.h"
#include "map.h"
const u8 gDirectionBitMasks[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
-extern u8 GetCrossableTerrain(s16);
extern bool8 IsFixedDungeon();
static inline bool8 JoinLocationCannotUseItems(struct DungeonEntityData *pokemonData)
diff --git a/src/dungeon_movement.c b/src/dungeon_movement.c
index d342262..0ff0509 100644
--- a/src/dungeon_movement.c
+++ b/src/dungeon_movement.c
@@ -1,287 +1,26 @@
#include "global.h"
#include "dungeon_movement.h"
-
-#include "constants/dungeon_action.h"
-#include "constants/direction.h"
-#include "constants/iq_skill.h"
-#include "constants/status.h"
-#include "constants/targeting.h"
-#include "code_80521D0.h"
-#include "dungeon_action.h"
-#include "dungeon_ai_items.h"
-#include "dungeon_capabilities_1.h"
-#include "dungeon_global_data.h"
-#include "dungeon_pokemon_attributes_1.h"
-#include "dungeon_random.h"
-#include "dungeon_util.h"
-#include "dungeon_util_1.h"
-#include "dungeon_visibility.h"
#include "map.h"
#include "pokemon.h"
-#include "status_checks.h"
-
-extern char gAvailablePokemonNames[];
-extern char *gPtrCouldntBeUsedMessage;
-extern char *gPtrItsaMonsterHouseMessage;
-extern void SendImmobilizeEndMessage(struct DungeonEntity*, struct DungeonEntity*);
-extern void SetMessageArgument(char[], struct DungeonEntity*, u32);
-extern void ResetAction(u16*);
-extern void DecideAttack(struct DungeonEntity*);
-extern void MoveIfPossible(struct DungeonEntity*, bool8);
-extern u8 sub_8044B28(void);
-extern void sub_807AB38(struct DungeonEntity *, u32);
-extern void sub_8041888(u32);
-extern u8 sub_803F428(s16 *);
-extern void sub_803E708(u32, u32);
-extern struct DungeonEntity *GetLeaderEntity();
-extern void TargetTileInFront(struct DungeonEntity *);
+extern u8 gWalkableTileToCrossableTerrain[8];
-u32 sub_8075818(struct DungeonEntity *entity)
+u8 GetCrossableTerrain(s16 species)
{
- struct MapTile *tile;
- struct DungeonEntityData *entityData;
- struct DungeonEntity *subEntity;
- struct ItemSlot *item;
- u8 *trapData; // TODO: turn into struct when more research is done..
- u8 r1;
-
- entityData = entity->entityData;
- if(EntityExists(entity))
+ u8 walkableTiles = GetWalkableTiles(species);
+ if (walkableTiles >= NUM_CROSSABLE_TERRAIN)
{
- tile = GetMapEntityForDungeonEntity(entity);
- if(HasIQSkill(entity, IQ_SKILL_SUPER_MOBILE))
- if(!(tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)))
- return 1;
- subEntity = tile->mapObject;
- if(subEntity != NULL)
- {
- switch(GetEntityType(subEntity))
- {
- case ENTITY_NONE:
- case ENTITY_POKEMON:
- case 4:
- case 5:
- break;
- case ENTITY_TRAP:
- trapData = (u8*) GetTrapData(subEntity);
- r1 = 0;
- if(trapData[1] == 0)
- {
- if(!subEntity->visible || entityData->isEnemy)
- goto flag_check;
- else
- goto error;
- }
- else if(trapData[1] == 1)
- {
- if(!entityData->isEnemy)
- goto flag_check;
- else
- goto error;
- }
- else if(trapData[1] == 2)
- {
- if(!entityData->isEnemy)
- r1 = 1;
- }
-flag_check:
- if(r1 == 0)
- break;
- else
- goto error;
- case ENTITY_ITEM:
- if(!entityData->isLeader)
- {
- if(!(entityData->heldItem.itemFlags & ITEM_FLAG_EXISTS))
- {
- if(!(tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)))
- {
- if(entityData->isEnemy)
- break;
- else
- {
- item = GetItemData(subEntity);
- if(!(item->itemFlags & ITEM_FLAG_FOR_SALE))
- {
- return 1;
- }
- }
- }
- else
- {
- item = GetItemData(subEntity);
- if(!(item->itemFlags & ITEM_FLAG_FOR_SALE))
- {
-error:
- return 1;
- }
- }
- }
- }
- break;
- }
- }
- }
- return 0;
-}
-
-void sub_8075900(struct DungeonEntity *pokemon, u8 r1)
-{
- if(EntityExists(pokemon))
- {
- if(!pokemon->entityData->isEnemy)
- {
- if(!sub_8044B28())
- {
- if(!gDungeonGlobalData->monsterHouseActive)
- {
- if((GetMapEntityForDungeonEntity(pokemon)->tileType & TILE_TYPE_MONSTER_HOUSE))
- {
- // It's a monster house!
- SendMessage(GetLeaderEntity(), gPtrItsaMonsterHouseMessage);
- gDungeonGlobalData->unk672 = 1;
- sub_807AB38(pokemon, r1);
- sub_8041888(0);
- if(sub_803F428(&pokemon->posWorld.x) != 0)
- sub_803E708(0x78, 0x39);
- }
- }
- }
- }
- }
-}
-
-void DecideAction(struct DungeonEntity *pokemon)
-{
- struct DungeonEntityData *pokemonData = pokemon->entityData;
- if (pokemonData->flags & MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED)
- {
- if (pokemonData->immobilizeStatus == IMMOBILIZE_STATUS_PETRIFIED)
- {
- SendImmobilizeEndMessage(pokemon, pokemon);
- }
+ // Pokémon that can cross water or lava have a walkable tile value of 4 (WALKABLE_TILE_LAVA) or 5 (WALKABLE_TILE_WATER), respectively.
+ // Indices 4 and 5 in this array are assigned either CROSSABLE_TERRAIN_REGULAR or CROSSABLE_TERRAIN_LIQUID
+ // depending on whether the dungeon's liquid is water or lava.
+ // For example, a lava dungeon like Mt. Blaze would have these values:
+ // gWalkableTileToCrossableTerrain[WALKABLE_TILE_LAVA]: CROSSABLE_TERRAIN_LIQUID
+ // gWalkableTileToCrossableTerrain[WALKABLE_TILE_WATER]: CROSSABLE_TERRAIN_REGULAR
+ // This means a Fire-type can cross the dungeon's liquid, while a Water-type cannot.
+ return gWalkableTileToCrossableTerrain[walkableTiles];
}
else
{
- pokemonData->targetingDecoy = TARGETING_DECOY_NONE;
- if (pokemonData->clientType == CLIENT_TYPE_NONE || IsMovingClient(pokemon))
- {
- if (pokemonData->clientType != CLIENT_TYPE_CLIENT && pokemonData->useHeldItem)
- {
- if (CannotUseItems(pokemon))
- {
- pokemonData->useHeldItem = FALSE;
- SetMessageArgument(gAvailablePokemonNames, pokemon, 0);
- SendMessage(pokemon, gPtrCouldntBeUsedMessage);
- return;
- }
- DecideUseItem(pokemon);
- if (pokemonData->action.action != DUNGEON_ACTION_NONE)
- {
- return;
- }
- }
- if (!HasStatusAffectingActions(pokemon))
- {
- if (gDungeonGlobalData->decoyActive)
- {
- s32 i;
- struct DungeonEntity *target;
- for (i = 0; i < DUNGEON_MAX_POKEMON; i++)
- {
- target = gDungeonGlobalData->allPokemon[i];
- if (EntityExists(target) &&
- target->entityData->waitingStatus == WAITING_STATUS_DECOY &&
- CanSee(pokemon, target))
- {
- bool8 enemyDecoy = target->entityData->enemyDecoy;
- u8 targetingDecoy = TARGETING_DECOY_TEAM;
- if (enemyDecoy)
- {
- targetingDecoy = TARGETING_DECOY_WILD;
- }
- pokemonData->targetingDecoy = targetingDecoy;
- break;
- }
- }
- }
- ResetAction(&pokemonData->action.action);
- if (pokemonData->clientType == CLIENT_TYPE_CLIENT)
- {
- SetWalkAction(&pokemonData->action, pokemonData->entityID);
- pokemonData->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS);
- pokemonData->targetPosition.x = pokemon->posWorld.x;
- pokemonData->targetPosition.y = pokemon->posWorld.y - 1;
- }
- else
- {
- DecideUseItem(pokemon);
- if (pokemonData->action.action == DUNGEON_ACTION_NONE)
- {
- if (!HasIQSkill(pokemon, IQ_SKILL_DEDICATED_TRAVELER))
- {
- DecideAttack(pokemon);
- if (pokemonData->action.action != DUNGEON_ACTION_NONE)
- {
- return;
- }
- if (pokemonData->volatileStatus == VOLATILE_STATUS_CONFUSED)
- {
- SetWalkAction(&pokemonData->action, pokemonData->entityID);
- }
- else
- {
- if (!GetIsMoving(pokemonData->entityID))
- {
- return;
- }
- MoveIfPossible(pokemon, TRUE);
- }
- }
- else
- {
- if (pokemonData->volatileStatus == VOLATILE_STATUS_CONFUSED)
- {
- SetWalkAction(&pokemonData->action, pokemonData->entityID);
- }
- else
- {
- if (GetIsMoving(pokemonData->entityID))
- {
- MoveIfPossible(pokemon, TRUE);
- }
- if (pokemonData->action.action > DUNGEON_ACTION_WAIT)
- {
- return;
- }
- DecideAttack(pokemon);
- if (pokemonData->action.action <= DUNGEON_ACTION_WAIT)
- {
- return;
- }
- pokemonData->notAdjacentToTarget = FALSE;
- pokemonData->movingIntoTarget = FALSE;
- pokemonData->waiting = FALSE;
- }
- }
- }
- }
- }
- }
+ return walkableTiles;
}
}
-
-void sub_8075BA4(struct DungeonEntity *param_1,char param_2)
-{
- struct DungeonEntityData * iVar2 = param_1->entityData;
-
- if ((param_2 != '\0') && (iVar2->volatileStatus == VOLATILE_STATUS_COWERING)) {
- iVar2->action.facingDir = (iVar2->action.facingDir + 4) & DIRECTION_MASK;
- TargetTileInFront(param_1);
- }
- else if (iVar2->volatileStatus == VOLATILE_STATUS_CONFUSED) {
- iVar2->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS);
- TargetTileInFront(param_1);
- }
-}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index ab64731..d9b257e 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -831,7 +831,7 @@ gUnknown_202F30C = .; /* 202F30C */
gUnknown_202F310 = .; /* 202F310 */
. += 0x4;
-gUnknown_202F314 = .; /* 202F314 */
+gWalkableTileToCrossableTerrain = .; /* 202F314 */
. += 0x8;
gUnknown_202F31C = .; /* 202F31C */