stardance has been extended another month! the new deadline is october 31 :)

You are browsing as a guest. Sign up (or log in) to start making projects!

Kernel Panic Tower Defence

  • 9 Devlogs
  • 48 Total hours

Hold off malware to give your firewall time to be repaired in this tower defence game prototype built using the Godot engine! It is inspired by 1990s Unix systems and sci-fi classics like ‘The Matrix’.

Ship #1

Kernel Panic

Hold off malware to give your firewall time to be repaired in this tower defence game prototype built using the Godot engine! It is inspired by 1990s Unix systems and sci-fi classics like ‘The Matrix’.


Play the demo at https://gianthotdog.itch.io/Kernel-Panic


The game demo includes:

  • Multiple levels including a tutorial
  • GRUB-style menu
  • A settings menu (Audio settings, Credits, VSync settings)
  • A config file system so settings persist across play sessions
  • An upgrade tree that contains global upgrades to towers and XP gains
    • An XP and skill point system for purchasing those upgrades
  • 4 distinct types of towers with adjustable targeting priorities
  • Several enemy types
  • Custom resources to handle:
    • Single tower upgrades
    • Enemy counts in waves
    • Global upgrades

Controls:

  • Enter to skip startup sequence
  • Click to select / interact / modify values

AI:

AI was used to write about 50 lines of code for the two shaders, and very occasionally for solving persistent bugs. It was only used for bug fixes after I tried repeatedly and failed to find a solution myself. It was also used for some feedback on aesthetic choices. All assets were designed by hand. All AI code was reviewed before implementation.


Credits:

  • 9 devlogs
  • 48h
  • 15.59x multiplier
  • 745 Stardust
Try project → See source code →
Open comments for this post

5h 5m 49s logged

Improving the global upgrade system

Additions:

  • Support for panning around the upgrade tree
  • More upgrades!
  • Added icons to upgrades
  • Added file saving for XP earned
  • Allow accessing the skill tree from the menu

Changes:

  • Level completion is now tracked across multiple play sessions
  • Refined “Currently: …” messages in the upgrade tree

The features from the last devlog are now also public! 🎉

I added some more upgrades to the upgrade tree, and I also gave all of them icons. The icons are… passable. I’m not a graphical artist, and it kind of shows. The “Currently…” messages at the bottom of the side panel got an overhaul, including the addition of units, specific to the type of value being upgraded

The game now saves both xp earned and levels completed to files, so they persist between play sessions. This means you don’t have to replay the whole game every time you close it - this is no longer an 80s game!

The skill tree can also be accessed from the menu, so I’m no longer just booting it straight from the Godot editor. This makes it slightly more user friendly.

This is probably where I will leave this project for now. I may come back to it now and then, but I’m happy with where this game demo has ended up. I’ll ship it soon, so watch out for that!

If you want to play the game, it is live here.
If you are interested in the code, it is available here.


To Do list:

  • Add a “reset all to default” option in settings

Quote of the update:

  • “Next time I do this, remind me to actually build a proper tree structure”

Any suggestions, please let me know in the comments below.
Thanks for reading!

0
0
16
Open comments for this post

10h 32m 16s logged

Adding a global upgrade system

Additions:

  • Added ‘Zero day’ enemy
  • Added a second level with 6 waves
  • Added a xp system, with skill points and a skill tree

Changes:

  • Expanded wave variety in other levels

I added a ‘Zero day’ enemy to my game. This enemy is invulnerable for the first 5 seconds after it first spawns in. This makes it highly annoying as it has a tendency to draw and absorb all attacks from high damage towers, and pass through a large portion of your damaging towers unscathed.

I also added more waves and a second level, and I’ll slowly expand the playtime of the game as I also add more features

The big change here is the xp system. Currently, finishing a level rewards you with some xp, which counts towards your level. Each level up rewards you with a skill point that can be spent in the skill tree. The xp required to level up increases exponentially as the current level gets higher and higher. Unlocks in the tree save to a file and read back on load, so progress is maintained. I was reminded here of my vehement dislike of handling files. For the second time during this project, I forgot where userspace files were stored in Godot. Check this devlog for a bit more detail.

