diff --git a/asm/code_807034C.s b/asm/code_807034C.s index 30b20cdee..bc889fd8c 100644 --- a/asm/code_807034C.s +++ b/asm/code_807034C.s @@ -160,522 +160,4 @@ _08070458: 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 GetMapTile_1 - 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 GetMapTile_1 - 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 GetMapTile_1 - 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 GetMapTile_1 - 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 - - .align 2, 0 + .align 2, 0 \ No newline at end of file diff --git a/asm/code_807049C.s b/asm/code_807049C.s new file mode 100644 index 000000000..a0d6d70a4 --- /dev/null +++ b/asm/code_807049C.s @@ -0,0 +1,493 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + 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 GetMapTile_1 + 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 GetMapTile_1 + 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 GetMapTile_1 + 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 GetMapTile_1 + 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 + + .align 2, 0 diff --git a/asm/code_80718D8.s b/asm/code_80718D8.s index e8d360d6f..fb2cc620b 100644 --- a/asm/code_80718D8.s +++ b/asm/code_80718D8.s @@ -2224,1159 +2224,4 @@ _08072C80: .4byte 0x0000013d _08072C84: .4byte gAdjacentTileOffsets thumb_func_end sub_8072B78 - thumb_func_start TargetLeader -TargetLeader: - push {lr} - ldr r1, [r0, 0x70] - ldrb r0, [r1, 0x6] - cmp r0, 0 - bne _08072CA2 - adds r0, r1, 0 - adds r0, 0x94 - ldrb r0, [r0] - bl TacticsTargetLeader - lsls r0, 24 - lsrs r0, 24 - b _08072CA4 -_08072CA2: - movs r0, 0 -_08072CA4: - pop {r1} - bx r1 - thumb_func_end TargetLeader - - thumb_func_start GetLeaderEntityIfVisible -GetLeaderEntityIfVisible: - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, [r5, 0x70] - ldrb r0, [r0, 0x6] - cmp r0, 0 - bne _08072CEC - bl GetLeaderEntity - adds r4, r0, 0 - cmp r4, 0 - beq _08072CEC - ldr r0, [r4, 0x70] - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08072CEC - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0 - bl CanTarget - lsls r0, 24 - cmp r0, 0 - bne _08072CEC - adds r0, r5, 0 - adds r1, r4, 0 - bl CanSee_2 - lsls r0, 24 - cmp r0, 0 - beq _08072CEC - adds r0, r4, 0 - b _08072CEE -_08072CEC: - movs r0, 0 -_08072CEE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end GetLeaderEntityIfVisible - - thumb_func_start sub_8072CF4 -sub_8072CF4: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0x1 - bl sub_804178C - ldr r1, _08072D4C - movs r0, 0x1 - strb r0, [r1] - ldr r6, [r4, 0x70] - adds r0, r6, 0 - adds r0, 0xFC - movs r1, 0 - strb r1, [r0] - subs r0, 0x9 - strb r1, [r0] - ldr r0, _08072D50 - ldr r0, [r0] - adds r0, 0xB8 - str r4, [r0] - ldr r2, _08072D54 - adds r0, r6, 0 - adds r0, 0x44 - ldrh r0, [r0] - lsls r1, r0, 1 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _08072D64 - ldrb r0, [r6, 0x7] - cmp r0, 0 - beq _08072D58 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r1, [r0] - adds r0, r4, 0 - bl sub_805EFB4 - b _08072D64 - .align 2, 0 -_08072D4C: .4byte gUnknown_203B434 -_08072D50: .4byte gDungeonGlobalData -_08072D54: .4byte gUnknown_80F58F4 -_08072D58: - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r1, [r0] - adds r0, r4, 0 - bl sub_8075BA4 -_08072D64: - adds r0, r4, 0 - movs r1, 0 - bl CannotAttack - lsls r0, 24 - cmp r0, 0 - beq _08072D86 - adds r0, r4, 0 - movs r1, 0x1 - bl IsCharging - lsls r0, 24 - cmp r0, 0 - beq _08072D86 - adds r0, r4, 0 - bl sub_8079764 -_08072D86: - movs r7, 0x1 - movs r5, 0xFB - movs r0, 0x8C - lsls r0, 1 - adds r2, r6, r0 - movs r3, 0x3 -_08072D92: - ldrb r1, [r2] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _08072DA4 - ldrb r1, [r2, 0x1] - adds r0, r5, 0 - ands r0, r1 - strb r0, [r2, 0x1] -_08072DA4: - adds r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _08072D92 - adds r0, r4, 0 - movs r1, 0 - bl IsNotAttacking - lsls r0, 24 - cmp r0, 0 - bne _08072E08 - adds r0, r4, 0 - bl UseAttack - lsls r0, 24 - cmp r0, 0 - beq _08072DF0 - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - beq _08072DD2 - b _080732D4 -_08072DD2: - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08072DE0 - b _080732D4 -_08072DE0: - ldr r0, _08072DEC - ldrb r0, [r0] - cmp r0, 0 - beq _08072DF0 - movs r0, 0x1 - b _080732D6 - .align 2, 0 -_08072DEC: .4byte gUnknown_202F32D -_08072DF0: - ldrb r0, [r6, 0x7] - cmp r0, 0 - bne _08072DFC - movs r0, 0xA - bl sub_8052740 -_08072DFC: - adds r0, r4, 0 - bl sub_806A1E8 - movs r0, 0xA - bl sub_803E46C -_08072E08: - adds r0, r6, 0 - adds r0, 0x44 - ldrh r1, [r0] - adds r5, r0, 0 - cmp r1, 0x1 - bls _08072E26 - cmp r1, 0x4 - beq _08072E26 - cmp r1, 0x2 - beq _08072E26 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r6, r2 - movs r0, 0x1 - strb r0, [r1] -_08072E26: - movs r3, 0 - mov r10, r3 - movs r7, 0xA5 - lsls r7, 1 - adds r0, r6, r7 - mov r1, r10 - strb r1, [r0] - ldr r0, _08072E50 - strb r1, [r0] - ldr r0, _08072E54 - strb r1, [r0] - ldrh r0, [r5] - subs r0, 0x2 - cmp r0, 0x3F - bls _08072E46 - b _080731B4 -_08072E46: - lsls r0, 2 - ldr r1, _08072E58 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08072E50: .4byte gUnknown_202F221 -_08072E54: .4byte gUnknown_202F222 -_08072E58: .4byte _08072E5C - .align 2, 0 -_08072E5C: - .4byte _08072F5C - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _08073104 - .4byte _080730A4 - .4byte _0807310C - .4byte _0807311C - .4byte _080731B4 - .4byte _08073094 - .4byte _08073094 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _08073094 - .4byte _0807314C - .4byte _08073154 - .4byte _0807303E - .4byte _080731B4 - .4byte _0807315C - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _08073186 - .4byte _0807318E - .4byte _08073170 - .4byte _08073046 - .4byte _0807311C - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _0807309C - .4byte _08073162 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080731B4 - .4byte _080730AC - .4byte _080730B4 - .4byte _080730C4 - .4byte _08073196 - .4byte _08073114 - .4byte _080730E0 - .4byte _080730CC - .4byte _080730D6 - .4byte _080730BC - .4byte _0807317E - .4byte _080731B4 - .4byte _0807311C -_08072F5C: - adds r0, r6, 0 - adds r0, 0xB0 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08072F76 - cmp r0, 0x7 - beq _08072F76 - cmp r0, 0x5 - beq _08072F76 - cmp r0, 0x3 - beq _08072F76 - cmp r0, 0x4 - bne _08072F84 -_08072F76: - movs r0, 0 - strh r0, [r5] - ldr r2, _08072F80 - adds r1, r6, r2 - b _08072FDA - .align 2, 0 -_08072F80: .4byte 0x00000147 -_08072F84: - movs r3, 0 - mov r9, r3 - ldr r1, _08072FE0 - adds r2, r6, 0 - adds r2, 0x46 - ldrb r3, [r2] - lsls r0, r3, 2 - adds r0, r1 - ldrh r1, [r0] - ldrh r7, [r4, 0x4] - adds r1, r7 - lsls r1, 16 - ldrh r0, [r0, 0x2] - ldrh r7, [r4, 0x6] - adds r0, r7 - lsls r0, 16 - lsrs r1, 16 - mov r8, r1 - orrs r1, r0 - mov r8, r1 - ldrh r1, [r6] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - adds r7, r2, 0 - cmp r0, 0 - bne _08072FCC - adds r0, r4, 0 - adds r1, r3, 0 - bl CanMoveInDirection - lsls r0, 24 - cmp r0, 0 - bne _08072FCC - movs r2, 0x1 - mov r9, r2 -_08072FCC: - mov r3, r9 - cmp r3, 0 - beq _08072FE8 - movs r0, 0 - strh r0, [r5] - ldr r7, _08072FE4 - adds r1, r6, r7 -_08072FDA: - movs r0, 0x1 - strb r0, [r1] - b _080731B8 - .align 2, 0 -_08072FE0: .4byte gAdjacentTileOffsets -_08072FE4: .4byte 0x00000147 -_08072FE8: - ldrh r1, [r4, 0x6] - lsls r1, 16 - ldrh r0, [r4, 0x4] - orrs r0, r1 - str r0, [sp] - mov r0, r8 - lsls r1, r0, 16 - asrs r1, 16 - asrs r2, r0, 16 - adds r0, r4, 0 - movs r3, 0 - bl sub_80694C0 - ldrb r1, [r7] - adds r0, r4, 0 - mov r2, sp - bl sub_8074FB0 - adds r0, r4, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08073038 - adds r0, r6, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08073038 - adds r0, r4, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08073038 - adds r0, r4, 0x4 - bl sub_804AE08 -_08073038: - movs r1, 0x1 - mov r10, r1 - b _080731B8 -_0807303E: - adds r0, r4, 0 - bl sub_807CABC - b _080731B8 -_08073046: - ldr r0, _08073064 - ldr r1, [r0] - ldr r2, _08073068 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x15 - bne _08073074 - ldr r3, _0807306C - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0 - bne _08073074 - ldr r0, _08073070 - b _080731A2 - .align 2, 0 -_08073064: .4byte gDungeonGlobalData -_08073068: .4byte 0x00000644 -_0807306C: .4byte 0x000037fe -_08073070: .4byte gUnknown_80FA5B4 -_08073074: - bl sub_804267C - ldr r0, _0807308C - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x2] - ldr r1, _08073090 - adds r0, r6, 0 - adds r0, 0x46 - ldrb r0, [r0] - strb r0, [r1] - b _080731B8 - .align 2, 0 -_0807308C: .4byte gDungeonGlobalData -_08073090: .4byte gUnknown_202F32C -_08073094: - adds r0, r4, 0 - bl sub_8067110 - b _080731B8 -_0807309C: - adds r0, r4, 0 - bl sub_807CB3C - b _080731B8 -_080730A4: - adds r0, r4, 0 - bl sub_8066744 - b _080731B8 -_080730AC: - adds r0, r4, 0 - bl sub_80668D0 - b _080731B8 -_080730B4: - adds r0, r4, 0 - bl sub_8066AC0 - b _080731B8 -_080730BC: - adds r0, r4, 0 - bl sub_8066BD4 - b _080731B8 -_080730C4: - adds r0, r4, 0 - bl sub_8066CF0 - b _080731B8 -_080730CC: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_806675C - b _080731B8 -_080730D6: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_806684C - b _080731B8 -_080730E0: - ldr r0, _080730FC - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0xBC - adds r0, r6, 0 - adds r0, 0x48 - ldrb r0, [r0] - lsls r0, 2 - ldr r7, _08073100 - adds r1, r7 - adds r1, r0 - ldr r0, [r1] - str r0, [r2] - b _080731B8 - .align 2, 0 -_080730FC: .4byte gDungeonGlobalData -_08073100: .4byte 0x0001357c -_08073104: - adds r0, r4, 0 - bl sub_8066D04 - b _080731B8 -_0807310C: - adds r0, r4, 0 - bl sub_8066E14 - b _080731B8 -_08073114: - adds r0, r4, 0 - bl sub_8066FA4 - b _080731B8 -_0807311C: - adds r0, r6, 0 - bl ToolboxEnabled - lsls r0, 24 - cmp r0, 0 - beq _08073136 - adds r0, r4, 0 - bl nullsub_95 - adds r0, r4, 0 - bl sub_80671A0 - b _080731B8 -_08073136: - ldr r0, _08073144 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08073148 - b _080731A2 - .align 2, 0 -_08073144: .4byte gAvailablePokemonNames -_08073148: .4byte gUnknown_80FE6D4 -_0807314C: - adds r0, r4, 0 - bl sub_8067510 - b _080731B8 -_08073154: - adds r0, r4, 0 - bl sub_8067884 - b _080731B8 -_0807315C: - movs r1, 0xB0 - lsls r1, 1 - b _08073164 -_08073162: - ldr r1, _0807316C -_08073164: - adds r0, r4, 0 - bl sub_8067904 - b _080731B8 - .align 2, 0 -_0807316C: .4byte 0x00000163 -_08073170: - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0 - movs r3, 0 - bl sub_807FE9C - b _080731B8 -_0807317E: - adds r0, r4, 0 - bl sub_8073D08 - b _080731B8 -_08073186: - adds r0, r4, 0 - bl sub_8073CF0 - b _080731B8 -_0807318E: - adds r0, r4, 0 - bl sub_8073CFC - b _080731B8 -_08073196: - ldr r0, _080731AC - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _080731B0 -_080731A2: - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage - b _080731B8 - .align 2, 0 -_080731AC: .4byte gAvailablePokemonNames -_080731B0: .4byte gUnknown_80FE478 -_080731B4: - movs r0, 0x1 - strh r0, [r5] -_080731B8: - adds r0, r4, 0 - bl sub_807FD84 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _080731CC - b _080732D4 -_080731CC: - ldr r0, [r4, 0x70] - movs r2, 0xA5 - lsls r2, 1 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0 - bne _080731E2 - strb r0, [r1] - adds r0, r4, 0 - bl sub_8079764 -_080731E2: - movs r0, 0 - bl sub_8041888 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080732D4 - bl sub_8085140 - ldr r3, _080732E8 - adds r1, r6, r3 - ldrb r0, [r1] - cmp r0, 0 - beq _08073242 - movs r5, 0 - strb r5, [r1] - movs r7, 0x8C - lsls r7, 1 - adds r2, r6, r7 - movs r0, 0x1 - mov r12, r0 - movs r7, 0x10 - movs r3, 0x3 -_08073214: - ldrb r1, [r2] - mov r0, r12 - ands r0, r1 - cmp r0, 0 - beq _0807322C - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _0807322C - movs r0, 0 - strb r0, [r2, 0x4] - movs r5, 0x1 -_0807322C: - adds r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _08073214 - cmp r5, 0 - beq _08073242 - ldr r0, _080732EC - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage -_08073242: - bl sub_807360C - bl sub_8044B84 - lsls r0, 24 - cmp r0, 0 - bne _08073264 - bl sub_807348C - bl sub_80732F0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080732D4 -_08073264: - mov r1, r10 - cmp r1, 0 - beq _08073270 - adds r0, r4, 0 - bl sub_8075818 -_08073270: - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080732D4 - bl sub_8044B84 - lsls r0, 24 - cmp r0, 0 - bne _0807328A - bl sub_8046D20 -_0807328A: - movs r0, 0 - bl sub_8041888 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080732D4 - movs r2, 0xA2 - lsls r2, 1 - adds r0, r6, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _080732D4 - mov r3, r10 - cmp r3, 0 - bne _080732D4 - adds r1, r4, 0x4 - adds r0, r4, 0 - bl sub_80706A4 - lsls r0, 24 - cmp r0, 0 - beq _080732C8 - adds r0, r4, 0 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0 - bl sub_807D148 -_080732C8: - adds r0, r4, 0 - bl sub_8074094 - adds r0, r4, 0 - bl sub_8071DA4 -_080732D4: - movs r0, 0 -_080732D6: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080732E8: .4byte 0x0000014b -_080732EC: .4byte gUnknown_80FD2CC - thumb_func_end sub_8072CF4 - - thumb_func_start sub_80732F0 -sub_80732F0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - movs r4, 0 -_080732FE: - movs r5, 0 - ldr r0, _0807335C - ldr r0, [r0] - lsls r1, r4, 2 - ldr r2, _08073360 - adds r0, r2 - adds r0, r1 - ldr r0, [r0] - mov r8, r0 - bl EntityExists - lsls r0, 24 - adds r4, 0x1 - str r4, [sp, 0x10] - cmp r0, 0 - bne _08073320 - b _08073472 -_08073320: - mov r0, r8 - ldr r7, [r0, 0x70] - movs r1, 0xB2 - lsls r1, 1 - adds r4, r7, r1 - ldrb r0, [r4] - cmp r0, 0xFF - bne _08073332 - b _08073472 -_08073332: - adds r2, r0, 0 - mov r9, r2 - mov r0, r8 - movs r1, 0x1 - bl CannotAttack - lsls r0, 24 - cmp r0, 0 - bne _0807336E - mov r0, r8 - bl IsSleeping - lsls r0, 24 - cmp r0, 0 - bne _08073364 - ldrb r0, [r4] - movs r2, 0xFF - orrs r0, r2 - strb r0, [r4] - b _08073472 - .align 2, 0 -_0807335C: .4byte gDungeonGlobalData -_08073360: .4byte 0x000135cc -_08073364: - adds r0, r7, 0 - adds r0, 0xEC - ldrb r0, [r0] - cmp r0, 0x1 - bne _08073378 -_0807336E: - ldrb r0, [r4] - movs r1, 0xFF - orrs r0, r1 - strb r0, [r4] - b _08073472 -_08073378: - movs r0, 0x4 - bl DungeonRandomCapped - adds r3, r0, 0 - movs r4, 0 -_08073382: - lsls r0, r3, 3 - movs r2, 0x8C - lsls r2, 1 - adds r0, r2 - adds r2, r7, r0 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08073448 - ldr r0, [r2] - ldr r1, [r2, 0x4] - str r0, [sp, 0x8] - str r1, [sp, 0xC] - ldr r1, [sp, 0x8] - lsrs r0, r1, 16 - cmp r0, 0x8A - beq _08073448 - adds r1, r0, 0 - ldr r0, _08073434 - cmp r1, r0 - beq _08073448 - movs r6, 0 - movs r0, 0x46 - adds r0, r7 - mov r10, r0 - movs r1, 0x8C - lsls r1, 1 - adds r4, r7, r1 -_080733BC: - lsls r0, r6, 3 - movs r2, 0x8C - lsls r2, 1 - adds r0, r2 - adds r5, r7, r0 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080733F4 - ldrb r0, [r7, 0x7] - cmp r0, 0 - bne _080733DE - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080733F4 -_080733DE: - ldrh r0, [r4, 0x2] - cmp r0, 0xE3 - bne _080733F4 - mov r0, r8 - adds r1, r5, 0 - movs r2, 0x1 - bl IsMoveUsable - lsls r0, 24 - cmp r0, 0 - bne _08073440 -_080733F4: - adds r4, 0x8 - adds r6, 0x1 - cmp r6, 0x3 - ble _080733BC -_080733FC: - ldr r0, _08073438 - mov r1, r8 - movs r2, 0 - bl SetMessageArgument - ldr r0, _0807343C - ldr r1, [r0] - mov r0, r8 - bl SendMessage - movs r0, 0x7 - mov r1, r9 - ands r1, r0 - movs r0, 0 - mov r2, r10 - strb r1, [r2] - str r0, [sp] - add r0, sp, 0x8 - str r0, [sp, 0x4] - mov r0, r8 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl sub_8055FA0 - movs r5, 0x1 - b _08073456 - .align 2, 0 -_08073434: .4byte 0x00000147 -_08073438: .4byte gAvailablePokemonNames -_0807343C: .4byte gUnknown_80FCF38 -_08073440: - adds r0, r5, 0x4 - bl sub_80838EC - b _080733FC -_08073448: - adds r3, 0x1 - cmp r3, 0x4 - bne _08073450 - movs r3, 0 -_08073450: - adds r4, 0x1 - cmp r4, 0x3 - ble _08073382 -_08073456: - movs r2, 0xB2 - lsls r2, 1 - adds r1, r7, r2 - ldrb r0, [r1] - movs r2, 0xFF - orrs r0, r2 - strb r0, [r1] - cmp r5, 0 - beq _08073472 - mov r0, r8 - movs r1, 0xB8 - lsls r1, 2 - bl sub_80421C0 -_08073472: - ldr r4, [sp, 0x10] - cmp r4, 0x13 - bgt _0807347A - b _080732FE -_0807347A: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80732F0 - - thumb_func_start sub_807348C -sub_807348C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - movs r4, 0 - movs r0, 0xFF - mov r9, r0 -_0807349E: - ldr r0, _080734E8 - ldr r0, [r0] - lsls r1, r4, 2 - ldr r2, _080734EC - adds r0, r2 - adds r0, r1 - ldr r7, [r0] - adds r0, r7, 0 - bl EntityExists - lsls r0, 24 - adds r4, 0x1 - str r4, [sp, 0x10] - cmp r0, 0 - bne _080734BE - b _080735E6 -_080734BE: - ldr r6, [r7, 0x70] - ldr r0, _080734F0 - adds r4, r6, r0 - ldrb r0, [r4] - cmp r0, 0xFF - bne _080734CC - b _080735E6 -_080734CC: - adds r1, r0, 0 - mov r8, r1 - adds r0, r7, 0 - movs r1, 0x1 - bl CannotAttack - lsls r0, 24 - cmp r0, 0 - beq _080734F4 - ldrb r0, [r4] - mov r2, r9 - orrs r0, r2 - strb r0, [r4] - b _080735DA - .align 2, 0 -_080734E8: .4byte gDungeonGlobalData -_080734EC: .4byte 0x000135cc -_080734F0: .4byte 0x00000165 -_080734F4: - adds r0, r7, 0 - bl IsSleeping - lsls r0, 24 - cmp r0, 0 - bne _08073514 - ldrb r0, [r4] - mov r1, r9 - orrs r0, r1 - strb r0, [r4] - movs r2, 0xB2 - lsls r2, 1 - adds r1, r6, r2 - ldrb r0, [r1] - mov r2, r9 - b _080735E2 -_08073514: - adds r0, r6, 0 - adds r0, 0xEC - ldrb r0, [r0] - cmp r0, 0x1 - bne _0807354A - ldrb r0, [r4] - mov r1, r9 - orrs r0, r1 - strb r0, [r4] - movs r2, 0xB2 - lsls r2, 1 - adds r1, r6, r2 - ldrb r0, [r1] - mov r2, r9 - b _080735E2 -_08073532: - ldr r0, [r5] - ldr r1, [r5, 0x4] - str r0, [sp, 0x8] - str r1, [sp, 0xC] - adds r0, r5, 0x4 - bl sub_80838EC - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_806ACE8 - b _0807359C -_0807354A: - movs r3, 0 - movs r0, 0x46 - adds r0, r6 - mov r10, r0 - movs r1, 0x8C - lsls r1, 1 - adds r4, r6, r1 -_08073558: - lsls r0, r3, 3 - movs r2, 0x8C - lsls r2, 1 - adds r0, r2 - adds r5, r6, r0 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08073594 - ldrb r0, [r6, 0x7] - cmp r0, 0 - bne _0807357A - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08073594 -_0807357A: - ldrh r0, [r4, 0x2] - cmp r0, 0x19 - bne _08073594 - adds r0, r7, 0 - adds r1, r5, 0 - movs r2, 0x1 - str r3, [sp, 0x14] - bl IsMoveUsable - lsls r0, 24 - ldr r3, [sp, 0x14] - cmp r0, 0 - bne _08073532 -_08073594: - adds r4, 0x8 - adds r3, 0x1 - cmp r3, 0x3 - ble _08073558 -_0807359C: - ldr r0, _08073600 - adds r1, r7, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08073604 - ldr r1, [r0] - adds r0, r7, 0 - bl SendMessage - movs r0, 0x7 - mov r1, r8 - ands r1, r0 - movs r0, 0 - mov r2, r10 - strb r1, [r2] - str r0, [sp] - add r0, sp, 0x8 - str r0, [sp, 0x4] - adds r0, r7, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl sub_8055FA0 - ldr r2, _08073608 - adds r1, r6, r2 - ldrb r0, [r1] - mov r2, r9 - orrs r0, r2 - strb r0, [r1] -_080735DA: - movs r0, 0xB2 - lsls r0, 1 - adds r1, r6, r0 - ldrb r0, [r1] -_080735E2: - orrs r0, r2 - strb r0, [r1] -_080735E6: - ldr r4, [sp, 0x10] - cmp r4, 0x13 - bgt _080735EE - b _0807349E -_080735EE: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073600: .4byte gAvailablePokemonNames -_08073604: .4byte gUnknown_80FCF50 -_08073608: .4byte 0x00000165 - thumb_func_end sub_807348C - - .align 2, 0 + .align 2, 0 \ No newline at end of file diff --git a/asm/code_8072CF4.s b/asm/code_8072CF4.s new file mode 100644 index 000000000..3aaf33cbc --- /dev/null +++ b/asm/code_8072CF4.s @@ -0,0 +1,1101 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_8072CF4 +sub_8072CF4: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x4 + adds r4, r0, 0 + movs r0, 0x1 + bl sub_804178C + ldr r1, _08072D4C + movs r0, 0x1 + strb r0, [r1] + ldr r6, [r4, 0x70] + adds r0, r6, 0 + adds r0, 0xFC + movs r1, 0 + strb r1, [r0] + subs r0, 0x9 + strb r1, [r0] + ldr r0, _08072D50 + ldr r0, [r0] + adds r0, 0xB8 + str r4, [r0] + ldr r2, _08072D54 + adds r0, r6, 0 + adds r0, 0x44 + ldrh r0, [r0] + lsls r1, r0, 1 + adds r0, r1, r2 + ldrb r0, [r0] + cmp r0, 0 + beq _08072D64 + ldrb r0, [r6, 0x7] + cmp r0, 0 + beq _08072D58 + adds r0, r2, 0x1 + adds r0, r1, r0 + ldrb r1, [r0] + adds r0, r4, 0 + bl sub_805EFB4 + b _08072D64 + .align 2, 0 +_08072D4C: .4byte gUnknown_203B434 +_08072D50: .4byte gDungeonGlobalData +_08072D54: .4byte gUnknown_80F58F4 +_08072D58: + adds r0, r2, 0x1 + adds r0, r1, r0 + ldrb r1, [r0] + adds r0, r4, 0 + bl sub_8075BA4 +_08072D64: + adds r0, r4, 0 + movs r1, 0 + bl CannotAttack + lsls r0, 24 + cmp r0, 0 + beq _08072D86 + adds r0, r4, 0 + movs r1, 0x1 + bl IsCharging + lsls r0, 24 + cmp r0, 0 + beq _08072D86 + adds r0, r4, 0 + bl sub_8079764 +_08072D86: + movs r7, 0x1 + movs r5, 0xFB + movs r0, 0x8C + lsls r0, 1 + adds r2, r6, r0 + movs r3, 0x3 +_08072D92: + ldrb r1, [r2] + adds r0, r7, 0 + ands r0, r1 + cmp r0, 0 + beq _08072DA4 + ldrb r1, [r2, 0x1] + adds r0, r5, 0 + ands r0, r1 + strb r0, [r2, 0x1] +_08072DA4: + adds r2, 0x8 + subs r3, 0x1 + cmp r3, 0 + bge _08072D92 + adds r0, r4, 0 + movs r1, 0 + bl IsNotAttacking + lsls r0, 24 + cmp r0, 0 + bne _08072E08 + adds r0, r4, 0 + bl UseAttack + lsls r0, 24 + cmp r0, 0 + beq _08072DF0 + bl sub_8044B28 + lsls r0, 24 + cmp r0, 0 + beq _08072DD2 + b _080732D4 +_08072DD2: + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + bne _08072DE0 + b _080732D4 +_08072DE0: + ldr r0, _08072DEC + ldrb r0, [r0] + cmp r0, 0 + beq _08072DF0 + movs r0, 0x1 + b _080732D6 + .align 2, 0 +_08072DEC: .4byte gUnknown_202F32D +_08072DF0: + ldrb r0, [r6, 0x7] + cmp r0, 0 + bne _08072DFC + movs r0, 0xA + bl sub_8052740 +_08072DFC: + adds r0, r4, 0 + bl sub_806A1E8 + movs r0, 0xA + bl sub_803E46C +_08072E08: + adds r0, r6, 0 + adds r0, 0x44 + ldrh r1, [r0] + adds r5, r0, 0 + cmp r1, 0x1 + bls _08072E26 + cmp r1, 0x4 + beq _08072E26 + cmp r1, 0x2 + beq _08072E26 + movs r2, 0xA4 + lsls r2, 1 + adds r1, r6, r2 + movs r0, 0x1 + strb r0, [r1] +_08072E26: + movs r3, 0 + mov r10, r3 + movs r7, 0xA5 + lsls r7, 1 + adds r0, r6, r7 + mov r1, r10 + strb r1, [r0] + ldr r0, _08072E50 + strb r1, [r0] + ldr r0, _08072E54 + strb r1, [r0] + ldrh r0, [r5] + subs r0, 0x2 + cmp r0, 0x3F + bls _08072E46 + b _080731B4 +_08072E46: + lsls r0, 2 + ldr r1, _08072E58 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08072E50: .4byte gUnknown_202F221 +_08072E54: .4byte gUnknown_202F222 +_08072E58: .4byte _08072E5C + .align 2, 0 +_08072E5C: + .4byte _08072F5C + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _08073104 + .4byte _080730A4 + .4byte _0807310C + .4byte _0807311C + .4byte _080731B4 + .4byte _08073094 + .4byte _08073094 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _08073094 + .4byte _0807314C + .4byte _08073154 + .4byte _0807303E + .4byte _080731B4 + .4byte _0807315C + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _08073186 + .4byte _0807318E + .4byte _08073170 + .4byte _08073046 + .4byte _0807311C + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _0807309C + .4byte _08073162 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080731B4 + .4byte _080730AC + .4byte _080730B4 + .4byte _080730C4 + .4byte _08073196 + .4byte _08073114 + .4byte _080730E0 + .4byte _080730CC + .4byte _080730D6 + .4byte _080730BC + .4byte _0807317E + .4byte _080731B4 + .4byte _0807311C +_08072F5C: + adds r0, r6, 0 + adds r0, 0xB0 + ldrb r0, [r0] + cmp r0, 0x2 + beq _08072F76 + cmp r0, 0x7 + beq _08072F76 + cmp r0, 0x5 + beq _08072F76 + cmp r0, 0x3 + beq _08072F76 + cmp r0, 0x4 + bne _08072F84 +_08072F76: + movs r0, 0 + strh r0, [r5] + ldr r2, _08072F80 + adds r1, r6, r2 + b _08072FDA + .align 2, 0 +_08072F80: .4byte 0x00000147 +_08072F84: + movs r3, 0 + mov r9, r3 + ldr r1, _08072FE0 + adds r2, r6, 0 + adds r2, 0x46 + ldrb r3, [r2] + lsls r0, r3, 2 + adds r0, r1 + ldrh r1, [r0] + ldrh r7, [r4, 0x4] + adds r1, r7 + lsls r1, 16 + ldrh r0, [r0, 0x2] + ldrh r7, [r4, 0x6] + adds r0, r7 + lsls r0, 16 + lsrs r1, 16 + mov r8, r1 + orrs r1, r0 + mov r8, r1 + ldrh r1, [r6] + movs r0, 0x80 + lsls r0, 8 + ands r0, r1 + adds r7, r2, 0 + cmp r0, 0 + bne _08072FCC + adds r0, r4, 0 + adds r1, r3, 0 + bl CanMoveInDirection + lsls r0, 24 + cmp r0, 0 + bne _08072FCC + movs r2, 0x1 + mov r9, r2 +_08072FCC: + mov r3, r9 + cmp r3, 0 + beq _08072FE8 + movs r0, 0 + strh r0, [r5] + ldr r7, _08072FE4 + adds r1, r6, r7 +_08072FDA: + movs r0, 0x1 + strb r0, [r1] + b _080731B8 + .align 2, 0 +_08072FE0: .4byte gAdjacentTileOffsets +_08072FE4: .4byte 0x00000147 +_08072FE8: + ldrh r1, [r4, 0x6] + lsls r1, 16 + ldrh r0, [r4, 0x4] + orrs r0, r1 + str r0, [sp] + mov r0, r8 + lsls r1, r0, 16 + asrs r1, 16 + asrs r2, r0, 16 + adds r0, r4, 0 + movs r3, 0 + bl sub_80694C0 + ldrb r1, [r7] + adds r0, r4, 0 + mov r2, sp + bl sub_8074FB0 + adds r0, r4, 0 + movs r1, 0xD + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08073038 + adds r0, r6, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x3 + beq _08073038 + adds r0, r4, 0 + movs r1, 0x9 + bl HasItem + lsls r0, 24 + cmp r0, 0 + bne _08073038 + adds r0, r4, 0x4 + bl sub_804AE08 +_08073038: + movs r1, 0x1 + mov r10, r1 + b _080731B8 +_0807303E: + adds r0, r4, 0 + bl sub_807CABC + b _080731B8 +_08073046: + ldr r0, _08073064 + ldr r1, [r0] + ldr r2, _08073068 + adds r0, r1, r2 + ldrb r0, [r0] + cmp r0, 0x15 + bne _08073074 + ldr r3, _0807306C + adds r0, r1, r3 + ldrb r0, [r0] + cmp r0, 0 + bne _08073074 + ldr r0, _08073070 + b _080731A2 + .align 2, 0 +_08073064: .4byte gDungeonGlobalData +_08073068: .4byte 0x00000644 +_0807306C: .4byte 0x000037fe +_08073070: .4byte gUnknown_80FA5B4 +_08073074: + bl sub_804267C + ldr r0, _0807308C + ldr r1, [r0] + movs r0, 0x1 + strb r0, [r1, 0x2] + ldr r1, _08073090 + adds r0, r6, 0 + adds r0, 0x46 + ldrb r0, [r0] + strb r0, [r1] + b _080731B8 + .align 2, 0 +_0807308C: .4byte gDungeonGlobalData +_08073090: .4byte gUnknown_202F32C +_08073094: + adds r0, r4, 0 + bl sub_8067110 + b _080731B8 +_0807309C: + adds r0, r4, 0 + bl sub_807CB3C + b _080731B8 +_080730A4: + adds r0, r4, 0 + bl sub_8066744 + b _080731B8 +_080730AC: + adds r0, r4, 0 + bl sub_80668D0 + b _080731B8 +_080730B4: + adds r0, r4, 0 + bl sub_8066AC0 + b _080731B8 +_080730BC: + adds r0, r4, 0 + bl sub_8066BD4 + b _080731B8 +_080730C4: + adds r0, r4, 0 + bl sub_8066CF0 + b _080731B8 +_080730CC: + adds r0, r4, 0 + movs r1, 0x1 + bl sub_806675C + b _080731B8 +_080730D6: + adds r0, r4, 0 + movs r1, 0x1 + bl sub_806684C + b _080731B8 +_080730E0: + ldr r0, _080730FC + ldr r1, [r0] + adds r2, r1, 0 + adds r2, 0xBC + adds r0, r6, 0 + adds r0, 0x48 + ldrb r0, [r0] + lsls r0, 2 + ldr r7, _08073100 + adds r1, r7 + adds r1, r0 + ldr r0, [r1] + str r0, [r2] + b _080731B8 + .align 2, 0 +_080730FC: .4byte gDungeonGlobalData +_08073100: .4byte 0x0001357c +_08073104: + adds r0, r4, 0 + bl sub_8066D04 + b _080731B8 +_0807310C: + adds r0, r4, 0 + bl sub_8066E14 + b _080731B8 +_08073114: + adds r0, r4, 0 + bl sub_8066FA4 + b _080731B8 +_0807311C: + adds r0, r6, 0 + bl ToolboxEnabled + lsls r0, 24 + cmp r0, 0 + beq _08073136 + adds r0, r4, 0 + bl nullsub_95 + adds r0, r4, 0 + bl sub_80671A0 + b _080731B8 +_08073136: + ldr r0, _08073144 + adds r1, r4, 0 + movs r2, 0 + bl SetMessageArgument + ldr r0, _08073148 + b _080731A2 + .align 2, 0 +_08073144: .4byte gAvailablePokemonNames +_08073148: .4byte gUnknown_80FE6D4 +_0807314C: + adds r0, r4, 0 + bl sub_8067510 + b _080731B8 +_08073154: + adds r0, r4, 0 + bl sub_8067884 + b _080731B8 +_0807315C: + movs r1, 0xB0 + lsls r1, 1 + b _08073164 +_08073162: + ldr r1, _0807316C +_08073164: + adds r0, r4, 0 + bl sub_8067904 + b _080731B8 + .align 2, 0 +_0807316C: .4byte 0x00000163 +_08073170: + adds r1, r4, 0x4 + adds r0, r4, 0 + movs r2, 0 + movs r3, 0 + bl sub_807FE9C + b _080731B8 +_0807317E: + adds r0, r4, 0 + bl sub_8073D08 + b _080731B8 +_08073186: + adds r0, r4, 0 + bl sub_8073CF0 + b _080731B8 +_0807318E: + adds r0, r4, 0 + bl sub_8073CFC + b _080731B8 +_08073196: + ldr r0, _080731AC + adds r1, r4, 0 + movs r2, 0 + bl SetMessageArgument + ldr r0, _080731B0 +_080731A2: + ldr r1, [r0] + adds r0, r4, 0 + bl SendMessage + b _080731B8 + .align 2, 0 +_080731AC: .4byte gAvailablePokemonNames +_080731B0: .4byte gUnknown_80FE478 +_080731B4: + movs r0, 0x1 + strh r0, [r5] +_080731B8: + adds r0, r4, 0 + bl sub_807FD84 + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + bne _080731CC + b _080732D4 +_080731CC: + ldr r0, [r4, 0x70] + movs r2, 0xA5 + lsls r2, 1 + adds r1, r0, r2 + ldrb r0, [r1] + cmp r0, 0 + bne _080731E2 + strb r0, [r1] + adds r0, r4, 0 + bl sub_8079764 +_080731E2: + movs r0, 0 + bl sub_8041888 + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _080732D4 + bl sub_8085140 + ldr r3, _080732E8 + adds r1, r6, r3 + ldrb r0, [r1] + cmp r0, 0 + beq _08073242 + movs r5, 0 + strb r5, [r1] + movs r7, 0x8C + lsls r7, 1 + adds r2, r6, r7 + movs r0, 0x1 + mov r12, r0 + movs r7, 0x10 + movs r3, 0x3 +_08073214: + ldrb r1, [r2] + mov r0, r12 + ands r0, r1 + cmp r0, 0 + beq _0807322C + adds r0, r7, 0 + ands r0, r1 + cmp r0, 0 + beq _0807322C + movs r0, 0 + strb r0, [r2, 0x4] + movs r5, 0x1 +_0807322C: + adds r2, 0x8 + subs r3, 0x1 + cmp r3, 0 + bge _08073214 + cmp r5, 0 + beq _08073242 + ldr r0, _080732EC + ldr r1, [r0] + adds r0, r4, 0 + bl SendMessage +_08073242: + bl sub_807360C + bl sub_8044B84 + lsls r0, 24 + cmp r0, 0 + bne _08073264 + bl sub_807348C + bl sub_80732F0 + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _080732D4 +_08073264: + mov r1, r10 + cmp r1, 0 + beq _08073270 + adds r0, r4, 0 + bl sub_8075818 +_08073270: + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _080732D4 + bl sub_8044B84 + lsls r0, 24 + cmp r0, 0 + bne _0807328A + bl sub_8046D20 +_0807328A: + movs r0, 0 + bl sub_8041888 + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _080732D4 + movs r2, 0xA2 + lsls r2, 1 + adds r0, r6, r2 + ldrb r0, [r0] + cmp r0, 0 + bne _080732D4 + mov r3, r10 + cmp r3, 0 + bne _080732D4 + adds r1, r4, 0x4 + adds r0, r4, 0 + bl sub_80706A4 + lsls r0, 24 + cmp r0, 0 + beq _080732C8 + adds r0, r4, 0 + adds r1, r4, 0 + movs r2, 0 + movs r3, 0 + bl sub_807D148 +_080732C8: + adds r0, r4, 0 + bl sub_8074094 + adds r0, r4, 0 + bl sub_8071DA4 +_080732D4: + movs r0, 0 +_080732D6: + add sp, 0x4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 +_080732E8: .4byte 0x0000014b +_080732EC: .4byte gUnknown_80FD2CC + thumb_func_end sub_8072CF4 + + thumb_func_start sub_80732F0 +sub_80732F0: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x14 + movs r4, 0 +_080732FE: + movs r5, 0 + ldr r0, _0807335C + ldr r0, [r0] + lsls r1, r4, 2 + ldr r2, _08073360 + adds r0, r2 + adds r0, r1 + ldr r0, [r0] + mov r8, r0 + bl EntityExists + lsls r0, 24 + adds r4, 0x1 + str r4, [sp, 0x10] + cmp r0, 0 + bne _08073320 + b _08073472 +_08073320: + mov r0, r8 + ldr r7, [r0, 0x70] + movs r1, 0xB2 + lsls r1, 1 + adds r4, r7, r1 + ldrb r0, [r4] + cmp r0, 0xFF + bne _08073332 + b _08073472 +_08073332: + adds r2, r0, 0 + mov r9, r2 + mov r0, r8 + movs r1, 0x1 + bl CannotAttack + lsls r0, 24 + cmp r0, 0 + bne _0807336E + mov r0, r8 + bl IsSleeping + lsls r0, 24 + cmp r0, 0 + bne _08073364 + ldrb r0, [r4] + movs r2, 0xFF + orrs r0, r2 + strb r0, [r4] + b _08073472 + .align 2, 0 +_0807335C: .4byte gDungeonGlobalData +_08073360: .4byte 0x000135cc +_08073364: + adds r0, r7, 0 + adds r0, 0xEC + ldrb r0, [r0] + cmp r0, 0x1 + bne _08073378 +_0807336E: + ldrb r0, [r4] + movs r1, 0xFF + orrs r0, r1 + strb r0, [r4] + b _08073472 +_08073378: + movs r0, 0x4 + bl DungeonRandomCapped + adds r3, r0, 0 + movs r4, 0 +_08073382: + lsls r0, r3, 3 + movs r2, 0x8C + lsls r2, 1 + adds r0, r2 + adds r2, r7, r0 + ldrb r1, [r2] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08073448 + ldr r0, [r2] + ldr r1, [r2, 0x4] + str r0, [sp, 0x8] + str r1, [sp, 0xC] + ldr r1, [sp, 0x8] + lsrs r0, r1, 16 + cmp r0, 0x8A + beq _08073448 + adds r1, r0, 0 + ldr r0, _08073434 + cmp r1, r0 + beq _08073448 + movs r6, 0 + movs r0, 0x46 + adds r0, r7 + mov r10, r0 + movs r1, 0x8C + lsls r1, 1 + adds r4, r7, r1 +_080733BC: + lsls r0, r6, 3 + movs r2, 0x8C + lsls r2, 1 + adds r0, r2 + adds r5, r7, r0 + ldrb r1, [r4] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _080733F4 + ldrb r0, [r7, 0x7] + cmp r0, 0 + bne _080733DE + movs r0, 0x4 + ands r0, r1 + cmp r0, 0 + beq _080733F4 +_080733DE: + ldrh r0, [r4, 0x2] + cmp r0, 0xE3 + bne _080733F4 + mov r0, r8 + adds r1, r5, 0 + movs r2, 0x1 + bl IsMoveUsable + lsls r0, 24 + cmp r0, 0 + bne _08073440 +_080733F4: + adds r4, 0x8 + adds r6, 0x1 + cmp r6, 0x3 + ble _080733BC +_080733FC: + ldr r0, _08073438 + mov r1, r8 + movs r2, 0 + bl SetMessageArgument + ldr r0, _0807343C + ldr r1, [r0] + mov r0, r8 + bl SendMessage + movs r0, 0x7 + mov r1, r9 + ands r1, r0 + movs r0, 0 + mov r2, r10 + strb r1, [r2] + str r0, [sp] + add r0, sp, 0x8 + str r0, [sp, 0x4] + mov r0, r8 + movs r1, 0 + movs r2, 0 + movs r3, 0x1 + bl sub_8055FA0 + movs r5, 0x1 + b _08073456 + .align 2, 0 +_08073434: .4byte 0x00000147 +_08073438: .4byte gAvailablePokemonNames +_0807343C: .4byte gUnknown_80FCF38 +_08073440: + adds r0, r5, 0x4 + bl sub_80838EC + b _080733FC +_08073448: + adds r3, 0x1 + cmp r3, 0x4 + bne _08073450 + movs r3, 0 +_08073450: + adds r4, 0x1 + cmp r4, 0x3 + ble _08073382 +_08073456: + movs r2, 0xB2 + lsls r2, 1 + adds r1, r7, r2 + ldrb r0, [r1] + movs r2, 0xFF + orrs r0, r2 + strb r0, [r1] + cmp r5, 0 + beq _08073472 + mov r0, r8 + movs r1, 0xB8 + lsls r1, 2 + bl sub_80421C0 +_08073472: + ldr r4, [sp, 0x10] + cmp r4, 0x13 + bgt _0807347A + b _080732FE +_0807347A: + add sp, 0x14 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_80732F0 + + thumb_func_start sub_807348C +sub_807348C: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x18 + movs r4, 0 + movs r0, 0xFF + mov r9, r0 +_0807349E: + ldr r0, _080734E8 + ldr r0, [r0] + lsls r1, r4, 2 + ldr r2, _080734EC + adds r0, r2 + adds r0, r1 + ldr r7, [r0] + adds r0, r7, 0 + bl EntityExists + lsls r0, 24 + adds r4, 0x1 + str r4, [sp, 0x10] + cmp r0, 0 + bne _080734BE + b _080735E6 +_080734BE: + ldr r6, [r7, 0x70] + ldr r0, _080734F0 + adds r4, r6, r0 + ldrb r0, [r4] + cmp r0, 0xFF + bne _080734CC + b _080735E6 +_080734CC: + adds r1, r0, 0 + mov r8, r1 + adds r0, r7, 0 + movs r1, 0x1 + bl CannotAttack + lsls r0, 24 + cmp r0, 0 + beq _080734F4 + ldrb r0, [r4] + mov r2, r9 + orrs r0, r2 + strb r0, [r4] + b _080735DA + .align 2, 0 +_080734E8: .4byte gDungeonGlobalData +_080734EC: .4byte 0x000135cc +_080734F0: .4byte 0x00000165 +_080734F4: + adds r0, r7, 0 + bl IsSleeping + lsls r0, 24 + cmp r0, 0 + bne _08073514 + ldrb r0, [r4] + mov r1, r9 + orrs r0, r1 + strb r0, [r4] + movs r2, 0xB2 + lsls r2, 1 + adds r1, r6, r2 + ldrb r0, [r1] + mov r2, r9 + b _080735E2 +_08073514: + adds r0, r6, 0 + adds r0, 0xEC + ldrb r0, [r0] + cmp r0, 0x1 + bne _0807354A + ldrb r0, [r4] + mov r1, r9 + orrs r0, r1 + strb r0, [r4] + movs r2, 0xB2 + lsls r2, 1 + adds r1, r6, r2 + ldrb r0, [r1] + mov r2, r9 + b _080735E2 +_08073532: + ldr r0, [r5] + ldr r1, [r5, 0x4] + str r0, [sp, 0x8] + str r1, [sp, 0xC] + adds r0, r5, 0x4 + bl sub_80838EC + adds r0, r7, 0 + adds r1, r5, 0 + bl sub_806ACE8 + b _0807359C +_0807354A: + movs r3, 0 + movs r0, 0x46 + adds r0, r6 + mov r10, r0 + movs r1, 0x8C + lsls r1, 1 + adds r4, r6, r1 +_08073558: + lsls r0, r3, 3 + movs r2, 0x8C + lsls r2, 1 + adds r0, r2 + adds r5, r6, r0 + ldrb r1, [r4] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08073594 + ldrb r0, [r6, 0x7] + cmp r0, 0 + bne _0807357A + movs r0, 0x4 + ands r0, r1 + cmp r0, 0 + beq _08073594 +_0807357A: + ldrh r0, [r4, 0x2] + cmp r0, 0x19 + bne _08073594 + adds r0, r7, 0 + adds r1, r5, 0 + movs r2, 0x1 + str r3, [sp, 0x14] + bl IsMoveUsable + lsls r0, 24 + ldr r3, [sp, 0x14] + cmp r0, 0 + bne _08073532 +_08073594: + adds r4, 0x8 + adds r3, 0x1 + cmp r3, 0x3 + ble _08073558 +_0807359C: + ldr r0, _08073600 + adds r1, r7, 0 + movs r2, 0 + bl SetMessageArgument + ldr r0, _08073604 + ldr r1, [r0] + adds r0, r7, 0 + bl SendMessage + movs r0, 0x7 + mov r1, r8 + ands r1, r0 + movs r0, 0 + mov r2, r10 + strb r1, [r2] + str r0, [sp] + add r0, sp, 0x8 + str r0, [sp, 0x4] + adds r0, r7, 0 + movs r1, 0 + movs r2, 0 + movs r3, 0x1 + bl sub_8055FA0 + ldr r2, _08073608 + adds r1, r6, r2 + ldrb r0, [r1] + mov r2, r9 + orrs r0, r2 + strb r0, [r1] +_080735DA: + movs r0, 0xB2 + lsls r0, 1 + adds r1, r6, r0 + ldrb r0, [r1] +_080735E2: + orrs r0, r2 + strb r0, [r1] +_080735E6: + ldr r4, [sp, 0x10] + cmp r4, 0x13 + bgt _080735EE + b _0807349E +_080735EE: + add sp, 0x18 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08073600: .4byte gAvailablePokemonNames +_08073604: .4byte gUnknown_80FCF50 +_08073608: .4byte 0x00000165 + thumb_func_end sub_807348C + + .align 2, 0 diff --git a/asm/code_807AEBC.s b/asm/code_807AEBC.s deleted file mode 100644 index e5cb86f34..000000000 --- a/asm/code_807AEBC.s +++ /dev/null @@ -1,871 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start ChooseTargetPosition -ChooseTargetPosition: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - mov r8, r0 - ldr r7, [r0, 0x70] - bl TargetLeader - lsls r0, 24 - cmp r0, 0 - beq _0807AF74 - b _0807B12C -_0807AF74: - ldr r0, _0807AF8C - ldr r1, [r0] - ldr r2, _0807AF90 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0807AF98 - ldr r3, _0807AF94 - adds r6, r1, r3 - movs r4, 0x14 - mov r10, r4 - b _0807AFB4 - .align 2, 0 -_0807AF8C: .4byte gDungeonGlobalData -_0807AF90: .4byte 0x000037fc -_0807AF94: .4byte 0x000135cc -_0807AF98: - ldrb r0, [r7, 0x6] - cmp r0, 0 - beq _0807AFAC - ldr r0, _0807AFA8 - adds r6, r1, r0 - movs r1, 0x4 - mov r10, r1 - b _0807AFB4 - .align 2, 0 -_0807AFA8: .4byte 0x0001357c -_0807AFAC: - ldr r2, _0807B01C - adds r6, r1, r2 - movs r3, 0x10 - mov r10, r3 -_0807AFB4: - mov r0, r8 - bl CanCrossWalls - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r4, 0x1 - negs r4, r4 - str r4, [sp] - ldr r0, _0807B020 - mov r9, r0 - movs r5, 0 - adds r1, r7, 0 - adds r1, 0x78 - str r1, [sp, 0x8] - cmp r5, r10 - bge _0807B09E -_0807AFD6: - lsls r0, r5, 2 - adds r0, r6 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807B098 - ldr r0, [r4, 0x70] - adds r1, r0, 0 - adds r1, 0xA4 - ldrb r1, [r1] - adds r2, r0, 0 - cmp r1, 0 - bne _0807B098 - ldr r0, _0807B024 - ldr r0, [r0] - ldr r3, _0807B028 - adds r0, r3 - ldrb r0, [r0] - cmp r0, 0 - beq _0807B02C - mov r0, r8 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x1 - bl CanTarget - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0807B098 - ldr r2, [r4, 0x70] - b _0807B03C - .align 2, 0 -_0807B01C: .4byte 0x0001358c -_0807B020: .4byte 0x000003e7 -_0807B024: .4byte gDungeonGlobalData -_0807B028: .4byte 0x000037fc -_0807B02C: - ldrb r0, [r7, 0x6] - cmp r0, 0 - bne _0807B03C - adds r0, r2, 0 - adds r0, 0xB0 - ldrb r0, [r0] - cmp r0, 0x6 - beq _0807B098 -_0807B03C: - ldrb r0, [r2, 0x8] - cmp r0, 0x1 - beq _0807B098 - ldr r0, [sp, 0x4] - cmp r0, 0 - beq _0807B074 - mov r2, r8 - movs r3, 0x4 - ldrsh r1, [r2, r3] - movs r2, 0x4 - ldrsh r0, [r4, r2] - subs r1, r0 - cmp r1, 0 - bge _0807B05A - negs r1, r1 -_0807B05A: - cmp r1, 0x5 - bgt _0807B074 - mov r3, r8 - movs r0, 0x6 - ldrsh r1, [r3, r0] - movs r2, 0x6 - ldrsh r0, [r4, r2] - subs r1, r0 - cmp r1, 0 - bge _0807B070 - negs r1, r1 -_0807B070: - cmp r1, 0x5 - ble _0807B082 -_0807B074: - mov r0, r8 - adds r1, r4, 0 - bl CanSee_2 - lsls r0, 24 - cmp r0, 0 - beq _0807B098 -_0807B082: - adds r1, r4, 0x4 - mov r0, r8 - adds r0, 0x4 - bl GetDistance - cmp r9, r0 - ble _0807B098 - mov r9, r0 - str r5, [sp] - cmp r0, 0x1 - ble _0807B09E -_0807B098: - adds r5, 0x1 - cmp r5, r10 - blt _0807AFD6 -_0807B09E: - ldr r3, [sp] - cmp r3, 0 - blt _0807B12C - movs r2, 0 - movs r5, 0x1 - ldr r4, [sp, 0x8] - strb r5, [r4] - adds r1, r7, 0 - adds r1, 0x88 - lsls r0, r3, 2 - adds r4, r0, r6 - ldr r0, [r4] - ldr r0, [r0, 0x4] - str r0, [r1] - subs r1, 0x8 - ldr r0, [r4] - str r0, [r1] - ldrh r1, [r0, 0x26] - adds r0, r7, 0 - adds r0, 0x7C - strh r1, [r0] - subs r0, 0x2 - strb r5, [r0] - movs r1, 0x8A - lsls r1, 1 - adds r0, r7, r1 - str r2, [r0] - mov r0, r8 - movs r1, 0x8 - bl HasTactic - lsls r0, 24 - cmp r0, 0 - bne _0807B0E4 - b _0807B2C6 -_0807B0E4: - mov r0, r8 - bl CanSeeTeammate - lsls r0, 24 - cmp r0, 0 - beq _0807B0F2 - b _0807B2C6 -_0807B0F2: - mov r2, r8 - movs r3, 0x4 - ldrsh r1, [r2, r3] - ldr r2, [r4] - movs r4, 0x4 - ldrsh r0, [r2, r4] - subs r1, r0 - cmp r1, 0 - bge _0807B106 - negs r1, r1 -_0807B106: - cmp r1, 0x1 - ble _0807B10C - b _0807B2C6 -_0807B10C: - mov r0, r8 - movs r3, 0x6 - ldrsh r1, [r0, r3] - movs r4, 0x6 - ldrsh r0, [r2, r4] - subs r0, r1, r0 - cmp r0, 0 - bge _0807B11E - negs r0, r0 -_0807B11E: - cmp r0, 0x1 - ble _0807B124 - b _0807B2C6 -_0807B124: - adds r0, r7, 0 - adds r0, 0x7B - strb r5, [r0] - b _0807B2C6 -_0807B12C: - mov r0, r8 - movs r1, 0x1 - bl HasTactic - lsls r0, 24 - cmp r0, 0 - bne _0807B17C - ldrb r5, [r7, 0x6] - adds r0, r7, 0 - adds r0, 0x78 - str r0, [sp, 0x8] - cmp r5, 0 - bne _0807B222 - mov r0, r8 - bl GetLeaderEntityIfVisible - adds r4, r0, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807B222 - movs r0, 0x1 - ldr r1, [sp, 0x8] - strb r0, [r1] - adds r1, r7, 0 - adds r1, 0x88 - ldr r0, [r4, 0x4] - str r0, [r1] - adds r0, r7, 0 - adds r0, 0x80 - str r4, [r0] - ldrh r1, [r4, 0x26] - subs r0, 0x4 - strh r1, [r0] - movs r2, 0x8A - lsls r2, 1 - adds r0, r7, r2 - str r5, [r0] - b _0807B2C6 -_0807B17C: - ldrb r0, [r7, 0x7] - adds r3, r7, 0 - adds r3, 0x78 - str r3, [sp, 0x8] - cmp r0, 0 - beq _0807B222 - ldr r4, _0807B1BC - ldr r0, [r4] - ldr r1, _0807B1C0 - adds r0, r1 - ldrb r0, [r0] - mov r2, r8 - movs r3, 0x4 - ldrsh r0, [r2, r3] - movs r3, 0x6 - ldrsh r1, [r2, r3] - bl GetMapTile_1 - ldrb r1, [r0, 0x9] - cmp r1, 0xFF - bne _0807B1C4 - mov r4, r8 - movs r0, 0x4 - ldrsh r1, [r4, r0] - subs r2, r1, 0x2 - mov r10, r2 - movs r3, 0x6 - ldrsh r0, [r4, r3] - subs r2, r0, 0x2 - adds r6, r1, 0x2 - adds r0, 0x2 - b _0807B1EC - .align 2, 0 -_0807B1BC: .4byte gDungeonGlobalData -_0807B1C0: .4byte 0x00018209 -_0807B1C4: - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _0807B26C - adds r0, r1 - ldr r1, [r4] - adds r1, r0 - movs r2, 0x2 - ldrsh r0, [r1, r2] - subs r0, 0x1 - mov r10, r0 - movs r3, 0x4 - ldrsh r0, [r1, r3] - subs r2, r0, 0x1 - movs r4, 0x6 - ldrsh r0, [r1, r4] - adds r6, r0, 0x1 - movs r3, 0x8 - ldrsh r0, [r1, r3] - adds r0, 0x1 -_0807B1EC: - mov r9, r0 - adds r5, r2, 0 - adds r4, r7, 0 - adds r4, 0x78 - str r4, [sp, 0x8] - cmp r5, r9 - bgt _0807B222 -_0807B1FA: - mov r4, r10 - cmp r4, r6 - bgt _0807B21C -_0807B200: - adds r0, r4, 0 - adds r1, r5, 0 - bl GetMapTile_2 - ldr r0, [r0, 0x14] - cmp r0, 0 - beq _0807B216 - bl GetEntityType - cmp r0, 0x3 - beq _0807B270 -_0807B216: - adds r4, 0x1 - cmp r4, r6 - ble _0807B200 -_0807B21C: - adds r5, 0x1 - cmp r5, r9 - ble _0807B1FA -_0807B222: - ldr r1, [sp, 0x8] - ldrb r0, [r1] - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0807B2C0 - adds r3, r7, 0 - adds r3, 0x80 - ldr r1, [r3] - cmp r1, 0 - beq _0807B2C0 - adds r2, r7, 0 - adds r2, 0x7C - ldrh r0, [r1, 0x26] - ldrh r4, [r2] - cmp r0, r4 - bne _0807B2B4 - ldr r1, [r1, 0x70] - mov r9, r1 - movs r5, 0 - mov r4, r9 - adds r4, 0x68 -_0807B250: - lsls r6, r5, 2 - mov r0, r8 - adds r1, r4, 0 - bl InSameRoom - lsls r0, 24 - cmp r0, 0 - bne _0807B294 - adds r4, 0x4 - adds r5, 0x1 - cmp r5, 0x3 - ble _0807B250 - b _0807B2C0 - .align 2, 0 -_0807B26C: .4byte 0x000104c4 -_0807B270: - movs r1, 0 - movs r0, 0x7 - ldr r2, [sp, 0x8] - strb r0, [r2] - adds r0, r7, 0 - adds r0, 0x88 - strh r4, [r0] - adds r0, 0x2 - strh r5, [r0] - subs r0, 0xA - str r1, [r0] - subs r0, 0x4 - strh r1, [r0] - movs r3, 0x8A - lsls r3, 1 - adds r0, r7, r3 - str r1, [r0] - b _0807B2C6 -_0807B294: - movs r2, 0 - movs r0, 0x2 - ldr r4, [sp, 0x8] - strb r0, [r4] - adds r1, r7, 0 - adds r1, 0x88 - mov r0, r9 - adds r0, 0x68 - adds r0, r6 - ldr r0, [r0] - str r0, [r1] - movs r1, 0x8A - lsls r1, 1 - adds r0, r7, r1 - str r2, [r0] - b _0807B2C6 -_0807B2B4: - movs r1, 0 - movs r0, 0x6 - ldr r4, [sp, 0x8] - strb r0, [r4] - str r1, [r3] - strh r1, [r2] -_0807B2C0: - mov r0, r8 - bl Wander -_0807B2C6: - movs r0, 0x1 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end ChooseTargetPosition - - thumb_func_start DecideMovement -DecideMovement: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x3C - mov r9, r0 - lsls r1, 24 - lsrs r7, r1, 24 - ldr r5, [r0, 0x70] - movs r0, 0xB6 - lsls r0, 1 - adds r1, r5, r0 - adds r4, r5, 0 - adds r4, 0x88 - ldr r0, [r4] - str r0, [r1] - mov r2, r9 - ldr r1, [r2, 0x4] - ldr r0, [r4] - cmp r1, r0 - beq _0807B348 - mov r6, r9 - adds r6, 0x4 - adds r0, r6, 0 - adds r1, r4, 0 - bl CalculateFacingDir - mov r8, r0 - adds r0, r5, 0 - adds r0, 0x7A - ldrb r1, [r0] - mov r0, r9 - bl ShouldAvoidFirstHit - lsls r0, 24 - cmp r0, 0 - beq _0807B366 - adds r0, r5, 0 - adds r0, 0x78 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0807B37C - adds r0, r6, 0 - adds r1, r4, 0 - bl IsTargetTwoTilesAway - lsls r0, 24 - cmp r0, 0 - beq _0807B37C - adds r0, r6, 0 - adds r1, r4, 0 - bl GetDistance - cmp r0, 0x2 - bne _0807B354 -_0807B348: - adds r0, r5, 0 - adds r0, 0x44 - movs r1, 0x1 - bl SetAction - b _0807B5CE -_0807B354: - cmp r0, 0x1 - bgt _0807B37C - movs r3, 0x4 - add r8, r3 - movs r0, 0x7 - mov r1, r8 - ands r1, r0 - mov r8, r1 - b _0807B37C -_0807B366: - adds r0, r5, 0 - adds r0, 0x7B - ldrb r0, [r0] - cmp r0, 0 - beq _0807B37C - movs r2, 0x4 - add r8, r2 - movs r0, 0x7 - mov r3, r8 - ands r3, r0 - mov r8, r3 -_0807B37C: - add r4, sp, 0x30 - mov r0, r9 - mov r1, r8 - adds r2, r4, 0 - bl CanMoveForward - lsls r0, 24 - cmp r0, 0 - beq _0807B3A8 - adds r0, r5, 0 - adds r0, 0x44 - movs r2, 0x2 - ldrsh r1, [r5, r2] - bl SetWalkAction - movs r0, 0x7 - mov r3, r8 - ands r3, r0 - adds r0, r5, 0 - adds r0, 0x46 - strb r3, [r0] - b _0807B5CE -_0807B3A8: - ldrb r0, [r4] - cmp r0, 0 - beq _0807B444 - ldrb r0, [r5, 0x6] - cmp r0, 0 - bne _0807B3E8 - ldr r1, _0807B3E0 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0807B3E8 - adds r0, r5, 0 - adds r0, 0x79 - movs r4, 0x1 - strb r4, [r0] - movs r2, 0xA2 - lsls r2, 1 - adds r0, r5, r2 - strb r4, [r0] - adds r0, r5, 0 - adds r0, 0x44 - movs r1, 0x1 - bl SetAction - ldr r3, _0807B3E4 - adds r0, r5, r3 - strb r4, [r0] - b _0807B5CE - .align 2, 0 -_0807B3E0: .4byte 0x00000145 -_0807B3E4: .4byte 0x00000147 -_0807B3E8: - mov r0, r9 - movs r2, 0x4 - ldrsh r1, [r0, r2] - ldr r2, _0807B434 - mov r3, r8 - lsls r0, r3, 2 - adds r2, r0, r2 - movs r3, 0 - ldrsh r0, [r2, r3] - adds r1, r0 - adds r0, r5, 0 - adds r0, 0x88 - movs r3, 0 - ldrsh r0, [r0, r3] - cmp r1, r0 - bne _0807B43C - mov r1, r9 - movs r3, 0x6 - ldrsh r0, [r1, r3] - movs r3, 0x2 - ldrsh r1, [r2, r3] - adds r0, r1 - adds r1, r5, 0 - adds r1, 0x8A - movs r2, 0 - ldrsh r1, [r1, r2] - cmp r0, r1 - bne _0807B43C - adds r0, r5, 0 - adds r0, 0x44 - movs r1, 0x1 - bl SetAction - ldr r3, _0807B438 - adds r1, r5, r3 - movs r0, 0x1 - strb r0, [r1] - b _0807B5CE - .align 2, 0 -_0807B434: .4byte gAdjacentTileOffsets -_0807B438: .4byte 0x00000147 -_0807B43C: - adds r1, r5, 0 - adds r1, 0x79 - movs r0, 0x1 - strb r0, [r1] -_0807B444: - mov r3, sp - mov r2, sp - mov r1, sp - add r0, sp, 0x28 - movs r4, 0x1 - strb r4, [r0] - add r0, sp, 0x20 - strb r4, [r0] - strb r4, [r1, 0x18] - strb r4, [r2, 0x10] - strb r4, [r3, 0x8] - ldrb r6, [r5, 0x6] - cmp r6, 0 - bne _0807B4C8 - mov r0, r8 - ands r0, r4 - cmp r0, 0 - beq _0807B4C8 - mov r1, r9 - movs r2, 0x4 - ldrsh r0, [r1, r2] - adds r1, r5, 0 - adds r1, 0x88 - movs r3, 0 - ldrsh r1, [r1, r3] - subs r2, r0, r1 - cmp r2, 0 - bge _0807B47E - negs r2, r2 -_0807B47E: - mov r0, r9 - movs r3, 0x6 - ldrsh r1, [r0, r3] - adds r0, r5, 0 - adds r0, 0x8A - movs r3, 0 - ldrsh r0, [r0, r3] - subs r1, r0 - cmp r1, 0 - bge _0807B494 - negs r1, r1 -_0807B494: - cmp r2, 0x2 - bgt _0807B4C8 - cmp r1, 0x2 - bgt _0807B4C8 - cmp r2, r1 - beq _0807B4C8 - movs r3, 0x2 - mov r0, r8 - ands r3, r0 - cmp r3, 0 - beq _0807B4BA - cmp r2, r1 - bge _0807B4B4 - mov r0, sp - strb r6, [r0, 0x10] - b _0807B4C8 -_0807B4B4: - mov r0, sp - strb r6, [r0, 0x8] - b _0807B4C8 -_0807B4BA: - cmp r2, r1 - bge _0807B4C4 - mov r0, sp - strb r3, [r0, 0x8] - b _0807B4C8 -_0807B4C4: - mov r0, sp - strb r3, [r0, 0x10] -_0807B4C8: - movs r1, 0x3 - mov r10, r1 - mov r0, r9 - adds r1, r7, 0 - bl ShouldAvoidEnemiesAndShowEffect - lsls r0, 24 - cmp r0, 0 - bne _0807B4E4 - adds r0, r5, 0 - adds r0, 0x7B - ldrb r0, [r0] - cmp r0, 0 - beq _0807B4E8 -_0807B4E4: - movs r2, 0x5 - mov r10, r2 -_0807B4E8: - movs r6, 0x1 - adds r3, r5, 0 - adds r3, 0x44 - str r3, [sp, 0x34] - cmp r6, r10 - bge _0807B53C - mov r3, sp - mov r4, sp - adds r4, 0xA - add r7, sp, 0x8 -_0807B4FC: - lsls r0, r6, 3 - add r2, sp, 0x4 - adds r2, r0 - ldr r1, _0807B598 - lsls r0, r6, 2 - adds r0, r1 - ldr r1, [r0] - add r1, r8 - movs r0, 0x7 - ands r1, r0 - str r1, [r2] - mov r0, r9 - adds r2, r4, 0 - str r3, [sp, 0x38] - bl CanMoveForward - strb r0, [r7, 0x1] - lsls r0, 24 - ldr r3, [sp, 0x38] - cmp r0, 0 - bne _0807B532 - ldrb r0, [r4] - cmp r0, 0 - bne _0807B532 - movs r0, 0x1 - strb r0, [r3, 0x10] - strb r0, [r3, 0x8] -_0807B532: - adds r4, 0x8 - adds r7, 0x8 - adds r6, 0x1 - cmp r6, r10 - blt _0807B4FC -_0807B53C: - movs r6, 0x1 - cmp r6, r10 - bge _0807B56E - adds r3, r5, 0 - adds r3, 0x79 - add r1, sp, 0x8 - movs r4, 0x8 - movs r7, 0x1 -_0807B54C: - adds r2, r4, 0 - ldrb r0, [r1, 0x1] - cmp r0, 0 - beq _0807B55A - ldrb r0, [r1] - cmp r0, 0 - bne _0807B5A0 -_0807B55A: - ldrb r0, [r1, 0x2] - cmp r0, 0 - beq _0807B562 - strb r7, [r3] -_0807B562: - adds r1, 0x8 - adds r4, r2, 0 - adds r4, 0x8 - adds r6, 0x1 - cmp r6, r10 - blt _0807B54C -_0807B56E: - ldr r0, [sp, 0x34] - movs r1, 0x1 - bl SetAction - ldr r1, _0807B59C - adds r0, r5, r1 - movs r1, 0 - movs r2, 0x1 - strb r2, [r0] - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _0807B5BC - adds r0, r5, 0 - adds r0, 0x79 - strb r1, [r0] - movs r2, 0xA2 - lsls r2, 1 - adds r0, r5, r2 - strb r1, [r0] - b _0807B5CE - .align 2, 0 -_0807B598: .4byte gFaceDirectionIncrements -_0807B59C: .4byte 0x00000147 -_0807B5A0: - movs r3, 0x2 - ldrsh r1, [r5, r3] - ldr r0, [sp, 0x34] - bl SetWalkAction - add r0, sp, 0x4 - adds r0, r4 - ldr r0, [r0] - movs r1, 0x7 - ands r0, r1 - adds r1, r5, 0 - adds r1, 0x46 - strb r0, [r1] - b _0807B5CE -_0807B5BC: - adds r0, r5, 0 - adds r0, 0x79 - ldrb r0, [r0] - cmp r0, 0 - beq _0807B5CE - movs r1, 0xA2 - lsls r1, 1 - adds r0, r5, r1 - strb r2, [r0] -_0807B5CE: - add sp, 0x3C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end DecideMovement - - .align 2, 0 diff --git a/asm/code_807B2D8.s b/asm/code_807B2D8.s new file mode 100644 index 000000000..786e0e9e8 --- /dev/null +++ b/asm/code_807B2D8.s @@ -0,0 +1,408 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start DecideMovement +DecideMovement: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x3C + mov r9, r0 + lsls r1, 24 + lsrs r7, r1, 24 + ldr r5, [r0, 0x70] + movs r0, 0xB6 + lsls r0, 1 + adds r1, r5, r0 + adds r4, r5, 0 + adds r4, 0x88 + ldr r0, [r4] + str r0, [r1] + mov r2, r9 + ldr r1, [r2, 0x4] + ldr r0, [r4] + cmp r1, r0 + beq _0807B348 + mov r6, r9 + adds r6, 0x4 + adds r0, r6, 0 + adds r1, r4, 0 + bl CalculateFacingDir + mov r8, r0 + adds r0, r5, 0 + adds r0, 0x7A + ldrb r1, [r0] + mov r0, r9 + bl ShouldAvoidFirstHit + lsls r0, 24 + cmp r0, 0 + beq _0807B366 + adds r0, r5, 0 + adds r0, 0x78 + ldrb r0, [r0] + cmp r0, 0x1 + bne _0807B37C + adds r0, r6, 0 + adds r1, r4, 0 + bl IsTargetTwoTilesAway + lsls r0, 24 + cmp r0, 0 + beq _0807B37C + adds r0, r6, 0 + adds r1, r4, 0 + bl GetDistance + cmp r0, 0x2 + bne _0807B354 +_0807B348: + adds r0, r5, 0 + adds r0, 0x44 + movs r1, 0x1 + bl SetAction + b _0807B5CE +_0807B354: + cmp r0, 0x1 + bgt _0807B37C + movs r3, 0x4 + add r8, r3 + movs r0, 0x7 + mov r1, r8 + ands r1, r0 + mov r8, r1 + b _0807B37C +_0807B366: + adds r0, r5, 0 + adds r0, 0x7B + ldrb r0, [r0] + cmp r0, 0 + beq _0807B37C + movs r2, 0x4 + add r8, r2 + movs r0, 0x7 + mov r3, r8 + ands r3, r0 + mov r8, r3 +_0807B37C: + add r4, sp, 0x30 + mov r0, r9 + mov r1, r8 + adds r2, r4, 0 + bl CanMoveForward + lsls r0, 24 + cmp r0, 0 + beq _0807B3A8 + adds r0, r5, 0 + adds r0, 0x44 + movs r2, 0x2 + ldrsh r1, [r5, r2] + bl SetWalkAction + movs r0, 0x7 + mov r3, r8 + ands r3, r0 + adds r0, r5, 0 + adds r0, 0x46 + strb r3, [r0] + b _0807B5CE +_0807B3A8: + ldrb r0, [r4] + cmp r0, 0 + beq _0807B444 + ldrb r0, [r5, 0x6] + cmp r0, 0 + bne _0807B3E8 + ldr r1, _0807B3E0 + adds r0, r5, r1 + ldrb r0, [r0] + cmp r0, 0 + bne _0807B3E8 + adds r0, r5, 0 + adds r0, 0x79 + movs r4, 0x1 + strb r4, [r0] + movs r2, 0xA2 + lsls r2, 1 + adds r0, r5, r2 + strb r4, [r0] + adds r0, r5, 0 + adds r0, 0x44 + movs r1, 0x1 + bl SetAction + ldr r3, _0807B3E4 + adds r0, r5, r3 + strb r4, [r0] + b _0807B5CE + .align 2, 0 +_0807B3E0: .4byte 0x00000145 +_0807B3E4: .4byte 0x00000147 +_0807B3E8: + mov r0, r9 + movs r2, 0x4 + ldrsh r1, [r0, r2] + ldr r2, _0807B434 + mov r3, r8 + lsls r0, r3, 2 + adds r2, r0, r2 + movs r3, 0 + ldrsh r0, [r2, r3] + adds r1, r0 + adds r0, r5, 0 + adds r0, 0x88 + movs r3, 0 + ldrsh r0, [r0, r3] + cmp r1, r0 + bne _0807B43C + mov r1, r9 + movs r3, 0x6 + ldrsh r0, [r1, r3] + movs r3, 0x2 + ldrsh r1, [r2, r3] + adds r0, r1 + adds r1, r5, 0 + adds r1, 0x8A + movs r2, 0 + ldrsh r1, [r1, r2] + cmp r0, r1 + bne _0807B43C + adds r0, r5, 0 + adds r0, 0x44 + movs r1, 0x1 + bl SetAction + ldr r3, _0807B438 + adds r1, r5, r3 + movs r0, 0x1 + strb r0, [r1] + b _0807B5CE + .align 2, 0 +_0807B434: .4byte gAdjacentTileOffsets +_0807B438: .4byte 0x00000147 +_0807B43C: + adds r1, r5, 0 + adds r1, 0x79 + movs r0, 0x1 + strb r0, [r1] +_0807B444: + mov r3, sp + mov r2, sp + mov r1, sp + add r0, sp, 0x28 + movs r4, 0x1 + strb r4, [r0] + add r0, sp, 0x20 + strb r4, [r0] + strb r4, [r1, 0x18] + strb r4, [r2, 0x10] + strb r4, [r3, 0x8] + ldrb r6, [r5, 0x6] + cmp r6, 0 + bne _0807B4C8 + mov r0, r8 + ands r0, r4 + cmp r0, 0 + beq _0807B4C8 + mov r1, r9 + movs r2, 0x4 + ldrsh r0, [r1, r2] + adds r1, r5, 0 + adds r1, 0x88 + movs r3, 0 + ldrsh r1, [r1, r3] + subs r2, r0, r1 + cmp r2, 0 + bge _0807B47E + negs r2, r2 +_0807B47E: + mov r0, r9 + movs r3, 0x6 + ldrsh r1, [r0, r3] + adds r0, r5, 0 + adds r0, 0x8A + movs r3, 0 + ldrsh r0, [r0, r3] + subs r1, r0 + cmp r1, 0 + bge _0807B494 + negs r1, r1 +_0807B494: + cmp r2, 0x2 + bgt _0807B4C8 + cmp r1, 0x2 + bgt _0807B4C8 + cmp r2, r1 + beq _0807B4C8 + movs r3, 0x2 + mov r0, r8 + ands r3, r0 + cmp r3, 0 + beq _0807B4BA + cmp r2, r1 + bge _0807B4B4 + mov r0, sp + strb r6, [r0, 0x10] + b _0807B4C8 +_0807B4B4: + mov r0, sp + strb r6, [r0, 0x8] + b _0807B4C8 +_0807B4BA: + cmp r2, r1 + bge _0807B4C4 + mov r0, sp + strb r3, [r0, 0x8] + b _0807B4C8 +_0807B4C4: + mov r0, sp + strb r3, [r0, 0x10] +_0807B4C8: + movs r1, 0x3 + mov r10, r1 + mov r0, r9 + adds r1, r7, 0 + bl ShouldAvoidEnemiesAndShowEffect + lsls r0, 24 + cmp r0, 0 + bne _0807B4E4 + adds r0, r5, 0 + adds r0, 0x7B + ldrb r0, [r0] + cmp r0, 0 + beq _0807B4E8 +_0807B4E4: + movs r2, 0x5 + mov r10, r2 +_0807B4E8: + movs r6, 0x1 + adds r3, r5, 0 + adds r3, 0x44 + str r3, [sp, 0x34] + cmp r6, r10 + bge _0807B53C + mov r3, sp + mov r4, sp + adds r4, 0xA + add r7, sp, 0x8 +_0807B4FC: + lsls r0, r6, 3 + add r2, sp, 0x4 + adds r2, r0 + ldr r1, _0807B598 + lsls r0, r6, 2 + adds r0, r1 + ldr r1, [r0] + add r1, r8 + movs r0, 0x7 + ands r1, r0 + str r1, [r2] + mov r0, r9 + adds r2, r4, 0 + str r3, [sp, 0x38] + bl CanMoveForward + strb r0, [r7, 0x1] + lsls r0, 24 + ldr r3, [sp, 0x38] + cmp r0, 0 + bne _0807B532 + ldrb r0, [r4] + cmp r0, 0 + bne _0807B532 + movs r0, 0x1 + strb r0, [r3, 0x10] + strb r0, [r3, 0x8] +_0807B532: + adds r4, 0x8 + adds r7, 0x8 + adds r6, 0x1 + cmp r6, r10 + blt _0807B4FC +_0807B53C: + movs r6, 0x1 + cmp r6, r10 + bge _0807B56E + adds r3, r5, 0 + adds r3, 0x79 + add r1, sp, 0x8 + movs r4, 0x8 + movs r7, 0x1 +_0807B54C: + adds r2, r4, 0 + ldrb r0, [r1, 0x1] + cmp r0, 0 + beq _0807B55A + ldrb r0, [r1] + cmp r0, 0 + bne _0807B5A0 +_0807B55A: + ldrb r0, [r1, 0x2] + cmp r0, 0 + beq _0807B562 + strb r7, [r3] +_0807B562: + adds r1, 0x8 + adds r4, r2, 0 + adds r4, 0x8 + adds r6, 0x1 + cmp r6, r10 + blt _0807B54C +_0807B56E: + ldr r0, [sp, 0x34] + movs r1, 0x1 + bl SetAction + ldr r1, _0807B59C + adds r0, r5, r1 + movs r1, 0 + movs r2, 0x1 + strb r2, [r0] + ldrb r0, [r5, 0x7] + cmp r0, 0 + beq _0807B5BC + adds r0, r5, 0 + adds r0, 0x79 + strb r1, [r0] + movs r2, 0xA2 + lsls r2, 1 + adds r0, r5, r2 + strb r1, [r0] + b _0807B5CE + .align 2, 0 +_0807B598: .4byte gFaceDirectionIncrements +_0807B59C: .4byte 0x00000147 +_0807B5A0: + movs r3, 0x2 + ldrsh r1, [r5, r3] + ldr r0, [sp, 0x34] + bl SetWalkAction + add r0, sp, 0x4 + adds r0, r4 + ldr r0, [r0] + movs r1, 0x7 + ands r0, r1 + adds r1, r5, 0 + adds r1, 0x46 + strb r0, [r1] + b _0807B5CE +_0807B5BC: + adds r0, r5, 0 + adds r0, 0x79 + ldrb r0, [r0] + cmp r0, 0 + beq _0807B5CE + movs r1, 0xA2 + lsls r1, 1 + adds r0, r5, r1 + strb r2, [r0] +_0807B5CE: + add sp, 0x3C + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end DecideMovement + + .align 2, 0 \ No newline at end of file diff --git a/asm/code_808333C.s b/asm/code_808333C.s index 7cbda48e0..809043ef0 100644 --- a/asm/code_808333C.s +++ b/asm/code_808333C.s @@ -296,1480 +296,4 @@ _080835FA: bx r1 thumb_func_end sub_8083568 - thumb_func_start GetLeaderEntity -GetLeaderEntity: - push {r4,r5,lr} - ldr r0, _08083638 - ldr r0, [r0] - cmp r0, 0 - bne _0808364A - movs r5, 0 -_0808360C: - ldr r0, _0808363C - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08083640 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0808362E - ldr r0, [r4, 0x70] - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _08083644 -_0808362E: - adds r5, 0x1 - cmp r5, 0x3 - ble _0808360C - movs r0, 0 - b _0808364A - .align 2, 0 -_08083638: .4byte gLeaderPokemon -_0808363C: .4byte gDungeonGlobalData -_08083640: .4byte 0x0001357c -_08083644: - ldr r0, _08083650 - str r4, [r0] - adds r0, r4, 0 -_0808364A: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08083650: .4byte gLeaderPokemon - thumb_func_end GetLeaderEntity - - thumb_func_start sub_8083654 -sub_8083654: - push {lr} - bl GetLeaderEntity - ldr r0, [r0, 0x70] - pop {r1} - bx r1 - thumb_func_end sub_8083654 - - thumb_func_start sub_8083660 -sub_8083660: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, _080836D4 - add sp, r4 - movs r1, 0xE0 - lsls r1, 5 - add r1, sp - str r0, [r1] - bl GetLeaderEntity - ldr r2, _080836D8 - add r2, sp - str r0, [r2] - movs r7, 0 - movs r0, 0 - ldr r1, _080836DC - add r1, sp - str r0, [r1] -_0808368A: - movs r0, 0x38 - bl DungeonRandomCapped - adds r4, r0, 0 - movs r0, 0x20 - bl DungeonRandomCapped - ldr r2, _080836E0 - add r2, sp - str r0, [r2] - ldr r0, _080836D8 - add r0, sp - ldr r0, [r0] - ldr r3, [r0, 0x4] - adds r5, r4, 0 - movs r1, 0 - ldr r4, [r2] - ldr r0, _080836E4 - cmp r7, r0 - ble _080836B4 - b _080837E6 -_080836B4: - movs r2, 0x3 - mov r10, r2 - lsls r0, r7, 2 - mov r2, sp - adds r6, r0, r2 -_080836BE: - movs r0, 0 - mov r8, r0 - adds r2, r5, 0x1 - ldr r0, _080836E8 - add r0, sp - str r2, [r0] - adds r1, 0x1 - ldr r2, _080836EC - add r2, sp - str r1, [r2] - b _0808379C - .align 2, 0 -_080836D4: .4byte 0xffffe3e4 -_080836D8: .4byte 0x00001c04 -_080836DC: .4byte 0x00001c0c -_080836E0: .4byte 0x00001c08 -_080836E4: .4byte 0x000006ff -_080836E8: .4byte 0x00001c14 -_080836EC: .4byte 0x00001c10 -_080836F0: - ldr r0, _08083738 - add r0, sp - ldr r0, [r0] - cmp r0, 0 - bne _0808373C - ldrh r1, [r2] - mov r0, r10 - ands r0, r1 - cmp r0, 0x1 - bne _08083782 - ldrb r0, [r2, 0x9] - cmp r0, 0xFF - beq _08083782 - ldr r0, [r2, 0x14] - cmp r0, 0 - bne _08083782 - ldr r0, [r2, 0x10] - cmp r0, 0 - bne _08083782 - lsls r0, r3, 16 - asrs r0, 16 - subs r0, r5 - cmp r0, 0 - bge _08083722 - negs r0, r0 -_08083722: - cmp r0, 0x5 - bgt _08083788 - asrs r0, r3, 16 - subs r0, r4 - cmp r0, 0 - bge _08083730 - negs r0, r0 -_08083730: - cmp r0, 0x5 - ble _08083782 - b _08083788 - .align 2, 0 -_08083738: .4byte 0x00001c0c -_0808373C: - ldr r1, _08083764 - add r1, sp - ldr r1, [r1] - cmp r1, 0x1 - bne _08083768 - ldrh r1, [r2] - mov r0, r10 - ands r0, r1 - cmp r0, 0x1 - bne _08083782 - ldrb r0, [r2, 0x9] - cmp r0, 0xFF - beq _08083782 - ldr r0, [r2, 0x14] - cmp r0, 0 - bne _08083782 - ldr r0, [r2, 0x10] - cmp r0, 0 - bne _08083782 - b _08083788 - .align 2, 0 -_08083764: .4byte 0x00001c0c -_08083768: - ldrh r1, [r2] - mov r0, r10 - ands r0, r1 - cmp r0, 0x1 - bne _08083782 - ldr r0, [r2, 0x14] - cmp r0, 0 - bne _08083782 - ldr r0, [r2, 0x10] - cmp r0, 0 - bne _08083782 - movs r2, 0x1 - mov r9, r2 -_08083782: - mov r0, r9 - cmp r0, 0 - beq _08083790 -_08083788: - strb r5, [r6] - strb r4, [r6, 0x1] - adds r6, 0x4 - adds r7, 0x1 -_08083790: - adds r4, 0x1 - cmp r4, 0x1F - ble _08083798 - movs r4, 0 -_08083798: - movs r1, 0x1 - add r8, r1 -_0808379C: - mov r2, r8 - cmp r2, 0x1F - bgt _080837C2 - movs r0, 0 - mov r9, r0 - adds r0, r5, 0 - adds r1, r4, 0 - ldr r2, _0808380C - add r2, sp - str r3, [r2] - bl GetMapTile_1 - adds r2, r0, 0 - ldr r0, _08083810 - ldr r1, _0808380C - add r1, sp - ldr r3, [r1] - cmp r7, r0 - ble _080836F0 -_080837C2: - ldr r2, _08083814 - add r2, sp - ldr r5, [r2] - cmp r5, 0x37 - ble _080837CE - movs r5, 0 -_080837CE: - ldr r0, _08083818 - add r0, sp - ldr r1, [r0] - cmp r1, 0x37 - bgt _080837E6 - ldr r2, _0808381C - add r2, sp - ldr r4, [r2] - ldr r0, _08083810 - cmp r7, r0 - bgt _080837E6 - b _080836BE -_080837E6: - cmp r7, 0 - beq _08083820 - adds r0, r7, 0 - bl DungeonRandomCapped - lsls r0, 2 - mov r2, sp - adds r1, r2, r0 - ldrb r0, [r1] - movs r2, 0xE0 - lsls r2, 5 - add r2, sp - ldr r2, [r2] - strh r0, [r2] - ldrb r0, [r1, 0x1] - strh r0, [r2, 0x2] - movs r0, 0x1 - b _08083832 - .align 2, 0 -_0808380C: .4byte 0x00001c18 -_08083810: .4byte 0x000006ff -_08083814: .4byte 0x00001c14 -_08083818: .4byte 0x00001c10 -_0808381C: .4byte 0x00001c08 -_08083820: - ldr r0, _08083844 - add r0, sp - ldr r2, [r0] - adds r2, 0x1 - str r2, [r0] - cmp r2, 0x2 - bgt _08083830 - b _0808368A -_08083830: - movs r0, 0 -_08083832: - ldr r3, _08083848 - add sp, r3 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08083844: .4byte 0x00001c0c -_08083848: .4byte 0x00001c1c - thumb_func_end sub_8083660 - - thumb_func_start sub_808384C -sub_808384C: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r3, r0, 0 - mov r9, r1 - movs r0, 0 - mov r8, r0 - ldr r0, _080838BC - movs r2, 0 - ldrsh r1, [r0, r2] - cmp r1, 0x63 - beq _080838D8 - movs r6, 0 -_0808386A: - adds r2, r6, r0 - movs r4, 0 - ldrsh r1, [r2, r4] - mov r5, r9 - movs r7, 0 - ldrsh r0, [r5, r7] - adds r5, r1, r0 - movs r0, 0x2 - ldrsh r1, [r2, r0] - mov r2, r9 - movs r4, 0x2 - ldrsh r0, [r2, r4] - adds r4, r1, r0 - adds r0, r5, 0 - adds r1, r4, 0 - str r3, [sp] - bl GetMapTile_1 - adds r1, r0, 0 - ldrh r2, [r1] - movs r7, 0x80 - lsls r7, 4 - adds r0, r7, 0 - ands r0, r2 - ldr r3, [sp] - cmp r0, 0 - bne _080838C0 - movs r0, 0x3 - ands r0, r2 - cmp r0, 0x1 - bne _080838C0 - ldr r0, [r1, 0x14] - cmp r0, 0 - bne _080838C0 - ldr r0, [r1, 0x10] - cmp r0, 0 - bne _080838C0 - strh r5, [r3] - strh r4, [r3, 0x2] - movs r0, 0x1 - b _080838DA - .align 2, 0 -_080838BC: .4byte gUnknown_80F4468 -_080838C0: - adds r6, 0x4 - movs r0, 0x1 - add r8, r0 - mov r2, r8 - cmp r2, 0x18 - bgt _080838D8 - ldr r0, _080838E8 - adds r1, r6, r0 - movs r4, 0 - ldrsh r1, [r1, r4] - cmp r1, 0x63 - bne _0808386A -_080838D8: - movs r0, 0 -_080838DA: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080838E8: .4byte gUnknown_80F4468 - thumb_func_end sub_808384C - - thumb_func_start sub_80838EC -sub_80838EC: - push {lr} - adds r2, r0, 0 - ldrb r0, [r2] - adds r1, r0, 0 - cmp r1, 0x7F - beq _08083900 - cmp r1, 0 - beq _08083900 - subs r0, 0x1 - strb r0, [r2] -_08083900: - pop {r0} - bx r0 - thumb_func_end sub_80838EC - - thumb_func_start sub_8083904 -sub_8083904: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - str r0, [sp] - mov r10, r1 - ldr r4, [r1, 0x70] - str r4, [sp, 0x4] - adds r5, r4, 0 - adds r5, 0x46 - ldrb r6, [r5] - mov r0, r10 - movs r1, 0x1 - bl CannotMove - lsls r0, 24 - cmp r0, 0 - beq _08083954 - ldr r0, _08083950 - lsls r2, r6, 2 - adds r2, r0 - movs r0, 0 - ldrsh r1, [r2, r0] - lsls r0, r1, 1 - adds r0, r1 - mov r1, r10 - ldrh r1, [r1, 0x4] - adds r0, r1 - ldr r3, [sp] - strh r0, [r3] - movs r4, 0x2 - ldrsh r1, [r2, r4] - lsls r0, r1, 1 - adds r0, r1 - b _08083A6E - .align 2, 0 -_08083950: .4byte gAdjacentTileOffsets -_08083954: - ldr r1, [r4, 0x58] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08083960 - b _08083A8C -_08083960: - ldrb r0, [r5] - ldr r1, _080839A0 - lsls r0, 3 - adds r0, r1 - ldr r7, [r0] - movs r3, 0x4 - ldrsh r2, [r0, r3] - str r2, [sp, 0x8] - movs r2, 0x6 - ldrsh r1, [r0, r2] - str r1, [sp, 0xC] - mov r3, r10 - movs r0, 0x4 - ldrsh r3, [r3, r0] - str r3, [sp, 0x10] - mov r1, r10 - movs r2, 0x6 - ldrsh r1, [r1, r2] - str r1, [sp, 0x14] - ldr r0, _080839A4 - ldr r1, [r0] - ldr r3, _080839A8 - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0 - beq _080839B0 - ldr r4, _080839AC - adds r4, r1, r4 - str r4, [sp, 0x18] - movs r0, 0x14 - b _080839D0 - .align 2, 0 -_080839A0: .4byte gUnknown_80F4CC4 -_080839A4: .4byte gDungeonGlobalData -_080839A8: .4byte 0x000037fc -_080839AC: .4byte 0x000135cc -_080839B0: - ldrb r0, [r4, 0x6] - cmp r0, 0 - bne _080839C8 - ldr r2, _080839C4 - adds r2, r1, r2 - str r2, [sp, 0x18] - movs r3, 0x10 - str r3, [sp, 0x1C] - b _080839D2 - .align 2, 0 -_080839C4: .4byte 0x0001358c -_080839C8: - ldr r4, _08083A78 - adds r4, r1, r4 - str r4, [sp, 0x18] - movs r0, 0x4 -_080839D0: - str r0, [sp, 0x1C] -_080839D2: - movs r1, 0 - ldrsh r0, [r7, r1] - cmp r0, 0x63 - beq _08083A46 -_080839DA: - movs r2, 0 - ldrsh r0, [r7, r2] - ldr r3, [sp, 0x8] - muls r0, r3 - ldr r4, [sp, 0x10] - adds r4, r0 - mov r9, r4 - movs r1, 0x2 - ldrsh r0, [r7, r1] - ldr r2, [sp, 0xC] - muls r0, r2 - ldr r3, [sp, 0x14] - adds r3, r0 - mov r8, r3 - movs r6, 0 - ldr r4, [sp, 0x1C] - cmp r6, r4 - bge _08083A3C - ldr r5, [sp, 0x18] -_08083A00: - ldr r4, [r5] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08083A32 - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, r9 - bne _08083A32 - movs r2, 0x6 - ldrsh r0, [r4, r2] - cmp r0, r8 - bne _08083A32 - mov r0, r10 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0 - bl CanTarget - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08083A80 -_08083A32: - adds r5, 0x4 - adds r6, 0x1 - ldr r3, [sp, 0x1C] - cmp r6, r3 - blt _08083A00 -_08083A3C: - adds r7, 0x4 - movs r4, 0 - ldrsh r0, [r7, r4] - cmp r0, 0x63 - bne _080839DA -_08083A46: - ldr r2, _08083A7C - ldr r1, [sp, 0x4] - adds r1, 0x46 - ldrb r0, [r1] - lsls r0, 2 - adds r0, r2 - movs r3, 0 - ldrsh r0, [r0, r3] - lsls r0, 1 - mov r4, r10 - ldrh r4, [r4, 0x4] - adds r0, r4 - ldr r3, [sp] - strh r0, [r3] - ldrb r0, [r1] - lsls r0, 2 - adds r0, r2 - movs r4, 0x2 - ldrsh r0, [r0, r4] - lsls r0, 1 -_08083A6E: - mov r1, r10 - ldrh r1, [r1, 0x6] - adds r0, r1 - strh r0, [r3, 0x2] - b _08083A9E - .align 2, 0 -_08083A78: .4byte 0x0001357c -_08083A7C: .4byte gAdjacentTileOffsets -_08083A80: - mov r3, r9 - ldr r2, [sp] - strh r3, [r2] - mov r4, r8 - strh r4, [r2, 0x2] - b _08083A9E -_08083A8C: - ldr r0, [sp, 0x4] - adds r0, 0x58 - ldrh r0, [r0] - ldr r1, [sp] - strh r0, [r1] - ldr r0, [sp, 0x4] - adds r0, 0x5A - ldrh r0, [r0] - strh r0, [r1, 0x2] -_08083A9E: - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8083904 - - thumb_func_start sub_8083AB0 -sub_8083AB0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r5, r1, 0 - adds r7, r2, 0 - lsls r0, 16 - asrs r0, 16 - mov r8, r0 - ldr r0, _08083AFC - ldr r0, [r0] - ldr r1, _08083B00 - adds r4, r0, r1 - movs r6, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08083AE4 - adds r0, r5, 0 - bl GetEntityType - cmp r0, 0x1 - bne _08083AE4 - ldr r6, [r5, 0x70] -_08083AE4: - ldr r5, [r7, 0x70] - cmp r6, 0 - beq _08083B04 - mov r0, sp - adds r1, r6, 0 - bl sub_80709C8 - adds r0, r4, 0 - mov r1, sp - bl CopyStringtoBuffer - b _08083B0E - .align 2, 0 -_08083AFC: .4byte gDungeonGlobalData -_08083B00: .4byte 0x0001ce98 -_08083B04: - ldr r0, _08083C04 - ldr r1, [r0] - adds r0, r4, 0 - bl CopyStringtoBuffer -_08083B0E: - mov r0, sp - adds r1, r5, 0 - bl sub_80709C8 - adds r0, r4, 0 - adds r0, 0xA - mov r1, sp - bl CopyStringtoBuffer - movs r2, 0 - mov r3, r8 - strh r3, [r4, 0x14] - ldr r0, [r5, 0x60] - str r0, [r4, 0x1C] - ldr r0, [r5, 0x18] - str r0, [r4, 0x20] - ldrb r0, [r5, 0x9] - adds r1, r4, 0 - adds r1, 0x2A - strb r0, [r1] - ldrh r0, [r5, 0x10] - strh r0, [r4, 0x24] - ldrb r0, [r5, 0x14] - subs r1, 0x4 - strb r0, [r1] - ldrb r0, [r5, 0x15] - adds r1, 0x1 - strb r0, [r1] - ldrb r1, [r5, 0x16] - adds r0, r4, 0 - adds r0, 0x28 - strb r1, [r0] - ldrb r0, [r5, 0x17] - adds r1, r4, 0 - adds r1, 0x29 - strb r0, [r1] - ldr r0, _08083C08 - ldr r0, [r0] - ldr r1, _08083C0C - adds r0, r1 - ldr r0, [r0] - str r0, [r4, 0x18] - adds r3, r4, 0 - adds r3, 0x2B - strb r2, [r3] - adds r6, r4, 0 - adds r6, 0x2C - strb r2, [r6] - movs r0, 0x2D - adds r0, r4 - mov r12, r0 - strb r2, [r0] - adds r4, 0x2E - strb r2, [r4] - adds r0, r5, 0 - adds r0, 0x60 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08083BF8 - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08083BF8 - adds r1, r5, 0 - adds r1, 0x62 - ldrb r0, [r1] - cmp r0, 0x13 - bne _08083BA4 - ldr r0, _08083C10 - ldrb r0, [r0] - ldrb r2, [r3] - adds r0, r2 - strb r0, [r3] -_08083BA4: - ldrb r0, [r1] - cmp r0, 0x2B - bne _08083BB4 - ldr r0, _08083C14 - ldrb r0, [r0] - ldrb r2, [r3] - adds r0, r2 - strb r0, [r3] -_08083BB4: - ldrb r0, [r1] - cmp r0, 0x21 - bne _08083BC4 - ldr r0, _08083C18 - ldrb r0, [r0] - ldrb r3, [r6] - adds r0, r3 - strb r0, [r6] -_08083BC4: - ldrb r0, [r1] - cmp r0, 0x2B - bne _08083BD4 - ldr r0, _08083C14 - ldrb r0, [r0] - ldrb r2, [r6] - adds r0, r2 - strb r0, [r6] -_08083BD4: - ldrb r0, [r1] - cmp r0, 0x1E - bne _08083BE8 - ldr r0, _08083C1C - ldrb r0, [r0] - mov r3, r12 - ldrb r3, [r3] - adds r0, r3 - mov r2, r12 - strb r0, [r2] -_08083BE8: - ldrb r0, [r1] - cmp r0, 0x22 - bne _08083BF8 - ldr r0, _08083C20 - ldrb r0, [r0] - ldrb r3, [r4] - adds r0, r3 - strb r0, [r4] -_08083BF8: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08083C04: .4byte gUnknown_80FE6F4 -_08083C08: .4byte gDungeonGlobalData -_08083C0C: .4byte 0x00000644 -_08083C10: .4byte gUnknown_810AC60 -_08083C14: .4byte gUnknown_810AC68 -_08083C18: .4byte gUnknown_810AC62 -_08083C1C: .4byte gUnknown_810AC64 -_08083C20: .4byte gUnknown_810AC66 - thumb_func_end sub_8083AB0 - - thumb_func_start sub_8083C24 -sub_8083C24: - push {lr} - ldr r0, _08083C3C - ldr r0, [r0] - ldr r1, _08083C40 - adds r0, r1 - movs r2, 0x14 - ldrsh r1, [r0, r2] - ldr r0, _08083C44 - cmp r1, r0 - ble _08083C48 - movs r0, 0 - b _08083C4A - .align 2, 0 -_08083C3C: .4byte gDungeonGlobalData -_08083C40: .4byte 0x0001ce98 -_08083C44: .4byte 0x00000225 -_08083C48: - movs r0, 0x1 -_08083C4A: - pop {r1} - bx r1 - thumb_func_end sub_8083C24 - - thumb_func_start sub_8083C50 -sub_8083C50: - push {lr} - ldr r0, _08083C74 - ldr r0, [r0] - ldr r1, _08083C78 - adds r0, r1 - movs r2, 0x14 - ldrsh r1, [r0, r2] - ldr r0, _08083C7C - cmp r1, r0 - beq _08083C70 - adds r0, 0x3 - cmp r1, r0 - beq _08083C70 - subs r0, 0x2 - cmp r1, r0 - bne _08083C80 -_08083C70: - movs r0, 0x1 - b _08083C82 - .align 2, 0 -_08083C74: .4byte gDungeonGlobalData -_08083C78: .4byte 0x0001ce98 -_08083C7C: .4byte 0x00000227 -_08083C80: - movs r0, 0 -_08083C82: - pop {r1} - bx r1 - thumb_func_end sub_8083C50 - - thumb_func_start sub_8083C88 -sub_8083C88: - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _08083CC4 - ldr r0, [r4] - ldr r1, _08083CC8 - adds r5, r0, r1 - ldr r1, _08083CCC - adds r0, r1 - ldrb r0, [r0] - bl GetUnk9 - lsls r0, 24 - cmp r0, 0 - bne _08083CB6 - ldr r0, [r4] - ldr r1, _08083CD0 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _08083CC0 - cmp r6, 0 - bne _08083CC0 -_08083CB6: - movs r0, 0x14 - ldrsh r1, [r5, r0] - ldr r0, _08083CD4 - cmp r1, r0 - beq _08083CD8 -_08083CC0: - movs r0, 0x1 - b _08083CDA - .align 2, 0 -_08083CC4: .4byte gDungeonGlobalData -_08083CC8: .4byte 0x0001ce98 -_08083CCC: .4byte 0x00000644 -_08083CD0: .4byte 0x0000065c -_08083CD4: .4byte 0x00000227 -_08083CD8: - movs r0, 0 -_08083CDA: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8083C88 - - thumb_func_start sub_8083CE0 -sub_8083CE0: - push {lr} - lsls r0, 24 - cmp r0, 0 - beq _08083CF2 - ldr r0, _08083D00 - movs r1, 0x1A - ldrsh r0, [r0, r1] - cmp r0, 0x1 - ble _08083CFC -_08083CF2: - ldr r0, _08083D04 - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE -_08083CFC: - pop {r0} - bx r0 - .align 2, 0 -_08083D00: .4byte gUnknown_202EE10 -_08083D04: .4byte 0x0000012d - thumb_func_end sub_8083CE0 - - thumb_func_start sub_8083D08 -sub_8083D08: - push {lr} - movs r0, 0x97 - lsls r0, 1 - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D08 - - thumb_func_start sub_8083D1C -sub_8083D1C: - push {lr} - ldr r0, _08083D2C - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE - pop {r0} - bx r0 - .align 2, 0 -_08083D2C: .4byte 0x00000133 - thumb_func_end sub_8083D1C - - thumb_func_start sub_8083D30 -sub_8083D30: - push {lr} - ldr r0, _08083D40 - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE - pop {r0} - bx r0 - .align 2, 0 -_08083D40: .4byte 0x0000012f - thumb_func_end sub_8083D30 - - thumb_func_start sub_8083D44 -sub_8083D44: - push {lr} - movs r0, 0x98 - lsls r0, 1 - movs r1, 0x80 - lsls r1, 1 - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D44 - - thumb_func_start sub_8083D58 -sub_8083D58: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xC8 - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D58 - - thumb_func_start sub_8083D68 -sub_8083D68: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xCF - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D68 - - thumb_func_start sub_8083D78 -sub_8083D78: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xD3 - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D78 - - thumb_func_start sub_8083D88 -sub_8083D88: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xCC - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083D88 - - thumb_func_start sub_8083D98 -sub_8083D98: - push {lr} - movs r0, 0x33 - bl sub_8083E88 - ldr r2, _08083DCC - ldr r0, [r2] - ldr r1, _08083DD0 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r3, _08083DD4 - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - adds r3, 0x27 - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _08083DD8 - adds r0, r1 - ldr r1, _08083DDC - strh r1, [r0] - pop {r0} - bx r0 - .align 2, 0 -_08083DCC: .4byte gDungeonGlobalData -_08083DD0: .4byte 0x0000066f -_08083DD4: .4byte 0x00000672 -_08083DD8: .4byte 0x0000066a -_08083DDC: .4byte 0x000003e7 - thumb_func_end sub_8083D98 - - thumb_func_start sub_8083DE0 -sub_8083DE0: - push {lr} - movs r0, 0x34 - bl sub_8083E88 - ldr r2, _08083E14 - ldr r0, [r2] - ldr r1, _08083E18 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r3, _08083E1C - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - adds r3, 0x27 - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _08083E20 - adds r0, r1 - ldr r1, _08083E24 - strh r1, [r0] - pop {r0} - bx r0 - .align 2, 0 -_08083E14: .4byte gDungeonGlobalData -_08083E18: .4byte 0x0000066f -_08083E1C: .4byte 0x00000672 -_08083E20: .4byte 0x0000066a -_08083E24: .4byte 0x000003e7 - thumb_func_end sub_8083DE0 - - thumb_func_start sub_8083E28 -sub_8083E28: - push {lr} - movs r1, 0x80 - lsls r1, 1 - movs r0, 0xCF - bl PlayFanfareSE - pop {r0} - bx r0 - thumb_func_end sub_8083E28 - - thumb_func_start PlaySoundEffect -PlaySoundEffect: - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _08083E54 - cmp r2, r0 - beq _08083E4E - movs r1, 0x80 - lsls r1, 1 - adds r0, r2, 0 - bl PlayFanfareSE -_08083E4E: - pop {r0} - bx r0 - .align 2, 0 -_08083E54: .4byte 0x000003e5 - thumb_func_end PlaySoundEffect - - thumb_func_start sub_8083E58 -sub_8083E58: - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - ldr r0, _08083E70 - cmp r1, r0 - beq _08083E6A - adds r0, r1, 0 - bl StopFanfareSE -_08083E6A: - pop {r0} - bx r0 - .align 2, 0 -_08083E70: .4byte 0x000003e5 - thumb_func_end sub_8083E58 - - thumb_func_start IsFanfareSEPlaying_2 -IsFanfareSEPlaying_2: - push {lr} - lsls r0, 16 - lsrs r0, 16 - bl IsFanfareSEPlaying - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end IsFanfareSEPlaying_2 - - thumb_func_start sub_8083E88 -sub_8083E88: - ldr r1, _08083E9C - ldr r1, [r1] - ldr r3, _08083EA0 - adds r2, r1, r3 - movs r3, 0 - strh r0, [r2] - ldr r0, _08083EA4 - adds r1, r0 - strh r3, [r1] - bx lr - .align 2, 0 -_08083E9C: .4byte gDungeonGlobalData -_08083EA0: .4byte 0x0001ceda -_08083EA4: .4byte 0x0001ced4 - thumb_func_end sub_8083E88 - - thumb_func_start sub_8083EA8 -sub_8083EA8: - push {r4,r5,lr} - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08083ECC - ldr r2, [r2] - movs r4, 0x80 - lsls r4, 8 - adds r3, r4, 0 - ldr r5, _08083ED0 - adds r4, r2, r5 - orrs r0, r3 - strh r0, [r4] - ldr r0, _08083ED4 - adds r2, r0 - strh r1, [r2] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083ECC: .4byte gDungeonGlobalData -_08083ED0: .4byte 0x0001ceda -_08083ED4: .4byte 0x0001ced4 - thumb_func_end sub_8083EA8 - - thumb_func_start sub_8083ED8 -sub_8083ED8: - push {lr} - lsls r0, 16 - lsrs r0, 16 - bl FadeOutAllMusic - ldr r0, _08083F00 - ldr r1, [r0] - ldr r2, _08083F04 - adds r0, r1, r2 - ldr r2, _08083F08 - strh r2, [r0] - ldr r3, _08083F0C - adds r0, r1, r3 - strh r2, [r0] - ldr r0, _08083F10 - adds r1, r0 - strh r2, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08083F00: .4byte gDungeonGlobalData -_08083F04: .4byte 0x0001ced6 -_08083F08: .4byte 0x000003e7 -_08083F0C: .4byte 0x0001ced8 -_08083F10: .4byte 0x0001ceda - thumb_func_end sub_8083ED8 - - thumb_func_start sub_8083F14 -sub_8083F14: - push {lr} - bl sub_8083F34 - bl xxx_call_stop_bgm - pop {r0} - bx r0 - thumb_func_end sub_8083F14 - - thumb_func_start xxx_call_GetCurrentBGSong -xxx_call_GetCurrentBGSong: - push {lr} - bl GetCurrentBGSong - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end xxx_call_GetCurrentBGSong - - thumb_func_start sub_8083F34 -sub_8083F34: - ldr r0, _08083F4C - ldr r0, [r0] - ldr r1, _08083F50 - adds r0, r1 - movs r1, 0 - str r1, [r0] - str r1, [r0, 0x4] - ldr r1, _08083F54 - strh r1, [r0, 0xA] - strh r1, [r0, 0xC] - strh r1, [r0, 0xE] - bx lr - .align 2, 0 -_08083F4C: .4byte gDungeonGlobalData -_08083F50: .4byte 0x0001cecc -_08083F54: .4byte 0x000003e7 - thumb_func_end sub_8083F34 - - thumb_func_start sub_8083F58 -sub_8083F58: - push {r4,lr} - ldr r0, _08083F7C - ldr r2, [r0] - ldr r0, _08083F80 - adds r4, r2, r0 - ldr r1, _08083F84 - adds r3, r2, r1 - ldrh r1, [r3] - ldr r0, _08083F88 - cmp r1, r0 - bne _08083FB2 - ldr r1, _08083F8C - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08083F90 - movs r1, 0x12 - b _08083FB2 - .align 2, 0 -_08083F7C: .4byte gDungeonGlobalData -_08083F80: .4byte 0x0001cecc -_08083F84: .4byte 0x0000066a -_08083F88: .4byte 0x000003e7 -_08083F8C: .4byte 0x0000066f -_08083F90: - ldr r1, _08083FA0 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08083FA4 - movs r1, 0x80 - b _08083FB2 - .align 2, 0 -_08083FA0: .4byte 0x00000672 -_08083FA4: - ldr r1, _08083FC4 - adds r0, r2, r1 - ldrb r0, [r0] - movs r1, 0x11 - cmp r0, 0 - bne _08083FB2 - ldrh r1, [r4, 0xE] -_08083FB2: - ldr r0, [r4] - cmp r0, 0x4 - bne _08083FC8 - ldrh r0, [r4, 0xC] - cmp r1, r0 - beq _08083FDA - movs r0, 0x2 - b _08083FD6 - .align 2, 0 -_08083FC4: .4byte 0x00000699 -_08083FC8: - ldr r2, _08083FEC - cmp r1, r2 - beq _08083FDA - ldrh r0, [r4, 0xA] - cmp r0, r2 - bne _08083FDA - movs r0, 0x1 -_08083FD6: - str r0, [r4] - strh r1, [r4, 0xA] -_08083FDA: - ldr r0, [r4] - cmp r0, 0x4 - bhi _08084084 - lsls r0, 2 - ldr r1, _08083FF0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08083FEC: .4byte 0x000003e7 -_08083FF0: .4byte _08083FF4 - .align 2, 0 -_08083FF4: - .4byte _08084084 - .4byte _08084008 - .4byte _08084050 - .4byte _0808405E - .4byte _08084084 -_08084008: - ldrh r1, [r4, 0xA] - ldr r0, _08084014 - cmp r1, r0 - bne _08084018 - movs r0, 0 - b _08084040 - .align 2, 0 -_08084014: .4byte 0x000003e7 -_08084018: - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08084030 - ldr r0, _0808402C - ands r0, r1 - bl StartNewBGM - b _0808403A - .align 2, 0 -_0808402C: .4byte 0x00007fff -_08084030: - ldr r0, _08084048 - ands r0, r1 - ldrh r1, [r4, 0x8] - bl FadeInNewBGM -_0808403A: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0xC] - movs r0, 0x4 -_08084040: - str r0, [r4] - ldr r0, _0808404C - strh r0, [r4, 0xA] - b _08084084 - .align 2, 0 -_08084048: .4byte 0x00007fff -_0808404C: .4byte 0x000003e7 -_08084050: - movs r0, 0x1E - bl FadeOutBGM - movs r0, 0x1E - str r0, [r4, 0x4] - movs r0, 0x3 - b _08084082 -_0808405E: - ldr r0, [r4, 0x4] - cmp r0, 0 - beq _0808406C - subs r0, 0x1 - str r0, [r4, 0x4] - cmp r0, 0 - bne _08084084 -_0808406C: - ldrh r1, [r4, 0xA] - ldr r0, _0808407C - cmp r1, r0 - bne _08084080 - bl StopBGM - movs r0, 0 - b _08084082 - .align 2, 0 -_0808407C: .4byte 0x000003e7 -_08084080: - movs r0, 0x1 -_08084082: - str r0, [r4] -_08084084: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8083F58 - - thumb_func_start sub_808408C -sub_808408C: - ldr r2, _0808409C - movs r1, 0x1 - orrs r1, r0 - ldr r0, _080840A0 - ands r0, r1 - str r0, [r2] - bx lr - .align 2, 0 -_0808409C: .4byte gUnknown_203B458 -_080840A0: .4byte 0x00ffffff - thumb_func_end sub_808408C - - thumb_func_start sub_80840A4 -sub_80840A4: - ldr r3, _080840C8 - ldr r0, [r3] - ldr r2, _080840CC - adds r1, r0, 0 - muls r1, r2 - adds r1, 0x1 - lsrs r0, r1, 16 - muls r1, r2 - adds r1, 0x1 - str r1, [r3] - ldr r2, _080840D0 - ands r1, r2 - orrs r0, r1 - ldr r1, _080840D4 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - bx lr - .align 2, 0 -_080840C8: .4byte gUnknown_203B458 -_080840CC: .4byte 0x5d588b65 -_080840D0: .4byte 0xffff0000 -_080840D4: .4byte 0x00ffffff - thumb_func_end sub_80840A4 - - .align 2, 0 + .align 2, 0 \ No newline at end of file diff --git a/asm/code_8083654.s b/asm/code_8083654.s new file mode 100644 index 000000000..ac0e95c88 --- /dev/null +++ b/asm/code_8083654.s @@ -0,0 +1,1437 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_8083654 +sub_8083654: + push {lr} + bl GetLeaderEntity + ldr r0, [r0, 0x70] + pop {r1} + bx r1 + thumb_func_end sub_8083654 + + thumb_func_start sub_8083660 +sub_8083660: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + ldr r4, _080836D4 + add sp, r4 + movs r1, 0xE0 + lsls r1, 5 + add r1, sp + str r0, [r1] + bl GetLeaderEntity + ldr r2, _080836D8 + add r2, sp + str r0, [r2] + movs r7, 0 + movs r0, 0 + ldr r1, _080836DC + add r1, sp + str r0, [r1] +_0808368A: + movs r0, 0x38 + bl DungeonRandomCapped + adds r4, r0, 0 + movs r0, 0x20 + bl DungeonRandomCapped + ldr r2, _080836E0 + add r2, sp + str r0, [r2] + ldr r0, _080836D8 + add r0, sp + ldr r0, [r0] + ldr r3, [r0, 0x4] + adds r5, r4, 0 + movs r1, 0 + ldr r4, [r2] + ldr r0, _080836E4 + cmp r7, r0 + ble _080836B4 + b _080837E6 +_080836B4: + movs r2, 0x3 + mov r10, r2 + lsls r0, r7, 2 + mov r2, sp + adds r6, r0, r2 +_080836BE: + movs r0, 0 + mov r8, r0 + adds r2, r5, 0x1 + ldr r0, _080836E8 + add r0, sp + str r2, [r0] + adds r1, 0x1 + ldr r2, _080836EC + add r2, sp + str r1, [r2] + b _0808379C + .align 2, 0 +_080836D4: .4byte 0xffffe3e4 +_080836D8: .4byte 0x00001c04 +_080836DC: .4byte 0x00001c0c +_080836E0: .4byte 0x00001c08 +_080836E4: .4byte 0x000006ff +_080836E8: .4byte 0x00001c14 +_080836EC: .4byte 0x00001c10 +_080836F0: + ldr r0, _08083738 + add r0, sp + ldr r0, [r0] + cmp r0, 0 + bne _0808373C + ldrh r1, [r2] + mov r0, r10 + ands r0, r1 + cmp r0, 0x1 + bne _08083782 + ldrb r0, [r2, 0x9] + cmp r0, 0xFF + beq _08083782 + ldr r0, [r2, 0x14] + cmp r0, 0 + bne _08083782 + ldr r0, [r2, 0x10] + cmp r0, 0 + bne _08083782 + lsls r0, r3, 16 + asrs r0, 16 + subs r0, r5 + cmp r0, 0 + bge _08083722 + negs r0, r0 +_08083722: + cmp r0, 0x5 + bgt _08083788 + asrs r0, r3, 16 + subs r0, r4 + cmp r0, 0 + bge _08083730 + negs r0, r0 +_08083730: + cmp r0, 0x5 + ble _08083782 + b _08083788 + .align 2, 0 +_08083738: .4byte 0x00001c0c +_0808373C: + ldr r1, _08083764 + add r1, sp + ldr r1, [r1] + cmp r1, 0x1 + bne _08083768 + ldrh r1, [r2] + mov r0, r10 + ands r0, r1 + cmp r0, 0x1 + bne _08083782 + ldrb r0, [r2, 0x9] + cmp r0, 0xFF + beq _08083782 + ldr r0, [r2, 0x14] + cmp r0, 0 + bne _08083782 + ldr r0, [r2, 0x10] + cmp r0, 0 + bne _08083782 + b _08083788 + .align 2, 0 +_08083764: .4byte 0x00001c0c +_08083768: + ldrh r1, [r2] + mov r0, r10 + ands r0, r1 + cmp r0, 0x1 + bne _08083782 + ldr r0, [r2, 0x14] + cmp r0, 0 + bne _08083782 + ldr r0, [r2, 0x10] + cmp r0, 0 + bne _08083782 + movs r2, 0x1 + mov r9, r2 +_08083782: + mov r0, r9 + cmp r0, 0 + beq _08083790 +_08083788: + strb r5, [r6] + strb r4, [r6, 0x1] + adds r6, 0x4 + adds r7, 0x1 +_08083790: + adds r4, 0x1 + cmp r4, 0x1F + ble _08083798 + movs r4, 0 +_08083798: + movs r1, 0x1 + add r8, r1 +_0808379C: + mov r2, r8 + cmp r2, 0x1F + bgt _080837C2 + movs r0, 0 + mov r9, r0 + adds r0, r5, 0 + adds r1, r4, 0 + ldr r2, _0808380C + add r2, sp + str r3, [r2] + bl GetMapTile_1 + adds r2, r0, 0 + ldr r0, _08083810 + ldr r1, _0808380C + add r1, sp + ldr r3, [r1] + cmp r7, r0 + ble _080836F0 +_080837C2: + ldr r2, _08083814 + add r2, sp + ldr r5, [r2] + cmp r5, 0x37 + ble _080837CE + movs r5, 0 +_080837CE: + ldr r0, _08083818 + add r0, sp + ldr r1, [r0] + cmp r1, 0x37 + bgt _080837E6 + ldr r2, _0808381C + add r2, sp + ldr r4, [r2] + ldr r0, _08083810 + cmp r7, r0 + bgt _080837E6 + b _080836BE +_080837E6: + cmp r7, 0 + beq _08083820 + adds r0, r7, 0 + bl DungeonRandomCapped + lsls r0, 2 + mov r2, sp + adds r1, r2, r0 + ldrb r0, [r1] + movs r2, 0xE0 + lsls r2, 5 + add r2, sp + ldr r2, [r2] + strh r0, [r2] + ldrb r0, [r1, 0x1] + strh r0, [r2, 0x2] + movs r0, 0x1 + b _08083832 + .align 2, 0 +_0808380C: .4byte 0x00001c18 +_08083810: .4byte 0x000006ff +_08083814: .4byte 0x00001c14 +_08083818: .4byte 0x00001c10 +_0808381C: .4byte 0x00001c08 +_08083820: + ldr r0, _08083844 + add r0, sp + ldr r2, [r0] + adds r2, 0x1 + str r2, [r0] + cmp r2, 0x2 + bgt _08083830 + b _0808368A +_08083830: + movs r0, 0 +_08083832: + ldr r3, _08083848 + add sp, r3 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 +_08083844: .4byte 0x00001c0c +_08083848: .4byte 0x00001c1c + thumb_func_end sub_8083660 + + thumb_func_start sub_808384C +sub_808384C: + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + sub sp, 0x4 + adds r3, r0, 0 + mov r9, r1 + movs r0, 0 + mov r8, r0 + ldr r0, _080838BC + movs r2, 0 + ldrsh r1, [r0, r2] + cmp r1, 0x63 + beq _080838D8 + movs r6, 0 +_0808386A: + adds r2, r6, r0 + movs r4, 0 + ldrsh r1, [r2, r4] + mov r5, r9 + movs r7, 0 + ldrsh r0, [r5, r7] + adds r5, r1, r0 + movs r0, 0x2 + ldrsh r1, [r2, r0] + mov r2, r9 + movs r4, 0x2 + ldrsh r0, [r2, r4] + adds r4, r1, r0 + adds r0, r5, 0 + adds r1, r4, 0 + str r3, [sp] + bl GetMapTile_1 + adds r1, r0, 0 + ldrh r2, [r1] + movs r7, 0x80 + lsls r7, 4 + adds r0, r7, 0 + ands r0, r2 + ldr r3, [sp] + cmp r0, 0 + bne _080838C0 + movs r0, 0x3 + ands r0, r2 + cmp r0, 0x1 + bne _080838C0 + ldr r0, [r1, 0x14] + cmp r0, 0 + bne _080838C0 + ldr r0, [r1, 0x10] + cmp r0, 0 + bne _080838C0 + strh r5, [r3] + strh r4, [r3, 0x2] + movs r0, 0x1 + b _080838DA + .align 2, 0 +_080838BC: .4byte gUnknown_80F4468 +_080838C0: + adds r6, 0x4 + movs r0, 0x1 + add r8, r0 + mov r2, r8 + cmp r2, 0x18 + bgt _080838D8 + ldr r0, _080838E8 + adds r1, r6, r0 + movs r4, 0 + ldrsh r1, [r1, r4] + cmp r1, 0x63 + bne _0808386A +_080838D8: + movs r0, 0 +_080838DA: + add sp, 0x4 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 +_080838E8: .4byte gUnknown_80F4468 + thumb_func_end sub_808384C + + thumb_func_start sub_80838EC +sub_80838EC: + push {lr} + adds r2, r0, 0 + ldrb r0, [r2] + adds r1, r0, 0 + cmp r1, 0x7F + beq _08083900 + cmp r1, 0 + beq _08083900 + subs r0, 0x1 + strb r0, [r2] +_08083900: + pop {r0} + bx r0 + thumb_func_end sub_80838EC + + thumb_func_start sub_8083904 +sub_8083904: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x20 + str r0, [sp] + mov r10, r1 + ldr r4, [r1, 0x70] + str r4, [sp, 0x4] + adds r5, r4, 0 + adds r5, 0x46 + ldrb r6, [r5] + mov r0, r10 + movs r1, 0x1 + bl CannotMove + lsls r0, 24 + cmp r0, 0 + beq _08083954 + ldr r0, _08083950 + lsls r2, r6, 2 + adds r2, r0 + movs r0, 0 + ldrsh r1, [r2, r0] + lsls r0, r1, 1 + adds r0, r1 + mov r1, r10 + ldrh r1, [r1, 0x4] + adds r0, r1 + ldr r3, [sp] + strh r0, [r3] + movs r4, 0x2 + ldrsh r1, [r2, r4] + lsls r0, r1, 1 + adds r0, r1 + b _08083A6E + .align 2, 0 +_08083950: .4byte gAdjacentTileOffsets +_08083954: + ldr r1, [r4, 0x58] + movs r0, 0x1 + negs r0, r0 + cmp r1, r0 + beq _08083960 + b _08083A8C +_08083960: + ldrb r0, [r5] + ldr r1, _080839A0 + lsls r0, 3 + adds r0, r1 + ldr r7, [r0] + movs r3, 0x4 + ldrsh r2, [r0, r3] + str r2, [sp, 0x8] + movs r2, 0x6 + ldrsh r1, [r0, r2] + str r1, [sp, 0xC] + mov r3, r10 + movs r0, 0x4 + ldrsh r3, [r3, r0] + str r3, [sp, 0x10] + mov r1, r10 + movs r2, 0x6 + ldrsh r1, [r1, r2] + str r1, [sp, 0x14] + ldr r0, _080839A4 + ldr r1, [r0] + ldr r3, _080839A8 + adds r0, r1, r3 + ldrb r0, [r0] + cmp r0, 0 + beq _080839B0 + ldr r4, _080839AC + adds r4, r1, r4 + str r4, [sp, 0x18] + movs r0, 0x14 + b _080839D0 + .align 2, 0 +_080839A0: .4byte gUnknown_80F4CC4 +_080839A4: .4byte gDungeonGlobalData +_080839A8: .4byte 0x000037fc +_080839AC: .4byte 0x000135cc +_080839B0: + ldrb r0, [r4, 0x6] + cmp r0, 0 + bne _080839C8 + ldr r2, _080839C4 + adds r2, r1, r2 + str r2, [sp, 0x18] + movs r3, 0x10 + str r3, [sp, 0x1C] + b _080839D2 + .align 2, 0 +_080839C4: .4byte 0x0001358c +_080839C8: + ldr r4, _08083A78 + adds r4, r1, r4 + str r4, [sp, 0x18] + movs r0, 0x4 +_080839D0: + str r0, [sp, 0x1C] +_080839D2: + movs r1, 0 + ldrsh r0, [r7, r1] + cmp r0, 0x63 + beq _08083A46 +_080839DA: + movs r2, 0 + ldrsh r0, [r7, r2] + ldr r3, [sp, 0x8] + muls r0, r3 + ldr r4, [sp, 0x10] + adds r4, r0 + mov r9, r4 + movs r1, 0x2 + ldrsh r0, [r7, r1] + ldr r2, [sp, 0xC] + muls r0, r2 + ldr r3, [sp, 0x14] + adds r3, r0 + mov r8, r3 + movs r6, 0 + ldr r4, [sp, 0x1C] + cmp r6, r4 + bge _08083A3C + ldr r5, [sp, 0x18] +_08083A00: + ldr r4, [r5] + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _08083A32 + movs r1, 0x4 + ldrsh r0, [r4, r1] + cmp r0, r9 + bne _08083A32 + movs r2, 0x6 + ldrsh r0, [r4, r2] + cmp r0, r8 + bne _08083A32 + mov r0, r10 + adds r1, r4, 0 + movs r2, 0 + movs r3, 0 + bl CanTarget + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + beq _08083A80 +_08083A32: + adds r5, 0x4 + adds r6, 0x1 + ldr r3, [sp, 0x1C] + cmp r6, r3 + blt _08083A00 +_08083A3C: + adds r7, 0x4 + movs r4, 0 + ldrsh r0, [r7, r4] + cmp r0, 0x63 + bne _080839DA +_08083A46: + ldr r2, _08083A7C + ldr r1, [sp, 0x4] + adds r1, 0x46 + ldrb r0, [r1] + lsls r0, 2 + adds r0, r2 + movs r3, 0 + ldrsh r0, [r0, r3] + lsls r0, 1 + mov r4, r10 + ldrh r4, [r4, 0x4] + adds r0, r4 + ldr r3, [sp] + strh r0, [r3] + ldrb r0, [r1] + lsls r0, 2 + adds r0, r2 + movs r4, 0x2 + ldrsh r0, [r0, r4] + lsls r0, 1 +_08083A6E: + mov r1, r10 + ldrh r1, [r1, 0x6] + adds r0, r1 + strh r0, [r3, 0x2] + b _08083A9E + .align 2, 0 +_08083A78: .4byte 0x0001357c +_08083A7C: .4byte gAdjacentTileOffsets +_08083A80: + mov r3, r9 + ldr r2, [sp] + strh r3, [r2] + mov r4, r8 + strh r4, [r2, 0x2] + b _08083A9E +_08083A8C: + ldr r0, [sp, 0x4] + adds r0, 0x58 + ldrh r0, [r0] + ldr r1, [sp] + strh r0, [r1] + ldr r0, [sp, 0x4] + adds r0, 0x5A + ldrh r0, [r0] + strh r0, [r1, 0x2] +_08083A9E: + add sp, 0x20 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_8083904 + + thumb_func_start sub_8083AB0 +sub_8083AB0: + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x14 + adds r5, r1, 0 + adds r7, r2, 0 + lsls r0, 16 + asrs r0, 16 + mov r8, r0 + ldr r0, _08083AFC + ldr r0, [r0] + ldr r1, _08083B00 + adds r4, r0, r1 + movs r6, 0 + adds r0, r5, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _08083AE4 + adds r0, r5, 0 + bl GetEntityType + cmp r0, 0x1 + bne _08083AE4 + ldr r6, [r5, 0x70] +_08083AE4: + ldr r5, [r7, 0x70] + cmp r6, 0 + beq _08083B04 + mov r0, sp + adds r1, r6, 0 + bl sub_80709C8 + adds r0, r4, 0 + mov r1, sp + bl CopyStringtoBuffer + b _08083B0E + .align 2, 0 +_08083AFC: .4byte gDungeonGlobalData +_08083B00: .4byte 0x0001ce98 +_08083B04: + ldr r0, _08083C04 + ldr r1, [r0] + adds r0, r4, 0 + bl CopyStringtoBuffer +_08083B0E: + mov r0, sp + adds r1, r5, 0 + bl sub_80709C8 + adds r0, r4, 0 + adds r0, 0xA + mov r1, sp + bl CopyStringtoBuffer + movs r2, 0 + mov r3, r8 + strh r3, [r4, 0x14] + ldr r0, [r5, 0x60] + str r0, [r4, 0x1C] + ldr r0, [r5, 0x18] + str r0, [r4, 0x20] + ldrb r0, [r5, 0x9] + adds r1, r4, 0 + adds r1, 0x2A + strb r0, [r1] + ldrh r0, [r5, 0x10] + strh r0, [r4, 0x24] + ldrb r0, [r5, 0x14] + subs r1, 0x4 + strb r0, [r1] + ldrb r0, [r5, 0x15] + adds r1, 0x1 + strb r0, [r1] + ldrb r1, [r5, 0x16] + adds r0, r4, 0 + adds r0, 0x28 + strb r1, [r0] + ldrb r0, [r5, 0x17] + adds r1, r4, 0 + adds r1, 0x29 + strb r0, [r1] + ldr r0, _08083C08 + ldr r0, [r0] + ldr r1, _08083C0C + adds r0, r1 + ldr r0, [r0] + str r0, [r4, 0x18] + adds r3, r4, 0 + adds r3, 0x2B + strb r2, [r3] + adds r6, r4, 0 + adds r6, 0x2C + strb r2, [r6] + movs r0, 0x2D + adds r0, r4 + mov r12, r0 + strb r2, [r0] + adds r4, 0x2E + strb r2, [r4] + adds r0, r5, 0 + adds r0, 0x60 + ldrb r1, [r0] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08083BF8 + movs r0, 0x8 + ands r0, r1 + cmp r0, 0 + bne _08083BF8 + adds r1, r5, 0 + adds r1, 0x62 + ldrb r0, [r1] + cmp r0, 0x13 + bne _08083BA4 + ldr r0, _08083C10 + ldrb r0, [r0] + ldrb r2, [r3] + adds r0, r2 + strb r0, [r3] +_08083BA4: + ldrb r0, [r1] + cmp r0, 0x2B + bne _08083BB4 + ldr r0, _08083C14 + ldrb r0, [r0] + ldrb r2, [r3] + adds r0, r2 + strb r0, [r3] +_08083BB4: + ldrb r0, [r1] + cmp r0, 0x21 + bne _08083BC4 + ldr r0, _08083C18 + ldrb r0, [r0] + ldrb r3, [r6] + adds r0, r3 + strb r0, [r6] +_08083BC4: + ldrb r0, [r1] + cmp r0, 0x2B + bne _08083BD4 + ldr r0, _08083C14 + ldrb r0, [r0] + ldrb r2, [r6] + adds r0, r2 + strb r0, [r6] +_08083BD4: + ldrb r0, [r1] + cmp r0, 0x1E + bne _08083BE8 + ldr r0, _08083C1C + ldrb r0, [r0] + mov r3, r12 + ldrb r3, [r3] + adds r0, r3 + mov r2, r12 + strb r0, [r2] +_08083BE8: + ldrb r0, [r1] + cmp r0, 0x22 + bne _08083BF8 + ldr r0, _08083C20 + ldrb r0, [r0] + ldrb r3, [r4] + adds r0, r3 + strb r0, [r4] +_08083BF8: + add sp, 0x14 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08083C04: .4byte gUnknown_80FE6F4 +_08083C08: .4byte gDungeonGlobalData +_08083C0C: .4byte 0x00000644 +_08083C10: .4byte gUnknown_810AC60 +_08083C14: .4byte gUnknown_810AC68 +_08083C18: .4byte gUnknown_810AC62 +_08083C1C: .4byte gUnknown_810AC64 +_08083C20: .4byte gUnknown_810AC66 + thumb_func_end sub_8083AB0 + + thumb_func_start sub_8083C24 +sub_8083C24: + push {lr} + ldr r0, _08083C3C + ldr r0, [r0] + ldr r1, _08083C40 + adds r0, r1 + movs r2, 0x14 + ldrsh r1, [r0, r2] + ldr r0, _08083C44 + cmp r1, r0 + ble _08083C48 + movs r0, 0 + b _08083C4A + .align 2, 0 +_08083C3C: .4byte gDungeonGlobalData +_08083C40: .4byte 0x0001ce98 +_08083C44: .4byte 0x00000225 +_08083C48: + movs r0, 0x1 +_08083C4A: + pop {r1} + bx r1 + thumb_func_end sub_8083C24 + + thumb_func_start sub_8083C50 +sub_8083C50: + push {lr} + ldr r0, _08083C74 + ldr r0, [r0] + ldr r1, _08083C78 + adds r0, r1 + movs r2, 0x14 + ldrsh r1, [r0, r2] + ldr r0, _08083C7C + cmp r1, r0 + beq _08083C70 + adds r0, 0x3 + cmp r1, r0 + beq _08083C70 + subs r0, 0x2 + cmp r1, r0 + bne _08083C80 +_08083C70: + movs r0, 0x1 + b _08083C82 + .align 2, 0 +_08083C74: .4byte gDungeonGlobalData +_08083C78: .4byte 0x0001ce98 +_08083C7C: .4byte 0x00000227 +_08083C80: + movs r0, 0 +_08083C82: + pop {r1} + bx r1 + thumb_func_end sub_8083C50 + + thumb_func_start sub_8083C88 +sub_8083C88: + push {r4-r6,lr} + lsls r0, 24 + lsrs r6, r0, 24 + ldr r4, _08083CC4 + ldr r0, [r4] + ldr r1, _08083CC8 + adds r5, r0, r1 + ldr r1, _08083CCC + adds r0, r1 + ldrb r0, [r0] + bl GetUnk9 + lsls r0, 24 + cmp r0, 0 + bne _08083CB6 + ldr r0, [r4] + ldr r1, _08083CD0 + adds r0, r1 + ldrb r0, [r0] + cmp r0, 0 + bne _08083CC0 + cmp r6, 0 + bne _08083CC0 +_08083CB6: + movs r0, 0x14 + ldrsh r1, [r5, r0] + ldr r0, _08083CD4 + cmp r1, r0 + beq _08083CD8 +_08083CC0: + movs r0, 0x1 + b _08083CDA + .align 2, 0 +_08083CC4: .4byte gDungeonGlobalData +_08083CC8: .4byte 0x0001ce98 +_08083CCC: .4byte 0x00000644 +_08083CD0: .4byte 0x0000065c +_08083CD4: .4byte 0x00000227 +_08083CD8: + movs r0, 0 +_08083CDA: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end sub_8083C88 + + thumb_func_start sub_8083CE0 +sub_8083CE0: + push {lr} + lsls r0, 24 + cmp r0, 0 + beq _08083CF2 + ldr r0, _08083D00 + movs r1, 0x1A + ldrsh r0, [r0, r1] + cmp r0, 0x1 + ble _08083CFC +_08083CF2: + ldr r0, _08083D04 + movs r1, 0x80 + lsls r1, 1 + bl PlayFanfareSE +_08083CFC: + pop {r0} + bx r0 + .align 2, 0 +_08083D00: .4byte gUnknown_202EE10 +_08083D04: .4byte 0x0000012d + thumb_func_end sub_8083CE0 + + thumb_func_start sub_8083D08 +sub_8083D08: + push {lr} + movs r0, 0x97 + lsls r0, 1 + movs r1, 0x80 + lsls r1, 1 + bl PlayFanfareSE + pop {r0} + bx r0 + thumb_func_end sub_8083D08 + + thumb_func_start sub_8083D1C +sub_8083D1C: + push {lr} + ldr r0, _08083D2C + movs r1, 0x80 + lsls r1, 1 + bl PlayFanfareSE + pop {r0} + bx r0 + .align 2, 0 +_08083D2C: .4byte 0x00000133 + thumb_func_end sub_8083D1C + + thumb_func_start sub_8083D30 +sub_8083D30: + push {lr} + ldr r0, _08083D40 + movs r1, 0x80 + lsls r1, 1 + bl PlayFanfareSE + pop {r0} + bx r0 + .align 2, 0 +_08083D40: .4byte 0x0000012f + thumb_func_end sub_8083D30 + + thumb_func_start sub_8083D44 +sub_8083D44: + push {lr} + movs r0, 0x98 + lsls r0, 1 + movs r1, 0x80 + lsls r1, 1 + bl PlayFanfareSE + pop {r0} + bx r0 + thumb_func_end sub_8083D44 + + thumb_func_start sub_8083D58 +sub_8083D58: + push {lr} + movs r1, 0x80 + lsls r1, 1 + movs r0, 0xC8 + bl PlayFanfareSE + pop {r0} + bx r0 + thumb_func_end sub_8083D58 + + thumb_func_start sub_8083D68 +sub_8083D68: + push {lr} + movs r1, 0x80 + lsls r1, 1 + movs r0, 0xCF + bl PlayFanfareSE + pop {r0} + bx r0 + thumb_func_end sub_8083D68 + + thumb_func_start sub_8083D78 +sub_8083D78: + push {lr} + movs r1, 0x80 + lsls r1, 1 + movs r0, 0xD3 + bl PlayFanfareSE + pop {r0} + bx r0 + thumb_func_end sub_8083D78 + + thumb_func_start sub_8083D88 +sub_8083D88: + push {lr} + movs r1, 0x80 + lsls r1, 1 + movs r0, 0xCC + bl PlayFanfareSE + pop {r0} + bx r0 + thumb_func_end sub_8083D88 + + thumb_func_start sub_8083D98 +sub_8083D98: + push {lr} + movs r0, 0x33 + bl sub_8083E88 + ldr r2, _08083DCC + ldr r0, [r2] + ldr r1, _08083DD0 + adds r0, r1 + movs r1, 0 + strb r1, [r0] + ldr r0, [r2] + ldr r3, _08083DD4 + adds r0, r3 + strb r1, [r0] + ldr r0, [r2] + adds r3, 0x27 + adds r0, r3 + strb r1, [r0] + ldr r0, [r2] + ldr r1, _08083DD8 + adds r0, r1 + ldr r1, _08083DDC + strh r1, [r0] + pop {r0} + bx r0 + .align 2, 0 +_08083DCC: .4byte gDungeonGlobalData +_08083DD0: .4byte 0x0000066f +_08083DD4: .4byte 0x00000672 +_08083DD8: .4byte 0x0000066a +_08083DDC: .4byte 0x000003e7 + thumb_func_end sub_8083D98 + + thumb_func_start sub_8083DE0 +sub_8083DE0: + push {lr} + movs r0, 0x34 + bl sub_8083E88 + ldr r2, _08083E14 + ldr r0, [r2] + ldr r1, _08083E18 + adds r0, r1 + movs r1, 0 + strb r1, [r0] + ldr r0, [r2] + ldr r3, _08083E1C + adds r0, r3 + strb r1, [r0] + ldr r0, [r2] + adds r3, 0x27 + adds r0, r3 + strb r1, [r0] + ldr r0, [r2] + ldr r1, _08083E20 + adds r0, r1 + ldr r1, _08083E24 + strh r1, [r0] + pop {r0} + bx r0 + .align 2, 0 +_08083E14: .4byte gDungeonGlobalData +_08083E18: .4byte 0x0000066f +_08083E1C: .4byte 0x00000672 +_08083E20: .4byte 0x0000066a +_08083E24: .4byte 0x000003e7 + thumb_func_end sub_8083DE0 + + thumb_func_start sub_8083E28 +sub_8083E28: + push {lr} + movs r1, 0x80 + lsls r1, 1 + movs r0, 0xCF + bl PlayFanfareSE + pop {r0} + bx r0 + thumb_func_end sub_8083E28 + + thumb_func_start PlaySoundEffect +PlaySoundEffect: + push {lr} + lsls r0, 16 + lsrs r2, r0, 16 + ldr r0, _08083E54 + cmp r2, r0 + beq _08083E4E + movs r1, 0x80 + lsls r1, 1 + adds r0, r2, 0 + bl PlayFanfareSE +_08083E4E: + pop {r0} + bx r0 + .align 2, 0 +_08083E54: .4byte 0x000003e5 + thumb_func_end PlaySoundEffect + + thumb_func_start sub_8083E58 +sub_8083E58: + push {lr} + lsls r0, 16 + lsrs r1, r0, 16 + ldr r0, _08083E70 + cmp r1, r0 + beq _08083E6A + adds r0, r1, 0 + bl StopFanfareSE +_08083E6A: + pop {r0} + bx r0 + .align 2, 0 +_08083E70: .4byte 0x000003e5 + thumb_func_end sub_8083E58 + + thumb_func_start IsFanfareSEPlaying_2 +IsFanfareSEPlaying_2: + push {lr} + lsls r0, 16 + lsrs r0, 16 + bl IsFanfareSEPlaying + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + thumb_func_end IsFanfareSEPlaying_2 + + thumb_func_start sub_8083E88 +sub_8083E88: + ldr r1, _08083E9C + ldr r1, [r1] + ldr r3, _08083EA0 + adds r2, r1, r3 + movs r3, 0 + strh r0, [r2] + ldr r0, _08083EA4 + adds r1, r0 + strh r3, [r1] + bx lr + .align 2, 0 +_08083E9C: .4byte gDungeonGlobalData +_08083EA0: .4byte 0x0001ceda +_08083EA4: .4byte 0x0001ced4 + thumb_func_end sub_8083E88 + + thumb_func_start sub_8083EA8 +sub_8083EA8: + push {r4,r5,lr} + lsls r0, 16 + lsrs r0, 16 + ldr r2, _08083ECC + ldr r2, [r2] + movs r4, 0x80 + lsls r4, 8 + adds r3, r4, 0 + ldr r5, _08083ED0 + adds r4, r2, r5 + orrs r0, r3 + strh r0, [r4] + ldr r0, _08083ED4 + adds r2, r0 + strh r1, [r2] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_08083ECC: .4byte gDungeonGlobalData +_08083ED0: .4byte 0x0001ceda +_08083ED4: .4byte 0x0001ced4 + thumb_func_end sub_8083EA8 + + thumb_func_start sub_8083ED8 +sub_8083ED8: + push {lr} + lsls r0, 16 + lsrs r0, 16 + bl FadeOutAllMusic + ldr r0, _08083F00 + ldr r1, [r0] + ldr r2, _08083F04 + adds r0, r1, r2 + ldr r2, _08083F08 + strh r2, [r0] + ldr r3, _08083F0C + adds r0, r1, r3 + strh r2, [r0] + ldr r0, _08083F10 + adds r1, r0 + strh r2, [r1] + pop {r0} + bx r0 + .align 2, 0 +_08083F00: .4byte gDungeonGlobalData +_08083F04: .4byte 0x0001ced6 +_08083F08: .4byte 0x000003e7 +_08083F0C: .4byte 0x0001ced8 +_08083F10: .4byte 0x0001ceda + thumb_func_end sub_8083ED8 + + thumb_func_start sub_8083F14 +sub_8083F14: + push {lr} + bl sub_8083F34 + bl xxx_call_stop_bgm + pop {r0} + bx r0 + thumb_func_end sub_8083F14 + + thumb_func_start xxx_call_GetCurrentBGSong +xxx_call_GetCurrentBGSong: + push {lr} + bl GetCurrentBGSong + lsls r0, 16 + lsrs r0, 16 + pop {r1} + bx r1 + thumb_func_end xxx_call_GetCurrentBGSong + + thumb_func_start sub_8083F34 +sub_8083F34: + ldr r0, _08083F4C + ldr r0, [r0] + ldr r1, _08083F50 + adds r0, r1 + movs r1, 0 + str r1, [r0] + str r1, [r0, 0x4] + ldr r1, _08083F54 + strh r1, [r0, 0xA] + strh r1, [r0, 0xC] + strh r1, [r0, 0xE] + bx lr + .align 2, 0 +_08083F4C: .4byte gDungeonGlobalData +_08083F50: .4byte 0x0001cecc +_08083F54: .4byte 0x000003e7 + thumb_func_end sub_8083F34 + + thumb_func_start sub_8083F58 +sub_8083F58: + push {r4,lr} + ldr r0, _08083F7C + ldr r2, [r0] + ldr r0, _08083F80 + adds r4, r2, r0 + ldr r1, _08083F84 + adds r3, r2, r1 + ldrh r1, [r3] + ldr r0, _08083F88 + cmp r1, r0 + bne _08083FB2 + ldr r1, _08083F8C + adds r0, r2, r1 + ldrb r0, [r0] + cmp r0, 0 + beq _08083F90 + movs r1, 0x12 + b _08083FB2 + .align 2, 0 +_08083F7C: .4byte gDungeonGlobalData +_08083F80: .4byte 0x0001cecc +_08083F84: .4byte 0x0000066a +_08083F88: .4byte 0x000003e7 +_08083F8C: .4byte 0x0000066f +_08083F90: + ldr r1, _08083FA0 + adds r0, r2, r1 + ldrb r0, [r0] + cmp r0, 0 + beq _08083FA4 + movs r1, 0x80 + b _08083FB2 + .align 2, 0 +_08083FA0: .4byte 0x00000672 +_08083FA4: + ldr r1, _08083FC4 + adds r0, r2, r1 + ldrb r0, [r0] + movs r1, 0x11 + cmp r0, 0 + bne _08083FB2 + ldrh r1, [r4, 0xE] +_08083FB2: + ldr r0, [r4] + cmp r0, 0x4 + bne _08083FC8 + ldrh r0, [r4, 0xC] + cmp r1, r0 + beq _08083FDA + movs r0, 0x2 + b _08083FD6 + .align 2, 0 +_08083FC4: .4byte 0x00000699 +_08083FC8: + ldr r2, _08083FEC + cmp r1, r2 + beq _08083FDA + ldrh r0, [r4, 0xA] + cmp r0, r2 + bne _08083FDA + movs r0, 0x1 +_08083FD6: + str r0, [r4] + strh r1, [r4, 0xA] +_08083FDA: + ldr r0, [r4] + cmp r0, 0x4 + bhi _08084084 + lsls r0, 2 + ldr r1, _08083FF0 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08083FEC: .4byte 0x000003e7 +_08083FF0: .4byte _08083FF4 + .align 2, 0 +_08083FF4: + .4byte _08084084 + .4byte _08084008 + .4byte _08084050 + .4byte _0808405E + .4byte _08084084 +_08084008: + ldrh r1, [r4, 0xA] + ldr r0, _08084014 + cmp r1, r0 + bne _08084018 + movs r0, 0 + b _08084040 + .align 2, 0 +_08084014: .4byte 0x000003e7 +_08084018: + movs r0, 0x80 + lsls r0, 8 + ands r0, r1 + cmp r0, 0 + beq _08084030 + ldr r0, _0808402C + ands r0, r1 + bl StartNewBGM + b _0808403A + .align 2, 0 +_0808402C: .4byte 0x00007fff +_08084030: + ldr r0, _08084048 + ands r0, r1 + ldrh r1, [r4, 0x8] + bl FadeInNewBGM +_0808403A: + ldrh r0, [r4, 0xA] + strh r0, [r4, 0xC] + movs r0, 0x4 +_08084040: + str r0, [r4] + ldr r0, _0808404C + strh r0, [r4, 0xA] + b _08084084 + .align 2, 0 +_08084048: .4byte 0x00007fff +_0808404C: .4byte 0x000003e7 +_08084050: + movs r0, 0x1E + bl FadeOutBGM + movs r0, 0x1E + str r0, [r4, 0x4] + movs r0, 0x3 + b _08084082 +_0808405E: + ldr r0, [r4, 0x4] + cmp r0, 0 + beq _0808406C + subs r0, 0x1 + str r0, [r4, 0x4] + cmp r0, 0 + bne _08084084 +_0808406C: + ldrh r1, [r4, 0xA] + ldr r0, _0808407C + cmp r1, r0 + bne _08084080 + bl StopBGM + movs r0, 0 + b _08084082 + .align 2, 0 +_0808407C: .4byte 0x000003e7 +_08084080: + movs r0, 0x1 +_08084082: + str r0, [r4] +_08084084: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_8083F58 + + thumb_func_start sub_808408C +sub_808408C: + ldr r2, _0808409C + movs r1, 0x1 + orrs r1, r0 + ldr r0, _080840A0 + ands r0, r1 + str r0, [r2] + bx lr + .align 2, 0 +_0808409C: .4byte gUnknown_203B458 +_080840A0: .4byte 0x00ffffff + thumb_func_end sub_808408C + + thumb_func_start sub_80840A4 +sub_80840A4: + ldr r3, _080840C8 + ldr r0, [r3] + ldr r2, _080840CC + adds r1, r0, 0 + muls r1, r2 + adds r1, 0x1 + lsrs r0, r1, 16 + muls r1, r2 + adds r1, 0x1 + str r1, [r3] + ldr r2, _080840D0 + ands r1, r2 + orrs r0, r1 + ldr r1, _080840D4 + ands r0, r1 + movs r1, 0x1 + orrs r0, r1 + bx lr + .align 2, 0 +_080840C8: .4byte gUnknown_203B458 +_080840CC: .4byte 0x5d588b65 +_080840D0: .4byte 0xffff0000 +_080840D4: .4byte 0x00ffffff + thumb_func_end sub_80840A4 + + .align 2, 0 diff --git a/include/dungeon_ai_leader.h b/include/dungeon_ai_leader.h new file mode 100644 index 000000000..a24041142 --- /dev/null +++ b/include/dungeon_ai_leader.h @@ -0,0 +1,9 @@ +#ifndef GUARD_DUNGEON_AI_LEADER_H +#define GUARD_DUNGEON_AI_LEADER_H + +#include "dungeon_entity.h" + +bool8 TargetLeader(struct DungeonEntity *pokemon); +struct DungeonEntity* GetLeaderEntityIfVisible(struct DungeonEntity *pokemon); + +#endif diff --git a/include/dungeon_ai_movement.h b/include/dungeon_ai_movement.h index 1717cbaff..88669bb1b 100644 --- a/include/dungeon_ai_movement.h +++ b/include/dungeon_ai_movement.h @@ -5,5 +5,6 @@ void MoveIfPossible(struct DungeonEntity *pokemon, bool8 showRunAwayEffect); bool8 CanTakeItem(struct DungeonEntity *pokemon); +bool8 ChooseTargetPosition(struct DungeonEntity *pokemon); #endif diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 55b442227..a232a691a 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -13,6 +13,7 @@ #define MAX_MOVEMENT_SPEED 4 #define MAX_STOCKPILE_COUNT 3 #define NUM_SPEED_TURN_COUNTERS 5 +#define NUM_PREVIOUS_POSITIONS 4 #define STAT_STAGE_ATTACK 0 #define STAT_STAGE_SPECIAL_ATTACK 1 @@ -85,16 +86,13 @@ struct DungeonEntityData /* 0x5E */ u8 abilities[2]; /* 0x60 */ struct ItemSlot heldItem; u8 fill64[0x68 - 0x64]; - /* 0x68 */ struct Position previousPosition1; - /* 0x6C */ struct Position previousPosition2; - /* 0x70 */ struct Position previousPosition3; - /* 0x74 */ struct Position previousPosition4; + /* 0x68 */ struct Position previousPositions[NUM_PREVIOUS_POSITIONS]; /* 0x78 */ u8 movementAction; /* 0x79 */ bool8 notAdjacentToTarget; /* 0x7A */ bool8 hasTarget; /* 0x7B */ bool8 turnAround; /* 0x7C */ u16 targetPokemonSpawnIndex; - /* 0x80 */ u32 targetPokemon; + /* 0x80 */ struct DungeonEntity *targetPokemon; u8 fill84[0x88 - 0x84]; /* 0x88 */ struct Position targetMovePosition; // Bitwise flags corresponding to selected IQ skills. @@ -183,9 +181,9 @@ struct DungeonEntityData /* 0x10D */ u8 slowTurnsLeft[NUM_SPEED_TURN_COUNTERS]; /* 0x112 */ u8 stockpileCount; u8 fill113; - // When true, an AI Pokémon will move in a random direction every turn. + // When non-zero, an AI Pokémon will move in a random direction every turn. // Unclear where this is set in-game; it is not set by statuses (e.g., confusion) or mission clients. - /* 0x114 */ bool8 moveRandomly; + /* 0x114 */ u32 moveRandomly; /* 0x118 */ struct PokemonMove moves[MAX_MON_MOVES]; /* 0x138 */ u8 struggleMoveFlags; /* 0x13C */ u32 belly; @@ -291,7 +289,9 @@ enum EntityType ENTITY_NONE, ENTITY_POKEMON, ENTITY_TRAP, - ENTITY_ITEM + ENTITY_ITEM, + ENTITY_UNK_4, + ENTITY_UNK_5, }; enum MovementFlag diff --git a/include/dungeon_leader.h b/include/dungeon_leader.h new file mode 100644 index 000000000..52f70cbca --- /dev/null +++ b/include/dungeon_leader.h @@ -0,0 +1,6 @@ +#ifndef GUARD_DUNGEON_LEADER_H +#define GUARD_DUNGEON_LEADER_H + +struct DungeonEntity* GetLeaderEntity(); + +#endif diff --git a/include/dungeon_movement_1.h b/include/dungeon_movement_1.h new file mode 100644 index 000000000..9b35c69eb --- /dev/null +++ b/include/dungeon_movement_1.h @@ -0,0 +1,8 @@ +#ifndef GUARD_DUNGEON_MOVEMENT_1_H +#define GUARD_DUNGEON_MOVEMENT_1_H + +#include "dungeon_entity.h" + +bool8 CanCrossWalls(struct DungeonEntity *pokemon); + +#endif diff --git a/include/item.h b/include/item.h index 2f45e7c37..799d8e528 100644 --- a/include/item.h +++ b/include/item.h @@ -102,13 +102,13 @@ u16 GetItemMove(u8 index); bool8 CanSellItem(u32 id); bool8 IsGummiItem(u8); void xxx_init_unk230_substruct(u8); -bool8 xxx_insert_unk230_80919FC(u8); +bool8 AddGreenKecleonShopItem(u8); struct HeldItem *xxx_get_inv_unk230_at_809185C(u8); void xxx_fill_unk230_gaps(); struct HeldItem* xxx_get_unk250_at_8091A90(u8); s32 xxx_count_inv_unk230(); u32 xxx_count_non_empty_inv_unk250_8091A48(); -void sub_8091BB4(u8); +void ChoosePurpleKecleonShopInventory(u8); void sub_8090F58(void*, u8 *, struct ItemSlot *, struct unkStruct_8090F58*); void ShiftItemsDownFrom(s32 start); void ClearItemSlotAt(u32 index); diff --git a/include/pokemon_3.h b/include/pokemon_3.h index c68da39ac..0b8f81126 100644 --- a/include/pokemon_3.h +++ b/include/pokemon_3.h @@ -1,6 +1,7 @@ #ifndef GUARD_POKEMON_3_H #define GUARD_POKEMON_3_H +bool8 TacticsTargetLeader(u8 tactic); bool8 HasIQForSkill(s32 pokeIQ, u8 IQSkillIndex); void SetIQSkill(u8 *param_1, u32 skillIndex); bool8 IsIQSkillSet(u8 *IQSkillsEnabled, u32 IQSkill); diff --git a/include/status_checks_1.h b/include/status_checks_1.h index 306937b6c..afe191804 100644 --- a/include/status_checks_1.h +++ b/include/status_checks_1.h @@ -5,6 +5,6 @@ bool8 HasNegativeStatus(struct DungeonEntity *pokemon); bool8 IsSleeping(struct DungeonEntity *pokemon); -bool8 HasQuarterHPOrLess(struct DungeonEntity* pokemon); +bool8 HasQuarterHPOrLess(struct DungeonEntity *pokemon); #endif diff --git a/include/weather.h b/include/weather.h index 711007dc4..ac56d2a32 100644 --- a/include/weather.h +++ b/include/weather.h @@ -3,6 +3,6 @@ #include "dungeon_entity.h" -u8 GetWeather(struct DungeonEntity* pokemon); +u8 GetWeather(struct DungeonEntity *pokemon); #endif diff --git a/ld_script.txt b/ld_script.txt index 0f039b58b..e097fca23 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -232,6 +232,8 @@ SECTIONS { asm/code_80701A4.o(.text); src/dungeon_movement.o(.text); asm/code_807034C.o(.text); + src/dungeon_movement_1.o(.text); + asm/code_807049C.o(.text); src/status_checks_1.o(.text); src/dungeon_capabilities.o(.text); asm/code_8070BC0.o(.text); @@ -240,6 +242,8 @@ SECTIONS { src/dungeon_ai_targeting.o(.text); src/dungeon_pokemon_attributes.o(.text); asm/code_80718D8.o(.text); + src/dungeon_ai_leader.o(.text); + asm/code_8072CF4.o(.text); src/dungeon_ai_items.o(.text); src/code_8073CF0.o(.text); asm/code_8073CF0.o(.text); @@ -250,7 +254,7 @@ SECTIONS { src/code_8077274_1.o(.text); asm/code_8077274_1.o(.text); src/dungeon_ai_movement.o(.text); - asm/code_807AEBC.o(.text); + asm/code_807B2D8.o(.text); src/dungeon_ai_movement_1.o(.text); src/dungeon_ai_attack.o(.text); asm/code_807CABC.o(.text); @@ -264,6 +268,8 @@ SECTIONS { src/code_8083288.o(.text); src/dungeon_range.o(.text); asm/code_808333C.o(.text); + src/dungeon_leader.o(.text); + asm/code_8083654.o(.text); src/dungeon_random.o(.text); src/code_808417C.o(.text); asm/code_808417C.o(.text); diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c index b6f845673..d8d2c597d 100644 --- a/src/code_8098BDC.c +++ b/src/code_8098BDC.c @@ -70,7 +70,7 @@ extern void sub_80961B4(); extern void ClearAllItems_8091FB4(); extern const char *sub_80A2B18(s16); extern u8 sub_8001CC4(u8, u8, u8); -extern void xxx_inv_unk250_random_8091980(u32); +extern void ChooseKecleonShopInventory(u32); extern u8 sub_80023E4(u32); extern void FadeOutAllMusic(u16); extern u8 sub_809C730(); @@ -175,7 +175,7 @@ void sub_8098CC8(void) { temp = 3; } - xxx_inv_unk250_random_8091980(temp); + ChooseKecleonShopInventory(temp); sub_809674C(); sub_80961B4(); ClearAllItems_8091FB4(); diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index aa3c73786..82c17d1a1 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -15,6 +15,7 @@ #include "dungeon_ai_movement.h" #include "dungeon_capabilities_1.h" #include "dungeon_global_data.h" +#include "dungeon_leader.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_util.h" @@ -41,7 +42,6 @@ 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 u8 sub_8075CFC(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern void sub_8041AF4(struct DungeonEntity *); extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, u8 *); @@ -70,8 +70,8 @@ u32 sub_8075818(struct DungeonEntity *entity) { case ENTITY_NONE: case ENTITY_POKEMON: - case 4: - case 5: + case ENTITY_UNK_4: + case ENTITY_UNK_5: break; case ENTITY_TRAP: trapData = (u8*) GetTrapData(subEntity); @@ -300,7 +300,7 @@ u8 sub_8075BF4(struct DungeonEntity * pokemon, s32 sleepTurns) { struct DungeonEntityData *entityData; u32 uVar4; - + uVar4 = 0; if (!EntityExists(pokemon)){ return uVar4; @@ -331,7 +331,7 @@ void sub_8075C58(struct DungeonEntity * pokemon, struct DungeonEntity * target, { u8 sleepStatus; u8 cVar2; - + if (sub_8075CFC(pokemon,target,1,param_4) == '\0') { sleepStatus = target->entityData->sleepStatus; diff --git a/src/dungeon_ai_items.c b/src/dungeon_ai_items.c index ecd662f3e..4456ebc17 100644 --- a/src/dungeon_ai_items.c +++ b/src/dungeon_ai_items.c @@ -280,7 +280,7 @@ void FindStraightThrowableTargets(struct DungeonEntity *pokemon, s32 thrownAIFla } for (i = 0; i < DUNGEON_MAX_POKEMON; i++) { - struct DungeonEntity* targetPokemon = gDungeonGlobalData->allPokemon[i]; + struct DungeonEntity *targetPokemon = gDungeonGlobalData->allPokemon[i]; if (EntityExists(targetPokemon) && pokemon != targetPokemon) { s32 targetingFlags; @@ -317,7 +317,7 @@ void FindRockItemTargets(struct DungeonEntity *pokemon, struct ItemSlot *item, s gNumPotentialTargets = 0; for (i = 0; i < DUNGEON_MAX_POKEMON; i++) { - struct DungeonEntity* targetPokemon = gDungeonGlobalData->allPokemon[i]; + struct DungeonEntity *targetPokemon = gDungeonGlobalData->allPokemon[i]; if (EntityExists(targetPokemon) && pokemon != targetPokemon && CanSee(pokemon, targetPokemon) && CanTarget(pokemon, targetPokemon, FALSE, TRUE) == TARGET_CAPABILITY_CAN_TARGET) { diff --git a/src/dungeon_ai_leader.c b/src/dungeon_ai_leader.c new file mode 100644 index 000000000..ebd78a85c --- /dev/null +++ b/src/dungeon_ai_leader.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "dungeon_ai_leader.h" + +#include "constants/status.h" +#include "constants/targeting.h" +#include "dungeon_ai_targeting.h" +#include "dungeon_leader.h" +#include "dungeon_visibility.h" +#include "pokemon_3.h" + +bool8 TargetLeader(struct DungeonEntity *pokemon) +{ + if (pokemon->entityData->isEnemy) + { + return FALSE; + } + return TacticsTargetLeader(pokemon->entityData->tactic); +} + +struct DungeonEntity* GetLeaderEntityIfVisible(struct DungeonEntity *pokemon) +{ + if (!pokemon->entityData->isEnemy) + { + struct DungeonEntity *leader = GetLeaderEntity(); + if (leader && + leader->entityData->waitingStatus != WAITING_STATUS_DECOY && + CanTarget(pokemon, leader, FALSE, FALSE) == TARGET_CAPABILITY_CANNOT_ATTACK && + CanSee_2(pokemon, leader)) + { + return leader; + } + } + return NULL; +} diff --git a/src/dungeon_ai_movement.c b/src/dungeon_ai_movement.c index 2c626a06c..adedc2b6e 100644 --- a/src/dungeon_ai_movement.c +++ b/src/dungeon_ai_movement.c @@ -3,19 +3,29 @@ #include "constants/direction.h" #include "constants/dungeon_action.h" +#include "constants/status.h" +#include "constants/targeting.h" #include "constants/tactic.h" #include "dungeon_action.h" -#include "dungeon_capabilities_1.h" -#include "dungeon_pokemon_attributes.h" -#include "dungeon_random.h" +#include "dungeon_ai_leader.h" #include "dungeon_ai_movement_1.h" #include "dungeon_ai_targeting.h" +#include "dungeon_capabilities_1.h" +#include "dungeon_global_data.h" +#include "dungeon_map_access.h" +#include "dungeon_movement_1.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_random.h" #include "dungeon_util.h" -#include "item.h" -#include "number_util.h" +#include "dungeon_visibility.h" #include "map.h" +#include "number_util.h" +#include "position_util.h" + +#define INFINITY 999 +#define CHECK_VISIBILITY_DISTANCE 5 +#define CORRIDOR_VISIBILITY 2 -extern bool8 ChooseTargetPosition(struct DungeonEntity *pokemon); extern void DecideMovement(struct DungeonEntity *pokemon, bool8 showRunAwayEffect); void MoveIfPossible(struct DungeonEntity *pokemon, bool8 showRunAwayEffect) @@ -78,31 +88,254 @@ void MoveIfPossible(struct DungeonEntity *pokemon, bool8 showRunAwayEffect) bool8 CanTakeItem(struct DungeonEntity *pokemon) { - struct MapTile *mapTile; - struct ItemSlot *item; - struct DungeonEntity *mapEntity; - struct DungeonEntityData *entityData; - - entityData = pokemon->entityData; - if (EntityExists(pokemon) && !CannotUseItems(pokemon)) { + struct DungeonEntityData *pokemonData = pokemon->entityData; + struct MapTile *mapTile; + struct DungeonEntity *mapObject; + if (!EntityExists(pokemon) || CannotUseItems(pokemon)) + { + return FALSE; + } mapTile = GetMapTileForDungeonEntity_2(pokemon); - mapEntity = mapTile->mapObject; - if (mapEntity != NULL) { - switch(GetEntityType(mapEntity)) { + mapObject = mapTile->mapObject; + if (mapObject == NULL) + { + return FALSE; + } + switch (GetEntityType(mapObject)) + { case ENTITY_NONE: case ENTITY_POKEMON: case ENTITY_TRAP: - case 4: - case 5: + case ENTITY_UNK_4: + case ENTITY_UNK_5: break; case ENTITY_ITEM: - if ((!entityData->isLeader && !(entityData->heldItem.itemFlags & ITEM_FLAG_EXISTS) && - ((mapTile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) || !entityData->isEnemy)) && - (item = GetItemData(mapEntity), !(item->itemFlags & ITEM_FLAG_FOR_SALE))) { + if (!pokemonData->isLeader && + !(pokemonData->heldItem.itemFlags & ITEM_FLAG_EXISTS) && + ((mapTile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) || !pokemonData->isEnemy) && + !(GetItemData(mapObject)->itemFlags & ITEM_FLAG_FOR_SALE)) + { return TRUE; } - } + break; } - } - return FALSE; + return FALSE; +} + +bool8 ChooseTargetPosition(struct DungeonEntity *pokemon) +{ + struct DungeonEntityData *pokemonData = pokemon->entityData; + if (!TargetLeader(pokemon)) + { + struct DungeonEntity **possibleTargets; + s32 maxPossibleTargets; + s32 targetIndex; + bool8 canCrossWalls; + s32 targetDistance; + s32 i; + if (gDungeonGlobalData->decoyActive) + { + possibleTargets = gDungeonGlobalData->allPokemon; + maxPossibleTargets = DUNGEON_MAX_POKEMON; + } + else if (pokemonData->isEnemy) + { + possibleTargets = gDungeonGlobalData->teamPokemon; + maxPossibleTargets = MAX_TEAM_MEMBERS; + } + else + { + possibleTargets = gDungeonGlobalData->wildPokemon; + maxPossibleTargets = DUNGEON_MAX_WILD_POKEMON; + } + canCrossWalls = CanCrossWalls(pokemon); + targetIndex = -1; + targetDistance = INFINITY; + for (i = 0; i < maxPossibleTargets; i++) + { + struct DungeonEntity *target = possibleTargets[i]; + if (EntityExists(target) && target->entityData->clientType == CLIENT_TYPE_NONE) + { + if (gDungeonGlobalData->decoyActive) + { + if (CanTarget(pokemon, target, FALSE, TRUE) != TARGET_CAPABILITY_CAN_TARGET) + { + continue; + } + } + else if (!pokemonData->isEnemy && target->entityData->immobilizeStatus == IMMOBILIZE_STATUS_PETRIFIED) + { + continue; + } + if (target->entityData->shopkeeperMode != SHOPKEEPER_FRIENDLY) + { + s32 currentDistance; + if (canCrossWalls) + { + s32 distance = pokemon->posWorld.x - target->posWorld.x; + if (distance < 0) + { + distance = -distance; + } + if (distance > CHECK_VISIBILITY_DISTANCE) + { + goto checkCanSee; + } + distance = pokemon->posWorld.y - target->posWorld.y; + if (distance < 0) + { + distance = -distance; + } + if (distance > CHECK_VISIBILITY_DISTANCE) + { + goto checkCanSee; + } + } + else + { + checkCanSee: + if (!CanSee_2(pokemon, target)) + { + continue; + } + } + currentDistance = GetDistance(&pokemon->posWorld, &target->posWorld); + if (targetDistance > currentDistance) + { + targetDistance = currentDistance; + targetIndex = i; + if (targetDistance < 2) + { + break; + } + } + } + } + } + if (targetIndex > -1) + { + pokemonData->movementAction = MOVEMENT_ACTION_FOLLOW; + pokemonData->targetMovePosition = possibleTargets[targetIndex]->posWorld; + pokemonData->targetPokemon = possibleTargets[targetIndex]; + pokemonData->targetPokemonSpawnIndex = pokemonData->targetPokemon->spawnIndex; + pokemonData->hasTarget = TRUE; + pokemonData->moveRandomly = FALSE; + if (HasTactic(pokemon, TACTIC_KEEP_YOUR_DISTANCE) && !CanSeeTeammate(pokemon)) + { + s32 distanceX = pokemon->posWorld.x - possibleTargets[targetIndex]->posWorld.x; + if (distanceX < 0) + { + distanceX = -distanceX; + } + if (distanceX < 2) + { + s32 distanceY = pokemon->posWorld.y - possibleTargets[targetIndex]->posWorld.y; + if (distanceY < 0) + { + distanceY = -distanceY; + } + if (distanceY < 2) + { + pokemonData->turnAround = TRUE; + } + } + } + return TRUE; + } + } + if (!HasTactic(pokemon, TACTIC_GO_THE_OTHER_WAY)) + { + do + { + if (!pokemonData->isEnemy) + { + struct DungeonEntity *leader = GetLeaderEntityIfVisible(pokemon); + if (EntityExists(leader)) + { + pokemonData->movementAction = MOVEMENT_ACTION_FOLLOW; + pokemonData->targetMovePosition = leader->posWorld; + pokemonData->targetPokemon = leader; + pokemonData->targetPokemonSpawnIndex = leader->spawnIndex; + pokemonData->moveRandomly = FALSE; + return TRUE; + } + } + } while (0); + } + else if (pokemonData->isLeader) + { + // This item targeting code is never reached because the leader is never AI-controlled. + u8 roomIndex; + s32 minX, minY, maxX, maxY, x, y, maxY2; + if (gDungeonGlobalData->visibility) { + // Dead code. + u8 a = -a; + } + roomIndex = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y)->roomIndex; + if (roomIndex == CORRIDOR_ROOM_INDEX) + { + do + { + minX = pokemon->posWorld.x - CORRIDOR_VISIBILITY; + minY = pokemon->posWorld.y - CORRIDOR_VISIBILITY; + maxX = pokemon->posWorld.x + CORRIDOR_VISIBILITY; + maxY = pokemon->posWorld.y + CORRIDOR_VISIBILITY; + } while (0); + } + else + { + struct MapRoom *room = &gDungeonGlobalData->roomData[roomIndex]; + minX = room->startX - 1; + minY = room->startY - 1; + maxX = room->endX + 1; + maxY = room->endY + 1; + } + maxY2 = maxY; + for (y = minY; y <= maxY2; y++) + { + for (x = minX; x <= maxX; x++) + { + struct DungeonEntity *mapObject = GetMapTile_2(x, y)->mapObject; + if (mapObject && GetEntityType(mapObject) == ENTITY_ITEM) + { + pokemonData->movementAction = MOVEMENT_ACTION_TAKE_ITEM; + pokemonData->targetMovePosition.x = x; + pokemonData->targetMovePosition.y = y; + pokemonData->targetPokemon = NULL; + pokemonData->targetPokemonSpawnIndex = 0; + pokemonData->moveRandomly = FALSE; + return TRUE; + } + } + } + } + if ((u8) (pokemonData->movementAction - 1) <= 1) + { + if (pokemonData->targetPokemon) + { + if (pokemonData->targetPokemon->spawnIndex == pokemonData->targetPokemonSpawnIndex) + { + struct DungeonEntityData *targetData = pokemonData->targetPokemon->entityData; + s32 i; + for (i = 0; i < NUM_PREVIOUS_POSITIONS; i++) + { + if (InSameRoom(pokemon, &targetData->previousPositions[i])) + { + pokemonData->movementAction = MOVEMENT_ACTION_WANDER; + pokemonData->targetMovePosition = targetData->previousPositions[i]; + pokemonData->moveRandomly = FALSE; + return TRUE; + } + } + } + else + { + pokemonData->movementAction = MOVEMENT_ACTION_FACE_RANDOM_DIRECTION; + pokemonData->targetPokemon = NULL; + pokemonData->targetPokemonSpawnIndex = 0; + } + } + } + Wander(pokemon); + return TRUE; } diff --git a/src/dungeon_ai_targeting.c b/src/dungeon_ai_targeting.c index f53cc198d..4df7d7e16 100644 --- a/src/dungeon_ai_targeting.c +++ b/src/dungeon_ai_targeting.c @@ -177,42 +177,61 @@ bool8 CanMoveForward(struct DungeonEntity *pokemon, s32 direction, bool8 *pokemo bool8 IsAtJunction(struct DungeonEntity *pokemon) { - char cVar2; - u32 crossableTerrain; - struct MapTile *mapTile; - struct DungeonEntityData *iVar7; - - crossableTerrain = GetCrossableTerrain(pokemon->entityData->entityID); - if (!IsFixedDungeon()) { - if ((pokemon->entityData->transformStatus == TRANSFORM_STATUS_MOBILE) || (HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) { - crossableTerrain = CROSSABLE_TERRAIN_WALL; + u32 crossableTerrain = GetCrossableTerrain(pokemon->entityData->entityID); + 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)) + { + crossableTerrain = CROSSABLE_TERRAIN_CREVICE; + } + else if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) + { + crossableTerrain = CROSSABLE_TERRAIN_WALL; + } } - else if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) { - crossableTerrain = CROSSABLE_TERRAIN_CREVICE; - } - else if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) { - crossableTerrain = CROSSABLE_TERRAIN_WALL; - } - } - if (crossableTerrain == CROSSABLE_TERRAIN_WALL) { - iVar7 = pokemon->entityData; - iVar7->mobileTurnTimer += DungeonRandomCapped(100); - if (iVar7->mobileTurnTimer < 200) { - return FALSE; + if (crossableTerrain == CROSSABLE_TERRAIN_WALL) + { + struct DungeonEntityData *pokemonData = pokemon->entityData; + pokemonData->mobileTurnTimer += DungeonRandomCapped(100); + if (pokemonData->mobileTurnTimer < 200) + { + return FALSE; + } + else + { + pokemonData->mobileTurnTimer = 0; + } } else - iVar7->mobileTurnTimer = 0; - } - else { - if ((gDungeonWaterType[gDungeonGlobalData->tileset] == DUNGEON_WATER_TYPE_LAVA) - && (crossableTerrain == CROSSABLE_TERRAIN_LIQUID) - && (HasIQSkill(pokemon, IQ_SKILL_LAVA_EVADER))) { - crossableTerrain = CROSSABLE_TERRAIN_REGULAR; + { + struct MapTile *mapTile; + char canMoveAdjacent; + if (gDungeonWaterType[gDungeonGlobalData->tileset] == DUNGEON_WATER_TYPE_LAVA + && crossableTerrain == CROSSABLE_TERRAIN_LIQUID + && HasIQSkill(pokemon, IQ_SKILL_LAVA_EVADER)) + { + crossableTerrain = CROSSABLE_TERRAIN_REGULAR; + } + mapTile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); + canMoveAdjacent = mapTile->canMoveAdjacent[crossableTerrain]; + /* + Check for configurations of open tiles that are considered junctions; i.e., shaped like a 'T' or '+'. + X=Wall, O=Open + + 0x54 0x51 0x45 0x15 0x55 + XOX XOX XXX XOX XOX + OOO OOX OOO XOO OOO + XXX XOX XOX XOX XOX + */ + if (canMoveAdjacent != 0x54 && canMoveAdjacent != 0x51 && canMoveAdjacent != 0x45 && canMoveAdjacent != 0x15 && canMoveAdjacent != 0x55) + { + return FALSE; + } } - mapTile = GetMapTile_1(pokemon->posWorld.x, pokemon->posWorld.y); - cVar2 = mapTile->canMoveAdjacent[crossableTerrain]; - if ((cVar2 != 0x54) && (cVar2 != 0x51) && (cVar2 != 0x45) && (cVar2 != 0x15) && (cVar2 != 0x55)) return FALSE; - } return TRUE; } diff --git a/src/dungeon_items.c b/src/dungeon_items.c index 7e8366857..30ae45401 100644 --- a/src/dungeon_items.c +++ b/src/dungeon_items.c @@ -2,8 +2,9 @@ #include "dungeon_items.h" #include "dungeon_capabilities.h" -#include "dungeon_random.h" #include "dungeon_global_data.h" +#include "dungeon_leader.h" +#include "dungeon_random.h" #include "dungeon_util.h" #include "team_inventory.h" #include "pokemon.h" @@ -18,7 +19,6 @@ extern u8 *gUnknown_8105434[]; extern u8 sub_8046D70(void); extern s32 sub_8052B8C(u32, u8 *, u32); -extern struct DungeonEntity *GetLeaderEntity(void); extern void sub_80861A8(void); extern void PrintFieldMessage(u32, u8 *, u32); extern void sub_803E708(u32, u32); @@ -103,7 +103,7 @@ void MusicBoxCreation(void) struct DungeonEntity *entity; s32 indexes[3]; - + createMusicBox = FALSE; do { musicBoxOnce = FALSE; diff --git a/src/dungeon_leader.c b/src/dungeon_leader.c new file mode 100644 index 000000000..5bff54220 --- /dev/null +++ b/src/dungeon_leader.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "dungeon_leader.h" + +#include "dungeon_global_data.h" +#include "dungeon_util.h" + +extern struct DungeonEntity *gLeaderPokemon; + +struct DungeonEntity* GetLeaderEntity() +{ + struct DungeonEntity *leader = gLeaderPokemon; + if (leader == NULL) + { + s32 i; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) + { + struct DungeonEntity *currentPokemon = gDungeonGlobalData->teamPokemon[i]; + if (EntityExists(currentPokemon) && currentPokemon->entityData->isLeader) + { + gLeaderPokemon = currentPokemon; + return currentPokemon; + } + } + return NULL; + } + return leader; +} diff --git a/src/dungeon_movement_1.c b/src/dungeon_movement_1.c new file mode 100644 index 000000000..4d2635d32 --- /dev/null +++ b/src/dungeon_movement_1.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "dungeon_movement_1.h" + +#include "constants/item.h" +#include "constants/status.h" +#include "dungeon_items.h" +#include "dungeon_movement.h" +#include "map.h" + +bool8 CanCrossWalls(struct DungeonEntity *pokemon) +{ + struct DungeonEntityData *pokemonData = pokemon->entityData; + struct DungeonEntityData *pokemonData2 = pokemonData; + if (pokemonData2->transformStatus == TRANSFORM_STATUS_MOBILE) + { + return TRUE; + } + if (HasItem(pokemon, ITEM_ID_MOBILE_SCARF)) + { + return TRUE; + } + if (GetCrossableTerrain(pokemonData2->entityID) == CROSSABLE_TERRAIN_WALL) + { + return TRUE; + } + return FALSE; +} diff --git a/src/items.c b/src/items.c index 8a55705bd..a09c83ec5 100644 --- a/src/items.c +++ b/src/items.c @@ -13,6 +13,9 @@ #include +#define GREEN_KECLEON_SHOP_SIZE 8 +#define PURPLE_KECLEON_SHOP_SIZE 4 + extern struct TeamInventory *gTeamInventory_203B460; extern struct TeamInventory gUnknown_20389A8; extern struct FileArchive gSystemFileArchive; @@ -46,8 +49,8 @@ extern void sub_80078A4(u32, u32, u32, u32, u32); extern void sub_80073E0(u32); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); extern s32 sub_8091E94(s32 a1, s32 a2, s32 a3); -extern void xxx_sort_inv_unk230_80918EC(); -bool8 xxx_insert_unk250_8091C1C(u8); +extern void SortGreenKecleonShopInventory(); +bool8 AddPurpleKecleonShopItem(u8); void LoadItemParameters(void) { @@ -1014,7 +1017,7 @@ void xxx_fill_unk230_gaps() } } -void xxx_sort_inv_unk230_80918EC() { +void SortGreenKecleonShopInventory() { s32 i; for (i = 0; i < 7; i++) { @@ -1031,24 +1034,24 @@ void xxx_sort_inv_unk230_80918EC() { } } -void xxx_inv_unk250_random_8091980(u8 a1) { +void ChooseKecleonShopInventory(u8 a1) { u32 data[4]; s32 i; memcpy(data, gUnknown_81097E8, 4 * sizeof(u32)); - for (i = 0; i < 8; i++) { + for (i = 0; i < GREEN_KECLEON_SHOP_SIZE; i++) { xxx_init_unk230_substruct(i); } - for (i = 0; i < 8; i++) { + for (i = 0; i < GREEN_KECLEON_SHOP_SIZE; i++) { s32 rand_1 = RandomCapped(9999); s32 rand_2 = RandomCapped(9999); - xxx_insert_unk230_80919FC(sub_8091E94(data[a1], rand_1, rand_2)); + AddGreenKecleonShopItem(sub_8091E94(data[a1], rand_1, rand_2)); } - xxx_sort_inv_unk230_80918EC(); - sub_8091BB4(a1); + SortGreenKecleonShopInventory(); + ChoosePurpleKecleonShopInventory(a1); } -bool8 xxx_insert_unk230_80919FC(u8 itemIndex) { +bool8 AddGreenKecleonShopItem(u8 itemIndex) { struct HeldItem held; s32 i; @@ -1113,7 +1116,7 @@ void xxx_fill_inv_unk250_gaps_8091AA8(void) { } } -void xxx_sort_inv_unk250_8091B20() { +void SortPurpleKecleonShopInventory() { s32 i; for (i = 0; i < 3; i++) { @@ -1130,23 +1133,23 @@ void xxx_sort_inv_unk250_8091B20() { } } -void sub_8091BB4(u8 index) { +void ChoosePurpleKecleonShopInventory(u8 index) { u32 data[4]; s32 i; memcpy(data, gUnknown_81097F8, 4 * sizeof(u32)); - for (i = 0; i < 4; i++) { + for (i = 0; i < PURPLE_KECLEON_SHOP_SIZE; i++) { xxx_init_inv_unk250_at_8091A74(i); } - for (i = 0; i < 4; i++) { + for (i = 0; i < PURPLE_KECLEON_SHOP_SIZE; i++) { s32 rand_1 = RandomCapped(9999); s32 rand_2 = RandomCapped(9999); - xxx_insert_unk250_8091C1C(sub_8091E94(data[index], rand_1, rand_2)); + AddPurpleKecleonShopItem(sub_8091E94(data[index], rand_1, rand_2)); } - xxx_sort_inv_unk250_8091B20(); + SortPurpleKecleonShopInventory(); } -bool8 xxx_insert_unk250_8091C1C(u8 itemIndex) { +bool8 AddPurpleKecleonShopItem(u8 itemIndex) { struct HeldItem held; s32 i; diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 251a69f13..554be9bdf 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -10,7 +10,7 @@ extern u32 gIQSkillNames[]; extern u32 gIQSkillDescriptions[]; extern u32 gTacticsDescriptions[]; extern u8 *gTactics[]; -extern u8 gTacticsTargetLeader[]; +extern bool8 gTacticsTargetLeader[]; extern s16 gReqTacticLvls[]; extern s32 gReqIQSkillPts[]; @@ -481,9 +481,9 @@ u32 GetTacticsDescription(u8 r0) return gTacticsDescriptions[r0]; } -u8 TacticsTargetLeader(u8 r0) +bool8 TacticsTargetLeader(u8 tactic) { - return gTacticsTargetLeader[r0]; + return gTacticsTargetLeader[tactic]; } void GetAvailTacticsforLvl(u8 *tacticsBuffer, s32 pokeLevel) diff --git a/src/status_checks_1.c b/src/status_checks_1.c index b2c12e6df..f920ec4e3 100644 --- a/src/status_checks_1.c +++ b/src/status_checks_1.c @@ -171,7 +171,7 @@ bool8 IsSleeping(struct DungeonEntity *pokemon) return TRUE; } -bool8 HasQuarterHPOrLess(struct DungeonEntity* pokemon) +bool8 HasQuarterHPOrLess(struct DungeonEntity *pokemon) { struct DungeonEntityData *pokemonData = pokemon->entityData; struct DungeonEntityData *pokemonData2 = pokemon->entityData; diff --git a/src/weather.c b/src/weather.c index 9e9e35be6..edc21e839 100644 --- a/src/weather.c +++ b/src/weather.c @@ -11,7 +11,7 @@ extern void TriggerWeatherAbilities(void); extern void sub_807EAA0(u32, u32); void sub_807E5E4(u8); -u8 GetWeather(struct DungeonEntity* pokemon) +u8 GetWeather(struct DungeonEntity *pokemon) { if (pokemon != NULL && HasItem(pokemon, ITEM_ID_WEATHER_BAND)) {