Set names for modelrenderdata properties
This commit is contained in:
parent
eeff60ded0
commit
c44895b2b2
|
@ -7334,7 +7334,7 @@ void bgun_create_fx(struct hand *hand, s32 handnum, struct funcdef *funcdef, s32
|
|||
void bgun0f0a5550(s32 handnum)
|
||||
{
|
||||
u8 *mtxallocation;
|
||||
Mtxf sp2c4;
|
||||
Mtxf rendermtx;
|
||||
Mtxf sp284;
|
||||
struct modeldef *modeldef = NULL;
|
||||
struct coord sp274 = {0, 0, 0};
|
||||
|
@ -7526,10 +7526,10 @@ void bgun0f0a5550(s32 handnum)
|
|||
mtx4_load_rotation(&sp1a4, &sp124);
|
||||
mtx4_mult_mtx4(&sp124, &sp164, &sp284);
|
||||
mtx4_mult_mtx4_in_place(&sp284, &sp234);
|
||||
mtx4_copy(&sp234, &sp2c4);
|
||||
mtx4_set_translation(&sp274, &sp2c4);
|
||||
mtx4_copy(&sp234, &rendermtx);
|
||||
mtx4_set_translation(&sp274, &rendermtx);
|
||||
|
||||
mtx4_copy(&sp2c4, &hand->cammtx);
|
||||
mtx4_copy(&rendermtx, &hand->cammtx);
|
||||
mtx4_copy(&hand->posmtx, &hand->prevmtx);
|
||||
|
||||
mtx00015be4(cam_get_projection_mtxf(), &hand->cammtx, &hand->posmtx);
|
||||
|
@ -7549,12 +7549,12 @@ void bgun0f0a5550(s32 handnum)
|
|||
hand->handmodel.matrices = (Mtxf *)mtxallocation;
|
||||
|
||||
if (gset_has_weapon_flag(weaponnum, WEAPONFLAG_DUALFLIP) && handnum == HAND_LEFT) {
|
||||
mtx00015e24(-1, &sp2c4);
|
||||
mtx00015e24(-1, &rendermtx);
|
||||
}
|
||||
|
||||
mtx00015f04(0.10000001f, &sp2c4);
|
||||
mtx00015f04(0.10000001f, &rendermtx);
|
||||
|
||||
mtx4_copy(&sp2c4, (Mtxf *)mtxallocation);
|
||||
mtx4_copy(&rendermtx, (Mtxf *)mtxallocation);
|
||||
|
||||
if (hand->ejectcount > 0) {
|
||||
switch (weaponnum) {
|
||||
|
@ -7590,7 +7590,7 @@ void bgun0f0a5550(s32 handnum)
|
|||
|
||||
{
|
||||
bool a0 = true;
|
||||
struct modelrenderdata renderdata = {NULL, true, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
#if VERSION >= VERSION_PAL_BETA
|
||||
bool a3 = false;
|
||||
#endif
|
||||
|
@ -7603,8 +7603,8 @@ void bgun0f0a5550(s32 handnum)
|
|||
s32 stack;
|
||||
s32 sp6c;
|
||||
|
||||
renderdata.unk00 = &sp2c4;
|
||||
renderdata.unk10 = hand->gunmodel.matrices;
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
renderdata.matrices = hand->gunmodel.matrices;
|
||||
|
||||
if (hand->animmode != HANDANIMMODE_IDLE) {
|
||||
a0 = false;
|
||||
|
@ -7677,8 +7677,8 @@ void bgun0f0a5550(s32 handnum)
|
|||
|
||||
spc4 = hand->gunmodel.matrices;
|
||||
|
||||
renderdata.unk00 = &sp84;
|
||||
renderdata.unk10 = player->hands[HAND_RIGHT].unk0dd8;
|
||||
renderdata.rendermtx = &sp84;
|
||||
renderdata.matrices = player->hands[HAND_RIGHT].unk0dd8;
|
||||
|
||||
#if VERSION >= VERSION_PAL_BETA
|
||||
var8005efd8_2 = true;
|
||||
|
@ -7707,7 +7707,7 @@ void bgun0f0a5550(s32 handnum)
|
|||
spc4 = hand->gunmodel.matrices;
|
||||
|
||||
for (spcc = 0; spcc < hand->gunmodel.definition->nummatrices; spcc++) {
|
||||
mtx00015be4(&sp2c4, spc8, spc4);
|
||||
mtx00015be4(&rendermtx, spc8, spc4);
|
||||
spc8++;
|
||||
spc4++;
|
||||
}
|
||||
|
@ -8178,7 +8178,7 @@ s32 bgun_allocate_fireslot(void)
|
|||
void bgun_render(Gfx **gdlptr)
|
||||
{
|
||||
Gfx *gdl = *gdlptr;
|
||||
struct modelrenderdata renderdata = {NULL, true, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
struct player *player;
|
||||
s32 handnum;
|
||||
|
||||
|
@ -8257,7 +8257,7 @@ void bgun_render(Gfx **gdlptr)
|
|||
}
|
||||
|
||||
renderdata.gdl = gdl;
|
||||
renderdata.unk30 = 4;
|
||||
renderdata.context = MODELRENDERCONTEXT_BONDGUN_OPA;
|
||||
|
||||
if (USINGDEVICE(DEVICE_NIGHTVISION) || USINGDEVICE(DEVICE_IRSCANNER)) {
|
||||
u8 *col = player->gunshadecol;
|
||||
|
@ -8307,7 +8307,7 @@ void bgun_render(Gfx **gdlptr)
|
|||
alpha *= 0.74509805f;
|
||||
renderdata.fogcolour = renderdata.envcolour;
|
||||
renderdata.envcolour = 65 + alpha;
|
||||
renderdata.unk30 = 5;
|
||||
renderdata.context = MODELRENDERCONTEXT_BONDGUN_OBJ_XLU;
|
||||
colour = renderdata.envcolour;
|
||||
}
|
||||
|
||||
|
|
|
@ -139,8 +139,8 @@ void bhead_update(f32 speedforwards, f32 speedsideways)
|
|||
}
|
||||
|
||||
{
|
||||
struct modelrenderdata sp80 = {NULL, 1, 3};
|
||||
Mtxf sp40;
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
Mtxf rendermtx;
|
||||
struct coord modelpos = {0, 0, 0};
|
||||
bool mergeenabled = model_is_anim_merging_enabled();
|
||||
|
||||
|
@ -150,11 +150,12 @@ void bhead_update(f32 speedforwards, f32 speedsideways)
|
|||
model_tick_anim_quarter_speed(&g_Vars.currentplayer->model, g_Vars.lvupdate240, true);
|
||||
model_set_anim_merging_enabled(mergeenabled);
|
||||
model_update_info(&g_Vars.currentplayer->model);
|
||||
mtx4_load_identity(&sp40);
|
||||
mtx4_load_identity(&rendermtx);
|
||||
|
||||
sp80.unk00 = &sp40;
|
||||
sp80.unk10 = g_Vars.currentplayer->bondheadmatrices;
|
||||
model_set_matrices_with_anim(&sp80, &g_Vars.currentplayer->model);
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
renderdata.matrices = g_Vars.currentplayer->bondheadmatrices;
|
||||
|
||||
model_set_matrices_with_anim(&renderdata, &g_Vars.currentplayer->model);
|
||||
|
||||
g_Vars.currentplayer->headbodyoffset.x = g_Vars.currentplayer->standbodyoffset.x;
|
||||
g_Vars.currentplayer->headbodyoffset.y = g_Vars.currentplayer->standbodyoffset.y;
|
||||
|
|
|
@ -94,15 +94,17 @@ void bhead_reset(void)
|
|||
}
|
||||
|
||||
{
|
||||
struct modelrenderdata renderdata = {NULL, 1, 3};
|
||||
Mtxf sp48;
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
Mtxf rendermtx;
|
||||
|
||||
model_set_animation(&g_Vars.currentplayer->model, ANIM_TWO_GUN_HOLD, 0, 0, 0.5f, 0);
|
||||
|
||||
model_update_info(&g_Vars.currentplayer->model);
|
||||
mtx4_load_identity(&sp48);
|
||||
renderdata.unk00 = &sp48;
|
||||
renderdata.unk10 = g_Vars.currentplayer->bondheadmatrices;
|
||||
mtx4_load_identity(&rendermtx);
|
||||
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
renderdata.matrices = g_Vars.currentplayer->bondheadmatrices;
|
||||
|
||||
model_set_matrices_with_anim(&renderdata, &g_Vars.currentplayer->model);
|
||||
|
||||
g_Vars.currentplayer->standheight = g_Vars.currentplayer->bondheadmatrices[0].m[3][1];
|
||||
|
|
|
@ -1979,35 +1979,35 @@ void chr_tick_child(struct chrdata *chr, struct prop *prop, bool fulltick)
|
|||
if (model->attachedtomodel && model->attachedtonode
|
||||
&& (obj->hidden & OBJHFLAG_GONE) == 0
|
||||
&& (obj->flags2 & OBJFLAG2_INVISIBLE) == 0) {
|
||||
Mtxf *sp104 = model_find_node_mtx(model->attachedtomodel, model->attachedtonode, 0);
|
||||
struct modelrenderdata thing = {NULL, 1, 3};
|
||||
Mtxf *mtx0 = model_find_node_mtx(model->attachedtomodel, model->attachedtonode, 0);
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
u32 stack;
|
||||
Mtxf sp80;
|
||||
Mtxf rendermtx;
|
||||
Mtxf sp40;
|
||||
|
||||
prop->flags |= PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK;
|
||||
|
||||
if (obj->hidden & OBJHFLAG_EMBEDDED) {
|
||||
mtx00015be4(sp104, &obj->embedment->matrix, &sp80);
|
||||
thing.unk00 = &sp80;
|
||||
mtx00015be4(mtx0, &obj->embedment->matrix, &rendermtx);
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
} else if (CHRRACE(chr) == RACE_SKEDAR) {
|
||||
// The skedar hand position is rotated weirdly, so compensate for it
|
||||
mtx4_load_y_rotation(BADDTOR(75.6), &sp80);
|
||||
mtx4_load_y_rotation(BADDTOR(75.6), &rendermtx);
|
||||
mtx4_load_z_rotation(BADDTOR(90.0), &sp40);
|
||||
mtx4_mult_mtx4_in_place(&sp40, &sp80);
|
||||
mtx4_mult_mtx4_in_place(sp104, &sp80);
|
||||
thing.unk00 = &sp80;
|
||||
mtx4_mult_mtx4_in_place(&sp40, &rendermtx);
|
||||
mtx4_mult_mtx4_in_place(mtx0, &rendermtx);
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
} else if (prop == chr->weapons_held[HAND_LEFT]) {
|
||||
// Flip the model
|
||||
mtx4_load_z_rotation(BADDTOR(180), &sp80);
|
||||
mtx4_mult_mtx4_in_place(sp104, &sp80);
|
||||
thing.unk00 = &sp80;
|
||||
mtx4_load_z_rotation(BADDTOR(180), &rendermtx);
|
||||
mtx4_mult_mtx4_in_place(mtx0, &rendermtx);
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
} else {
|
||||
thing.unk00 = sp104;
|
||||
renderdata.rendermtx = mtx0;
|
||||
}
|
||||
|
||||
thing.unk10 = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
model_set_matrices(&thing, model);
|
||||
renderdata.matrices = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
model_set_matrices(&renderdata, model);
|
||||
|
||||
obj_child_tick_player(prop, fulltick);
|
||||
|
||||
|
@ -2370,7 +2370,7 @@ bool chr_tick_beams(struct prop *prop)
|
|||
*/
|
||||
s32 chr_tick(struct prop *prop)
|
||||
{
|
||||
struct modelrenderdata sp210 = {0, 1, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
struct chrdata *chr = prop->chr;
|
||||
struct model *model = chr->model;
|
||||
bool needsupdate;
|
||||
|
@ -2381,7 +2381,7 @@ s32 chr_tick(struct prop *prop)
|
|||
bool fulltick = false;
|
||||
s32 race = CHRRACE(chr);
|
||||
s32 sp1e8;
|
||||
Mtxf sp1a8;
|
||||
Mtxf rendermtx;
|
||||
s32 sp1a4;
|
||||
bool isrepeatframe;
|
||||
bool isrepeatframe2;
|
||||
|
@ -2689,9 +2689,9 @@ s32 chr_tick(struct prop *prop)
|
|||
sp190.y = 0.0f;
|
||||
sp190.z = cosf(angle) * 19;
|
||||
|
||||
mtx4_load_translation(&sp190, &sp1a8);
|
||||
mtx4_mult_mtx4_in_place(cam_get_world_to_screen_mtxf(), &sp1a8);
|
||||
sp210.unk00 = &sp1a8;
|
||||
mtx4_load_translation(&sp190, &rendermtx);
|
||||
mtx4_mult_mtx4_in_place(cam_get_world_to_screen_mtxf(), &rendermtx);
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
} else if (prop->type == PROPTYPE_PLAYER) {
|
||||
u8 stack[0x14];
|
||||
f32 sp130;
|
||||
|
@ -2706,17 +2706,17 @@ s32 chr_tick(struct prop *prop)
|
|||
sp17c.y = ABS(bike->w) * 200 + 25;
|
||||
sp17c.z = sinf(-sp178) * sp130;
|
||||
|
||||
mtx4_load_translation(&sp17c, &sp1a8);
|
||||
mtx4_mult_mtx4_in_place(cam_get_world_to_screen_mtxf(), &sp1a8);
|
||||
sp210.unk00 = &sp1a8;
|
||||
mtx4_load_translation(&sp17c, &rendermtx);
|
||||
mtx4_mult_mtx4_in_place(cam_get_world_to_screen_mtxf(), &rendermtx);
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
} else {
|
||||
sp210.unk00 = cam_get_world_to_screen_mtxf();
|
||||
renderdata.rendermtx = cam_get_world_to_screen_mtxf();
|
||||
}
|
||||
} else {
|
||||
sp210.unk00 = cam_get_world_to_screen_mtxf();
|
||||
renderdata.rendermtx = cam_get_world_to_screen_mtxf();
|
||||
}
|
||||
|
||||
sp210.unk10 = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
renderdata.matrices = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
|
||||
if (fulltick && g_CurModelChr->flinchcnt >= 0) {
|
||||
g_CurModelChr->flinchcnt += g_Vars.lvupdate60;
|
||||
|
@ -2786,7 +2786,7 @@ s32 chr_tick(struct prop *prop)
|
|||
}
|
||||
}
|
||||
|
||||
model_set_matrices_with_anim(&sp210, model);
|
||||
model_set_matrices_with_anim(&renderdata, model);
|
||||
|
||||
if (restore) {
|
||||
anim->frac = prevfrac;
|
||||
|
@ -3357,7 +3357,7 @@ Gfx *chr_render(struct prop *prop, Gfx *gdl, bool xlupass)
|
|||
struct model *model = chr->model;
|
||||
f32 shadecolourfracs[4];
|
||||
s32 shademode;
|
||||
s32 sp100;
|
||||
s32 flags;
|
||||
s32 alpha;
|
||||
struct eyespy *eyespy;
|
||||
struct prop *child;
|
||||
|
@ -3425,12 +3425,12 @@ Gfx *chr_render(struct prop *prop, Gfx *gdl, bool xlupass)
|
|||
return gdl;
|
||||
}
|
||||
|
||||
sp100 = 3;
|
||||
flags = MODELRENDERFLAG_OPA | MODELRENDERFLAG_XLU;
|
||||
} else {
|
||||
if (!xlupass) {
|
||||
sp100 = 1;
|
||||
flags = MODELRENDERFLAG_OPA;
|
||||
} else {
|
||||
sp100 = 2;
|
||||
flags = MODELRENDERFLAG_XLU;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3442,7 +3442,7 @@ Gfx *chr_render(struct prop *prop, Gfx *gdl, bool xlupass)
|
|||
}
|
||||
|
||||
if (shademode != SHADEMODE_XLU && alpha > 0) {
|
||||
struct modelrenderdata renderdata = {0, 1, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
struct screenbox screenbox;
|
||||
s32 colour[4]; // rgba levels, but allowing > 256 temporarily
|
||||
u32 stack;
|
||||
|
@ -3457,7 +3457,7 @@ Gfx *chr_render(struct prop *prop, Gfx *gdl, bool xlupass)
|
|||
gdl = bg_scissor_to_viewport(gdl);
|
||||
}
|
||||
|
||||
renderdata.flags = sp100;
|
||||
renderdata.flags = flags;
|
||||
renderdata.zbufferenabled = true;
|
||||
renderdata.gdl = gdl;
|
||||
|
||||
|
@ -3512,10 +3512,10 @@ Gfx *chr_render(struct prop *prop, Gfx *gdl, bool xlupass)
|
|||
renderdata.fogcolour = colour[0] << 24 | colour[1] << 16 | colour[2] << 8 | colour[3];
|
||||
|
||||
if (alpha < 0xff) {
|
||||
renderdata.unk30 = 8;
|
||||
renderdata.context = MODELRENDERCONTEXT_CHR_XLU;
|
||||
renderdata.envcolour |= (u8)alpha;
|
||||
} else {
|
||||
renderdata.unk30 = 7;
|
||||
renderdata.context = MODELRENDERCONTEXT_CHR_OPA;
|
||||
}
|
||||
|
||||
// Set Skedar eyes open or closed
|
||||
|
|
|
@ -821,7 +821,7 @@ void casing_render(struct casing *casing, Gfx **gdlptr)
|
|||
struct modeldef *modeldef = casing->modeldef;
|
||||
Mtxf *matrices = gfx_allocate(modeldef->nummatrices * sizeof(Mtxf));
|
||||
struct model model;
|
||||
struct modelrenderdata renderdata = { NULL, true, 3 };
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
Mtxf mtx;
|
||||
s32 i;
|
||||
s32 j;
|
||||
|
@ -861,10 +861,10 @@ void casing_render(struct casing *casing, Gfx **gdlptr)
|
|||
}
|
||||
|
||||
if (render) {
|
||||
renderdata.zbufferenabled = 1;
|
||||
renderdata.zbufferenabled = true;
|
||||
renderdata.gdl = gdl;
|
||||
renderdata.unk10 = matrices;
|
||||
renderdata.unk30 = 4;
|
||||
renderdata.matrices = matrices;
|
||||
renderdata.context = MODELRENDERCONTEXT_BONDGUN_OPA;
|
||||
renderdata.envcolour = g_Vars.currentplayer->gunshadecol[0] << 24
|
||||
| g_Vars.currentplayer->gunshadecol[1] << 16
|
||||
| g_Vars.currentplayer->gunshadecol[2] << 8
|
||||
|
|
|
@ -1856,7 +1856,7 @@ Gfx *menu_render_model(Gfx *gdl, struct menumodel *menumodel, s32 modeltype)
|
|||
}
|
||||
|
||||
if (menumodel->bodymodeldef != NULL) {
|
||||
struct modelrenderdata renderdata = {NULL, true, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
Mtxf *matrices;
|
||||
s32 i;
|
||||
u32 stack[3];
|
||||
|
@ -2243,8 +2243,8 @@ Gfx *menu_render_model(Gfx *gdl, struct menumodel *menumodel, s32 modeltype)
|
|||
|
||||
mtx4_copy(&menumodel->mtx, matrices);
|
||||
|
||||
renderdata.unk00 = &menumodel->mtx;
|
||||
renderdata.unk10 = menumodel->bodymodel.matrices;
|
||||
renderdata.rendermtx = &menumodel->mtx;
|
||||
renderdata.matrices = menumodel->bodymodel.matrices;
|
||||
|
||||
model_set_matrices_with_anim(&renderdata, &menumodel->bodymodel);
|
||||
|
||||
|
@ -2313,7 +2313,7 @@ Gfx *menu_render_model(Gfx *gdl, struct menumodel *menumodel, s32 modeltype)
|
|||
gSPSetLights1(gdl++, var80071468);
|
||||
gSPLookAt(gdl++, cam_get_look_at());
|
||||
|
||||
renderdata.unk30 = 1;
|
||||
renderdata.context = MODELRENDERCONTEXT_MENUMODEL_OPA;
|
||||
renderdata.envcolour = 0xffffffff;
|
||||
renderdata.fogcolour = 0xffffffff;
|
||||
|
||||
|
|
|
@ -4788,15 +4788,15 @@ void obj_child_tick_player_onscreen(struct prop *prop, bool fulltick)
|
|||
|
||||
if (model->attachedtonode && (obj->hidden & OBJHFLAG_EMBEDDED)) {
|
||||
Mtxf *mtx = model_find_node_mtx(model->attachedtomodel, model->attachedtonode, 0);
|
||||
struct modelrenderdata renderdata = {NULL, true, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
u32 stack;
|
||||
Mtxf sp30;
|
||||
Mtxf rendermtx;
|
||||
|
||||
prop->flags |= PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK;
|
||||
mtx00015be4(mtx, &obj->embedment->matrix, &sp30);
|
||||
mtx00015be4(mtx, &obj->embedment->matrix, &rendermtx);
|
||||
|
||||
renderdata.unk10 = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
renderdata.unk00 = &sp30;
|
||||
renderdata.matrices = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
|
||||
model_set_matrices(&renderdata, model);
|
||||
obj_child_tick_player(prop, fulltick);
|
||||
|
@ -10855,16 +10855,16 @@ void obj_init_matrices(struct prop *prop)
|
|||
hangingmonitor_init_matrices(prop);
|
||||
} else {
|
||||
if (obj->model->definition->nummatrices >= 2) {
|
||||
struct modelrenderdata thing = {NULL, 1, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
u32 stack;
|
||||
Mtxf sp28;
|
||||
Mtxf rendermtx;
|
||||
|
||||
mtx4_copy(obj->model->matrices, &sp28);
|
||||
mtx4_copy(obj->model->matrices, &rendermtx);
|
||||
|
||||
thing.unk10 = obj->model->matrices;
|
||||
thing.unk00 = &sp28;
|
||||
renderdata.matrices = obj->model->matrices;
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
|
||||
model_set_matrices(&thing, obj->model);
|
||||
model_set_matrices(&renderdata, obj->model);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11059,7 +11059,7 @@ s32 obj_tick_player(struct prop *prop)
|
|||
model->anim = NULL;
|
||||
} else {
|
||||
// In cutscene
|
||||
struct modelrenderdata sp476 = {0, 1, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
Mtxf sp412;
|
||||
struct coord sp400;
|
||||
RoomNum sp384[8];
|
||||
|
@ -11086,9 +11086,11 @@ s32 obj_tick_player(struct prop *prop)
|
|||
}
|
||||
|
||||
sp556 = true;
|
||||
sp476.unk10 = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
sp476.unk00 = cam_get_world_to_screen_mtxf();
|
||||
model_set_matrices_with_anim(&sp476, model);
|
||||
|
||||
renderdata.matrices = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
renderdata.rendermtx = cam_get_world_to_screen_mtxf();
|
||||
|
||||
model_set_matrices_with_anim(&renderdata, model);
|
||||
|
||||
if (fulltick) {
|
||||
mtx00015be4(cam_get_projection_mtxf(), model->matrices, &sp412);
|
||||
|
@ -11145,12 +11147,12 @@ s32 obj_tick_player(struct prop *prop)
|
|||
}
|
||||
}
|
||||
} else {
|
||||
struct modelrenderdata sp312 = {0, 1, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
Mtxf sp248;
|
||||
struct coord sp236;
|
||||
RoomNum sp220[8];
|
||||
s32 numchrs;
|
||||
Mtxf sp152;
|
||||
Mtxf rendermtx;
|
||||
s32 sp148;
|
||||
s32 sp144;
|
||||
s32 i;
|
||||
|
@ -11181,12 +11183,14 @@ s32 obj_tick_player(struct prop *prop)
|
|||
|
||||
mtx3_to_mtx4(obj->realrot, &sp248);
|
||||
mtx4_set_translation(&prop->pos, &sp248);
|
||||
mtx4_mult_mtx4(cam_get_world_to_screen_mtxf(), &sp248, &sp152);
|
||||
mtx4_mult_mtx4(cam_get_world_to_screen_mtxf(), &sp248, &rendermtx);
|
||||
|
||||
sp556 = true;
|
||||
sp312.unk10 = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
sp312.unk00 = &sp152;
|
||||
model_set_matrices_with_anim(&sp312, model);
|
||||
|
||||
renderdata.matrices = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
|
||||
model_set_matrices_with_anim(&renderdata, model);
|
||||
|
||||
if (fulltick) {
|
||||
sp236.x = (f32)sp116.x + prop->pos.x;
|
||||
|
@ -11202,8 +11206,10 @@ s32 obj_tick_player(struct prop *prop)
|
|||
if (model_get_cur_anim_frame(model) >= model_get_num_anim_frames(model) - 1) {
|
||||
modelmgr_free_anim(model->anim);
|
||||
model->anim = NULL;
|
||||
|
||||
mtx00015be4(cam_get_projection_mtxf(), model->matrices, &sp248);
|
||||
mtx4_to_mtx3(&sp248, obj->realrot);
|
||||
|
||||
tagnum = obj_get_tag_num(obj);
|
||||
|
||||
if (tagnum >= 0) {
|
||||
|
@ -12375,7 +12381,7 @@ void obj_render_prop(struct prop *prop, struct modelrenderdata *renderdata, bool
|
|||
gdl = renderdata->gdl;
|
||||
|
||||
if (obj->type == OBJTYPE_SINGLEMONITOR) {
|
||||
if (renderdata->flags & 1) {
|
||||
if (renderdata->flags & MODELRENDERFLAG_OPA) {
|
||||
struct singlemonitorobj *monitor = (struct singlemonitorobj *) prop->obj;
|
||||
|
||||
if (obj->flags2 & OBJFLAG2_DRAWONTOP) {
|
||||
|
@ -12389,7 +12395,7 @@ void obj_render_prop(struct prop *prop, struct modelrenderdata *renderdata, bool
|
|||
gdl = tvscreen_render(model, model_get_part(model->definition, MODELPART_0000), &monitor->screen, gdl, sp60, 1);
|
||||
}
|
||||
} else if (obj->type == OBJTYPE_MULTIMONITOR) {
|
||||
if (renderdata->flags & 1) {
|
||||
if (renderdata->flags & MODELRENDERFLAG_OPA) {
|
||||
struct multimonitorobj *monitor = (struct multimonitorobj *) prop->obj;
|
||||
|
||||
if (obj->flags2 & OBJFLAG2_DRAWONTOP) {
|
||||
|
@ -12427,13 +12433,13 @@ void obj_render_prop(struct prop *prop, struct modelrenderdata *renderdata, bool
|
|||
renderdata->cullmode = CULLMODE_BACK;
|
||||
}
|
||||
|
||||
if (renderdata->unk30 == 9) {
|
||||
if (renderdata->context == MODELRENDERCONTEXT_OBJ_OPA) {
|
||||
renderdata->envcolour &= 0xffffff00;
|
||||
}
|
||||
} else if ((obj->hidden2 & OBJH2FLAG_DEFORMED) == 0) {
|
||||
renderdata->cullmode = CULLMODE_BACK;
|
||||
|
||||
if (renderdata->unk30 == 9) {
|
||||
if (renderdata->context == MODELRENDERCONTEXT_OBJ_OPA) {
|
||||
renderdata->envcolour &= 0xffffff00;
|
||||
}
|
||||
} else {
|
||||
|
@ -12441,7 +12447,7 @@ void obj_render_prop(struct prop *prop, struct modelrenderdata *renderdata, bool
|
|||
|
||||
renderdata->cullmode = CULLMODE_NONE;
|
||||
|
||||
if (renderdata->unk30 == 9) {
|
||||
if (renderdata->context == MODELRENDERCONTEXT_OBJ_OPA) {
|
||||
s32 alpha = 100 + level * 50;
|
||||
|
||||
if (alpha > 255) {
|
||||
|
@ -12599,10 +12605,10 @@ Gfx *obj_render(struct prop *prop, Gfx *gdl, bool xlupass)
|
|||
f32 shadecolourfracs[4];
|
||||
s32 shademode;
|
||||
struct defaultobj *obj = prop->obj;
|
||||
struct modelrenderdata renderdata = {NULL, true, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
struct screenbox screenbox;
|
||||
s32 colour[4];
|
||||
s32 sp84;
|
||||
s32 flags;
|
||||
s32 healththing;
|
||||
s32 alpha = 0xff;
|
||||
f32 xrayalphafrac;
|
||||
|
@ -12687,12 +12693,12 @@ Gfx *obj_render(struct prop *prop, Gfx *gdl, bool xlupass)
|
|||
return gdl;
|
||||
}
|
||||
|
||||
sp84 = 3;
|
||||
flags = MODELRENDERFLAG_OPA | MODELRENDERFLAG_XLU;
|
||||
} else {
|
||||
if (!xlupass) {
|
||||
sp84 = 1;
|
||||
flags = MODELRENDERFLAG_OPA;
|
||||
} else {
|
||||
sp84 = 2;
|
||||
flags = MODELRENDERFLAG_XLU;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12721,15 +12727,15 @@ Gfx *obj_render(struct prop *prop, Gfx *gdl, bool xlupass)
|
|||
gdl = bg_scissor_to_viewport(gdl);
|
||||
}
|
||||
|
||||
renderdata.flags = sp84;
|
||||
renderdata.flags = flags;
|
||||
renderdata.zbufferenabled = (obj->flags2 & OBJFLAG2_DRAWONTOP) == 0;
|
||||
renderdata.gdl = gdl;
|
||||
|
||||
if (alpha < 0xff) {
|
||||
renderdata.unk30 = 5;
|
||||
renderdata.context = MODELRENDERCONTEXT_BONDGUN_OBJ_XLU;
|
||||
renderdata.envcolour = alpha;
|
||||
} else {
|
||||
renderdata.unk30 = 9;
|
||||
renderdata.context = MODELRENDERCONTEXT_OBJ_OPA;
|
||||
|
||||
if (obj->type == OBJTYPE_TINTEDGLASS) {
|
||||
struct tintedglassobj *glass = (struct tintedglassobj *)obj;
|
||||
|
|
125
src/game/title.c
125
src/game/title.c
|
@ -322,7 +322,7 @@ Gfx *title_render_legal(Gfx *gdl)
|
|||
#endif
|
||||
struct legalelement *elem;
|
||||
struct legalelement *end;
|
||||
struct modelrenderdata renderdata = { NULL, true, 3 };
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
s32 x;
|
||||
s32 y;
|
||||
struct fontchar *font1;
|
||||
|
@ -712,9 +712,9 @@ void title_tick_pd_logo(void)
|
|||
}
|
||||
}
|
||||
|
||||
Gfx *title_render_pd_logo_model(Gfx *gdl, struct model *model, bool arg2, f32 arg3, s32 arg4, f32 arg5, Mtxf *arg6, Vtx *vertices, Col *colours)
|
||||
Gfx *title_render_pd_logo_model(Gfx *gdl, struct model *model, bool arg2, f32 arg3, s32 arg4, f32 arg5, Mtxf *rendermtx, Vtx *vertices, Col *colours)
|
||||
{
|
||||
struct modelrenderdata renderdata = {NULL, true, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
s32 tmp2;
|
||||
s32 i;
|
||||
s32 j;
|
||||
|
@ -857,16 +857,16 @@ Gfx *title_render_pd_logo_model(Gfx *gdl, struct model *model, bool arg2, f32 ar
|
|||
|
||||
gDPSetPrimColor(gdl++, 0, 0, 0x00, 0x00, 0x00, alpha1);
|
||||
|
||||
renderdata.unk00 = arg6;
|
||||
renderdata.unk10 = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
renderdata.rendermtx = rendermtx;
|
||||
renderdata.matrices = gfx_allocate(model->definition->nummatrices * sizeof(Mtxf));
|
||||
|
||||
mtx4_copy(arg6, renderdata.unk10);
|
||||
mtx4_copy(rendermtx, renderdata.matrices);
|
||||
|
||||
model->matrices = renderdata.unk10;
|
||||
model->matrices = renderdata.matrices;
|
||||
|
||||
model_update_relations(model);
|
||||
|
||||
renderdata.flags = 3;
|
||||
renderdata.flags = MODELRENDERFLAG_DEFAULT;
|
||||
renderdata.zbufferenabled = false;
|
||||
renderdata.gdl = gdl;
|
||||
|
||||
|
@ -956,10 +956,10 @@ void title_skip_to_pd_title(void)
|
|||
|
||||
Gfx *title_render_pd_logo(Gfx *gdl)
|
||||
{
|
||||
struct modelrenderdata renderdata = {NULL, true, 3};
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
Mtxf sp2b0;
|
||||
Mtxf sp270;
|
||||
Mtxf sp230;
|
||||
Mtxf rendermtx1;
|
||||
Mtxf rendermtx2;
|
||||
struct model *model;
|
||||
struct modelnode *node;
|
||||
Mtxf sp1e8;
|
||||
|
@ -1368,8 +1368,8 @@ Gfx *title_render_pd_logo(Gfx *gdl)
|
|||
mtx4_load_y_rotation(g_PdLogoYRotCur, &sp1e8);
|
||||
mtx4_load_x_rotation(g_PdLogoXRotCur, &sp1a8);
|
||||
mtx4_mult_mtx4_in_place(&sp1a8, &sp1e8);
|
||||
mtx4_mult_mtx4(&sp2b0, &sp1e8, &sp270);
|
||||
mtx00015f04(g_PdLogoScale, &sp270);
|
||||
mtx4_mult_mtx4(&sp2b0, &sp1e8, &rendermtx1);
|
||||
mtx00015f04(g_PdLogoScale, &rendermtx1);
|
||||
|
||||
#if VERSION != VERSION_JPN_FINAL
|
||||
g_TitleLightPdLogoNotFront.a.l.col[0] = g_TitleLightPdLogoNotFront.a.l.col[1] = g_TitleLightPdLogoNotFront.a.l.col[2] = g_TitleLightPdLogoNotFront.a.l.colc[0] = g_TitleLightPdLogoNotFront.a.l.colc[1] = g_TitleLightPdLogoNotFront.a.l.colc[2] = 255.0f * g_PdLogoAmbientLightFrac;
|
||||
|
@ -1448,7 +1448,7 @@ Gfx *title_render_pd_logo(Gfx *gdl)
|
|||
}
|
||||
}
|
||||
|
||||
gdl = title_render_pd_logo_model(gdl, model, var80062804, g_PdLogoFrac, 240, 1.0f, &sp270, gfx_allocate_vertices(numvertices), gfx_allocate_colours(numcolours));
|
||||
gdl = title_render_pd_logo_model(gdl, model, var80062804, g_PdLogoFrac, 240, 1.0f, &rendermtx1, gfx_allocate_vertices(numvertices), gfx_allocate_colours(numcolours));
|
||||
}
|
||||
|
||||
gSPSetLights1(gdl++, g_TitleLightPdLogoMain);
|
||||
|
@ -1461,9 +1461,9 @@ Gfx *title_render_pd_logo(Gfx *gdl)
|
|||
|
||||
#if VERSION == VERSION_JPN_FINAL
|
||||
mtx00015ea8(0.01f, &sp1e8);
|
||||
mtx4_mult_mtx4(&sp2b0, &sp1e8, &sp230);
|
||||
mtx00015f04(0.308f, &sp230);
|
||||
mtx00015f04(3.5f, &sp230);
|
||||
mtx4_mult_mtx4(&sp2b0, &sp1e8, &rendermtx2);
|
||||
mtx00015f04(0.308f, &rendermtx2);
|
||||
mtx00015f04(3.5f, &rendermtx2);
|
||||
|
||||
if (g_PdLogoTitleStep >= 0) {
|
||||
// Background flashing logo
|
||||
|
@ -1482,16 +1482,16 @@ Gfx *title_render_pd_logo(Gfx *gdl)
|
|||
mtx4_mult_mtx4_in_place(&sp2b0, &sp1b0);
|
||||
mtx4_copy(&sp1b0, &sp2b0);
|
||||
|
||||
renderdata.unk00 = &sp2b0;
|
||||
renderdata.unk10 = gfx_allocate(g_TitleModelJpnLogo2->definition->nummatrices * sizeof(Mtxf));
|
||||
renderdata.rendermtx = &sp2b0;
|
||||
renderdata.matrices = gfx_allocate(g_TitleModelJpnLogo2->definition->nummatrices * sizeof(Mtxf));
|
||||
|
||||
mtx4_copy(&sp2b0, renderdata.unk10);
|
||||
mtx4_copy(&sp2b0, renderdata.matrices);
|
||||
|
||||
g_TitleModelJpnLogo2->matrices = renderdata.unk10;
|
||||
g_TitleModelJpnLogo2->matrices = renderdata.matrices;
|
||||
|
||||
model_update_relations(g_TitleModelJpnLogo2);
|
||||
|
||||
renderdata.unk30 = 5;
|
||||
renderdata.context = MODELRENDERCONTEXT_BONDGUN_OBJ_XLU;
|
||||
renderdata.zbufferenabled = false;
|
||||
renderdata.fogcolour = 0xff0000ff;
|
||||
renderdata.envcolour = 0xff000000 | envalpha;
|
||||
|
@ -1537,19 +1537,18 @@ Gfx *title_render_pd_logo(Gfx *gdl)
|
|||
gSPSetLights1(gdl++, g_TitleLightPdLogoJpn);
|
||||
gSPSetLights1(gdl++, g_TitleLightPdLogoMain);
|
||||
|
||||
renderdata.unk00 = &sp230;
|
||||
renderdata.rendermtx = &rendermtx2;
|
||||
renderdata.matrices = gfx_allocate(g_TitleModelJpnPd->definition->nummatrices * sizeof(Mtxf));
|
||||
|
||||
renderdata.unk10 = gfx_allocate(g_TitleModelJpnPd->definition->nummatrices * sizeof(Mtxf));
|
||||
mtx4_copy(&rendermtx2, renderdata.matrices);
|
||||
|
||||
mtx4_copy(&sp230, renderdata.unk10);
|
||||
|
||||
g_TitleModelJpnPd->matrices = renderdata.unk10;
|
||||
g_TitleModelJpnPd->matrices = renderdata.matrices;
|
||||
|
||||
model_update_relations(g_TitleModelJpnPd);
|
||||
|
||||
// @bug: || should be | in fogcolour expression
|
||||
renderdata.zbufferenabled = false;
|
||||
renderdata.unk30 = 5;
|
||||
renderdata.context = MODELRENDERCONTEXT_BONDGUN_OBJ_XLU;
|
||||
renderdata.fogcolour = fogcolour << 24 || fogcolour << 16 || (fogcolour << 8 | 0xff);
|
||||
renderdata.envcolour = envcolour;
|
||||
renderdata.gdl = gdl;
|
||||
|
@ -1578,17 +1577,17 @@ Gfx *title_render_pd_logo(Gfx *gdl)
|
|||
mtx4_mult_mtx4_in_place(&sp2b0, &spb0);
|
||||
mtx4_copy(&spb0, &sp2b0);
|
||||
|
||||
renderdata.unk00 = &sp2b0;
|
||||
renderdata.unk10 = gfx_allocate(g_TitleModelJpnLogo1->definition->nummatrices * sizeof(Mtxf));
|
||||
renderdata.rendermtx = &sp2b0;
|
||||
renderdata.matrices = gfx_allocate(g_TitleModelJpnLogo1->definition->nummatrices * sizeof(Mtxf));
|
||||
|
||||
mtx4_copy(&sp2b0, renderdata.unk10);
|
||||
mtx4_copy(&sp2b0, renderdata.matrices);
|
||||
|
||||
g_TitleModelJpnLogo1->matrices = renderdata.unk10;
|
||||
g_TitleModelJpnLogo1->matrices = renderdata.matrices;
|
||||
|
||||
model_update_relations(g_TitleModelJpnLogo1);
|
||||
|
||||
renderdata.zbufferenabled = false;
|
||||
renderdata.unk30 = 5;
|
||||
renderdata.context = MODELRENDERCONTEXT_BONDGUN_OBJ_XLU;
|
||||
renderdata.fogcolour = 0x000000ff;
|
||||
renderdata.envcolour = 0x000000ff;
|
||||
renderdata.gdl = gdl;
|
||||
|
@ -1606,8 +1605,8 @@ Gfx *title_render_pd_logo(Gfx *gdl)
|
|||
}
|
||||
#else
|
||||
mtx00015f88(1.0f + sp13c, &sp1e8);
|
||||
mtx4_mult_mtx4(&sp2b0, &sp1e8, &sp230);
|
||||
mtx00015f04(0.308f, &sp230);
|
||||
mtx4_mult_mtx4(&sp2b0, &sp1e8, &rendermtx2);
|
||||
mtx00015f04(0.308f, &rendermtx2);
|
||||
|
||||
// Render the "PERFECT DARK" model
|
||||
if (g_PdLogoTitleStep >= 0) {
|
||||
|
@ -1616,18 +1615,18 @@ Gfx *title_render_pd_logo(Gfx *gdl)
|
|||
} else if (g_PdLogoTitleStep == 1) {
|
||||
bool visible = g_PdLogoTitleStepFrac < 0.5f;
|
||||
model = g_TitleModelPdThree;
|
||||
gdl = title_render_pd_logo_model(gdl, model, visible, g_PdLogoTitleStepFrac, 255, g_PdLogoTitleStepFrac, &sp230, g_PdLogoVertices[g_PdLogoVtxColIndex], g_PdLogoColours[g_PdLogoVtxColIndex]);
|
||||
gdl = title_render_pd_logo_model(gdl, model, visible, g_PdLogoTitleStepFrac, 255, g_PdLogoTitleStepFrac, &rendermtx2, g_PdLogoVertices[g_PdLogoVtxColIndex], g_PdLogoColours[g_PdLogoVtxColIndex]);
|
||||
} else if (g_PdLogoTitleStep == 2) {
|
||||
bool visible = g_PdLogoTitleStepFrac < 0.5f;
|
||||
model = g_TitleModelPdTwo;
|
||||
gdl = title_render_pd_logo_model(gdl, model, visible, 1.0f - g_PdLogoTitleStepFrac, 255, 1.0f, &sp230, g_PdLogoVertices[g_PdLogoVtxColIndex], g_PdLogoColours[g_PdLogoVtxColIndex]);
|
||||
gdl = title_render_pd_logo_model(gdl, model, visible, 1.0f - g_PdLogoTitleStepFrac, 255, 1.0f, &rendermtx2, g_PdLogoVertices[g_PdLogoVtxColIndex], g_PdLogoColours[g_PdLogoVtxColIndex]);
|
||||
} else if (g_PdLogoTitleStep == 3) {
|
||||
bool visible = g_PdLogoTitleStepFrac < 0.5f;
|
||||
model = g_TitleModelPdTwo;
|
||||
gdl = title_render_pd_logo_model(gdl, model, visible, g_PdLogoTitleStepFrac, 255, 1.0f, &sp230, g_PdLogoVertices[g_PdLogoVtxColIndex], g_PdLogoColours[g_PdLogoVtxColIndex]);
|
||||
gdl = title_render_pd_logo_model(gdl, model, visible, g_PdLogoTitleStepFrac, 255, 1.0f, &rendermtx2, g_PdLogoVertices[g_PdLogoVtxColIndex], g_PdLogoColours[g_PdLogoVtxColIndex]);
|
||||
} else {
|
||||
model = g_TitleModelPdTwo;
|
||||
gdl = title_render_pd_logo_model(gdl, model, false, 1.0f, 255, 1.0f, &sp230, g_PdLogoVertices[g_PdLogoVtxColIndex], g_PdLogoColours[g_PdLogoVtxColIndex]);
|
||||
gdl = title_render_pd_logo_model(gdl, model, false, 1.0f, 255, 1.0f, &rendermtx2, g_PdLogoVertices[g_PdLogoVtxColIndex], g_PdLogoColours[g_PdLogoVtxColIndex]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -1847,10 +1846,10 @@ void title_tick_nintendo_logo(void)
|
|||
|
||||
Gfx *title_render_nintendo_logo(Gfx *gdl)
|
||||
{
|
||||
struct modelrenderdata renderdata = { NULL, true, 3 };
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
s32 i;
|
||||
s32 j;
|
||||
Mtxf sp108;
|
||||
Mtxf rendermtx;
|
||||
f32 fracdone = g_TitleTimer / (VERSION == VERSION_PAL_FINAL ? 183.0f : TICKS(240.0f));
|
||||
struct coord lightdir = {0, 0, 0};
|
||||
s32 v0;
|
||||
|
@ -1902,22 +1901,23 @@ Gfx *title_render_nintendo_logo(Gfx *gdl)
|
|||
mtx4_load_rotation(&sp9c, &spa8);
|
||||
mtx00015f88(fracdone * 0.2f + 1.0f, &spa8);
|
||||
|
||||
mtx00016ae4(&sp108,
|
||||
mtx00016ae4(&rendermtx,
|
||||
/* pos */ 0.0f, 0.0f, 4000,
|
||||
/* look */ 0.0f, 0.0f, 0.0f,
|
||||
/* up */ 0.0f, 1.0f, 0.0f);
|
||||
|
||||
mtx4_mult_mtx4_in_place(&sp108, &spa8);
|
||||
mtx4_copy(&spa8, &sp108);
|
||||
renderdata.unk00 = &sp108;
|
||||
mtx4_mult_mtx4_in_place(&rendermtx, &spa8);
|
||||
mtx4_copy(&spa8, &rendermtx);
|
||||
|
||||
renderdata.unk10 = gfx_allocate(g_TitleModel->definition->nummatrices * sizeof(Mtxf));
|
||||
mtx4_copy(&sp108, renderdata.unk10);
|
||||
g_TitleModel->matrices = renderdata.unk10;
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
renderdata.matrices = gfx_allocate(g_TitleModel->definition->nummatrices * sizeof(Mtxf));
|
||||
|
||||
mtx4_copy(&rendermtx, renderdata.matrices);
|
||||
g_TitleModel->matrices = renderdata.matrices;
|
||||
|
||||
model_update_relations(g_TitleModel);
|
||||
|
||||
renderdata.flags = 3;
|
||||
renderdata.flags = MODELRENDERFLAG_DEFAULT;
|
||||
renderdata.zbufferenabled = false;
|
||||
renderdata.gdl = gdl;
|
||||
|
||||
|
@ -2026,10 +2026,10 @@ f32 func0f019d0c(f32 arg0)
|
|||
|
||||
Gfx *title_render_rare_logo(Gfx *gdl)
|
||||
{
|
||||
struct modelrenderdata renderdata = { NULL, true, 3 };
|
||||
struct modelrenderdata renderdata = { NULL, true, MODELRENDERFLAG_DEFAULT };
|
||||
s32 i;
|
||||
f32 fracdone = g_TitleTimer / TICKS(240.0f);
|
||||
Mtxf sp118;
|
||||
Mtxf rendermtx;
|
||||
s32 j;
|
||||
s32 s0;
|
||||
|
||||
|
@ -2099,19 +2099,20 @@ Gfx *title_render_rare_logo(Gfx *gdl)
|
|||
mtx4_load_rotation(&spb4, &spc0);
|
||||
mtx00015f88(1 + fracdone * 0.25f, &spc0);
|
||||
|
||||
mtx00016ae4(&sp118,
|
||||
mtx00016ae4(&rendermtx,
|
||||
/* pos */ 0, 0, 4000,
|
||||
/* look */ 0, 0, 0,
|
||||
/* up */ 0, 1, 0);
|
||||
|
||||
mtx4_mult_mtx4_in_place(&sp118, &spc0);
|
||||
mtx4_copy(&spc0, &sp118);
|
||||
mtx4_mult_mtx4_in_place(&rendermtx, &spc0);
|
||||
mtx4_copy(&spc0, &rendermtx);
|
||||
|
||||
renderdata.unk00 = &sp118;
|
||||
renderdata.unk10 = gfx_allocate(g_TitleModel->definition->nummatrices * sizeof(Mtxf));
|
||||
mtx4_copy(&sp118, renderdata.unk10);
|
||||
renderdata.rendermtx = &rendermtx;
|
||||
renderdata.matrices = gfx_allocate(g_TitleModel->definition->nummatrices * sizeof(Mtxf));
|
||||
|
||||
g_TitleModel->matrices = renderdata.unk10;
|
||||
mtx4_copy(&rendermtx, renderdata.matrices);
|
||||
|
||||
g_TitleModel->matrices = renderdata.matrices;
|
||||
|
||||
model_update_relations(g_TitleModel);
|
||||
|
||||
|
@ -2135,8 +2136,8 @@ Gfx *title_render_rare_logo(Gfx *gdl)
|
|||
|
||||
gSPSetLights1(gdl++, g_TitleLightNintendoRare);
|
||||
|
||||
renderdata.flags = 3;
|
||||
renderdata.zbufferenabled = 0;
|
||||
renderdata.flags = MODELRENDERFLAG_DEFAULT;
|
||||
renderdata.zbufferenabled = false;
|
||||
renderdata.gdl = gdl;
|
||||
|
||||
model_render(&renderdata, g_TitleModel);
|
||||
|
@ -2163,8 +2164,8 @@ Gfx *title_render_rare_logo(Gfx *gdl)
|
|||
|
||||
gSPSetLights1(gdl++, g_TitleLightNintendoRare);
|
||||
|
||||
renderdata.flags = 3;
|
||||
renderdata.zbufferenabled = 0;
|
||||
renderdata.flags = MODELRENDERFLAG_DEFAULT;
|
||||
renderdata.zbufferenabled = false;
|
||||
renderdata.gdl = gdl;
|
||||
|
||||
model_render(&renderdata, g_TitleModel);
|
||||
|
|
|
@ -2589,6 +2589,20 @@
|
|||
|
||||
#define MODELRENDERFLAG_OPA 1
|
||||
#define MODELRENDERFLAG_XLU 2
|
||||
#define MODELRENDERFLAG_DEFAULT (MODELRENDERFLAG_OPA | MODELRENDERFLAG_XLU)
|
||||
|
||||
#define MODELRENDERCONTEXT_MENUMODEL_OPA 1
|
||||
#define MODELRENDERCONTEXT_BONDGUN_OPA 4
|
||||
#define MODELRENDERCONTEXT_BONDGUN_OBJ_XLU 5
|
||||
#define MODELRENDERCONTEXT_CHR_OPA 7
|
||||
#define MODELRENDERCONTEXT_CHR_XLU 8
|
||||
#define MODELRENDERCONTEXT_OBJ_OPA 9
|
||||
|
||||
#define MODELRENDERMODE_0 0 // Not referenced in code, but is referenced in model files
|
||||
#define MODELRENDERMODE_SIMPLE 1 // Texture * shade
|
||||
#define MODELRENDERMODE_TRILERP 2 // Use LOD level to modulate texels from two bilerp tiles
|
||||
#define MODELRENDERMODE_CTXAWARE_1PASS 3 // Different settings based on model type, xlu rendered on same pass as opa
|
||||
#define MODELRENDERMODE_CTXAWARE_2PASS 4 // Different settings based on model type, opa/xlu rendered on different passes
|
||||
|
||||
#define MODFILE_GAME 1
|
||||
#define MODFILE_MPSETUP 2
|
||||
|
|
|
@ -433,7 +433,7 @@ struct modelrodata_gundl { // type 0x04
|
|||
void *baseaddr;
|
||||
Vtx *vertices;
|
||||
s16 numvertices;
|
||||
s16 unk12;
|
||||
s16 rendermode;
|
||||
};
|
||||
|
||||
struct modelrodata_distance { // type 0x08
|
||||
|
@ -542,7 +542,7 @@ struct modelrodata_dl { // type 0x18
|
|||
/*0x08*/ Col *colours;
|
||||
/*0x0c*/ Vtx *vertices; // colours follow this array
|
||||
/*0x10*/ s16 numvertices;
|
||||
/*0x12*/ s16 mcount;
|
||||
/*0x12*/ s16 rendermode;
|
||||
/*0x14*/ u16 rwdataindex;
|
||||
/*0x16*/ u16 numcolours;
|
||||
};
|
||||
|
@ -5006,19 +5006,13 @@ struct animtableentry {
|
|||
};
|
||||
|
||||
struct modelrenderdata {
|
||||
/*0x00*/ Mtxf *unk00;
|
||||
/*0x00*/ Mtxf *rendermtx;
|
||||
/*0x04*/ bool zbufferenabled;
|
||||
/*0x08*/ u32 flags;
|
||||
/*0x0c*/ Gfx *gdl;
|
||||
/*0x10*/ Mtxf *unk10;
|
||||
/*0x14*/ u32 unk14;
|
||||
/*0x18*/ u32 unk18;
|
||||
/*0x1c*/ u32 unk1c;
|
||||
/*0x20*/ u32 unk20;
|
||||
/*0x24*/ u32 unk24;
|
||||
/*0x28*/ u32 unk28;
|
||||
/*0x2c*/ u32 unk2c;
|
||||
/*0x30*/ s32 unk30;
|
||||
/*0x10*/ Mtxf *matrices;
|
||||
/*0x14*/ u32 unk14[7];
|
||||
/*0x30*/ s32 context;
|
||||
/*0x34*/ u32 envcolour;
|
||||
/*0x38*/ u32 fogcolour;
|
||||
/*0x3c*/ u32 cullmode;
|
||||
|
|
178
src/lib/model.c
178
src/lib/model.c
|
@ -723,7 +723,7 @@ void model_update_info(struct model *model)
|
|||
}
|
||||
}
|
||||
|
||||
void model_update_chr_node_mtx(struct modelrenderdata *arg0, struct model *model, struct modelnode *node)
|
||||
void model_update_chr_node_mtx(struct modelrenderdata *renderdata, struct model *model, struct modelnode *node)
|
||||
{
|
||||
struct anim *anim = model->anim;
|
||||
union modelrodata *rodata = node->rodata;
|
||||
|
@ -731,7 +731,7 @@ void model_update_chr_node_mtx(struct modelrenderdata *arg0, struct model *model
|
|||
f32 scale = model->scale;
|
||||
struct coord *sp254 = &rwdata->chrinfo.pos;
|
||||
f32 sp250 = rwdata->chrinfo.yrot;
|
||||
Mtxf *sp24c;
|
||||
Mtxf *rendermtx;
|
||||
u32 stack1;
|
||||
Mtxf *mtx = &model->matrices[rodata->chrinfo.mtxindex];
|
||||
s32 animpart = rodata->chrinfo.animpart;
|
||||
|
@ -761,9 +761,9 @@ void model_update_chr_node_mtx(struct modelrenderdata *arg0, struct model *model
|
|||
if (rodata->chrinfo.mtxindex);
|
||||
|
||||
if (node->parent) {
|
||||
sp24c = model_find_node_mtx(model, node->parent, 0);
|
||||
rendermtx = model_find_node_mtx(model, node->parent, 0);
|
||||
} else {
|
||||
sp24c = arg0->unk00;
|
||||
rendermtx = renderdata->rendermtx;
|
||||
}
|
||||
|
||||
anim_get_rot_translate_scale(animpart, anim->flip, skel, anim->animnum, anim->frameslot1, &rot1, &translate1, &scale1);
|
||||
|
@ -824,8 +824,8 @@ void model_update_chr_node_mtx(struct modelrenderdata *arg0, struct model *model
|
|||
mtx00015f4c(scale, &sp158);
|
||||
}
|
||||
|
||||
if (sp24c) {
|
||||
mtx00015be4(sp24c, &sp158, mtx);
|
||||
if (rendermtx) {
|
||||
mtx00015be4(rendermtx, &sp158, mtx);
|
||||
} else {
|
||||
mtx4_copy(&sp158, mtx);
|
||||
}
|
||||
|
@ -846,7 +846,7 @@ void model_position_joint_using_vec_rot(struct modelrenderdata *renderdata, stru
|
|||
if (node->parent != NULL) {
|
||||
rendermtx = model_find_node_mtx(model, node->parent, 0);
|
||||
} else {
|
||||
rendermtx = renderdata->unk00;
|
||||
rendermtx = renderdata->rendermtx;
|
||||
}
|
||||
|
||||
if (rendermtx != NULL) {
|
||||
|
@ -960,7 +960,7 @@ void model_position_joint_using_quat_rot(struct modelrenderdata *renderdata, str
|
|||
if (node->parent != NULL) {
|
||||
rendermtx = model_find_node_mtx(model, node->parent, 0);
|
||||
} else {
|
||||
rendermtx = renderdata->unk00;
|
||||
rendermtx = renderdata->rendermtx;
|
||||
}
|
||||
|
||||
if (rendermtx != NULL) {
|
||||
|
@ -1060,7 +1060,7 @@ void model_update_position_node_mtx(struct modelrenderdata *renderdata, struct m
|
|||
struct coord scale1;
|
||||
bool sp128;
|
||||
Mtxf spe8;
|
||||
Mtxf *mtx;
|
||||
Mtxf *rendermtx;
|
||||
f32 spe0;
|
||||
struct coord rot2;
|
||||
struct coord translate2;
|
||||
|
@ -1174,37 +1174,37 @@ void model_update_position_node_mtx(struct modelrenderdata *renderdata, struct m
|
|||
}
|
||||
} else {
|
||||
if (node->parent) {
|
||||
mtx = model_find_node_mtx(model, node->parent, 0);
|
||||
rendermtx = model_find_node_mtx(model, node->parent, 0);
|
||||
} else {
|
||||
mtx = renderdata->unk00;
|
||||
rendermtx = renderdata->rendermtx;
|
||||
}
|
||||
|
||||
if (mtx) {
|
||||
if (rendermtx) {
|
||||
mtx4_load_translation(&rodata->pos, &spe8);
|
||||
mtx00015be4(mtx, &spe8, &model->matrices[rodata->mtxindex0]);
|
||||
mtx00015be4(rendermtx, &spe8, &model->matrices[rodata->mtxindex0]);
|
||||
} else {
|
||||
mtx4_load_translation(&rodata->pos, &model->matrices[rodata->mtxindex0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void model_update_position_held_node_mtx(struct modelrenderdata *arg0, struct model *model, struct modelnode *node)
|
||||
void model_update_position_held_node_mtx(struct modelrenderdata *renderdata, struct model *model, struct modelnode *node)
|
||||
{
|
||||
union modelrodata *rodata = node->rodata;
|
||||
Mtxf *sp68;
|
||||
Mtxf *rendermtx;
|
||||
Mtxf sp28;
|
||||
s32 mtxindex = rodata->positionheld.mtxindex;
|
||||
Mtxf *matrices = model->matrices;
|
||||
|
||||
if (node->parent) {
|
||||
sp68 = model_find_node_mtx(model, node->parent, 0);
|
||||
rendermtx = model_find_node_mtx(model, node->parent, 0);
|
||||
} else {
|
||||
sp68 = arg0->unk00;
|
||||
rendermtx = renderdata->rendermtx;
|
||||
}
|
||||
|
||||
if (sp68) {
|
||||
if (rendermtx) {
|
||||
mtx4_load_translation(&rodata->positionheld.pos, &sp28);
|
||||
mtx00015be4(sp68, &sp28, &matrices[mtxindex]);
|
||||
mtx00015be4(rendermtx, &sp28, &matrices[mtxindex]);
|
||||
} else {
|
||||
mtx4_load_translation(&rodata->positionheld.pos, &matrices[mtxindex]);
|
||||
}
|
||||
|
@ -1499,7 +1499,7 @@ void model_update_relations(struct model *model)
|
|||
}
|
||||
}
|
||||
|
||||
void model_update_matrices(struct modelrenderdata *arg0, struct model *model)
|
||||
void model_update_matrices(struct modelrenderdata *renderdata, struct model *model)
|
||||
{
|
||||
struct modelnode *node = model->definition->rootnode;
|
||||
|
||||
|
@ -1508,13 +1508,13 @@ void model_update_matrices(struct modelrenderdata *arg0, struct model *model)
|
|||
|
||||
switch (type) {
|
||||
case MODELNODETYPE_CHRINFO:
|
||||
model_update_chr_node_mtx(arg0, model, node);
|
||||
model_update_chr_node_mtx(renderdata, model, node);
|
||||
break;
|
||||
case MODELNODETYPE_POSITION:
|
||||
model_update_position_node_mtx(arg0, model, node);
|
||||
model_update_position_node_mtx(renderdata, model, node);
|
||||
break;
|
||||
case MODELNODETYPE_POSITIONHELD:
|
||||
model_update_position_held_node_mtx(arg0, model, node);
|
||||
model_update_position_held_node_mtx(renderdata, model, node);
|
||||
break;
|
||||
case MODELNODETYPE_DISTANCE:
|
||||
model_update_distance_relations(model, node);
|
||||
|
@ -1550,9 +1550,9 @@ void model_update_matrices(struct modelrenderdata *arg0, struct model *model)
|
|||
|
||||
void model_set_matrices(struct modelrenderdata *renderdata, struct model *model)
|
||||
{
|
||||
model->matrices = renderdata->unk10;
|
||||
model->matrices = renderdata->matrices;
|
||||
|
||||
renderdata->unk10 += model->definition->nummatrices;
|
||||
renderdata->matrices += model->definition->nummatrices;
|
||||
|
||||
#if VERSION >= VERSION_PAL_BETA
|
||||
if (var8005efb0_2 || !modelasm00018680(renderdata, model)) {
|
||||
|
@ -2797,7 +2797,7 @@ void model_tick_anim(struct model *model, s32 lvupdate240, bool arg2)
|
|||
}
|
||||
#endif
|
||||
|
||||
void model_apply_render_mode_type1(struct modelrenderdata *renderdata)
|
||||
void model_apply_rendermode_simple(struct modelrenderdata *renderdata)
|
||||
{
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_1CYCLE);
|
||||
|
@ -2811,10 +2811,12 @@ void model_apply_render_mode_type1(struct modelrenderdata *renderdata)
|
|||
gDPSetCombineMode(renderdata->gdl++, G_CC_MODULATEIA, G_CC_MODULATEIA);
|
||||
}
|
||||
|
||||
void model_apply_render_mode_type3(struct modelrenderdata *renderdata, bool arg1)
|
||||
void model_apply_rendermode_ctxaware_1pass(struct modelrenderdata *renderdata, bool isopa)
|
||||
{
|
||||
if (renderdata->unk30 == 7) {
|
||||
if (arg1) {
|
||||
if (renderdata->context == MODELRENDERCONTEXT_CHR_OPA) {
|
||||
// envcolour is blood colour
|
||||
// fogcolour is shade colour
|
||||
if (isopa) {
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->fogcolour);
|
||||
|
@ -2833,8 +2835,10 @@ void model_apply_render_mode_type3(struct modelrenderdata *renderdata, bool arg1
|
|||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
||||
}
|
||||
}
|
||||
} else if (renderdata->unk30 == 8) {
|
||||
if (arg1) {
|
||||
} else if (renderdata->context == MODELRENDERCONTEXT_CHR_XLU) {
|
||||
// envcolour is opacity
|
||||
// fogcolour is shade colour
|
||||
if (isopa) {
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->fogcolour);
|
||||
|
@ -2847,9 +2851,11 @@ void model_apply_render_mode_type3(struct modelrenderdata *renderdata, bool arg1
|
|||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
||||
}
|
||||
}
|
||||
} else if (renderdata->unk30 == 9) {
|
||||
} else if (renderdata->context == MODELRENDERCONTEXT_OBJ_OPA) {
|
||||
// envcolour's blue channel is opacity
|
||||
// fogcolour is shade colour
|
||||
if ((renderdata->envcolour & 0xff) == 0) {
|
||||
if (arg1) {
|
||||
if (isopa) {
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->fogcolour);
|
||||
|
@ -2870,7 +2876,7 @@ void model_apply_render_mode_type3(struct modelrenderdata *renderdata, bool arg1
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if (arg1) {
|
||||
if (isopa) {
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->fogcolour);
|
||||
|
@ -2893,8 +2899,9 @@ void model_apply_render_mode_type3(struct modelrenderdata *renderdata, bool arg1
|
|||
}
|
||||
}
|
||||
}
|
||||
} else if (renderdata->unk30 == 4) {
|
||||
if (arg1) {
|
||||
} else if (renderdata->context == MODELRENDERCONTEXT_BONDGUN_OPA) {
|
||||
// envcolour is shade colour
|
||||
if (isopa) {
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->envcolour);
|
||||
|
@ -2912,10 +2919,12 @@ void model_apply_render_mode_type3(struct modelrenderdata *renderdata, bool arg1
|
|||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
||||
}
|
||||
}
|
||||
} else if (renderdata->unk30 == 5) {
|
||||
} else if (renderdata->context == MODELRENDERCONTEXT_BONDGUN_OBJ_XLU) {
|
||||
// envcolour is opacity
|
||||
// fogcolour is shade colour
|
||||
u8 alpha;
|
||||
|
||||
if (arg1) {
|
||||
if (isopa) {
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->fogcolour);
|
||||
|
@ -2948,8 +2957,8 @@ void model_apply_render_mode_type3(struct modelrenderdata *renderdata, bool arg1
|
|||
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (arg1) {
|
||||
} else { // MODELRENDERCONTEXT_MENUMODEL_OPA
|
||||
if (isopa) {
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
||||
|
@ -2969,16 +2978,18 @@ void model_apply_render_mode_type3(struct modelrenderdata *renderdata, bool arg1
|
|||
}
|
||||
}
|
||||
|
||||
void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1)
|
||||
void model_apply_rendermode_ctxaware_2pass(struct modelrenderdata *renderdata, bool isopa)
|
||||
{
|
||||
if (renderdata->unk30 == 7) {
|
||||
if (renderdata->context == MODELRENDERCONTEXT_CHR_OPA) {
|
||||
// envcolour is blood colour
|
||||
// fogcolour is shade colour
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->fogcolour);
|
||||
gDPSetEnvColorViaWord(renderdata->gdl++, renderdata->envcolour | 0x000000ff);
|
||||
gDPSetCombineMode(renderdata->gdl++, G_CC_CUSTOM_17, G_CC_CUSTOM_18);
|
||||
|
||||
if (arg1) {
|
||||
if (isopa) {
|
||||
if (renderdata->zbufferenabled) {
|
||||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
||||
} else {
|
||||
|
@ -2991,7 +3002,9 @@ void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1
|
|||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
||||
}
|
||||
}
|
||||
} else if (renderdata->unk30 == 8) {
|
||||
} else if (renderdata->context == MODELRENDERCONTEXT_CHR_XLU) {
|
||||
// envcolour is opacity
|
||||
// fogcolour is shade colour
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->fogcolour);
|
||||
|
@ -3003,7 +3016,9 @@ void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1
|
|||
} else {
|
||||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
||||
}
|
||||
} else if (renderdata->unk30 == 9) {
|
||||
} else if (renderdata->context == MODELRENDERCONTEXT_OBJ_OPA) {
|
||||
// envcolour's blue channel is opacity
|
||||
// fogcolour is shade colour
|
||||
if ((renderdata->envcolour & 0xff) == 0) {
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
|
@ -3011,7 +3026,7 @@ void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1
|
|||
gDPSetEnvColorViaWord(renderdata->gdl++, 0xffffffff);
|
||||
gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour >> 8) & 0xff);
|
||||
|
||||
if (arg1) {
|
||||
if (isopa) {
|
||||
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_CUSTOM_20);
|
||||
|
||||
if (renderdata->zbufferenabled) {
|
||||
|
@ -3034,7 +3049,7 @@ void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1
|
|||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->fogcolour);
|
||||
gDPSetEnvColorViaWord(renderdata->gdl++, renderdata->envcolour & 0xff);
|
||||
|
||||
if (arg1) {
|
||||
if (isopa) {
|
||||
gDPSetCombineMode(renderdata->gdl++, G_CC_CUSTOM_21, G_CC_CUSTOM_18);
|
||||
|
||||
if (renderdata->zbufferenabled) {
|
||||
|
@ -3053,13 +3068,14 @@ void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1
|
|||
}
|
||||
}
|
||||
}
|
||||
} else if (renderdata->unk30 == 4) {
|
||||
} else if (renderdata->context == MODELRENDERCONTEXT_BONDGUN_OPA) {
|
||||
// envcolour is shade colour
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, renderdata->envcolour);
|
||||
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
||||
|
||||
if (arg1) {
|
||||
if (isopa) {
|
||||
if (renderdata->zbufferenabled) {
|
||||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
||||
} else {
|
||||
|
@ -3072,7 +3088,9 @@ void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1
|
|||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
||||
}
|
||||
}
|
||||
} else if (renderdata->unk30 == 5) {
|
||||
} else if (renderdata->context == MODELRENDERCONTEXT_BONDGUN_OBJ_XLU) {
|
||||
// envcolour is opacity
|
||||
// fogcolour is shade colour
|
||||
u8 alpha;
|
||||
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
|
@ -3084,7 +3102,7 @@ void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1
|
|||
if (alpha < 255) {
|
||||
gDPSetEnvColor(renderdata->gdl++, 0xff, 0xff, 0xff, alpha);
|
||||
|
||||
if (arg1) {
|
||||
if (isopa) {
|
||||
if (renderdata->envcolour & 0xff00) {
|
||||
gDPSetCombineMode(renderdata->gdl++, G_CC_CUSTOM_24, G_CC_MODULATEIA2);
|
||||
} else {
|
||||
|
@ -3102,13 +3120,13 @@ void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1
|
|||
} else {
|
||||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
||||
}
|
||||
} else {
|
||||
} else { // MODELRENDERCONTEXT_MENUMODEL_OPA
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
gDPSetFogColorViaWord(renderdata->gdl++, 0xffffff00);
|
||||
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
||||
|
||||
if (arg1) {
|
||||
if (isopa) {
|
||||
if (renderdata->zbufferenabled) {
|
||||
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
||||
} else {
|
||||
|
@ -3124,7 +3142,7 @@ void model_apply_render_mode_type4(struct modelrenderdata *renderdata, bool arg1
|
|||
}
|
||||
}
|
||||
|
||||
void model_apply_render_mode_type2(struct modelrenderdata *renderdata)
|
||||
void model_apply_rendermode_trilerp(struct modelrenderdata *renderdata)
|
||||
{
|
||||
gDPPipeSync(renderdata->gdl++);
|
||||
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
||||
|
@ -3164,38 +3182,38 @@ void model_render_node_gundl(struct modelrenderdata *renderdata, struct model *m
|
|||
model_apply_cull_mode(renderdata);
|
||||
}
|
||||
|
||||
switch (rodata->unk12) {
|
||||
case 1:
|
||||
model_apply_render_mode_type1(renderdata);
|
||||
switch (rodata->rendermode) {
|
||||
case MODELRENDERMODE_SIMPLE:
|
||||
model_apply_rendermode_simple(renderdata);
|
||||
break;
|
||||
case 3:
|
||||
model_apply_render_mode_type3(renderdata, true);
|
||||
case MODELRENDERMODE_CTXAWARE_1PASS:
|
||||
model_apply_rendermode_ctxaware_1pass(renderdata, true);
|
||||
break;
|
||||
case 4:
|
||||
model_apply_render_mode_type4(renderdata, true);
|
||||
case MODELRENDERMODE_CTXAWARE_2PASS:
|
||||
model_apply_rendermode_ctxaware_2pass(renderdata, true);
|
||||
break;
|
||||
case 2:
|
||||
model_apply_render_mode_type2(renderdata);
|
||||
case MODELRENDERMODE_TRILERP:
|
||||
model_apply_rendermode_trilerp(renderdata);
|
||||
break;
|
||||
}
|
||||
|
||||
gSPDisplayList(renderdata->gdl++, rodata->opagdl);
|
||||
|
||||
if (rodata->unk12 == 3 && rodata->xlugdl) {
|
||||
model_apply_render_mode_type3(renderdata, false);
|
||||
if (rodata->rendermode == MODELRENDERMODE_CTXAWARE_1PASS && rodata->xlugdl) {
|
||||
model_apply_rendermode_ctxaware_1pass(renderdata, false);
|
||||
|
||||
gSPDisplayList(renderdata->gdl++, rodata->xlugdl);
|
||||
}
|
||||
}
|
||||
|
||||
if ((renderdata->flags & MODELRENDERFLAG_XLU) && rodata->opagdl && rodata->unk12 == 4 && rodata->xlugdl) {
|
||||
if ((renderdata->flags & MODELRENDERFLAG_XLU) && rodata->opagdl && rodata->rendermode == MODELRENDERMODE_CTXAWARE_2PASS && rodata->xlugdl) {
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->baseaddr));
|
||||
|
||||
if (renderdata->cullmode) {
|
||||
model_apply_cull_mode(renderdata);
|
||||
}
|
||||
|
||||
model_apply_render_mode_type4(renderdata, false);
|
||||
model_apply_rendermode_ctxaware_2pass(renderdata, false);
|
||||
|
||||
gSPDisplayList(renderdata->gdl++, rodata->xlugdl);
|
||||
}
|
||||
|
@ -3219,18 +3237,18 @@ void model_render_node_dl(struct modelrenderdata *renderdata, struct model *mode
|
|||
model_apply_cull_mode(renderdata);
|
||||
}
|
||||
|
||||
switch (rodata->dl.mcount) {
|
||||
case 1:
|
||||
model_apply_render_mode_type1(renderdata);
|
||||
switch (rodata->dl.rendermode) {
|
||||
case MODELRENDERMODE_SIMPLE:
|
||||
model_apply_rendermode_simple(renderdata);
|
||||
break;
|
||||
case 3:
|
||||
model_apply_render_mode_type3(renderdata, true);
|
||||
case MODELRENDERMODE_CTXAWARE_1PASS:
|
||||
model_apply_rendermode_ctxaware_1pass(renderdata, true);
|
||||
break;
|
||||
case 4:
|
||||
model_apply_render_mode_type4(renderdata, true);
|
||||
case MODELRENDERMODE_CTXAWARE_2PASS:
|
||||
model_apply_rendermode_ctxaware_2pass(renderdata, true);
|
||||
break;
|
||||
case 2:
|
||||
model_apply_render_mode_type2(renderdata);
|
||||
case MODELRENDERMODE_TRILERP:
|
||||
model_apply_rendermode_trilerp(renderdata);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -3239,8 +3257,8 @@ void model_render_node_dl(struct modelrenderdata *renderdata, struct model *mode
|
|||
|
||||
gSPDisplayList(renderdata->gdl++, rwdata->dl.gdl);
|
||||
|
||||
if (rodata->dl.mcount == 3 && rodata->dl.xlugdl) {
|
||||
model_apply_render_mode_type3(renderdata, false);
|
||||
if (rodata->dl.rendermode == MODELRENDERMODE_CTXAWARE_1PASS && rodata->dl.xlugdl) {
|
||||
model_apply_rendermode_ctxaware_1pass(renderdata, false);
|
||||
|
||||
gSPDisplayList(renderdata->gdl++, rodata->dl.xlugdl);
|
||||
}
|
||||
|
@ -3250,7 +3268,7 @@ void model_render_node_dl(struct modelrenderdata *renderdata, struct model *mode
|
|||
if (renderdata->flags & MODELRENDERFLAG_XLU) {
|
||||
union modelrwdata *rwdata = model_get_node_rw_data(model, node);
|
||||
|
||||
if (rwdata->dl.gdl && rodata->dl.mcount == 4 && rodata->dl.xlugdl) {
|
||||
if (rwdata->dl.gdl && rodata->dl.rendermode == MODELRENDERMODE_CTXAWARE_2PASS && rodata->dl.xlugdl) {
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->dl.colours));
|
||||
|
||||
if (renderdata->cullmode) {
|
||||
|
@ -3260,7 +3278,7 @@ void model_render_node_dl(struct modelrenderdata *renderdata, struct model *mode
|
|||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_VTX, osVirtualToPhysical(rwdata->dl.vertices));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL2, osVirtualToPhysical(rwdata->dl.colours));
|
||||
|
||||
model_apply_render_mode_type4(renderdata, false);
|
||||
model_apply_rendermode_ctxaware_2pass(renderdata, false);
|
||||
|
||||
gSPDisplayList(renderdata->gdl++, rodata->dl.xlugdl);
|
||||
}
|
||||
|
|
|
@ -363,7 +363,7 @@ bool modelasm00018680(struct modelrenderdata *renderdata, struct model *model)
|
|||
}
|
||||
}
|
||||
|
||||
t0mtx = node->parent ? modelasm_find_node_mtx(model, node->parent) : renderdata->unk00;
|
||||
t0mtx = node->parent ? modelasm_find_node_mtx(model, node->parent) : renderdata->rendermtx;
|
||||
t1mtx = &model->matrices[node->rodata->position.mtxindex0];
|
||||
|
||||
modelasm_mtx_multiply(t0mtx, t1mtx);
|
||||
|
@ -650,7 +650,7 @@ bool modelasm00018680(struct modelrenderdata *renderdata, struct model *model)
|
|||
f20 *= model->scale;
|
||||
}
|
||||
|
||||
t0mtx = renderdata->unk00;
|
||||
t0mtx = renderdata->rendermtx;
|
||||
t1mtx = &model->matrices[node->rodata->chrinfo.mtxindex];
|
||||
|
||||
modelasm_mtx_multiply(t0mtx, t1mtx);
|
||||
|
@ -671,7 +671,7 @@ bool modelasm00018680(struct modelrenderdata *renderdata, struct model *model)
|
|||
}
|
||||
break;
|
||||
case MODELNODETYPE_POSITIONHELD:
|
||||
t0mtx = node->parent ? modelasm_find_node_mtx(model, node->parent) : renderdata->unk00;
|
||||
t0mtx = node->parent ? modelasm_find_node_mtx(model, node->parent) : renderdata->rendermtx;
|
||||
|
||||
f12 = 1;
|
||||
f13 = 0;
|
||||
|
|
Loading…
Reference in New Issue