Saturday, May 2, 2015

Unity Analytics

Recently I was asked to investigate integrating analytics into a game I'm working on, and I decided to write a little post about it and my experience with analytics as a whole.

 

Does anyone actually use analytics?

The obvious answer is yes, people use analytics; otherwise, it wouldn't be a topic of discussion at GDC or this post.  But my question really pertains to, does everyone use analytics?  Sure, people integrate analytics into their game, but do they actually understand how to interpret the data they are tracking?  That's my issue really.  I feel like sometime the desire for analytics data is like "We need to integrate analytics!  For the love of all things sacred, if they aren't being recorded, the game will most surely fail!"
But then those who request the analytics get them and it's like, "What do we do with all this data?!  I'm drowning in piles and graphs and pie charts of data!"  So that's my first...disclaimer?  Sure, disclaimer.  If you're going to integrate analytics, make sure you have a plan on how the data will be read and used.  I contemplated on integrating analytics into Battle High 2, and if I were to do so, I would probably try and use it to analyze the following:
  • Which characters are the most popular.  If a character is neglected, maybe it needs some buffing; if a character is overused, maybe it needs some nerfing.  Also track their win / loss percentages.
  • Maybe track the highest combo per character per match.  If a recorded combo seems ridiculously high, maybe there is a problem with that character.
  • Are the journal entries / challenges / achievements actually being finished
That's really it for now.  I usually undershoot what to track; I know some designers who could probably fill a list of 100 items to track on Battle High 2 alone, but again, would I take / have the time to analyze all those results properly.  As someone said to me, "Tracking the data is easy; analyzing the data is the hard part."

Unity Analytics

Anyway, the game I've been working on was made with Unity, so I decided to try Unity's new analytics plugin, aptly named Unity Analytics.  It's in beta, but what I liked about it was that it was extremely easy to integrate.

 

Creating a Project

So if you're interested in trying Unity Analytics for your project, you should go here first:  https://analytics.cloud.unity3d.com/ .  You'll have to be logged into your account, and for now, it's available for all users during this beta.
When creating a project, you'll be asked a few questions such as the project name and organization and version of Unity.  There is then a question about whether or not your game is directed at minors, since due to some laws, the type of data collected is limited when creating a game for minors.
The only thing that was a little confusing for me was the question about the Google API Key.  I wasn't sure if this was Google Analytics or some other key, but it's the key used by Google if your game has IAP purchases and is integrated into the Google Play Store: 


It's an example, but that long string is an example key used for the Google API Key.





Once this is done, your project is ready to start integration.

Integrating Unity Analytics

Another thing I liked about this process is that there is a built-in integration tutorial into the website, and even better it allows you to test if your integration is working.  The initial integration involves a few steps:
  • Downloading the Unity Analytics SDK, which can be found in the Unity Asset Store
  • Creating an object that calls UnityAnalytics.StartSDK (projectId)

Project ID is supplied in the integration steps. You can then test it through the website, almost immediately, to see if your game, even in the editor, is sending these calls properly. There are then steps to try and do monetization analytics, custom events, and player definitions.
Our game doesn't really require monetization analytics -- which I believe is why you are asked for the Google API key -- and player definition yet, but the custom event integration is pretty painless.
All you do is call UnityAnalytics.CustomEvent. It takes two arguments, a string -- the name of the event -- and then a Dictionary, whose keys are strings and values are objects -- extra parameters about the custom event.
The interesting thing though is that Unity analyzes and processes the data, so the way you send custom events is unique.

Analysis Points


Disclaimer: I am still new to Unity Analytics and my interpretation of Analysis Points could be inaccurate.


Every project you make uses what is known as Analysis Points. These points can be better understood by using this post. From my understanding, they are depending on the different types of custom events you can track. The evaluation is a little interesting, but all-in-all, it forces you to be very careful about how you track said events.

For example, let's say I have an event that results in true or false. "Accepted Mission". So, to call it, I would call:

UnityAnalytics.CustomEvent("Mission Status", 
     new Dictionary());

Now what if I wanted a custom event that is simply mission failed or passed.


UnityAnalytics.CustomEvent("Mission Status", 
     new Dictionary()
     {
          {"Success", true}
     });


Now the problem here is that my custom parameter, Success, will actually cost 10 analysis points -- you start with 1,000 per project -- because it'll be converted to a string as opposed to an integer. Now, I could try doing something like 0 for false and 1 for true, but the problem is Unity Analytics will average these values so reading them will become difficult. A smarter approach would probably be to do two different CustomEvents with no custom parameters such as


UnityAnalytics.CustomEvent("Mission Failed", 
     new Dictionary());

UnityAnalytics.CustomEvent("Mission Success", 
     new Dictionary());


Using two simple Custom Events will only cost 2 analysis points, 1 each. Also, as a heads-up, I have found that using an enum in the dictionary, will not work or register. Sending a separate Custom Event based for each enum would probably be more efficient.

 

Summary

So that's all I really have notes on, the integration. Unfortunately, the game I'm referring to hasn't been updated with the new analytics yet, so there hasn't been a need to try and analyze any data. There seems to be a lot of advance tools provided by Unity for funneling data, testing, defining the users -- male, female, age, etc.
Unity Analytics really comes down to another reason why I like Unity as a whole. The Unity Engine isn't the most powerful, but it's approachable and with the addition of new features such as this, Unity Ads, and UNET, Unity continues to provide a lot of new features for their user base so they can utilize features that a lot of other successful games utilize.
Now, unfortunately, I'm not sure what the future plans of Unity Analytics will be. Will they charge for more analysis points? Will they give users less then 1,000 once out of beta? I'm not sure, but if you do what to integrate analytics in your Unity game, it's a great place to start!

Wednesday, April 22, 2015

Battle High 2 Future...Plans?

It's humorous -- maybe not the best word, a trend you'll notice a lot in this post -- that my previous post was about future Battle High 2 plans as this post is also about them and how I'm probably going to cut a majority of those previously mentioned.  It's also why I promise nothing!
Last weekend I essentially had a nervous breakdown; actually, calling it that is an insult to anyone who has had an actual nervous breakdown.  What I had was mostly just a strong, stress-induced, table-flipping realization that I, after working on the game on-and-off for over 4 years, just wasn't enjoying working on Battle High 2 anymore.

Okay, it was more like monitor-punching -- which I didn't do! -- but similar in idea
I was trying to update a feature, to create a training dummy, because all the great fighting games have advanced training dummies -- which, in reality, are probably more for the programmers, designers, and testers than players -- but it was taking me forever and wasn't working and creating a lot of frustration.  It was one of those features, like a games' tutorials, that if you start thinking about it early, it's a lot easier to implement, but I didn't at first and it was becoming nightmarish.  When I started writing Battle High's code, I was just excited to be getting these systems working, not trying to think about the long-term integration of new features.

