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.


  1. Congrats on your Battle High 2 Unity 3D.

  2. eToro is the most recommended forex trading platform for novice and pro traders.