void F3DEX2CBFD_MoveWord( u32 w0, u32 w1 ) { switch (_SHIFTR( w0, 16, 8 )) { case G_MW_NUMLIGHT: gSPNumLights(w1 / 48); break; case G_MW_CLIP: gSPClipRatio( w1 ); break; case G_MW_SEGMENT: gSPSegment( _SHIFTR( w0, 0, 16 ) >> 2, w1 & 0x00FFFFFF ); break; case G_MW_FOG: gSPFogFactor( (s16)_SHIFTR( w1, 16, 16 ), (s16)_SHIFTR( w1, 0, 16 ) ); break; case G_MW_PERSPNORM: gSPPerspNormalize( w1 ); break; case G_MV_COORDMOD: gSPCoordMod( w0, w1 ); break; } }
/*----------------------------------------------------------------------------- graphic00 -----------------------------------------------------------------------------*/ void graphic_00(void) { Dynamic* dynamic_ptr; NNScTask *t; static LookAt lookat; u16 perspNorm; u32 cnt; /* specify display list buffer/task buffer */ dynamic_ptr = &gfx_dynamic[gfx_gtask_no]; glist_ptr = &gfx_glist[gfx_gtask_no][0]; t = &gfx_task[gfx_gtask_no]; /* set RSP and RDP */ gfxRCPInit(); /* clear frame buffer and Z buffer */ gfxClearCfb(); /* calculate and set projection matrix */ guPerspective(&dynamic_ptr->projection, &perspNorm, 33, 320.0/240.0, 10, 2000, 1.0); guLookAtReflect(&dynamic_ptr->viewing, &lookat, 0, 50, -600 , 0, 0, 0, 0, 1, 0); gSPPerspNormalize(glist_ptr++, perspNorm); gSPLookAt(glist_ptr++, &lookat); gSPMatrix(glist_ptr++, &(dynamic_ptr->projection), G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH); gSPMatrix(glist_ptr++, &(dynamic_ptr->viewing), G_MTX_PROJECTION | G_MTX_MUL | G_MTX_NOPUSH); /* draw model */ for(cnt = 0; cnt < numControllers; cnt++){ ModelController(dynamic_ptr,&mtx_cont[cnt]); } /* end top-level display list */ gDPFullSync(glist_ptr++); gSPEndDisplayList(glist_ptr++); /* Flush the dynamic segment */ osWritebackDCacheAll(); gfxTaskStart(t, gfx_glist[gfx_gtask_no], (s32)(glist_ptr - gfx_glist[gfx_gtask_no]) * sizeof (Gfx), GFX_GSPCODE_F3DEX, NN_SC_SWAPBUFFER); }
static void drawframe(dynamic_stuff *generate, Gfx **glistpParam, float t) { Gfx *glistp; Vtx *valist[2]; /* Array of vertex lists */ float weights[2]; /* Array of weights */ u16 perspnorm; int i; unsigned char a2; glistp = *glistpParam; /* Copy to local var */ /* * Set up matricies */ /* Z-distance to force for faces */ #define ZDIST (700*4) guPerspective(&(generate->projection), &perspnorm, 60.0, 320.0/240.0, ZDIST-500.0, ZDIST+500.0, 1.0); gSPPerspNormalize(glistp++, perspnorm); /* guRotate(&(generate->modeling_rotate1), 40.0, 1.0, 1.0, 1.0); */ guTranslate(&(generate->modeling_translate), 0.0, 0.0, 0.0); /* -... */ gSPMatrix(glistp++, OS_K0_TO_PHYSICAL(&(generate->projection)), G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH); gSPMatrix(glistp++, OS_K0_TO_PHYSICAL(&(generate->modeling_translate)), G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH); /* gSPMatrix(glistp++, OS_K0_TO_PHYSICAL(&(generate->modeling_rotate1)), G_MTX_MODELVIEW|G_MTX_MUL|G_MTX_NOPUSH); */ /* * Morph */ valist[0] = vface1; weights[0] = t; valist[1] = vface2; weights[1] = 1.0 - t; /* Two sets of key verticies, tricnt*3 verticies per set, alpha = 255 */ /* Texture coords come from vface1 */ morph(valist, weights, 2, &(generate->tvface1[0]), tricnt*3, 255, -ZDIST); /* * 2nd set of verticies, same except for different alpha and s,t */ a2 = 255*(1.0-t); /* alpha value */ for (i=0; i<tricnt*3; i++) { generate->tvface2[i] = generate->tvface1[i]; generate->tvface2[i].v.tc[0] = vface2[i].v.tc[0] << 6; generate->tvface2[i].v.tc[1] = vface2[i].v.tc[1] << 6; generate->tvface2[i].v.cn[3] = a2; } /* for i */ /* Pass 1 -- opaque */ gSPSetGeometryMode(glistp++, G_SHADE); gDPPipeSync(glistp++); gDPSetRenderMode(glistp++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); gSPDisplayList(glistp++, OS_K0_TO_PHYSICAL(dlist1)); /* Pass 2 -- transparent */ gSPSetGeometryMode(glistp++, G_SHADE); gDPPipeSync(glistp++); gDPSetRenderMode(glistp++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); gSPDisplayList(glistp++, OS_K0_TO_PHYSICAL(dlist2)); *glistpParam = glistp; /* Copy back from local var */ } /* drawframe */
void F3D_MoveWord( u32 w0, u32 w1 ) { switch (_SHIFTR( w0, 0, 8 )) { case G_MW_MATRIX: gSPInsertMatrix( _SHIFTR( w0, 8, 16 ), w1 ); break; case G_MW_NUMLIGHT: gSPNumLights( ((w1 - 0x80000000) >> 5) - 1 ); break; case G_MW_CLIP: gSPClipRatio( w1 ); break; case G_MW_SEGMENT: gSPSegment( _SHIFTR( w0, 8, 16 ) >> 2, w1 & 0x00FFFFFF ); break; case G_MW_FOG: /* u32 fm, fo, min, max; fm = _SHIFTR( w1, 16, 16 ); fo = _SHIFTR( w1, 0, 16 ); min = 500 - (fo * (128000 / fm)) / 256; max = (128000 / fm) + min;*/ gSPFogFactor( (s16)_SHIFTR( w1, 16, 16 ), (s16)_SHIFTR( w1, 0, 16 ) ); break; case G_MW_LIGHTCOL: switch (_SHIFTR( w0, 8, 16 )) { case F3D_MWO_aLIGHT_1: gSPLightColor( LIGHT_1, w1 ); break; case F3D_MWO_aLIGHT_2: gSPLightColor( LIGHT_2, w1 ); break; case F3D_MWO_aLIGHT_3: gSPLightColor( LIGHT_3, w1 ); break; case F3D_MWO_aLIGHT_4: gSPLightColor( LIGHT_4, w1 ); break; case F3D_MWO_aLIGHT_5: gSPLightColor( LIGHT_5, w1 ); break; case F3D_MWO_aLIGHT_6: gSPLightColor( LIGHT_6, w1 ); break; case F3D_MWO_aLIGHT_7: gSPLightColor( LIGHT_7, w1 ); break; case F3D_MWO_aLIGHT_8: gSPLightColor( LIGHT_8, w1 ); break; } break; case G_MW_POINTS: gSPModifyVertex( _SHIFTR( w0, 8, 16 ) / 40, _SHIFTR( w0, 0, 8 ) % 40, w1 ); break; case G_MW_PERSPNORM: gSPPerspNormalize( w1 ); break; } }
void F3DSETA_Perpnorm(u32 w0, u32 w1) { gSPPerspNormalize(w1); }
void F3D_MoveWord( u32 w0, u32 w1 ) { switch (_SHIFTR( w0, 0, 8 )) { case G_MW_MATRIX: gSPInsertMatrix( _SHIFTR( w0, 8, 16 ), w1 ); break; case G_MW_NUMLIGHT: gSPNumLights( ((w1 - 0x80000000) >> 5) - 1 ); break; case G_MW_CLIP: gSPClipRatio( w1 ); break; case G_MW_SEGMENT: gSPSegment( _SHIFTR( w0, 10, 4 ), w1 & 0x00FFFFFF ); break; case G_MW_FOG: gSPFogFactor( (s16)_SHIFTR( w1, 16, 16 ), (s16)_SHIFTR( w1, 0, 16 ) ); break; case G_MW_LIGHTCOL: switch (_SHIFTR( w0, 8, 16 )) { case F3D_MWO_aLIGHT_1: gSPLightColor( LIGHT_1, w1 ); break; case F3D_MWO_aLIGHT_2: gSPLightColor( LIGHT_2, w1 ); break; case F3D_MWO_aLIGHT_3: gSPLightColor( LIGHT_3, w1 ); break; case F3D_MWO_aLIGHT_4: gSPLightColor( LIGHT_4, w1 ); break; case F3D_MWO_aLIGHT_5: gSPLightColor( LIGHT_5, w1 ); break; case F3D_MWO_aLIGHT_6: gSPLightColor( LIGHT_6, w1 ); break; case F3D_MWO_aLIGHT_7: gSPLightColor( LIGHT_7, w1 ); break; case F3D_MWO_aLIGHT_8: gSPLightColor( LIGHT_8, w1 ); break; } break; case G_MW_POINTS: { const u32 val = _SHIFTR(w0, 8, 16); gSPModifyVertex(val / 40, val % 40, w1); } break; case G_MW_PERSPNORM: gSPPerspNormalize( w1 ); break; } }