diff options
Diffstat (limited to 'asm/code_8070E3C.s')
-rw-r--r-- | asm/code_8070E3C.s | 813 |
1 files changed, 813 insertions, 0 deletions
diff --git a/asm/code_8070E3C.s b/asm/code_8070E3C.s new file mode 100644 index 0000000..7af381e --- /dev/null +++ b/asm/code_8070E3C.s @@ -0,0 +1,813 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_8070E3C +sub_8070E3C: + push {r4-r7,lr} + adds r4, r0, 0 + adds r6, r1, 0 + adds r7, r2, 0 + ldr r0, [r4, 0x70] + movs r1, 0x2 + ldrsh r0, [r0, r1] + bl GetCrossableTerrain + lsls r0, 24 + lsrs r5, r0, 24 + movs r2, 0 + ldrsh r0, [r6, r2] + ldr r1, _08070EB0 + lsls r2, r7, 2 + adds r2, r1 + movs r3, 0 + ldrsh r1, [r2, r3] + adds r0, r1 + movs r3, 0x2 + ldrsh r1, [r6, r3] + movs r3, 0x2 + ldrsh r2, [r2, r3] + adds r1, r2 + bl GetMapTileAtPosition + adds r2, r0, 0 + ldrh r1, [r2] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _08070F0C + ldr r0, [r2, 0x10] + cmp r0, 0 + beq _08070E8A + bl GetEntityType + cmp r0, 0x1 + bne _08070F0C +_08070E8A: + bl IsFixedDungeon + lsls r0, 24 + cmp r0, 0 + bne _08070EDC + ldr r0, [r4, 0x70] + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x3 + beq _08070EAC + adds r0, r4, 0 + movs r1, 0x9 + bl HasItem + lsls r0, 24 + cmp r0, 0 + beq _08070EB4 +_08070EAC: + movs r5, 0x3 + b _08070EDC + .align 2, 0 +_08070EB0: .4byte gAdjacentTileOffsets +_08070EB4: + adds r0, r4, 0 + movs r1, 0xC + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + bne _08070EDA + adds r0, r4, 0 + movs r1, 0xD + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08070EDC + movs r0, 0x1 + ands r0, r7 + movs r5, 0x3 + cmp r0, 0 + beq _08070EDC +_08070EDA: + movs r5, 0x2 +_08070EDC: + movs r1, 0 + ldrsh r0, [r6, r1] + movs r2, 0x2 + ldrsh r1, [r6, r2] + bl GetMapTileAtPosition + adds r2, r0, 0 + adds r1, r2, 0 + adds r1, 0xA + adds r1, r5 + ldr r2, _08070F08 + movs r0, 0x7 + ands r0, r7 + adds r0, r2 + ldrb r1, [r1] + ldrb r0, [r0] + ands r0, r1 + cmp r0, 0 + beq _08070F0C + movs r0, 0x1 + b _08070F0E + .align 2, 0 +_08070F08: .4byte gUnknown_8106FB5 +_08070F0C: + movs r0, 0 +_08070F0E: + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_8070E3C + + thumb_func_start sub_8070F14 +sub_8070F14: + push {r4,r5,lr} + adds r4, r0, 0 + adds r5, r1, 0 + movs r1, 0x4 + ldrsh r0, [r4, r1] + ldr r1, _08070F70 + lsls r2, r5, 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 GetMapTileAtPosition + adds r2, r0, 0 + ldrh r1, [r2] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _08070F78 + ldr r0, [r2, 0x10] + cmp r0, 0 + bne _08070F78 + movs r1, 0x4 + ldrsh r0, [r4, r1] + movs r2, 0x6 + ldrsh r1, [r4, r2] + bl GetMapTileAtPosition + adds r2, r0, 0 + ldr r1, _08070F74 + movs r0, 0x7 + ands r0, r5 + adds r0, r1 + ldrb r1, [r2, 0xA] + ldrb r0, [r0] + ands r0, r1 + cmp r0, 0 + beq _08070F78 + movs r0, 0x1 + b _08070F7A + .align 2, 0 +_08070F70: .4byte gAdjacentTileOffsets +_08070F74: .4byte gUnknown_8106FBD +_08070F78: + movs r0, 0 +_08070F7A: + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end sub_8070F14 + + thumb_func_start sub_8070F80 +sub_8070F80: + 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 + movs r2, 0x4 + ldrsh r0, [r4, r2] + ldr r1, _08070FF4 + 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 GetMapTileAtPosition + adds r2, r0, 0 + ldrh r1, [r2] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _08071050 + ldr r0, [r2, 0x10] + cmp r0, 0 + beq _08070FCC + bl GetEntityType + cmp r0, 0x1 + bne _08071050 +_08070FCC: + bl IsFixedDungeon + lsls r0, 24 + cmp r0, 0 + bne _08071020 + ldr r0, [r4, 0x70] + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x3 + beq _08070FEE + adds r0, r4, 0 + movs r1, 0x9 + bl HasItem + lsls r0, 24 + cmp r0, 0 + beq _08070FF8 +_08070FEE: + movs r5, 0x3 + b _08071020 + .align 2, 0 +_08070FF4: .4byte gAdjacentTileOffsets +_08070FF8: + adds r0, r4, 0 + movs r1, 0xC + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + bne _0807101E + adds r0, r4, 0 + movs r1, 0xD + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08071020 + movs r0, 0x1 + ands r0, r6 + movs r5, 0x3 + cmp r0, 0 + beq _08071020 +_0807101E: + movs r5, 0x2 +_08071020: + movs r1, 0x4 + ldrsh r0, [r4, r1] + movs r2, 0x6 + ldrsh r1, [r4, r2] + bl GetMapTileAtPosition + adds r2, r0, 0 + adds r1, r2, 0 + adds r1, 0xA + adds r1, r5 + ldr r2, _0807104C + movs r0, 0x7 + ands r0, r6 + adds r0, r2 + ldrb r1, [r1] + ldrb r0, [r0] + ands r0, r1 + cmp r0, 0 + beq _08071050 + movs r0, 0x1 + b _08071052 + .align 2, 0 +_0807104C: .4byte gUnknown_8106FC5 +_08071050: + movs r0, 0 +_08071052: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end sub_8070F80 + + thumb_func_start sub_8071058 +sub_8071058: + push {r4-r7,lr} + adds r5, r0, 0 + adds r7, r1, 0 + ldr r0, [r5, 0x70] + movs r1, 0x2 + ldrsh r0, [r0, r1] + bl GetCrossableTerrain + lsls r0, 24 + lsrs r6, r0, 24 + movs r2, 0x4 + ldrsh r0, [r5, r2] + ldr r1, _080710D4 + lsls r2, r7, 2 + adds r2, r1 + movs r3, 0 + ldrsh r1, [r2, r3] + adds r0, r1 + movs r3, 0x6 + ldrsh r1, [r5, r3] + movs r3, 0x2 + ldrsh r2, [r2, r3] + adds r1, r2 + bl GetMapTileAtPosition + adds r4, r0, 0 + ldrh r1, [r4] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _08071130 + ldr r0, [r4, 0x10] + cmp r0, 0 + beq _080710AE + bl GetEntityType + cmp r0, 0x1 + beq _080710AE + ldr r0, [r4, 0x10] + ldr r0, [r0, 0x70] + ldrb r0, [r0, 0x6] + cmp r0, 0 + bne _08071130 +_080710AE: + bl IsFixedDungeon + lsls r0, 24 + cmp r0, 0 + bne _08071100 + ldr r0, [r5, 0x70] + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x3 + beq _080710D0 + adds r0, r5, 0 + movs r1, 0x9 + bl HasItem + lsls r0, 24 + cmp r0, 0 + beq _080710D8 +_080710D0: + movs r6, 0x3 + b _08071100 + .align 2, 0 +_080710D4: .4byte gAdjacentTileOffsets +_080710D8: + adds r0, r5, 0 + movs r1, 0xC + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + bne _080710FE + adds r0, r5, 0 + movs r1, 0xD + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08071100 + movs r0, 0x1 + ands r0, r7 + movs r6, 0x3 + cmp r0, 0 + beq _08071100 +_080710FE: + movs r6, 0x2 +_08071100: + movs r1, 0x4 + ldrsh r0, [r5, r1] + movs r2, 0x6 + ldrsh r1, [r5, r2] + bl GetMapTileAtPosition + adds r4, r0, 0 + adds r1, r4, 0 + adds r1, 0xA + adds r1, r6 + ldr r2, _0807112C + movs r0, 0x7 + ands r0, r7 + adds r0, r2 + ldrb r1, [r1] + ldrb r0, [r0] + ands r0, r1 + cmp r0, 0 + beq _08071130 + movs r0, 0x1 + b _08071132 + .align 2, 0 +_0807112C: .4byte gUnknown_8106FCD +_08071130: + movs r0, 0 +_08071132: + pop {r4-r7} + pop {r1} + 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 GetMapTileAtPosition + 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 GetMapTileAtPosition + 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 GetMapTileAtPosition + 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 GetMapTileAtPosition + 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 GetMapTileAtPosition + 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 |