mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-27 19:24:58 -05:00
sub_803D73C
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
410
src/code_803D110.c
Normal 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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user