From 453618864e685eacae640dc2b317a645422264e2 Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Thu, 13 Jan 2022 22:56:30 -0500 Subject: Decomped HasStatusAffectingActions() --- asm/code_8057824.s | 4 +- asm/code_807001C.s | 1400 ------------------------------------------ asm/code_80701A4.s | 1199 ++++++++++++++++++++++++++++++++++++ asm/code_8070D04.s | 6 +- asm/code_80718D8.s | 2 +- data/data_80F59C8.s | 60 +- include/code_80521D0.h | 8 + include/dungeon_entity.h | 2 +- include/status_checks.h | 4 +- include/status_checks_1.h | 9 + ld_script.txt | 3 +- src/code_8040094.c | 10 +- src/code_80521D0.c | 22 +- src/dungeon_ai_item_weight.c | 2 +- src/dungeon_movement.c | 8 +- src/friend_list_menu.c | 2 +- src/status_checks.c | 109 +++- src/status_checks_1.c | 44 ++ 18 files changed, 1425 insertions(+), 1469 deletions(-) delete mode 100644 asm/code_807001C.s create mode 100644 asm/code_80701A4.s create mode 100644 include/code_80521D0.h create mode 100644 include/status_checks_1.h create mode 100644 src/status_checks_1.c diff --git a/asm/code_8057824.s b/asm/code_8057824.s index a456d99..84d3407 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -12949,7 +12949,7 @@ _0805E0C2: mov r0, r10 adds r1, r5, 0 str r3, [sp, 0x20] - bl CannotMoveForward + bl CanMoveForward2 lsls r0, 24 ldr r3, [sp, 0x20] cmp r0, 0 @@ -14878,7 +14878,7 @@ _0805EFF6: bne _0805F008 mov r0, r8 adds r1, r4, 0 - bl CannotMoveForward + bl CanMoveForward2 lsls r0, 24 cmp r0, 0 beq _0805F014 diff --git a/asm/code_807001C.s b/asm/code_807001C.s deleted file mode 100644 index a9c4a93..0000000 --- a/asm/code_807001C.s +++ /dev/null @@ -1,1400 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start HasStatusAffectingActions -HasStatusAffectingActions: - push {r4-r6,lr} - adds r5, r0, 0 - ldr r4, [r5, 0x70] - ldr r0, _08070050 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r4, 0 - adds r0, 0x44 - movs r1, 0x1 - bl SetAction - adds r0, r4, 0 - adds r0, 0xA8 - ldrb r0, [r0] - cmp r0, 0x3 - bne _08070042 - b _0807019C -_08070042: - cmp r0, 0x3 - bgt _08070054 - cmp r0, 0x1 - bne _0807004C - b _0807019C -_0807004C: - b _0807005A - .align 2, 0 -_08070050: .4byte gAvailablePokemonNames -_08070054: - cmp r0, 0x5 - bne _0807005A - b _0807019C -_0807005A: - adds r0, r4, 0 - adds r0, 0xB0 - ldrb r0, [r0] - cmp r0, 0x3 - beq _0807008C - cmp r0, 0x3 - bgt _0807006E - cmp r0, 0x1 - beq _0807007A - b _080700AC -_0807006E: - cmp r0, 0x4 - beq _0807009C - cmp r0, 0x6 - bne _08070078 - b _0807019C -_08070078: - b _080700AC -_0807007A: - ldr r0, _08070088 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage - b _0807019C - .align 2, 0 -_08070088: .4byte gFrozenMessage -_0807008C: - ldr r0, _08070098 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage - b _0807019C - .align 2, 0 -_08070098: .4byte gWrappedAroundMessage -_0807009C: - ldr r0, _080700A8 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage - b _0807019C - .align 2, 0 -_080700A8: .4byte gWrappedByMessage -_080700AC: - adds r0, r4, 0 - adds r0, 0xBC - ldrb r0, [r0] - cmp r0, 0x3 - beq _080700D4 - cmp r0, 0x7 - beq _080700E4 - adds r0, r4, 0 - adds r0, 0xC0 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080700F4 - ldr r0, _080700D0 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage - b _0807019C - .align 2, 0 -_080700D0: .4byte gBideMessage -_080700D4: - ldr r0, _080700E0 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage - b _0807019C - .align 2, 0 -_080700E0: .4byte gPausedMessage -_080700E4: - ldr r0, _080700F0 - ldr r1, [r0] - adds r0, r5, 0 - bl SendMessage - b _0807019C - .align 2, 0 -_080700F0: .4byte gInfatuatedMessage -_080700F4: - adds r0, r4, 0 - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x2 - bne _0807012E - adds r0, r4, 0 - adds r0, 0x44 - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl SetWalkAction - movs r0, 0x8 - bl DungeonRandomCapped - adds r1, r4, 0 - adds r1, 0x46 - strb r0, [r1] - ldrh r1, [r5, 0x4] - movs r2, 0xB6 - lsls r2, 1 - adds r0, r4, r2 - strh r1, [r0] - ldrh r0, [r5, 0x6] - subs r0, 0x1 - movs r1, 0xB7 - lsls r1, 1 - adds r2, r4, r1 - strh r0, [r2] - b _0807019C -_0807012E: - ldrb r0, [r4, 0x8] - cmp r0, 0x1 - beq _0807019C - adds r0, r4, 0 - adds r0, 0xE8 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0807017C - adds r6, r4, 0 - adds r6, 0x46 - ldrb r1, [r6] - adds r0, r5, 0 - bl CannotMoveForward - lsls r0, 24 - cmp r0, 0 - bne _08070166 - movs r0, 0x2 - bl DungeonRandomCapped - cmp r0, 0 - beq _08070174 - movs r0, 0x8 - bl DungeonRandomCapped - movs r1, 0x7 - ands r1, r0 - strb r1, [r6] -_08070166: - adds r0, r4, 0 - adds r0, 0x44 - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl SetWalkAction - b _0807019C -_08070174: - adds r0, r5, 0 - bl DecideAttack - b _0807019C -_0807017C: - cmp r0, 0x2 - beq _08070184 - movs r0, 0 - b _0807019E -_08070184: - adds r0, r4, 0 - adds r0, 0x44 - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl SetWalkAction - movs r0, 0x8 - bl DungeonRandomCapped - adds r1, r4, 0 - adds r1, 0x46 - strb r0, [r1] -_0807019C: - movs r0, 0x1 -_0807019E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end HasStatusAffectingActions - - thumb_func_start sub_80701A4 -sub_80701A4: - push {r4-r7,lr} - adds r7, r0, 0 - ldr r6, [r7, 0x70] - movs r4, 0 - ldr r0, _080701D4 - adds r1, r7, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r6, 0 - adds r0, 0x44 - movs r1, 0x1 - bl SetAction - adds r0, r6, 0 - adds r0, 0xA8 - ldrb r0, [r0] - cmp r0, 0x3 - beq _080701DC - cmp r0, 0x3 - bgt _080701D8 - cmp r0, 0x1 - beq _080701DC - b _080701E4 - .align 2, 0 -_080701D4: .4byte gAvailablePokemonNames -_080701D8: - cmp r0, 0x5 - bne _080701E4 -_080701DC: - ldr r0, _080701E0 - b _08070278 - .align 2, 0 -_080701E0: .4byte gUnknown_80F95EC -_080701E4: - adds r0, r6, 0 - adds r0, 0xB0 - ldrb r0, [r0] - cmp r0, 0x3 - beq _0807020C - cmp r0, 0x3 - bgt _080701F8 - cmp r0, 0x1 - beq _08070202 - b _0807021C -_080701F8: - cmp r0, 0x4 - beq _08070214 - cmp r0, 0x6 - beq _08070280 - b _0807021C -_08070202: - ldr r0, _08070208 - b _08070278 - .align 2, 0 -_08070208: .4byte gFrozenMessage -_0807020C: - ldr r0, _08070210 - b _08070278 - .align 2, 0 -_08070210: .4byte gWrappedAroundMessage -_08070214: - ldr r0, _08070218 - b _08070278 - .align 2, 0 -_08070218: .4byte gWrappedByMessage -_0807021C: - adds r0, r6, 0 - adds r0, 0xBC - ldrb r0, [r0] - cmp r0, 0x8 - bhi _0807026C - lsls r0, 2 - ldr r1, _08070230 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08070230: .4byte _08070234 - .align 2, 0 -_08070234: - .4byte _0807026C - .4byte _0807026C - .4byte _08070258 - .4byte _0807025C - .4byte _0807026C - .4byte _0807026C - .4byte _0807026C - .4byte _08070264 - .4byte _0807026C -_08070258: - movs r4, 0x1 - b _0807026C -_0807025C: - ldr r0, _08070260 - b _08070278 - .align 2, 0 -_08070260: .4byte gPausedMessage -_08070264: - ldr r0, _08070268 - b _08070278 - .align 2, 0 -_08070268: .4byte gInfatuatedMessage -_0807026C: - adds r0, r6, 0 - adds r0, 0xC0 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08070288 - ldr r0, _08070284 -_08070278: - ldr r1, [r0] - adds r0, r7, 0 - bl SendMessage -_08070280: - movs r0, 0x1 - b _08070322 - .align 2, 0 -_08070284: .4byte gBideMessage -_08070288: - cmp r0, 0 - beq _08070320 - cmp r0, 0xB - beq _08070320 - cmp r0, 0xC - beq _08070320 - cmp r4, 0 - beq _080702A8 - ldr r0, _080702A4 - ldr r1, [r0] - adds r0, r7, 0 - bl SendMessage - b _0807031A - .align 2, 0 -_080702A4: .4byte gPtrMoveInterruptedMessage -_080702A8: - movs r5, 0 - movs r0, 0x8C - lsls r0, 1 - adds r4, r6, r0 -_080702B0: - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08070312 - adds r0, r7, 0 - adds r1, r4, 0 - bl sub_80570AC - lsls r0, 24 - cmp r0, 0 - beq _08070312 - adds r0, r6, 0 - adds r0, 0xC2 - ldrb r0, [r0] - cmp r0, r5 - bne _08070312 - adds r0, r6, 0 - adds r0, 0x44 - movs r1, 0x14 - bl SetAction - adds r3, r5, 0 - adds r7, r6, 0 - adds r7, 0x50 - cmp r5, 0 - ble _0807030E - ldrb r1, [r4] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0807030E - movs r4, 0x2 - lsls r0, r5, 3 - movs r1, 0x8C - lsls r1, 1 - adds r0, r1 - adds r2, r0, r6 -_080702FC: - subs r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - ble _0807030E - ldrb r1, [r2] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _080702FC -_0807030E: - strb r3, [r7] - b _08070280 -_08070312: - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x3 - ble _080702B0 -_0807031A: - adds r0, r7, 0 - bl sub_8079764 -_08070320: - movs r0, 0 -_08070322: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80701A4 - - thumb_func_start GetCrossableTerrain -GetCrossableTerrain: - push {lr} - lsls r0, 16 - asrs r0, 16 - bl GetWalkableTiles - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bhi _0807033E - adds r0, r1, 0 - b _08070344 -_0807033E: - ldr r0, _08070348 - adds r0, r1, r0 - ldrb r0, [r0] -_08070344: - pop {r1} - bx r1 - .align 2, 0 -_08070348: .4byte gUnknown_202F314 - thumb_func_end GetCrossableTerrain - - thumb_func_start sub_807034C -sub_807034C: - push {r4,lr} - adds r4, r1, 0 - lsls r0, 16 - asrs r2, r0, 16 - ldr r0, [r4, 0x10] - cmp r0, 0 - bne _08070398 - ldrh r1, [r4] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08070398 - adds r0, r2, 0 - bl GetCrossableTerrain - lsls r0, 24 - lsrs r2, r0, 24 - ldrh r0, [r4] - movs r1, 0x3 - ands r1, r0 - cmp r2, 0x1 - beq _08070388 - cmp r2, 0x1 - bgt _08070382 - cmp r2, 0 - beq _0807038C - b _08070390 -_08070382: - cmp r2, 0x2 - beq _08070394 - b _08070390 -_08070388: - cmp r1, 0x2 - beq _08070390 -_0807038C: - cmp r1, 0x1 - bne _08070398 -_08070390: - movs r0, 0 - b _0807039A -_08070394: - cmp r1, 0 - bne _08070390 -_08070398: - movs r0, 0x1 -_0807039A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_807034C - - thumb_func_start sub_80703A0 -sub_80703A0: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r7, [r6, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTileAtPosition - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _08070456 - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _08070456 - cmp r0, 0x37 - bgt _08070456 - cmp r1, 0x1F - bgt _08070456 - ldr r0, [r5, 0x10] - cmp r0, 0 - bne _08070456 - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08070456 - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070400 - adds r0, r7, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _0807044E - adds r0, r6, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _0807044E -_08070400: - movs r1, 0x2 - ldrsh r0, [r7, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r6, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070422 - movs r4, 0x2 -_08070422: - adds r0, r6, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070432 - movs r4, 0x3 -_08070432: - cmp r4, 0x1 - beq _08070446 - cmp r4, 0x1 - bgt _08070440 - cmp r4, 0 - beq _0807044A - b _0807044E -_08070440: - cmp r4, 0x2 - beq _08070452 - b _0807044E -_08070446: - cmp r5, 0x2 - beq _0807044E -_0807044A: - cmp r5, 0x1 - bne _08070456 -_0807044E: - movs r0, 0 - b _08070458 -_08070452: - cmp r5, 0 - bne _0807044E -_08070456: - movs r0, 0x1 -_08070458: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80703A0 - - thumb_func_start CanCrossWalls -CanCrossWalls: - push {r4,lr} - adds r1, r0, 0 - ldr r0, [r1, 0x70] - adds r4, r0, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070492 - adds r0, r1, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070492 - movs r1, 0x2 - ldrsh r0, [r4, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08070492 - movs r0, 0 - b _08070494 -_08070492: - movs r0, 0x1 -_08070494: - pop {r4} - pop {r1} - bx r1 - thumb_func_end CanCrossWalls - - thumb_func_start sub_807049C -sub_807049C: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r7, [r6, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTileAtPosition - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0807055A - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _0807055A - cmp r0, 0x37 - bgt _0807055A - cmp r1, 0x1F - bgt _0807055A - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0807055A - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _080704E2 - bl GetEntityType - cmp r0, 0x1 - bne _0807055A -_080704E2: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070504 - adds r0, r7, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070552 - adds r0, r6, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070552 -_08070504: - movs r1, 0x2 - ldrsh r0, [r7, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r6, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070526 - movs r4, 0x2 -_08070526: - adds r0, r6, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070536 - movs r4, 0x3 -_08070536: - cmp r4, 0x1 - beq _0807054A - cmp r4, 0x1 - bgt _08070544 - cmp r4, 0 - beq _0807054E - b _08070552 -_08070544: - cmp r4, 0x2 - beq _08070556 - b _08070552 -_0807054A: - cmp r5, 0x2 - beq _08070552 -_0807054E: - cmp r5, 0x1 - bne _0807055A -_08070552: - movs r0, 0 - b _0807055C -_08070556: - cmp r5, 0 - bne _08070552 -_0807055A: - movs r0, 0x1 -_0807055C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_807049C - - thumb_func_start sub_8070564 -sub_8070564: - push {r4-r6,lr} - adds r4, r1, 0 - ldr r6, [r0, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTileAtPosition - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _080705E6 - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _080705E6 - cmp r0, 0x37 - bgt _080705E6 - cmp r1, 0x1F - bgt _080705E6 - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _080705E6 - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _080705A8 - bl GetEntityType - cmp r0, 0x1 - bne _080705E6 -_080705A8: - movs r1, 0x2 - ldrsh r0, [r6, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r2, r0, 24 - adds r3, r2, 0 - ldrh r0, [r5] - movs r1, 0x3 - ands r1, r0 - adds r0, r1, 0 - cmp r2, 0x1 - beq _080705DE - cmp r2, 0x1 - bgt _080705CC - cmp r2, 0 - beq _080705D8 - b _080705D4 -_080705CC: - cmp r3, 0x3 - bgt _080705D4 - cmp r1, 0 - beq _080705E6 -_080705D4: - movs r0, 0 - b _080705E8 -_080705D8: - cmp r1, 0x1 - bne _080705E6 - b _080705D4 -_080705DE: - cmp r1, 0x2 - beq _080705D4 - cmp r0, 0x1 - beq _080705D4 -_080705E6: - movs r0, 0x1 -_080705E8: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8070564 - - thumb_func_start sub_80705F0 -sub_80705F0: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r7, [r6, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTileAtPosition - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0807069A - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _0807069A - cmp r0, 0x37 - bgt _0807069A - cmp r1, 0x1F - bgt _0807069A - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0807069A - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _08070636 - bl GetEntityType - cmp r0, 0x1 - bne _0807069A -_08070636: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070658 - adds r0, r7, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070696 - adds r0, r6, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070696 -_08070658: - movs r1, 0x2 - ldrsh r0, [r7, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r6, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _0807067A - movs r4, 0x2 -_0807067A: - adds r0, r6, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _0807068A - movs r4, 0x3 -_0807068A: - cmp r4, 0 - blt _08070696 - cmp r4, 0x2 - bgt _08070696 - cmp r5, 0 - beq _0807069A -_08070696: - movs r0, 0 - b _0807069C -_0807069A: - movs r0, 0x1 -_0807069C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80705F0 - - thumb_func_start sub_80706A4 -sub_80706A4: - push {r4-r7,lr} - adds r7, r0, 0 - adds r4, r1, 0 - ldr r6, [r7, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTileAtPosition - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0807076A - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _0807076A - cmp r0, 0x37 - bgt _0807076A - cmp r1, 0x1F - bgt _0807076A - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0807076A - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _080706F2 - bl GetEntityType - cmp r0, 0x1 - bne _0807076A - ldr r0, [r5, 0x10] - ldr r0, [r0, 0x70] - cmp r0, r6 - bne _0807076A -_080706F2: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070714 - adds r0, r6, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070762 - adds r0, r7, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070762 -_08070714: - movs r1, 0x2 - ldrsh r0, [r6, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r7, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070736 - movs r4, 0x2 -_08070736: - adds r0, r7, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070746 - movs r4, 0x3 -_08070746: - cmp r4, 0x1 - beq _0807075A - cmp r4, 0x1 - bgt _08070754 - cmp r4, 0 - beq _0807075E - b _08070762 -_08070754: - cmp r4, 0x2 - beq _08070766 - b _08070762 -_0807075A: - cmp r5, 0x2 - beq _08070762 -_0807075E: - cmp r5, 0x1 - bne _0807076A -_08070762: - movs r0, 0 - b _0807076C -_08070766: - cmp r5, 0 - bne _08070762 -_0807076A: - movs r0, 0x1 -_0807076C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80706A4 - - thumb_func_start GetMovementSpeed -GetMovementSpeed: - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, [r6, 0x70] - movs r4, 0 - movs r0, 0x84 - lsls r0, 1 - adds r1, r5, r0 - movs r2, 0x4 -_08070784: - ldrb r0, [r1, 0x5] - cmp r0, 0 - beq _0807078C - subs r4, 0x1 -_0807078C: - ldrb r0, [r1] - cmp r0, 0 - beq _08070794 - adds r4, 0x1 -_08070794: - adds r1, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _08070784 - adds r0, r5, 0 - adds r0, 0xAC - ldrb r0, [r0] - cmp r0, 0x4 - bne _080707A8 - subs r4, 0x1 -_080707A8: - movs r1, 0x2 - ldrsh r0, [r5, r1] - bl GetMoveSpeed - adds r4, r0 - adds r0, r6, 0 - movs r1, 0x6 - bl HasType - lsls r0, 24 - cmp r0, 0 - beq _080707D0 - adds r0, r6, 0 - bl GetWeather - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x7 - bne _080707D0 - adds r4, 0x1 -_080707D0: - movs r0, 0x4 - ldrsh r1, [r5, r0] - ldr r0, _0807081C - cmp r1, r0 - bne _080707DC - adds r4, 0x1 -_080707DC: - movs r0, 0x2 - ldrsh r1, [r5, r0] - movs r0, 0xBE - lsls r0, 1 - cmp r1, r0 - bne _080707FE - ldrb r0, [r5, 0x6] - cmp r0, 0 - beq _080707FE - ldr r0, _08070820 - ldr r0, [r0] - ldr r1, _08070824 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080707FE - adds r4, 0x1 -_080707FE: - cmp r4, 0 - bge _08070804 - movs r4, 0 -_08070804: - cmp r4, 0x4 - ble _0807080A - movs r4, 0x4 -_0807080A: - movs r1, 0x82 - lsls r1, 1 - adds r0, r5, r1 - str r4, [r0] - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0807081C: .4byte 0x000001a3 -_08070820: .4byte gDungeonGlobalData -_08070824: .4byte 0x0000066e - thumb_func_end GetMovementSpeed - - thumb_func_start sub_8070828 -sub_8070828: - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r6, r1, 24 - movs r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08070840 - movs r0, 0 - b _080708AE -_08070840: - adds r0, r4, 0 - movs r1, 0x1B - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0807085E - adds r0, r4, 0 - bl GetWeather - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _0807085E - movs r5, 0x1 -_0807085E: - adds r0, r4, 0 - movs r1, 0x4A - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0807087C - adds r0, r4, 0 - bl GetWeather - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0807087C - movs r5, 0x1 -_0807087C: - cmp r6, 0 - beq _080708A0 - ldr r0, [r4, 0x70] - movs r1, 0x40 - adds r2, r5, 0 - bl SetVisualFlags - lsls r0, 24 - cmp r0, 0 - beq _080708A0 - adds r0, r4, 0 - bl sub_80429B4 - ldr r0, _080708A8 - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage -_080708A0: - cmp r5, 0 - bne _080708AC - movs r0, 0x1 - b _080708AE - .align 2, 0 -_080708A8: .4byte gUnknown_80FEE80 -_080708AC: - movs r0, 0x2 -_080708AE: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8070828 - - thumb_func_start SetMessageArgument_2 -SetMessageArgument_2: - push {r4,r5,lr} - adds r3, r0, 0 - adds r4, r2, 0 - ldr r0, _080708E8 - ldr r2, [r0] - ldr r5, _080708EC - adds r0, r2, r5 - ldrb r0, [r0] - cmp r0, 0 - bne _080708DC - adds r5, 0x6 - adds r0, r2, r5 - ldrb r0, [r0] - cmp r0, 0 - bne _080708DC - adds r0, r1, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080708F4 -_080708DC: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _080708F4 - ldr r0, _080708F0 - b _08070900 - .align 2, 0 -_080708E8: .4byte gDungeonGlobalData -_080708EC: .4byte 0x0001820a -_080708F0: .4byte gUnknown_80F8988 -_080708F4: - adds r0, r1, 0 - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x2 - bne _08070910 - ldr r0, _0807090C -_08070900: - ldr r1, [r0] - adds r0, r3, 0 - bl strcpy - b _0807095A - .align 2, 0 -_0807090C: .4byte gUnknown_80F8968 -_08070910: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _08070942 - adds r0, r1, 0 - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x4A - beq _0807092A - adds r0, r1, 0 - adds r0, 0xA4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08070936 -_0807092A: - movs r0, 0x4 - ldrsh r1, [r1, r0] - adds r0, r3, 0 - bl CopyYellowSpeciesNametoBuffer - b _0807095A -_08070936: - movs r5, 0x4 - ldrsh r1, [r1, r5] - adds r0, r3, 0 - bl CopyCyanSpeciesNametoBuffer - b _0807095A -_08070942: - ldr r2, _08070960 - ldrb r1, [r1, 0xA] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08070964 - adds r0, r1 - ldr r1, [r2] - adds r1, r0 - adds r0, r3, 0 - adds r2, r4, 0 - bl sub_808D9DC -_0807095A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08070960: .4byte gRecruitedPokemonRef -_08070964: .4byte 0x00008df8 - thumb_func_end SetMessageArgument_2 - - thumb_func_start sub_8070968 -sub_8070968: - push {r4,lr} - adds r4, r0, 0 - adds r3, r2, 0 - adds r0, r1, 0 - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x2 - bne _08070990 - ldr r1, _08070988 - adds r2, 0x30 - ldr r0, _0807098C - ldr r3, [r0] - adds r0, r4, 0 - bl ExpandPlaceholdersBuffer - b _080709BA - .align 2, 0 -_08070988: .4byte gUnknown_8106FA4 -_0807098C: .4byte gUnknown_80F8974 -_08070990: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _080709A2 - movs r0, 0x4 - ldrsh r1, [r1, r0] - adds r0, r4, 0 - bl CopyCyanSpeciesNametoBuffer - b _080709BA -_080709A2: - ldr r2, _080709C0 - ldrb r1, [r1, 0xA] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080709C4 - adds r0, r1 - ldr r1, [r2] - adds r1, r0 - adds r0, r4, 0 - adds r2, r3, 0 - bl sub_808D9DC -_080709BA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080709C0: .4byte gRecruitedPokemonRef -_080709C4: .4byte 0x00008df8 - thumb_func_end sub_8070968 - - thumb_func_start sub_80709C8 -sub_80709C8: - push {r4,lr} - adds r3, r0, 0 - ldr r0, _080709F8 - ldr r2, [r0] - ldr r4, _080709FC - adds r0, r2, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _080709EE - adds r4, 0x6 - adds r0, r2, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _080709EE - adds r0, r1, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08070A04 -_080709EE: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _08070A04 - ldr r0, _08070A00 - b _08070A10 - .align 2, 0 -_080709F8: .4byte gDungeonGlobalData -_080709FC: .4byte 0x0001820a -_08070A00: .4byte gUnknown_80F8994 -_08070A04: - adds r0, r1, 0 - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x2 - bne _08070A20 - ldr r0, _08070A1C -_08070A10: - ldr r1, [r0] - adds r0, r3, 0 - bl strcpy - b _08070A48 - .align 2, 0 -_08070A1C: .4byte gUnknown_80F8974 -_08070A20: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _08070A32 - movs r0, 0x4 - ldrsh r1, [r1, r0] - adds r0, r3, 0 - bl CopySpeciesNametoBuffer - b _08070A48 -_08070A32: - ldr r2, _08070A50 - ldrb r1, [r1, 0xA] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08070A54 - adds r0, r1 - ldr r1, [r2] - adds r1, r0 - adds r0, r3, 0 - bl sub_808DA0C -_08070A48: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08070A50: .4byte gRecruitedPokemonRef -_08070A54: .4byte 0x00008df8 - thumb_func_end sub_80709C8 - - .align 2, 0 \ No newline at end of file diff --git a/asm/code_80701A4.s b/asm/code_80701A4.s new file mode 100644 index 0000000..d8549f9 --- /dev/null +++ b/asm/code_80701A4.s @@ -0,0 +1,1199 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_80701A4 +sub_80701A4: + push {r4-r7,lr} + adds r7, r0, 0 + ldr r6, [r7, 0x70] + movs r4, 0 + ldr r0, _080701D4 + adds r1, r7, 0 + movs r2, 0 + bl SetMessageArgument + adds r0, r6, 0 + adds r0, 0x44 + movs r1, 0x1 + bl SetAction + adds r0, r6, 0 + adds r0, 0xA8 + ldrb r0, [r0] + cmp r0, 0x3 + beq _080701DC + cmp r0, 0x3 + bgt _080701D8 + cmp r0, 0x1 + beq _080701DC + b _080701E4 + .align 2, 0 +_080701D4: .4byte gAvailablePokemonNames +_080701D8: + cmp r0, 0x5 + bne _080701E4 +_080701DC: + ldr r0, _080701E0 + b _08070278 + .align 2, 0 +_080701E0: .4byte gUnknown_80F95EC +_080701E4: + adds r0, r6, 0 + adds r0, 0xB0 + ldrb r0, [r0] + cmp r0, 0x3 + beq _0807020C + cmp r0, 0x3 + bgt _080701F8 + cmp r0, 0x1 + beq _08070202 + b _0807021C +_080701F8: + cmp r0, 0x4 + beq _08070214 + cmp r0, 0x6 + beq _08070280 + b _0807021C +_08070202: + ldr r0, _08070208 + b _08070278 + .align 2, 0 +_08070208: .4byte gPtrFrozenMessage +_0807020C: + ldr r0, _08070210 + b _08070278 + .align 2, 0 +_08070210: .4byte gPtrWrappedAroundMessage +_08070214: + ldr r0, _08070218 + b _08070278 + .align 2, 0 +_08070218: .4byte gPtrWrappedByMessage +_0807021C: + adds r0, r6, 0 + adds r0, 0xBC + ldrb r0, [r0] + cmp r0, 0x8 + bhi _0807026C + lsls r0, 2 + ldr r1, _08070230 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08070230: .4byte _08070234 + .align 2, 0 +_08070234: + .4byte _0807026C + .4byte _0807026C + .4byte _08070258 + .4byte _0807025C + .4byte _0807026C + .4byte _0807026C + .4byte _0807026C + .4byte _08070264 + .4byte _0807026C +_08070258: + movs r4, 0x1 + b _0807026C +_0807025C: + ldr r0, _08070260 + b _08070278 + .align 2, 0 +_08070260: .4byte gPtrPausedMessage +_08070264: + ldr r0, _08070268 + b _08070278 + .align 2, 0 +_08070268: .4byte gPtrInfatuatedMessage +_0807026C: + adds r0, r6, 0 + adds r0, 0xC0 + ldrb r0, [r0] + cmp r0, 0x1 + bne _08070288 + ldr r0, _08070284 +_08070278: + ldr r1, [r0] + adds r0, r7, 0 + bl SendMessage +_08070280: + movs r0, 0x1 + b _08070322 + .align 2, 0 +_08070284: .4byte gPtrBideMessage +_08070288: + cmp r0, 0 + beq _08070320 + cmp r0, 0xB + beq _08070320 + cmp r0, 0xC + beq _08070320 + cmp r4, 0 + beq _080702A8 + ldr r0, _080702A4 + ldr r1, [r0] + adds r0, r7, 0 + bl SendMessage + b _0807031A + .align 2, 0 +_080702A4: .4byte gPtrMoveInterruptedMessage +_080702A8: + movs r5, 0 + movs r0, 0x8C + lsls r0, 1 + adds r4, r6, r0 +_080702B0: + ldrb r1, [r4] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08070312 + adds r0, r7, 0 + adds r1, r4, 0 + bl sub_80570AC + lsls r0, 24 + cmp r0, 0 + beq _08070312 + adds r0, r6, 0 + adds r0, 0xC2 + ldrb r0, [r0] + cmp r0, r5 + bne _08070312 + adds r0, r6, 0 + adds r0, 0x44 + movs r1, 0x14 + bl SetAction + adds r3, r5, 0 + adds r7, r6, 0 + adds r7, 0x50 + cmp r5, 0 + ble _0807030E + ldrb r1, [r4] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _0807030E + movs r4, 0x2 + lsls r0, r5, 3 + movs r1, 0x8C + lsls r1, 1 + adds r0, r1 + adds r2, r0, r6 +_080702FC: + subs r2, 0x8 + subs r3, 0x1 + cmp r3, 0 + ble _0807030E + ldrb r1, [r2] + adds r0, r4, 0 + ands r0, r1 + cmp r0, 0 + bne _080702FC +_0807030E: + strb r3, [r7] + b _08070280 +_08070312: + adds r4, 0x8 + adds r5, 0x1 + cmp r5, 0x3 + ble _080702B0 +_0807031A: + adds r0, r7, 0 + bl sub_8079764 +_08070320: + movs r0, 0 +_08070322: + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_80701A4 + + thumb_func_start GetCrossableTerrain +GetCrossableTerrain: + push {lr} + lsls r0, 16 + asrs r0, 16 + bl GetWalkableTiles + lsls r0, 24 + lsrs r1, r0, 24 + cmp r1, 0x3 + bhi _0807033E + adds r0, r1, 0 + b _08070344 +_0807033E: + ldr r0, _08070348 + adds r0, r1, r0 + ldrb r0, [r0] +_08070344: + pop {r1} + bx r1 + .align 2, 0 +_08070348: .4byte gUnknown_202F314 + thumb_func_end GetCrossableTerrain + + thumb_func_start sub_807034C +sub_807034C: + push {r4,lr} + adds r4, r1, 0 + lsls r0, 16 + asrs r2, r0, 16 + ldr r0, [r4, 0x10] + cmp r0, 0 + bne _08070398 + ldrh r1, [r4] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _08070398 + adds r0, r2, 0 + bl GetCrossableTerrain + lsls r0, 24 + lsrs r2, r0, 24 + ldrh r0, [r4] + movs r1, 0x3 + ands r1, r0 + cmp r2, 0x1 + beq _08070388 + cmp r2, 0x1 + bgt _08070382 + cmp r2, 0 + beq _0807038C + b _08070390 +_08070382: + cmp r2, 0x2 + beq _08070394 + b _08070390 +_08070388: + cmp r1, 0x2 + beq _08070390 +_0807038C: + cmp r1, 0x1 + bne _08070398 +_08070390: + movs r0, 0 + b _0807039A +_08070394: + cmp r1, 0 + bne _08070390 +_08070398: + movs r0, 0x1 +_0807039A: + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_807034C + + thumb_func_start sub_80703A0 +sub_80703A0: + push {r4-r7,lr} + adds r6, r0, 0 + adds r4, r1, 0 + ldr r7, [r6, 0x70] + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl GetMapTileAtPosition + adds r5, r0, 0 + movs r1, 0 + ldrsh r0, [r4, r1] + cmp r0, 0 + blt _08070456 + movs r2, 0x2 + ldrsh r1, [r4, r2] + cmp r1, 0 + blt _08070456 + cmp r0, 0x37 + bgt _08070456 + cmp r1, 0x1F + bgt _08070456 + ldr r0, [r5, 0x10] + cmp r0, 0 + bne _08070456 + ldrh r1, [r5] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _08070456 + bl IsFixedDungeon + lsls r0, 24 + cmp r0, 0 + bne _08070400 + adds r0, r7, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x3 + beq _0807044E + adds r0, r6, 0 + movs r1, 0x9 + bl HasItem + lsls r0, 24 + cmp r0, 0 + bne _0807044E +_08070400: + movs r1, 0x2 + ldrsh r0, [r7, r1] + bl GetCrossableTerrain + lsls r0, 24 + lsrs r4, r0, 24 + ldrh r0, [r5] + movs r5, 0x3 + ands r5, r0 + adds r0, r6, 0 + movs r1, 0xC + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08070422 + movs r4, 0x2 +_08070422: + adds r0, r6, 0 + movs r1, 0xD + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08070432 + movs r4, 0x3 +_08070432: + cmp r4, 0x1 + beq _08070446 + cmp r4, 0x1 + bgt _08070440 + cmp r4, 0 + beq _0807044A + b _0807044E +_08070440: + cmp r4, 0x2 + beq _08070452 + b _0807044E +_08070446: + cmp r5, 0x2 + beq _0807044E +_0807044A: + cmp r5, 0x1 + bne _08070456 +_0807044E: + movs r0, 0 + b _08070458 +_08070452: + cmp r5, 0 + bne _0807044E +_08070456: + movs r0, 0x1 +_08070458: + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_80703A0 + + thumb_func_start CanCrossWalls +CanCrossWalls: + push {r4,lr} + adds r1, r0, 0 + ldr r0, [r1, 0x70] + adds r4, r0, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x3 + beq _08070492 + adds r0, r1, 0 + movs r1, 0x9 + bl HasItem + lsls r0, 24 + cmp r0, 0 + bne _08070492 + movs r1, 0x2 + ldrsh r0, [r4, r1] + bl GetCrossableTerrain + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + beq _08070492 + movs r0, 0 + b _08070494 +_08070492: + movs r0, 0x1 +_08070494: + pop {r4} + pop {r1} + bx r1 + thumb_func_end CanCrossWalls + + thumb_func_start sub_807049C +sub_807049C: + push {r4-r7,lr} + adds r6, r0, 0 + adds r4, r1, 0 + ldr r7, [r6, 0x70] + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl GetMapTileAtPosition + adds r5, r0, 0 + movs r1, 0 + ldrsh r0, [r4, r1] + cmp r0, 0 + blt _0807055A + movs r2, 0x2 + ldrsh r1, [r4, r2] + cmp r1, 0 + blt _0807055A + cmp r0, 0x37 + bgt _0807055A + cmp r1, 0x1F + bgt _0807055A + ldrh r1, [r5] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _0807055A + ldr r0, [r5, 0x10] + cmp r0, 0 + beq _080704E2 + bl GetEntityType + cmp r0, 0x1 + bne _0807055A +_080704E2: + bl IsFixedDungeon + lsls r0, 24 + cmp r0, 0 + bne _08070504 + adds r0, r7, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x3 + beq _08070552 + adds r0, r6, 0 + movs r1, 0x9 + bl HasItem + lsls r0, 24 + cmp r0, 0 + bne _08070552 +_08070504: + movs r1, 0x2 + ldrsh r0, [r7, r1] + bl GetCrossableTerrain + lsls r0, 24 + lsrs r4, r0, 24 + ldrh r0, [r5] + movs r5, 0x3 + ands r5, r0 + adds r0, r6, 0 + movs r1, 0xC + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08070526 + movs r4, 0x2 +_08070526: + adds r0, r6, 0 + movs r1, 0xD + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08070536 + movs r4, 0x3 +_08070536: + cmp r4, 0x1 + beq _0807054A + cmp r4, 0x1 + bgt _08070544 + cmp r4, 0 + beq _0807054E + b _08070552 +_08070544: + cmp r4, 0x2 + beq _08070556 + b _08070552 +_0807054A: + cmp r5, 0x2 + beq _08070552 +_0807054E: + cmp r5, 0x1 + bne _0807055A +_08070552: + movs r0, 0 + b _0807055C +_08070556: + cmp r5, 0 + bne _08070552 +_0807055A: + movs r0, 0x1 +_0807055C: + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_807049C + + thumb_func_start sub_8070564 +sub_8070564: + push {r4-r6,lr} + adds r4, r1, 0 + ldr r6, [r0, 0x70] + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl GetMapTileAtPosition + adds r5, r0, 0 + movs r1, 0 + ldrsh r0, [r4, r1] + cmp r0, 0 + blt _080705E6 + movs r2, 0x2 + ldrsh r1, [r4, r2] + cmp r1, 0 + blt _080705E6 + cmp r0, 0x37 + bgt _080705E6 + cmp r1, 0x1F + bgt _080705E6 + ldrh r1, [r5] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _080705E6 + ldr r0, [r5, 0x10] + cmp r0, 0 + beq _080705A8 + bl GetEntityType + cmp r0, 0x1 + bne _080705E6 +_080705A8: + movs r1, 0x2 + ldrsh r0, [r6, r1] + bl GetCrossableTerrain + lsls r0, 24 + lsrs r2, r0, 24 + adds r3, r2, 0 + ldrh r0, [r5] + movs r1, 0x3 + ands r1, r0 + adds r0, r1, 0 + cmp r2, 0x1 + beq _080705DE + cmp r2, 0x1 + bgt _080705CC + cmp r2, 0 + beq _080705D8 + b _080705D4 +_080705CC: + cmp r3, 0x3 + bgt _080705D4 + cmp r1, 0 + beq _080705E6 +_080705D4: + movs r0, 0 + b _080705E8 +_080705D8: + cmp r1, 0x1 + bne _080705E6 + b _080705D4 +_080705DE: + cmp r1, 0x2 + beq _080705D4 + cmp r0, 0x1 + beq _080705D4 +_080705E6: + movs r0, 0x1 +_080705E8: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end sub_8070564 + + thumb_func_start sub_80705F0 +sub_80705F0: + push {r4-r7,lr} + adds r6, r0, 0 + adds r4, r1, 0 + ldr r7, [r6, 0x70] + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl GetMapTileAtPosition + adds r5, r0, 0 + movs r1, 0 + ldrsh r0, [r4, r1] + cmp r0, 0 + blt _0807069A + movs r2, 0x2 + ldrsh r1, [r4, r2] + cmp r1, 0 + blt _0807069A + cmp r0, 0x37 + bgt _0807069A + cmp r1, 0x1F + bgt _0807069A + ldrh r1, [r5] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _0807069A + ldr r0, [r5, 0x10] + cmp r0, 0 + beq _08070636 + bl GetEntityType + cmp r0, 0x1 + bne _0807069A +_08070636: + bl IsFixedDungeon + lsls r0, 24 + cmp r0, 0 + bne _08070658 + adds r0, r7, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x3 + beq _08070696 + adds r0, r6, 0 + movs r1, 0x9 + bl HasItem + lsls r0, 24 + cmp r0, 0 + bne _08070696 +_08070658: + movs r1, 0x2 + ldrsh r0, [r7, r1] + bl GetCrossableTerrain + lsls r0, 24 + lsrs r4, r0, 24 + ldrh r0, [r5] + movs r5, 0x3 + ands r5, r0 + adds r0, r6, 0 + movs r1, 0xC + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _0807067A + movs r4, 0x2 +_0807067A: + adds r0, r6, 0 + movs r1, 0xD + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _0807068A + movs r4, 0x3 +_0807068A: + cmp r4, 0 + blt _08070696 + cmp r4, 0x2 + bgt _08070696 + cmp r5, 0 + beq _0807069A +_08070696: + movs r0, 0 + b _0807069C +_0807069A: + movs r0, 0x1 +_0807069C: + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_80705F0 + + thumb_func_start sub_80706A4 +sub_80706A4: + push {r4-r7,lr} + adds r7, r0, 0 + adds r4, r1, 0 + ldr r6, [r7, 0x70] + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl GetMapTileAtPosition + adds r5, r0, 0 + movs r1, 0 + ldrsh r0, [r4, r1] + cmp r0, 0 + blt _0807076A + movs r2, 0x2 + ldrsh r1, [r4, r2] + cmp r1, 0 + blt _0807076A + cmp r0, 0x37 + bgt _0807076A + cmp r1, 0x1F + bgt _0807076A + ldrh r1, [r5] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + bne _0807076A + ldr r0, [r5, 0x10] + cmp r0, 0 + beq _080706F2 + bl GetEntityType + cmp r0, 0x1 + bne _0807076A + ldr r0, [r5, 0x10] + ldr r0, [r0, 0x70] + cmp r0, r6 + bne _0807076A +_080706F2: + bl IsFixedDungeon + lsls r0, 24 + cmp r0, 0 + bne _08070714 + adds r0, r6, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x3 + beq _08070762 + adds r0, r7, 0 + movs r1, 0x9 + bl HasItem + lsls r0, 24 + cmp r0, 0 + bne _08070762 +_08070714: + movs r1, 0x2 + ldrsh r0, [r6, r1] + bl GetCrossableTerrain + lsls r0, 24 + lsrs r4, r0, 24 + ldrh r0, [r5] + movs r5, 0x3 + ands r5, r0 + adds r0, r7, 0 + movs r1, 0xC + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08070736 + movs r4, 0x2 +_08070736: + adds r0, r7, 0 + movs r1, 0xD + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _08070746 + movs r4, 0x3 +_08070746: + cmp r4, 0x1 + beq _0807075A + cmp r4, 0x1 + bgt _08070754 + cmp r4, 0 + beq _0807075E + b _08070762 +_08070754: + cmp r4, 0x2 + beq _08070766 + b _08070762 +_0807075A: + cmp r5, 0x2 + beq _08070762 +_0807075E: + cmp r5, 0x1 + bne _0807076A +_08070762: + movs r0, 0 + b _0807076C +_08070766: + cmp r5, 0 + bne _08070762 +_0807076A: + movs r0, 0x1 +_0807076C: + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_80706A4 + + thumb_func_start GetMovementSpeed +GetMovementSpeed: + push {r4-r6,lr} + adds r6, r0, 0 + ldr r5, [r6, 0x70] + movs r4, 0 + movs r0, 0x84 + lsls r0, 1 + adds r1, r5, r0 + movs r2, 0x4 +_08070784: + ldrb r0, [r1, 0x5] + cmp r0, 0 + beq _0807078C + subs r4, 0x1 +_0807078C: + ldrb r0, [r1] + cmp r0, 0 + beq _08070794 + adds r4, 0x1 +_08070794: + adds r1, 0x1 + subs r2, 0x1 + cmp r2, 0 + bge _08070784 + adds r0, r5, 0 + adds r0, 0xAC + ldrb r0, [r0] + cmp r0, 0x4 + bne _080707A8 + subs r4, 0x1 +_080707A8: + movs r1, 0x2 + ldrsh r0, [r5, r1] + bl GetMoveSpeed + adds r4, r0 + adds r0, r6, 0 + movs r1, 0x6 + bl HasType + lsls r0, 24 + cmp r0, 0 + beq _080707D0 + adds r0, r6, 0 + bl GetWeather + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x7 + bne _080707D0 + adds r4, 0x1 +_080707D0: + movs r0, 0x4 + ldrsh r1, [r5, r0] + ldr r0, _0807081C + cmp r1, r0 + bne _080707DC + adds r4, 0x1 +_080707DC: + movs r0, 0x2 + ldrsh r1, [r5, r0] + movs r0, 0xBE + lsls r0, 1 + cmp r1, r0 + bne _080707FE + ldrb r0, [r5, 0x6] + cmp r0, 0 + beq _080707FE + ldr r0, _08070820 + ldr r0, [r0] + ldr r1, _08070824 + adds r0, r1 + ldrb r0, [r0] + cmp r0, 0 + beq _080707FE + adds r4, 0x1 +_080707FE: + cmp r4, 0 + bge _08070804 + movs r4, 0 +_08070804: + cmp r4, 0x4 + ble _0807080A + movs r4, 0x4 +_0807080A: + movs r1, 0x82 + lsls r1, 1 + adds r0, r5, r1 + str r4, [r0] + adds r0, r4, 0 + pop {r4-r6} + pop {r1} + bx r1 + .align 2, 0 +_0807081C: .4byte 0x000001a3 +_08070820: .4byte gDungeonGlobalData +_08070824: .4byte 0x0000066e + thumb_func_end GetMovementSpeed + + thumb_func_start sub_8070828 +sub_8070828: + push {r4-r6,lr} + adds r4, r0, 0 + lsls r1, 24 + lsrs r6, r1, 24 + movs r5, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + bne _08070840 + movs r0, 0 + b _080708AE +_08070840: + adds r0, r4, 0 + movs r1, 0x1B + bl HasAbility + lsls r0, 24 + cmp r0, 0 + beq _0807085E + adds r0, r4, 0 + bl GetWeather + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x4 + bne _0807085E + movs r5, 0x1 +_0807085E: + adds r0, r4, 0 + movs r1, 0x4A + bl HasAbility + lsls r0, 24 + cmp r0, 0 + beq _0807087C + adds r0, r4, 0 + bl GetWeather + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _0807087C + movs r5, 0x1 +_0807087C: + cmp r6, 0 + beq _080708A0 + ldr r0, [r4, 0x70] + movs r1, 0x40 + adds r2, r5, 0 + bl SetVisualFlags + lsls r0, 24 + cmp r0, 0 + beq _080708A0 + adds r0, r4, 0 + bl sub_80429B4 + ldr r0, _080708A8 + ldr r1, [r0] + adds r0, r4, 0 + bl SendMessage +_080708A0: + cmp r5, 0 + bne _080708AC + movs r0, 0x1 + b _080708AE + .align 2, 0 +_080708A8: .4byte gUnknown_80FEE80 +_080708AC: + movs r0, 0x2 +_080708AE: + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end sub_8070828 + + thumb_func_start SetMessageArgument_2 +SetMessageArgument_2: + push {r4,r5,lr} + adds r3, r0, 0 + adds r4, r2, 0 + ldr r0, _080708E8 + ldr r2, [r0] + ldr r5, _080708EC + adds r0, r2, r5 + ldrb r0, [r0] + cmp r0, 0 + bne _080708DC + adds r5, 0x6 + adds r0, r2, r5 + ldrb r0, [r0] + cmp r0, 0 + bne _080708DC + adds r0, r1, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x1 + bne _080708F4 +_080708DC: + ldrb r0, [r1, 0x6] + cmp r0, 0 + beq _080708F4 + ldr r0, _080708F0 + b _08070900 + .align 2, 0 +_080708E8: .4byte gDungeonGlobalData +_080708EC: .4byte 0x0001820a +_080708F0: .4byte gUnknown_80F8988 +_080708F4: + adds r0, r1, 0 + adds r0, 0xC8 + ldrb r0, [r0] + cmp r0, 0x2 + bne _08070910 + ldr r0, _0807090C +_08070900: + ldr r1, [r0] + adds r0, r3, 0 + bl strcpy + b _0807095A + .align 2, 0 +_0807090C: .4byte gUnknown_80F8968 +_08070910: + ldrb r0, [r1, 0x6] + cmp r0, 0 + beq _08070942 + adds r0, r1, 0 + adds r0, 0x40 + ldrb r0, [r0] + cmp r0, 0x4A + beq _0807092A + adds r0, r1, 0 + adds r0, 0xA4 + ldrb r0, [r0] + cmp r0, 0x1 + bne _08070936 +_0807092A: + movs r0, 0x4 + ldrsh r1, [r1, r0] + adds r0, r3, 0 + bl CopyYellowSpeciesNametoBuffer + b _0807095A +_08070936: + movs r5, 0x4 + ldrsh r1, [r1, r5] + adds r0, r3, 0 + bl CopyCyanSpeciesNametoBuffer + b _0807095A +_08070942: + ldr r2, _08070960 + ldrb r1, [r1, 0xA] + movs r0, 0x64 + muls r0, r1 + ldr r1, _08070964 + adds r0, r1 + ldr r1, [r2] + adds r1, r0 + adds r0, r3, 0 + adds r2, r4, 0 + bl sub_808D9DC +_0807095A: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_08070960: .4byte gRecruitedPokemonRef +_08070964: .4byte 0x00008df8 + thumb_func_end SetMessageArgument_2 + + thumb_func_start sub_8070968 +sub_8070968: + push {r4,lr} + adds r4, r0, 0 + adds r3, r2, 0 + adds r0, r1, 0 + adds r0, 0xC8 + ldrb r0, [r0] + cmp r0, 0x2 + bne _08070990 + ldr r1, _08070988 + adds r2, 0x30 + ldr r0, _0807098C + ldr r3, [r0] + adds r0, r4, 0 + bl ExpandPlaceholdersBuffer + b _080709BA + .align 2, 0 +_08070988: .4byte gUnknown_8106FA4 +_0807098C: .4byte gUnknown_80F8974 +_08070990: + ldrb r0, [r1, 0x6] + cmp r0, 0 + beq _080709A2 + movs r0, 0x4 + ldrsh r1, [r1, r0] + adds r0, r4, 0 + bl CopyCyanSpeciesNametoBuffer + b _080709BA +_080709A2: + ldr r2, _080709C0 + ldrb r1, [r1, 0xA] + movs r0, 0x64 + muls r0, r1 + ldr r1, _080709C4 + adds r0, r1 + ldr r1, [r2] + adds r1, r0 + adds r0, r4, 0 + adds r2, r3, 0 + bl sub_808D9DC +_080709BA: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080709C0: .4byte gRecruitedPokemonRef +_080709C4: .4byte 0x00008df8 + thumb_func_end sub_8070968 + + thumb_func_start sub_80709C8 +sub_80709C8: + push {r4,lr} + adds r3, r0, 0 + ldr r0, _080709F8 + ldr r2, [r0] + ldr r4, _080709FC + adds r0, r2, r4 + ldrb r0, [r0] + cmp r0, 0 + bne _080709EE + adds r4, 0x6 + adds r0, r2, r4 + ldrb r0, [r0] + cmp r0, 0 + bne _080709EE + adds r0, r1, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x1 + bne _08070A04 +_080709EE: + ldrb r0, [r1, 0x6] + cmp r0, 0 + beq _08070A04 + ldr r0, _08070A00 + b _08070A10 + .align 2, 0 +_080709F8: .4byte gDungeonGlobalData +_080709FC: .4byte 0x0001820a +_08070A00: .4byte gUnknown_80F8994 +_08070A04: + adds r0, r1, 0 + adds r0, 0xC8 + ldrb r0, [r0] + cmp r0, 0x2 + bne _08070A20 + ldr r0, _08070A1C +_08070A10: + ldr r1, [r0] + adds r0, r3, 0 + bl strcpy + b _08070A48 + .align 2, 0 +_08070A1C: .4byte gUnknown_80F8974 +_08070A20: + ldrb r0, [r1, 0x6] + cmp r0, 0 + beq _08070A32 + movs r0, 0x4 + ldrsh r1, [r1, r0] + adds r0, r3, 0 + bl CopySpeciesNametoBuffer + b _08070A48 +_08070A32: + ldr r2, _08070A50 + ldrb r1, [r1, 0xA] + movs r0, 0x64 + muls r0, r1 + ldr r1, _08070A54 + adds r0, r1 + ldr r1, [r2] + adds r1, r0 + adds r0, r3, 0 + bl sub_808DA0C +_08070A48: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_08070A50: .4byte gRecruitedPokemonRef +_08070A54: .4byte 0x00008df8 + thumb_func_end sub_80709C8 + + .align 2, 0 \ No newline at end of file diff --git a/asm/code_8070D04.s b/asm/code_8070D04.s index 7a511ab..ce9f343 100644 --- a/asm/code_8070D04.s +++ b/asm/code_8070D04.s @@ -5,8 +5,8 @@ .text - thumb_func_start CannotMoveForward -CannotMoveForward: + thumb_func_start CanMoveForward2 +CanMoveForward2: push {r4-r6,lr} adds r4, r0, 0 adds r6, r1, 0 @@ -108,7 +108,7 @@ _08070E36: pop {r4-r6} pop {r1} bx r1 - thumb_func_end CannotMoveForward + thumb_func_end CanMoveForward2 thumb_func_start sub_8070E3C sub_8070E3C: diff --git a/asm/code_80718D8.s b/asm/code_80718D8.s index caa62de..4ee7f09 100644 --- a/asm/code_80718D8.s +++ b/asm/code_80718D8.s @@ -2652,7 +2652,7 @@ _08072F84: bne _08072FCC adds r0, r4, 0 adds r1, r3, 0 - bl CannotMoveForward + bl CanMoveForward2 lsls r0, 24 cmp r0, 0 bne _08072FCC diff --git a/data/data_80F59C8.s b/data/data_80F59C8.s index ce1abc5..7440857 100644 --- a/data/data_80F59C8.s +++ b/data/data_80F59C8.s @@ -1423,31 +1423,65 @@ gUnknown_80F9510: @ 80F9510 .global gUnknown_80F9530 gUnknown_80F9530: @ 80F9530 - .incbin "baserom.gba", 0xF9530, 0x1C + .incbin "baserom.gba", 0xF9530, 0x4 .global gFrozenMessage -gFrozenMessage: @ 80F954C - .incbin "baserom.gba", 0xF954C, 0x20 +gFrozenMessage: @ 80F9534 + .string "{ARG_POKEMON_0} is frozen solid!\0" + .align 2, 0 + + .global gPtrFrozenMessage +gPtrFrozenMessage: @ 80F954C + .4byte gFrozenMessage .global gWrappedAroundMessage -gWrappedAroundMessage: @ 80F956C - .incbin "baserom.gba", 0xF956C, 0x20 +gWrappedAroundMessage: @ 80F9550 + .string "{ARG_POKEMON_0} has its foe wrapped!\0" + .align 2, 0 + + .global gPtrWrappedAroundMessage +gPtrWrappedAroundMessage: @ 80F956C + .4byte gWrappedAroundMessage .global gWrappedByMessage -gWrappedByMessage: @ 80F958C - .incbin "baserom.gba", 0xF958C, 0x18 +gWrappedByMessage: @ 80F9570 + .string "{ARG_POKEMON_0} is wrapped by its foe!\0" + .align 2, 0 + + .global gPtrWrappedByMessage +gPtrWrappedByMessage: @ 80F958C + .4byte gWrappedByMessage .global gPausedMessage -gPausedMessage: @ 80F95A4 - .incbin "baserom.gba", 0xF95A4, 0x18 +gPausedMessage: @ 80F9590 + .string "{ARG_POKEMON_0} can{APOSTROPHE}t move!\0" + .align 2, 0 + + .global gPtrPausedMessage +gPtrPausedMessage: @ 80F95A4 + .4byte gPausedMessage .global gInfatuatedMessage -gInfatuatedMessage: @ 80F95BC - .incbin "baserom.gba", 0xF95BC, 0x1C +gInfatuatedMessage: @ 80F95A8 + .string "{ARG_POKEMON_0} is infatuated!\0" + .align 2, 0 + + .global gPtrInfatuatedMessage +gPtrInfatuatedMessage: @ 80F95BC + .4byte gInfatuatedMessage .global gBideMessage -gBideMessage: @ 80F95D8 - .incbin "baserom.gba", 0xF95D8, 0x14 +gBideMessage: @ 80F95C0 + .string "{ARG_POKEMON_0} is storing energy!\0" + .align 2, 0 + + .global gPtrBideMessage +gPtrBideMessage: @ 80F95D8 + .4byte gBideMessage + + .global gUnknown_80F95DC +gUnknown_80F95DC: @ 80F95DC + .incbin "baserom.gba", 0xF95DC, 0x10 .global gUnknown_80F95EC gUnknown_80F95EC: @ 80F95EC diff --git a/include/code_80521D0.h b/include/code_80521D0.h new file mode 100644 index 0000000..588ad9b --- /dev/null +++ b/include/code_80521D0.h @@ -0,0 +1,8 @@ +#ifndef GUARD_CODE_80521D0_H +#define GUARD_CODE_80521D0_H + +#include "dungeon_entity.h" + +void SendMessage(struct DungeonEntity *pokemon, const char message[]); + +#endif diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 7e562fc..9e9f1f7 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -11,7 +11,7 @@ struct DungeonActionContainer { /* 0x0 */ u16 action; - /* 0x2 */ s8 facingDir; + /* 0x2 */ u8 facingDir; u8 fill3; // Additional parameter alongside actionIndex. Used for things like indicating which move a Pokémon should use from its moveset. /* 0x4 */ u8 actionUseIndex; diff --git a/include/status_checks.h b/include/status_checks.h index e899f74..086711d 100644 --- a/include/status_checks.h +++ b/include/status_checks.h @@ -3,7 +3,7 @@ #include "dungeon_entity.h" -// 0x70A58 -bool8 HasNegativeStatus(struct DungeonEntity *pokemon); +// 0x7001C +bool8 HasStatusAffectingActions(struct DungeonEntity *pokemon); #endif diff --git a/include/status_checks_1.h b/include/status_checks_1.h new file mode 100644 index 0000000..770767a --- /dev/null +++ b/include/status_checks_1.h @@ -0,0 +1,9 @@ +#ifndef GUARD_STATUS_CHECKS_1_H +#define GUARD_STATUS_CHECKS_1_H + +#include "dungeon_entity.h" + +// 0x70A58 +bool8 HasNegativeStatus(struct DungeonEntity *pokemon); + +#endif diff --git a/ld_script.txt b/ld_script.txt index 2208bd0..80f8a64 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -207,8 +207,9 @@ SECTIONS { asm/code_8057824.o(.text); src/code_806CD90.o(.text); asm/code_806CD90.o(.text); - asm/code_807001C.o(.text); src/status_checks.o(.text); + asm/code_80701A4.o(.text); + src/status_checks_1.o(.text); asm/code_8070B28.o(.text); src/dungeon_capabilities.o(.text); asm/code_8070BC0.o(.text); diff --git a/src/code_8040094.c b/src/code_8040094.c index c834602..c0e7eac 100644 --- a/src/code_8040094.c +++ b/src/code_8040094.c @@ -1,7 +1,10 @@ #include "global.h" -#include "play_time.h" -#include "file_system.h" + +#include "code_80521D0.h" +#include "dungeon_entity.h" #include "dungeon_global_data.h" +#include "file_system.h" +#include "play_time.h" extern s32 gUnknown_80F6568[]; extern u8 gUnknown_202EE01; @@ -20,14 +23,13 @@ extern void sub_8011860(void); extern void sub_803F580(u32); extern void sub_8049ED4(); extern void sub_8040A84(); -extern void SendMessage(u32, const char *); extern const char *gUnknown_80FD040; // It became brighter on the floor extern struct MapTile *GetMapEntity(u32, u32); // Luminous Orb??? -void HandleLuminousOrbAction(u32 param_1) +void HandleLuminousOrbAction(struct DungeonEntity *param_1) { struct MapTile *mapTile; int XCoord; diff --git a/src/code_80521D0.c b/src/code_80521D0.c index 272991d..4867acf 100644 --- a/src/code_80521D0.c +++ b/src/code_80521D0.c @@ -1,9 +1,9 @@ #include "global.h" -#include "dungeon_entity.h" +#include "code_80521D0.h" extern void sub_80526D0(u8 r0); extern u8 sub_8045888(struct DungeonEntity *r0); -extern void sub_80523A8(struct DungeonEntity *r0, u32 r1, u8 r2); +extern void sub_80523A8(struct DungeonEntity *r0, const char r1[], u8 r2); extern u8 sub_8052DC0(struct DungeonEntity *); extern u8 sub_803F428(u32); @@ -12,26 +12,26 @@ void sub_805229C(void) return sub_80526D0(0x50); } -void SendMessage(struct DungeonEntity *r0, u32 r1) +void SendMessage(struct DungeonEntity *pokemon, const char message[]) { - if (sub_8045888(r0) != 0){ - sub_80523A8(r0, r1, 1); + if (sub_8045888(pokemon) != 0){ + sub_80523A8(pokemon, message, 1); } } -void sub_80522C8(struct DungeonEntity *r0, u32 r1) +void sub_80522C8(struct DungeonEntity *r0, const char r1[]) { if (sub_8045888(r0) != 0){ sub_80523A8(r0, r1, 0); } } -void sub_80522E8(struct DungeonEntity *r0, u32 r1) +void sub_80522E8(struct DungeonEntity *r0, const char r1[]) { sub_80523A8(r0, r1, 0); } -void sub_80522F4(struct DungeonEntity *r0, struct DungeonEntity *r1, u32 r2) +void sub_80522F4(struct DungeonEntity *r0, struct DungeonEntity *r1, const char r2[]) { u8 temp; u32 temp_reg; @@ -49,7 +49,7 @@ void sub_80522F4(struct DungeonEntity *r0, struct DungeonEntity *r1, u32 r2) } } -void sub_805232C(struct DungeonEntity *r0, struct DungeonEntity *r1, u32 r2) +void sub_805232C(struct DungeonEntity *r0, struct DungeonEntity *r1, const char r2[]) { u8 temp; u32 temp_reg; @@ -67,7 +67,7 @@ void sub_805232C(struct DungeonEntity *r0, struct DungeonEntity *r1, u32 r2) } } -void sub_8052364(struct DungeonEntity *r0, u32 r1, u32 r2) +void sub_8052364(struct DungeonEntity *r0, u32 r1, const char r2[]) { u8 temp; u32 temp_reg; @@ -85,7 +85,7 @@ void sub_8052364(struct DungeonEntity *r0, u32 r1, u32 r2) } } -void sub_805239C(struct DungeonEntity *r0, u32 r1) +void sub_805239C(struct DungeonEntity *r0, const char r1[]) { sub_80523A8(r0, r1, 1); } diff --git a/src/dungeon_ai_item_weight.c b/src/dungeon_ai_item_weight.c index 34e3440..6c9669b 100644 --- a/src/dungeon_ai_item_weight.c +++ b/src/dungeon_ai_item_weight.c @@ -9,7 +9,7 @@ #include "dungeon_util.h" #include "moves.h" #include "number_util.h" -#include "status_checks.h" +#include "status_checks_1.h" u32 EvaluateItem(struct DungeonEntity *targetPokemon, struct ItemSlot *item, u32 itemTargetFlags) { diff --git a/src/dungeon_movement.c b/src/dungeon_movement.c index bcf6163..3df74ee 100644 --- a/src/dungeon_movement.c +++ b/src/dungeon_movement.c @@ -6,6 +6,7 @@ #include "constants/iq_skill.h" #include "constants/status.h" #include "constants/targeting.h" +#include "code_80521D0.h" #include "dungeon_ai_items.h" #include "dungeon_capabilities_1.h" #include "dungeon_global_data.h" @@ -16,6 +17,7 @@ #include "dungeon_visibility.h" #include "map.h" #include "pokemon.h" +#include "status_checks.h" extern char gAvailablePokemonNames[]; extern char *gPtrCouldntBeUsedMessage; @@ -23,8 +25,6 @@ extern char *gPtrItsaMonsterHouseMessage; extern void SendImmobilizeEndMessage(struct DungeonEntity*, struct DungeonEntity*); extern void SetMessageArgument(char[], struct DungeonEntity*, u32); -extern void SendMessage(struct DungeonEntity*, char*); -extern bool8 HasStatusAffectingActions(struct DungeonEntity*); extern void ResetAction(u16*); extern void SetWalkAction(u16*, s16); extern void DecideAttack(struct DungeonEntity*); @@ -155,7 +155,7 @@ void sub_8075900(struct DungeonEntity *pokemon, u8 r1) void DecideAction(struct DungeonEntity *pokemon) { struct DungeonEntityData *pokemonData = pokemon->entityData; - if ((pokemonData->flags & MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED) != 0) + if (pokemonData->flags & MOVEMENT_FLAG_SWAPPED_PLACES_PETRIFIED) { if (pokemonData->immobilizeStatus == IMMOBILIZE_STATUS_PETRIFIED) { @@ -210,7 +210,7 @@ void DecideAction(struct DungeonEntity *pokemon) if (pokemonData->clientType == CLIENT_TYPE_CLIENT) { SetWalkAction(&pokemonData->action.action, pokemonData->entityID); - pokemonData->action.facingDir = DungeonRandomCapped(8); + pokemonData->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS); pokemonData->targetPosition.x = pokemon->posWorld.x; pokemonData->targetPosition.y = pokemon->posWorld.y - 1; } diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 7dbc441..50b8c02 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -208,7 +208,7 @@ void sub_8026C14(void) struct unkStruct_8090F58 temp; int menuAction; struct ItemSlot slot; - + menuAction = 0; sub_801A6E8(0); if ((sub_8012FD8(&gUnknown_203B2B8->unkCC) == '\0') && (sub_8013114(&gUnknown_203B2B8->unkCC,&menuAction), menuAction != 1)) { diff --git a/src/status_checks.c b/src/status_checks.c index 346afb5..5abb0fe 100644 --- a/src/status_checks.c +++ b/src/status_checks.c @@ -1,44 +1,103 @@ #include "global.h" #include "status_checks.h" +#include "constants/direction.h" +#include "constants/dungeon_action.h" #include "constants/status.h" +#include "code_80521D0.h" +#include "dungeon_action.h" +#include "dungeon_random.h" -bool8 HasNegativeStatus(struct DungeonEntity *pokemon) +extern char *gPtrFrozenMessage; +extern char *gPtrWrappedAroundMessage; +extern char *gPtrWrappedByMessage; +extern char *gPtrBideMessage; +extern char *gPtrPausedMessage; +extern char *gPtrInfatuatedMessage; + +extern char gAvailablePokemonNames[]; +extern void SetMessageArgument(char[], struct DungeonEntity*, u32); +extern void SetWalkAction(struct DungeonActionContainer*, s16); +extern bool8 CanMoveForward2(struct DungeonEntity*, u8); +extern void DecideAttack(struct DungeonEntity*); + +bool8 HasStatusAffectingActions(struct DungeonEntity *pokemon) { struct DungeonEntityData *pokemonData = pokemon->entityData; - s32 i; - if (pokemonData->sleepStatus == SLEEP_STATUS_SLEEP || - pokemonData->sleepStatus == SLEEP_STATUS_NIGHTMARE || - pokemonData->sleepStatus == SLEEP_STATUS_YAWNING || - pokemonData->nonVolatileStatus != NON_VOLATILE_STATUS_NONE || - (pokemonData->immobilizeStatus != IMMOBILIZE_STATUS_INGRAIN && pokemonData->immobilizeStatus != IMMOBILIZE_STATUS_NONE) || - pokemonData->volatileStatus != VOLATILE_STATUS_NONE || - pokemonData->waitingStatus == WAITING_STATUS_CURSED || - pokemonData->waitingStatus == WAITING_STATUS_DECOY || - pokemonData->linkedStatus == LINKED_STATUS_LEECH_SEED || - pokemonData->moveStatus == MOVE_STATUS_WHIFFER || - pokemonData->eyesightStatus == EYESIGHT_STATUS_BLINKER || - pokemonData->eyesightStatus == EYESIGHT_STATUS_CROSS_EYED || - pokemonData->muzzledStatus == MUZZLED_STATUS_MUZZLED || - pokemonData->exposedStatus || - pokemonData->perishSongTimer != 0) + SetMessageArgument(gAvailablePokemonNames, pokemon, 0); + SetAction(&pokemonData->action, DUNGEON_ACTION_WAIT); + switch (pokemonData->sleepStatus) { - return TRUE; + case SLEEP_STATUS_NIGHTMARE: + case SLEEP_STATUS_SLEEP: + case SLEEP_STATUS_NAPPING: + return TRUE; } - for (i = 0; i < MAX_MON_MOVES; i++) + switch (pokemonData->immobilizeStatus) { - struct PokemonMove *moves = pokemonData->moves; - if (moves[i].moveFlags & MOVE_FLAG_EXISTS && moves[i].sealed & TRUE) - { + case IMMOBILIZE_STATUS_FROZEN: + SendMessage(pokemon, gPtrFrozenMessage); return TRUE; - } + case IMMOBILIZE_STATUS_WRAPPED_AROUND_FOE: + SendMessage(pokemon, gPtrWrappedAroundMessage); + return TRUE; + case IMMOBILIZE_STATUS_WRAPPED_BY_FOE: + SendMessage(pokemon, gPtrWrappedByMessage); + return TRUE; + case IMMOBILIZE_STATUS_PETRIFIED: + return TRUE; + } + switch (pokemonData->volatileStatus) + { + case VOLATILE_STATUS_PAUSED: + SendMessage(pokemon, gPtrPausedMessage); + return TRUE; + case VOLATILE_STATUS_INFATUATED: + SendMessage(pokemon, gPtrInfatuatedMessage); + return TRUE; + } + if (pokemonData->chargingStatus == CHARGING_STATUS_BIDE) + { + SendMessage(pokemon, gPtrBideMessage); + return TRUE; + } + if (pokemonData->waitingStatus == WAITING_STATUS_DECOY) + { + SetWalkAction(&pokemonData->action, pokemonData->entityID); + pokemonData->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS); + pokemonData->targetPosition.x = pokemon->posWorld.x; + pokemonData->targetPosition.y = pokemon->posWorld.y - 1; + return TRUE; + } + if (pokemonData->shopkeeperMode == SHOPKEEPER_FRIENDLY) + { + return TRUE; } - for (i = 0; i < NUM_SPEED_TURN_COUNTERS; i++) + if (pokemonData->eyesightStatus == EYESIGHT_STATUS_BLINKER) { - if (pokemonData->slowTurnsLeft[i] != 0) + if (!CanMoveForward2(pokemon, pokemonData->action.facingDir)) + { + if (DungeonRandomCapped(2) != 0) + { + pokemonData->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS); + pokemonData->action.facingDir = pokemonData->action.facingDir & DIRECTION_MASK; + goto walk; + } + } + else { + walk: + SetWalkAction(&pokemonData->action, pokemonData->entityID); return TRUE; } + DecideAttack(pokemon); + return TRUE; + } + if (pokemonData->eyesightStatus == EYESIGHT_STATUS_CROSS_EYED) + { + SetWalkAction(&pokemonData->action, pokemonData->entityID); + pokemonData->action.facingDir = DungeonRandomCapped(NUM_DIRECTIONS); + return TRUE; } return FALSE; } diff --git a/src/status_checks_1.c b/src/status_checks_1.c new file mode 100644 index 0000000..32ed6bf --- /dev/null +++ b/src/status_checks_1.c @@ -0,0 +1,44 @@ +#include "global.h" +#include "status_checks_1.h" + +#include "constants/status.h" + +bool8 HasNegativeStatus(struct DungeonEntity *pokemon) +{ + struct DungeonEntityData *pokemonData = pokemon->entityData; + s32 i; + if (pokemonData->sleepStatus == SLEEP_STATUS_SLEEP || + pokemonData->sleepStatus == SLEEP_STATUS_NIGHTMARE || + pokemonData->sleepStatus == SLEEP_STATUS_YAWNING || + pokemonData->nonVolatileStatus != NON_VOLATILE_STATUS_NONE || + (pokemonData->immobilizeStatus != IMMOBILIZE_STATUS_INGRAIN && pokemonData->immobilizeStatus != IMMOBILIZE_STATUS_NONE) || + pokemonData->volatileStatus != VOLATILE_STATUS_NONE || + pokemonData->waitingStatus == WAITING_STATUS_CURSED || + pokemonData->waitingStatus == WAITING_STATUS_DECOY || + pokemonData->linkedStatus == LINKED_STATUS_LEECH_SEED || + pokemonData->moveStatus == MOVE_STATUS_WHIFFER || + pokemonData->eyesightStatus == EYESIGHT_STATUS_BLINKER || + pokemonData->eyesightStatus == EYESIGHT_STATUS_CROSS_EYED || + pokemonData->muzzledStatus == MUZZLED_STATUS_MUZZLED || + pokemonData->exposedStatus || + pokemonData->perishSongTimer != 0) + { + return TRUE; + } + for (i = 0; i < MAX_MON_MOVES; i++) + { + struct PokemonMove *moves = pokemonData->moves; + if (moves[i].moveFlags & MOVE_FLAG_EXISTS && moves[i].sealed & TRUE) + { + return TRUE; + } + } + for (i = 0; i < NUM_SPEED_TURN_COUNTERS; i++) + { + if (pokemonData->slowTurnsLeft[i] != 0) + { + return TRUE; + } + } + return FALSE; +} -- cgit v1.2.3