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 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 --  .  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.


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.

Sunday, February 1, 2015

Global Game Jam 2015

So I participated in the Global Game Jam again this year.  The game my team and I developed is entitled Escape from Death Island.

One of two giant duck battles

It's a simple game in which you lead a mob of castaways away from danger.  It's definitely silly and a little more than just imbalanced.

This was the first year though that I just didn't have a good time.  I wouldn't say I had a bad time; a bad time would have involved fights and everyone leaving, angry at one another, and that didn't happen.  I think the feeling I left with though after this Global Game Jam was simply, "I would have rather just stayed home."

I found this image while searching "stay home", but also, is that neck pillow Photoshopped?

I do realize the entire setup of the Global Game Jam sort of annoys me and possibly how the Pittsburgh chapter of the IGDA runs it.  First off, the keynotes just weren't overly inspiring.  Only the first one really felt like it had anything to do with game jams, applauding jammers for just showing up.  The second was just sort of another call for diversity in character design, which is great and is something I support, but to inspire for a game jam, where a good portion of games are prototypes and don't have representation of human characters at all, it missed the mark.  The third one was just madness, a board game designer trapped in a CG card tunnel telling us about his projects in which "the magic" happened but nothing about game jams really.

Then the theme was announced.  I'll be honest, the themes over the past couple of years for the Global Game Jam have irritated me leaving me rather uninspired.  Another part of me is even like, "Why have a theme at all?"  I think a theme helps give focus, but sometimes I think a theme can unintentionally deflate inspiration, which I think this year's theme, "What do we do now?" sort of did that.  Also the delivery method was rather eye-roll-inducing.  In an event in which time management is important, I felt both this and keynotes were a waste of time.

I've sat through uninspiring keynotes and deflating themes before and have had great times at the Global Game Jam, so why was this one different?  Why did I have a bad time?  One of my friends even drove from Maryland to visit and participate, and I felt bad that I was grumpy and just not having a good time.
Well, one easy excuse was I was exhausted before the jam, an already exhausting event, began.   I had been playing The Evil Within the night prior and stayed up till 3 AM thinking, "Oh, this will just prepare me for the jam", which was a huge mistake and honestly could have been the main reason I was cranky.  I was just tired and would have rather been sleeping I think.

I blame you, Sebastian!  Why the hell do you have to die so easily?!

Though I learned some new concepts making Escape from Death Island, I had been working with Mecanim and human animations recently, so during the game jam, I was wishing I could have just continued working on that.  I think that feeling of "I'd rather be doing something else," is a major set back when doing a game jam.  I think if I had set the goal of "I really wanna make a game that utilizes this," it may have been more inspiring for me.
Anyway, I was left contemplating a lot of things.  Do I like game jams anymore?  Do I like game development anymore?  Am I too old for this?  While asking these questions, I stumbled upon a Global Game Jam retrospective on Gamasutra by Guilherme Costa.  What I liked in particular is that they listed 10 items to keep in mind when participating in the Global Game Jam, and as I read the list, I think some of these and the fact I didn't really adhere to some could explain why.  So here is that list and whether or not I felt my team did a good job on them or not:

1 - Minimize the team the most possible, short prototypes are produced faster with the smaller number of people. The lower the number of people in a group, the lower the possibility of a conflict as the activities to be performed.

I think we did this well.  We stayed with the same 3-person team we usually do, but even with the low number, I do think there was some conflict, which I'll go into later.

2 - If using any development tool (Unity3D, GameMaker, Construct etc.), avoid using add ons or frameworks. Can be great in the daily development, but if someone from the development team did not know, the project will not progress.

We used Unity3D, but one issue was that Unity now has so many add ons in itself that it can be challenging for someone who doesn't have a lot of experience with it or at least slow down progress a bit when trying to use some of these new features such as the UI system, which I'm not even too keen on yet.

