diff --git a/asm/code_8066D04.s b/asm/code_8066D04.s index 4bbf2e6d6..d0bf5625e 100644 --- a/asm/code_8066D04.s +++ b/asm/code_8066D04.s @@ -2974,173 +2974,4 @@ _0806860C: .4byte 0x00000fff _08068610: .4byte 0x000001ff thumb_func_end sub_80684C4 - thumb_func_start sub_8068614 -sub_8068614: - push {lr} - ldr r0, _0806862C - ldr r1, _08068630 - bl OpenFileAndGetFileDataPtr - ldr r1, _08068634 - ldr r1, [r1] - ldr r2, _08068638 - adds r1, r2 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0806862C: .4byte gUnknown_8106E98 -_08068630: .4byte gMonsterFileArchive -_08068634: .4byte gDungeon -_08068638: .4byte 0x000181e4 - thumb_func_end sub_8068614 - - thumb_func_start sub_806863C -sub_806863C: - push {lr} - ldr r0, _08068650 - ldr r0, [r0] - ldr r1, _08068654 - adds r0, r1 - ldr r0, [r0] - bl CloseFile - pop {r0} - bx r0 - .align 2, 0 -_08068650: .4byte gDungeon -_08068654: .4byte 0x000181e4 - thumb_func_end sub_806863C - - thumb_func_start LoadDungeonPokemonSprites -LoadDungeonPokemonSprites: - push {r4-r6,lr} - movs r4, 0 - ldr r6, _08068740 - ldr r5, _08068744 - ldr r3, _08068748 - movs r2, 0 -_08068664: - ldr r0, [r5] - lsls r1, r4, 2 - adds r0, r3 - adds r0, r1 - str r2, [r0] - adds r4, 0x1 - cmp r4, r6 - ble _08068664 - ldr r0, _0806874C - movs r1, 0x1 - bl LoadPokemonSprite - movs r4, 0 - ldr r1, _08068744 - ldr r0, [r1] - ldr r2, _08068750 - adds r0, r2 - ldr r0, [r0] - cmp r4, r0 - bge _080686B2 - adds r6, r1, 0 - ldr r5, _08068754 -_08068690: - ldr r0, [r6] - adds r0, r5 - bl ExtractSpeciesIndex - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - bl LoadPokemonSprite - adds r5, 0x8 - adds r4, 0x1 - ldr r0, [r6] - ldr r1, _08068750 - adds r0, r1 - ldr r0, [r0] - cmp r4, r0 - blt _08068690 -_080686B2: - ldr r0, _08068744 - ldr r0, [r0] - movs r2, 0xD1 - lsls r2, 3 - adds r1, r0, r2 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080686CA - movs r1, 0x1 - bl LoadPokemonSprite -_080686CA: - movs r4, 0 - ldr r6, _08068758 - movs r5, 0x1 -_080686D0: - movs r0, 0x64 - muls r0, r4 - ldr r1, _0806875C - adds r0, r1 - ldr r1, [r6] - adds r1, r0 - ldrh r2, [r1] - adds r0, r5, 0 - ands r0, r2 - cmp r0, 0 - beq _080686F8 - lsrs r0, r2, 1 - ands r0, r5 - cmp r0, 0 - beq _080686F8 - movs r2, 0xE - ldrsh r0, [r1, r2] - movs r1, 0 - bl LoadPokemonSprite -_080686F8: - adds r4, 0x1 - cmp r4, 0x3 - ble _080686D0 - ldr r0, _08068744 - ldr r0, [r0] - ldr r1, _08068760 - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0x31 - bne _08068738 - movs r4, 0 - ldr r5, _08068758 -_08068712: - movs r0, 0x58 - muls r0, r4 - ldr r1, _08068764 - adds r0, r1 - ldr r1, [r5] - adds r2, r1, r0 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068732 - movs r1, 0x8 - ldrsh r0, [r2, r1] - movs r1, 0x1 - bl LoadPokemonSprite -_08068732: - adds r4, 0x1 - cmp r4, 0x3 - ble _08068712 -_08068738: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08068740: .4byte 0x000001a7 -_08068744: .4byte gDungeon -_08068748: .4byte 0x00017b44 -_0806874C: .4byte 0x000001a5 -_08068750: .4byte 0x000037e4 -_08068754: .4byte 0x0000343c -_08068758: .4byte gRecruitedPokemonRef -_0806875C: .4byte 0x00008df8 -_08068760: .4byte 0x00003a14 -_08068764: .4byte 0x00008f88 - thumb_func_end LoadDungeonPokemonSprites - .align 2,0 diff --git a/include/code_800DAC0.h b/include/code_800DAC0.h index 458e27470..e36cc1b99 100644 --- a/include/code_800DAC0.h +++ b/include/code_800DAC0.h @@ -26,6 +26,7 @@ void sub_800DAC0(u32); void sub_800DB7C(void); void sub_800DBBC(void); bool8 sub_800E90C(DungeonPos *); -void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, struct unkStruct_203B0CC_sub_2 *a4); +void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, unkStruct_2039DB0 *a4); + #endif // GUARD_CODE_800DAC0_H diff --git a/include/code_800E9A8.h b/include/code_800E9A8.h index 5fb569545..395a7c4b2 100644 --- a/include/code_800E9A8.h +++ b/include/code_800E9A8.h @@ -1,15 +1,10 @@ #ifndef GUARD_CODE_800E9A8_H #define GUARD_CODE_800E9A8_H +#include "structs/axdata.h" +#include "structs/sprite_oam.h" #include "structs/str_position.h" -struct unkStruct_203B0CC_sub_2 -{ - u32 unk0; - u32 unk4; - u32 unk8; -}; - struct unkStruct_203B0CC_sub { // size: 0xD0 @@ -23,17 +18,20 @@ struct unkStruct_203B0CC_sub DungeonPos unk1c; s32 unk20; s32 unk24; - struct unkStruct_203B0CC_sub_2 unk28; + unkStruct_2039DB0 spriteMasks; u32 unk34; u32 effectID; - u8 fill3C[0x4C - 0x3C]; + s32 paletteNum; + u8 fill40[0x4C - 0x40]; u32 unk4C; s32 unk50; u8 unk54; - u8 fill55[0xB8 - 0x55]; + u8 fill55[0x58 - 0x55]; + struct axObject unk58; + u8 fillA4[0xB8 - 0xA4]; u32 unkB8; u8 fillBC[0xCC - 0xBC]; - u32 unkCC; + s16 unkCC[2]; // NOTE: might be DungeonPos }; struct unkStruct_203B0CC diff --git a/include/code_805D8C8.h b/include/code_805D8C8.h index be4a29c35..bc0258f52 100644 --- a/include/code_805D8C8.h +++ b/include/code_805D8C8.h @@ -5,6 +5,9 @@ void CloseAllSpriteFiles(void); +void OpenDungeonPaletteFile(void); +void CloseDungeonPaletteFile(void); +void LoadDungeonPokemonSprites(void); void sub_8068768(void); void sub_80687AC(void); OpenedFile *GetSpriteData(s32 _species); diff --git a/src/code_800E9A8.c b/src/code_800E9A8.c index 9e83f7b3a..329e485fc 100644 --- a/src/code_800E9A8.c +++ b/src/code_800E9A8.c @@ -55,7 +55,7 @@ u32 sub_800E890(unkStruct_80416E0 *param_1) return sub_800E208(7, (void*)¶m_1->unk0); } -void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, struct unkStruct_203B0CC_sub_2 *a4) +void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, unkStruct_2039DB0 *a4) { s32 index; struct unkStruct_203B0CC_sub *ptr; @@ -68,7 +68,7 @@ void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, struct unkStruc if(a1 != NULL) ptr->unk18 = *a1; if(a2 != NULL) ptr->unk1c = *a2; if(a3 != 0xFFFF) ptr->unk24 = a3; - if(a4 != NULL) ptr->unk28 = *a4; + if(a4 != NULL) ptr->spriteMasks = *a4; } } diff --git a/src/code_800E9E4.c b/src/code_800E9E4.c index d28e66948..b5120a88d 100644 --- a/src/code_800E9E4.c +++ b/src/code_800E9E4.c @@ -99,7 +99,7 @@ void sub_800EB24(s32 param_1, DungeonPos *param_2, DungeonPos *param_3, s32 r5, if (idx != -1) { struct unkStruct_203B0CC_sub *curStruct; curStruct = &gUnknown_203B0CC->unk0[idx]; - if (curStruct->unkCC == 0) { + if (curStruct->unkCC[0] == 0 && curStruct->unkCC[1] == 0) { curStruct->unk18 = *param_2; } diff --git a/src/code_8042B34.c b/src/code_8042B34.c index c8e3f8525..a860a9566 100644 --- a/src/code_8042B34.c +++ b/src/code_8042B34.c @@ -265,7 +265,6 @@ extern void sub_8040124(void); extern void sub_803E830(void); extern void sub_803E214(void); extern void nullsub_56(void); -extern void sub_806863C(void); extern void sub_8040218(void); extern void sub_8047104(void); extern void sub_8068F28(void); @@ -282,7 +281,6 @@ extern void sub_803E02C(void); extern void sub_80847D4(void); extern void sub_8043D60(void); extern void sub_806890C(void); -extern void sub_8068614(void); extern void sub_80840A4(void); extern void sub_803E178(void); extern void sub_80848F0(void); @@ -327,7 +325,6 @@ extern bool8 sub_8044B28(void); extern bool8 sub_8083C24(void); extern bool8 sub_8083C88(u8 param_1); extern bool8 sub_8043ED0(bool8); -extern void LoadDungeonPokemonSprites(void); extern void ShowDungeonNameBanner(void); extern void sub_803EAF0(u32, u32); extern void sub_806A914(bool8 a0, bool8 a1, bool8 showRunAwayEffect); @@ -487,7 +484,7 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) } } - sub_8068614(); + OpenDungeonPaletteFile(); if (!r6 && gDungeon->unk644.unk34 == 1) { if (sub_8099394(&sp)) { unkStruct_203B480 *mailStr = GetMailatIndex(sp); @@ -914,7 +911,7 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) } } - sub_806863C(); + CloseDungeonPaletteFile(); sub_803E214(); nullsub_56(); sub_8040218(); diff --git a/src/code_805D8C8.c b/src/code_805D8C8.c index 8b5ca511d..6ea4352e6 100644 --- a/src/code_805D8C8.c +++ b/src/code_805D8C8.c @@ -2,19 +2,67 @@ #include "code_805D8C8.h" #include "structs/str_dungeon.h" #include "dungeon_util.h" +#include "dungeon_util_1.h" +#include "file_system.h" #include "pokemon.h" +#include "pokemon_3.h" // monster_sbin.s extern const struct FileArchive gMonsterFileArchive; // data_8106A4C.s extern const u8 gUnknown_8106EA0[]; // ax%03d - +extern const u8 gUnknown_8106E98[]; // palet // ??? extern s32 sprintf(char *, const char *, ...); static void EnsureCastformLoaded(void); static void EnsureDeoxysLoaded(void); +void OpenDungeonPaletteFile(void) +{ + gDungeon->paletFile = OpenFileAndGetFileDataPtr(gUnknown_8106E98, &gMonsterFileArchive); +} + +void CloseDungeonPaletteFile(void) +{ + CloseFile(gDungeon->paletFile); +} + +void LoadDungeonPokemonSprites(void) +{ + s32 index; + + for(index = 0; index < 0x1A8; index++) + { + gDungeon->sprites[index] = NULL; + } + LoadPokemonSprite(MONSTER_DECOY, TRUE); + for(index = 0; index < gDungeon->unk37E4; index++) + { + LoadPokemonSprite(ExtractSpeciesIndex(&gDungeon->unk343C[index]), TRUE); + } + if(gDungeon->unk644.unk44) + { + LoadPokemonSprite(gDungeon->unk644.unk44, TRUE); + } + for(index = 0; index < 4; index++) + { + PokemonStruct2 *ptr = &gRecruitedPokemonRef->pokemon2[index]; + if(PokemonFlag1Struct2(ptr)) + if(PokemonFlag2Struct2(ptr)) + LoadPokemonSprite(ptr->speciesNum, FALSE); + } + if(gDungeon->fixedRoomNumber == 0x31) + { + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + PokemonStruct1 *ptr = &gRecruitedPokemonRef->team[index]; + if(PokemonFlag1(ptr)) + LoadPokemonSprite(ptr->speciesNum, TRUE); + } + } +} + void sub_8068768(void) { Entity *entity;