Friday, December 26, 2014

Korrasami has Destroyed My Life.

I'm not typically one for doing Fan Art but the Legend of Korra Finale is hitting me super hard right now. So hard that I decided to do some Fan art in the style of the game I am making Dusk Runner.

Saturday, December 13, 2014

Dusk Runner: A New Project Has Begun

Ah. There isn't quite anything like starting a brand new project. All the old flaws and quirks of your old project have become a thing of the past and you can focus on moving forward onto a bright and prosperous future. My last title was a infinite runner/launch game called Combo Princess. After I finished development on that project I took a break from solo development and I worked for Forever Interactive and Digital Iris for a while which was an incredible experience and I learned a ton of new technical skill and a lot of new things about how teams function in a non school atmosphere. With that knowledge in tow I am ready to dive back in to developing solo with my new game Dusk Runner. Dusk Runner is a Retro 2D Metroid Vania game that takes Inspiration from a number of nes titles. Including Batman, Ninja Gaiden and Kirby.

Tuesday, December 9, 2014

CSG Post 8: Living, Eating, Breathing by Reference

Up until very recently I never knew the true value of reference types. If you are not familiar with reference types, a reference type is a data type that stores the machine location of a piece of data instead of the data himself. The benefit of  this means that you can set this one data value from anywhere you have the reference. Another benefit is that it allows you to store and pass a lot of data without passing a lot of data. This particular benefit has been making my life a lot easier recently. On SOY I will often need to get data from a one object to another object. At first what I would to was assign a value directly using the get component method.

varINeed = targetObject.GetComponent<TargetScript>().desiredVar;

However a better way to do it is to just store a reference type of the object that I need access to.

var varINeed;

TargetScript  targetScript = targetObject.GetComponent<TargetScript>();

varINeed = targetScript.desiredVar;

This way is much much better because now you can also access any other data that you need from that object.

Monday, December 8, 2014

CSG Post 7: The Wonderful World of Enumerators

Ive known that Enumerators have existed for some time now. But Ive never quite realized how powerful they were before I Started working on SOY. Enumerators allow you to perform operations on a timed delay that can be closely controlled. My first run in with Enumerators was at the 2014 Global Game where I used them with: "yield return new WaitForSeconds();" pretty much exclusively. This Enumerator function is plenty useful however soon after coming onto SOY I learned the power of combining loops with Enumerators. With loops you can have Enumerators delay indefinitely until a certain criteria is met. Another trick I learned is that you can substitute the Update method with an Enumerator and have the enumerator run at lower speeds resulting in a better performance Update Methods.

IEnumerator DelayTilCriteria()
   while(critera < 80)
    if(breakOut == true)
    yield return new WaitForSeconds(1.0f);

This snippet shows how you can Delay, Increment and Exit an Enumerator Coroutine.

Wednesday, December 3, 2014

CSG Post 6: Jack Black Jacks Black Jack Blacks Black BlackJack

As a proof of concept for SOY I was requested to make a Networked Black Jack game that would prove that we could create a Networked Multiplayer game. That Project is Here:

CSG Post 5: Managing Networks Like a Boss

I have worked on projects before involving networked play however I have agreed not to talk about it. Luckily Scoundrels of Yen does involve network play So I can talk about all the things I learned then now and also the things I've learned now now. Its important to note that I have only have extensive experience with RPC method based games. I would love to do a state sync based game but currently that type of project has not arisen.

One thing that I learned from doing networked unity programming is the value of keeping your code organized. Before learning networking I would always format my scripts however I so pleased. This was important early on for experimenting with different code formats but as coding became more and more complicated an organized structure of where certain methods were located became more and more relevant. If you aren't familiar with RPC Methods, the way it works is that you First create a method beginning with [RPC], put and functionality that you need into the method. Then use NetworkView.RPC(); to pass in the string name of the method you want to call crossed the network. Followed by the rpcmode and any parameters of the method. This winds up needing quite a lot of methods. For any piece of data that you want to transfer crossed the internet you now need a RPC method for it as well as a Public Method that triggers the call crossed the network. Because of the large amount of methods I adopted a system where there is a summary at the top of the script followed by any getter setter properties or methods.(I prefer properties). Followed by any methods built into unity. Followed by private methods, Followed by public methods. Followed by RPC Methods if any are needed. Followed by Ienumerators.

bool variables/constants;
bool GettersSetters;
void UnityMethods();
private void PrivateMethods();
public void PublicMethods();
[RPC]void RPCMethods();
Ienumerator IEnumerator();

Ive stuck to this structure for a while now and I really like knowing what section to look in depending on what type of method a certain functionality uses. Eventually I would help to define the Raid+ tech reqs using these standards and I am very glad I made that decision.