F1Krazy

Ludum Dare 50

One last update...

Someone on Newgrounds pointed out one last glitch in my LD50 entry, The Flower of Marasca. Specifically, I was using the same sprite flag to check whether a tile should act as stairs and to check whether it was destructible. The result: stairs were destructible, and destructible background objects shifted you one pixel up into the air, thanks to the hacky way stairs were implemented.

I've therefore released one last patch to fix the issue and separate out the sprite flags. This also updates the game to V1.0 of the TIC-80 engine. Since the jam is over, the itch.io version has been updated as well.

video7.gif

If you didn't get to check out The Flower of Marasca during the jam, you can check it out here. In the meantime, I'm hard at work on my bullet hell game, Prism Indigo, which is due for release in two weeks' time. Look out for that when it's released.

Prism Indigo - Out Now!

I've mentioned it a few times, I've skipped out on LD49 to work on it, and now, Prism Indigo has finally been released! Fight your friends to save your friends in this brutal bullet hell game!

Check out the launch trailer below, then check out the game itself on itch.io and Newgrounds!

https://www.youtube.com/watch?v=I-doyYiM8Fw

Ludum Dare 51

Ludum Dare 51 + a big announcement

Ludum Dare 51 will be my tenth Ludum Dare. As always, I'll be competing using the TIC-80 fantasy computer, and I've booked some time off work to give myself more leeway in case I need to switch from Compo to Jam. Instead of trying to push my boundaries and try new things, this time I'd like to cut loose and focus on simply making the best game I can.

To celebrate my tenth Ludum Dare entry, on 10/10 at 10am BST - one month from now - I'll be re-releasing my first seven Ludum Dare entries on itch.io. My most successful entry, 15 Minutes to Live, will also finally be coming to Newgrounds, with a long-overdue update featuring new music, enhanced graphics, extra content, and more.

dialogue3.png

As well as itch.io and Newgrounds, you can follow me on Twitter for occasional dev updates. Life has slowed me down recently, but I'm hoping to ramp up work on my current project Prism Warriors, and get a demo out before LD51 starts.

desperation-mode.gif

I'd like to say a massive thank you to everyone who's supported me throughout my ten Ludum Dares and counting, as well as those whose own entries have captivated me. May we all continue to grow and support one another for many years to come.

Idea on the board

I've been having migraines all week and my Internet is playing up, so this could be a dicey Ludum Dare for me. Nonetheless, I have the idea that I'll be trying to stick to: a bullet hell shmup where you can only shoot every ten seconds. This should actually make the game even harder than it sounds, because you can't kill the enemies before they fill the screen with bullets, so it's purely a game of how well you can dodge.

I have a basic prototype in place in TIC-80 and I'll start fleshing out the actual mechanics tomorrow.

prototype.gif

Getting there!

prototype_2.gif

It feels kinda crude at the moment, but the basics are there. You have a powerful shot that fires automatically, but it only fires every 10 seconds, and in the meantime, the pseudorandom enemy waves are filling the screen with bullets. You accumulate points for every second you survive, as well as for shooting down enemies.

My focus for the rest of the day will be to cram in as much enemy and wave variety as possible, and to try and refine the gameplay as much as I can. Day 2 will be spent on fripperies such as sound, effects, menus, etc, and I have Day 3 off work just in case I need it.

Day 1 progress

My game - tentatively titled Long Shot - is already feature-complete save for a "Game Over" system. I feel like I could have done more today but my ADHD was playing havok with my attention span >.<

Anyway, here's what I have so far:

homing-attacks.gif

Tomorrow I'll be adding music and sound effects, a menu and brief tutorial, the "Game Over" system, and trying to add in even more enemy and wave variety. I'll probably have to make this a Jam entry, as I've copied just a little bit too much code from other projects, but that gives me even more time to polish this up.

Goodnight, and see you tomorrow!

Day 2 progress

The gameplay looks and feels a lot nicer now:

gamestate_day2.gif

I also have a pretty slick-looking menu:

menu2.gif

Tomorrow I will finish composing the music tracks, build the tutorial screens and high-score system, and then work on adding as much polish and content as I can possibly cram in before the Jam deadline.

Long Shot is out now!

My Ludum Dare 51 entry, Long Shot, is now finished and released! It's an endless bullet hell where you can only shoot once every 10 seconds. Fight your way through an endless series of randomized enemy waves, dodging bullets and shooting back when you can, and aim for the highest score you can get.

video46.gif

You can play and rate it here, and it's also available on Newgrounds, itch.io, and the TIC-80 website.

