int i;
unsigned char *cmap = gba_colors ? color_gba_cmap : color_cmap;
- emuprint("setting up %s palette", gba_colors ? "GBA" : "NDS/Emu");
-
for(i=0; i<256; i++) {
int r = cmap[i * 3];
int g = cmap[i * 3 + 1];
/* setup color image palette */
setup_palette();
- spr_setup(16, 16, spr_game_pixels, spr_game_cmap);
+ spr_setup(16, 16, spr_game_pixels, gba_colors ? spr_game_gba_cmap : spr_game_cmap);
wait_vblank();
spr_clear();
enemy->vobj.px = -1;
enemy->anm = 0xff;
enemy->hp = ENEMY_ENERGY;
- enemy->last_shot = timer_msec > E_RATE ? timer_msec - E_RATE : 0;
+ enemy->last_shot = -1;
enemy->shot_frame = -1;
if(++total_enemies >= MAX_ENEMIES) {
goto endspawn;
}
}
endspawn:
- total_enemies = 1; /* XXX DBG */
/* check continuity */
for(i=0; i<total_enemies; i++) {
if(enemies[i].anm <= 0) {
wait_vblank();
present(backbuf);
+ /*
if(!(nframes & 15)) {
emuprint("vbl: %d", vblperf_count);
- }
+ }*/
#ifdef VBLBAR
vblperf_begin();
#else
/* enemy logic */
enemy = enemies;
for(i=0; i<total_enemies; i++) {
- /* only consider visible enemies which are not dead */
- if(enemy->hp <= 0 || enemy->vobj.px < 0) {
+ /* only consider enemies which are not dead */
+ if(enemy->hp <= 0) {
enemy++;
continue;
}
if(enemy->shot_frame >= 0) {
/* in the process of charging a shot */
if(++enemy->shot_frame >= NUM_SHOT_FRAMES - 1) {
- if(!did_strafe) {
+ /* only get hit if we can see the enemy and we didn't strafe */
+ if(!did_strafe && enemy->vobj.px >= 0) {
hit_frame = 1;
if(--energy <= 0) {
gameover = 1;
}
enemy->shot_frame = -1;
}
- } else {
+ } else if(enemy->vobj.px >= 0) {
/* check rate of fire and start a shot if necessary */
- if(timer_msec - enemy->last_shot >= E_RATE) {
+ if(enemy->last_shot == -1) {
+ enemy->last_shot = timer_msec;
+ } else if(timer_msec - enemy->last_shot >= E_RATE) {
enemy->last_shot = timer_msec;
enemy->shot_frame = 0;
}