Making of: Journey Before Destination [Brackeys Game Jam 2021.1]
Introduction
This past year I've been learning and improving on my coding skills using Godot, specifically GDScript. I followed HeartBeast's Action RPG tuotorial series, and right after I started a new project that I had no tutorial to rely on, and made me a more self-suffiecient programmer. This doesn't mean I know everything, but just enough so that I can know what I'd need to know for a script to do what I want it to do.
Themes
I joined the discord and Jam about three days before it started. I actually wanted to start any Jam so I joined the Godot's Wild Jam that was due to start just two days before this one, but I didn't like the theme and waited for the Brackeys Jam to start. What made me confident was the fact that a list of themes was released on Discord for us to vote on, and all of them inspired different ideas almost instantly.
I settled with a dungeon-crawler where the player had to collect companions and could fire different attacks with. I also wanted them to follow the player from behind and add to the max health available for the player.
Art
As soon as the theme was announced, on Sunday at noon for me, I wrote on a few papers all the ideas I had for every theme and expanded on them a bit. This allowed me to get these thoughts out of my head, and let me focus on the chosen theme. I knew I wanted a simple art style to rapidly iterate designs, which worked like a charm since at the end of the day I had an almost complete tileset (1-bit color pallete and 8x8 tiles).
I had a wall, a chest, animated spikes, four two-frame characters for simple movement, a rotating coin, and more. I still didn't have enemies though. Still no functionality, just graphics made with Aseprite:
I also had a test scene where I placed a player that could move around on the grid. It was at this point I decided to color the characters since they blended into some tiles they were supposed to walk over, like spikes.
Code
The player consists of a sprite which I change frames for the walking animation. Also has two button, the first will select the character and show a second button which when clicked played the animation for an attack. It has some bugs like selecting more than one character at once, but it worked well. Aside from that, a raycast which detects if there's any walls ahead, and an interaction area that can collide with items and incoming attacks.
The way I change levels may be different to the standard. First, in Godot there're scenes, which can mean everything from a button to a whole level. Scenes may be composed of more scenes as children of the root node. So to change levels, you'd just change scene to the next level. But I didn't. If you do that, you have to save data first, though it would have been easier in terms of local respawn. My solution just fades to black, removes the current level and adds the new one before fading back in. Which leads me to...
In my game you have to collect things, from coins to potions and companions. These things wouldn't persist with a change scene model, and so it's easier for me to not change the level and just change your surroundings. So the main scene is persistant also.
Lastly, the enemy AI is, to say the least, basic and inconsistent. I struggled to make the enemies move in the grid. To accomplish it, the enemy gets the player rotation and moves in the x and y axis depending on which one is larger (meaning farther from the player), and on a timer which limits the times per second it can move. All of this results in a stepped grid movement. The problem with enemies is their lack of collision detection, which lets them ocupy the same space as static objects, and even the player itself.
Level Design
This sparked some controversy from some players since they get lost at the beginning. My philosphy was place room, decide in which direction to open a door, place corridor. Also, my character's abilities shaped the progression heavily since I gave them unique traits, and layed out the levels accordingly. I also decided to add optional collectibles as it's the case for the last companion who's only trait is to deal more damage.
The abilities in order of appearance are: Swipe (the normal and default attack), arrow (can deal damage at a 3 tile distance), flame (it catches cobwebs on fire), bash (it destroys rocks), and stab (it deals 2 hearts of damage).
The last two being optional to beating the game as you can progress without them. If you're lucky the chests will drop a bomb which will clear some rocks for you.
Level 1-3:
UI
This was made easy with Godot since it has a very good system in place to build quick layouts and lots of nodes to partion and style them. I made the background in Aseprite and added buttons, dinamic lables, and animations in the editor. I'm quite happy with the end result and even added a cool looking buy your respawn animation, which takes five coins from you and refills your default health.
Sound and Music
I can't take much credit for this other than being the one assigning each sound to the corresponding scene, and triggering them on queue. For sound effects I used some assets from Heartbeast's Action RPG tutorial, and the music from Billy Dolan. I got praise for these from some people, props to their creators for helping me polish my game.
The Future
I intend to fix the existing bugs people have reported, as well as change the input controls to only keyboard keys. The content will remain the same, and with that I'll declare this project as finished and archive it as my first finished product.
Files
Get Journey Before Destination
Journey Before Destination
Enter the Dungeon as your town's Hero, gather companions, and clear it of its corruption.
Status | Released |
Author | GameDev_byHobby |
Genre | Adventure |
Tags | Pixel Art, Roguelike, Singleplayer |
Languages | English |
Leave a comment
Log in with itch.io to leave a comment.