diff options
author | Akira Akashi <rubenru09@aol.com> | 2021-07-05 17:50:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-05 17:50:58 +0100 |
commit | 7a2362a15aade4fde583b6612cff3d6613a5eaa4 (patch) | |
tree | b4d547f092ec9fedf15c2e2a4fb0be4e55b438e5 | |
parent | 97efa5f28e697c85d0a47c45f04b0b69dbf699b0 (diff) | |
parent | 042e8e5a558d3fb9470234f1ffdfa42d3556d5d3 (diff) |
Merge pull request #423 from Gogume1er/map_matrix
decompile unk_020343A8 to map_matrix
-rw-r--r-- | arm9/arm9.lsf | 2 | ||||
-rw-r--r-- | arm9/asm/unk_020343A8.s | 481 | ||||
-rw-r--r-- | arm9/asm/unk_020372D4.s | 4 | ||||
-rw-r--r-- | arm9/asm/unk_02048904.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0204A368.s | 6 | ||||
-rw-r--r-- | arm9/asm/unk_0204A498.s | 8 | ||||
-rw-r--r-- | arm9/asm/unk_0205DD18.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0205F7A0.s | 2 | ||||
-rw-r--r-- | arm9/global.inc | 30 | ||||
-rw-r--r-- | arm9/modules/05/asm/mod05_021D74E0.s | 2 | ||||
-rw-r--r-- | arm9/modules/05/asm/module_05.s | 20 | ||||
-rw-r--r-- | arm9/modules/06/asm/module_06.s | 10 | ||||
-rw-r--r-- | arm9/modules/18/asm/module_18.s | 4 | ||||
-rw-r--r-- | arm9/modules/66/asm/module_66.s | 8 | ||||
-rw-r--r-- | arm9/src/map_matrix.c | 231 | ||||
-rw-r--r-- | include/map_matrix.h | 54 |
16 files changed, 335 insertions, 531 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 8b49cc27..0153f5e3 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -140,7 +140,7 @@ Static arm9 Object unk_02033B68.o Object unk_02033F50.o Object wfc_user_info_warning.o - Object unk_020343A8.o + Object map_matrix.o Object map_header.o Object unk_02034A28.o Object unk_02034D7C.o diff --git a/arm9/asm/unk_020343A8.s b/arm9/asm/unk_020343A8.s deleted file mode 100644 index 38e95c4f..00000000 --- a/arm9/asm/unk_020343A8.s +++ /dev/null @@ -1,481 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_020343A8 -FUN_020343A8: ; 0x020343A8 - push {r4-r7, lr} - sub sp, #0xc - add r4, r0, #0x0 - str r2, [sp, #0x0] - mov r2, #0x0 - strb r2, [r4, #0x1] - mov r0, #0xe1 - ldr r7, _02034488 ; =0x0000070A - ldr r6, _0203448C ; =0x00000A8E - mov r12, r1 - strb r2, [r4, #0x0] - add r3, r4, #0x0 - add r5, r2, #0x0 - lsl r0, r0, #0x2 -_020343C4: - add r1, r4, r2 - strh r5, [r3, #0x2] - strb r5, [r1, r7] - strh r5, [r3, r6] - add r2, r2, #0x1 - add r3, r3, #0x2 - cmp r2, r0 - blt _020343C4 - ldr r0, _02034490 ; =0x00001196 - mov r2, #0x0 -_020343D8: - add r1, r4, r5 - add r5, r5, #0x1 - strb r2, [r1, r0] - cmp r5, #0x10 - blt _020343D8 - mov r0, #0x29 - mov r1, r12 - mov r2, #0xb - bl AllocAtEndAndReadWholeNarcMemberByIdPair - add r6, r0, #0x0 - ldrb r0, [r6, #0x0] - add r5, r6, #0x5 - strb r0, [r4, #0x1] - ldrb r0, [r6, #0x1] - strb r0, [r4, #0x0] - ldrb r0, [r6, #0x2] - str r0, [sp, #0x8] - ldrb r0, [r6, #0x3] - str r0, [sp, #0x4] - ldrb r7, [r6, #0x4] - cmp r7, #0x10 - bls _0203440A - bl GF_AssertFail -_0203440A: - ldr r1, _02034490 ; =0x00001196 - add r0, r5, #0x0 - add r1, r4, r1 - add r2, r7, #0x0 - bl MI_CpuCopy8 - ldr r0, [sp, #0x8] - add r5, r5, r7 - cmp r0, #0x0 - beq _0203443A - ldrb r3, [r4, #0x1] - ldrb r2, [r4, #0x0] - add r0, r5, #0x0 - add r1, r4, #0x2 - mul r2, r3 - lsl r2, r2, #0x1 - bl MI_CpuCopy8 - ldrb r1, [r4, #0x1] - ldrb r0, [r4, #0x0] - mul r0, r1 - lsl r0, r0, #0x1 - add r5, r5, r0 - b _0203444E -_0203443A: - ldrb r3, [r4, #0x1] - ldrb r2, [r4, #0x0] - ldr r0, [sp, #0x0] - add r1, r4, #0x2 - lsl r0, r0, #0x10 - mul r2, r3 - lsr r0, r0, #0x10 - lsl r2, r2, #0x1 - bl MIi_CpuClear16 -_0203444E: - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _0203446C - ldrb r3, [r4, #0x1] - ldrb r2, [r4, #0x0] - ldr r1, _02034488 ; =0x0000070A - add r0, r5, #0x0 - add r1, r4, r1 - mul r2, r3 - bl MI_CpuCopy8 - ldrb r1, [r4, #0x1] - ldrb r0, [r4, #0x0] - mul r0, r1 - add r5, r5, r0 -_0203446C: - ldrb r3, [r4, #0x1] - ldrb r2, [r4, #0x0] - ldr r1, _0203448C ; =0x00000A8E - add r0, r5, #0x0 - mul r2, r3 - add r1, r4, r1 - lsl r2, r2, #0x1 - bl MI_CpuCopy8 - add r0, r6, #0x0 - bl FreeToHeap - add sp, #0xc - pop {r4-r7, pc} - .balign 4 -_02034488: .word 0x0000070A -_0203448C: .word 0x00000A8E -_02034490: .word 0x00001196 - - thumb_func_start FUN_02034494 -FUN_02034494: ; 0x02034494 - push {r3, lr} - ldr r1, _020344A8 ; =0x000011AA - mov r0, #0xb - bl AllocFromHeap - mov r1, #0x0 - strb r1, [r0, #0x0] - strb r1, [r0, #0x1] - strb r1, [r0, #0x2] - pop {r3, pc} - .balign 4 -_020344A8: .word 0x000011AA - - thumb_func_start FUN_020344AC -FUN_020344AC: ; 0x020344AC - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bl MapHeader_GetMatrixId - add r6, r0, #0x0 - add r0, r4, #0x4 - add r1, r6, #0x0 - add r2, r5, #0x0 - bl FUN_020343A8 - strb r6, [r4, #0x2] - ldrb r0, [r4, #0x4] - strb r0, [r4, #0x1] - ldrb r0, [r4, #0x5] - strb r0, [r4, #0x0] - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_020344D0 -FUN_020344D0: ; 0x020344D0 - ldr r3, _020344D4 ; =FreeToHeap - bx r3 - .balign 4 -_020344D4: .word FreeToHeap - - thumb_func_start FUN_020344D8 -FUN_020344D8: ; 0x020344D8 - push {r3-r5, lr} - add r4, r1, #0x0 - add r5, r0, #0x0 - ldrb r1, [r4, #0x0] - ldrb r0, [r4, #0x1] - mul r0, r1 - cmp r5, r0 - blt _020344EC - bl GF_AssertFail -_020344EC: - lsl r0, r5, #0x1 - add r1, r4, r0 - ldr r0, _020344F8 ; =0x00000A92 - ldrh r0, [r1, r0] - pop {r3-r5, pc} - nop -_020344F8: .word 0x00000A92 - - thumb_func_start FUN_020344FC -FUN_020344FC: ; 0x020344FC - push {r4, lr} - add r4, r0, #0x0 - bne _02034506 - bl GF_AssertFail -_02034506: - ldrb r0, [r4, #0x0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0203450C -FUN_0203450C: ; 0x0203450C - push {r4, lr} - add r4, r0, #0x0 - bne _02034516 - bl GF_AssertFail -_02034516: - ldrb r0, [r4, #0x1] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0203451C -FUN_0203451C: ; 0x0203451C - push {r3-r7, lr} - add r7, r0, #0x0 - ldrb r0, [r7, #0x1] - add r5, r1, #0x0 - add r4, r2, #0x0 - ldrb r6, [r7, #0x0] - str r0, [sp, #0x0] - cmp r5, #0x0 - blt _02034532 - cmp r5, r6 - blt _02034536 -_02034532: - bl GF_AssertFail -_02034536: - cmp r4, #0x0 - blt _02034540 - ldr r0, [sp, #0x0] - cmp r4, r0 - blt _02034544 -_02034540: - bl GF_AssertFail -_02034544: - add r0, r4, #0x0 - mul r0, r6 - add r0, r5, r0 - lsl r0, r0, #0x1 - add r0, r7, r0 - ldrh r0, [r0, #0x6] - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02034554 -FUN_02034554: ; 0x02034554 - push {r3-r5, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - ldrb r1, [r5, #0x0] - ldrb r0, [r5, #0x1] - mul r0, r1 - cmp r4, #0x0 - blt _02034568 - cmp r4, r0 - blt _0203456C -_02034568: - bl GF_AssertFail -_0203456C: - lsl r0, r4, #0x1 - add r0, r5, r0 - ldrh r0, [r0, #0x6] - pop {r3-r5, pc} - - thumb_func_start FUN_02034574 -FUN_02034574: ; 0x02034574 - ldrb r0, [r0, #0x2] - bx lr - - thumb_func_start FUN_02034578 -FUN_02034578: ; 0x02034578 - push {r4-r6, lr} - add r5, r0, #0x0 - ldr r0, [sp, #0x10] - add r4, r2, #0x0 - add r6, r3, #0x0 - cmp r4, r0 - blt _0203458A - bl GF_AssertFail -_0203458A: - ldr r0, [sp, #0x10] - mul r0, r6 - add r4, r4, r0 - mov r0, #0xe1 - lsl r0, r0, #0x2 - cmp r4, r0 - blt _0203459C - bl GF_AssertFail -_0203459C: - ldr r0, _020345A4 ; =0x0000070E - add r1, r5, r4 - ldrb r0, [r1, r0] - pop {r4-r6, pc} - .balign 4 -_020345A4: .word 0x0000070E - - thumb_func_start FUN_020345A8 -FUN_020345A8: ; 0x020345A8 - push {r3-r5, lr} - ldr r1, _020345D8 ; =0x00000708 - add r4, r0, #0x0 - bl AllocFromHeap - add r5, r0, #0x0 - mov r0, #0x29 - mov r1, #0x0 - add r2, r4, #0x0 - bl AllocAtEndAndReadWholeNarcMemberByIdPair - add r4, r0, #0x0 - ldrb r1, [r4, #0x4] - add r0, r4, #0x5 - ldr r2, _020345D8 ; =0x00000708 - add r0, r0, r1 - add r1, r5, #0x0 - bl MI_CpuCopy8 - add r0, r4, #0x0 - bl FreeToHeap - add r0, r5, #0x0 - pop {r3-r5, pc} - .balign 4 -_020345D8: .word 0x00000708 - - thumb_func_start FUN_020345DC -FUN_020345DC: ; 0x020345DC - push {r4, lr} - add r4, r0, #0x0 - bne _020345E6 - bl GF_AssertFail -_020345E6: - add r0, r4, #0x0 - bl FreeToHeap - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_020345F0 -FUN_020345F0: ; 0x020345F0 - mov r3, #0x1e - mul r3, r2 - add r1, r1, r3 - lsl r1, r1, #0x1 - ldrh r0, [r0, r1] - bx lr - - thumb_func_start FUN_020345FC -FUN_020345FC: ; 0x020345FC - push {r3-r5, lr} - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1fc - sub sp, #0x1c8 - add r3, r0, #0x0 - add r5, r1, #0x0 - lsl r1, r3, #0x10 - add r4, r2, #0x0 - add r0, sp, #0x0 - lsr r1, r1, #0x10 - mov r2, #0x0 - bl FUN_020343A8 - add r0, sp, #0x0 - ldrb r0, [r0, #0x1] - cmp r5, r0 - blt _0203462E - bl GF_AssertFail -_0203462E: - add r0, sp, #0x0 - ldrb r0, [r0, #0x0] - cmp r4, r0 - blt _0203463A - bl GF_AssertFail -_0203463A: - add r0, sp, #0x0 - ldrb r0, [r0, #0x1] - mul r0, r4 - add r0, r5, r0 - lsl r1, r0, #0x1 - add r0, sp, #0x0 - add r0, #0x2 - ldrh r0, [r0, r1] - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1fc - add sp, #0x1c8 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02034660 -FUN_02034660: ; 0x02034660 - push {r3-r5, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bne _0203466C - bl GF_AssertFail -_0203466C: - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_020344D8 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02034678 -FUN_02034678: ; 0x02034678 - push {r4-r7} - ldr r1, _020346C4 ; =0x00000A92 - ldrb r7, [r0, #0x0] - add r2, r0, r1 - ldr r1, _020346C8 ; =0x0000070E - add r1, r0, r1 - ldrb r0, [r0, #0x2] - cmp r0, #0x0 - bne _020346BE - mov r0, #0x15 - add r6, r7, #0x0 - mul r6, r0 - add r5, r6, #0x0 - add r5, #0x17 - mov r4, #0xb0 - lsl r0, r5, #0x1 - add r6, #0x18 - strh r4, [r2, r0] - lsl r0, r6, #0x1 - strh r4, [r2, r0] - mov r0, #0x16 - add r3, r7, #0x0 - mul r3, r0 - add r0, r3, #0x0 - add r0, #0x17 - lsl r7, r0, #0x1 - add r3, #0x18 - strh r4, [r2, r7] - lsl r7, r3, #0x1 - strh r4, [r2, r7] - mov r2, #0x2 - strb r2, [r1, r5] - strb r2, [r1, r6] - strb r2, [r1, r0] - strb r2, [r1, r3] -_020346BE: - pop {r4-r7} - bx lr - nop -_020346C4: .word 0x00000A92 -_020346C8: .word 0x0000070E - - thumb_func_start FUN_020346CC -FUN_020346CC: ; 0x020346CC - push {r3-r4} - ldr r1, _0203470C ; =0x00000A92 - add r2, r0, r1 - ldrb r1, [r0, #0x0] - ldrb r0, [r0, #0x2] - cmp r0, #0x0 - bne _02034706 - mov r0, #0xf - mul r0, r1 - add r0, #0x1c - mov r3, #0x77 - lsl r0, r0, #0x1 - strh r3, [r2, r0] - lsl r0, r1, #0x4 - add r3, r0, #0x0 - add r3, #0x1b - mov r4, #0x78 - lsl r3, r3, #0x1 - strh r4, [r2, r3] - add r3, r0, #0x0 - add r3, #0x1c - add r0, r1, r0 - add r0, #0x1b - mov r4, #0x79 - lsl r3, r3, #0x1 - strh r4, [r2, r3] - mov r3, #0x7a - lsl r0, r0, #0x1 - strh r3, [r2, r0] -_02034706: - pop {r3-r4} - bx lr - nop -_0203470C: .word 0x00000A92 diff --git a/arm9/asm/unk_020372D4.s b/arm9/asm/unk_020372D4.s index 88845239..42b6d930 100644 --- a/arm9/asm/unk_020372D4.s +++ b/arm9/asm/unk_020372D4.s @@ -227,7 +227,7 @@ FUN_02037400: ; 0x02037400 bl FUN_02034E30 bl FUN_02034DC0 str r0, [r4, #0x1c] - bl FUN_02034494 + bl MapMatrix_New str r0, [r4, #0x28] add r0, r4, #0x0 mov r1, #0xb @@ -262,7 +262,7 @@ FUN_020374B0: ; 0x020374B0 bl OverlayManager_GetData add r4, r0, #0x0 ldr r0, [r4, #0x28] - bl FUN_020344D0 + bl MapMatrix_Free add r0, r4, #0x0 bl FUN_02034A48 add r0, r4, #0x0 diff --git a/arm9/asm/unk_02048904.s b/arm9/asm/unk_02048904.s index eb461974..8cf0ee61 100644 --- a/arm9/asm/unk_02048904.s +++ b/arm9/asm/unk_02048904.s @@ -346,7 +346,7 @@ _02048BA2: ldr r0, [r4, #0x1c] ldr r1, [r4, #0x28] ldr r0, [r0, #0x0] - bl FUN_020344AC + bl MapMatrix_Load ldr r0, [r4, #0xc] bl SavArray_Flags_get mov r1, #0x3 diff --git a/arm9/asm/unk_0204A368.s b/arm9/asm/unk_0204A368.s index 4b9f5a98..dee2d54b 100644 --- a/arm9/asm/unk_0204A368.s +++ b/arm9/asm/unk_0204A368.s @@ -56,10 +56,10 @@ FUN_0204A3B0: ; 0x0204A3B0 mov r2, #0x0 add r1, sp, #0x18 strb r2, [r1, #0x0] - bl FUN_020344FC + bl MapMatrix_GetWidth add r6, r0, #0x0 ldr r0, [sp, #0x4] - bl FUN_0203450C + bl MapMatrix_GetHeight str r0, [sp, #0x10] mov r0, #0x0 str r0, [sp, #0x14] @@ -77,7 +77,7 @@ _0204A3E0: lsr r4, r0, #0x10 ldr r1, [sp, #0x4] add r0, r4, #0x0 - bl FUN_020344D8 + bl MapMatrix_GetMapData add r1, sp, #0x18 add r1, #0x2 add r2, sp, #0x18 diff --git a/arm9/asm/unk_0204A498.s b/arm9/asm/unk_0204A498.s index 3e0580b3..6b7e034d 100644 --- a/arm9/asm/unk_0204A498.s +++ b/arm9/asm/unk_0204A498.s @@ -39,7 +39,7 @@ FUN_0204A4A4: ; 0x0204A4A4 str r1, [sp, #0x4] str r0, [sp, #0x8] ldr r0, [r5, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth str r0, [sp, #0x24] lsl r0, r0, #0x5 str r0, [sp, #0xc] @@ -247,7 +247,7 @@ FUN_0204A640: ; 0x0204A640 add r4, r2, #0x0 add r5, r1, #0x0 add r7, r3, #0x0 - bl FUN_020344FC + bl MapMatrix_GetWidth asr r2, r4, #0x4 asr r1, r5, #0x4 lsr r2, r2, #0x1b @@ -617,7 +617,7 @@ _0204A8D4: add r4, r0, #0x0 ldr r0, [sp, #0x0] ldr r0, [r0, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r0, #0x0 add r0, r4, #0x0 add r2, sp, #0x10 @@ -685,7 +685,7 @@ _0204A95C: add r6, r0, #0x0 ldr r0, [sp, #0x0] ldr r0, [r0, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r0, #0x0 add r0, r6, #0x0 add r2, sp, #0x10 diff --git a/arm9/asm/unk_0205DD18.s b/arm9/asm/unk_0205DD18.s index 5f01125f..b5431d9c 100644 --- a/arm9/asm/unk_0205DD18.s +++ b/arm9/asm/unk_0205DD18.s @@ -622,7 +622,7 @@ _0205E180: ldr r0, [r7, #0x28] asr r1, r1, #0x5 asr r2, r2, #0x5 - bl FUN_0203451C + bl MapMatrix_GetMapHeader ldr r1, [r7, #0x1c] ldr r1, [r1, #0x0] cmp r1, r0 diff --git a/arm9/asm/unk_0205F7A0.s b/arm9/asm/unk_0205F7A0.s index 73e22dfa..67b26aea 100644 --- a/arm9/asm/unk_0205F7A0.s +++ b/arm9/asm/unk_0205F7A0.s @@ -54,7 +54,7 @@ FUN_0205F7A0: ; 0x0205F7A0 ldr r0, [r0, #0x28] asr r1, r1, #0x5 asr r2, r2, #0x5 - bl FUN_0203451C + bl MapMatrix_GetMapHeader bl MapHeader_MapIsOnMainMatrix cmp r0, #0x0 beq _0205F806 diff --git a/arm9/global.inc b/arm9/global.inc index 46de1414..da12b3fd 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2473,21 +2473,21 @@ .extern FUN_02033F20 .extern FUN_02033F70 .extern ShowWFCUserInfoWarning -.extern FUN_02034494 -.extern FUN_020344AC -.extern FUN_020344D0 -.extern FUN_020344D8 -.extern FUN_020344FC -.extern FUN_0203450C -.extern FUN_0203451C -.extern FUN_02034554 -.extern FUN_02034574 -.extern FUN_02034578 -.extern FUN_020345A8 -.extern FUN_020345DC -.extern FUN_020345F0 -.extern FUN_020345FC -.extern FUN_02034660 +.extern MapMatrix_New +.extern MapMatrix_Load +.extern MapMatrix_Free +.extern MapMatrix_GetMapData +.extern MapMatrix_GetWidth +.extern MapMatrix_GetHeight +.extern MapMatrix_GetMapHeader +.extern MapMatrix_GetMapHeaderFromID +.extern MapMatrix_GetMatrixID +.extern MapMatrix_GetMapAltitude +.extern MapMatrix_MapData_New +.extern MapMatrix_MapData_Free +.extern MapMatrix_MapData_GetData +.extern GetMapHeader +.extern GetMapData .extern FUN_02034678 .extern FUN_020346CC .extern MapHeader_GetAreaDataBank diff --git a/arm9/modules/05/asm/mod05_021D74E0.s b/arm9/modules/05/asm/mod05_021D74E0.s index 82339e4e..1aad5cc7 100644 --- a/arm9/modules/05/asm/mod05_021D74E0.s +++ b/arm9/modules/05/asm/mod05_021D74E0.s @@ -424,7 +424,7 @@ MOD05_021D7894: ; 0x021D7894 asr r2, r1, #5 ldr r0, [r5, #0x28] add r1, r4, #0 - bl FUN_0203451C + bl MapMatrix_GetMapHeader add r4, r0, #0 ldr r0, [r5, #0x1c] ldr r6, [r0] diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index 0157aedb..36143bb3 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -11251,7 +11251,7 @@ MOD05_021EE114: ; 0x021EE114 cmp r0, r1 bge _021EE1D0 add r1, r2, #0 - bl FUN_02034660 + bl GetMapData add r1, r0, #0 ldr r0, _021EE1D4 ; =0x0000FFFF cmp r1, r0 @@ -11356,7 +11356,7 @@ MOD05_021EE1E4: ; 0x021EE1E4 mul r3, r2 cmp r0, r3 bge _021EE286 - bl FUN_02034660 + bl GetMapData add r1, r0, #0 ldr r0, _021EE298 ; =0x0000FFFF cmp r1, r0 @@ -11440,7 +11440,7 @@ MOD05_021EE2A4: ; 0x021EE2A4 cmp r1, r5 bge _021EE37A add r1, r3, #0 - bl FUN_02034660 + bl GetMapData add r1, r0, #0 ldr r0, _021EE380 ; =0x0000FFFF cmp r1, r0 @@ -11556,7 +11556,7 @@ MOD05_021EE38C: ; 0x021EE38C cmp r1, r2 bge _021EE43E add r1, r3, #0 - bl FUN_02034660 + bl GetMapData add r1, r0, #0 ldr r0, _021EE450 ; =0x0000FFFF cmp r1, r0 @@ -13633,17 +13633,17 @@ MOD05_021EF300: ; 0x021EF300 lsl r0, r0, #0x10 lsr r4, r0, #0x10 add r0, r7, #0 - bl FUN_020344FC + bl MapMatrix_GetWidth str r0, [sp, #8] add r0, r7, #0 - bl FUN_02034574 + bl MapMatrix_GetMatrixID add r1, r0, #0 ldr r0, [sp, #8] add r2, r6, #0 str r0, [sp] add r0, r7, #0 add r3, r4, #0 - bl FUN_02034578 + bl MapMatrix_GetMapAltitude lsl r0, r0, #0xf str r0, [r5, #4] ldr r1, [r5] @@ -13707,12 +13707,12 @@ _021EF3AE: add r0, #0xbc str r5, [r0] add r0, r5, #0 - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r4, #0 add r1, #0xc0 str r0, [r1] add r0, r5, #0 - bl FUN_0203450C + bl MapMatrix_GetHeight add r1, r4, #0 add r1, #0xc4 str r0, [r1] @@ -25857,7 +25857,7 @@ MOD05_021F5068: ; 0x021F5068 ldr r0, [r5, #0x28] add r7, r1, #0 add r1, r2, #0 - bl FUN_02034554 + bl MapMatrix_GetMapHeaderFromID bl MOD05_021F50FC add r4, r0, #0 cmp r4, #0x15 diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index 5140203c..5567f4d2 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -23774,7 +23774,7 @@ MOD06_02245198: ; 0x02245198 lsl r2, r2, #0xb lsr r1, r1, #0x10 lsr r2, r2, #0x10 - bl FUN_020345FC + bl GetMapHeader b _022451D6 _022451BA: cmp r5, #5 @@ -23790,7 +23790,7 @@ _022451C2: ldr r0, [r0, #0x28] lsr r1, r1, #5 lsr r2, r2, #5 - bl FUN_0203451C + bl MapMatrix_GetMapHeader _022451D6: lsl r3, r5, #2 add r1, r4, r3 @@ -38544,7 +38544,7 @@ MOD06_0224C27C: ; 0x0224C27C strb r0, [r4, #0xe] strb r0, [r4, #0xf] ldr r0, [r5, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r0, #0 ldr r0, [sp] add r2, sp, #0x14 @@ -39797,7 +39797,7 @@ _0224CC80: add r2, sp, #0x14 bl FUN_020572B8 ldr r0, [r5, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth str r0, [sp] mov r0, #0 str r0, [sp, #4] @@ -42943,7 +42943,7 @@ MOD06_0224E554: ; 0x0224E554 strb r0, [r4, #0xe] strb r0, [r4, #0xf] ldr r0, [r5, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth add r1, r0, #0 ldr r0, [sp] add r2, sp, #0x14 diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index 074ed1e0..85c8a425 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -405,7 +405,7 @@ MOD18_02239994: ; 0x02239994 ldr r0, [r0] ldr r0, [r0] ldr r0, [r0, #0x28] - bl FUN_020344FC + bl MapMatrix_GetWidth sub r0, r0, #2 lsl r0, r0, #0x15 lsr r6, r0, #0x10 @@ -413,7 +413,7 @@ MOD18_02239994: ; 0x02239994 ldr r0, [r0] ldr r0, [r0] ldr r0, [r0, #0x28] - bl FUN_0203450C + bl MapMatrix_GetHeight sub r0, r0, #2 lsl r0, r0, #0x15 lsr r4, r0, #0x10 diff --git a/arm9/modules/66/asm/module_66.s b/arm9/modules/66/asm/module_66.s index 95660bd2..ca8faeb0 100644 --- a/arm9/modules/66/asm/module_66.s +++ b/arm9/modules/66/asm/module_66.s @@ -259,7 +259,7 @@ _021D7694: add r1, #0x88 str r0, [r1] ldr r0, [r4, #4] - bl FUN_020345A8 + bl MapMatrix_MapData_New str r0, [r4, #0x30] ldr r0, _021D7744 ; =0x021D9AA0 ldr r1, [r4, #4] @@ -345,7 +345,7 @@ _021D7782: ldr r0, [r5, #0x40] bl MOD66_021D9544 ldr r0, [r5, #0x30] - bl FUN_020345DC + bl MapMatrix_MapData_Free add r0, r5, #0 add r0, #0x88 ldr r0, [r0] @@ -1648,7 +1648,7 @@ MOD66_021D818C: ; 0x021D818C ldr r0, [r5, #0x30] ldr r1, [r4, #0x18] ldr r2, [r4, #0x1c] - bl FUN_020345F0 + bl MapMatrix_MapData_GetData str r0, [r4, #0x20] ldrh r3, [r5, #2] ldr r0, [r5, #0x40] @@ -1932,7 +1932,7 @@ MOD66_021D8380: ; 0x021D8380 ldr r0, [r6, #0x30] ldr r1, [sp, #4] add r2, r7, #0 - bl FUN_020345F0 + bl MapMatrix_MapData_GetData add r1, r5, #0 add r2, r0, #0 ldr r3, [sp, #4] diff --git a/arm9/src/map_matrix.c b/arm9/src/map_matrix.c new file mode 100644 index 00000000..1808d82c --- /dev/null +++ b/arm9/src/map_matrix.c @@ -0,0 +1,231 @@ +#include "global.h" +#include "map_matrix.h" +#include "MI_memory.h" +#include "filesystem.h" +#include "heap.h" +#include "map_header.h" + +THUMB_FUNC static void MapMatrix_MapMatrixData_Load( + struct MapMatrixData *map_matrix, u16 file_id, u32 map_id) +{ + map_matrix->width = 0; + map_matrix->height = 0; + + s32 i; + for (i = 0; i < MAP_MATRIX_MAX_SIZE; i++) + { + map_matrix->headers[i] = 0; + map_matrix->altitudes[i] = 0; + map_matrix->maps.data[i] = 0; + } + + for (i = 0; i < MAP_MATRIX_MAX_NAME_LENGTH; i++) + { + map_matrix->name[i] = 0; + } + + void *buffer = + AllocAtEndAndReadWholeNarcMemberByIdPair(NARC_FIELDDATA_MAPMATRIX_MAP_MATRIX, file_id, 11); + u8 *cursor = (u8 *)buffer; + + map_matrix->width = *(cursor++); + map_matrix->height = *(cursor++); + u8 has_headers_section = *(cursor++); + u8 has_altitudes_section = *(cursor++); + u8 name_length = *(cursor++); + + GF_ASSERT(name_length <= MAP_MATRIX_MAX_NAME_LENGTH); + + MI_CpuCopy8(cursor, &map_matrix->name, name_length); + cursor += name_length; + + if (has_headers_section != 0) + { + MI_CpuCopy8( + cursor, &map_matrix->headers, map_matrix->width * map_matrix->height * sizeof(u16)); + cursor += map_matrix->width * map_matrix->height * sizeof(u16); + } + else + { + MIi_CpuClear16((u16)map_id, + &map_matrix->headers, + map_matrix->width * map_matrix->height * sizeof(u16)); + } + + if (has_altitudes_section != 0) + { + MI_CpuCopy8( + cursor, &map_matrix->altitudes, map_matrix->width * map_matrix->height * sizeof(u8)); + cursor += map_matrix->width * map_matrix->height * sizeof(u8); + } + + MI_CpuCopy8( + cursor, map_matrix->maps.data, map_matrix->width * map_matrix->height * sizeof(u16)); + FreeToHeap(buffer); +} + +THUMB_FUNC struct MapMatrix *MapMatrix_New(void) +{ + struct MapMatrix *map_matrix = AllocFromHeap(11, sizeof(struct MapMatrix)); + + map_matrix->width = 0; + map_matrix->height = 0; + map_matrix->matrix_id = 0; + + return map_matrix; +} + +THUMB_FUNC void MapMatrix_Load(u16 map_id, struct MapMatrix *map_matrix) +{ + u16 matrix_id = MapHeader_GetMatrixId(map_id); + + MapMatrix_MapMatrixData_Load(&map_matrix->data, matrix_id, map_id); + + map_matrix->matrix_id = (u8)matrix_id; + map_matrix->height = map_matrix->data.height; + map_matrix->width = map_matrix->data.width; +} + +THUMB_FUNC void MapMatrix_Free(struct MapMatrix *map_matrix) +{ + FreeToHeap(map_matrix); +} + +THUMB_FUNC u16 MapMatrix_GetMapData(s32 map_id, struct MapMatrix *map_matrix) +{ + GF_ASSERT(map_id < map_matrix->width * map_matrix->height); + + return map_matrix->data.maps.data[map_id]; +} + +THUMB_FUNC u8 MapMatrix_GetWidth(struct MapMatrix *map_matrix) +{ + GF_ASSERT(map_matrix != NULL); + + return map_matrix->width; +} + +THUMB_FUNC u8 MapMatrix_GetHeight(struct MapMatrix *map_matrix) +{ + GF_ASSERT(map_matrix != NULL); + + return map_matrix->height; +} + +THUMB_FUNC u16 MapMatrix_GetMapHeader(struct MapMatrix *map_matrix, s32 x, s32 y) +{ + s32 width = map_matrix->width; + s32 height = map_matrix->height; + + GF_ASSERT(x >= 0 && x < width); + GF_ASSERT(y >= 0 && y < height); + + return map_matrix->data.headers[y * width + x]; +} + +THUMB_FUNC u16 MapMatrix_GetMapHeaderFromID(struct MapMatrix *map_matrix, s32 map_id) +{ + s32 max_map_id = map_matrix->width * map_matrix->height; + + GF_ASSERT(0 <= map_id && map_id < max_map_id); + + return map_matrix->data.headers[map_id]; +} + +THUMB_FUNC u8 MapMatrix_GetMatrixID(struct MapMatrix *map_matrix) +{ + return map_matrix->matrix_id; +} + +THUMB_FUNC u32 MapMatrix_GetMapAltitude( + struct MapMatrix *map_matrix, u8 param1, s16 x, s16 y, int matrix_width) +{ +#pragma unused(param1) + GF_ASSERT(x < matrix_width); + GF_ASSERT(y * matrix_width + x < MAP_MATRIX_MAX_SIZE); + + return map_matrix->data.altitudes[y * matrix_width + x]; +} + +THUMB_FUNC struct MapData *MapMatrix_MapData_New(u32 heap_id) +{ + struct MapData *map_data = AllocFromHeap(heap_id, sizeof(struct MapData)); + void *buffer = + AllocAtEndAndReadWholeNarcMemberByIdPair(NARC_FIELDDATA_MAPMATRIX_MAP_MATRIX, 0, heap_id); + u8 *cursor = (u8 *)buffer; + + cursor += 4; + u8 name_length = *cursor; + cursor++; + cursor += name_length; + + MI_CpuCopy8(cursor, map_data, sizeof(struct MapData)); + FreeToHeap(buffer); + + return map_data; +} + +THUMB_FUNC void MapMatrix_MapData_Free(struct MapData *map_data) +{ + GF_ASSERT(map_data != NULL); + FreeToHeap(map_data); +} + +THUMB_FUNC u16 MapMatrix_MapData_GetData(struct MapData *map_data, s32 x, s32 y) +{ + return map_data->data[MAP_MATRIX_MAX_WIDTH * y + x]; +} + +THUMB_FUNC u16 GetMapHeader(u32 file_id, u16 x, u16 y) +{ + struct MapMatrixData map_matrix; + + MapMatrix_MapMatrixData_Load(&map_matrix, (u16)file_id, 0); + GF_ASSERT(x < map_matrix.width); + GF_ASSERT(y < map_matrix.height); + + return map_matrix.headers[y * map_matrix.width + x]; +} + +THUMB_FUNC u16 GetMapData(s32 map_id, struct MapMatrix *map_matrix) +{ + GF_ASSERT(map_matrix != NULL); + return MapMatrix_GetMapData(map_id, map_matrix); +} + +THUMB_FUNC void FUN_02034678(struct MapMatrix *map_matrix) +{ + u16 *maps = map_matrix->data.maps.data; + u8 *altitudes = map_matrix->data.altitudes; + u8 width = map_matrix->width; + + if (map_matrix->matrix_id != 0) + { + return; + } + + maps[width * 0x15 + 0x17] = 0xB0; + maps[width * 0x15 + 0x18] = 0xB0; + maps[width * 0x16 + 0x17] = 0xB0; + maps[width * 0x16 + 0x18] = 0xB0; + altitudes[width * 0x15 + 0x17] = 2; + altitudes[width * 0x15 + 0x18] = 2; + altitudes[width * 0x16 + 0x17] = 2; + altitudes[width * 0x16 + 0x18] = 2; +} + +THUMB_FUNC void FUN_020346CC(struct MapMatrix *map_matrix) +{ + u16 *maps = map_matrix->data.maps.data; + u8 width = map_matrix->width; + + if (map_matrix->matrix_id != 0) + { + return; + } + + maps[width * 0x0F + 0x1C] = 0x77; + maps[width * 0x10 + 0x1B] = 0x78; + maps[width * 0x10 + 0x1C] = 0x79; + maps[width * 0x11 + 0x1B] = 0x7A; +} diff --git a/include/map_matrix.h b/include/map_matrix.h new file mode 100644 index 00000000..87e732dc --- /dev/null +++ b/include/map_matrix.h @@ -0,0 +1,54 @@ +#ifndef POKEDIAMOND_MAP_MATRIX_H +#define POKEDIAMOND_MAP_MATRIX_H + +#define MAP_MATRIX_MAX_WIDTH 30 +#define MAP_MATRIX_MAX_HEIGHT 30 +#define MAP_MATRIX_MAX_SIZE (MAP_MATRIX_MAX_WIDTH * MAP_MATRIX_MAX_HEIGHT) + +#define MAP_MATRIX_MAX_NAME_LENGTH 16 + +struct MapData +{ + u16 data[MAP_MATRIX_MAX_SIZE]; +}; + +struct MapMatrixData +{ + u8 height; + u8 width; + u16 headers[MAP_MATRIX_MAX_SIZE]; + u8 altitudes[MAP_MATRIX_MAX_SIZE]; + struct MapData maps; + u8 name[MAP_MATRIX_MAX_NAME_LENGTH]; +}; + +struct MapMatrix +{ + u8 width; + u8 height; + u8 matrix_id; + struct MapMatrixData data; +}; + +struct MapMatrix *MapMatrix_New(void); +void MapMatrix_Load(u16 map_id, struct MapMatrix *map_matrix); +void MapMatrix_Free(struct MapMatrix *map_matrix); +u16 MapMatrix_GetMapData(s32 map_id, struct MapMatrix *map_matrix); +u8 MapMatrix_GetWidth(struct MapMatrix *map_matrix); +u8 MapMatrix_GetHeight(struct MapMatrix *map_matrix); +u16 MapMatrix_GetMapHeader(struct MapMatrix *map_matrix, s32 x, s32 y); +u16 MapMatrix_GetMapHeaderFromID(struct MapMatrix *map_matrix, s32 map_id); +u8 MapMatrix_GetMatrixID(struct MapMatrix *map_matrix); +u32 MapMatrix_GetMapAltitude( + struct MapMatrix *map_matrix, u8 param1, s16 x, s16 y, int matrix_width); + +struct MapData *MapMatrix_MapData_New(u32 heap_id); +void MapMatrix_MapData_Free(struct MapData *map_data); +u16 MapMatrix_MapData_GetData(struct MapData *map_data, s32 x, s32 y); + +u16 GetMapHeader(u32 file_id, u16 x, u16 y); +u16 GetMapData(s32 map_id, struct MapMatrix *map_matrix); +void FUN_02034678(struct MapMatrix *map_matrix); +void FUN_020346CC(struct MapMatrix *map_matrix); + +#endif // POKEDIAMOND_MAP_MATRIX_H |