I was, and let's face it, still am, a little like this dog.
I felt like I was on this tight schedule, trying to get these changes in for the Xbox One version, and the worst part is that I felt like nobody cared and was losing the little motivation I had left.  The original Battle High team pretty much disbanded, so I've been working mostly by myself.  There wasn't a KickStarter or a heavy demand from a large fanbase yelling at me to finish.  And the potential I saw in the game was quickly diminishing.  I still see potential in the franchise, characters, and game's systems but using the base I had just felt more problematic to try and fit new features in than to just start over.
But at the same time I tried starting over with Battle High, two times actually, and each time failed.  I think this failure came due to another realization that Battle High isn't mine.  I hate this word because it feels so selfish, but Battle High is actually much older, about 7 years apparently, 3 of which I wasn't involved, and I just feel guilty, like I stole it.  I think stole isn't the correct word; if I stole it, I'd probably be in a litigation nightmare, but that's not the case -- and hopefully becomes it.  I guess the fact that Battle High isn't truly my IP, I feel dirty making certain narrative and design decisions without input from the original team, a team that's moved on to other things.  Also, when asked things about Battle High like "what was your reasoning for this," I have a hard time answering them, especially if they concern a character's narrative.  I guess I was just excited about making the game for XBLIG and the same with the sequel when the team was still really involved, but after it disbanded, the only motivation left really is just that it exists.  The systems, art, etc., are done; they just need "polish" which is so dangerous because you can polish and roll a turd in glitter forever but you still have a turd.

This is actually a chocolate covered banana...but it looks a bit like a turn with sprinkles...

I don't think Battle High is a turd, but when it comes to the Xbox One, I feel like I can already hear people moan about the pixel art and how they don't feel its worthy to be on such a powerful, next-gen console or how the netcode (or lack thereof) is substandard.
Feeling saturated with a lot of negativity and doubt, I was contemplating on just killing the project, forgetting it and moving onto something completely new, but then I thought:


It's a silly quote -- from my secret muse, Amy Poehler -- and I don't mean it in a disrespectful way to players or anything.  And obviously, I do care otherwise I wouldn't write this.  I think I'm mostly saying this to myself.  Not everyone is going to like my game no matter what I do.  I need to face this fact.  So I say this to them, but also to my inner negativity and fear about those individuals.  I can't let that stop me from something I want to finish, something that would be a shame to abandon now.
Though, this being said, I'm probably going to cut a lot of stuff that I previously mentioned; this might upset some people who I do care about liking it.  For example, I would LOVE to get new characters in the game, but I thought of it this way:
  • I have 13 characters already that need some balancing love, focus on them first
  • Who knows how long getting voiceover, new music, new sound, artwork, etc., would take, and I would hate to delay release because of these unknown variables
  • Modern gaming and DLC make integrating new characters later much easier
  • Finally, if the game is an utter flop, I can just say "Screw it, no new characters!" saving both money and time.
So these are my current goals.
  • Improve artificial input.  The idea behind this is that by doing this I can in turn create more intelligent AI.  This is the feature that was stressing me out but mostly because I was trying to rush it.  I'll need to gut some of my code, but it'll probably take about two to three weeks to do properly and knowing that will make me stress about it less when I face inevitable setbacks
  • Balancing.  I started some of this by making attacks frame-based and not strange multiplier based but more work needs to be done.
  • Improve UI -- EVERYWHERE.  I don't think the current UI is bad but I hate how it doesn't tie into the school theme at all.  I have an idea of how to do this, but it does go into that dangerous polish realm so I need to be careful.  In fact, I want to polish the art to make it more "worthy" of Xbox One, but polish is such a dangerous area to get lost in.
  • ONLINE.  I don't want to do online; it's not a secret.  I'm sick of buzzwords like netcode and GGPO (which I think when most people say, they just mean rollback netcode, not the specific framework which apparently doesn't integrate into Unity), but I ultimately know I need it.  I know doing online at this point is going to be painful and not good, but it will be a learning experience.  I need to try and get it working so that my FUTURE games can have it and have it done properly (or at least better).  The only thing I'm struggling with is should I use UNet, Unity's new networking solution, available only to beta users currently, or Photon.  The risk I have doing Photon is that it may not work properly on Xbox One, but I'm not even sure this is entirely true.
That's really about it.  That doesn't sound like much, but I'm at a point where I want to finish the game, get it on Xbox One, and evaluate its popularity from there.  Like I said, if people like it and there's a following -- doesn't even need to be a giant one -- sure, I'll look into adding new characters, rewards, modes, etc., but for now, it's not necessary to the core.
Worry about the CORE features of the game -- something I hear a lot.

I want to do one more OUYA / PC build -- with the improved AI and balancing -- then maybe one more with very early online and then it's onto the Xbox One work and getting the game published there if I want to try and make my 2015 deadline -- a deadline I realize is really only in place because I want to move onto something new in 2016.

Finally, to those who have been following the game and enjoy it, I really appreciate you even though this may sound like I don't.  I even mention if there were more fans I'd have more motivation, and it's a little true, but who knows?  Maybe more fans would make the pressure and doubt even worse.  I think my some of my doubts and issues come from not wanting to disappoint fans of the game, and sometimes my ideas of starting over are more to serve them with a new idea that I'm ultimately more confident in.  Anyway, hopefully I can give a new update that isn't just about my feelings soon, a fun, visual updates with images and gifs and videos!

Sunday, March 29, 2015

Future Battle High 2 Plans!

So a few Fridays ago, I tweeted this:

And it's true, but for now, that's all I'm going to say. I'm working on it, but even before an Xbox One version, there are changes I want to make to the versions that are currently live on Desura and OUYA -- which I can also say now exists in Chinese!

Improved AI and Training Mode


So in a previous post, I wrote about a talk Mike Z gave at UFGTX. In his talk, he put a lot of emphasis on the importance of having a deep training mode. Personally, I don't go into training mode for hours, so an in-depth training mode never felt important to me, but the more I thought about it, the more I realized that it's a really useful tool not only for players but also the developer. I can make an AI do and see if the AI is corresponding to my requests and recorded inputs accurately. I think another reason I strayed away from it was that it'd be a rather large amount of UI work. Seeing that I could use this as a great way to improve AI as well, this will probably be one of the first tasks I tackle.

I WANT MY AI TO BE ADVANCED!  Okay, maybe not this advance

From Time to Frames


In the XNA version, I was using time-based system for animation and frame counting. Now, I do have a system that consistently increases times so animations are accurate, but due to floating-point error on different systems, this can still be a problem, so I want to change to a frame-based system. For example, if Jiro's light punch is 10 frames, it would be 0.6 seconds to complete (10 Frames / 60 FPS). If I wanted to change this and make the animation a little bit longer on start-up, in the current system, I'd have to change some hard-coded multiplier, but with this new system, I can just add a duplicate frame to the animation. This is a pretty big fix, but it's one that'll make updates and changes much easier to make. Also, if people were to ask for frame data, I can actually give them something that's readable and make sense. The biggest challenge is how to handle when the player has gotten hit since this varies. Hit while standing I think is about 6 frames now. If it's less I can just stop the animation before that, but if it's more, figuring out how to distribute the hit frames is a bit challenging.
Okay, I wanted an illustration for time versus frames; this is not the best.

Updated Audio

So I enjoy the music in Battle High 2 and won't be making any changes to it; however, a review did mention that the sound effects are a little on the weak side. Personally, I don't have the best ear for sound design. Audio is important, but for me, it's personally not the most important thing I look for when playing a game, so in my own work, audio can be lacking at times. Fortunately, I am planning to update the sound effects as well as work on some leveling issues between them and the voice-overs but with someone's help.

Just add "game" to the end, and it's pretty accurate.

Online


This one has been, and will continue to be, something I struggle with. Again, people have suggested I inquire about GGPO, and I did a little more research, only to sadly discover that it's very unlikely it'll work with Unity. At the same time, I think I'd rather try and see if I can do some sort of online mode myself. It'll no way be better than GGPO in any way shape or form, but I'd like to make something that players think is at least tolerable and playable. I have some ideas how I'll do it, and the OUYA and PC versions will definitely be my guinea pigs. I think getting the frame stuff to work will definitely be an important factor in getting this online mode to work as well.

No Promises


There are many other updates I'd like to make -- new characters, new stages, new modes, etc. -- but I refuse to promise anything. As a solo dev., it's very hard to promise things. Heck, even on a large team, promises can be risky. There is a lot I want to do to make Battle High 2 the best it can be, especially once it's on Xbox One, but it's a lot of work, and unexpected things can happen; therefore, I refuse to really promise anything, even in regards to what's listed above.

Like this Shayne Ward guy, I make no promises!

DLC and KickStarter


So another thing I've been thinking about is how am I going to monetize this game in the future. Should I take a more modern approach to it with things like DLC or In-App Purchases? I do really like the approach Tekken Revolution took, making it feel similar to the days of the arcade; however, it's a free game, and it's not free to make. Player and multiplayer servers have to be maintained as well as new content pushed from time to time is expensive. Also, IAP sometimes have a play-to-win feel to them if they aren't balanced properly and turn off most players.
Another thing I've been thinking about is, "Should I do a KickStarter?" As of right now, I don't really need to do one from a financial standpoint; sure, more money would help, but it's not needed. I can still get updates and the Xbox One version done. A lot of people though mention that KickStarters are a way to get the word out, a sort of marketing trick. There are two caveats to KickStarter though. One, they are a ton of work. You just don't make the KickStarter and let it go while you develop. It's a living, breathing project at this point. You have to answer questions, emails, prepare physical rewards, etc. At the same time, if the KickStarter fails, it would probably be a huge blow to my ego, making me want to cancel the project altogether. Saying this, as of right now, I will not be doing a Battle High 2 A+ KickStarter any time soon, if ever.

Plus, I'd have to add this tacky image to the game, :-P

Rewards (and a mini-rant)


So one thing I want to make eventually is an deeper single player mode similar to Mortal Kombat 9's challenge tower. The problem is you want rewards for the players then. As of right now, the best rewards I can offer are more color palettes, concept art / imagery, and more bio information. These are okay, but not amazing. Again, more characters, stages, access to the original music, would all be great, but it's tough to get that functioning properly. I still need to think how I'm going to manage this, but there is one thing I know. I will NOT do my unlocking like Resident Evil Revelations 2. I'm fine with the game as a whole, but the reward system is irritating. You first do a difficult task and then a new item becomes available to purchase in a store using in-game currency. I hate this approach! If I can't do that task requested, then I'll just never get the reward, and if I finally am able to do a difficult task, sometimes the reward is so expensive I have to earn in-game currency before I can buy it. It's really frustrating.

I couldn't find an image of the store, so here's Barry kicking something!


I'm fine with either having to earn in-game currency to buy stuff OR do difficult tasks to unlock something, but both is so annoying. I'm also surprised more developers haven't tried doing in-app purchases for this. I think Revelations 2 would be a great example. For example, say I can't get S on all missions for whatever reason: lack of skill, time, patience, new games, etc., but I really want the rocket launcher you get with it. Now, I can get Revelations 2's strategy here. If the player doesn't know, the mystery reward might make them want to try harder, but if they know and don't care, they'll never try. I would be fine with this. Regardless, I'm surprised they haven't just said, "Give us a dollar for that and then you don't have to worry about it." You won't get the achievement, sure, but now you have access to a reward you'd really want. It'd be like a cheap, single-code GameShark or GameGenie without the awkward boot discs or devices! "You want infinite ammo?! Sure! Just give us $3 OR beat the game on nightmare mode." Also, imagine the player who beats the game on nightmare mode, "Wow, not only am I awesome and got infinite ammo now, I saved $3 I don't need to spend now!" Regardless, as of right now, Battle High 2 doesn't even have rewards like this, so I won't be doing it, but I also won't create a in-game currency.

Sad there really aren't any GameShark and similar things for next gen.  THANKS, OBAMA!

Transparency

Finally, I tweeted, while inebriated at GDC, that I want to be more transparent about Battle High 2:

Ignoring the GDC is bad for me part, I mentioned I wanted to be more transparent, and what I mean is that I want fans of the game to know what I'm doing more often and try and involve them more in the process of making this game. I've taken a few small strides towards this, for example, I created this survey so I can get more insight on what players want in future updates: http://t.co/3Z5d7iVGNT.
At the same time, I want to use this blog as a development log more often and update it when I make small changes and show more progress. I'm not sure I'm going to go as far as dev streaming; if I were a full-time indie, sure, but with a full-time job already and the amount of time required to set these up, it just doesn't seem feasible. Also, I'm not sure how many fans of the game would even be interested in that.

Good quote, DL!  A good summary of why I want to be more transparent.


Anyway, this is the exciting start of a journey. True, Battle High is pretty old in terms of a franchise, but this is the start of me taking it more seriously and trying to put it out there and make it the best game it can be!

Monday, March 16, 2015

Grading Battle High 2 from Mike Z's Perspective


So the video above is of a talk Mike Zaimont, who leads various roles for the fighting game, Skullgirls, did at Ultimate Fighting Game Tournament X.  The talk was entitled, "How to Make Fighting Games", but if you watch the talk he said a better title would have been something about what aspects fighting games have improved upon and what aspects they have forgotten.
Now, personally, I'm not a huge fan of Skullgirls; it's not a bad game, but it just never appealed to me.  Locally, I don't know a lot of people into it who want to play, and  at the same time, the narrative just didn't appeal to me enough to really get invested into it or its cast, but I still have respect for what what one of its leads thinks about fighting games.  Mike is a tournament-level player and as such, he knows his stuff, so I decided to watch the talk, which is a little over an hour, and "grade" Battle High 2 in regards to it.
Like most fighting games, Battle High 2 will probably never really be "done" until I move onto the next entry in the series or until someone forces me to stop working on it.  Anyway, I felt it was important to watch the video and take notes to what Battle High 2 is and isn't doing.

