void main(void) { pal_spr(palSprites);//set palette for sprites oam_size(0); ppu_on_all();//enable rendering //initialize balls parameters for(i=0;i<BALLS_MAX;++i) { //starting coordinates ball_x[i]=rand8(); ball_y[i]=rand8(); //direction bits j=rand8(); //horizontal speed -3..-3, excluding 0 spr=1+(rand8()%3); ball_dx[i]=j&1?-spr:spr; //vertical speed spr=1+(rand8()%3); ball_dy[i]=j&2?-spr:spr; } //now the main loop while(1) { ppu_waitnmi();//wait for next TV frame spr=0; for(i=0;i<BALLS_MAX;++i) { //set a sprite for current ball spr=oam_spr(ball_x[i],ball_y[i],0x40,i&3,spr);//0x40 is tile number, i&3 is palette //move the ball ball_x[i]+=ball_dx[i]; ball_y[i]+=ball_dy[i]; //bounce the ball off the edges if(ball_x[i]>=(256-8)) ball_dx[i]=-ball_dx[i]; if(ball_y[i]>=(240-8)) ball_dy[i]=-ball_dy[i]; } } }
void main(void) { //set palette for sprites pal_spr(palSprites); // set background color to black pal_col(0, 0x0f); //enable rendering ppu_on_all(); //initialize invader parameters for(i=0;i<INVADERS_MAX;++i) { //starting coordinates invader_x[i]=rand8(); invader_y[i]=rand8(); //direction bits j=rand8(); //horizontal speed -3..-3, excluding 0 spr=1+(rand8()%3); invader_dx[i]=j&1?-spr:spr; //vertical speed spr=1+(rand8()%3); invader_dy[i]=j&2?-spr:spr; } //the main loop while(1) { //wait for next TV frame ppu_wait_frame(); spr=0; for(i=0;i<INVADERS_MAX;++i) { //set a sprite for current invader spr=oam_spr(invader_x[i],invader_y[i],0x40,i&3,spr);//0x40 is tile number, i&3 is palette //move the invader invader_x[i]+=invader_dx[i]; invader_y[i]+=invader_dy[i]; //bounce the invader off the edges if(invader_x[i]>=(256-8)) invader_dx[i]=-invader_dx[i]; if(invader_y[i]>=(240-8)) invader_dy[i]=-invader_dy[i]; } } }