...I wanted to polish this a little more, but my back is killing me and I need to rest. If there are any significant issues, please let me know in your review and I'll get to them when I'm not in crippling pain.

Long Shot V1.1 Update

My LD51 entry, Long Shot, has been updated to V1.1. This update adds a new enemy type, over a dozen new wave types, and several balance changes to make the game slightly easier. A full change log can be found here.

new-enemies.gif

With the new embedding system, I've adjusted my usual approach to post-jam updates. The embedded version of the game here on the Ludum Dare website will remain at V1.0, as will the one on the TIC-80 website, while the versions on itch.io and Newgrounds have been updated to V1.1. As always, you can play whichever version of the game you prefer to rate.

I have a bit of a backlog, but my policy as always is to eventually rate everyone who leaves feedback on my game, so please do play and rate it if you haven't already!

A bunch of announcements

Firstly, my LD51 entry, Long Shot, has been updated to V1.2. This fixes an issue where entities that moved off-screen weren't being deleted, which caused increasing amounts of lag as the game wore on. If you haven't yet, check it out here, and I'll review the games of everyone who reviews it.

new-enemies.gif

Secondly, it's 10/10, so to celebrate my 10th Ludum Dare, my most successful entry, 15 Minutes to Live, is now finally available on itch.io and Newgrounds! 15 Minutes to Live DX comes with significantly improved graphics and audio, plus a range of other updates.

dialogue2_new.png

The rest of my past Ludum Dare entries will be coming to itch.io later today as well, to build up my portfolio there.

My usual "techy stuff" post will be coming tomorrow, and my post-mortem will be coming at the weekend. After that, I think I might take the rest of the month off from game development. It's great that I've been so productive over the last couple of months, but I don't want to risk burning myself out.

Long Shot - The techy stuff

As always, it's time for me to pop the hood and show some of the tricks and techniques that went into making my Ludum Dare 51 entry, Long Shot. I enjoy providing these little insights, and hopefully they prove helpful and informative. First - as always - I'd like to say a massive thank you to everyone who's played and reviewed Long Shot so far, and I promise I'll review your games in turn before the jam ends!


The visuals

I designed the player's ship very carefully, to try and visually communicate the player's hitbox. Only the cockpit, which is a nice bright blue, can be hit, while the wings are a darker colour than the fuselage, both to make them stand out and to indicate that that they're immune to bullets. To make things easier, this is not the case for enemies, which have simple square hitboxes covering their entire sprite - they retain the same visual design, however, for the sake of consistency. In fact, some of them are just palette-swaps of the player's ship:

sprites.png

I'm particularly proud of the game's logo, with the angular shapes, diagonal gradients, and the glowing bullets in the centres of the two "O"s. The "O"s themselves look a little off, but other than that, I honestly think it might be the best logo I've ever drawn for a game.

Then there's the starfield, which I'm also extremely proud of. Each time you start a game or return to the main menu, the game generates 64 particles, piggy-backing off my existing particle system. Each particle moves downwards at a random velocity, and its colour is tied to its speed, creating a parallax effect where slower stars appear to be dimmer and hence further away. Each time a star reaches the bottom of the screen, it's removed, and a new one is spawned at the top of the screen. Together with the logo, Long Shot definitely has the best-looking title screen I've ever made:

menu3.gif

A few weeks ago, I got to play the excellent Terra Nova Pinball, a working pinball game made in PICO-8. For Long Shot, I copied a tiny piece of visual polish from it: namely, that the padding zeroes on the high-score table are drawn in a slightly darker colour. It's such a minor detail, but it really makes the high-scores pop.

inspiration.png

The random waves

The game's waves are stored in one big array, with a new wave being selected at random after the previous wave ends. Each wave has an array of different move paths it can take, and a range of positions it can appear from, adding extra variety.

There are plenty of ways I can make this more intricate, such as guaranteeing that you won't get the same wave twice in a row, or storing the boss waves separately and having them only appear every N waves, or even randomising which enemies are part of the wave. Those are all things to look at later on down the line.

Shooting

At first, I was going to have the player's ship fire automatically every 10 seconds, as most entries I've seen have done. It just didn't feel right, however. You could end up firing automatically at a wave that's already out of range, and then have to watch helplessly as a boss scrolls by while you're unable to shoot at it. So I kept the 10-second charge time, but instead allowed the player to shoot whenever they're ready.

aiming.gif

Being able to line up and time your shots makes the game a lot more strategic and satisfying, and I've had multiple reviews to that effect, so I'm glad my approach has paid off, even if it's a little less faithful to the theme!