3 - If you are responsible for the design, is incisive as to what's planned. If someone disagrees, prove that this design is really the best choice. If still the problem persists cut the people in the group or leave the group as soon as possible. It seems extreme, but it is best to keep everyone on the team happy with what they do than working in an uninteresting design.

This one is a bit major.  I think a problem we had early on is that I wasn't feeling the design we were going for or some of its features.  Then again, maybe I just didn't like them cause I was tiredI think the issue I had is I knew some features weren't important and trying to do them would slow down and split focus.

4 - Game design should occupy 10% of the total jam time. Remember that time still passes as you eat, sleep and meet other people.

 I think we did this one well; we chose an idea and ran with it rather quickly, but I think one issue that we didn't do is "meet other people."  We usually leave the jam site, this time the Art Institute of Pittsburgh, which creates some bittersweet feelings to begin with, so we didn't meet anyone, we didn't even playtest our game.  It's funny because in previous jams we've done this and it's never been a problem, but since I was feeling a bit deflated already, maybe some of the energy from other jammers might have helped motivate me.  Also we went back to my employer's office to work, which made the game jam feel like work.  At the time I thought this would be a great idea, but game jams are hard work and being there made it feel like work and not something I was doing for fun.

5 - Games made in game jams are prototypes. Focus only what is really important. Animations, camera effects, lights and shadows, do not affect gameplay, do not invest.

I feel like this is something we fail on every game jam.  We focus on things that are not important -- often when I know it's an issue and am ignored about it -- and the core of the game ends up suffering.

6 - Avoid that someone in the group runs out of tasks. Running out tasks drops the morale of any participant.

 I don't think this happens to us really; the opposite happens were we end up having too much.

7 - Create integration cycles. Avoid integrating all just at the end, integrate everything that is done in cycles of 1 or 2 hours, every two or three cycles, gather the team and make a debate on what has been done and will be done. The lack of continuous integration was the biggest problem of my team in this issue.

This is a good one.  I don't think we messed it up, but having specified cycles for it would help organize time a bit better.

8 - Try to create pause cycles for the group. Stay awake and well fed is always important, but even more important that everyone is the same way during periods of development.

We've never really had an issue with this.  We used to stay up all night, but now we make it a priority to get sleep.  I think my problem is I didn't get enough sleep due to my idiotic 3 AM bedtime the night prior to the jam.

9 - End the project a few hours before final delivery, do let other people play and try to find errors.

 This one irked me because we didn't start the jam until about 7:30 PM on Friday due to the keynotes and other things, but PIGDA wanted the games done by 3:30 pm on Sunday, which made the jam not really feel like a 48 hour game jam.  I think if he had planned that it was really only a 24 hour game jam, I think we didn't budget our time well for this delivery time because we assumed it'd be at a different time.

10 - If everything went wrong, do not worry, failing will not kill you. As time passes, the frustration becomes a thing of the past. Lift, organize thoughts and come back to fight.

I think the problem I had with this one is I sort of did feel bad about failing since we had never done it before.  Though I was so exhausted on Sunday, we did submit our game to the Global Game Jam site, but we didn't go to the closing ceremonies.  I just didn't care, which felt so rude and defeating of a game jam's purpose, but again, I was just exhausted.

Again, I sort of was wondering what else I could have done differently and one thought sort of scared me.  I had done Ludum Dare last year, which was a solo game jam and enjoyed that.  The fact that it was a solo game jam started to make me think:  "Am I just that bad a collaboration now?"  It was funny because the first keynote was given by a solo indie, and though she mentions that she's not really solo because she has friends, families, and contractors that help her in various ways, I wonder if she finds a certain freedom in it.  I can see some advantages.  You don't have to have meeting upon meeting to sell an idea and make sure everyone believes in it or is okay with it.  You don't have to worry about compromising an idea to the point where you don't even like it anymore.

"Johnson!  This is the 16th meeting, and you are now the only one who doesn't believe in the the combat system! WHY?!"

