ladybenko

LD36

Post-mortem of “The Language of the Gods”

Hi all!

I wrote a post-mortem for my game The Language of the Gods, and I’m publishing it here as well. I hope you like it, and please play my game and tell me what you think! :)

> Play The Language of the Gods <

Log

Saturday

I woke up at 7AM to see the jam’s theme, “Ancient tech”, and went outside for a long walk to feel refreshed and let my mind wander a bit. Then I headed to a café to have breakfast and do some brainstorming. I really love doing mind maps for jams, it really helps me in finding out ramifications of the theme.

Photo of mind map

And then I had an idea I really, really loved. It was a story-driven game with the plot involving an explorer in an deserted alien planet trying to figure out how to get back home and discover the secrets of the now long lost alien civilization. Topics would include Good & Evil, the nature of reality, personhood, etc.

And to deliver all of this, I envisioned a kind of atmospheric game, with lots of exploring, some puzzles and opportunities to chill out while you go unfolding the story.

Still at the café, I doodled some concept art:

Concept art

Problem with this idea? Way huge for the scope of a game jam. But I wanted to make something with this idea, so I considered two choices:

  • Make a Twine game and focus on the story.
  • Make a vignette that captures the atmosphere I wanted.

I was reluctant to opt for Twine because I had never used it before. So I chose to make a vignette as a proof of concept and see whether people would like that kind of game or not.

As you know from previous post-mortems, I like to spend the first day of Ludum Dare coding, and leave art for Sunday. However, when I opened Pyxel Edit to draw some placeholder art, I couldn’t stop myself and I ended up drawing a pixel art version of the sketch I made at the café.

Pyxel Edit in action

For the curious, I used the Dawnbringer’s 32 colour palette, that comes as a preset for Pyxel Edit –having a reduced colour palette helps me a lot in drawing pixel art. And then I found out this app could export a PNG with all the tiles (a tilesheet), as well as a tile map in JSON.

So, TL;DR: no placeholder art this time.

There was a problem, though: Pyxel Edit tile map’s exported files were huge. Even after minifying, they were still heavy. So I added a task to my Gulpfile to manipulate this JSON and only include the information that I needed. The result? Going from more than 500KB to 8KB, something more reasonable for a map!

After lunch I resumed programming and had a bit of trouble trying to import the data. My first strategy was to mimic Tiled’s file format, since Phaser could directly import that. However, the map was not being loaded properly, so I gave up and imported the data into a Phaser.Tilemap myself. Once I had the map rendering, I included the main character and some passing clouds as decoration.

Since story was important, I decided that the next thing I should do were to display text. I drew a tiny font, using PICO-8 font measurements (3×5 pixels per character). And then implemented rendering of text of up to three lines.

Now that I think of it, I did quite a lot of stuff on Saturday, but at that time I went to bed with the feeling that it was not much, since there were many more things I would have wanted to do.

Progress before bed time

Sunday

I woke up on Sunday and did the same as the day before: going out for a walk to get fresh air and clear my mind.

I was worried about gameplay. “Will my game be fun if it’s just an story?”, “If so, should have just made a Twine game?”, “Maybe I should make big levels and allow for exploration”, “Maybe I could add some puzzles to it”.

I started to code events –so I could implement a story– and refine the text display.

A more advanced display

After that, I needed to include some puzzles. I knew that in the grand scheme of the game the game’s beginning mistery would have to do with music, so the simplest puzzle I could come with was Simon.

Once the mini-game was created, I implemented the artifacts that would launch the puzzle when being interacted with.

Artifact animation

And then this made the first playable version of the game! I uploaded it and added a message once the puzzle was solved asking for encouragement and feedback! I really needed some cheering up –and it worked, by the way!

First playable version

It was already the evening, and I still had a lot to do. It reminded me a lot of once of my previous Ludums, where I overscoped and I submitted a really rough entry. But somehow I managed to keep my cool and not panic much. It was obvious that I wouldn’t have time to do a lot (or big) levels, so I decided to cut that part without too much drama from my part.

I went to draw some simple animations for the main character and got hooked into Pyxel Edit again, and ended up doing more frames that I wanted to!

Idle animation

Walking animation

Animations in game

It was getting late and I still hadn’t a story in place, so I coded bits of the story in that single level. I made a mistake and I should have hardcoded the whole thing, but I wrote some kind of semi-generic system instead.

Lastly, I drew another level, this one featuring another type of object that was not an artifact: a crashed spaceship, that will add a bit of info to the story. This level also acts a bit like a tutorial, showing the player tooltips about how to move and how to interact with objects. This has been the first time I included an in-game tutorial in a Ludum Dare and I think it worked wonders: nobody asked me how to play the game.

Tutorial level

After that it was about 11PM and I still needed to compose some background music! The game already had some sound effects, so gameplay-wise it was OK, but music adds a lot to the atmosphere and mood and that was one of the aspects I wanted to try out and get feedback about!

I used Audiotool for music. I’m still not proficient with it, but I had learned enough so I could comfortable remix some samples and even play a melody with a custom-made sound from a synth.

After integrating the music into the game, I just needed to create a title screen and run a few walk-troughs to make sure everything was OK. I ended up submitting my entry at 1AM, despite I was aiming for midnight, as usual. However, it felt amazing to finish and have something playable!

Title screen

What went wrong

  • I chose to do the maps (not the actual drawing of art, but the building of the levels) with Pyxel Edit, instead of Tiled. This caused a delay because I then needed to minify them and write custom import code for Phaser, instead of relying of Tiled, which is the preferred format for Phaser and just works out of the box.
  • Overscope. I knew from the beginning that my game was too big and that I would have to settle for a tiny fraction of it, but I was having some bad feelings on Saturday night about me not having made enough progress (this is The Wall, and I have talked about it before).
  • I was not strict in terms of meal times –I was so in the zone that I would forget to eat–, and it made my stomach quite upset.
  • I ended the jam after midnight, and then I was so alert that I had a rough night afterwards. Other jams that I finished before midnight I was able to sleep as usual.

What went well

  • I did not give up! And I think this is my best entry for a jam ever. Although I will always have a soft spot for Metal vs Hipsters, I think that this entry is more solid and polished.
  • Pyxel Edit was easy to use and a bargain for its price and features. I will keep this app as my go-to pixel art software. Bye, bye, Asesprite and Pixen!
  • I was able to manage overscope. I think the resulting game is extremely short, but it definitely can be considered a proof of concept. I think that the game captures the atmosphere that I had in my mind and the mood I wanted to convey.
  • I got a lot of good feedback and encouragement on Twitter! This helped me to overcome The Wall on Saturday night and not give up.

Tools

Code:

  • JavaScript as a language.
  • Phaser as a game framework/library.
  • Atom with vim key bindings as text editor.
  • My gamejam generator to create the initial project template and automation tasks.
  • Gulp as a build/tasks system.
  • Github and Git for version control and online backup.

Audio and graphics:

  • Pyxel Edit for pixel art and level building.
  • Bxfr to generate sound effects.
  • Audiotool to arrange the background music.

Misc:

  • A sketchbook for brainstorming and concept art.
  • Twitter to post WIP screenshots / GIF’s and get feedback.

Tags: post-mortem

LD 38

Terrartisan (end of day 1)

Finished for the day! The game will be a puzzle day based on terraforming little planets. I'm well behind of schedule, but I'm heading to sleep nevertheless.

https://video.twimg.com/tweet_video/C-CuwUAWAAAjsBO.mp4

Let's see what I can come up with tomorrow…

Terrartisan (finished!)

Yaaaay! I'm done! https://ldjam.com/events/ludum-dare/38/terrartisan

finished.png

Tomorrow I'll post details, now I need to sleep :)

Terrartisan post-mortem (part I: development log)

Hi, this is part I of the post-mortem of my game for the compo: Terrartisan. This first part includes the development log over the weekend, with WIP screenshots of the whole process.

I hope you like the read, and if you could rate the game and provide feedback, I'd highly appreciate it!

  • Link to the game page: https://ldjam.com/events/ludum-dare/38/terrartisan

Saturday

I woke up early (around 7 AM) to see the theme: "A small world". I went outside for a walk and also to have breakfast in a café –since I was going to spend most of the weekend indoors.

I like to do mind maps for brainstorming. Here's a section of it while I has having a delicious sandwich:

Mind map

In these mind maps I usually note down concepts, as long as movies, other games, genres, etc. related to the theme. I decided to go for a terraforming game, in which you will control a planet and let biomes evolve. I envisioned this as a tiny, cute world inside a glass ball.

Right before lunch I started to make some placeholder art in Pyxel Edit –my go-to software in pixel art.

placeholder_tiles.png

After lunch, coding started. I made a list of features I needed to implement, separated in "core" and "nice to have". My initial core features were:

  • Place terrain blocks in the world
  • Terrain palette UI
  • Constraints to place blocks in the world (i.e. no flying water blocks)
  • Evolving blocks depending on their surroundings
  • In-game tutorial

The first thing I made was placing terrain blocks in the world. Afterwards, I implemented the basics for biome evolution: water would turn desert blocks into fertile soil.

basicembiome/emevolution.gif

The UI felt weird without some kind of feedback, so I generated sound sound effects quickly with bfxr.

Once I had that in place, I deployed the game online and posted the URL on Twitter for people to play, which was fantastic because I could start to see the worlds they were making! For instance:

ugc01.png

I continued to add and tweak biome evolution rules, as well as lot of bug fixing –people in Twitter were kind enough to point out odd behaviors and bugs.

Once thing I noticed is that absolutely no one asked me how to play with the game in its current state (no indications from me, no instructions on screen… nothing), so I began to think of maybe dropping the in-game tutorial since it was time to go to bed already and I was way behind schedule.

Sunday

I managed to get around 7 hours of sleep and did the same as the first day of the jam: go outside for a walk and breakfast. This Sunday was a special day –and not only because Barcelona was playing against Real Madrid that evening!– because April 23 it's Sant Jordi (St. George) day, which is celebrated in Catalonia by gifting books and roses to your friends and loved ones.

My original plan was to take advantage of the cafeteria to do some level design with pen and paper, but decided to drop it and walk through my neighborhood instead: there were multiple people outside, and the streets were full of books and roses stands.

This meant I got home late in the morning and no level design or whatsoever, and still lots of coding left to do.

I continued by adding global stats to the world (so, for instance, humid worlds could hold more plant forms). I also created a new biome –forests!- and tweaked the UI a bit. Here you can see how I dropped the whole right area and made the canvas a square:

tweaked_ui.png

In the meantime, people kept sending me their creations over Twitter:

ugc02.png

At that point I had a toy, not a game: something people could play with and have fun, but there was no goal in place. I decided to create some simple goal system for levels: player would need to get at least a certain amount of some blocks in order to complete that level. I also created two modal dialogs: one for displaying a "you won" message, and another one to show which were the goals for the level:

victory_modal.gif

It was 17 PM already and I still had no proper art and no music. People were finding the game cute already, even though the terrain blocks were looking very rough and the whole background was empty… But the game was playable indeed, so I didn't worry much about it: I could always leave in place that placeholder art! (which I ended up doing).

I had one level in place, but I wanted to preserve the "free-form build" mode that people loved. I made a title screen in which players would be able to choose between those two game modes:

title_screen.png

Afterwards, I realised that for some levels that I had in mind it would be convenient if players had a way to remove a terrain block. So I added a "remove" button to the UI. To make levels challenging, I put a cap into how many blocks of a particular type the player would be able to use in a particular level. The new UI looked like this:

ui_palette.png

9 PM and… yes, still no decent art and still no background music. It was a terrible time to do music because the game (Barcelona vs R. Madrid) was about to start and I couldn't listen to the radio and make music simultaneously. But waiting for the game to end was out of the question.

And then a small chain of bad things happened. I wanted to try a new set up for music in game jams: Pocket Operators with an audio interface. I had already tested it with one pocket operator, but not with two of then chained… and I couldn't make it work.

After almost half an hour I gave up and decided to switch to a more familiar environment for audio: Audiotool, an online DAW. And again, after half an hour with it, their servers went down and I couldn't keep on working. I lost a full hour with this! I settled to make music with Garage Band instead. It took me around another hour (I actually finished it when my whole neighborhood was choiring Leo Messi's name). I was not very happy with the song, but it was better to use that track as background music that not playing anything at all:

Listen at SoundCloud: https://soundcloud.com/ladybenko/terrartisan-bgm

I was tempted to leave the game at that state and submit, but I went for a bit of polishing: I implemented a reset level button (with a flashing warning that would appear after the player has run out of terrain blocks) and added some more levels –making a total of five of them.

One cool thing about the levels is that they serve as a tutorial, since you have a limited palette of blocks to use and you are asked different types of blocks on each one, which makes the player to learn one rule for biome evolution at a time!

It was midnight, and I decided that I would add some passing clouds, as in my previous games. I thought it would provide a bit of eye candy and much-needed movement, since this game had no animations.

clouds.png

