diff --git a/asm/code_803D110.s b/asm/code_803D110.s deleted file mode 100644 index c89b8b4ae..000000000 --- a/asm/code_803D110.s +++ /dev/null @@ -1,254 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - - thumb_func_start sub_803E250 -sub_803E250: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r1, _0803E3FC - ldr r0, _0803E400 - str r0, [r1] - ldr r0, _0803E404 - movs r1, 0 - str r1, [r0] - ldr r0, _0803E408 - strb r1, [r0] - ldr r0, _0803E40C - strh r1, [r0] - ldr r5, _0803E410 - ldrh r0, [r5, 0x6] - movs r3, 0xF - adds r2, r3, 0 - ands r2, r0 - ldrh r4, [r5] - ldr r1, _0803E414 - adds r0, r1, 0 - ands r0, r4 - ldr r4, _0803E418 - ands r0, r4 - ldr r6, _0803E41C - ands r0, r6 - ldr r7, _0803E420 - ands r0, r7 - ldr r4, _0803E424 - mov r12, r4 - ands r0, r4 - ldr r4, _0803E428 - ands r0, r4 - strh r0, [r5] - movs r0, 0x80 - lsls r0, 7 - strh r0, [r5, 0x2] - movs r0, 0 - strh r0, [r5, 0x4] - ldr r0, _0803E42C - mov r10, r0 - ands r2, r0 - subs r0, 0x1 - mov r9, r0 - ands r2, r0 - subs r0, 0x2 - mov r8, r0 - ands r2, r0 - strh r2, [r5, 0x6] - ldr r2, _0803E430 - ldrh r0, [r2, 0x6] - ands r3, r0 - ldrh r0, [r2] - ands r1, r0 - ldr r0, _0803E418 - ands r1, r0 - ands r1, r6 - ands r1, r7 - mov r7, r12 - ands r1, r7 - ands r1, r4 - strh r1, [r2] - movs r0, 0 - strh r0, [r2, 0x2] - movs r0, 0xB8 - lsls r0, 7 - strh r0, [r2, 0x4] - mov r0, r10 - ands r3, r0 - mov r1, r9 - ands r3, r1 - mov r7, r8 - ands r3, r7 - strh r3, [r2, 0x6] - movs r0, 0 - mov r8, r0 -_0803E2EE: - movs r1, 0 - mov r9, r1 - mov r2, r8 - lsls r0, r2, 3 - lsls r2, 1 - mov r12, r2 - mov r3, r8 - adds r3, 0x1 - str r3, [sp] - mov r10, r1 - add r0, r8 - lsls r5, r0, 3 - ldr r4, _0803E434 - adds r4, r5, r4 - str r4, [sp, 0x4] - ldr r7, _0803E438 - adds r6, r5, r7 - ldr r0, _0803E43C - adds r3, r5, r0 - ldr r1, _0803E440 - adds r4, r5, r1 -_0803E318: - mov r7, r10 - adds r2, r5, r7 - ldrh r1, [r3] - ldr r0, _0803E414 - ands r0, r1 - ldr r1, _0803E418 - ands r0, r1 - ldr r1, _0803E41C - ands r0, r1 - ldr r1, _0803E420 - ands r0, r1 - ldr r1, _0803E424 - ands r0, r1 - strh r0, [r3] - ldr r1, [r4] - movs r7, 0x3 - ands r1, r7 - lsls r1, 14 - ldr r7, _0803E428 - ands r0, r7 - orrs r0, r1 - strh r0, [r3] - ldrh r1, [r3, 0x2] - ldr r0, _0803E444 - ands r0, r1 - strh r0, [r3, 0x2] - ldr r1, _0803E440 - adds r1, 0x4 - adds r2, r1 - ldr r1, [r2] - movs r2, 0x3 - ands r1, r2 - lsls r1, 14 - ands r0, r7 - orrs r0, r1 - strh r0, [r3, 0x2] - ldr r1, [r6] - ldr r0, _0803E448 - ands r1, r0 - ldrh r2, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r2 - orrs r0, r1 - ldr r7, _0803E41C - ands r0, r7 - movs r1, 0xC0 - lsls r1, 4 - orrs r0, r1 - movs r2, 0 - orrs r0, r2 - ldr r1, _0803E44C - ands r0, r1 - strh r0, [r3, 0x4] - ldrh r1, [r3, 0x6] - ldr r0, _0803E42C - ands r0, r1 - ldr r1, _0803E450 - ands r0, r1 - strh r0, [r3, 0x6] - mov r7, r9 - lsls r1, r7, 2 - mov r0, r12 - add r0, r8 - lsls r0, 3 - adds r1, r0 - ldr r0, _0803E454 - adds r1, r0, r1 - ldr r0, [r1] - ldr r1, [sp, 0x4] - str r0, [r1] - adds r1, 0xC - str r1, [sp, 0x4] - adds r6, 0xC - adds r3, 0xC - adds r4, 0xC - movs r2, 0xC - add r10, r2 - movs r7, 0x1 - add r9, r7 - mov r0, r9 - cmp r0, 0x5 - ble _0803E318 - ldr r1, [sp] - mov r8, r1 - cmp r1, 0x1 - ble _0803E2EE - movs r2, 0 - ldr r3, _0803E458 - ldr r0, [r3] - ldr r4, _0803E45C - adds r0, r4 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r3] - ldr r7, _0803E460 - adds r0, r7 - strb r1, [r0] - ldr r0, _0803E464 - str r2, [r0] - movs r0, 0xF8 - ldr r1, _0803E468 - movs r3, 0 - bl SetBGPaletteBufferColorRGB - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803E3FC: .4byte gUnknown_202EDD0 -_0803E400: .4byte 0x000003e7 -_0803E404: .4byte gUnknown_202EDD4 -_0803E408: .4byte gUnknown_203B40D -_0803E40C: .4byte gUnknown_202EDE8 -_0803E410: .4byte gUnknown_202EDC0 -_0803E414: .4byte 0x0000feff -_0803E418: .4byte 0x0000fdff -_0803E41C: .4byte 0x0000f3ff -_0803E420: .4byte 0x0000efff -_0803E424: .4byte 0x0000dfff -_0803E428: .4byte 0x00003fff -_0803E42C: .4byte 0x0000fffe -_0803E430: .4byte gUnknown_202EDB8 -_0803E434: .4byte gUnknown_202ED30 -_0803E438: .4byte gUnknown_80F6224 -_0803E43C: .4byte gUnknown_202ED28 -_0803E440: .4byte gUnknown_80F621C -_0803E444: .4byte 0x0000c1ff -_0803E448: .4byte 0x000003ff -_0803E44C: .4byte 0x00000fff -_0803E450: .4byte 0x0000fffd -_0803E454: .4byte gUnknown_80F61EC -_0803E458: .4byte gDungeon -_0803E45C: .4byte 0x00018217 -_0803E460: .4byte 0x00018218 -_0803E464: .4byte gDungeonBrightness -_0803E468: .4byte gFontPalette + 0x20 - thumb_func_end sub_803E250 diff --git a/include/structs/str_202ED28.h b/include/structs/str_202ED28.h index 9ad561024..889f837a5 100644 --- a/include/structs/str_202ED28.h +++ b/include/structs/str_202ED28.h @@ -1,11 +1,12 @@ #ifndef GUARD_STR_202ED28_H #define GUARD_STR_202ED28_H +#include "structs/str_position.h" + struct unkStruct_202ED28 { SpriteOAM sprite; - s16 x; - s16 y; + DungeonPos pos; }; extern struct unkStruct_202ED28 gUnknown_202ED28[][6]; diff --git a/include/structs/str_202EDE8.h b/include/structs/str_202EDE8.h new file mode 100644 index 000000000..c13ade944 --- /dev/null +++ b/include/structs/str_202EDE8.h @@ -0,0 +1,18 @@ +#ifndef GUARD_STR_202EDE8_H +#define GUARD_STR_202EDE8_H + +#include "structs/dungeon_entity.h" + +struct UnkStruct_202EDE8 +{ + s16 unk0; + s16 unk2; + Entity *unk4; + s32 unk8; + s32 unkC; + s32 unk10; +}; + +extern struct UnkStruct_202EDE8 gUnknown_202EDE8; + +#endif diff --git a/ld_script.txt b/ld_script.txt index 3508fe4a8..a34b84c8e 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -196,7 +196,6 @@ SECTIONS { 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); src/code_803E724.o(.text); src/code_8040094.o(.text); diff --git a/src/code_803D110.c b/src/code_803D110.c index 6f40c9e93..82a23f61f 100644 --- a/src/code_803D110.c +++ b/src/code_803D110.c @@ -12,6 +12,8 @@ #include "game_options.h" #include "text.h" #include "constants/dungeon.h" +#include "structs/str_202ED28.h" +#include "structs/str_202EDE8.h" extern void sub_803E13C(void); extern void sub_80901D8(DungeonLocation *param_1,DungeonLocation *param_2); @@ -662,5 +664,90 @@ void sub_803E214(void) void nullsub_56(void) {} -// sub_803E250 left, but it seems to be sprite related, and I'd rather not deal with it now lol +extern u8 gUnknown_203B40D; +extern u32 gUnknown_202EDD0; +extern s32 gUnknown_202EDD4; +extern s32 gDungeonBrightness; +extern SpriteOAM gUnknown_202EDC0; +extern SpriteOAM gUnknown_202EDB8; + +extern const DungeonPos gUnknown_80F61EC[2][6]; + +struct Unk80F6224Struct +{ + s32 shape; + s32 size; + s32 tileNum; +}; + +extern const struct Unk80F6224Struct gUnknown_80F621C[2][6]; + +void sub_803E250(void) +{ + s32 i, j; + + gUnknown_202EDD0 = 999; + gUnknown_202EDD4 = 0; + gUnknown_203B40D = 0; + gUnknown_202EDE8.unk0 = 0; + + SpriteSetY(&gUnknown_202EDC0, 0); + SpriteSetAffine1(&gUnknown_202EDC0, 0); + SpriteSetAffine2(&gUnknown_202EDC0, 0); + SpriteSetObjMode(&gUnknown_202EDC0, 0); + SpriteSetMosaic(&gUnknown_202EDC0, 0); + SpriteSetBpp(&gUnknown_202EDC0, 0); + SpriteSetShape(&gUnknown_202EDC0, 0); + SpriteSetMatrixNum(&gUnknown_202EDC0, 0); + SpriteSetSize(&gUnknown_202EDC0, 1); + SpriteSetX(&gUnknown_202EDC0, 0); + SpriteSetTileNum(&gUnknown_202EDC0, 0); + SpriteSetPriority(&gUnknown_202EDC0, 0); + SpriteSetPalNum(&gUnknown_202EDC0, 0); + SpriteSetUnk6_0(&gUnknown_202EDC0, 0); + SpriteSetUnk6_1(&gUnknown_202EDC0, 0); + SpriteSetUnk6_2(&gUnknown_202EDC0, 0); + + SpriteSetY(&gUnknown_202EDB8, 0); + SpriteSetAffine1(&gUnknown_202EDB8, 0); + SpriteSetAffine2(&gUnknown_202EDB8, 0); + SpriteSetObjMode(&gUnknown_202EDB8, 0); + SpriteSetMosaic(&gUnknown_202EDB8, 0); + SpriteSetBpp(&gUnknown_202EDB8, 0); + SpriteSetShape(&gUnknown_202EDB8, 0); + SpriteSetMatrixNum(&gUnknown_202EDB8, 0); + SpriteSetSize(&gUnknown_202EDB8, 0); + SpriteSetX(&gUnknown_202EDB8, 0); + SpriteSetTileNum(&gUnknown_202EDB8, 0); + SpriteSetPriority(&gUnknown_202EDB8, 3); + SpriteSetPalNum(&gUnknown_202EDB8, 5); + SpriteSetUnk6_0(&gUnknown_202EDB8, 0); + SpriteSetUnk6_1(&gUnknown_202EDB8, 0); + SpriteSetUnk6_2(&gUnknown_202EDB8, 0); + + for (i = 0; i < 2; i++) { + for (j = 0; j < 6; j++) { + SpriteSetAffine1(&gUnknown_202ED28[i][j].sprite, 0); + SpriteSetAffine2(&gUnknown_202ED28[i][j].sprite, 0); + SpriteSetObjMode(&gUnknown_202ED28[i][j].sprite, 0); + SpriteSetMosaic(&gUnknown_202ED28[i][j].sprite, 0); + SpriteSetBpp(&gUnknown_202ED28[i][j].sprite, 0); + SpriteSetShape(&gUnknown_202ED28[i][j].sprite, gUnknown_80F621C[i][j].shape); + SpriteSetMatrixNum(&gUnknown_202ED28[i][j].sprite, 0); + SpriteSetSize(&gUnknown_202ED28[i][j].sprite, gUnknown_80F621C[i][j].size); + SpriteSetTileNum(&gUnknown_202ED28[i][j].sprite, gUnknown_80F621C[i][j].tileNum); + SpriteSetPriority(&gUnknown_202ED28[i][j].sprite, 3); + SpriteSetPalNum(&gUnknown_202ED28[i][j].sprite, 0); + SpriteSetUnk6_0(&gUnknown_202ED28[i][j].sprite, 0); + SpriteSetUnk6_1(&gUnknown_202ED28[i][j].sprite, 0); + + gUnknown_202ED28[i][j].pos = gUnknown_80F61EC[i][j]; + } + } + + gDungeon->unk181e8.unk18217 = 1; + gDungeon->unk181e8.unk18218 = 1; + gDungeonBrightness = 0; + SetBGPaletteBufferColorRGB(0xf8, &gFontPalette[8],0,NULL); +} diff --git a/src/code_803E724.c b/src/code_803E724.c index 85dcfaddc..eda267cbf 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -23,6 +23,7 @@ #include "constants/item.h" #include "constants/status.h" #include "code_803E724.h" +#include "structs/str_202EDE8.h" extern s32 gDungeonBrightness; extern u32 gUnknown_202EDD0; @@ -372,18 +373,6 @@ void sub_803ECE0(void) sub_80098BC((void *)VRAM + 0x14400, gUnknown_202EC94->unk4 + ((gUnknown_202EDD8 / 4) * 0x240), 0x240); } -struct UnkStruct_202EDE8 -{ - s16 unk0; - s16 unk2; - Entity *unk4; - s32 unk8; - s32 unkC; - s32 unk10; -}; - -extern struct UnkStruct_202EDE8 gUnknown_202EDE8; - void sub_803ED30(s32 a0, Entity *mon, u8 a2, s32 a3) { s32 i, var; diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index d32a61f91..0183aa9a3 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -2106,8 +2106,8 @@ void sub_806C51C(Entity *entity) if (xSprite >= -32 && ySprite >= -32 && xSprite <= 271 && ySprite <= 191 && r7 != 6 && entity->unk22 == 0) { struct unkStruct_202ED28 *spriteStructPtr = &gUnknown_202ED28[var_34][r7]; if (entInfo->unk156 != 0) { - SpriteSetX(&spriteStructPtr->sprite, xSprite + spriteStructPtr->x); - SpriteSetY(&spriteStructPtr->sprite, ySprite + spriteStructPtr->y); + SpriteSetX(&spriteStructPtr->sprite, xSprite + spriteStructPtr->pos.x); + SpriteSetY(&spriteStructPtr->sprite, ySprite + spriteStructPtr->pos.y); AddSprite(&spriteStructPtr->sprite, 0, NULL, NULL); } diff --git a/src/code_808333C.c b/src/code_808333C.c index e0635cd11..5a6a97171 100644 --- a/src/code_808333C.c +++ b/src/code_808333C.c @@ -9,8 +9,8 @@ bool8 sub_8083568(s32 inX, s32 inY, u8 index) if (x >= -16 && y >= -16 && x <= 255 && y <= 175) { - SpriteSetX(&gUnknown_202ED28[0][index].sprite, x + gUnknown_202ED28[0][index].x); - SpriteSetY(&gUnknown_202ED28[0][index].sprite, y + gUnknown_202ED28[0][index].y); + SpriteSetX(&gUnknown_202ED28[0][index].sprite, x + gUnknown_202ED28[0][index].pos.x); + SpriteSetY(&gUnknown_202ED28[0][index].sprite, y + gUnknown_202ED28[0][index].pos.y); AddSprite(&gUnknown_202ED28[0][index].sprite, 0, NULL, NULL); return TRUE;