Since our last game jam, there has been quite a bit of demand from players to continue development on the contest winner Irrational Karate. So we have teamed up with Andrew Neale (aka Never Rest Studio) to make it happen and this is where we are going to record our progress!
So, lets get some eye-candy in here, shall we?
And a quick sales pitch…
Irrational Karate is a fighting game for people that like the idea of beat em ups but were never really good enough to play them. It’s a game for people that enjoy mercilessly thumping their enemies but wished it could all look cuter.
With that out of the way, I’ll quickly cover some of what I’ve been doing since the game jam.
- Updated and restyled the itch.io page (got access to custom CSS, so this is a continued work in progress)
- Put together a Trello board to help manage our ideas and current tasks
- Fixed a few bugs I was already aware of in the game jam build
- Re-balanced some of the attacks (quick attacks are a bit too powerful, at least if you spam them against the AI - still needs a little more improvement)
- Cleaned up some colliders to resize/reposition during different animations for more accuracte movement-based collisions (damage based collisions were already more accurate)
- Created a new “scene manager”. The game jam build was entirely one scene but this now has to change, both for management reasons as well as to cater for different arenas etc. The new scene manager makes it very easy to manage asynchronously loading/unloading as many simultaneous scenes as wanted.
- …and also hooks up to a loading screen system. An ongoing list of “busy” items is maintained and any object can register itself with (and then unregister itself from) that list. The loading screen automatically reacts to changes to that list and fades itself in/out as required.
- I’ve also started to break some items out into new scenes so that there is a base scene but then a separate scene for splashscreens, main menu, in-game UI, and then there will be a scene per-arena etc. The initial scenes are hooked up and transition from one to the next (or more than one - e.g. arena + UI), smoothly concealed by the animated loading screen.
- To cater for interactions between objects which may or may not be in the same scene, I’ve also made more and more use of scriptable objects. I was already using them quite heavily for interacting with stats so that the game state manager, player controller, and UI could all share the player’s health value, for example, without referencing each other. This is just being extended, including with using scriptable objects to raise events. This allows the UI scene to be fully functional and testable on its own by simply raising these scriptable-object-based events. If there is a listener in the scene (as there would be in game) then it can respond accordingly. If not, the object that raised the event doesn’t need to know or care - it has already done its job just by raising it.
- I’ve also done a little more work on graphical tweaks, investigating performance, and playing with some more music ideas.
…and I think that is just about it for now! More updates soon.
A bunch more work done today. Again, lets start with a video!
Today, aside from a bit of valuable project management/discussion with @matt and @jason, I primarily focused on implementing dodging and rolling. Holding the button that, whilst stationary, will be used for blocking and then moving will now result in either a backwards hop or a forwards roll. This lets you cover ground quickly to dodge an attack, close in to land one of your own, or quickly go over or under your opponent to catch them by surprise.
Another related gameplay tweak is that if you run and then crouch you will now skid for a while. This allows you to charge at your opponent and duck at the last second to avoid being punched and then land a low kick. If they see it coming, however, then they can quickly release a kick of their own leaving you with a face-full of foot.
Lastly, the time will now very briefly slow down on successful attacks. This both adds weight and a cinematic quality but also makes the situation clearer and gives a tiny reaction window to plan a response. But yeah, mostly it just looks cool.
There have been a few other bits and bobs towards cleaning things up and re-organising and little bug fixes but that is pretty much it for today.
A video of build 0.8.0:
- Made a performance/optimisation pass
- Catered for queuing an action during animations that can’t be broken out of
- Created more custom action/action animation transitions so that all actions are more responsive and blend it to each other better
- Overhauled the AI to use the new dodging/rolling and to be more reactive to player actions
- Added some extra debug features to help with development going forwards
We have also been playing with some dynamic secondary animation/physics for hair/belts/bandannas etc. Whilst the majority of that has come together really nicely and will be in a future video, “skirts” have proven to be a little problematic due to the speed and extremeness of movements involved causing them to clip/glitch/invert. I’ll keep playing with it in the background but it isn’t the immediate priority.
Just to keep things alive over here, I’m afraid I’ve been suffering a few health issues of late. I hope to be in action soon and will get some updates posted as soon as possible.
We’ll try adding some facial expressions to the characters by switching out the heads. Here is a sneak-peek!
In this build I have been working on overhauling controller/player management to be more flexible. I’m aiming towards the primary goals of:
- Any player can play with any input device, regardless of what player the controller may think it is
- Each controller can be linked to a player profile allowing multiple players to log stats etc. whilst playing, rather than only player 1
To allow for profile management on a game pad, I have been constructing a re-usable and customisable on-screen keyboard. This allows for easy entry via multiple controller types and can have multiple configurations of layouts which can be toggled between at run-time, all with some basic procedural animation.
Additionally, we’ve been implementing some extra animation. As he showed above, @matt has put together some amazing facial expressions which are now being triggered by attacking, taking a hit, and being knocked out. Additionally, he has reworked some of the mesh/rig to allow for secondary physics-driven animations on things such as the bandanna and belt. Both of these add a lot of visual interest.
Meet Lee, twin brother of Bruce (Bruce is the guy in red btw.)… both will stop at nothing to prove that they are the worlds best karateka!
I’ll get another proper update together soon but the work I’ve been doing just recently has been a lot of behind the scenes stuff with not a lot to visually share. However, I’ll post a few tweets here which contain some vids/screens of what I have been sorting out. The main parts are player management (profile and controller mapping) and re-organising the animation controller for maintainability and to make it easier to add a bunch more animations without breaking everything. More exciting stuff again shortly!
On a side note, this week was my last full week at my main job and I’ll be taking Wednesday out every week going forwards to have more time for game dev. Wooh!
The animator controller has now been all beautifully refactored! Just finishing up some regression testing but all looking good at the moment. Much cleaner to work with, much more extensible, and much simplified and normalised logic leading to less mistakes and easier bug tracking. A long but productive day’s work!
A modern day masterpiece
Joining the fully refactored animation controller, a first functional version of the player controller/profile management is in place (still needs a UI/UX pass but it works and saves/loads) as well as a couple new animations for attacks and kick, quick attack, and heavy attack all now being possible in the air, standing, or crouched.
I’ve been busy with some prototyping…
I’ve written a new character controller from scratch (all the combat and animation handling is copied across, this is just for the physics/movement).
I’m going to make a “lock on” mode where you can target an enemy and then advance/withdraw, like the old “2d” system, but also circle each other. However, it also means that there could be more than 2 characters involved in a fight at once now and you could choose not use the “lock on” mode so you can quickly spread your attacks between multiple enemies.
I’ve also done a bunch of work around nicely handling stairs, slopes, and jumping, so we could even look to bring an element of platforming into it at some point. It also all lends itself well to a “Streets of Rage” mode, or a mini story/adventure mode.
Finally, I made a new camera system to work nicely with this kind of movement. It will obviously change upon locking on to a target but this new version feels really nice for general movement.
This is just a prototype to explore some options but I’m really happy with how this is feeling already and with the vast array of options it opens up for variety and expansion in the gameplay.
Reigning myself in a bit today to focus on getting version 1 finished before developing version 2, haha. So, I’m going to be focusing on getting all the UI/UX sorted, including creating character and stage selection screens. For the moment, I’m working on making sure the in-game controls are clear and a bit more in your face, at least on first load, so you don’t have to go digging to find them out. To that end, I put together the graphics below.
I’m fairly happy with both but, despite spending more time on the “realistic” one, I’m leaning towards the more minimalist one as it fits better with the rest of the game’s style.
So, coming from a web site/app development background, I felt at home with a responsive 12 column grid system for designing interfaces. I’ve spent a bit of time now creating one within Unity to work with the built in UI system.
It allows you to define how many columns you want your layout to be based on and what your responsive break points are (which can be based on either a pixel width or aspect ratio, and can also be based on the screen or the particular container) and can also be nested as required. Each section can then be given a number of columns it should fill at each responsive size (with logical fallbacks where you don’t specify all sizes). The system also automatically works out the flow between items so when you want to navigate in a particular direction it can calculate which item you should move (based on relative positioning) to without you having to configure those links.
Plenty of graphical work to do but it seems quite nice to work with so far!
I’ve been continuing work on the new responsive UI system. I’ve now made it flexible enough that I’ve been able to recreate the style of the original UI, though now with all the flexibility and ease of use the new system provides.
Even with the responsive system hopefully making the UI nicely fit on most screens, there will always be exceptions. To that end, I’ve also built my own scrolling system which smoothly keeps selected items in view whilst navigating.
I’m hoping that another solid day of development on Saturday will get the majority of the menu finished. This new system has taken a few days to get together but makes creating new screens so much quicker than before so it should be smooth sailing from here, and for any future projects.
The UI is almost done and I’ve been working on a new game mode, so more on those shortly. In the meantime, here are a couple of pieces of music I’ve been working on - still trying to work out what kind of music best fits the game!