F1Krazy

Ludum Dare 48

BreakEven is out now!

I'll preface this by saying: I was not able to fix the AI and collision detection issues that plagued me for the whole of yesterday. The game is broken, but still playable, and I hope people will play through it anyway. The storyline makes up for the wonky gameplay IMHO.

With that caveat out of the way: my Ludum Dare 48 entry, BreakEven, is now ready to play! Give it a go here! It's also available on itch.io, but for some reason I'm unable to add a link to it on my game page.

Can you steal enough money to pay off your nation's debts...?

title.png

BreakEven is now (mostly) glitch-free!

Having completely rewritten the collision detection code that was causing most of the game's issues, and fixed a couple of bugs elsewhere, I'm delighted to announce that BreakEven is now working as intended and can be played without serious issue. After all the struggles I had with this game, this is a major relief for me.

BreakEven can be played here. If you've already played and rated it, I suggest giving it a second look.

title.png

BreakEven - The Techy Stuff

First of all, a big thank you to everyone who's played and rated BreakEven so far! I plan to start rating other people's games later today - I have next week off work, so I'll have plenty of time to devote to it.

For now, though, it's time for my usual breakdown of some of the more technical aspects of BreakEven. Considering what a nightmare it was just to get this game working, this ought to be interesting.

screen1.png

The AI

Enemies that can freely move in 2D space are something I have never done before, and something I figured I should probably learn how to do. It turned out to be quite possibly the most time-consuming feature I've ever programmed in a Ludum Dare game, partly because of how long it took to debug and optimise but mostly just because it required so. Much. Code.

The AI uses an implementation of the A* algorithm that I took from an online tutorial and modified to work in TIC-80. Once a second, the game generates a "world grid" with the locations of all the walls and hazards, and feeds it to the algorithm along with the player's position. The algorithm then generates an optimal path from each enemy to the player. Enemies will continuously move along this path, moving closer to you until they reach a certain distance.

...in theory, anyway. In practice, the AI seems to just run around in circles until it gets stuck against a wall:

ai-is-bad-2.gif

It's something, though, and I can keep working on it and improving it for future TIC-80 projects.

Animation

I've continued to refine the effects system I used in Save the Bird and Super Jump Guy. I can now instantiate effects with a delay before they actually appear, which allows me to create the "chain of explosions" effect when you blow up an enemy tank (or when your own tank is blown up).

splosions.gif

A more subtle improvement is that an object's animation speed scales with its actual movement speed. So for example, the faster your tank is going, the faster its tracks animate:

drive.gif

Collision Boxes

In PICO-8 and TIC-80, a sprite drawn at X=20, Y=20 will have its top-left pixel occupying that position. In my previous games, I accommodated this by making every object's XY coordinates correspond to the top-left of its sprite. This simplifies the drawing process - just pass each object's sprite index and XY position to the spr() function - but makes collision detection more complex, as you have to take this into account when drawing collision boxes.

In BreakEven, however, an object's XY coordinates correspond to the center of its sprite. This makes it much easier to calculate an object's collision box. When rendering, I then add an offset so that the sprite is drawn in the correct place.

That's everything I wanted to discuss. If you haven't played BreakEven yet, please do give it a try. As well as getting some rating done, I'll try and get some more fixes and improvements out over the course of the weekend.

BreakEven - Post-Mortem

I still have some rating to get done, but with the jam entering its final week, it's time for my usual post-mortem. What went well with BreakEven, what went badly, and what have I learned for next Ludum Dare?

What Went Well

gif11.gif

  • Despite running into a whole bunch of problems with coding this game, I kept going and managed to get it released in a playable state, despite repeatedly panicking about whether I would be able to. I've had a tendency in the past to abandon projects if I run into difficulties I can't overcome, so the fact I managed to avoid doing that is a major plus point for me.
  • I'm continuing my trend of "outside-the-box" theme interpretations. Whereas a lot of people went for the obvious interpretations of digging or cave-exploring, I deliberately eschewed that. BreakEven actually fits the theme in three different ways at once: your country's sinking deeper and deeper into debt, you're forced to go deeper and deeper into enemy territory to pay it off, and (spoiler alert!) the general's choices ultimately plunge the country deeper and deeper into trouble.
  • I'm continuing to push my boundaries and try new things. I don't want to fall into a rut of making the same type of game every Ludum Dare. I won't learn anything that way.

What Went Badly

death.gif

