Tuesday, August 15, 2006

Yesterday was quite an exciting day! April and I got the blood test for her pregnancy confirmation back and it was positive! I'm gonna be a daddy! Woo hoo!

Although it came a few months earlier than we expected, we're both very excited about the news. A lesson to all you youngins... keep your rocket in your pocket! Because it happens really fast. April was really concerned about her new job at Northeastern School District since know she's pregnant. She was afraid they would fire her at the end of the year and she put a lot of effort into getting this job. But she talked to the Superintendant, who said she'll be fine and they'll give her the leave she deserves and all should go well. It's going to be a stressful next couple of months, but I really think we are capable of handling this. I will be doing all that I can to support her and give her the love and attention she needs (which I'm sure will be a lot).

What this translates to for me is keeping my job at Westfalia. I guess I just have to be happy with my job and suck it up for a year now because we need the money and the benefits. I'm not sure if I'll ever be involved in professional game development at this point in my life, but right now I don't care too much. I don't really want to make someone else's game anyway. So instead, I have another idea.

I can really see game development moving in the direction of C# in the next couple of years. It has the power of faster development, managed code, garbage collection (haha...), and access to the entire .NET library. I've been toying with a bit of game design too, which I never really thought I had a knack for, and it seems like when I seriously document some of the things I am thinking about, I can come up with some seriously wicked designs! I'm working on a game design for an MMO I am calling "Wireframe". The premise is to be a fun for all people where players can change the world they interact with. I think the principle idea came from Will Wright and his design principles in Spore. He gave the player the power to control evolution with procedural content generation. While Wireframe does not have any procedural content, the players can all interact with the world. In previous MMOs that I've played, the world was static, full of creatures, and static gear. What I am aiming with in the design of Wireframe is to give players the ability to manipulate, create, destroy, and manage the world around them collaboratively. Previously you could do this in SimCity by yourself, but never before could players unite to build, configure, and change terrain the way that Wireframe exposes. In addition to the building system, a unique combat and experience system will be put in place for players that wish to indulge in a more combat-oriented world and don't care much for building. The basic unit of currency will also be the basic unit of trade skills; the pixel. Simple geometry is a key factor in the design of Wireframe because the focus is on game play, not graphics. Armor can be custom crafted with thousands of possibilities depending on play style and scenarios.

I relate the design to a combination of many games. The building aspect has roots in SimCity and other world builders, even level editors, giving players the ability to change the world they interract with. I envision the growth and destruction of terrain to be similar to the N64 game Wetrix (I think I was the only kid on the planet who liked that game...), where terrain can be built up and when it rains, water will collect in pits forming lakes or rivers which can be used as a source for various other things. This leads into Harvest Moon like behavior because as a builder, players will be able to create homes, manage "crops" (probably trees and things) and utilize a hefty toolset to maintain the visual aspects of cities (which are player built, minus a few key locations). Combat will be a unique blend of classical RPG and MMO RPG based strategies that utilize players of all types, including builders. The hybrid experience system is unique, but based on the classical idea of talents or skill trees with a hint of "practice" to master. No first person shooter concepts have been used yet considering that this IS an RPG after all. =)

Oh! And it will be cel-shaded! Cartoony models, solid colors, and bright highlights are key to the graphical style used. Take that EQ2!

Man... do I digress. This is all in my design doc (or at least in an e-mail thread I have with myself for now), so I will leave the rest to your imagination. Maybe I can start a web community to document this once I have a solid game design. As a project on the side, I can take as long as I would like to finish it, whether it goes to production or not, I don't care. This is my project, my design, my focus, and my way of enjoying development. And right now in my life, I think that is where game development belongs for me.

Thursday, August 10, 2006

Well, I haven't posted anything lately because I've been really busy and quite productive at work. I've been trying to work on some demos and study up on game development to get a position. Which leads me to the next topic. I had sent Firaxis my resume with references and a link to my portfolio. I have the portfolio hooked up to a StatCounter so I can track who is viewing it and see how many hits per day I get from jobs. A handy tool I might add. With no word back from Day1Studios, I decided to give Laura from Day1 a call. I pretty much blew it. My material didn't cut it and I'm pretty sure all I did was annoy her, so there's no chance for me there. A few days later I got an e-mail from Firaxis!

Like... no way... Firaxis is considering me for a Generalist position? I was psyched! Couldn't believe it really, since they were hiring for a Software Engineer 3 position with 3 - 7 years experience and 1 shipped title (which I had none of). Bart Muzzin, a graphics programmer from Firaxis e-mailed me to set up a phone interview to discuss my qualifications better. I took a late lunch break and worked from home the rest of the afternoon to make it fit and man was I ever nervous before he called. Once he called, we got the ball rolling with a series of interview topics:


Firaxis Phone Interview Topics

C++
Static functions and variables

Ok, his first question was to explain what a static function is. Well, I pretty much blew this question out of the water and rambled on for 5 minutes about static variables. I knew that there was something special about a static function that makes it run by itself or something but couldn't put that into correct terms.

Answer: A static function of a class is one that can be executed without creating an instance of the class! Duh! I knew that! (after I interviewed of course...stupid memory...).

Josh 0/1

Then he asked me what a static variable was. Well, I kinda had to backtrack and say that uh... what I just described was a static variable? kinda? Then he asked, when are static variables created? I said when the line of code is executed.

Answer: When the program starts, existing the entire lifetime of the application.

Josh 0/2

Difference between STL vector and list

