Match CopySpritesToOam AND DISCOVER

This commit is contained in:
Kermalis
2023-08-11 12:13:01 -04:00
parent c16193eea7
commit c61c7df7e4
6 changed files with 63 additions and 75 deletions

View File

@@ -5,63 +5,6 @@
.text
thumb_func_start CopySpritesToOam
CopySpritesToOam:
push {r4-r6,lr}
ldr r3, _08005204
ldr r2, _08005208
movs r4, 0
ldr r6, _0800520C
cmp r3, 0
beq _080051E0
ldr r5, _08005210
_080051BC:
ldr r1, [r3, 0x4]
cmp r1, 0
beq _080051D6
subs r2, 0x4
ldrh r0, [r1, 0x4]
strh r0, [r2]
subs r2, 0x2
ldrh r0, [r1, 0x2]
strh r0, [r2]
subs r2, 0x2
ldrh r0, [r1]
strh r0, [r2]
adds r4, 0x1
_080051D6:
ldr r3, [r3]
cmp r3, 0
beq _080051E0
cmp r2, r5
bhi _080051BC
_080051E0:
ldr r1, _08005210
cmp r2, r1
bls _080051FA
movs r0, 0
movs r3, 0xA0
_080051EA:
subs r2, 0x4
strh r0, [r2]
subs r2, 0x2
strh r0, [r2]
subs r2, 0x2
strh r3, [r2]
cmp r2, r1
bhi _080051EA
_080051FA:
strh r4, [r6]
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08005204: .4byte gUnknown_20256A0
_08005208: .4byte 0x07000400
_0800520C: .4byte gUnknown_2025670
_08005210: .4byte 0x07000008
thumb_func_end CopySpritesToOam
thumb_func_start SetSavingIconCoords
SetSavingIconCoords:
push {lr}

View File

@@ -4,8 +4,11 @@
// size: 0x8
struct unkSprite
{
// y/affineMode/objMode/mosaic/bpp/shape
u16 unk0;
// x/matrixNum/size
u16 unk2;
// tileNum/priority/paletteNum
u16 unk4;
u16 unk6;
};
@@ -14,12 +17,6 @@ struct unkSprite
struct UnkSpriteLink
{
struct UnkSpriteLink *unk0;
struct UnkSpriteLink *unk4;
};
// size: 0x8
struct UnkSpriteLink2
{
struct unkSprite *unk0;
struct unkSprite *unk4;
};
@@ -42,6 +39,7 @@ struct unkStruct_2039DB0
u16 unkA;
};
void CopySpritesToOam(void);
void InitSprites(void);
void ResetSprites(bool8);
void sub_8004E8C(struct unkStruct_2039DB0 *);

View File

@@ -51,7 +51,6 @@ extern void nullsub_8(u32);
extern void sub_80060EC(void);
extern void sub_8011860(void);
extern void sub_800CB20(void);
extern void CopySpritesToOam(void);
extern void sub_8005304(void);
extern void TransferBGPaletteBuffer(void);
extern void xxx_call_update_bg_vram(void);

View File

@@ -38,7 +38,6 @@ EWRAM_DATA s16 gUnknown_202DE24;
void nullsub_8(u32);
void sub_8005838(u32, u32);
extern void CopySpritesToOam(void);
extern void sub_8005304(void);
extern void TransferBGPaletteBuffer(void);
extern void xxx_call_update_bg_vram(void);

View File

@@ -8,7 +8,6 @@ extern void sub_8011860();
extern void xxx_draw_string_80144C4();
extern void nullsub_8(u8);
extern void sub_800CB20();
extern void CopySpritesToOam();
extern void sub_8005304();
extern void TransferBGPaletteBuffer();
extern void xxx_call_update_bg_vram();

View File

@@ -1,8 +1,9 @@
#include "global.h"
#include "sprite.h"
extern u16 gUnknown_2025670;
extern struct SpriteList gUnknown_20256A0;
extern struct UnkSpriteLink2 gUnknown_2025EA8[128];
extern struct UnkSpriteLink gUnknown_2025EA8[128];
extern struct unkSprite gUnknown_20262A8[128];
extern u32 gSpriteCount; /* 20266A8 */
extern u32 gUnknown_20266B0;
@@ -20,10 +21,9 @@ void ResetSprites(bool8 a0)
s32 i;
struct UnkSpriteLink *a;
struct UnkSpriteLink *b;
struct UnkSpriteLink *c;
struct UnkSpriteLink2 *bro;
struct unkSprite *c;
struct unkSprite *d;
struct unkSprite *deez;
struct UnkSpriteLink *e;
gSpriteCount = 0;
gCharMemCursor = (u32*)0x6010000;
@@ -102,14 +102,14 @@ void ResetSprites(bool8 a0)
}
if (a0) {
deez = NULL;
e = NULL;
d = &gUnknown_20262A8[0];
bro = &gUnknown_2025EA8[0];
a = &gUnknown_2025EA8[0];
for (i = 0; i < 128; i++) {
bro->unk0 = deez;
bro->unk4 = d;
a->unk0 = e;
a->unk4 = d;
d++;
bro++;
a++;
}
}
@@ -571,4 +571,54 @@ void sub_8005180(void)
}
r2->unk0 = NULL;
}
void CopySpritesToOam(void)
{
struct UnkSpriteLink *sLink;
struct unkSprite *spr;
u16 *oam;
s32 count;
sLink = &gUnknown_20256A0.sprites[0];
oam = (u16 *)(OAM + OAM_SIZE); // End of OAM. Work backwards
count = 0;
while (sLink != NULL && (u32)oam > (OAM + sizeof(struct OamData))) {
spr = sLink->unk4;
// Each OAM entry is 8 bytes [struct OamData]
if (spr != NULL) {
// Skip affineParam
oam -= 2;
// Set tileNum/priority/paletteNum
*oam = spr->unk4;
// Set x/matrixNum/size
oam--;
*oam = spr->unk2;
// Set y/affineMode/objMode/mosaic/bpp/shape
oam--;
*oam = spr->unk0;
count++;
}
sLink = sLink->unk0;
}
// Clear remaining object slots
while ((u32)oam > (OAM + sizeof(struct OamData))) {
// Skip affineParam
oam -= 2;
// Set tileNum/priority/paletteNum
*oam = 0;
// Set x/matrixNum/size
oam--;
*oam = 0;
// Set y/affineMode/objMode/mosaic/bpp/shape
oam--;
*oam = DISPLAY_HEIGHT;
}
gUnknown_2025670 = count;
}