Oh boy.

  • I pushed my boundaries too far. I can't and won't sugar-coat it. I tried to do things I had no idea how to do, I tried different approaches to things I already knew how to do, and none of it worked. The end result is that I've gone from submitting a completely glitch-free entry last time, to submitting an entry that was so hopelessly broken I had to put a disclaimer on it. Even after a fix, it's still the most broken game I've ever submitted. The AI doesn't work, the collision detection is bugged, and it's going to take a lot of time and effort to fix either of them.
  • Because the above issues sucked up so much of my time, I couldn't put anywhere near as much effort into the rest of the game as I wanted to. There's only one level, and it's tiny and bland compared to what I'd envisioned. There are only two different types of enemy. There's no music (again).
  • All in all, LD48 was easily my worst Ludum Dare experience. It's knocked my confidence and sapped my creative energy.

What Comes Next ###

gif9.gif

I'm going to make one last attempt to fix BreakEven's collision detection system, which will hopefully also improve the AI slightly. I've already made some tweaks to the animation system, and I'll also add a much-requested feature that I'd initially planned to implement anyway: the ability to run over enemy soldiers in your tank.

After that, I'm just gonna chuck this project in the bin and move on.

I think, for next Ludum Dare, I'll try something simpler. Even if this didn't go very well, I have, at least, learned from it, and I'll do better next time.

The results are in...

...and they're disappointing.

ld48_results.png

These are, across the board, the worst rating scores I've gotten for any of my Ludum Dare entries. Even in categories like Graphics and Audio, that were complimented by several reviewers, I've scored lower than ever before. Pretty much the only one that isn't an all-time low is Humor, and even that's down compared to last time.

I know BreakEven had its problems, but I didn't think they were this bad. I have to try not to get discouraged. I can only improve from here.

Ludum Dare 49

Good news, bad news

I'll start with the bad news: I do not expect to take part in Ludum Dare 49. I have prior commitments, and want to avoid spreading myself too thinly.

Now for the good news: one of those "prior commitments" is a bullet hell shooter I'm developing in TIC-80, that draws on everything I've learned from my eight previous Ludum Dare entries. I'm aiming to get a demo out by the end of the month, and if all goes well, the finished game will become my first fully-fledged release. So I believe it's worth breaking my streak just to keep up my momentum on that project.

I may still take part in LD49, depending on my energy levels and whether the theme interests me, but I most likely will not. I will, however, return for Ludum Dare 50, come what may.

Here's a (slightly outdated) teaser of what I'm working on:

indigo-3.gif

I am rebelling!

I mentioned a few weeks ago that I wouldn't be competing in Ludum Dare 49 as I want to concentrate on developing a game I'm already making. I'd like to revise that: I'll be taking part, but I will be "rebelling" and working on the aforementioned game instead of actually developing something new. I'm sure I've seen people doing this before (I definitely have with NaNoWriMo) so hopefully it's not a problem, even if I'll have nothing to submit at the end of it.

The game I'll be working on is Prism Indigo, a magical girl-themed bullet hell shooter developed in PICO-8. I recently released a demo, so check that out if you want to get a feel for it.

indigo-8.gif

Good luck to everyone who's participating normally!

Ludum Dare 50

I'm in!

I'm still working on Prism Indigo, which I "rebelled" in order to work on during LD49, but there's no way I'm missing the milestone LD50. So you can count me in properly this time, and I'll be aiming to improve on my shocking performance in LD48, but as always, I'm not going to shy away from pushing my limits and trying new things.

I'll most likely be using TIC-80, as it's supplanted PICO-8 as my weapon of choice.

I'm off the mark

After a lot of brainstorming, I've settled on doing a Metroidvania-type game. The concept is simple: your wife is dying of a rare disease, and you must venture into a dangerous temple to retrieve a rare flower that won't cure her, but will at least delay the inevitable, and give you more time with her before she passes on. I'm gonna try and do two endings: a good ending where you return with the flower in time, and a bad ending where you don't.

I'm treating it as a spiritual successor to my LD43 entry, The Gods Are Angry. The story themes and gameplay are fairly similar, and as a result, I'm taking graphical cues from it as well:

preview1.png

Hopefully this time I don't overscope.

A good start

Every Metroidvania game needs doors opened by levers, right?

video1.gif

The system is also flexible enough that one lever can control multiple objects, so I can make puzzles with levers that open one door but close another. Next up, dying and respawning.

Day 1 Progress

I've managed to get the basic mechanics done today. There are enemies that roam the game world and will kill you if you touch them, checkpoints you can activate to respawn when you die, and collectible power-ups that help you deal with enemies and obstacles and allow you to access new areas. Here are the two I have implemented so far:

video3.gif

Fireballs can also light torches, some of which will open doors for you. How handy!