What worries me is that even the prior two assumptions I'm making feel rather selfish.  It's my idea, and I want it a certain way!  or worse, This isn't my idea, so I hate it already.  I'm sure there are designers -- of any field, famous or otherwise -- who think like that, but they are probably terrible to work with or at least if you are someone who doesn't believe in the idea.  Anyway, as I continue to develop and design, especially on side projects, I think collaboration is something I really need to work on.  I think this Global Game Jam was a failure; though we finished a product, I left it, not with a feeling of regret, but with this gloomy dissatisfaction that hopefully I can shake by the next game jam I do.

If I do the Global Game Jam next year, I think some of the following could help:
  • Go in with a goal.  Do I want to learn UI?  Do I want to practice an animation system or a certain mechanic?  Whatever I'm trying to do, pick something and focus on that and tie the theme into it.  Don't tie it into the theme
  • Stay at the jam site or at least don't go back to your office of employment.  I think staying at the jam site would have maybe given me some inspiration or allowed for playtesting or something that would have motivated me.
  • Be more assertive if you don't like something.  I think I took too far of a backseat and ended up working on something I just wasn't in love with.
  • SLEEP!!!!  Sleep the night before, sleep during, just be rested!!!  Again, all of the negativity I felt could have possibly been avoided if I were rested.
I can't guarantee these would help, but I think they'd be a good start.

Saturday, January 17, 2015

First Post of 2015: Battle High and Character Pipeline

So it's 2015.  To summarize, 2014 had high highs and low lows; instead of writing a long retrospective of the year, I'm deciding to just look forward.

Battle High 2 & GumTrix

The first thing to look forward to is more Battle High work.  Last year I struggled to finish porting the game to Unity3D, but upon changing my method to just copy the code from XNA to Unity3D, it's now "done".  I use quotes because fighting games are rarely ever done.  In fact, members of the OUYA team did a stream of Battle High 2, which was both fun to watch and a little stressful -- please don't crash on stream -- but as they played, I noticed like 3 or 4 things I could and want to fix.  During the rest of January, however, as I get back into the swing of working, I'm taking a break from it.  I'll probably resume working on it, fixing those bugs, investigating what I can do to make it better, upgrading to Unity 4.6, and maybe even online multiplayer.
At the same time as well, I've started to try and treat my projects more professionally such as making a press page for my various projects use presskit().  At the same time, I should probably be upgrading my website as well.

My new logo!  I'm not sure if I posted it here or not; my sister designed it.

Also, at Schell Games, I finally was able to finish and publish a mobile game called GumTrix.  It's a project that, despite it being rather simple, I've been wanting to finish for a long time.  The original prototype was made before Candy Crush Saga was even released!  Though I doubt it'll get the same amount of exposure or popularity, I'm just proud and happy to have finished and hope that I'll get to work on it again sometime this year to make it even better!

Juicy, bouncy fun for everyone!

3D Fighter & Character Pipeline

In the meantime, I'm starting a 3D fighting game.  This is a super ambitious project, one I don't see myself completing this year, but it's been something I've wanted to do for a long time.  Right now I'm in an early prototyping phase to see if it's even possible and to figure out my minimum viable product  or MVP -- a term I've been hearing way too often at work lately.  I'm using Unity and trying to use mecanim to figure out how I'd make this work.  I want to try and remedy things with this game that I didn't with Battle High, for example, start writing the networking layer early.
Below is an early prototype:  very basic models, pre-basic animation, but the tests were to better understand Mecanim, using root motion so I can animation movement in 3ds Max, etc.

The biggest challenge with this game -- so far, I'll give it time as online will trump this -- has been a devising a character pipeline that is fast and cheap.  So far, I've found this in MakeHuman.  It's not perfect and there are close contenders such as Autodesk's Character Generator (ACG).  For now though, the MakeHuman model and rig is nice and allows me to rig and put a character in engine quickly.  The final models, especially if I aim for OUYA, might need some simplification, but for now, they are a good fit.  Also, MakeHuman is a free application that is actively being worked on as opposed to a web-based subscription that could eventually disappear like Mixamo or ACG.

