void ParticlePart(int crtl) { tex= plx_txr_load("/rd/gfx/particle.png",1,0); init_particle(); // float theta = 0; int done, loop, cnt=0; uint32 color; plx_dr_state_t dr; float x,y,z; // Setup the context //pvr_set_bg_color(0.0f,0.0f,0.0f); // Init 3D stuff. mat3d is like KGL. //plx_mat3d_init(); plx_mat3d_mode(PLX_MAT_PROJECTION); plx_mat3d_identity(); plx_mat3d_perspective(45.0f, 640.0f / 480.0f, 0.1f, 100.0f); plx_mat3d_mode(PLX_MAT_MODELVIEW); for (done = 0; !done;) { // Check for start MAPLE_FOREACH_BEGIN(MAPLE_FUNC_CONTROLLER, cont_state_t, st) if (st->buttons & CONT_START) done = 1; if (st->buttons & CONT_X) { printf("\nTime: %d",cnt); /* vid_screen_shot("/pc/shots/demo_part_f");*/ } MAPLE_FOREACH_END() if(col<12) col++; else col=0; // Setup the frame plx_cxt_texture(tex); //pvr_wait_ready(); //pvr_scene_begin(); //pvr_list_begin(PLX_LIST_TR_POLY); // Submit the context plx_cxt_send(PLX_LIST_TR_POLY); // plx_fcxt_setcolor4f(cxt,particle[loop].life,particle[loop].r, particle[loop].g, particle[loop].r); //PrintString("Driver's High - L'Arc-en-Ciel",80.0f,22.0,30.0f); plx_mat3d_identity(); for (loop=0; loop<MAX_PARTICLES; loop++) { // Loop Through All The Particl if (particle[loop].active) { // If The Particle Is Active x=particle[loop].x; // Grab Our Particle X Position y=particle[loop].y; // Grab Our Particle Y Position z=particle[loop].z+zoom; // Particle Z Pos + Zoom //printf("\nR: %f - G: %f - B: %f",particle[loop].r,particle[loop].g,particle[loop].b); color = plx_pack_color(particle[loop].life,particle[loop].r,particle[loop].g,particle[loop].b); // printf("\nColor: %d",color); //0xff0a0a0a; plx_mat3d_identity(); plx_mat3d_translate(x, y, z); plx_mat_identity(); plx_mat3d_apply(PLX_MAT_SCREENVIEW); plx_mat3d_apply(PLX_MAT_PROJECTION); plx_mat3d_apply(PLX_MAT_MODELVIEW); plx_dr_init(&dr); plx_cxt_init(); plx_cxt_culling(PLX_CULL_NONE); plx_txr_send_hdr(tex,PLX_LIST_TR_POLY,1); plx_spr_fnp(32,32,320.0+particle[loop].x,240.0+particle[loop].y,particle[loop].z,particle[loop].life,particle[loop].r,particle[loop].g,particle[loop].b); /* plx_vert_indm3(&dr, PLX_VERT,-0.5,0.5,-0.5,color); plx_vert_indm3(&dr, PLX_VERT,-0.5,-0.5,-0.5, color); plx_vert_indm3(&dr, PLX_VERT,0.5,0.5,-0.5, color); plx_vert_indm3(&dr, PLX_VERT_EOS,0.5,-0.5,-0.5, color); */ particle[loop].x+=particle[loop].xi/(slowdown*250); // Move On The X Axis By X Speed particle[loop].y+=particle[loop].yi/(slowdown*250); // Move On The Y Axis By Y Speed particle[loop].z+=particle[loop].zi/(slowdown*250); // Move On The Z Axis By Z Speed particle[loop].xi+=particle[loop].xg; // Take Pull On X Axis Into Account particle[loop].yi+=particle[loop].yg; // Take Pull On Y Axis Into Account particle[loop].zi+=particle[loop].zg; // Take Pull On Z Axis Into Account particle[loop].life-=particle[loop].fade; // Reduce Particles Life By 'Fade' if (particle[loop].life<0.0f) { // If Particle Is Burned Out particle[loop].life=1.0f; // Give It New Life particle[loop].fade=(float)(rand()%100)/1000.0f+0.003f; // Random Fade Value particle[loop].x=0.0f; // Center On X Axis particle[loop].y=0.0f; // Center On Y Axis particle[loop].z=0.0f; // Center On Z Axis particle[loop].xi=xspeed+(float)((rand()%60)-32.0f); // X Axis Speed And Direction particle[loop].yi=yspeed+(float)((rand()%60)-30.0f); // Y Axis Speed And Direction particle[loop].zi=(float)((rand()%60)-30.0f); // Z Axis Speed And Direction particle[loop].r=colors[col][0]; // Select Red From Color Table particle[loop].g=colors[col][1]; // Select Green From Color Table particle[loop].b=colors[col][2]; // Select Blue From Color Table } #ifdef PC50 if ((cnt>402+(MUSIC_TIMER_OFFSET) && cnt <405+(MUSIC_TIMER_OFFSET)) || (cnt>467+(MUSIC_TIMER_OFFSET) && cnt<469+(MUSIC_TIMER_OFFSET)) || (cnt>528+(MUSIC_TIMER_OFFSET) && cnt <530+(MUSIC_TIMER_OFFSET)) || (cnt>594+(MUSIC_TIMER_OFFSET) && cnt<596+(MUSIC_TIMER_OFFSET)) || (cnt>649+(MUSIC_TIMER_OFFSET) && cnt <651+(MUSIC_TIMER_OFFSET)) || (cnt>712+(MUSIC_TIMER_OFFSET) && cnt<714+(MUSIC_TIMER_OFFSET)) || (cnt>778+(MUSIC_TIMER_OFFSET) && cnt <780+(MUSIC_TIMER_OFFSET))) { particle[loop].x=0.0f; // Center On X Axis particle[loop].y=0.0f; // Center On Y Axis particle[loop].z=0.0f; // Center On Z Axis particle[loop].xi=(float)((rand()%50)-26.0f)*10.0f; // Random Speed On X Axis particle[loop].yi=(float)((rand()%50)-25.0f)*10.0f; // Random Speed On Y Axis particle[loop].zi=(float)((rand()%50)-25.0f)*10.0f; // Random Speed On Z Axis } #endif #ifdef VGA if ((cnt>402+(MUSIC_TIMER_OFFSET) && cnt <405+(MUSIC_TIMER_OFFSET)) || (cnt>467+(MUSIC_TIMER_OFFSET) && cnt<469+(MUSIC_TIMER_OFFSET)) || (cnt>528+(MUSIC_TIMER_OFFSET) && cnt <530+(MUSIC_TIMER_OFFSET)) || (cnt>594+(MUSIC_TIMER_OFFSET) && cnt<596+(MUSIC_TIMER_OFFSET)) || (cnt>649+(MUSIC_TIMER_OFFSET) && cnt <651+(MUSIC_TIMER_OFFSET)) || (cnt>712+(MUSIC_TIMER_OFFSET) && cnt<714+(MUSIC_TIMER_OFFSET)) || (cnt>778+(MUSIC_TIMER_OFFSET) && cnt <780+(MUSIC_TIMER_OFFSET))) { particle[loop].x=0.0f; // Center On X Axis particle[loop].y=0.0f; // Center On Y Axis particle[loop].z=0.0f; // Center On Z Axis particle[loop].xi=(float)((rand()%50)-26.0f)*10.0f; // Random Speed On X Axis particle[loop].yi=(float)((rand()%50)-25.0f)*10.0f; // Random Speed On Y Axis particle[loop].zi=(float)((rand()%50)-25.0f)*10.0f; // Random Speed On Z Axis } #endif } } // stars_one_frame(); //do_sign_frame(); //pvr_scene_finish(); cnt++; if(cnt>846+MUSIC_TIMER_OFFSET) return; } }
// Submit one of the poly headers void Texture::sendHdr(int list) { plx_txr_send_hdr(m_txr, list, 0); }