From 86935184b246cf376fab26336649bf6f850de093 Mon Sep 17 00:00:00 2001 From: Trevor Boddy Date: Wed, 22 Apr 2026 19:10:56 -0400 Subject: [PATCH] work --- src/enemytypes.h | 68 +++++++++++++++++++++++++++++++++++++++++++----- src/global.h | 4 +-- src/main.c | 1 - 3 files changed, 63 insertions(+), 10 deletions(-) diff --git a/src/enemytypes.h b/src/enemytypes.h index 28e485e..e64ecc1 100644 --- a/src/enemytypes.h +++ b/src/enemytypes.h @@ -9,7 +9,7 @@ static u8 getBossPhase(u8 i, u8 numPhases){ } static fix16 enemyHoneAngle(u8 i){ - fix32 dx = getWrappedDelta(player.pos.x, enemies[i].pos.x); + fix32 dx = getWrappedDelta(player.pos.x, enemies[i].pos.x); fix32 dy = player.pos.y - enemies[i].pos.y; return getAngle(dx, dy); } @@ -150,7 +150,6 @@ void updateEnemyFour(u8 i){ // stage 1 boss - static void bossOnePatternOne(u8 i){ if(enemies[i].clock % 60 == 30){ enemies[i].fixes[0] = enemyHoneAngle(i); @@ -260,11 +259,66 @@ static void bossOnePatternThree(u8 i){ } } } + + +// stage 2 boss +static void bossTwoPatternOne(u8 i){ + if(enemies[i].clock % 20 == 0){ + enemies[i].fixes[0] = enemyHoneAngle(i); + enemies[i].fixes[1] = FIX16(0); + } + if(!enemies[i].onScreen) return; + + if(enemies[i].clock % 4 == 0){ + if(enemies[i].clock % 120 < 60){ + struct bulletSpawner spawner = { + .x = enemies[i].pos.x, + .y = enemies[i].pos.y, + .anim = 6, + .speed = FIX32(5), + .angle = enemies[i].fixes[0] - FIX16(10) + FIX16(random() % 20) + }; + spawnBullet(spawner, EMPTY); + } else { + struct bulletSpawner spawner = { + .x = enemies[i].pos.x, + .y = enemies[i].pos.y, + .anim = 3, + .speed = FIX32(6), + .angle = enemies[i].fixes[0] + enemies[i].fixes[1] + }; + spawner.ints[0] = 0; + void updater(u8 j){ + if(bullets[j].ints[0] == 0 && bullets[j].clock % 5 == 0){ + bullets[j].speed -= FIX32(1); + if(bullets[j].speed <= 0){ + bullets[j].speed = 0; + bullets[j].ints[0] = 1; + } + updateBulletVel(j); + } else if(bullets[j].ints[0] == 1 && bullets[j].clock % 5 == 0){ + bullets[j].speed += FIX32(1); + if(bullets[j].speed >= FIX32(6)){ + bullets[j].speed = FIX32(6); + bullets[j].ints[0] = 2; + } + updateBulletVel(j); + } + } + spawnBullet(spawner, updater); + enemies[i].fixes[1] += FIX16(enemies[i].clock % 40 < 20 ? 10 : -10); + } + } +} + + +// using boss one for all testing of patterns static void updateBossOne(u8 i){ - u8 phase = getBossPhase(i, 3); - if(phase == 0) bossOnePatternOne(i); - else if(phase == 1) bossOnePatternTwo(i); - else bossOnePatternThree(i); + // u8 phase = getBossPhase(i, 3); + // if(phase == 0) bossOnePatternOne(i); + // else if(phase == 1) bossOnePatternTwo(i); + // else bossOnePatternThree(i); + bossTwoPatternOne(i); } @@ -902,4 +956,4 @@ void updateBoss(u8 i){ // spawner.angle += FIX16(45); // } // } -// } \ No newline at end of file +// } diff --git a/src/global.h b/src/global.h index dbab43a..c42f39f 100644 --- a/src/global.h +++ b/src/global.h @@ -73,7 +73,7 @@ u16 attractClock; #define ATTRACT_LIMIT 900 // frames of title idle before attract triggers #define ATTRACT_DURATION 1800 // 30 seconds of demo gameplay #define ATTRACT_LEVEL 1 // level index for attract mode (L12: Boss 4, 3 gunners) -#define START_LEVEL 0 // offset added to starting level (0 = normal start) +#define START_LEVEL 2 // offset added to starting level (0 = normal start) // #define START_LEVEL 0 // offset added to starting level (0 = normal start) s16 enemyCount, bulletCount; u8 level; @@ -201,7 +201,7 @@ static const EnemyTypeDef enemyTypeDefs[ENEMY_TYPE_COUNT] = { { ENEMY_TYPE_FIVE, 1, 10, 2, 0, 5 }, { ENEMY_TYPE_SIX, 1, 10, 5, 0, 5 }, { ENEMY_TYPE_SEVEN, 1, 10, 5, 0, 5 }, - { ENEMY_TYPE_EIGHT, 1, 10, 5, 0, 0 }, + { ENEMY_TYPE_EIGHT, 1, 10, 5, 0, 5 }, { ENEMY_TYPE_NINE, 1, 10, 5, 0, 5 }, { ENEMY_TYPE_TEN, 1, 10, 5, 0, 5 }, { ENEMY_TYPE_ELEVEN, 1, 10, 5, 0, 5 }, diff --git a/src/main.c b/src/main.c index cc77fd1..6aa0029 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,5 @@ #include #include - #include "global.h" #include "background.h" #include "bullets.h"