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; }
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(); }