Jam & Convention Season

Part of this year's Global Game Jam logo.

The Global Game Jam is coming up; I'll be participating in that again.  I only did one Ludum Dare last year as well as the Global Game Jam, so starting off "Jam Season" I guess, I could call it, will be nice; it'll be interesting to see if I do more than two in 2015 though.  At the same time, however, GDC is coming up in March, and I will be attending.  GDC last year, to put it lightly, sucked.  Most of this was my own fault as I picked bad talks that made more depressed about the industry than I already way and the excitement and joy I get from the conference just didn't happen.  I'm going to go out on a limb though and try again, so we'll see.  I think my plan is that if GDC is awful to go to another conference like Unite, but I'm going to try and be optimistic and enjoy myself -- and not pick garbage talks / panels.
Anyway, I'm looking forward to 2015.  It'll definitely be different but hopefully productive and full of growth and improvements.

Wednesday, December 24, 2014

Battle High 2 to Unity3D: Done

So after several months of work, the Unity3D port of Battle High 2 is done! The and Desura versions are both now and available for purchase and play:
Anyway, I wanted to use this time to explain some of the struggles and triumphs I made porting the game over from XNA to Unity3D. Do they even call it Unity3D anymore or just Unity? This isn't important, but I'm just going to refer to it as Unity for the rest of the post and I'm not referring to Assassin's Creed: Unity.

Why Even Do This?!

So I started porting Battle High 2 to Unity in July of 2013 I believe, which was also when I started writing my GameMaker book.  I wanted to port the game from XNA to Unity because XNA was a dying framework.  It still exists, but you can't really do much with besides make XBLIG games, another service not many people get much use out of, and PC games, which has various requirements such as Windows Media Player and the XNA distributable framework, which not everyone is willing to install.
So I decided on Unity because it's known for being portable to a variety of outlets:  web, mobile, pc, and even console.  There is varying amounts of work between these different platforms, but being able to is definitely a great aspect of this engine.  In addition, Unity is still being updated and worked on; with Unity 5.0 coming out soon, there will be new changes in the engine -- optimization, rendering, gameplay, etc.  All of these can improve future versions of the game -- or cause major headache.  For these reasons, I really wanted to port the game to Unity; however, my approaches were not the best.


Version:  Doing it all from Scratch

So I tried porting Battle High 2 three times.  The first time I was very confident and thought it'd be very easy, but the problem I already had the game done so rewriting everything from scratch became overly tedious and boring.  Though it was neat seeing the game against 3D backgrounds, trying to finish this was just going to take way too long.  Again, I was writing everything from scratch.  I'm not sure if it existed or not at the time, but I wrote my own sprite rendering system as opposed to Unity's SpriteRenderer class, which can take a part of a texture and renders it efficiently by making a special cutout mesh to avoid rendering unneeded transparent pixels which can cause slowdown.  At the same time, I became very enthralled with writing my GameMaker book, so I took an indefinite break and came back to the game several months later.

Version:  Doing 50% New

So after taking an extended break, I knew doing the game from scratch like I was was going to take too long, so this time around, I decided to use more assets from the original and use Unity's SpriteRenderer class but I still wanted to write all the code over.  This, like the previous version just became too tedious.  I also fell into a depression due to various things so that plus working on a major part of the game -- the code -- from scratch just felt too daunting, and I had to stop.


Version:  Direct from XNA

This third time I said to myself, "You know, XNA is C#, Unity uses C#, I'm going to do this more directly."  So I pretty much just copied my .cs files into Unity and stripped it of anything XNA -- and in some cases, commented it out.  This was the best thing to do; I'm only sad I didn't do this first as I would have saved so much time.  The version I just published on OUYA and Desura is really not Battle High 2 A+; it's not different enough to call it that yet.  Regardless, I'm happy that I was able to to finish and get it running in Unity.  I wrote some interesting code such as my own sprite packer; Unity has one, but I have too many sprites so it doesn't run properly, also, I run unique code to trim, remove duplicate, and convert sprites to Alpha8 for palettes.

