Tuesday, November 29, 2011

Doom3 source code

I got Doom3 compiling and running on my Mac thanks to this fork of the code...
https://github.com/Geenz/doom3.gpl
It really is a lot of fun poking around.
I think Doom3 was written to run on Geforce 3 GPU's (maybe even Geforce 2). So I was thinking it would be cool to take advantage of our new fancy pants GPU's and do some cool stuff.
First thing I did was add a vidmode for my monitor (1680X1050) could add some more common screen resolutions like 720p and 1080p.
I don't know if it is a Mac thing or not but it doesn't look like vsysnc is working, it would be good to sort that out.
I haven't tried it with a game pad yet, but would like to see it working nicely with an X360 controler.
Would like to add some better normal map compressing. Normal maps compressed with DXT1 look like crap. But most GPU's should have enough ram to load all the textures uncompressed now.
There is a lot of smoke and dust, could easy make them soft using the z-buffer.
I think all the skinning and shadow silhouette generation is done on the CPU, shouldn't be too hard to move then onto the GPU now.
Even though I'm not a big fan of SSAO it could be a good fit.
MSAA works fine in Doom3 but it might be fun to add FXAA.
And of course adding HDR and motion blur would really sex it up.

The real problem is finding the hours in the day to do all of this. Should really look around and see what other people are doing. I'm sure other people are thinking about the same things as me.

Monday, November 21, 2011

Xcode KeyBindings

Trying to make Xcode more like Visual Studio.
Work in progress...


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Menu Key Bindings</key>
<dict>
<key>Key Bindings</key>
<array>
<dict>
<key>Action</key>
<string>cut:</string>
<key>Alternate</key>
<string>NO</string>
<key>CommandID</key>
<string>Xcode.IDEKit.CmdDefinition.Cut</string>
<key>Group</key>
<string>Edit Menu</string>
<key>GroupID</key>
<string>Xcode.IDEKit.MenuDefinition.Main</string>
<key>GroupedAlternate</key>
<string>NO</string>
<key>Keyboard Shortcut</key>
<string>^x</string>
<key>Navigation</key>
<string>NO</string>
<key>Title</key>
<string>Cut</string>
</dict>
<dict>
<key>Action</key>
<string>copy:</string>
<key>Alternate</key>
<string>NO</string>
<key>CommandID</key>
<string>Xcode.IDEKit.CmdDefinition.Copy</string>
<key>Group</key>
<string>Edit Menu</string>
<key>GroupID</key>
<string>Xcode.IDEKit.MenuDefinition.Main</string>
<key>GroupedAlternate</key>
<string>NO</string>
<key>Keyboard Shortcut</key>
<string>^c</string>
<key>Navigation</key>
<string>NO</string>
<key>Title</key>
<string>Copy</string>
</dict>
<dict>
<key>Action</key>
<string>paste:</string>
<key>Alternate</key>
<string>NO</string>
<key>CommandID</key>
<string>Xcode.IDEKit.CmdDefinition.Paste</string>
<key>Group</key>
<string>Edit Menu</string>
<key>GroupID</key>
<string>Xcode.IDEKit.MenuDefinition.Main</string>
<key>GroupedAlternate</key>
<string>NO</string>
<key>Keyboard Shortcut</key>
<string>^v</string>
<key>Navigation</key>
<string>NO</string>
<key>Title</key>
<string>Paste</string>
</dict>
</array>
<key>Version</key>
<integer>3</integer>
</dict>
<key>Text Key Bindings</key>
<dict>
<key>Key Bindings</key>
<dict>
<key></key>
<array>
<string>moveToRightEndOfLineAndModifySelection:</string>
<string>moveToLeftEndOfLineAndModifySelection:</string>
<string>moveToRightEndOfLine:</string>
<string>moveToLeftEndOfLine:</string>
<string>selectToMark:</string>
<string>swapWithMark:</string>
<string>scrollToBeginningOfDocument:</string>
<string>scrollToEndOfDocument:</string>
</array>
<key>$@</key>
<string>moveToBeginningOfDocumentAndModifySelection:</string>
<key>$@</key>
<string>moveToEndOfDocumentAndModifySelection:</string>
<key>$@</key>
<string>moveWordBackwardAndModifySelection:</string>
<key>$@</key>
<string>moveWordForwardAndModifySelection:</string>
<key>$</key>
<string>moveToBeginningOfLineAndModifySelection:</string>
<key>$</key>
<string>moveToEndOfLineAndModifySelection:</string>
<key>@</key>
<string>moveWordLeft:</string>
<key>@</key>
<string>moveWordRight:</string>
<key>^~$B</key>
<string>moveWordBackwardAndModifySelection:</string>
<key>^~$F</key>
<string>moveWordForwardAndModifySelection:</string>
<key>~</key>
<string>moveWordLeft:</string>
<key>~</key>
<string>moveWordRight:</string>
<key>~</key>
<string>pageDown:</string>
<key></key>
<string>moveToBeginningOfLine:</string>
<key></key>
<string>moveToEndOfLine:</string>
</dict>
<key>Version</key>
<integer>3</integer>
</dict>
</dict>
</plist>

Tuesday, August 30, 2011

Source control will save you life one day

The light maps in IdleTime are extremely bad. In fact I'm not even sure you could call them light maps. Basically they just store the shadows. The UV densaty is a joke, there is no ambient occlusion, no bounce lighting, no nothing.

So whats this got to do with source control? Looking at the above screen shot I decided that I should fix the light maps. Long story short I can't find the code for the light mapper.
Obviously if you have more then one coder on a project source control makes total sence. But why use source control when there is only one programmer?

Lesson #3 for old me:
Always use source control. A part from the obvious, history. Having history will make your code a lot cleaner. I found that when making a big change to the code I would just comment out the old code and add the new code in. This gets very messy very fast. I've been using Perforce at home, they have a 2 (maybe 3) user version for free.


Sunday, August 21, 2011

Android IdleTime

Have been messing around with the Android SDK and I decided that I need some better test data. So I made a little exporter for the IdleTime car models.
Nothing too hardcore yet, just drawing a mesh with a texture. No lighting or anything.
Note it looks a lot less aliased on the phones display.


Wednesday, August 17, 2011

IdleTime is building and running

It only took an hour or two to get the code building again. Most of the time  was spent getting the code to compile with Visual C++ 2010 Express. Took another hour or two to track down a problem with the stencil shadows. For sum reason I was calling abs() on sum unsigned int's. On that note this ~10 year old code is scary. Turns out I have learn a thing or two about programming since then.

Lesson #1 for old me:
Use "Asserts". There is not one assert in the whole project. Making debugging a nightmare.

Lesson #2 for old me:
Clean up Warnings. The project had hundreds of warnings. Warnings can help you catch dumb code but you will not see the good ones with all that noise.



Sunday, August 14, 2011

So what are there games anyway?

Our web site is long gone, so you can't download these games any more. But as part of this project I want to get them building again, improve then a bit and put them back online.

The first game we made was Idle Time. After a bit of googleing I found this Flipcode image of the day we submitted...
http://www.flipcode.com/archives/10-28-2002.shtml

The next game we made was X-Fire. (I think some game match making software uses that name now). This was starting to feel like a real game but then I was hired by Bluetongue and I never really touched it since.
http://www.flipcode.com/archives/01-19-2004.shtml