diff --git a/include/structures.h b/include/structures.h index 52f2df1f..16187958 100644 --- a/include/structures.h +++ b/include/structures.h @@ -112,9 +112,11 @@ typedef struct { } WStruct; typedef struct { - u16 unk0; + u8 unk0; + u8 unk1; u16 unk2; - u16 unk4; + u8 unk4; + u8 unk5; u8 unk6; u8 unk7; } OAMObj; diff --git a/src/affine.c b/src/affine.c index dcec33a8..bd11f972 100644 --- a/src/affine.c +++ b/src/affine.c @@ -24,23 +24,26 @@ void FlushSprites(void) { gOAMControls.updated = 0; } -NONMATCH("asm/non_matching/vram/CopyOAM.inc", void CopyOAM(void)) { - s32 rem; +void CopyOAM(void) { u16* d; + s32 rem; - if (gMain.ticks.HALF.LO == 0) { - gOAMControls.unk[0x20].unk0 = gMain.ticks.HALF.LO; - gOAMControls.unk[0x48].unk4 = gMain.ticks.HALF.LO; - gOAMControls.unk[0x71].unk0 = gMain.ticks.HALF.LO; - gOAMControls.unk[0x99].unk4 = gMain.ticks.HALF.LO; + if (gMain.pad == 0) { + gOAMControls.unk[0x20].unk0 = 0; + gOAMControls.unk[0x48].unk4 = 0; + gOAMControls.unk[0x71].unk0 = 0; + gOAMControls.unk[0x99].unk4 = 0; } else { - gMain.ticks.HALF.LO--; + gMain.pad--; } rem = 0x80 - gOAMControls.updated; - for (d = (u16*)&gOAMControls.oam[0x80 + gOAMControls.updated]; rem > 0; rem--) { - *d = 0x2A0; - (u8*)d += 6; + if (rem > 0) { + d = (u16*)&gOAMControls.oam[gOAMControls.updated]; + for (; rem != 0; rem--) { + *d = 0x2A0; + (u8*)d += 8; + } } if (gOAMControls.unk[0].unk7) { gOAMControls.unk[0].unk7 = 0; @@ -48,7 +51,6 @@ NONMATCH("asm/non_matching/vram/CopyOAM.inc", void CopyOAM(void)) { } gOAMControls.field_0x0 = 1; } -END_NONMATCH void DrawEntities(void) { void (*fn)(void); diff --git a/src/code_0805EC04.c b/src/code_0805EC04.c index 93b41d3f..ecac5cfb 100644 --- a/src/code_0805EC04.c +++ b/src/code_0805EC04.c @@ -37,7 +37,7 @@ void sub_0805ECEC(int param_1, u32 param_2, u32 param_3, u32 param_4) { gOAMControls.unk[0].unk7 = 1; - temp = &gOAMControls.unk[param_1].unk0; + temp = (u16*)&gOAMControls.unk[param_1].unk0; temp[0] = param_2; temp[1] = param_3; temp[2] = param_4;