Now unfortunately, the demo currently online doesn’t include these new features because I need to write a devlog every 10 hours, but the features aren’t finished. I’ll push them as soon as they are ready™


To Do list:

  • Add file saving for XP earned
  • Allow actually accessing the skill tree from the menu
  • Add a “reset all to default” option in settings

Quote of the update:

  • “I. Really. Hate. Files”

Any suggestions, please let me know in the comments below.

0
0
88
Open comments for this post

10h 4m 50s logged

Added a compendium

Alright, this is a big one

Additions:

  • Added an indicator that shows the progress through the level
  • Added a “Zip bomb” enemy
  • Added cloaked enemies
  • Added a pause menu
  • Added a compendium

Changes:

  • Rebuilt the tutorial

I added an indicator to show the player’s progress through the level. It also adds a tiny bit of story - you have to hold off malware until a firewall is constructed, and that bar shows you the progress. And I didn’t even build it from scratch - I’m just using the health bar from the enemies! 🤫

Next - a zip bomb enemy that, as the name suggests, spawns a burst of child enemies when killed. It moves very slowly, but has high health - this makes it a great target for the SIGTERM sniper tower, which was previously useless not always the best choice.

Cloaking was my way of trying to spice up the types of enemies the player would have to deal with. Some enemies in a level will now be cloaked, which means they cannot be attacked until they have their cloaking removed by the new ‘defragmenter’ tower.

I wanted a way for players to easily compare the stats of the various towers and enemies, and I also needed something else to add to my pause menu. I decided to kill two pieces of malware with one antivirus quarantine, by adding a compendium. This currently has two tabs, for towers and enemies, each showing you the stats of a tower / enemy when it’s selected. Please don’t ask me how long this took. I don’t want to talk about it.

I also rebuilt the tutorial because it

  1. looked bad
  2. was a pain to build and test
  3. would break if i breathed too close to it

So I completely scrapped the old system and built a new one


Quote of the update:

  • “Hidden malware is a pain - in this game, and in real life”

Any suggestions, please let me know in the comments below.

0
0
9
Open comments for this post

4h 11m 5s logged

Added a terminal window that logs game events and a tower blocker for level design

Changes:

  • Reorganised the UI to provide more space for the level and generally give everything a more unified aesthetic

Additions:

  • Added a terminal window at the bottom of the screen that logs game events
  • Added a ‘towerblocker’ tool that the level designer can use to restrict tower placement opportunities

Plus (as always) quite a few bug fixes


So what is the key feature for any 90s UNIX Linux system? A terminal, of course! And what is a UNIX-themed game without a terminal? So I added a system where game events, such as waves starting, or enemies being killed, are logged to a terminal window at the bottom of the screen. This window can be opened and closed, and has a little coloured pulse around it whenever a new log is entered. The coloured pulse is synced to the type of event (red for ‘errors’, yellow for ‘warnings’ white for everything else) as well. Each message contains some details about the event and a timestamp on the left. This feature was my first time using the richTextLabel, which allowed me to colour the text.

The towerblocker is simple - it’s an invisible tile that can only be placed when the levels are being designed in order to add difficulty or avoid placing of towers offscreen

I also reorganised the UI to provide more space for the level - it was all feeling a bit cramped. That reorg also helped to give everything a more unified aesthetic because I took the opportunity to apply some styles to everything, making it feel just a little more together.

Quote of the update:

  • “An empty terminal log is always nice. Unfortunately, I don’t think things will be that peaceful…”

Any suggestions, please let me know in the comments.

0
0
5
Open comments for this post

6h 27m 27s logged

Overhauled the game over screen’s aesthetic and added mouse support to the menu

Changes:

  • Changed the game over screen to better fit with the game’s aesthetic
  • Changed the font to a monospaced one

Additions:

  • Added mouse support to the menu
  • Added a spray of particles to enemies when they die
  • Added a chromatic aberration effect to enemies when they are hit

Plus quite a few bug fixes


The first change in this devlog is the game over screen, which used to look like a boring window with a restart button, but now looks like a crash screen [Image below] that uses the actual system data to display its message, via a template string and an 8 line formatting statement. I am quite proud of this one

Adding mouse support to the menu was, in a word, painful. Because I’d built my own menu system using labels instead of buttons, I had to almost completely rewrite the code to allow for conversion of a Label reference (from one of Godot’s built-in functions) to a child id (which my functions were expecting). And then I had to add some overrides to that so some labels that were not part of the menu system wouldn’t break everything.

The spray of particles from enemies when they die is one of my personal favourite effects in this game, mostly because of what I’ve learnt from it. I made the particles be text based by using a subviewport, which basically is a viewport that doesn’t display anything and can then be attached to a texture to show its contents, in this case, on the particles as they are emitted. I also made the text randomise to a 2 digit hexadecimal value - that felt suitably ‘techy’

One of the smaller features in this devlog is the font change. Instead of using Godot’s default font, I found the font used in the actual GRUB and used that instead. Where did I find this font, you ask? It came directly from my PC - I copied the file straight out of /usr/share/fonts.

And now we come to chromatic aberration which, as it turns out, is easy to implement for the whole screen, but slightly harder to make work for only a single sprite without discolouring the background. After messing around with shaders for a bit, I gave up and just made 2 versions of my enemy sprite (in red and blue) and just physically offset them in code. And it works. And, if I dare to blow my own trumpet for just a second, it looks great!


Quote of the update:

  • “Please never make me look at my menu code again.”

0
0
3
Open comments for this post

4h 17m 30s logged

Overhauled the menu aesthetic and added a settings menu

So, I realised that I’d called this game ‘Kernel Panic’, a very techy name, and yet done little to lean into the aesthetic that evoked. I decided to fix that.

Changes:

  • Rebuilt the main menu to use a similar aesthetic to the Linux GRUB
  • Added a settings menu:
    • Support for 2 Vsync modes
    • A slider to control audio
    • A credits page

This was my first time using config files, so I also got to learn something; Godot’s user:// directory is not the same as res://. A file created in the user:// directory cannot be seen in the res:// directory. From my uneducated perspective, it seemed as if this file (which I couldn’t find in the editor, since that only shows res://) was persisting across runtimes - something non-existent files famously don’t do.


I saw someone else do a ‘quote of the update’, but I was unable to find their username to credit them, so please tell me if you know who they are:

Quote of the update:

  • “I really don’t like config files”

Next plan is to overhaul the game over screen so it better fits with the aesthetic

0
0
7
Open comments for this post

15m 3s logged

Made a dictionary of wave information resources in the level.
I exported a dictionary of custom WaveInfo resources in my level scene, and went to add a new resource to the dictionary. I typed in the key, added a new WaveInfo, and clicked Ctrl+s.

My new key-value pair promptly vanished without a trace

And so began the hour of removing variables, re-adding variables, trawling through the Godot forums and generally wanting to set fire to my computer to try to find the problem. The urge that was not improved by the discovery that I’d forgotten to press the button to actually add the key-value pair, and the error firmly existed between chair and keyboard.

0
0
8
Open comments for this post

25m logged

Added a resource to allow upgrades to towers.
For those who haven’t used Godot, a resource is a fancy name for a data container that counts the number of other objects referencing it and automatically frees itself when it is no longer needed. According to a quick glance at the Godot docs, creating a custom Resource is as simple as creating a new script that extends Resource and adding a couple of @export variables.

I failed at step one, used the default ‘extend Node’ instead of ‘extend Resource’, and then spent over half an hour trying to work out why it didn’t show up in the inspector.

Lesson learned then?

Not really, because I did the exact same thing again the next day.

0
0
3
Open comments for this post

7h 5m 51s logged

First devlog for Kernel Panic, a tower defence game built in Godot.
Here is my progress so far:

  • A menu which allows the user to select levels
  • Multiple custom resources to allow for:
    • Flexible enemy counts and spawn rates during waves
    • Changing of range, damage, or attack speed of a tower
    • Creation of ‘upgrade paths’, which store several upgrades, as well as progress along the path
  • Inspection window that allows:
    • Customisable targeting priority
    • Upgrades to be applied from multiple upgrade paths
  • Multiple towers with several unique upgrade paths each

Next step - building a tutorial level that explains the key mechanics of the game.

0
0
9

Delete project?

Are you sure you want to permanently delete this project? This action cannot be undone.

All devlogs, followers, and associated data will be removed.

Followers

Loading…