Wednesday, April 20, 2011

And the curtain falls... (Postmortem)


Well, that's it everyone, my GDW has finally been submitted.  Yes although I am posting this five days late, I just wanted to make it official.

Last Friday, all the way back to the Friday two weeks before then; those have been the most gruesome and exhausting two weeks I have ever gone through in my life.  I am not exaggerating, nor am I joking.  I was forced to shut out nearly all social interaction of my life during that time - the only people who I was able to speak where my classmates and professors in regards to the GDW, and my parents for support and consolation.  I also lacked sleep more than I ever have in my life. On average I probably slept 5 hours a night, some nights I didn't sleep at all.  In fact, at the time of submission, I was functioning on four hours of sleep over two days.

You may be thinking that I'm just chalking up another one of my sad, "woe is me" stories, but in fact that's not where I'm going.

I chose to go to university, and I chose to enroll in game development.  I chose to be the lead programmer of the group, and I chose a group who had nothing at the start of this semester.  The GDW leader Ken Finney even told me at the start of this semester to mark his words that "I would be working like a sonofabitch".  Even though I didn't take his words as serious as I should have, I still would have gone forward with the same decision either way.

All second year game dev students are fully aware of particular groups who have incredible games that exceed all expectations.  At the same time, they often compare themselves to those who have completely abysmal games, and wonder how they still haven't been kicked out of the university on account too poor grades.

After I left my previous group on account to reasons I choose not to reveal publicly, I did not even consider joining a group that already established a groundbreaking game; I deliberately chose to join a group that had nothing.  Why would I do such a thing?  Wouldn't I want to have a great game to show off to everyone?

No.  I figured that right now I am a student at a university.  What's the purpose of a student?  To learn.  If I joined a team who already created an amazing game last semester, I would ultimately be living off their work and get above average marks.  I realized that marks mean nothing; it's what I learn that is most important.  Although marks are what people need to increase the likelihood of landing a job, this is not true for the game industry; in the game industry, they want to see your portfolio, they want to see what you know, they want to see what kind of person you are.

So I decided to take advantage of the situation and join a group who had nothing from last semester, so that I can get the most out of my education (and tuition); even if it means a decrease in my marks.

At first, my goal was to help my group members catch up on the technical material we learned in first year, and last semester.  Material such as C programming, C++ object oriented programming, linear algebra, computer animation, other algorithms, etc.

At the same time, I wanted to create a game engine high level enough that will allow my group members to easily program and test out the game, even if their programming knowledge isn't up to par with standards.  I also had plans to use that engine for a summer project that I plan to do with some of my hometown friends, as they have little to no knowledge of programming.