References

From LD42 to LD45, I kept up a tradition of having each of my entries contain a reference to my previous entry, often in the form of a returning character. I stopped doing it after that, but to celebrate my 10th Ludum Dare entry, I've revived the tradition by including the boss of my very first entry - the "Closed Heart" from Love is a Battlefield - as a boss character. It's worth 41,000 points, referring to its debut in Ludum Dare 41 - and by sheer coincidence, it even occupies sprite index 41 on the spritesheet!

sprites2.png

There's another, much harder-to-find reference as well. You can earn up to 5 bonus lives by reaching certain points thresholds; the final threshold is at 41 million.


That's all for today! I'll be back at the weekend to do the game's post-mortem. If there's anything more you'd like to know about the game, or its creative process, feel free to ask.

Long Shot Post-Mortem

With the jam finally winding to a close, it's time for my usual look back at how the development of my entry went: what went well, what went badly, and what I can improve upon for future game jams.

First of all, I'd like to say a massive thank you to everyone who's played my entry Long Shot so far! If you haven't yet, please do play and rate it, and I'll do my best to get round to rating yours in return before the rating period ends!

What Went Well

ld51_success.gif

  • After my LD48 and LD50 entries were published in extremely buggy, broken states, Long Shot ended up being much more stable and bug-free. The only major bugs were a memory issue that caused the game to start lagging after a while (which took about a week to be discovered) and some missing sound effects (which nobody noticed because nobody knew they were supposed to be there!). It's good to get back to making stable releases again.
  • Long Shot feels like one of my most polished entries yet, with its slick logo, scrolling starfield background, and various other touches. Its rating on Newgrounds is a solid 3.51/5, the highest of any of my Ludum Dare entries, which would serve to back that up.
  • My previous TIC-80 games have either had music that was poorly-received, or no music at all. Long Shot, however, has received quite a lot of praise for its music, so I think I may finally have gotten the hang of composing good-sounding music in TIC-80. That should hopefully serve me well in the future.

What Went Badly

ld51_failure.gif

  • My ADHD kicked my ass big time during this jam. I struggled to focus, and kept goofing off and wasting time. While I got the game done and polished with time to spare, I honestly feel like I could have put so much more work into it, and added so much more variety, had I been able to concentrate more.
  • The game takes a lot of inspiration from Prism Indigo, the bullet hell shooter I released earlier this year. While very little code was actually copied directly from it, much of the rest of the code is probably very similar. This helped compensate for my lack of focus and avoid the game-breaking bugs I've had in the past, but it also feels unsatisfying. I've used past Ludum Dares to experiment with new genres and push my boundaries, and this time round I didn't do that. (It is a departure from my usual narrative-driven style, so there's that...)
  • The game's endless nature and randomised waves mean there's no difficulty ramp: it stays at the same level forever. This gets boring pretty fast, and also means you can theoretically play the game forever if you're good enough at it. I did think of ways of include a difficulty ramp - having the enemies move faster over time, and/or reducing the time between waves - but couldn't think of a way to make it work.

What Comes Next

menu3.gif

I don't know whether I'll be competing in Ludum Dare 52, as it happens to fall on my birthday. I may take it off like I did LD49. Either way, in future game jams I need to be more disciplined, and make sure I keep my head down and don't slack off, though I also need to be careful that I don't burn myself out like I have done before.

Speaking of burning myself out, I intend to take a break from programming after the rating period ends, as I've done quite a lot over the past couple of months. Once I get back into it, I'll be releasing another patch or two for Prism Indigo and then resuming work on Prism Warriors, the upcoming sequel.

Later tonight, I'll be releasing one last update to Long Shot to fix those missing sound effects. After that, I intend to refine the concept and use it for an unlockable game mode in the deluxe version of Prism Warriors. I think there's still a lot of potential I can draw out of it, especially as it can piggyback off of the much higher level of variety that Prism Warriors will naturally have.

Once again, thank you all for your kind words, and I wish you all the best of luck when the results come in!

Great results!

ld51_results.png

No particularly high placings, but I did get my best ever scores for Graphics and Audio, and my best scores for Theme and Innovation since LD46! I'm thoroughly pleased with that.

As I've mentioned before, LD52 is scheduled to begin on my birthday, so I'm unsure whether I'll actually be taking part in it, but I'll continue honing my skills regardless and I'll definitely be back for LD53, with my sights set on even better results. See you all then!

Ludum Dare 52

I'm in... for now.

