Search Unity

[fighting game] Kinetic Damage [Released]

Discussion in 'Made With Unity' started by n0mad, Mar 18, 2009.


Which real martial art would you love to master ?

  1. Muay Thai

    53 vote(s)
  2. Ninjutsu

    74 vote(s)
  3. Taekwondo

    35 vote(s)
  4. Tai Chi Chuan / Qi Gong Jin

    22 vote(s)
  5. Jeet Kun Do

    29 vote(s)
  6. Pencak Silat

    8 vote(s)
  7. Boxing

    20 vote(s)
  8. Shaolin Kung Fu

    76 vote(s)
  9. I don't like martial arts / fighting games

    26 vote(s)
  1. BlueRadius


    Nov 14, 2010
    you a fan of tekken? I always played tekken tag back in the ps2 days. 3 consecutive electrics with any mashima + wave dashing = epic win. But Devils twin pistons are a beast when used properly. Ive already played Tekken Tag 2 and its great. Pauls just frame is easier to pull with me for some reason.

    The most anticipated fighter im waiting for is Tekken VS SF....

    Also im glad Fuudo won the grand finals at EVO 2K11 lol, hes a beast

  2. n0mad


    Jan 27, 2009
    Aaaah thank you BlueRadius for the vid, I so wanted to watch it but didn't find it ! Plus, Fei Long being my main since SFIV, I can't be more happy to see him make it to the top :)

    I like Tekken too, but have a big preference for the technicity of SFIV ^^

    edit : wow, Fuudo's focus cancels on normals are outstandingly well placed ...
    Last edited: Aug 28, 2011
  3. BlueRadius


    Nov 14, 2010
    Ah yes SF's technicity is top tier.

    Yea dude Fuudo is a problem, i can never use Fei Longs D,B,4 on such good timing like him. Plus he has mad recovery!
  4. n0mad


    Jan 27, 2009
    I hope he will be back next year ;)
    And I seriously hope Fei will be put into SFxTekken cast :D
  5. n0mad


    Jan 27, 2009
    Some news !

    Actually working on CPU's AI, having a truckload of fun creating it :)

    I won't go into the classical fighting games way of doing it (aka. instant reaction to any player's move, which can lead to frustrating fights on highest difficulty), but more like a human brain approach to it :

    For example, CPU will analyze in real time what strikes his opponent is able to do in the next seconds, and what strikes itself will be able to place under these predictions. Yes, a real-time, dynamic strategy.
    CPU will base his actions upon an Analyze/Decision pattern, depending on a bunch of realistic stats, like reactivity, strategy, agressivity, etc. Those stats will change between opponent to opponent, being tweaked or decreased according to the AI's difficulty level.
    Interesting thing is that they will be dynamically updated through the fight according to the opponent's decisions.

    For example, a particularly agressive AI can suddenly turn over-defensive against an opponent who manage to own the fight. Or at the opposite, a basically defensive AI can become an unstoppable ball of strikes if the opponent is analyzed to be shy or not very skilled.

    Ultimately, this will let the AI create non-linear fights, and more importantly a nearly infinite combination of different single-player fight styles.
  6. KRGraphics


    Jan 5, 2010
    That sounds so cool...groovy... I've always hated AI that seemingly read your inputs and causes anger. Hopefully I can learn how to create different personalities for each fighter... keep this up
  7. n0mad


    Jan 27, 2009
    Thanks :)
    I admit it's not a trivial task... Plus creating an AI is the most open door to bugs and crashes imho.
    But anyway, even if I'm struggling, it's a very fun part of the job :)
  8. KRGraphics


    Jan 5, 2010
    I am still struggling with the level many ideas... and I hate using the terrain sometimes
  9. n0mad


    Jan 27, 2009
    Take your best shot ;)
  10. KRGraphics


    Jan 5, 2010
    No doubt... I will post some new stuff when I get home
  11. n0mad


    Jan 27, 2009
    Hey fellows,

    I'm coming back from an interesting topic about State Machine coding (or Actions Authorization Manager), and I thought it could be interesting to expose how I chosed to handle a fighting game.

    State Machines are a pain in the ass, litterally, but they are necessary.
    I tried many iterations of different models, and finally found a simple, effective one :

    Basically, everything is driven by the animations instead of hard coded values.
    This means that instead of creating an ecosystem of different states (like OnActionStart, OnActionEnd, OnActionRun), the framework just checks the current animation state.

    If anim is not playing anymore, it asks to run the next action, which can be :
    • a queued action (ex : user pushed "move forward" while jumping, but it wasn't authorized, so the action is queued)
    • an automated chain action (ex : "falling" must automatically be followed by "landing")

    Adding to that the possibility to override current anim by a higher priority action, of course (ex : striking over walking).

    So, this architecture requires 3 things :
    • a function that can tell if one action is authorized to override another or not
    • a dictionary containing each chained action for each animation
    • a classification of actions. I chosed to create 2 dictionaries containing each animation's info about its posture (crouch, stand, jump, down), and its type of action (hit, strike, jump, idle, etc)

    The "Authorizer" function uses the current anim's posture, and type of action to determine if the requested action is authorized to override, or not.
    Example : while jumping, system asks to Authorizer the action "crouch" (= player pressing down key). Instead of testing by current action's animation name, which could produce neverending condition clauses, the function will check its posture within the appropriate dictionary. Therefore, whenever the system asks for an action that is labelled "crouch" or "stand", while current action is labelled "jump", Authorizer will say no.

    Now the pipeline looks like this :
    1. launch action -> launch animation
    2. a coroutine is checking if the current animation is finished or not. If it is finished, it launches its chain action, and then asks if queued action is able to be performed. If yes, it overrides chain action with queued action.
    3. whenever a higher priority action is requested over the current one, Authorizer tells if it is possible or not.

    Et voilà.

    The hardest part is the Authorizer and its batches of conditions priorities, but having those different Enum infos about each anim really eases the work.

    The advantages of such a method are :
    • re-usability : this SM is not restricted to execution only, as the Auhorizer can be used for virtual tests, like AI.
    • flexibility : may the action request come from a button input or an AI, the same routine pipeline is used. Making the inputs inherit the AI pipeline ensures more stability than creating a parallel one just for the player.
    • easy tweaking : with the chain actions dictionary, I can change in one second what movement should be followed by one other
    • easy SM coding : storing posture enums (stand, crouch, jump) and actionType enums (hit, strike, special, movement, etc) for each animation greatly helps in regrouping some similar authorizations into one, by testing the actiontype instead of its absolute name.
    • easy AI coding : AI can now focus on pure virtual intelligence creation, rather than performing various physical checks, thanks to the Authorizer function. It can also gather a ton of info in no time thanks to Enums.
      Ex : making a list of available moves depending on the actual action, and then provide this list to the core analysis/decision routine.

    Actually the AI system comes really simplified with such states handling, to a point where I can just write some pseudo code, traduce it in an absolute anim name and submit it to the Authorizer.

    Hope this blog helped ;)
    Last edited: Sep 16, 2011
  12. n0mad


    Jan 27, 2009
    Hey there, I've made a compilation of all the tips and techniques I found during the whole development of Kinetic Damage. The list will be growing until the end of development.

    direct link.
  13. n0mad


    Jan 27, 2009
    Here it is, how much you can actually customize your fighter at creation.
    There are 8 more special class costumes that are not demoed in this video.

    Last edited: Oct 8, 2011
  14. hippocoder


    Digital Ape Moderator

    Apr 11, 2010
    Quite impressive. I am not sure about the heads being headless and some of the poses of the male look a bit spastic when changing trousers, it should look a bit more heroic there.

    But yeah great stuff overall :)

    I think it will sell buckets.
  15. n0mad


    Jan 27, 2009
    Thanks hippo !
    Ah the headless is in fact not headless, it's just that the video compression oversaturate the colors, which make the fading-from-white effect seamless with the background :)
    Ok for the trousers pose, I'll check into that ;-)
  16. ratonmalo


    Apr 12, 2010
    amazing progress! looks great!
  17. Alec


    Mar 11, 2008
    Great to see how far you've come Nomad
  18. n0mad


    Jan 27, 2009
    Oh guys thank you so much, that's strengthening to read such comments. Times are rough, but I'll make it till the end I promise.
    On my way to finish special strikes, then a mini scenario to keep solo players away from boredom, then a simple multiplayer, plus other secret unique features, and that's it.
    The pack should be ready for Q1 2012.

    I just tested on iPhone 4S, and it's over 60fps. Should let me insert some fancy one-click computed effects like Pro water, bloom, etc.
    Loading times are super fast. Fighting flow looks exciting too, thanks to huge efforts on conceiving coherent starting/ending poses.
    I hope players will enjoy fighting with their own character as much as I am.
    Last edited: Oct 19, 2011
  19. n0mad


    Jan 27, 2009
    Oh and I suscribed for my 4th year of Taekwondo lessons 2 weeks ago, adding a new year into 13 years of Martial Arts practicing.
    It will help me refine how a technical fight does feel in reality, therefore refine how fights in Kinetic Damage should feel too.

    Ideally, I should have suscribed for real Taekwondo local tournaments this year too, to step up that perception, but I clearly don't have enough time.
  20. KRGraphics


    Jan 5, 2010
    Can't wait to play :)
  21. n0mad


    Jan 27, 2009
    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).
  22. KRGraphics


    Jan 5, 2010

    I must say, this is very inspiring for me... :) I am learning so much
  23. n0mad


    Jan 27, 2009
    Oh thanks, I'm gonna blush :eek:
    Keep up your good work ! You have a lot of talent, this would be a waste not to finish that :D
  24. MABManZ


    Sep 29, 2011
    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!
  25. hippocoder


    Digital Ape Moderator

    Apr 11, 2010
    n0mad, I'm going to be really disappointed in you if you market it like S*** 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.
  26. CharlieSamways


    Feb 1, 2011
    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 :)
  27. n0mad


    Jan 27, 2009
    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 Hippo :eek: 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 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 :p

    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: Nov 2, 2011

    Nov 1, 2011
    I made a posting on this game on my website, think it's a very promising game :) Good luck with the future development and promotion!
  29. n0mad


    Jan 27, 2009
    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: Nov 2, 2011
  30. n0mad


    Jan 27, 2009
    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 :

    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: Nov 5, 2011
  31. n0mad


    Jan 27, 2009
    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.
  32. n0mad


    Jan 27, 2009
    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 (csharp):
    1. using UnityEngine;
    2. using System;
    3. using System.Collections;
    4. using System.Collections.Generic;
    5. using System.Runtime.Serialization;
    7. public class _hashSet<T> : ICollection<T>, ISerializable, IDeserializationCallback
    8. {
    9.     private readonly Dictionary<T, object> dict;
    11.     public _hashSet()
    12.     {
    13.         dict = new Dictionary<T, object>();
    14.     }
    16.     public _hashSet(IEnumerable<T> items) : this()
    17.     {
    18.         if (items == null)
    19.         {
    20.             return;
    21.         }
    23.         foreach (T item in items)
    24.         {
    25.             Add(item);
    26.         }
    27.     }
    29.     public _hashSet<T> NullSet { get { return new _hashSet<T>(); } }
    31.     #region ICollection<T> Members
    33.     public void Add(T item)
    34.     {
    35.         if (item != null)
    36.            dict.Add(item, null);
    38.     }
    40.    public void Clear()
    41.     {
    42.         dict.Clear();
    43.     }
    45.     public bool Contains(T item)
    46.     {      
    47.         return item == null ? false : dict.ContainsKey(item);
    48.     }
    50.    public void CopyTo(T[] array, int arrayIndex)
    51.     {
    52.         if (array != null  arrayIndex >= 0  arrayIndex < array.Length  arrayIndex < Count)
    53.             dict.Keys.CopyTo(array, arrayIndex);
    54.     }
    56.     public bool Remove(T item)
    57.     {
    58.         return dict.Remove(item);
    59.     }
    61.    public int Count
    62.     {
    63.         get { return dict.Count; }
    64.     }
    66.    public bool IsReadOnly
    67.     {
    68.         get
    69.         {
    70.             return false;
    71.         }
    72.     }
    74.     #endregion
    76.     public void UnionWith(IEnumerable other)
    77.     {
    80.         foreach (T item in other)
    81.         {
    82.             if (this.Contains(item))
    83.             {
    84.                 continue;
    85.             }
    87.             this.Add(item);
    88.         }
    90.     }
    92.     public void Subtract(IEnumerable other)
    93.     {
    94.         foreach (T item in other)
    95.         {
    96.             if (this.Contains(item))
    97.                 this.Remove(item);        
    98.         }
    99.     }
    101.     public bool IsSubsetOf(IEnumerable other)
    102.     {
    104.         foreach (T item in other)
    105.         {
    106.             if (!this.Contains(item))
    107.             {
    108.                 return false;
    109.             }
    110.         }
    112.         return true;
    113.     }
    115.     public _hashSet<T> Intersection(IEnumerable other)
    116.     {
    117.         _hashSet<T> intersectionSet = NullSet;
    119.         if (other == null)
    120.         {
    121.             return intersectionSet;
    122.         }
    125.         foreach (T item in other)
    126.         {
    127.             if (!this.Contains(item))
    128.             {
    129.                 continue;
    130.             }
    132.             intersectionSet.Add(item);
    133.         }
    135.         return intersectionSet;
    136.     }
    138.     public List<T> ToList()
    139.     {
    140.         return new List<T>(this);
    141.     }
    143.     #region Implementation of ISerializable
    145.    public void GetObjectData(SerializationInfo info, StreamingContext context)
    146.     {
    147.         if (info != null)
    148.             dict.GetObjectData(info, context);
    149.     }
    151.     #endregion
    153.     #region Implementation of IDeserializationCallback
    155.    public void OnDeserialization(object sender)
    156.     {
    157.         dict.OnDeserialization(sender);
    158.     }
    160.     #endregion
    162.     #region Implementation of IEnumerable
    164.    public IEnumerator<T> GetEnumerator()
    165.     {
    166.         return dict.Keys.GetEnumerator();
    167.     }
    169.    IEnumerator IEnumerable.GetEnumerator()
    170.     {
    171.         return GetEnumerator();
    172.     }
    174.     #endregion
    175. }

    edit : Updated benchmarks thanks to Izitmee !
    Last edited: Apr 10, 2012
  33. KRGraphics


    Jan 5, 2010
    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...
  34. BrUnO-XaVIeR


    Dec 6, 2010
    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: Nov 18, 2011
  35. n0mad


    Jan 27, 2009
    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 ^^
  36. Kokumo


    Jul 23, 2010
  37. n0mad


    Jan 27, 2009
    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) :

  38. Ippokratis


    Oct 13, 2008
    Hi there,
    Thanks for all the info shared n0mad, is highly appreciated.
    I wish you the best luck with this production.
  39. n0mad


    Jan 27, 2009
    Thanks, you're welcome :)
  40. febulous


    Nov 22, 2011
    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?
  41. n0mad


    Jan 27, 2009
    There are so many different types of parameters which could produce this, I'm not even sure I could give a proper help :/
    But ... this looks like your projectile is parented into something that has the wrong direction when you're flipping sides.

    Anyway, don't hesitate to Private Message me for anything not related to Kinetic Damage ;-)
  42. hippocoder


    Digital Ape Moderator

    Apr 11, 2010
    Personally I would like to see the hit buttons arranged 2x2 instead of 1x4, since 2x2 is very similar to what I'm used to on joypads or arcade. 1x4 layout means you could end up doing a little kick instead of a sweep once things get frenetic. Just a personal opinion. Perhaps an option for either?
  43. n0mad


    Jan 27, 2009
    Wish granted 3 weeks ago :D
    (no video shows it for now, but it's done in a diamond shape, as square would have hidden too much the fighters)
    You're right, the linear alignement was making it too difficult to reach the further left button.
  44. n0mad


    Jan 27, 2009
    Hey there,

    I thought it could be nice to expose the way characters strikes are animated in Kinetic Damage :)

    (Forgive me if the following is not perfectly written, as English is not my mother tongue.)
    Please let me attempt to transmit something I learned during my 11 years of Martial Arts practicing, and which helped me a lot into creating all Kinetic Damage animations :


    The 3 steps of a Strike

    In any real life strike, may it be from a human, a beast, or whatever, there are always 3 steps :

    1) Arm
    2) Strike
    3) Recover

    And in any fighting game, the way these steps are represented is definitely important in how the player will "feel" his fighter, therefore how much he will enjoy it.

    If a strike feels bland, or powerless, the player will feel powerless, even if it has over nine thousand damage.

    So beyond the correct adjustment of these 3 steps, there are also 3 other very important parameters, which are not that easy to catch when one didn't practice a real life martial art.

    How muscles, limbs and motion are working together

    These are :

    1) Limb Balance
    2) Muscle Tension on impact
    3) Motion Logic

    Limb Balance is how your limbs are weaving between each other.
    ex : while giving a left kick forward, your torso will have to weigh backwards to counter balance the striking leg's kinetic force.

    Muscle Tension is how each muscle is acting and reacting at the exact moment of an impact. Put it broadly, in a strike, there is always a force and a counter force. A force which is the direction of the strike, and a counter force which is its opposite force delivered through the whole body.

    This very point can become quite complex to figure with some long, impressive moves. But it can easily be calculated by distributing the reverse force of the impact tipping point through the whole body.

    ex : a fierce front kick will distribute its impact force through :
    1) the leg
    2) which will make the hips rotate backwards
    3) which will make the torso follow and weighs backwards too
    4) which will cause the arms to counter the created weight unbalance by pushing backwards
    5) Additionally, we can guess that this unbalance counter is a "reflex", so the torso will search for the nearest tip point to throw backwards : the elbows. Which means retracted forearms.
    6) As torso + arms does not represent a sufficient weigh against a fierce forward thrown leg, the ground leg will impulsively try to put the final weigh balance in order not to fall. So it will be highly tensed, trying to go the total opposite way of the unbalancing force. That's it, opposite to the striking leg. Result will be a straightened, backwards reaching leg.

    At last, Motion Logic is how your joints are interacting between each other, and with the force they receive from gravity. It's different from Limb Balance, as it's not entirely driven by the fighter's will. It could be defined by a mix between limb Inertia, and muscle force.
    The more powerful the strike is, the more Motion Logic will be driven by inertia, muscle tension and limb balance.
    For example, this is why it "feels" not right to see a very fast, but yet very aerial and complicated kick.
    You have to think about how inertia will affect each moment of a strike, and therefore how Muscles and Limbs will try to counter balance this inertia.

    ex : After a heavily forward-thrusted roundhouse kick, you just can't animate the fighter directly towards its resting pose. There is a high inertia effecting the whole body after the 360° turn.
    So you'll have to put a recovery pose, slightly placed at the position where the body would have landed if it had jumped instead of kicking.
    Then animate the fighter from this pose to its resting one.


    Whew ! Doesn't that sound really complicated ? In fact not really, as we all have this data inside our body and our brain, within what is called reflexes.
    So if you're having a hard time to figure those calculations, just perfom the move (or what could be close to it) in real life again and again, and try to analyze what you feel with your muscles and your limbs at key moments.

    But honestly, the best way to learn this is just to take some Martial Arts courses :)
    After you learns a few basics (I recommend TaeKwonDo, is heavily reliant on these balance/counter-force concepts), you won't have to burn your brain anymore, as everything will come naturally from what your body learnt.

    Try this for instance :

    1) Stand still, and throw a right punch to an imaginary face in front of you.
    Notice how your left arm will naturally try to fold itself. This is the counter-force I was talking about.

    2) Now do the same, but while throwing your right punch in front of you, throw a strong left elbow shot directed at behind.
    Repeat this 4 or 5 times, stronger and stronger. Can you feel how much powerful your right punch becomes ? ;)
    That's it. Counter-force.

    Illustration :

    View attachment 28193

    (pic text here :

    I hope it helped some !
    Last edited: Dec 15, 2011
  45. MABManZ


    Sep 29, 2011
    Just noticed the Facebook page says "2nd Half 2012"

    Delay again? :(

    Hope development is still going smoothly. Whatever the case, game looks great and I'm looking forward to it!
  46. n0mad


    Jan 27, 2009
    Hello MABManZ :)

    Yes, I'm sorry ... It's a mistake, I meant FIRST half :)
    Anyway, It seems like every fighting game this year has been delayed :/ (Skull Girlz got the same treatment I saw)
    That's why I didn't want to make the game too much public or too much known until release, so that interested people would not be deceived :(
    (I didn't reveal 50% of the fight mechanics yet for that purpose)

    But I want to ensure that I deliver the best possible experience, with fun and original content, exciting animations, and most of all a capability for the game to be interesting for hardcore competitive gamers, while being different from existing fighting game mechanics. I'm actually working 6/7 days, 10/24 hours on it, and will possibly have to put myself into debt for one year to finish it properly. So there's a lot of personal investment :)

    Actually I'm 100% confirming that the game will be released before September, that's a sure thing.

    And thank you for your interest :)


    Also guys, don't hesitate to give any critic about what you see/know from Kinetic Damage, may it be positive or negative (stuff that could really affect you while playing). I will really learn from that.
    For example I'm a bit stressed out by the overall graphical quality. Some people on the net say it's not pretty, while some other who played it say it's looking very good. I don't think it's top notch graphically, because I did lack of time to make it ultra polished. But I'll try to make a second pass on levels.


    Sidenote : I'm very happy to see that Sir Yoshinori Ono, the producer of Street Fighter 4, revealed in a recent interview that his vision of future fighting games is all about customization and character creation :)
    link :
    That's an honor to see the biggest fighting game producer sharing the same vision I started to have 3 years ago :eek:
    Last edited: Feb 5, 2012
  47. n0mad


    Jan 27, 2009
    Hey there, I made a second pass over level graphics quality. As Kinetic Damage was formerly made for older mobiles, iPad version would be quite unacceptable on certain background scenes. Now I think it will be better. Tell me what you think ! (I put Antialiasing 8x, so the judgement is completely focused on artworks and design).
    That's how it should look on your iPad, minus the AA (or not, I'll put a settings option for AA anyway).

    First 2 levels : Alien Landing Station and Borrowed Mansion.

    $ALS_1.png $ALS_2.png $ALS_3.png $BM_2.png $BM_1.png
    Last edited: Feb 9, 2012
  48. MABManZ


    Sep 29, 2011
    Great news on the update!

    Personally I think the graphical weakness is not in your environment but in the character models. They are a bit lacking in geometry details such as the mitten fingers (as opposed to have 5 full fingers) and some clothing looking a bit blocky. If any dynamic cloth/hair animation is possible it would also make it more appealing.You could also play around with more advanced shaders and lighting for the characters (take a look how the character shader makes SFIV look so unique)

    However, If you intend to keep performance high for older generation devices, increasing character detail may not be feasible.

    Also make sure your animations transition smoothly between different states, in early gameplay videos you released, some animation transitions appeared quick and looked unnatural. You haven't released any videos in a long time so this may have already been addressed :)

    Overall though I believe the quality of this game looks a cut above most stuff on the market (at least on Android, I do not have an iOS device). As long as the gameplay is engaging I think it should be successful :)
  49. n0mad


    Jan 27, 2009
    Ah great, some feedback :D

    Totally agree about the fingers ^^ In fact, I reworked them completely lately, and give every model 10 fingers :p
    (I thought there would be some screenshots showing it, but there seems not)


    About clothing, it's a bit more complicated. As you said, I intend to keep the game playable on older devices, so I had to limit the number of polys per model (actually 1000). Making the clothes less blocky would require to make another batch of all of them (128 total), and I will never have the time.

    Although, there are some vids where I was testing a smoothing angle of 60°, which became 80° since then, so less blocky feeling :)

    Yeah I loved SF4 shaders. I tried some different experiences with char shader, so they would be more glorified than the background, and ended with a custom written surface shader which just boosts contrast, + adds a backlight on the silhouette.

    I tried toon shading too, but it was decimating the textures too much. So finally, contrast + backlight + consistent work on textures (baking SSAO, for instance)

    Absolutely ! It didn't feel right to me too. In fact I spent a whole week writing a mini framework to manage transitions :eek:
    Result is flawless : I tested all kinds of transitions (some of them mixing up to 5 different anims), and even at a TimeScale of 0.1, there's absolutely not a single start of animation twitching ;-)

    I also wrote a complete runtime manager which would suppress any offset when mixing 2 anims. For example, if Anim1 finishes at X = 0.5, and Anim2 starts at X = -10, the character would "slides" backwards due to interpolation. The manager I wrote nullifies that, with complex calculations based on determining the offset of the animation to play ahead of time, all with a minimal processing overhead (1 ms).

    You can see the two managers in action in this video :

    Char on the left performs 4 different animations, with an offset of X = 500 cm from Anim3 to Anim4 (armLock to stand), while char on the right performs 5 anims.

    Left Char anims are triggered on button push (it's a combo), so transitions can happen at any time.

    Char on the right even uses a part of the manager which interpolates between 2 mirrored animations (calculating a flawless visual from one anim facing right, and one anim facing left, resulting in both facing left).

    Timescale in the video is 0.2, so it will be even more unnoticeable at full speed.

    Thank you very much for this precious feedback, it helps me to know where I should focus my efforts during the few monthes left :)
    (on top of remaining features to produce)
    Last edited: Mar 29, 2012
  50. n0mad


    Jan 27, 2009
    Also, Borrowed Mansion level was feeling a bit lifeless, so I added 2 bimbos and a cool dude buoy sliding in the pool :p

    $BM_1.png $BM_3.png

    Attached Files: