summaryrefslogtreecommitdiff
path: root/arm9
diff options
context:
space:
mode:
Diffstat (limited to 'arm9')
-rw-r--r--arm9/asm/unk_020254B8.s246
-rw-r--r--arm9/lib/src/RTC_convert.c2
-rw-r--r--arm9/src/itemtool.c4
-rw-r--r--arm9/src/nutdata.c20
-rw-r--r--arm9/src/save_arrays.c3
-rw-r--r--arm9/src/unk_020254B8.c114
6 files changed, 128 insertions, 261 deletions
diff --git a/arm9/asm/unk_020254B8.s b/arm9/asm/unk_020254B8.s
deleted file mode 100644
index 1d7159d1..00000000
--- a/arm9/asm/unk_020254B8.s
+++ /dev/null
@@ -1,246 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_020254B8
-FUN_020254B8: ; 0x020254B8
- mov r0, #0x22
- lsl r0, r0, #0x6
- bx lr
- .balign 4
-
- thumb_func_start FUN_020254C0
-FUN_020254C0: ; 0x020254C0
- ldr r3, _020254C8 ; =SavArray_get
- mov r1, #0x9
- bx r3
- nop
-_020254C8: .word SavArray_get
-
- thumb_func_start FUN_020254CC
-FUN_020254CC: ; 0x020254CC
- push {r3-r7, lr}
- mov r4, #0x0
- ldr r6, _020254EC ; =0x0000FFFF
- add r5, r0, #0x0
- add r7, r4, #0x0
-_020254D6:
- add r0, r5, #0x0
- add r1, r7, #0x0
- mov r2, #0x88
- bl memset
- strh r6, [r5, #0x0]
- add r4, r4, #0x1
- add r5, #0x88
- cmp r4, #0x10
- blt _020254D6
- pop {r3-r7, pc}
- .balign 4
-_020254EC: .word 0x0000FFFF
-
- thumb_func_start FUN_020254F0
-FUN_020254F0: ; 0x020254F0
- mov r2, #0x88
- mul r2, r1
- add r0, r0, r2
- bx lr
-
- thumb_func_start FUN_020254F8
-FUN_020254F8: ; 0x020254F8
- add r0, r0, r1
- add r0, #0x68
- ldrb r0, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_02025500
-FUN_02025500: ; 0x02025500
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- bl StringNotEqual
- cmp r0, #0x0
- bne _0202551A
- ldr r1, [r5, #0x10]
- ldr r0, [r4, #0x10]
- cmp r1, r0
- bne _0202551A
- mov r0, #0x1
- pop {r3-r5, pc}
-_0202551A:
- mov r0, #0x0
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02025520
-FUN_02025520: ; 0x02025520
- push {r4-r7, lr}
- sub sp, #0x2c
- str r1, [sp, #0x4]
- mov r1, #0x22
- str r0, [sp, #0x0]
- add r0, r3, #0x0
- lsl r1, r1, #0x6
- str r2, [sp, #0x8]
- bl AllocFromHeap
- str r0, [sp, #0x10]
- bl FUN_020254CC
- mov r0, #0x0
- str r0, [sp, #0x14]
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- ble _02025578
- ldr r7, [sp, #0x4]
- add r6, sp, #0x18
-_02025548:
- mov r0, #0x0
- mvn r0, r0
- ldr r5, [sp, #0x0]
- str r0, [r6, #0x0]
- mov r4, #0x0
-_02025552:
- add r0, r5, #0x0
- add r1, r7, #0x0
- bl FUN_02025500
- cmp r0, #0x0
- beq _02025560
- str r4, [r6, #0x0]
-_02025560:
- add r4, r4, #0x1
- add r5, #0x88
- cmp r4, #0x10
- blt _02025552
- ldr r0, [sp, #0x14]
- add r6, r6, #0x4
- add r1, r0, #0x1
- ldr r0, [sp, #0x8]
- add r7, #0x88
- str r1, [sp, #0x14]
- cmp r1, r0
- blt _02025548
-_02025578:
- ldr r0, [sp, #0x8]
- mov r4, #0x0
- str r4, [sp, #0xc]
- cmp r0, #0x0
- ble _020255BE
- ldr r5, [sp, #0x10]
- add r6, sp, #0x18
-_02025586:
- ldr r3, [sp, #0x4]
- add r7, r5, #0x0
- mov r2, #0x11
-_0202558C:
- ldmia r3!, {r0-r1}
- stmia r7!, {r0-r1}
- sub r2, r2, #0x1
- bne _0202558C
- ldr r1, [r6, #0x0]
- cmp r1, #0x0
- blt _020255A6
- add r2, r1, #0x0
- mov r0, #0x88
- mul r2, r0
- ldr r1, _02025610 ; =0x0000FFFF
- ldr r0, [sp, #0x0]
- strh r1, [r0, r2]
-_020255A6:
- ldr r0, [sp, #0x4]
- add r5, #0x88
- add r0, #0x88
- str r0, [sp, #0x4]
- ldr r0, [sp, #0xc]
- add r4, r4, #0x1
- add r1, r0, #0x1
- ldr r0, [sp, #0x8]
- add r6, r6, #0x4
- str r1, [sp, #0xc]
- cmp r1, r0
- blt _02025586
-_020255BE:
- mov r0, #0x0
- mov r12, r0
- mov r0, #0x88
- add r1, r4, #0x0
- mul r1, r0
- ldr r0, [sp, #0x10]
- ldr r3, [sp, #0x0]
- add r5, r0, r1
-_020255CE:
- ldrh r1, [r3, #0x0]
- ldr r0, _02025610 ; =0x0000FFFF
- cmp r1, r0
- beq _020255EC
- add r6, r3, #0x0
- add r7, r5, #0x0
- mov r2, #0x11
-_020255DC:
- ldmia r6!, {r0-r1}
- stmia r7!, {r0-r1}
- sub r2, r2, #0x1
- bne _020255DC
- add r4, r4, #0x1
- add r5, #0x88
- cmp r4, #0x10
- bge _020255F8
-_020255EC:
- mov r0, r12
- add r0, r0, #0x1
- add r3, #0x88
- mov r12, r0
- cmp r0, #0x10
- blt _020255CE
-_020255F8:
- mov r2, #0x22
- ldr r0, [sp, #0x0]
- ldr r1, [sp, #0x10]
- lsl r2, r2, #0x6
- bl memcpy
- ldr r0, [sp, #0x10]
- bl FreeToHeap
- add sp, #0x2c
- pop {r4-r7, pc}
- nop
-_02025610: .word 0x0000FFFF
-
- thumb_func_start FUN_02025614
-FUN_02025614: ; 0x02025614
- push {r3-r6}
- mov r3, #0x0
- add r4, r0, #0x0
-_0202561A:
- ldr r2, [r4, #0x10]
- cmp r1, r2
- bne _02025626
- mov r0, #0x1
- pop {r3-r6}
- bx lr
-_02025626:
- add r3, r3, #0x1
- add r4, #0x88
- cmp r3, #0x10
- blt _0202561A
- mov r6, #0x0
- add r3, r6, #0x0
-_02025632:
- add r4, r3, #0x0
- add r5, r0, #0x0
-_02025636:
- ldr r2, [r5, #0x18]
- cmp r1, r2
- bne _02025642
- add r0, r6, #0x2
- pop {r3-r6}
- bx lr
-_02025642:
- add r4, r4, #0x1
- add r5, r5, #0x4
- cmp r4, #0x10
- blt _02025636
- add r6, r6, #0x1
- add r0, #0x88
- cmp r6, #0x10
- blt _02025632
- mov r0, #0x0
- pop {r3-r6}
- bx lr
diff --git a/arm9/lib/src/RTC_convert.c b/arm9/lib/src/RTC_convert.c
index af5574dc..3d0bb2ce 100644
--- a/arm9/lib/src/RTC_convert.c
+++ b/arm9/lib/src/RTC_convert.c
@@ -45,7 +45,7 @@ s32 RTC_ConvertDateToDay(const RTCDate * date)
s32 RTCi_ConvertTimeToSecond(const RTCTime * time)
{
- return (time->hour * 60 + time->minute) * 60 + time->second;
+ return (s32)((time->hour * 60 + time->minute) * 60 + time->second);
}
s64 RTC_ConvertDateTimeToSecond(const RTCDate * date, const RTCTime * time)
diff --git a/arm9/src/itemtool.c b/arm9/src/itemtool.c
index 75785ee8..6b892d6d 100644
--- a/arm9/src/itemtool.c
+++ b/arm9/src/itemtool.c
@@ -810,8 +810,8 @@ u32 GetItemAttr_PreloadedItemData(struct ItemData * itemData, u32 attr)
return itemData->unk6;
case ITEMATTR_NATURAL_GIFT_POWER:
return itemData->naturalGiftPower;
- case ITEMATTR_UNK8_0:
- return itemData->unk8_0;
+ case ITEMATTR_NATURAL_GIFT_TYPE:
+ return itemData->naturalGiftType;
case ITEMATTR_UNK8_B:
return itemData->unk8_B;
case ITEMATTR_PARTY_USE:
diff --git a/arm9/src/nutdata.c b/arm9/src/nutdata.c
index 27c600fa..2d51b2d3 100644
--- a/arm9/src/nutdata.c
+++ b/arm9/src/nutdata.c
@@ -36,27 +36,27 @@ u32 GetNutAttr(struct NutData * nut, u32 attr)
switch (attr)
{
case 0:
- return nut->unk0;
+ return nut->size;
case 1:
- return nut->unk2;
+ return nut->firmness;
case 2:
- return nut->unk3;
+ return nut->yieldCategory;
case 3:
- return nut->unk4;
+ return nut->stageDuration;
case 4:
return nut->unk5;
case 5:
- return nut->unk6;
+ return nut->spicy;
case 6:
- return nut->unk7;
+ return nut->dry;
case 7:
- return nut->unk8;
+ return nut->sweet;
case 8:
- return nut->unk9;
+ return nut->bitter;
case 9:
- return nut->unkA;
+ return nut->sour;
case 10:
- return nut->unkB;
+ return nut->smoothness;
default:
return 0;
}
diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c
index 96808ba6..bccdcc11 100644
--- a/arm9/src/save_arrays.c
+++ b/arm9/src/save_arrays.c
@@ -9,12 +9,12 @@
#include "poketch.h"
#include "hall_of_fame.h"
#include "unk_020286F8.h"
+#include "unk_020254B8.h"
#include "daycare.h"
extern u32 FUN_0202AC20(void);
extern u32 FUN_02034D7C(void);
extern u32 Sav2_Pokedex_sizeof(void);
-extern u32 FUN_020254B8(void);
extern u32 FUN_02024E64(void);
extern u32 FUN_02034D80(void);
extern u32 FUN_02025954(void);
@@ -41,7 +41,6 @@ extern u32 FUN_02013B28(void);
extern void FUN_0202AC28(void *);
extern void FUN_02034D98(void *);
extern void Sav2_Pokedex_init(void *);
-extern void FUN_020254CC(void *);
extern void FUN_02024E6C(void *);
extern void FUN_02034D88(void *);
extern void FUN_0202597C(void *);
diff --git a/arm9/src/unk_020254B8.c b/arm9/src/unk_020254B8.c
new file mode 100644
index 00000000..ed323965
--- /dev/null
+++ b/arm9/src/unk_020254B8.c
@@ -0,0 +1,114 @@
+#include "global.h"
+#include "string_util.h"
+#include "save_block_2.h"
+#include "heap.h"
+#include "unk_020254B8.h"
+
+#pragma thumb on
+
+u32 FUN_020254B8(void)
+{
+ return 16 * sizeof(struct UnkStruct_020254B8);
+}
+
+struct UnkStruct_020254B8 * FUN_020254C0(struct SaveBlock2 * sav2)
+{
+ return (struct UnkStruct_020254B8 *)SavArray_get(sav2, 9);
+}
+
+void FUN_020254CC(struct UnkStruct_020254B8 * arr)
+{
+ s32 i;
+
+ for (i = 0; i < 16; i++)
+ {
+ memset(&arr[i], 0, sizeof(struct UnkStruct_020254B8));
+ arr[i].field_00[0] = EOS;
+ }
+}
+
+u16 * FUN_020254F0(struct UnkStruct_020254B8 * arr, s32 i)
+{
+ return arr[i].field_00;
+}
+
+u8 FUN_020254F8(struct UnkStruct_020254B8 * unk, s32 i)
+{
+ return unk->field_68[i];
+}
+
+BOOL FUN_02025500(struct UnkStruct_020254B8 * a, struct UnkStruct_020254B8 * b)
+{
+ return !StringNotEqual(a->field_00, b->field_00) && a->field_10 == b->field_10;
+}
+
+void FUN_02025520(struct UnkStruct_020254B8 * sp0, struct UnkStruct_020254B8 * sp4, s32 n, u32 heap_id)
+{
+ s32 sp18[5];
+ s32 sp14;
+ struct UnkStruct_020254B8 * sp10;
+ s32 r12;
+ s32 spC;
+ s32 r4;
+ s32 r4_2;
+
+ // auto buffer = new UnkStruct_020254B8[16]
+ sp10 = AllocFromHeap(heap_id, 16 * sizeof(struct UnkStruct_020254B8));
+ FUN_020254CC(sp10);
+
+ // Look up each element of sp4 in sp0
+ for (sp14 = 0; sp14 < n; sp14++)
+ {
+ sp18[sp14] = -1;
+ for (r4_2 = 0; r4_2 < 16; r4_2++)
+ {
+ if (FUN_02025500(&sp0[r4_2], &sp4[sp14]))
+ sp18[sp14] = r4_2;
+ }
+ }
+
+ // Copy sp4 to buffer and mask matching entries in sp0
+ r4 = 0;
+ for (spC = 0; spC < n; spC++)
+ {
+ sp10[r4] = sp4[spC];
+ if (sp18[spC] >= 0)
+ sp0[sp18[spC]].field_00[0] = EOS;
+ r4++;
+ }
+
+ // Copy unmasked entries from sp0 to buffer
+ for (r12 = 0; r12 < 16; r12++)
+ {
+ if (sp0[r12].field_00[0] != EOS)
+ {
+ sp10[r4] = sp0[r12];
+ r4++;
+ if (r4 >= 16)
+ break;
+ }
+ }
+ // Copy buffer to sp0 and destroy buffer
+ memcpy(sp0, sp10, 16 * sizeof(struct UnkStruct_020254B8));
+ FreeToHeap(sp10);
+}
+
+s32 FUN_02025614(struct UnkStruct_020254B8 * a0, u32 a1)
+{
+ s32 i, j;
+
+ for (i = 0; i < 16; i++)
+ {
+ if (a1 == a0[i].field_10)
+ return 1;
+ }
+ for (i = 0; i < 16; i++)
+ {
+ for (j = 0; j < 16; j++)
+ {
+ if (a1 == a0[i].field_18[j])
+ return i + 2;
+ }
+ }
+ return 0;
+}