Unfortunately it took me way too long to finish the engine; I was forced to halt its production on account to time constraints, and to get started on making the actual game using my incomplete engine.  I started working on the game about after my earlier blog post on "hopelessness". The point on which I really starting working in a productive manner on the game particularly was the Friday two weeks before my presentation.  I worked that entire weekend doing nothing but coding the game, although my mind did wander from time to time (That usually happens the first few days of working like a beast). But I did find a way to cancel work (my job) for that weekend, and and missed church (I'm terrible).

I believed that the game was due the upcoming Tuesday, so I continued to work until I was able to make my object move.  Once Tuesday came around, I continued to frantically code the game, waiting for my group's 3D models, until I heard that there has been another extension for the GDW.  At that point I didn't know whether to scream in joy since I have more time, or in disgus, because I was working my ass off to get it as complete as possible for that day.  Regardless, I paused my GDW work, and started working on the Accounting homework that was due the next day.  I didn't know how to answer the questions, so I was forced to study the past two lecture notes.  Usually it takes me a while to read, so it took a big chunk out of my day.  Once I completed that, I looked over the accounting homework, and my group member's answers (as he answered the questions, and I was supposed to look it over).  I looked over most of it, and then it came time that it was late.  I was tired, so I went to bed.  Don't I lie awake for the rest of the night?!!

I went through the next day pie eyed to the max, yet I had a sudden burst of energy.  I guess that's my body laughing at me telling me that I'm ****ed.  Regardless, made it through the day, and finally got some sleep.  After that, I didn't do much, I was basically paralyzed in fear of continuing of game, which lead me to post the article right before this one.  Right after that post, I started hammering at the project again, and this is where hell from the first week became hellx6 for the second week.  Yes, hell times six.

At this point, I cannot describe the torture and pain I went though that final week.  I was practically stripped of social interaction and sleep, I was stripped of free time, and I did nothing but work mindlessly.  At the back of my mind, I was thinking about life, its simplicity, and how other people like my family and most of my friends are living in such a domain.  I was also thinking of the summer, how close it is, how it's my ticket to redeem the friendships I was forced to put aside, and reattain my social life. I was able to see the light at the end of the tunnel, but every step of the way was painful.  This also reminded me of my training at karate, particularly my Black Belt test three and a half years ago.

During that 8 hour test (half during Saturday night, other half Sunday morning), my goal was to make it out alive.  I was horrible at sparring, and I struggled to continue following my Sensei's requests.  There were times during that test where I didn't give my maximum effort to accomplish my Sensei's request so that I could gather some energy to use for the next task, showing my full potential.  But the hardest part of the test was throwing a friend of mine who was sitting on my belly - probably 1.5 times my weight - off my body.  He did not make it easy for me, and did everything he could to prevent me from throwing me over.  I swear during that time I lost the ability to breathe for a short while as I tried moving myself to another position, him putting weight on my ribs in the process.  Eventually I made it through, and pushed him off.  That was probably the first time in my life where I accomplished a difficult task with no assistance or mercy whatsoever.  Little did I know that was just the beginning.

In karate, my task is to be the best person I can be.  In university, my task is to complete a given criteria; whether I do my best or not, if I don't attain it, I fail.  "Do or do not, there is no try."  Those were the words of Yoda from Star Wars that my professor said to me on the Monday morning of the final week, after he finished giving me advice on what I should do with the game at that point in time.  I told him that although I appreciate his help and good intentions, I didn't like the quote.  Even today I still dislike it, mostly because it makes people feel like garbage when they fail in despite of giving their maximum effort.  It's like going through all eight levels of Super Mario Bros. but in real life, only to die at Bowser.  Sure, the princess wasn't saved, but there's no credit in giving your maximum effort?  Screw you Yoda.

At that point my goal was to give my maximum effort to complete the task.  If it was all about "do or do not", I would have given up.  But I didn't.  Eventually I made it to Tuesday with my game incomplete, and my technical design document barely even started.  Thankfully my professors allowed me to "tweak" the materials until presentation time (Friday), considering that I put all files on three separate DVDs (one for each professor).  So I continued to work without end, and eventually it came to the last two days (Wednesday and Thursday) where I didn't go to bed at all; I only took two afternoon naps, one for each day.  During the final stretch (which felt like running on one limb), I realized the concept of sacrifice.

The only way the beauties in life can flourish is through sacrifice.  My ability to attend university was a result of my grandparent's sacrifice as he moved from Italy to Canada, and my parents sacrifice as they worked and raised my brother and I at the same time.  My ability to live with the state of living I have today is a result of the Canadian soldiers' sacrifice as they protected Canada during World War I and II.  My strive to be the most forgiving and loving person I can be is a result of Jesus Christ's sacrifice to humanity. (I apologize if I offended anyone with that last sentence) Now the ability to make my own games, work and have fun with friends, attempt to redeem my social life, sleep, spend time with family, and enjoy the summer is a result of my sacrifice to complete the GDW project the best I could.  That's right, the best I could, and now I have no regrets because of it.

One thing unrelated to the GDW that I do regret is the HW2 assignment which was due the Sunday after the GDW.  I think I took it a little too easy, spending too much time on one aspect of the HW2 (My critique on The Path) only to rush the rest at the end.  There, I hated myself for giving my all to complete my GDW, only to screw it up for the following assignment.  Stupid me.  Never again.

Going back to the GDW, it came time for presentation.  Although since the Tuesday that I submitted the game, I didn't tweak the game too much as I focused all my time to complete the technical document (which spans around 30 pages long).  I left my group members to assemble the presentation along with the rest of the required documents, so I didn't say too much during the presentation.

After we finished, I asked the professor if I could have a couple of minutes to give a little postmortem of my own.  I basically explained my struggle throughout the past two weeks, and how it deepened my understanding of the concept of sacrifice, and how proud I am of my group members for doing everything they did; creating all game assets from scratch to allow our game to surface into existence, and completing nearly all of the project's documentation.  I also explained that although the venture was painful, it ultimately was an experience that I believe I can add to my life as an asset, which I can use to generate even greater things than I could do in the past.  I also added that I was hoping that such an experience would help me move further from the status of a boy, and move closer to becoming a man. That was followed by a few snickers around the classroom, including my professor, which I ended up joking about in order to dodge the incoming corn missiles.

Goodness can only result from sacrifice, a sacrifice that stems from the desire to achieve a long-sighted dream.  I poured my heart and soul into my project, my little speech, and this document you're currently reading, as this experience is something I will never forget.

As for the future of this blog, it's up in the air.  I still have plans to create one more YouTube video on my GameIndustryAnalyst channel as quick as possible once summer begins.  But after that,  I'm thinking of retiring that channel since I don't believe it's an easy to remember name, nor is it catchy.  But I will figure out a new name for my future YouTube channel.  As for the blog you're reading here, more than likely I will be retiring this too.  To be honest, I like making videos more than blog posts, and I feel that people are more likely to watch a video than to read a blog post (so if you've made it this far, congrats, lol).  Although I hear that Tumbler is all the rage, so I might check what that's all about.  Either way, if you want to continue following me, the best way is through my Twitter @iMariouch.  There I assure you I won't be leaving, as I have recently become addicted to it (Thanks Professor Hogue!! :P ).

