diff --git a/asm/ground_map_1.s b/asm/ground_map_1.s deleted file mode 100644 index 39710745e..000000000 --- a/asm/ground_map_1.s +++ /dev/null @@ -1,1048 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80A5204 -sub_80A5204: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - str r0, [sp] - mov r8, r1 - str r2, [sp, 0x4] - str r3, [sp, 0x8] - movs r1, 0x8 - ldrsh r0, [r2, r1] - cmp r0, 0 - bgt _080A5222 - b _080A53EA -_080A5222: - mov r5, r8 - ldr r2, [sp] - mov r12, r2 - movs r0, 0 - ldr r3, [sp, 0x4] - ldrb r3, [r3, 0x1] - str r3, [sp, 0x10] - ldr r1, [sp, 0x4] - ldrh r2, [r1, 0xA] - mov r1, sp - strh r2, [r1, 0xC] - movs r1, 0xFF -_080A523A: - adds r0, 0x1 - mov r10, r0 - movs r3, 0xFF - mov r9, r3 -_080A5242: - mov r0, r12 - strb r1, [r0] - movs r2, 0x1 - add r12, r2 - movs r3, 0x1 - negs r3, r3 - add r9, r3 - mov r0, r9 - cmp r0, 0 - bge _080A5242 - mov r0, r10 - cmp r0, 0x3 - ble _080A523A - movs r1, 0 - ldr r2, [sp, 0x10] - cmp r1, r2 - blt _080A5266 - b _080A53BA -_080A5266: - ldr r3, [sp, 0x4] - ldrb r7, [r3] -_080A526A: - adds r0, 0x1 - mov r10, r0 - adds r0, r1, 0x1 - str r0, [sp, 0x14] - movs r0, 0xFF - movs r2, 0x4 - mov r9, r2 -_080A5278: - mov r3, r12 - strb r0, [r3] - movs r2, 0x1 - add r12, r2 - movs r3, 0x1 - negs r3, r3 - add r9, r3 - mov r2, r9 - cmp r2, 0 - bge _080A5278 - movs r3, 0x5 - mov r9, r3 - movs r0, 0 - cmp r1, 0 - bne _080A5308 - cmp r1, r7 - bge _080A5394 -_080A529A: - ldrb r1, [r5] - adds r5, 0x1 - cmp r1, 0xBF - ble _080A52C2 - adds r6, r0, 0 - subs r6, 0xBF - cmp r1, 0xBF - ble _080A5300 - adds r2, r1, 0 - subs r2, 0xBF -_080A52AE: - ldrb r0, [r5] - mov r3, r12 - strb r0, [r3] - adds r5, 0x1 - movs r0, 0x1 - add r12, r0 - subs r2, 0x1 - cmp r2, 0 - bne _080A52AE - b _080A5300 -_080A52C2: - cmp r1, 0x7F - ble _080A52E6 - ldrb r4, [r5] - adds r5, 0x1 - adds r6, r0, 0 - subs r6, 0x7F - cmp r1, 0x7F - ble _080A5300 - adds r2, r1, 0 - subs r2, 0x7F -_080A52D6: - mov r3, r12 - strb r4, [r3] - movs r0, 0x1 - add r12, r0 - subs r2, 0x1 - cmp r2, 0 - bne _080A52D6 - b _080A5300 -_080A52E6: - movs r2, 0 - adds r6, r0, 0x1 - cmp r2, r1 - bgt _080A5300 - movs r0, 0 - adds r2, r1, 0x1 -_080A52F2: - mov r3, r12 - strb r0, [r3] - movs r3, 0x1 - add r12, r3 - subs r2, 0x1 - cmp r2, 0 - bne _080A52F2 -_080A5300: - adds r0, r6, r1 - cmp r0, r7 - blt _080A529A - b _080A5394 -_080A5308: - ldr r4, _080A5340 - add r4, r12 - cmp r0, r7 - bge _080A5394 -_080A5310: - ldrb r3, [r5] - adds r5, 0x1 - cmp r3, 0xBF - ble _080A5344 - adds r6, r0, 0 - subs r6, 0xBF - cmp r3, 0xBF - ble _080A538E - adds r2, r3, 0 - subs r2, 0xBF -_080A5324: - ldrb r1, [r5] - ldrb r0, [r4] - eors r1, r0 - mov r0, r12 - strb r1, [r0] - adds r4, 0x1 - adds r5, 0x1 - movs r1, 0x1 - add r12, r1 - subs r2, 0x1 - cmp r2, 0 - bne _080A5324 - b _080A538E - .align 2, 0 -_080A5340: .4byte 0xffffff00 -_080A5344: - cmp r3, 0x7F - ble _080A5372 - ldrb r2, [r5] - mov r8, r2 - adds r5, 0x1 - adds r6, r0, 0 - subs r6, 0x7F - cmp r3, 0x7F - ble _080A538E - adds r2, r3, 0 - subs r2, 0x7F -_080A535A: - ldrb r1, [r4] - mov r0, r8 - eors r0, r1 - mov r1, r12 - strb r0, [r1] - adds r4, 0x1 - movs r0, 0x1 - add r12, r0 - subs r2, 0x1 - cmp r2, 0 - bne _080A535A - b _080A538E -_080A5372: - movs r2, 0 - adds r6, r0, 0x1 - cmp r2, r3 - bgt _080A538E - adds r2, r3, 0x1 -_080A537C: - ldrb r0, [r4] - mov r1, r12 - strb r0, [r1] - adds r4, 0x1 - movs r0, 0x1 - add r12, r0 - subs r2, 0x1 - cmp r2, 0 - bne _080A537C -_080A538E: - adds r0, r6, r3 - cmp r0, r7 - blt _080A5310 -_080A5394: - add r9, r7 - mov r1, r9 - cmp r1, 0xFF - bgt _080A53AE - movs r0, 0xFF -_080A539E: - mov r2, r12 - strb r0, [r2] - movs r3, 0x1 - add r12, r3 - add r9, r3 - mov r1, r9 - cmp r1, 0xFF - ble _080A539E -_080A53AE: - ldr r1, [sp, 0x14] - mov r0, r10 - ldr r2, [sp, 0x10] - cmp r1, r2 - bge _080A53BA - b _080A526A -_080A53BA: - ldr r3, [sp, 0x8] - cmp r0, r3 - bge _080A53E6 - movs r1, 0xFF -_080A53C2: - adds r0, 0x1 - mov r10, r0 - movs r0, 0xFF - mov r9, r0 -_080A53CA: - mov r2, r12 - strb r1, [r2] - movs r3, 0x1 - add r12, r3 - movs r0, 0x1 - negs r0, r0 - add r9, r0 - mov r2, r9 - cmp r2, 0 - bge _080A53CA - mov r0, r10 - ldr r3, [sp, 0x8] - cmp r0, r3 - blt _080A53C2 -_080A53E6: - mov r8, r5 - b _080A547E -_080A53EA: - ldr r1, [sp] - movs r0, 0 - ldr r2, [sp, 0x4] - ldrb r2, [r2, 0x1] - str r2, [sp, 0x10] - ldr r3, [sp, 0x4] - ldrh r2, [r3, 0xA] - mov r3, sp - strh r2, [r3, 0xC] - movs r6, 0xFF -_080A53FE: - adds r5, r0, 0x1 - movs r4, 0xFF -_080A5402: - strb r6, [r1] - adds r1, 0x1 - subs r4, 0x1 - cmp r4, 0 - bge _080A5402 - adds r0, r5, 0 - cmp r0, 0x3 - ble _080A53FE - movs r4, 0 - ldr r3, [sp, 0x10] - cmp r4, r3 - bge _080A5460 - ldr r2, [sp, 0x4] - ldrb r7, [r2] - movs r3, 0xFF -_080A5420: - adds r5, r0, 0x1 - adds r2, r4, 0x1 - movs r4, 0x4 -_080A5426: - strb r3, [r1] - adds r1, 0x1 - subs r4, 0x1 - cmp r4, 0 - bge _080A5426 - movs r4, 0x5 - cmp r7, 0 - beq _080A5444 - movs r6, 0 - adds r0, r7, 0 -_080A543A: - strb r6, [r1] - adds r1, 0x1 - subs r0, 0x1 - cmp r0, 0 - bne _080A543A -_080A5444: - adds r4, r7 - cmp r4, 0xFF - bgt _080A5456 - movs r0, 0xFF -_080A544C: - strb r0, [r1] - adds r1, 0x1 - adds r4, 0x1 - cmp r4, 0xFF - ble _080A544C -_080A5456: - adds r4, r2, 0 - adds r0, r5, 0 - ldr r2, [sp, 0x10] - cmp r4, r2 - blt _080A5420 -_080A5460: - ldr r3, [sp, 0x8] - cmp r0, r3 - bge _080A547E - movs r6, 0xFF -_080A5468: - adds r5, r0, 0x1 - movs r4, 0xFF -_080A546C: - strb r6, [r1] - adds r1, 0x1 - subs r4, 0x1 - cmp r4, 0 - bge _080A546C - adds r0, r5, 0 - ldr r2, [sp, 0x8] - cmp r0, r2 - blt _080A5468 -_080A547E: - mov r3, sp - ldrh r3, [r3, 0xC] - lsls r0, r3, 16 - cmp r0, 0 - bgt _080A548A - b _080A5590 -_080A548A: - mov r6, r8 - ldr r0, [sp] - movs r1, 0x80 - lsls r1, 3 - adds r2, r0, r1 - movs r0, 0 - ldr r3, [sp, 0x10] - cmp r0, r3 - bge _080A5586 - movs r1, 0xFB - mov r10, r1 -_080A54A0: - adds r2, 0x5 - movs r4, 0 - cmp r0, 0 - bne _080A54EC - ldr r3, [sp, 0x4] - ldrb r7, [r3] - movs r1, 0x1 - mov r9, r1 - cmp r0, r7 - bge _080A5574 -_080A54B4: - ldrb r1, [r6] - adds r6, 0x1 - cmp r1, 0x7F - ble _080A54DE - subs r4, 0x7F - cmp r1, 0x7F - ble _080A54D6 - movs r5, 0x80 - adds r3, r1, 0 - subs r3, 0x7F -_080A54C8: - ldrb r0, [r2] - orrs r0, r5 - strb r0, [r2] - adds r2, 0x1 - subs r3, 0x1 - cmp r3, 0 - bne _080A54C8 -_080A54D6: - adds r4, r1 - ldr r3, [sp, 0x4] - ldrb r7, [r3] - b _080A54E6 -_080A54DE: - adds r0, r1, 0x1 - adds r2, r0 - adds r0, r4, 0x1 - adds r4, r0, r1 -_080A54E6: - cmp r4, r7 - blt _080A54B4 - b _080A5574 -_080A54EC: - ldr r1, _080A5538 - adds r1, r2 - mov r12, r1 - ldr r3, [sp, 0x4] - ldrb r7, [r3] - adds r0, 0x1 - mov r9, r0 - cmp r4, r7 - bge _080A5574 -_080A54FE: - ldrb r5, [r6] - adds r6, 0x1 - cmp r5, 0x7F - ble _080A553C - subs r4, 0x7F - cmp r5, 0x7F - ble _080A556A - movs r7, 0x80 - movs r0, 0x80 - mov r8, r0 - adds r3, r5, 0 - subs r3, 0x7F -_080A5516: - mov r0, r12 - ldrb r1, [r0] - mov r0, r8 - ands r0, r1 - movs r1, 0x1 - add r12, r1 - cmp r0, 0 - bne _080A552C - ldrb r0, [r2] - orrs r0, r7 - strb r0, [r2] -_080A552C: - adds r2, 0x1 - subs r3, 0x1 - cmp r3, 0 - bne _080A5516 - b _080A556A - .align 2, 0 -_080A5538: .4byte 0xffffff00 -_080A553C: - movs r3, 0 - adds r4, 0x1 - cmp r3, r5 - bgt _080A556A - movs r7, 0x80 - movs r3, 0x80 - mov r8, r3 - adds r3, r5, 0x1 -_080A554C: - mov r0, r12 - ldrb r1, [r0] - mov r0, r8 - ands r0, r1 - movs r1, 0x1 - add r12, r1 - cmp r0, 0 - beq _080A5562 - ldrb r0, [r2] - orrs r0, r7 - strb r0, [r2] -_080A5562: - adds r2, 0x1 - subs r3, 0x1 - cmp r3, 0 - bne _080A554C -_080A556A: - adds r4, r5 - ldr r3, [sp, 0x4] - ldrb r7, [r3] - cmp r4, r7 - blt _080A54FE -_080A5574: - mov r1, r10 - subs r0, r1, r7 - adds r2, r0 - mov r0, r9 - ldr r3, [sp, 0x4] - ldrb r3, [r3, 0x1] - str r3, [sp, 0x10] - cmp r0, r3 - blt _080A54A0 -_080A5586: - mov r8, r6 - ldr r0, [sp, 0x4] - ldrh r1, [r0, 0xA] - mov r0, sp - strh r1, [r0, 0xC] -_080A5590: - mov r2, sp - ldrh r2, [r2, 0xC] - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080A568C - mov r6, r8 - ldr r3, [sp] - movs r0, 0x80 - lsls r0, 3 - adds r2, r3, r0 - movs r0, 0 - b _080A5684 -_080A55AA: - adds r2, 0x5 - movs r4, 0 - cmp r0, 0 - bne _080A55F2 - ldr r3, [sp, 0x4] - ldrb r7, [r3] - movs r1, 0x1 - mov r10, r1 - cmp r0, r7 - bge _080A567C -_080A55BE: - ldrb r1, [r6] - adds r6, 0x1 - cmp r1, 0x7F - ble _080A55E4 - subs r4, 0x7F - cmp r1, 0x7F - ble _080A55E0 - movs r5, 0x40 - adds r3, r1, 0 - subs r3, 0x7F -_080A55D2: - ldrb r0, [r2] - orrs r0, r5 - strb r0, [r2] - adds r2, 0x1 - subs r3, 0x1 - cmp r3, 0 - bne _080A55D2 -_080A55E0: - adds r4, r1 - b _080A55EC -_080A55E4: - adds r0, r1, 0x1 - adds r2, r0 - adds r0, r4, 0x1 - adds r4, r0, r1 -_080A55EC: - cmp r4, r7 - blt _080A55BE - b _080A567C -_080A55F2: - ldr r3, _080A5640 - adds r3, r2 - mov r12, r3 - ldr r1, [sp, 0x4] - ldrb r7, [r1] - adds r0, 0x1 - mov r10, r0 - cmp r4, r7 - bge _080A567C -_080A5604: - ldrb r5, [r6] - adds r6, 0x1 - cmp r5, 0x7F - ble _080A5644 - subs r4, 0x7F - cmp r5, 0x7F - ble _080A5676 - movs r3, 0x40 - mov r8, r3 - movs r0, 0x40 - mov r9, r0 - adds r3, r5, 0 - subs r3, 0x7F -_080A561E: - mov r0, r12 - ldrb r1, [r0] - mov r0, r9 - ands r0, r1 - movs r1, 0x1 - add r12, r1 - cmp r0, 0 - bne _080A5636 - ldrb r0, [r2] - mov r1, r8 - orrs r0, r1 - strb r0, [r2] -_080A5636: - adds r2, 0x1 - subs r3, 0x1 - cmp r3, 0 - bne _080A561E - b _080A5676 - .align 2, 0 -_080A5640: .4byte 0xffffff00 -_080A5644: - movs r3, 0 - adds r4, 0x1 - cmp r3, r5 - bgt _080A5676 - movs r3, 0x40 - mov r8, r3 - movs r0, 0x40 - mov r9, r0 - adds r3, r5, 0x1 -_080A5656: - mov r0, r12 - ldrb r1, [r0] - mov r0, r9 - ands r0, r1 - movs r1, 0x1 - add r12, r1 - cmp r0, 0 - beq _080A566E - ldrb r0, [r2] - mov r1, r8 - orrs r0, r1 - strb r0, [r2] -_080A566E: - adds r2, 0x1 - subs r3, 0x1 - cmp r3, 0 - bne _080A5656 -_080A5676: - adds r4, r5 - cmp r4, r7 - blt _080A5604 -_080A567C: - movs r3, 0xFB - subs r0, r3, r7 - adds r2, r0 - mov r0, r10 -_080A5684: - ldr r1, [sp, 0x10] - cmp r0, r1 - blt _080A55AA - mov r8, r6 -_080A568C: - mov r0, r8 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80A5204 - - thumb_func_start sub_80A56A0 -sub_80A56A0: - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - lsls r3, 24 - lsrs r3, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _080A56BC - ldr r0, [r0] - adds r1, r3, 0 - bl sub_80A3B80 - pop {r0} - bx r0 - .align 2, 0 -_080A56BC: .4byte gGroundMapDungeon_3001B70 - thumb_func_end sub_80A56A0 - - thumb_func_start sub_80A56C0 -sub_80A56C0: - push {lr} - adds r2, r0, 0 - ldr r0, _080A56D4 - ldr r0, [r0] - movs r1, 0 - bl sub_80A4558 - pop {r0} - bx r0 - .align 2, 0 -_080A56D4: .4byte gGroundMapDungeon_3001B70 - thumb_func_end sub_80A56C0 - - thumb_func_start sub_80A56D8 -sub_80A56D8: - push {lr} - adds r2, r0, 0 - ldr r0, _080A56EC - ldr r0, [r0] - movs r1, 0 - bl sub_80A456C - pop {r0} - bx r0 - .align 2, 0 -_080A56EC: .4byte gGroundMapDungeon_3001B70 - thumb_func_end sub_80A56D8 - - thumb_func_start sub_80A56F0 -sub_80A56F0: - ldr r1, _080A5700 - ldr r2, [r1] - adds r2, 0xE8 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [r2] - str r1, [r2, 0x4] - bx lr - .align 2, 0 -_080A5700: .4byte gGroundMapAction - thumb_func_end sub_80A56F0 - - thumb_func_start sub_80A5704 -sub_80A5704: - ldr r1, _080A5724 - ldr r3, [r1] - adds r2, r3, 0 - adds r2, 0xF8 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [r2] - str r1, [r2, 0x4] - adds r0, r3, 0 - adds r0, 0xF0 - movs r1, 0 - str r1, [r0] - adds r0, 0x4 - str r1, [r0] - bx lr - .align 2, 0 -_080A5724: .4byte gGroundMapAction - thumb_func_end sub_80A5704 - - thumb_func_start sub_80A5728 -sub_80A5728: - ldr r0, _080A5734 - ldr r0, [r0] - adds r0, 0xE4 - movs r1, 0 - ldrsh r0, [r0, r1] - bx lr - .align 2, 0 -_080A5734: .4byte gGroundMapAction - thumb_func_end sub_80A5728 - - thumb_func_start sub_80A5738 -sub_80A5738: - ldr r0, _080A5750 - ldr r0, [r0] - adds r0, 0xE4 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _080A5754 - adds r0, r1 - bx lr - .align 2, 0 -_080A5750: .4byte gGroundMapAction -_080A5754: .4byte gGroundMapConversionTable - thumb_func_end sub_80A5738 - - thumb_func_start sub_80A5758 -sub_80A5758: - push {lr} - adds r1, r0, 0 - ldr r0, _080A5768 - ldr r0, [r0] - cmp r0, 0 - bne _080A576C - movs r0, 0 - b _080A5772 - .align 2, 0 -_080A5768: .4byte gGroundMapDungeon_3001B70 -_080A576C: - bl sub_80A4608 - movs r0, 0x1 -_080A5772: - pop {r1} - bx r1 - thumb_func_end sub_80A5758 - - thumb_func_start GetCurrentDungeonBounds -GetCurrentDungeonBounds: - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, _080A578C - ldr r0, [r0] - cmp r0, 0 - bne _080A5790 - movs r0, 0 - b _080A5798 - .align 2, 0 -_080A578C: .4byte gGroundMapDungeon_3001B70 -_080A5790: - adds r1, r3, 0 - bl GetDungeonBounds - movs r0, 0x1 -_080A5798: - pop {r1} - bx r1 - thumb_func_end GetCurrentDungeonBounds - - thumb_func_start sub_80A579C -sub_80A579C: - push {r4-r7,lr} - adds r6, r0, 0 - adds r5, r1, 0 - ldr r0, _080A5838 - ldr r3, [r0] - cmp r3, 0 - beq _080A5854 - ldr r0, _080A583C - ldr r0, [r0] - adds r2, r0, 0 - adds r2, 0xE4 - movs r0, 0 - ldrsh r1, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080A5854 - adds r0, r1, 0 - lsls r4, r0, 1 - adds r4, r0 - lsls r4, 2 - ldr r0, _080A5840 - adds r4, r0 - adds r0, r3, 0 - adds r1, r6, 0 - adds r2, r5, 0 - bl GetDungeonBounds - ldr r2, [r6] - mov r12, r2 - movs r0, 0xF0 - lsls r0, 7 - add r0, r12 - str r0, [r6] - ldr r3, [r6, 0x4] - movs r7, 0xA0 - lsls r7, 7 - adds r0, r3, r7 - str r0, [r6, 0x4] - ldr r2, [r5] - ldr r1, _080A5844 - adds r0, r2, r1 - str r0, [r5] - ldr r1, [r5, 0x4] - ldr r7, _080A5848 - adds r0, r1, r7 - str r0, [r5, 0x4] - movs r7, 0 - ldrsh r0, [r4, r7] - cmp r0, 0xA - bne _080A581E - movs r0, 0x90 - lsls r0, 8 - add r0, r12 - str r0, [r6] - movs r4, 0xD0 - lsls r4, 7 - adds r0, r3, r4 - str r0, [r6, 0x4] - ldr r7, _080A584C - adds r0, r2, r7 - str r0, [r5] - ldr r2, _080A5850 - adds r0, r1, r2 - str r0, [r5, 0x4] -_080A581E: - ldr r1, [r6] - ldr r0, [r5] - cmp r1, r0 - ble _080A5828 - str r1, [r5] -_080A5828: - ldr r1, [r6, 0x4] - ldr r0, [r5, 0x4] - cmp r1, r0 - ble _080A5832 - str r1, [r5, 0x4] -_080A5832: - movs r0, 0x1 - b _080A5856 - .align 2, 0 -_080A5838: .4byte gGroundMapDungeon_3001B70 -_080A583C: .4byte gGroundMapAction -_080A5840: .4byte gGroundMapConversionTable -_080A5844: .4byte 0xffff8800 -_080A5848: .4byte 0xffffb000 -_080A584C: .4byte 0xffff7000 -_080A5850: .4byte 0xffff9800 -_080A5854: - movs r0, 0 -_080A5856: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80A579C - - thumb_func_start CheckMapCollision_80A585C -CheckMapCollision_80A585C: - push {r4-r7,lr} - adds r7, r1, 0 - ldr r1, _080A5884 - ldr r2, [r1] - ldr r1, _080A5888 - adds r2, r1 - ldr r1, [r0, 0x4] - lsls r1, 8 - ldr r0, [r0] - adds r1, r0 - ldr r0, _080A588C - adds r1, r0 - ldr r0, [r2] - adds r5, r0, r1 - ldr r4, [r7, 0x4] - cmp r0, 0 - bne _080A5890 -_080A587E: - movs r0, 0x1 - b _080A58C0 - .align 2, 0 -_080A5884: .4byte gGroundMapDungeon_3001B70 -_080A5888: .4byte 0x00000544 -_080A588C: .4byte 0x00000405 -_080A5890: - cmp r4, 0 - ble _080A58BE - movs r1, 0x80 - lsls r1, 1 - mov r12, r1 -_080A589A: - ldr r2, [r7] - adds r3, r5, 0 - cmp r2, 0 - ble _080A58B6 - movs r6, 0x80 -_080A58A4: - ldrb r1, [r3] - adds r0, r6, 0 - ands r0, r1 - adds r3, 0x1 - cmp r0, 0 - bne _080A587E - subs r2, 0x1 - cmp r2, 0 - bgt _080A58A4 -_080A58B6: - add r5, r12 - subs r4, 0x1 - cmp r4, 0 - bgt _080A589A -_080A58BE: - movs r0, 0 -_080A58C0: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CheckMapCollision_80A585C - - thumb_func_start sub_80A58C8 -sub_80A58C8: - push {r4-r7,lr} - adds r7, r1, 0 - ldr r1, _080A58F0 - ldr r2, [r1] - ldr r1, _080A58F4 - adds r2, r1 - ldr r1, [r0, 0x4] - lsls r1, 8 - ldr r0, [r0] - adds r1, r0 - ldr r0, _080A58F8 - adds r1, r0 - ldr r0, [r2] - adds r5, r0, r1 - ldr r4, [r7, 0x4] - cmp r0, 0 - bne _080A58FC -_080A58EA: - movs r0, 0x1 - b _080A592C - .align 2, 0 -_080A58F0: .4byte gGroundMapDungeon_3001B70 -_080A58F4: .4byte 0x00000544 -_080A58F8: .4byte 0x00000405 -_080A58FC: - cmp r4, 0 - ble _080A592A - movs r1, 0x80 - lsls r1, 1 - mov r12, r1 -_080A5906: - ldr r2, [r7] - adds r3, r5, 0 - cmp r2, 0 - ble _080A5922 - movs r6, 0x40 -_080A5910: - ldrb r1, [r3] - adds r0, r6, 0 - ands r0, r1 - adds r3, 0x1 - cmp r0, 0 - bne _080A58EA - subs r2, 0x1 - cmp r2, 0 - bgt _080A5910 -_080A5922: - add r5, r12 - subs r4, 0x1 - cmp r4, 0 - bgt _080A5906 -_080A592A: - movs r0, 0 -_080A592C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80A58C8 - - .align 2,0 diff --git a/include/ground_bg.h b/include/ground_bg.h index 43de6aff1..757b7ad1b 100644 --- a/include/ground_bg.h +++ b/include/ground_bg.h @@ -6,9 +6,20 @@ void GroundBg_Init(GroundBg *groundBg, const SubStruct_52C *a1); void GroundBg_FreeAll(GroundBg *groundBg); +void sub_80A2D68(GroundBg *groundBg); +void sub_80A2D88(GroundBg *groundBg); void sub_80A2FBC(GroundBg *groundBg, s32 mapFileId_); void sub_80A3440(GroundBg *groundBg, s32 mapFileId_, const DungeonLocation *dungLoc, s32 a3); void sub_80A3B80(GroundBg *groundBg, u8 a1, u8 a2); void sub_80A3BB0(GroundBg *groundBg, s32 a0_); +void sub_80A4558(GroundBg *groundBg, s32 id, PixelPos *dstPos); +void sub_80A456C(GroundBg *groundBg, s32 id, const PixelPos *srcPos); +void sub_80A4580(GroundBg *groundBg, s32 id, PixelPos *pixPos); +void sub_80A4608(GroundBg *groundBg, PixelPos *dstPos); +u16 sub_80A4720(GroundBg *groundBg, s32 id, PixelPos *pixPos); +void sub_80A4740(GroundBg *groundBg, s32 id, PixelPos *pixPos, u32 dstVal); +void sub_80A4764(GroundBg *groundBg); +void sub_80A49E8(GroundBg *groundBg); +void GetDungeonBounds(GroundBg *groundBg, PixelPos *dstPos1, PixelPos *dstPos2); #endif // GUARD_GROUND_BG_H diff --git a/include/ground_map.h b/include/ground_map.h index 35c2ec7f3..2f9df06a1 100644 --- a/include/ground_map.h +++ b/include/ground_map.h @@ -1,11 +1,22 @@ #ifndef GUARD_GROUND_MAP_H #define GUARD_GROUND_MAP_H +#include "structs/str_position.h" + void GroundMap_Reset(void); void AllocGroundMapAction(void); void FreeGroundMapAction(void); void sub_80A4B38(void); void sub_80A4B54(void); +void sub_80A56C0(PixelPos *pos); s16 GetAdjustedGroundMap(s32 mapId); +s16 GetGroundMapID(void); + +void GroundMap_ExecuteEnter(s16); +void GroundMap_ExecuteEvent(s16 scriptIndex, u32); +void GroundMap_ExecuteStation(s32 _map, s32 _group, s32 _sector, bool32 _setScriptState); +bool8 GroundMapNotifyAll(s16); +bool8 sub_80A4D48(s16 index); +void GroundMap_Action(void); #endif // GUARD_GROUND_MAP_H diff --git a/include/ground_map_1.h b/include/ground_map_1.h index 9000d073e..c725b3a82 100644 --- a/include/ground_map_1.h +++ b/include/ground_map_1.h @@ -1,14 +1,31 @@ #ifndef GUARD_GROUND_MAP_1_H #define GUARD_GROUND_MAP_1_H -void GroundMap_ExecuteEnter(s16); -void GroundMap_ExecuteEvent(s16 scriptIndex, u32); -void GroundMap_ExecuteStation(s32 _map, s32 _group, s32 _sector, bool32 _setScriptState); +// size: 0x24 +#include "structs/str_position.h" -bool8 GroundMapNotifyAll(s16); -bool8 sub_80A4D48(s16 index); +typedef struct unkStruct_3001B74 +{ + s16 unk0; + u8 unk2; + s32 unk4; + s32 unk8; + PixelPos unkC; + u32 unk14; + u32 unk18; + u32 unk1C; + u32 unk20; +} unkStruct_3001B74; -// ground_map_1.s -extern s16 sub_80A5728(void); +void GroundWeather_Select(s16); +void nullsub_121(void); +void nullsub_122(void); +void nullsub_123(void); + +void sub_80A5E70(void); +void sub_80A5E8C(u8); +void sub_80A5EBC(void); +void sub_80A5EDC(u8); +void sub_80A60D8(void); #endif // GUARD_GROUND_MAP_1_H diff --git a/include/ground_map_2.h b/include/ground_map_2.h deleted file mode 100644 index 1015be5d1..000000000 --- a/include/ground_map_2.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef GUARD_GROUND_MAP_2_H -#define GUARD_GROUND_MAP_2_H - -// size: 0x24 -typedef struct unkStruct_3001B74 -{ - s16 unk0; - u8 unk2; - s32 unk4; - s32 unk8; - s32 unkC; - s32 unk10; - u32 unk14; - u32 unk18; - u32 unk1C; - u32 unk20; -} unkStruct_3001B74; - -void GroundWeather_Select(s16); -void nullsub_121(void); -void nullsub_122(void); -void nullsub_123(void); - -void sub_80A5E70(void); -void sub_80A5E8C(u8); -void sub_80A5EBC(void); -void sub_80A5EDC(u8); -void sub_80A60D8(void); - -#endif // GUARD_GROUND_MAP_2_H diff --git a/include/ground_script_file.h b/include/ground_script_file.h new file mode 100644 index 000000000..d3ff12d99 --- /dev/null +++ b/include/ground_script_file.h @@ -0,0 +1,9 @@ +#ifndef INCLUDE_GROUND_SCRIPT_FILE_H +#define INCLUDE_GROUND_SCRIPT_FILE_H + +void sub_80A7744(void); +void sub_80A7754(void); +bool8 ChangeScriptFile(s16 a0); +const struct GroundScriptHeader *GetGroundScript(s16 mapId, const DebugLocation *unused); + +#endif /* INCLUDE_GROUND_SCRIPT_FILE_H */ diff --git a/include/structs/str_ground_script.h b/include/structs/str_ground_script.h index 4296e0684..a31a5f6ac 100644 --- a/include/structs/str_ground_script.h +++ b/include/structs/str_ground_script.h @@ -117,8 +117,7 @@ typedef struct GroundMapAction /* 0x00 */ Action action; /* 0xE4 */ s16 groundMapId; u16 fillE6; - u32 unkE8; - u32 unkEC; + PixelPos unkE8; s32 unkF0; s32 unkF4; PixelPos unkF8; diff --git a/ld_script.ld b/ld_script.ld index ec8afa19d..43a8034e3 100755 --- a/ld_script.ld +++ b/ld_script.ld @@ -45,7 +45,8 @@ SECTIONS { .text : ALIGN(4) { - asm/crt0.o(.text); + src/rom_header.o(.text); + src/crt0.o(.text); src/code_80001DC.o(.text); src/arm_funcs.o(.text); src/main_loops.o(.text); @@ -345,9 +346,7 @@ SECTIONS { src/ground_place.o(.text); src/ground_bg.o(.text); src/ground_map.o(.text); - asm/ground_map_1.o(.text); src/ground_map_1.o(.text); - src/ground_map_2.o(.text); src/ground_sprite.o(.text); src/ground_sprite_data.o(.text); src/ground_sprite_monster.o(.text); diff --git a/ld_script_modern.ld b/ld_script_modern.ld index 7ec57d5ea..fbc3255a1 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -39,7 +39,8 @@ SECTIONS { .text : ALIGN(4) { - asm/crt0.o(.text); + src/rom_header.o(.text); + src/crt0.o(.text); src/code_80001DC.o(.text); src/main_loops.o(.text); src/*.o(.text*); diff --git a/src/code_801D014.c b/src/code_801D014.c index 4ee49f395..7b36fb649 100644 --- a/src/code_801D014.c +++ b/src/code_801D014.c @@ -16,7 +16,7 @@ #include "friend_list_menu.h" #include "ground_lives.h" #include "ground_main.h" -#include "ground_map_1.h" +#include "ground_map.h" #include "input.h" #include "iq_skill_menu.h" #include "memory.h" @@ -82,7 +82,7 @@ bool8 sub_801D014(Pokemon *a0) else sUnknown_203B250->index = NUM_MONSTERS; - sUnknown_203B250->currFriendAreaLocation = MapIdToFriendAreaId(sub_80A5728()); + sUnknown_203B250->currFriendAreaLocation = MapIdToFriendAreaId(GetGroundMapID()); sUnknown_203B250->unk8 = 0; sUnknown_203B250->unk9 = 0; sUnknown_203B250->unkC = GetPlayerPokemonStruct(); diff --git a/asm/crt0.s b/src/crt0.s similarity index 96% rename from asm/crt0.s rename to src/crt0.s index ac6b51509..2099d2d50 100644 --- a/asm/crt0.s +++ b/src/crt0.s @@ -2,18 +2,10 @@ .syntax unified - .global Start .text .arm - -Start: @ 8000000 - b Init - - #include "rom_header.inc" - - .arm .align 2, 0 .global Init Init: @ 80000C0 diff --git a/src/debug_field_map.c b/src/debug_field_map.c index 0cc0fe887..a21e8f643 100644 --- a/src/debug_field_map.c +++ b/src/debug_field_map.c @@ -10,7 +10,7 @@ #include "text_2.h" #include "text_3.h" #include "ground_map.h" -#include "ground_map_2.h" +#include "ground_map_1.h" #include "palette_util.h" #include "string_format.h" #include "sprite.h" diff --git a/src/friend_list.c b/src/friend_list.c index 4776e7e7a..3e6e958ff 100644 --- a/src/friend_list.c +++ b/src/friend_list.c @@ -14,7 +14,7 @@ #include "rescue_team_info.h" #include "input.h" #include "memory.h" -#include "ground_map_1.h" +#include "ground_map.h" #include "constants/input.h" extern bool8 sub_808D750(s32 index_); @@ -95,7 +95,7 @@ bool8 FriendList_Init(u32 r5, u32 windowId, DungeonPos *pos, u32 r10) } if (sFriendList->unk0 == 4) { - sFriendList->unk354 = MapIdToFriendAreaId(sub_80A5728()); + sFriendList->unk354 = MapIdToFriendAreaId(GetGroundMapID()); } else { sFriendList->unk354 = 0; diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 1d2f0e031..dc10d1686 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -12,7 +12,7 @@ #include "common_strings.h" #include "event_flag.h" #include "friend_list_menu.h" -#include "ground_map_1.h" +#include "ground_map.h" #include "input.h" #include "iq_skill_menu.h" #include "items.h" @@ -62,7 +62,7 @@ bool8 CreateFriendListMenu(s32 param_1) gUnknown_203B2B4 = MemoryAlloc(sizeof(unkStruct_203B2B4),8); gUnknown_203B2B4->menuAction1 = 0; gUnknown_203B2B4->unk0 = param_1; - gUnknown_203B2B4->unkC = MapIdToFriendAreaId(sub_80A5728()); + gUnknown_203B2B4->unkC = MapIdToFriendAreaId(GetGroundMapID()); gUnknown_203B2B4->unkD = 0; if (gUnknown_203B2B4->unk0 == 2) { SetFriendListMenuState(0); diff --git a/src/ground_bg.c b/src/ground_bg.c index 263cec9f1..e8b1bac5c 100644 --- a/src/ground_bg.c +++ b/src/ground_bg.c @@ -18,7 +18,6 @@ extern const FileArchive gGroundFileArchive; -void sub_80A456C(GroundBg *groundBg, s32 id, const PixelPos *srcPos); static void CloseOpenedFiles(GroundBg *groundBg); static void sub_80A3EB0(SubStruct_488 *map488); static const u8 *sub_80A3908(u16 **dstArray, const void *src_, SubStruct_52C *a2, SubStruct_448 *a3); diff --git a/src/ground_main.c b/src/ground_main.c index ad8863f45..8fe0f3c0f 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -13,12 +13,14 @@ #include "debug.h" #include "event_flag.h" #include "ground_main.h" -#include "ground_map_2.h" +#include "ground_map.h" +#include "ground_map_1.h" #include "play_time.h" #include "pokemon.h" #include "text_util.h" #include "ground_map_conversion_table.h" #include "ground_lives_helper.h" +#include "ground_script_file.h" #include "script_item.h" #include "unk_ds_only_feature.h" #include "textbox.h" @@ -68,24 +70,20 @@ extern bool8 sub_809AFAC(void); extern bool8 sub_80048BC(void); extern u8 sub_80023E4(u32); extern bool8 sub_8099B94(void); -extern void FreeGroundMapAction(void); extern void FreeGroundLives(void); extern void FreeGroundObjects(void); extern void FreeGroundEffects(void); extern void FreeGroundEvents(void); extern void sub_80A658C(void); extern void sub_809D508(void); -extern void sub_80A7754(void); extern void nullsub_119(void); extern void sub_8099768(void); extern void nullsub_103(void); extern void sub_8099648(void); extern void sub_809975C(void); extern void sub_809D0AC(void); -extern void sub_80A7744(void); extern void sub_809D490(void); extern void sub_80A62F0(void); -extern void AllocGroundMapAction(void); extern void AllocGroundEvents(void); extern void AllocGroundLives(void); extern void AllocGroundObjects(void); @@ -109,7 +107,6 @@ extern void sub_80A5E70(void); extern void sub_809B638(void); extern void sub_80A73EC(void); extern void sub_8099750(void); -extern void GroundMap_Reset(void); extern void sub_809D0BC(void); extern void DeleteGroundEvents(void); extern void DeleteGroundLives(void); @@ -121,9 +118,7 @@ extern void xxx_call_update_bg_sound_input(void); extern void sub_80A6E68(void); extern void sub_80060EC(void); extern void sub_809977C(void); -extern void GroundMap_ExecuteEvent(s32, u32); extern void UpdateFadeInTile(s32); -extern void GroundMap_Action(void); extern void sub_8098C58(void); extern void sub_8001D88(void); extern u32 GroundMainGameCancelRequest(u32 r0); diff --git a/src/ground_map.c b/src/ground_map.c index c5ab861a7..d8d4009f5 100644 --- a/src/ground_map.c +++ b/src/ground_map.c @@ -4,8 +4,9 @@ #include "ground_bg.h" #include "ground_main.h" #include "ground_map.h" -#include "ground_map_2.h" +#include "ground_map_1.h" #include "ground_script.h" +#include "ground_script_file.h" #include "memory.h" #include "ground_map_conversion_table.h" #include "code_800558C.h" @@ -14,34 +15,53 @@ IWRAM_INIT GroundMapAction *gGroundMapAction = {NULL}; IWRAM_INIT GroundBg *gGroundMapDungeon_3001B70 = {NULL}; -extern GroundMapAction *gGroundMapAction; - extern const SubStruct_52C gUnknown_8117324; -extern const SubStruct_52C gUnknown_8117354; extern const SubStruct_52C gUnknown_811733C; -extern const u8 gUnknown_81176A4[]; -extern const u8 gUnknown_8117700[]; +extern const SubStruct_52C gUnknown_8117354; + +struct MapToDungeonStruct +{ + s16 id; + DungeonLocation loc; + u32 unk8; +}; + +extern const struct MapToDungeonStruct gUnknown_81173C0[]; + +extern const DebugLocation gUnknown_8117538[]; +extern const DebugLocation gUnknown_8117560; +extern const u8 gUnknown_811756C[]; extern const u8 gUnknown_8117594[]; -extern const u8 gUnknown_81175EC[]; extern const DebugLocation gUnknown_81175E0; +extern const u8 gUnknown_81175EC[]; extern const DebugLocation gUnknown_8117644; extern const u8 gUnknown_8117650[]; extern const DebugLocation gUnknown_8117698; +extern const u8 gUnknown_81176A4[]; +extern const DebugLocation gUnknown_81176D0; +extern const u8 gUnknown_81176DC[]; +extern const PixelPos gUnknown_81176F8; +extern const u8 gUnknown_8117700[]; +extern const DebugLocation gUnknown_8117734; +extern const u8 gUnknown_8117740[]; +extern const PixelPos gUnknown_8117754; +extern const DebugLocation gUnknown_8117770; -bool8 ChangeScriptFile(s32 a0); -const struct GroundScriptHeader *GetGroundScript(s32 a0, DebugLocation *); - -extern DebugLocation gUnknown_8117560; -extern const u8 gUnknown_811756C[]; - -extern u8 sub_809D678(void *); -extern bool8 GroundScriptNotify(void *, s32); extern const CallbackData gGroundScriptNullCallbacks; -extern const DebugLocation gUnknown_8117538[]; -extern void sub_80A2D68(GroundBg *); -extern void sub_80A2D88(GroundBg *); +extern u8 sub_809D248(PixelPos *r0); + +extern bool8 sub_809D678(Action *); +extern bool8 GroundScriptNotify(Action*, s32); + +extern u8 sub_80A46C0(GroundBg *, u32, s32, s32); +extern u8 sub_80A4660(GroundBg *, u32, s32, s32); + +extern s16 HandleAction(Action *action, const DebugLocation *debug); + +void GroundMap_SelectDungeon(s32 mapId, const DungeonLocation *loc, u32 param_2); +void sub_80A56D8(const PixelPos*); void AllocGroundMapAction(void) { @@ -170,7 +190,7 @@ void GroundMap_ExecuteEnter(s16 param_1) GroundScript_ExecutePP(&gGroundMapAction->action, 0, &script, &gUnknown_8117698); } -UNUSED static u8 sub_80A4D14(void) +UNUSED static bool8 sub_80A4D14(void) { return sub_809D678(&gGroundMapAction->action); } @@ -208,24 +228,6 @@ s16 GetAdjustedGroundMap(s32 mapId) return retMapId; } -struct MapToDungeonStruct -{ - s16 id; - DungeonLocation loc; - u32 unk8; -}; - -extern const struct MapToDungeonStruct gUnknown_81173C0[]; -extern const u8 gUnknown_81176DC[]; -extern const u8 gUnknown_8117740[]; -extern const DebugLocation gUnknown_81176D0; -extern const DebugLocation gUnknown_8117734; -extern const u32 gUnknown_81176F8[]; -extern const u32 gUnknown_8117754[]; - -void GroundMap_SelectDungeon(s32 mapId, const DungeonLocation *loc, u32 param_2); -void sub_80A56D8(const void *); - void GroundMap_Select(s32 mapId_) { const GroundConversionStruct *ptr; @@ -277,8 +279,8 @@ void GroundMap_Select(s32 mapId_) } sub_80A2FBC(gGroundMapDungeon_3001B70, ptr->mapFileTableId); - gGroundMapAction->unkE8 = 0; - gGroundMapAction->unkEC = 0; + gGroundMapAction->unkE8.x = 0; + gGroundMapAction->unkE8.y = 0; gGroundMapAction->unkF0 = 0; gGroundMapAction->unkF4 = 0; gGroundMapAction->unkF8.x = 0; @@ -368,8 +370,8 @@ void GroundMap_SelectDungeon(s32 mapId_, const DungeonLocation *loc, u32 param_2 GroundBg_Init(gGroundMapDungeon_3001B70, &gUnknown_8117354); sub_80A5EDC(1); sub_80A3440(gGroundMapDungeon_3001B70, ptr->mapFileTableId, loc, param_2); - gGroundMapAction->unkE8 = 0; - gGroundMapAction->unkEC = 0; + gGroundMapAction->unkE8.x = 0; + gGroundMapAction->unkE8.y = 0; gGroundMapAction->unkF0 = 0; gGroundMapAction->unkF4 = 0; gGroundMapAction->unkF8.x = 0; @@ -378,3 +380,999 @@ void GroundMap_SelectDungeon(s32 mapId_, const DungeonLocation *loc, u32 param_2 sub_80A56D8(&gUnknown_8117754); } + +NAKED +void sub_80A5204(void) +{ + 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, 0x18 \n" +" str r0, [sp] \n" +" mov r8, r1 \n" +" str r2, [sp, 0x4] \n" +" str r3, [sp, 0x8] \n" +" movs r1, 0x8 \n" +" ldrsh r0, [r2, r1] \n" +" cmp r0, 0 \n" +" bgt _080A5222 \n" +" b _080A53EA \n" +"_080A5222: \n" +" mov r5, r8 \n" +" ldr r2, [sp] \n" +" mov r12, r2 \n" +" movs r0, 0 \n" +" ldr r3, [sp, 0x4] \n" +" ldrb r3, [r3, 0x1] \n" +" str r3, [sp, 0x10] \n" +" ldr r1, [sp, 0x4] \n" +" ldrh r2, [r1, 0xA] \n" +" mov r1, sp \n" +" strh r2, [r1, 0xC] \n" +" movs r1, 0xFF \n" +"_080A523A: \n" +" adds r0, 0x1 \n" +" mov r10, r0 \n" +" movs r3, 0xFF \n" +" mov r9, r3 \n" +"_080A5242: \n" +" mov r0, r12 \n" +" strb r1, [r0] \n" +" movs r2, 0x1 \n" +" add r12, r2 \n" +" movs r3, 0x1 \n" +" negs r3, r3 \n" +" add r9, r3 \n" +" mov r0, r9 \n" +" cmp r0, 0 \n" +" bge _080A5242 \n" +" mov r0, r10 \n" +" cmp r0, 0x3 \n" +" ble _080A523A \n" +" movs r1, 0 \n" +" ldr r2, [sp, 0x10] \n" +" cmp r1, r2 \n" +" blt _080A5266 \n" +" b _080A53BA \n" +"_080A5266: \n" +" ldr r3, [sp, 0x4] \n" +" ldrb r7, [r3] \n" +"_080A526A: \n" +" adds r0, 0x1 \n" +" mov r10, r0 \n" +" adds r0, r1, 0x1 \n" +" str r0, [sp, 0x14] \n" +" movs r0, 0xFF \n" +" movs r2, 0x4 \n" +" mov r9, r2 \n" +"_080A5278: \n" +" mov r3, r12 \n" +" strb r0, [r3] \n" +" movs r2, 0x1 \n" +" add r12, r2 \n" +" movs r3, 0x1 \n" +" negs r3, r3 \n" +" add r9, r3 \n" +" mov r2, r9 \n" +" cmp r2, 0 \n" +" bge _080A5278 \n" +" movs r3, 0x5 \n" +" mov r9, r3 \n" +" movs r0, 0 \n" +" cmp r1, 0 \n" +" bne _080A5308 \n" +" cmp r1, r7 \n" +" bge _080A5394 \n" +"_080A529A: \n" +" ldrb r1, [r5] \n" +" adds r5, 0x1 \n" +" cmp r1, 0xBF \n" +" ble _080A52C2 \n" +" adds r6, r0, 0 \n" +" subs r6, 0xBF \n" +" cmp r1, 0xBF \n" +" ble _080A5300 \n" +" adds r2, r1, 0 \n" +" subs r2, 0xBF \n" +"_080A52AE: \n" +" ldrb r0, [r5] \n" +" mov r3, r12 \n" +" strb r0, [r3] \n" +" adds r5, 0x1 \n" +" movs r0, 0x1 \n" +" add r12, r0 \n" +" subs r2, 0x1 \n" +" cmp r2, 0 \n" +" bne _080A52AE \n" +" b _080A5300 \n" +"_080A52C2: \n" +" cmp r1, 0x7F \n" +" ble _080A52E6 \n" +" ldrb r4, [r5] \n" +" adds r5, 0x1 \n" +" adds r6, r0, 0 \n" +" subs r6, 0x7F \n" +" cmp r1, 0x7F \n" +" ble _080A5300 \n" +" adds r2, r1, 0 \n" +" subs r2, 0x7F \n" +"_080A52D6: \n" +" mov r3, r12 \n" +" strb r4, [r3] \n" +" movs r0, 0x1 \n" +" add r12, r0 \n" +" subs r2, 0x1 \n" +" cmp r2, 0 \n" +" bne _080A52D6 \n" +" b _080A5300 \n" +"_080A52E6: \n" +" movs r2, 0 \n" +" adds r6, r0, 0x1 \n" +" cmp r2, r1 \n" +" bgt _080A5300 \n" +" movs r0, 0 \n" +" adds r2, r1, 0x1 \n" +"_080A52F2: \n" +" mov r3, r12 \n" +" strb r0, [r3] \n" +" movs r3, 0x1 \n" +" add r12, r3 \n" +" subs r2, 0x1 \n" +" cmp r2, 0 \n" +" bne _080A52F2 \n" +"_080A5300: \n" +" adds r0, r6, r1 \n" +" cmp r0, r7 \n" +" blt _080A529A \n" +" b _080A5394 \n" +"_080A5308: \n" +" ldr r4, _080A5340 \n" +" add r4, r12 \n" +" cmp r0, r7 \n" +" bge _080A5394 \n" +"_080A5310: \n" +" ldrb r3, [r5] \n" +" adds r5, 0x1 \n" +" cmp r3, 0xBF \n" +" ble _080A5344 \n" +" adds r6, r0, 0 \n" +" subs r6, 0xBF \n" +" cmp r3, 0xBF \n" +" ble _080A538E \n" +" adds r2, r3, 0 \n" +" subs r2, 0xBF \n" +"_080A5324: \n" +" ldrb r1, [r5] \n" +" ldrb r0, [r4] \n" +" eors r1, r0 \n" +" mov r0, r12 \n" +" strb r1, [r0] \n" +" adds r4, 0x1 \n" +" adds r5, 0x1 \n" +" movs r1, 0x1 \n" +" add r12, r1 \n" +" subs r2, 0x1 \n" +" cmp r2, 0 \n" +" bne _080A5324 \n" +" b _080A538E \n" +" .align 2, 0 \n" +"_080A5340: .4byte 0xffffff00\n" +"_080A5344: \n" +" cmp r3, 0x7F \n" +" ble _080A5372 \n" +" ldrb r2, [r5] \n" +" mov r8, r2 \n" +" adds r5, 0x1 \n" +" adds r6, r0, 0 \n" +" subs r6, 0x7F \n" +" cmp r3, 0x7F \n" +" ble _080A538E \n" +" adds r2, r3, 0 \n" +" subs r2, 0x7F \n" +"_080A535A: \n" +" ldrb r1, [r4] \n" +" mov r0, r8 \n" +" eors r0, r1 \n" +" mov r1, r12 \n" +" strb r0, [r1] \n" +" adds r4, 0x1 \n" +" movs r0, 0x1 \n" +" add r12, r0 \n" +" subs r2, 0x1 \n" +" cmp r2, 0 \n" +" bne _080A535A \n" +" b _080A538E \n" +"_080A5372: \n" +" movs r2, 0 \n" +" adds r6, r0, 0x1 \n" +" cmp r2, r3 \n" +" bgt _080A538E \n" +" adds r2, r3, 0x1 \n" +"_080A537C: \n" +" ldrb r0, [r4] \n" +" mov r1, r12 \n" +" strb r0, [r1] \n" +" adds r4, 0x1 \n" +" movs r0, 0x1 \n" +" add r12, r0 \n" +" subs r2, 0x1 \n" +" cmp r2, 0 \n" +" bne _080A537C \n" +"_080A538E: \n" +" adds r0, r6, r3 \n" +" cmp r0, r7 \n" +" blt _080A5310 \n" +"_080A5394: \n" +" add r9, r7 \n" +" mov r1, r9 \n" +" cmp r1, 0xFF \n" +" bgt _080A53AE \n" +" movs r0, 0xFF \n" +"_080A539E: \n" +" mov r2, r12 \n" +" strb r0, [r2] \n" +" movs r3, 0x1 \n" +" add r12, r3 \n" +" add r9, r3 \n" +" mov r1, r9 \n" +" cmp r1, 0xFF \n" +" ble _080A539E \n" +"_080A53AE: \n" +" ldr r1, [sp, 0x14] \n" +" mov r0, r10 \n" +" ldr r2, [sp, 0x10] \n" +" cmp r1, r2 \n" +" bge _080A53BA \n" +" b _080A526A \n" +"_080A53BA: \n" +" ldr r3, [sp, 0x8] \n" +" cmp r0, r3 \n" +" bge _080A53E6 \n" +" movs r1, 0xFF \n" +"_080A53C2: \n" +" adds r0, 0x1 \n" +" mov r10, r0 \n" +" movs r0, 0xFF \n" +" mov r9, r0 \n" +"_080A53CA: \n" +" mov r2, r12 \n" +" strb r1, [r2] \n" +" movs r3, 0x1 \n" +" add r12, r3 \n" +" movs r0, 0x1 \n" +" negs r0, r0 \n" +" add r9, r0 \n" +" mov r2, r9 \n" +" cmp r2, 0 \n" +" bge _080A53CA \n" +" mov r0, r10 \n" +" ldr r3, [sp, 0x8] \n" +" cmp r0, r3 \n" +" blt _080A53C2 \n" +"_080A53E6: \n" +" mov r8, r5 \n" +" b _080A547E \n" +"_080A53EA: \n" +" ldr r1, [sp] \n" +" movs r0, 0 \n" +" ldr r2, [sp, 0x4] \n" +" ldrb r2, [r2, 0x1] \n" +" str r2, [sp, 0x10] \n" +" ldr r3, [sp, 0x4] \n" +" ldrh r2, [r3, 0xA] \n" +" mov r3, sp \n" +" strh r2, [r3, 0xC] \n" +" movs r6, 0xFF \n" +"_080A53FE: \n" +" adds r5, r0, 0x1 \n" +" movs r4, 0xFF \n" +"_080A5402: \n" +" strb r6, [r1] \n" +" adds r1, 0x1 \n" +" subs r4, 0x1 \n" +" cmp r4, 0 \n" +" bge _080A5402 \n" +" adds r0, r5, 0 \n" +" cmp r0, 0x3 \n" +" ble _080A53FE \n" +" movs r4, 0 \n" +" ldr r3, [sp, 0x10] \n" +" cmp r4, r3 \n" +" bge _080A5460 \n" +" ldr r2, [sp, 0x4] \n" +" ldrb r7, [r2] \n" +" movs r3, 0xFF \n" +"_080A5420: \n" +" adds r5, r0, 0x1 \n" +" adds r2, r4, 0x1 \n" +" movs r4, 0x4 \n" +"_080A5426: \n" +" strb r3, [r1] \n" +" adds r1, 0x1 \n" +" subs r4, 0x1 \n" +" cmp r4, 0 \n" +" bge _080A5426 \n" +" movs r4, 0x5 \n" +" cmp r7, 0 \n" +" beq _080A5444 \n" +" movs r6, 0 \n" +" adds r0, r7, 0 \n" +"_080A543A: \n" +" strb r6, [r1] \n" +" adds r1, 0x1 \n" +" subs r0, 0x1 \n" +" cmp r0, 0 \n" +" bne _080A543A \n" +"_080A5444: \n" +" adds r4, r7 \n" +" cmp r4, 0xFF \n" +" bgt _080A5456 \n" +" movs r0, 0xFF \n" +"_080A544C: \n" +" strb r0, [r1] \n" +" adds r1, 0x1 \n" +" adds r4, 0x1 \n" +" cmp r4, 0xFF \n" +" ble _080A544C \n" +"_080A5456: \n" +" adds r4, r2, 0 \n" +" adds r0, r5, 0 \n" +" ldr r2, [sp, 0x10] \n" +" cmp r4, r2 \n" +" blt _080A5420 \n" +"_080A5460: \n" +" ldr r3, [sp, 0x8] \n" +" cmp r0, r3 \n" +" bge _080A547E \n" +" movs r6, 0xFF \n" +"_080A5468: \n" +" adds r5, r0, 0x1 \n" +" movs r4, 0xFF \n" +"_080A546C: \n" +" strb r6, [r1] \n" +" adds r1, 0x1 \n" +" subs r4, 0x1 \n" +" cmp r4, 0 \n" +" bge _080A546C \n" +" adds r0, r5, 0 \n" +" ldr r2, [sp, 0x8] \n" +" cmp r0, r2 \n" +" blt _080A5468 \n" +"_080A547E: \n" +" mov r3, sp \n" +" ldrh r3, [r3, 0xC] \n" +" lsls r0, r3, 16 \n" +" cmp r0, 0 \n" +" bgt _080A548A \n" +" b _080A5590 \n" +"_080A548A: \n" +" mov r6, r8 \n" +" ldr r0, [sp] \n" +" movs r1, 0x80 \n" +" lsls r1, 3 \n" +" adds r2, r0, r1 \n" +" movs r0, 0 \n" +" ldr r3, [sp, 0x10] \n" +" cmp r0, r3 \n" +" bge _080A5586 \n" +" movs r1, 0xFB \n" +" mov r10, r1 \n" +"_080A54A0: \n" +" adds r2, 0x5 \n" +" movs r4, 0 \n" +" cmp r0, 0 \n" +" bne _080A54EC \n" +" ldr r3, [sp, 0x4] \n" +" ldrb r7, [r3] \n" +" movs r1, 0x1 \n" +" mov r9, r1 \n" +" cmp r0, r7 \n" +" bge _080A5574 \n" +"_080A54B4: \n" +" ldrb r1, [r6] \n" +" adds r6, 0x1 \n" +" cmp r1, 0x7F \n" +" ble _080A54DE \n" +" subs r4, 0x7F \n" +" cmp r1, 0x7F \n" +" ble _080A54D6 \n" +" movs r5, 0x80 \n" +" adds r3, r1, 0 \n" +" subs r3, 0x7F \n" +"_080A54C8: \n" +" ldrb r0, [r2] \n" +" orrs r0, r5 \n" +" strb r0, [r2] \n" +" adds r2, 0x1 \n" +" subs r3, 0x1 \n" +" cmp r3, 0 \n" +" bne _080A54C8 \n" +"_080A54D6: \n" +" adds r4, r1 \n" +" ldr r3, [sp, 0x4] \n" +" ldrb r7, [r3] \n" +" b _080A54E6 \n" +"_080A54DE: \n" +" adds r0, r1, 0x1 \n" +" adds r2, r0 \n" +" adds r0, r4, 0x1 \n" +" adds r4, r0, r1 \n" +"_080A54E6: \n" +" cmp r4, r7 \n" +" blt _080A54B4 \n" +" b _080A5574 \n" +"_080A54EC: \n" +" ldr r1, _080A5538 \n" +" adds r1, r2 \n" +" mov r12, r1 \n" +" ldr r3, [sp, 0x4] \n" +" ldrb r7, [r3] \n" +" adds r0, 0x1 \n" +" mov r9, r0 \n" +" cmp r4, r7 \n" +" bge _080A5574 \n" +"_080A54FE: \n" +" ldrb r5, [r6] \n" +" adds r6, 0x1 \n" +" cmp r5, 0x7F \n" +" ble _080A553C \n" +" subs r4, 0x7F \n" +" cmp r5, 0x7F \n" +" ble _080A556A \n" +" movs r7, 0x80 \n" +" movs r0, 0x80 \n" +" mov r8, r0 \n" +" adds r3, r5, 0 \n" +" subs r3, 0x7F \n" +"_080A5516: \n" +" mov r0, r12 \n" +" ldrb r1, [r0] \n" +" mov r0, r8 \n" +" ands r0, r1 \n" +" movs r1, 0x1 \n" +" add r12, r1 \n" +" cmp r0, 0 \n" +" bne _080A552C \n" +" ldrb r0, [r2] \n" +" orrs r0, r7 \n" +" strb r0, [r2] \n" +"_080A552C: \n" +" adds r2, 0x1 \n" +" subs r3, 0x1 \n" +" cmp r3, 0 \n" +" bne _080A5516 \n" +" b _080A556A \n" +" .align 2, 0 \n" +"_080A5538: .4byte 0xffffff00\n" +"_080A553C: \n" +" movs r3, 0 \n" +" adds r4, 0x1 \n" +" cmp r3, r5 \n" +" bgt _080A556A \n" +" movs r7, 0x80 \n" +" movs r3, 0x80 \n" +" mov r8, r3 \n" +" adds r3, r5, 0x1 \n" +"_080A554C: \n" +" mov r0, r12 \n" +" ldrb r1, [r0] \n" +" mov r0, r8 \n" +" ands r0, r1 \n" +" movs r1, 0x1 \n" +" add r12, r1 \n" +" cmp r0, 0 \n" +" beq _080A5562 \n" +" ldrb r0, [r2] \n" +" orrs r0, r7 \n" +" strb r0, [r2] \n" +"_080A5562: \n" +" adds r2, 0x1 \n" +" subs r3, 0x1 \n" +" cmp r3, 0 \n" +" bne _080A554C \n" +"_080A556A: \n" +" adds r4, r5 \n" +" ldr r3, [sp, 0x4] \n" +" ldrb r7, [r3] \n" +" cmp r4, r7 \n" +" blt _080A54FE \n" +"_080A5574: \n" +" mov r1, r10 \n" +" subs r0, r1, r7 \n" +" adds r2, r0 \n" +" mov r0, r9 \n" +" ldr r3, [sp, 0x4] \n" +" ldrb r3, [r3, 0x1] \n" +" str r3, [sp, 0x10] \n" +" cmp r0, r3 \n" +" blt _080A54A0 \n" +"_080A5586: \n" +" mov r8, r6 \n" +" ldr r0, [sp, 0x4] \n" +" ldrh r1, [r0, 0xA] \n" +" mov r0, sp \n" +" strh r1, [r0, 0xC] \n" +"_080A5590: \n" +" mov r2, sp \n" +" ldrh r2, [r2, 0xC] \n" +" lsls r0, r2, 16 \n" +" asrs r0, 16 \n" +" cmp r0, 0x1 \n" +" ble _080A568C \n" +" mov r6, r8 \n" +" ldr r3, [sp] \n" +" movs r0, 0x80 \n" +" lsls r0, 3 \n" +" adds r2, r3, r0 \n" +" movs r0, 0 \n" +" b _080A5684 \n" +"_080A55AA: \n" +" adds r2, 0x5 \n" +" movs r4, 0 \n" +" cmp r0, 0 \n" +" bne _080A55F2 \n" +" ldr r3, [sp, 0x4] \n" +" ldrb r7, [r3] \n" +" movs r1, 0x1 \n" +" mov r10, r1 \n" +" cmp r0, r7 \n" +" bge _080A567C \n" +"_080A55BE: \n" +" ldrb r1, [r6] \n" +" adds r6, 0x1 \n" +" cmp r1, 0x7F \n" +" ble _080A55E4 \n" +" subs r4, 0x7F \n" +" cmp r1, 0x7F \n" +" ble _080A55E0 \n" +" movs r5, 0x40 \n" +" adds r3, r1, 0 \n" +" subs r3, 0x7F \n" +"_080A55D2: \n" +" ldrb r0, [r2] \n" +" orrs r0, r5 \n" +" strb r0, [r2] \n" +" adds r2, 0x1 \n" +" subs r3, 0x1 \n" +" cmp r3, 0 \n" +" bne _080A55D2 \n" +"_080A55E0: \n" +" adds r4, r1 \n" +" b _080A55EC \n" +"_080A55E4: \n" +" adds r0, r1, 0x1 \n" +" adds r2, r0 \n" +" adds r0, r4, 0x1 \n" +" adds r4, r0, r1 \n" +"_080A55EC: \n" +" cmp r4, r7 \n" +" blt _080A55BE \n" +" b _080A567C \n" +"_080A55F2: \n" +" ldr r3, _080A5640 \n" +" adds r3, r2 \n" +" mov r12, r3 \n" +" ldr r1, [sp, 0x4] \n" +" ldrb r7, [r1] \n" +" adds r0, 0x1 \n" +" mov r10, r0 \n" +" cmp r4, r7 \n" +" bge _080A567C \n" +"_080A5604: \n" +" ldrb r5, [r6] \n" +" adds r6, 0x1 \n" +" cmp r5, 0x7F \n" +" ble _080A5644 \n" +" subs r4, 0x7F \n" +" cmp r5, 0x7F \n" +" ble _080A5676 \n" +" movs r3, 0x40 \n" +" mov r8, r3 \n" +" movs r0, 0x40 \n" +" mov r9, r0 \n" +" adds r3, r5, 0 \n" +" subs r3, 0x7F \n" +"_080A561E: \n" +" mov r0, r12 \n" +" ldrb r1, [r0] \n" +" mov r0, r9 \n" +" ands r0, r1 \n" +" movs r1, 0x1 \n" +" add r12, r1 \n" +" cmp r0, 0 \n" +" bne _080A5636 \n" +" ldrb r0, [r2] \n" +" mov r1, r8 \n" +" orrs r0, r1 \n" +" strb r0, [r2] \n" +"_080A5636: \n" +" adds r2, 0x1 \n" +" subs r3, 0x1 \n" +" cmp r3, 0 \n" +" bne _080A561E \n" +" b _080A5676 \n" +" .align 2, 0 \n" +"_080A5640: .4byte 0xffffff00\n" +"_080A5644: \n" +" movs r3, 0 \n" +" adds r4, 0x1 \n" +" cmp r3, r5 \n" +" bgt _080A5676 \n" +" movs r3, 0x40 \n" +" mov r8, r3 \n" +" movs r0, 0x40 \n" +" mov r9, r0 \n" +" adds r3, r5, 0x1 \n" +"_080A5656: \n" +" mov r0, r12 \n" +" ldrb r1, [r0] \n" +" mov r0, r9 \n" +" ands r0, r1 \n" +" movs r1, 0x1 \n" +" add r12, r1 \n" +" cmp r0, 0 \n" +" beq _080A566E \n" +" ldrb r0, [r2] \n" +" mov r1, r8 \n" +" orrs r0, r1 \n" +" strb r0, [r2] \n" +"_080A566E: \n" +" adds r2, 0x1 \n" +" subs r3, 0x1 \n" +" cmp r3, 0 \n" +" bne _080A5656 \n" +"_080A5676: \n" +" adds r4, r5 \n" +" cmp r4, r7 \n" +" blt _080A5604 \n" +"_080A567C: \n" +" movs r3, 0xFB \n" +" subs r0, r3, r7 \n" +" adds r2, r0 \n" +" mov r0, r10 \n" +"_080A5684: \n" +" ldr r1, [sp, 0x10] \n" +" cmp r0, r1 \n" +" blt _080A55AA \n" +" mov r8, r6 \n" +"_080A568C: \n" +" mov r0, r8 \n" +" add sp, 0x18 \n" +" pop {r3-r5} \n" +" mov r8, r3 \n" +" mov r9, r4 \n" +" mov r10, r5 \n" +" pop {r4-r7} \n" +" pop {r1} \n" +" bx r1 "); +} + +void sub_80A56A0(u8 param_1, u8 param_2) +{ + sub_80A3B80(gGroundMapDungeon_3001B70, param_1, param_2); +} + +void sub_80A56C0(PixelPos *pos) +{ + sub_80A4558(gGroundMapDungeon_3001B70, 0, pos); +} + +void sub_80A56D8(const PixelPos *pos) +{ + sub_80A456C(gGroundMapDungeon_3001B70, 0, pos); +} + +void sub_80A56F0(PixelPos *pos) +{ + gGroundMapAction->unkE8 = *pos; +} + +void sub_80A5704(PixelPos *pos) +{ + gGroundMapAction->unkF8 = *pos; + gGroundMapAction->unkF0 = 0; + gGroundMapAction->unkF4 = 0; +} + +s16 GetGroundMapID(void) +{ + return gGroundMapAction->groundMapId; +} + +UNUSED static const GroundConversionStruct *GetGroundConversionStruct(void) +{ + return &gGroundMapConversionTable[gGroundMapAction->groundMapId]; +} + +UNUSED static bool8 sub_80A5758(PixelPos *pos) +{ + if(gGroundMapDungeon_3001B70 != NULL) + { + sub_80A4608(gGroundMapDungeon_3001B70, pos); + return TRUE; + + } + else { + return FALSE; + } +} + +bool8 GetCurrentDungeonBounds(PixelPos *pos1, PixelPos *pos2) +{ + if(gGroundMapDungeon_3001B70 != NULL) + { + GetDungeonBounds(gGroundMapDungeon_3001B70, pos1, pos2); + return TRUE; + + } + else { + return FALSE; + } +} + +bool8 sub_80A579C(PixelPos *pos1, PixelPos *pos2) +{ + const GroundConversionStruct *convTable; + + if(gGroundMapDungeon_3001B70 != NULL) + { + if(gGroundMapAction->groundMapId != -1) + { + convTable = &gGroundMapConversionTable[gGroundMapAction->groundMapId]; + GetDungeonBounds(gGroundMapDungeon_3001B70, pos1, pos2); + + pos1->x += 0x7800; + pos1->y += 0x5000; + pos2->x -= 0x7800; + pos2->y -= 0x5000; + + if(convTable->unk0 == 0xA) + { + pos1->x += 0x1800; + pos1->y += 0x1800; + pos2->x -= 0x1800; + pos2->y -= 0x1800; + } + + if (pos1->x > pos2->x) { + pos2->x = pos1->x; + } + if (pos1->y > pos2->y) { + pos2->y = pos1->y; + } + return TRUE; + } + } + return FALSE; +} + +bool8 CheckMapCollision_80A585C(PixelPos *pixPos1,PixelPos *boundary) +{ + u8 *currPtr; + int i, j; + u8 *ptr; + + ptr = (void *)gGroundMapDungeon_3001B70->unk544 + ((pixPos1->y * 256) + pixPos1->x + 0x405); + + i = boundary->y; + + if (gGroundMapDungeon_3001B70->unk544 == NULL) { + return TRUE; + } + + for (i = boundary->y; i > 0; i--) { + for (j = boundary->x, currPtr = ptr; j > 0; j--) { + if ((*(currPtr++) & 0x80) != 0) + return TRUE; + } + ptr += 256; + } + return FALSE; +} + +bool8 sub_80A58C8(PixelPos *pixPos1,PixelPos *boundary) +{ + u8 *currPtr; + int i, j; + u8 *ptr; + + ptr = (void *)gGroundMapDungeon_3001B70->unk544 + ((pixPos1->y * 256) + pixPos1->x + 0x405); + + i = boundary->y; + + if (gGroundMapDungeon_3001B70->unk544 == NULL) { + return TRUE; + } + + for (i = boundary->y; i > 0; i--) { + for (j = boundary->x, currPtr = ptr; j > 0; j--) { + if ((*(currPtr++) & 0x40) != 0) + return TRUE; + } + ptr += 256; + } + return FALSE; +} + +u8 sub_80A5934(s32 param_1, s32 param_2, s32 param_3) +{ + u32 param_1_u32 = (u8)param_1; + return sub_80A4660(gGroundMapDungeon_3001B70, param_1_u32, param_2, param_3); +} + +u8 sub_80A595C(s32 param_1, s32 param_2, s32 param_3) +{ + u32 param_1_u32 = (u8)param_1; + return sub_80A46C0(gGroundMapDungeon_3001B70, param_1_u32, param_2, param_3); +} + +u16 sub_80A5984(s32 param_1, PixelPos *param_2) +{ + return sub_80A4720(gGroundMapDungeon_3001B70, param_1, param_2); +} + +void sub_80A59A0(s32 param_1, PixelPos *param_2, u32 param_3) +{ + u32 param_3_u32 = (u16)param_3; + sub_80A4740(gGroundMapDungeon_3001B70, param_1, param_2, param_3_u32); +} + +void GroundMap_Action(void) +{ + nullsub_123(); + HandleAction((Action *)gGroundMapAction, &gUnknown_8117770); +} + +void sub_80A59DC(void) +{ + if (gGroundMapDungeon_3001B70 != NULL) { + PixelPos pixPos; + + if (sub_809D248(&pixPos) == 0) { + pixPos.x = 0; + pixPos.y = 0; + } + + switch (gGroundMapAction->groundMapId) { + case 0xA2: + case 0xA3: + case 0xDF: { + PixelPos pixPos2; + + gGroundMapAction->unkF4 += 2; + gGroundMapAction->unkF8.y += gGroundMapAction->unkF4 / 4; + gGroundMapAction->unkF4 &= 3; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); + pixPos2 = (PixelPos) { pixPos.x, pixPos.y + gGroundMapAction->unkF8.y }; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); + pixPos2.x = pixPos.x; + pixPos2.y = pixPos.y - gGroundMapAction->unkF8.y; + sub_80A4580(gGroundMapDungeon_3001B70, 1, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); + break; + } + case 0xA8: + case 0xAA: { + PixelPos pixPos2; + + gGroundMapAction->unkF0 += gGroundMapAction->unkE8.x; + gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; + gGroundMapAction->unkF0 %= 8; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); + pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y }; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); + break; + } + case 0xAE: { + PixelPos pixPos2; + + gGroundMapAction->unkF0 += gGroundMapAction->unkE8.x; + gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; + gGroundMapAction->unkF0 %= 8; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); + pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y }; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); + break; + } + case 0xAB: { + PixelPos pixPos2 = pixPos; + + sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); + break; + } + case 0xAF: { + PixelPos pixPos2; + + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); + gGroundMapAction->unkF0 += gGroundMapAction->unkE8.x; + gGroundMapAction->unkF4 += gGroundMapAction->unkE8.y; + gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; + gGroundMapAction->unkF8.y += gGroundMapAction->unkF4 / 8; + gGroundMapAction->unkF0 %= 8; + gGroundMapAction->unkF4 %= 8; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); + pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y + gGroundMapAction->unkF8.y}; + sub_80A4580(gGroundMapDungeon_3001B70, 1, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); + break; + } + case 0xB0: { + PixelPos pixPos2; + + gGroundMapAction->unkF0 += gGroundMapAction->unkE8.x; + gGroundMapAction->unkF4 += gGroundMapAction->unkE8.y; + gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; + gGroundMapAction->unkF8.y += gGroundMapAction->unkF4 / 8; + gGroundMapAction->unkF0 %= 8; + gGroundMapAction->unkF4 %= 8; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); + pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y + gGroundMapAction->unkF8.y}; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); + break; + } + case 0xBA: { + PixelPos pixPos2; + + sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos); + gGroundMapAction->unkF0++; + gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 4; + gGroundMapAction->unkF0 &= 3; + sub_80A4580(gGroundMapDungeon_3001B70, 1, &gGroundMapAction->unkF8); + pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y}; + sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); + break; + } + case 4: { + PixelPos pixPos2; + + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); + gGroundMapAction->unkF0++; + gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; + gGroundMapAction->unkF0 &= 7; + sub_80A4580(gGroundMapDungeon_3001B70, 1, &gGroundMapAction->unkF8); + pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y}; + sub_80A4580(gGroundMapDungeon_3001B70, 1, &pixPos2); + sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); + break; + } + case 0xE0: { + PixelPos pixPos2; + + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); + gGroundMapAction->unkF0++; + gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; + gGroundMapAction->unkF0 &= 7; + sub_80A4580(gGroundMapDungeon_3001B70, 1, &gGroundMapAction->unkF8); + pixPos2 = (PixelPos) { gGroundMapAction->unkF8.x, pixPos.y}; + sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); + break; + } + case 0xA1: { + PixelPos pixPos2; + + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); + pixPos2 = (PixelPos) {0, 0}; + sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); + break; + } + default: + sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); + break; + } + + sub_80A4764(gGroundMapDungeon_3001B70); + } + + sub_80A60D8(); +} + diff --git a/src/ground_map_1.c b/src/ground_map_1.c index f03947cbe..f8e0747f6 100644 --- a/src/ground_map_1.c +++ b/src/ground_map_1.c @@ -1,200 +1,223 @@ #include "global.h" +#include "code_800558C.h" +#include "debug.h" +#include "event_flag.h" #include "ground_bg.h" #include "ground_map.h" -#include "ground_map_2.h" -#include "ground_script.h" +#include "ground_map_1.h" +#include "memory.h" -extern GroundMapAction *gGroundMapAction; -extern DebugLocation gUnknown_8117770; +IWRAM_INIT unkStruct_3001B74 *gUnknown_3001B74 = {NULL}; +IWRAM_INIT GroundBg *gUnknown_3001B78 = {NULL}; -extern s16 HandleAction(Action *action, DebugLocation *debug); -extern void sub_80A4740(void *, s32, s32 *, u32); -extern u32 sub_80A4720(void *, s32, s32 *); -extern u8 sub_80A46C0(GroundBg *, u32, s32, s32); -extern u8 sub_80A4660(GroundBg *, u32, s32, s32); +extern const SubStruct_52C gUnknown_8117784; +extern const s16 gUnknown_811E5F4[][2]; +extern const u8 gGroundWeatherSelect[]; +extern const PixelPos gUnknown_81177BC; -u8 sub_80A5934(s32 param_1, s32 param_2, s32 param_3) +static void sub_80A62D0(void); + +void sub_80A5E70(void) { - u32 param_1_u32 = (u8)param_1; - return sub_80A4660(gGroundMapDungeon_3001B70, param_1_u32, param_2, param_3); + if (gGroundMapDungeon_3001B70 != NULL) + sub_80A49E8(gGroundMapDungeon_3001B70); + + sub_80A62D0(); } -u8 sub_80A595C(s32 param_1, s32 param_2, s32 param_3) +void sub_80A5E8C(u8 param_1) { - u32 param_1_u32 = (u8)param_1; - return sub_80A46C0(gGroundMapDungeon_3001B70, param_1_u32, param_2, param_3); + gUnknown_3001B74 = MemoryAlloc(sizeof(unkStruct_3001B74), 6); + gUnknown_3001B74->unk0 = -1; + gUnknown_3001B74->unk2 = 0; + sub_80A5EDC(param_1); } -u16 sub_80A5984(s32 param_1, s32 *param_2) +void sub_80A5EBC(void) { - return sub_80A4720(gGroundMapDungeon_3001B70, param_1, param_2); + sub_80A5EDC(0); + MemoryFree(gUnknown_3001B74); + gUnknown_3001B74 = NULL; } -void sub_80A59A0(s32 param_1, s32 *param_2, u32 param_3) +void sub_80A5EDC(u8 param_1) { - u32 param_3_u32 = (u16)param_3; - sub_80A4740(gGroundMapDungeon_3001B70, param_1, param_2, param_3_u32); -} + SetScriptVarValue(NULL, WEATHER_KIND, -1); + gUnknown_3001B74->unk0 = -1; + gUnknown_3001B74->unk2 = param_1; -void GroundMap_Action(void) -{ - nullsub_123(); - HandleAction((Action *)gGroundMapAction, &gUnknown_8117770); -} - -extern u8 sub_809D248(PixelPos *r0); -extern void sub_80A4580(GroundBg *, u32, PixelPos *); -extern void sub_80A456C(GroundBg *, u32, const PixelPos *); -extern void sub_80A4764(GroundBg *); - -extern GroundMapAction *gGroundMapAction; - -void sub_80A59DC(void) -{ - if (gGroundMapDungeon_3001B70 != NULL) { - PixelPos pixPos; - - if (sub_809D248(&pixPos) == 0) { - pixPos.x = 0; - pixPos.y = 0; - } - - switch (gGroundMapAction->groundMapId) { - case 0xA2: - case 0xA3: - case 0xDF: { - PixelPos pixPos2; - - gGroundMapAction->unkF4 += 2; - gGroundMapAction->unkF8.y += gGroundMapAction->unkF4 / 4; - gGroundMapAction->unkF4 &= 3; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); - pixPos2 = (PixelPos) { pixPos.x, pixPos.y + gGroundMapAction->unkF8.y }; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); - pixPos2.x = pixPos.x; - pixPos2.y = pixPos.y - gGroundMapAction->unkF8.y; - sub_80A4580(gGroundMapDungeon_3001B70, 1, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); - break; - } - case 0xA8: - case 0xAA: { - PixelPos pixPos2; - - gGroundMapAction->unkF0 += gGroundMapAction->unkE8; - gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; - gGroundMapAction->unkF0 %= 8; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); - pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y }; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); - break; - } - case 0xAE: { - PixelPos pixPos2; - - gGroundMapAction->unkF0 += gGroundMapAction->unkE8; - gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; - gGroundMapAction->unkF0 %= 8; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); - pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y }; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); - break; - } - case 0xAB: { - PixelPos pixPos2 = pixPos; - - sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); - break; - } - case 0xAF: { - PixelPos pixPos2; - - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); - gGroundMapAction->unkF0 += gGroundMapAction->unkE8; - gGroundMapAction->unkF4 += gGroundMapAction->unkEC; - gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; - gGroundMapAction->unkF8.y += gGroundMapAction->unkF4 / 8; - gGroundMapAction->unkF0 %= 8; - gGroundMapAction->unkF4 %= 8; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); - pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y + gGroundMapAction->unkF8.y}; - sub_80A4580(gGroundMapDungeon_3001B70, 1, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); - break; - } - case 0xB0: { - PixelPos pixPos2; - - gGroundMapAction->unkF0 += gGroundMapAction->unkE8; - gGroundMapAction->unkF4 += gGroundMapAction->unkEC; - gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; - gGroundMapAction->unkF8.y += gGroundMapAction->unkF4 / 8; - gGroundMapAction->unkF0 %= 8; - gGroundMapAction->unkF4 %= 8; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &gGroundMapAction->unkF8); - pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y + gGroundMapAction->unkF8.y}; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); - break; - } - case 0xBA: { - PixelPos pixPos2; - - sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos); - gGroundMapAction->unkF0++; - gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 4; - gGroundMapAction->unkF0 &= 3; - sub_80A4580(gGroundMapDungeon_3001B70, 1, &gGroundMapAction->unkF8); - pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y}; - sub_80A4580(gGroundMapDungeon_3001B70, 0, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos2); - break; - } - case 4: { - PixelPos pixPos2; - - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); - gGroundMapAction->unkF0++; - gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; - gGroundMapAction->unkF0 &= 7; - sub_80A4580(gGroundMapDungeon_3001B70, 1, &gGroundMapAction->unkF8); - pixPos2 = (PixelPos) { pixPos.x + gGroundMapAction->unkF8.x, pixPos.y}; - sub_80A4580(gGroundMapDungeon_3001B70, 1, &pixPos2); - sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); - break; - } - case 0xE0: { - PixelPos pixPos2; - - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); - gGroundMapAction->unkF0++; - gGroundMapAction->unkF8.x += gGroundMapAction->unkF0 / 8; - gGroundMapAction->unkF0 &= 7; - sub_80A4580(gGroundMapDungeon_3001B70, 1, &gGroundMapAction->unkF8); - pixPos2 = (PixelPos) { gGroundMapAction->unkF8.x, pixPos.y}; - sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); - break; - } - case 0xA1: { - PixelPos pixPos2; - - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); - pixPos2 = (PixelPos) {0, 0}; - sub_80A456C(gGroundMapDungeon_3001B70, 1, &pixPos2); - break; - } - default: - sub_80A456C(gGroundMapDungeon_3001B70, 0, &pixPos); - break; - } - - sub_80A4764(gGroundMapDungeon_3001B70); + if (gUnknown_3001B78 != NULL) { + GroundBg_FreeAll(gUnknown_3001B78); + MemoryFree(gUnknown_3001B78); + gUnknown_3001B78 = NULL; } - sub_80A60D8(); + if (param_1) { + gUnknown_3001B78 = MemoryAlloc(sizeof(GroundBg), 6); + GroundBg_Init(gUnknown_3001B78, &gUnknown_8117784); + sub_80A2FBC(gUnknown_3001B78, -1); + } +} + +void nullsub_121(void) +{} + +void nullsub_122(void) +{} + +void GroundWeather_Select(s16 param_1) +{ + s32 iVar2; + s32 iVar3; + const s16 *pVar1; + + iVar2 = param_1; + iVar3 = iVar2; + Log(0, gGroundWeatherSelect, iVar2, gUnknown_3001B74->unk2); + SetScriptVarValue(NULL, WEATHER_KIND, iVar2); + gUnknown_3001B74->unk0 = iVar2; + + if (gUnknown_3001B74->unk2 == 0) + return; + + if (iVar2 == -1) { + sub_80A2FBC(gUnknown_3001B78, -1); + return; + } + + pVar1 = gUnknown_811E5F4[iVar3]; + sub_80A2FBC(gUnknown_3001B78, pVar1[1]); + + gUnknown_3001B74->unk4 = 0; + gUnknown_3001B74->unk8 = 0; + gUnknown_3001B74->unkC.x = 0; + gUnknown_3001B74->unkC.y = 0; + gUnknown_3001B74->unk20 = 0; + gUnknown_3001B74->unk1C = 0; + gUnknown_3001B74->unk18 = 0; + gUnknown_3001B74->unk14 = 0; + + switch (gUnknown_3001B74->unk0) { + case 9: + sub_80A3BB0(gUnknown_3001B78, 1); + gUnknown_2026E4E = 0x40c; + break; + case 7: + gUnknown_2026E4E = 0x808; + break; + case 14: + sub_80A3BB0(gUnknown_3001B78, 1); + gUnknown_2026E4E = 0x1010; + break; + case 15: + sub_80A3BB0(gUnknown_3001B78, 1); + gUnknown_2026E4E = 0x40c; + break; + case 0: + case 3: + case 4: + case 5: + case 8: + gUnknown_2026E4E = 0x1010; + break; + default: + if (pVar1[0] == 1) + sub_80A3BB0(gUnknown_3001B78, 1); + + gUnknown_2026E4E = 0x1000; + break; + } +} + +UNUSED static s16 sub_80A60C4(void) +{ + return gUnknown_3001B74->unk0; +} + +void nullsub_123(void) +{} + +void sub_80A60D8(void) +{ + if (gUnknown_3001B74->unk2 == 0) + return; + + switch ((s16)(gUnknown_3001B74->unk0 + 1)) { + case 10: { + PixelPos localArray; + + gUnknown_3001B74->unk4 += 2; + gUnknown_3001B74->unk8 += 1; + gUnknown_3001B74->unkC.x += gUnknown_3001B74->unk4 / 4; + gUnknown_3001B74->unkC.y += gUnknown_3001B74->unk8 / 4; + sub_80A4580(gUnknown_3001B78, 0, &gUnknown_3001B74->unkC); + gUnknown_3001B74->unk4 &= 3; + gUnknown_3001B74->unk8 &= 3; + sub_80A56C0(&localArray); + localArray.x -= gUnknown_3001B74->unkC.x; + localArray.y += gUnknown_3001B74->unkC.y; + sub_80A4580(gUnknown_3001B78, 0, &localArray); + sub_80A456C(gUnknown_3001B78, 0, &localArray); + break; + } + case 11: + case 12: + case 13: + case 14: { + PixelPos localArray; + + sub_80A56C0(&localArray); + sub_80A456C(gUnknown_3001B78,0,&localArray); + break; + } + case 15: { + PixelPos localArray; + + gUnknown_3001B74->unk4++; + gUnknown_3001B74->unkC.x += gUnknown_3001B74->unk4 / 4; + sub_80A4580(gUnknown_3001B78, 0, &gUnknown_3001B74->unkC); + gUnknown_3001B74->unk4 &= 3; + sub_80A56C0(&localArray); + localArray.x -= gUnknown_3001B74->unkC.x; + localArray.y = 0; + sub_80A4580(gUnknown_3001B78, 0, &localArray); + sub_80A456C(gUnknown_3001B78, 0, &localArray); + break; + } + case 16: { + PixelPos localArray; + + gUnknown_3001B74->unk4 += 2; + gUnknown_3001B74->unkC.x += gUnknown_3001B74->unk4 / 4; + sub_80A4580(gUnknown_3001B78, 0, &gUnknown_3001B74->unkC); + gUnknown_3001B74->unk4 &= 3; + sub_80A56C0(&localArray); + localArray.x -= gUnknown_3001B74->unkC.x; + localArray.y = 0; + sub_80A4580(gUnknown_3001B78, 0, &localArray); + sub_80A456C(gUnknown_3001B78, 0, &localArray); + break; + } + default: { + PixelPos localArray; + const s16 *puVar1 = gUnknown_811E5F4[gUnknown_3001B74->unk0]; + if (puVar1[0] == 0) { + sub_80A56C0(&localArray); + sub_80A456C(gUnknown_3001B78,0,&localArray); + break; + } + } + // NOTE: Fallthrough needed here. + case 0: + sub_80A456C(gUnknown_3001B78, 0, &gUnknown_81177BC); + break; + } + + sub_80A4764(gUnknown_3001B78); +} + +static void sub_80A62D0(void) +{ + if (gUnknown_3001B74->unk2 != 0) + sub_80A49E8(gUnknown_3001B78); } diff --git a/src/ground_map_2.c b/src/ground_map_2.c deleted file mode 100644 index 049ae0016..000000000 --- a/src/ground_map_2.c +++ /dev/null @@ -1,229 +0,0 @@ -#include "global.h" -#include "code_800558C.h" -#include "debug.h" -#include "event_flag.h" -#include "ground_bg.h" -#include "ground_map.h" -#include "ground_map_2.h" -#include "memory.h" - -IWRAM_INIT unkStruct_3001B74 *gUnknown_3001B74 = {NULL}; -IWRAM_INIT GroundBg *gUnknown_3001B78 = {NULL}; - -extern const SubStruct_52C gUnknown_8117784; -extern const s16 gUnknown_811E5F4[][2]; -extern const u8 gGroundWeatherSelect[]; -extern const s32 gUnknown_81177BC[]; - -extern void sub_80A49E8(GroundBg *); -extern void sub_80A456C(GroundBg *, u32, const s32 *); -extern void sub_80A4580(GroundBg *, u32, s32 *); -extern void sub_80A56C0(s32 *); -extern void sub_80A4764(GroundBg *); - -static void sub_80A62D0(void); - -void sub_80A5E70(void) -{ - if (gGroundMapDungeon_3001B70 != NULL) - sub_80A49E8(gGroundMapDungeon_3001B70); - - sub_80A62D0(); -} - -void sub_80A5E8C(u8 param_1) -{ - gUnknown_3001B74 = MemoryAlloc(sizeof(unkStruct_3001B74), 6); - gUnknown_3001B74->unk0 = -1; - gUnknown_3001B74->unk2 = 0; - sub_80A5EDC(param_1); -} - -void sub_80A5EBC(void) -{ - sub_80A5EDC(0); - MemoryFree(gUnknown_3001B74); - gUnknown_3001B74 = NULL; -} - -void sub_80A5EDC(u8 param_1) -{ - SetScriptVarValue(NULL, WEATHER_KIND, -1); - gUnknown_3001B74->unk0 = -1; - gUnknown_3001B74->unk2 = param_1; - - if (gUnknown_3001B78 != NULL) { - GroundBg_FreeAll(gUnknown_3001B78); - MemoryFree(gUnknown_3001B78); - gUnknown_3001B78 = NULL; - } - - if (param_1) { - gUnknown_3001B78 = MemoryAlloc(sizeof(GroundBg), 6); - GroundBg_Init(gUnknown_3001B78, &gUnknown_8117784); - sub_80A2FBC(gUnknown_3001B78, -1); - } -} - -void nullsub_121(void) -{} - -void nullsub_122(void) -{} - -void GroundWeather_Select(s16 param_1) -{ - s32 iVar2; - s32 iVar3; - const s16 *pVar1; - - iVar2 = param_1; - iVar3 = iVar2; - Log(0, gGroundWeatherSelect, iVar2, gUnknown_3001B74->unk2); - SetScriptVarValue(NULL, WEATHER_KIND, iVar2); - gUnknown_3001B74->unk0 = iVar2; - - if (gUnknown_3001B74->unk2 == 0) - return; - - if (iVar2 == -1) { - sub_80A2FBC(gUnknown_3001B78, -1); - return; - } - - pVar1 = gUnknown_811E5F4[iVar3]; - sub_80A2FBC(gUnknown_3001B78, pVar1[1]); - - gUnknown_3001B74->unk4 = 0; - gUnknown_3001B74->unk8 = 0; - gUnknown_3001B74->unkC = 0; - gUnknown_3001B74->unk10 = 0; - gUnknown_3001B74->unk20 = 0; - gUnknown_3001B74->unk1C = 0; - gUnknown_3001B74->unk18 = 0; - gUnknown_3001B74->unk14 = 0; - - switch (gUnknown_3001B74->unk0) { - case 9: - sub_80A3BB0(gUnknown_3001B78, 1); - gUnknown_2026E4E = 0x40c; - break; - case 7: - gUnknown_2026E4E = 0x808; - break; - case 14: - sub_80A3BB0(gUnknown_3001B78, 1); - gUnknown_2026E4E = 0x1010; - break; - case 15: - sub_80A3BB0(gUnknown_3001B78, 1); - gUnknown_2026E4E = 0x40c; - break; - case 0: - case 3: - case 4: - case 5: - case 8: - gUnknown_2026E4E = 0x1010; - break; - default: - if (pVar1[0] == 1) - sub_80A3BB0(gUnknown_3001B78, 1); - - gUnknown_2026E4E = 0x1000; - break; - } -} - -UNUSED static s16 sub_80A60C4(void) -{ - return gUnknown_3001B74->unk0; -} - -void nullsub_123(void) -{} - -void sub_80A60D8(void) -{ - if (gUnknown_3001B74->unk2 == 0) - return; - - switch ((s16)(gUnknown_3001B74->unk0 + 1)) { - case 10: { - s32 localArray[2]; - - gUnknown_3001B74->unk4 += 2; - gUnknown_3001B74->unk8 += 1; - gUnknown_3001B74->unkC += gUnknown_3001B74->unk4 / 4; - gUnknown_3001B74->unk10 += gUnknown_3001B74->unk8 / 4; - sub_80A4580(gUnknown_3001B78, 0, &gUnknown_3001B74->unkC); - gUnknown_3001B74->unk4 &= 3; - gUnknown_3001B74->unk8 &= 3; - sub_80A56C0(localArray); - localArray[0] -= gUnknown_3001B74->unkC; - localArray[1] += gUnknown_3001B74->unk10; - sub_80A4580(gUnknown_3001B78, 0, localArray); - sub_80A456C(gUnknown_3001B78, 0, localArray); - break; - } - case 11: - case 12: - case 13: - case 14: { - s32 localArray[2]; - - sub_80A56C0(localArray); - sub_80A456C(gUnknown_3001B78,0,localArray); - break; - } - case 15: { - s32 localArray[2]; - - gUnknown_3001B74->unk4++; - gUnknown_3001B74->unkC += gUnknown_3001B74->unk4 / 4; - sub_80A4580(gUnknown_3001B78, 0, &gUnknown_3001B74->unkC); - gUnknown_3001B74->unk4 &= 3; - sub_80A56C0(localArray); - localArray[0] -= gUnknown_3001B74->unkC; - localArray[1] = 0; - sub_80A4580(gUnknown_3001B78, 0, localArray); - sub_80A456C(gUnknown_3001B78, 0, localArray); - break; - } - case 16: { - s32 localArray[2]; - - gUnknown_3001B74->unk4 += 2; - gUnknown_3001B74->unkC += gUnknown_3001B74->unk4 / 4; - sub_80A4580(gUnknown_3001B78, 0, &gUnknown_3001B74->unkC); - gUnknown_3001B74->unk4 &= 3; - sub_80A56C0(localArray); - localArray[0] -= gUnknown_3001B74->unkC; - localArray[1] = 0; - sub_80A4580(gUnknown_3001B78, 0, localArray); - sub_80A456C(gUnknown_3001B78, 0, localArray); - break; - } - default: { - s32 localArray[2]; - const s16 *puVar1 = gUnknown_811E5F4[gUnknown_3001B74->unk0]; - if (puVar1[0] == 0) { - sub_80A56C0(localArray); - sub_80A456C(gUnknown_3001B78,0,localArray); - break; - } - } - // NOTE: Fallthrough needed here. - case 0: - sub_80A456C(gUnknown_3001B78, 0, gUnknown_81177BC); - break; - } - - sub_80A4764(gUnknown_3001B78); -} - -static void sub_80A62D0(void) -{ - if (gUnknown_3001B74->unk2 != 0) - sub_80A49E8(gUnknown_3001B78); -} diff --git a/src/ground_script.c b/src/ground_script.c index 13c50f1b7..6b97d2971 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -160,8 +160,8 @@ bool8 sub_80A87E0(); s16 sub_80A8BFC(s16); void sub_80A8F50(const u8 *buffer, s32, s32 size); void sub_80A56A0(s32, s32); -void sub_80A56F0(s32 *); -void sub_80A5704(s32 *); +void sub_80A56F0(PixelPos *); +void sub_80A5704(PixelPos *); void sub_80A86C8(s16, s32); void sub_80AC1B0(s16, s32); void sub_80AD0C8(s16, s32); @@ -3720,17 +3720,17 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3) sub_80A56A0(0, 1); return 0; case 0x36: { - s32 sp_328[2]; - sp_328[0] = r2; - sp_328[1] = r3; - sub_80A56F0(sp_328); + PixelPos sp_328; + sp_328.x = r2; + sp_328.y = r3; + sub_80A56F0(&sp_328); return 0; } case 0x37: { - s32 sp_330[2]; - sp_330[0] = r2; - sp_330[1] = r3; - sub_80A5704(sp_330); + PixelPos sp_330; + sp_330.x = r2; + sp_330.y = r3; + sub_80A5704(&sp_330); return 0; } case 0x39: diff --git a/src/ground_script_file.c b/src/ground_script_file.c index 069b27c67..e8d9830e5 100644 --- a/src/ground_script_file.c +++ b/src/ground_script_file.c @@ -1,5 +1,6 @@ #include "global.h" #include "globaldata.h" +#include "debug.h" #include "map_script_table.h" static EWRAM_DATA s16 sScriptFileId = {0}; @@ -50,7 +51,7 @@ bool8 ChangeScriptFile(s16 a0) static const struct GroundScriptHeader sNullGroundScript = {0}; -const struct GroundScriptHeader *GetGroundScript(s16 mapId) +const struct GroundScriptHeader *GetGroundScript(s16 mapId, const DebugLocation *unused) { if (mapId != -1) return gMapScriptTable[mapId]; diff --git a/src/ground_sprite.c b/src/ground_sprite.c index 1202a583c..265ede12c 100644 --- a/src/ground_sprite.c +++ b/src/ground_sprite.c @@ -5,7 +5,7 @@ #include "debug.h" #include "def_filearchives.h" #include "file_system.h" -#include "ground_map_1.h" +#include "ground_map.h" #include "ground_sprite.h" #include "ground_sprite_data.h" #include "memory.h" diff --git a/asm/rom_header.inc b/src/rom_header.s similarity index 84% rename from asm/rom_header.inc rename to src/rom_header.s index 6730efae2..5f482503f 100644 --- a/asm/rom_header.inc +++ b/src/rom_header.s @@ -1,4 +1,9 @@ - .global RomHeaderNintendoLogo + + .global Start +Start: @ 8000000 + b Init + + .global RomHeaderNintendoLogo RomHeaderNintendoLogo: .space 156 diff --git a/sym_iwram_init.txt b/sym_iwram_init.txt index a3f8f371f..fad124f42 100644 --- a/sym_iwram_init.txt +++ b/sym_iwram_init.txt @@ -6,7 +6,7 @@ .include "src/textbox.o" .include "src/unk_ds_only_feature.o" .include "src/ground_map.o" -.include "src/ground_map_2.o" +.include "src/ground_map_1.o" .include "src/ground_sprite.o" .include "src/ground_lives.o" .include "src/ground_object.o"