diff options
author | GliMusings <gcreative7@gmail.com> | 2021-07-05 12:59:36 -0500 |
---|---|---|
committer | GliMusings <gcreative7@gmail.com> | 2021-07-05 12:59:36 -0500 |
commit | 76f29d0a5078061da4cfc0ddef7c5d56d6a005e5 (patch) | |
tree | 8ef487fe3929cd7c73fe2be8b3c373e1a3104ad7 | |
parent | 6008ec050279c966454f1a3c1e067295b3d9c254 (diff) | |
parent | 53664729466e97abbe10c14fe735083b2d604add (diff) |
Merge branch 'master' of https://github.com/GliMusings/pokediamond
28 files changed, 442 insertions, 622 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_02035068.s b/arm9/asm/unk_02035068.s index f2ef44dc..94c65983 100644 --- a/arm9/asm/unk_02035068.s +++ b/arm9/asm/unk_02035068.s @@ -341,7 +341,7 @@ _0203529A: _020352AC: ldr r0, [r5, #0x1c] ldr r0, [r0, #0x0] - bl FUN_020349CC + bl MapHeader_MapIsAmitySquare cmp r0, #0x1 bne _020352BC mov r0, #0x6 @@ -2145,7 +2145,7 @@ _02036170: add r7, r0, #0x0 ldr r0, [r5, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034A04 + bl MapHeader_GetMapEvolutionMethod strh r0, [r7, #0x2] mov r0, #0x0 strb r0, [r7, #0x1] 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_020476CC.s b/arm9/asm/unk_020476CC.s index be2b4770..cfbae230 100644 --- a/arm9/asm/unk_020476CC.s +++ b/arm9/asm/unk_020476CC.s @@ -536,7 +536,7 @@ FUN_02047A78: ; 0x02047A78 str r0, [r5, r1] ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034A04 + bl MapHeader_GetMapEvolutionMethod mov r1, #0x59 lsl r1, r1, #0x2 str r0, [r5, r1] @@ -1161,7 +1161,7 @@ FUN_0204806C: ; 0x0204806C add r6, r0, #0x0 ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl MapHeader_GetField17_0 + bl MapHeader_GetBattleBg mov r1, #0x15 lsl r1, r1, #0x4 str r0, [r5, r1] diff --git a/arm9/asm/unk_02048904.s b/arm9/asm/unk_02048904.s index 597444e9..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 @@ -506,7 +506,7 @@ FUN_02048CDC: ; 0x02048CDC add r4, r0, #0x0 ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_020349E4 + bl MapHeader_MapIsPokemonCenterSecondFloor cmp r0, #0x0 beq _02048CFE ldr r1, [r4, #0x1c] @@ -860,7 +860,7 @@ FUN_02048FC8: ; 0x02048FC8 add r4, r0, #0x0 ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034998 + bl MapHeader_MapIsUnionRoom cmp r0, #0x0 bne _02049000 add r0, r4, #0x0 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_0205CE48.s b/arm9/asm/unk_0205CE48.s index ba92a404..ccff7b32 100644 --- a/arm9/asm/unk_0205CE48.s +++ b/arm9/asm/unk_0205CE48.s @@ -440,7 +440,7 @@ FUN_0205D170: ; 0x0205D170 pop {r3-r5, pc} _0205D184: ldr r0, [r5, #0x0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0x0 bne _0205D194 mov r0, #0x0 @@ -1178,7 +1178,7 @@ _0205D730: .word 0x000022F6 FUN_0205D734: ; 0x0205D734 push {r3, lr} ldr r0, [r0, #0x0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0x0 beq _0205D744 mov r0, #0x0 @@ -1595,7 +1595,7 @@ _0205DA8E: cmp r0, #0x1 bne _0205DAA6 ldr r0, [r4, #0x0] - bl MapHeader_GetField17_6 + bl MapHeader_IsEscapeRopeAllowed cmp r0, #0x1 bne _0205DAA6 mov r0, #0x0 @@ -1675,7 +1675,7 @@ _0205DB1A: pop {r3-r5, pc} _0205DB30: ldr r0, [r4, #0x0] - bl FUN_020349D8 + bl MapHeader_MapIsSpearPillar cmp r0, #0x0 beq _0205DB3E mov r0, #0x0 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 60706108..67b26aea 100644 --- a/arm9/asm/unk_0205F7A0.s +++ b/arm9/asm/unk_0205F7A0.s @@ -54,8 +54,8 @@ FUN_0205F7A0: ; 0x0205F7A0 ldr r0, [r0, #0x28] asr r1, r1, #0x5 asr r2, r2, #0x5 - bl FUN_0203451C - bl MapHeader_MapIsOnOverworldMatrix + bl MapMatrix_GetMapHeader + bl MapHeader_MapIsOnMainMatrix cmp r0, #0x0 beq _0205F806 str r4, [r5, #0x0] diff --git a/arm9/asm/unk_0206367C.s b/arm9/asm/unk_0206367C.s index b475c1e5..3a92648f 100644 --- a/arm9/asm/unk_0206367C.s +++ b/arm9/asm/unk_0206367C.s @@ -122,7 +122,7 @@ _0206377C: _02063786: ldr r0, [r5, #0x1c] ldr r0, [r0, #0x0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0x0 beq _020637A6 ldr r0, [r5, #0xc] diff --git a/arm9/asm/unk_02063948.s b/arm9/asm/unk_02063948.s index 1b2bc0a5..632e129d 100644 --- a/arm9/asm/unk_02063948.s +++ b/arm9/asm/unk_02063948.s @@ -1129,7 +1129,7 @@ _020641BE: cmp r0, #0x1 bne _020641D2 ldr r0, [r4, #0x0] - bl MapHeader_GetField17_6 + bl MapHeader_IsEscapeRopeAllowed cmp r0, #0x1 beq _020641D6 _020641D2: diff --git a/arm9/asm/unk_0207550C.s b/arm9/asm/unk_0207550C.s index ee3ba62f..0ad8aad2 100644 --- a/arm9/asm/unk_0207550C.s +++ b/arm9/asm/unk_0207550C.s @@ -2248,7 +2248,7 @@ _02076814: ldr r0, [r0, #0x1c] ldr r0, [r0, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034A04 + bl MapHeader_GetMapEvolutionMethod add r3, r0, #0x0 ldr r0, _02076878 ; =0x000005A4 lsl r3, r3, #0x10 diff --git a/arm9/global.inc b/arm9/global.inc index 284d26bf..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 @@ -2504,23 +2504,23 @@ .extern MapHeader_GetMapSec .extern MapHeader_GetWeatherType .extern MapHeader_GetCameraType -.extern MapHeader_GetField17_0 -.extern MapHeader_GetField17_6 +.extern MapHeader_GetBattleBg +.extern MapHeader_IsEscapeRopeAllowed .extern MapHeader_IsFlyAllowed .extern MapHeader_IsBikeAllowed .extern FUN_020348E4 -.extern MapHeader_MapIsOnOverworldMatrix +.extern MapHeader_MapIsOnMainMatrix .extern FUN_02034930 .extern FUN_02034944 .extern FUN_02034964 .extern FUN_02034984 -.extern FUN_02034998 -.extern FUN_020349AC -.extern FUN_020349B8 -.extern FUN_020349CC -.extern FUN_020349D8 -.extern FUN_020349E4 -.extern FUN_02034A04 +.extern MapHeader_MapIsUnionRoom +.extern MapHeader_MapIsMtCoronetFeebasRoom +.extern MapHeader_MapIsTrophyGarden +.extern MapHeader_MapIsAmitySquare +.extern MapHeader_MapIsSpearPillar +.extern MapHeader_MapIsPokemonCenterSecondFloor +.extern MapHeader_GetMapEvolutionMethod .extern FUN_02034A28 .extern FUN_02034A48 .extern FUN_02034A60 diff --git a/arm9/modules/05/asm/mod05_021D74E0.s b/arm9/modules/05/asm/mod05_021D74E0.s index 9cea7a32..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] @@ -542,7 +542,7 @@ MOD05_021D79B4: ; 0x021D79B4 add r5, r0, #0 ldr r0, [r5, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _021D79FE ldr r0, [r5, #0xc] diff --git a/arm9/modules/05/asm/mod05_021D80E8.s b/arm9/modules/05/asm/mod05_021D80E8.s index bda94277..7af8c0ec 100644 --- a/arm9/modules/05/asm/mod05_021D80E8.s +++ b/arm9/modules/05/asm/mod05_021D80E8.s @@ -2216,11 +2216,11 @@ MOD05_021D9290: ; 0x021D9290 beq _021D92DA ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #1 bne _021D931C ldr r0, [sp, #8] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 bne _021D931C ldr r0, [r4, #0x38] @@ -2246,11 +2246,11 @@ _021D92DA: beq _021D931C ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #1 bne _021D931C ldr r0, [sp, #8] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 bne _021D931C ldr r0, [r4, #0x38] 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 0701bc8c..5567f4d2 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -4775,7 +4775,7 @@ MOD06_0223B9A8: ; 0x0223B9A8 ldr r0, [r0] add r6, r2, #0 add r7, r3, #0 - bl FUN_020349B8 + bl MapHeader_MapIsTrophyGarden cmp r0, #0 beq _0223B9FC add r1, sp, #0 @@ -5248,7 +5248,7 @@ _0223BD8A: ldr r0, [sp, #8] ldr r0, [r0, #0x1c] ldr r0, [r0] - bl FUN_020349AC + bl MapHeader_MapIsMtCoronetFeebasRoom cmp r0, #0 beq _0223BDFC ldr r0, [sp, #8] @@ -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/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s index dbf02f8d..6e4f14c2 100644 --- a/arm9/modules/07/asm/module_07.s +++ b/arm9/modules/07/asm/module_07.s @@ -5037,7 +5037,7 @@ MOD07_02214720: ; 0x02214720 mov r0, #0x57 lsl r0, r0, #2 ldr r0, [r1, r0] - bl FUN_02034998 + bl MapHeader_MapIsUnionRoom cmp r0, #1 bne _0221479C mov r0, #1 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/42/asm/module_42.s b/arm9/modules/42/asm/module_42.s index 9e502906..3a2eb2e3 100644 --- a/arm9/modules/42/asm/module_42.s +++ b/arm9/modules/42/asm/module_42.s @@ -139,7 +139,7 @@ _02254932: add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _02254984 ldr r0, [r4, #0x1c] @@ -527,7 +527,7 @@ MOD42_02254C04: ; 0x02254C04 add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _02254C3C ldr r1, [r4, #0x1c] diff --git a/arm9/modules/43/asm/module_43.s b/arm9/modules/43/asm/module_43.s index 59f7e81d..cb9d4f4d 100644 --- a/arm9/modules/43/asm/module_43.s +++ b/arm9/modules/43/asm/module_43.s @@ -62,7 +62,7 @@ MOD43_0225489C: ; 0x0225489C add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _022548E0 ldr r0, [r4, #0x1c] @@ -395,7 +395,7 @@ MOD43_02254AF8: ; 0x02254AF8 add r7, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl MapHeader_MapIsOnOverworldMatrix + bl MapHeader_MapIsOnMainMatrix cmp r0, #0 beq _02254B36 ldr r1, [r4, #0x1c] 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_header.c b/arm9/src/map_header.c index 644a590b..49f8e986 100644 --- a/arm9/src/map_header.c +++ b/arm9/src/map_header.c @@ -1,39 +1,55 @@ #include "global.h" #include "map_header.h" #include "constants/map_sections.h" +#include "pokemon.h" #pragma thumb on // Static decls u32 MapNumberBoundsCheck(u32 mapno); -const u16 UNK_020EED54[] = { - 0x01A5, 0x01AD, 0x01B4, 0x01BC, 0x01C5, 0x01CC, 0x0007, 0x0025, - 0x0031, 0x01EF, 0x0046, 0x0066, 0x007C, 0x0087, 0x0098, 0x00A9, - 0x00AE, 0x00BE +static const u16 sPokemonCenterSecondFloorMaps[] = { + 421, + 429, + 436, + 444, + 453, + 460, + 7, + 37, + 49, + 495, + 70, + 102, + 124, + 135, + 152, + 169, + 174, + 190 }; -const u16 UNK_020EED78[] = { - 0x0181, 0x001A, - 0x00CB, 0x0019, - 0x00CF, 0x0018, - 0x00D0, 0x0018, - 0x00D1, 0x0018, - 0x00D2, 0x0018, - 0x00D3, 0x0018, - 0x00D4, 0x0018, - 0x00D5, 0x0018, - 0x00D6, 0x0018, - 0x00D7, 0x0018, - 0x00D8, 0x0018, - 0x00D9, 0x0018, - 0x00DA, 0x0018, - 0x00DB, 0x0018, - 0x00DC, 0x0018, - 0x00DD, 0x0018, +static const u16 sMapEvolutionMethods[] = { + 385, EVO_ROUTE217, + 203, EVO_ETERNA, + 207, EVO_CORONET, + 208, EVO_CORONET, + 209, EVO_CORONET, + 210, EVO_CORONET, + 211, EVO_CORONET, + 212, EVO_CORONET, + 213, EVO_CORONET, + 214, EVO_CORONET, + 215, EVO_CORONET, + 216, EVO_CORONET, + 217, EVO_CORONET, + 218, EVO_CORONET, + 219, EVO_CORONET, + 220, EVO_CORONET, + 221, EVO_CORONET, }; -const struct MapHeader sMapHeaders[] = { +static const struct MapHeader sMapHeaders[] = { { 0x0, 0x0, 0x0, 0x170, 0x33b, 0x12, 0x3e8, 0x3e8, 0xffff, 0x0, MAPSEC_MYSTERY_ZONE, 0x0, 0x0, 0x2, 3, TRUE, TRUE, TRUE, FALSE }, { 0x0, 0x0, 0x0, 0x170, 0x33b, 0x12, 0x3e8, 0x3e8, 0xffff, 0x0, MAPSEC_MYSTERY_ZONE, 0x0, 0x0, 0x0, 3, FALSE, FALSE, FALSE, FALSE }, { 0x2, 0x2, 0x2, 0x413, 0x3ca, 0x236, 0x424, 0x424, 0xffff, 0x1, MAPSEC_MYSTERY_ZONE, 0x0, 0x0, 0x6, 3, FALSE, FALSE, FALSE, FALSE }, @@ -694,16 +710,16 @@ u8 MapHeader_GetCameraType(u32 mapno) return sMapHeaders[mapno].camera_type; } -u8 MapHeader_GetField17_0(u32 mapno) +u8 MapHeader_GetBattleBg(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk17_0; + return sMapHeaders[mapno].battle_bg; } -u8 MapHeader_GetField17_6(u32 mapno) +u8 MapHeader_IsEscapeRopeAllowed(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk17_6; + return sMapHeaders[mapno].is_escape_rope_allowed; } u8 MapHeader_IsFlyAllowed(u32 mapno) @@ -733,7 +749,7 @@ BOOL FUN_020348E4(u32 mapno) return FALSE; } -BOOL MapHeader_MapIsOnOverworldMatrix(u32 mapno) +BOOL MapHeader_MapIsOnMainMatrix(u32 mapno) { return MapHeader_GetMatrixId(mapno) == 0; } @@ -760,56 +776,56 @@ BOOL FUN_02034964(u32 mapno) BOOL FUN_02034984(u32 mapno) { - return !!FUN_0203491C(mapno); + return FUN_0203491C(mapno) != FALSE; } -BOOL FUN_02034998(u32 mapno) +BOOL MapHeader_MapIsUnionRoom(u32 mapno) { return mapno == 466; } -BOOL FUN_020349AC(u32 mapno) +BOOL MapHeader_MapIsMtCoronetFeebasRoom(u32 mapno) { return mapno == 219; } -BOOL FUN_020349B8(u32 mapno) +BOOL MapHeader_MapIsTrophyGarden(u32 mapno) { return mapno == 287; } -BOOL FUN_020349CC(u32 mapno) +BOOL MapHeader_MapIsAmitySquare(u32 mapno) { return mapno == 253; } -BOOL FUN_020349D8(u32 mapno) +BOOL MapHeader_MapIsSpearPillar(u32 mapno) { return mapno == 220; } -BOOL FUN_020349E4(u16 a0) +BOOL MapHeader_MapIsPokemonCenterSecondFloor(u32 mapno) { int i; - for (i = 0; i < NELEMS(UNK_020EED54); i++) + for (i = 0; i < NELEMS(sPokemonCenterSecondFloorMaps); i++) { - if (a0 == UNK_020EED54[i]) + if (mapno == sPokemonCenterSecondFloorMaps[i]) return TRUE; } return FALSE; } -u16 FUN_02034A04(u16 a0) +u16 MapHeader_GetMapEvolutionMethod(u32 mapno) { int i; - for (i = 0; i < NELEMS(UNK_020EED78); i += 2) + for (i = 0; i < NELEMS(sMapEvolutionMethods); i += 2) { - if (a0 == UNK_020EED78[i + 0]) - return UNK_020EED78[i + 1]; + if (mapno == sMapEvolutionMethods[i + 0]) + return sMapEvolutionMethods[i + 1]; } - return 0; + return EVO_NONE; } 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_header.h b/include/map_header.h index 20677025..60c8baaf 100644 --- a/include/map_header.h +++ b/include/map_header.h @@ -17,10 +17,10 @@ struct MapHeader u8 weather_type; u8 camera_type; u8 unk16; - u8 unk17_0:4; + u8 battle_bg:4; u8 is_bike_allowed:1; - u8 unk17_5:1; - u8 unk17_6:1; + u8 is_running_allowed:1; // unused + u8 is_escape_rope_allowed:1; u8 is_fly_allowed:1; }; @@ -38,24 +38,24 @@ u16 MapHeader_GetEventsBank(u32 mapno); u16 MapHeader_GetMapSec(u32 mapno); u8 MapHeader_GetWeatherType(u32 mapno); u8 MapHeader_GetCameraType(u32 mapno); -u8 MapHeader_GetField17_0(u32 mapno); -u8 MapHeader_GetField17_6(u32 mapno); +u8 MapHeader_GetBattleBg(u32 mapno); +u8 MapHeader_IsEscapeRopeAllowed(u32 mapno); u8 MapHeader_IsFlyAllowed(u32 mapno); u8 MapHeader_IsBikeAllowed(u32 mapno); u8 MapHeader_GetField16(u32 mapno); BOOL FUN_020348E4(u32 mapno); -BOOL MapHeader_MapIsOnOverworldMatrix(u32 mapno); +BOOL MapHeader_MapIsOnMainMatrix(u32 mapno); BOOL FUN_0203491C(u32 mapno); BOOL FUN_02034930(u32 mapno); BOOL FUN_02034944(u32 mapno); BOOL FUN_02034964(u32 mapno); BOOL FUN_02034984(u32 mapno); -BOOL FUN_02034998(u32 mapno); -BOOL FUN_020349AC(u32 mapno); -BOOL FUN_020349B8(u32 mapno); -BOOL FUN_020349CC(u32 mapno); -BOOL FUN_020349D8(u32 mapno); -BOOL FUN_020349E4(u16 a0); -u16 FUN_02034A04(u16 a0); +BOOL MapHeader_MapIsUnionRoom(u32 mapno); +BOOL MapHeader_MapIsMtCoronetFeebasRoom(u32 mapno); +BOOL MapHeader_MapIsTrophyGarden(u32 mapno); +BOOL MapHeader_MapIsAmitySquare(u32 mapno); +BOOL MapHeader_MapIsSpearPillar(u32 mapno); +BOOL MapHeader_MapIsPokemonCenterSecondFloor(u32 mapno); +u16 MapHeader_GetMapEvolutionMethod(u32 mapno); #endif //POKEDIAMOND_MAP_HEADER_H 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 |