Thursday, May 22

Saturday, May 17

A new PS3 Tech Demo

Despite all the negative critism by the users I was truly impressed when I saw the new tech demo for the PS3, titled "Linger In Shadows". Although very abstract, I was highly impressed with the close ups on the cat and the fur shaders. This comes a long way from Shadow of the Colossus. Other points that impressed me were the rope physics, and the depth of field (some of which I expect to be demonstrated in Insomniacs upcoming game).

This is a quick share. If you have further understanding of the graphics system please share with me what you might have thought after a closer look.

Wednesday, May 14

Windows 7 - Will it be amazing?

Yep I totally ripped this from Joe Thomas's away message.



Oh and yea there will be voice recognition UI.

Friday, May 9

Mirror's Edge Trailer

This is one of those games I've been waiting for with a lot of anticipation ever since the article in Edge magazine.

Thursday, May 8

Excited about AI

I'm truly, truly, truly excited about this month. I'm finally putting in the hours to learn and apply AI. I woke up at at 4 am, and at 5 am I was on campus, reading Artificial Intelligence for Games by Ian Millinigton. Although we spent half of lecture going over the silly-bus, and some more time on Dishonesty Policies, we eventually got down to business. Of course that only meant going over what AI is, and the three basic Data Structures: Linked Lists (Queues), Hashmaps, and Trees.

Since several people did not finish the lab on time Jeremiah did provide an extension for it which is largely due to the fact that lecture ended rather late.

So it sounds like the first day wasn't overly exciting, and next class isn't two days from now. What in the world will keep me busy until than?

The answer! Robocode! At the moment it's me and Casey Flach in a team for the monthly competition. My goal is nothing short of first place in Hall of Fame! Anyways feel free to check out the rules here.

Wednesday, May 7

Cookouts, GTA, AI, and Cheesesteaks

Hey Guys


Boy do I feel guilty writing after a long period of absence. I think I'm just old school like that; you know, how websites should maintain a steady stream of content in order to keep its frequent visitors happy. Now a days, we have the amazing technology called RSS and an average user may subscribed to hundreds of such blogs. It's no excuse for such a long period of absence so I do apologize. I'll try and pick up where I left off. Oh and as a quick shout out; had it not been for Steve VanZandtm, our past instructor for Rules of the Game here at FullSail, it may have even longer.

So GDC! Yea it came, it passed.

After GDC, I had took a class in OpenGL and focused deeply on graphics. Over the course of March my understanding of hardware, the pipeline, and shaders grew immensely.

What else I learned, is that compared to my friend Joseph Thomas (if the name doesn't sound familiar, don't worry it will soon), I am not very fund of graphics programming.

Still that didn't stop me from learning enough to finally develop my own DX framework for future projects. This is largely thanks to the tutorials by Chad Vernon. Who's cvxporter I finaly got working (feel free to e-mail me if you have trouble).

Cookouts


So for those that don't know. The bunch of us in GD have been organizing cookouts at Wardpark (Cady Way park) for a few months now. If all goes well, we hope to turn these events into an official club (The Game Networking Club). We usually play football, soccer, Frisbee, talk, eat, and last time even had a chess set out. Everyone is pretty much welcome, it's largely informal. We do ask for $3 or to bring your own food. Either will help in the lot, and we always have left overs. Our next meet is this Sunday May 11th. Don't forget to send your mom a card ;)

AI


