mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-27 19:24:58 -05:00
EWRAM_DATA sprite.c
This commit is contained in:
129
src/sprite.c
129
src/sprite.c
@@ -3,17 +3,18 @@
|
||||
#include "random.h"
|
||||
#include "sprite.h"
|
||||
|
||||
extern u16 gUnknown_2025670; // Number of sprites in OAM?
|
||||
extern s16 gUnknown_2025672[8];
|
||||
extern s16 gUnknown_2025682[9];
|
||||
extern Position gUnknown_2025694;
|
||||
extern u32 gUnknown_2025698;
|
||||
extern SpriteList gUnknown_20256A0;
|
||||
extern UnkSpriteLink gUnknown_2025EA8[128];
|
||||
extern SpriteOAM gUnknown_20262A8[128];
|
||||
extern s32 gSpriteCount; /* 20266A8 */
|
||||
extern unkStruct_20266B0 gUnknown_20266B0[160];
|
||||
extern void *gCharMemCursor; /* 2026E30 */
|
||||
static EWRAM_DATA u16 sOAMSpriteCount; // Written to but never read
|
||||
static EWRAM_DATA s16 sUnknown_2025672[8];
|
||||
static EWRAM_DATA s16 sUnknown_2025682[9];
|
||||
static EWRAM_DATA Position sUnknown_2025694;
|
||||
static EWRAM_DATA u32 sUnknown_2025698;
|
||||
static EWRAM_DATA SpriteList sUnknown_20256A0;
|
||||
static EWRAM_DATA UnkSpriteLink sUnknown_2025EA8[128];
|
||||
static EWRAM_DATA SpriteOAM sUnknown_20262A8[128];
|
||||
static EWRAM_DATA s32 sSpriteCount; // 20266A8
|
||||
static EWRAM_DATA unkStruct_20266B0 sUnknown_20266B0[160];
|
||||
static EWRAM_DATA void *sCharMemCursor; // 2026E30
|
||||
|
||||
extern unkStruct_20266B0 *gUnknown_203B074;
|
||||
|
||||
// code.c
|
||||
@@ -37,11 +38,11 @@ void ResetSprites(bool8 a0)
|
||||
SpriteOAM *d;
|
||||
UnkSpriteLink *e;
|
||||
|
||||
gSpriteCount = 0;
|
||||
gCharMemCursor = OBJ_VRAM0;
|
||||
gUnknown_203B074 = &gUnknown_20266B0[0];
|
||||
sSpriteCount = 0;
|
||||
sCharMemCursor = OBJ_VRAM0;
|
||||
gUnknown_203B074 = &sUnknown_20266B0[0];
|
||||
|
||||
a = &gUnknown_20256A0.sprites[0];
|
||||
a = &sUnknown_20256A0.sprites[0];
|
||||
b = a + 1;
|
||||
|
||||
// 16 loops, very smart
|
||||
@@ -115,8 +116,8 @@ void ResetSprites(bool8 a0)
|
||||
|
||||
if (a0) {
|
||||
e = NULL;
|
||||
d = &gUnknown_20262A8[0];
|
||||
a = &gUnknown_2025EA8[0];
|
||||
d = &sUnknown_20262A8[0];
|
||||
a = &sUnknown_2025EA8[0];
|
||||
for (i = 0; i < 128; i++) {
|
||||
a->unk0 = e;
|
||||
a->unk4 = d;
|
||||
@@ -125,8 +126,8 @@ void ResetSprites(bool8 a0)
|
||||
}
|
||||
}
|
||||
|
||||
gUnknown_20256A0.unk800 = 0;
|
||||
gUnknown_20256A0.unk804 = 0;
|
||||
sUnknown_20256A0.unk800 = 0;
|
||||
sUnknown_20256A0.unk804 = 0;
|
||||
}
|
||||
|
||||
void sub_8004E8C(unkStruct_2039DB0 *a0)
|
||||
@@ -167,7 +168,7 @@ void sub_8004EA8(ax_pose *a0, axdata1 *a1, UnkSpriteMem *a2, u16 *spriteMasks)
|
||||
if (a2 != NULL)
|
||||
RegisterSpriteParts_80052BC(a2);
|
||||
|
||||
if (gSpriteCount >= 128)
|
||||
if (sSpriteCount >= 128)
|
||||
return;
|
||||
|
||||
sp.unk0 = a0->sprite;
|
||||
@@ -176,7 +177,7 @@ void sub_8004EA8(ax_pose *a0, axdata1 *a1, UnkSpriteMem *a2, u16 *spriteMasks)
|
||||
sp.flags2 = a0->flags2 & ~(0x200 | 0x400 | 0x800);
|
||||
sp.flags3 = a0->flags3;
|
||||
sp.unkA = ((a0->flags2 & (0x200 | 0x400 | 0x800)) >> 9) | ((a0->flags1 & (0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80 | 0x100 | 0x200)) << 4);
|
||||
sprite = gUnknown_20262A8 + gSpriteCount;
|
||||
sprite = sUnknown_20262A8 + sSpriteCount;
|
||||
r7 = a1->unk16 + sp.unk3;
|
||||
|
||||
if (r7 < 0)
|
||||
@@ -197,8 +198,8 @@ void sub_8004EA8(ax_pose *a0, axdata1 *a1, UnkSpriteMem *a2, u16 *spriteMasks)
|
||||
sprite->unk6 = sp.unkA;
|
||||
}
|
||||
|
||||
if (sp.unk2 != 0 && gUnknown_2025672[sp.unk2] != 0) {
|
||||
tileNum = gUnknown_2025672[sp.unk2] & 0x3FF;
|
||||
if (sp.unk2 != 0 && sUnknown_2025672[sp.unk2] != 0) {
|
||||
tileNum = sUnknown_2025672[sp.unk2] & 0x3FF;
|
||||
}
|
||||
else {
|
||||
tileNum = (sprite->attrib3 & 0x3FF) + a1->vramTileOrMaybeAnimTimer;
|
||||
@@ -236,11 +237,11 @@ void sub_8004EA8(ax_pose *a0, axdata1 *a1, UnkSpriteMem *a2, u16 *spriteMasks)
|
||||
sprite->attrib3 = ((a1->paletteNum & 0xF) << 12) | (sprite->attrib3 & earlyMask);
|
||||
|
||||
if (sp.unk2 != 0)
|
||||
sprite->attrib3 = ((gUnknown_2025682[sp.unk2] & 0xF) << 12) | (sprite->attrib3 & earlyMask);
|
||||
sprite->attrib3 = ((sUnknown_2025682[sp.unk2] & 0xF) << 12) | (sprite->attrib3 & earlyMask);
|
||||
|
||||
gUnknown_2025EA8[gSpriteCount].unk0 = gUnknown_20256A0.sprites[r7].unk0;
|
||||
gUnknown_20256A0.sprites[r7].unk0 = gUnknown_2025EA8 + gSpriteCount;
|
||||
gSpriteCount++;
|
||||
sUnknown_2025EA8[sSpriteCount].unk0 = sUnknown_20256A0.sprites[r7].unk0;
|
||||
sUnknown_20256A0.sprites[r7].unk0 = sUnknown_2025EA8 + sSpriteCount;
|
||||
sSpriteCount++;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
@@ -327,11 +328,11 @@ void sub_8004EA8(ax_pose *a0, axdata1 *a1, UnkSpriteMem *a2, u16 *spriteMasks)
|
||||
"\tstrh r0, [r1, 0x2]\n"
|
||||
"\tb _08004F86\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08004F40: .4byte gSpriteCount\n"
|
||||
"_08004F40: .4byte sSpriteCount\n"
|
||||
"_08004F44: .4byte 0x0000fcff\n"
|
||||
"_08004F48: .4byte 0x0000f1ff\n"
|
||||
"_08004F4C: .4byte 0x000003ff\n"
|
||||
"_08004F50: .4byte gUnknown_20262A8\n"
|
||||
"_08004F50: .4byte sUnknown_20262A8\n"
|
||||
"_08004F54:\n"
|
||||
"\tadd r4, sp, 0x4\n"
|
||||
"\tldrh r1, [r4]\n"
|
||||
@@ -377,7 +378,7 @@ void sub_8004EA8(ax_pose *a0, axdata1 *a1, UnkSpriteMem *a2, u16 *spriteMasks)
|
||||
"\tands r1, r0\n"
|
||||
"\tb _08004FC0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08004FA8: .4byte gUnknown_2025672\n"
|
||||
"_08004FA8: .4byte sUnknown_2025672\n"
|
||||
"_08004FAC: .4byte 0x000003ff\n"
|
||||
"_08004FB0:\n"
|
||||
"\tldrh r1, [r3, 0x4]\n"
|
||||
@@ -502,9 +503,9 @@ void sub_8004EA8(ax_pose *a0, axdata1 *a1, UnkSpriteMem *a2, u16 *spriteMasks)
|
||||
"_08005098: .4byte 0xffffff00\n"
|
||||
"_0800509C: .4byte 0x00000fff\n"
|
||||
"_080050A0: .4byte 0xfffffe00\n"
|
||||
"_080050A4: .4byte gUnknown_2025682\n"
|
||||
"_080050A8: .4byte gUnknown_2025EA8\n"
|
||||
"_080050AC: .4byte gUnknown_20256A0");
|
||||
"_080050A4: .4byte sUnknown_2025682\n"
|
||||
"_080050A8: .4byte sUnknown_2025EA8\n"
|
||||
"_080050AC: .4byte sUnknown_20256A0");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
@@ -517,10 +518,10 @@ void AddSprite(SpriteOAM *a0, s32 a1, UnkSpriteMem *a2, unkStruct_2039DB0 *a3)
|
||||
UnkSpriteLink *a;
|
||||
UnkSpriteLink *b;
|
||||
|
||||
if (gSpriteCount >= 128)
|
||||
if (sSpriteCount >= 128)
|
||||
return;
|
||||
|
||||
spr = &gUnknown_20262A8[gSpriteCount];
|
||||
spr = &sUnknown_20262A8[sSpriteCount];
|
||||
|
||||
if (a1 < 0)
|
||||
a1 = 0;
|
||||
@@ -549,14 +550,14 @@ void AddSprite(SpriteOAM *a0, s32 a1, UnkSpriteMem *a2, unkStruct_2039DB0 *a3)
|
||||
if (a2 != NULL)
|
||||
RegisterSpriteParts_80052BC(a2);
|
||||
|
||||
a = &gUnknown_2025EA8[0];
|
||||
a += gSpriteCount;
|
||||
b = &gUnknown_20256A0.sprites[0];
|
||||
a = &sUnknown_2025EA8[0];
|
||||
a += sSpriteCount;
|
||||
b = &sUnknown_20256A0.sprites[0];
|
||||
b += a1;
|
||||
a->unk0 = b->unk0;
|
||||
b->unk0 = a;
|
||||
|
||||
gSpriteCount++;
|
||||
sSpriteCount++;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
@@ -599,8 +600,8 @@ void AddSprite(SpriteOAM *a0, s32 a1, UnkSpriteMem *a2, unkStruct_2039DB0 *a3)
|
||||
"\tstrh r0, [r2, 0x2]\n"
|
||||
"\tb _08005128\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080050F4: .4byte gSpriteCount\n"
|
||||
"_080050F8: .4byte gUnknown_20262A8\n"
|
||||
"_080050F4: .4byte sSpriteCount\n"
|
||||
"_080050F8: .4byte sUnknown_20262A8\n"
|
||||
"_080050FC:\n"
|
||||
"\tldrh r1, [r6]\n"
|
||||
"\tldrh r0, [r4]\n"
|
||||
@@ -663,9 +664,9 @@ void AddSprite(SpriteOAM *a0, s32 a1, UnkSpriteMem *a2, unkStruct_2039DB0 *a3)
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08005174: .4byte gUnknown_2025EA8\n"
|
||||
"_08005178: .4byte gSpriteCount\n"
|
||||
"_0800517C: .4byte gUnknown_20256A0");
|
||||
"_08005174: .4byte sUnknown_2025EA8\n"
|
||||
"_08005178: .4byte sSpriteCount\n"
|
||||
"_0800517C: .4byte sUnknown_20256A0");
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -674,7 +675,7 @@ void sub_8005180(void)
|
||||
UnkSpriteLink *r1;
|
||||
UnkSpriteLink *r2;
|
||||
|
||||
r2 = &gUnknown_20256A0.sprites[0];
|
||||
r2 = &sUnknown_20256A0.sprites[0];
|
||||
r1 = r2;
|
||||
|
||||
if (r2 != NULL) {
|
||||
@@ -698,7 +699,7 @@ void CopySpritesToOam(void)
|
||||
vu16 *oam;
|
||||
s32 count;
|
||||
|
||||
sLink = &gUnknown_20256A0.sprites[0];
|
||||
sLink = &sUnknown_20256A0.sprites[0];
|
||||
oam = (vu16 *)(OAM + OAM_SIZE); // End of OAM. Work backwards
|
||||
count = 0;
|
||||
|
||||
@@ -738,19 +739,19 @@ void CopySpritesToOam(void)
|
||||
*oam = DISPLAY_HEIGHT;
|
||||
}
|
||||
|
||||
gUnknown_2025670 = count;
|
||||
sOAMSpriteCount = count;
|
||||
}
|
||||
|
||||
void SetSavingIconCoords(Position *pos)
|
||||
{
|
||||
if (pos == NULL) {
|
||||
gUnknown_2025694.x = 0;
|
||||
gUnknown_2025694.y = DISPLAY_HEIGHT;
|
||||
sUnknown_2025694.x = 0;
|
||||
sUnknown_2025694.y = DISPLAY_HEIGHT;
|
||||
}
|
||||
else {
|
||||
gUnknown_2025694.x = pos->x;
|
||||
gUnknown_2025694.y = pos->y;
|
||||
gUnknown_2025698 = 0;
|
||||
sUnknown_2025694.x = pos->x;
|
||||
sUnknown_2025694.y = pos->y;
|
||||
sUnknown_2025698 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -760,7 +761,7 @@ void BlinkSavingIcon(void)
|
||||
u32 uVar1;
|
||||
|
||||
oam = (u16 *)OAM;
|
||||
uVar1 = gUnknown_2025698++;
|
||||
uVar1 = sUnknown_2025698++;
|
||||
|
||||
if (uVar1 & 16) {
|
||||
// Set y to 160
|
||||
@@ -777,13 +778,13 @@ void BlinkSavingIcon(void)
|
||||
*oam = 0;
|
||||
}
|
||||
else {
|
||||
// Set y to gUnknown_2025694.y
|
||||
// Set y to sUnknown_2025694.y
|
||||
// Set affineMode/objMode/mosaic/bpp/shape to 0
|
||||
*oam++ = gUnknown_2025694.y;
|
||||
// Set x to gUnknown_2025694.x
|
||||
*oam++ = sUnknown_2025694.y;
|
||||
// Set x to sUnknown_2025694.x
|
||||
// Set matrixNum to 0
|
||||
// Set size to 1
|
||||
*oam++ = gUnknown_2025694.x + 0x4000;
|
||||
*oam++ = sUnknown_2025694.x + 0x4000;
|
||||
// Set tileNum to 0x3FC
|
||||
// Set priority to 0
|
||||
// Set paletteNum to 15
|
||||
@@ -794,13 +795,13 @@ void BlinkSavingIcon(void)
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING // https://decomp.me/scratch/taTIU
|
||||
extern u32 RegisterSpriteParts_80052BC_end[0] asm("gCharMemCursor");
|
||||
extern u32 RegisterSpriteParts_80052BC_end[0] asm("sCharMemCursor");
|
||||
void RegisterSpriteParts_80052BC(UnkSpriteMem *a0)
|
||||
{
|
||||
if (a0->byteCount) {
|
||||
unkStruct_20266B0 **r5 = &gUnknown_203B074;
|
||||
void *r6 = RegisterSpriteParts_80052BC_end;
|
||||
void **r4 = &gCharMemCursor;
|
||||
void **r4 = &sCharMemCursor;
|
||||
do {
|
||||
unkStruct_20266B0 *r2 = *r5;
|
||||
if ((uintptr_t)r2 >= (uintptr_t)r6)
|
||||
@@ -853,8 +854,8 @@ void RegisterSpriteParts_80052BC(UnkSpriteMem *a0)
|
||||
"\tbx r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080052F8: .4byte gUnknown_203B074\n"
|
||||
"_080052FC: .4byte gCharMemCursor\n"
|
||||
"_08005300: .4byte gCharMemCursor");
|
||||
"_080052FC: .4byte sCharMemCursor\n"
|
||||
"_08005300: .4byte sCharMemCursor");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
@@ -862,7 +863,7 @@ void sub_8005304(void)
|
||||
{
|
||||
unkStruct_20266B0 *s;
|
||||
|
||||
for (s = &gUnknown_20266B0[0]; s < gUnknown_203B074; s++) {
|
||||
for (s = &sUnknown_20266B0[0]; s < gUnknown_203B074; s++) {
|
||||
if (s->src != NULL)
|
||||
CpuCopy(s->dest, s->src, s->byteCount);
|
||||
else
|
||||
@@ -877,7 +878,7 @@ void sub_800533C(ax_pose **a0, UnkSpriteMem **a1, axdata1 *a2, u16 *spriteMasks,
|
||||
ax_pose *r4;
|
||||
|
||||
r4 = a0[a2->poseId];
|
||||
gCharMemCursor = OBJ_VRAM0 + (a2->vramTileOrMaybeAnimTimer * 0x20);
|
||||
sCharMemCursor = OBJ_VRAM0 + (a2->vramTileOrMaybeAnimTimer * 0x20);
|
||||
for (mem = NULL; (u16)r4->sprite != 0xFFFF || r4->unk2 != 0xFFFF; r4++, mem = NULL) {
|
||||
if (a4 != 0 && r4->sprite > -1)
|
||||
mem = a1[r4->sprite];
|
||||
@@ -941,7 +942,7 @@ void sub_800545C(EntitySpriteInfo *a0, Dungeon_ax *a1, u32 a2, u32 a3, u32 sprit
|
||||
a0->unk30 = 0;
|
||||
}
|
||||
|
||||
#if NONMATCHING // https://decomp.me/scratch/n4Umb
|
||||
#if NONMATCHING // 99.95% https://decomp.me/scratch/n4Umb
|
||||
void sub_80054BC(struct axPokemon *a0)
|
||||
{
|
||||
ax_anim *aData;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
|
||||
.include "src/m4a.o"
|
||||
|
||||
gUnknown_2000A80: /* 2000A80 */
|
||||
gUnknown_2000A80: /* 2000A80 (code_2) */
|
||||
.space 0x8
|
||||
|
||||
gUnknown_2000A88: /* 2000A88 */
|
||||
gUnknown_2000A88: /* 2000A88 (code / event_flag) */
|
||||
.space 0x400
|
||||
|
||||
.include "src/memory.o"
|
||||
@@ -16,81 +16,47 @@ gMainHeapDescriptor: /* 2000EB0 */
|
||||
|
||||
gMainHeapFreeList: /* 2000ED0 */
|
||||
.space 0x300
|
||||
|
||||
gMainHeap: /* 20011D0 */
|
||||
gMainHeap: /* 20011D0 (memory) */
|
||||
.space 0x24000
|
||||
|
||||
.include "src/bg_palette_buffer.o"
|
||||
.include "src/input.o"
|
||||
.include "src/sprite.o"
|
||||
|
||||
gUnknown_2026E38: /* 2026E38 (cpu / code_800558C) */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2025670: /* 2025670 */
|
||||
gUnknown_2026E3C: /* 2026E3C (cpu / code_800558C) */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E40: /* 2026E40 (code_800558C) */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E44: /* 2026E44 (code_800558C) */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E48: /* 2026E48 (code_800558C) */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E4C: /* 2026E4C (code_800558C) */
|
||||
.space 0x2
|
||||
|
||||
gUnknown_2025672: /* 2025672 */
|
||||
.space 0x10
|
||||
|
||||
gUnknown_2025682: /* 2025682 */
|
||||
.space 0x12
|
||||
|
||||
gUnknown_2025694: /* 2025694 */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2025698: /* 2025698 */
|
||||
.space 0x8
|
||||
|
||||
gUnknown_20256A0: /* 20256A0 */
|
||||
.space 0x808
|
||||
|
||||
gUnknown_2025EA8: /* 2025EA8 */
|
||||
.space 0x400
|
||||
|
||||
gUnknown_20262A8: /* 20262A8 */
|
||||
.space 0x400
|
||||
|
||||
gSpriteCount: /* 20266A8 */
|
||||
.space 0x8
|
||||
|
||||
gUnknown_20266B0: /* 20266B0 */
|
||||
.space 0x780
|
||||
|
||||
gCharMemCursor: /* 2026E30 */
|
||||
.space 0x8
|
||||
|
||||
gUnknown_2026E38: /* 2026E38 */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E3C: /* 2026E3C */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E40: /* 2026E40 */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E44: /* 2026E44 */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E48: /* 2026E48 */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E4C: /* 2026E4C */
|
||||
gUnknown_2026E4E: /* 2026E4E (code_800558C / code_2 / code_800DAC0 / code_8098BDC / code_80428A0 / code_8040094 / code_8098468 / ground_map_1 / code_8041AD0 / ground_map_2) */
|
||||
.space 0x2
|
||||
|
||||
gUnknown_2026E4E: /* 2026E4E */
|
||||
.space 0x2
|
||||
|
||||
gUnknown_2026E50: /* 2026E50 */
|
||||
gUnknown_2026E50: /* 2026E50 (code_800558C) */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E54: /* 2026E54 */
|
||||
gUnknown_2026E54: /* 2026E54 (code_800558C) */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_2026E58: /* 2026E58 */
|
||||
gUnknown_2026E58: /* 2026E58 (code_800558C) */
|
||||
.space 0x8
|
||||
|
||||
gUnknown_2026E60: /* 2026E60 */
|
||||
gUnknown_2026E60: /* 2026E60 (code_800558C) */
|
||||
.space 0x288
|
||||
|
||||
gUnknown_20270E8: /* 20270E8 */
|
||||
gUnknown_20270E8: /* 20270E8 (code_800558C) */
|
||||
.space 0x288
|
||||
|
||||
gUnknown_2027370: /* 2027370 */
|
||||
|
||||
Reference in New Issue
Block a user