This is going to be a bit of a funny Ludum Dare for me. January 6th, when it kicks off, is also my birthday, and suffice it to say I don't really feel that enthusiastic about game jamming on my birthday. I've also been struggling with various personal problems recently, that have left me a little burned out and prevented me from doing as much game dev work as I'd like to.

On the other hand, with the festive period over, this could be a perfect opportunity to shake the rust off and get back into the swing of things. So I have signed myself up, I will spend Friday evening planning, and I will try to produce something over the following weekend, but I can make no promises this time round.

If I do release something, then as always, I'll be using either PICO-8 or TIC-80. Good luck to everyone!

It's going to be a bountiful harvest...

...if you can bounce the falling fruit into the right basket:

prototype.gif

This is how my prototype looks so far. The idea is that the ripe fruit need to be bounced into the wicker basket on the right, while any rotten fruit need to be bounced into the bin on the left. You have to collect a certain amount of fruit in each level, within the time limit and without collecting too much rotten fruit, and the game gradually ramps up from one level to the next.

There's obviously a lot of balancing and polish still to do, but the basic gameplay is working, so compared to most Ludum Dares I'm way ahead of schedule. Let's see how much I can get done tomorrow.

It's basically done!

nearly-done.gif

This has to be the earliest I've ever completed a Ludum Dare entry. Going with a super-simple idea has really paid off. The only things left to do are the music, the "how to play" screen on the main menu, and refining the bounce mechanic -- you should be able to control which direction the fruits bounce in, based on where they hit the trampoline, but right now it seems to be almost random, so something isn't right with the code. I need to figure that out.

If I can get those done by the end of the day, I can spent tomorrow on polish and release it at my leisure. Here's hoping!

Day 1 progress

...or is it Day 2? Hmm. Anyway, I'm well into the polishing phase now. The UI has been improved, the menus are in place, and the bouncing physics have been fixed and tweaked to feel much more natural and intuitive:

day-1.gif

As you may notice, the "rotten" fruit are identical to the regular fruit, but grey. This will likely be a problem for colour-blind users, so first thing tomorrow I'll be implementing a "Colour-Blind Mode" that gives rotten fruit some extra visual indicator, like a cross or something over the top of them. You'll be able to disable the music and sound effects as well, as I know those aren't always my strong suit!

See you in a few hours, and good luck to all my fellow Compo entrants as the finish line approaches!

Fruit Fall - Out Now!

My LD52 entry, Fruit Fall, is out now on itch.io, Newgrounds, and the TIC-80 website! Play and rate it here!

level_clear.gif

After some initial trepidation, I think this turned out really well. I'm gonna spend the evening unwinding, and then begin rating others' games tomorrow. Good luck to everyone who's still working on their entries!

Fruit Fall - The Techy Stuff

First off, an apology: I've been suffering from debilitating migraines for the past few days and haven't been able to do much in the way of game-rating. Sorry about that. I'm feeling better today, plus it's the weekend, so I should have time to catch up on my backlog.

For now, though, it's time for my traditional post delving under the hood of my entry, and the tricks and techniques that went into making it. If you haven't played Fruit Fall already, please do! I'd like to make it to 20 reviews sooner rather than later.


It's a small game after all...

Fruit Fall is the smallest game I've ever made for Ludum Dare, in terms of both code size (8.9 KB) and cartridge size (42.7 KB). I didn't do anything in particular to make it this small -- I could probably crunch the code down significantly if I felt like it. All I did was keep the concept as simple as possible. It also helps that there's no storyline, and hence, no dialogue to bloat the code size.

So there's not much under the hood for me to analyse, but the hood itself is nicely polished:

The visuals

With less time spent on coding, I was able to spend more time on graphics. Carrying on from LD51, I tried to experiment with larger, more detailed sprites. I'm quite proud of the results:

logo.png

This is the first Ludum Dare game where I've had to adjust TIC-80's default colour palette, as the apples were the same colour as the tree and were blending into it. I had two shades of blue that I wasn't using, so I swapped them for two shades of brown, which made the tree look much nicer and also allowed me to shade the inside of the wicker basket. I also tweaked a couple of the other colours just to make them pop a little bit more.

I couldn't think of a way to distinguish rotten fruit from good fruit, so eventually I just made the rotten fruit grey. Then I thought, "wait, colour-blind people might not be able to tell the difference!" Since I had plenty of time, I was able to create a "Colour-Blind Mode" option where the rotten fruit have a dark splodge on them, making them more obvious:

fruit.png

One final thing of note is the dithering pattern for the sky, which was based on the first level of Sonic Triple Trouble:

stt.png

The bouncing

Now, this is simple enough in theory: take the distance between the centre of the fruit and the centre of the trampoline, multiply it, and use that as the angle of the fruit's new trajectory. Simple -- wait, why are they bouncing at random angles?!

step1.gif

You see, when programming, I always calculate angles in degrees, because they're easier for me to work with. But TIC-80 doesn't use degrees, it uses radians! 1 degree of difference isn't much, but 1 radian of difference is a lot, hence the seemingly random angles. So you gotta throw a math.rad() in there and...

step2.gif

Much better! But it still feels... off somehow. The fruit feel weightless, and are hard to aim. So let's reduce their momentum by 20% each time they hit the trampoline.

step3.gif

Perfect! It's still something that takes a bit of practice, but the momentum loss makes it easier to aim. On a related note:

Difficulty

My previous arcade-style entries have been endless games, where you keep going until you die, but I struggled with getting the difficulty to escalate properly. For Fruit Fall, I opted to take a different approach and broke it up into levels, with the difficulty scaling each time you beat you a level. To be exact:

  • The target score increases by 20% up until Level 5, then by 10% for each subsequent level
  • The percentage of rotten fruit starts at 0% and rises by 3% each level, maxing out at 24% from Level 9 onwards
  • The rate at which fruit spawn increases starting at Level 3, and maxes out at Level 20

In theory, the game just keeps going forever, but in practice it becomes impossible somewhere around Level 10. I haven't had any complaints about the difficulty, so I think I did a good job.

One other comment regarding the difficulty is that the collision detection for the basket and bin is deliberately naive: fruit can pass through the sides as well as falling in from above. This gives you more of a target to aim at and makes the game a bit less frustrating than it might be otherwise.


There's a couple of other things I wanted to mention, but I think this post has gone on long enough. I'm gonna get on with the game-rating, and I'll be back next weekend to do the post-mortem. In the meantime, if there’s anything more you’d like to know about the game, or its creative process, feel free to ask in the comments!

Fruit Fall - Post-Mortem

I still have some rating to do, which I'll try and get done over the next few days. For now, though, it's time for my traditional post-mortem, examining what went well with my game, what didn't, and what I can improve upon for next Ludum Dare. Speaking of my game, if you haven't played it yet, please do!

What Went Well

skillshot.gif

  • Of all my Ludum Dare entries, this is easily the least complex, and one of the smallest in scope as well. By scoping down like this, I was able to really take my time with it and make sure everything looked and felt okay, rather than rushing it. This led to a much more relaxed Ludum Dare experience than normal - which was helpful, considering it kicked off on my birthday.
  • As a result of this smaller scope, this is also my first bug-free game in a very long time. I haven't had to put out a single patch or big fix for the entire rating period, which hasn't happened since my collab with @alanxoc3 for LD46, and hasn't happened in the Compo since LD43. Turns out there's not much room for bugs when your game has less than 9 KB of code - who knew?
  • The inclusion of Color-Blind Mode has been highlighted in several reviews. I'm proud of myself for realising that accessibility would be a problem with the game, and it's something I'll continue to think about in the future.

What Went Badly

game_over.gif

  • This is the second Ludum Dare in a row where I've played it safe, without really attempting to push my boundaries or try new genres or game mechanics. Again, this was a birthday jam and I wanted to take it easy, but I still don't want this to become a pattern in future jams. I'm not going to learn and improve that way.
  • I feel like I did a poor job with the level scaling. It scales smoothly up to Level 20, and keeps scaling indefinitely after that, but by all accounts it becomes impossible at Level 10. I think it should have scaled more slowly.
  • This is one of the few LD games where I've been able to add a background, but the result feels rather rushed and simplistic. I could (and maybe should) have tried to put a bit more detail into it.

What Comes Next

level_clear.gif

This is also the second Ludum Dare in a row where I've abandoned my usual story-heavy, narrative-driven approach in favour of a simpler arcade-style game, and it seems to have worked out well on both occasions. I'll be taking this into account for future jams, and continuing to mix it up rather than always trying to do story-heavy games.

I'm not sure how much scope there is to improve or expand Fruit Fall, so that'll probably be it. I've already shifted my focus back to developing Prism Warriors, as work on it has slowed to a crawl recently for various reasons. However, one thing I'll be carrying forward into future games is a slightly revised splash screen, with the Altrix logo written in a custom font. It's a minor detail that makes the splash screen look a bit nicer.

Thanks again to everyone who's reviewed and rated Fruit Fall, and good luck when the ratings come out!