Finally finished the game!!! Just posting a quick devlog before shipping. I added satellites and space junk that can fly in from the right side of your screen, which adds an extra obstacle. The only hard part about it was figuring out some physics equations with Newton’s Law of Universal Gravitation. After that, it was finished. Here’s my code if you want to look at it(GDScript): extends Node2D
var item = 0
var active_node: Node2D = null
var velocity := Vector2.ZERO
var rotation_speed := 0.0
var spawning_enabled := true
const MIN_SPAWN_TIME = 10.0
const MAX_SPAWN_TIME = 15.0
const PLANET_POSITION = Vector2(300, 1500)
const GRAVITY_STRENGTH = 450000.0
@onready var timer = $Timer
@onready var small_satellite = $“Small satelltite”
@onready var large_satellite = $“Large satellite”
@onready var scrap = $Scrap
func _ready() -> void:
randomize_next_spawn_time()
func _process(delta: float) -> void:
if active_node and active_node.visible:
var vector_to_planet = PLANET_POSITION - active_node.global_position
var distance = vector_to_planet.length()
var direction = vector_to_planet.normalized()
var gravity_force = direction * (GRAVITY_STRENGTH / (distance * distance))
velocity += gravity_force * delta
active_node.global_position += velocity * delta
active_node.rotation += rotation_speed * delta
if active_node.global_position.x < -150:
disable_active_node()
func _on_timer_timeout() -> void:
randomize_next_spawn_time()
if not spawning_enabled:
return
item = randi_range(1, 3)
if item == 1:
pick_small()
elif item == 2:
pick_large()
else:
pick_scrap()
func randomize_next_spawn_time() -> void:
if timer:
timer.wait_time = randf_range(MIN_SPAWN_TIME, MAX_SPAWN_TIME)
timer.start()
func reset_and_launch(node: Node2D):
disable_active_node()
small_satellite.hide()
large_satellite.hide()
scrap.hide()
node.show()
node.global_position = Vector2(600, randi_range(0, 960))
velocity = Vector2(-150, -45)
rotation_speed = randf_range(-1.5, 1.5)
if node.has_method("set_deferred"):
node.set_deferred("monitoring", true)
node.set_deferred("monitorable", true)
active_node = node
func disable_active_node():
if active_node:
active_node.hide()
if active_node.has_method(“set_deferred”):
active_node.set_deferred(“monitoring”, false)
active_node.set_deferred(“monitorable”, false)
func stop_spawning() -> void:
spawning_enabled = false
timer.stop()
func start_spawning() -> void:
spawning_enabled = true
randomize_next_spawn_time()
func pick_small():
reset_and_launch(small_satellite)
func pick_large():
reset_and_launch(large_satellite)
func pick_scrap():
reset_and_launch(scrap)
func _on_scrap_body_entered(body: Node2D) -> void:
if body.has_method(“take_damage”):
body.take_damage()
disable_active_node()
func _on_large_satellite_body_entered(body: Node2D) -> void:
if body.has_method(“take_damage”):
body.take_damage()
disable_active_node()
func _on_small_satelltite_body_entered(body: Node2D) -> void:
if body.has_method(“take_damage”):
body.take_damage()
disable_active_node()
Lately I’ve just been polishing the game. Nothing super interesting. I fixed the keybindings because when you selected a key with a long name like RightBracket, the label would expand into the button and overlap. I just made a better layout for it and made it so the text would be aligned on the right side, making it expand to the left instead. Then I worked on cleaning up some of my code since I’m planning on shipping tomorrow. Then I added a TON of polish to the main menu. I added a little rotating tip at the bottom and displayed your high score and highest wave at the top of the menu, which was easy enough. I still want to log at least two more hours, so if anyone has ideas, please let me know, because I’m out of ideas. Also, in the pictures, if the text looks sideways, it’s because I rotated it as a little animation. I think the current total for lines of code is 3005, if you’re interested, btw.
I’ve just been working on adding some finishing touches lately, most of which include working with the new log feature. Inside of it I have three different tabs Enemies which is just a list of all of the different enemies and their stats like hp and speed. The second one is for achievements. I have ten so far, which include: First Orbit, earned by playing for 15 mins. Deep Space Transit for 30 minutes, and Time Flies for an hour. Atmosphere Cleared for getting to wave 5. Flight Lieutenant for wave 15. Squadron Leader for wave 30, and Cosmic Anomaly for 50. Just Getting Warm for killing a thousand enemies. Determined I for dying 50 times and Determined II for dying 100 times. I also added some progress bars to visually show your progress towards the achievements. For the stats menu, all I changed was adding a darker panel behind all the stats to add some detail; other than that, that’s all I did. Also, the scrolling menus were almost my downfall.
This morning, I’ve been working on adding a statistics menu to the menu, which keeps track of stuff like your highest wave or how many power-ups you’ve bought. All of the things are saved after closing the window, so not much has been added, but it’s something.
Fairly large update!!! Over the past few days, I’ve been working and have gotten quite a lot done. Recent changes include A new bomber enemy who appears on wave 15, dropping bombs as it passes through. Bombs have 3 seconds before exploding and deal the standard 1 HP. Then I polished the menu so that instead of having ugly buttons down at the bottom of the screen, I now have large transparent buttons right in the middle of the screen. I also made the buttons feel really juicy, changing color and playing a short clicking sound when hovered over with the mouse. I changed up the settings panel by adding some darker panels for detail and organization. Instead of the set WASD and arrow keys, I now have key binding as an option. I don’t know what other controls players would use, but just in case, and it also makes the game feel more polished. I think right now I plan on adding a stats page in the menu next that can showcase stuff like your highest wave, how many attempts, and enemies killed. But I think I’m going to save that for tomorrow. So for now, I’ll see you in the next devlog. :)
🎉🎉Major Update🎉🎉 After a little bit of playtesting, I came to the conclusion that the game needed to be much harder because it came up as a problem more often than not. I was already planning to add a few more enemy types, so it didn’t really matter. New Enemy Types 1) A horde of diver enemies 2) A large tank enemy that has double shots 3) A Suicider enemy which pathfinds to the player 4) An asteroid field that can spawn I also plan on adding a bomber enemy with explosions, and a flame thrower enemy which will deal more damage the longer you are in the flames and will burn your fuel. But because I was so close to the 10-hour limit, I have to make a devlog before continuing on it. I also decreased the wavelength from 30 seconds to just 20 because it made for a much faster-paced game and was easier on the player. In the future, I plan on adding a keybind option to the settings, which might take a while to figure out, bosses, which probably won’t happen, and a ton more polish to the menu because it looks terrible.
Small Update: I just added a notes and acknowledgements page to replace the old broken leaderboard page. It just includes some writing and a link to my new Discord Page. If you want to join early to the launch, here’s the link: https://discord.gg/ccgyRZArYm
🎉🎉MAJOR UPDATE🎉🎉: For the past few days I’ve been working on a few updates, which include finishing and balancing the new Super Nova feature. When you max out all 3 power-up upgrades, it allows you to super charge. One of them includes Double Shot, 2x score on top of 2x score, and buffs for a short amount of time after your shield breaks. I made waves infinitely and made them progressively harder with each passing wave. I added a slight amount of polish to the menu where a little click sound plays when you toggle settings or press a button. I realized that when the player got hit it wasn’t very noticeable since it played the same sound as when an enemy got hit, so I added screen shake which was something I wanted to add for a while but procrastinated it because the way I made my scrolling background with a Parallax background that had a Parallax layer and sprite 2D as a child so when I added the camera 2D node it stopped the background from scrolling so I had to delete all of that and update it with the newer method. But after an hour or so, I got it looking clean and was happy with it, so now when the player takes damage, there is a very noticeable shake to the screen, which helps indicate that you got hit. I also added this to the enemy, but you have to build up a fairly large consecutive hit counter to really notice it. I did start to work on a new tank enemy since all of the existing ones are relatively weak, so this one will have 5 HP, which is half of an asteroid, and will shoot double-shot bullets, which will be punishing if the player gets hit by it. Speaking of HP, instead of healing the player’s hearts back to their maximum amount despite the current amount, it now only heals you by one heart. Now normally, I would have a video to showcase all of these new features, but my thing is weird and will only take images, not videos, so sorry if it’s missing, like all of the updates.
Major Update: Over the past few days, I’ve added a lot of features that will have a significant impact on the game. The first of which is a new shop where the player can purchase upgrades, including a +5% speed increase (limit of 25%), a +5% fire rate upgrade (limit of 25%), and, lastly, a refuel upgrade, which will refill 5% for the cost of 1 coin. The player now has 3 lives instead of just 1, which will allow the player to progress through the game more. In the shop the player can upgrade the amount of lives they have(max of 5). After each wave their health returns to it’s maximum, but fuel will remain the same. In the power-ups tab, the player can increase the duration of each power-up by a maximum of 5 seconds. Once the player maxes out all 3 power-ups, they will unlock a feature called Super Nova were they can select one of the three power-ups to gain a new feature that will help the player survive new waves. Speaking of waves, the next change includes breaking up the game into multiple waves. This change allows the player to get a break between waves to upgrade their ship in the shop. This also makes the player feel like they are progressing through the game more.
Large Update: Last night and this morning, I’ve been working on some new features, including a new fuel tank that slowly depletes, and the only way to refill it is by collecting fuel canisters. This change also allows the player to hold down Shift to get a 50% speed increase, but the fuel tank goes down twice as fast. I also added a new fire particle effect that follows the player, making the game feel much livelier. Coins are also a new feature that have a 10% drop rate on the death of an enemy. Right now, coins do nothing, but in the future I have plans to add a shop/upgrade feature. The player now has three lives instead of one; this makes the game feel more forgiving, but when you lose a heart, your fuel tank decreases by 20%, making fuel a much bigger problem than before. When your fuel tank hits 0, the game is over regardless of how many hearts the player has.
Today’s changes include adding a new power-up, which is a shield that protects the player from one hit for 10 seconds. There is a shield Icon which follows the player around, acting as a visual indicator for the power-up. I also made the player movement much smoother by making the player accelerate in a direction instead of moving at a flat rate, which makes the game overall feel much more “alive”.
Major update: as you can tell from me logging in more than 9 hours, I made a lot of changes, which include two new enemies because I realized as long as you don’t actively try to die, you can live forever, so we have two new enemies, both of which fire bullets at the player, so you have something that poses a threat unlike the old enemies. One is quick, has a fast firing speed, and is small, but only has 1 hp. It also provides more points than its much slower partner, who has 2 hp, a slower firing rate, and a bigger hitbox. I also added two power-ups, randomly selected from the two as collectable items: the first doubles your shoot cooldown for 5 seconds, and the second doubles your score income for 15 seconds. When you collect a power-up, a bar appears at the bottom of your screen, showing how much time remains on your power-up. That’s all that I did for this week, and more features are on their way. Thanks! p.s. I can’t add a video containing the update because my thing is weird and only lets me upload images to Stardance. Sorry about the inconvenience😭
These past few days, I worked on adding polish, bug fixes, and a new load screen. The load screen GUI is just a placeholder until I can polish it off. I might have to scrap an online leaderboard because I’m new to Godot and know very little GD script, so I can’t use SilentWolf. I’ve been working on implementing Talo, but I can’t find any tutorials, and Google can’t help me with it. Unless I can get it working I don’t think I can add an online leader board.
I need help. I did finally fix the one bug that stopped enemies from spawning, but my next goal was to make a leaderboard, so I set up all of the UI for it, and when I realized I had no idea what I was doing, I ultimately looked up a YouTube tutorial. I didn’t realize that I needed to use a plugin to create an online server for my game. And when I tried to download Silent Wolf, it wouldn’t let me because I was still using version 4.4, and I didn’t want to update it in case it broke my game. So do I scrap leaderboards, or is there some other way?
Lately I’ve been working on adding a settings feature that includes options for music, sound effects, and a reset data button. While working on this feature, I managed to break my entire game, so fingers crossed I can fix it. I plan on adding an online leaderboard (If I can fix the game).
Void Strike is a space shooter-type game in which the player must test their skills by trying to survive for as long as possible while gaining points by killing enemies. Changelog: Added an asteroid, which is a new obstacle that has a lot of HP and permits the enemies to advance closer to the player. Bug fixes I haven’t posted a devlog because I’ve been on vacation so I’m very behind on my project.
Void Strike is a space shooter-type game in which the player must test their skills by trying to survive for as long as possible while gaining points by killing enemies. I haven’t posted a Dev-log for a while, but I’ve added a lot of features in that time.
Changelog
My next steps will be to add a main menu, possibly a shop and a currency to buy player upgrades, and a competitive global scoreboard.
P.S. I would take a video, but my internet keeps showing an error, so I’ve taken a photo instead. Believe me, I added what I said I did.
Void Strike is a simple space shooter type game that I’m working on. I know it’s a little simple, but I’m inexperienced with Godot.
Changelog
Void Strike, which is a space shooter I just started working on. It will be on the simpler side, because I’m new to using Godot. So far I have the player movement, and shooting working. I plan to add a lot more in the future.