145 lines
3.3 KiB
C
Executable file
145 lines
3.3 KiB
C
Executable file
#include "game/esprite.h"
|
|
#include "game/data.h"
|
|
#include "game/sprite.h"
|
|
|
|
typedef struct {
|
|
/* 0x00 */ u32 unk00;
|
|
/* 0x04 */ u16 unk04;
|
|
/* 0x06 */ char unk06[2];
|
|
/* 0x08 */ AnimData *unk08;
|
|
} UnkEspriteStruct01; // Size 0xC
|
|
|
|
s16 esprite[0x180][2];
|
|
UnkEspriteStruct01 espanim[0x180];
|
|
|
|
static s16 gid;
|
|
|
|
void espInit(void) {
|
|
s32 i;
|
|
|
|
gid = HuSprGrpCreate(0x180);
|
|
for (i = 0; i < 0x180; i++) {
|
|
esprite[i][0] = i;
|
|
esprite[i][1] = -1;
|
|
}
|
|
for (i = 0; i < 0x180; i++) {
|
|
espanim[i].unk04 = 0;
|
|
}
|
|
}
|
|
|
|
s16 espEntry(s32 arg0, s16 arg1, s16 arg2) {
|
|
UnkEspriteStruct01 *var_r30;
|
|
UnkEspriteStruct01 *var_r31;
|
|
s16 (*var_r29)[2];
|
|
void *temp_r26;
|
|
s16 temp_r25;
|
|
s16 var_r28;
|
|
s32 var_r27;
|
|
|
|
var_r29 = esprite;
|
|
for (var_r28 = 0; var_r28 < 0x180; var_r29++, var_r28++) {
|
|
if (var_r29[0][1] == -1) {
|
|
break;
|
|
}
|
|
}
|
|
if (var_r28 == 0x180) {
|
|
return -1;
|
|
}
|
|
var_r31 = espanim;
|
|
var_r30 = NULL;
|
|
for (var_r27 = 0; var_r27 < 0x180; var_r31++, var_r27++) {
|
|
if (var_r31->unk04 != 0) {
|
|
if (var_r31->unk00 == arg0) {
|
|
var_r30 = NULL;
|
|
break;
|
|
}
|
|
} else if (var_r30 == NULL) {
|
|
var_r30 = var_r31;
|
|
}
|
|
}
|
|
if (var_r27 == 0x180) {
|
|
if (var_r30 == NULL) {
|
|
return -1;
|
|
}
|
|
temp_r26 = HuDataSelHeapReadNum(arg0, MEMORY_DEFAULT_NUM, HEAP_DATA);
|
|
if (temp_r26 == NULL) {
|
|
return -1;
|
|
}
|
|
var_r30->unk00 = arg0;
|
|
var_r30->unk08 = HuSprAnimRead(temp_r26);
|
|
var_r31 = var_r30;
|
|
}
|
|
temp_r25 = HuSprCreate(var_r31->unk08, arg1, arg2);
|
|
if (temp_r25 == -1) {
|
|
if (var_r30 != NULL) {
|
|
HuSprAnimKill(var_r31->unk08);
|
|
}
|
|
return -1;
|
|
}
|
|
var_r31->unk04++;
|
|
var_r29[0][1] = var_r31 - espanim;
|
|
HuSprGrpMemberSet(gid, var_r29[0][0], temp_r25);
|
|
return var_r28;
|
|
}
|
|
|
|
void espKill(s16 arg0) {
|
|
HuSprGrpMemberKill(gid, esprite[arg0][0]);
|
|
espanim[esprite[arg0][1]].unk04--;
|
|
esprite[arg0][1] = -1;
|
|
}
|
|
|
|
s16 espGrpIDGet(void) {
|
|
return gid;
|
|
}
|
|
|
|
void espDispOn(s16 arg0) {
|
|
HuSprAttrReset(gid, esprite[arg0][0], 4);
|
|
}
|
|
|
|
void espDispOff(s16 arg0) {
|
|
HuSprAttrSet(gid, esprite[arg0][0], 4);
|
|
}
|
|
|
|
void espAttrSet(s16 arg0, u16 arg1) {
|
|
HuSprAttrSet(gid, esprite[arg0][0], arg1);
|
|
}
|
|
|
|
void espAttrReset(s16 arg0, u16 arg1) {
|
|
HuSprAttrReset(gid, esprite[arg0][0], arg1);
|
|
}
|
|
|
|
void espPosSet(s16 arg0, float arg1, float arg2) {
|
|
HuSprPosSet(gid, esprite[arg0][0], arg1, arg2);
|
|
}
|
|
|
|
void espScaleSet(s16 arg0, float arg1, float arg2) {
|
|
HuSprScaleSet(gid, esprite[arg0][0], arg1, arg2);
|
|
}
|
|
|
|
void espZRotSet(s16 arg0, float arg1) {
|
|
HuSprZRotSet(gid, esprite[arg0][0], arg1);
|
|
}
|
|
|
|
void espTPLvlSet(s16 arg0, float arg1) {
|
|
HuSprTPLvlSet(gid, esprite[arg0][0], arg1);
|
|
}
|
|
|
|
void espColorSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3) {
|
|
HuSprColorSet(gid, esprite[arg0][0], arg1, arg2, arg3);
|
|
}
|
|
|
|
void espSpeedSet(s16 arg0, float arg1) {
|
|
HuSprSpeedSet(gid, esprite[arg0][0], arg1);
|
|
}
|
|
|
|
void espBankSet(s16 arg0, s16 arg1) {
|
|
HuSprBankSet(gid, esprite[arg0][0], arg1);
|
|
}
|
|
|
|
void espDrawNoSet(s16 arg0, s16 arg1) {
|
|
HuSprDrawNoSet(gid, esprite[arg0][0], arg1);
|
|
}
|
|
|
|
void espPriSet(s16 arg0, s16 arg1) {
|
|
HuSprPriSet(gid, esprite[arg0][0], arg1);
|
|
}
|