diff --git a/asm/code_808333C.s b/asm/code_808333C.s deleted file mode 100644 index 4adc4d157..000000000 --- a/asm/code_808333C.s +++ /dev/null @@ -1,83 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8083568 -sub_8083568: - push {r4,r5,lr} - lsls r2, 24 - lsrs r5, r2, 24 - ldr r2, _080835E0 - ldr r2, [r2] - ldr r4, _080835E4 - adds r3, r2, r4 - movs r4, 0 - ldrsh r3, [r3, r4] - subs r3, r0, r3 - ldr r0, _080835E8 - adds r2, r0 - movs r4, 0 - ldrsh r0, [r2, r4] - subs r4, r1, r0 - movs r0, 0x10 - negs r0, r0 - cmp r3, r0 - blt _080835F8 - cmp r4, r0 - blt _080835F8 - cmp r3, 0xFF - bgt _080835F8 - cmp r4, 0xAF - bgt _080835F8 - ldr r1, _080835EC - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - movs r1, 0x8 - ldrsh r2, [r0, r1] - adds r2, r3, r2 - ldr r1, _080835F0 - ands r2, r1 - ldrh r3, [r0, 0x2] - movs r1, 0xFE - lsls r1, 8 - ands r1, r3 - orrs r1, r2 - strh r1, [r0, 0x2] - movs r1, 0xA - ldrsh r2, [r0, r1] - adds r2, r4, r2 - ldr r1, _080835F4 - ands r2, r1 - lsls r2, 4 - ldrh r3, [r0, 0x6] - movs r1, 0xF - ands r1, r3 - orrs r1, r2 - strh r1, [r0, 0x6] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl AddSprite - movs r0, 0x1 - b _080835FA - .align 2, 0 -_080835E0: .4byte gDungeon -_080835E4: .4byte 0x000181f0 -_080835E8: .4byte 0x000181f2 -_080835EC: .4byte gUnknown_202ED28 -_080835F0: .4byte 0x000001ff -_080835F4: .4byte 0x00000fff -_080835F8: - movs r0, 0 -_080835FA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8083568 - - .align 2, 0 diff --git a/ld_script.txt b/ld_script.txt index 220a146b0..6be088029 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -272,7 +272,7 @@ SECTIONS { asm/code_807FCD4.o(.text); src/code_8083288.o(.text); src/dungeon_range.o(.text); - asm/code_808333C.o(.text); + src/code_808333C.o(.text); src/dungeon_leader.o(.text); asm/code_8083654.o(.text); src/dungeon_music.o(.text); diff --git a/src/code_808333C.c b/src/code_808333C.c new file mode 100644 index 000000000..911c7021f --- /dev/null +++ b/src/code_808333C.c @@ -0,0 +1,61 @@ +#include "global.h" +#include "structs/str_dungeon.h" + +struct unkStruct_202ED28 +{ + SpriteOAM sp; + s16 unk8; + s16 unkA; +}; + +struct unkStruct_202ED28 gUnknown_202ED28[4]; // seeing index 3 used a lot + +bool8 sub_8083568(s32 inX, s32 inY, u8 index) { + s32 x; + s32 y; + SpriteOAM *sp; + s32 tmp2; +#ifdef NONMATCHING + s32 tmp; +#else + register s32 tmp asm("r2"); +#endif + + x = inX - gDungeon->cameraPixelPos.x; + y = inY - gDungeon->cameraPixelPos.y; + + if (x >= -16 && y >= -16 && x <= 255 && y <= 175) + { + struct unkStruct_202ED28 *ptr = gUnknown_202ED28; + sp = &ptr[index].sp; + + tmp = ptr[index].unk8; + tmp = x + ptr[index].unk8; + tmp &= SPRITEOAM_MASK_X; + + x = sp->attrib2; + tmp2 = (0xFE << 8); + tmp2 &= x; + tmp2 |= tmp; + sp->attrib2 = tmp2; + + tmp = ptr[index].unkA; + tmp = y + ptr[index].unkA; + tmp &= SPRITEOAM_MAX_UNK6_4; + tmp <<= SPRITEOAM_SHIFT_UNK6_4; + + x = sp->unk6; + tmp2 = 0xF; + tmp2 &= x; + tmp2 |= tmp; + sp->unk6 = tmp2; + + + AddSprite(sp, 0, NULL, NULL); + return TRUE; + } + else + { + return FALSE; + } +}