Minibang - The Forgotten Story
Minibang - a project with brightest hope left it to be forgotten. One day a CTO approached me to tell me that from now on i will be working on new project called Minibang in completly new Technology and Engine called Unity. Before i got to work in Mad Head Games i have investigated about engines and at that time i thought about Unity as not good engine or engine where everything is done visually. To be honest in that time i can say i was very in-experianced when it comes to business context of game development and technology. At the beginning i didnt know beside C# programming anything do in Unity. But luckly it didnt took me much to learn basic principles of adding an sprite, animating it, showing it, adding different objects, scenes ... To ease transition from our own technology to Unity we have re-developed our tools to work in Unity and recreated workflow. This workflow included that whole scene is assembled in Photoshop, and how you see it in Photoshop on that way it will be recreated in Unity. I needed a month to adopt to new Engine and after that i was allready doing some code optimizations. The Minibang was planned to be 2D Point and Click / Platformer / Adventure and because of that we had to develop some systems. Most important system - Save Game system. (Beside Workflow, Tools ... ). Now in that time it was Unity 5.3.2f there were some already done assets on the asset store that had some implementation of "Saving" objects but those were not good enough for us. There was always a catch: Only active objects can be serialized or deserialized or The order of serialization / deserialization is important or it only works on Windows. So the catch was how to serialize objects, make other team members beside me to know or keep a track what to serialize and how to make it easy to be maintanable, securied for anit cheat and well working in optimization wise? I did have struggled a bit, but in the end i managed to make full binary serialization of components that didnt require a specific order, and that was pretty much easy understandable for both animators, artists, programers. The only thing i couldn't do is make it well secured, more likely i was not given enough time to finish it. So we had a save game system done, and it was working quite well, few and there there were some issues occuring but nothing major. Next what had to be made was navigation system and o boy this had some serious iterations. Version 1: Lets make it a linear checkpoint based system. The main character will act like train on railroads, and on each point of interest ( checkpoint ) user can tap and move character to that position. Seams legit, got it that but the movement speed on different distance between checkpoint wasn't good enough. (This version was implemented by using combination of Spine Animator and drawing Spline on the scene and checkpoints ) Version 2: Lets make it a linear checkpoint based system but with more checkpoints in between. The main character will act like train on railroads, and on each point of interest ( checkpoint ) user can tap and move character but he can also tap in between checkpoints and character will move to that position. Seams legit, got it done but the producer didn't like it was linear. (This version was implemented by using combination of Spine Animator and drawing Spline on the scene and checkpoints, but between checkpoints a runtime script would generate smaller check points.) Version 3: Lets make it a any shape checkpoint system ( closed, not closed ). The main character will act like train on railroads, and on each point of interest ( checkpoint ) user can tap and move character but he can also tap in between checkpoints and character will move to that position, left or right. Seams legit, system was quite good but it was missing again smoothness of animation between different positioned checkpoints and for different shaped scenes it didnt look natural. (This version was implemented by using combination of Spine Animator and drawing Spline on the scene and checkpoints ) Version 4: Lets make it a any shape checkpoint system but smooth animation between different positioned checkpoints. The problem was here i didnt quite know how to interpolate transition of character between checkpoints and his speed to be uniformly distributed. The main calculation was done with Bezier but it wasn't good enough. Then i started to investigate a little bit more and found about Catmull Roll algorithm. This was a hit and gave us a smoothness with speed we wanted but not natural movement in different shaped scenes. (This version was implemented by using combination of Spine Animator and drawing Spline on the scene and checkpoints ) Version 5: Lets make it a any shape checkpoint system but smooth animation between different positioned checkpoints and to be aware of Z position. Seams legit, we have smooth speed animation movement between checkpoints now to adjust it to know about Z or in Unity layer indexing and order. Wasn't hard to do but it required me to learn more about Layer ordering and priority and how to dynamicly change it. Was done but not yet fully finished. (This version was implemented by using combination of Spine Animator and drawing Spline on the scene and checkpoints ) Version 6: Lets make it any area / checkpoint system, smooth animation speed, physics and we can decided on what kind of path type character will be moving. For a while i was stuck into how to make this happen in 2D. One way represent screen as 2D matrix and do A* algorithm for pathing. It could work but it is way expensive! Another solution to try create multiple paths...Its still a spline movement :L Solution that came to me was for specific checkpoint a developer could draw a collision kind-a like shape, and while character is at that checkpoint in that area, clicking in the area it would move it by using A* algorithm and simulating physics. This was the solution that all developers and producers was happy with it. It did had everything that we wanted, even more, but it wasn't fully polished. Once navigation system was done, we had to make a dialog system. For dialog i decided to use yED editor and work on integrating parser for yED in Unity.Luckly for yED there were some already assets done so that cut our developing time in half. Next in line was to make a communication between scenes. In that time Unity didn't have option to have more then one scene loaded at the time and what it didn't have a way to communicate between scenes. In other patches that got released in Unity 5.3.x It got support for Async Load and one more scene to be loaded in the same one at the expense of memory and CPU. This wasn't hard to make but to keep the same level of simplicity like in our in-house engine it took some time :)