Monday, March 12, 2012

1: The Will to Succeed Part 1: A New Beginning

       Hello everyone and welcome to my first development blog post of the Cyclone Game Engine. My name is Jordon Lavelle McClain, and currently I am a college student at Eastern Kentucky University. Amidst the craziness of school right now, I've found time (or rather worked on this since its more fun) to write up this blog post and discuss what is going on at this very moment. So let’s get started. As mentioned, I am currently in school full-time at EKU in Graphic Design and my biggest challenge right now is finding the time and support I need to work on my game development. The lack of time, which I desperately need in order to devote fully to this project has been extremely stressful outside of classes and my job. The problem is, I am not actually learning any of this in college which so many of my friends, family and peers assume simply because I am attending a university. When in reality, college is only hindering my game development progress by taking time away from what I truly want to work on and pursue learning.

       Initially, I had set out to attend Full Sail University to major in Game Development if not, Game Art. I got accepted into Full Sail as well as many other universities my junior year of high school. A twist of unfortunate events with universities, personal family matters, etc., prevented me from going and has made me sideline my game development efforts for a few years now. This has forced me to teach myself game art, design and development outside of classes in what little spare time I have. Unfortunately, this is my only option to somewhat learn what is being taught and covered at Full Sail. To my surprise, as frustrating as my present situation may seem, it has truly been an amazing experience with what I've accomplished on my own thus far.


Me above working late at night in my dorm room.
I was trying not to laugh as my friend took the picture.


Why on Earth would you learn to program? 
       Learning to program is important for many reasons. As a society, we need skilled programmers to create and maintain the programs that make the modern world work. As a democracy, we need people who understand computers well enough to make sure we control these programs, and not the other way around. Have you seen the Terminator movie or The Matrix? Okay, maybe I’m overreacting but hey, we’ve come a long way with Artificial Intelligence. Also, as individuals, programming can be great fun. For me, I wanted to make an Xbox Live Indie Game and in order to make an Xbox Live Indie Game, I needed XNA. To make games efficiently with XNA, you will need to learn to program. My mistake was trying to learn to program and learn XNA game development at the same time. It’s better to focus on programming first and yes, that means building things that aren’t games. However, it will help you make games in the long run.

       I worry that as computers have become more powerful, they also became more intimidating. I think the best thing about XNA Game Studio is how it restores the immediacy and fun I experienced with my Oric. To lower the barriers to entry, we have a free and easy-to-learn programming language called C#. To provide that magical thrill of making the machine do your bidding, we have powerful yet simple APIs, and the ability to run your creations not just on PC but also Xbox 360 and Windows Phone. And last but not least, to learn how to put all these pieces together, we have books and awesome blogs like this one. I hope you have as much fun making games with XNA as I have.


What is XNA?

       XNA Game Studio is a tools suite developed by Microsoft, first available in 2006. Originally XNA stood for "Xbox New Architecture", but now its simply "XNA's Not Acronymed". It solely ran on Windows for development so my apologies for any Mac or Linux users. The XNA tools are completely free and for a yearly fee, anyone can sell their games on the Xbox 360 as an Xbox Live Indie Game. Essentially, XNA in of itself is a mid-level, code-based set of libraries for development, lower level than Unreal or Unity -- both which come with built-in editors. XNA was last updated in 2010 along with a refresh version in October 2011. The XNA Framework officially supports the programming languages C# and Visual Basic.NET. Since its built on .NET, technically any .NET language can be utilized to make games with it. So XNA is fairly mature and their are tons of resources for it.

       To appreciate what XNA meant to developers and gamers we have to go back. Walk with me for a moment, down the corridors of time. The year was 2004 and it was the first time I had ever heard of XNA. There were rumors about the end of "home-brew" games throughout this time with Microsoft's new upcoming game console. At the time everyone called it the Xbox 2, which later came to be known as Xbox 360. Shown fresh from the Game Developers Conference in San Jose, where Microsoft announced a universal development platform which came to be known as XNA, the demo entitled "Crash" was the first glimpse I witnessed of what Xbox 360 would be capable of. I recall watching Robbie Bach and J Allard as they took the stage at the San Jose Conference Center, to explain what the new platform would mean for developers. I watched in amazement, mind-blown as they showed off the first ever technical demos the Xbox 360 platform was capable of producing. XNA was already being used by major developers to create Xbox 360 games, along with next-gen games for Windows PC and mobile devices.
       



       Developed by Pseudo Interactive, Crash was perhaps the most technically impressive demo. It showcased a blue Saleen sports car speeding out of its garage before hitting a brick wall at over 300km/h, crumpling to pieces in slow motion and shot from multiple angles. Microsoft said the demo, demonstrated "incredible detail and breakthrough physics" - which would lead us to believe the staggering crumpling effect is real-time. The implications of this technology for crashes in games at the time was jaw-dropping to say the least. At the time, I knew Project Gotham Racing 3 was in development for Xbox 360 and I first thought I would see more of this technology in the game. It wasn't until later in 2006, when the racing game Full Auto released in which gamers got to experience the incredible physics and destruction such as this. I remember downloading the game demo to Full Auto on my Xbox 360 over my friends and us playing the game together for the first time. 





