summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-06-19 10:06:32 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-06-19 10:06:32 -0400
commitd57baf0c2231303622ade07a3ea1df2d795fd73c (patch)
tree6b3c7955fd307833da1c70d3479281736aeaf3dd
parentcc273a871dcecc74163cd3b8cd8d01ff34dc26f2 (diff)
nutdata.c
-rw-r--r--arm9/arm9.lcf2
-rw-r--r--arm9/asm/scrcmd_4.s2
-rw-r--r--arm9/asm/unk_020250A4.s12
-rw-r--r--arm9/asm/unk_02060CCC.s2
-rw-r--r--arm9/asm/unk_02085258.s146
-rw-r--r--arm9/global.inc16
-rw-r--r--arm9/modules/68/asm/module_68.s36
-rw-r--r--arm9/modules/73/asm/module_73.s6
-rw-r--r--arm9/src/nutdata.c78
-rw-r--r--include/constants/items.h2
-rw-r--r--include/itemtool.h24
-rw-r--r--include/msg_data.h20
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