Finish Matching sprput.c

This commit is contained in:
gamemasterplc 2023-12-03 07:12:37 -06:00
parent 2bb8df1740
commit d21be86e45
3 changed files with 79 additions and 9 deletions

View file

@ -7,6 +7,7 @@
#include "dolphin/mtx.h" #include "dolphin/mtx.h"
#include "dolphin/gx/GXStruct.h" #include "dolphin/gx/GXStruct.h"
void Hu3DLayerHookSet(short layer, void (*func)(short layer));
void Hu3D2Dto3D(Vec3f*, s32, Vec3f*); void Hu3D2Dto3D(Vec3f*, s32, Vec3f*);
void Hu3DModelLightInfoSet(s32, s32); void Hu3DModelLightInfoSet(s32, s32);
void Hu3DBGColorSet(u8, u8, u8); void Hu3DBGColorSet(u8, u8, u8);
@ -200,6 +201,9 @@ AnimData *HuSprAnimMake(short sizeX, short sizeY, short dataFmt);
void HuSprBGSet(short group, short member, AnimData *bg, short bg_bank); void HuSprBGSet(short group, short member, AnimData *bg, short bg_bank);
void HuSprSprBGSet(short sprite, AnimData *bg, short bg_bank); void HuSprSprBGSet(short sprite, AnimData *bg, short bg_bank);
void AnimDebug(AnimData *anim); void AnimDebug(AnimData *anim);
void HuSprDispInit(void);
void HuSprDisp(SpriteData *sprite);
void HuSprTexLoad(AnimData *anim, short bmp, short slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter);
void HuWinAllKill(void); void HuWinAllKill(void);
void HuWinMesSet(s16, s32); void HuWinMesSet(s16, s32);

View file

@ -5,12 +5,10 @@ SpriteData HuSprData[384];
SpriteGroupData HuSprGrpData[256]; SpriteGroupData HuSprGrpData[256];
static SpriteOrderData HuSprOrder[384*2]; static SpriteOrderData HuSprOrder[384*2];
static short HuSprOrderNum; static short HuSprOrderNum;
static short HuSprOrderNo; static short HuSprOrderNo;
static BOOL HuSprPauseF; static BOOL HuSprPauseF;
void HuSprDisp(SpriteData *sprite);
static void HuSprOrderEntry(short group, short sprite); static void HuSprOrderEntry(short group, short sprite);

View file

@ -4,18 +4,19 @@
#include "dolphin/vi.h" #include "dolphin/vi.h"
static void *bmpNoCC[8]; static void *bmpNoCC[8];
static s16 HuSprLayerDrawNo[8]; static short HuSprLayerDrawNo[8];
static s16 bmpCCIdx; static short bmpCCIdx;
void HuSprTexLoad(AnimData *anim, short bmp, short slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter);
void mtxTransCat(Mtx matrix, float x, float y, float z); void mtxTransCat(Mtx matrix, float x, float y, float z);
static void HuSprLayerHook(short layer);
void HuSprDispInit(void) void HuSprDispInit(void)
{ {
Mtx44 proj; Mtx44 proj;
s16 i; short i;
for(i=0; i<8; i++) { for(i=0; i<8; i++) {
bmpNoCC[i] = NULL; bmpNoCC[i] = NULL;
} }
@ -40,12 +41,12 @@ void HuSprDispInit(void)
void HuSprDisp(SpriteData *sprite) void HuSprDisp(SpriteData *sprite)
{ {
s16 i; short i;
AnimData *anim = sprite->data; AnimData *anim = sprite->data;
AnimPatData *pat = sprite->pat_data; AnimPatData *pat = sprite->pat_data;
Vec axis = {0, 0, 1}; Vec axis = {0, 0, 1};
Mtx modelview, rot; Mtx modelview, rot;
s16 color_sum; short color_sum;
void (*func)(SpriteData *); void (*func)(SpriteData *);
GXSetScissor(sprite->scissor_x, sprite->scissor_y, sprite->scissor_w, sprite->scissor_h); GXSetScissor(sprite->scissor_x, sprite->scissor_y, sprite->scissor_w, sprite->scissor_h);
if(sprite->attr & 0x10) { if(sprite->attr & 0x10) {
@ -180,5 +181,72 @@ void HuSprDisp(SpriteData *sprite)
void HuSprTexLoad(AnimData *anim, short bmp, short slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter) void HuSprTexLoad(AnimData *anim, short bmp, short slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter)
{ {
GXTexObj tex_obj;
GXTlutObj tlut_obj;
AnimBmpData *bmp_ptr = &anim->bmp[bmp];
short sizeX = bmp_ptr->sizeX;
short sizeY = bmp_ptr->sizeY;
switch(bmp_ptr->dataFmt & 0xF) {
case 0:
GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_RGBA8, wrap_s, wrap_t, GX_FALSE);
break;
case 1:
case 2:
GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_RGB5A3, wrap_s, wrap_t, GX_FALSE);
break;
case 3:
GXInitTlutObj(&tlut_obj, bmp_ptr->palData, GX_TL_RGB5A3, bmp_ptr->palNum);
GXLoadTlut(&tlut_obj, slot);
GXInitTexObjCI(&tex_obj,bmp_ptr->data, sizeX, sizeY, GX_TF_C8, wrap_s, wrap_t, GX_FALSE, slot);
break;
case 4:
GXInitTlutObj(&tlut_obj, bmp_ptr->palData, GX_TL_RGB5A3, bmp_ptr->palNum);
GXLoadTlut(&tlut_obj, slot);
GXInitTexObjCI(&tex_obj,bmp_ptr->data, sizeX, sizeY, GX_TF_C4, wrap_s, wrap_t, GX_FALSE, slot);
break;
case 5:
GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_IA8, wrap_s, wrap_t, GX_FALSE);
break;
case 6:
GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_IA4, wrap_s, wrap_t, GX_FALSE);
break;
case 7:
GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_I8, wrap_s, wrap_t, GX_FALSE);
break;
case 8:
GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_I4, wrap_s, wrap_t, GX_FALSE);
break;
case 9:
GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_CTF_A8, wrap_s, wrap_t, GX_FALSE);
break;
case 10:
GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_CMPR, wrap_s, wrap_t, GX_FALSE);
break;
default:
break;
}
GXInitTexObjLOD(&tex_obj, filter, filter, 0, 0, 0, GX_FALSE, GX_FALSE, GX_ANISO_1);
GXLoadTexObj(&tex_obj, slot);
}
void HuSprExecLayerSet(short draw_no, short layer)
{
HuSprLayerDrawNo[layer] = draw_no;
Hu3DLayerHookSet(layer, HuSprLayerHook);
}
static void HuSprLayerHook(short layer)
{
HuSprDispInit();
HuSprExec(HuSprLayerDrawNo[layer]);
} }