Astral Pulse Dev Log

Dev Log 1: Design Pitch

I had a few vague ideas going into creating my design pitch for my game. Working on VampPR showed me how much more lively and immersive a game can feel by having many independently moving parts and a densely populated scene.

Some of my initial ideas were as follows:


I also really liked the simple one-key input that VampPR had. It made the programming simple and gave us more time to focus on visuals. I struggled for a while to think of a main mechanic that could work well with minimal input while allowing the player to create complex chain reactions by timing their input.


In the end, I landed on a space game inspired by asteroids and the third minigame from OUTBREAK (made by Liv, Laynie, and Danielle). You control an orbital demolition drone equipped with a chargeable pulse attack, and you must destroy various space themed obstacles (decommissioned satellites, asteroids, etc.). Your attacks are limited and you must collect fragments from destroyed obstacles to recharge your weapon. You will have to release your pulse attacks at the optimal time with the optimal strength to create chain reactions. Chain reactions are necessary to create the most fragments in order to recharge your weapon.

Dev Log 2: Player Movement

Day 2 was spent ironing out a movement system. It was fairly simple and did not take long. As you can see from the GIF below it is heavily inspired by asteroids as well as OUTBREAK

I wanted another way to show the player charging up an attack with varying levels of output potential, so I used a particle system and wrote a script that modified various attributes of the particle system to show an increase in power.

I had not implemented many particle systems in past projects, so this was a learning experience. I had not realized how many customizable features Unity particle systems had, so I spent quite a bit of time experimenting. One thing I added was making the particles increase with opacity over their lifetime, which gave the effect of the particles materializing around the player. I also wanted the particles to have trails that would increase in opacity as well; however, I could not figure out a way to do this. It seems using Unity’s built in particle trail would apply the opacity to the entire trail as opposed to giving the trail its own gradient. I may come back to this later; however, I think the particles without trails achieves the look I was going for.

Dev Log 3: Player Attack Visuals

I wanted to get an early start on visuals, specifically player visuals. I created multiple animations for the player: open/power on, idle, and a multi-stage attack animation that indicates the current charged attack level.

I wanted another way to show the player charging up an attack with varying levels of output potential, so I used a particle system and wrote a script that modified various attributes of the particle system to show an increase in power.

I had not implemented many particle systems in past projects, so this was a learning experience. I had not realized how many customizable features Unity particle systems had, so I spent quite a bit of time experimenting. One thing I added was making the particles increase with opacity over their lifetime, which gave the effect of the particles materializing around the player. I also wanted the particles to have trails that would increase in opacity as well; however, I could not figure out a way to do this. It seems using Unity’s built in particle trail would apply the opacity to the entire trail as opposed to giving the trail its own gradient. I may come back to this later; however, I think the particles without trails achieves the look I was going for.

Dev Log 4: Additional Player Visuals

I added a twinkle animation to the player attack for some additional visual juice. I looked up twinling stars for reference and drew the animation in Aesprite.

I also made an attack pulse animation. I drew the image in gimp, applied a wave filter, applied the same filter on different layers but with varying phase shift to create a growing effect, then I copied the file into Aesprite to shrink/pixelate it and finally cleaned it up a bit.

Dev Log 5: A Break From Visuals

Today I took a break from visuals to focus on the mechanics I needed for a minimum viable product. I was able to reuse and adapt much of the code I needed from past projects.


For example, I quickly created a health and death system by adapting a similar system. Obstacle spawning was a simple solution for now, and may need to be updated later. The obstacle health/death system was also an adaptation of my previously written code. In addition to making the player’s attacks damage and destroy obstacles, I made obstacles able to damage and destroy other obstacles on collisions. I am hoping this encourages the player to try to plan their attacks strategically.


I also added some additional game-juice effects, such as adjusting the scaling of both the attack visual and in-game effect programmatically depending on the player’s charged attack level and adjusting the time scale to create a slow-mo effect when the player fully charges their attack.


The last thing I added today was a boundary that deletes all objects, to increase performance.

Dev Log 6: Reflecting on Playtest 1

Quick brainstorm reflecting on playtest 1. Began implementing a new solution that may require more coding.

The following are the notes I took while playtesting:

Based on feedback and my own playing of the game, I decided the game was too complicated and there were too many controls to balance. I realized I could come to the root of the issue by taking note of the things the player has to keep track of while playing.

I realized that something needed to be limited in some way. I had a few ideas...

I knew I didn't want to limit the timing of charging and releasing the attack as that should be an integral part of the gameplay. I also didn't want to limit hitting things into other things or in other words triggering chain events.

  1. Limit collecing fragments: If I removed the need to collect fragments, that would be one less thing for the player to focus on. I could do this either by giving the player infinite attack or by making fragments autocollect.

    I figured that infinite attack would make the game too easy, but a cool down or autocollection would work.

  2. Limit movement: If the player movement was automated in some way it would mean one less thing for the player to focus on. I needed a creative way to limit movement, so I came up with a few ideas.

    Space Foosball: Up and down arrows move an array of drones, and space is used to attack.

    Rotate a space station or control an orbital drone: use left and right to rotate, up and down to switch weapons, and space to attack

    And finally a ricochet based movement where the player would sling shot around planets with gravity effects

Dev Log 7: Testing a New Mechanic

Today I decided to attempt to implement the ricochet mechanic I came up with the other day. I struggled with this for a while before eventually getting a ricochet/orbit system that I like enough, but not enough to continue working on it. I scratched that plan and went back to my original idea of free movement.

Dev Log 8: More Art and Mechanics

Today was spent getting as much done and put into the game before the due date as possile. I was able to get quite a lot done. I was able to add lots of UI elements, including a death canvas, dynamic main menu, score, health, and attack. Most of my time today was spent getting the visuals of the attack UI display working, and I am really happy with how it turned out.

I was also able to get multiple sprites drawn for the asteroids as well as the fragments that the asteroids break into. I got the fragment auto-collection system and attack charge system fully working. I added a glow to the fragments that looks great

Finally, I made some cover art, set up the Itch page and wrapped up my dev log.

Reflection

Summary

Astral Pulse is an arcade-style game about piloting an orbital demolition drone and destroying incoming asteroids. You use a powerful pulse attack to break asteroids into fragments and collect the fragments to charge more attakcs.


What I Learned

I learned a lesson that I have learned before and that is don't overscope. I think all of my projects this semster have been at least a little overscoped including astral pulse. For future assignments, I want to focus on coming up with a simple idea early on.


What I am Most Proud Of

I am most proud of the various visual elements, especially the player visual. I put a lot of effort toward the beginning of the project into making the player look good and feel good to control and I thing it payed off.


My Biggest Challenge

My Biggest Challenge was coming up with a game that fit the idea in my head. My initial idea was a game with minimal input (ideally one key) that the player would use at the right time to start chain reactions. This mechanic would be perfect for a puzzle game, but I also wanted chaotic gameplay and player movement. These ideas seemed to contradict and I got stuck for a while.

In the end I am proud of how the project turned out, and if I picked a project from the class to continue working on it would be Astral Pulse.