OK so I finally get to rant a little. This is the class I've been dieing to take since I first signed up to attend FullSail. I've had the opportunity to meet and drink with Jeremiah Blanchard, our AI instructor, and he's a great guy. First day of class is tomorow and I expect to be on campus at like 5 am. I've already finished the first lab (I know we aren't supposed to), and having my DX framework complete I plan on finally building up my portfolio in the area I'm so passionate about.

The Portfolio


I know, I know. I've talking about this for so long and yet straystudios.com has remained static for over a year now. I'll make up for it hopefully soon (maybe not this month, but before September). Steve who is a veteran from the Digital Arts and Design department is willing to lend me a hand on my layout, I would really like to produce it in Flash.

Cheesesteaks


I'm a huge fan of Philadelphia. I've grown up on the Philadelphia cheesesteak. I'm talking about Pats and Genos baby. None of that imitation. Until recent, there hasn't been much to quench my hunger in that department. I'll keep this to the point. University and Goldenrod. There's an amazing place called "Phil's Famous Cheesesteaks". Best ones I've had in Winter Park.

Well that's it for now. More soon. Promise.

Tuesday, February 19

What inspires you?

The Game Developer's Conference is well under way. Many are participating in the "Destroy all Developers Challange" while other take the time to sit in on the many available tutorial session during the past two days. Myself, well I try to stay motivated.


Monday began with a tutorial on "Core Shader Algorithms and Techniques," which covered many techniques in the lattest edition of ShaderX books. The most memroblewas a technique that covered by Carsten Dachsbacher from University of Stuttgart who spoke about a new technique for generating texture maps. Instead of using texture atlases he suggested an idea called "TileTrees," a data-structure that generates 2D tiles around the surface of a model.

Later that night, I met up with Sean Hathaway, James Leonis (http://virus2566.blogspot.com/), and Mike Arlington (www.deflesca.com); where I had been introduced to this year's scholarship recipients. I got to meet some fascinating people:

- Andrew Armstrong - a student from England who is this year's Eric Dybsand AI Scholarship recipient. Check out his website at http://www.aarmstrong.org/
- Jordi Fine - Jordi is an inspiring Game Designer with some real works under his belt. Definetly check him out at http://www.jordifine.com/
- Enrique Saul Gonzalez - Will be attending Tokyo University, with a goal of producing educational games for the Japanese.
- Andrew Sorkin - Sound design and composition, easily stands out as one of the few people I get to meet interested in audio for games. Check him out at http://sorkinsound.com/
- Tatyana Dyshlova - She's currently attending Brown University, with the intension of working with hardware and production.
- Michael Lee - Michael just like myself is last year's Eric Dybsand scholarship recipient. After catching up, he's apparently doing very well with his own company at http://ludoko.com
- Silvia Lindtner - highly talented, she's interested in pursuing sensors in video games and is currently enrolled in University of California. I was especially impressed with her business card, particularly after learning she designed it herself. Her website is equally as impressive at http://www.ics.uci.edu/~lindtner

Phew, that's a rather large list, and I do appolize for anyone I forgot to mention.

The following day (today), I stumbled down 4th street to Mascone center where I set down for my day two tutorial which covered "Physics in Video Games". Although the lecture started off slowly covering most fundementals such as the Euler's method for velocity as well as angular velocity. Squirel was quick to point out some of the pitfalls involved with irregular timesteps and tunneling. The lecture picked up pace after lunch during which I got to speak with Ben Retan (www.benretan.com) who is also a Full Sail student about to graduate. The second half opened up with the Minkowski Differences, a crash course in GJK which absolutly blew me away with it's complexity, and finally wrapped up the tutorial with a talk on constraints.

Overall these past two days have been incredibly exciting and I try to recover my energy tonight and get some more work done on Amoeba Sports, I can not wait to get back and put some of these techniques to work.

Sunday, February 17

Pre-GDC 2008

In the past 72 hours I've slept a total of maybe 10, in small intervals of 2 hours, 3 hours, and that which I wouldn't even consider to be rest during the flight. The cause for all of this is of-course the Game Developer's Conference 2008. I wont waste my breathe on the importance of this event, but that doesn't mean that my school schedule would in any way be lenient towards this once a year phenomenon. Therefore I have spent sleepless nights wrapping up the Gameplay AI for Amoeba Sports (Beta), and as of a few hours ago I would have to say it's been a total success. A week's worth of features, and gameplay mechanics finished in more or less a day and a half.

But I wont get ahead of myself as I am now past exhusted from the flight. From MCO airport we first went North towards Atlanta, during the flight we experienced some technical difficulties where the landing gear on the right wing would not release. The stewairdess did not help the situation as her nervous face was read by every passanger in the five feet radius, who continously kept glaring over my should looking at the wing. When we eventually landed, and my headache subsided, we faced a fifteen minute delay and took off again, this time for what seemed like a six hour long flight, I landed only three hours later (time zones are funny that way).

Oh I almost forgot, I'm not attending alone this year; as Jim Leonis, MFA, and Sean are all joining me, and where supposed to have gotten to San Fransisco an hour before I did. After landing I had quickly unpacked my cell phone and attempted to call them, as we planned to meet up at the airport. After dialing Sean, followed by Jim, and followed by Mike; I found each one of their cell phones turned off (I understand the airplane policies, but I see no reason to fully turn the device off and cut off all communication with the outside world). After three hours went by and I began to panic and think that something might have happened to my deer old friends, and worse yet I might be left sleeping on the cold streets of San Fransisco as the hotel room was registered uner Sean's name; I got the bright idea to call up Rev (Sean's and MFA's roommate). He informed me that they had missed their flight and had not departed yet at 2:00 pm EST. Which means they would not arrive for another four hours.

At the current time of blogging I am at the familiar Citizen's Cupcake Cafe, the place changed a little but still nice, and my friend's still have not turned on the mobiles. According to flightaware.com they should have all arrived at 5:10 (that was 30 min ago). So in the meantime I had registered myself at the Masconi Center and read every slip of paper I could find in that black bag of goodies. My favorite being a Ping Pong Ball by GameDev.net, which will surely be used sometime in the near future. The other item of interest is a "6 hour Energy! Mini Thin RUSH." That's right, if you haven't seen this yet than it wouldn't be far from the actual produce provided. As I like to live dangerously I intend to save this for the upcoming Wed or Thur.

Thursday, February 7

Amoeba Sports [Buzz]

"Did you hear about the new shooter for the PSN?"
"You mean Amoeba Sports right?"
"Yea that's right, there hasn't been much information released about it"
"From what I understand it's a genre soup title. A shooter + soccer + arcade survival game."

Above is a fictional conversation about a real game that Casey Flach, Charlie Prouse, and myself (Michael Kofman) are developing in the span of two months. Two months for the design, research, tools development, engine architecture, testing and debugging. For most a schedule like this would sound ludicrous but that is in fact what we're doing this month in our SGP course. To make things more interesting, we made the decision to create the game in full 3D, using vertex shaders to simulate cell shading, dynamic particle effects, a robust AI system that I'll talk about in detail at a later time, steering behavior, a dynamic HUD, and so many other features. We are currently at the point of a playable demo, and in the coming weeks I'll have screenshots to wet your appetite. For now here is our dust jacket.

"Image above is a prototype"
Set in a puddle in 10 billion BC, you play as an amoeba attempting to furiously collect amino acids as you’re very existence depends on it. Using your several brain cells, you must out smart both the opposing amoeba, and other smaller life forms all competing for the amino acids. You must collect the amino acids and fill up your personal colored nest and keep them there as the smaller life forms attempt to steal them from you, or slow you down in the process. As an advanced form of amoeba, known also as an Amoeboid, you have the abilities to spout out goo blob bullets, create a powerful bubble shield to stop the bullets in their place, dart to forward to avoid danger, and even the ability to send out waves to create a ripple. By using these theses abilities, you must shot, push, and block your way to being the top dog in the puddle.

Monday, February 4

Month 2 - Day 1

It's the beginning of a new month, and that usually would mean new classes, and new instructors. This time it's different; same class, same assignment, and the same team. SGP Month 2 is said to be the most hectic time during the time spent at FullSail second only to final project upon graduation. Before I go any further into it, this past weekend was a blast. Granted we only get a measly three days to recover, time that is hardly ever used entirely for resting, we had organized another cookout. Combined with the month ahead, it consisted primarily of the month ahead. Me and Jim Leonis had brought meat that he had done a pretty good job preparing at the park. Meanwhile we organized a soccer game, that was fun but lasted maybe fifteen minutes before people ran out of breath. Well what can you do, when all the time spent is sitting on your arse looking at a flickering tube. Overall it was a lot of fun, and I intend to try and organize it again next month.
This weekend was also Magic night, myself, Taylor, Sigsby, and Mat all drafted the new Morningtide expansion, which got me interested in Magic again. I can't wait till I can sustain that hobby of mine.

The leisurely weekend ended Sunday as I dove back into programming, fleshing out more of the AI Engine but more particularly the functionality that will allow for a testable environment and SVN. Casey being occupied with Super Bowl XLII I stopped work short and went to bed for a 9 am class.

I woke up earlier than planned, about 6 am or so. I debated going back to sleep, but choose not to. Realizing that I still had lots of chores left unfinished I got up and went into the shower. After I came out, I decided not to wait precious energy on chores, packed my laptop and headed out. I figured I should try and squeeze a few more lines of code, before integration.

Me and Casey pretty much worked hand in hand the entire day, and completed a very impressive chunk of code. Finishing up the GameStates we are now left to patch up holes in the system.

All this would be fine and dandy until we realized that the .x files exported out of Maya 8.5 using cvxporter don't save vertex coloring, which is ultimately crucial for our vertex shader. And so the search begins, we confirm the problem, and I begin looking for alternate solutions. Obviously using an alternate 3D modeling tool is always an option, but it's not something we want to do for two reasons. First the unit scale would be totally off and we would need to adjust the dimensions of each model by hand. Second, their is a learning curve to using an unfamiliar 3D modeling tool.

So back to cvxporter, Chad Vernon decided to switch up his plugin to run through Python. Since I am totally unfamiliar with the language, and I know few people who are; I say, what the hell let's give it a try. I install Python24 for windows. Grab the ctypes that Chad mentions in his instructions (mind you I know how to follow them). Set up the Environment Path for PYTHONPATH, and it the cvxporter.py simply doesn't work. Wow, a fantastic time sink, but hey! Their is always tomorrow...

Sunday, February 3

Two Week Dash

After a month that can best be described as walking on ice with a sevnty pound weight, Stickbiscuit Studios ( Michael Kofman - Project Officer and Gameplay, Charlie Prouse - Interface Lead, and Casey Flach - Technolodgy Officer ) we nailed our game document, earning our first $150k SGP dollars out of a possible 1.5 million to be accumilated. Our second milestone towards the end of the month did not pan out so well, earning us only 160k our of a possible 300k for that milestone, the team walked away disappointed. While I tried to cheer up the team, and push the blame onto the overly unjust critism and grading scale, I realize that I failed as a project officer. In the comming two weeks until Alpha I intend to step up. As far as my work goes, and also actually play the role of a project officer and nag as much as needed to keep on schedule.

Time to go to sleep, tomorrow will be a long day.

Thursday, January 10

First Day of Rules of the Game

6:00am - Woke up, as the information from yesterday flooded into my head. I set some water to boil for coffee while I head into the shower. I take my time and let the water drip down on me, brainstorming today's todo. (Create a point distribution spreadsheet, game synopsis, produce a 3D demo of a moveable object, RoG (Rules of the Game)).

6:30 am - I decide to forgo coffee, and instead move onto some cereal. I drop my recording of yesterday's lecture and begin to listen to them while eating.

7:00 am - After running through the syllabus, and reviewing everything from yesterday I begin to recreate the point distribution spread sheet for the team.

8:00 am - I head out to campus for our schedule group meeting.

9:00 am - Seeing a lot of familiar faces in SGP-2 I spend most of the time socializing until Casey shows up, followed by Charlie. We discuss the spread sheet, deciding that we will attempt many at many new boundaries. We intend to implement Shaders (vertex shaders, pixel shaders), particle effects, and even fluid dynamics most likely using D3D terrains. We also work out the game synopsis, thanks to Charlie's great creative writing skill which I will no doubt fall back on in the future.

12:00 pm - We split up and head for lunch, before I do I meet up with Dan who is part of the only group attempting 3D in the month ahead. I try to size up the scope and depth of his project, and it's quite impressive, at the same time I become very excited. After all it is much easier to follow someone's else's footsteps, and hopefully make some new ones along the way.

1:00 pm - ROG begins.
1:15 pm - Apparently this class is being taught by a new instructor, and not Dave the creator of Dungeons and Dragons. I do not mind. Steve VanZandt comes off as well informed, and a well organized instructor. In fact I would go as far as to say that he is a good example of a college level teacher (by normal standards). On that note, when role was called I was rather unoptimistic in saying 'here'. He replied back saying, 'awe you must be the invisible type'. While maybe those weren't his exact words, and they were said in such a way that I may be the only one that heard them. I noticed he did not pay very much attention to me for the duration of the class, except for several glances to make sure I'm paying attention (I'm a little worried about my GPS).
3:00pm - On that note we began lab early, being told that we will continue lecture after lunch break. So based on my first impression to the teacher, or at least my assumption to that impression, I decided to make a point to stand out. I raised my hand several times, and when we broke out in order to play board games ( a supposedly education process ), I choose to persue the simpler board game (Blokus). While it was my first time playing this game, I decided I could do much better in this game compared to the other games which had either intricate rules, or a rather large luck factor. In short, I wanted to win.

5:00pm - By the time lunch time came around we had played five games. My first game, I feel I got rather lucky and made correct decisions. Everyone at the table had been a first timer. I managed to win with 25 points ( a perfect score ). After winning the first game, and also sharing several of strategies, I did not fair nearly as well in the second game and had got -18 still coming in a far second. For the third game I managed to pull a not perfect victory with -7, this time beating our past DirectX teacher Chuck. Chuck is a great guy, and was pretty good at the game, so I really enjoyed it. With each consecutive game, it became harder and harder to win, and the competition became more and more fierce. By this point everyone was keeping track of the number of pieces left over, blocking others, and quickly making aggressive cuts into territory. Being experienced in both spatial tactics of chess, and go I was well aware in the idea of over expanding and being too passive. The fifth game was incredibly dominating. I managed to squeeze off a third of the board to myself, completely blocking any and all crosses using the double eye strategy common in GO. I ended up being able to take all my turns without waiting as no one really could cross into my territory. I won with a -4.

6:00pm - Lunch was brief, ate Chinese, and was pretty relaxing. Spending time not working on the SGP game became incredibly daunting. In fact by this point that's all I could think about. After lunch I spent the time drawing enemies, and thinking of game mechanics. This made the following lecture even more so daunting. I simply was not interested in the fluff. Game Design? Please, that's not what I'm paying the money for, and as shallow as that may sound I can not feel like this is yet another repeat of something I've already experienced, partially or totally. ECG, Behavioral Science, HAM, and the two day GameDesign track at last year's GDC have been plenty. I can make a card board game, all I care about now is how to make it render.

9:27pm - I'm home, I've finished my green tea, and wrapping up this blog post. Going to shower and begin working DXUTMesh which is by no means straight forward. I also intended to write about 3D Fundamentals, but I think I will leave that for a later post.

Sunday, January 6

Friday, January 4

GDC08 First Keynote Announced!

This is big news! As some of you know I will be attending GDC08 this year, this time without a scholarship to lean on, I am more determined than ever to make the most of it. So after I opened my e-mail today I find that they have begun to announce the keynotes. Last year's being Miyamoto, and Phil Harrison; suffice to say that's one tough act to follow. So to my surprise I was too ignorant not to recognize a name as famous as Ray Kurzweil. But after doing minimal research on this man, he has quickly grown on me as an inspirational figure.

Ray Kurzweil has been described as “the restless genius” by the Wall Street Journal, and “the ultimate thinking machine” by Forbes. Inc. magazine ranked him #8 among entrepreneurs in the United States, calling him the “rightful heir to Thomas Edison,” and PBS included Ray as one of 16 “revolutionaries who made America,” along with other inventors of the past two centuries.



As one of the leading inventors of our time, Ray was the principal developer of the first CCD flat-bed scanner, the first omni-font optical character recognition, the first print-to-speech reading machine for the blind, the first text-to-speech synthesizer, the first music synthesizer capable of recreating the grand piano and other orchestral instruments, and the first commercially marketed large-vocabulary speech recognition. Ray’s web site Kurzweil AI.net has over one million readers.

Among Ray’s many honors, he is the recipient of the $500,000 MIT-Lemelson Prize, the world's largest for innovation. In 1999, he received the National Medal of Technology, the nation's highest honor in technology, from President Clinton in a White House ceremony. And in 2002, he was inducted into the National Inventor's Hall of Fame , established by the US Patent Office.

He has received fifteen honorary Doctorates and honors from three U.S. presidents.

Ray has written five books, four of which have been national best sellers. The Age of Spiritual Machines has been translated into 9 languages and was the #1 best selling book on Amazon in science. Ray’s latest book, The Singularity is Near, was a New York Times best seller, and has been the #1 book on Amazon in both science and philosophy.

Thursday, January 3

Wednesday, January 2

Games Noir

A game Noir, as described by Steve Gaynor in the recent publication on Gamasutra, is a B grade game that is budgeted to not be as risky as a triple A title, and yet having enough content and quality to be noticed by the mass consumer. So what does this imply for the Game Design? As the author pointed out, the comparison for a Game Noir does necessarily mean we should mimic the style of a film Noir, which after all is not an interactive form of media, and while a strong story is one way to sell a B budget game, it is not the only. Steve suggests experimentation in game play, and several of the earlier comments below the article mention games like Portal. While a game like Portal would certainly classify, it got me wondering what kind of games could I come up with under such limitations. So this is what I came up with, and while keeping such innovative ideas a secret did cross my mind, I also think it will be a few years before I'm in any position to make them, at which point they will no longer be as innovative, and their will be new technology, and a new ideas to draw from.

Title: Water
Concept: There are very few games that truly explore the water world, and the fun possibilities that lie with it. Most water based games fall into the category of races, which while it may be fun, is no different than racing on sand, in space, or on dirt. No this game should put the player in a position where water is used as underlying game play mechanic.
Gameplay: So imagine for instant that you play a silver surfer type of character, who can generate generate waves that can be used as weapons, or ramps for other players. Imagine a form of capture the flag in this style of gameplay, or football-isc rules. As long as the development is constantly thinking about how to make water more and more fun, and not throwing in any half-baked side elements this would be a truly fun game to play.
Story: This really wasn't about Story, but I believe unless the game is built as a multiplayer only title such as Warhawk, than a story should have as much care as the game play. There is nothing worse than progressing, through a game without a feeling of discovery. I believe that's what a good story does for simple games such as this. So, if it were entirely up to me, I would have this game be a growing up tale, about a boy who goes onto compete in a large arena. Imagine any story about a professional athlete being told from his child hood and eventually taking him to the Majors.

Title: Kendo with a Paintbrush
Concept: Painting has been demonstrated as a feasible game mechanic by Okami. In fact it was incredibly well executed, but than that was it. Is it that we as an industry are too afraid to draw from the same because we would be copying? Or are we too short sighted at other alternatives to painting in a video game. In fact by only utilizing the freeze time + analog sticks paint mechanic and drawing not a single thing more from the game Okami, some truly original ideas begin to come to mind, and playing Kendo is just but one of them. Kendo is about reading an opponent's next move, sort of like chess, it is about looking for patterns, and being creative.
Gameplay: Your weapon is a brush and your face to face against an imminent threat. As mentioned earlier, I see nothing wrong with using the time manipulating game mechanic from Okami. But to make things a bit more interesting, you can only paint within a much smaller radius of your brush, and when you choose to paint you can only slow time down, you don't freeze time. This will allow for your opponent to react but in a much slower fashion. Imagine now the sort of effect that would follow such slow motion sequences that would be exchanged between each player or computer player. Player one begins to draw a projectile circle (keeping in mind that this uses a lot more paint and the circle must be completely closed), he aims for the head. Player two, noticing the shape, steps to the side, and while watching his own avatar slowly begin to move, he begins to draw his own attack. Blocks, Strikes, Parries, fencing or Kendo this is the core of the game play.
Story: Hmm, well could we do something similar to the above? Yea sure, it would work, but for the sake of being original and daring as a Noir title should be. Let us take on the role of a girl. Why a girl? Because Kendo would be out of place for a girl, that statement in itself not being entirely accurate, that is half the reason. The other half of the reason is it can be quite interesting for boys playing this game who may or may not yet understand girls or woman for that matter and have the story be told about a serious issue from her point of view. For example, how time keeps passing her buy, and she's getting older and older and still not sure of what to do with her future. Will she practice Paintbrush Kendo for the rest of her life? That can't possibly be it, but yet her grades limit her options. It could be a story about her pursuing a meaningful life, and overcoming challanges. The use of a girl as a main character is in fact completely irrelevant towards how the story would unfold, unless there is a hint of romance involved in which case boys and girls act differently.

Anyways, I feel that from this little exercise I've learned two things about making a great Noir game. Focus on only one key gameplay mechanic, than focus even more on the story. Keep things from being repetitive buy using the gameplay as a reward, rather than the other way around.

Hope you liked these ideas, and will inspire who ever you are to come up with some of your own. Oh and if your a famous game designer yourself, with some hiring power, I got a lot more haha : )

DXUT Game Architecture Part One

Understanding *.VSPROJ

I’m of course referring to a standard Visual Studio Project. In order to understand DXUT and for that any API integration, it is quite vital to understand project dependencies and settings. So this first tutorial will focus on just that with emphasis on DXUT project settings.

On quick thing to make a note of is that a visual studio project are the multiple project builds. Most books on this topic already assume you understand this, but for those with less experience in this area due to one reason or another I’ll quickly explain this concept.

A project build are unique project settings often to do with the compiler, and the linker. The most common three types of builds are the Debug, Release, and the Profile build.

The Debug build is usually the configuration you use while trying to test, solve problems, or quite simply debug. This includes enabling things like symbolic debug information, and disabling any form of code optimization such as inline functions for example.

The release build is by far the easiest one to understand because it is what you’ll be providing the end user with. With that being said you want to omit any unnecessary debug information, and include any form of code optimization.

The debug and release builds are what is defaulted during development using Visual Studio. You will then be expected to make any additional builds on your own (doing so is easy, just do some research). The question would than arise, as to what the purpose of these extra builds might be, and this is what I believe a Profile build that is often regarded as in programming books. The profile build or whatever you choose to call it, may be a build specifically designed to run a specific piece of hardware; such as a cell phone, a PlayStation, a different operating system, or it may quite simply act as a midpoint between a Debug and a Release build for testers etc. As long as you understand this, than choosing the appropriate settings for a Profile build or choosing to omit it entirely becomes a simple mater.

Now that’s out of the way, in Visual Studio switching configurations is as simple as choosing one from the drop down list above. Make sure to note the “All Configurations” option which will allow you to make consistent changes to all current builds.

Next you must decide on how you wish for your project to be organized. There is nothing wrong with using the default directory structure that Visual Studio sets up for you, but after reading Mike McShaffry’s Game Coding Complete, I feel in love with his design which you can find on page 93 of his publication. This is roughly what it looks like:

  • Project Code Name
    • Docs
      • Documentation, game concepts, etc.
      • Media
        • Folder belongs to the artists, raw .psd, and high res textures
      • Source
        • The source code, .sln and .vproj belong here
      • Obj
        • The junk, SCC, OBJ, SBR, ILK, and PCH files.
        • Deleting the contents of this folder will cause a complete rebuild
      • Bin
        • Game files only.
        • Executables
        • Zipping up this folder should contain everything necessary to play your game.
      • Test
        • Debug and Profile targets of the game, and any utilities useful for the test team.

[Configuration Properties]

[General]

  • Output Directory, your output directory is where you can expect to find your .exe
  • Intermediate Directory, compiler specific files, this should probably be configured to point inside your Obj folder if you choose to follow the advised dir structure.
  • Extensions to Delete on Clean, during the rebuild step the following are the file extensions you would like to be deleted. If you’re confident in what you’re doing this is a great opportunity to delete unwanted logs etc…
  • Build Log File, I have never utilized the following log file, but it should be clear as to what to expect here.
  • Inherited Project Property Sheets, this is important if you are setting up your project from an empty project with absolutely no defaulted settings. Feel free to read more on this topic if you wish, but for a DXUT project set it to
    • $(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops
  • Configuration Type, the following drop down list determines exactly what your project is built to do. If your building an application (*.exe), a static library(*.lib), a dynamic library (*.dll).
  • Use of MFC, set the following to Use Standard Windows Libraries
  • Use of ATL, set the following to Not Using ATL
  • Minimize CRT Use in ATL, think about this for a sec. Are we using ATL? Then set this to No.
  • Character Set, DXUT is infamous to using Unicode and not Multibyte which is more common to hand written DirectX. Remember a character set is not something that can’t be changed if you wish by using prefixes such as L, or T.
  • Common Language Runtime support, No Common Language Runtime support.
  • Whole Program Optimization, No Whole Program Optimization. Remember what we discussed earlier with various build types.

I’ve went into a lot of detail when it comes to General Configuration, from here on out I will not spend the time to explain settings that are build specific, or that have nothing to do with enabling DXUT. Remember that it is important to learn how to do your research here, and I believe I’ve provided you with the stepping stones to do so.

After creating your project and going through the steps of configuring your $(IntDir), $(OutDir), and various build options you should install the latest DirectX Distribution. Each distribution should come with the latest DXUT files usually located in (C:\Program Files\Microsoft DirectX SDK (November 2007)\Samples\C++\DXUT). A good way to find it is to perform a search for dxut.h on your entire computer. Eventually you will two folders, [Core] and [Optional]. What is this you might be wondering? The core folder is where you’ll find dxut.h and other essential header files involved with successfully compiling DXUT code. In other words you’ll defiantly need these files. On the other hand Optional contains the majority of the DirectX wrappers for game development. Please be aware that DXUT does not document the optional wrappers and is not truly part of the API but are provided as sample code for producing your own wrappers to do the same. With that being said, I don’t copy both folders directly, but instead make a new folder in my project source directory called DXUT and paste the appropriate header and cpp files.

Now you’re going to want to right click on your project and add existing files that you just copied into your project. Second, you want to go back into Project Properties and navigate to Configuration Properties -> C/C++ -> Additional Include Directories. Than point once again to the DXUT folder w/ respect to your *.vsproj file. Assuming it is inside your Source folder, simply typing in DXUT; is sufficient.

* If you don’t see the C/C++ tab inside your Configuration File it is most likely due to the fact that Visual Studio has not yet identified your project as a C++ project. To do this simply create a .cpp file such as WinMain.cpp. And open up properties again.

This concludes Part 1 of the tutorial. If you would like to continue without waiting for my next update, feel free to purchase Game Coding Complete or you could simply navigate to Mike McShaffry’s forums at http://www.mcshaffry.com/GameCode/board.php. Something to note about the way Mike sets up his DXUT is by building a separate project with its own precompiled header, and outputting a *.lib. He then sets up his next project that being the Game Architecture project and set’s it to be dependent on the DXUT build. He also does his #include for DXUT files inside his Game Architecture project and not the DXUT project. Hopefully you’ll figure it out. Or feel free to wait for my next update where I’ll try to take this tutorial all the way to rendering a blue screen via the DXUT function calls.


Friday, December 28

Dreaming



Dreams can be incredible healers. Letting yourself go without worrying about tomorrow, and allowing yourself to dream; I woke today with my feet and arms absent of the usual pain, and amazing energy for productivity.



Last night I was inspired to dream, after watching a fantastic film called "Paprika". Their were references to Millenium Actress, and Tokyo Godfathers so I'm only assuming it was done by the same art director, but quite on par with the visual quality of those films. I absolutly don't want to ruin a single moment of the film so I wont say a word more, but it's a must watch by everyone.


A few days I've also finished reading Ender's Shadow. The fourth book in the series from Ender's Game by Orson Scottcard. I was recommended to skip the second and third book and go straight to the fourth, and I enjoyed it just as much as the first. Orson's writing improved considerably, as I spent less and less time trying to outsmart little Ender, or in this case little Bean. Still, what's most fascinating about the series are the various types of games the kids play. As someone who still holds onto his childhood, and a game developer I am extremly enticed to maybe one day produce one of these games, especially the squad based AI.

That's pretty much it, I wanted to give you guys some updates, and a little entertainment. I guess I should get back to work.

PS: I finally got DXUT working, but the architecture still seems to puzzle me in several places. I just can't believe there isn't any documentation .... should I take the initiative?

Monday, December 24

Trouble with DXUT

For those who aren't familiar with DXUT, it's an API that's included with DirectX to be used for games. With convenient functions like DXUTInit( ), DXUTMainLoop( ). It is incredibly enticing and trying to build a Game Architecture based around it is incredibly temping. On the other hand, their is very little documentation on it outside of the MSDN that seems to be heavily DX10 oriented.

I am currently stuck at the fact that dxut.h doesn't have any body definitions for DXUTInit() and I am puzzled by my inexperience. If anyone is familiar with the API please leave a comment, or contact me?