Bart's next questions had to do with the STL. I said I understand and have used a lot of it before, and mentioned vectors and lists, etc. So he asked me what the difference between a vector and list were. I answered with a few "uhh..."s, a couple "hrm.."s, and finally said that vectors are singly linked and lists are doubly linked. Wow... what a stupid answer. Vectors aren't freakin linked... they're not lists at all!

Answer: Vectors are stored like arrays, allowing you to randomly access data from any element in the array at any given time, with the difference that you can easily add new elements ( a dynamicly sized array ). A List is doubly linked and does NOT allow random access, you must follow the data sequentially, which makes complete sense.

Josh 0/3
Inheritance memory concerns
Wasn't really sure about this one either... the question was something like, what are some memory concerns when using inheritance? I didn't really give a solid answer for this question... it was more of a rambling about inheritance and base classes and using a base "world object" class to define the functionality that all derived classes should have or need to implement.
Answer: I think the answer they were looking for is that when you derive a class from a base class, the base class must first be created for each derived class that you create an instance of. What this means is that as the base class grows, the memory consumed is increased linearly with how many objects you have created. If all of the derived classes need to use all of this information, the situation is ok, but if you are using a large base class and only using a small amount of its funcitonality, you're probably wasting memory.
Josh 0/4
Virtual Inheritance / Multiple Inheritance
Yep, never did much with virtual or multiple inheritance before. So well I bluntly shot myself in the foot on this one. "Nope, don't know about em". It was somewhat fortunate for me that Bart never uses it and didn't consider it too important either.
Josh 0/5
Virtual Destructors

I was then asked to define a Virtual Destructor. I went on for another 5 minutes about virtual methods and said that a virtual destructor allows you to define base functionality for the destructor and make it overridable. No quite...

Answer: You need to use virtual destructors when you are going to use "delete" on a derived class object that is referenced by a base class pointer. If you do not use a virtual destructor, only the base classes's destructor gets called which can result in a memory leak, leaving the derived class's destructor unexecuted. If you make the destructor in the base class virtual, the dervied class's destructor will be run first and then the base class, which is the correct way to delete the object.
Josh 0/6

Graphics
Diffuse Lighting Calculation
In the graphics section he started by asking me what the calculation for diffuse lighting is. Since I can't remember formulas, I had no idea what the answer to this one was... But either way I knew it had something to do with the normal of the surface and the angle that the light was entering from. Woo! Got one close enough that I consider it right!
Answer: D = MaterialColorDiffuse * LightColorDiffuse * max(L • N, 0)
Josh 1/7

Cross Product
Next he asked me what the result of a vector cross product is. Man did I nail this one. Response: The result of a vector cross product is a vector perpendicular to the plane formed by the two original vectors.
Josh 2/8
OpenGL basics
Given that I have a scene set up, the camera is set up, everything is prepared, what is the OpenGL code used to render the image? Well I wasn't too sure what he wanted me to say and I haven't touched OpenGL in a few months, so it was kinda fuzzy to me, but I finally spat out glVertex3f, then realized you have to set the color which is glColor3f. His response was, yea, that's what I was looking for, but what comes before that?

...

Oh! glBegin()! Silly me. And he said "... and after that?" Oh, glEnd(). Yeah, I got that, I think I was more confused on the question then anything else.

Josh 3/9
DirectX basics
He asked me what the same call for this in DirectX was. Considering I have DirextX on my resume and that I'm applying for a game development job, I should probably know the basics of Direct3D. Unfortunately I had to take a mulligan on this one and say that I haven't worked with DirectX since DX7 using DirectDraw.
Answer: Device->BeginScene(), Device->DrawPrimitive(), Device->EndScene()
Josh 3/10
Shader languages
Well, after I said that I haven't worked with DirectX since DX7, he pretty much said, well then you don't know much about Shaders do you? Uh... nope!
Josh 3/11
He proceeded to ask me a lot about the Duck Hunt project that I worked on for senior design. I think those questions went well, but I hope I didn't come across as arrogant by saying that I did most of the work for the project. He talked a lot about team management and how well I work with others, but maybe I made it seem like I can't work well with others... which isn't the case at all. He also asked me what games I am currently playing and I mentioned WoW, we had a small friendly chat about that, War3, Civ4, and that's really about it right now.
I then had the opportunity to ask him some questions. I asked a lot of corporate and company questions trying to figure out if the company is the one for me. After those questions, I was positive that Firaxis is where I wanted to work. No contract work, straight to full-time, a casual and laid back development environment, and stability for years to come I'm sure. As Bart said "Sid's name sells games."
The Aftermath
Well, after the interview, I just stayed at home and tried to do some work, but I was so distracted and pre-occupied that I couldn't. I called April and talked to her for a while, and told her that I felt positive about it, as I always do after interviews.. having high hopes. Just as I'm about to go make dinner in preperation for April's arrival I got an e-mail from Susan Meier, Sid's wife and head of HR at Firaxis with the words "We appreciate the effort..." in the preview.
Crap. I knew right then and there, that 2 hours after an interview if you get an e-mail that says that anywhere, you're out of luck. Sure enough, I was declined. The news was surely disheartening, but I'm trying to stay as positive as possible about it and move on. It was a long shot anyway and considering that I scored roughly 25% on the technical questions, I don't think I would hire myself for a job if I didn't know me.
I think my success in a lot of other interviews comes from the fact that they're not looking for someone who can write the best code in the world, but someone that can interface with the team really well, and grow into a position. In game development, you have exactly the opposite. Sure they need to be able to interface with teams, but more importantly, they need to write damn good code, from memory. Unfortunately, I don't think this is something that I will ever be able to do. I need resources, references, and people to interact with to solve problems.
Maybe I will become a teacher in the long run after all...