UI

Not fighting game UI, but an example the UI can make or break a user experience.
User-interface is extremely important to a game's experience.  A lot of this talk actually covers different aspects of interface and things fighting games should do to make its user experience smoother.

 

Button Configuation

SFIV's Button Config.  I think the desire for multi-button macros is why they didn't do tap to assign originally.
The first thing noted is that fighting games' button configuration screens should utilize tap to set functionality, meaning that players should be able to assign different functions by pressing the appropriate button, for example, pressing X to assign it to light punch.  Street Fighter IV changed this and players have to instead toggle the different attacks for each button, which can be problematic for different types of joysticks.  Fortunately, Battle High 2 does tap-to-set!
Another thing mentioned is that players should be able to set buttons on the character select screen.  This is something Battle High 2 does not do.  I don't disagree with this entirely, but I still see tournaments with button configuration in the character screen then requiring in-match button testing anyway.  What it really seems like you want is a way to test the buttons from the character select screen.

 

Character Select

The next UI topic was character select.  Besides button configuration, it was noted that players should be able to undo any number of steps, character or stage select to account for mistakes.  Battle High 2 does this as well actually.  Finally, if a game offers a handicap mode, players should be able to disable it.  Battle High 2 doesn't have handicap, so technically it does do this.  I'm not sure if I'm going to add handicap.  Is that a feature players even care about anymore?  I get the importance of it, to help an expert player more easily introduce a novice player to the game, but some people, even if they want it, won't admit that, and it just gets ignored.

 

Pausing

Battle High 2 fails a few areas here.  The opinion here is that players should not be able to immediately pause in versus mode; instead, they should have to hold pause for a few frames before the game pauses.  This would prevent players from pausing mid match; I think this is important and something I've seen ruin a player's "tournament life".  Battle High 2 doesn't do this sadly, but it is something I know I could implement quickly.  I do think single and versus player modes should exhibit this.  I get if you have to pause mid-game, instant pause is nice, but I do think a player should have pause delayed because in some modes, especially those scored on global leaderboards, can cheat.  As someone who was number 1 on DOA4's single survival list for a very short time, I have firsthand experience with this.

 

Versus Mode

The next part went over versus mode specifics.  Battle High 2 doesn't do a lot of these sadly, but I think most of these would be rather simple for me.  The first is that the win streak should be displayed on the win screen, and it should be the total number of wins, not just the win streak.  This helps players know who one last or who won more matches in long sets.
Then, from the win screen, players should be able to jump into a new match almost immediately or go to just the stage select screen.  Sadly, Battle High 2 doesn't do either of these.  Right now, Battle High 2 just immediately goes back to character select.  What it should do it allow for three choices:  rematch, character select, and exit.  If one player chooses rematch and one chooses character select, the game should return to character select, but the player who chose rematch should have their character already selected.  This isn't a big deal for Battle High 2, but for games where you have a lot of options such as Marvel Vs. Capcom 3, this would help speed things up quite a bit.
Then, if stage select has a random choice, the stage should rotate if "rematch" has been selected.  Battle High 2 doesn't even have random select on the character select screen or stage select, but if I remedy this, I would allow random rotation with both.
Shortcut mode was then mentioned, which is more important for older games, but it essentially made all select screens just pure text to prevent long loading times for UI, but with modern PC and consoles, UI screen loading times are usually not atrocious.

 

Replay Mode

Replay Mode doesn't seem that important in modern games with how good streaming and console recording is, but I see why it's important from a testing perspective.  Sadly I don't think Battle High 2 is really capable of handling proper replays at this time.  It's something I could probably try and figure out, but it would take some rework.

 

Netplay 

This little bastard is still a mystery to me...
Netplay is a big component missing from Battle High 2.  I've never really programmed online multiplayer and everyone I discuss it with says it's really tough.  Some people simply say "Use GGPO!", in fact, it's mentioned in this talk that it's the industry standard; however, I think it's one of those easier said than done things to integrate.  I don't know any fighting game done in Unity3D that uses GGPO; if I did, I would probably ask those people how they acquired a license and evaluate if it's right for me and Battle High 2.  Regardless, what I derived from this is that state-based, rollback netcode is what I should shoot for with Battle High 2.
Then, it was stated that being able to get opponents from training mode is useful and, if your game has lobbies, allowing 10-person lobbies to hold multiple matches, not just have 8 of the ten wait.  For me, I need to approach Battle High 2's multiplayer with babysteps.  First, just get multiplayer working, then worry about advance lobbies and other things.

 

Training

A tiny screen shot of BlazBlue and its 8 pages of training mode options
A deep training mode is definitely something I neglected with Battle High 2.  I don't even have dummy recording.  If I did, one thing mentioned is that the dummy should be able to switch sides; if the dummy is supposed to do a forward z-motion on player 1 side and it should do it if on player 2 side as well.  It's also mentioned more advanced "reversal" setups should be allowed so a training dummy can perform a reversal in training mode.
Also, the game should supply players with character-specific features.  BlazBlue is a great example of this.  There was even a note that these options should show as soon as training mode starts, even before it if possible.
Fortunately, I do display hotboxes but the data needs to be more accurate as well as frame information.
Finally, I don't "save state" which is a technique that allows the game to go back and forth in frames with data such as player position, state, etc., recorded.  Again, this is a problem with the way I wrote Battle High 2 awhile ago, in fact, all of the shortcomings of Battle High 2's training mode comes from the fact I don't really train a lot in fighting games.  I do even question the importance of training mode for casual players, but hardcore fighting game fans will definitely want it, and not having it will hurt the overall impression of the game.  I do want to improve Battle High 2's training, but I do feel it is less important than some of the previously mentioned issues.

 

Gameplay

 So that was about the first half of the talk.  It then switches over to gameplay.

The first part discussed trading hits, or what should happen when two characters hit each other at the same time.  The idea was that the first frame of the hit should be of the attack going on, not the hit animation.  This, during a double KO for example,  can cause confusion, making it unclear exactly what happened.

Hit and block stun was then mention, pointing out that if a character is hit, that the hit animation bounds should be identical to the idles.  This would help with consistency and prevent some strange combos from occurring.

An older example of a cross-up


Cross-ups were then discussed.  A cross-up is an attack that hits the opponent even though the player has crossed over them.  The thing mentioned is that if hit by a cross up, the opponent should move towards the opponent; moving them away actually puts the player at a disadvantage, defeating the purpose of cross-ups.

Firebrand in Ultimate Marvel Vs. Capcom 3 is known for having a rather nasty unblockable setup