Are there differences? 

Yes!  There are differences between this version and the original XBLIG version of Battle High 2.  Again, there aren't enough for me to confidentially say this is Battle High 2 A+, but enough to say there are different.
The biggest one is that the concept of Elemental Overdrives have been removed.  Michelle still has her -- I'll be honest -- Dark Phoenix form, but every other character's updated form is gone.  Will I ad them back in?  Possibly, but there will need to be extensive testing and balancing before I do.  Also Principal, the game's boss character, is unlocked from the start.  I also implemented reversals and throw breaks.


So what now?

Well now that this version is out, meeting my deadline of release before 2015, I'm going to take a break first and foremost.  As I was playing the game, making sure it worked, I definitely noticed a plethora of things for me to improve in future versions.
  • Hit box display in training mode still make no sense
  • The AI is idiotic at best, even at the highest difficulty
  • You can't choose to rematch after a versus fight is over
  • The UI looks dated
  • The control / input system could use some love
Fortunately, unlike the XNA version, updating and releasing new builds of this version shouldn't be as much as a hassle.  The real challenge will be finding the time and motivation to make changes.  There are also some big changes I want to make.


New Characters

The sprites above are of unfinished characters for Battle High 2.  I'd love to finish them, but I'm not sure if I'll be able to find time to do so, but adding them I think would be a great addition.  Of course, adding a new character is a lot of work and expense:  new code, new balancing, new voice acting, new stage artwork, new music.  A lot of new's, but it's a challenge I'd love to attempt but I feel like there are a lot more important things to fix first.


Challenge Hallway

Mortal Kombat IX probably had one of my favorite single player experiences in a fighting game.  The Challenge Tower was unique, difficult, and varied.  I want to do something similar with Battle High 2.  The modification system I made in the previous versions for the Elemental Overdrives would definitely help with such a task, but I also want unique challenges in the game such as breaking the car -- something I removed from this version for time.

The beginning of the challenge tower taught introductory mechanics, which I liked a lot.

Plans Right Now

So again, my plan right now is to just take a break.  I'm participating in the Global Game Jam in January and have some other games I'd like to start working and prototype including a 3D fighter.  I do like the idea that any console game I plan on working on will use the OUYA as a minimum spec machine.  It's pretty easy to develop once you get the hang of it.
Now I know this current version of Battle High isn't perfect; it needs a lot of love in certain areas, and if there is enough desire from others and myself, I'll give it that love.  I could have continued to work and delay, but I was at a point where delaying it just felt unnecessary, especially since is had taken so long.  The hardest part is that I'm essentially a one-person team, at least when it comes to direct development and programming.  I really try my best but between my full-time job and other projects, it's not easy.
The hardest question for me to answer is when people say "Well, why should I play this over Street Fighter?" and I can't really honestly answer that -- did I ever mention I suck at writing press releases?  True, there are some differences in gameplay Battle High and other fighting games, but the team size difference and development budgets definitely allow for much more polished products.  Not a great excuse, I know, some indies do amazing work, but even a lot of them have teams greater than one.  Anyway, if you play the game, I appreciate it and hope you enjoy any future iterations that may come out.

Thursday, December 4, 2014

Battle High 2 A+ on OUYA

So I'd like to announce with the video above that I am working on and have a working version of Battle High 2 on OUYA!  (It is, of course, without some problems, such as challenge commands showing up in arcade mode.)

Wait, what's an OUYA?

OUYA is an Android console that was released a little over a year ago.  It's most appealing aspect to me was that is was advertised as a console with a low barrier of entry.  The entire reason I started porting Battle High to Unity was so I could get the game on OUYA, and now I finally have the game working n the console.  Of course, this wasn't the easiest in tasks.

Connecting to OUYA 

So when I first started messing with my OUYA, I remember that exporting a build from Unity to OUYA was a bit of a pain, but fortunately, they've simplified this by allowing you to upload an apk over your local network directly to your OUYA.  This process isn't the fastest; it has to upload then install and this is after you make a build from Unity; so even more fortunately, I already had taken the steps to establish a proper connection between my OUYA console and my PC.


Being an Android console, the OUYA is essentially a slightly above average (or average now) phone with an HDMI port.  Now Battle High, at least I don't think so, isn't the most technically advanced game, it's just a 2D fighter, but even so, the game's large spritesheets and particle effects cause rendering issues in the game, or at least, the OUYA cannot run the game at 60 FPS like it can on PC.  Now there could be some major optimization I have to do on my part that will fix that, but for now, the OUYA version of Battle High 2 runs at 30 fps.
Another issue was the size of spritehseets.  OUYA -- or at least for Unity games -- can't handle textures larger than 2048.  I was able to optimize and get all character sprites onto 2048 square textures except one character -- Principle.  So last night, I had to devise a way to split his sprites so half were on a 2048 x 2048 and the rest on a 1024 x 2048 texture.  Fortunately, it works.  I should probably have put his use in the video.

Silver Lining?

I think the silver lining to the power problems with OUYA is it makes a great min spec machine.  I think my next game, if it is not a pure mobile game, will probably be tested on OUYA first and if I can get it running smoothly on that platform, then I will build it up for PC and any other platform it may be released on.  It's also nice because I can see how it'll look on a TV very early on and the OUYA is easy to transport to show other people if I so desire.

Network Play?

I know online play is very important for fighting games, but the initial release of Battle High 2 A+ (or whatever I decide to call it) will not have network play -- just like Dead or Alive 5:  Last Round.  I will say though that I do plan to at least attempt to have online multiplayer sometime in 2015.  Will it be great?  Probably not, but I'm at least going to try!

Release Plans

So it may be ambitious, but I'm still shooting to finish and release this game before 2015 on the OUYA marketplace.  The biggest feature I have to implement is the AI for arcade mode and after that I'm essentially "done".  There are various bugs and other elements of polish that will need to be taken care of as well, but the most important features and aspects are primarily done.  Anyway, I'll update here (or elsewhere) when I get have more information and as release approaches.

Sunday, October 26, 2014

Nearing 2015

Haven't posted anything since September, so I decided to write a little something.  The Halloween season has come to a close -- I know Halloween is the 31st, but the parties I attended happened this weekend. This means several things:  Thanksgiving, Christmas, and also New Year's.
Normally, I try and do the basic New Years resolution in January, but eff that noise.  I'm doing them now!  Since that Halloween is over, I'm going to start exercising again and eating healthier.  This last Halloween season messed me up; I'm still recovering from a hefty hangover.
I also want to finish Battle High 2's Unity3D port BEFORE 2015.  This is a little crazy and wanting to versus actually will are totally different.  I started tracking tasks here.  It's a lot of stuff, but I don't think it's insurmountable; also, I don't need to finish every task on there -- but would like to.  So starting tomorrow until mid-December -- my holiday plans will make working on anything almost impossible -- I want to work fiendishly to finish Battle High 2.  I need to be careful not to rush, not to go overboard or get distracted on any one feature.  I just want to get this game done and out there before 2015 so I can use a new year to start over on new ideas and not a book.

I was Arakune from BlazBlue for Halloween; the mask did not stay on long.


