summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira Akashi <rubenru09@aol.com>2021-07-05 17:50:58 +0100
committerGitHub <noreply@github.com>2021-07-05 17:50:58 +0100
commit7a2362a15aade4fde583b6612cff3d6613a5eaa4 (patch)
treeb4d547f092ec9fedf15c2e2a4fb0be4e55b438e5
parent97efa5f28e697c85d0a47c45f04b0b69dbf699b0 (diff)
parent042e8e5a558d3fb9470234f1ffdfa42d3556d5d3 (diff)
Merge pull request #423 from Gogume1er/map_matrix
decompile unk_020343A8 to map_matrix
-rw-r--r--arm9/arm9.lsf2
-rw-r--r--arm9/asm/unk_020343A8.s481
-rw-r--r--arm9/asm/unk_020372D4.s4
-rw-r--r--arm9/asm/unk_02048904.s2
-rw-r--r--arm9/asm/unk_0204A368.s6
-rw-r--r--arm9/asm/unk_0204A498.s8
-rw-r--r--arm9/asm/unk_0205DD18.s2
-rw-r--r--arm9/asm/unk_0205F7A0.s2
-rw-r--r--arm9/global.inc30
-rw-r--r--arm9/modules/05/asm/mod05_021D74E0.s2
-rw-r--r--arm9/modules/05/asm/module_05.s20
-rw-r--r--arm9/modules/06/asm/module_06.s10
-rw-r--r--arm9/modules/18/asm/module_18.s4
-rw-r--r--arm9/modules/66/asm/module_66.s8
-rw-r--r--arm9/src/map_matrix.c231
-rw-r--r--include/map_matrix.h54
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