Unblockables and unblockable setups were the next topic.  Essentially, unblockables should be prevented if possible.  Examples were, if the character is already in block stun, don't allow unblockables hits to occur.  Battle High 2 doesn't have any unblockable attacks that aren't throws so this isn't really an issue.
Also, don't require blocking from multiple directions such as a projectile coming from the left and the player on the right.  The block should be for the player on the right.  I'll admit, unblockable setups and this section were a little confusing, but the overall takeaway was that I should try and avoid setups like this if possible.

Then there was the concept of "the point" or that if the player is attacking in the air and about to land that they go a little past the ground so the attack still has a change to hit the opponent.  Again, at this part of the panel, I started to miss some of the finer points that were being made, and this may be one of them.

An example of difficult to distinguish mirror matches

A point was then made that if the game can change character palettes, that any character-specific effects used should be different per palette.  Color differentiation has always been important to me, knowing that some games, such as older Mortal Kombats (and even the newer ones), do a terrible job at this.
Example.  Left side is valid, right side is invalid and broke on the second hit

Then next topic was the "combo" meter or the display that shows a players' combos.  BlazBlue has a very detailed combo meter; updating as hits occur, changing color when the combo is no longer "valid", meaning the opponent can break out of it, as well as which hits it became invalid.  I personally think the combo meter of BlazBlue and games like it are a little on the busy side.  I never noticed half the things mentioned and doubt I would ever use it in the middle of a battle; however, utilizing a better combo meter would definitely benefit Battle High 2.

Then next note was about audio and that hurt VO -- the yelps and moans of fighting games -- should be heard on every hit, which some newer games don't do.  This one felt rather minor in my opinion and very low on the list of things to change for Battle High 2.

Frame skip, which is a setting used to make a game appear quicker or in turbo mode, was mentioned.  I think the takeaway from this was that if you do frame skipping, don't also skip joystick input as it can cause strange problems with blocking and move performance.

Blocking was then discussed.  If the player is holding back, even if the pre-block animation hasn't started, the player should still block; Battle High 2 doesn't even really have pre-block animations.  Also, if the player is blocking, any consecutive hits should be considered blocks even if the player isn't holding back unless the next hit changes target, so if blocking low and the next hit is an overhead.

There was then mention of stopping the clock during cinematic super attacks; I didn't really agree with this; on the other hand, I do agree that a cinematic attack shouldn't kill until it is done.  In Battle High 2, Khai's super attack doesn't do this, but it's something I could probably fix easily.

The next part was on hitting multiple targets; Battle High 2 doesn't have this issue, but the idea is that if there are multiple targets, an attack should either hit the main opponent or all targets, but not the sub-targets.

Then there was discussion that if you have one-button throws, such as holding forward and pressing heavy punch to throw that you shouldn't allow other inputs on the same frame.  It sounded to me that the best thing was just to eliminate option select altogether.  Fortunately, Battle High 2 has a dedicated throw button (and after many requests, pressing light punch and light kick will enter throw).  Then there was a note about crouch tech, but it was a little unclear to me.

 

Inputs

The next section was on input handling.  The first mentioned that you should prevent left and right from being held at the same time.  I never really tested this thoroughly with Battle High 2, but I would like to believe it handles it intelligently, only counting one of the other when it occurs.

An example of a decent command list; some z-motion confusion is possible but not much


Then it was mentioned that if you can, you should avoid using a quarter-circle attack and a z-motion in the same direction if possible.  This is something I tried to design the inputs of Battle High 2 for from the start since I know how easy it is to mix them up and cause issues.

 

Opinions

The final part discussed opinions on gameplay.  First, no attack should require a macro or three buttons inputs.  Personally, I don't even like two-button input.  Overall, the input I want to avoid is anything the requires the "raptor-claw", the odd posture with the hand sometimes required on a controller -- happens more during 3D fighters like Tekken and Soul Calibur, but isn't any less irritating.

Essentially the next part was just that inputs should be simple:  no half-circles or confusing and difficult, SNK-style command inputs.  This definitely has some opinion to it as some motions, such as two quarter circles aren't that hard and I don't see the harm in keeping them.  I do, however, see the benefit in having simple inputs for newer players; if a newer player can't perform an input, they are going to be quickly turned off and walk away.  This begs the question:  why have complex commands at all?

Then there was discussion of guard meter and guard breaking.  Battle High 2 doesn't even have this system, but if it were to, a system in which guarding a lot comes with a penalty is fine, as long as that penalty doesn't result in breaking the guard.  In a way, if a player can guard perfectly forever, this is fine; they will be punished, but they shouldn't be punished for doing the right thing by breaking it.  In a similar way, dizzy and stun was discussed; Battle High 2 doesn't utilize this and probably for the best.  All stun and dizzy do is punish a player that is already not doing well and it doesn't really add anything to the game other than minor "realism", and if there are stun values, hiding and randomizing them seems detrimental.

The Talk Itself

I'm grading Battle High 2 against what was done in the talk, but I also felt it was important for me to evaluate the talk itself.  Overall, I felt it was rather decent and would be something I would have liked to see at GDC.  Though there were moments where the speaker used phrases like "it's easy" or "just" -- pet peeves of mind that make improper assumptions that just because it's easy for them means it's easy for everyone, even though that may not be the case for various reasons such as budget or skill or resources -- I still did think it was a good talk.  It wasn't boring or poorly delivered.

 

Battle High 2's Grade

*Price is Right losing theme...*
So if I were to grade Battle High 2 based on this?  Well, I would probably give Battle High 2 an F+.  F is still failing of course, but I do a few things properly, so I'll add that little + for fun.  The biggest things I neglect are training mode and online multiplayer, two things that I normally don't care about about that much when I play games, two things that are sort of making me wonder if fighting games are really the genre and audience I want to create for.  I think I'll write about this another time, but fighting games focus a lot on mechanics, and though mechanics are important to me, they get a little tiring to focus on so intensely when making a game, which is made up of more parts.  There are also times when I feel that free to play games -- which are often recommended to indies not to work on -- aren't really that different from fighting games.
I think the big issue for me is that I'm a filthy casual, a noob, a scrub!!!  And what I mean by that is that the aspects that a tournament-level player cares about, things that Mike Zaimont and attendees of Ultimate Fighting Game Tournament care about, I don't necessarily care about.  Casual players (or at least me from my experience) don't go into training mode to practice unique setups.  I play the single player modes and though those don't prepare you for competition with human opponents properly, they do allow you to learn and experience basic gameplay mechanics.  I can really remedy this one of two ways.  I can either try and become tournament level and start caring about these things -- but since I'm considered "old" in the fighting game scene I don't think this is likely.  The other is I can try and  breathe life into different areas of the genre, try and figure out what aspects of these game appeal to me and casual players more and focus on those.
Anyway, Battle High 2's OUYA China work is still ongoing for a bit, but once that wraps up, which hopefully will be soon, I'll begin focusing on polishing Battle High 2, using some of the things mentioned in this post to improve it.
I'll also be updating other aspects of the game such as the AI, the UI, and even the SFX.  So I guess anything that's an acronym is getting updated.