With the basic stuff in place, I'll be spending Day 2 expanding out the game world, and adding new enemies, powers, obstacles etc. Then it'll be on to the polish stuff like music, sound effects, and some snazzy particles, and if I'm happy with it, I can hopefully submit to Compo this time!

It's done!

screen3.gif

All that's left is to add some music and a couple of missing sound effects, then polish it up a bit, and my LD50 entry will be ready! This is on track to be my first Compo submission since LD45, and much better than the trainwreck that was my LD48 entry.

The Flower of Marasca is about to bloom...

The Flower of Marasca: out now!

My LD50 entry, The Flower of Marasca, is now complete! I think this is the most polished Compo entry I've ever submitted, so I'm very proud of myself.

It's available on Newgrounds, itch.io, and the TIC-80 website. Give it a go, and see if you can earn just a little more time with your beloved...

video7.gif

V1.01 Hotfix out now!

The Flower of Marasca has been updated to V1.01. This fixes a number of collision detection issues, as well as an audio bug that caused the "power collected" chime to play continuously.

As it's a Compo entry, I've left the source code and the TIC-80 version untouched, for those who would rather play and rate the game in its original state. Any further changes or improvements will either be relegated to the Newgrounds version, or will come after the rating period is over.

Either way, you can The Flower of Marasca here.

video7.gif

The Flower of Marasca - V1.02 Update

The Flower of Marasca has been updated to V1.02. This version fixes a hilarious but fairly major bug: if you ended up outside the level geometry and fell to your death, you'd still be falling when you respawned, causing you to clip straight through the floor and keep dying in an endless loop.

As before, only the Newgrounds and itch.io versions have been updated. The TIC-80 version and the source code remain at V1.0. To play and rate whichever version you prefer, go here.

video7.gif

I've already hit 20 ratings!

I think this is the fastest I've ever hit 20 ratings, and while that's partly down to my hotfix announcements, there definitely seems to be a lot of positive interest in my game, which is great to see!

I make it a point to rate the games of everyone who leaves feedback on my own games, and I'm quite behind on that, so I'm gonna spend tonight going through my backlog. Over the weekend I'll write up my usual "Techy Bits" analysis, going behind the scenes and delving under the game's hood, and the weekend after that I'll do my usual post-mortem.

Until then, if you haven't journeyed in search of The Flower of Marasca yet, you can do so (and add to my backlog!) here: https://ldjam.com/events/ludum-dare/50/the-flower-of-marasca

video7.gif

The Flower of Marasca - Tech Review

It's time for that part of Ludum Dare where I take a deep dive into my entry, going through some of the tricks and techniques I used to develop it, and some of the things I learned in the process. As ever, though, I'd like to start by saying a massive thank you to everyone who's rated The Flower of Marasca so far and left such amazing feedback! I promise I'll get round to reviewing your games in turn!

video8.gif

The visuals

I decided to recycle the visual style I used for my Ludum Dare 43 entry, The Gods Are Angry. The background is a black void, with features like walls and floors gradually fading away into the blackness. This gives the game a distinctive, gloomy feel, but also drastically cuts down on the amount of tiles I need to draw, as I only need to fill in the outlines of the rooms and corridors, not the spaces inside or around them.

map-details.png

Things like enemies and power pickups are drawn in brighter colours than the surrounding environment, in order to make them stand out. Unfortunately I forgot to apply this logic to things like the levers and braziers, and a few reviewers have mentioned that they didn't realise those objects were interactive. Oops! Lesson learned on that one.

The AI

This (among other things) killed me last Ludum Dare, so this time around I kept it simple. Enemies move backwards and forwards along a fixed path, and some enemies will shoot bullets at regular intervals. That's all this game required.

Animation

The Flower of Marasca makes use of TIC-80's mget and mset functions, neither of which I've really worked with before, to animate objects on the map. This is used for major gameplay mechanics like opening doors, but also for more subtle things, like the bloodstains that appear on spikes after you fall onto them.

video9.gif

Tile animations are also reversible, allowing for levers and doors to be reset, and repeatable, allowing for the flickering flames of the lit braziers. Which brings me on nicely to...

Particle effects

In my last few entries, I've used animated sprites for effects. This time, I returned to using particle systems instead, as I felt they'd fit the game's graphical style better (and I also just really like particle effects).

The Flower of Marasca has two different types of particle effect: emitters, which spawn a new particle at set intervals for a set period of time; and bursts, which spawn a whole bunch of particles all at once. Both types allow me to configure the angles, velocities, colours, and lifespans of the generated particles, allowing me to easily generate a wide range of effects, from dust being swept up by Feather Jumps to blood spurts when you die and, of course, the sparks rising up from lit braziers:

video10.gif

Collision systems

