mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-11 10:35:55 -05:00
Match sub_803D4D0 and sub_8091E94
This commit is contained in:
@@ -148,8 +148,8 @@ typedef struct FloorProperties
|
||||
|
||||
typedef struct UnkDungeonGlobal_unk1C590
|
||||
{
|
||||
s16 unk0[NUM_ITEM_CATEGORIES];
|
||||
s16 unk18[NUMBER_OF_ITEM_IDS];
|
||||
s16 categoryValues[NUM_ITEM_CATEGORIES];
|
||||
s16 itemValues[NUMBER_OF_ITEM_IDS];
|
||||
} UnkDungeonGlobal_unk1C590;
|
||||
|
||||
typedef struct UnkDungeonGlobal_unk1CD98
|
||||
|
||||
@@ -72,11 +72,9 @@ s32 sub_803DC6C(u32 chr, s32 strWidth, s32 a2);
|
||||
struct UnkStruct_sub_803DC6C *sub_803DEC8(s32 chr);
|
||||
void sub_803DD30(u8 *a0, u32 *a1);
|
||||
|
||||
// TODO https://decomp.me/scratch/nXUH3
|
||||
/*
|
||||
void sub_803D4D0(void)
|
||||
{
|
||||
u16 spArray[252];
|
||||
s16 spArray[NUM_ITEM_CATEGORIES + NUMBER_OF_ITEM_IDS];
|
||||
s32 i, j, k;
|
||||
OpenedFile *file;
|
||||
struct UnkDungeonFileData *strPtr;
|
||||
@@ -87,19 +85,18 @@ void sub_803D4D0(void)
|
||||
|
||||
gDungeon->unk1C570 = gDungeon->unk644.dungeonLocation2;
|
||||
file = OpenFileAndGetFileDataPtr(gUnknown_80F4D8C, &gDungeonFileArchive);
|
||||
|
||||
strPtr = &file->data.dungData->unk0[gDungeon->unk1C570.id][gDungeon->unk1C570.floor];
|
||||
strPtr = &((struct UnkDataFileStruct *)(file->data))->unk0[gDungeon->unk1C570.id][gDungeon->unk1C570.floor];
|
||||
|
||||
gDungeon->unk1CEC8 = GetDungeonFloorCount(gDungeon->unk644.dungeonLocation.id);
|
||||
gDungeon->unk14 = sub_80902C8(gDungeon->unk644.dungeonLocation.id);
|
||||
|
||||
gDungeon->unk1C574 = file->data.dungData->unk4[strPtr->unk0];
|
||||
gDungeon->unk1C574 = ((struct UnkDataFileStruct *)(file->data))->unk4[strPtr->unk0];
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
gDungeon->unk1CD70[i] = file->data.dungData->unk10[strPtr->unk4][i];
|
||||
gDungeon->unk1CD70[i] = ((struct UnkDataFileStruct *)(file->data))->unk10[strPtr->unk4][i];
|
||||
}
|
||||
for (i = 0; i < 31; i++) {
|
||||
gDungeon->unk1CD98[i] = file->data.dungData->unkC[strPtr->unk2][i];
|
||||
gDungeon->unk1CD98[i] = ((struct UnkDataFileStruct *)(file->data))->unkC[strPtr->unk2][i];
|
||||
if (ExtractSpeciesIndex(&gDungeon->unk1CD98[i]) == 0)
|
||||
break;
|
||||
}
|
||||
@@ -110,311 +107,36 @@ void sub_803D4D0(void)
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
u16 *src = file->data.dungData->unk8[strPtr->unk6[i]];
|
||||
u16 *src = ((struct UnkDataFileStruct *)(file->data))->unk8[strPtr->unk6[i]];
|
||||
s32 arrId = 0;
|
||||
|
||||
for (j = 0; j < 252; src++) {
|
||||
if (*src > 29999) {
|
||||
for (k = *src - 30000; k != 0; k--) {
|
||||
for (j = 0; j < NUM_ITEM_CATEGORIES + NUMBER_OF_ITEM_IDS; ) {
|
||||
if (src[arrId] >= 30000) {
|
||||
for (k = src[arrId] - 30000; k != 0; k--) {
|
||||
spArray[j++] = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
spArray[j++] = *src;
|
||||
spArray[j++] = src[arrId];
|
||||
}
|
||||
arrId++;
|
||||
}
|
||||
|
||||
for (j = 0; j < 12; j++) {
|
||||
gDungeon->unk1C590[i].unk0[j] = spArray[j];
|
||||
arrId = 0;
|
||||
for (j = 0; j < NUM_ITEM_CATEGORIES; j++) {
|
||||
gDungeon->unk1C590[i].categoryValues[arrId] = spArray[arrId];
|
||||
arrId++;
|
||||
}
|
||||
|
||||
for (j = 0; j < 240; j++) {
|
||||
gDungeon->unk1C590[i].unk18[j] = spArray[12 + j];
|
||||
for (j = 0; j < NUMBER_OF_ITEM_IDS; j++) {
|
||||
gDungeon->unk1C590[i].itemValues[j] = spArray[arrId];
|
||||
arrId++;
|
||||
}
|
||||
}
|
||||
|
||||
CloseFile(file);
|
||||
}
|
||||
|
||||
*/
|
||||
//
|
||||
|
||||
NAKED void sub_803D4D0(void)
|
||||
{
|
||||
asm_unified(" .text\n"
|
||||
" push {r4-r7,lr}\n"
|
||||
" mov r7, r10\n"
|
||||
" mov r6, r9\n"
|
||||
" mov r5, r8\n"
|
||||
" push {r5-r7}\n"
|
||||
" sub sp, 0x1FC\n"
|
||||
" ldr r6, _0803D654\n"
|
||||
" ldr r1, [r6]\n"
|
||||
" movs r4, 0xC9\n"
|
||||
" lsls r4, 3\n"
|
||||
" adds r0, r1, r4\n"
|
||||
" ldr r2, _0803D658\n"
|
||||
" adds r1, r2\n"
|
||||
" bl sub_80901D8\n"
|
||||
" ldr r0, [r6]\n"
|
||||
" ldr r3, _0803D65C\n"
|
||||
" adds r2, r0, r3\n"
|
||||
" adds r1, r0, r4\n"
|
||||
" ldrh r0, [r2]\n"
|
||||
" ldrh r4, [r1]\n"
|
||||
" cmp r0, r4\n"
|
||||
" bne _0803D500\n"
|
||||
" b _0803D6E0\n"
|
||||
"_0803D500:\n"
|
||||
" ldr r0, [r1]\n"
|
||||
" str r0, [r2]\n"
|
||||
" ldr r0, _0803D660\n"
|
||||
" ldr r1, _0803D664\n"
|
||||
" bl OpenFileAndGetFileDataPtr\n"
|
||||
" mov r9, r0\n"
|
||||
" ldr r3, [r0, 0x4]\n"
|
||||
" ldr r2, [r6]\n"
|
||||
" ldr r7, _0803D65C\n"
|
||||
" adds r0, r2, r7\n"
|
||||
" ldrb r1, [r0]\n"
|
||||
" ldr r0, [r3]\n"
|
||||
" lsls r1, 2\n"
|
||||
" adds r1, r0\n"
|
||||
" ldr r3, _0803D668\n"
|
||||
" adds r0, r2, r3\n"
|
||||
" ldrb r0, [r0]\n"
|
||||
" lsls r0, 4\n"
|
||||
" ldr r1, [r1]\n"
|
||||
" adds r1, r0\n"
|
||||
" mov r8, r1\n"
|
||||
" ldr r4, _0803D658\n"
|
||||
" adds r2, r4\n"
|
||||
" ldrb r0, [r2]\n"
|
||||
" bl GetDungeonFloorCount\n"
|
||||
" ldr r1, [r6]\n"
|
||||
" ldr r7, _0803D66C\n"
|
||||
" adds r1, r7\n"
|
||||
" strb r0, [r1]\n"
|
||||
" ldr r0, [r6]\n"
|
||||
" adds r0, r4\n"
|
||||
" ldrb r0, [r0]\n"
|
||||
" bl sub_80902C8\n"
|
||||
" ldr r1, [r6]\n"
|
||||
" strh r0, [r1, 0x14]\n"
|
||||
" mov r2, r9\n"
|
||||
" ldr r0, [r2, 0x4]\n"
|
||||
" mov r3, r8\n"
|
||||
" movs r4, 0\n"
|
||||
" ldrsh r2, [r3, r4]\n"
|
||||
" ldr r3, [r0, 0x4]\n"
|
||||
" lsls r0, r2, 3\n"
|
||||
" subs r0, r2\n"
|
||||
" lsls r0, 2\n"
|
||||
" ldr r7, _0803D670\n"
|
||||
" adds r1, r7\n"
|
||||
" adds r0, r3\n"
|
||||
" ldm r0!, {r2-r4}\n"
|
||||
" stm r1!, {r2-r4}\n"
|
||||
" ldm r0!, {r2,r3,r7}\n"
|
||||
" stm r1!, {r2,r3,r7}\n"
|
||||
" ldr r0, [r0]\n"
|
||||
" str r0, [r1]\n"
|
||||
" movs r5, 0\n"
|
||||
" mov r10, r6\n"
|
||||
" ldr r4, _0803D674\n"
|
||||
"_0803D576:\n"
|
||||
" mov r6, r10\n"
|
||||
" ldr r2, [r6]\n"
|
||||
" lsls r3, r5, 1\n"
|
||||
" adds r2, r4\n"
|
||||
" adds r2, r3\n"
|
||||
" mov r7, r9\n"
|
||||
" ldr r1, [r7, 0x4]\n"
|
||||
" mov r6, r8\n"
|
||||
" movs r7, 0x4\n"
|
||||
" ldrsh r0, [r6, r7]\n"
|
||||
" ldr r1, [r1, 0x10]\n"
|
||||
" lsls r0, 2\n"
|
||||
" adds r0, r1\n"
|
||||
" ldr r0, [r0]\n"
|
||||
" adds r3, r0\n"
|
||||
" ldrh r0, [r3]\n"
|
||||
" strh r0, [r2]\n"
|
||||
" adds r5, 0x1\n"
|
||||
" cmp r5, 0x13\n"
|
||||
" ble _0803D576\n"
|
||||
" movs r5, 0\n"
|
||||
" adds r6, 0x6\n"
|
||||
" str r6, [sp, 0x1F8]\n"
|
||||
" ldr r6, _0803D678\n"
|
||||
" mov r10, r6\n"
|
||||
"_0803D5A8:\n"
|
||||
" ldr r1, _0803D654\n"
|
||||
" ldr r0, [r1]\n"
|
||||
" lsls r3, r5, 3\n"
|
||||
" mov r2, r10\n"
|
||||
" adds r4, r0, r2\n"
|
||||
" adds r4, r3\n"
|
||||
" mov r12, r4\n"
|
||||
" mov r4, r9\n"
|
||||
" ldr r2, [r4, 0x4]\n"
|
||||
" mov r7, r8\n"
|
||||
" movs r4, 0x2\n"
|
||||
" ldrsh r1, [r7, r4]\n"
|
||||
" ldr r2, [r2, 0xC]\n"
|
||||
" lsls r1, 2\n"
|
||||
" adds r1, r2\n"
|
||||
" ldr r1, [r1]\n"
|
||||
" adds r3, r1\n"
|
||||
" ldr r1, [r3]\n"
|
||||
" ldr r2, [r3, 0x4]\n"
|
||||
" mov r7, r12\n"
|
||||
" str r1, [r7]\n"
|
||||
" str r2, [r7, 0x4]\n"
|
||||
" adds r0, r6\n"
|
||||
" bl ExtractSpeciesIndex\n"
|
||||
" lsls r0, 16\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _0803D5E8\n"
|
||||
" adds r6, 0x8\n"
|
||||
" adds r5, 0x1\n"
|
||||
" cmp r5, 0x1E\n"
|
||||
" ble _0803D5A8\n"
|
||||
"_0803D5E8:\n"
|
||||
" cmp r5, 0x1F\n"
|
||||
" bgt _0803D606\n"
|
||||
" ldr r6, _0803D654\n"
|
||||
" lsls r0, r5, 3\n"
|
||||
" ldr r1, _0803D678\n"
|
||||
" adds r4, r0, r1\n"
|
||||
"_0803D5F4:\n"
|
||||
" ldr r0, [r6]\n"
|
||||
" adds r0, r4\n"
|
||||
" movs r1, 0\n"
|
||||
" bl sub_808E9C4\n"
|
||||
" adds r4, 0x8\n"
|
||||
" adds r5, 0x1\n"
|
||||
" cmp r5, 0x1F\n"
|
||||
" ble _0803D5F4\n"
|
||||
"_0803D606:\n"
|
||||
" movs r5, 0\n"
|
||||
" ldr r2, _0803D67C\n"
|
||||
" mov r10, r2\n"
|
||||
"_0803D60C:\n"
|
||||
" mov r3, r9\n"
|
||||
" ldr r1, [r3, 0x4]\n"
|
||||
" lsls r0, r5, 1\n"
|
||||
" ldr r4, [sp, 0x1F8]\n"
|
||||
" adds r0, r4, r0\n"
|
||||
" movs r6, 0\n"
|
||||
" ldrsh r0, [r0, r6]\n"
|
||||
" ldr r1, [r1, 0x8]\n"
|
||||
" lsls r0, 2\n"
|
||||
" adds r0, r1\n"
|
||||
" movs r4, 0\n"
|
||||
" adds r7, r5, 0x1\n"
|
||||
" mov r8, r7\n"
|
||||
" lsls r1, r5, 6\n"
|
||||
" mov r12, r1\n"
|
||||
" ldr r3, [r0]\n"
|
||||
" mov r2, sp\n"
|
||||
"_0803D62E:\n"
|
||||
" ldrh r0, [r3]\n"
|
||||
" cmp r0, r10\n"
|
||||
" bls _0803D684\n"
|
||||
" ldrh r0, [r3]\n"
|
||||
" ldr r6, _0803D680\n"
|
||||
" adds r1, r0, r6\n"
|
||||
" cmp r1, 0\n"
|
||||
" beq _0803D68A\n"
|
||||
" movs r6, 0\n"
|
||||
" lsls r0, r4, 1\n"
|
||||
" add r0, sp\n"
|
||||
"_0803D644:\n"
|
||||
" strh r6, [r0]\n"
|
||||
" adds r0, 0x2\n"
|
||||
" adds r2, 0x2\n"
|
||||
" adds r4, 0x1\n"
|
||||
" subs r1, 0x1\n"
|
||||
" cmp r1, 0\n"
|
||||
" bne _0803D644\n"
|
||||
" b _0803D68A\n"
|
||||
" .align 2, 0\n"
|
||||
"_0803D654: .4byte gDungeon\n"
|
||||
"_0803D658: .4byte 0x00000644\n"
|
||||
"_0803D65C: .4byte 0x0001c570\n"
|
||||
"_0803D660: .4byte gUnknown_80F4D8C\n"
|
||||
"_0803D664: .4byte gDungeonFileArchive\n"
|
||||
"_0803D668: .4byte 0x0001c571\n"
|
||||
"_0803D66C: .4byte 0x0001cec8\n"
|
||||
"_0803D670: .4byte 0x0001c574\n"
|
||||
"_0803D674: .4byte 0x0001cd70\n"
|
||||
"_0803D678: .4byte 0x0001cd98\n"
|
||||
"_0803D67C: .4byte 0x0000752f\n"
|
||||
"_0803D680: .4byte 0xffff8ad0\n"
|
||||
"_0803D684:\n"
|
||||
" strh r0, [r2]\n"
|
||||
" adds r2, 0x2\n"
|
||||
" adds r4, 0x1\n"
|
||||
"_0803D68A:\n"
|
||||
" adds r3, 0x2\n"
|
||||
" cmp r4, 0xFB\n"
|
||||
" ble _0803D62E\n"
|
||||
" ldr r7, _0803D6F0\n"
|
||||
" mov r1, r12\n"
|
||||
" subs r0, r1, r5\n"
|
||||
" movs r4, 0xB\n"
|
||||
" mov r3, sp\n"
|
||||
" lsls r2, r0, 3\n"
|
||||
" ldr r6, _0803D6F4\n"
|
||||
"_0803D69E:\n"
|
||||
" ldr r0, [r7]\n"
|
||||
" adds r0, r6\n"
|
||||
" adds r0, r2\n"
|
||||
" ldrh r1, [r3]\n"
|
||||
" strh r1, [r0]\n"
|
||||
" adds r3, 0x2\n"
|
||||
" adds r2, 0x2\n"
|
||||
" subs r4, 0x1\n"
|
||||
" cmp r4, 0\n"
|
||||
" bge _0803D69E\n"
|
||||
" ldr r6, _0803D6F0\n"
|
||||
" mov r2, r12\n"
|
||||
" subs r0, r2, r5\n"
|
||||
" lsls r3, r0, 3\n"
|
||||
" add r2, sp, 0x18\n"
|
||||
" ldr r5, _0803D6F8\n"
|
||||
" movs r4, 0xEF\n"
|
||||
"_0803D6C0:\n"
|
||||
" ldr r0, [r6]\n"
|
||||
" adds r0, r5\n"
|
||||
" adds r0, r3\n"
|
||||
" ldrh r1, [r2]\n"
|
||||
" strh r1, [r0]\n"
|
||||
" adds r2, 0x2\n"
|
||||
" adds r3, 0x2\n"
|
||||
" subs r4, 0x1\n"
|
||||
" cmp r4, 0\n"
|
||||
" bge _0803D6C0\n"
|
||||
" mov r5, r8\n"
|
||||
" cmp r5, 0x3\n"
|
||||
" ble _0803D60C\n"
|
||||
" mov r0, r9\n"
|
||||
" bl CloseFile\n"
|
||||
"_0803D6E0:\n"
|
||||
" add sp, 0x1FC\n"
|
||||
" pop {r3-r5}\n"
|
||||
" mov r8, r3\n"
|
||||
" mov r9, r4\n"
|
||||
" mov r10, r5\n"
|
||||
" pop {r4-r7}\n"
|
||||
" pop {r0}\n"
|
||||
" bx r0\n"
|
||||
" .align 2, 0\n"
|
||||
"_0803D6F0: .4byte gDungeon\n"
|
||||
"_0803D6F4: .4byte 0x0001c590\n"
|
||||
"_0803D6F8: .4byte 0x0001c5a8\n");
|
||||
}
|
||||
|
||||
u8 sub_803D6FC(void)
|
||||
{
|
||||
s32 i;
|
||||
@@ -433,7 +155,7 @@ u8 sub_803D73C(s32 a0)
|
||||
s32 rand = DungeonRandInt(10000);
|
||||
u8 category = NUM_ITEM_CATEGORIES;
|
||||
for (i = 0; i < NUM_ITEM_CATEGORIES; i++) {
|
||||
if (gDungeon->unk1C590[a0].unk0[i] != 0 && gDungeon->unk1C590[a0].unk0[i] >= rand) {
|
||||
if (gDungeon->unk1C590[a0].categoryValues[i] != 0 && gDungeon->unk1C590[a0].categoryValues[i] >= rand) {
|
||||
category = i;
|
||||
break;
|
||||
}
|
||||
@@ -443,7 +165,7 @@ u8 sub_803D73C(s32 a0)
|
||||
|
||||
rand = DungeonRandInt(10000);
|
||||
for (i = 0; i < NUMBER_OF_ITEM_IDS; i++) {
|
||||
if (gDungeon->unk1C590[a0].unk18[i] != 0 && GetItemCategory(i) == category && gDungeon->unk1C590[a0].unk18[i] >= rand) {
|
||||
if (gDungeon->unk1C590[a0].itemValues[i] != 0 && GetItemCategory(i) == category && gDungeon->unk1C590[a0].itemValues[i] >= rand) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
256
src/items.c
256
src/items.c
@@ -33,7 +33,7 @@ EWRAM_DATA ItemDataEntry *gItemParametersData = {0};
|
||||
EWRAM_DATA TeamInventory gTeamInventory = {0};
|
||||
EWRAM_INIT TeamInventory *gTeamInventoryRef = {NULL};
|
||||
|
||||
extern s32 sub_8091E94(s32 a1, s32 a2, s32 a3);
|
||||
extern u8 sub_8091E94(s32 a1, s32 a2, s32 a3);
|
||||
extern void SortKecleonShopInventory();
|
||||
bool8 AddKecleonWareItem(u8);
|
||||
|
||||
@@ -1195,223 +1195,63 @@ u8 xxx_bit_lut_lookup_8091E50(u8 i0, u8 i1)
|
||||
return (gUnknown_8108F64[i0][i1 >> 3] >> (i1 & 7)) & 1;
|
||||
}
|
||||
|
||||
extern const u16* gUnknown_8108E58[];
|
||||
|
||||
extern u16* gUnknown_8108E58[];
|
||||
|
||||
struct UnkStruct_8091E94 {
|
||||
s16 unk0[12];
|
||||
s16 unk18[0xf0];
|
||||
};
|
||||
|
||||
NAKED
|
||||
s32 sub_8091E94(s32 a1, s32 a2, s32 a3)
|
||||
u8 sub_8091E94(s32 a0, s32 a1, s32 a2)
|
||||
{
|
||||
#if 0
|
||||
// this is about as good as I got it so far
|
||||
s32 i;
|
||||
u8 item_type;
|
||||
s32 result;
|
||||
s32 id, i, arrId;
|
||||
u8 foundCategory, ret;
|
||||
struct UnkDungeonGlobal_unk1C590 data;
|
||||
s16 rawArray[NUM_ITEM_CATEGORIES + NUMBER_OF_ITEM_IDS];
|
||||
const u16 *ptr = gUnknown_8108E58[a0 - 1];
|
||||
|
||||
// struct of 12 + 0xf0 (NUMBER_OF_ITEM_IDS) hwords?
|
||||
struct UnkStruct_8091E94 s1;
|
||||
u16 s2[12 + 0xf0];
|
||||
s32 data_index;
|
||||
// 30000: level up exp required?
|
||||
id = 0;
|
||||
arrId = 0;
|
||||
while (id < NUM_ITEM_CATEGORIES + NUMBER_OF_ITEM_IDS) {
|
||||
if (ptr[arrId] >= 30000) {
|
||||
s32 a = ptr[arrId] - 30000;
|
||||
|
||||
data_index = 0;
|
||||
// compressed data?
|
||||
for (i = 0; i < 252; i++) {
|
||||
if (gUnknown_8108E58[a1 - 1][i] > 29999) {
|
||||
s32 j;
|
||||
for (j = gUnknown_8108E58[a1 - 1][i] - 30000; j != 0; j--) {
|
||||
s2[data_index++] = 0;
|
||||
}
|
||||
while (a != 0) {
|
||||
rawArray[id++] = 0;
|
||||
a--;
|
||||
}
|
||||
}
|
||||
else {
|
||||
rawArray[id++] = ptr[arrId];
|
||||
}
|
||||
arrId++;
|
||||
}
|
||||
else {
|
||||
s2[data_index++] = gUnknown_8108E58[a1 - 1][i];
|
||||
|
||||
arrId = 0;
|
||||
for (id = 0; id < NUM_ITEM_CATEGORIES; id++) {
|
||||
data.categoryValues[arrId] = rawArray[arrId];
|
||||
arrId++;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 12; i++) {
|
||||
s1.unk0[i] = s2[i];
|
||||
}
|
||||
|
||||
for (i = 0; i < 240; i++) {
|
||||
s1.unk18[i] = s2[12 + i];
|
||||
}
|
||||
|
||||
item_type = 0;
|
||||
for (i = 0; i < 12; i++) {
|
||||
if (s1.unk0[i] && s1.unk0[i] >= a2){
|
||||
item_type = i;
|
||||
break;
|
||||
for (id = 0; id < NUMBER_OF_ITEM_IDS; id++) {
|
||||
data.itemValues[id] = rawArray[arrId];
|
||||
arrId++;
|
||||
}
|
||||
}
|
||||
|
||||
result = 70;
|
||||
if (item_type != 12) {
|
||||
s32 j;
|
||||
for (j = 0; j < 240; j++) {
|
||||
if (s1.unk18[j] && (GetItemCategory(j) == item_type) && (s1.unk18[j] >= a3)) {
|
||||
return result;
|
||||
}
|
||||
foundCategory = NUM_ITEM_CATEGORIES;
|
||||
for (i = 0; i < NUM_ITEM_CATEGORIES; i++) {
|
||||
if (data.categoryValues[i] != 0 && data.categoryValues[i] >= a1) {
|
||||
foundCategory = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
result = j;
|
||||
}
|
||||
return result;
|
||||
#else
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tmov r7, r10\n"
|
||||
"\tmov r6, r9\n"
|
||||
"\tmov r5, r8\n"
|
||||
"\tpush {r5-r7}\n"
|
||||
"\tldr r4, _08091EE4\n"
|
||||
"\tadd sp, r4\n"
|
||||
"\tmov r8, r1\n"
|
||||
"\tmov r10, r2\n"
|
||||
"\tldr r1, _08091EE8\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tadd r1, sp, 0x18\n"
|
||||
"\tmov r9, r1\n"
|
||||
"\tldr r2, _08091EEC\n"
|
||||
"\tmov r12, r2\n"
|
||||
"\tadd r6, sp, 0x1F8\n"
|
||||
"\tldr r2, [r0]\n"
|
||||
"\tadds r7, r6, 0\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"_08091EC0:\n"
|
||||
"\tldrh r1, [r2]\n"
|
||||
"\tcmp r1, r12\n"
|
||||
"\tbls _08091EF4\n"
|
||||
"\tldrh r0, [r2]\n"
|
||||
"\tldr r1, _08091EF0\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08091EFC\n"
|
||||
"\tmovs r5, 0\n"
|
||||
"\tadds r1, r7, r4\n"
|
||||
"_08091ED4:\n"
|
||||
"\tstrh r5, [r1]\n"
|
||||
"\tadds r1, 0x2\n"
|
||||
"\tadds r4, 0x2\n"
|
||||
"\tadds r3, 0x1\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _08091ED4\n"
|
||||
"\tb _08091EFC\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08091EE4: .4byte 0xfffffc10\n"
|
||||
"_08091EE8: .4byte gUnknown_8108E58\n"
|
||||
"_08091EEC: .4byte 0x0000752f\n"
|
||||
"_08091EF0: .4byte 0xffff8ad0\n"
|
||||
"_08091EF4:\n"
|
||||
"\tadds r0, r6, r4\n"
|
||||
"\tstrh r1, [r0]\n"
|
||||
"\tadds r4, 0x2\n"
|
||||
"\tadds r3, 0x1\n"
|
||||
"_08091EFC:\n"
|
||||
"\tadds r2, 0x2\n"
|
||||
"\tcmp r3, 0xFB\n"
|
||||
"\tble _08091EC0\n"
|
||||
"\tmovs r3, 0xB\n"
|
||||
"\tadd r2, sp, 0x1F8\n"
|
||||
"\tmov r1, sp\n"
|
||||
"_08091F08:\n"
|
||||
"\tldrh r0, [r2]\n"
|
||||
"\tstrh r0, [r1]\n"
|
||||
"\tadds r2, 0x2\n"
|
||||
"\tadds r1, 0x2\n"
|
||||
"\tsubs r3, 0x1\n"
|
||||
"\tcmp r3, 0\n"
|
||||
"\tbge _08091F08\n"
|
||||
"\tmov r2, r9\n"
|
||||
"\tadd r1, sp, 0x210\n"
|
||||
"\tmovs r3, 0xEF\n"
|
||||
"_08091F1C:\n"
|
||||
"\tldrh r0, [r1]\n"
|
||||
"\tstrh r0, [r2]\n"
|
||||
"\tadds r1, 0x2\n"
|
||||
"\tadds r2, 0x2\n"
|
||||
"\tsubs r3, 0x1\n"
|
||||
"\tcmp r3, 0\n"
|
||||
"\tbge _08091F1C\n"
|
||||
"\tmovs r7, 0xC\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tmov r0, sp\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tldrsh r0, [r0, r2]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08091F4A\n"
|
||||
"\tmov r0, sp\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tldrsh r0, [r0, r1]\n"
|
||||
"\tcmp r0, r8\n"
|
||||
"\tblt _08091F4A\n"
|
||||
"\tmovs r7, 0\n"
|
||||
"\tb _08091F66\n"
|
||||
"_08091F46:\n"
|
||||
"\tmov r8, r5\n"
|
||||
"\tb _08091F9C\n"
|
||||
"_08091F4A:\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tcmp r6, 0xB\n"
|
||||
"\tbgt _08091F66\n"
|
||||
"\tlsls r0, r6, 1\n"
|
||||
"\tmov r2, sp\n"
|
||||
"\tadds r1, r2, r0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tldrsh r0, [r1, r2]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08091F4A\n"
|
||||
"\tcmp r0, r8\n"
|
||||
"\tblt _08091F4A\n"
|
||||
"\tlsls r0, r6, 24\n"
|
||||
"\tlsrs r7, r0, 24\n"
|
||||
"_08091F66:\n"
|
||||
"\tmovs r0, 0x46\n"
|
||||
"\tmov r8, r0\n"
|
||||
"\tcmp r7, 0xC\n"
|
||||
"\tbeq _08091F9C\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tmov r4, r9\n"
|
||||
"_08091F72:\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tldrsh r0, [r4, r1]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08091F94\n"
|
||||
"\tlsls r0, r6, 24\n"
|
||||
"\tlsrs r5, r0, 24\n"
|
||||
"\tadds r0, r5, 0\n"
|
||||
"\tbl GetItemCategory\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r0, 24\n"
|
||||
"\tcmp r0, r7\n"
|
||||
"\tbne _08091F94\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tldrsh r0, [r4, r2]\n"
|
||||
"\tcmp r0, r10\n"
|
||||
"\tbge _08091F46\n"
|
||||
"_08091F94:\n"
|
||||
"\tadds r4, 0x2\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tcmp r6, 0xEF\n"
|
||||
"\tble _08091F72\n"
|
||||
"_08091F9C:\n"
|
||||
"\tmov r0, r8\n"
|
||||
"\tmovs r3, 0xFC\n"
|
||||
"\tlsls r3, 2\n"
|
||||
"\tadd sp, r3\n"
|
||||
"\tpop {r3-r5}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tmov r9, r4\n"
|
||||
"\tmov r10, r5\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1\n");
|
||||
#endif
|
||||
|
||||
ret = ITEM_PLAIN_SEED;
|
||||
if (foundCategory != NUM_ITEM_CATEGORIES) {
|
||||
for (i = 0; i < NUMBER_OF_ITEM_IDS; i++) {
|
||||
if (data.itemValues[i] != 0 && GetItemCategory(i) == foundCategory && data.itemValues[i] >= a2) {
|
||||
ret = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ClearAllItems_8091FB4(void)
|
||||
|
||||
Reference in New Issue
Block a user