Tuesday, March 10, 2015

GDC 2015

So last week I attended another GDC, or Game Developers' Conference -- not sure about that apostrophe -- and I have to say that I had a much better time this year than last year.  Was it my best GDC?  Not quite, but I did return home feeling a little inspired so I say that's an improvement!  Anyway, like I usually do, I want to write about my time, but I'm going to be short and try and cram it all into one post.

The logo!


Day 0


Day 0 usually involves getting to San Francisco, checking into the hotel, registering for GDC, and then maybe attending some sort of networking event.  This all went pretty smoothly, though getting into SF by 11 am and waiting till 3 pm to get into the room sucked, but whatever, that's normal travel stuff.  I went to some party later involving bacon and monetization.  It was fine, a little packed, a little sweaty, but a fun time overall.

Who benefited this GDC?  Novelty bacon costume manufacturers!

Day 1


The next day, Wednesday, was for talks!

Flash Forward


One talk they continue to do to start the conference is called the Flash Forward in which various of the conference's speakers give summaries of their talks, getting buzzed off if they go over 45 seconds (or a minute).
It started off with Brenda Romero and Laura Fryer talking about the current state of the industry, the excitement, the good, the bad, spending a LOT of time trying to differentiate AAA and indie, but overall it was a good introduction.  None of the individual talks made me go, "Dang, I need to go to that talk immediately!" so the sessions I had planned out beforehand seemed appropriate.  After this ended, I was off to my first actual talk of the conference.

Embracing PBR with Substance:  The AAA Studios' Best Kept Secret (except not really for awhile)


The first talk I went to was about a Substance, a suite of texturing and physical based rendering programs.  I have an indie license for some of these products, but no time to actually try them.  I feel like one of those people who buy ten games during Steam sales and play none of them.  Overall, it was a great demonstration of the tools, and I really want to sit down and try and use it one day.  My only reservations are that it feels like you need a good normal map to make good use of a majority of its tools and I've never been to keen on the high to low poly pipeline, not because I think it looks bad or anything, but because I know it takes a long time and don't have the skillset to do it.

Artwork by Gaeten Lassagne, demonstrating a bit of what Substance can do.


Rules of the Game:  Five Tricks of Highly Effective Designers


The next talk I went to was a design talk about "new" rules about game design.  It was very similar to the microtalks (which happened on Day 2 actually); the difference was that instead of 10 speakers, their were 5.  Various topics were discussed:  how to tie player engagement and needs, the importance of the number 3, the danger of minimum viable product.  Honestly, I don't remember them all that well.  It wasn't bad by any means but not terribly memorable.  What I did like was that the main speaker noted that these are just example rules / tricks and that everyone in the industry sort of needs to come up with their own.

Not a super exciting image, but your brain is good at memorizing groups of 3 with 3 or less things in them, so I thought this would help illustrate that!

Sneak Peek at New Game-Making Tech from Autodesk


Then I went to another sponsored talk, which is risky because they have a tendency to feel like sales pitches, and sometimes they are, but this one didn't -- at least not entirely.  In short, Autodesk, the company behind 3D Studio Max and Maya and probably a bunch of other expensive tools, bought a game engine, which they are now calling Stingray!  I have to say, I was impressed with what I saw.  It had a lot of interesting live-linking between the different tools, building quickly to iPad.  Overall, it was an impressive demo.
I am curious about what their business model, especially with Unity and Unreal going "free" recently.  I don't know if they announced anything; I left early in a futile attempt to get a pass to the Unity party, which is something that has always bitten me on the ass in the past.

A tiny logo of Stingray


Surviving the Jump from AAA to Indie


The final talk of my first day was a panel of indie developers talking about several aspects of going indie aka quitting your job to make your own games.  Now this is something I've been wanting to do -- I don't think that is a secret to my employer -- but I don't think I'm quite ready yet and panels like this always drive that point home.  There are still some aspects of the business side I need to learn, though I do question some of them and every time there seem to be one dev that is like "Yea, making your own games is great, but this did ruin my marriage." I guess that doesn't really scare me -- I'm single, no kids, no house, or outstanding loans (sometimes when I type that out I wonder why I just don't at least attempt it anyway) -- but stories like that still seem disheartening and really make me question, "Is making your own games worth that?"  I feel some artists, authors, musicians, and similarly creative people would say yes but not many.  Anyway, I left that not feeling crushed or depressed but not quite ready to pursue that 100%.

How I'd probably be if I were to go indie right this moment.

Night 1


That night I went to a party called the Wild Rompus or something like that.  It was okay; the first hour was a bit awkward because I'm awkward.  People were playing some indie games and drinking -- I saw Gang Beasts which immediately made my blood boil.  Overall, even at my age, I'm still a bit of a wallflower, but fortunately some people I knew eventually showed up and helped improve my mood.  I think that's the part of GDC I like least -- note I didn't say hate -- that I'm still rather introverted and it makes networking difficulty, and networking is such an important part of GDC and conferences in general.  I just like to shout on Twitter and see if someone is listening; not shout in real life (shouting because the music is loud, not because I only shout) and seeming awkward.  But I'll say this: at least social situations don't give me crippling anxiety -- just stay in the corner and tweet anxiety.  Two ideas came of the night though:  One intriguing -- someone suggested I should publish my NaNoWriMo novel from years ago -- and one depressing -- even if you're a successful indie, the pressure of success can be rather terrifying and lonely.


I think this is an old poster, but I like the idea of a sassy toucan.


Day 2


The next day was filled with roundtables, too many roundtables.

IGDA Unity SIG Roundtable


I started my day in a roundtable, a IGDA SIG or International Game Developer Association Special Interest Group, this one focused on Unity the game engine, a game engine I've been using for about 5 years now?  Maybe more.  Anyway, it was okay.  Sorta dominated by the same five people, which happens at roundtables and can be frustrating, but overall, it was alright.

This guy is on Unity's front page.  I'm not sure why.  He's so creepy...

GDC Microtalks 2015:  One Hour, Ten Speakers, Games and Play, and Us


I like the microtalks -- mostly because they aren't the rants -- and this year was no different.  The most notable were from Lisa Brown, a former colleague, who spoke about the importance of giving yourself deadlines as well as showing your game off through live streaming to create player interest.  Another was from Holly Gramazio, who explained 21 different games, demonstrating that game design can sometimes be very simple yet engaging.  There were a few others I remembered, one feeling like an attempt at an apology but really just self-indulgent garbage not really touching on anything of note in the realm of design; meanwhile, Rami Ismail's was an interesting call to get more developers interested into localization and proper use of foreign languages, which interested me to a degree since I recently localized Battle High 2 to Chinese -- though he spoke at the Flash Forward, this, and apparently had another, more full talk all on the subject. which seemed borderline superfluous.  I remember very little about the rest but know Dadaism and gender were some of the topics.

Lisa's talk was filled with fun drawings like this one (that's her Twitter avatar actually)


ROUNDTABLE IGDA Localization SIG Roundtable


It's unfortunate coming from a microtalk about the importance of language to go to a localization roundtable as dreadful as this.  I think the speaker even said if you weren't a translator you should leave, but I didn't quite understand him properly, and I had 30 minutes to kill, so I stayed.  It was disorganized and messy and just talking about LocJam, a localization game jam, which actually sounded rather interesting.  Then there was discussion about how to create more interest in the SIG and what other conferences to possibly go to.  I think their bigger issue is that they need to interact with other fields in the game industry.  Localizing your game into ten languages is great but tech needs to learn skills on how to integrate this new text:  left versus right, integrating unique characters, etc.  Artists could even be useful on how they can design fonts that make Simplified Chinese readable but also not generic and boring.  Their summit at GDC was replaced this year due to low attendance, and I think that is partially why.  Even someone outside of localization asked a question and was given the coldest, most uncomfortable shoulder I've ever witnessed at a roundtable -- it was rather disheartening and felt like it answered their own question.

Localization is about breaking down barriers; I feel they were just making new ones.


ROUNDTABLE Game Development on a Shoestring:  Low Budge Indie Developers Roundtable:  Day 2


This wasn't a bad roundtable, but wasn't great either.   It was a group of indie devs talking about how they try to save money or how they approach the development of their games.  I hate saying this, but sometimes indie roundtables feel like AA meetings -- and that isn't some sort of game development that is less than AAA.  There's just this sadness that permeates; none of us are famous or super successful yet.  We all want to be.  We all have the talent and passion and drive but it's just difficult right now.  Discoverability I think is the biggest problem in game development -- not just indie development really -- today.  Unless you have millions to spend on advertising, it's tough to get your work seen and it often feels like some sort of lottery.  I don't think this discouraged me from going indie one day, but it gave me pause from rushing into it yet again.

A small child has never made me so angry, but at the same time they probably still don't have enough to make a game.


Night 2


Night two was a bit more fun -- and hectic.  I met some of the cool folks from OUYA, as well as one of the devs from the original Battle High team!  I had to leave early as there was a Unity party a friend got me into as well as an engagement gathering for two former coworkers who are getting hitched.  It was not my best night for a variety of reasons -- some more shameful than others -- but I still had fun and got to try country fried steak for the first (and probably last) time.

Pretty accurate depiction of me that evening...and for part of the next morning

Day 3


The final day of GDC always wraps up a little early, so I wanted to take it rather easy, especially since I wasn't feeling too great.

Game Studio Management:  Making It Great


At the Flash Foward, my boss said he was giving this talk Friday.  A few of my coworkers and I were extremely curious about what this talk about going to be about.  Seeing that nothing else that morning interested me, I decided to go, and I'm happy I did.  It was an interesting talk stressing the importance of information flow in the workplace whether that is physically -- by seating teams close together -- or other ways such anonymous peer reviews.
It was interesting this talk came the morning after last night, as a situation occurred due to some information blocking.  I have a tendency to not always be honest because I'm often afraid of negative backlash when portraying a contradicting opinion -- as I'm often known for doing -- and I end up bottling this up.  Then, for whatever reason -- in the case of Night 2, alcohol -- I end up exploding, spewing some rather hurtful and vile things.  It's like going from 0 to 60, right into cafeteria, filled with snakes -- not venomous ones though, give me some credit.  If the coworker I offended that night is reading this, I would like to apologize.  What I did was uncalled for and unprofessional.  To be honest, I'm not even sure I remember everything I said, but instead of blaming alcohol or other people for my negative disposition, I feel I should find healthier and more appropriate outlets for expressing such information, and for not doing so that night, I would like to say I am sorry.

Bees were discussed briefly too because they elegantly pass information to one another, but I bet there are still a few jerks in every hive...those jerks are then eaten by the queen.


Guilty Gear Xrd's Art Style:  How'd We Do That?!


The previous awkwardness aside, the final talk of GDC I attended was about Guilty Gear Xrd's art style.  Now I'm just going to admit.  I do not like this series or this game.  I think it's a combination of me being very bad at the game -- actually it's probably just that.  I will say though that the new art style is very cool, it's a great use of cell-shading and limited animation to create a 3D game that looks 2D.  I liked this talk because it was inspiring; though I know I won't be able to emulate this game exactly -- 400 to 600 bones per character?! -- it definitely game me some confidence that maybe every game doesn't need to have high poly models and strive for photorealism.  I hope this one is in the GDC vault because it's one I definitely wish I took better notes.

Still a bit mesmerizing that it's all 3D and groundbreaking techniques weren't invented for it.

The End


So that concluded my GDC.  After some movie shopping and some delicious eel sushi, I was back on my way to Pittsburgh.  Oh, and after waiting for a flight attendant to come in for the red eye flight; remember kids, your plane can't take off if there aren't enough flight attendants.
Now, did I feel like I had a great GDC?  No.  Was it better than last year's?  By leaps and bounds, yes!
What could I have done better?  Well I always need to improve my networking skills; even on the expo floor I didn't do a lot of talking with different booths.  I always feel so insignificant and don't want to waste their time, which is stupid thinking -- they are there to talk to me and try to sell me whatever they are showing!  Also, I didn't go into this GDC with a real, tangible goal.  I guess my main goal was just to have a better time than last year, and that I succeeded, but I could have done better.
Will I go to GDC next year?  Maybe.  I think I might go to another conference this year.  I'm looking at Unite since it's in Boston -- and not during the winter.  Maybe I'll try and improve in the areas I failed at GDC there.
Oh!  And I almost forgot.  Night 2 in all it's drunken yelling did render this awesome memory (the guy in the magenta hoodie is the creative lead of Deadly Premonition and D4.  I'm on the left):

Don't let us fool you; 3/4 of us were drunk...maybe all 4.

Wednesday, February 4, 2015

Humanoid Mecanim Overview

As I've stated previously, I'm trying to make a 3D fighting -- think Tekken, Street Fighter, Dead or Alive, etc. -- and want to use Unity3D as my engine.  Though I know there are already some tools --  both in and out of Unity -- to solve some common problems, I really want to try and solve as many as I can myself.
One problem I can't solve though is I can't make every character myself from scratch.  Fortunately, there are plenty of tools and character generators out there to help with this.  My goal is to find a character generator that is fast and relatively cheap that generates characters that are already rigged / skinned.

Fuse from Mixamo and available on Steam.