Ah, yes, my eternal nemesis. This one's worth sharing as an example of what not to do.

In previous games, I've had two types of collidable object: ones that are solid in every direction, and ones that can be passed through from underneath. This time round, I tried to be clever, and used tile flags to determine separately whether a tile can be collided with from above, below, left, or right. The ceiling, for example, can be collided with from below. In fact, it should only be collided with from below, so I don't need to bother setting the other three collision flags, right?

...right?

video11.gif

Whoops.

Factor in a handful of missing collision flags, and a bug that meant ceiling collisions weren't calculated correctly anyway, and you get yet another Ludum Dare entry with serious or game-breaking collision detection issues. I know this is one of the perils of using an engine that doesn't handle that stuff for you, like Unity does, but still, after five years of doing this, you'd think I'd have gotten better at it.


Phew, that's a lot! If there's anything you think I've left out, though, feel free to ask below! Over the course of the week I'm going to try and get the first post-jam update done, and then over the weekend I'll perform the post-mortem.

The Flower of Marasca: Post-Mortem

With the jam winding to a close, it's once again time to look back at how things went for me this time round. What went well for me, what didn't go so well, and what have I learned for next time?

First of all, though, I would once again like to say a massive thank you to everyone who's played and rated The Flower of Marasca so far. If you haven't done so yet, give it a try.

What Went Well

video6.gif

  • Once again, I refused to play it safe and experimented with a genre I'd never done before, in this case, Metroidvania. By most accounts, I did a good job, so I'm proud of myself.
  • The Flower of Marasca is probably my nicest-looking Ludum Dare entry, and possibly my nicest-looking game, period. It takes the dingy aesthetic of The Gods Are Angry, and adds in smooth tile-based animations and fancy particle effects. I'm continuing to get better and better at animation, and at making my game worlds feel alive.
  • I didn't overscope! I managed to cram in a fair amount of content, challenges, and gameplay mechanics, as well as plenty of juice, and only one or two optional extras had to be cut for time. This is my first Compo entry since LD45 and it's good to be back in the groove.

What Went Badly

video12.gif

  • Bugs. While The Flower of Marasca was nowhere near as buggy as BreakEven was (not that that's a high bar to clear), it was still very buggy in its initial release, requiring two separate patches to iron out the worst of them. Five years of Ludum Dare and I'm still putting out broken releases. Not good.
  • The game's design isn't exactly the clearest. Several reviewers noted that they got stuck, either because they used up all their powers and got softlocked, or because they couldn't work out how to proceed. The former was intentional - you need to ration out your powers - but in hindsight, that's not good game design, especially since you have to restart the game from scratch if you don't realise that. I had an idea to solve the latter, by adding prompts that would appear when you got close to something, but it was a "stretch goal" and I ran out of time to include it.
  • I spent too long on Day 1 messing around with an advanced camera system that moved depending on which way you were facing, to show you more of what was in front of/above/below you. I couldn't get it to work and had to get rid of it rather than continue to waste time on it. Had I just stuck with a simple camera system, I might have had enough time to implement those prompts.

What Comes Next

video13.gif

I fully intend to give The Flower of Marasca a post-jam update to polish and improve it as much as possible, and I'll see if I can get that out before the rating period ends. A lot of the time, I say I'll do that and then forget to, so let's see if I can hold myself to it.

After that, I'll be focusing on Prism Indigo, my first professional, full-scale release, which I "rebelled" to work on during LD49. My targeted release date is May 20th, with free versions being available on Newgrounds and the TIC-80 website, and a paid downloadable version on itch.io. In the meantime, you can play the demo here.

Finally, I'd like to say good luck to everyone who entered!

The Flower of Marasca - Post-Jam Update

The Flower of Marasca has been updated to V1.1. This is the post-jam version, incorporating a number of things I ran out of time to include initially, and addressing many of the issues that were raised in people's reviews.

The updated version is available exclusively on Newgrounds, and you can find the patch notes there too. The TIC-80 website has the original Compo submission, while itch.io has V1.02 with a couple of hotfixes but no additional content.

Whichever version you want to play, you can do so here.

video7.gif

The results are in!

ld50_results.png

Much better. I feel like I'm back on form. Strong ratings across the board, and a 3.7/5 for graphics in particular is a high point to take away from this.

One last time: a massive thank you to everyone who played The Flower of Marasca, rated it, and reviewed it. You give me the drive to keep developing, and keep improving.

The Flower of Marasca is probably at the end of its lifecycle, but if you want to see more from me, my retro bullet hell game Prism Indigo is planned for release on May 20th. Follow me on Twitter for occasional dev updates as the time approaches.