2015 is coming up which means GDC is coming up, but unfortunately, I think I'm going to skip it this year.  I had such a bad time last year, and with the current controversies in the industry, I don't feel like going, suspecting that a lot of talks and panels are going to dwell on that drama.  The only thing at this point that would get me to go is if the talk I submitted on my book was approved, which at this point seems unlikely.
In the past few years I've noticed that smaller, more specialized conferences like Unite or Oculus Connect have been more enjoyable.  I feel like I get so much more out of them, so I think next year I will go to one of those conferences instead, and I've never been to Siggraph, so that's a possibility too.  Also, some friends have been talking about traveling to Japan, a country I've been wanting to visit for a long time, but the trip is expensive, and even though my job helps pay for conferences, GDC is also expensive, so going to a cheaper conference could help with this trip.  And there's always the possibility of going to EVO again, especially if I finish Battle High 2 in time to try and show it off.
Oh, earlier I mentioned I went to Oculus Connect, which was held in Hollywood, California near the end of September.  It was a nice, two-day conference that discussed VR, particularly from the perspective of Oculus, its future, and other aspects of it.  Going was important because I'm a bit of a VR skeptic.  There did seem to be a herd mentality to a degree, but based on the demos I saw, I was definitely convinced that -- to make a prediction -- VR will succeed, BUT I don't think it will to the extent that a lot of people want it to.

The Crescent Bay which was shown at Oculus Connect; it was impressive, but there was so much setup and unknown hardware that I question the feasibility for the consumer market.

What's After Battle High 2?

So let's optimistically say I finish Battle High 2 and release it on OUYA and PC.  What's next?  I could go several directions.  One is that maybe I can start the process to get it on Xbox One.  This seems unlikely though and a part of me feels that, unless the game is super popular on OUYA or other platforms -- which I'm not holding my breath for -- it seems like a waste of time and I risk falling into a trap in which I'm bored and frustrated by continuing to work on it.
Most likely, I will probably work on a new game entirely.  Maybe I'll do something shorter -- 3 to 6 months -- for mobile since I've never released a mobile game.  Maybe I'll also start a longer game or both and prioritize my time between them.  The hope is that if I finish BH2 before 2015, I can literally start the year fresh with no work in progress projects going on.  First the book was a monkey on my back and now this game is -- except this monkey feels more manageable.

Okay, maybe not limitless, but I have a lot.

Sunday, September 14, 2014

Battle High 2 A+: 3rd Time's a Charm

So I took another break from Battle High 2.  My latest attempt at porting the game to Unity3D was failing.  It just felt like I was doing a whole new game, and, if it were a whole new game -- new characters, story, gameplay, etc -- I would have been fine with this.  In the back of my head though, I knew that all of the code was done, all of the inputs and moves and commands worked, all of the interface code was written, and this was becoming painful.  Even more so, reaction to the changes I was proposing in the game were met with a lukewarm reaction.

I don't know the context of this image, but it describes my feelings at the time pretty well.
Now, however, the break is done!  I'm working on Battle High 2 again.  How is this time different from the previous version?  I'm copying and pasting...a lot.  That sounds kind of odd, but I realized redoing work you have already done feels extremely tedious and daunting.  Now porting that same code into Unity, figuring out how to make it work in that engine has some tedium but it's different -- it's more like solving a puzzle as opposed to just rewriting and redesigning systems I already had working.
There was some unique work that had to be done, for example, I had to rebuild the texture atlases to work with Unity and figure out a way to convert my SpriteFonts to Unity3D font assets.; however, I am using Unity3D's Sprite class now and will be able to create nicer particle effects -- because I have to.
My goal?  Well, my goal has always been to get the game working in Unity3D so I can port it to other consoles and create a PC version that doesn't require all of the nonsense that an XNA version required.  Hell, I might be able to get a Mac and/or Linux version working!
Will there be new things?  Not immediately, but once I get the game working well in Unity3D, the hope is that adding new content will be more streamline.  Will I actually do it?  That will depend on the popularity of the game / demand.  I'm really hoping to finish this and get it released on various platforms before 2015.  Of course, I decline to promise anything, as promises, especially for a hobbyist like me are easy to break.  Anyway, this is a short post, but enjoy this video.  It's not super exciting, but it is the latest build of Battle High 2 in Unity3D.