blobo

LD33

Monster Is A Relative Term…

This is my 2nd Ludum dare, and it has been quite a success. I feel like I did a pretty decent job on the art, and I had fun with this! Plus I’ve created the greatest character ever, Some guy who beats on on a little kid all day long, so this has been a good weekend overall.

LD34

The last of the Ninjean Lineage

Have you ever wanted to play a game in which you are a pair of pants, and a ninja? you have now.

my game takes place in the great country of early Japants, where the ninjean lineage was almost finished of by all the other lineages. it’s your job to be a totally cool ninja, and jump from building to building, climb towers, and kill all the other pairs of pants that get in your way.

this game also features…

A Totally cool background!

A Fancy Ancient mode, setting the game to look like a really old movie!

The coolest protagonist you would ever want on a wire coat hanger!

Headband Physics!

Wall Climbing!

And so much more!

Jumping off of some dude's dojo into a tower.

What are you waiting for!

The War of Japants Post Mortem & Post LD

For my third LD, i think it went really well. my 2nd LD game sucked, so i’m really proud of this one.

First things first, what did you guys think of my LD game?

1. “Its really hard”. I’m well aware of the difficulty of my game. i wanted it te be challenging, yet not impossible. the random generation CAN rarely screw you over, but there shouldn’t be any situations in which it was 100% the game’s fualt for your death.

2. “The controls are frustrating”. To be honest, i never thought this at all. During development, i thought having shift as attack was pretty convenient. apparently i’m the only one who thinks that.

3. “The music is great, but repetitive”. I tried making it similar to an arcade game. they usually have repetitive loops, but they are catchy and sound good.

4. “It’s impossible to play this game without a huge, stupid grin”. This was one of my favorite comments. i’m definitely going for humor on this one, and this comment made my day.

Thanks for all the feedback! i’ve fixed some of the errors in my brand new Post LD version of my game! but what all does the post LD version have to offer?

PRESS ENTER TO ATTACK INSTEAD OF LSHIFT

A HIGHSCORE SYSTEM!

MOUNTAINS!

“RIP” CAN NOW BE SEEN INFRONT OF TOWERS!

BELT RANKINGS!

BETTER RANDOM GENERATION!

MORE!

(There were pictures, but imgur kept breaking. sorry about that.)

Check out my game here and enjoy! thanks for a wonderful LD34!

Ludum Dare 51

A Postmortem for 20 Ludum Dares

It was the December of 2014, and a Unicode snowman almost won the theme vote. A friend of mine who has been around since Ludum Dare 25 was showing me a game they created for Ludum Dare 31. At the time I had been wanting to get into game development for a while. I've downloaded Unity and followed some tutorials, so I had a grasp on what I was doing. My friend introduced me to Ludum Dare, and I gave it a go.

Ludum Dare 32

The theme was An Unconventional Weapon. After spending the first day on an idea that I eventually dropped, I came up with a better idea. My weapon shall be planets! With my incredibly limited knowledge of unity, I made an endless survival game about throwing planets into asteroids to prevent asteroids from crashing into the sun. I wrote the music in LittleBigPlanet 2's Midi Sequencer, and all the graphics were just default spheres with some poorly made unity materials.

em_/emLD_32.PNG

Having never completed a game before this, the deadline was incredibly exciting! Before this point I had never made a title screen before, and I know it sounds goofy to say it, but after adding a title screen, it felt like a complete game. I still have incredibly fond memories of showing this game to all my friends, and them all competing for the high score. In the end, I scored 41st in innovation for the compo, and I was hooked.

Ludum Dare 33

I'll keep these short and sweet. Reflecting on my previous Ludum Dare, I was going to need a lot of extra time programming to fix things, so I spent exactly 20 minutes on the art for the entire game. You can imagine how well that turned out.

em_LD/em33.PNG

To avoid giving the main character a walk animation, he has Heely's so he can just slide around. HA!

Ludum Dare 34

At this point, I have moved on from LittleBigPlanet 2's sequencer, and upgraded to LMMS. In hindsight, I should've done that before the jam started. The music I wrote for LD 34 is bar none the worst sound you could ever experience.

strongLD/strong34.PNG

This uninspiring endless runner about being a ninja pair of pants was a disaster, and the comments seemed to reflect it. Despite that, one comment really stood out:

_ThanksGarris.PNG

The joy of reading their first sentence left a huge impact on me. My game sucked, sure, but it was enjoyable in its own stupid absurd way.

Ludum Dare 35 through 37

strongLD/strong35.PNG

This was when I seriously started reflecting on the feedback I was given from the previous games, though it took a little longer to really understand the notes on difficulty. Looking back, it feels like I was trying to beat the players, which is stupid. My Ludum Dare 35 game even says "I didn't really expect anyone to get this far" in the victory screen, just to show how bad that mindset had become.

Ludum Dare 36 wasn't judged due to website maintenance, but I wrote some real good music that jam, and I always wished I could've got a score for that just to see how much I had improved.

strongLD/strong36.PNG

Ludum Dare 37 was the first game I made that got a better score than my first Ludum Dare. 34th in Theme, and 39th in innovation. For "One Room", I made a game about running around a pillar in the center of the room, and behind the shadow the pillar casts, a new procedurally generated room is created. Despite the game doing great in innovation, it had the least memorable main character of any game I have ever made.

strongLD/strong37.PNG

Looking back, I was making too many endless games, and nowadays I'm simply not a fan of the genre.

Ludum Dare 38 through 42

strongLD/strong39.PNG

The current website has arrived! At this point I've decided "I know all there is to know. Now I can screw around and make whatever I come up with". A bold statement. It definitely is the time where I became more ambitious with my LD games. I was no longer getting comments about the games being impossibly difficult, I was now getting comments about the game being impossibly confusing. All around, these games were creative, yet terribly explained. An era where my ideas far exceeded my execution, resulting in some real big messes. In one of the games, as an effort to prevent it from being confusing, there's a "Things you should know before playing" option on the title screen, leading to a stupid-sized wall of text. Great work, buddy.

strongLD/strong40.PNG

So I was starting to understand that my games needed better direction and tutorials, but I wasn't quite figuring out how to do it. On a related note, this is where I started finding my art style. I played around with it a lot in these games, and I really enjoyed cute characters with no outlines.

strongLD/strong41.PNG

Oh- and LD41's "Combine Two Incompatible Genres" is still the best theme I've participated in. Every game that jam was unique and amazing!

Ludum Dare 43 through 45

Okay, yeah. I have really found my art style.

strongLD/strong43.PNG

These are games that I really look back on fondly. I think the game I made for Ludum Dare 43 was my first "Good game". It was actually fun! I made a game where you play as Mary, who had a little lamb, and you throw your lamb at enemies to kill them, Steal their money, and buy more lambs. Its like absurd Pikmin, and has a synth-heavy rendition of Mary Had A Little Lamb playing the whole time, and ah! It's this kind of absurdism that I fell in love with.

strongLD/strong44.PNG

What about a game where you mine for money and spend it all on a bunch of ladders? Sure! Why not? I also learned a lot about mixing audio, and found some more cool synths. My music was starting to get better, and I wanted to show off.

This was also my first game to include a speedrun timer at the end, and wow let me tell you it's the best idea I've had yet. Not only do people enjoy winning games, people enjoy bragging about how fast they beat the game. Why would I ever want to make another endless game ever again? Every time someone posts a screenshot of their speedrun time, I want to give them a hug.

strongLD/strong45.PNG

My first top ten in graphics was my LD45 game, "Ultra Quest". I spent a lot of time on the music as well, trying to incorporate a leitmotif. This game is about going on an adventure, nonsensically killing everything in your path, becoming king, and slaying a dragon. At the end of level one, you start a forest fire, and the fire is visible on the map used for selecting levels. After level two, the fire on the map is bigger. It's one of my favorite visual gags.

Ludum Dare 46

Overconfidence? What's that? Okay yeah so this was the first Ludum Dare I ever submitted where I don't think the game was complete. If Ludum Dare 34 was my first failure, then this was my second. I created a super edgy gardening simulator with turn based combat, dialogue, cutscenes, a unique crafting system, and a final boss. All within 48 hours. And none of it was polished. It didn't even follow the theme! I think maybe two or three people actually beat the game, due to the insane amount of softlocks. That said, I learned my limits.

strongLD/strong46.PNG

It's definitely one of the game's that I don't tend to replay. I usually avoid showing this game to any new friends, ha!

Ludum Dare 47

Second place in Innovation. This game hits different. Ribbon was the game I created for the theme "Stuck in a loop".

strongLD/strong47.PNG

It's my first top 3 score, and in innovation, no less! If Ludum Dare 46 was a complete flop, then Ludum Dare 47 was a complete 180. I had a lot to reflect on from LD46, and I wanted to show that I learned my lesson. The music slaps, the artwork slaps, no softlocks, (it's not unreasonably edgy), and I paced myself. I had plans for more content, but scrapped it so I could polish the main mechanic. The steering mechanic was incredibly buggy until the last hour. It's a lot of math that, looking back, I have honestly no idea how I made work. The end result however, is a game that didn't have a single negative comment, except for wanting more content.

Ludum Dare 48

So how do you follow that up? Well, before Ludum Dare 48, I participated in Discord jam! Outside of game development, I was playing around with the concept of Arbitrary Code Execution in Super Mario Bros. 3, and thought it would be fun to make a game about lining up bytes in the game's memory and "Executing" them.

__DJ4.PNG

Still being in the mood to make a game about memory manipulation, I had an idea for a game where data will get cleared if it's not written to within 3 seconds. For instance, if you are running on a flat floor for 3 seconds, your Y position hasn't been changed, so you snap vertically to a Y position of zero. I called it RAMnesia.

strongLD/strong48.PNG

Something I wanted to focus on was making the music very long. This is a puzzle platformer, and if a player is stuck, you want to avoid repetitive music. It wasn't high-energy, but it was more than a 3 minute loop, and I was proud of it. That being said, the game didn't follow the theme at all, so uh- whoops!

Between this and the next Ludum Dare, I once again participated in Discord Jam, this time coming in first place overall!

strongDJ/strong6.PNG

Ludum Dare 49

I parodied Donkey Kong! I really struggled to come up with an idea during this jam, so it doesn't quite fit the theme, but I enjoyed the concept of dodging barrels while building the scaffolding to reach him yourself. And oh yeah, the music goes hard. It's one of my best original songs, and halfway through I incorporated a NES audio chip emulator and added the iconic donkey kong loop as another instrument. (as well as some 8 bit noise channel for some "snares")

strongLD/strong49.PNG

Ludum Dare 50

My second time scoring second place, this time in Humor. Also 4th overall! At this point I have taken the absurdism of my games to a new height. It's a game about managing a blockbuster video store, but you also need to murder dinosaurs and netflix employees by shooting lasers at them so you can harvest their bones and use them as scaffolding to prevent your video store from sinking into the ground.

strongLD/strong50.PNG

I picked up a bunch of 80s synths, and wrote the most bangin' music for this one. I had over twenty comments compliment my music, and it's no surprise it was the best I had ever done in the Audio category. I mean, it slaps.

Then I participated in Discord Jam again, but whatever.

Ludum Dare 51

With this being my most recent game, I have lots to say.

Once more, 4th Overall!

Reflecting on the success of Ribbon, I wanted to try my hand at another 3D game. Despite having very little experience making them, this game really came together and significantly faster than I expected. I had way too much time for polishing this one, and I used every minute I had to fill this game to the brim with details. Looking at my previous games, I had yet to score a top ten in audio, despite how great I perceive my own music to be. I asked around for some tips, and was suggested to add voice acting. Now, VA is great and all, but why not take it a step further? That's right, baby! I added an acapella track to my Ludum Dare game!

Recording all the layers for the acapella track was the most awkward I've ever felt. It felt cringy and bad, and I was nervously shaking the entire time, wondering if I could've been spending this time to make a better song, ha! Somehow it really came together though! Don't get me wrong, it's a disaster full of flat notes and awkward nervousness, but wow I had fun! And I finally met my goal of Top Ten in Audio!

strongLD/strong51.PNG

I also wanted to go all out on accessibility. My previous game, which scored 4th Overall, didn't even have a volume slider, so this game has one for the music and one for the VA. I have a colorblind friendly mode, and you can enable/disable subtitles for the VA. It also came in 4th, so I must be doing something right.

I was joking with some friends that I'll have to do acapella every single jam now, and in 20 more jams I'll be some sort of acapella master. I probably won't do that, but it's fun to think about.

Closing Thoughts

Oh snap, 20 down. I haven't missed one yet, and I sure don't plan on missing any in the future. It's honestly pretty great looking at the old games compared to where I am now. Especially how much I have grown as an artist and composer. I mean, you can see the screenshots, and with how bad my music was in the first few jams, perhaps it's a good thing I can't share that here, ha! I've certainly done a lot better than I could've ever hoped for, and I'm only planning on getting even better.

Onward to the next 20. It's gonna be a wild ride.

Ludum Dare 52

My 21st Ludum Dare's Postmortem: "The Bountiful"

So anyway, I tried making a psychological horror game and scored first place in humor.

I don't usually post anything to the feed, but I crammed 20 postmortems into a single post last time and I thought I'd keep this train rolling.

As you know, the theme was "Harvest" and recently I've been wanting to flip the theme entirely on its head. Last time, the theme was "Every Ten Seconds" and I knew every game would have an arbitrary ten second timer on it, so my game took place on the face of a clock, where every ten seconds was spatial instead of temporal. When it comes to theme voting, I choose the ones that have a lot of potential for cool twists like that.

Anyway, I came up with absolutely nothing with this theme. In the pursuit of originality, I used an old idea I had for a psychological horror game where you begin the game with purchasing a farm that nothing can grow on. You have no food, and you'll do anything to survive. Luckily there's a crow to guide you, telling you basic tutorial stuff and then eventually telling you to steal, murder, etc.

I present to you, The Bountiful!

WebThumb.png

This was an idea a friend and I came up with a while back, but I never got around to making it. This seemed like the ideal opportunity to make that game. I still had some concept art in a folder, so it seemed like a good place to start:

mockup.png

As the blood would dictate, it was originally going to be a lot darker.

My previous Ludum Dare game, Watch Out, came together in a matter of hours. I pretty much had a playable demo before I went to sleep just a few hours after the theme was announced. All that was left was making levels, voice acting, and an entire day worth of polish. This game did not follow suit, ha! In fact, I very much ran out of time and it caught me by surprise.

What went wrong this time?

I over-scoped. A lot. I tend to polish things as I go, and I spent a bit too much time on the animations.

LD52emRun.gif LD52/emShovel.gif

I usually spend the entire first day (theme announcement through sleep) working on art for the game. In my time zone, that's usually only 3 to 6 hours. With 9 hours going into the artwork at the very beginning, I'm starting to see how I ran out of time to implement everything and still compose music.

I planned to compose 3 tracks for the game. The "serious music", "tutorial music", and "title music". I made the serious music first, and it slaps. As usual, I aim for a 3 minute loop, and this track was 2 minutes, 45 seconds. The tutorial music on the other hand, was made with 20 minutes remaining until submission hour. It's a very short loop, and I'm a bit disappointed with it. Now the title music is it's own story, as I had zero time left. I just recorded myself improvising in front of my microphone, leading to the best title music of the jam. "♫♫ Boom boom boom! It's the title music! Boom-boom-boom, It's the... title music! I raaaaaan out of tiiiiime! ♫♫"

Speaking of recording my voice, I planned for voice acting in this game! Just like the music, I only got around to it in the final hour. It was an absolute mad dash to record everything I had written, balance the audio levels, and implement them in the right places. And I still had to do some of the music after that! (tutorial and title tracks) Ahh! So many recorded lines were cut, and It's devastating. I had one line for when you sleep, planned for the fourth night, where the crow would say "You dreamin' about me? Ah- sorry, I woke you up." Such a good line. I also planned for subtitles, even implementing a "Disable subtitles" option in the pause menu, but didn't have enough time to actually implement them. Oh well.

Okay, but why did I run out of time?

I keep talking about everything I crammed into the final hour, but what happened on Saturday that lead to having no time on Sunday? I find it hilarious that after 20 Ludum Dare's I still can't really tell how much work a project will take. In my mind, all this game needed was a series of objectives, and a way to check if I the player had done them. Easy enough, right? After making the player move around, making the crow follow, incredibly smooth camera movement, the ability to whack things and make them explode, implementing an inventory, pick up items, wiggle the corn in the field, getting caught by your neighbor, shop in the market, kill your neighbor, and plant crops, I finally got started on the daily to-do list in game.

And wow, my approach for the to-do list was rough. I wanted tasks to fade out when completed, and sometimes after obtaining information, a new objective would fade in. (such as stealing food when you learn your garden can't grow anything). Furthermore, there was the challenge of detecting when the player had done the objective, and checking in case they did things out of order, such as killing your neighbor on day one still being completed when it's required around day 4. Anyway, by the end of Saturday I had implemented the fade out and fade in effect, so Sunday was going to be filled with actually checking for completed tasks, and moving on to the next in game day. It also turns out that making around 25 or so objectives takes a lot of time. This can probably be attributed to how poorly implemented in to-do list was, but it's a 48 hour game jam after all.

Reflection

I've made a story-based game about growing plants twice now, and both of those games overscoped and ran out of time. Something tells me the problematic variable isn't the growing plants part. I keep bringing up how my LD51 entry came together insanely fast, and I think it's because the game is entirely storyless. It was a game focused on a single mechanic, (instead of a massive list of mechanics) and it let me explore fun edge cases with this mechanic. I can't honestly say The Bountiful has any mechanics that stand out in a similar way, which is something that I can say about most of my other Ludum Dare games. I think that's why this one feels so awkward to me. I had a story in mind that I wanted to tell, but I completely overlooked how many moving parts were required to tell it. That's where it went wrong.

Wait- wasn't this supposed to be a horror game?

You might be wondering why it was so funny. That's because I have no idea how to make a horror game, and I made it funny. Honestly, even I couldn't take it seriously, so I just added stupid jokes to all the signs around the festival. Then when it came time for dialogue, all seriousness was tossed aside in favor of goofy lines. It was going to be all bloody and violent, but I really didn't want my second story based game about growing plants to become my second edgy story based game about growing plants, so it took a hard 90 degree turn into funnyland.

ld_banner.PNG

Results

Okay, I know I've been beating myself up on how much I ran out of time and how bad that was, but despite that I came in 9th place Overall. My goal was to simply not come in 4th place for a third time in a row, so I'm pleased coming in ninth. That's still a top ten.

The only category I have yet to get a top ten in is Mood. I focused a bit on that category and I got... drumroll... 13th! Which, hey, it's a personal best, and really close. Perhaps next time.

Oh, and First place in humor!!! That's my first gold trophy! I also got also a personal best in Audio at 7th place. All around, I'm satisfied with how my game scored.

Final Thoughts

If you can consider the title music of this game an acapella track, that makes two jams in a row that feature acapella music. I might as well keep that going. It's a lot of fun. As stated in the reflection paragraph, I'm probably going to make my future games focus on a single mechanic and let the story come second. It feels a lot better when you get to play around with a single mechanic, instead of struggling to fit everything in the deadline. Quality over quantity and all that. That's definitely the lesson I'm taking from this jam.

Either that, or the theme was bad.

Ludum Dare 53

My 22nd Ludum Dare's Postmortem: "Inbox Fool"

BEGIN TRANSMISSION!

Oh hey there, Terry! You've come to read my postmortem? Good! This will make up for destroying my floor.

Title_Complete.png

My Ludum Dare 52 game, "The Bountiful" didn't turn out how I had hoped, and in my postmortem I highlighted some of the issues I planned to adress in my future LD games. In summary, during last LD I ran out of time because I focused too much on the story and trying to implement about 16 small mechanics to fit the story. I ended my previous postmortem by saying "I’m probably going to make my future games focus on a single mechanic and let the story come second. It feels a lot better when you get to play around with a single mechanic, instead of struggling to fit everything in the deadline. Quality over quantity and all that." So, what measures did I take to make that happen, and did it work?

Here were the goals I created for this Ludum Dare: * Focus the gameplay on a single unique mechanic. (with a twist at the end.) * Add the story elements afterwards. * Keep the acapella streak going. * Don't run out of time! * Oh no?

Let's talk about each bullet point.

Focus the gameplay on a single unique mechanic

Most of my previous LD games are centered around a single unique mechanic, though I can't say that applies to my LD52 game, which is likely one of the reasons I have mixed feelings about it. I wanted to avoid feeling mixed about this game, so let's break down how I came up with the idea for my LD53 game.

Before the theme was announced, I did some brainstorming with my friends. I recently discovered a method of running arbitrary code execution in Super Mario Bros. :

https://www.youtube.com/watch?v=xoDakIA31jc

so my brain was in the mood for a puzzle game. Thankfully, "Strange machines" or "Leave something behind" didn't win, as the puzzle game I came up with for those themes leaned a bit too hard into RAM manipulation, and was going to be impossible to explain. For the theme "Your health bar is more than just a health bar" my friend Luke, inspired by "Pootis Engage" made the connection between the word "health bar" and the bars forming the screen's aspect ratio. The idea I came up with for gameplay involved taking damage/healing to change the aspect ratio, but you would choose where the black bars go, and that creates floors or move the walls that you can interact with in order to reach new locations in the room you're in. I named it "L+Ratio", which I thought was a funny and clever name for that idea.

Pre_LRatio.PNG

Alas, the theme "Delivery" won, so let's figure out what to do with it.

When I figure out what to do with the theme I try to come up with something nobody else would. See my LD51 game, "Watch Out" for the theme, "Every Ten Seconds". With the theme "Delivery", My friends and I created a short list of the "obvious takes" on the theme. We came up with package/pizza delivery, giving birth, removing livers, A building where you kill things, but all of these sounded too predictable. It's far from my greatest take on a theme, but we thought about "What if we're delivering something the recipient doesn't want? Like Divorce papers or a bomb." With the story of the game partially figured out, we needed to turn this "Bomb delivery" into a game with a unique mechanic. And honestly, I had zero ideas. I dunno, maybe you use the bomb's shockwaves for platforming? It's not very puzzly though.

Then it hit me. I'll just re-use the idea we had for the health bar theme! So the aspect ratio won't be changing, (FORESHADOWING) but moving around a second layer of tiles seemed really cool, and probably a lot more interesting than restricting it to vertical bars. With the mechanic figured out, I got started on the game.

Pre_Idea.PNG

But what about the twist at the end? The story of the game so far is about delivering a bomb to someone, so this game could definitely have a boss fight! A real easy twist is that this boss would use the main mechanic against you! After hitting the boss, the walls get closer (Foreshadowing resolved) and then the walls are moved.

Add the story elements afterwards.

I'll admit I actually started on the story a bit earlier than my "Let the story come second"-plan would guide. I wanted this final boss character to have personality and talk to the main character throughout the game. I came up with the idea to have a TV on the wall of every room, and the boss would use that to give some banter. As soon as the main mechanic was implemented, I started recording some voice lines. I began by implementing the banter for "The world's smallest speaker":

https://www.youtube.com/watch?v=O56r-UO2pFE

Watch out, Spielberg! This game definitely had the most voice lines of my Ludum Dare games so far, and these TV cutscenes needed both visuals and subtitles, which added a lot to the scope. I was immediately aware of the trap I had just put myself in, as I did the same thing last Ludum Dare. But I had the advantage you see, all that was left was making the levels, a boss fight, and then the cutscenes. These levels didn't need 16 smaller features to implement and test and bug fix, so I felt confident I'd be able to make it in the deadline. Hey, wait a second...

Keep the acapella streak going.

For both Ludum Dare 51 and 52, I made an acapella music track in my game. It's goofy, it's absurd, it's unexpected, it makes the game stand out, but it takes forever to make! I immediately knew I'd make the acapella track for the boss fight music, as that would be a great way to add personality to the boss. You see, it's his mixtape!

Making synthy music is pretty easy. I use LMMS, and I've been using it for about 8 years now, so I'm very familiar with the tools it has. Making acapella music, on the other hand, requires me to actually hit the right notes. Now, I've done musical theater way back in high school, and since then I sing in my car every time I commute anywhere, so I got the experience. Hitting notes isn't too hard for me, but if I have no idea what the notes are... that's a different story. Even before I started recording my voice, I needed to make a synth version to base the notes off of. In my LD51 game, it just worked out that I remade the main music of the game, but this would be a new track entirely, and making both a synth version that would be unused and an acapella version seemed wasteful. So I kept the synth version for the title music, ha!

Music.PNG

First, I needed to record the bass line, which was just me saying "Boss fight. Boss fight. Boss fight. Boss fight. Boss fight. Boss fight. Boss fight music." with the word "boss" being an octave higher than the word "fight". I tried for about ten minutes to get this line right, but I swear at 140 Beats-Per-Minutes, that's somehow a tongue twister, so I recorded the "Boss" part seperate from the "Fight" part.

The melody was "Fight! Boss fight! The boss fight. The boss fight music. Fight. It's the boss fight! Boss fight? You're probably gonna fight!" Watch out, Beethoven! Needless to say, this song was a masterpiece.

I also added a 52 second long monologue in the middle of the song. All around, I'm proud of this one!

Here it is for your auditory pleasure.

https://www.youtube.com/watch?v=8X1bWB2x0pg

Don't run out of time!

I mention in my previous Postmortem, that Even after 20 Ludum Dare's, I do a terrible job at estimating how long things will actually take to implement. Somehow after everything was implemented I still had a TON of time left. My best guess for how this happened is the mechanic is super easy to make levels for. Last LD, I spent all of Saturday making mechanics, then spent all of Sunday making the "levels" for those mechanics. This time, The mechanic was done super early, and the levels were all finished by the 24 hour mark. Some people mentioned in comments on my game that there should've been another mechanic introduced around level 5 or 6, and I have to agree. I had the time... I should've done that. The gameplay gets a bit stale right before the twist, and some playtesting during this time would've also helped reduce the outrageous precision required for the final 2 levels. Notes to keep for my next Ludum Dare game.

So after the rest of the game was done and I had about 3 extra hours to go before the compo submission hour. What did I do with this extra time? I made a super rad screen transition between stages, and added way more details to the title screen than I ever have for any of my LD games before, I spellchecked all the subtitles, I made the boss fight harder, and I got to add some tiny bits of polish here and there... This was everything I could've hoped for in a Ludum Dare. I was proud of what I had created, and I didn't run out of time. Submission hour was still about 15 minutes away.

So then I hit the build button, and-

OH NOOOOOO!!!

It wouldn't be Ludum Dare if there wasn't last minute panic.

Notes to keep for next Ludum Dare: test the game in a built state more. So, the second layer of tiles uses a shader to render an alternate version of the graphics for the tiles behind them. It's pretty cool when it works, but it only worked perfectly fine under the conditions that the screen is at a very specific resolution. The resolution I had in the editor for the entire duration of development. However, in ultra-wide it was stretching the texture to fit my ultrawide resolution instead of lining up with the tiles. and I was running out of time to fix it.

OHNOOOOOO.PNG

It was such a shock! I had no idea how to begin fixing it, and jumping from a very satisfied state to complete panic felt awful. I remember just sitting there in awe looking at my built game malfunctioning in fullscreen for a solid 5 minutes thinking "What do I even do?!". Time was ticking, and I wasn't doing anything. Disheartening is the word I would use. On the other hand, this is what makes game jams so... marvelous? It was time for the classic last-minute "jank" fix. Unity has something called a RenderTexture, where instead of rendering to the screen, a camera can render to a texture that can be used in shaders, or simply placed on a quad! My solution to this new issue was to force my main camera to render to a RenderTexture at the specific resolution that worked. Then, another camera will just look at a quad with this rendered texture on it. HA! This came with some complications surrounding how I grab the mouse coordinates for clicking on the cursor used for the main mechanic. I simply had the new "main camera" 100 units above the old camera, and subtracted 100 units from that camera's calculated mouse positions.

If it works, and nobody knows how poor the backend is... is it even poor at all?

Gameplay.PNG

Reflection

The big takeaway from this is gameplay-polish. I made the final few levels too precise, and level 3 was also poorly explained. I should get some play-testers to try the game before submission hour, and speaking of- I should build the game every now and then to make sure my ultrawide monitor doesn't break things!

Also, the first bullet point- the one about focusing on a single mechanic- that worked out incredibly well. Keep it simple.

Results

3rd Overall

2nd in Humor

1st in Audio

Oh yeah! So I still haven't met my goal of top ten in mood, but I got a personal best score in Overall, Fun, and Audio! I'm a bit devastated I didn't beat my last entry in humor. off by 0.02 stars, ha! We'll get 'em next time.

Closing thoughts

This went well. As for what I'll need to do next time, I think I need to focus on simply making the game more intuitive, and less strict/precise. I'm definitely focusing on a single mechanic from here on out, that really worked in my favor in terms of time required to build levels.

I had a lot more to reflect on with the previous Ludum Dare, but I think I still took some valuable lessons away with this one. Mostly getting feedback before the deadline, and testing a build of the game frequently during development.

I plan to keep the acapella streak going. (I think my ratings in audio is exclusively because of it).

All things considered, this was a great Ludum Dare!

END TRANSMISSION!

Ludum Dare 54

My 23rd Ludum Dare's Postmortem: "Ribbon 2"

To begin with, I've never made a sequel to any of my Ludum Dare games before. I mentioned to some friends at the start of the 48 hours that I'd be making a sequel to Ribbon, my LD47 entry, and I was warned that making a sequel might not be the best idea. Ribbon was my first game to earn a trophy (2nd place in innovation) and a lot of people started following my LD games because of Ribbon. It's a game with a legacy, and if I were to completely fumble the sequel I'd be tarnishing that legacy. So the stakes were high this Ludum Dare... let's see talk about how it turned out. This is my postmortem for Ribbon 2!

I like to take notes for next time in these postmortems, so let's review what I wrote after my previous LD game. "I think I need to focus on simply making the game more intuitive" and "...(in the future, I should be) getting feedback before the deadline, and testing a build of the game frequently during development". Those were the big takeaways, but I also had some other goals. Here's the bullet points we'll talk about in greater detail:

  • Live up to the quality of the original game
  • Intuitiveness and address feedback before the deadline
  • Notes from prior LD games
  • Add an acapella track
  • Smooth sailing into submission hour
  • Holding the wrong hands

To begin with:

Live up to the quality of the original game

First things first, I'm not going to just re-use the old game's code. It was incredibly messy and it barely worked. To make the ribbon rotate around in the original, I had a series of 128 nested rectangles that all rotate slightly. gross.

PM1.PNG

I wanted to "do it right" which meant constructing a single mesh that bends and curves.

Furthermore, I had some ideas cooking for this sequel that the original game couldn't do at all. I had plans for the player leaving the ribbon and running around in a 3D space. The original game is a 2D game, that can steer around a 3D space, but since the Y axis isn't really used, it loops back around to being 2D again. For the sequel, I want you to be able to jump, and you need to drag the ribbon along in the Y axis too!

PM2.PNG

To make a long story short, the core idea I came up with to separate this game form the original and expand on the concept was entering/exiting the ribbon, and ribbon customization. Entering/Exiting allowed for some fun puzzles with buttons and doors, and the ribbon customization would showcase how I could expand this game in the future. With those features combined, I think it would be even better than the original, thus living up to the expectations of the sequel.

Intuitiveness and address feedback before the deadline

This was the key point of failure with my previous LD game. As a recap, in level 3 of "Inbox Fool" the player needs to toss a bomb at a magic tile, and the bomb needs to make contact while the player is at the apex of their jump. This was NOT explained, and it made level 3 (which is supposed to be an introductory level) way harder than I thought it would be. The difficulty curve was ruined.

To prevent that in Ribbon 2, I needed to hold the player's hand as much as possible, but hopefully not to a degree that ruins the puzzles. The puzzles in "level 1" involve buttons and doors, and while I assumed the puzzles were super easy, just in case the player forgets to use the core mechanic of re-entering the ribbon, I added a textbox that reads "You can press shift to re-enter the ribbon" if the player has walked around for 45 seconds without doing that yet.

Something I learned last Ludum Dare was to build the game and test it in a built state frequently during development. To my surprise, the shader I created to make the trees sway in the wind was completely broken in the built game (but not the editor)!

Trees.PNG

I simply decided to remove the shader (after putting in way too much time to fix it).

with about 6 hours remaining, despite the game not being done yet, I gave a build to my roommates. Watching my roommates play the game revealed something I thought was intuitive, but wasn't! One of my roommates struggled while customizing the ribbon, despite the text "Click on the ribbon", they were clicking on basically everything except the ribbon. The solution: Add a text box that says "The ribbon" with arrows pointing to the ribbon. easy fix!

TheRibbon.PNG

What I later found out post-submission was that one of the bonus spools, which required jumping into the bouncy ribbon, was harder to collect that I initially though. If you let go of the jump button before the apex of your jump, you intentionally lose a lot of momentum. this allows for "short-hopping" but this also completely destroys the momentum needed to reach the bonus spool. Whoops! I guess I still have much to learn about explaining mechanics to the players.

Notes from prior LD games

Previously, I've made the decision to focus the gameplay on a single mechanic and worry about the story (if any) later. In complete contrast to that note, I felt like the game was lacking while designing level 2. I couldn't just make every puzzle have the same solution of "go here, enter ribbon, viola!" so I made some mini-games. The shape tracing game felt like a great use for the ribbon, though issues arose with the other ideas. The other spools, namely the "hidden box" and "chase game" spools could exist in any game, whether there was a ribbon or not. All the cool ideas I had were way out of scope, but I'm still glad I was able to add something to fill the space.

Add an acapella track

Ohhhh boy I was burning out, and I honestly considered not making one this time. For those unaware, my previous 3 LD games had an acapella track in them, and as much as I didn't want to break the streak, I didn't know where to put it. This game has, for the most part, taken itself very seriously as a sequel to Ribbon. As I pieced together what the bonus ribbon would be (for collecting 100% of the spools) I decided, "hey- I can make the music inside the bonus ribbon acapella. why not? I got time and energy." So I did.

I added a bunch of other fun acapella noises, like clicks and pops, but also a fun noise you can make when humming the letter 'v' in a falsetto. My roommates think the humming-the-letter-'v'-in-a-falsetto thing is super weird, but it's a fun noise to make, and I didn't add it in the previous game's boss fight music, so I had to put it in this game!

And that was the final addition to this game! Once the acapella track was in (and volume controls to only play it when inside the bonus ribbon) I was ready to build the game and submit, with about 20 minutes to spare until submission hour.

Acapella.PNG

It was certainly a less ambitious acapella song than last time, but hey- I was burnt out and had less than an hour.

Smooth sailing into submission hour

If you read my postmortem for "Inbox Fool" you may recall this section was named "OH NOOO!" because, like always, I encounter some form of last-minute panic. For Inbox Fool, the shaders in the built game were breaking which required making serious changes to the camera / calculating the mouse position.

This time around, I built frequently during development. I encountered the trees being bad super early, (tried to fix it for about an hour and a half) and removed that shader.

I had about 20 minutes to spare, and I didn't know what I could do with the time, so I took some screenshots for my LD game page, and got it set up.

It was very bizarre having the game page ready at the start of submission hour instead of the last-minute-panic at the end that I usually experience, and I definitely believe it's because I built frequently during development and fixed minor things along the way instead of unknowingly letting them build up.

And with those bullet points out of the way...

Holding the wrong hands

Despite how much I tried to hold the hands of the players, there were a few comments stating that they didn't reach the end of the game for various reasons. One player forgot about the ribbon customization menu. This could've easily been fixed if I made the "you unlocked a new spool, press the Q button" text appear after unlocking the second unlockable ribbon, though I honestly assumed everyone would've played around with the customization a few times before reaching that point. Perhaps I didn't showcase the customization with as much importance as I should have. Again, notes for next time: remind players of required features if there's a gap in using them, and make sure players understand everything about them. Perhaps I need better explanations when introducing those features?

One issue that was brought up a lot was the camera. People wanted to be able to fully rotate the camera even though everything was desgined to be viewed from the front. The idea I had for camera rotating would be to simply add some curves to the ribbon and step inside, though perhaps once again my ideas are far from intuitive.

Speaking of the camera, I had an invisible wall in my game (in the form of a fence, with a realllly tall hitbox) that players were trying to get over. The entire reason it exists was to give the camera space so it didn't need to clip into a wall, but I still needed a boundary to prevent the player from going there. Anyway, yeah- people tried climbing over the fence, and even asked in their comments if they missed something that was over there. Perhaps I should just write "This fence exists to give the camera some space." on the floor next time, ha! The other invisible wall in my game had a neat effect where the floors, walls, and decorations were all greyscale beyond a certain point. Perhaps I should've re-used that as a motif instead of a fence.

Speaking of the camera... again... My code for following the player when inside the ribbon had a slight malfunction when the ribbon is at a sharp turn. A single line of code would've fixed it, but the camera would zoom real close to the ribbon, making the player impossible to see.

And I had one player who completely didn't understand the game at all. They left very little feedback, but from the sounds of it they couldn't solve the tutorial, got frustrated, and gave up. I honestly don't know what to take from that, as every other comment at least made it to the second stage. Reading that comment hurt. I'm still struggling to make my games intuitive. I don't know... I'm afraid this will lead to me over-explaining everything in the future, removing any chance of an "Ah-ha! moment" for any puzzles.

Reflection

So- now that the game is done, did I live up to the hype? Was Ribbon 2 better than the original? I'd say absolutely.

It's been 3 years since the first Ribbon game and in that time, though I may not immediately realize it, I have grown tremendously as a game developer. The problems I had to solve while developing this game seemed to be minor issues instead of taking most of the weekend. Were there issues? Well sure- I scoped insanely large as always. The camera in this game wasn't great, though that's partially just due to letting the player orient the ribbon in any way, and trying to make the camera follow the player inside it is... difficult to say the least.

Of course, it wouldn't be Ludum Dare if I didn't learn anything for next time, and one of the big takeaways from this one was a lack of Key-Rebinding. A friend of mine played the game on Twitch, and I was unaware they were left handed, which complicated playing the game. To my surprise, nobody has ever made such a comment to me. I never even considered how WASD + Spacebar was such an issue for the left-handed, and again, how has nobody informed me of this in 23 ludum dares?! Furthermore, I've come to realize QWERTY isn't the default everywhere, and WASD isn't always convenient. You live and you learn! You bet my next LD game will have button remapping.

I'm still figuring out "intuitiveness" after my 23rd Ludum Dare, and I think I need to really take the time to figure out why. And now we get to talk about the real puzzles of the game... I thought the "Very high jump" bonus spool was a clever use of the bounce ribbon, other's never figured it out. Some people found some very interesting uses for the entering/exiting ribbon mechanic with my generous "Coyote Time" as a means to collect that spool, and hey- the more solutions there are the better. That being said, I wanted there to be puzzles, I have to stop holding the player's hand at some point, but I still haven't figured out the perfect balance.

poorly.png

Results

11th Overall.

Moving on...

Conclusion

This game was a bit different from my previous few entries. I usually add humor all throughout my games, while Ribbon 2 only had a single joke at the very end. (I still scored 12th in humor though!) Take my previous LD game for instance, where every level had at least one bad joke in it as the villain taunts you through a TV screen. The game before that, The Bountiful, had a psychopathic crow giving you bad advice, then "Watch out" had a talking pocketwatch to make bad jokes, "Block or Bust"... well the core gameplay loop of that game is humorous.

I think I was too excited to make Ribbon 2 that I focused on the wrong things. My game has so many details that barely anyone would see, yet lacked general polish on the game's camera. I shouldn't care how smooth the camera movements are, if the camera is moving to inconvenient places! I think that's what affected my score the most.

So what's the big "Note for next time" that I'm taking from this LD? I feel like I've brought up a lot, from the lack of key rebinding, to the unintuitiveness, to the jank camera. I think the biggest note to reflect on is to figure out where to polish. This game had polish, sure, but I think it was in all the wrong places.

Don't get me wrong, I'm still very happy with the game I made. I still think it's one of, if not my best game jam game yet (despite the ratings). In my "Postmortem for 20 Ludum Dares" post, where I covered my first 20 LD games, I mentioned around LD38 through LD42 that my games were getting more ambitious, but they were poorly explained. I'm seeing the trend repeat, and I'm going to be focusing on making better introductory levels in the future.

I don't know if I'll make more sequels in future Ludum Dares, but I'm glad I got to make some of the ideas I've had for this one. That being said, I really like the dynamic I had in Inbox Fool with a foolish villain... I think I could get away with more foolish villains and not call it a sequel. We'll see.

Ludum Dare 55

My 24th Ludum Dare's Postmortem: "Demon Well"

As someone trying to become a more skilled writer, nowhere do I feel more inept than writing the first sentence in a postmortem. With every Ludum Dare postmortem I write, I take as many notes as possible so I have thoughts to reflect on for my next game. Thoughts such as: "Focus on a single unique game mechanic instead of story elements". So anyway, here's how made a game that is primarily cutscenes, completely disregarding my own advice.

My Ludum Dare 53 game, "Inbox Fool" had a lot of success through the comically foolish villain. I've been wanting to make another game with a good dynamic between two characters, though of course it's hard to do that without focusing on the story.

While brainstorming for ideas during the theme voting, I had Idea that I've been wanting to try, which is an escort mission from the perspective of someone trying to die. I haven't played many games with escort missions in a long long time, but I'll never forget the Spyro 2: Ripto's Rage escort mission where you guide an alchemist through the worst possible route to free some guy whose feet are trapped in stone. For those who haven't played the game, the route looks something like this:

Spyro2Example.png

Surely the alchemist is doing this on purpose.

That, in combination with the comical cutscene of his death, the camera fade out/in, and the movement of the camera before the failure dialogue... I was really itching to parody it. The funny thing about the failure cutscenes in Spyro 2 and 3, is just how long some of them can be. This sparked the idea of the hero shouting and complaining the whole time you bumble around with your buffoonery leading to what really feels like an intentional death, and a tragically long cutscene where a hero could intervene, while he just idles in the background witnessing it, because "cutscene".

Trouble with the trolley, eh?

The icing on the cake. The coup de grâce. Saying the stupidest possible line to begin the failure dialogue with the hero. For my game, I opted for a short and sweet, "Ooops! I exploded!". I think the "oops!" really sells it, as it implies it was an accident.

With that, the core idea for the game is all set. You are a demon who was summoned to fulfill some task, but in a twist on classic escort missions, you are the one trying to fail, while a hero tries to save you. After failure, you get to say the silly line, and the hero gets increasingly upset.

The Art

It's not the order of operations most Compo devs would choose, but I always begin Ludum Dare by drawing the characters, any necessary animations, and some basic ground textures/decorations. I have a habit of polishing as early as possible, which I think leads to better overall presentation of the final game. Why even make placeholder graphics (or test things with untextured characters/environments)?

The 4 main characters I needed to draw was The Hero, The Demon, An Enemy, and The Boss.

Recently, I've had an idea for a card game, so I've been staying up late drawing funny characters. As my art style devolves, I've had a lot of fun drawing exceptionally short characters, many of which have giant beards:

CardGameCharacters.png

I decided this art style would be a good fit for the demon you play as:

TheDemon.png

The boss

I've recently done my first game jam in a team, with my friend ChillLemon. They're just getting into game development, so for Minijam 152, they did all the programming while I did the art and music. Our amazing game, Dwarf Game with Combat vs. a Necromancer and also there's a Gun and the Camera can move and the Dwarf is a Hero featured a powerful necromancer, and I really liked the design of him, so I gave him an upgrade for an epic reprise.

Necrupgrade.png

I was joking with a friend as I designed this guy, that all his belongings have horns because they were demonic summons. How funny would it be for a boss fight against this guy, and he's like "Nooo! My demonic hat! I summoned that one years ago!" "Nooo, my demonic 401(K)!"

The Hero

Keep in mind, my character art is usually within a 64 by 64 pixel grid, or even smaller, making animations on the scale of 512 by 512 pixel character is... so much more work!

HeroRun.gif

I'm happy with how it turned out, though I don't foresee myself making characters of this scale in future game jams.

The level

While we're on the topic of the graphics, I also made a giant tree for decoration surrounding the stage. I wanted this to be a pine tree, though I unfortunately have spent the past 5 and a half years drawing specifically non-pine trees. In fact, the most recent pine tree I drew was for Ludum Dare 41:

TreesOverTheLDs.png

It's pretty much the same style as the LD41 tree, but with my current art skills. I wanted to put a lot of emphasis on the shape of the tree, and making the lighting look good. I added a lot of solid black sections, which isn't something I usually do with my lighting. I like how it turned out!

I also decorated the level with a bunch of grass, which is mostly 1000 randomly placed large strips of "grass texture":

grassTexture.png

Anyway, with all that said, I mostly wanted to share the new stuff I was trying with my art. Let's actually talk about the goals I had for this game, and what went right/wrong.

Goals

  • I have been struggling to make my games intuitive. This is something I thought I overcame around LD 43.
  • I wanted to focus on humor and audio again. My previous LD game was a bit lacking there.
  • I wanted the option to rebind controls.

Making the game intuitive

Since my previous two games were "puzzle platformers" (generously using the word "puzzle" there) I was hesitant to over-explain things, as part of the fun is the "Ah-HA! moment" of solving the puzzle. This time around, the game was very much not a puzzle game, so with every level, I established the goals in a popup menu.

MessageBox.png

And even still, I dropped the ball by miscommunicating. In level 3, you need to collect 6 sticks of dynamite, then get smacked by the enemies. During the dialogue, your demon says "I'll need to craft an explosive!" which lead to me writing "Craft an explosive" as one of the goals for the level. There is no crafting mechanic, you just need to collect 6 sticks of dynamite.

MessageBox2.png

Furthermore, while watching everyone play my game I was shocked to see how few people tried getting smacked before collecting 6 sticks! After all, this game is about failing missions! Wouldn't the first step be to at least see what happens? I made it so getting hit before collecting all the dynamite would result in a much-needed speed boost.

This is feedback that I would have absolutely seen if I had the chance to get people to play it before the deadline, but alas.

Thankfully, that seems to be the only point of confusion in the entire game.

Focus on humor and audio

My sense of humor is... dumb. I enjoy absurdism more than any other kind of humor, and I think it shows. If you were to ask me how to define humor, I would say it's all about setting an expectation and then subverting it.

Baritone.png

Allow me to break this one down for you. The necromancer has summoned a choir to sing his boss fight music, and their vocal warmup involves (in descending order: Tenor 1, Tenor 2, Baritone, Bass) the group saying "laaaa" in their respective range. Except the baritone instead says "I'm a baritone!" in a very straightforward non-melodic way. (all the while, the remaining vocalists are still holding their extended laaa's) That was my favorite joke of the game.

I also think it's relatable for people stuck on an escort mission to eventually want to just shoot the escortee yourself out of rage, so I made a level specifically with the hero killing you as the punchline.

Fireball.png

In my "foolish villain" style of comedy, The Necromancer leaves his power source just lying around, with a big sign saying "The source of my power. Do NOT steal! ♥~ Necromancer" with follow-up signs reading "If you steal that gemstone, you would gain all my powers, leaving me with none!" and "That would be bad!". I think it's funny for a guy to tell you how to defeat him. Like- imagine fighting a guy, and then he charges an attack saying "During this animation, I'm VULNERABLE!". It's both good game design and absolutely hilarious.

ThatWouldBeBad.PNG

Then of course, the game ends with you scamming the hero out of his share of the experience points when you defeat The Necromancer. The hero rants as you fly away. Good stuff.

Acapella music

This was my fifth LD in a row where I added an acepella track. Though the music track isn't super funny, I think it's a great subversion from what people expect out of a Ludum Dare game. "Who the heck has time for an acapella track in a Compo submission, and why is that a recurring priority?" I have a lot of fun making the acapella music in my games, and this time I ended up making it in the final 2 hours. For the acapella music in my LD53 game I re-used the synth version for the title music. This time around, I already made title music for this game that I really liked, so this time around it was a new track made just for the acepella!

Music.png

Looking at the music right now, I realize I forgot to do some cool stereo effect, with one set of vocals specifically in one ear, and another in another. Oh well- Next time! The actual goal with my acapella music this time around was the focus on chords, which I think I did a good job with.

On the topic of audio, I voice acted every cutscene in the game, which was by a wide margin the most voice lines I had recorded for a game jam! The bulk of this game's development was writing a cutscene engine, but I think it paid off. I know, during my LD46 game I also spent most of the time making a cutscene engine, which resulted in a buggy, unfinished mess. I'm very happy to say that this game not only has fully voice acted cutscenes, but a finished game as well!

Rebindable controls

You know, up until last ludum dare, I never considered how important this is. Sure, I'd watch twitch streams, and they would always comment on the WASD not fitting their keyboard, but they always found some way to work around that. It wasn't until my left handed friend played Ribbon 2, where the WASD + spacebar combo made it much harder for them.

I wanted to make sure people could rebind their controls, so the game opens up with a control rebinding menu.

Rebinder_DemonWell.PNG

Somehow I forgot the most important key rebinding feature: changing mouse sensitivity! I had 3 volume sliders; making another slider would have been so easy if I had only considered!

Pause.PNG

On the topic of minor shortcomings, why do I keep making games where letting go of spacebar results in a short hop? The amount of people who short-hopped the final jump of the game, thus falling short at the end of a platforming course (thus needing to scale it again) was well into the double digits. This same short-hop feature resulted in people not getting the final collectible in Ribbon 2 as well. I know making every jump the exact same height (regardless of how long you press the jump button) feels wrong, but why is that exactly what I need?

Though to be completely honest, this was a really sloppy character movement script for platforming purposes, and I probably should have polished that a bit more.

Reflection

When I created my LD53 game, Inbox Fool, I hadn't noticed at the time just how brilliantly I implemented the banter from the villain. In that game, stepping on a giant button in each level would play a cutscene on a TV in the background, where the villain taunts you, or drops some lore / bad jokes. The story was literally happening in the background while gameplay was never interrupted. Now take a look at Demon Well's cutscenes, which come in 2 flavors: Dialogue, and Unskippable.

In my opinion, the greatest shortcoming of the unskippable cutscenes isn't the lack of skip functionality, rather the lack of subtitles. That being said, there is a nearly minute long opening cutscene that cannot be skipped, which is really unfortunate (especially for people wanting to speedrun this game). Then again, one of the jokes with this game was a comically long unskippable cutscene of the demon dying, so perhaps the only cutscene that needs skipping is the opening.

And if we honestly talk about the quality of the gameplay outside of the cutscenes, it's not really anything to write home about. It's a route-optimizing walking simulator with some rough platforming in the final stage. If I were to expand on this concept, I would need to make the gameplay a lot more interesting.

I think I might have taken care of my itch to make a story driven game? I still have some really cool ideas for a few, that (if the theme comes close enough) I might consider making, though this was my third LD in a row where the theme was a stretch, so I might focus on theme next time.

Now, reflection isn't exclusively about being negative all the time. I want to talk about what I think worked well.

This is by far the funniest Ludum Dare game I have made. I set out to make a funny game, and I can gladly say that goal was met.

This is by far the most voice acting I have recorded for a Ludum Dare. I'm far from a professional, but I'm having a good time!

This is by far the most story I've had in a Ludum Dare. A lot of my games have you thrown in the middle of some plot (if one exists) though this game establishes the story, builds to a climax, and then resolves.

This is by far the prettiest level/environment I've made in a Ludum Dare. The tufts of grass, the pine trees, the well, and the skybox (Oh the SKYBOX!). I made a really cozy level!

Beautiful.PNG

Reflection part 2: Thoughts for next time

Okay, so what did I learn?

Allow me to compile a list of things I told myself to consider for future Ludum Dare's that I disregarded this time around.

reminder.PNG

"Focus on a single mechanic, and let the story come second".

You know, amazingly, despite my postmortem for both LD53 and LD54 commenting on how that advice made for a better game, I completely tossed that piece of advice aside here. I said it earlier, but the actual gameplay is lackluster. Seriously, focus on a single mechanic next time.

reminder2.PNG

"Get feedback before the deadline"

Now, in my defense, my roommates were out all weekend (until briefly after submission hour), so I didn't really have anyone available to test it out quickly IRL. I probably could have hit up some friends on discord though.

So let's recap where my game had shortcomings, which this type of feedback would highlight. * Level 3's objective said to "craft an explosive", which isn't even a feature. (remove that line) * People dodged the speed boosts in level 3. (Replace that removed line with information about the speed boosts) * The camera didn't have a sensitivity slider. (Copy / paste existing volume slider code) * Short hops resulted in people failing to make the final jump of the game. (Remove short hops)

Every single one of these could have been easily fixed if I had known about it. Every single one.

reminder3.PNG

"Make sure the camera isn't jank"

Ahhhhh! I cannot believe I forgot to add a sensitivity slider. Especially after the camera was jank in my previous LD game. I can say "In my defense, I have never made a game with a mouse-controlled camera before" but I've played a bunch, and I always change my sensitivity, so no- I dropped the ball. I spent a lot of time preventing the camera from clipping into objects though, so in some ways this camera wasn't as jank as it could have been!

reminder4.PNG

So what advice do I offer to my future self, despite the high probability of it being ignored anyway?

The majority of this Ludum Dare was spent writing a cutscene engine. That was pretty far from the most fun I've had with a game jam. Honestly, designing bite-sized levels during LD53 was a lot of fun. I want to make another game with an interesting mechanic, broken into a series of small levels. 3D games can be a bit overwhelming to make in a weekend, and I think my game design skills are a bit more fine-tuned to 2D games anyway.

And with that, I brace myself for the results.

Results

21st overall. This is honestly the worst I have done in a long time, which- I understand. I've been commenting on how rough the non-cutscene parts were this entire postmortem.

3rd in audio.

2nd in humor.

Reflection part 3, and a big ol' conclusion

Well, I got trophies in the categories I was aiming for, so that's nice!

I think I'll be making more 2D stuff, unless it absolutely must be 3D (like Ribbon). I'm way more familiar with working in a 2D environment, and I think that would let me work at a faster pace, which lets me make larger/better/more-polished/more-innovative games. Plus, working with shaders in 2D land is way easier, and I could absolutely boost my graphics ratings with some neat shaders.

It's nice to see that my sense of humor is still doing well. In my postmortem for LD53, I mentioned how I wanted to do more foolish villains, and this time around the dynamic I had between the characters has absolutely inspired me to make more games with them. I want more cutscenes that don't take control away from the player. Whether it's a villain, or some wacky 4th wall break, those kind of cutscenes seem to be the place to inject my bad jokes, so I'd like to experiment more with cutscenes. That idea is definitely in conflict with the notes I took though, seeing how the process of making a cutscene engine isn't a lot of fun? I'll try and get creative with it.

I think that's all I have to say for this Ludum Dare. Until next time!

Ludum Dare 56

My 25th Ludum Dare's Postmortem: "Prince Charmony"

"I better not touch that Postmortem Ruining Device 3000."

empost/emdumbStart.png

"Oh no! Somebody else made this postmortem too long!"

The idea:

So the theme was "Tiny Creatures" and the first thing I though of was a disney princess singing to woodland critters as a means to make them do your bidding. Unfortunately, I'm a Bass/Baritone and not a Soprano, so let's make the princess a prince this time.

Prince Charming... singing a harmony. Charming... Harmony... Charmony! Good enough for me!

Goals:

I've been trying for 8 Ludum Dare's now to make a really good "tree swaying in the wind" shader. There's a good screenshot in my LD54 postmortem of the tree shader going wrong and being abandoned. Actually, to quote my previous postmortem, "I could absolutely boost my graphics ratings with some neat shaders." I wanted to go all out on graphics this time. It's been a while since I've scored in the top 10 of graphics, and my art has improved a ton since then.

On top of focusing on art, I wanted to mimic the story-telling of my LD 53 game, Inbox Fool. Having a villain that taunts you in every level (as well as making bad jokes) is a very natural way to put my bad sense of humor into my LD games, so I plan to do that too.

These goals will be explained in the following sections: * Shader-land * The Critical Blunder * Okay, what the heck was that story? * A lot of singing * Let's talk about why I ran out of time.

Shader-land:

Let's make some trees that sway in the wind.

Step 1, separate the trunks from the leaves.

emPost/emTree_1.png

To make the leaves sway, we'll create a texture for the shader. The purpose of this is to seperate each chunk of leaves into their own sections that sway individually. We want the tops of the leaves to be fixed on the tree, but the lower parts sway further than the higher parts. Imagine a gradient from black to white, where darker shades of grey represent less movement, and lighter shades represent more movement.

emPost/emTree_2.png

Now in the shader code, just scoot the pixels of the leaves over to the right some distance, multiplied by the brightness of that pixel in the lookup table texture. (Multiplying by a dramatic amount just to highlight the effect. Obviously the trees swaying this much looks bad. The key is being subtle.)

emPost/emTree_3.png

Modify the amplitude of the displacement by multiplying by some sine wave over time, and you've got some reasonable tree swaying!

There was another effect I really wanted to create. You know when you're walking through a forest and there's a patch of spotlights as the sun pokes through the leaves? A bunch of little pinhole spotlights would really make the forest scene a delight.

Step 1: Make a circle.

emPost/emShadercodeem1.png /emPostemShader/em1.png

By adding some "cutoff" value, we can make the circle solid instead of blurry.

emPost/emShadercodeem2.PNG /emPostemShader/em2.png

Step 2: Fading luminosity.

I want the circle to be bright when it's near some target point, and fade away as the circle moves from the target point.

I started by adding the target point, and setting the pixel's brightness to be the pixel's distance from the point:

emPost/emShaderem3/em1.png

Not quite what I was going for. Instead, set the brightness to the distance of the circle's center from the target point:

emPost/emShadercode_3.PNG

emPost/emShader_3.gif

Looking good!

Step 3: More dots.

Okay, so how do we scale this? The way I'm creating the circle reminded me of voronoi noise! (Which is way too much code to put in a single screenshot, so from here on out, I'll just show the results)

emPost/emShader_4.png

Applying the fading luminosity, and we got something looking like this:

emPost/emShader_5.png

Step 4: Replacing the luminosity "point" with perlin noise.

Using a perlin noise texture, I performed some math to create "blobs" that would be hotspots for the pinhole lights.

emPost/emShaderem5/em1.png

Now instead of using math to calculate the brightness of the circle, I just grab the value from the perlin noise:

I also added multiple layers when I move the dots around, so they aren't all in unison.

emPost/emShader_6.gif

Oh yes.

Make all the local texture coordinates into world coordinates, and you've got yourself some neat tree pinhole spotlights!

PostemShader/em8.gif

The Critical Blunder:

It really wouldn't be Ludum Dare if everything went right. So there were framerate issues. I was half-joking with a roommate that I'm being punished for having a really good GPU, but in hindsight I really do need to test my game on a laptop or something. I think a lot of us have been in a situation during Ludum Dare where we are mentally exhausted, we're rushed for time, and not thinking clearly. This is one of those situations.

So the pinhole shader is looking cool, but I want more spots, you know? Let's loop the existing code, oh- I don't know... 60 times.

I'm such an idiot.

Now, initially I set that number to be like, 100. It looked great, but in the Unity Editor, I was also getting some dips in performance. Granted, this was with the scene viewer, which on my monitor was around 2500:1000 pixels. I forced the resolution of the game to be 768:512, which dramatically cuts down on the number of pixels in need of calculations, which fixed the performance on my end. I also then cut the number of iterations from 100 to 60, so I figured it was good to go.

After reports of bad performance, I knew exactly what the cause was. I modified the shader and capped it at 4 iterations, making a Post-Compo "light GPU build". It looks basically the same.

Dang it.

Okay, what the heck was that story?:

Or, "How I recorded a ton of lines that never got implemented because I ran out of time." I ran into a similar situation in LD52. Voice lines were recorded, but there wasn't enough time to implement them. Here was the plan:

The story of the game is as follows. Your golden parrot is stolen. Now, under the control of The Dissonancer, your parrot will act as a messenger, delivering the stupid messages the boss has to say. The message for level 1 read:

"MYRAH! Look, I'm your parrot! I'm loyal to The Dissonancer now! Ha, just kidding. It's me! The Dissonancer! I already taught your parrot how to say this message. Uh- Don't question it. I'm just going to be "mocking" you through this "bird". Squawk- this is your parrot speaking now. Ohhhh, you're gonna miss me! ... Okay, how do I tell the bird to stop recording? Is there like, an off button or a command? This was a good message. You should fly over to that Charmony dork and let him hear it."

And I had stupid banter for some other levels as well, but I was RUSHING to finish everything and it didn't make it into the game, which is devastating because there were some really bad jokes in some of those banters, and I really wish they made it into the game.

Anyway, all that's left of the story now is: the wall is destroyed, the Dissonancer steals the parrot, the parrot sings the boss fight music (but there's no animation or indication that it's the parrot singing it.... oh well), and then you get the parrot back and explain why you can't pay to have the wall replaced. There were more references to the wall in the unused dialogue, and it would've made the payoff at the end so much stupider.

A lot of singing:

This is the sixth Ludum Dare in a row in which I've added Acapella music. I'm still not an expert, but it's fun!

Since this game revolves around singing to creatures, naturally I had to sing some music. I'm not actually a professional, (and I thought it would be really funny if it's obvious Prince Charmony isn't either) so his "singing" is mostly him going "Doo doo doot doo doo! Blah bomp. Bwa dunna domp blomp womp!"

Before I talk about the boss fight music, let me take a brief moment to talk about the new things I tried with my synth music. I picked up some slap bass VSTs, and oh my god... I cannot believe I hadn't been using slap bass this whole time.

And as always, the acapella is way easier to make if I already have a synth version made first.

emPost/emAcapella3.png

As for the acapella boss fight music, I had big plans. I know I've done it a lot this postmortem, but allow me to refer to a previous postmortem. In my postmortem for LD55, I wrote "I realize I forgot to do some cool stereo effect, with one set of vocals specifically in one ear, and another in another. Oh well- Next time!" and I can safely say, ladies, gentleman, and everyone still listening, "we got 'em".

emPost/emAcapella.PNG

For all those who doubted me, I say:

emPost/emAcapella2.png

I can't honestly think of something that went wrong with the music, which is a relief considering a lot went wrong with the graphics. I added stereo effects, chords, and it sounded great! Perhaps the music could have been a longer loop, but I haven't heard anybody complain about the repetition.

Let's talk about why I ran out of time:

Okay, so I over-did it on the art. I spent 5 hours on the background. And in Ludum Dare Compo terms, that's a LOT of time. It wasn't just to try and score well in graphics, but more importantly, I really struggled to make a "game" from my concept.

One idea I had for the gameplay would be to set up a rube-Goldberg machine using the animals to move an orb to... I dunno, a sleeping deer or something. Another woodland creature of sorts, who would then point the way to the next level. The puzzles would be all about setting it up, and watching it go, but I was not sold on that idea.

I wanted to make a puzzle game akin to my LD53 entry, Inbox Fool. I scrapped the rube-Goldberg machine idea, but the phrase "solid cube of birds" rung comically in my mind. I needed to make that. Frogs being bounce pads also made sense in my mind. I had a game coming together.

I initially couldn't come up with enough interesting mechanics from the critters, so as I brainstormed, I drew art. The rabbits were specifically the animal I struggled with. The birds and frogs both provide vertical movement, and I needed to make sure the rabbits were actually important. My first draft ideas included them becoming a ladder (vertical movement. bad.) or a placeable singing-platform. For people who didn't play me game, the singing platforms are where you can command the animals, so being able to place one would make for interesting puzzles. I assume.

In the end, rabbits making tunnels sounded really cool, but wow that's more vertical movement tools. I guess they can also make a bridge, I don't know. And viola! All creatures got ideas, and wow I spent 5 hours drawing the background while I figured this out, it's time to program stuff now.

Polish as you go.

Call me dumb all you want, but you cannot deny my games have presentation. (and yet I wonder why I run out of time so often)

Once the trees were moving, the tree-pinhole-spotlights glowing, the character moving, and the camera smooth as butter, I got started implementing the woodland creatures.

The big takeaway from my LD52 game, "The Bountiful" was (and I repeat this in every postmortem) "Focus on a single main mechanic, and let the story come second".

Despite "commanding woodland creatures" feeling like a single main mechanic conceptually, it was really 6 individual mechanics that all needed to work perfectly together. Birds need to be solid cubes and double jump zones. Frogs need to be bounce pads and boosts to jump height. Rabbits need to be bridges and tunnels. Then I need to program the singing-platforms and the HUD elements to go along with the animals.

Then I wanted a boss fight akin to Inbox Fool. That game flipped the main mechanic on it's head, but I couldn't find a way to flip the animal commanding into something new. You basically just collect the animals and use them to defeat the boss.

And I wanted 9 levels before the boss. 3 levels for each animal to be in the spotlight.

The timeline of this LD was: Draw characters and all animations, draw woodland creatures, character movement code, QOL features like coyote time and buffered jumps (pressing jump briefly before landing will still jump after you land), sleep.

Draw foreground elements, background elements, shader code, program birds (fun hopping animations, cool patterns in bird-cube-mode), singing-platforms and HUD, program frogs, start writing music, title screen art, sleep.

Program rabbits, make 3 bird levels, I made 1 frog level, 3 rabbit levels, finish writing level music, and sing the acapella music, make the boss room, draw/animate/voice both cutscenes, record a whole bunch of banter dialogue that got cut, make the remaining frog levels (all levels complete!), add code to progress from one level to the next, pressing R to reset a level, implement the title screen code, add the victory screen + speedrun timer, program the boss fight (the barrels are just a copy of the player movement code, you can tell I was panicking!), pause menu, and publish!

The pause menu almost didn't make it. I was rushing the whole weekend.

Reflection

I'm writing this before the results go live, so these are my genuine feelings about the game with no bias towards how the results may ruin my opinions.

I like it. I'm comparing the art from my LD45 game that scored 10th in graphics. It was another game featuring a forest as the backdrop, and just look at the difference!

emPost/emCompare.png

As for improvements to the art, I think the solid-black parts of the foreground should have been a dark brown. I think the background might be too saturated, and some parts could be confused for solid objects. I've also been told a few times that the background does not match the art style for the playable character, which... yeah. As I become a better artist, I should probably do something about my character art style. I absolutely love the very simple designs (and I'd like to emphasize how quickly I can draw in this style) but if the character does not match the background, it feels weird. Perhaps the real issue is the background being too detailed, ha! I'll try and make the characters match the scene next time.

The puzzles in my LD53 game, Inbox Fool, were poorly tutorialized, and I think that applies here as well, but it's slightly better than my LD53 game. Some other shortcomings with this game include janky corner clipping. You could sometimes clip upwards and reach platforms you otherwise shouldn't be able to reach, which could potentially cheese a puzzle, or confuse someone who accidentally clips up thinking it was intended.

I think the music was perfect with this game.

Reflection part 2, What did we learn?

First of all, let's address all the points from the previous postmortem.

"Focus on a single mechanic, and let the story come second"

It became 6 mechanics, but I think I did a good job. There was a lot more emphasis on the levels and design than emphasis on story. (Story elements were even cut because I ran out of time)

“Get feedback before the deadline”

Okay... so my roommates were both gone this weekend too, ha. I reached out to some friends on Discord when LD started saying "Hey, will you be around to test this on Sunday around noon? (6 hours before submission)" and I got a handful of people ready. Alas, I was so rushed for time I wasn't even able to make a build for testing. I had too much to do, and, wouldn't you know it, that came back to haunt me.

Okay, what would we have learned this time? The framerate issues. One of the puzzles consistently stumps every one of my friends, and some corners were clippable. All of that could have been fixed.

This is something that I will make a priority next Ludum Dare.

“Make sure the camera isn’t jank”

I made a 2D game this time, so that was easy. I actually started with the camera before I even figured out what I wanted the game to be. I wanted it to be smooth as butter, and I can safely say I did that.

"Make another game with an interesting mechanic, broken into a series of small levels."

I took that to heart, and you bet it worked out. This game was a lot more fun to make than my fancy cutscene/dialogue engine with a game attached.

What did we learn this time?

I pretty much want to just repeat the lesson from LD53, about getting feedback before the deadline. To actually add to my repertoire of lessons from each LD, I'm going to say the big takeaway here was test the game on the worst laptop you own. My roommates have computers of similar quality, so the framerate issues present in the game wouldn't have even been noticed by having them test it.

Also, if I'm going nuts with shaders, just don't be dumb about it. Perhaps that's the real lesson.

The Results

  • 13th Overall

  • 15th Graphics

  • 6th Humor

  • 1st Audio

Reflection part 3, and Conclusion

Honestly, I'm satisfied with the results. I'm a bit befuddled by my score in graphics just barely not being better than my game from 11 Ludum Dare's ago, but I've noticed LD results are incredibly varied sometimes. Luck of the draw on who rates your game, I guess? But also the frame rate issues likely played a part in losing a few points there.

Honestly, now that it's all said and done, I think I should spend less time drawing detailed background, and perhaps trying to stylize the heck out of things with simpler designs. I spent so much time on the art that the rest of the game was rushed, but if I'm going for cartoony, why not go all in, you know?

And, Woo! Another trophy in Audio! The acapella music seems to work. It's such a shame there were voice lines that didn't make the cut, as that probably could've boosted my Humor score a little more, but oh well. We'll get 'em next time.

All around, this one was a great time! It was fun to develop, which instantly makes it better than a few of my previous jam games. I like the puzzles I made, and the world I built. I really can't ask for more.

Anyway, that's it for Ludum Dare 56! I'll stop myself from rambling even more. See you at the next one!

Ludum Dare 57

My 26th Ludum Dare's Postmortem: "The Moon Reconstruction Program"

"Red, come in! This is Mission Command. We need to talk about how the mission went."

Without fail, I seem to make some "critical blunder" in every one of my Ludum Dare entries, despite the notes I take after each one. And while I genuinely believed I followed my previous notes very well this time around, I'm not so sure now that I've done some reflection. Here's how I will be structuring this postmortem:

• From concept to game

• The critical blunders

• The bright side

• Reflection part 1

• Results

• Reflection Part 2

• Closing Thoughts

From concept to game

So the theme was "depths" and like always, I fell in love with an Idea I had for a losing theme. It's definitely a weakness of mine. So anyway, imagine if the theme was "keep it together" because wow this game would fit so much better. The concept: The moon has been destroyed, and your job is the use magnets or something to stick it back together.

Step 1: I needed the ability to make a bunch of amusing shapes for all the moon chunks, and I needed to be able to make them fast. I put together a very simple "triangulation by ear clipping" script for creating meshes from a list of points, and a script for the unity editor allowing me to take a list of vector 2's and simply drag them around the scene view to make shapes.

Shape.PNG

Unity's Polygon Collider 2D worked incredibly well with this! I whipped up a character movement script, some player animations, and got started programming the "magnets" to stick moon chunks together.

MoonReconProgramGif1.gif

And as usual, once the main mechanic was working, I became increasingly ambitious. I like giving my games a story, and if possible adding cutscenes. I began asking questions like, "Why was the moon destroyed?" which lead to "Gender Reveal Party." which I felt was such a good bit, my game would be significantly worst without these cutscenes. I like having boss fights, I like having acapella music, and suddenly I had a lot on my plate.

I forget the exact order of operations I took. I frequently bounced back and forth from writing music, drawing, and building the big level. I added a little shop to the game and fun artwork for all the characters who talk to you.

Once most of the level was put together, I began work on recording voice lines and making cutscenes. I started with the victory + credits cutscene and worked backwards. After that was the boss fight cutscenes, then programming the boss fights. Then the tutorial and programming the tutorial, and finally the introduction cutscene. With pretty much everything in place, I got feedback from my roommates, made some changes, and got ready for submission hour.

And I'll be honest, I was really happy with what I submitted. Until I watched another one of my friends play the game, and I realized just how bad my in-game tutorial was.

The critical blunders

I'd like to stress that the main mechanic of the game wasn't explained. In the tutorial. Oh dear.

So here's what happened. I wanted to explain an in-lore excuse for my anti-softlock features. You can "drill" through moon chunks that crush you, since you would otherwise get stuck. You can drill through any moon chunks you've already restored, because again, you could make an inescapable path. Additionally, there's a button in the HUD to simply teleport you to the surface of the moon if anything else goes horribly wrong.

So here's how the tutorial plays out. Before you are given the ability to move, you shoot a box in a way that will intentionally crush the player. Through this, the player learns it's okay to get crushed. Moving that box reveals a sign reading "Use WASD to move", and now the player can move. I then give the player a fun physics puzzle where you use a box under you to gain height. After that section, I introduce the wall climb ability with another sign on the background. Then the drilling through chunks mechanics with another sign. And now the player exits the tutorial, and begins to move around the surface of the moon.

At this point, the player should learn how to use the un-softlock button in your HUD. Through a voice line, "Mission command" says "There's now a button to take you back to the surface if anything goes wrong".

Blunder #1: This "un-softlock button" is in your HUD. All the other controls were keyboard buttons. Players ask "What button do I press if I get stuck?" While the dialogue just keeps going and making bad jokes. Despite the button in the HUD blinking, out of all 7 of the people I was able to watch play the game, one of them actually clicked it. One. I should have added a big blinking arrow pointing the the HUD or something. Again, despite this button blinking, it is eventually required to leave the first boss fight arena. When I saw comments of people getting stuck in the boss fight arena, I just felt awful.

Blunder #2: The whole "shoot moon chunks to re-attach them and fix the moon" thing wasn't ever explained. The core mechanic of the game. While there's a secondary objective of collecting "gravity gems" which unlocks the boss fights, I need to stress again and again, the main objective of reconstructing the moon was being overlooked. I don't think a single player I watched even tried shooting the moon chunks until 2 or 3 of the 4 gems were collected. That could've been at the end of the tutorial, forcing you to combine two chunks before leaving. Even better, force the player to use the HUD button to leave after that. Ahhh.

Blunder #3: There are multiple ways to softlock in the tutorial. The HUD button was supposed to be disabled during the tutorial, but you can "resurface" before unlocking the ability to move. Whoops! Also for some reason if you complete the first step of the tutorial before the opening dialogue completes, the dialogue engine locks up, eventually preventing the boss fight dialogue from playing, leaving the fight unbeatable (and leaving all dialogue missing!).

So at this point, I went from being incredibly happy with my game to being incredibly upset at myself. I pretty much refrained from playing and rating games because I just didn't even want people playing my game. I felt bad.

Even worse, this "lack of tutorialization" is specifically something that I have been recently struggling with in my other jam games, and something that I was incredibly aware of going into this one. My notes specifically say verbatim, "Full in-game tutorial for ANY unique mechanics. It must be explained." And I didn't explain it?! Unreal.

The bright side

Okay cool, with all that behind us, let's talk about what went well. Because despite those absolutely massive mistakes, I still think I did a lot of things well. For instance, the character design! I mean, just look at the villain of the game, "The Necromooncer":

Necromooncer.gif portrait.png

What a fun looking skeleton man. I also just noticed I accidentally moved part of the crescent he's riding with his animation... that shouldn't have happened, but oh well! But look at these guys!

portrait2.png

I mean, they're fun.

I think the music for this game also turned out really well. I've been trying to learn some music theory, and I added diminished 7th chords to the song, which absolutely slap. I mean, it really turned out well. The acapella music this time around also turned out well! I will say, recording one of the lines for the diminished 7th chords was incredibly difficult, because it really just feels like a flat note. I actually chose not to include one of my harmony tracks, since I rushed a bit and it fell out of sync with the other notes.

acapella.PNG

But I'm still really happy with how that turned out, and this is my 7th LD in a row with acapella music!

I also believe the jokes in this game are some of the funniest I've had in my LD games. The gender-reveal moon-explosion, Mission Command's 4th wall breaks, the bit about giving "Yellow" a fake walkie talkie, Yellow obtaining a real walkie talkie and Mission Command apologizing for that, the "Box Co" product placement, and of course the earth exploding at the end with another gender-reveal. I'm writing this before the results are live, but I'm optimistic about my humor score.

The graphics category has historically been an interesting one for me. Last Ludum Dare I had the critical blunder of making a computationally expensive shader for a minor background detail, which caused framerate issues that I didn't notice on my beefy PC. The art style of the characters clashed with the art style of the background forest, too.

This time, the background/foreground elements are a lot simpler. Partly due to not having the time to make them more detailed, but it also kinda works with the story as the game is canonically the set of a low-budget television show. Perhaps the lack of details works. I used a lot of colors from the NES color palette in this game. I didn't restrict myself exclusively to using the NES palette, but I enjoyed making my characters look like they could've come from a NES game.

pal.png

Granted, that's significantly more colors than a NES sprite could have without tremendous object overlapping, but I really like that palette.

Reflection part 1:

So if you completely ignore the fact that I didn't explain how the game works, it turned out really well! Let's see how I did when examining my notes from LD passed.

LD52: "Focus on a single mechanic."

The "single" mechanic of this game is the whole magnetic-moon-chunk-attachment mechanic. But to be honest, I kinda wish I did a little more. A few comments mentioned the single mechanic getting a bit stale by the end, and I wish I had done more with it, or at least added some more stuff to the environment to play with.

LD53: "Get feedback before the deadline."

The feedback I got before the deadline was mostly that my roommate wasn't aware of the cave leading to the first boss encounter, so I added big arrows. There were a few minor bugs they had that I fixed too, which is nice, but it completely missed "the big issues" mentioned in the critical blunder section. That might be partly my fault though, as I was pushed for time when getting this feedback, so I probably gave them too much direction just to speed it up.

LD54: "Full in-game tutorial for ANY unique mechanics. It must be explained."

So, we've already explained how I completely fumbled this one. Lots more reflecting to do here before the next Ludum Dare. This game had a tutorial, and I still dropped the ball, right? Perhaps if I made a tutorial that really highlights the core mechanic in a step-by-step way for the player to learn how it works, it could have been way more intuitive.

LD55: "Make sure the camera isn’t jank."

I'm really happy with the camera in this game. Sure, it's "stapled" to the player for the most part, but I think it's zoomed out at a good size, and the view map button has a really cool zoom out of the whole level. I think I should've bound that to "TAB" instead of "M" but oh well.

LD56: "Be reasonable with your shader effects."

So, the only real shader effect I had was a neat shockwave when two moon chunks collide. I think it looked cool, while not being distracting or computationally expensive.

And what did we learn this time?

I frequently find myself just repeating notes I took from previous game jams. I think it's pretty clear why I'd like to just repeat what I said in LD54. In the spirit of writing something new, I think the big takeaway from this game is to scope smaller. It sounds ridiculous to say it, but I think my ambition is really getting the better of me here. Maybe it's not even a scope issue, but the map I made for this game was huge. I keep looking back at "Inbox Fool" and a little bit of "Prince Charmony" where it took place in small rooms. Every time I make a game that happens in one large map, I just wish I structured it like those other games. Maybe that wouldn't work with the concept I had for this game, but I still could have made the map smaller. It takes like, 60 seconds to go from one side to the other. It's much too big. The map was time consuming to make, and it didn't really pay off the way I thought it would.

And now I brace for the results.

Results

Honestly, nothing to write home about. I'm a bit shocked I only scored 20th in audio... the main music track, acapella, and voice acting in this game I thought was some of my best. Oh well.

Reflection part 2

Reflecting on my score in graphics (3.85 stars, 80th place) I'm just now realizing how strong the graphics score for my LD56 game Prince Charmony was. I'm a bit shocked to see the score dip this much, though I guess in hindsight it shouldn't have been a surprise. There's basically no details, just a looping star texture for the background, looping moonrock texture for the foreground. This was my worst score in graphics since LD42, which... ouch. So note to self, forget everything I said in my Prince Charmony postmortem, go nuts with the art I guess.

I think at this point I need to ask if the cutscenes are worth it, because those take a lot of time to make, and evidently aren't really paying off. I was talking about "scaling back the scope" as the main takeaway from this one, and perhaps it's time to re-evaluate the kind of cutscenes I've been making.

I think the 4 stars flat in audio was the biggest shock. The past handful of LD games I had around 4.4's in audio. It's especially shocking since I thought I put some real music theory to the test in this one with those diminished 7th chords... I was really happy with how this music turned out. My LD43 game scored higher out of five stars in audio. You know, perhaps I could have added some sound effects... I'll keep that in mind for LD58.

Closing thoughts

Welp... I have more reflecting to do on this one than I thought I would. The bad tutorial in this game is specifically something I need to think about during my next game jam. It was pretty painful reading the comments of people getting stuck or softlocking, especially considering how happy I was with this game while submitting.

In other news: just like what I learned from Ribbon 2, the scores don't actually reflect my growth or skills as a developer. Yeah, it sucks having ratings similar to my games from 6 years ago, but I know the music I wrote in this game is better than what I wrote 6 years ago. Regardless of the scores, I'm happy with the game I made.

I feel like I've been saying this for a while, but I need to stop making platforming games during Ludum Dare. Remind me during submission hour of LD58 to slap myself if I upload another platformer. Unless its status as a platformer is ambiguous like my LD50 game, I've gotta start trying something new.

"Red, you still there? This is Mission Command. I'm just chiming in to let you know the studio ran out of money and we didn't get picked up for that second episode we were all hoping for. Anyway, we've got two trucks full of action figures with your face on them... I don't know if you are interested, but if you could take all of them with you on your way out I'd greatly appreciate it."

Ludum Dare 58

My 27th Ludum Dare's Postmortem: "Trivia Hart: Case of the Porcelain Tricorn"

"Dateline LD58. I had just ~~jumped in a bottomless pit~~ solved the case of the mayor's missing Porcelain Tricorn. I stopped by Barber's, got something to drink, and decided to review how the case went."

For a while now I've had a growing list of "bad jokes" that I've been wanting to throw in a game. My initial goal was to use as many of them as possible in a single entry, and the format that best suited that goal was a point and click adventure. In hindsight, (and I mean, really I should have seen this coming), a point and click adventure game requires a lot of art. Way more art than I had anticipated. As in, by 24 hours into the compo, I had barely started the programming of the game, because I had mostly (outside of writing some music) just worked on art up to that point.

Let's talk about my game Trivia Hart, and how it came together. I'll follow these bullet points:

  • From theme to Concept

  • A day worth of art

  • Wait- I recorded how many voice lines again?

  • The 3 big cutscenes

  • We do a little reflecting

  • Immediate thoughts on the game

  • What's the key takeaway from this game?

  • Results

  • Final Reflection and Conclusion

From Theme to Concept

In many previous Ludum Dares, I've done some brainstorming before the theme reveal based on the final round theme voting. I like to think it helps to have an idea for each theme before it's announced. Unfortunately, more times than not, what ends up happening is I fall in love with a singular idea that was for a losing theme, and then make that game anyway. This Ludum Dare, my best idea fit the winning theme.

Have you ever played a game on a “Game & Watch”? Every object has fixed positions on screen, and you can see silhouettes of objects that aren’t present. I thought it would be fascinating to make a point-and-click mystery game where you can see objects that aren’t currently present, as a means to gain information and solve puzzles.

My previous LD game dropped the ball with the worst tutorial I've ever made, so I immediately had a plan for the "tutorial" of this game. You need to cross a canal, but the bridge is out. By using the "metagame and watch" you can see a faded silhouette of a wooden plank crossing the gap. Two rooms to the left of you is a wooden plank using the exact same graphic of the silhouette over the canal. This is "Pajama Sam" levels of difficulty (suggesting that even a child could figure it out) and that's the plan. I've made confusing games in the past, and I want to avoid any and all confusion with this one.

A day worth of art

Typically, I spend at most 3 hours on the art to begin with. That gives me time to get character animations and floor tiles set up, where I would then drag the files into Unity and start working on the player movement, followed by the code required for the core mechanic of the game. Trivia Hart did not follow that pattern. At all.

I got to work by drawing the canal scene I had envisioned for the tutorial section. Here what I shared with some friends about 20 minutes after the theme was announced.

CanaStreet_20min.png

And after another 20 minutes, I had this scene put together too:

WestStreet_40min.png

As rough as it is spending this much time on each room, it gave me plenty time to figure out what the story of the game would be. While drawing one room, I can try imagining the purpose and shape of the next.

The story I was working on involved a stolen hat, and by using the "metagame and watch" your character can see the culprit was singing a song. That caused a bit of trouble, as I wouldn't be happy unless the sheet music was accurate, so after drawing three and a half rooms I already started writing music, which I don't normally do that early.

Jingle.png

Since I like adding an acapella track in my LD games, I had the idea that you give the sheet music to an acapella group who can tell you more about the song. The story was coming together, but again, I needed to write more music so the acapella group could have their song in the background of their room. I didn't record the acapella version yet, but putting notes on a timeline was enough to draw their background.

Barbers.png

I was honestly on a bit of a groove writing the music, so I continued and put together the first half of the main "outdoors music", though that song doesn't need sheet music drawn anywhere.

I drew a bunch of other rooms in back/white, but it was time to color them in. I was going for a noir detective vibe, night time, rainy street. The process of going from this to this: ...

Transition.png

... was time consuming. But god dang, was it worth every second. I've never drawn light reflecting on wet surfaces like this (thank god for art references) and I honestly impressed myself. "Only like, 20 more rooms to color in. heh heh"

Transition2.png

Transition3.png

So at this point, I'm already 18 hours into the allotted 48. I still haven't done any programming, and I still haven't recorded any dialogue. It was time to get to work on the audio.

Wait- I recorded how many voice lines again?

At this point, it's about noon (EST, so 18 hours after the jam started). Last night, I wrote most of the story, and now it was time to record it. I do a lot of audio recording/editing for my youtube videos, so I have a pretty good workflow for this. I recorded myself saying every line two or three times, and keep the best recording. A few lines I needed to re-do, as I initially made the mayor have a real scruffy voice, but changed it to be closer to the voice of "Stan" from the Monkey Island games.

After cleaning up all the audio and separating each chunk of dialogue into it's own audio file, I had 50 items in that folder. Oh no. So subtitles are absolutely out of the question, and not happening this time around. Whoops!

With the art and audio taken care of, it was finally time to put things in Unity and make a real game.

The 3 Big Cutscenes

The best part about making a point and click adventure is that the programming for it is incredibly easy (in theory). You don't need a physics engine, or tight controls with smooth camera movements... You just need to be able to click on things and have something happen.

My main "Interact.cs" script pretty much works like this: In the unity inspector, I can choose if this object takes you to a new room, or if it plays a voice clip. Then I added logic for locked objects requiring keys, or as I called them "Arbitrary Checks".

You cannot move to the room on the right of the canal until the board is placed. How do I know the board has been placed? I added a script to the audio clip that plays when the board is placed, setting the "arbitrary check".

Then I added the ability to interact with the items in your inventory, which basically works by having an array of voice lines corresponding to each item ID, and if the entry into the array is null, your character just says "Well that didn't do anything."

And that took up pretty much all of Saturday. Sunday would be spent connecting everything together, which was relatively pain-free except for 3 key cutscenes:

Cutscene 1: The code to the safe

Spoilers in case you haven't played it yet, but in this cutscene, the antagonist is revealed. Then they shoot and kill Trivia after she reads the note. You can then respawn with the knowledge of the code.

So here's the issue. Literally every other cutscene up to this point has just been audio. Nothing really happens on screen mid-dialogue. So how do I make this work? The script for this cutscene was basically just a timer that changes the artwork and animations of characters to sync with the audio, then the camera moves to a new screen with a respawn button. Between drawing the villains animations, the bullet animations, and programming all of it, that somehow took like, 3 hours to put together. Oh no. (I now have about 3 hours until the submission deadline.)

Cutscene 2: Dodging the bullet

Before I made this cutscene, I just realized that I hadn't actually implemented the pause menu / title screen stuff. I took maybe 30 minutes to get that all put together, with a really cool visual effect on the title screen where there's a "lens" to see the game & watch alternate texture of the title screen. It's an effect I'm really happy with. I wish I drew a silhoette of a mystery-man with the tricorn though. That would've been cool.

Anyway, back on day 1 I drew this wicked cool animation of Trivia Hart jumping over a bullet:

TriviaDodge.gif

There is so much with the art of this game that I had never done before, and I'm amazed at how good it looks.

Well, now it was time to implement that cutscene.

I wanted the player to be able to fail to dodge the bullet, causing them to die and respawn, similar to the previous cutscene. Again, the script for this was pretty much just a bunch of timers, and a custom interact-object that causes the player to jump.

I don't know how it went this rough, but there were issues. Making the code for the jump, and the timers for the dialogue and shooting, and second dialogue, and making sure the player can't skip the dialogue... This is the classic "48th hour fatigue". Except it was hitting halfway through the 46th hour. Anyway, I got it working, but I cannot believe how long it took, and how little time I had left. (One hour to go.)

Cutscene 3: The choice at the end of the game

The game ends with you confronting the collector, where he gives you an ultimatum. You could either throw him in prison, or you could jump into a bottomless pit! "Ooh, who knows what sort of cutscene I have planned for that! You could be missing out on content!" I gotta be honest, It's shocking how many people jump into the pit on their first run.

Actually implementing this wasn't too bad, as I didn't need to make custom animations. Just a timer to darken the screen and change the background a bit. But in case you haven't been keeping track of the time, I now have 1 hour before it's time to submit. And I haven't actually programmed a large part of the game's other sections. (The interior of front burger was still unimplemented, and I also had plans for a small cutescene involving the cashier running into the kitchen.)

Scrambling, I program the interactable objects in "Front Burger" and "The Club". At this point, actually testing the full game takes about 3 minutes due to the unskippable cutscenes, so I genuinely don't have time. I removed the "animation" from the game & watch view of the cashier in Front burger running away, and figured he would just instantly disappear instead. Oh well, no time.

And I just realized I never recorded the audio for the ending cutscenes. Both of them, since I decided there would be two.

Did I say three cutscenes? I meant five.

So there was supposed to be more. In the "Spike Pit ending" the collector was going to say "Wow, I can't believe you fell for that. Do you see this button? This button makes this the canon timeline. beep. This is canonically how the story goes now! ... ... ... What do you mean respawning?. OH NO!" and then it would be a similar ending to the "true" ending. I didn't have time, so instead you just fall in the hole and the game ends, HA!

And at this point, I had absolutely no time left. The "true ending" was haphazardly recorded, and the art for it was drawn in about 2 minutes, except of course for the Porcelain Tricorn which I drew back on day 1. That thing looks glorious, and it's funny how the rest of the cutscene looks like trash.

Finale.png

I also just realized I forgot to draw the bottom half of the mayor's tie, so now he just has a black oval on his neck. Oh well.

And just like that, the game was ready for submission!

We do a little reflecting

Something I've done in my past many Postmortems is write down what went wrong, and I like to have one "key takeaway" from each event, and reflect during future events on those notes and how I've either taken them to heart or dropped the ball.

Let's work backwards here:

LD57: "Scope Smaller, or break the game into small rooms."

Lol. Lmao even.

Yeah, so I certainly didn't scope small. I thought I did, but foresight isn't my specialty. I did however break the game into small rooms, just in a very different way than I usually do.

LD56: “Be reasonable with your shader effects.”

The only shader effect in this game was used on the title screen, which I thought added a lot. Nothing too dramatic, I think I was being reasonable.

LD55: “Make sure the camera isn’t jank.”

The camera couldn't possibly be jank if there are only so many fixed positions for it. Makes you think.

LD54: “Full in-game tutorial for ANY unique mechanics. It must be explained.”

This is where I dropped the ball many times before, and I will probably do that again in the future, but not today. I had a plan for the tutorial, and so far everybody seems to get it.

LD53: “Get feedback before the deadline.”

I think I've said this in too many of my postmortems since writing that line down, but (and I'll say it again) I didn't have time to get feedback on this one. Honestly, a skill issue on my part. So- in classic 100th_Coin postmortem fashion, what would this feedback have taught me?

  • The "coupon puzzle" had a glaring issue. The man who gives you the coupon and tells you what to do with it only says that line once, and you can no longer interact with him. Oh, and this line can be skipped by accident if you click while he's talking. This has lead to a few people getting stuck.

  • There were a few hitbox issues with some of the interactable objects. Since clicking on things is (and I cannot stress this enough) the entire game, having hitbox issues immediately lead to a few softlocks, as objects would sometimes just not let you click on them.

  • The buttons you click at the end of the game to choose "jump in spike pit" or "turn him in" were in the wrong graphical layer, and could sometimes end up behind the room graphics, displaying neither option, or perhaps only one of them.

LD52: “Focus on a single mechanic, and let the story come second.”

In a way, the "metagame and watch" mechanic drove the story, so I think this game passes that one. I mean, I did not at all let the story come second in a point-and-click adventure game, where the story is critically important, but the "metagame and watch" mechanic was also critically important in designing the puzzles. I think this was the best balance of story and mechanic I've had.

I typically stop there in my postmortems, but you know what? let's keep this train rolling. I'd like to touch on a few of my older notes.

LD51: "Voice acting is fun, and I even made an acapella track!"

This was my 8th time making an acapella track for a Ludum Dare game, and I don't see myself stopping!

LD50: "The exhaustion of the 48th hour is real."

I honestly could have used that advice a bit more with this one. I spent pretty much all of sunday rushing and I was feeling it pretty hard when I realized I still needed to make the ending cutscenes.

LD49: "The compo rules do not lend themselves well for parody"

Perhaps not gameplay-wise, but this game was a very subtle parody of The Maltese Falcon. One of the ending lines in the true ending is:

"Say, what's so important about that hat anyway?"

"It's the stuff that dreams are made of."

... "What, porcelain?"

Where It's the stuff that dreams are made of is the final line spoken in The Maltese Falcon, referring to the titular item. When I watched that movie, all I could think of was "What, lead? Lead is what dreams are made of???" So including my stupid "What, porcelain?" joke makes me chuckle.

Digging through ye old archives, I found this note I took...

LD39: "If you have a huge list of unique items, add some splash text to explain what each of them are."

And you know what? I should have done that. This game had a good handful of items you can pick up, and outside of a voice line when doing so, they aren't really explained further.

And a classic...

LD33: "Perhaps spending only 20 minutes on art wasn't enough."

Talk about character growth.

Immediate thoughts on the game

So I'm writing this paragraph about a day after submitting. I honestly think this is the best art I have drawn, ever. Not even just for Ludum Dares. I experimented a LOT with the lighting and character designs, and I couldn't be happier. In the week leading up to Ludum Dare, I spent a lot of time just drawing characters trying to improve my art. For the first time, I've actually drawn noses, eyebrows, and exaggerated chins on characters. I was looking forward to having more close-ups with characters in this game, and unfortunately that didn't happen, but perhaps next time.

This game was a lot. Just the amount of drawings, and the amount of audio I had to put together is so much. I was worried that the gameplay would be lackluster and feel empty. I've never done a point and click adventure before, I typically make platformers. Though, I recall my previous postmortem saying "I need to stop making platforming games during Ludum Dare. Remind me during submission hour of LD58 to slap myself if I upload another platformer." And I can proudly say this isn't a platformer. For the first Ludum Dare in a while, I really think I learned a lot from making this game.

What's the key takeaway from this game?

I want to humorously riff off my note from LD33 by saying, "Perhaps spending 20 hours on art was too much.", as we now have an upper and lower bound for what I find to be an acceptable range in time to be spent on graphics.

To be a bit more serious though. I think if there is any singular "note for next time" that can be taken from this game, it's that making a game in a genre you have never made before is exhilarating. I'm just thinking back to LD55 where I said "The majority of this Ludum Dare was spent writing a cutscene engine. That was pretty far from the most fun I’ve had with a game jam." While on the flipside, this time I also made a game that is primarily cutscenes and I had a blast while doing it.

It was fun to make, it's been fun watching others play it, and I honestly don't know if I ever want to make another game "in my comfort zone" during a game jam again. I was about to ask "Why did it take me so long to realize this?", But I think it's because the results from my LD53 game, "Inbox Fool" skewed my perspective beyond an event horizon. It was the best I had ever done, and it was so far within my "make-a-platformer" comfort-zone that I've been trying to replicate its magic by still staying in the platformer comfort zone. It was the Ludum Dare that was immediately after I took the note: "Focus on a single mechanic and let the story come second", a note that has defined my past 6 games. I think I've been trying too hard to make a unique game, while completely sabotaging myself by limiting the genre. I think that's where I went wrong during LD57, LD56, LD55, and LD54.

Don't get me wrong, I've made some really cool platformers in my decade of Ludum Dare, (most recently: RAMnesia, Stronkey Kong, Watch Out, Inbox Fool, Ribbon 2, Prince Charmony, and The Moon Reconstruction Program) but I seriously need to branch out. Regardless of how this game scores, I had a great time making it, learned a lot, drew some art that I'm really proud of, and made a game in a genre I had very little experience with.

So yeah. 27 Ludum Dares in a row, 8 Ludum Dare's in a row featuring acapella music... Let's get a streak going of making games out of my comfort zone too. Let's get weird with it.

Woah!.PNG

Wow! This was my first time getting single digits for Graphics, and also for Mood. I'm really really happy with these results. I kinda hyped myself up while writing this, talking about how branching out of my comfort zone was super important for me, and I'm really glad it paid off. I'm taking this as confirmation that everything I wrote about in the "key takeaways" is true, and branching out of my comfort zone is the move to make in the future.

Final Reflection, and Conclusion

This Ludum Dare I made a point and click adventure game for the first time. It's a genre I probably haven't played since I was 8, and it was honestly really nostalgic for me to make a game inspired by the games I have vague memories of.

Going in, I had the goal to simply not make a platformer. I'm happy with the game I made, and I learned a lot. Mostly the fact that point and click adventure games require insane amounts of art and voice lines. But the real lesson here was just how much fun it was to create a game in a genre I'm unfamiliar with. I absolutely want to do this again in future Ludum Dares.

And I met two goals of mine with this game, being top 10 mood and graphics.

Thank you to everyone who played, thank you for all of your feedback. This was a good one. I can't wait for next time.

Ludum Dare 59

My 28th Ludum Dare's Postmortem: "Winnerman Scams a Game Show"

After obtaining the washer and dryer set, three cans of Chef Boyardoes, and a big thumbs up, Winnerman heads home to reflect upon his actions.

Giving out goofy awards to the games I rated.

The recent news of Mike planning to stop hosting scheduled LD events had me feeling a little nostalgic for the old website. Some friends and I decided to give (in addition to the feedback) a goofy "Award" to each game we rate. (Y'all remember that feature of the old site?)

GottaCollectThemAll.png

It was fun to scribble something together for those, and a lot of people seemed to appreciate it. I also like how I can look at all of these and remember the game I drew it for. I'm definitely doing this in future jams as well.

Goals for Ludum Dare 59:

Over the past decade of Ludum Dare, I've made way too many platformers. With that in mind, here were my goals.

• Do not make a platformer.
• Add some really cool screen transitions.

Alas, I only achieved one of these goals. I ran out of time, so the screen transitions didn't quite make the cut. But let's see how the rest of the game turned out.

The concept:

My interpretation of "Signal" is a replay device sending input signals to a console. But since I'm not actually emulating stuff, we just have a TAS timeline for you to supply inputs, undo mistakes, and frame advance with, etc.

I've been doing a lot of TAS shenanigans lately, so this seemed like a pretty fun idea to me. TAS.png An example of an NES emulator with a TAS timeline supplying inputs.

Though I think I can safely say this was my most ambitious Ludum Dare in a while. I don't think I realized when I came up with the idea just what would be required to pull it off. If the player is able to frame advance, or frame rewind, then I'm going to need to make a fully functional system of savestates to go with the timeline that I need to program.

Webpage_Screenshot1.png How the finished game looks with the timeline on the right.

How does the timeline work?

I just recently added a TAS Timeline to the NES emulator I've been working on, so I had a plan on how this would work. First of all, the timeline will control the entire rest of the game. The timeline's frame advance function will trigger the Update() functions inside every minigame's script. This keeps the game on tight rails, so the user can pause, frame advance, or rewind to their heart's content. But rewinding would actually be a doozy. In order to step backwards, you need to know what the state of everything was on a previous frame, which means we need to record this info as "Save States".

How do save states work?

In an ideal world with infinite RAM, I could just save every variable of every script on every object in the hierarchy, then load all that when you jump to a previous frame, and voila! But knowing that most computers don't have infinite RAM, I'll need to optimize the savestates.

This game has 6 minigames, (and a handful of "cutscene" screens between minigames...) And each of them runs independently of each other. These minigames all have their own unique scripts too. Ideally I would make a parent "minigame class" which the games would inherit stuff from, but this was made in a weekend and I don't got time for that!

Instead, every class has their own SaveState() and LoadState() function, which the Timeline.cs class can run for each game individually. It's sloppy, it's not in a loop (because I didn't do that inheritance thing), and it takes multiple hundreds of lines to get this working, but hey, it worked!

Let's take a look at the SaveState() and LoadState() functions for the "Typing Minigame", inside TypeGameManager.cs

public List<byte> SaveState() { List<byte> State = new List<byte> (); State.Add (PressedButton); State.Add (AppearTimer); State.Add (Chet.AnimTimer); State.Add (Chet.TieSpinAnimTimer); State.Add (Chet.CurrentAnim);
State.Add ((byte)(GameOnScreen ? 1 : 0)); State.Add ((byte)TypedWord.Length); State.Add ((byte)(Submit ? 1 : 0)); State.Add (Timer_Seconds); State.Add (Timer_SubSecond); char[] CharArray = TypedWord.ToCharArray (); for (int i = 0; i < CharArray.Length; i++) { State.Add ((byte)CharArray[i]); } return State; }
Here we're creating a list of bytes. This list will contain all the important info that needs to be initialzied when loading a state. We record what button was most recently pressed, so when we load the state we can set up which button needs to be graphically pushed down. We record some timers, which are bytes and not floats! Instead of being sane, the timers in this game are all simply a frame count as a byte! I record some animation info for Chet, the game show host. I record a boolean tracking if the on-screen keyboard should be on screen or not, the number of characters the player has typed so far, if you have submitted or not, some timers, and then finally each character in the typed word individually.

And then when we load this state, we need to make sure the order is the same:

``` public void LoadState(List State) { PressedButton = State [0]; for (int i = 0; i < AllTheButtons.Length; i++) { AllTheButtons [i].SR.sprite = AllTheButtons [i].Unpressed; AllTheButtons [i].TM.transform.localPosition = new Vector2 (0, 0.08f); } if (PressedButton != 255) { AllTheButtons [PressedButton].SR.sprite = AllTheButtons [PressedButton].Pressed; AllTheButtons [PressedButton].TM.transform.localPosition = new Vector3 (0, -0.047f, 0); } AppearTimer = State [1]; AppearTimerFloat = ((AppearTimer + 0f) / 60f); Holder.transform.localPosition = new Vector3(0,DataHolder.CustomLerp(-13,0,AppearTimerFloat,1),0);

Chet.AnimTimer = State [2];
Chet.TieSpinAnimTimer = State [3];
Chet.CurrentAnim = State [4];
Chet.ForceAnim (Chet.CurrentAnim);

GameOnScreen = State [5] == 1;
int CharCount = State [6];
Submit = State [7] == 1;
Timer_Seconds = State [8];
Timer_SubSecond = State [9];

TypedWord = "";
for (int i = 0; i < CharCount; i++) {
    TypedWord += (char)State [10 + i];
}
TM.text = TypedWord;

} ``` The first byte we recorded was what button we pressed, so that's the first byte we read off the list. Then to initialize the graphics for the button being pressed, I iterate over all the buttons and set them to "unpressed". Then I set the graphics for the target button, assuming it exists. (A value of 255 meaning we haven't pushed anything yet.)

I pull off some timers and move the on-screen keyboard to where it should be with that timer value. You'll notice that since the timers are all stored as bytes, I just create a float out of the value and pass that into a Parabolic Lerp function I made.

I pull off the animation data for Chet, and run a routine to initialize his animation stuff.

I pull off the remaining stuff, and each character individually.

And just like that, we have a fully functional savestate... for one of the minigames. I had to do this for each minigame, as well as the intermission cutscenes to record how far the dialogue is.

The absolute worst one of the minigames to make this savestate info for was the basketball one. I'm using Unity's built in physics for the basketball, and finding out how to transform that data into individual bytes was a nightmare. I basically attempt to convert the float to a ushort and record the low/high byte separately. In hindsight, does Unity3D support signed shorts? I bet I could just cast a float to one... I way over-thought it.

float BigVelX = Mathf.Floor (BallRB.velocity.x * 512); // 65536/512 = 128. The ball will move that fast Ball_VelX_Hi = (byte)((Mathf.RoundToInt(BigVelX) & 0xFF00)>>8); // Pull off high byte, shifted over. Ball_VelX_Lo = (byte)(Mathf.RoundToInt(BigVelX) & 0x00FF); // Pull off the low byte.

Now I have the horizontal speed stored as an unsigned short. Converting this back to a float was a bit messy: bool NegateX = false; if (Ball_VelX_Hi >= 128) { // If the speed was actually negative. NegateX = true; Ball_VelX_Hi = (byte)(256 - Ball_VelX_Hi); // Make the number positive. Ball_VelX_Lo = (byte)(256 - Ball_VelX_Lo); // We'll multiply the float by -1 later. } BallRB.velocity = new Vector3 ( (0f + Ball_VelX_Lo + Ball_VelX_Hi * 256) / 512f, // We multiplied by 512 earlier, so divide by 512f (0f + Ball_VelY_Lo + Ball_VelY_Hi * 256) / 512f, // we did this for the Y axis too. 0); if (NegateX) { BallRB.velocity = new Vector3 (-BallRB.velocity.x, BallRB.velocity.y); // Flip if negative. }

So yeah that sure was something. It worked though!

The blunder

It wouldn't be Ludum Dare without one.

The biggest issue was the Duck Hunt minigame, by far! So the game is designed to tell you hints whenever you fail a minigame. However, these hints only arrive if you let the failure cutscene fully play out. Every time I watched someone play the game, they fail the minigame and instantly pause the timeline.

Oh no!

It also doesn't help that this game has the biggest red herring ever, and I didn't have time to record specific dialogue when you actually shoot the duck. So now everyone successfully shoots the duck and the game show host says "Oh, it looks like Winnerman doesn't know how to use a gun!" But like- they hit the duck. Chet, what do you mean they don't know how to use a gun! And everyone pauses the timeline when he starts saying that, so the never get to the part where Winnerman says "Is there something else I can shoot?"

So yeah- that's a pretty big blunder. Also somehow the "Winnerman's Live Reaction" button broke during that minigame, because of course it would.

Second Blunder

Panic.png My reaction upon watching people play the boss fight

The boss fight in this game was a bit rushed. There's not a lot of clear direction what you need to do, and also I locked the timeline, including the Winnerman's Live Reaction button. So this is the only point in the game where you can't press a button to figure out what to do, and it's less than obvious. Chet Quizzly has a big eye that you can shoot, but he has a sheild, so hitting the eye does nothing. I didn't add splash text saying "Blocked!" or anything, so someone could easily assume you just gotta shoot the eye enough times.

Instead, you need to shoot Chet's hand which he's using to manipulate the timeline. I had plans for the fight to continue after that point, as Chet would say something like "You know- without this hand even I cannot undo time!" and then there would be a final one-shot duel. I ran out of time, so shooting his hand just ends the fight.

We Do a Little Reflecting:

In classic 100th_Coin postmortem fashion, let's talk about all those notes I take for myself and how I completely forgot about them.

LD58: "Make a game in a genre you are unfamiliar with."

Last Ludum Dare I made a point and click adventure, and it was my first time doing that. The key piece of advice was to just try anything that isn't a platformer. No platformers. And I can happily say I got experimental with it, and this isn't a platformer. Woo hoo!

LD57: “Scope Smaller, or break the game into small rooms.”

Scoping smaller might as well not be in my dictionary at this point. It wouldn't be Ludum Dare if I wasn't pushing myself to my absolute limits and scoping as stupidly large as possible.

That being said, this game was broken into a series of individual rooms, so you can say I followed some of that advice, as least.

LD54: “Full in-game tutorial for ANY unique mechanics. It must be explained.”

YES! I had a tutorial, and people appear to understand the mechanic when they play the game. YES YES YES!

LD53: “Get feedback before the deadline.”

Per the tradition, my roommates were out of town and I didn't have time to reach out to others for testing. heh.

Let's see what that would have taught me though:

  • The Duck Game's red herring need to have different dialogue options.
  • The boss fight needs to be visually clear that shooting the eye is not the solution.

Basically the stuff I mentioned in the blunder sections.

LD52: “Focus on a single mechanic, and let the story come second.”

Now this is awkward. This note defined some of my best Ludum Dare games, but in my post-platormer era, I'm worried this note on letting the story come second is in direct conflict with the games I'm starting to make. The story here was directly tied to the single mechanic, and I think I said something very similar in my previous postmortem.

I'm not ready to remove this notes from the reflection pool, but these are feeling less relevant, and I'm not sure what to do about that.

And for fun, let's dig into ye old archives like last time to see what other ancient notes applied here:

LD50: “The exhaustion of the 48th hour is real.”

Good lord, it's wild how many of my LD Games seemingly fall apart in the final few hours. I didn't have much time for play testing this one, really just hoping that it all works out. When I finally got to test it out, I realized an issue that occurs when using the timeline to go backwards beyond the minigame you are currently in. Specifically, suppose you are currently in minigame B, and go backwards into minigame A. once minigame A ends flowing into Minigame B, you would find that minigame B was not reset. The savestates are only recorded on frames in which the minigame is active, so loading a frame before the minigame was loaded likewise cannot reset the minigame with data that wasn't recorded. My solution involved making an "initial savestate" for each minigame, but wow I didn't want to have to do that by hand (because when you count the intermission cutscene savestates as well, it was like- 20 things needing to be set up or something.) And automating the process of creating these initial save states was not easy either.

LD41: "Sound effects are super important, especially for simple feedback like hitting enemies"

You know- I could have used that note during the boss fight.

Those are pretty much the only relevant ones this time around.

So what's the takeaway?

What did I really learn this time?

I think it's something I should have picked up on during many previous jams, but I'm finally saying it. I need to make a Minimum Viable Product way earlier during these jams. I keep waiting until way too late before I start playtesting the game as a whole. All the biggest issues that I keep running into during the final few hours wouldn't be that big of an issue if I wasn't so fatigued by the time I discover them.

If I'm being realistic, I don't foresee myself scoping smaller. It's not what I do. But In an effort to prevent the burnout of the final few hours from destroying me completely, I need to make something playable long before the deadline. Even a version of this game with two minigames connected would have helped me find the null-savestate issue when backtracking, and I would have found it with a lot of time to spare, and before I had to set up an initial state for 20 objects.

Reflection 2: How'd I do boogaloo.

So this was an obvious artwork downgrade from my previous entry, and it's not that surprising. I didn't spend 20 hours on the art, I spent 20 hours on setting up the timeline mechanic and save states.

downgrade.png

And while this wasn't my best artwork in an LD game, I still think my art is improving. For the first time ever, I drew a "goofy face" that actually made me chuckle out loud.

GoofyWinnerman.png Stay mewing, Winnerman.

This was my ninth LD game to have acapella music. I think this game had some good jokes, and I think this was some of my best voice acting in an LD game. I put some real emotion into Chet's final lines during the Duck Hunt game. I wish I saved a bit more time for music composition, as that was rushed during the final few hours. This resulted in myself re-using the same music track for the title screen, and there was no music at all in the victory cutscene. Oh well!

Results:

3rd in Innovation

I also got 5th in humor, and 10th in audio. Not bad.

After discussing the results with Winnerman, we both agree that this game has won the Third Place is Still Winning award!

WeTakeThose.png

I'll also treasure the awards my friends drew for me, including the Most Unshootable Duck award from @jeremy-ryan, and the Duality of Cherries award from @mathstr0fficial!

friendawards.png

Final reflection

I'm pretty happy with the trophy in innovation. This is the best I've done there since Ribbon back in LD47.

I'm also happy with the game as a whole. This was my second Ludum Dare in a row where I forced myself to avoid making a platformer, and I'm going to keep doing that as much as I can. As with last time, I feel like I learned a lot while making this game, which I find incredibly important.

I've been thinking a lot about my LD51 game. Ignoring the fact that it is a platformer, I remember that game being feature-complete in just a few hours, while the rest of the jam was spent building the levels, finding myself with a lot of free time at the end, and just decorating or adding accessibility features. I'm not yet sure how to make a non-platformer-game efficiently, and I think that's something I need to work on. This game was rushed until the deadline, and I think it really could have used some polish.

In conclusion, not my best work, but I got the opportunity to combine two of my hobbies into a TAS-themed video game, and I think that's rad. Winnerman might not have won the game jam, but he'll always have the washer and dryer set.