You only get one, so do the Titans
Going with the theme, the player gets 1 health, 1 arrow and each boss/Titan gets only 1 health also. This made the designs a lot more interesting to come up with, since giving something an obvious weakness usually meant “hit this bit a lot until it dies”. This can work great, like using windows of oportunity in Zelda or Shadow of the Colossus to get in damage. However if it becomes a rinse and repeat type system it can become tedious and pointless unless survival is a difficult task to sustain like in Dark Souls.
So designing weaknesses around this restriction was pretty enjoyable. The core element that runs through the Titans in the game is timing. The Eye and Colossus bosses had very short windows in which to hit their weakspot, so the fight was about surviving, studying the boss’s patterns and pre-emting an attack location and time.
Before the jam I got my code ready to go (AS3 + Flashpunk) with a few basic classes, got some basic 2D collision stuff in place, map loading and most importantly, wrote a couple of neat screenshake functions.
(Note, screen is rendered at 320×240 and scaled up)
Just bog standard shake stuff, but made it easy on myself to just throw in dynamic camera movement when it game to making the game. I feel in games, especially action games, screenshake is the most important thing to make things ‘feel’ right. The basic functions were ShakeX and ShakeY (pretty self explanitory) which take inputs of how much to shake in pixels, number of frames to shake for, and how much it should be shaking by the end frame. It just linearly interpolates to the target shaking amount. This lets you do stuff like large shakes in the Y axis that rapidly drop off to a smaller amount to simulate something heavy landing (like a giant block of ice with a brain in it crashing into the floor). Then using these you get the basic Shake() which does the same to both X and Y and also ShakeVec() merging X+Y functions.
Anyway, using them in game, first up was the roll. The animation for the roll was great straight away and gave a good sense of weight, then when the sound effect came in it was perfect. I added a very small amount of shake here (X+Y) to give it a tiny bit of grit and response when you hit the floor.
Next was the arrow firing. I was fully inspired by the bits in Shadow of the Colossus where you plunge your sword into the weakspots for this; the camera zooms in slightly and it feels as if everything slows down a touch. I just added a percentage to the flashpunk screen scale (FP.screen.scale), that percentage was also the ‘power’ of the arrow charge (longer held = more power, with diminishing returns up to a cap of 1.0 I think). The shake was actually a byproduct of moving the camera in the direction you’re aiming. When the arrow is fired the vector used as it’s trajectory is also the one used for determining camera offset, so when it gets fired the offset goes larger for 1 frame as the camera chases the arrow, then pings back into place. I actually tried removing this, inverting it, and adding regular shake, but none of it was as good so stuck with the original!
Now with the bosses there were 2 real shakes, both pretty simple. Jumps would cancel all shaking, and the landing would cause a large shake in the Y (~30px) and small in the X (~4px) then both come down to stay at 4px, all over around 10-15 frames. This gave a big impact shake and made the Titans feel heavy. The other main shake was a vector shake. When a Titan hit a wall (Eyedude or Brainfreeze [totally official names]) it would take their direction vector or veclocity and use that as the percentages to shake each axis. Scale all of these to perceived Titan weight and boom, shakey!
Wasn’t that hard
Yeah probably. The brainfeeze fight was challenging (although also a tiny bit buggy, adding to the frustration), but the Eye is pretty straightforward and the colossus as well. Both had tight timings but were quite easy to dodge until you learned your window of attack and could get the hit in.
Now, this is the bit of the whole process I’m currently finding super interesting. The main complaint aside from general difficulty is that people do not like having to run back to the boss after each death. A mechanic borrowed from one of my favourite games of all time, Dark Souls (the bonfire run).
Each run is < 30 seconds back, so not too painful – but its not supposed to be enjoyable. You died, you made a mistake, and as punishment you’re gonna have to walk back to re-try the fight. Now I totally understand why this frustrates people and why they don’t like it, your not supposed to like it. I’ve ran bonfire runs in DS hundreds of times angrily, then landing the boss kill was always so much sweeter. This is something people might not agree with or may not actively realise. This is why I’d imagine complaints about it in TS are vocal, because you wouldn’t notice the positive side nearly as much as you’d notice the negatives and frustrations of it, which is again, totally understandable and fine! I think it’s an interesting thing to think about and consider whether it is actually better for the player to be forced back to the start, or to just let them dive back in over and over. I’ve certainly spent many hours thinking since the jam ended about which aproach is ‘better’, and came to the conclusion that it’s a polarised personal preference.
I personally still feel strongly that it benefits the type of player the game is aimed at, people who like to overcome challenges (and perhaps are like me, slightly masochistic when it comes to games!). However I think a core component to improving the way it is in the game’s currently would be allowing some kind of ‘flow’ in the run back. The maze section before the colossus boss (East) could be formed much more neatly in a way that allows optimal player rolling down corridors, so they have to think about how they roll but can nicely get into a groove that doesn’t get interupted by sharp 180 degree corners or something like that, and they can maximise the time spent rolling.
What next with the game? I really would like to make this into a full experience in the future, just focusing on creating interesting boss fights would be really enjoyable as well as tying some more narrative and exploration out into the world.
I’ve got a pretty solid version of the game running with adobe AIR, but maybe I should port it over to C++ for a more stable game and things like actual controller support if I continue it further.
There’s loads more I could say about this short jam, it was a hell of a lot of fun and I always learn a great deal doing a solid 72 hour LD, but I will cut it here, already getting a bit long!
Link to the game: http://www.ludumdare.com/compo/ludum-dare-28/?action=preview&uid=7984