Unity Community |

Muay Thai
Ninjutsu
Taekwondo
Tai Chi Chuan / Qi Gong Jin
Jeet Kun Do
Pencak Silat
Boxing
Shaolin Kung Fu
I don't like martial arts / fighting games
Soon
Right now I'm making all the special strikes, taking my time to conceive them as they are meant to be really special (think unique mechanics, instead of "just" a charge/uppercut/air kick etc).
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
Oh thanks, I'm gonna blush
Keep up your good work ! You have a lot of talent, this would be a waste not to finish that![]()
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
Just chiming in to say I'm very interested in your project. Been lurking your thread for a few weeks, you've done a great job so far!
n0mad, I'm going to be really disappointed in you if you market it like shit when it's done. This project deserves the best marketing you can throw at it. Good luck with the project and try not to let it take too long to finish otherwise others will have better beat em ups out.
About Simian Squared Recent The Other Brothers Physynth Recommended Shaders+Framework
Holy mother of lordy, how have I just seen this, its looking incredible. and +1 to what Hippo said, if you cock it up ill be slapping you too, get rich
P.s, when you do, buy me an Imac iight?
best of luck![]()
Portfolio: www.csamways.com
Contact: Charlie.samways@molecube.ca (Business Only)
Follow me on twitter for updates: http://twitter.com/#!/cjsapps
"Science adjusts its views based on what's observed, faith is the denial of observation so that belief can be preserved"Don't use a hammer to dig holes
Thanks ! It's on the final lane to achievement right now (85% finished I'd say), until it is 90-95% finished I can't really expose too many details (especially mechanics), but I hope you'll enjoy it even more when I'll expose them soon !
Haha thanks Hippon0mad, I'm going to be really disappointed in you if you market it like shit when it's done. This project deserves the best marketing you can throw at it. Good luck with the project and try not to let it take too long to finish otherwise others will have better beat em ups out.I understand marketing is 50% of the game exposure, you can trust me about making everything I can to put a proper PR job
Actually this is what I already started to plan :
- demonstration at EVO Las Vegas 2012 (I'll do the 2000$ flight just for that, actually waiting for their green light)
- conferences (I had to decline this year's Maxon one in Cologne, because the game wasn't in a proper presentable state unfortunately)
- an obligatory "come on hit me in the face !" into the lions pit that is www.shoryuken.com forums
- the regular PR bundle with full version to testing sites
- tons of free giveaway codes (especially in here)
- and basically the game will not be splitted in 2 (free demo+full paid version), but only one free version with 2 fighting styles and a regular "instant fight" mode, including in-app purchase of full version (6 other styles, career, other modes, etc), so that people will be able to fully measure if they like it enough to purchase it or not
You're absolutely right about other beat 'em ups coming soon, though. My nerd sense is tingling about some giant console titles coming to iOS as 1:1 ports (aka. no 2D sprites scans anymore). I admit the more time goes by, the more worried I am ... But I can't rush it, or it will definitely be "just another fighting game". The 80%-20% rule is hitting me hard right now
Thanks Charlie, I hope you'll have loads of fun playing it too
I'll put as many giveaway codes as I can in here when it's released.
You guys are awesome, thank you.
Last edited by n0mad; 11-02-2011 at 03:42 AM.
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
I made a posting on this game on my website, think it's a very promising gameGood luck with the future development and promotion!
AndroidGaming.nl - Android game reviews and news in Dutch
Wow, that's very cool, thanks !!
And that's a super good looking site, very nice choice of colors, fonts, and layout, congrats
I'll make sure to send you a clean version as soon as the game is done.
*goes back to work*
Last edited by n0mad; 11-02-2011 at 03:33 AM.
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
Ok, due to recurring technical questions from different people over the 3 years, I'll put a brief synthesis of how the collision system is created :
Designing each character animation
I created a very precise and technical configuration sheet for each combat style, deciding the strikes range, duration, launch time, etc. upon the variation of a normalized one.
Example :
Which represents, for Ninjutsu which have these stats : Range = 100%, Strength = 80%, Speed = 130% :Normalized standing punch : Range = 100 cm, Duration = 35 frames, launchTime = 15 frames, hitStun = 20 frames, damage = 50
Each fighting style animations were designed upon this very sheet. Balancing is absolutely vital for fighting games, a game designer cannot create complete arbitrary moves or he's exposing himself to infinite combos, overpowered moves, or even worse, one strike that will be far superior to others, leading to some players always repeating the same strike again and again.Ninjutsu standing punch : Range = 100 cm, Duration = 27 frames, launchTime = 12 frames, hitStun = 15 frames, damage = 40
Animated HitBoxes
inside my FBX character animations, I create 2 animated boxes : one "HitBox", and one "StrikeBox". Hitbox encapsulates the whole body, and represents the sensible zone where the char can be hit. It is always present.
Strikebox encapsulates each striking memberon strike animations. To prevent gaussian interpolation weirdness inside Unity, I keep it at the same size and position from the start of its strike animation to its end. And for non-striking animations, I let it in a small scale, at position zero. I'll explain later how it is managed inside Unity.
Animation Clips splitting Configuration text file
Besides, I'm creating a configuration text file, precising each animation start frame, end frame, name, Loop Mode, and each frame window if it"s a strike.
Example, for a punch :
Using the configuration file30; 60; FiercePunch; Once; 35; 46;
Inside Unity, I created an Editor Script named "Split animations". It detects if the selected FBX name matches the corresponding .txt configuration file above, and then parses it to create each split animation with ModelImporterClipAnimation class. It also detects if there is strike frames data ("35; 46;" above). If there is, it creates 2 AnimationEvent that will be saved for the animationClips to be saved later (will be explained further). The first AEvent calls a funtion named "onStrikeStart" with the strike name as parameter, and the second "onStrikeEnd".
These 2 functions are just enabling/disabling the Collision detection for StrikeBox.
HitBox and StrikeBox inside Unity
These 2 boxes are taken out of their MeshRenderer, while BoxColliders are attached to them. A rigidbody is attached to HitBox too, in order for StrikeBox to register collisions with enemy's HitBox. They are both set on "isKinematic" so that they follow the FBX animation.
So in the end, the result is that fighters bounds are absolutely under control, which allows some special tricks like member invincibility. It also normalizes the vulnerable zone for each fighter, to prevent frustrating moments where your strike was supposed to reach its target, but didn't because this target animation ("idle" for example) just moved back a bit at that precise moment.
For short, letting the animator control the HitBox/StrikeBox creates a far more precise and technical combat mechanic. It also allows to keep high fidelity of what the Systems Lead did decide for each strike's range, so the player will know exactly where his strikes will land, instead of some approximate swing guess.
Inserting the AnimationEvents
Now that FBX animations are split and named, I also created an Editor Script that will clone them into a new prefab, in order to add the created AnimationEvents into each clip. Additionally, I created a script that creates mirror animationClips of each one, so that I won't use negative X scaling when a fighter is turning opposite side. Negative scaling on a 40 bones skeleton is far too much a performance hit on mobiles. You can find a little pseudocode tutorial of this script here : http://forum.unity3d.com/threads/364...Clip-generator
Now in the game, activating, detecting collisions, and de-activating Strikes
So, each onStrikeStart/onStrikeEnd called by AnimationEvent will just enable/disable the corresponding StrikeBox.
It will trigger the target's HitBox OnTriggerEnter() function (as mentionned in Unity Collider docs) and OnTriggerExit(), which will themselves call an internal script to determine if the fighter receiving the strike is in protection mode, or not.
And, voilą.
Everything else, like animation priority, strike launches etc. is decided by the state machine described in page 11.
Hope it's clearer now,
See ya next time for more updates !
Last edited by n0mad; 11-05-2011 at 08:02 AM.
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
Little tip that I learned from implementing a bullet time effect :
If you wanna check 100% of your bugs, just run your game at an ultra slow Time.timescale (like 0.1).
I discovered at least 5 (not show stopping) anomalies that I could have never seen at normal speed.
Another trick I learned thanks to that is to properly use Animation.Crossfade() : it should not be used at the exact end of an animation, or there will be a small hickup because of the fading out anim being rewinded at end.
Always crossfade at Anim length - (Anim length * Anim normalizedTime).
Now it seems totally logical, but once again, it was not clearly checkable at normal speed.
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
Tip sharing : A custom List<T>, 30% to 50% faster
I ran a performance check about my datastructures, especially my List<T> stuff. It's an important data type, as it is used for state machines and AI routines (state checking, list of available actions to AI, etc).
So I found that List<T> is clearly not the fastest storing type. So I tried to replace all of my Lists with 2 other types : ArrayList and HashSet (which is available to NET 2.0, even if implemented in 3.5).
I ran a lot of extensive tests with these 3 different types, and ArrayList came as the fastest.
But after a bit of internet documenting, and thanks to this thread I found, a hacked version of Dictionary would be even faster (because Dictionary key lookup is O(1), instead of O(n), O(n) meaning it's as fast as its size, as O(1) is constantly fast).
I hacked a bit the custom HashSet in the link above, and came to this class below. Help yourself, you can use it as you wish. Several tests monitoring huge List processing functions came to this fact : this hacked hashTest class is 30% to 50% faster than List<T>.
Code:
using UnityEngine; using System; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization; public class _hashSet<T> : ICollection<T>, ISerializable, IDeserializationCallback { private readonly Dictionary<T, object> dict; public _hashSet() { dict = new Dictionary<T, object>(); } public _hashSet(IEnumerable<T> items) : this() { if (items == null) { return; } foreach (T item in items) { } } public _hashSet<T> NullSet { get { return new _hashSet<T>(); } } #region ICollection<T> Members { if (item != null) } { } { } { } { } { } public bool IsReadOnly { get { return false; } } #endregion public void UnionWith(IEnumerable other) { foreach (T item in other) { { continue; } } } public void Subtract(IEnumerable other) { foreach (T item in other) { } } public bool IsSubsetOf(IEnumerable other) { foreach (T item in other) { { return false; } } return true; } public _hashSet<T> Intersection(IEnumerable other) { _hashSet<T> intersectionSet = NullSet; if (other == null) { return intersectionSet; } foreach (T item in other) { { continue; } } return intersectionSet; } public List<T> ToList() { return new List<T>(this); } #region Implementation of ISerializable { if (info != null) } #endregion #region Implementation of IDeserializationCallback { } #endregion #region Implementation of IEnumerable { } { } #endregion }
edit : Updated benchmarks thanks to Izitmee !
Last edited by n0mad; 04-10-2012 at 03:13 AM.
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
So you are using strikeboxes and hitboxes...looks like I am on the right track... I am gonna keep an even closer eye on this... come on, you got this...Ok, due to recurring technical questions from different people over the 3 years, I'll put a brief synthesis of how the collision system is created :
Designing each character animation
I created a very precise and technical configuration sheet for each combat style, deciding the strikes range, duration, launch time, etc. upon the variation of a normalized one.
Example :
Which represents, for Ninjutsu which have these stats : Range = 100%, Strength = 80%, Speed = 130% :
Each fighting style animations were designed upon this very sheet. Balancing is absolutely vital for fighting games, a game designer cannot create complete arbitrary moves or he's exposing himself to infinite combos, overpowered moves, or even worse, one strike that will be far superior to others, leading to some players always repeating the same strike again and again.
Animated HitBoxes
inside my FBX character animations, I create 2 animated boxes : one "HitBox", and one "StrikeBox". Hitbox encapsulates the whole body, and represents the sensible zone where the char can be hit. It is always present.
Strikebox encapsulates each striking memberon strike animations. To prevent gaussian interpolation weirdness inside Unity, I keep it at the same size and position from the start of its strike animation to its end. And for non-striking animations, I let it in a small scale, at position zero. I'll explain later how it is managed inside Unity.
Animation Clips splitting Configuration text file
Besides, I'm creating a configuration text file, precising each animation start frame, end frame, name, Loop Mode, and each frame window if it"s a strike.
Example, for a punch :
Using the configuration file
Inside Unity, I created an Editor Script named "Split animations". It detects if the selected FBX name matches the corresponding .txt configuration file above, and then parses it to create each split animation with ModelImporterClipAnimation class. It also detects if there is strike frames data ("35; 46;" above). If there is, it creates 2 AnimationEvent that will be saved for the animationClips to be saved later (will be explained further). The first AEvent calls a funtion named "onStrikeStart" with the strike name as parameter, and the second "onStrikeEnd".
These 2 functions are just enabling/disabling the Collision detection for StrikeBox.
HitBox and StrikeBox inside Unity
These 2 boxes are taken out of their MeshRenderer, while BoxColliders are attached to them. A rigidbody is attached to HitBox too, in order for StrikeBox to register collisions with enemy's HitBox. They are both set on "isKinematic" so that they follow the FBX animation.
So in the end, the result is that fighters bounds are absolutely under control, which allows some special tricks like member invincibility. It also normalizes the vulnerable zone for each fighter, to prevent frustrating moments where your strike was supposed to reach its target, but didn't because this target animation ("idle" for example) just moved back a bit at that precise moment.
For short, letting the animator control the HitBox/StrikeBox creates a far more precise and technical combat mechanic. It also allows to keep high fidelity of what the Systems Lead did decide for each strike's range, so the player will know exactly where his strikes will land, instead of some approximate swing guess.
Inserting the AnimationEvents
Now that FBX animations are split and named, I also created an Editor Script that will clone them into a new prefab, in order to add the created AnimationEvents into each clip. Additionally, I created a script that creates mirror animationClips of each one, so that I won't use negative X scaling when a fighter is turning opposite side. Negative scaling on a 40 bones skeleton is far too much a performance hit on mobiles. You can find a little pseudocode tutorial of this script here : http://forum.unity3d.com/threads/364...Clip-generator
Now in the game, activating, detecting collisions, and de-activating Strikes
So, each onStrikeStart/onStrikeEnd called by AnimationEvent will just enable/disable the corresponding StrikeBox.
It will trigger the target's HitBox OnTriggerEnter() function (as mentionned in Unity Collider docs) and OnTriggerExit(), which will themselves call an internal script to determine if the fighter receiving the strike is in protection mode, or not.
And, voilą.
Everything else, like animation priority, strike launches etc. is decided by the state machine described in page 11.
Hope it's clearer now,
See ya next time for more updates !
Is the game multiplayer?
Edit: Oh I see, but why not WiFi too?
GC matchmaker, any chance? That would be great to play.
Last edited by BrUnO XaVIeR; 11-18-2011 at 07:32 AM.
I would be very excited to make it server based, but that would be too much responsibility/cost for maintaining a perfect maintenance in case of any problem (plus I could never sleep if it's worldwide due to GMT offsets).
But ... if I find a way to enable a P2P connection via Wifi (and I don't think it's that hard), I'll do it for sure![]()
For now, there is a lot of work to do on the game itself, so I'll make sure to put a perfect Bluetooth experience first. I'll try to expand it to P2P Wifi after that milestone is reached ^^
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
Sipalki.
I'm a spanish native speaker, so excuse me if i make a mistake.
You don't know nothing about scripting? Take a look at this [link]
I didn't know this art, so I wiki'ed it, and found it was the ancestor of TKD ^^
It's weapon based though, mainly, but the unarmed portion looks like grabbing and countering techniques, much like Jiu Jitsu.
Jiu Jitsu has not made it to chosen Martial Arts of Kinetic Damage, but you can find the same spirit of countering and chain grabbing with the implemented Krav Maga. Basically, while all the other ingame Arts will have hand to hand combos, every Krav Maga combo will be a chain lock, starting from a regular strike.
Here is a slow motionned example (close Fierce Punch -> Light Punch -> Fierce Punch) :
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
Hi there,
Thanks for all the info shared n0mad, is highly appreciated.
I wish you the best luck with this production.
Batching Tools : Batch draw calls easily.
Toon Shader: IOS compatible, fast n beautiful.
Thyella : A small game prototype I made.
Thanks, you're welcome![]()
Kinetic Damage, a 4 years long fighting game project : Official Trailer,
Official Site : www.kineticdamage.com, Facebook page (blog, articles, dev updates).
Dev Blog : Giant thread (+ additional tips & techniques)
Quick coding question.
I am doing a 3D fighter game for a university project. And I am having some issues with the characters flipping sides. In other words, when player 1 and player swap sides.
So, whats not working is that they flip correcting, and if they do, there is still the possibility that a proctile ends up going off in some odd direction.
Any help or tips on how you did it?