#include #include #include "main.h" #include "enemies.h" #include "pod.h" #include "explosion.h" #include "boss.h" // spawn void spawnPod(struct podSpawner spawner){ s16 i = -1; for(s16 h = 0; h < POD_COUNT; h++) if(!pods[h].active && i == -1) i = h; if(i > -1){ pods[i].active = TRUE; pods[i].pos.x = spawner.x; pods[i].pos.y = spawner.y; pods[i].clock = 0; pods[i].random = spawner.random; pods[i].image = SPR_addSprite(&imgSpider, fix16ToInt(POD_DUMP_X), fix16ToInt(POD_DUMP_Y), TILE_ATTR(PAL1, 0, FALSE, FALSE)); } } // shoot void podPatternOne(s16 i){ struct bulletSpawner bSpawn = { .x = pods[i].pos.x, .y = pods[i].pos.y, .type = 4, .angle = random() % 1024, .speed = FIX16(podBulletSpeed) }; for(s8 b = 0; b < 3; b++){ spawnEnemyBullet(bSpawn, eUpdate); bSpawn.angle += 341; } XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); } void podPatternTwo(s8 i, s8 mod, s16 aMod){ struct bulletSpawner bSpawn = { .x = pods[i].pos.x, .y = pods[i].pos.y, .type = 4, .angle = random() % 1024, .speed = FIX16(podBulletSpeed) }; for(s8 b = 0; b < 3 + mod; b++){ spawnEnemyBullet(bSpawn, eUpdate); bSpawn.angle += aMod; } bSpawn.speed = FIX16(podBulletSpeed + 1); bSpawn.type = 3; bSpawn.angle += aMod / 2; for(s8 b = 0; b < 3 + mod; b++){ spawnEnemyBullet(bSpawn, eUpdate); bSpawn.angle += aMod; } } void shootPod(s16 i){ if(currentZone == 1) podPatternOne(i); else if(currentZone < 5) podPatternTwo(i, 0, 342); else if(currentZone < 10) podPatternTwo(i, 1, 256); else podPatternTwo(i, 2, 204); } // die void killPod(s16 i){ pods[i].active = FALSE; pods[i].pos.x = POD_DUMP_X; pods[i].pos.y = POD_DUMP_Y; SPR_releaseSprite(pods[i].image); } // loop void loadPod(){ if(currentZone % 5 == 1 && currentZone > 1) podBulletSpeed++; currentPodCount = 0; if(currentZone >= 3) currentPodCount = 1; if(currentZone >= 6) currentPodCount = 2; if(currentZone >= 11) currentPodCount = 3; if(currentZone >= 16) currentPodCount = 4; if(currentPodCount > 0){ for(s16 i = 0; i < POD_COUNT; i++){ pods[i].pos.x = POD_DUMP_X; pods[i].pos.y = POD_DUMP_Y; pods[i].random = FALSE; pods[i].clock = 0; } } } void resetPod(){ for(s16 i = 0; i < POD_COUNT; i++){ pods[i].active = FALSE; pods[i].pos.x = POD_DUMP_X; pods[i].pos.y = POD_DUMP_Y; SPR_releaseSprite(pods[i].image); } } void updatePod(){ for(s16 i = 0; i < POD_COUNT; i++) if(pods[i].active) { if(pods[i].clock >= POD_TIME_LIMIT){ if(!gameOver) shootPod(i); killPod(i); spawnExplosion(fix16ToInt(pods[i].pos.x), fix16ToInt(pods[i].pos.y), FALSE); XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); } else { if(pods[i].clock % 60 == 0 && pods[i].clock > 0) SPR_setAnimAndFrame(pods[i].image, pods[i].clock / 60, pods[i].clock % 40 == 0 ? 0 : 1); SPR_setPosition(pods[i].image, fix16ToInt(pods[i].pos.x) - 8, fix16ToInt(pods[i].pos.y) - 8); } if(zoneOver) killPod(i); pods[i].clock++; } }