enemy bullets
This commit is contained in:
parent
7f935f0514
commit
30734885e4
3 changed files with 28 additions and 5 deletions
|
|
@ -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));
|
TILE_ATTR(gameOver ? PAL1 : PAL0, 0, 0, spawner.player && spawner.angle == 512 ? 1 : 0));
|
||||||
if(spawner.anim) SPR_setAnim(bullets[i].image, spawner.anim);
|
if(spawner.anim) SPR_setAnim(bullets[i].image, spawner.anim);
|
||||||
bullets[i].anim = 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));
|
SPR_setDepth(bullets[i].image, spawner.player ? 7 : (spawner.top ? 3 : 4));
|
||||||
doBulletRotation(i);
|
doBulletRotation(i);
|
||||||
}
|
}
|
||||||
|
|
@ -119,10 +122,10 @@ static void collideWithPlayer(u8 i){
|
||||||
s32 dist = getApproximatedDistance(
|
s32 dist = getApproximatedDistance(
|
||||||
fix32ToInt(deltaX),
|
fix32ToInt(deltaX),
|
||||||
fix32ToInt(deltaY));
|
fix32ToInt(deltaY));
|
||||||
if(dist <= 16){ // Player hit radius
|
if(dist <= 4){ // Player hit radius
|
||||||
killBullet(i);
|
killBullet(i);
|
||||||
player.lives--;
|
// player.lives--;
|
||||||
if(player.lives <= 0) gameOver = TRUE;
|
// if(player.lives <= 0) gameOver = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,14 @@ void spawnEnemy(u8 type){
|
||||||
for(s16 j = 0; j < ENEMY_COUNT; j++) if(!enemies[j].active && i == -1) i = j;
|
for(s16 j = 0; j < ENEMY_COUNT; j++) if(!enemies[j].active && i == -1) i = j;
|
||||||
if(i > -1){
|
if(i > -1){
|
||||||
enemies[i].active = TRUE;
|
enemies[i].active = TRUE;
|
||||||
|
enemies[i].type = type;
|
||||||
enemies[i].pos.x = FIX32(64);
|
enemies[i].pos.x = FIX32(64);
|
||||||
enemies[i].pos.y = FIX32(64);
|
enemies[i].pos.y = FIX32(64);
|
||||||
enemies[i].off = 16;
|
enemies[i].off = 16;
|
||||||
enemies[i].image = SPR_addSprite(&butterflySprite,
|
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));
|
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].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.x = fix32Mul(fix16ToFix32(cosFix16(enemies[i].angle)), enemies[i].speed);
|
||||||
enemies[i].vel.y = fix32Mul(fix16ToFix32(sinFix16(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_setVisibility(enemies[i].image, onScreen ? VISIBLE : HIDDEN);
|
||||||
|
|
||||||
SPR_setPosition(enemies[i].image, sx - enemies[i].off, sy - enemies[i].off);
|
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++;
|
enemyCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ struct playerStruct player;
|
||||||
struct bulletSpawner {
|
struct bulletSpawner {
|
||||||
fix32 x, y, speed;
|
fix32 x, y, speed;
|
||||||
Vect2D_f32 vel;
|
Vect2D_f32 vel;
|
||||||
s16 angle, anim;
|
s16 angle, anim, frame;
|
||||||
bool top, player;
|
bool top, player;
|
||||||
};
|
};
|
||||||
struct bullet {
|
struct bullet {
|
||||||
|
|
@ -77,6 +77,7 @@ struct enemy {
|
||||||
bool active;
|
bool active;
|
||||||
u8 type;
|
u8 type;
|
||||||
s16 angle, off;
|
s16 angle, off;
|
||||||
|
u32 clock;
|
||||||
fix32 speed;
|
fix32 speed;
|
||||||
Vect2D_f32 vel, pos;
|
Vect2D_f32 vel, pos;
|
||||||
Sprite* image;
|
Sprite* image;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue