mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-28 03:34:22 -05:00
Match CopySpritesToOam AND DISCOVER
This commit is contained in:
57
asm/sprite.s
57
asm/sprite.s
@@ -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}
|
||||
|
||||
@@ -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 *);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
68
src/sprite.c
68
src/sprite.c
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user