示例#1
0
static int
fire_saver(video_adapter_t *adp, int blank)
{
	int pl;

	if (blank) {
		/* switch to graphics mode */
      		if (blanked <= 0) {
			pl = splhigh();
			vidd_set_mode(adp, scrmode);
			vidd_load_palette(adp, fire_pal);
			blanked++;
			vid = (u_char *)adp->va_window;
			banksize = adp->va_window_size;
			bpsl = adp->va_line_width;
			splx(pl);
			vidd_clear(adp);
		}
		fire_update(adp);
	} else {
		blanked = 0;
	}

    return 0;
}
示例#2
0
static void invaders_DrawScene()
{
	aliens_slow--;
	if(aliens_slow <= 0) {
		GrSetGCForeground(invaders_gc, GR_RGB(255,255,255));
		aliens_draw(itest);
		
		itest = (itest != 0) ? 0 : 1;
		aliens_update_position();
		
		GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));
		aliens_draw(itest);
		
		aliens_slow = aliens_left / 4 - level + 4;
	}
	/* evaluate if fire or not */
	if((rand() % 10) == 0 && alien_firing < ALIEN_MAX_FIRES) {
		/* find cols active and set relative row tostart */
		int cols[ALIENS_COLS];
		int i, j, ncol, hitcol;
		alien_firing++;
		ncol = 0;
		for(i = 0; i < ALIENS_COLS; i++){
			for(j = aliens_rows - 1; j >= 0; j--){
				if(alien_status[i * aliens_rows + j] > 0) {
					cols[ncol++] = j;
					break;
				}
			}
		}
		hitcol=rand() % ncol;
		Dprintf("%d\n", hitcol);
		alienfire[alien_firing - 1].posx = cell_minx + hitcol *
			ALIEN_CELL_WIDTH + ALIEN_CELL_WIDTH / 2;
		alienfire[alien_firing - 1].posy = cell_miny + cols[hitcol] *
			ALIEN_CELL_HEIGHT + ALIEN_CELL_HEIGHT;
		alienfire[alien_firing-1].dir = 1;
	}
	
	GrSetGCForeground(invaders_gc, GR_RGB(255,255,255));
	me_draw();
	fire_draw();

	fire_update();
	GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));
	me_draw();
	fire_draw();
}