diff --git a/src/bullets.h b/src/bullets.h index bd38561..9cf9d97 100644 --- a/src/bullets.h +++ b/src/bullets.h @@ -81,6 +81,9 @@ void spawnBullet(struct bulletSpawner spawner, void(*updater)){ TILE_ATTR(gameOver ? PAL1 : PAL0, 0, 0, spawner.player && spawner.angle == 512 ? 1 : 0)); if(spawner.anim) SPR_setAnim(bullets[i].image, spawner.anim); bullets[i].anim = spawner.anim; + bullets[i].frame = spawner.frame; + SPR_setFrame(bullets[i].image, spawner.frame); + SPR_setAnim(bullets[i].image, spawner.anim); SPR_setDepth(bullets[i].image, spawner.player ? 7 : (spawner.top ? 3 : 4)); doBulletRotation(i); } @@ -119,10 +122,10 @@ static void collideWithPlayer(u8 i){ s32 dist = getApproximatedDistance( fix32ToInt(deltaX), fix32ToInt(deltaY)); - if(dist <= 16){ // Player hit radius + if(dist <= 4){ // Player hit radius killBullet(i); - player.lives--; - if(player.lives <= 0) gameOver = TRUE; + // player.lives--; + // if(player.lives <= 0) gameOver = TRUE; } } } diff --git a/src/enemies.h b/src/enemies.h index 72ea078..3b5237d 100644 --- a/src/enemies.h +++ b/src/enemies.h @@ -4,13 +4,14 @@ void spawnEnemy(u8 type){ for(s16 j = 0; j < ENEMY_COUNT; j++) if(!enemies[j].active && i == -1) i = j; if(i > -1){ enemies[i].active = TRUE; + enemies[i].type = type; enemies[i].pos.x = FIX32(64); enemies[i].pos.y = FIX32(64); enemies[i].off = 16; enemies[i].image = SPR_addSprite(&butterflySprite, getScreenX(enemies[i].pos.x, player.camera) - enemies[i].off, fix32ToInt(enemies[i].pos.y) - enemies[i].off, TILE_ATTR(gameOver ? PAL1 : PAL0, 0, 0, 0)); enemies[i].angle = 128; - enemies[i].speed = FIX32(0.25); + enemies[i].speed = FIX32(1); enemies[i].vel.x = fix32Mul(fix16ToFix32(cosFix16(enemies[i].angle)), enemies[i].speed); enemies[i].vel.y = fix32Mul(fix16ToFix32(sinFix16(enemies[i].angle)), enemies[i].speed); } @@ -41,6 +42,24 @@ static void updateEnemy(u8 i){ SPR_setVisibility(enemies[i].image, onScreen ? VISIBLE : HIDDEN); SPR_setPosition(enemies[i].image, sx - enemies[i].off, sy - enemies[i].off); + + if(enemies[i].clock % 45 == 0){ + struct bulletSpawner spawner = { + .x = enemies[i].pos.x, + .y = enemies[i].pos.y, + .anim = 7, + // .frame = 1, + .speed = FIX32(2), + .angle = random() % 128, + }; + for(u8 j = 0; j < 8; j++){ + spawnBullet(spawner, EMPTY); + spawner.angle += 128; + } + } + + enemies[i].clock++; + if(enemies[i].clock >= CLOCK_LIMIT) enemies[i].clock = 0; enemyCount++; } diff --git a/src/global.h b/src/global.h index a264710..5175d50 100644 --- a/src/global.h +++ b/src/global.h @@ -56,7 +56,7 @@ struct playerStruct player; struct bulletSpawner { fix32 x, y, speed; Vect2D_f32 vel; - s16 angle, anim; + s16 angle, anim, frame; bool top, player; }; struct bullet { @@ -77,6 +77,7 @@ struct enemy { bool active; u8 type; s16 angle, off; + u32 clock; fix32 speed; Vect2D_f32 vel, pos; Sprite* image;