here you go

This commit is contained in:
Trevor Boddy 2021-06-17 17:59:18 -04:00
commit 3ea8481a27
117 changed files with 3190 additions and 0 deletions

125
src/pod.c Normal file
View file

@ -0,0 +1,125 @@
#include <genesis.h>
#include <resources.h>
#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++;
}
}