sub_803D73C

This commit is contained in:
DizzyEggg
2024-09-21 12:41:52 +02:00
parent c4dd5fe96e
commit b20adedb18
9 changed files with 503 additions and 474 deletions

View File

@@ -5,424 +5,8 @@
.text
thumb_func_start sub_803D4D0
sub_803D4D0:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x1FC
ldr r6, _0803D654
ldr r1, [r6]
movs r4, 0xC9
lsls r4, 3
adds r0, r1, r4
ldr r2, _0803D658
adds r1, r2
bl sub_80901D8
ldr r0, [r6]
ldr r3, _0803D65C
adds r2, r0, r3
adds r1, r0, r4
ldrh r0, [r2]
ldrh r4, [r1]
cmp r0, r4
bne _0803D500
b _0803D6E0
_0803D500:
ldr r0, [r1]
str r0, [r2]
ldr r0, _0803D660
ldr r1, _0803D664
bl OpenFileAndGetFileDataPtr
mov r9, r0
ldr r3, [r0, 0x4]
ldr r2, [r6]
ldr r7, _0803D65C
adds r0, r2, r7
ldrb r1, [r0]
ldr r0, [r3]
lsls r1, 2
adds r1, r0
ldr r3, _0803D668
adds r0, r2, r3
ldrb r0, [r0]
lsls r0, 4
ldr r1, [r1]
adds r1, r0
mov r8, r1
ldr r4, _0803D658
adds r2, r4
ldrb r0, [r2]
bl GetDungeonFloorCount
ldr r1, [r6]
ldr r7, _0803D66C
adds r1, r7
strb r0, [r1]
ldr r0, [r6]
adds r0, r4
ldrb r0, [r0]
bl sub_80902C8
ldr r1, [r6]
strh r0, [r1, 0x14]
mov r2, r9
ldr r0, [r2, 0x4]
mov r3, r8
movs r4, 0
ldrsh r2, [r3, r4]
ldr r3, [r0, 0x4]
lsls r0, r2, 3
subs r0, r2
lsls r0, 2
ldr r7, _0803D670
adds r1, r7
adds r0, r3
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldm r0!, {r2,r3,r7}
stm r1!, {r2,r3,r7}
ldr r0, [r0]
str r0, [r1]
movs r5, 0
mov r10, r6
ldr r4, _0803D674
_0803D576:
mov r6, r10
ldr r2, [r6]
lsls r3, r5, 1
adds r2, r4
adds r2, r3
mov r7, r9
ldr r1, [r7, 0x4]
mov r6, r8
movs r7, 0x4
ldrsh r0, [r6, r7]
ldr r1, [r1, 0x10]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
adds r3, r0
ldrh r0, [r3]
strh r0, [r2]
adds r5, 0x1
cmp r5, 0x13
ble _0803D576
movs r5, 0
adds r6, 0x6
str r6, [sp, 0x1F8]
ldr r6, _0803D678
mov r10, r6
_0803D5A8:
ldr r1, _0803D654
ldr r0, [r1]
lsls r3, r5, 3
mov r2, r10
adds r4, r0, r2
adds r4, r3
mov r12, r4
mov r4, r9
ldr r2, [r4, 0x4]
mov r7, r8
movs r4, 0x2
ldrsh r1, [r7, r4]
ldr r2, [r2, 0xC]
lsls r1, 2
adds r1, r2
ldr r1, [r1]
adds r3, r1
ldr r1, [r3]
ldr r2, [r3, 0x4]
mov r7, r12
str r1, [r7]
str r2, [r7, 0x4]
adds r0, r6
bl ExtractSpeciesIndex
lsls r0, 16
cmp r0, 0
beq _0803D5E8
adds r6, 0x8
adds r5, 0x1
cmp r5, 0x1E
ble _0803D5A8
_0803D5E8:
cmp r5, 0x1F
bgt _0803D606
ldr r6, _0803D654
lsls r0, r5, 3
ldr r1, _0803D678
adds r4, r0, r1
_0803D5F4:
ldr r0, [r6]
adds r0, r4
movs r1, 0
bl sub_808E9C4
adds r4, 0x8
adds r5, 0x1
cmp r5, 0x1F
ble _0803D5F4
_0803D606:
movs r5, 0
ldr r2, _0803D67C
mov r10, r2
_0803D60C:
mov r3, r9
ldr r1, [r3, 0x4]
lsls r0, r5, 1
ldr r4, [sp, 0x1F8]
adds r0, r4, r0
movs r6, 0
ldrsh r0, [r0, r6]
ldr r1, [r1, 0x8]
lsls r0, 2
adds r0, r1
movs r4, 0
adds r7, r5, 0x1
mov r8, r7
lsls r1, r5, 6
mov r12, r1
ldr r3, [r0]
mov r2, sp
_0803D62E:
ldrh r0, [r3]
cmp r0, r10
bls _0803D684
ldrh r0, [r3]
ldr r6, _0803D680
adds r1, r0, r6
cmp r1, 0
beq _0803D68A
movs r6, 0
lsls r0, r4, 1
add r0, sp
_0803D644:
strh r6, [r0]
adds r0, 0x2
adds r2, 0x2
adds r4, 0x1
subs r1, 0x1
cmp r1, 0
bne _0803D644
b _0803D68A
.align 2, 0
_0803D654: .4byte gDungeon
_0803D658: .4byte 0x00000644
_0803D65C: .4byte 0x0001c570
_0803D660: .4byte gUnknown_80F4D8C
_0803D664: .4byte gDungeonFileArchive
_0803D668: .4byte 0x0001c571
_0803D66C: .4byte 0x0001cec8
_0803D670: .4byte 0x0001c574
_0803D674: .4byte 0x0001cd70
_0803D678: .4byte 0x0001cd98
_0803D67C: .4byte 0x0000752f
_0803D680: .4byte 0xffff8ad0
_0803D684:
strh r0, [r2]
adds r2, 0x2
adds r4, 0x1
_0803D68A:
adds r3, 0x2
cmp r4, 0xFB
ble _0803D62E
ldr r7, _0803D6F0
mov r1, r12
subs r0, r1, r5
movs r4, 0xB
mov r3, sp
lsls r2, r0, 3
ldr r6, _0803D6F4
_0803D69E:
ldr r0, [r7]
adds r0, r6
adds r0, r2
ldrh r1, [r3]
strh r1, [r0]
adds r3, 0x2
adds r2, 0x2
subs r4, 0x1
cmp r4, 0
bge _0803D69E
ldr r6, _0803D6F0
mov r2, r12
subs r0, r2, r5
lsls r3, r0, 3
add r2, sp, 0x18
ldr r5, _0803D6F8
movs r4, 0xEF
_0803D6C0:
ldr r0, [r6]
adds r0, r5
adds r0, r3
ldrh r1, [r2]
strh r1, [r0]
adds r2, 0x2
adds r3, 0x2
subs r4, 0x1
cmp r4, 0
bge _0803D6C0
mov r5, r8
cmp r5, 0x3
ble _0803D60C
mov r0, r9
bl CloseFile
_0803D6E0:
add sp, 0x1FC
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803D6F0: .4byte gDungeon
_0803D6F4: .4byte 0x0001c590
_0803D6F8: .4byte 0x0001c5a8
thumb_func_end sub_803D4D0
thumb_func_start sub_803D6FC
sub_803D6FC:
push {r4,lr}
ldr r0, _0803D720
bl DungeonRandInt
adds r3, r0, 0
movs r2, 0
ldr r0, _0803D724
ldr r0, [r0]
ldr r4, _0803D728
adds r1, r0, r4
_0803D710:
ldrh r0, [r1]
cmp r0, 0
beq _0803D72C
cmp r0, r3
blt _0803D72C
lsls r0, r2, 24
lsrs r0, 24
b _0803D736
.align 2, 0
_0803D720: .4byte 0x00002710
_0803D724: .4byte gDungeon
_0803D728: .4byte 0x0001cd70
_0803D72C:
adds r1, 0x2
adds r2, 0x1
cmp r2, 0x13
ble _0803D710
movs r0, 0x10
_0803D736:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_803D6FC
thumb_func_start sub_803D73C
sub_803D73C:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x8
adds r4, r0, 0
ldr r0, _0803D784
bl DungeonRandInt
adds r7, r0, 0
movs r0, 0xC
mov r8, r0
movs r6, 0
ldr r0, _0803D788
ldr r2, [r0]
lsls r1, r4, 6
subs r0, r1, r4
adds r5, r1, 0
lsls r0, 3
ldr r1, _0803D78C
adds r2, r1
adds r1, r0, r2
_0803D766:
movs r2, 0
ldrsh r0, [r1, r2]
cmp r0, 0
beq _0803D772
cmp r0, r7
bge _0803D790
_0803D772:
adds r1, 0x2
adds r6, 0x1
cmp r6, 0xB
ble _0803D766
_0803D77A:
mov r0, r8
cmp r0, 0xC
bne _0803D79C
b _0803D7EC
.align 2, 0
_0803D784: .4byte 0x00002710
_0803D788: .4byte gDungeon
_0803D78C: .4byte 0x0001c590
_0803D790:
lsls r0, r6, 24
lsrs r0, 24
mov r8, r0
b _0803D77A
_0803D798:
adds r0, r5, 0
b _0803D7EE
_0803D79C:
ldr r0, _0803D7FC
bl DungeonRandInt
adds r7, r0, 0
movs r6, 0
ldr r2, _0803D800
subs r0, r5, r4
ldr r1, _0803D804
lsls r4, r0, 3
_0803D7AE:
ldr r0, [r2]
adds r0, r1
adds r0, r4
movs r3, 0
ldrsh r0, [r0, r3]
cmp r0, 0
beq _0803D7E4
lsls r0, r6, 24
lsrs r5, r0, 24
adds r0, r5, 0
str r1, [sp]
str r2, [sp, 0x4]
bl GetItemCategory
lsls r0, 24
lsrs r0, 24
ldr r1, [sp]
ldr r2, [sp, 0x4]
cmp r0, r8
bne _0803D7E4
ldr r0, [r2]
adds r0, r1
adds r0, r4
movs r3, 0
ldrsh r0, [r0, r3]
cmp r0, r7
bge _0803D798
_0803D7E4:
adds r4, 0x2
adds r6, 0x1
cmp r6, 0xEF
ble _0803D7AE
_0803D7EC:
movs r0, 0x69
_0803D7EE:
add sp, 0x8
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0803D7FC: .4byte 0x00002710
_0803D800: .4byte gDungeon
_0803D804: .4byte 0x0001c5a8
thumb_func_end sub_803D73C
thumb_func_start sub_803D808
sub_803D808:

View File

@@ -47,7 +47,7 @@ typedef struct Weather
} Weather;
// size: 0x30
typedef struct unkDungeonGlobal_unk1CE98_sub
typedef struct UnkDungeonGlobal_unk1CE98_sub
{
/* 0x0 */ u8 buffer1[10];
/* 0xA */ u8 buffer2[10];
@@ -67,7 +67,7 @@ typedef struct unkDungeonGlobal_unk1CE98_sub
/* 0x2D */ u8 defBoost;
/* 0x2E */ u8 spDefBoost;
u8 unk2F; // speedBoost?
} unkDungeonGlobal_unk1CE98_sub;
} UnkDungeonGlobal_unk1CE98_sub;
// size: 0x10
typedef struct DungeonMusicPlayer
@@ -81,7 +81,7 @@ typedef struct DungeonMusicPlayer
} DungeonMusicPlayer;
// Size unknown?
typedef struct unkDungeonGlobal_unk181E8_sub
typedef struct UnkDungeonGlobal_unk181E8_sub
{
/* 0x181E8 */ Position cameraPos;
/* 0x181EC */ Position cameraPosMirror;
@@ -115,7 +115,51 @@ typedef struct unkDungeonGlobal_unk181E8_sub
u8 fill1821D;
u8 fill1821E;
u8 fill1821F;
} unkDungeonGlobal_unk181E8_sub;
} UnkDungeonGlobal_unk181E8_sub;
// Sizeof: 0x1C
typedef struct UnkDungeonGlobal_unk1C574
{
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
u8 unk8;
u8 unk9;
u8 unkA;
u8 unkB;
u8 unkC;
u8 unkD;
u8 unkE;
u8 unkF;
u8 unk10;
u8 unk11;
u8 unk12;
u8 unk13;
u8 unk14;
u8 unk15;
u8 unk16;
u8 unk17;
u8 unk18;
u8 unk19;
u8 unk1A;
} UnkDungeonGlobal_unk1C574;
typedef struct UnkDungeonGlobal_unk1C590
{
s16 unk0[NUM_ITEM_CATEGORIES];
s16 unk18[NUMBER_OF_ITEM_IDS];
} UnkDungeonGlobal_unk1C590;
typedef struct UnkDungeonGlobal_unk1CD98
{
struct PokemonStruct1 *unk0;
void *unk4;
} UnkDungeonGlobal_unk1CD98;
// size: 0x1CEDC
typedef struct Dungeon
@@ -136,7 +180,8 @@ typedef struct Dungeon
u8 unk10;
u8 unk11;
s16 unk12;
u8 fill14[0xB8 - 0x14];
s16 unk14;
u8 fill14[0xB8 - 0x16];
Entity *unkB8;
Entity *unkBC;
u8 fillC0[0x13C - 0xC0];
@@ -154,7 +199,8 @@ typedef struct Dungeon
/* 0x5C0 */ s32 unk5C0;
/* 0x5C4 */ u8 fill5C4[0x644 - 0x5C4];
/* 0x644 */ DungeonLocation dungeonLocation;
u8 fill646[0x654 - 0x648];
/* 0x648 */ DungeonLocation dungeonLocation2;
u8 fill64C[0x654 - 0x64C];
u8 unk654;
u8 fill655[0x65B - 0x655];
u8 unk65B;
@@ -269,21 +315,17 @@ typedef struct Dungeon
/* 0x17B3C */ u32 unk17B40;
/* 0x17B44 */ OpenedFile *sprites[MONSTER_MAX];
/* 0x181E4 */ OpenedFile *paletFile;
/* 0x181E8 */ unkDungeonGlobal_unk181E8_sub unk181e8;
/* 0x181E8 */ UnkDungeonGlobal_unk181E8_sub unk181e8;
u8 fill18220[0x1C06C - 0x18220];
u32 unk1C06C;
u32 unk1C06C;
u8 fill1C070[0x1C570 - 0x1C070];
u8 unk1C570;
u8 unk1C571;
u8 fill1C572[0x1C578 - 0x1C572];
u8 unk1C578;
u8 fill1C579[0x1C57E - 0x1C579];
u8 unk1C57E;
u8 fill1C57F[0x1C58B - 0x1C57F];
u8 unk1C58B;
u8 fill1C58C[0x1CE98 - 0x1C58C];
unkDungeonGlobal_unk1CE98_sub unk1CE98; // TODO: not sure how large this is
u32 unk1CEC8;
/* 0x1C570 */ DungeonLocation unk1C570;
/* 0x1C574 */ UnkDungeonGlobal_unk1C574 unk1C574;
/* 0x1C590 */ UnkDungeonGlobal_unk1C590 unk1C590[4];
u16 unk1CD70[20];
UnkDungeonGlobal_unk1CD98 unk1CD98[32];
UnkDungeonGlobal_unk1CE98_sub unk1CE98; // TODO: not sure how large this is
u8 unk1CEC8;
/* 0x1CECC */ DungeonMusicPlayer musPlayer;
} Dungeon;

