From 4a95051619e84f218840cd6f7c5bd878438ca81e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 10 Dec 2024 11:30:32 +0100 Subject: [PATCH] sub_807FA18 --- asm/code_807E5AC.s | 1125 -------------------------------------------- src/code_807E5AC.c | 955 ++++++++++++++++++++++++++++++++++++- 2 files changed, 944 insertions(+), 1136 deletions(-) diff --git a/asm/code_807E5AC.s b/asm/code_807E5AC.s index e5547873b..a99efdcc7 100644 --- a/asm/code_807E5AC.s +++ b/asm/code_807E5AC.s @@ -7,1131 +7,6 @@ - thumb_func_start sub_807F19C -sub_807F19C: - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _0807F1EC - ldr r0, [sp] - ands r0, r1 - movs r1, 0xBE - lsls r1, 1 - orrs r0, r1 - ldr r1, _0807F1F0 - ands r0, r1 - str r0, [sp] - ldr r0, _0807F1F4 - ldr r0, [r0] - ldr r3, _0807F1F8 - adds r1, r0, r3 - subs r3, 0x8 - adds r0, r3 - ldr r1, [r1] - ldr r0, [r0] - subs r4, r1, r0 - cmp r4, 0 - bgt _0807F1CE - b _0807F31A -_0807F1CE: - cmp r2, 0 - beq _0807F1E6 - ldr r0, _0807F1FC - str r4, [r0] - ldr r0, _0807F200 - ldr r1, [r0] - mov r0, sp - movs r2, 0x1 - bl DisplayDungeonYesNoMessage - cmp r0, 0x1 - beq _0807F204 -_0807F1E6: - movs r0, 0x1 - b _0807F31C - .align 2, 0 -_0807F1EC: .4byte 0xffff0000 -_0807F1F0: .4byte 0xff00ffff -_0807F1F4: .4byte gDungeon -_0807F1F8: .4byte 0x00000694 -_0807F1FC: .4byte gFormatArgs -_0807F200: .4byte gUnknown_80FE568 -_0807F204: - ldr r0, _0807F224 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, r4 - bge _0807F22C - ldr r0, _0807F228 - ldr r1, [r0] - mov r0, sp - movs r2, 0x1 - bl DisplayDungeonMessage - movs r0, 0x2 - b _0807F31C - .align 2, 0 -_0807F224: .4byte gTeamInventoryRef -_0807F228: .4byte gUnknown_80FE520 -_0807F22C: - movs r0, 0xA6 - lsls r0, 1 - bl PlaySoundEffect - negs r0, r4 - bl AddToTeamMoney - movs r6, 0 -_0807F23C: - movs r5, 0 - adds r7, r6, 0x1 -_0807F240: - adds r0, r6, 0 - adds r1, r5, 0 - bl GetTile - adds r4, r0, 0 - ldrh r1, [r4] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _0807F27E - ldr r0, [r4, 0x14] - cmp r0, 0 - beq _0807F27E - bl GetEntityType - cmp r0, 0x3 - bne _0807F27E - ldr r0, [r4, 0x14] - bl GetItemData - adds r4, r0, 0 - ldrb r0, [r4, 0x2] - bl CanSellItem - lsls r0, 24 - cmp r0, 0 - beq _0807F27E - ldrb r1, [r4] - movs r0, 0xFD - ands r0, r1 - strb r0, [r4] -_0807F27E: - adds r5, 0x1 - cmp r5, 0x1F - ble _0807F240 - adds r6, r7, 0 - cmp r6, 0x37 - ble _0807F23C - movs r5, 0 -_0807F28C: - ldr r0, _0807F324 - lsls r1, r5, 2 - ldr r0, [r0] - adds r4, r0, r1 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0807F2B2 - ldrb r0, [r4, 0x2] - bl CanSellItem - lsls r0, 24 - cmp r0, 0 - beq _0807F2B2 - ldrb r1, [r4] - movs r0, 0xFD - ands r0, r1 - strb r0, [r4] -_0807F2B2: - adds r5, 0x1 - cmp r5, 0x13 - ble _0807F28C - movs r5, 0 -_0807F2BA: - ldr r0, _0807F328 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _0807F32C - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807F2F8 - ldr r0, [r4, 0x70] - adds r4, r0, 0 - adds r4, 0x60 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0807F2F8 - ldrb r0, [r4, 0x2] - bl CanSellItem - lsls r0, 24 - cmp r0, 0 - beq _0807F2F8 - ldrb r1, [r4] - movs r0, 0xFD - ands r0, r1 - strb r0, [r4] -_0807F2F8: - adds r5, 0x1 - cmp r5, 0x13 - ble _0807F2BA - ldr r0, _0807F328 - ldr r0, [r0] - ldr r3, _0807F330 - adds r1, r0, r3 - ldr r2, _0807F334 - adds r0, r2 - ldr r0, [r0] - str r0, [r1] - ldr r0, _0807F338 - ldr r1, [r0] - mov r0, sp - movs r2, 0x1 - bl DisplayDungeonMessage -_0807F31A: - movs r0, 0 -_0807F31C: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0807F324: .4byte gTeamInventoryRef -_0807F328: .4byte gDungeon -_0807F32C: .4byte 0x000135cc -_0807F330: .4byte 0x00000694 -_0807F334: .4byte 0x0000068c -_0807F338: .4byte gUnknown_80FE4D4 - thumb_func_end sub_807F19C - - thumb_func_start sub_807F33C -sub_807F33C: - push {r4-r7,lr} - ldr r2, _0807F41C - ldr r0, [r2] - ldr r1, _0807F420 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r2] - ldr r2, _0807F424 - adds r0, r2 - strb r1, [r0] - bl GetLeader - ldr r1, _0807F428 - ldr r1, [r1] - bl LogMessageByIdWithPopupCheckUser - movs r6, 0 -_0807F360: - movs r5, 0 - adds r7, r6, 0x1 -_0807F364: - adds r0, r6, 0 - adds r1, r5, 0 - bl GetTile - adds r4, r0, 0 - ldr r0, [r4, 0x14] - cmp r0, 0 - beq _0807F38A - bl GetEntityType - cmp r0, 0x3 - bne _0807F38A - ldr r0, [r4, 0x14] - bl GetItemData - ldrb r2, [r0] - movs r1, 0xFD - ands r1, r2 - strb r1, [r0] -_0807F38A: - adds r5, 0x1 - cmp r5, 0x1F - ble _0807F364 - adds r6, r7, 0 - cmp r6, 0x37 - ble _0807F360 - movs r6, 0 - ldr r4, _0807F42C - movs r5, 0x1 - movs r3, 0xFD -_0807F39E: - lsls r1, r6, 2 - ldr r0, [r4] - adds r2, r0, r1 - ldrb r1, [r2] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _0807F3B4 - adds r0, r3, 0 - ands r0, r1 - strb r0, [r2] -_0807F3B4: - adds r6, 0x1 - cmp r6, 0x13 - ble _0807F39E - movs r6, 0 -_0807F3BC: - ldr r0, _0807F41C - ldr r0, [r0] - lsls r1, r6, 2 - ldr r3, _0807F430 - adds r0, r3 - adds r0, r1 - ldr r5, [r0] - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807F3F4 - ldr r4, [r5, 0x70] - movs r0, 0 - strb r0, [r4, 0x8] - adds r0, r5, 0 - bl CalcSpeedStage - adds r4, 0x60 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0807F3F4 - movs r0, 0xFD - ands r0, r1 - strb r0, [r4] -_0807F3F4: - adds r6, 0x1 - cmp r6, 0x13 - ble _0807F3BC - ldr r0, _0807F41C - ldr r1, [r0] - ldr r2, _0807F434 - adds r0, r1, r2 - movs r2, 0 - str r2, [r0] - ldr r3, _0807F438 - adds r0, r1, r3 - str r2, [r0] - movs r0, 0xD2 - lsls r0, 3 - adds r1, r0 - str r2, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807F41C: .4byte gDungeon -_0807F420: .4byte 0x0000066e -_0807F424: .4byte 0x0000066f -_0807F428: .4byte gUnknown_80FE4B8 -_0807F42C: .4byte gTeamInventoryRef -_0807F430: .4byte 0x000135cc -_0807F434: .4byte 0x00000694 -_0807F438: .4byte 0x0000068c - thumb_func_end sub_807F33C - - thumb_func_start sub_807F43C -sub_807F43C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10C - str r0, [sp, 0xEC] - mov r8, r1 - mov r0, r8 - movs r1, 0xE - bl AbilityIsActive - lsls r0, 24 - cmp r0, 0 - beq _0807F470 - ldr r0, _0807F468 - mov r1, r8 - movs r2, 0 - bl SubstitutePlaceholderStringTags - ldr r0, _0807F46C - b _0807F694 - .align 2, 0 -_0807F468: .4byte gFormatBuffer_Monsters -_0807F46C: .4byte gUnknown_80FCB40 -_0807F470: - ldr r0, [sp, 0xEC] - cmp r0, r8 - bne _0807F490 - ldr r0, _0807F488 - mov r1, r8 - movs r2, 0 - bl SubstitutePlaceholderStringTags - ldr r0, _0807F48C - ldr r2, [r0] - mov r0, r8 - b _0807F698 - .align 2, 0 -_0807F488: .4byte gFormatBuffer_Monsters -_0807F48C: .4byte gUnknown_80FCB70 -_0807F490: - mov r1, r8 - ldr r0, [r1, 0x4] - add r1, sp, 0xD4 - str r0, [r1] - movs r2, 0 - str r2, [sp, 0xF0] -_0807F49C: - movs r3, 0 - mov r9, r3 - movs r7, 0 - mov r4, sp - adds r4, 0x18 - str r4, [sp, 0x108] -_0807F4A8: - ldr r0, _0807F504 - ldr r0, [r0] - lsls r1, r7, 2 - ldr r2, _0807F508 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - adds r3, r7, 0x1 - str r3, [sp, 0x104] - cmp r0, 0 - bne _0807F4C8 - b _0807F602 -_0807F4C8: - ldr r0, [sp, 0xEC] - cmp r0, r4 - bne _0807F4D0 - b _0807F602 -_0807F4D0: - cmp r8, r4 - bne _0807F4D6 - b _0807F602 -_0807F4D6: - adds r1, r4, 0 - bl CanSeeTarget - lsls r0, 24 - cmp r0, 0 - bne _0807F4E4 - b _0807F602 -_0807F4E4: - ldr r1, [sp, 0xF0] - cmp r1, 0 - bne _0807F50C - ldr r0, [sp, 0xEC] - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x1 - bl GetTreatmentBetweenMonsters - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0807F500 - b _0807F602 -_0807F500: - b _0807F51E - .align 2, 0 -_0807F504: .4byte gDungeon -_0807F508: .4byte 0x000135cc -_0807F50C: - ldr r0, [sp, 0xEC] - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x1 - bl GetTreatmentBetweenMonsters - lsls r0, 24 - cmp r0, 0 - bne _0807F602 -_0807F51E: - ldr r2, [sp, 0xF0] - cmp r2, 0 - bne _0807F594 - movs r5, 0 - add r6, sp, 0xC8 - adds r3, r7, 0x1 - str r3, [sp, 0x104] - adds r7, r6, 0 - ldr r0, _0807F588 - mov r10, r0 -_0807F532: - ldr r0, _0807F58C - lsls r3, r5, 2 - adds r3, r0 - ldrh r0, [r4, 0x4] - ldrh r1, [r3] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - ldr r1, [r6] - mov r2, r10 - ands r1, r2 - orrs r1, r0 - str r1, [r7] - ldrh r2, [r4, 0x6] - ldrh r3, [r3, 0x2] - adds r2, r3 - lsls r2, 16 - ldr r0, _0807F590 - ands r1, r0 - orrs r1, r2 - str r1, [r7] - mov r0, r8 - add r1, sp, 0xC8 - bl sub_80703A0 - lsls r0, 24 - cmp r0, 0 - beq _0807F570 - adds r5, 0x1 - cmp r5, 0x7 - ble _0807F532 -_0807F570: - cmp r5, 0x8 - beq _0807F602 - mov r3, r9 - cmp r3, 0x27 - bgt _0807F602 - ldr r0, [r4, 0x4] - ldr r4, [sp, 0x108] - stm r4!, {r0} - str r4, [sp, 0x108] - movs r0, 0x1 - add r9, r0 - b _0807F602 - .align 2, 0 -_0807F588: .4byte 0xffff0000 -_0807F58C: .4byte gAdjacentTileOffsets -_0807F590: .4byte 0x0000ffff -_0807F594: - movs r5, 0 - add r6, sp, 0xCC - adds r1, r7, 0x1 - str r1, [sp, 0x104] - adds r7, r6, 0 - mov r2, r9 - lsls r0, r2, 2 - add r0, sp - adds r0, 0x18 - mov r10, r0 -_0807F5A8: - ldr r0, _0807F630 - lsls r3, r5, 2 - adds r3, r0 - ldrh r0, [r4, 0x4] - ldrh r1, [r3] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - ldr r2, _0807F634 - ldr r1, [r6] - ands r1, r2 - orrs r1, r0 - str r1, [r7] - ldrh r2, [r4, 0x6] - ldrh r3, [r3, 0x2] - adds r2, r3 - lsls r2, 16 - ldr r0, _0807F638 - ands r1, r0 - orrs r1, r2 - str r1, [r7] - mov r0, r8 - add r1, sp, 0xCC - bl sub_80703A0 - lsls r0, 24 - cmp r0, 0 - bne _0807F5FC - mov r2, r9 - cmp r2, 0x27 - bgt _0807F5FC - ldr r0, [r6] - mov r3, r10 - adds r3, 0x4 - mov r10, r3 - subs r3, 0x4 - stm r3!, {r0} - ldr r0, [sp, 0x108] - adds r0, 0x4 - str r0, [sp, 0x108] - movs r1, 0x1 - add r9, r1 -_0807F5FC: - adds r5, 0x1 - cmp r5, 0x7 - ble _0807F5A8 -_0807F602: - ldr r7, [sp, 0x104] - cmp r7, 0x13 - bgt _0807F60A - b _0807F4A8 -_0807F60A: - mov r2, r9 - cmp r2, 0 - bne _0807F63C - ldr r3, [sp, 0xF0] - adds r3, 0x1 - str r3, [sp, 0xF0] - cmp r3, 0x1 - bgt _0807F61C - b _0807F49C -_0807F61C: - ldr r0, [sp, 0xEC] - adds r0, 0x4 - add r4, sp, 0xB8 - adds r1, r4, 0 - bl sub_80833E8 - movs r7, 0 - add r5, sp, 0xD0 - adds r6, r5, 0 - b _0807F654 - .align 2, 0 -_0807F630: .4byte gAdjacentTileOffsets -_0807F634: .4byte 0xffff0000 -_0807F638: .4byte 0x0000ffff -_0807F63C: - mov r0, r9 - bl DungeonRandInt - lsls r0, 2 - add r0, sp - adds r0, 0x18 - ldr r0, [r0] - str r0, [sp, 0xD4] - b _0807F6A8 -_0807F64E: - ldr r0, [r5] - str r0, [sp, 0xD4] - b _0807F68E -_0807F654: - ldr r0, [r4] - ldr r1, [r4, 0x8] - bl DungeonRandRange - lsls r0, 16 - lsrs r0, 16 - ldr r2, _0807F6A0 - ldr r1, [r5] - ands r1, r2 - orrs r1, r0 - str r1, [r6] - ldr r0, [r4, 0x4] - ldr r1, [r4, 0xC] - bl DungeonRandRange - lsls r0, 16 - ldrh r1, [r6] - orrs r1, r0 - str r1, [r6] - mov r0, r8 - add r1, sp, 0xD0 - bl sub_80703A0 - lsls r0, 24 - cmp r0, 0 - beq _0807F64E - adds r7, 0x1 - cmp r7, 0x63 - ble _0807F654 -_0807F68E: - cmp r7, 0x64 - bne _0807F6A8 - ldr r0, _0807F6A4 -_0807F694: - ldr r2, [r0] - ldr r0, [sp, 0xEC] -_0807F698: - mov r1, r8 - bl TryDisplayDungeonLoggableMessage3 - b _0807F99C - .align 2, 0 -_0807F6A0: .4byte 0xffff0000 -_0807F6A4: .4byte gUnknown_80FE6B4 -_0807F6A8: - ldr r0, _0807F860 - mov r1, r8 - movs r2, 0 - bl SubstitutePlaceholderStringTags - ldr r0, _0807F864 - ldr r2, [r0] - ldr r0, [sp, 0xEC] - mov r1, r8 - bl TryDisplayDungeonLoggableMessage3 - mov r0, r8 - bl sub_8045888 - lsls r0, 24 - cmp r0, 0 - beq _0807F6D0 - ldr r0, _0807F868 - bl PlaySoundEffect -_0807F6D0: - movs r4, 0 - str r4, [sp, 0x100] - mov r1, r8 - ldr r0, [r1, 0x70] - adds r0, 0x46 - ldrb r0, [r0] - mov r9, r0 - add r2, sp, 0xD4 - movs r3, 0 - ldrsh r1, [r2, r3] - mov r4, r8 - movs r3, 0x4 - ldrsh r0, [r4, r3] - subs r3, r1, r0 - movs r4, 0x2 - ldrsh r1, [r2, r4] - mov r2, r8 - movs r4, 0x6 - ldrsh r0, [r2, r4] - subs r1, r0 - cmp r1, r3 - bge _0807F6FE - adds r1, r3, 0 -_0807F6FE: - lsls r6, r1, 4 - cmp r6, 0x50 - ble _0807F706 - movs r6, 0x50 -_0807F706: - cmp r6, 0x9 - bgt _0807F70C - movs r6, 0xA -_0807F70C: - mov r1, r8 - adds r1, 0x4 - add r0, sp, 0xD4 - bl GetDirectionTowardsPosition - adds r5, r0, 0 - add r2, sp, 0xD4 - movs r1, 0 - ldrsh r0, [r2, r1] - lsls r4, r0, 1 - adds r4, r0 - lsls r4, 11 - movs r3, 0xC0 - lsls r3, 4 - adds r4, r3 - ldr r0, _0807F86C - lsls r5, 2 - adds r5, r0 - movs r1, 0 - ldrsh r0, [r5, r1] - lsls r0, 8 - movs r1, 0x3 - bl __divsi3 - adds r4, r0 - str r4, [sp, 0xF4] - movs r3, 0xD6 - add r3, sp - movs r2, 0 - ldrsh r0, [r3, r2] - lsls r4, r0, 1 - adds r4, r0 - lsls r4, 11 - movs r0, 0x80 - lsls r0, 5 - adds r4, r0 - movs r1, 0x2 - ldrsh r0, [r5, r1] - lsls r0, 8 - movs r1, 0x3 - bl __divsi3 - adds r4, r0 - str r4, [sp, 0xF8] - mov r2, r8 - ldr r5, [r2, 0xC] - ldr r3, [sp, 0xF4] - subs r0, r3, r5 - adds r1, r6, 0 - bl __divsi3 - str r0, [sp, 0xFC] - mov r0, r8 - ldr r4, [r0, 0x10] - ldr r1, [sp, 0xF8] - subs r0, r1, r4 - adds r1, r6, 0 - bl __divsi3 - mov r10, r0 - add r0, sp, 0xD8 - str r5, [r0] - str r4, [r0, 0x4] - movs r7, 0 - adds r5, r0, 0 - cmp r7, r6 - bge _0807F7FC - adds r4, r5, 0 -_0807F794: - ldr r0, [r5] - ldr r2, [sp, 0xFC] - adds r0, r2, r0 - str r0, [r4] - ldr r0, [r4, 0x4] - add r0, r10 - str r0, [r4, 0x4] - mov r0, r8 - adds r1, r4, 0 - bl sub_804535C - mov r0, r8 - bl sub_8045888 - lsls r0, 24 - cmp r0, 0 - beq _0807F7E6 - ldr r0, [sp, 0x100] - bl sin_4096 - lsls r0, 5 - mov r3, r8 - str r0, [r3, 0x1C] - movs r0, 0x3B - bl sub_803E46C - movs r0, 0x3 - ands r0, r7 - cmp r0, 0 - bne _0807F7E6 - movs r0, 0x7 - mov r1, r9 - ands r1, r0 - mov r9, r1 - mov r0, r8 - movs r1, 0x6 - mov r2, r9 - bl sub_806CDD4 - movs r2, 0x1 - add r9, r2 -_0807F7E6: - movs r0, 0x80 - lsls r0, 4 - adds r1, r6, 0 - bl __divsi3 - ldr r3, [sp, 0x100] - adds r3, r0 - str r3, [sp, 0x100] - adds r7, 0x1 - cmp r7, r6 - blt _0807F794 -_0807F7FC: - ldr r4, [sp, 0xF4] - str r4, [r5] - add r1, sp, 0xD8 - ldr r0, [sp, 0xF8] - str r0, [r1, 0x4] - movs r0, 0 - mov r2, r8 - str r0, [r2, 0x1C] - mov r0, r8 - bl sub_804535C - movs r0, 0x3B - bl sub_803E46C - mov r3, r8 - ldr r0, [r3, 0x70] - movs r1, 0x7 - mov r4, r9 - ands r4, r1 - adds r0, 0x46 - strb r4, [r0] - add r2, sp, 0xD4 - movs r1, 0 - ldrsh r0, [r2, r1] - adds r4, r2, 0 - movs r3, 0x2 - ldrsh r1, [r4, r3] - bl GetTile - ldr r6, [r0, 0x10] - adds r0, r6, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _0807F876 - add r2, sp, 0xD4 - movs r0, 0 - ldrsh r1, [r2, r0] - movs r3, 0x2 - ldrsh r2, [r4, r3] - mov r0, r8 - movs r3, 0x1 - bl sub_80694C0 - mov r0, r8 - bl sub_807F9BC - b _0807F99C - .align 2, 0 -_0807F860: .4byte gFormatBuffer_Monsters -_0807F864: .4byte gUnknown_80FE690 -_0807F868: .4byte 0x000001a3 -_0807F86C: .4byte gAdjacentTileOffsets -_0807F870: - ldr r0, [r7] - str r0, [sp, 0xD4] - b _0807F8BE -_0807F876: - movs r5, 0 - add r4, sp, 0xE0 - adds r7, r4, 0 -_0807F87C: - ldr r0, _0807F8D0 - lsls r3, r5, 2 - adds r3, r0 - add r1, sp, 0xD4 - ldrh r0, [r1] - ldrh r2, [r3] - adds r0, r2 - lsls r0, 16 - lsrs r0, 16 - ldr r2, _0807F8D4 - ldr r1, [r7] - ands r1, r2 - orrs r1, r0 - str r1, [r4] - add r0, sp, 0xD4 - ldrh r2, [r0, 0x2] - ldrh r3, [r3, 0x2] - adds r2, r3 - lsls r2, 16 - ldr r0, _0807F8D8 - ands r1, r0 - orrs r1, r2 - str r1, [r4] - mov r0, r8 - add r1, sp, 0xE0 - bl sub_80703A0 - lsls r0, 24 - cmp r0, 0 - beq _0807F870 - adds r5, 0x1 - cmp r5, 0x7 - ble _0807F87C -_0807F8BE: - cmp r5, 0x8 - bne _0807F8DC - ldr r0, [sp, 0xEC] - mov r1, r8 - movs r2, 0 - movs r3, 0 - bl WarpTarget - b _0807F8FA - .align 2, 0 -_0807F8D0: .4byte gAdjacentTileOffsets -_0807F8D4: .4byte 0xffff0000 -_0807F8D8: .4byte 0x0000ffff -_0807F8DC: - mov r0, r8 - add r1, sp, 0xD4 - bl sub_807D068 - add r0, sp, 0xD4 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r0, 0xD6 - add r0, sp - movs r4, 0 - ldrsh r2, [r0, r4] - mov r0, r8 - movs r3, 0x1 - bl sub_80694C0 -_0807F8FA: - adds r0, r6, 0 - bl GetEntityType - cmp r0, 0x1 - bne _0807F954 - add r4, sp, 0xE4 - ldr r1, _0807F9AC - adds r0, r4, 0 - bl InitPokemonMove - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80571F0 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _0807F93C - ldr r0, _0807F9B0 - movs r3, 0 - ldrsh r2, [r0, r3] - str r1, [sp] - str r1, [sp, 0x4] - ldr r0, _0807F9B4 - str r0, [sp, 0x8] - str r1, [sp, 0xC] - str r1, [sp, 0x10] - str r1, [sp, 0x14] - ldr r0, [sp, 0xEC] - adds r1, r6, 0 - movs r3, 0 - bl sub_806F370 -_0807F93C: - adds r0, r6, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807F954 - ldr r0, [r6, 0x70] - adds r0, 0x46 - ldrb r1, [r0] - adds r0, r6, 0 - bl sub_806CE68 -_0807F954: - ldr r0, _0807F9B0 - movs r4, 0 - ldrsh r2, [r0, r4] - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - ldr r0, _0807F9B8 - str r0, [sp, 0x8] - str r1, [sp, 0xC] - str r1, [sp, 0x10] - str r1, [sp, 0x14] - ldr r0, [sp, 0xEC] - mov r1, r8 - movs r3, 0 - bl sub_806F370 - mov r0, r8 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807F98E - mov r1, r8 - ldr r0, [r1, 0x70] - adds r0, 0x46 - ldrb r1, [r0] - mov r0, r8 - bl sub_806CE68 -_0807F98E: - movs r0, 0x1E - movs r1, 0x3B - bl sub_803E708 - mov r0, r8 - bl sub_807F9BC -_0807F99C: - add sp, 0x10C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807F9AC: .4byte 0x00000163 -_0807F9B0: .4byte gHurlOrbDmgValue -_0807F9B4: .4byte 0x0000021a -_0807F9B8: .4byte 0x00000219 - thumb_func_end sub_807F43C - - thumb_func_start sub_807F9BC -sub_807F9BC: - push {r4,lr} - adds r4, r0, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0807FA0A - ldr r0, [r4, 0x70] - ldrb r0, [r0, 0x7] - cmp r0, 0 - beq _0807F9F4 - ldr r2, _0807FA10 - ldr r1, [r2] - movs r0, 0 - strb r0, [r1, 0x1] - ldr r0, [r2] - movs r1, 0xB8 - lsls r1, 3 - adds r0, r1 - movs r1, 0x1 - negs r1, r1 - str r1, [r0] - adds r0, r4, 0x4 - bl sub_804AC20 - movs r0, 0 - bl sub_807EC28 -_0807F9F4: - adds r0, r4, 0 - bl sub_806A5B8 - ldr r0, _0807FA10 - ldr r0, [r0] - ldr r1, _0807FA14 - adds r0, r1 - ldrb r1, [r0] - adds r0, r4, 0 - bl sub_8075900 -_0807FA0A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807FA10: .4byte gDungeon -_0807FA14: .4byte 0x00003a08 - thumb_func_end sub_807F9BC - - thumb_func_start sub_807FA18 -sub_807FA18: - push {r4-r7,lr} - sub sp, 0x4 - movs r6, 0 -_0807FA1E: - movs r5, 0 - adds r7, r6, 0x1 -_0807FA22: - adds r0, r5, 0 - adds r1, r6, 0 - bl GetTileMut - adds r4, r0, 0 - ldrh r1, [r4, 0x4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0807FA88 - lsls r0, r5, 16 - lsls r1, r6, 16 - lsrs r0, 16 - orrs r0, r1 - str r0, [sp] - ldrh r1, [r4, 0x4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0807FA4E - movs r0, 0x6 - b _0807FA56 -_0807FA4E: - bl sub_803D6FC - lsls r0, 24 - lsrs r0, 24 -_0807FA56: - cmp r0, 0x11 - bne _0807FA72 - movs r0, 0x11 - mov r1, sp - movs r2, 0x2 - bl SpawnTrap - cmp r0, 0 - beq _0807FA88 - str r0, [r4, 0x14] - adds r1, r0, 0 - adds r1, 0x20 - movs r0, 0x1 - b _0807FA86 -_0807FA72: - mov r1, sp - movs r2, 0 - bl SpawnTrap - cmp r0, 0 - beq _0807FA88 - str r0, [r4, 0x14] - adds r1, r0, 0 - adds r1, 0x20 - movs r0, 0 -_0807FA86: - strb r0, [r1] -_0807FA88: - adds r5, 0x1 - cmp r5, 0x37 - ble _0807FA22 - adds r6, r7, 0 - cmp r6, 0x1F - ble _0807FA1E - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_807FA18 thumb_func_start sub_807FA9C sub_807FA9C: diff --git a/src/code_807E5AC.c b/src/code_807E5AC.c index 4d7540a82..55f356c59 100644 --- a/src/code_807E5AC.c +++ b/src/code_807E5AC.c @@ -14,11 +14,17 @@ #include "string_format.h" #include "dungeon_movement.h" #include "dungeon_capabilities.h" +#include "dungeon_visibility.h" #include "dungeon_map_access.h" +#include "dungeon_movement.h" +#include "dungeon_ai_targeting.h" #include "position_util.h" +#include "dungeon_ai.h" #include "code_806CD90.h" #include "code_807CD9C.h" #include "code_805D8C8.h" +#include "code_8045A00.h" +#include "code_80450F8.h" #include "constants/ability.h" #include "constants/monster.h" #include "constants/type.h" @@ -57,6 +63,10 @@ extern const u8 *const gUnknown_80FAD8C; extern const u8 *const gUnknown_80FADB0; extern const u8 *const gUnknown_80FE5C0; extern const u8 *const gUnknown_80FE4F4; +extern const u8 *const gUnknown_80FE568; +extern const u8 *const gUnknown_80FE520; +extern const u8 *const gUnknown_80FE4D4; +extern const u8 *const gUnknown_80FE4B8; // Note: gUnknown_202ECA0 file's 2d array is read as 1d array in functions below, be careful! @@ -291,7 +301,7 @@ void sub_807EC28(bool8 arg0) { Entity *leader; EntityInfo *leaderInfo; - u32 var_34; + bool32 prevTileWasShop; bool32 isShopTile; if (sub_8044B28()) @@ -299,7 +309,7 @@ void sub_807EC28(bool8 arg0) leader = GetLeader(); leaderInfo = GetEntInfo(leader); - var_34 = gDungeon->unk644.unk54; + prevTileWasShop = gDungeon->unk644.unk54; isShopTile = (GetTileAtEntitySafe(leader)->terrainType & TERRAIN_TYPE_SHOP) != 0; gDungeon->unk644.unk54 = isShopTile; gDungeon->unk644.unk55 = isShopTile; @@ -313,7 +323,7 @@ void sub_807EC28(bool8 arg0) else { s32 i; struct MonDialogueSpriteInfo dialogueInfo; - bool8 var_30 = FALSE; + bool8 sameRoom = FALSE; bool8 var_2C; bool8 var_28; @@ -322,16 +332,16 @@ void sub_807EC28(bool8 arg0) if (EntityExists(wildMon)) { EntityInfo *wildMonInfo = GetEntInfo(wildMon); if (wildMonInfo->shopkeeper == SHOPKEEPER_MODE_SHOPKEEPER && sub_8070BC0(wildMon) && GetEntityRoom(leader) == GetEntityRoom(wildMon)) { - var_30 = TRUE; + sameRoom = TRUE; } } } dialogueInfo.species = MONSTER_KECLEON; dialogueInfo.spriteId = 0; - if (var_34 == 0) { + if (!prevTileWasShop) { if (isShopTile == TRUE) { - if (var_30) { + if (sameRoom) { DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE674, TRUE); // Ah welcome! } return; @@ -343,7 +353,7 @@ void sub_807EC28(bool8 arg0) } } - if ((var_34 != 1 || isShopTile) && !arg0) { + if ((prevTileWasShop != TRUE || isShopTile) && !arg0) { return; } @@ -396,7 +406,7 @@ void sub_807EC28(bool8 arg0) sub_807F33C(); } } - else if (var_28 && !var_30) { + else if (var_28 && !sameRoom) { if (gDungeon->unk644.unk50 > gDungeon->unk644.unk48) { sub_807F33C(); } @@ -406,7 +416,7 @@ void sub_807EC28(bool8 arg0) if (sub_807F19C(var_2C)) { sub_807F33C(); } - else if (var_34 == 1 && !isShopTile && var_30) { + else if (prevTileWasShop == TRUE && !isShopTile && sameRoom) { DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE65C, TRUE); // I await your next visit } } @@ -425,7 +435,6 @@ bool8 sub_807EF48(void) return FALSE; } - void sub_807EF84(void) { s32 val; @@ -435,7 +444,7 @@ void sub_807EF84(void) dialogueInfo.spriteId = 0; sub_807EFFC(1); - val = sub_807F19C(1); + val = sub_807F19C(TRUE); if (val != 0) { Tile *tile = GetTileAtEntitySafe(GetLeader()); if (tile->terrainType & TERRAIN_TYPE_SHOP) { @@ -499,4 +508,928 @@ void sub_807EFFC(bool8 arg0) } } +s32 sub_807F19C(bool8 arg0) +{ + s32 diff; + struct MonDialogueSpriteInfo dialogueInfo; + s32 i, x, y; + + dialogueInfo.species = MONSTER_KECLEON; + dialogueInfo.spriteId = 0; + diff = gDungeon->unk644.unk50 - gDungeon->unk644.unk48; + if (diff > 0) { + if (!arg0) { + return 1; + } + + gFormatArgs[0] = diff; + if (DisplayDungeonYesNoMessage(&dialogueInfo, gUnknown_80FE568, TRUE) != 1) { // The merchandise you have chosen costs X + return 1; + } + if (gTeamInventoryRef->teamMoney < diff) { + DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE520, TRUE); // You don't have enough money. + return 2; + } + PlaySoundEffect(0x14c); + AddToTeamMoney(-diff); + + for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) { + for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) { + const Tile *tile = GetTile(x, y); + if (!(tile->terrainType & TERRAIN_TYPE_SHOP) && tile->object != NULL && GetEntityType(tile->object) == ENTITY_ITEM) { + Item *itemPtr = GetItemData(tile->object); + if (CanSellItem(itemPtr->id)) { + itemPtr->flags &= ~(ITEM_FLAG_IN_SHOP); + } + } + } + } + + for (i = 0; i < INVENTORY_SIZE; i++) { + Item *item = &gTeamInventoryRef->teamItems[i]; + if (ItemExists(item) && CanSellItem(item->id)) { + item->flags &= ~(ITEM_FLAG_IN_SHOP); + } + } + + for (i = 0; i < DUNGEON_MAX_POKEMON; i++) { + Entity *mon = gDungeon->activePokemon[i]; + if (EntityExists(mon)) { + EntityInfo *monInfo = GetEntInfo(mon); + Item *item = &monInfo->heldItem; + if (ItemExists(item) && CanSellItem(item->id)) { + item->flags &= ~(ITEM_FLAG_IN_SHOP); + } + } + } + gDungeon->unk644.unk50 = gDungeon->unk644.unk48; + DisplayDungeonMessage(&dialogueInfo, gUnknown_80FE4D4, TRUE); // Thank you very much. + } + + return 0; +} + +void sub_807F33C(void) +{ + s32 i, x, y; + + gDungeon->unk644.unk2A = 1; + gDungeon->unk644.unk2B = 1; + LogMessageByIdWithPopupCheckUser(GetLeader(), gUnknown_80FE4B8); // Help! Thief! I've been robbed! Help me catch the thief. + for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) { + for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) { + const Tile *tile = GetTile(x,y); + if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_ITEM) { + Item *item = GetItemData(tile->object); + item->flags &= ~(ITEM_FLAG_IN_SHOP); + } + } + } + + for (i = 0; i < INVENTORY_SIZE; i++) { + Item *item = &gTeamInventoryRef->teamItems[i]; + if (ItemExists(item)) { + item->flags &= ~(ITEM_FLAG_IN_SHOP); + } + } + + for (i = 0; i < DUNGEON_MAX_POKEMON; i++) { + Entity *entity = gDungeon->activePokemon[i]; + if (EntityExists(entity)) { + Item *item; + EntityInfo *info = GetEntInfo(entity); + + info->shopkeeper = FALSE; + CalcSpeedStage(entity); + item = &info->heldItem; + if (ItemExists(item)) { + item->flags &= ~(ITEM_FLAG_IN_SHOP); + } + } + } + + gDungeon->unk644.unk50 = 0; + gDungeon->unk644.unk48 = 0; + gDungeon->unk644.unk4C = 0; +} + +extern void sub_80833E8(DungeonPos *param_1, s32 *param_2); +extern void sub_806A5B8(Entity *); + +void sub_807F9BC(Entity *entity); + +/* +void sub_807F43C(Entity *target, Entity *attacker) +{ + if (AbilityIsActive(attacker, ABILITY_SUCTION_CUPS)) { + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], attacker, 0); + TryDisplayDungeonLoggableMessage3(attacker, target, gUnknown_80FCB40); // is anchored, cannot be moved + } + else if (attacker == target) { + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], attacker, 0); + TryDisplayDungeonLoggableMessage3(attacker, attacker, gUnknown_80FCB70); // couldn't be thrown for some reason + } + else { + s32 var_74[4]; + DungeonPos positions[40]; + DungeonPos attackerPos = attacker->pos; + s32 var_3C = 0; + s32 monId; + + while (1) { + s32 positionsCounter = 0; + for (monId = 0; monId < DUNGEON_MAX_POKEMON; monId++) { + Entity *mon = gDungeon->activePokemon[monId]; + if (EntityExists(mon) && target != mon && attacker != mon && CanSeeTarget(target, mon)) { + if (var_3C == 0) { + if (GetTreatmentBetweenMonsters(target, mon, FALSE, TRUE) != 1) + continue; + } + else { + if (GetTreatmentBetweenMonsters(target, mon, FALSE, TRUE) != 0) + continue; + } + + if (var_3C != 0) { + s32 directionId; + DungeonPos pos; + for (directionId = 0; directionId < NUM_DIRECTIONS; directionId++) { + pos.x = mon->pos.x + gAdjacentTileOffsets[directionId].x; + pos.y = mon->pos.y + gAdjacentTileOffsets[directionId].y; + if (!sub_80703A0(attacker, &pos)) + break; + } + + if (directionId == NUM_DIRECTIONS) + break; + if (positionsCounter > 39) + break; + positions[positionsCounter++] = mon->pos; + } + else { + s32 directionId; + DungeonPos pos; + for (directionId = 0; directionId < NUM_DIRECTIONS; directionId++) { + pos.x = mon->pos.x + gAdjacentTileOffsets[directionId].x; + pos.y = mon->pos.y + gAdjacentTileOffsets[directionId].y; + if (!sub_80703A0(attacker, &pos) && positionsCounter < 40) { + positions[positionsCounter++] = mon->pos; + } + } + } + } + } + + if (positionsCounter == 0) { + if (++var_3C < 2) + continue; + sub_80833E8(&target->pos, var_74); + } + else { + + } + break; + } + + } +} +*/ + +NAKED void sub_807F43C(Entity *target, Entity *attacker) +{ + asm_unified("push {r4-r7,lr}\n" +" mov r7, r10\n" +" mov r6, r9\n" +" mov r5, r8\n" +" push {r5-r7}\n" +" sub sp, 0x10C\n" +" str r0, [sp, 0xEC]\n" +" mov r8, r1\n" +" mov r0, r8\n" +" movs r1, 0xE\n" +" bl AbilityIsActive\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _0807F470\n" +" ldr r0, _0807F468\n" +" mov r1, r8\n" +" movs r2, 0\n" +" bl SubstitutePlaceholderStringTags\n" +" ldr r0, _0807F46C\n" +" b _0807F694\n" +" .align 2, 0\n" +"_0807F468: .4byte gFormatBuffer_Monsters\n" +"_0807F46C: .4byte gUnknown_80FCB40\n" +"_0807F470:\n" +" ldr r0, [sp, 0xEC]\n" +" cmp r0, r8\n" +" bne _0807F490\n" +" ldr r0, _0807F488\n" +" mov r1, r8\n" +" movs r2, 0\n" +" bl SubstitutePlaceholderStringTags\n" +" ldr r0, _0807F48C\n" +" ldr r2, [r0]\n" +" mov r0, r8\n" +" b _0807F698\n" +" .align 2, 0\n" +"_0807F488: .4byte gFormatBuffer_Monsters\n" +"_0807F48C: .4byte gUnknown_80FCB70\n" +"_0807F490:\n" +" mov r1, r8\n" +" ldr r0, [r1, 0x4]\n" +" add r1, sp, 0xD4\n" +" str r0, [r1]\n" +" movs r2, 0\n" +" str r2, [sp, 0xF0]\n" +"_0807F49C:\n" +" movs r3, 0\n" +" mov r9, r3\n" +" movs r7, 0\n" +" mov r4, sp\n" +" adds r4, 0x18\n" +" str r4, [sp, 0x108]\n" +"_0807F4A8:\n" +" ldr r0, _0807F504\n" +" ldr r0, [r0]\n" +" lsls r1, r7, 2\n" +" ldr r2, _0807F508\n" +" adds r0, r2\n" +" adds r0, r1\n" +" ldr r4, [r0]\n" +" adds r0, r4, 0\n" +" bl EntityExists\n" +" lsls r0, 24\n" +" adds r3, r7, 0x1\n" +" str r3, [sp, 0x104]\n" +" cmp r0, 0\n" +" bne _0807F4C8\n" +" b _0807F602\n" +"_0807F4C8:\n" +" ldr r0, [sp, 0xEC]\n" +" cmp r0, r4\n" +" bne _0807F4D0\n" +" b _0807F602\n" +"_0807F4D0:\n" +" cmp r8, r4\n" +" bne _0807F4D6\n" +" b _0807F602\n" +"_0807F4D6:\n" +" adds r1, r4, 0\n" +" bl CanSeeTarget\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" bne _0807F4E4\n" +" b _0807F602\n" +"_0807F4E4:\n" +" ldr r1, [sp, 0xF0]\n" +" cmp r1, 0\n" +" bne _0807F50C\n" +" ldr r0, [sp, 0xEC]\n" +" adds r1, r4, 0\n" +" movs r2, 0\n" +" movs r3, 0x1\n" +" bl GetTreatmentBetweenMonsters\n" +" lsls r0, 24\n" +" lsrs r0, 24\n" +" cmp r0, 0x1\n" +" beq _0807F500\n" +" b _0807F602\n" +"_0807F500:\n" +" b _0807F51E\n" +" .align 2, 0\n" +"_0807F504: .4byte gDungeon\n" +"_0807F508: .4byte 0x000135cc\n" +"_0807F50C:\n" +" ldr r0, [sp, 0xEC]\n" +" adds r1, r4, 0\n" +" movs r2, 0\n" +" movs r3, 0x1\n" +" bl GetTreatmentBetweenMonsters\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" bne _0807F602\n" +"_0807F51E:\n" +" ldr r2, [sp, 0xF0]\n" +" cmp r2, 0\n" +" bne _0807F594\n" +" movs r5, 0\n" +" add r6, sp, 0xC8\n" +" adds r3, r7, 0x1\n" +" str r3, [sp, 0x104]\n" +" adds r7, r6, 0\n" +" ldr r0, _0807F588\n" +" mov r10, r0\n" +"_0807F532:\n" +" ldr r0, _0807F58C\n" +" lsls r3, r5, 2\n" +" adds r3, r0\n" +" ldrh r0, [r4, 0x4]\n" +" ldrh r1, [r3]\n" +" adds r0, r1\n" +" lsls r0, 16\n" +" lsrs r0, 16\n" +" ldr r1, [r6]\n" +" mov r2, r10\n" +" ands r1, r2\n" +" orrs r1, r0\n" +" str r1, [r7]\n" +" ldrh r2, [r4, 0x6]\n" +" ldrh r3, [r3, 0x2]\n" +" adds r2, r3\n" +" lsls r2, 16\n" +" ldr r0, _0807F590\n" +" ands r1, r0\n" +" orrs r1, r2\n" +" str r1, [r7]\n" +" mov r0, r8\n" +" add r1, sp, 0xC8\n" +" bl sub_80703A0\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _0807F570\n" +" adds r5, 0x1\n" +" cmp r5, 0x7\n" +" ble _0807F532\n" +"_0807F570:\n" +" cmp r5, 0x8\n" +" beq _0807F602\n" +" mov r3, r9\n" +" cmp r3, 0x27\n" +" bgt _0807F602\n" +" ldr r0, [r4, 0x4]\n" +" ldr r4, [sp, 0x108]\n" +" stm r4!, {r0}\n" +" str r4, [sp, 0x108]\n" +" movs r0, 0x1\n" +" add r9, r0\n" +" b _0807F602\n" +" .align 2, 0\n" +"_0807F588: .4byte 0xffff0000\n" +"_0807F58C: .4byte gAdjacentTileOffsets\n" +"_0807F590: .4byte 0x0000ffff\n" +"_0807F594:\n" +" movs r5, 0\n" +" add r6, sp, 0xCC\n" +" adds r1, r7, 0x1\n" +" str r1, [sp, 0x104]\n" +" adds r7, r6, 0\n" +" mov r2, r9\n" +" lsls r0, r2, 2\n" +" add r0, sp\n" +" adds r0, 0x18\n" +" mov r10, r0\n" +"_0807F5A8:\n" +" ldr r0, _0807F630\n" +" lsls r3, r5, 2\n" +" adds r3, r0\n" +" ldrh r0, [r4, 0x4]\n" +" ldrh r1, [r3]\n" +" adds r0, r1\n" +" lsls r0, 16\n" +" lsrs r0, 16\n" +" ldr r2, _0807F634\n" +" ldr r1, [r6]\n" +" ands r1, r2\n" +" orrs r1, r0\n" +" str r1, [r7]\n" +" ldrh r2, [r4, 0x6]\n" +" ldrh r3, [r3, 0x2]\n" +" adds r2, r3\n" +" lsls r2, 16\n" +" ldr r0, _0807F638\n" +" ands r1, r0\n" +" orrs r1, r2\n" +" str r1, [r7]\n" +" mov r0, r8\n" +" add r1, sp, 0xCC\n" +" bl sub_80703A0\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" bne _0807F5FC\n" +" mov r2, r9\n" +" cmp r2, 0x27\n" +" bgt _0807F5FC\n" +" ldr r0, [r6]\n" +" mov r3, r10\n" +" adds r3, 0x4\n" +" mov r10, r3\n" +" subs r3, 0x4\n" +" stm r3!, {r0}\n" +" ldr r0, [sp, 0x108]\n" +" adds r0, 0x4\n" +" str r0, [sp, 0x108]\n" +" movs r1, 0x1\n" +" add r9, r1\n" +"_0807F5FC:\n" +" adds r5, 0x1\n" +" cmp r5, 0x7\n" +" ble _0807F5A8\n" +"_0807F602:\n" +" ldr r7, [sp, 0x104]\n" +" cmp r7, 0x13\n" +" bgt _0807F60A\n" +" b _0807F4A8\n" +"_0807F60A:\n" +" mov r2, r9\n" +" cmp r2, 0\n" +" bne _0807F63C\n" +" ldr r3, [sp, 0xF0]\n" +" adds r3, 0x1\n" +" str r3, [sp, 0xF0]\n" +" cmp r3, 0x1\n" +" bgt _0807F61C\n" +" b _0807F49C\n" +"_0807F61C:\n" +" ldr r0, [sp, 0xEC]\n" +" adds r0, 0x4\n" +" add r4, sp, 0xB8\n" +" adds r1, r4, 0\n" +" bl sub_80833E8\n" +" movs r7, 0\n" +" add r5, sp, 0xD0\n" +" adds r6, r5, 0\n" +" b _0807F654\n" +" .align 2, 0\n" +"_0807F630: .4byte gAdjacentTileOffsets\n" +"_0807F634: .4byte 0xffff0000\n" +"_0807F638: .4byte 0x0000ffff\n" +"_0807F63C:\n" +" mov r0, r9\n" +" bl DungeonRandInt\n" +" lsls r0, 2\n" +" add r0, sp\n" +" adds r0, 0x18\n" +" ldr r0, [r0]\n" +" str r0, [sp, 0xD4]\n" +" b _0807F6A8\n" +"_0807F64E:\n" +" ldr r0, [r5]\n" +" str r0, [sp, 0xD4]\n" +" b _0807F68E\n" +"_0807F654:\n" +" ldr r0, [r4]\n" +" ldr r1, [r4, 0x8]\n" +" bl DungeonRandRange\n" +" lsls r0, 16\n" +" lsrs r0, 16\n" +" ldr r2, _0807F6A0\n" +" ldr r1, [r5]\n" +" ands r1, r2\n" +" orrs r1, r0\n" +" str r1, [r6]\n" +" ldr r0, [r4, 0x4]\n" +" ldr r1, [r4, 0xC]\n" +" bl DungeonRandRange\n" +" lsls r0, 16\n" +" ldrh r1, [r6]\n" +" orrs r1, r0\n" +" str r1, [r6]\n" +" mov r0, r8\n" +" add r1, sp, 0xD0\n" +" bl sub_80703A0\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _0807F64E\n" +" adds r7, 0x1\n" +" cmp r7, 0x63\n" +" ble _0807F654\n" +"_0807F68E:\n" +" cmp r7, 0x64\n" +" bne _0807F6A8\n" +" ldr r0, _0807F6A4\n" +"_0807F694:\n" +" ldr r2, [r0]\n" +" ldr r0, [sp, 0xEC]\n" +"_0807F698:\n" +" mov r1, r8\n" +" bl TryDisplayDungeonLoggableMessage3\n" +" b _0807F99C\n" +" .align 2, 0\n" +"_0807F6A0: .4byte 0xffff0000\n" +"_0807F6A4: .4byte gUnknown_80FE6B4\n" +"_0807F6A8:\n" +" ldr r0, _0807F860\n" +" mov r1, r8\n" +" movs r2, 0\n" +" bl SubstitutePlaceholderStringTags\n" +" ldr r0, _0807F864\n" +" ldr r2, [r0]\n" +" ldr r0, [sp, 0xEC]\n" +" mov r1, r8\n" +" bl TryDisplayDungeonLoggableMessage3\n" +" mov r0, r8\n" +" bl sub_8045888\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _0807F6D0\n" +" ldr r0, _0807F868\n" +" bl PlaySoundEffect\n" +"_0807F6D0:\n" +" movs r4, 0\n" +" str r4, [sp, 0x100]\n" +" mov r1, r8\n" +" ldr r0, [r1, 0x70]\n" +" adds r0, 0x46\n" +" ldrb r0, [r0]\n" +" mov r9, r0\n" +" add r2, sp, 0xD4\n" +" movs r3, 0\n" +" ldrsh r1, [r2, r3]\n" +" mov r4, r8\n" +" movs r3, 0x4\n" +" ldrsh r0, [r4, r3]\n" +" subs r3, r1, r0\n" +" movs r4, 0x2\n" +" ldrsh r1, [r2, r4]\n" +" mov r2, r8\n" +" movs r4, 0x6\n" +" ldrsh r0, [r2, r4]\n" +" subs r1, r0\n" +" cmp r1, r3\n" +" bge _0807F6FE\n" +" adds r1, r3, 0\n" +"_0807F6FE:\n" +" lsls r6, r1, 4\n" +" cmp r6, 0x50\n" +" ble _0807F706\n" +" movs r6, 0x50\n" +"_0807F706:\n" +" cmp r6, 0x9\n" +" bgt _0807F70C\n" +" movs r6, 0xA\n" +"_0807F70C:\n" +" mov r1, r8\n" +" adds r1, 0x4\n" +" add r0, sp, 0xD4\n" +" bl GetDirectionTowardsPosition\n" +" adds r5, r0, 0\n" +" add r2, sp, 0xD4\n" +" movs r1, 0\n" +" ldrsh r0, [r2, r1]\n" +" lsls r4, r0, 1\n" +" adds r4, r0\n" +" lsls r4, 11\n" +" movs r3, 0xC0\n" +" lsls r3, 4\n" +" adds r4, r3\n" +" ldr r0, _0807F86C\n" +" lsls r5, 2\n" +" adds r5, r0\n" +" movs r1, 0\n" +" ldrsh r0, [r5, r1]\n" +" lsls r0, 8\n" +" movs r1, 0x3\n" +" bl __divsi3\n" +" adds r4, r0\n" +" str r4, [sp, 0xF4]\n" +" movs r3, 0xD6\n" +" add r3, sp\n" +" movs r2, 0\n" +" ldrsh r0, [r3, r2]\n" +" lsls r4, r0, 1\n" +" adds r4, r0\n" +" lsls r4, 11\n" +" movs r0, 0x80\n" +" lsls r0, 5\n" +" adds r4, r0\n" +" movs r1, 0x2\n" +" ldrsh r0, [r5, r1]\n" +" lsls r0, 8\n" +" movs r1, 0x3\n" +" bl __divsi3\n" +" adds r4, r0\n" +" str r4, [sp, 0xF8]\n" +" mov r2, r8\n" +" ldr r5, [r2, 0xC]\n" +" ldr r3, [sp, 0xF4]\n" +" subs r0, r3, r5\n" +" adds r1, r6, 0\n" +" bl __divsi3\n" +" str r0, [sp, 0xFC]\n" +" mov r0, r8\n" +" ldr r4, [r0, 0x10]\n" +" ldr r1, [sp, 0xF8]\n" +" subs r0, r1, r4\n" +" adds r1, r6, 0\n" +" bl __divsi3\n" +" mov r10, r0\n" +" add r0, sp, 0xD8\n" +" str r5, [r0]\n" +" str r4, [r0, 0x4]\n" +" movs r7, 0\n" +" adds r5, r0, 0\n" +" cmp r7, r6\n" +" bge _0807F7FC\n" +" adds r4, r5, 0\n" +"_0807F794:\n" +" ldr r0, [r5]\n" +" ldr r2, [sp, 0xFC]\n" +" adds r0, r2, r0\n" +" str r0, [r4]\n" +" ldr r0, [r4, 0x4]\n" +" add r0, r10\n" +" str r0, [r4, 0x4]\n" +" mov r0, r8\n" +" adds r1, r4, 0\n" +" bl sub_804535C\n" +" mov r0, r8\n" +" bl sub_8045888\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _0807F7E6\n" +" ldr r0, [sp, 0x100]\n" +" bl sin_4096\n" +" lsls r0, 5\n" +" mov r3, r8\n" +" str r0, [r3, 0x1C]\n" +" movs r0, 0x3B\n" +" bl sub_803E46C\n" +" movs r0, 0x3\n" +" ands r0, r7\n" +" cmp r0, 0\n" +" bne _0807F7E6\n" +" movs r0, 0x7\n" +" mov r1, r9\n" +" ands r1, r0\n" +" mov r9, r1\n" +" mov r0, r8\n" +" movs r1, 0x6\n" +" mov r2, r9\n" +" bl sub_806CDD4\n" +" movs r2, 0x1\n" +" add r9, r2\n" +"_0807F7E6:\n" +" movs r0, 0x80\n" +" lsls r0, 4\n" +" adds r1, r6, 0\n" +" bl __divsi3\n" +" ldr r3, [sp, 0x100]\n" +" adds r3, r0\n" +" str r3, [sp, 0x100]\n" +" adds r7, 0x1\n" +" cmp r7, r6\n" +" blt _0807F794\n" +"_0807F7FC:\n" +" ldr r4, [sp, 0xF4]\n" +" str r4, [r5]\n" +" add r1, sp, 0xD8\n" +" ldr r0, [sp, 0xF8]\n" +" str r0, [r1, 0x4]\n" +" movs r0, 0\n" +" mov r2, r8\n" +" str r0, [r2, 0x1C]\n" +" mov r0, r8\n" +" bl sub_804535C\n" +" movs r0, 0x3B\n" +" bl sub_803E46C\n" +" mov r3, r8\n" +" ldr r0, [r3, 0x70]\n" +" movs r1, 0x7\n" +" mov r4, r9\n" +" ands r4, r1\n" +" adds r0, 0x46\n" +" strb r4, [r0]\n" +" add r2, sp, 0xD4\n" +" movs r1, 0\n" +" ldrsh r0, [r2, r1]\n" +" adds r4, r2, 0\n" +" movs r3, 0x2\n" +" ldrsh r1, [r4, r3]\n" +" bl GetTile\n" +" ldr r6, [r0, 0x10]\n" +" adds r0, r6, 0\n" +" bl EntityExists\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" bne _0807F876\n" +" add r2, sp, 0xD4\n" +" movs r0, 0\n" +" ldrsh r1, [r2, r0]\n" +" movs r3, 0x2\n" +" ldrsh r2, [r4, r3]\n" +" mov r0, r8\n" +" movs r3, 0x1\n" +" bl sub_80694C0\n" +" mov r0, r8\n" +" bl sub_807F9BC\n" +" b _0807F99C\n" +" .align 2, 0\n" +"_0807F860: .4byte gFormatBuffer_Monsters\n" +"_0807F864: .4byte gUnknown_80FE690\n" +"_0807F868: .4byte 0x000001a3\n" +"_0807F86C: .4byte gAdjacentTileOffsets\n" +"_0807F870:\n" +" ldr r0, [r7]\n" +" str r0, [sp, 0xD4]\n" +" b _0807F8BE\n" +"_0807F876:\n" +" movs r5, 0\n" +" add r4, sp, 0xE0\n" +" adds r7, r4, 0\n" +"_0807F87C:\n" +" ldr r0, _0807F8D0\n" +" lsls r3, r5, 2\n" +" adds r3, r0\n" +" add r1, sp, 0xD4\n" +" ldrh r0, [r1]\n" +" ldrh r2, [r3]\n" +" adds r0, r2\n" +" lsls r0, 16\n" +" lsrs r0, 16\n" +" ldr r2, _0807F8D4\n" +" ldr r1, [r7]\n" +" ands r1, r2\n" +" orrs r1, r0\n" +" str r1, [r4]\n" +" add r0, sp, 0xD4\n" +" ldrh r2, [r0, 0x2]\n" +" ldrh r3, [r3, 0x2]\n" +" adds r2, r3\n" +" lsls r2, 16\n" +" ldr r0, _0807F8D8\n" +" ands r1, r0\n" +" orrs r1, r2\n" +" str r1, [r4]\n" +" mov r0, r8\n" +" add r1, sp, 0xE0\n" +" bl sub_80703A0\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _0807F870\n" +" adds r5, 0x1\n" +" cmp r5, 0x7\n" +" ble _0807F87C\n" +"_0807F8BE:\n" +" cmp r5, 0x8\n" +" bne _0807F8DC\n" +" ldr r0, [sp, 0xEC]\n" +" mov r1, r8\n" +" movs r2, 0\n" +" movs r3, 0\n" +" bl WarpTarget\n" +" b _0807F8FA\n" +" .align 2, 0\n" +"_0807F8D0: .4byte gAdjacentTileOffsets\n" +"_0807F8D4: .4byte 0xffff0000\n" +"_0807F8D8: .4byte 0x0000ffff\n" +"_0807F8DC:\n" +" mov r0, r8\n" +" add r1, sp, 0xD4\n" +" bl sub_807D068\n" +" add r0, sp, 0xD4\n" +" movs r3, 0\n" +" ldrsh r1, [r0, r3]\n" +" movs r0, 0xD6\n" +" add r0, sp\n" +" movs r4, 0\n" +" ldrsh r2, [r0, r4]\n" +" mov r0, r8\n" +" movs r3, 0x1\n" +" bl sub_80694C0\n" +"_0807F8FA:\n" +" adds r0, r6, 0\n" +" bl GetEntityType\n" +" cmp r0, 0x1\n" +" bne _0807F954\n" +" add r4, sp, 0xE4\n" +" ldr r1, _0807F9AC\n" +" adds r0, r4, 0\n" +" bl InitPokemonMove\n" +" adds r0, r6, 0\n" +" adds r1, r4, 0\n" +" bl sub_80571F0\n" +" lsls r0, 24\n" +" lsrs r1, r0, 24\n" +" cmp r1, 0\n" +" bne _0807F93C\n" +" ldr r0, _0807F9B0\n" +" movs r3, 0\n" +" ldrsh r2, [r0, r3]\n" +" str r1, [sp]\n" +" str r1, [sp, 0x4]\n" +" ldr r0, _0807F9B4\n" +" str r0, [sp, 0x8]\n" +" str r1, [sp, 0xC]\n" +" str r1, [sp, 0x10]\n" +" str r1, [sp, 0x14]\n" +" ldr r0, [sp, 0xEC]\n" +" adds r1, r6, 0\n" +" movs r3, 0\n" +" bl sub_806F370\n" +"_0807F93C:\n" +" adds r0, r6, 0\n" +" bl EntityExists\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _0807F954\n" +" ldr r0, [r6, 0x70]\n" +" adds r0, 0x46\n" +" ldrb r1, [r0]\n" +" adds r0, r6, 0\n" +" bl sub_806CE68\n" +"_0807F954:\n" +" ldr r0, _0807F9B0\n" +" movs r4, 0\n" +" ldrsh r2, [r0, r4]\n" +" movs r1, 0\n" +" str r1, [sp]\n" +" str r1, [sp, 0x4]\n" +" ldr r0, _0807F9B8\n" +" str r0, [sp, 0x8]\n" +" str r1, [sp, 0xC]\n" +" str r1, [sp, 0x10]\n" +" str r1, [sp, 0x14]\n" +" ldr r0, [sp, 0xEC]\n" +" mov r1, r8\n" +" movs r3, 0\n" +" bl sub_806F370\n" +" mov r0, r8\n" +" bl EntityExists\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _0807F98E\n" +" mov r1, r8\n" +" ldr r0, [r1, 0x70]\n" +" adds r0, 0x46\n" +" ldrb r1, [r0]\n" +" mov r0, r8\n" +" bl sub_806CE68\n" +"_0807F98E:\n" +" movs r0, 0x1E\n" +" movs r1, 0x3B\n" +" bl sub_803E708\n" +" mov r0, r8\n" +" bl sub_807F9BC\n" +"_0807F99C:\n" +" add sp, 0x10C\n" +" pop {r3-r5}\n" +" mov r8, r3\n" +" mov r9, r4\n" +" mov r10, r5\n" +" pop {r4-r7}\n" +" pop {r0}\n" +" bx r0\n" +" .align 2, 0\n" +"_0807F9AC: .4byte 0x00000163\n" +"_0807F9B0: .4byte gHurlOrbDmgValue\n" +"_0807F9B4: .4byte 0x0000021a\n" +"_0807F9B8: .4byte 0x00000219"); +} + +void sub_807F9BC(Entity *entity) +{ + if (EntityExists(entity)) { + EntityInfo *entInfo = GetEntInfo(entity); + if (entInfo->isTeamLeader) { + gDungeon->unk1 = 0; + gDungeon->unk5C0 = -1; + sub_804AC20(&entity->pos); + sub_807EC28(FALSE); + } + sub_806A5B8(entity); + sub_8075900(entity, gDungeon->forceMonsterHouse); + } +} + +extern u8 sub_803D6FC(void); + +void sub_807FA18(void) +{ + s32 x, y; + + for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) { + for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) { + Tile *tile = GetTileMut(x, y); + + if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_TRAP) { + s32 trapId; + DungeonPos pos = {x, y}; + + if (tile->spawnOrVisibilityFlags & SPAWN_FLAG_UNK6) { + trapId = TRAP_WARP_TRAP; + } + else { + trapId = sub_803D6FC(); + } + + if (trapId == TRAP_WONDER_TILE) { + Entity *trap = SpawnTrap(trapId, &pos, 2); + if (trap != NULL) { + tile->object = trap; + trap->isVisible = TRUE; + } + } + else { + Entity *trap = SpawnTrap(trapId, &pos, 0); + if (trap != NULL) { + tile->object = trap; + trap->isVisible = FALSE; + } + } + } + } + } +} + //