decomp sub_8083568 thanks to @jiangzhengwenjz

This commit is contained in:
Seth Barberee 2023-12-27 20:24:27 -08:00
parent 973cad1733
commit f2a2f684fd
3 changed files with 62 additions and 84 deletions

View File

@ -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

View File

@ -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);

61
src/code_808333C.c Normal file
View File

@ -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;
}
}