View File

@@ -205,6 +205,7 @@ SECTIONS {
src/personality_test1.o(.text);
src/personality_test2.o(.text);
src/code_803D0D8.o(.text);
src/code_803D110.o(.text);
asm/code_803D110.o(.text);
src/code_803E46C.o(.text);
asm/code_803E724.o(.text);

View File

@@ -46,7 +46,7 @@ u8 sub_803D110(u8 *param_1, u8 *param_2, s32 size)
auStack_40[index1] = 0;
}
for (index1 = 0; index1 < size; index1++)
for (index1 = 0; index1 < size; index1++)
{
local_78[index1] = sub_803D0F0(*param_1);
if (local_78[index1] == 0xff) {
@@ -107,7 +107,7 @@ bool8 sub_803D204(u8 *buffer,unkStruct_203B480 *param_2)
u8 localBuffer [PASSWORD_BUFFER_SIZE];
unkStruct_8094924 uStack_30;
s32 index;
checksum = 0;
MemoryCopy8(localBuffer,buffer,sizeof(localBuffer));
for(index = 0; index < PASSWORD_BUFFER_SIZE; index++)
@@ -119,9 +119,9 @@ bool8 sub_803D204(u8 *buffer,unkStruct_203B480 *param_2)
translateBuffer[index] = localBuffer[innerIndex];
}
if (sub_803D110(translateBuffer,local_c4,sizeof(translateBuffer)) != 0) {
for(index = 1; index < 34; index++)
{
checksum += local_c4[index] + index;
@@ -242,6 +242,6 @@ void sub_803D414(u8 *buffer,WonderMail *mail)
void sub_803D4AC(void)
{
gDungeon->unk1C570 = 0x63;
gDungeon->unk1C571 = 0xFF;
gDungeon->unk1C570.id = 0x63;
gDungeon->unk1C570.floor = 0xFF;
}

410
src/code_803D110.c Normal file
View File

@@ -0,0 +1,410 @@
#include "global.h"
#include "dungeon.h"
#include "pokemon.h"
#include "file_system.h"
#include "dungeon_random.h"
extern void sub_80901D8(DungeonLocation *param_1,DungeonLocation *param_2);
extern s32 sub_80902C8(u8 dungeon);
extern u16 ExtractSpeciesIndex(UnkDungeonGlobal_unk1CD98 *r0);
extern void sub_808E9C4(UnkDungeonGlobal_unk1CD98 *r0, s16 r1);
extern const char gUnknown_80F4D8C[]; // "mapparam"
extern struct FileArchive gDungeonFileArchive;
struct UnkDungeonFileData
{
s16 unk0;
s16 unk2;
s16 unk4;
s16 unk6[5];
};
struct UnkDataFileStruct
{
struct UnkDungeonFileData **unk0;
UnkDungeonGlobal_unk1C574 *unk4;
u16 **unk8;
UnkDungeonGlobal_unk1CD98 **unkC;
u16 **unk10;
};
// TODO https://decomp.me/scratch/nXUH3
/*
void sub_803D4D0(void)
{
u16 spArray[252];
s32 i, j, k;
OpenedFile *file;
struct UnkDungeonFileData *strPtr;
sub_80901D8(&gDungeon->dungeonLocation2, &gDungeon->dungeonLocation);
if (gDungeon->unk1C570.id == gDungeon->dungeonLocation2.id && gDungeon->unk1C570.floor == gDungeon->dungeonLocation2.floor)
return;
gDungeon->unk1C570 = gDungeon->dungeonLocation2;
file = OpenFileAndGetFileDataPtr(gUnknown_80F4D8C, &gDungeonFileArchive);
strPtr = &file->data.dungData->unk0[gDungeon->unk1C570.id][gDungeon->unk1C570.floor];
gDungeon->unk1CEC8 = GetDungeonFloorCount(gDungeon->dungeonLocation.id);
gDungeon->unk14 = sub_80902C8(gDungeon->dungeonLocation.id);
gDungeon->unk1C574 = file->data.dungData->unk4[strPtr->unk0];
for (i = 0; i < 20; i++) {
gDungeon->unk1CD70[i] = file->data.dungData->unk10[strPtr->unk4][i];
}
for (i = 0; i < 31; i++) {
gDungeon->unk1CD98[i] = file->data.dungData->unkC[strPtr->unk2][i];
if (ExtractSpeciesIndex(&gDungeon->unk1CD98[i]) == 0)
break;
}
while (i <= 31) {
sub_808E9C4(&gDungeon->unk1CD98[i], 0);
i++;
}
for (i = 0; i < 4; i++)
{
u16 *src = file->data.dungData->unk8[strPtr->unk6[i]];
for (j = 0; j < 252; src++) {
if (*src > 29999) {
for (k = *src - 30000; k != 0; k--) {
spArray[j++] = 0;
}
}
else {
spArray[j++] = *src;
}
}
for (j = 0; j < 12; j++) {
gDungeon->unk1C590[i].unk0[j] = spArray[j];
}
for (j = 0; j < 240; j++) {
gDungeon->unk1C590[i].unk18[j] = spArray[12 + j];
}
}
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;
s32 rand = DungeonRandInt(10000);
for (i = 0; i < 20; i++) {
if (gDungeon->unk1CD70[i] != 0 && gDungeon->unk1CD70[i] >= rand)
return i;
}
return 16;
}
u8 sub_803D73C(s32 a0)
{
s32 i;
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) {
category = i;
break;
}
}
if (category == NUM_ITEM_CATEGORIES)
return 105;
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) {
return i;
}
}
return 105;
}

View File

@@ -98,38 +98,30 @@ void sub_8045C18(u8 *buffer, Item *item)
sub_8090E14(buffer, item, &gUnknown_80F6990);
}
void sub_8045C28(Item *Item, u8 itemID, u32 param_3)
void sub_8045C28(Item *item, u8 itemID, u32 param_3)
{
bool8 stickyFlag;
u32 total;
bool8 stickyFlag;
xxx_init_itemslot_8090A8C(Item,itemID,0);
stickyFlag = FALSE;
if (IsNotSpecialItem(itemID)) {
if (param_3 == 0) {
if (DungeonRandInt(100) >= gDungeon->unk1C57E)
{
goto _short;
xxx_init_itemslot_8090A8C(item,itemID,0);
stickyFlag = FALSE;
if (IsNotSpecialItem(itemID)) {
if (param_3 == 0) {
if (DungeonRandInt(100) < gDungeon->unk1C574.unkA)
stickyFlag = TRUE;
else
stickyFlag = FALSE;
}
else
{
goto _store;
else if (param_3 == 1) {
stickyFlag = TRUE;
}
}
else if (param_3 == 1) {
stickyFlag = TRUE;
if (stickyFlag) {
item->flags |= ITEM_FLAG_STICKY;
}
if (GetItemCategory(itemID) == CATEGORY_POKE) {
sub_8046CE4(item, gDungeon->unk1C574.unk17 * 40);
}
}
_short:
if (stickyFlag)
_store:
Item->flags = Item->flags | ITEM_FLAG_STICKY;
if (GetItemCategory(itemID) == CATEGORY_POKE) {
// FIXME: total hack but too lazy to figure out array for now
total = (gDungeon->unk1C58B << 2) + gDungeon->unk1C58B;
total <<= 3;
sub_8046CE4(Item, total);
}
}
void sub_8045CB0(void)

View File

@@ -80,7 +80,7 @@ static u8 sub_8094528(s16 moveID)
}
}
void sub_8094558(u32 param_1,u8 *param_2,unkDungeonGlobal_unk1CE98_sub *param_3)
void sub_8094558(u32 param_1,u8 *param_2,UnkDungeonGlobal_unk1CE98_sub *param_3)
{
u8 buffer [200];
s32 x, y;

View File

@@ -34,7 +34,7 @@ void sub_8083AB0(s16 param_0, Entity * target, Entity * entity)
EntityInfo * targetEntityInfo;
u8 *spAttPtr;
u8 buffer [0x14];
unkDungeonGlobal_unk1CE98_sub *temp;
UnkDungeonGlobal_unk1CE98_sub *temp;
u8 *id;
s32 param_0_s32 = param_0;
@@ -96,7 +96,7 @@ void sub_8083AB0(s16 param_0, Entity * target, Entity * entity)
bool8 sub_8083C24(void)
{
unkDungeonGlobal_unk1CE98_sub *temp;
UnkDungeonGlobal_unk1CE98_sub *temp;
temp = &gDungeon->unk1CE98;
@@ -110,7 +110,7 @@ bool8 sub_8083C24(void)
bool8 sub_8083C50(void)
{
unkDungeonGlobal_unk1CE98_sub *temp;
UnkDungeonGlobal_unk1CE98_sub *temp;
temp = &gDungeon->unk1CE98;
@@ -124,7 +124,7 @@ bool8 sub_8083C50(void)
bool8 sub_8083C88(u8 param_1)
{
unkDungeonGlobal_unk1CE98_sub *temp;
UnkDungeonGlobal_unk1CE98_sub *temp;
temp = &gDungeon->unk1CE98;

View File

@@ -25,7 +25,7 @@ u8 GetApparentWeather(Entity *pokemon)
void sub_807E5AC(void)
{
u8 weather;
weather = gDungeon->unk1C578;
weather = gDungeon->unk1C574.unk4;
if(weather == WEATHER_RANDOM)
weather = DungeonRandInt(WEATHER_RANDOM);
sub_807E5E4(weather);