Monday, February 2, 2015

A Journey Of Pixels

Ive been making games for probably around 7 years now and it was only recently that I started doing my own art for my games. In the early days I would just steal sprites from other games but now that I make games professionally I cant really get away with that any more. So for a couple of years now I have been doing my own pixel sprite art, an art style where the images are meant to be simple pixelized and resemble classic games. Sit back and experience a journey of three years.

One of the Earliest Spritings I have. This was meant to the Icon for a game that I stopped working on called block heavy. It was meant to be a very blocky bullet hell/runner type game. As you can see, Icon has very basic shading and a simple font.

A few months after I canceled Block Heavy I started working on another game called the Scryer. I eventually ditched that name but I liked the idea of a crystal ball being my logo. These are my attempts at that. I remember liking the dithering on the second one but I still couldn't get the outline quite the way I wanted it. At the time I was using Graphics Gale for making sprites as apposed to gimp like I do now.
The renamed project Styx was a platformer that used a number of different kinds of bricks. At this point I decided to ditch the black outlines that I would later start using again. Fez influenced my art style for these bricks heavily though these ones do have dithered shading. 
Styx was the first game that I tried to sprite and animate a Humanoid. These were the final results. Not to shabby but the walk animation does look a little funky.
Initial designs and female sprites.

Enemies.


Chest Then.

Chest Now.

My Favorite Sprite from back Then :3

My Favorite Background of Styx. 
But as what typically happened to games I made back then. I stopped working on it.
And once again a started a new project. Jericho or as it would later be called, MicroDude.

For MicroDude I decide to go for a simple focused Tron type theme rather than a General Retro Theme. While at the time of Micro Dudes release I thought that the art style was to the games detriment I now realize that the art for the game was fine and that MicroDude sold poorly because of lack of any proper marketing.

Final Boss. Super Original Right?

No Dithering No Black Outline.
And For the First Time Jon Harwood Ships a Game!!
Wooooooooo.
After the stress and Exhaustion of creating MicroDude I decided that I wanted my next game to be much simpler but have a more colorful art style. That wound up being Combo Princess.

My inspiration for the Combo Princess art style came from the work of Paul Robertson on Scott Pilgrim vs The World. This was the first time that animated sprites in unity's Mecanim animation tool which is why some of the pixels look slanted. I also switched over from graphics gale to gimp at this time. While the shading on Princess Ofelia here looks nice, I still didn't quite nail the shape of a human. 
The Ducks on the other hand Look FANTASTIC.
Post Apocalyptic Earth. 3033 AD...

Twas around this time that I created my current logo. 

After Combo Princess came out (Once again not financially successful) and I took a few months to work for some other companies I decided to get working another game Dusk Runner.
Finally starting to look like a real human.
Portal To the Final Boss?
Pretty sexy looking Orb and Gem.
General Stage Dressings
I animate my sprites in Mecanim by seperating my sprites into cells and then tweening the cells modularly.
Terrain Tiles.

What a Journey! 
That Ramona Flowers Took 8 hours to make by the way.

Sunday, February 1, 2015

Dont Break The Chain: One Week In

A few of my Facebook friends have recently posted articles about a goal reaching system called Don't Break the chain. Don't Break The Chain is a methodology supposedly invented by the legendary comedian Jerry Seinfeld. It involves making or purchasing a large calender and then every day that you do something to increase progress towards your goal you cross that day out. After hearing about it on Facebook I also heard it mentioned on the popular lets play channel Game Grumps. It was then that I decided to try the system out for myself.
Paper Wins Again!
Instead of buying a calender I just cobbled a couple pieces of graph paper and marked off 2x2 Sections for each day. As you might not see, my goal currently is to edit, promote, or post to my blog everyday. Originally my goal was to work on my projects everyday however after doing that for a few days I realized that the frequency that I worked on my projects was not a problem. It was actually more the length that I worked on the projects each day. When I realized that the Chain wouldn't work well with that goal I decided that my goal would be to improve my blog. The day I write this marks the first week I complete without breaking the chain. Hurray!!

Although this system had a rocky start, I think I will get a ton of blogs posted using it. I will make another post in the future letting you guys know if it continued to work or not. Well actually you will know if it works if I do actually post blogs all the time but I will make a post later containing the details. 



Saturday, January 31, 2015

Paper! Its the Next Big Thing!

I am writing this blog post in 2015 and while I am all for making use of innovative technologies in these years of great technological growth, I cant pry myself away from using good old paper. Why you ask? Well because paper feels good. It feels good crush it, good to fold it, good to to cross out words on it. I use paper because it is satisfying to make progress when you keep track of your progress on a physical object. I use paper for any sort of temporary list and then as I complete tasks on the list I cross that item out. Each line drawn through an item is its own tactile reward. And when the list is all crossed out I crumple it up and slam it in the trash bin. VICTORY!!!
I keep a note book for keeping notes and then I have a list of tasks on a piece of graph paper.

Another Benefit to keeping track of these things on paper is that it isn't as easily hidden as an Excel document is. When my tasks have a physical presence I tend to remember that they exist which helps with reminding me to keep track of my progress. 

Paper obviously has limits. For example working on paper in a team is much more difficult. In team based situations I like to use a Dry Erase Board or as recently discovered during the game jam, Sticky Notes. Paper also has the downfall of not being electronic so backing your tasks up doesn't prevent them from being lost or being thrown out accidentally but that happens very rarely. Call me a Cave Man if you want, Paper Development is super rad.

Friday, January 30, 2015

New Year New Jam!

The Global Game Jam has come and gone once again. This year yielded surprisingly good results compared to my previous two years. On my team this year was Myself(Jon Harwood), Noah Hildebrandt, Jack Cieczka, Jeremy Lecus and Scott Schmeling. All a bunch of awesome dudes that I love working with. Our game this year winded up being a sort Lemmings/Puzzle platformer type game called How To Game Design where you play as an unseen human wielding a dry erase marker that must guide the stick man Mr.Lemmings to the end of several Levels.
As you can see the art style uses photographs of the actual white board that we had in the room where we were devving. I dont think I could be more a fan of this art style. I think just such a clean and sensible style for a jam game. I also really enjoyed the developing the primary mechanic of the game. The primary mechanic is that you use your marker to place down a green circle and when an object touches the green circle they teleport to the polar opposite side of the circle. Its a Mechanic that I don't think was fully explored in this game so i'm thinking that I might use it for another game at some point.

 My role on the team was general programmer and build master. Overall this game was very simple to program and didn't have very many challenges. Development was overall a very smooth and pleasant experience this year which I enjoyed greatly. Not that that I don't like a challenge but it was refreshing to do a project that actually went entirely according to plan for once.
Our Progress about 24 Hours in.

Overall I would say this jam was a huge success. We made a successful game and even got the majority of the vote when it came to who at MATC had the best game this year. I'm immensely satisfied with HTGD. Please Check it out! :3

Global Game Jam Page:
Kongregate:

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)
  {
    critera++;
    if(breakOut == true)
     {
       break;
     }
    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:
http://www.mediafire.com/download/feaumouqpfsf0am/SOYBlackJack4.7.11.2014Jons+%281%29.zip

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.