Crash" - showcasing "incredible detail and breakthrough physics" - probably being employed by Bizarre in Project Gotham Racing 3 (in development now on Xbox 2) as we speak.




       The next demo I witnessed utilizing Microsoft XNA in action was a brief video titled "Film Noir" during that time. Film Noir was developed in-house at Microsoft's Advanced Technology Group. It depicts a buxom lady, who could have walked straight from the imaginations at Tecmo, being waited on at an outdoor restaurant table, as cigarette smoke slowly fades into the air. The purpose of the demo was to show how artists can focus on "ambience and highly-detailed environments from the get-go". Worth mentioning was the DOA effect which was already firmly established in the next generation Xbox 360. 
     


     
       The third demo, "Xenomorph", was developed by High Voltage. Ironically, it reflected the theme of that year's GDC, "evolve", as a white gorilla thing ran around, and morphed into a crab spider thing, before morphing into a pink lizard thing, before morphing into a furry turtle armadillo thing, before morphing back into the white gorilla thing. Phew! The purpose was not to show the morphing nonsense, but rather to show how "imaginative and intricately detailed characters are possible on the technology", with comparable quality to big-name animated movies. The name "Xenomorph" echoed the Xbox 2 project name, Xenon. So there were rumors going around at the time that the next Xbox console name would be called Xenon, as we now know it as Xbox 360.


       Microsoft described the new XNA platform as "the catalyst for a new ecosystem of interchangeable software tools" - by integrating software innovations across Microsoft platforms and across the industry, XNA forms a common environment that "liberates developers from spending too much time writing mundane, repetitive boilerplate code".


       "Software will be the single most important force in digital entertainment over the next decade. XNA underscores Microsoft's commitment to the game industry and our desire to work with partners to take the industry to the next level."
       -- Bill Gates


      "At the heart of XNA is choice. No game today is built with just one tool, and no game tomorrow will be either. By creating an environment where software innovations flourish and work together, XNA will allow game developers to redefine what's possible in games and give gamers the freedom to pursue their own paths. XNA closes the gap between what gamers want and what developers dream."
       -- J Allard


       Interestingly, according to the announcement, the universal nature of the platform meant a range of similar controllers, or a "family of controllers" for videogames, for both Xbox 360 and next-gen windows games. The move fueled a whole new wave of cross-platform input devices from peripheral manufacturers. Microsoft said that more than 20 game development and middleware companies already recognized that XNA would drive advancements in the industry. Prominent developers including Argonaut, Criterion, Factor 5, Epic, Valve, Vicarious Visions, Visual Concepts, ATI and Nvidia, all voiced their support for XNA as part of the keynote.

       Microsoft said that XNA would not mean increased costs to developers, many of which were facing their toughest challenges yet at the time; especially when getting their grips with the most sophisticated games hardware. Now, I was never big into the console wars and I didn't have a console preference at the time. Talking about Xbox 2 (later known as Xbox 360), Microsoft made the following statement: 

"XNA propels us ahead of Sony in the next-generation games race because the future of gaming is in software, not hardware. At GDC you are seeing some of the early possibilities of what the future will bring."

Thus... the first shots at the next-gen console gaming war between Xbox 360 and PS3 were truly fired. I remember just shaking my head in disbelief, upset with the statement because I felt it was unnecessary on Microsoft's part. Microsoft didn't stop there as the company elaborated: 

"Sony's Cell is a hardware solution. This is a software revolution. XNA ultimately deliver thousands of integrated devices that give consumers choice. Sony is talking about a fixed world of hardware that requires everyone to buy everything Sony."


       Ironically, Sony's Cell Processor and PS3's hardware was more powerful than the Xbox 360, but the cell processor's power was locked away by such arcane architecture which made it hard for many developers to access its true potential. A handful of games have however. That following year in 2005 was when I truly began having thoughts about looking into game development. I was in middle school around that particular time. Later, a proper unveiling of the Xbox 360 took place that summer, where Microsoft announced final specs, the console's final name and so forth. Words cannot express the excitement I had along with gamers all over the world at the time for the games coming to Xbox 360, PS3 and Nintendo Revolution which later changed to Nintendo Wii. Admist all the craziness of the console wars raging at my school during that time, I was more excited about Xbox 360 simply because I knew the year prior Microsoft was working on a service for their platform that would allow students, developers and hobbyist to create games and sell them directly to players.
        
       XNA was the primary reason as to why I chose to save up money and purchase the Xbox 360 console. For the first time, through XNA, Microsoft allowed anyone such as myself to create videogames and sell them on a major console platform - the Xbox 360. To my knowledge, allowing literally anyone whether it be students or hobbyist to publish a game on a major console platform had not been done before at the time. It was always a dream of mine at that particular time to create games and not necessarily for money or other people, but as a way to simply express myself. I had this burning desire to bring my artwork to life and through games, it was about the closest thing to manifesting my imaginations into reality. It was during my time in middle school I had an overwhelming spark of ideas. I can still recall staying up all night over my friend Brandon Dawson's parents' house filling notebooks with videogame worlds and ideas. 

        

       In 2008, Microsoft launched Xbox Live Community Games. The program years later came to be known as Xbox Live Indie Games and had a lot of promise. It launched alongside XNA; a flexible new development environment which allowed developers to make games from a regular Windows PC and self-publish it on the Xbox 360 platform. Both newcomers and old hands flocked to the service. In my humble opinion, James Silva was the ultimate star of Microsoft's GDC 2008 Keynote. James created the winning entry The Dishwasher: Dead Samurai for the Dream-Build-Play competition hosted by Microsoft. The Dream-Build-Play contest was first announced back in 2006 and started in 2007. The Dishwasher was this crazy stylistic 2D action beat em' up platformer game. I was instantly drawn in amazement by its unique gritty graphic novel-inspired art style and particle effects. The style was something I haven't seen before when I was younger. The gameplay was visually gruesome and I found myself getting lost in the combat.

       James Silva's game is based on his experience as a dishwasher in a restaurant where he wasn't afforded proper respect. The result of this legitimate angst is a game written on the XNA platform. As a game designer, James Silva's inspiration if I recall was Bruce Lee. I wrote down a quote he said in an interview.

"I had been a dishwasher at a restaurant three or four years ago. You get no respect as a dishwasher. And every time the waitress would come back with a stack of dirty dishes, ignoring me, I'd go, 'You know, Bruce Lee was a dishwasher once!'"
-- James Silva 

       This inspired me because he took a negative experience and made something positive out of it by transforming it into a game. I started to ask myself questions like, "What are some experiences and things I can draw from my own life to put in my games? How will it play? What kind of stories am I trying to tell?" With time and patience the doors of opportunity opened when I finally was able download XNA for myself.


Dream Build Play
       The Dream-Build-Play competition is an annual video game development contest created to promote XNA Game Studio as well as Xbox Live Indie Games. The competition inspired experienced game developers and enthusiasts to create innovative and fun indie games for Windows PC and Xbox 360 using XNA. I tried to enter the 2010 Dream Build Play competition but failed to finish my game in time for submission. However, I don't look at it entirely as a failure because it was a great learning experience all while trying to reach the deadline.





       Prior to the release of XNA, it was a struggle as I had no clue where to start on making a game. At the time, game engines like Unity or Unreal weren't available and accessible to the public as they are today. So with XNA, I had to start from the ground up mostly from scratch. I didn't mind because I wanted to learn nearly every aspect that went into developing a game. The game engine first in began being developed by myself in my parents' basement back in 2009. Ironically at the time, I didn't realize I was building a game engine when I first starting working on this project. I was just making very simple programs each with its own specific purpose starting out. It's not a good idea to simply program a game when its your first time starting to program anything.






This is my current build of my first-person shooter project. I've come a 
long ways from a blank blue screen.



When is it a good idea to build your own game engine? 
       If you are hoping to make a game right away, I do not recommend developing a game engine. Instead, I recommend using a commercial engine to develop your game on it. Making a game engine is not for everyone. Developing a game engine is not for the one who wants to relax during the weekend. It is not for the one who wants to relax after work. It is not for the one who does not like to read. It is not for the one who wants to see instant results. It takes a lot of work and it will take a lot of your time. Unfortunately as I mentioned earlier, my biggest struggle has not been the creation of my engine or my game projects. My biggest struggle has been finding time to even work on it all.

       As an indie developer making a 3D game engine I would like to share with you my experiences. Developing a game engine requires a tremendous amount of patience and will.  Many developers and hobbyist who pursue creating a game engine don't recommend it because of the unbearable amount of adversity they faced. Many underestimated the cost, skills and time that goes into creating a game engine. I will say that this has been the most satisfying project I have undertaken. I totally enjoy working on my game engine. Developing a game engine can be a great learning experience which is initially why I started this undertaking.

       Just a forewarning, there will be several moments when you will want to give up. There will be thousands of instances when you will be lost and would not know how to fix a bug and Google will not be there to help you. There will be times you will have to figure it out all on your own. There will be many instances when you read an algorithm and would not know how to implement it in code. There will be instances when nothing in your implementation works. There will be moments when you have spent weeks/months implementing something just to realize that you are doing it all wrong. In many cases, people have had moments when they had to throw all their game engine to the garbage and start all over again.

What I'm trying to tell you is this:

If your goal is to LEARN then by all means do so. I promise you, you will learn so much that you will be glad you did.

However, if you are hoping to make a game right away in a short amount of time, want to see instant results or looking to money right away, do not develop a game engine! Instead use a commercial engine and develop your game on it. 


When will your game engine be finished?

       
       A game engine is never really finished because its essentially a program. A program is never in its final form, just like fashion is never finished. Facebook looks drastically different now compared to when it first launched. Unfinished sounds bad but in fact... this is a great thing! A game engine can always be upgraded and improved. With that said, your game engine doesn't necessarily have to be complete in order to make a finished game. When working on a game engine, you have to prioritize everything from level of importance. I am not trying to create deferred rendering or features found in popular game engines starting out. Starting out, I am focusing on creating assets, the menu system, physics, animation and later artificial intelligence because that makes up the gameplay. Gameplay in my own personal opinion is the most important. A game has to be fun before it looks pretty. So just a heads-up, I am not focusing on graphics too much starting out. High-end graphics and features like deferred rendering and god rays can come later. If you don’t you prioritize, you will spend too much time in areas other than those that make up gameplay and realize you won’t have much that’s actually playable. 

BIG things come from small beginnings!

       I am aware of the stories of people claiming they spent so much time creating their game engine, that it took away time from creating an actual game. This is not the fault of creating an engine, but the person(s) developing an engine. In spite of all the facts and stories of peoples struggles developing an engine, I am creating my own for very different reasons. In short, its simply what I want to do. You can't succeed if you don't try. I may not always get the results that I want, but I will learn from each attempt and refine my goals and focus.  


"Never give up on what you really want to do. The person with big dream is more powerful than one with all the facts." 
--Albert Einstein 



Are you competing with other game engines? 
       I'm not building an engine to compete with the most top selling engines on the market and try to be bleeding edge in any way. I am also not building this engine necessarily to cater towards everyone's needs. Otherwise, it would be counter initiative. That would cost me more time and money than I could ever fathom. The engine is built for just some of my game projects and primarily to suit my needs. 


What is the purpose of this blog?
       I started this blog to use as an addition to my portfolio when applying for a job in the industry later. In order for me to help with the game engine's programming for a company and work as a Tools Programmer or to work in another area, I need to demonstrate it and show some of my work. I also started this blog because it is a powerful tool to help document my journey and inspirations. Documenting everything I go through is a sort of self-discovery. It will help to remind myself of what I've accomplished thus far and where I plan to go. It will also help me to keep track of my goals and make sure I accomplish them. This is the beginning of a journey of courage and inner-strength as I try to put a team together to break into the game industry, or do it solo. This business is hard! It's very hard to get into and along the way, I will hit many bumps and make mistakes, but I am determined because this is my dream. I welcome you to my blog and to join me on my journey as I create my game engine from the ground up... one painting, sound and line of code at a time. So please help support my game development efforts by watching videos of my work-in-progress on by subscribing to my YouTube Channel. Thanks for reading and until next time...


"Success is the progressive realization of a worthy ideal."

       Most people only pay attention to the final product of a successful entrepreneur. They say things like, I can never be like them, or they got lucky. What most don't see is what they've had to overcome. All the struggles, the daily rejections, the heartaches, the betrayals, the rumors, the criticism, the empty bank account, and all those lonely nights while trying to make their vision a reality. The only difference between the one who quits and the one who doesn't is that they showed up every day. They worked hard every day. They hustle every day. They learn from a proven mentor every day. They improve every day. They did all of this even though they felt like quitting every day. And eventually, they became who they are today. 

"In the end, your success will speak for itself.
                                           -- Patrick Bet-David



GO AFTER YOUR DREAMS!!!