Thank you everyone so much for reading my blog, and I wish you all the best of luck with attaining the hopes and dreams you hold yourselves! :)

Friday, April 8, 2011

GDW Progress 5 (What's this?!)

The current build of my group's GDW game.

Yes, we now have some form of functioning game. It required me to not bust, but utterly murder my ass off last weekend. I tried my best to get it done for Tuesday night, but guess what, the due date gets extended for another week. Great, the stress isn't over, but at least I have more time to actually make a more decent game. You may think that given the fact that it's been a few days since last weekend that I haven't stopped working like an animal. But the truth of the matter is that I have. I've been so totally drained that I had to take some sort of break. I also focused on other subjects like Accounting to refresh my knowledge of it (as it is one of my five courses this semester) for a good 5 hours followed by a sleepless night of laying in bed, but my sleep habits are another story. Today, I planned to work on my Design Homework 2 with my friend Tinaye, and started off with the "question" where I have to critique a game. I choose the game "The Path", and it took me around 4 hours to traverse most of the game. Now I have to write a critique on its Mechanics, Dynamics, and Aesthetics, as well as research the game's history. Just so you know, "The Path" definitely it isn't your typical Mario or Call of Duty game. That "question" is only one of four major questions of that homework assignment. The big problem is that it's due next week, the same time my GDW is due. What to do...

"The Path" by Tale of Tales is not - I repeat - NOT your typical game. In fact, some may not even call it a game; some may instead call it art. You can download it here for $9.99: http://tale-of-tales.com/ThePath/buy.html

Anyway, I should probably explain more about how my GDW game currently works. It is a racing game, but it's not at a stage where you can call it "fun" at the moment. Right now, there are two paths; left and right. the player starts on the left, two CPU players are on the right, and one CPU player is on the left, but in front of you. You push the up key on your keyboard to move forward, and press the spacebar to switch lanes. You race on a straight path until you reach the end of the race. That's it. The speeds of each character aren't tuned well (one CPU is unbeatable for how fast it is), collision detection is broken, and not all models have been placed in the game yet. The game is supposed to be about a bunch of desserts racing through a desert to avoid melting. So I have to incorporate 3D dessert models (which will replace those cones) that a teammate of mine created in a program called Autodesk Maya. Reagrdless, the game's mechanics are not up to par with the other GDW groups. The game is bland and not fun. Who's fault is it? Mine.

An example of my sun and moon system.

Anyway, I had my game tried out by my Game Design Professor, Dr. Hogue, and then he later tweeted me a video of an iPhone game called that I can use as an inspiration. Its mechanics are simple, yet it seems to call player-game dynamics well enough to be considered fun. All it consists of is passing cars, and you gain ten points for each one you pass. It's essentially a "how long can you survive" game. So I plan to incorporate its mechanics into my group's GDW game without impacting my group member's work any way possible. It may be a doozy to try, but at this point, I must do the best I can to pass the design course. I'll also have to leave some time to create my technical design document, as my other group members are handling the rest of the design documents.

Also I quickly would like to explain my sun and moon system. Basically at the start of the race, the sun rises, lighting up the whole area. Then as the sun sets below the terrain, it "shuts off", and then the moon rises, shining a dim light. That leaves you to turn your headlights on, as you can see in the picture above. The sun and moon system utilizes my light manager system, where I first set the location of the sun and moon, then set a point-light that shines only on the sun and moon to give it its look. Afterwards, I create a directional light that points in the direction of the sun/moon relative from the game-world origin (0,0,0). That light is applied to the terrain, path, and racers. Then another directional light is generated in the opposite direction of the first directional light, and is applied to the sky model only. So to keep this short, here are all the lights in the game:

1) Sun Positional Light
2) Moon Positional Light
3) Sun Directional Light (terrain, path, racers)
4) Moon Directional Light (terrain, path, racers)
5) Sun Directional Light (sky)
6) Moon Directional Light (sky)
7) Player Headlight
8) CPU1 Headlight
9) CPU2 HeadLight
10) CPU3 HeadLight

Wait, that's ten lights! How could that be possible if OpenGL only supports eight?! Well thanks to the light system I've coded, I can have a light applied to a few objects, and have another light applied to another. Which allows ten lights (or even more) to be displayed! Apparently I also have to include a light that emanates from the camera, but that shouldn't take too long. What will take a long time is changing the mechanics of the game to match the one Prof. Hogue sent to me, as I don't think he sent it to me solely for kicks.

This is bird's-eye-view mode. Yes I'm aware that it looks ugly.

Another problem is to eliminate these CPU competitors, and include a dynamic list of racers. Of course I've done something like that before in my earlier game, Happy Culture Shootout. However this time I can only declare a fixed number of sounds at discrete positions. So that will be another challenge; adapt my 3D sound system to be dynamic like the way my light system is.

I digress. The fact of the matter is that I need to get going on the rest of the coding, and do as much as possible to make my game at least half as good as everyone else's. Wish me luck guys! :')