commit
782305038e
7 changed files with 213 additions and 181 deletions
|
|
@ -545,7 +545,8 @@ lbl_1_bss_13C = .bss:0x0000013C; // type:object size:0x4 data:4byte
|
|||
lbl_1_bss_140 = .bss:0x00000140; // type:object size:0x4 data:4byte
|
||||
lbl_1_bss_144 = .bss:0x00000144; // type:object size:0x4 data:4byte
|
||||
lbl_1_bss_148 = .bss:0x00000148; // type:object size:0x2 data:2byte
|
||||
lbl_1_bss_14C = .bss:0x0000014C; // type:object size:0x1C data:4byte
|
||||
lbl_1_bss_14C = .bss:0x0000014C; // type:object size:0x14 data:4byte
|
||||
lbl_1_bss_160 = .bss:0x00000160; // type:object size:0x8 data:4byte
|
||||
lbl_1_bss_168 = .bss:0x00000168; // type:object size:0x4 data:4byte
|
||||
lbl_1_bss_16C = .bss:0x0000016C; // type:object size:0xC00
|
||||
lbl_1_bss_D6C = .bss:0x00000D6C; // type:object size:0x30
|
||||
|
|
|
|||
|
|
@ -28,6 +28,23 @@ typedef struct {
|
|||
/* 0x40 */ char unk40[4];
|
||||
} HsfdrawStruct01; // Size 0x44
|
||||
|
||||
typedef struct hsf_draw_data {
|
||||
s32 dlOfs;
|
||||
s32 dlSize;
|
||||
u16 polyCnt;
|
||||
u32 flags;
|
||||
} HsfDrawData;
|
||||
|
||||
typedef struct hsf_const_data {
|
||||
u32 flags;
|
||||
s16 hook;
|
||||
HsfDrawData *drawData;
|
||||
void *dlBuf;
|
||||
Mtx matrix;
|
||||
AnimData *hiliteMap;
|
||||
} HsfConstData;
|
||||
|
||||
|
||||
void Hu3DDrawPreInit(void);
|
||||
void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2);
|
||||
s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2);
|
||||
|
|
|
|||
|
|
@ -159,16 +159,6 @@ typedef struct hsf_face {
|
|||
float nbt[3];
|
||||
} HsfFace;
|
||||
|
||||
typedef struct hsf_const_data {
|
||||
u32 flags;
|
||||
s16 hook;
|
||||
u8 unk6[2];
|
||||
void *unk08;
|
||||
void *unk0C;
|
||||
Mtx unk10;
|
||||
AnimData *hilite_map;
|
||||
} HsfConstData;
|
||||
|
||||
typedef struct hsf_transform {
|
||||
Vec pos;
|
||||
Vec rot;
|
||||
|
|
@ -312,10 +302,11 @@ typedef struct hsf_light {
|
|||
float ref_brightness;
|
||||
float cutoff;
|
||||
} HsfLight;
|
||||
|
||||
typedef struct hsf_object {
|
||||
char *name;
|
||||
u32 type;
|
||||
HsfConstData *constData;
|
||||
void *constData;
|
||||
u32 flags;
|
||||
union {
|
||||
HsfObjectData data;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include "game/audio.h"
|
||||
#include "game/frand.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/hsfdraw.h"
|
||||
#include "game/hsfmotion.h"
|
||||
#include "game/memory.h"
|
||||
#include "game/object.h"
|
||||
|
|
|
|||
34
src/REL/m408Dll/stage.c
Normal file
34
src/REL/m408Dll/stage.c
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#include "game/object.h"
|
||||
#include "game/objsub.h"
|
||||
#include "game/wipe.h"
|
||||
#include "game/chrman.h"
|
||||
#include "game/minigame_seq.h"
|
||||
#include "game/pad.h"
|
||||
|
||||
#include "game/hsfman.h"
|
||||
#include "game/hsfmotion.h"
|
||||
#include "game/hsfanim.h"
|
||||
#include "game/hsfdraw.h"
|
||||
#include "game/sprite.h"
|
||||
|
||||
#include "game/audio.h"
|
||||
#include "game/gamework_data.h"
|
||||
|
||||
#include "REL/m408Dll.h"
|
||||
|
||||
#include "math.h"
|
||||
#include "ext_math.h"
|
||||
|
||||
s32 lbl_1_bss_160[2];
|
||||
AnimData *lbl_1_bss_14C[5];
|
||||
s16 lbl_1_bss_148;
|
||||
s32 lbl_1_bss_144;
|
||||
u32 lbl_1_bss_140;
|
||||
omObjData *lbl_1_bss_13C;
|
||||
s32 lbl_1_bss_138;
|
||||
s32 lbl_1_bss_134;
|
||||
s32 lbl_1_bss_130;
|
||||
HsfConstData *lbl_1_bss_128[2];
|
||||
void *lbl_1_bss_120[2];
|
||||
HsfDrawData *lbl_1_bss_11C;
|
||||
s16 lbl_1_bss_118;
|
||||
|
|
@ -6,42 +6,34 @@
|
|||
#include "ext_math.h"
|
||||
#include "string.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ ModelData *unk00;
|
||||
/* 0x04 */ HsfObject *unk04;
|
||||
/* 0x08 */ float unk08;
|
||||
/* 0x0C */ Mtx unk0C;
|
||||
/* 0x3C */ Vec unk3C;
|
||||
} HsfdrawStruct00; // Size 0x48
|
||||
|
||||
typedef struct {
|
||||
s32 unk00;
|
||||
s32 unk04;
|
||||
u16 unk08;
|
||||
char unk0A[2];
|
||||
u32 unk0C;
|
||||
} DrawDataStruct; // Size 0x10
|
||||
typedef struct hsf_draw_object {
|
||||
/* 0x00 */ ModelData *model;
|
||||
/* 0x04 */ HsfObject *object;
|
||||
/* 0x08 */ float z;
|
||||
/* 0x0C */ Mtx matrix;
|
||||
/* 0x3C */ Vec scale;
|
||||
} HsfDrawObject;
|
||||
|
||||
static void objCall(ModelData *arg0, HsfObject *arg1);
|
||||
static void objMesh(ModelData *arg0, HsfObject *arg1);
|
||||
static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1);
|
||||
static void SetTevStageNoTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1);
|
||||
static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1);
|
||||
static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1);
|
||||
static void SetTevStageNoTex(HsfDrawObject *arg0, HsfMaterial *arg1);
|
||||
static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1);
|
||||
static GXTevKColorSel SetKColor(GXTevStageID arg0, u8 arg1);
|
||||
static GXTevKColorSel SetKColorRGB(GXTevStageID arg0, GXColor *arg1);
|
||||
static void FlushKColor(void);
|
||||
static void SetReflect(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2, u8 arg3);
|
||||
static void SetProjection(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2, s16 arg3, GXTexMapID arg4, u32 arg5);
|
||||
static void SetReflect(HsfDrawObject *arg0, s16 arg1, s16 arg2, u8 arg3);
|
||||
static void SetProjection(HsfDrawObject *arg0, s16 arg1, s16 arg2, s16 arg3, GXTexMapID arg4, u32 arg5);
|
||||
static void SetShadowTex(void);
|
||||
static void SetShadow(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2);
|
||||
static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfFace *arg1);
|
||||
static void SetShadow(HsfDrawObject *arg0, s16 arg1, s16 arg2);
|
||||
static void FaceDrawShadow(HsfDrawObject *arg0, HsfFace *arg1);
|
||||
static void LoadTexture(ModelData *arg0, HsfBitmap *arg1, HsfAttribute *arg2, s16 arg3);
|
||||
static void objNull(ModelData *arg0, HsfObject *arg1);
|
||||
static void objRoot(ModelData *arg0, HsfObject *arg1);
|
||||
static void objJoint(ModelData *arg0, HsfObject *arg1);
|
||||
static void objMap(ModelData *arg0, HsfObject *arg1);
|
||||
static void objReplica(ModelData *arg0, HsfObject *arg1);
|
||||
static void ObjDraw(HsfdrawStruct00 *arg0);
|
||||
static void ObjDraw(HsfDrawObject *arg0);
|
||||
static void MDObjCall(HsfData *arg0, HsfObject *arg1);
|
||||
static void MDObjMesh(HsfData *arg0, HsfObject *arg1);
|
||||
static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1);
|
||||
|
|
@ -53,7 +45,7 @@ void GXResetWriteGatherPipe(void);
|
|||
|
||||
static const Vec lbl_8011DD20 = { 0.0f, 0.0f, -1.0f };
|
||||
|
||||
static HsfdrawStruct00 DrawObjData[512];
|
||||
static HsfDrawObject DrawObjData[512];
|
||||
static HsfAttribute *BmpPtrBak[8];
|
||||
static Mtx MTXBuf[96];
|
||||
static Vec scaleBuf[96];
|
||||
|
|
@ -71,7 +63,7 @@ static u8 polyTypeBak;
|
|||
static s32 shadingBak;
|
||||
static void *DLBufP;
|
||||
static void *DLBufStartP;
|
||||
static DrawDataStruct *DrawData;
|
||||
static HsfDrawData *DrawData;
|
||||
static s32 drawCnt;
|
||||
static s16 lightBit;
|
||||
static s16 DrawObjIdx;
|
||||
|
|
@ -134,7 +126,7 @@ void Hu3DDrawPreInit(void) {
|
|||
}
|
||||
|
||||
void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2) {
|
||||
HsfdrawStruct00 *temp_r31;
|
||||
HsfDrawObject *temp_r31;
|
||||
HsfData *temp_r28;
|
||||
float temp_f31;
|
||||
Vec sp8;
|
||||
|
|
@ -143,13 +135,13 @@ void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2) {
|
|||
temp_r28 = arg0->hsfData;
|
||||
if (arg0->attr & 0x10) {
|
||||
temp_r31 = &DrawObjData[DrawObjIdx];
|
||||
PSMTXCopy(arg1, temp_r31->unk0C);
|
||||
sp8.x = temp_r31->unk0C[0][3];
|
||||
sp8.y = temp_r31->unk0C[1][3];
|
||||
sp8.z = temp_r31->unk0C[2][3];
|
||||
PSMTXCopy(arg1, temp_r31->matrix);
|
||||
sp8.x = temp_r31->matrix[0][3];
|
||||
sp8.y = temp_r31->matrix[1][3];
|
||||
sp8.z = temp_r31->matrix[2][3];
|
||||
temp_f31 = PSVECMag(&sp8);
|
||||
temp_r31->unk08 = temp_f31;
|
||||
temp_r31->unk00 = arg0;
|
||||
temp_r31->z = temp_f31;
|
||||
temp_r31->model = arg0;
|
||||
DrawObjIdx++;
|
||||
return;
|
||||
}
|
||||
|
|
@ -209,7 +201,7 @@ static void objCall(ModelData *arg0, HsfObject *arg1) {
|
|||
}
|
||||
|
||||
static void objMesh(ModelData *arg0, HsfObject *arg1) {
|
||||
HsfdrawStruct00 *temp_r29;
|
||||
HsfDrawObject *temp_r29;
|
||||
HsfConstData *temp_r25;
|
||||
HsfTransform *var_r30;
|
||||
HsfData *temp_r20;
|
||||
|
|
@ -252,14 +244,14 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) {
|
|||
temp_r28->x = temp_r24->x * var_r30->scale.x;
|
||||
temp_r28->y = temp_r24->y * var_r30->scale.y;
|
||||
temp_r28->z = temp_r24->z * var_r30->scale.z;
|
||||
temp_r29->unk3C = *temp_r28;
|
||||
temp_r29->scale = *temp_r28;
|
||||
if (arg1->flags & 1) {
|
||||
PSMTXInverse(MTXBuf[MTXIdx], sp1C);
|
||||
sp1C[0][3] = sp1C[1][3] = sp1C[2][3] = 0.0f;
|
||||
PSMTXConcat(MTXBuf[MTXIdx], sp1C, temp_r29->unk0C);
|
||||
mtxScaleCat(temp_r29->unk0C, temp_r28->x, temp_r28->y, temp_r28->z);
|
||||
PSMTXConcat(MTXBuf[MTXIdx], sp1C, temp_r29->matrix);
|
||||
mtxScaleCat(temp_r29->matrix, temp_r28->x, temp_r28->y, temp_r28->z);
|
||||
} else {
|
||||
PSMTXCopy(MTXBuf[MTXIdx], temp_r29->unk0C);
|
||||
PSMTXCopy(MTXBuf[MTXIdx], temp_r29->matrix);
|
||||
}
|
||||
MTXIdx++;
|
||||
var_r18 = 1;
|
||||
|
|
@ -267,16 +259,16 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) {
|
|||
if (arg1->flags & 1) {
|
||||
PSMTXInverse(MTXBuf[MTXIdx - 1], sp1C);
|
||||
sp1C[0][3] = sp1C[1][3] = sp1C[2][3] = 0.0f;
|
||||
PSMTXConcat(MTXBuf[MTXIdx - 1], sp1C, temp_r29->unk0C);
|
||||
mtxScaleCat(temp_r29->unk0C, scaleBuf[MTXIdx - 1].x, scaleBuf[MTXIdx - 1].y, scaleBuf[MTXIdx - 1].z);
|
||||
PSMTXConcat(MTXBuf[MTXIdx - 1], sp1C, temp_r29->matrix);
|
||||
mtxScaleCat(temp_r29->matrix, scaleBuf[MTXIdx - 1].x, scaleBuf[MTXIdx - 1].y, scaleBuf[MTXIdx - 1].z);
|
||||
} else {
|
||||
PSMTXCopy(MTXBuf[MTXIdx - 1], temp_r29->unk0C);
|
||||
PSMTXCopy(MTXBuf[MTXIdx - 1], temp_r29->matrix);
|
||||
}
|
||||
temp_r29->unk3C = scaleBuf[MTXIdx - 1];
|
||||
temp_r29->scale = scaleBuf[MTXIdx - 1];
|
||||
CancelTRXF = 0;
|
||||
var_r18 = 0;
|
||||
}
|
||||
PSMTXCopy(temp_r29->unk0C, temp_r25->unk10);
|
||||
PSMTXCopy(temp_r29->matrix, temp_r25->matrix);
|
||||
if (temp_r25->hook != -1) {
|
||||
temp_r31 = &Hu3DData[temp_r25->hook];
|
||||
if (!(temp_r31->attr & 1)) {
|
||||
|
|
@ -292,7 +284,7 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) {
|
|||
mtxRotCat(sp1C, temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z);
|
||||
mtxTransCat(sp1C, temp_r31->pos.x, temp_r31->pos.y, temp_r31->pos.z);
|
||||
PSMTXConcat(sp1C, temp_r31->unk_F0, sp1C);
|
||||
PSMTXConcat(temp_r29->unk0C, sp1C, MTXBuf[MTXIdx]);
|
||||
PSMTXConcat(temp_r29->matrix, sp1C, MTXBuf[MTXIdx]);
|
||||
temp_r28 = &scaleBuf[MTXIdx];
|
||||
temp_r24 = temp_r28 - 1;
|
||||
temp_r28->x = temp_r24->x * temp_r31->scale.x;
|
||||
|
|
@ -306,7 +298,7 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) {
|
|||
}
|
||||
} else {
|
||||
if (arg0->attr & 0x4000) {
|
||||
var_r19 = ObjCullCheck(arg0->hsfData, arg1, temp_r29->unk0C);
|
||||
var_r19 = ObjCullCheck(arg0->hsfData, arg1, temp_r29->matrix);
|
||||
} else {
|
||||
var_r19 = 1;
|
||||
}
|
||||
|
|
@ -314,17 +306,17 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) {
|
|||
var_r19 = 0;
|
||||
}
|
||||
if (var_r19 != 0 && (var_r30->scale.x != 0.0f || var_r30->scale.y != 0.0f || var_r30->scale.z != 0.0f)) {
|
||||
temp_r29->unk00 = arg0;
|
||||
temp_r29->unk04 = arg1;
|
||||
temp_r29->model = arg0;
|
||||
temp_r29->object = arg1;
|
||||
if ((temp_r25->flags & 0x10801) && shadowModelDrawF == 0) {
|
||||
sp10.x = temp_r29->unk0C[0][3];
|
||||
sp10.y = temp_r29->unk0C[1][3];
|
||||
sp10.z = temp_r29->unk0C[2][3];
|
||||
sp10.x = temp_r29->matrix[0][3];
|
||||
sp10.y = temp_r29->matrix[1][3];
|
||||
sp10.z = temp_r29->matrix[2][3];
|
||||
temp_f31 = PSVECMag(&sp10);
|
||||
if (temp_r25->flags & 0x10000) {
|
||||
temp_r29->unk08 = -(900000.0f - temp_f31);
|
||||
temp_r29->z = -(900000.0f - temp_f31);
|
||||
} else {
|
||||
temp_r29->unk08 = -(1000000.0f - temp_f31);
|
||||
temp_r29->z = -(1000000.0f - temp_f31);
|
||||
}
|
||||
DrawObjIdx++;
|
||||
if (DrawObjIdx > 0x200) {
|
||||
|
|
@ -332,7 +324,7 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) {
|
|||
DrawObjIdx--;
|
||||
}
|
||||
} else if (arg0->attr & 0x400000) {
|
||||
temp_r29->unk08 = -1000000.0f;
|
||||
temp_r29->z = -1000000.0f;
|
||||
DrawObjIdx++;
|
||||
if (DrawObjIdx > 0x200) {
|
||||
OSReport("Error: DrawObjIdx Over\n");
|
||||
|
|
@ -418,7 +410,7 @@ s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2) {
|
|||
}
|
||||
|
||||
// TODO: not matching (https://decomp.me/scratch/54Pjw)
|
||||
static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
||||
static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1) {
|
||||
GXColor sp2C;
|
||||
void *sp28;
|
||||
Hu3DTexAnimDataStruct *sp24;
|
||||
|
|
@ -438,8 +430,8 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
ModelData *temp_r29;
|
||||
HsfdrawStruct01 *temp_r23;
|
||||
|
||||
temp_r28 = arg0->unk04;
|
||||
temp_r29 = arg0->unk00;
|
||||
temp_r28 = arg0->object;
|
||||
temp_r29 = arg0->model;
|
||||
temp_r20 = temp_r28->constData;
|
||||
kColorIdx = 0;
|
||||
temp_r30 = &temp_r28->data.material[arg1->mat & 0xFFF];
|
||||
|
|
@ -554,7 +546,7 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
hiliteMapNo = 3;
|
||||
}
|
||||
if ((temp_r29->attr & 0x20000) || (temp_r19 & 0x100)) {
|
||||
if (temp_r20->hilite_map == 0) {
|
||||
if (temp_r20->hiliteMap == 0) {
|
||||
if (temp_r30->flags != 0) {
|
||||
var_r18 = (temp_r30->pass >> 4) & 0xF;
|
||||
} else {
|
||||
|
|
@ -562,14 +554,14 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
}
|
||||
HuSprTexLoad(hiliteAnim[var_r18], 0, hiliteMapNo, GX_CLAMP, GX_CLAMP, GX_LINEAR);
|
||||
} else {
|
||||
HuSprTexLoad(temp_r20->hilite_map, 0, hiliteMapNo, GX_CLAMP, GX_CLAMP, GX_LINEAR);
|
||||
HuSprTexLoad(temp_r20->hiliteMap, 0, hiliteMapNo, GX_CLAMP, GX_CLAMP, GX_LINEAR);
|
||||
}
|
||||
BmpPtrBak[hiliteMapNo] = (HsfAttribute*) -1;
|
||||
}
|
||||
SetTevStageNoTex(arg0, temp_r30);
|
||||
} else {
|
||||
var_r22 = (temp_r30->vtxMode == 5) ? 5 : 1;
|
||||
if (DrawData[drawCnt].unk0C & 2) {
|
||||
if (DrawData[drawCnt].flags & 2) {
|
||||
var_r22 |= 2;
|
||||
}
|
||||
if (var_r22 != vtxModeBak) {
|
||||
|
|
@ -610,7 +602,7 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
temp_r23 = temp_r26->unk04;
|
||||
sp24 = &Hu3DTexAnimData[temp_r23->unk02];
|
||||
if ((temp_r23->unk00 & 1) && !(sp24->unk00 & 4)) {
|
||||
if (Hu3DAnimSet(arg0->unk00, temp_r26, (s16) var_r31) != 0) {
|
||||
if (Hu3DAnimSet(arg0->model, temp_r26, (s16) var_r31) != 0) {
|
||||
BmpPtrBak[var_r31] = (HsfAttribute*) -1;
|
||||
totalTexCnt++;
|
||||
continue;
|
||||
|
|
@ -618,10 +610,10 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
} else if (temp_r23->unk00 & 8) {
|
||||
temp_r27 = temp_r23->unk3C;
|
||||
if (temp_r27->dataFmt != 0xB) {
|
||||
LoadTexture(arg0->unk00, temp_r27, temp_r26, (s16) var_r31);
|
||||
LoadTexture(arg0->model, temp_r27, temp_r26, (s16) var_r31);
|
||||
} else {
|
||||
LoadTexture(arg0->unk00, temp_r23->unk3C, temp_r26, (s16) var_r31);
|
||||
LoadTexture(arg0->unk00, temp_r23->unk3C, temp_r26, var_r21 | 0x8000);
|
||||
LoadTexture(arg0->model, temp_r23->unk3C, temp_r26, (s16) var_r31);
|
||||
LoadTexture(arg0->model, temp_r23->unk3C, temp_r26, var_r21 | 0x8000);
|
||||
texCol[var_r31].r = (s16) var_r21;
|
||||
texCol[var_r31].a = 2;
|
||||
var_r21++;
|
||||
|
|
@ -646,10 +638,10 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
} else {
|
||||
texCol[var_r31].a = 0;
|
||||
if (temp_r27->dataFmt != 0xB) {
|
||||
LoadTexture(arg0->unk00, temp_r27, temp_r26, (s16) var_r31);
|
||||
LoadTexture(arg0->model, temp_r27, temp_r26, (s16) var_r31);
|
||||
} else {
|
||||
LoadTexture(arg0->unk00, temp_r27, temp_r26, (s16) var_r31);
|
||||
LoadTexture(arg0->unk00, temp_r27, temp_r26, var_r21 | 0x8000);
|
||||
LoadTexture(arg0->model, temp_r27, temp_r26, (s16) var_r31);
|
||||
LoadTexture(arg0->model, temp_r27, temp_r26, var_r21 | 0x8000);
|
||||
texCol[var_r31].r = (s16) var_r21;
|
||||
texCol[var_r31].a = 2;
|
||||
var_r21++;
|
||||
|
|
@ -706,7 +698,7 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
hiliteMapNo = projectionMapNo;
|
||||
}
|
||||
if ((temp_r29->attr & 0x20000) || (temp_r19 & 0x100)) {
|
||||
if (temp_r20->hilite_map == 0) {
|
||||
if (temp_r20->hiliteMap == 0) {
|
||||
if (temp_r30->flags != 0) {
|
||||
var_r18 = (temp_r30->pass >> 4) & 0xF;
|
||||
} else {
|
||||
|
|
@ -714,22 +706,22 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
}
|
||||
HuSprTexLoad(hiliteAnim[var_r18], 0, hiliteMapNo, GX_CLAMP, GX_CLAMP, GX_LINEAR);
|
||||
} else {
|
||||
HuSprTexLoad(temp_r20->hilite_map, 0, hiliteMapNo, GX_CLAMP, GX_CLAMP, GX_LINEAR);
|
||||
HuSprTexLoad(temp_r20->hiliteMap, 0, hiliteMapNo, GX_CLAMP, GX_CLAMP, GX_LINEAR);
|
||||
}
|
||||
BmpPtrBak[toonMapNo] = (HsfAttribute*) -1;
|
||||
}
|
||||
SetTevStageTex(arg0, temp_r30);
|
||||
}
|
||||
sp28 = (u8*) DLBufStartP + DrawData[drawCnt].unk00;
|
||||
GXCallDisplayList(sp28, DrawData[drawCnt].unk04);
|
||||
sp28 = (u8*) DLBufStartP + DrawData[drawCnt].dlOfs;
|
||||
GXCallDisplayList(sp28, DrawData[drawCnt].dlSize);
|
||||
} else {
|
||||
sp28 = (u8*) DLBufStartP + DrawData[drawCnt].unk00;
|
||||
GXCallDisplayList(sp28, DrawData[drawCnt].unk04);
|
||||
sp28 = (u8*) DLBufStartP + DrawData[drawCnt].dlOfs;
|
||||
GXCallDisplayList(sp28, DrawData[drawCnt].dlSize);
|
||||
}
|
||||
drawCnt++;
|
||||
}
|
||||
|
||||
static void SetTevStageNoTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
||||
static void SetTevStageNoTex(HsfDrawObject *arg0, HsfMaterial *arg1) {
|
||||
GXColor sp1C;
|
||||
ModelData *temp_r28;
|
||||
HsfObject *var_r21;
|
||||
|
|
@ -750,8 +742,8 @@ static void SetTevStageNoTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
|||
|
||||
var_r30 = 1;
|
||||
var_r29 = 0;
|
||||
var_r21 = arg0->unk04;
|
||||
temp_r28 = arg0->unk00;
|
||||
var_r21 = arg0->object;
|
||||
temp_r28 = arg0->model;
|
||||
sp18 = var_r21->flags | arg1->flags;
|
||||
if (arg1->vtxMode == 2 || arg1->vtxMode == 3) {
|
||||
var_r26 = 1;
|
||||
|
|
@ -859,7 +851,7 @@ static void SetTevStageNoTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
|||
} else {
|
||||
var_f30 = 0.0f;
|
||||
}
|
||||
lightBit = Hu3DLightSet(arg0->unk00, &Hu3DCameraMtx, &Hu3DCameraMtxXPose, var_f30);
|
||||
lightBit = Hu3DLightSet(arg0->model, &Hu3DCameraMtx, &Hu3DCameraMtxXPose, var_f30);
|
||||
}
|
||||
if (var_r26 != 0) {
|
||||
GXSetNumChans(2);
|
||||
|
|
@ -902,11 +894,7 @@ static Mtx refMtx = {
|
|||
{ 0.0f, 0.0f, 0.25f, -0.5f }
|
||||
};
|
||||
|
||||
static inline void SetTevStageTexInlineFunc(u16 arg0, u32 arg1) {
|
||||
GXSetTexCoordGen2(arg0, GX_TG_MTX2x4, GX_TG_TEX0, arg1, GX_FALSE, GX_PTIDENTITY);
|
||||
}
|
||||
|
||||
static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
||||
static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1) {
|
||||
GXColor sp50;
|
||||
GXTexMapID sp4C;
|
||||
GXTevStageID sp48;
|
||||
|
|
@ -934,8 +922,8 @@ static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
|||
|
||||
sp8 = 0;
|
||||
var_r20 = -1;
|
||||
temp_r19 = arg0->unk04;
|
||||
temp_r25 = arg0->unk00;
|
||||
temp_r19 = arg0->object;
|
||||
temp_r25 = arg0->model;
|
||||
sp40 = temp_r19->flags | arg1->flags;
|
||||
if (arg1->vtxMode == 2 || arg1->vtxMode == 3) {
|
||||
var_r21 = 1;
|
||||
|
|
@ -963,11 +951,11 @@ static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
|||
PSMTXScale(sp54, 1.0f / temp_r29->unk28, 1.0f / temp_r29->unk2C, 1.0f);
|
||||
mtxTransCat(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f);
|
||||
GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4);
|
||||
SetTevStageTexInlineFunc(GX_TEXCOORD0, texMtxTbl[var_r30]);
|
||||
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]);
|
||||
} else if (temp_r29->unk30 != 0.0f || temp_r29->unk34 != 0.0f) {
|
||||
PSMTXTrans(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f);
|
||||
GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4);
|
||||
SetTevStageTexInlineFunc(GX_TEXCOORD0, texMtxTbl[var_r30]);
|
||||
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]);
|
||||
} else {
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
|
||||
}
|
||||
|
|
@ -1152,7 +1140,7 @@ static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
|||
temp_r28 = temp_r29->unk04;
|
||||
if (temp_r28->unk00 & 2) {
|
||||
GXLoadTexMtxImm(Hu3DTexScrData[temp_r28->unk04].unk3C, texMtxTbl[var_r30], GX_MTX2x4);
|
||||
SetTevStageTexInlineFunc(var_r30, texMtxTbl[var_r30]);
|
||||
GXSetTexCoordGen(var_r30, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]);
|
||||
temp_r23 = (u16) var_r30;
|
||||
var_r30++;
|
||||
} else if (temp_r28->unk00 & 4) {
|
||||
|
|
@ -1160,14 +1148,14 @@ static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
|||
mtxRotCat(sp54, temp_r28->unk14, temp_r28->unk18, temp_r28->unk1C);
|
||||
mtxTransCat(sp54, -temp_r28->unk08, -temp_r28->unk0C, -temp_r28->unk10);
|
||||
GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4);
|
||||
SetTevStageTexInlineFunc(var_r30, texMtxTbl[var_r30]);
|
||||
GXSetTexCoordGen(var_r30, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]);
|
||||
temp_r23 = (u16) var_r30;
|
||||
var_r30++;
|
||||
} else if (temp_r28->unk00 & 1) {
|
||||
PSMTXScale(sp54, temp_r28->unk2C, temp_r28->unk30, 1.0f);
|
||||
mtxTransCat(sp54, temp_r28->unk34, temp_r28->unk38, 0.0f);
|
||||
GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4);
|
||||
SetTevStageTexInlineFunc(var_r30, texMtxTbl[var_r30]);
|
||||
GXSetTexCoordGen(var_r30, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]);
|
||||
temp_r23 = (u16) var_r30;
|
||||
var_r30++;
|
||||
} else {
|
||||
|
|
@ -1180,11 +1168,11 @@ static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
|||
PSMTXScale(sp54, 1.0f / temp_r29->unk28, 1.0f / temp_r29->unk2C, 1.0f);
|
||||
mtxTransCat(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f);
|
||||
GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4);
|
||||
SetTevStageTexInlineFunc(var_r30, texMtxTbl[var_r30]);
|
||||
GXSetTexCoordGen(var_r30, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]);
|
||||
} else if (temp_r29->unk30 != 0.0f || temp_r29->unk34 != 0.0f) {
|
||||
PSMTXTrans(sp54, -temp_r29->unk30, -temp_r29->unk34, 0.0f);
|
||||
GXLoadTexMtxImm(sp54, texMtxTbl[var_r30], GX_MTX2x4);
|
||||
SetTevStageTexInlineFunc(var_r30, texMtxTbl[var_r30]);
|
||||
GXSetTexCoordGen(var_r30, GX_TG_MTX2x4, GX_TG_TEX0, texMtxTbl[var_r30]);
|
||||
} else {
|
||||
GXSetTexCoordGen2(var_r30, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
|
||||
}
|
||||
|
|
@ -1323,8 +1311,8 @@ static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
|||
GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV);
|
||||
GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
|
||||
}
|
||||
PSMTXScale(sp54, 1.0f / arg0->unk3C.x, 1.0f / arg0->unk3C.y, 1.0f / arg0->unk3C.z);
|
||||
PSMTXConcat(arg0->unk0C, sp54, sp54);
|
||||
PSMTXScale(sp54, 1.0f / arg0->scale.x, 1.0f / arg0->scale.y, 1.0f / arg0->scale.z);
|
||||
PSMTXConcat(arg0->matrix, sp54, sp54);
|
||||
sp54[0][3] = sp54[1][3] = sp54[2][3] = 0.0f;
|
||||
PSMTXConcat(sp54, Hu3DCameraMtxXPose, sp54);
|
||||
PSMTXConcat(refMtx, sp54, sp54);
|
||||
|
|
@ -1423,7 +1411,7 @@ static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1) {
|
|||
} else {
|
||||
var_f30 = 0.0f;
|
||||
}
|
||||
lightBit = Hu3DLightSet(arg0->unk00, &Hu3DCameraMtx, &Hu3DCameraMtxXPose, var_f30);
|
||||
lightBit = Hu3DLightSet(arg0->model, &Hu3DCameraMtx, &Hu3DCameraMtxXPose, var_f30);
|
||||
}
|
||||
if (var_r21 != 0) {
|
||||
GXSetNumChans(2);
|
||||
|
|
@ -1545,7 +1533,7 @@ static void FlushKColor(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static void SetReflect(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2, u8 arg3) {
|
||||
static void SetReflect(HsfDrawObject *arg0, s16 arg1, s16 arg2, u8 arg3) {
|
||||
GXTevKColorSel var_r27;
|
||||
Mtx sp3C;
|
||||
Mtx spC;
|
||||
|
|
@ -1576,15 +1564,15 @@ static void SetReflect(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2, u8 arg3) {
|
|||
GXSetTevColorOp(arg1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(arg1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV);
|
||||
GXSetTevAlphaOp(arg1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
|
||||
PSMTXScale(sp3C, 1.0f / arg0->unk3C.x, 1.0f / arg0->unk3C.y, 1.0f / arg0->unk3C.z);
|
||||
PSMTXConcat(arg0->unk0C, sp3C, spC);
|
||||
PSMTXScale(sp3C, 1.0f / arg0->scale.x, 1.0f / arg0->scale.y, 1.0f / arg0->scale.z);
|
||||
PSMTXConcat(arg0->matrix, sp3C, spC);
|
||||
spC[0][3] = spC[1][3] = spC[2][3] = 0.0f;
|
||||
PSMTXConcat(spC, Hu3DCameraMtxXPose, sp3C);
|
||||
PSMTXConcat(refMtx, sp3C, spC);
|
||||
GXLoadTexMtxImm(spC, GX_TEXMTX8, GX_MTX2x4);
|
||||
}
|
||||
|
||||
static void SetProjection(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2, s16 arg3, GXTexMapID arg4, u32 arg5) {
|
||||
static void SetProjection(HsfDrawObject *arg0, s16 arg1, s16 arg2, s16 arg3, GXTexMapID arg4, u32 arg5) {
|
||||
GXTevKColorSel var_r26;
|
||||
u8 temp_r30;
|
||||
|
||||
|
|
@ -1631,7 +1619,7 @@ static void SetShadowTex(void) {
|
|||
GXLoadTexObj(&sp8, shadowMapNo);
|
||||
}
|
||||
|
||||
static void SetShadow(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2) {
|
||||
static void SetShadow(HsfDrawObject *arg0, s16 arg1, s16 arg2) {
|
||||
GXSetTexCoordGen2(arg2, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX9, GX_FALSE, GX_PTIDENTITY);
|
||||
GXSetTevOrder(arg1, arg2, shadowMapNo, GX_COLOR0A0);
|
||||
GXSetTevColorIn(arg1, GX_CC_CPREV, GX_CC_ZERO, GX_CC_TEXC, GX_CC_ZERO);
|
||||
|
|
@ -1640,7 +1628,7 @@ static void SetShadow(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2) {
|
|||
GXSetTevAlphaOp(arg1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
|
||||
}
|
||||
|
||||
static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
||||
static void FaceDrawShadow(HsfDrawObject *arg0, HsfFace *arg1) {
|
||||
HsfObject *temp_r31;
|
||||
ModelData *temp_r28;
|
||||
HsfConstData *temp_r27;
|
||||
|
|
@ -1649,8 +1637,8 @@ static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
GXColor spC;
|
||||
s16 var_r30;
|
||||
|
||||
temp_r31 = arg0->unk04;
|
||||
temp_r28 = arg0->unk00;
|
||||
temp_r31 = arg0->object;
|
||||
temp_r28 = arg0->model;
|
||||
temp_r27 = temp_r31->constData;
|
||||
temp_r29 = &temp_r31->data.material[arg1->mat & 0xFFF];
|
||||
if (temp_r29 != materialBak) {
|
||||
|
|
@ -1694,7 +1682,7 @@ static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
} else {
|
||||
var_r30 = (temp_r29->vtxMode == 5) ? 5 : 1;
|
||||
if (DrawData[drawCnt].unk0C & 2) {
|
||||
if (DrawData[drawCnt].flags & 2) {
|
||||
var_r30 |= 2;
|
||||
}
|
||||
if (var_r30 != vtxModeBak) {
|
||||
|
|
@ -1736,15 +1724,15 @@ static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfFace *arg1) {
|
|||
}
|
||||
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
|
||||
GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
|
||||
var_r26 = (u8*) DLBufStartP + DrawData[drawCnt].unk00;
|
||||
GXCallDisplayList(var_r26, DrawData[drawCnt].unk04);
|
||||
var_r26 = (u8*) DLBufStartP + DrawData[drawCnt].dlOfs;
|
||||
GXCallDisplayList(var_r26, DrawData[drawCnt].dlSize);
|
||||
} else {
|
||||
if (!(temp_r27->flags & 0x400)) {
|
||||
drawCnt++;
|
||||
return;
|
||||
}
|
||||
var_r26 = (u8*) DLBufStartP + DrawData[drawCnt].unk00;
|
||||
GXCallDisplayList(var_r26, DrawData[drawCnt].unk04);
|
||||
var_r26 = (u8*) DLBufStartP + DrawData[drawCnt].dlOfs;
|
||||
GXCallDisplayList(var_r26, DrawData[drawCnt].dlSize);
|
||||
}
|
||||
drawCnt++;
|
||||
}
|
||||
|
|
@ -2053,7 +2041,7 @@ void Hu3DDrawPost(void) {
|
|||
s16 spA;
|
||||
s16 sp8;
|
||||
HsfBuffer *temp_r24;
|
||||
HsfdrawStruct00 *temp_r28;
|
||||
HsfDrawObject *temp_r28;
|
||||
s16 var_r21;
|
||||
s16 var_r20;
|
||||
s16 var_r19;
|
||||
|
|
@ -2089,10 +2077,10 @@ void Hu3DDrawPost(void) {
|
|||
while ((var_r25 /= 3) >= 1) {
|
||||
for (i = var_r25; i < DrawObjIdx; i++) {
|
||||
var_r20 = DrawObjNum[i];
|
||||
temp_f29 = DrawObjData[DrawObjNum[i]].unk08;
|
||||
temp_f29 = DrawObjData[DrawObjNum[i]].z;
|
||||
var_r26 = i - var_r25;
|
||||
while (var_r26 >= 0) {
|
||||
if (DrawObjData[DrawObjNum[var_r26]].unk08 < temp_f29) {
|
||||
if (DrawObjData[DrawObjNum[var_r26]].z < temp_f29) {
|
||||
DrawObjNum[var_r26 + var_r25] = DrawObjNum[var_r26];
|
||||
var_r26 -= var_r25;
|
||||
} else {
|
||||
|
|
@ -2104,7 +2092,7 @@ void Hu3DDrawPost(void) {
|
|||
}
|
||||
for (i = 0; i < DrawObjIdx - 1; i++) {
|
||||
for (var_r26 = i + 1; var_r26 < DrawObjIdx; var_r26++) {
|
||||
if (DrawObjData[DrawObjNum[i]].unk08 != DrawObjData[DrawObjNum[var_r26]].unk08) {
|
||||
if (DrawObjData[DrawObjNum[i]].z != DrawObjData[DrawObjNum[var_r26]].z) {
|
||||
break;
|
||||
}
|
||||
if (DrawObjNum[var_r26] < DrawObjNum[i]) {
|
||||
|
|
@ -2124,24 +2112,24 @@ void Hu3DDrawPost(void) {
|
|||
GXSetCullMode(GX_CULL_BACK);
|
||||
for (var_r23 = 0; var_r23 < DrawObjIdx; var_r23++) {
|
||||
temp_r28 = &DrawObjData[DrawObjNum[var_r23]];
|
||||
if (temp_r28->unk00->attr & 0x10) {
|
||||
sp28 = (void*) temp_r28->unk00->hsfData;
|
||||
sp28(temp_r28->unk00, temp_r28->unk0C);
|
||||
if (temp_r28->model->attr & 0x10) {
|
||||
sp28 = (void*) temp_r28->model->hsfData;
|
||||
sp28(temp_r28->model, temp_r28->matrix);
|
||||
for (i = 0; i < 8; i++) {
|
||||
BmpPtrBak[i] = (HsfAttribute*) -1;
|
||||
}
|
||||
materialBak = (HsfMaterial*) -1;
|
||||
Hu3DCameraSet(Hu3DCameraNo, Hu3DCameraMtx);
|
||||
} else {
|
||||
Hu3DObjInfoP = temp_r28->unk04->constData;
|
||||
DLBufStartP = Hu3DObjInfoP->unk0C;
|
||||
DrawData = Hu3DObjInfoP->unk08;
|
||||
GXLoadPosMtxImm(temp_r28->unk0C, GX_PNMTX0);
|
||||
PSMTXInvXpose(temp_r28->unk0C, sp120);
|
||||
Hu3DObjInfoP = temp_r28->object->constData;
|
||||
DLBufStartP = Hu3DObjInfoP->dlBuf;
|
||||
DrawData = Hu3DObjInfoP->drawData;
|
||||
GXLoadPosMtxImm(temp_r28->matrix, GX_PNMTX0);
|
||||
PSMTXInvXpose(temp_r28->matrix, sp120);
|
||||
GXLoadNrmMtxImm(sp120, 0);
|
||||
if (Hu3DShadowF != 0 && Hu3DShadowCamBit != 0 && (Hu3DObjInfoP->flags & 8)) {
|
||||
PSMTXInverse(Hu3DCameraMtx, spF0);
|
||||
PSMTXConcat(spF0, temp_r28->unk0C, sp120);
|
||||
PSMTXConcat(spF0, temp_r28->matrix, sp120);
|
||||
PSMTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, sp150);
|
||||
PSMTXConcat(sp150, sp120, sp120);
|
||||
GXLoadTexMtxImm(sp120, GX_TEXMTX9, GX_MTX3x4);
|
||||
|
|
@ -2149,22 +2137,22 @@ void Hu3DDrawPost(void) {
|
|||
} else {
|
||||
var_r19 = 0;
|
||||
}
|
||||
if (temp_r28->unk00->unk_02 != 0) {
|
||||
if (temp_r28->model->unk_02 != 0) {
|
||||
if (var_r19 == 0) {
|
||||
PSMTXInverse(Hu3DCameraMtx, spF0);
|
||||
}
|
||||
for (i = 0, var_r21 = 1; i < 4; i++, var_r21 <<= 1) {
|
||||
if (var_r21 & temp_r28->unk00->unk_02) {
|
||||
PSMTXConcat(spF0, temp_r28->unk0C, sp120);
|
||||
if (var_r21 & temp_r28->model->unk_02) {
|
||||
PSMTXConcat(spF0, temp_r28->matrix, sp120);
|
||||
PSMTXConcat(Hu3DProjection[i].unk_68, Hu3DProjection[i].unk_38, sp150);
|
||||
PSMTXConcat(sp150, sp120, sp120);
|
||||
GXLoadTexMtxImm(sp120, texMtxTbl[i + 3], GX_MTX3x4);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((temp_r28->unk00->attr & 0x20000) || (Hu3DObjInfoP->flags & 0x8000)) {
|
||||
if ((temp_r28->model->attr & 0x20000) || (Hu3DObjInfoP->flags & 0x8000)) {
|
||||
sp54 = lbl_8011DD20;
|
||||
temp_r22 = &Hu3DGlobalLight[temp_r28->unk00->unk_03];
|
||||
temp_r22 = &Hu3DGlobalLight[temp_r28->model->unk_03];
|
||||
sp30 = temp_r22->unk_28;
|
||||
if (temp_r22->unk_00 & 0x8000) {
|
||||
PSMTXMultVecSR(Hu3DCameraMtx, &sp30, &sp30);
|
||||
|
|
@ -2179,8 +2167,8 @@ void Hu3DDrawPost(void) {
|
|||
sp3C.x = -sp3C.x;
|
||||
sp3C.y = -sp3C.y;
|
||||
sp3C.z = -sp3C.z;
|
||||
PSMTXScale(sp60, 1.0f / temp_r28->unk3C.x, 1.0f / temp_r28->unk3C.y, 1.0f / temp_r28->unk3C.z);
|
||||
PSMTXConcat(temp_r28->unk0C, sp60, spC0);
|
||||
PSMTXScale(sp60, 1.0f / temp_r28->scale.x, 1.0f / temp_r28->scale.y, 1.0f / temp_r28->scale.z);
|
||||
PSMTXConcat(temp_r28->matrix, sp60, spC0);
|
||||
spC0[0][3] = spC0[1][3] = spC0[2][3] = 0.0f;
|
||||
PSMTXInvXpose(spC0, sp90);
|
||||
if (sp8 == 10000) {
|
||||
|
|
@ -2198,7 +2186,7 @@ void Hu3DDrawPost(void) {
|
|||
PSMTXConcat(spC0, sp60, hiliteMtx);
|
||||
}
|
||||
}
|
||||
temp_r24 = temp_r28->unk04->data.face;
|
||||
temp_r24 = temp_r28->object->data.face;
|
||||
var_r27 = temp_r24->data;
|
||||
drawCnt = 0;
|
||||
shadingBak = -1;
|
||||
|
|
@ -2208,13 +2196,13 @@ void Hu3DDrawPost(void) {
|
|||
for (i = 0; i < temp_r24->count;) {
|
||||
FaceDraw(temp_r28, var_r27);
|
||||
if (var_r27->type == 4) {
|
||||
totalPolyCnt += DrawData[drawCnt - 1].unk08;
|
||||
totalPolyCnt += DrawData[drawCnt - 1].polyCnt;
|
||||
i++;
|
||||
var_r27++;
|
||||
} else {
|
||||
totalPolyCnt += DrawData[drawCnt - 1].unk08 * ((var_r27->type & 7) == 3 ? 2 : 1);
|
||||
i += DrawData[drawCnt - 1].unk08;
|
||||
var_r27 += DrawData[drawCnt - 1].unk08;
|
||||
totalPolyCnt += DrawData[drawCnt - 1].polyCnt * ((var_r27->type & 7) == 3 ? 2 : 1);
|
||||
i += DrawData[drawCnt - 1].polyCnt;
|
||||
var_r27 += DrawData[drawCnt - 1].polyCnt;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -2230,8 +2218,8 @@ void Hu3DDrawPost(void) {
|
|||
i++;
|
||||
var_r27++;
|
||||
} else {
|
||||
i += DrawData[drawCnt - 1].unk08;
|
||||
var_r27 += DrawData[drawCnt - 1].unk08;
|
||||
i += DrawData[drawCnt - 1].polyCnt;
|
||||
var_r27 += DrawData[drawCnt - 1].polyCnt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2247,7 +2235,7 @@ void Hu3DDrawPost(void) {
|
|||
(void)var_r19; // required to match
|
||||
}
|
||||
|
||||
static void ObjDraw(HsfdrawStruct00 *arg0) {
|
||||
static void ObjDraw(HsfDrawObject *arg0) {
|
||||
Vec sp44;
|
||||
Vec sp38;
|
||||
Vec sp2C;
|
||||
|
|
@ -2265,7 +2253,7 @@ static void ObjDraw(HsfdrawStruct00 *arg0) {
|
|||
float temp_f27;
|
||||
float temp_f26;
|
||||
LightData *temp_r24;
|
||||
DrawDataStruct *temp_r25;
|
||||
HsfDrawData *temp_r25;
|
||||
HsfFace *var_r27;
|
||||
Mtx sp140;
|
||||
Mtx sp110;
|
||||
|
|
@ -2274,16 +2262,16 @@ static void ObjDraw(HsfdrawStruct00 *arg0) {
|
|||
Mtx sp80;
|
||||
Mtx sp50;
|
||||
|
||||
Hu3DObjInfoP = arg0->unk04->constData;
|
||||
DLBufStartP = Hu3DObjInfoP->unk0C;
|
||||
DrawData = Hu3DObjInfoP->unk08;
|
||||
GXLoadPosMtxImm(arg0->unk0C, GX_PNMTX0);
|
||||
PSMTXInvXpose(arg0->unk0C, sp110);
|
||||
Hu3DObjInfoP = arg0->object->constData;
|
||||
DLBufStartP = Hu3DObjInfoP->dlBuf;
|
||||
DrawData = Hu3DObjInfoP->drawData;
|
||||
GXLoadPosMtxImm(arg0->matrix, GX_PNMTX0);
|
||||
PSMTXInvXpose(arg0->matrix, sp110);
|
||||
GXLoadNrmMtxImm(sp110, 0);
|
||||
GXInvalidateVtxCache();
|
||||
if (Hu3DShadowF != 0 && Hu3DShadowCamBit != 0 && (Hu3DObjInfoP->flags & 8)) {
|
||||
PSMTXInverse(Hu3DCameraMtx, spE0);
|
||||
PSMTXConcat(spE0, arg0->unk0C, sp110);
|
||||
PSMTXConcat(spE0, arg0->matrix, sp110);
|
||||
PSMTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, sp140);
|
||||
PSMTXConcat(sp140, sp110, sp110);
|
||||
GXLoadTexMtxImm(sp110, GX_TEXMTX9, GX_MTX3x4);
|
||||
|
|
@ -2291,22 +2279,22 @@ static void ObjDraw(HsfdrawStruct00 *arg0) {
|
|||
} else {
|
||||
var_r22 = 0;
|
||||
}
|
||||
if (arg0->unk00->unk_02 != 0) {
|
||||
if (arg0->model->unk_02 != 0) {
|
||||
if (var_r22 == 0) {
|
||||
PSMTXInverse(Hu3DCameraMtx, spE0);
|
||||
}
|
||||
for (i = 0, var_r23 = 1; i < 4; i++, var_r23 <<= 1) {
|
||||
if (var_r23 & arg0->unk00->unk_02) {
|
||||
PSMTXConcat(spE0, arg0->unk0C, sp110);
|
||||
if (var_r23 & arg0->model->unk_02) {
|
||||
PSMTXConcat(spE0, arg0->matrix, sp110);
|
||||
PSMTXConcat(Hu3DProjection[i].unk_68, Hu3DProjection[i].unk_38, sp140);
|
||||
PSMTXConcat(sp140, sp110, sp110);
|
||||
GXLoadTexMtxImm(sp110, texMtxTbl[i + 3], GX_MTX3x4);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((arg0->unk00->attr & 0x20000) || (Hu3DObjInfoP->flags & 0x8000)) {
|
||||
if ((arg0->model->attr & 0x20000) || (Hu3DObjInfoP->flags & 0x8000)) {
|
||||
sp44 = lbl_8011DD20;
|
||||
temp_r24 = &Hu3DGlobalLight[arg0->unk00->unk_03];
|
||||
temp_r24 = &Hu3DGlobalLight[arg0->model->unk_03];
|
||||
sp20 = temp_r24->unk_28;
|
||||
if (temp_r24->unk_00 & 0x8000) {
|
||||
PSMTXMultVecSR(Hu3DCameraMtx, &sp20, &sp20);
|
||||
|
|
@ -2321,8 +2309,8 @@ static void ObjDraw(HsfdrawStruct00 *arg0) {
|
|||
sp2C.x = -sp2C.x;
|
||||
sp2C.y = -sp2C.y;
|
||||
sp2C.z = -sp2C.z;
|
||||
PSMTXScale(sp50, 1.0f / arg0->unk3C.x, 1.0f / arg0->unk3C.y, 1.0f / arg0->unk3C.z);
|
||||
PSMTXConcat(arg0->unk0C, sp50, spB0);
|
||||
PSMTXScale(sp50, 1.0f / arg0->scale.x, 1.0f / arg0->scale.y, 1.0f / arg0->scale.z);
|
||||
PSMTXConcat(arg0->matrix, sp50, spB0);
|
||||
spB0[0][3] = spB0[1][3] = spB0[2][3] = 0.0f;
|
||||
PSMTXInvXpose(spB0, sp80);
|
||||
if (var_r21 == 10000) {
|
||||
|
|
@ -2340,7 +2328,7 @@ static void ObjDraw(HsfdrawStruct00 *arg0) {
|
|||
PSMTXConcat(spB0, sp50, hiliteMtx);
|
||||
}
|
||||
}
|
||||
temp_r26 = arg0->unk04->data.face;
|
||||
temp_r26 = arg0->object->data.face;
|
||||
var_r27 = temp_r26->data;
|
||||
drawCnt = 0;
|
||||
shadingBak = -1;
|
||||
|
|
@ -2350,7 +2338,7 @@ static void ObjDraw(HsfdrawStruct00 *arg0) {
|
|||
for (i = 0; i < temp_r26->count;) {
|
||||
FaceDraw(arg0, var_r27);
|
||||
if (var_r27->type == 4) {
|
||||
totalPolyCnt += DrawData[drawCnt - 1].unk08;
|
||||
totalPolyCnt += DrawData[drawCnt - 1].polyCnt;
|
||||
i++;
|
||||
var_r27++;
|
||||
} else {
|
||||
|
|
@ -2360,9 +2348,9 @@ static void ObjDraw(HsfdrawStruct00 *arg0) {
|
|||
} else {
|
||||
var_r20 = 1;
|
||||
}
|
||||
totalPolyCnt += temp_r25->unk08 * var_r20;
|
||||
i += temp_r25->unk08;
|
||||
var_r27 += temp_r25->unk08;
|
||||
totalPolyCnt += temp_r25->polyCnt * var_r20;
|
||||
i += temp_r25->polyCnt;
|
||||
var_r27 += temp_r25->polyCnt;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -2378,8 +2366,8 @@ static void ObjDraw(HsfdrawStruct00 *arg0) {
|
|||
i++;
|
||||
var_r27++;
|
||||
} else {
|
||||
i += DrawData[drawCnt - 1].unk08;
|
||||
var_r27 += DrawData[drawCnt - 1].unk08;
|
||||
i += DrawData[drawCnt - 1].polyCnt;
|
||||
var_r27 += DrawData[drawCnt - 1].polyCnt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2446,8 +2434,8 @@ static void MDObjMesh(HsfData *arg0, HsfObject *arg1) {
|
|||
}
|
||||
DLTotalNum = (DLTotalNum + 0x40) & ~0x1F;
|
||||
Hu3DObjInfoP = ObjConstantMake(arg1, mallocNo);
|
||||
Hu3DObjInfoP->unk08 = DrawData = HuMemDirectMallocNum(HEAP_DATA, matChgCnt * sizeof(DrawDataStruct), mallocNo);
|
||||
memset(DrawData, 0, matChgCnt * sizeof(DrawDataStruct));
|
||||
Hu3DObjInfoP->drawData = DrawData = HuMemDirectMallocNum(HEAP_DATA, matChgCnt * sizeof(HsfDrawData), mallocNo);
|
||||
memset(DrawData, 0, matChgCnt * sizeof(HsfDrawData));
|
||||
DLBufP = DLBufStartP = HuMemDirectMallocNum(HEAP_DATA, DLTotalNum, mallocNo);
|
||||
DCInvalidateRange(DLBufStartP, DLTotalNum);
|
||||
DLFirstF = 0;
|
||||
|
|
@ -2471,10 +2459,10 @@ static void MDObjMesh(HsfData *arg0, HsfObject *arg1) {
|
|||
for (i = 0; i < temp_r29->count; i++, var_r28++) {
|
||||
MDFaceDraw(arg1, var_r28);
|
||||
}
|
||||
Hu3DObjInfoP->unk0C = DLBufStartP;
|
||||
Hu3DObjInfoP->dlBuf = DLBufStartP;
|
||||
if (DLTotalNum < totalSize) {
|
||||
OSReport("DLBuf Over >>>>>>>>>>>>>");
|
||||
OSReport("%x:%x:%x\n", Hu3DObjInfoP->unk0C, totalSize, DLTotalNum);
|
||||
OSReport("%x:%x:%x\n", Hu3DObjInfoP->dlBuf, totalSize, DLTotalNum);
|
||||
}
|
||||
for (i = 0; i < arg1->data.childrenCount; i++) {
|
||||
MDObjCall(arg0, arg1->data.children[i]);
|
||||
|
|
@ -2488,7 +2476,7 @@ HsfConstData *ObjConstantMake(HsfObject *arg0, u32 arg1) {
|
|||
arg0->constData = temp_r3;
|
||||
temp_r3->flags = 0;
|
||||
temp_r3->hook = -1;
|
||||
temp_r3->hilite_map = NULL;
|
||||
temp_r3->hiliteMap = NULL;
|
||||
return temp_r3;
|
||||
}
|
||||
|
||||
|
|
@ -2507,7 +2495,7 @@ static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1) {
|
|||
if (temp_r30 != materialBak || polyTypeBak != (arg1->type & 7) || (arg1->type & 7) == 4) {
|
||||
polyTypeBak = arg1->type & 7;
|
||||
materialBak = temp_r30;
|
||||
DrawData[drawCnt].unk00 = (u32) DLBufP - (u32) DLBufStartP;
|
||||
DrawData[drawCnt].dlOfs = (u32) DLBufP - (u32) DLBufStartP;
|
||||
GXBeginDisplayList(DLBufP, 0x20000);
|
||||
GXResetWriteGatherPipe();
|
||||
if (temp_r30->numAttrs == 0) {
|
||||
|
|
@ -2517,7 +2505,7 @@ static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1) {
|
|||
for (var_r27 = 0; var_r27 < temp_r30->numAttrs; var_r27++) {
|
||||
if (arg0->data.attribute[temp_r30->attrs[var_r27]].unk14 != 0.0) {
|
||||
Hu3DObjInfoP->flags |= 2;
|
||||
DrawData[drawCnt].unk0C |= 2;
|
||||
DrawData[drawCnt].flags |= 2;
|
||||
var_r26 = var_r27;
|
||||
}
|
||||
}
|
||||
|
|
@ -2748,8 +2736,8 @@ static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1) {
|
|||
break;
|
||||
}
|
||||
temp_r3 = GXEndDisplayList();
|
||||
DrawData[drawCnt].unk04 = temp_r3;
|
||||
DrawData[drawCnt].unk08 = faceCnt;
|
||||
DrawData[drawCnt].dlSize = temp_r3;
|
||||
DrawData[drawCnt].polyCnt = faceCnt;
|
||||
totalSize += temp_r3;
|
||||
drawCnt++;
|
||||
DLBufP = (u8*) DLBufP + temp_r3;
|
||||
|
|
@ -3232,14 +3220,14 @@ void Hu3DModelObjDrawInit(void) {
|
|||
}
|
||||
|
||||
void Hu3DModelObjDraw(s16 arg0, char *arg1, Mtx arg2) {
|
||||
HsfdrawStruct00 sp14;
|
||||
HsfDrawObject sp14;
|
||||
HsfConstData *sp10;
|
||||
HsfObject *temp_r3;
|
||||
|
||||
sp14.unk00 = &Hu3DData[arg0];
|
||||
sp14.unk04 = temp_r3 = Hu3DModelObjPtrGet(arg0, arg1);
|
||||
sp14.model = &Hu3DData[arg0];
|
||||
sp14.object = temp_r3 = Hu3DModelObjPtrGet(arg0, arg1);
|
||||
sp10 = temp_r3->constData;
|
||||
PSMTXCopy(arg2, sp14.unk0C);
|
||||
sp14.unk3C.x = sp14.unk3C.y = sp14.unk3C.z = 1.0f;
|
||||
PSMTXCopy(arg2, sp14.matrix);
|
||||
sp14.scale.x = sp14.scale.y = sp14.scale.z = 1.0f;
|
||||
ObjDraw(&sp14);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -824,7 +824,7 @@ void Hu3DModelHiliteMapSet(s16 arg0, AnimData *arg1) {
|
|||
copy->flags |= 0x100;
|
||||
temp_r25 = copy->constData;
|
||||
temp_r25->flags |= 0x8000;
|
||||
temp_r25->hilite_map = arg1;
|
||||
temp_r25->hiliteMap = arg1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue