So! It's been long enough for me to reflect on how LD41 went for me, and now it's time to do a post-mortem!
First, I'm going to ask that you play my game. You don't have to rate it if you don't want to, but if you're going to read this, you should play the game first because of spoilers.
You can play it here: https://ldjam.com/events/ludum-dare/41/ld-41-entry-red-v-s-blue
You can also download the source code there, which includes the custom framework I've been working on for years and make all my games with! It relies only on open-source libraries so you should have no trouble getting stuff to run.
Still reading? Okay!
One of the defining characteristics of doing a Ludum Dare is, of course, screwing up. Either the theme sucks, or you just can't come up with an idea, or you bite off more than you can chew, or things just don't cohere into anything fun, or you don't manage your time well, or...you know how it is.
But I can't talk about any of that this time, because for me, this LD went almost perfectly.
First off, I loved the theme! It was the only one of the final list that I thought would be interesting to do. And second, I came up with an idea right away - to mash-up an RTS...

...with a dating sim.

Wait, Anthony. I played your game. You mashed up RTS with clicker mechanics.
Ah, but then you didn't play all the way to the end. At the end of the timer, the game asks if you want to parlay with the enemy general. Say yes and suddenly the game is a dating sim! I felt that hiding this twist as much as possible would make it more fun for the player - in fact, I even hid the game's real title, which is 'Red Loves Blue'.
So how did I get that idea? Well, I love RTS games and will try to make one whenever possible, so that was a natural. As for the dating sim, my two daughters have been playing Doki Doki Literature Club a lot recently so that's where that half came from.
Speaking of my daughters, when I ran into the living room and described the twist, they both broke out laughing, which let me know I might be on to something. I was originally going to title the game 'Red (heart symbol) Blue' but I felt that was too much of a giveaway. I finally hit on Red Loves Blue...but at first you can't see the l, o and e in the title, so it looks like Red Vs Blue. Only after you've played the dating sim once do the other letters fade in.
So, RTS and dating sim. I sat down and wrote a design doc...and it just kind of poured out of me. If you want to read it, it's included in the source code. I had absolutely no problems coming up with the design for the game. Again, I'm not sure who blessed me this LD, but I'm grateful.
I started on the dating sim half first, because I'd never done that before. It's a very simple process - ask the enemy general questions, and if you ask them in the right order he starts to open up to you. There are 15 questions, each worth 10 points. Get a score of 100 or more and he chooses not to fight you and you both live happily ever after!
Even though I hadn't done it, it wasn't hard to code and soon I had the dating sim mechanics down. Then it was time to start on the RTS, but I'd been up a while so it was definitely time for sleep.
As I fell asleep, I thought of a new twist I could add to the game to hide the surprise. The RTS side was going to be very simple, gather resources and use them to build and upgrade units. I realized that I could add clicker mechanics to the RTS side to make people initially think that it was an RTS/Clicker mashup instead of RTS/Dating Sim.
So I woke up late Saturday morning and started on the RTS side. I've done RTS mechanics before so they weren't that hard to do. Adding clicker mechanics meant a lot of UI work and finding a good layout took a while. But eventually I had the game pumping out three unit types: riflemen, commandos and grenadiers. The mechanics are rock-paper-scissors, which commandos killing riflemen, grenadiers killing commandos and riflemen killing grenadiers. You could also upgrade the strength of each unit type, upgrade your mine to click faster, and upgrade your mine to produce more Cyberdinium per click.
This also required some art work, which I am terrible at. The units in the game are all semi-traced from units from other games like Cannon Fodder and Command & Conquer. I used those units to get a basic shape and then drew details myself.
My initial thought was to randomly generate an enemy army, populate it on the screen and just have the two armys run at each other. But I knew that would end up requiring a lot of work to get exactly right. I also felt that it was rewarding the wrong part of the game - the point of the game is to stop the war, not fight it!
So instead I randomly generated an army in memory and then ran a comparison on the player's army before declaring a winner. Of course, this only happens if you refuse to parlay or fail at charming the enemy general.
Speaking of which, the general provided yet another problem - I wanted something better than just a frowny face, which is what I started with. I finally found a nice pic of Max from Advance Wars and did the "trace the shape, then fill in your own details" thing again. It turned out pretty well!
And once I got the two halves of the game effectively merged, I had my daughter play it. She liked the clicker mechanics and the dating sim made her cringe out of her skin - exactly what I intended.
Then I needed at least some sound. Trusty BFXR provided the sound effects. As for music, I used a website that generates random music called Abundant Music: https://pernyblom.github.io/abundant-music/index.html
While I liked the music it generated, I had two problems: first, it was in MIDI and SDL2-Mixer doesn't play MIDI files. Second, Abundant Music really likes to use these high brassy MIDI horns in certain places.
I fixed the first problem by using a program called SynthFont to convert the MIDI to OGG format. I initially was using Audacity to try to tone down the brassy horns in the sound, and then realized that SynthFont will let you turn on and off any instrument before you export. Which allowed me to get the music sounding much better!
By this point I had a few hours left, so I did the traditional "pack up an archive, post it on my website, ask someone to try it out, realize I forgot a vital library, make another archive" thing and wrote up the post for the game. I didn't really have time or the artistic skills to make a real title screen, unfortunately.
So we've talked about the good stuff. What about the bad?
Well, first, while my framework has some very good GUI code, I didn't have time to make any graphical buttons for the game. I just relied on the box/text buttons that the GUI code falls back to. This caused a lot of people to not realize that the buttons were, in fact, buttons.
Second, my initial plan was to make the game at 512x384 resolution (pixel art being about the only art I can halfway do) and then blow it up to 1024x768 at the end just by scaling everything up. But the scaling code didn't work properly and I didn't have time to debug it. Which is why people are stuck playing it in 512x384. Sorry.
Third, I may have done TOO good a job in hiding the twist. I read some comments from people who pretty clearly never got to the second half of the game. It would have been better to not give the player a choice as to whether or not they wanted to parlay.
Fourth, the dating sim is too hard because there's not enough feedback about which answers are good and which are bad! I tried hard to make the answers obvious from the text, but I really should have color-coded them to help players out. It routinely took half an hour or even longer for players to figure out how to win the dating sim.
And fifth...I should have put in the battle. Everybody has asked for it, I should have put it in even if it was buggy. There's this huge buildup; subverting that completely made the game unsatisfying for some people.
But overall...wow. The design came fast, my framework code cooperated, I implemented new mechanics quickly and I managed my time well. It's by a mile the best LD experience I've ever had and now I can't wait for the next one!