diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-19 10:06:32 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-19 10:06:32 -0400 |
commit | d57baf0c2231303622ade07a3ea1df2d795fd73c (patch) | |
tree | 6b3c7955fd307833da1c70d3479281736aeaf3dd | |
parent | cc273a871dcecc74163cd3b8cd8d01ff34dc26f2 (diff) |
nutdata.c
-rw-r--r-- | arm9/arm9.lcf | 2 | ||||
-rw-r--r-- | arm9/asm/scrcmd_4.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_020250A4.s | 12 | ||||
-rw-r--r-- | arm9/asm/unk_02060CCC.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_02085258.s | 146 | ||||
-rw-r--r-- | arm9/global.inc | 16 | ||||
-rw-r--r-- | arm9/modules/68/asm/module_68.s | 36 | ||||
-rw-r--r-- | arm9/modules/73/asm/module_73.s | 6 | ||||
-rw-r--r-- | arm9/src/nutdata.c | 78 | ||||
-rw-r--r-- | include/constants/items.h | 2 | ||||
-rw-r--r-- | include/itemtool.h | 24 | ||||
-rw-r--r-- | include/msg_data.h | 20 |
12 files changed, 162 insertions, 184 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 5612df2a..8150b54e 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -400,7 +400,7 @@ SECTIONS { unk_020842D0.o (.text) unk_020842DC.o (.text) unk_020851B8.o (.text) - unk_02085258.o (.text) + nutdata.o (.text) unk_02085338.o (.text) unk_020854E0.o (.text) unk_020859C0.o (.text) diff --git a/arm9/asm/scrcmd_4.s b/arm9/asm/scrcmd_4.s index 078e899f..f8ec8636 100644 --- a/arm9/asm/scrcmd_4.s +++ b/arm9/asm/scrcmd_4.s @@ -790,7 +790,7 @@ FUN_02040D04: ; 0x02040D04 lsl r0, r5, #0x10 lsr r0, r0, #0x10 mov r1, #0x20 - bl FUN_020852E8 + bl GetNutName add r5, r0, #0x0 cmp r4, #0x2 bhs _02040D5A diff --git a/arm9/asm/unk_020250A4.s b/arm9/asm/unk_020250A4.s index 8a0f16b8..76e0e8ce 100644 --- a/arm9/asm/unk_020250A4.s +++ b/arm9/asm/unk_020250A4.s @@ -78,7 +78,7 @@ FUN_02025128: ; 0x02025128 push {r3-r7, lr} sub sp, #0x8 add r7, r0, #0x0 - bl FUN_02085258 + bl OpenNutsDataNarc str r0, [sp, #0x0] add r0, r7, #0x0 mov r1, #0xc0 @@ -90,18 +90,18 @@ _02025142: ldr r0, [sp, #0x0] add r1, r6, #0x0 add r2, r7, #0x0 - bl FUN_02085264 + bl ReadNutDataFromNarc add r4, r0, #0x0 mov r1, #0x3 - bl FUN_02085290 + bl GetNutAttr strb r0, [r5, #0x0] add r0, r4, #0x0 mov r1, #0x4 - bl FUN_02085290 + bl GetNutAttr strb r0, [r5, #0x1] add r0, r4, #0x0 mov r1, #0x2 - bl FUN_02085290 + bl GetNutAttr strb r0, [r5, #0x2] add r0, r4, #0x0 bl FreeToHeap @@ -110,7 +110,7 @@ _02025142: cmp r6, #0x40 blt _02025142 ldr r0, [sp, #0x0] - bl FUN_0208526C + bl CloseNutsDataNarc ldr r0, [sp, #0x4] add sp, #0x8 pop {r3-r7, pc} diff --git a/arm9/asm/unk_02060CCC.s b/arm9/asm/unk_02060CCC.s index 67728262..15021367 100644 --- a/arm9/asm/unk_02060CCC.s +++ b/arm9/asm/unk_02060CCC.s @@ -1535,7 +1535,7 @@ FUN_02061750: ; 0x02061750 sub r0, #0x95 lsl r0, r0, #0x10 lsr r0, r0, #0x10 - bl FUN_020852E8 + bl GetNutName add r4, r0, #0x0 mov r1, #0x1 str r1, [sp, #0x0] diff --git a/arm9/asm/unk_02085258.s b/arm9/asm/unk_02085258.s deleted file mode 100644 index ba69aea4..00000000 --- a/arm9/asm/unk_02085258.s +++ /dev/null @@ -1,146 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02085258 -FUN_02085258: ; 0x02085258 - ldr r3, _02085260 ; =NARC_ctor - add r1, r0, #0x0 - mov r0, #0x44 - bx r3 - .balign 4 -_02085260: .word NARC_ctor - - thumb_func_start FUN_02085264 -FUN_02085264: ; 0x02085264 - ldr r3, _02085268 ; =NARC_AllocAndReadWholeMember - bx r3 - .balign 4 -_02085268: .word NARC_AllocAndReadWholeMember - - thumb_func_start FUN_0208526C -FUN_0208526C: ; 0x0208526C - ldr r3, _02085270 ; =NARC_dtor - bx r3 - .balign 4 -_02085270: .word NARC_dtor - - thumb_func_start FUN_02085274 -FUN_02085274: ; 0x02085274 - add r3, r0, #0x0 - add r2, r1, #0x0 - add r1, r3, #0x0 - ldr r3, _02085280 ; =AllocAndReadWholeNarcMemberByIdPair - mov r0, #0x44 - bx r3 - .balign 4 -_02085280: .word AllocAndReadWholeNarcMemberByIdPair - - thumb_func_start FUN_02085284 -FUN_02085284: ; 0x02085284 - ldr r3, _0208528C ; =FUN_02085274 - sub r0, #0x95 - bx r3 - nop -_0208528C: .word FUN_02085274 - - thumb_func_start FUN_02085290 -FUN_02085290: ; 0x02085290 - cmp r1, #0xa - bhi _020852E2 - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_020852A0: ; jump table (using 16-bit offset) - .short _020852B6 - _020852A0 - 2; case 0 - .short _020852BA - _020852A0 - 2; case 1 - .short _020852BE - _020852A0 - 2; case 2 - .short _020852C2 - _020852A0 - 2; case 3 - .short _020852C6 - _020852A0 - 2; case 4 - .short _020852CA - _020852A0 - 2; case 5 - .short _020852CE - _020852A0 - 2; case 6 - .short _020852D2 - _020852A0 - 2; case 7 - .short _020852D6 - _020852A0 - 2; case 8 - .short _020852DA - _020852A0 - 2; case 9 - .short _020852DE - _020852A0 - 2; case 10 -_020852B6: - ldrh r0, [r0, #0x0] - bx lr -_020852BA: - ldrb r0, [r0, #0x2] - bx lr -_020852BE: - ldrb r0, [r0, #0x3] - bx lr -_020852C2: - ldrb r0, [r0, #0x4] - bx lr -_020852C6: - ldrb r0, [r0, #0x5] - bx lr -_020852CA: - ldrb r0, [r0, #0x6] - bx lr -_020852CE: - ldrb r0, [r0, #0x7] - bx lr -_020852D2: - ldrb r0, [r0, #0x8] - bx lr -_020852D6: - ldrb r0, [r0, #0x9] - bx lr -_020852DA: - ldrb r0, [r0, #0xa] - bx lr -_020852DE: - ldrb r0, [r0, #0xb] - bx lr -_020852E2: - mov r0, #0x0 - bx lr - .balign 4 - - thumb_func_start FUN_020852E8 -FUN_020852E8: ; 0x020852E8 - push {r3-r5, lr} - ldr r2, _0208530C ; =0x00000175 - add r4, r0, #0x0 - add r3, r1, #0x0 - mov r0, #0x1 - mov r1, #0x1a - bl NewMsgDataFromNarc - add r5, r0, #0x0 - add r1, r4, #0x0 - bl FUN_0200A914 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl DestroyMsgData - add r0, r4, #0x0 - pop {r3-r5, pc} - .balign 4 -_0208530C: .word 0x00000175 - - thumb_func_start FUN_02085310 -FUN_02085310: ; 0x02085310 - push {r3-r5, lr} - mov r2, #0x5d - add r4, r0, #0x0 - add r3, r1, #0x0 - mov r0, #0x1 - mov r1, #0x1a - lsl r2, r2, #0x2 - bl NewMsgDataFromNarc - add r5, r0, #0x0 - add r1, r4, #0x0 - bl FUN_0200A914 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl DestroyMsgData - add r0, r4, #0x0 - pop {r3-r5, pc} - .balign 4 diff --git a/arm9/global.inc b/arm9/global.inc index 810a8074..91b0ca46 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5282,14 +5282,14 @@ .extern FUN_020851F8 .extern FUN_02085224 .extern FUN_0208524C -.extern FUN_02085258 -.extern FUN_02085264 -.extern FUN_0208526C -.extern FUN_02085274 -.extern FUN_02085284 -.extern FUN_02085290 -.extern FUN_020852E8 -.extern FUN_02085310 +.extern OpenNutsDataNarc +.extern ReadNutDataFromNarc +.extern CloseNutsDataNarc +.extern LoadNutDataSingle +.extern LoadNutDataSingleByItemId +.extern GetNutAttr +.extern GetNutName +.extern GetNutDesc .extern FUN_02085338 .extern FUN_020853A8 .extern FUN_020853B0 diff --git a/arm9/modules/68/asm/module_68.s b/arm9/modules/68/asm/module_68.s index 08507c53..fb926299 100644 --- a/arm9/modules/68/asm/module_68.s +++ b/arm9/modules/68/asm/module_68.s @@ -56,7 +56,7 @@ MOD68_021D74E0: ; 0x021D74E0 ldr r0, [r5, r0] mov r1, #0x24 ldrb r0, [r0, #8] - bl FUN_02085274 + bl LoadNutDataSingle mov r1, #0x7f lsl r1, r1, #2 str r0, [r5, r1] @@ -720,7 +720,7 @@ MOD68_021D7A18: ; 0x021D7A18 ldr r0, [r5, r0] mov r1, #0x24 ldrb r0, [r0, #8] - bl FUN_020852E8 + bl GetNutName add r5, r0, #0 mov r1, #0 str r1, [sp] @@ -758,7 +758,7 @@ MOD68_021D7AE4: ; 0x021D7AE4 ldr r0, [r4, r0] mov r1, #0x24 ldrb r0, [r0, #8] - bl FUN_02085310 + bl GetNutDesc mov r1, #0 add r4, r0, #0 str r1, [sp] @@ -831,7 +831,7 @@ MOD68_021D7B80: ; 0x021D7B80 lsl r0, r0, #2 ldr r0, [r4, r0] mov r1, #1 - bl FUN_02085290 + bl GetNutAttr add r1, r0, #0 beq _021D7BA4 sub r1, r1, #1 @@ -912,7 +912,7 @@ MOD68_021D7C28: ; 0x021D7C28 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #0 - bl FUN_02085290 + bl GetNutAttr mov r1, #0xfa lsl r1, r1, #2 mul r1, r0 @@ -1381,7 +1381,7 @@ MOD68_021D7F98: ; 0x021D7F98 ldr r0, [r4, r0] mov r1, #0x24 ldrb r0, [r0, #8] - bl FUN_02085274 + bl LoadNutDataSingle mov r1, #0x7f lsl r1, r1, #2 str r0, [r4, r1] @@ -2159,7 +2159,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #5 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 mov r1, #0x65 lsl r1, r1, #2 @@ -2172,7 +2172,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #6 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 ldr r1, _021D8860 ; =0x0000019A lsl r2, r2, #0x18 @@ -2184,7 +2184,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #7 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 ldr r1, _021D8868 ; =0x000001A6 lsl r2, r2, #0x18 @@ -2202,7 +2202,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #9 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 mov r1, #0x6b lsl r1, r1, #2 @@ -2215,7 +2215,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #5 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 ldr r1, _021D8878 ; =0x000001B2 lsl r2, r2, #0x18 @@ -2232,7 +2232,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #8 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 mov r1, #0x6e lsl r1, r1, #2 @@ -2245,7 +2245,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #9 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 mov r1, #0x71 lsl r1, r1, #2 @@ -2263,7 +2263,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #7 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 ldr r1, _021D8898 ; =0x000001D6 lsl r2, r2, #0x18 @@ -2275,7 +2275,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #8 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 mov r1, #0x1d lsl r1, r1, #4 @@ -2294,7 +2294,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #6 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 ldr r1, _021D88A8 ; =0x000001E2 lsl r2, r2, #0x18 @@ -2306,7 +2306,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #7 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 ldr r1, _021D88B0 ; =0x000001EE lsl r2, r2, #0x18 @@ -2318,7 +2318,7 @@ MOD68_021D85F4: ; 0x021D85F4 lsl r0, r0, #2 ldr r0, [r5, r0] mov r1, #8 - bl FUN_02085290 + bl GetNutAttr add r2, r0, #0 mov r1, #0x7a lsl r1, r1, #2 diff --git a/arm9/modules/73/asm/module_73.s b/arm9/modules/73/asm/module_73.s index 2ea96e13..030457b3 100644 --- a/arm9/modules/73/asm/module_73.s +++ b/arm9/modules/73/asm/module_73.s @@ -9161,7 +9161,7 @@ _021DBA56: lsl r4, r0, #2 ldr r0, [sp, #0x24] ldr r0, [r0, r4] - bl FUN_02085284 + bl LoadNutDataSingleByItemId mov r3, #0 add r7, r0, #0 add r2, r3, #0 @@ -9196,7 +9196,7 @@ _021DBAA0: _021DBAA4: add r0, r7, #0 add r1, r5, #5 - bl FUN_02085290 + bl GetNutAttr ldr r1, [r4] add r5, r5, #1 add r0, r1, r0 @@ -9205,7 +9205,7 @@ _021DBAA4: blt _021DBAA4 add r0, r7, #0 mov r1, #0xa - bl FUN_02085290 + bl GetNutAttr ldr r1, [sp, #0x20] add r0, r1, r0 str r0, [sp, #0x20] diff --git a/arm9/src/nutdata.c b/arm9/src/nutdata.c new file mode 100644 index 00000000..09542052 --- /dev/null +++ b/arm9/src/nutdata.c @@ -0,0 +1,78 @@ +#include "global.h" +#include "filesystem.h" +#include "itemtool.h" +#include "msg_data.h" + +#pragma thumb on + +NARC * OpenNutsDataNarc(u32 heap_id) +{ + return NARC_ctor(NARC_ITEMTOOL_ITEMDATA_NUTS_DATA, heap_id); +} + +struct NutData * ReadNutDataFromNarc(NARC * narc, u32 berry_idx, u32 heap_id) +{ + return NARC_AllocAndReadWholeMember(narc, berry_idx, heap_id); +} + +void CloseNutsDataNarc(NARC * narc) +{ + NARC_dtor(narc); +} + +struct NutData * LoadNutDataSingle(u32 berry_idx, u32 heap_id) +{ + return AllocAndReadWholeNarcMemberByIdPair(NARC_ITEMTOOL_ITEMDATA_NUTS_DATA, berry_idx, heap_id); +} + +struct NutData * LoadNutDataSingleByItemId(u32 item_id, u32 heap_id) +{ + return LoadNutDataSingle(item_id - FIRST_BERRY_IDX, heap_id); +} + +u32 GetNutAttr(struct NutData * nut, u32 attr) +{ + switch (attr) + { + case 0: + return nut->unk0; + case 1: + return nut->unk2; + case 2: + return nut->unk3; + case 3: + return nut->unk4; + case 4: + return nut->unk5; + case 5: + return nut->unk6; + case 6: + return nut->unk7; + case 7: + return nut->unk8; + case 8: + return nut->unk9; + case 9: + return nut->unkA; + case 10: + return nut->unkB; + default: + return 0; + } +} + +u16 * GetNutName(u32 berry_idx, u32 heap_id) +{ + struct MsgData * msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 373, heap_id); + u16 * ret = FUN_0200A914(msgData, berry_idx); + DestroyMsgData(msgData); + return ret; +} + +u16 * GetNutDesc(u32 berry_idx, u32 heap_id) +{ + struct MsgData * msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 372, heap_id); + u16 * ret = FUN_0200A914(msgData, berry_idx); + DestroyMsgData(msgData); + return ret; +} diff --git a/include/constants/items.h b/include/constants/items.h index 433532a4..a7fcc32f 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -128,7 +128,9 @@ #define ITEM_AIR_MAIL 146 #define ITEM_MOSAIC_MAIL 147 #define ITEM_BRICK_MAIL 148 + #define ITEM_CHERI_BERRY 149 +#define FIRST_BERRY_IDX ITEM_CHERI_BERRY #define ITEM_CHESTO_BERRY 150 #define ITEM_PECHA_BERRY 151 #define ITEM_RAWST_BERRY 152 diff --git a/include/itemtool.h b/include/itemtool.h new file mode 100644 index 00000000..525e68f9 --- /dev/null +++ b/include/itemtool.h @@ -0,0 +1,24 @@ +#ifndef POKEDIAMOND_ITEMTOOL_H +#define POKEDIAMOND_ITEMTOOL_H + +#include "global.h" +#include "constants/items.h" + +// Berries (nutdata) + +struct NutData +{ + u16 unk0; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; +}; + +#endif //POKEDIAMOND_ITEMTOOL_H diff --git a/include/msg_data.h b/include/msg_data.h new file mode 100644 index 00000000..debacc79 --- /dev/null +++ b/include/msg_data.h @@ -0,0 +1,20 @@ +#ifndef POKEDIAMOND_MSG_DATA_H +#define POKEDIAMOND_MSG_DATA_H + +struct MsgData +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; + union { + u16 * raw; + NARC * narc; + } data; +}; + +struct MsgData * NewMsgDataFromNarc(u32 type, u32 narcId, u32 msgId, u32 heapno); +u16 * FUN_0200A914(struct MsgData *, u32); +void DestroyMsgData(struct MsgData *); + +#endif //POKEDIAMOND_MSG_DATA_H |