After that, time to upload the game to itch.io and make the submission at the Ludum Dare's website. 1:30 AM, mission completed!

Terrartisan post-mortem (part II: lessons learned and tools)

This is part II of the post-mortem for my LD38 entry, Terrartisan.

  • Read post-mortem part I (development log): https://ldjam.com/events/ludum-dare/38/terrartisan/terrartisan-post-mortem-part-i-development-log
  • Link to the game (pls rate & review!): https://ldjam.com/events/ludum-dare/38/terrartisan

clouds.png

What went wrong

  • My initial idea had an scope that was way too large. Yes, I managed to submit something, but at the beginning I wanted to have cute graphics, some sand worms poppping out from desert blocks, maybe dinosaurs…
  • I hadn't fully tested my desired setup for audio, with two Pocket Operators connected to my audio interface. I ended up having to improvise and wasting time.
  • Audiotool went down. This was the first time that it happened during a jam, but I definitely don't wish to go through that again. I need to learn a DAW app I can run locally for the next jam.
  • I didn't meal prep for the jam, since I had work long hours during the week. While my snacks were healthy (raw nuts, gazpacho, yoghourt) I ordered take out, which is not the best food to keep my energy levels in check.
  • I missed an epic Barça victory with a goal in the last minute :_(

What went well

  • I managed to cut features and compromise to have something that was playable and fun. I couldn't stop thinking on Ludum Dare #31, for which I also made a simulation game (way overscoped) and ended up with a very rough entry.
  • I didn't panic and made bad decisions when I was getting behind of schedule. I think I have gotten very good at this in game jams.
  • I had amazing support and encouragement over Twitter. It was very motivating to see the worlds people were creating!
  • Although feature-wise this game was over scope, it allowed me to sacrifice a lot in art. This game can work with programmer's art (squares with solid colors) and people can still find it cute. This bought me time to work more on features and bug fixing.

Tools and apps

Here is a list of tools I have used to make this game.

Code:

  • JavaScript as a programming language
  • Phaser as the game framework
  • Git and Github for version control and backup
  • Github Pages to publish the game online while it was in progress
  • Gulp as a task manager
  • My generator-gamejam to create the initial project template

Art and audio:

  • Pyxel Edit to make the art
  • Garage Band to compose music
  • bfxr to generate sound effects

Misc:

  • Bear to manage my TODO list
  • GIF Brewery to make screen recordings to put them on Twitter
  • Pen and paper

Note that since I went for very crude art, I didn't need to use my Wacom tablet to draw.

LD 40

GrooOW! post-mortem (dev log + lessons learned + tools)

This is the post mortem for my LD40 entry: grooOW! Here I'll be sharing what I learned, the tools I've used to make the game, and my dev log. This log shows the step-by-step process I used, with screenshots. I love to read these, if you wrote one, please let me know in the comments –I'd love to check it out :)

As always, I participated in the "compo" category of Ludum Dare. This is the classic category, in which the goal was to make a game solo, in 48 hours, creating everything (source code, art assets, music and sound effects, etc.) from scratch, around a theme that was announced at the start of the jam: "The more you have, the worse it is".

Screen Shot 2017-12-04 at 00.20.12.png

Please consider playing and rating my game! https://ldjam.com/events/ludum-dare/40/grooow

Log

Saturday

My energy levels have been really low these weeks, and this affected my performance in the jam. Nevertheless, I decided to participate anyway, specially since I missed the previous edition in August because I was sick then.

My intention was to wake up early, but I slept in until 8:30 AM. I immediately went online to see the theme: "The more you have, the worst it is". After showering, I went outside to have a walk and brainstorm potential ideas. But it was freezing cold! I got inside a café and had breakfast there. I wasn't having many ideas, which was frustrating.

After breakfast, I headed back home and kept on thinking there, this time in a more structured way, doing a mind map. This was more fruitful, and around 12:30 I settled for an idea.

708E52F0-BE12-4FFD-ACA2-CB7BED17EB1F.png

I decided to make a platformer game in which you would have to pick up some items to advance to the next level, with a twist: every item picked up gets you bigger and heavier, making it more difficult to move, jump and avoid enemies.

I had lunch then, and then selected a colour palette for the game. I used a tool that allowed me to lock a colour I liked and then randomise the palette again preserving that colour. I went for this one, which features sand, purple and fuchsia:

Screen Shot 2017-12-06 at 18.05.36.png

Then, coding time! Instead of generating placeholder PNG's, I had Phaser to generate the image data dynamically, since I didn't know which size the platforms would finally be –usually this is solved by using tile maps, but since I wasn't planning to do any scrolling, I figured I could get away with just using sprites to represent the world instead of tiles.

I first coded the core mechanic: move and jump to pick up items, and have the main character get bigger and heavier.

main-mechanic.gif

Then I added a basic enemy, which just walks over the platforms and turns around when it gets to an edge. And I implemented a "Reload" button which lets you restart the level if you get stuck –i.e. you picked up too many items in the wrong order and now you're to heavy to reach a platform that holds more items.

enemy-walker.gif

I used a 8-bit sound effects generator to make some basic sounds to provide feedback for jumping and picking up items. This is crucial to playability, and since I was posting updates on Twitter with the URL of the game for people to play, I didn't want to leave it for later.

Sunday

I didn't wake up early on Sunday either, and I didn't make all the progress I hoped on Saturday, so I started to considerate the idea on keeping the art abstract, with just simple figures, so I could spend more time coding and doing level design.

To make it look a bit nicer, and not just "programmer's art", I decided to add a bit of polish by adding some animation to the main character: a "squash" when it lands on the ground. I believe this makes a big difference in the look & feel of the game!

squash.gif

I also made a simple animation for death.

death.gif

I didn't want to leave all the level design work to the very end, so I implemented a level loader from JSON files. To test it, I created what later would be the first level of the tutorial, that teaches the player how to move, jump and advance to the next level. I also added some UI that shows how many dots the player already picked up.

Screen Shot 2017-12-03 at 17.22.05.png

The evening arrived, and my TODO list still had lots of things very much not done. I reduced the scope: definitely not doing any sprite work this jam, and I reduced the amount of enemies and levels in the game. I really wanted to make cannons that fire laser beams, but a flying ghost was way quicker to implement… so hello floating, semi-transparent, purple circle.

ghost.gif

Then I built all the levels that would serve as tutorial. I implemented some tooltips to give indications to the player. They are not very flashy, and could have used a bit of animation, but…

Screen Shot 2017-12-03 at 20.56.36.png

I had dinner, and afterwards switched to do some music. I used an app I downloaded the day before (Bosca Ceoil) the jam because a lot of people recommended it for its simplicity. I can not agree more. After following the short, in-app tour, I was able to create my own music track!

Then more game design work and bug fixing. I finished at ~1AM, which is a bit later than usual –I aim to get to bed at midnight in game jams–, but since this week I'm on holidays, I could allow myself to get up late on Monday.

Screen Shot 2017-12-04 at 00.20.35.png

And victory! I'm really happy I was able to submit after all. And despite the lack of "art", people seem to be loving the game. It has received praised on the core game mechanic, as well as level design. It always feels great to see people playing your game and asking for more levels! :)

Lessons

What went well

  • I was able to submit!
  • Being able to get away with not having "real" artwork. I think the key to this was having a colour palette from the start –instead of relying on a black background and #ff0000 or #00ff00 for the sprites and platforms–, and adding some animations with tweens.
  • The music app was really easy to use and I could make a track without too much hassle.
  • I did not panic. I gave myself permission to not to work way too hard during the jam, so instead of being stressed for not being on scheduled, I cut down the scope and moved on.

What went wrong

  • There is a physics bug in the game, due to the way Phaser handles its physics engine. This can cause some problems in slower machines / browsers. Fixing it would require quite a lot of work, so I decided to let it go, since most folks were telling me they were able to play normally.
  • Not much energy, which led to low productivity. Maybe I should have started with a smaller scope so I had more time to do proper art.
  • I didn't meal prep in advance. I ate super healthy on Saturday, but did not so well on Sunday.

Tools

Filtering HTML5 games?

Hi, is there a way to browse only HTML5 games? I'm trying to play and rate/give feedback other games, but the current way of browsing is super painful. Only a few games per page, click on one, and it's only available for Windows or something like that… :( It's taking ages, and it's frustrating.

A few editions ago I used a 3rd party website with a HTML5-only filter, and although it was not very accurate, the experience was better. Is this still working for this edition? What's the URL? Thaaaanks :)

My best ranking so far! 13th in Overall

…and 5th in Fun, and 4th in Theme! I'm very happy :) LD38 had been my best entry so far, with 90th in Overall and I was extremly happy I got into the Top 100… Now LD40, my game got even better results! I have no words, thanks a lot! :D

Screen Shot 2017-12-29 at 12.29.35.png

My entry is grooOW!, a mix between a platformer and a puzzle game. It's made with JavaScript and you can play it in your browser:

Screenshot

Ludum Dare 48

Exiled: Dev log

I missed the last 3 editions of Ludum Dare, so it was good to be back for the LD48 compo! The game I ended up submitting diverged a lot from my initial idea, but nevertheless I'm happy I was able to finish it and add it a bit of polish as well.

You can see the entry here https://ldjam.com/events/ludum-dare/48/exiled You just need a web browser and a keyboard to play it, and I hope you enjoy the little story that this game presents.

cover_ludum.png

Saturday

I woke up at 7:30 AM and saw the theme: “Deeper and deeper”. I had a short workout at home (thanks, RingFit Adventure), and then brainstormed some ideas while having a coffee. For this, I like to do mind maps:

brainstorming.png

I was unsure of what to make out of it, so I went for a walk, and then did some house chores while still thinking on which kind of game I’d be making. At lunchtime, I settled down for a Diablo-like game about a dark elf having to return to his home in the Underground after having been cast out. I quickly drew a mockup of how I wanted it to look like.

mockup.png

On game jams, I usually like to spend Saturdays coding and leave Sundays for art, music and level design. However, this time I got “trapped” into doing 1-bit retro pixel art —a poor decision in retrospective, but I was having fun!

draft.png

And quickly after that, I re-designed the main character to make it cuter and have black skin (like the dark elves from Forgotten Realms).

main_character.png

I loved how it turned out. I posted it on Twitter and people really liked the character as well.

I implemented rendering a level based on tiles, and also the character with basic movement. At this stage I decided not to follow Diablo’s controls with mouse, and rely on arrow keys or d-pad, like Zelda.

rendering_level.png

I called it a day, and went to bed at a reasonable time.

Sunday

I was behind schedule in any way possible, so drastic measures had to be taken: I dropped combat mechanics and introduced dialogues instead, so I could tell a story while the character was travelling down the different levels.

And I hit a wall with this because I still don’t fully understand how Godot handles UI, and it turns out that implementing a box that will expand and shrink depending on the length of the text is not trivial.

balloon.png

In the end I managed to implement it, but I wasted a lot of time doing it. I could just have drawn boxes with three or four sizes and just picked one depending on text length. It would not have been perfect, but it would have been much quicker.

It was getting late, and I realised I still didn’t have a title screen or an end screen, so I made those two. I used the title screen to display a short tutorial, and I re-used the main character and my new shiny dialogue bubbles to achieve that.

tutorial.png

SPOILER ALERT: You may want to play the game before you continue reading!

I only had a few hours left, so I quickly decided the story: the elf couldn’t win. He had been banished forever by some cruel gods, and he would be forever stuck in a loop trying to get home in vain. To reinforce this idea of looping, I made the player to go through the same levels a few time before displaying the “end” screen, and the main character would say something before going downstairs to switch to the new level.

And to make the levels a bit more interesting, I decided to introduce doors and keys, so the player would need to explore the level a bit before finishing it.

Once everything was in place, I added some retro sound effects I generated, and also quickly composed something in Garage Band as the soundtrack. I wanted something repetitive, that felt like endless work.

And I was done! The game turned out like nothing I thought in the beginning, but I’m happy I could submit something that felt complete somehow.

Exiled: Lessons learned and tools I used

Hi! This is the second part of the post-mortem for Exiled, my entry for LD48. It's a narrative-based exploration game with retro graphics, and I hope you enjoy it.

closeup_ludum.png

Lessons learned

You can check out the full dev log to get a gist of what actually happened while developing the game, but the TL;DR version is: my initial idea was to make a Diablo demake, and it ended up being like a Zelda without combat. However I added a bit of narrative to it, and that kind of saved the entry and made it a "full" game.

What went well

  • I did submit something somewhat finished, even though the game ended up being something different to what I had in mind at the beginning of the jam.
  • It was my first time making 1-bit pixel art and it turned out relatively well (keep in mind that I'm a programmer!).
  • I made a cute, charismatic character.
  • Godot made exporting to HTML5 a breeze and I didn't encounter any issues with it. It also made rendering a multiple-layer tilemap really easy and creating levels was super fast.

What went wrong

  • I overslept and had a very slow morning on Sunday and I cost me a bunch of hours. I also watched FCBarcelona game in the afternoon, and I lost another two extra hours in there. I could have used that time to wrap the ending in a better way, or design more levels or more tiles, or add a Credits screen…

  • I spent too many hours in the comic-like text balloon for dialogues. It turns out UI in Godot is not easy or intuitive and my ego got in the way, so instead of hacking my way out of it or hardcoding the graphics for dialogues I wasted time making it "right".

  • Since I made most of the art assets before coding, I ended up with graphics I didn't have time to include, like a walking animation or a sword.

Tools I used


Thanks for reading this! If you are curious about the game, I'd appreciate it a lot if you play it and leave a comment. And if you made a game for LD48 and it's playable on a Mac or a browser, let me know and I'll play & rate it.

Ludum Dare 55

Dev log of Diablillos in GIFs

This is some kind of development log for Diablillos (https://ldjam.com/events/ludum-dare/55/diablillos), my compo entry for Ludum Dare #55.

During the weekend, I took a few notes, recorded gameplay in GIFs and posted on social media, so I'll try to recreate what the development was like.

This has been my first jam after a 3-year hiatus, so I've been quite rusty. However, I'm happy I got to submit a finished game, and I even could squeeze an in-game tutorial.

I used PICO-8 for development, so that meant a 128x128 display size and a 16-color palette.

You can play and rate the game here:

diablillos - title.png

Saturday

I usually like to do a mind map to brainstorm game ideas, but this time I kinda "saw" the game while I was having a walk outdoors. I got back home and drew the thing:

diablillos mockup.png

The main mechanic would be some kind of siege/linear "tower defense" in which you would summon an army of imps and had to defeat your rival's one. My vision was this game to be strategic, but it would end up being arcade-y instead. I'll elaborate on that later.

The first thing I did was to drew an imp (diablillo in Spanish) with a simple 2-frame animation and post it on Twitter to get feedback —I really want the imp to be really cute! People loved it so I didn't change the graphic.

ld55-00 - minion.gif

Then I just changed the color to create enemy imps, and made them fight each other when they got close enough.

ld55-01 - minion fight.gif

After that I drew some towers to serve as "goal points" for the imps to reach. And of course, some juicy screenshake 😎

ld55-03 - tower shake.gif

I went to bed feeling that I didn't achieve much —which was true—, and set a short-term goal to try to have a complete gameplay loop (and possibly upload a playable build) before Sunday lunch.

Sunday

The towers felt kinda wrong for imp summoners, so I revamped them so they felt more… warlock-y. And drew the summoners too! I also coded a button (PICO-8 doesn't have built-in UI primitives) and a "purchase" system to summon imps at will… as long as you can afford it.

ld55-04-necromantic-tower.gif

I didn't get my goal of having the full gameplay loop before lunch, but I carried on nevertheless. In the afternoon, I added some health bars, along with an icon to make them more intuitive. For the icons, I had to draw a smaller version of an already small 8x8 sprite, so that was a bit of a challenge.

ld55-05 - hud bars.gif

And at last, in the evening, I finally achieved the final implementation of the core mechanic. I had to switch the style of games for a more high-pace, arcade feeling (strategic mechanics require more time to balance and playtest). Now instead of planning what to purchase (I originally wanted the player to summon different kinds of creatures), the gameplay revolved around collecting souls (the "coins" to purchase imps) and spawning minions as fast as possible.

ld55-06 - gameplay.gif

It was a bit after 7pm (CEST), I wanted to go to sleep before midnight, and there was a lot of polish to add.

I started by adding a start screen, which was almost identical to the gameplay screen, but with a title, which I drew in gothic characters and added a palette roll effect to it.

ld55-07 - start screen.gif

Then I created the victory and game over screens (which are identical but with the text copy changed), and coded the win and lose conditions.

ld55-08 - victory.gif

It was 11pm and I still had a lot of polish to do. However, I wanted to stick to my goal of not going over midnight, so I had to choose between adding a music track or a tutorial. I opted for the tutorial, since I already included some basic SFX and it wasn't too bad, and the tutorial could explain the mechanic to players.

To implement the tutorial I used different levels, and that code logic was re-usable to make different levels as well. So I put a cap of 5 levels (tutorial included), with increasing difficulty (basically the higher the level, the more imps the enemy can spawn).

ld55-09 - tutorial.gif

And that was a wrap! If you got this far, thanks for reading! :) I hope this post was entertaining or inspiring.