replace clock spawning with score attack style
This commit is contained in:
parent
527d1b8f8d
commit
51aed3b0ba
|
@ -93,6 +93,6 @@ void loadChrome(){
|
||||||
|
|
||||||
void updateChrome(){
|
void updateChrome(){
|
||||||
updateBoss();
|
updateBoss();
|
||||||
// VDP_drawText(debugStr, 0, 27);
|
VDP_drawText(debugStr, 0, 27);
|
||||||
// updateScore();
|
// updateScore();
|
||||||
}
|
}
|
|
@ -79,6 +79,7 @@ static void enemyAnimate(s16 i){
|
||||||
// loop
|
// loop
|
||||||
|
|
||||||
static void updateEnemy(s16 i){
|
static void updateEnemy(s16 i){
|
||||||
|
enemyCount++;
|
||||||
enemies[i].last.x = enemies[i].pos.x;
|
enemies[i].last.x = enemies[i].pos.x;
|
||||||
enemies[i].last.y = enemies[i].pos.y;
|
enemies[i].last.y = enemies[i].pos.y;
|
||||||
if(enemies[i].seen && (enemies[i].pos.x < fix16Sub(0, enemies[i].off.x) ||
|
if(enemies[i].seen && (enemies[i].pos.x < fix16Sub(0, enemies[i].off.x) ||
|
||||||
|
@ -110,11 +111,14 @@ static void updateEnemy(s16 i){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(enemies[i].dead){
|
if(enemies[i].dead){
|
||||||
|
enemyCount--;
|
||||||
enemies[i].active = FALSE;
|
enemies[i].active = FALSE;
|
||||||
SPR_releaseSprite(enemies[i].image);
|
SPR_releaseSprite(enemies[i].image);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateEnemies(){
|
void updateEnemies(){
|
||||||
|
enemyCount = 0;
|
||||||
for(s16 i = 0; i < ENEMY_COUNT; i++) if(enemies[i].active) updateEnemy(i);
|
for(s16 i = 0; i < ENEMY_COUNT; i++) if(enemies[i].active) updateEnemy(i);
|
||||||
|
intToStr(enemyCount, debugStr, 2);
|
||||||
}
|
}
|
|
@ -21,7 +21,7 @@
|
||||||
bool killBullets,
|
bool killBullets,
|
||||||
started;
|
started;
|
||||||
|
|
||||||
s16 clock, timeLeft,
|
s16 clock, timeLeft, enemyCount,
|
||||||
bossHealth, bossMax;
|
bossHealth, bossMax;
|
||||||
|
|
||||||
char debugStr[8];
|
char debugStr[8];
|
||||||
|
|
176
src/stage.h
176
src/stage.h
|
@ -55,7 +55,10 @@ static void waveSine(bool right){
|
||||||
enemies[i].pos.x = fix16Sub(enemies[i].fixes[0], fix16Mul(sinFix16(enemies[i].fixes[1]), enemies[i].fixes[2]));
|
enemies[i].pos.x = fix16Sub(enemies[i].fixes[0], fix16Mul(sinFix16(enemies[i].fixes[1]), enemies[i].fixes[2]));
|
||||||
enemies[i].fixes[1] = enemies[i].bools[0] ? fix16Add(enemies[i].fixes[1], enemies[i].fixes[3]) : fix16Sub(enemies[i].fixes[1], enemies[i].fixes[3]);
|
enemies[i].fixes[1] = enemies[i].bools[0] ? fix16Add(enemies[i].fixes[1], enemies[i].fixes[3]) : fix16Sub(enemies[i].fixes[1], enemies[i].fixes[3]);
|
||||||
}
|
}
|
||||||
spawnEnemy(spawner, updater, EMPTY);
|
for(u8 i = 0; i < 6; i++){
|
||||||
|
spawnEnemy(spawner, updater, EMPTY);
|
||||||
|
spawner.y -= 32;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void waveBig1(){
|
static void waveBig1(){
|
||||||
|
@ -177,19 +180,22 @@ static void waveBig3(){
|
||||||
spawnEnemy(spawner, updater, EMPTY);
|
spawnEnemy(spawner, updater, EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void waveSwarm(bool right, bool color){
|
static void waveSwarm(u8 count){
|
||||||
struct enemySpawner spawner = {
|
struct enemySpawner spawner = {
|
||||||
.angle = 256,
|
.angle = 256,
|
||||||
.speed = FIX16(1.25),
|
.speed = FIX16(1.25),
|
||||||
.x = random() % (GAME_W / 2 - 64),
|
|
||||||
.y = -16,
|
.y = -16,
|
||||||
.image = color ? &fairyRed : &fairyBlue,
|
|
||||||
.offX = 16,
|
.offX = 16,
|
||||||
.offY = 16,
|
.offY = 16,
|
||||||
.health = 2
|
.health = 2
|
||||||
};
|
};
|
||||||
spawner.x += right ? (GAME_W / 2) : 64;
|
for(u8 i = 0; i < count; i++){
|
||||||
spawnEnemy(spawner, EMPTY, EMPTY);
|
spawner.x = random() % (GAME_W / 2 - 48);
|
||||||
|
spawner.x += (i % 2 == 0) ? (GAME_W / 2) : 48;
|
||||||
|
spawner.image = i % 4 < 2 ? &fairyRed : &fairyBlue;
|
||||||
|
spawner.y -= 32;
|
||||||
|
spawnEnemy(spawner, EMPTY, EMPTY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void waveBig4(bool right, bool second){
|
static void waveBig4(bool right, bool second){
|
||||||
|
@ -203,6 +209,7 @@ static void waveBig4(bool right, bool second){
|
||||||
.offY = 16,
|
.offY = 16,
|
||||||
.health = 4
|
.health = 4
|
||||||
};
|
};
|
||||||
|
if(right) spawner.y -= 24;
|
||||||
spawner.bools[0] = right;
|
spawner.bools[0] = right;
|
||||||
spawner.bools[1] = second;
|
spawner.bools[1] = second;
|
||||||
void updater(s16 i){
|
void updater(s16 i){
|
||||||
|
@ -254,10 +261,12 @@ static void waveBig5(bool right){
|
||||||
.offY = 16,
|
.offY = 16,
|
||||||
.health = 6
|
.health = 6
|
||||||
};
|
};
|
||||||
if(right) spawner.x = GAME_W - spawner.x;
|
if(right){
|
||||||
|
spawner.x = GAME_W - spawner.x;
|
||||||
|
spawner.y -= 32;
|
||||||
|
}
|
||||||
spawner.bools[0] = right;
|
spawner.bools[0] = right;
|
||||||
void updater(s16 i){
|
void updater(s16 i){
|
||||||
|
|
||||||
if(enemies[i].clock > 0 && enemies[i].clock % 60 == 30 && enemies[i].clock < 240){
|
if(enemies[i].clock > 0 && enemies[i].clock % 60 == 30 && enemies[i].clock < 240){
|
||||||
struct bulletSpawner spawner = {
|
struct bulletSpawner spawner = {
|
||||||
.x = enemies[i].pos.x,
|
.x = enemies[i].pos.x,
|
||||||
|
@ -286,7 +295,6 @@ static void waveBig5(bool right){
|
||||||
enemies[i].angle += enemies[i].bools[0] ? -64 : 64;
|
enemies[i].angle += enemies[i].bools[0] ? -64 : 64;
|
||||||
updateEnemyVel(i);
|
updateEnemyVel(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
spawnEnemy(spawner, updater, EMPTY);
|
spawnEnemy(spawner, updater, EMPTY);
|
||||||
}
|
}
|
||||||
|
@ -368,7 +376,6 @@ static void bossMove(s16 i){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void waveMidboss1(){
|
static void waveMidboss1(){
|
||||||
bossAnimateClock = 0;
|
bossAnimateClock = 0;
|
||||||
struct enemySpawner spawner = {
|
struct enemySpawner spawner = {
|
||||||
|
@ -387,7 +394,6 @@ static void waveMidboss1(){
|
||||||
bossAnimate(i);
|
bossAnimate(i);
|
||||||
if(enemies[i].bools[0]){
|
if(enemies[i].bools[0]){
|
||||||
bossHealth = enemies[i].health;
|
bossHealth = enemies[i].health;
|
||||||
intToStr(bossHealth, debugStr, 2);
|
|
||||||
bossMove(i);
|
bossMove(i);
|
||||||
if(enemies[i].health >= 25){
|
if(enemies[i].health >= 25){
|
||||||
// ring
|
// ring
|
||||||
|
@ -482,100 +488,76 @@ static void waveMidboss1(){
|
||||||
void suicide(s16 i){
|
void suicide(s16 i){
|
||||||
bossHealth = 0;
|
bossHealth = 0;
|
||||||
killBullets = TRUE;
|
killBullets = TRUE;
|
||||||
nextClock = stageClock + 120;
|
|
||||||
}
|
}
|
||||||
spawnEnemy(spawner, updater, suicide);
|
spawnEnemy(spawner, updater, suicide);
|
||||||
}
|
}
|
||||||
|
|
||||||
// loop
|
// loop
|
||||||
|
|
||||||
s16 currentWave = 43;
|
s16 currentWave = 0;
|
||||||
|
|
||||||
static void updateWaves(){
|
|
||||||
if(stageClock == nextClock){
|
|
||||||
|
|
||||||
|
|
||||||
// sine from left
|
|
||||||
if(currentWave < 6){
|
|
||||||
waveSine(FALSE);
|
|
||||||
nextClock += currentWave == 5 ? 60 : 30;
|
|
||||||
}
|
|
||||||
|
|
||||||
// sine from right
|
|
||||||
else if(currentWave < 12){
|
|
||||||
waveSine(TRUE);
|
|
||||||
nextClock += currentWave == 11 ? 60 : 30;
|
|
||||||
}
|
|
||||||
|
|
||||||
// big middle
|
|
||||||
else if(currentWave == 12){
|
|
||||||
waveBig1();
|
|
||||||
nextClock += 120;
|
|
||||||
}
|
|
||||||
|
|
||||||
// sine from left, big right
|
|
||||||
else if(currentWave < 18){
|
|
||||||
waveSine(FALSE);
|
|
||||||
if(currentWave == 16) waveBig2(FALSE);
|
|
||||||
nextClock += currentWave == 17 ? 90 : 30;
|
|
||||||
}
|
|
||||||
|
|
||||||
// sine from right, big left
|
|
||||||
else if(currentWave < 24){
|
|
||||||
waveSine(TRUE);
|
|
||||||
if(currentWave == 22) waveBig2(TRUE);
|
|
||||||
nextClock += currentWave == 23 ? 120 : 30;
|
|
||||||
}
|
|
||||||
|
|
||||||
// big middle
|
|
||||||
else if(currentWave == 24){
|
|
||||||
waveBig3();
|
|
||||||
nextClock += 210;
|
|
||||||
}
|
|
||||||
|
|
||||||
// swarm (8)
|
|
||||||
else if(currentWave < 32){
|
|
||||||
waveSwarm(currentWave % 2 == 0, currentWave % 4 < 2);
|
|
||||||
nextClock += 30;
|
|
||||||
}
|
|
||||||
|
|
||||||
// big left and right
|
|
||||||
else if(currentWave < 34){
|
|
||||||
waveBig4(currentWave == 32, FALSE);
|
|
||||||
nextClock += currentWave == 32 ? 60 : 120;
|
|
||||||
}
|
|
||||||
|
|
||||||
// swarm (4), big right
|
|
||||||
else if(currentWave < 38){
|
|
||||||
waveSwarm(FALSE, currentWave % 2 < 1);
|
|
||||||
if(currentWave == 35) waveBig4(TRUE, TRUE);
|
|
||||||
nextClock += currentWave == 37 ? 60 : 30;
|
|
||||||
}
|
|
||||||
|
|
||||||
// swarm (4), big left
|
|
||||||
else if(currentWave < 42){
|
|
||||||
waveSwarm(TRUE, currentWave % 2 < 1);
|
|
||||||
if(currentWave == 39) waveBig4(FALSE, TRUE);
|
|
||||||
nextClock += currentWave == 41 ? 210 : 30;
|
|
||||||
}
|
|
||||||
|
|
||||||
// midboss
|
|
||||||
else if(currentWave == 42){
|
|
||||||
waveMidboss1();
|
|
||||||
}
|
|
||||||
|
|
||||||
// big from left and right
|
|
||||||
else if(currentWave < 45){
|
|
||||||
waveBig5(currentWave == 44);
|
|
||||||
nextClock += 60;
|
|
||||||
}
|
|
||||||
|
|
||||||
currentWave++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void updateStage(){
|
void updateStage(){
|
||||||
updateWaves();
|
if(enemyCount == 0){
|
||||||
|
switch(currentWave){
|
||||||
|
// sine from left
|
||||||
|
case 0:
|
||||||
|
waveSine(FALSE);
|
||||||
|
break;
|
||||||
|
// sine from right
|
||||||
|
case 1:
|
||||||
|
waveSine(TRUE);
|
||||||
|
break;
|
||||||
|
// big middle
|
||||||
|
case 2:
|
||||||
|
waveBig1();
|
||||||
|
break;
|
||||||
|
// sine from left, big right
|
||||||
|
case 3:
|
||||||
|
waveSine(FALSE);
|
||||||
|
waveBig2(FALSE);
|
||||||
|
break;
|
||||||
|
// sine from right, big left
|
||||||
|
case 4:
|
||||||
|
waveSine(TRUE);
|
||||||
|
waveBig2(TRUE);
|
||||||
|
break;
|
||||||
|
// big middle
|
||||||
|
case 5:
|
||||||
|
waveBig3();
|
||||||
|
break;
|
||||||
|
// swarm (8)
|
||||||
|
case 6:
|
||||||
|
waveSwarm(8);
|
||||||
|
break;
|
||||||
|
// big left and right
|
||||||
|
case 7:
|
||||||
|
waveBig4(TRUE, FALSE);
|
||||||
|
waveBig4(FALSE, FALSE);
|
||||||
|
break;
|
||||||
|
// swarm (2), big right
|
||||||
|
case 8:
|
||||||
|
waveSwarm(2);
|
||||||
|
waveBig4(TRUE, TRUE);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
// swarm (2), big left
|
||||||
|
waveSwarm(2);
|
||||||
|
waveBig4(FALSE, TRUE);
|
||||||
|
break;
|
||||||
|
// midboss
|
||||||
|
case 10:
|
||||||
|
waveMidboss1();
|
||||||
|
break;
|
||||||
|
// big from left and right
|
||||||
|
case 11:
|
||||||
|
waveBig5(FALSE);
|
||||||
|
waveBig5(TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
currentWave++;
|
||||||
|
}
|
||||||
|
|
||||||
stageClock++;
|
stageClock++;
|
||||||
if(stageClock >= CLOCK_LIMIT) stageClock -= CLOCK_LIMIT;
|
if(stageClock >= CLOCK_LIMIT) stageClock -= CLOCK_LIMIT;
|
||||||
}
|
}
|
Reference in New Issue