tmc/src/affine.c

73 lines
2.0 KiB
C

#include "global.h"
#include "structures.h"
#include "main.h"
#include "room.h"
#include "screen.h"
extern u32 gFrameObjLists[];
extern void gUnk_03006164(void);
extern void gUnk_0300659C(OAMCommand*, void*);
extern void gUnk_03006580(OAMCommand*, u32, u32);
// regalloc
NONMATCH("asm/non_matching/vram/sub_080AD8F0.inc", void* sub_080AD8F0(u32 sprite, u32 frame)) {
u32 x = gFrameObjLists[sprite];
u8* y = (u8*)&gFrameObjLists[frame];
u32 tmp = *(u32*)&y[x];
return (u8*)gFrameObjLists + tmp;
}
END_NONMATCH
void FlushSprites(void) {
gUnk_03000000.updated = 0;
}
NONMATCH("asm/non_matching/vram/sub_080AD918.inc", void sub_080AD918(void)) {
s32 rem;
u16* d;
if (gMain.ticks.HALF.LO == 0) {
gUnk_03000000.unk[0x20].unk0 = gMain.ticks.HALF.LO;
gUnk_03000000.unk[0x48].unk4 = gMain.ticks.HALF.LO;
gUnk_03000000.unk[0x71].unk0 = gMain.ticks.HALF.LO;
gUnk_03000000.unk[0x99].unk4 = gMain.ticks.HALF.LO;
} else {
gMain.ticks.HALF.LO--;
}
rem = 0x80 - gUnk_03000000.updated;
for (d = (u16*)&gUnk_03000000.oam[0x80 + gUnk_03000000.updated]; rem > 0; rem--) {
*d = 0x2A0;
(u8*)d += 6;
}
if (gUnk_03000000.unk[0].unk7) {
gUnk_03000000.unk[0].unk7 = 0;
ObjAffineSet((struct ObjAffineSrcData*)gUnk_03000000.unk, &gUnk_03000000.oam[0].affineParam, 32, 8);
}
gUnk_03000000.field_0x0 = 1;
}
END_NONMATCH
void sub_080AD9B0(void) {
void (*fn)(void);
gUnk_03000000._0[6] = gScreenTransition.field_0x2c[3] ? 15 : 0;
gUnk_03000000._4 = gRoomControls.aff_x + gRoomControls.roomScrollX;
gUnk_03000000._6 = gRoomControls.aff_y + gRoomControls.roomScrollY;
gUnk_03000000.field_0x1++;
fn = &gUnk_03006164;
fn();
}
void sub_080ADA04(OAMCommand* cmd, void* dst) {
void (*fn)(OAMCommand*, void*) = gUnk_0300659C;
fn(cmd, dst);
}
void sub_080ADA14(u32 a1, u32 a2) {
void (*fn)(OAMCommand*, u32, u32) = gUnk_03006580;
fn(&gOamCmd, a1, a2);
}