Fuse is a character generator that works directly with Mixamo, an online animation and auto rigging service.  Fuse is highly customizable, and -- in my opinion anyway -- the characters look nice.  It also utilizes Substances, a special type of material developed by Allegorithmic in use with their tools such as Substance Designer, which adds a high level of customization in various materials.
Unfortunately, looking nice comes with a price as I find many of them are rather high poly or at least not optimized for mobile.  Also, auto-rigging requires Mixamo.  Fortunately, Mixamo does allow users to auto-rig two characters, Fuse or otherwise, for free during a period.  Without an account though, which is about $50 a month -- a little hefty in my opinion, especially when prototyping -- you can't get any facial rigging.


MakeHuman


MakeHuman is another option I looked into and was extremely excited about for awhile.  It's free and the characters are highly customizable.  One issue though is that the characters aren't the prettiest.  Also, and every character generator I've used is guilty of this, the teeth are extremely high poly and not optimized.  The characters do come auto-rigged, which is very nice; sadly, the skinning on said rigs isn't really the best, especially when it comes to certain areas such as the neck.  Also, the rig I was using had additional bones that conflicted with Unity's Mecanim system, which I will go into later.

Daz Studio

Daz Studio is a program that specializes in making characters and posing them.  Daz seemed like a great option as it was very similar to MakeHuman.  It even had the ability to export morph targets for facial expressions.  The characters look nice but they do have the recognizable look that most people find off putting.  It did have some problems though:  not optimized characters, full body morph targets, a rig that won't play nice with Unity's Mecanim system.

Autodesk Character Generator

 

Finally, Autodesk, the company behind 3D Studio Max, the 3D suite I use for my models currently.  Autodesk Character Generator's level of customization is interesting.  You don't use a slider to adjust features such as making the nose bigger or the ears smaller.  You select from a set of body types and then interpolate between two of them.  It's not as customizable as I'd like with things like Fuse or MakeHuman, but you definitely get a wide variety of characters.
Where it has advantages is how it can be exported.  You can select from different mesh resolutions and different mesh sizes as well as facial rigging -- both morph targets and bones.  Now, similar to Mixamo, this isn't for free, but it is much cheaper.  Well it's technically free.  If you want want the low resolution and don't mind having no facial rigging, it's free.  If you want the additional features, however, it's $50 dollars a year, plus each character that uses extra features is $5 (or 5 cloud credits, which you can only buy in sets of 100, but you get 50 once you pay the initial $50 for the subscription).
Anyway, so far, ACG is my preferred choice.  Maybe once I feel more confident in the project, I'll go with Fuse or a different character editor.  The nice thing is that because rigs are already autorigged, I can use 3DS's Skin Wrap tool to transfer skin weights, and because of Mecanim and humanoid rigs in Unity, I should be able to retarget animations that I make.

Mecanim and Humanoid Rigs

So with a recent version of Unity, 4.3 I believe, a major change to the animation system, a system that initially I was rather fond of, was introduced.  I was initially bummed out, the seemingly overcomplicated web of states seemed like a huge hassle to learn.
As I started to experiment with and learn it though, I started to realize it's pretty cool.  It's nice to be able to setup states and see how they will translate and connect.  It's not a perfect system, and I still have some reservations, but one aspect of it that I feel like will be necessary to even get close to finishing the 3D fighter I have envisioned is humanoid rigs.  Humanoid rigs are not as simple as "import your model and it works!"  Well they are to a degree, but there is some finessing and careful considerations that have to be made when making one of these rigs.  A developer at Unity wrote a very useful post about Unity's Mecanim tools here -- http://blogs.unity3d.com/2014/05/26/mecanim-humanoids/  .  I'm basing a lot of my information based off of this and will refer to it.

Ideal Rig

The ideal humanoid rig has two spine bones, one for the spine and one for the chest.  This is a problem is that many character generators export rigs that have three or more spines bones.  The closest is Autodesk's Character Generator which gives you a script to convert the export rig to a biped, but it moves the first spine near the pelvis so it's semi-accurate.
This rig, generated by ACG specifically for Unity, has through bones.  The gray bone above the spine is a through bone; it will not be animated.

When assigning the hip, spine, and chest bone in Unity, the spine bones not used are referred to as through bones and even if you animate them in your 3D suite, their animation will not be reflected in game.  This sounds rather irritating, but from what I've noticed is that you don't really notice too much.  A good way to test this is when setting up the avatar rig, go to the muscle view and just play with the different distortions and assign the spines differently.  I find, by default, Unity does a pretty good job assigning the skeleton by default, but rearranging it can help.
This muscle test shows how the character moves without the gray bone in the previous image without movement.

Again, the reason for doing all this is to save time through retargeting animations, so I don't have to animate the same animations for every character in the game, but use the same humanoid animation across all characters.

Mirroring

Another important aspect is for mirroring animations.  In some games such as Virtua Fighter and Dead or Alive, character animations "mirror" -- they switch between left and right bones as illustrated in the video below.



Interestingly, Tekken doesn't mirror.  I think I know why though.  Since the game is very left and right oriented -- left punch, right punch, etc. -- that if you mirror, things will become confusing for attacks.  Since I want my game to be simple input-wise -- just punch and kick for attacks -- I think mirroring, which allows some attacks to end shorter and flow more fluidly.
My mirroring system is a little strange though and I'm not sure if it's the best way.  Essentially, I have two float parameters in my Animator -- MainMirror and SubMirror.  The idea is that idle, walking, etc., uses MainMirror and SubMirror is equal to this most of the time.  Then, attack animations, which also use a blend tree for mirroring but based off SubMirror, use an AnimationEvent to change MainMirror so that when the attack animation ends, it will transition to the proper mirrored animation.  There's some complex setup with this, but I think it solves what I'm trying to do.
An example of character mirroring in Unity

Root Motion Issues

 Another challenging part of animating humanoid rigs involves root motions.  Root motion is the concept in which the animation of the root in the modeling suite will move the character as opposed to animating the character in place and moving them in code.  For a fighting game, I think animating the movement in very important; however, when using humanoid rigs, Unity assumes a lot of the movement.  Body orientation in the import settings can cause a lot of movement issues so if you want the character to run forward, it may not be in a perfectly straight line, which can be rather problematic.  I may be messing something up with this; using the biped as an animation base could be causing issues so I just need to investigate this a bit more to figure out how I can make things more stable.  Or, if worse comes to worse, just animate the character through script for certain movements.

The character is supposed to be walking straight but they go off into the X a little bit after a few playthroughs.

Don't Worry -- Silly Happens

In my opinion, you shouldn't be concerned with making EVERY in game animation beautiful and perfect.  I was experimenting in various games and there are plenty of goofy things.  Tapping blocking in Virtua Fighter or the wave dash movement expert players in Tekken utilize.  I'm not saying the animations can be garbage, but if you're going to stress over some strangeness in animation during transitions, the game will never get done.

Other News

 In other news, Battle High just earned a rather positive review from What's Your Tag.  Also, I wrote a guest blog post for OUYA.  I'm going to be starting some new Battle High 2 work soon, which should be interesting.