ENERGY SHOOTER
Master chaos, feed the core, survive
11/29/2025: Energy Shooter gets its very own page! Wrote an overview, recorded gameplay, and made 48 gifs to show some of the interactions in the game.
What it is
Energy Shooter (working title) is a top down, single-screen, score-driven arcade experience.
Control Energy Armor, a mechanized suit outfitted with boosters, weapon systems, and the all-important Energy Handler. Pilot the Armor to navigate an unstable dimension. Your goal: to harvest Energy.
Harvest energy by collecting volatile Energy Orbs with the Handler and merging them with The Core, an unstable mass with mysterious properties.
The Core yearns for an exact amount of Energy and only when it’s satisfied will it emit an Energy Wave. Energy Waves mean everything. Cause as many Energy Waves as you can.
But you're not alone in this dimension. Beings and phenomena are attracted to the Energy. Defend yourself and The Core. The Armor is not only specialized to handle Energy, but to weaponize energy itself.
Cause as many Energy Waves as you can.
Survive the escalating chaos.
Why I'm making it
I think wave-based, survival action games are awesome. Asteroids, Super Crate Box, Super Pixelander, Slugcaster, Dojo of Death, Ziggurat, Horde Arena (Hyper Light Drifter), Firefight (Halo 3 ODST), The Mercenaries (Resident Evil 4), Devil Daggers if I were actually any good at it, etc.
I love the tension of staying just barely in control while everything gets worse around you, so I want to make a game like that.
Current Focus Area(s)
Enemy design and implementation
Balance Energy Orb drops
Tools
GameMaker Studio 2
Affinity Photo
Smooth sliding against walls. Handles corners well enough for now.
Handles slopes surprisingly well, but I wasn't planning on including them.
Unintentional wobbling when hitting walls might be nice for feedback.
Tight spaces? No problem. Not sure if areas like this will be used though.
Collision code modified for pushable blocks. Unsure if I'll use these.
The player can grab objects. Held objects follow the player.
Can grab things within a certain distance in front of you. Feels better.
Can grab from anywhere, but range is more limited.
The grab button can be held to grab orbs more easily while moving.
A big issue to solve was how to keep dropped objects out of walls.
Combine two Energy Orbs to create a new one.
Grab multiple Orbs simultaneously to grab and combine them in one move.
Feed the right amount of Energy to the Core to generate a Wave.
Energy needs to be dropped for the Core to accept it.
Orbs explode if they contain too much energy.
Orbs explode when they take too much damage.
The greater the Orb the greater the explosion.
Exploding Orbs can cause chain reactions.
Negative Orbs create a void that inflicts slowdown and damage.
Even projectiles are slowed by the effects of a void.
The Energy Armor is equipped with an infinite autocannon...
...but is it enough to survive?
Pursuers spawn in huge numbers. They're weak, but easily overwhelm.
The Armor can convert Energy into different attacks.
The greater the Energy used, the greater the effect.
The Spread Cannon fires many weak projectiles across a large area.
Using negative Energy results in a different type of attack.
The negative Spread is similar to the Pursuers. Are they related somehow?
Focus fires a single high-velocity projectile.
The greater the energy, the more it ricochets.
Focus fire can pierce targets, but it loses energy with each piercing.
Don't get caught in the ricochet of your own fire!
Focus with negative energy unleashes a piercing beam.
Explosive fire launches a powerful bomb that arcs through the air.
Its trajectory enables it to travel over objects.
The greater the energy used, the larger the radius of its searing flames.
Negative energy creates a proximity mine.
Be careful not to fall into your own trap!
Charge powerful boost thrusters to turn yourself into a weapon.
Hit a wall at the wrong angle and you'll be thrown into a stun state.
Grab and drop orbs while boosting.
Laser targeting system can be used for short durations for distant targets.
Energy Armor interface shows when targeting systems are recharged.
The Core is protected by a destructible shield.
The shield also helps draw Energy to the Core.
An Energy Wave will restore the Core shield.
The shield is inactive when the Core is being held.
Sorting out when you grab the Core or an Orb was pretty tricky.
Development notes and progress logs for each month.
11/29/2025: The gamemaker prototype gets its very own page! Wrote an overview, recorded gameplay, and made 48 gifs to show some of the interactions in the game.
11/28/2025: Planned out page for prototype. Started recording gameplay.
11/17/2025: Orbs only drop from pursuers every ten destroyed from group. Fixed issue with beam tracking damage in orb. Asteroids now destroy and get destroyed by pursuers but looks janky. Found issue and fixed: Player regains boost collider when slowed by imploder.
11/16/2025: Pursuers destroyed by wave. Set it up so that the last pursuer in a group will behave differently, but the code is f'd. I made a followerCounter object. That object is set to be the counter object for that spawn group. Then, when a follower dies, it reduces the count of the counter. Except, it's super annoying because the followers turn into a new object when they get knocked back, so that info needs to transfer over. AND I had to account for that when checking the hp of the pursuer. But everything works now. I was going to just give up on it but kept going for like an extra hour and it worked out. Oh also they drop orbs now, but it's too many lol. So maybe try something like the last one in the group drops an orb. Or every 5 destroyed drops a 5. idk
11/13/2025: Pursuers now cause damage to player when the player boosts into them. Worked out an issue where they could deal damage and survive. Fixed in various ways, made a _iDealtBoostDamage variable and moved code to end step of pursuer. Pursuer also damages coreshield and core. Recorded a bunch of ideas.
11/12/2025: Finally fixed the pursuers not facing the right angle, but I spent a bunch of time trying to adjust the image_angle in code. Couldnt figure it out so just adjusted the actual image sprite, whatever. Knockback distance from hitting the player and from getting hit by the boost adjusted. Recorded some ideas related to what should happen when the player takes damage while boosting. Pursuer only gets destroyed when hitting the boost object not the player. Knockback object explodes.
11/11/2025: Pursuers now have the ability to bounce off of you when you're in hitstun and then resume chasing. Also the player knockback direction is set correctly so you don't get caught inside the group as much. Adjusted damage dealt and hitstun dealt by them to the player.
11/10/2025: Pursuers interactions with exploders and imploders good. Imploder was annoying because I didn't realize that the state of being in an implosion is through collision with the imploder and not the imploderprojectile. Also the imploderprojectiles have a respawn rate so the enemies did need to be slowed down by it. Logged ideas from phone into ideas sheet
11/08/2025: Sniper bullet can now go through pursuer enemies correctly. Shotgun too I think? Fixed an issue with the sniper bullet math when hitting a dead orb. Added hp checks to all things with hp so that it can never be below 0. Sort of fixed an issue with sniper bullets hitting a wall multiple times on one hit. Adjust sniper bullets to lose 10 energy when hitting a wall, so now they don't bounce around forever.
11/06/2025: Got all of the different player attacks to hit the pursuers, except for sniper. Need to figure out different code for when the bullet is active. Right now it doesn't pierce through all of the enemies because of how the _active state works. The active thing is only there I think to prevent the bullet from hitting the player when it spawns, because it spawns slightly behind the player so that it's able to bounce. Maybe if you're right up against a wall and you shoot it it should hurt you?
11/05/2025: Made a random push block object. Able to push up into corner of wall though. Started working on pursuer. Made an enemy spawner object. That works. When the pursuer is hit by a bullet, it creates an exploder object that then explodes. idk why but I cant get the bullet to detect/read code in the enemy that it hits if the collision is in the bullet code, so I had to put code that affects the bullet in the enemy code. Seems like a bug? But technically working now...
11/04/2025: Had an idea while walking back to apartment from voting, what if the player boost is a melee attack? (you are shooting yourself at enemies) started to implement, a boostCollider object appears in front of the boost object and can damage asteroids right now. However, I think that the player needs to take some damage from these collisions. Record ideas in ideas sheet. orbs on ground also take damage from this, but then I started to think that smaller objects should be shoved out of the way. Will probably want to create knockback objects, similar to the player. but as an experiment I put the "unstuck" code on the orbs for interacting with the player, and now you can push orbs around - _ - The code is truly magical. THEN I finally decided to try it as the ONLY collision for the player, replacing the "working" collision code. Turns out it works just fine. It has some jitter to it, but in a way that's kind of a nice little bit of feedback that you're running into a wall lol. The old code was super jittery on slopes, this one is much smoother.
11/03/2025: Mostly recording ideas and testing things. Spawning in new walls seems feasible. Rotating/moving walls or things that move the player could be a thing. Recorded some enemy ideas. Tested the pathfinding enemy. In backup02 > enemies there's obj_pathfinder. If that and the obj_grid are placed in the room then pathfinding works! BUT doesn't work with the single big wall object that I've decided to use. But at least the pathing works.
11/01/2025: Fixed beam issue. Notes in tracker. Also resulted in fixing the issue with the beam being able to output more damage than its orb value. Added orb explosion warning.
10/30/2025: Fixed issue related to pressing A to quit menu setting your weapon. Fixed pausing issue with boost charge. Grab and drop mapped to same button. Boost on L instead of LB. Added laser sight that has a limit as to how much it can be used
10/28/2025: Homing projectiles can hit player, core, coreshield, orbs, held orbs. All current objects that can be, get destroyed by clear wave. Homing bullets interact with imploder. Movement code for homing bullet is pretty weird but oh well (I used code from the follower enemy from old game)
10/27/2025: Set up homing projectiles to only accelerate if they have a target; otherwise, they linger but then fade away. Found that the homing system that relies on projectiles is inefficient and causes slowdown if too many are on screen, so I reduced the number of checking projectiles. Maybe try a different way. It's in the to-do column, but fine for now. Assume the line of high-value energy orbs in a row will probably only happen in testing. Then again, maybe I want some crazy level full of high-energy orbs
10/26/2025: Carved a pumpkin.
10/25/2025: Fixed two issues in the tracker. Homing projectiles now send out individual checkers, like a lot. The code for which target the projectile should follow is set in the checker object now. Because they’re individual checker objects, they can hit walls and be destroyed. Pretty neat effect, looks like a swarm of insects.
10/22/2025: Homing spawner fires projectiles based on orb count. Worked on homing behavior a little. It’s kind of confusing and hard to know what I want it to do. Notes in the next row above.
10/21/2025: Going with homing projectiles for the negative shotgun. Can use code from the old follower enemy. I have it set up right now so that a follower projectile is spawned, it sends out a circular object to look for a target, then transfers that target to the original projectile. Need to set up the spawner object next.
10/20/2025: Recorded enemy ideas
10/16/2025: Beam damages imploders. Due to its nature, it isn’t actually very effective at destroying them, which I didn’t anticipate. The beam is slowed by imploder projectiles, and it’s tough to tell when the weapon is fired because its startup is so fast. It’s confusing trying to get the beam to slow down once it’s no longer active, but the solution I came up with is to just have it always fading away anyway. This helps illustrate that it’s not effective anymore.
10/15/2025: Got the beam to mostly consistently damage things. It’s still off a little bit, but I think this is due to distance. If you aren’t right next to the thing you’re aiming at, the beam’s life will start to decay before it hits the target, I think? Anyways, it’s kind of interesting that it has that kind of weakness at long range. Also, set mines and carried orbs to not go over walls. It uses unstuck wall code. Unstuck wall code needs to be in endstep, or else it causes issues with being able to make mines. Not sure why.
10/14/2025: Brainstormed ideas at the car appointment.
10/13/2025: Windows 10 extended support shenanigans, lol. Stuck on beam damage. The beam doesn’t work when hitting multiple instances of the same object if the damage is being dealt from the beam object. So, I made it so that if the damage occurs in the object touching the beam. Then, I can’t figure out how to math out consistent damage based on value. It’s exacerbated by the beam behavior when it flies away from the player. I’ll try something where the beam being active isn’t tied to the X or Y scaling of the beam so that the 10 orb doesn’t cause an issue.
10/12/2025: The beam has a minimum X scale. When done firing, it moves away from the player. While firing, the player can’t perform certain actions. Added idea to the ideas list.
10/09/2025: Well, got stuck on how the beam should work, really. Like, should it be the same duration no matter what energy, or should duration and width be determined by energy? Then I ran into issues controlling how the beam scales down. Ended up using ChatGPT, lol. But now the beam duration is based on energy and shrinks accordingly.
10/08/2025: Started working on the sniper beam. Got stuck on an issue where a value needed to be set by the object creating the beam, not in the beam create event -_- . Figured it out and can work on the rest of it now.
10/07/2025: Asteroid can trigger the mine. Found issues related to the mine exploding and grabbing orbs. Fixed those, notes in tracker. Recorded two issues related to the menu.
10/06/2025: Recorded issue with pausing while boosting. Set up the negative mine. Flame range might be a little off?
10/05/2025: Fixed issue where the number line wouldn’t move if you dropped the core on an orb. Notes for fix in the issue tracker. Looked up how to get an object to orbit another object. Maybe try having orbs rotate the core (need to figure out how to force orbs to combine though).
10/02/2025: Dodge object determines which direction it's going in and uses the appropriate slide/don't slide code. Also put the "don’t get stuck in a wall" code at the end of the step event for the player, so that if you come out of a boost, you don’t get stuck in the wall. Actually works, wow.
10/01/2025: Got the boost to slide depending on angle, but only when hitting a wall above or below. Try checking the direction that the boost object is moving in, so that it only uses the up/down code if it hits those walls, and then uses the code for left/right, etc.
09/30/2025: Fixed issues with the core and orb getting dropped inside walls. More notes in the issue tracker. The same code that resolves this can also be used to make the boost object slide along walls. Trying to combine it with the bounce script that's used on the sniper bullet. Check the Ry and Rx (reflection vector?) and if within certain thresholds, bounce.
09/29/2025: Tried putting collision on the orbs. Got it to work, but it doesn’t feel good, especially prone to getting stuck on an orb when you drop it. Turned the run ability on from the previous game out of curiosity. Interesting because it still uses player collision, so you can slide on walls. Fixed the bug described in 09/28. Notes in the issue tracker.
09/28/2025: Fixing bugs. Got stuck on the issue where you can grab the core and an orb at the same time and carry both of them. Close to a solution but needed to stop. Tried adding an object that is always checking to see if the player is touching the core. Tried adding a delay, but didn’t experiment with making it really long. Might feel bad if it’s too long. Also tried something where if you create an orb carry when the core value is >0, it just treats it like you dropped the orb, but need to only check that this is happening when the core is held too. Was also creating an issue where the dropped orb wasn’t reducing the player-held value.
Reminder that I was messing with obj_playerAbsorb and obj_playerDrop to adjust how global._playerHeld is affected.
Actually, maybe it’s fixed now, lol. In the end step for orbCarry, it checks if the core is held. If it is, then drop the current orb. Then there’s a check in the core to make sure that if the core is held, the held value is always at least 1. Maybe add this to other holdable objects?
09/27/2025: Bomb hits things as it’s "rising" or "descending" if close enough. If you get hit while charging, you launch the bomb early. Asteroid is stunned if hit by an explosion. Fixed issue with text in the menu being janky (for now?).
09/25/2025: Flames cause damage over time. Removed explosion damage for now—it seemed too strong. Logged an issue.
09/24/2025: Setting up damage dealing by explosion. A lot of issues with hitstun and preventing the bomb from hitting multiple times. Got it figured out for core shield and core. Need to figure it out for orbs, player, and asteroids. Player has iframe alarm, don’t use ala_hit? Made the decision that damage doesn’t bleed through the core shield.
09/23/2025: Found and fixed an issue where you could special fire if holding the core after shooting a special. Tried to set up the implosion slowdown effect on the bomb but ran into issues with how I set that effect up and how the bomb behaves while in the air (scales + speeds up/down as it approaches and leaves midpoint). Maybe it doesn’t even make sense that it would be affected by it? Isn’t it supposed to go over stuff? Set up implosion effect for flames, and that works fine. Also realized I needed to spawn a flame range object for flames when hitting things besides the target.
09/22/2025: Object spawns that check for "height," near target, and near player. Tested with core shield, works so far. Reconfigured controls; face buttons are now used for weapon swapping.
09/18/2025: Bomb spreads based on energy now. Had to use ChatGPT to come up with a power law relationship equation (?). Backed up the chat in a document. Ended up using a combination of things, though. Spawn a flamerange object; if flames are outside of it, then stop. Then used the equation to set random ranges for spread.
09/17/2025: Had a successful shower thought: just create a "midpoint" target that uses the same setup as the regular target but only goes half as far, lol. Bomb projectile now can tell when it's approaching or moving further from the midpoint. Turned obj_testCanHeal back on in the room; it’s important for the player taking damage.
09/16/2025: Remembered that gamepad detection is working, just need to adjust it in settings. Flames hit the wall and stop. Fixed issues with the targets getting destroyed too early, and can now shoot multiple bombs. They move toward the correct target now, I think. Started to try to figure out how to have the bomb look like it's rising and falling, but the point distance and distance-to-object calculations are giving incorrect values. Got too tired and couldn’t think anymore.
09/15/2025: Charge boost decreases by 1 instead of going straight to 0. Bomb distance based on speed and friction is wonky. Setting up a system where a target extends out from the player while charging, and the bomb explodes when it hits the target or wall. So, all bombs travel at the same speed, just have different distances based on charge.
09/14/2025: Got a cat lol.
09/11/2025: Launched bomb creates an exploder object, similar to the shotgun. It creates projectiles equal to the energy.
09/10/2025: Thought about the negative shotgun type. Still leaning toward Ikaruga-style homing things. IDK, set up a hold-to-charge launcher. It only launches a test object a distance based on time held.
09/09/2025: Sorted out the depth issue for now. Just going to manage instances manually in the room hierarchy. Press 7 to spawn specific orbs (finally). Set up shotgun spreads.
09/08/2025: Tried moving objects around layers to get depth in order, but IT BROKE two objects that I needed to copy over to a brand new object. Made a backup and uploaded it to Drive. Just backup after every session and upload to Drive, I guess. Also organized other files into Drive (work log, sheet, website stuff).
09/07/2025: Tried laser sight, but it’s complicated. Simple solution for now is to just have a line extend through everything. Need to sort out depth, I guess. The laser sight stopping on things is LOW PRIORITY.
09/06/2025: Messed with bounce settings a bunch. Seems better now. Set up sniper bullet rules.
09/04/2025: Used the bouncing script from https://gmlscripts.com/script/collision_normal. Seems to fix the bouncing issue, but it's very dependent on the exact settings and sprite sizes in the project.
09/03/2025: Tried setting up the sniper bullet. Got stuck on bouncing. Decided it’s okay if they bounce in straight lines back and forth (kind of interesting, like a defensive line). However, the bounce function rounds small angles and forces straight-line movement, so maybe try different code? Also tried getting the player velocity to apply to the bullets, but not sure how to do this, and not sure if other games do it anyway. Ikaruga doesn’t.
09/02/2025: Imploder projectiles now damage everything consistently. Core shield acting weird, though; had to put its hit detection in its step event instead of in the projectile’s like everything else. Readded friction to bullets.
09/01/2025: Shotgun projectiles inflict damage reliably on all current objects.
08/30/2025: Set up shotgun to shoot bullets based on held energy. Issues with getting the collision to work as intended. Seems like what’s working is for the bullet collision in the bullet to determine the damage dealt to what it hits, rather than the hit object determining what hit it.
Also found the GameMaker tips folder on my computer again, lol.
08/28/2025: Wanted to look at how exploders figure out how many projectiles to launch (to use the same for shotgun). Took a while to figure out imploders. Wrote comments. Set up variables for fire modes; can set to default and shotgun.
08/27/2025: UI updates: Held value, pick-up value, boost meter, current core value, and core goal value all have initial setup.
08/26/2025: Exported UI at the correct size. Placed it in the room. Moved existing numbers around.
08/25/2025: Exported UI but accidentally at the wrong resolution (1080 vs 810).
08/24/2025: Exported test UI. Updated the project after SOMEONE stepped on the power strip. Updated and fixed project.
08/23/2025: Vertical energy line for UI in shooter.
08/21/2025: UI design for shooter, made mockup in Affinity.
08/20/2025: UI design for shooter, drew some and wrote notes.
08/19/2025: Reopened Energy Shooter. Reacclimating, deciding next step. UI!
08/04/2025: Started keeping a Work Log.
Unfortunately, work on Energy Shooter only lasted a few months before several life events shifted my focus away from this project =\
Converted previous project for a new idea, Energy Shooter. Over several months I concepted and implemented many of the core mechanics shown in the Mechanics section above: player shooting and boosting, orb grabbing and combining logic, orb explosion effects, rules related to The Core generating an Energy Wave, and recording player weapon and enemy concepts. The strong movement code and controls gave me a solid starting point.
This project started as a top-down action melee game back in 2018 and evolved through multiple iterations. I spent a lot of time refamiliarizing myself with GameMaker and implementing features like Menus and customizable controls. As it was intended to be a melee-focused experience, I got deep in the weeds early on refining player movement, collision, and attack hitboxes, which stalled the project.
After some pauses due to shifting priorities and life events, I fully committed to the current top-down shooter version at the end of 2023. By pivoting to an experience focused on projectiles, I felt freed from the previous hang ups related to the melee system.
The experience of pivoting and balancing work challenges and creative passion has strengthened my development skills and perseverance.
Commercial material used under fair use for portfolio purposes. © 2025 Bryon Lagania