Jam End Post Mortem
With the jam's submittal time ending not even half an hour ago I feel it's a good time to reflect and review how these past two weeks have gone. This is from the perspective of me (the programmer/project lead), my own experiences with the project and tools, and how we as a team did. This'll be my first attempt at a formal post-mortem so I'll try (and fail) to keep it concise!
Start of the Jam
Firstly, this game was made for the two week long Revival Jam 2024 by three people. The jam's theme was to revive a concept or project you've started before or from older media that you feel deserves to come back to life. When I heard about the jam it was a few days prior to it starting and I considered whether I'd want to join and what that'd do for me. My motivations as of late have been to learn the Godot game engine as well as reignite my game dev journey and joining a jam was a great means to do that. While many other jams could have motivated me, it helped that the jam was organized by a local game dev community I recently joined ("Dallas Society of Play" or SoP) so that's what made me choose it over other jams.
When the jam began I participated in its kick-off event hosted on the SoP Discord server. After it concluded everyone began to work on their games or finalize teams. At the time I didn't have a definite idea or any sort of design document. While listening to the event coordinators I decided to try reviving the concept of a real-time action card-based RPG inspired from the old FromSoft game series "Lost Kingdoms". It was a series where you used cards to summon monsters for combat and exploration in a real-time 3D world. I hadn't seen anything similar to it ever since the series' last entry in the early 2000's so I wanted to take a crack at making it.
Forming the Team
Once I knew what I wanted to make I then thought about how I'd do it. I already knew I'd use the Godot game engine as well as make design documents to help me solidify how the game would work and feel, but I wasn't sure if I would be doing it all alone or with a group. The game's concept would rely heavily on a variety of 2D cards, each with their own models and animations. I ended up deciding that it'd be a good idea to focus on just learning Godot and its GDScript if possible so I opted to bring on at least two more people to do the art (cards/2D and models/3D).
I had overheard someone in the jam's mingle chat asking if anyone needed a 3D artist so I reached out. After describing my game's concept and showing a few screenshots of the inspiration material he ended up liking it and joined. Shortly after that I made a post looking for a 2D artist for the card artwork. While two people ended up being interested they ultimately joined other teams. This was when Landon (the 3D artist) asked a friend of his if they'd like to join as our 2D artist to which they did. With both Landon (3D) and Max (2D) we now had enough people to begin work on the game!
The first few days
At the beginning I went to work writing up the GDD as well as create an excel sheet with the list of cards and their monsters/effects. I asked the others to chime in with any design choices of their own but aside from a few minor suggestions they left designing it to me. After the design phase and establishing an MVP I launched Godot and began making a main menu. I wanted a menu with a backdrop scene and animated camera so that I could learn as much as possible. I had some experience with other game engines but each tool has its learning curve and it had been a while since I did anything so I was rusty. After a few days I had a basic main menu scene and could move onto creating a test level and getting the player character controller up and running.
Meanwhile Landon and Max had split off to work on the card and monster assets right away. Using the excel sheet listing them out they started with a skeleton monster. Prior to this Landon had told me he was completely new to his toolchain (Maya for modeling and Blender for rigging/animating) and character creation in general which I was cool with. There were going to be a lot of firsts during this project so the main goals were to have fun with it and push ourselves to learn what we wanted. While Landon was figuring out his workflow Max had completed the first card.
He kept the details to a minimum and using his personal art-style set the visual tone for the game. He designed the card frame to more easily show the card types we had and I think it came out great.
Middle of the jam
With the jam being several days in we were steadily making progress on each front as well as encountering our first set of problems. I had made a block-out test level alongside a player character controller that could move around, orbit the camera around their character, and jump. I was then working on the base monster type and getting its state machine working. For me this was the first true hurdle as I had never tried to make an AI complex enough to handle various states and transitions in this way. Most other projects I worked on had AI that were usually in a single state of chasing, patrolling, or firing off projectiles with no regard to pathfinding, line of sight, or the concept of friend/foe.
While making this base monster AI I'd have to resolve many problems such as event signals firing off for a state that should be inactive, tracking of instanced entities so that if a monster changes state they could still identify important nearby entities such as potential targets in line of sight, etc. I also found it getting more difficult to clearly see the flow of a given state due to poor naming of functions and signals, so I started to adopt strategies like naming signals with past tense and split up functions into "try_action()", "signal_name_process()", etc. I still don't think I have the best setup but it did help to refactor the AI state code to be more locked down per state (checking if !is_active for signal handling helped) and for the flow of entering, processing, and exiting states to be easier to follow. Some edge cases were still unresolved but I knew I needed to move on as there was still much more to do.
Landon had started finishing some monster assets after getting more comfortable with his toolset. He began posting screenshots of his progress to our group DM including one for the skeleton monster. While certainly rough around the edges they looked usable and as he would be the one animating them I had no complaint on how he set them up. We hadn't tested them in the game or Godot in general at this point as he was still working on them but I did ask him to export them in .gltf format so I could more easily bring them into the engine.
Given we were about halfway through the jam we began to feel like there may too much workload on the 3D side for the time scope we had. We had a total of 16 cards and their monsters/effects to be made and were at best only about 1/5th of the way through making the 3D side of them. Aside from me offering to try and offload some work from him to me or to re-evaluate our scope not much became of this fact. It was at this point that Landon began experiencing "artist burnout" (his description) and worry on the volume he had to push out. However this is something I only knew about at the very end of development so I'll revisit this.
Max was continuing the card artwork and was making great progress. Halfway through the game jam he was a little more than halfway done with the 16 cards we needed. I don't know if he was running into any problems as he worked but aside from expressing an interest in touching up a couple earlier cards he didn't say anything else.
Nearing the end
With only about two days left in the jam we ideally would be wrapping up the MVP and switching gears towards playtesting and polish, however things had slowed down considerably for both Landon and I. While I had made quite a bit of progress on getting a working HUD, environment interaction, death/restart, damage system, card deck system, and experience/progression system, many things were still left undone or in a poor state. There was still only one monster roaming the test level and no other card types were yet working. There were no fully developed levels, no card shop to spend gold, no way to earn gold or gain new cards, no controller support, and summoning cards was only in the testing phase. I started to accept that there was no way I could make the game's features to be in the state the MVP I had outlined would need before the jam's submission end.
Landon made more progress on the monster assets and had made it to nearly the halfway point of our card count (likely over halfway done given some cards weren't monsters). With 7/16 cards modelled, rigged and animated he had a fair few ready to use and started sending the exported files for me to bring into the game. He also took me up on my offer from a few days prior to help offload work on his end given we had little time left before things ended. I agreed to help when I could but with my previously mentioned problems I started to feel the pressure. I don't have much more experience than him making 3D assets and have no experience with importing them into Godot which at this point I was just hoping would be quick to do. Neither of us had made environment or prop assets outside of geometric placeholders so we also had that to be concerned with.
Throughout this Max had actually finished all 16 cards' art and was now doing some tweaks to a few of them. Along the way he was uploading each card he'd do at a pretty steady rate of about 2 per day. Up to this point he didn't seem to have ran into problems and even agreed to make art for the backside of the cards to use. With the other aspects of the project not being able to keep pace with the MVP, he was able to reach the finish line with time to spare.
When the church bell tolled
The last day finally arrived and with it the need to ensure we have something to submit. Over the past few days I made a little more progress on refactoring the monster AI to account for flying type monsters and to get them to do targeting better. As it stood if they got attacked from out of line of sight they wouldn't chase their attacker. They also wouldn't change target if they were actively chasing something while being attacked by another entity even while the attacker is in range, so their survival instincts were very lacking and easily kited by the player while their summon killed it. However I was unable to put time aside for creating any 3D assets and was now quickly trying to get the ones Landon provided into the game. I had set aside the entire last day to get Landon and Max's work into the game, and even if I couldn't get it all fully working I was intending to at least have the fruits of their labor on display. However I ran into trouble that quickly ate up those precious remaining hours.
Right away I notice that Landon had exported the animations individually rather than as multiple NLA tracks in a single .glb file. I didn't think this would be an issue but it did take me a few hours to figure out how to get the animations consolidated into one AnimationPlayer per monster. I kept having issues where saving animations to disk separate from the imported .glb file weren't able to be loaded together on a single instance of that monster (Godot threw an error each time I tried to load it in). Saving them as a new library resource in Godot also didn't work but funnily enough I saw there was a "Copy animation to clipboard" button and found that simply copy-pasting the animation from the other monster imports into a single instance of that monster's AnimationPlayer worked. Not sure if this was the intended method but I'll certainly be looking more into this in future projects.
Next I saw that there were multiple rigs on each monster's .glb file. Looking into it there was both the metarig and control rig that were exported out. Since neither were a game-ready rig it meant there were a lot of extra bones not doing anything. I realized this wouldn't cause any real issues so after toggling the metarig to skip import at this point I decided to move on. I then saw that the Skeleton monster had its sword and shield floating off to the side. While they moved when animating they were clearly misplaced ("Set Inverse" in Blender not set?). I ended up creating a new scene instance which would allow me to adjust the bones for both the sword and shield to put them in a correct-ish place. This was actually something I knew I could do thanks to a random video I saw on Godot a while back and I was happy to put it into action.
Finally came the issue that sunk the rest of my usable time. Adding the new assets to their respective monster scenes became more complicated than I had thought. After creating an instance of their imported assets into their scenes I then had to setup animations and events to fire off with them. I also needed to add my custom animation to each monster where when summoned they'd start off really small and quickly scale up to size. Still being new to Godot it took me a little too long to come to the conclusion that I needed to create a new script with signals attached to each monster's asset instance to handle animation.
By that point I had already spent the last few hours trying to shoehorn it into my already existing setup and swap out my placeholder models. Simply put I don't think that was the right call. Instead I'd either need to change the imported asset's root type to be what I need (basically CharacterBody3D for my case) and build my logic in it's inherited scene or have a script on that inherited scene that handles the animations with signals to communicate with my existing scene of which the asset's inherited scene has an instance inside of. I was running into issues changing the root type of the imported .glb file (it wouldn't switch from Node3D to CharacterBody3D) when realizing I'm down to the wire with merely 10 minutes before submissions are closed.
With all the experimenting with the monster asset setup it was in no state to build and submit my current progress. Thankfully I had made a couple builds that I tested as I worked these past two weeks and had one that was working about six says prior. So using the last few minutes I quickly made an Itch.io page for the game, made a cover image, uploaded that build and submitted it to the jam with a mere 24 seconds to spare before submissions closed.
Phew! So now that the game's submitted for review I'm left to reflect on these past two weeks. It went by pretty quick and aside from wishing I was able to get Landon and Max's work into the final build for review there isn't much more I could regret. I think we did a good job as a whole and achieved my personal goal of getting to learn Godot more. That said there were definitely some ups and downs and I think a short list format is best to showcase them given I've already laid out the timeline of major events.
What went wrong
- Initial MVP scope was too large. Simply too much to reasonably do for a group with two members new to their toolset in this timeframe. Even though I scaled back the original scope during the design phase to only have 16 cards, in reality an MVP should have only had like 5 of them to adequately showcase the concept.
- Animation resources needed to be made per card was too much. I had scoped it out to have five animations per monster (two of which are handled in the game engine) but I should have scaled down further given Landon was new to everything. Maybe changing the game's theme to make the monsters be like tabletop miniatures which move as one solid piece. This would have cut down development time and maybe given it a unique look as the assets would be statically posed.
- Spent too much time on monster AI modularity and edge-cases. Monsters could have simply been really dumb and that would have been fine. Their designs could have been uniform to where only stats would change to affect how tanky or damaging they could be. Basically I should have started them off really dumb and simple and only after the MVP was functioning would I make them more reactive.
- Spent too little time on actual levels and player gameplay. Even if I got Landon's characters into the build submitted, the actual gameplay was severely lacking and should have taken a more prominent role in development.
- Not enough time set aside for technical hurdles to be overcome. There were 3-4 instances on my end while programming where I hit a snag for a few days that bogged down development. I'd also walk away from the project for hours at a time. If I had managed my time better and scoped the project properly to account for these snags more may have been completed.
- Lack of testing out monster exports from Blender to Godot before it was too late. While I did give Landon and Max some specs they'd need for the final product, I never worked with Landon to test out one of his monsters in Godot itself before he exported the rest. It would have given him more feedback on results and may have cut down on those final few days of problems. I'm new to the importing workflow too so this would have been a valuable use of time.
- No audio/music. My intention starting out was to add sounds and music using free resources at the end while polishing things, however we never got to that point.
- Didn't build and test those builds as often as I should have. It would have made more progress show on the final submittal and have maybe given more motivation to the team.
- Landon and maybe even me to an extent suffered some burnout in the middle of development. For me I'd say it was just the usual of the brain trying to avoid things that are challenging. Landon was going through his burnout and thankfully talked through it with Max as they were already friends. He let me know on the last day how he felt and I wished I could have helped him more.
What went right
- Player controller was usable quickly. While I hit a short snag on the orbit camera, the end result was something somewhat close to how I expected the final controls to feel.
- Card art was made with literally zero issues. Max really pulled through until the end and I wish his work was in the submitted version.
- Several monsters were made and in a usable state. Landon really did a good job learning his role and ultimately had half of them made.
- The initial design process was pretty quick and was useful in making the functionality of the game.
- Having builds made to showcase progress to the team as I worked ended up saving our ability to submit. It's not fully current but at least it runs.
- Coordination between the three of us was pretty good. There were a few times when I was troubleshooting and they chimed in with something that seemed obvious after the fact but my mind wasn't in the right space to think of it. Before Max joined the team, Landon suggested that if nobody becomes the card artist that we could simply render the 3d models as card sprites and maybe set a filter over them which was a solid suggestion if it was just the two of us.
- Creating the game's Itch.io page and submission to the jam were a breeze. I had already done this a few times before so I was already familiar with the process but the fact that I got it all done in under 10 minutes shows how easy it can be. Hardest part was not having my heart jump out with the final time of 24 seconds when submitting.
Final thoughts
Moving forward we will continue to work on this game to flesh out the remaining features. Landon and I agreed to get it to a playable state and I want to get their work fully in the game. The scope may have been too big for me to handle in two weeks given I wasn't dedicating enough time each day to it. I'll continue to improve on my time management as well as better scoping for future jams. Overall I had a lot of fun with this project and was really glad I decided to do it as a team. It helped keep me motivated and see how other people work. The other two also seemed to enjoy themselves even with the pressure Landon was facing, and I believe he was able to further learn his toolset.
Thanks for reading this far, and if the game concept is interesting to you come check it out later when we've got it in a more fleshed out and stable state!
Get Eldritch Rise of the Monstrous
Eldritch Rise of the Monstrous
A Real-Time Card-Based 3D Action Role-Playing Game. Use cards to summon monsters, transform, and do battle.
Status | Released |
Author | Ninjaboi8175 |
Genre | Adventure |
More posts
- Quick hotfix for launch issue15 days ago
Leave a comment
Log in with itch.io to leave a comment.