Archive for May, 2008

Heading to Pixar next week…

I’m giving an internal presentation on 3D animation pipelines and how Pixar could possible improve theirs. Even the biggest studios in the world still struggle with managing all their assets.

“Getting it done by whatever means necessary” is great philosophy when you are small, but after a certain size I’d call it the “disaster waiting to happen due to lack of formal process.”

Honestly, only the EAs and Pixars of the world need complex / formalized pipelines. Temerity Software builds a tool that gives us a glimpse of what many of these large internal studios try to build:

To provide software developers with an analogy, Temerity is like a art build process tool. Only large software development houses need complicated code build systems, just like only the biggest game and animation studios need Temerity-like art build systems.

Sadly, the art build process is poorly understood due to the lack of developers who understand the 2D/3D art packages and industry art workflow (both domain-specific knowledge). Thankfully this is changing as I see many job postings for Pipeline developers.

Add comment May 16th, 2008

Silliness with Euphoria/Endorphin

I’ve been toying with Euphoria/Endorphin since GDC and discovered animators can get very bored and twist simple tech into bizarre nonsensical creations.

*Euphoria/Endorphin is fantastic animation system that works using bio-mechanical knowledge of the human body to properly animate it. It is currently used in GTA IV and upcoming Force Unleashed game.

Add comment May 15th, 2008

TOJam #3 Post-mortem

As a TOJam vet and past organizer (TOJam 1 & 2), I’d have to say each year has been a completely different experience: New location, new jammers, new games. Each year has progressively gotten better in terms of size, quality and overall experience.

This year, I actually enjoyed myself and at no point felt stressed or guilty that I wasn’t helping out with the organization of the event. In short, this was my favourite TOJam!

What went right:

  1. I finished my game!
  2. Finishing a game in three day is a big accomplishment if you’ve dared to try it. In last two jams I completed “rather half-assed so-called games” that I would probably not play ever again and I don’t recommend you do either. For one, the first jam game require DK Konga controllers and a GameCube USB adapters (good luck!) and the second require a microphone and the Microsoft Speech SDK installed OR Microsoft Office… that eliminated 50% of the world!

  3. I pre-visualized how the music-to-waveform tech would work beforehand.
  4. Cowgirl and Gospelboy relied on a weird piece of technology played a MP3 file and generated 2D collision geometry on the fly. If I had tried to implement this in 3 days I would have ran out of time. Instead I built a sample app a few weeks ago to test out whether FMOD could dynamically generate a 2D waveform that looked reasonable. I did not write any music to physics code until the start of the game as I felt like that was cheating.

    I also had experience with Box2D, the physics engine used, so all technology was well understood (or so I thought).

  5. I didn’t use a 3D engine to make a 2D game!
  6. Last year, I used OGRE to build a 2D game and that was a mistake. OGRE is fine 3D graphics engine, but is too complicated for simple tasks like drawing sprites and rotating them! I choose IndieLib because it was the easiest/cleanest 2D game engine I’ve seen in a long time. My second choice would have been PlayFirst or PopCap, but those game engines are overloaded and rather complex.

  7. The game is actually fun!
  8. My first two games were about experimentation and toying with novel technology like Konga controllers and microphones. This year, I decided upfront that this jam had to have all technology developed and understood. I swore to myself that I’d spend all Sunday gameplay tuning - which I did.

    I found as people played the game Sunday night (as part of the open house gaming session), I slowly refined it to a point where by 11:00pm it was becoming addictive. As I’ve mentioned in another post, C & G was exactly the game I wanted to make in the first game jam, but I did not have the physics background then.

What went wrong:

  1. IndieLib was missing features (or had features I thought were supported)
  2. I didn’t realize IndieLib did not support joysticks nor TrueType fonts until the second day of the jam - I scrambled to include OIS support and made due with TWO fonts (big and small).

    I also did not spend enough time with IndieLib before the jam and had to learn how it’s co-ordinate system worked when zoomed out and other quirks like issuing BeginScene(), EndScene(), RenderEntities2d calls.

  3. The code was a disaster by Saturday night.
  4. I was forced to refactor the codebase (took 3 hours) and add a state machine and migrate everything into classes because adding menus would have been impossible otherwise. The code was a mess of global variables due to how I just dove into making the game.

  5. High-speed 2D physics creates major problems
  6. There are some annoying bugs in the game and most of them are related to the wave moving at 150 units a second to give the player a sense of speed, but also causes the infamous “tunneling” problem.

    Early on, I decided to remove constraining the max and min height of the wave and let it grow as high as possible to give a sense of worldly height without resorting shifting the wave up/down (causes physics problems).

    The camera tries to keep the surfer in view, by zooming in and out and other tricks, but due to the high speed of action the player can slide out of view for a short period a time.

  7. Some chosen songs were just not fun to play
  8. The best songs to play are the ones with plenty of variation. Many radio-friendly pop songs keep an even keel with minor variations here and there, but not enough to keep interest for 4 minutes. Jill Barber’s “When I’m making love to you” is a fantastic song to surf to. It ebbs and flows like a bittersweet love song.

  9. I did not provide clear art direction to the graphics floaters (artist)
  10. The main characters needed to be re-designed THREE times during the jam due to my poor art direction. I told the artists to make “Stickin’ around” like characters which they did, but I didn’t realize that meant the clean and straight lines. I was thinking more like “Stickfigure theatre” with more squiggly animated lines. Not the case.

1 comment May 13th, 2008

GTA IV (X360): Anti-review

GTA IV has been universally acclaimed so I’m not about to stroke it’s ego by mentioning all the good things in it. This review is about the all POORLY IMPLEMENTED ASPECTS of GTA IV - my complaint list.

For a $100 million dollar project, it should be held to the highest standards of commercial art. So compared to an award winning commercial film, GTA IV’s story is about as deep as water in my toilet. The game is full of stock characters, on the nose dialogue, etc. It’s okay, just like the film “Dungeons & Dragons” was okay.

For the record, I loved the first GTA III… it deserved all the accolades it won that year even with all its warts because it worked so well gameplay-wise.

Now for the GTA IV complaint list:

Camera system

  • Disorienting due to its “smart behaviors” during fast actions sequences.
  • Gets stuck in small areas and tends to zoom in and out unexpectedly.
  • Has automatic behaviors when driving that frustrate me so I try to keep it behind the vehicle at all times.
  • When driving is too low to the ground for me to see ahead (especially with the ambulence)
  • Generally bad, but you “learn” to make it behave.

Some videos on the camera problem:

http://www.youtube.com/watch?v=iRuaAlFN4y4

Walking

  • Press A to run? Analog stick please!
  • Constant glitches with automated actions like getting into a car and going to trigger point.
  • I’m always bumping/nicking into people on the street who just insult me. Walking is the least enjoyable part of GTA IV.

Combat/Shooting

  • Hand to hand is stupid. Why three buttons? I mash a single buttons anyways.
  • Gun targeting picks things behind a wall or dying or something I have no interest in.
  • Camera zooms in and out when targeting causing some disorientation.
  • Honestly, I hate FPSes and GTA IVs targeting system feels like a bad FPS. Most gun battles are set up that way (shooting gallery) and are not very free form.

Driving

  • Soft + squirrely (problem with controls and physics)
  • All cars drift WAY TOO MUCH causing the driving missions to be frustrating!!!
  • Have to drive slow to avoid the vehicles from drifting.
  • Player must always map read to navigate city.
  • Map zooms in and out causing “map-reading distance estimation” to be wrong
  • Cars feel too similar. Yeah the trucks are slower and less responsive than the SueprGT, but not
  • Cars are weightless paper maiche toys when hit.
  • Cars get stuck in the highway dividers (that just fit) too easily.
  • I don’t like be ejected from the window when I nick the smallest collision object.
  • Too many small (pointless) corners and interferring props (lamp posts, mailboxes, etc.)
  • The motorcycles are HORRIBLE. Instead of 600-1000cc bikes they feel like 125cc GP… For the record, I’ve ridden both kinds in real life.
  • If you hit “Y” while in the helicopter you will be “ejected”… this is stupid because you can unintentially hit the button looking for the shoot button (which probably should be LB and not X or was it A?).

Police

  • Too aggressive overall.
  • They arrive immediately with helicopters and guns which is a bit unfair/unrealistic.
  • There are half a dozen cops (in cars/helis) sometimes yet you can out run them ALL if you just leave the tiny police search radius. I’d have then arrive slower, but force you to out run them for longer and farther.
  • Too sensitive. Sometimes a gun shot will trigger cops. Sometimes it won’t. Sometimes hitting a cop car will trigger a wanted level. Sometimes it won’t.
  • Inconsistent is how best to describe the police in GTA IV.
  • The police are too good at shooting. I had full health and armour and still died (I was switching weapons while standing next to my car).
  • City

    • Full of people and buildings, but NOTHING to do.
    • Darts + bowling + pool are fun ONCE.
    • Drinking + driving is fun ONCE.
    • Comedy clubs are fun ONCE.
    • Sex with hookers is fun ONCE. In GTA III it was always fun… nobody spoke or had some stupid comment to make.

    Visuals

    • It’s too dark! Hard to see in alleyways and at night.
    • For a next-gen game, it almost looks PS2/Xbox like. Lots of popping artifacts and shadow aliasing.
    • Shadow aliasing is awful.
    • Texture aliasing is awful.
    • Reflections on the building windows are PS2 awful.
    • Draw distance is tiny.

    Mobile phone

    • I can never remember the cell phone trigger - up or down? (habit)
    • I always use the analog stick first before the d-pad when the phone appears (habit)
    • It took a while before triggering the phone was almost natural - which means it was never a good design in the first place

    Missions

    • I spent more time map reading/following than actual work like shooting.
    • GTA IV is about 70% driving (which sucks) and 15% action and 10% cut-scenes.

    Story

    • While Niko and Roman are great, over half the secondary characters are merely over-the-top stereotypes.
    • Over half the dialogue is too “on the nose” and too often they merely reveal information (no subtext).
    • When driving + map reading, it’s kinda heard also to listen to conversation. It’s a great idea to use conversations to reveal the story of the game, but it’s hard to process the information while playing the game.

    Relationships

    • Dating Michelle is fun for the first 3-4 times (same with screwing her).
    • Hanging with Little Jacob + Roman is nice change and fun for the first bit
    • Strip club is funny/sexy for the first time. Cops arrived immediately after I unintentionally stepped onto the stage.
    • Roman died swimming for no particular reason or I accidently hit him as I tried climbing out of the water. Made ZERO sense.

    Certain things aren’t explained too well or at all in the game when you begin:

    • i.e why going to the airport immediately gives you a 5-star rating
    • i.e why going to the closed bridge immediately gives you a 5-star rating
    • i.e why swimming out too far immediately gives you a 5-star rating

    Add comment May 13th, 2008

    Weird quirks with the Visual C++ 2008 compiler…

    1) If you have a bad character at top of file.. i.e Usually due to a typo / random key press

    f/*****************************************************************************************
    /* My comment
    /*****************************************************************************************/

    You will get this error:

    c:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) : error C2144: syntax error : ‘__w64 unsigned int’ should be preceded by ‘;’
    c:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

    2) If you don’t include when using STL strings in STL data structures (usually I assume has been included somewhere in the libraries I use)… you get an assortment of errors:

    error C2678: binary ‘!=’ : no operator found which takes a left-hand operand of type ’std::string’ (or there is no acceptable conversion) could be ‘built-in C++ operator!=(const char [1], const char [1])’ while trying to match the argument list ‘(std::string, const char [1])’

    OR

    C:\Program Files\Microsoft Visual Studio 9.0\VC\include\functional(143) : error C2784: ‘bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)’ : could not deduce template argument for ‘const std::_Tree<_Traits> &’ from ‘const std::string’
    1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(1466) : see declaration of ’std::operator <'
    1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\functional(142) : while compiling class template member function ‘bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const’
    1> with
    1> [
    1> _Ty=std::string
    1> ]
    1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\map(68) : see reference to class template instantiation ’std::less<_Ty>‘ being compiled
    1> with
    1> [
    1> _Ty=std::string
    1> ]
    1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(22) : see reference to class template instantiation ’std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,_Mfl>‘ being compiled
    1> with
    1> [
    1> _Kty=std::string,
    1> _Ty=GameState *,
    1> _Pr=std::less,
    1> _Alloc=std::allocator>,
    1> _Mfl=false
    1> ]
    1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(63) : see reference to class template instantiation ’std::_Tree_nod<_Traits>‘ being compiled
    1> with
    1> [
    1> _Traits=std::_Tmap_traits,std::allocator>,false>
    1> ]
    1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(89) : see reference to class template instantiation ’std::_Tree_ptr<_Traits>‘ being compiled
    1> with
    1> [
    1> _Traits=std::_Tmap_traits,std::allocator>,false>
    1> ]
    1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(107) : see reference to class template instantiation ’std::_Tree_val<_Traits>‘ being compiled
    1> with
    1> [
    1> _Traits=std::_Tmap_traits,std::allocator>,false>
    1> ]
    1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\map(78) : see reference to class template instantiation ’std::_Tree<_Traits>‘ being compiled
    1> with
    1> [
    1> _Traits=std::_Tmap_traits,std::allocator>,false>
    1> ]
    1> c:\documents and settings\hp_administrator\desktop\indielib_sdk\StateManager.h(52) : see reference to class template instantiation ’std::map<_Kty,_Ty,_Pr>‘ being compiled
    1> with
    1> [
    1> _Kty=std::string,
    1> _Ty=GameState *,
    1> _Pr=std::less
    1> ]

    Which are unhelpful in telling you about your mistake.

    Add comment May 13th, 2008

    My TOJam #3 game: Cowgirl and Gospelboy

    Core idea: Line rider meets Audiosurf in the style of Vib Ribbon. It’s a game I’ve always wanted to make since the first jam, but never had the physics (implementation) understanding until the past year:

    A public release will be forthcoming around the same time as the other TOJam #3 games

    Technology: IndieLib, Box2D, FMOD, Visual Studio C++ 2008 Express Edition

    Add comment May 12th, 2008

    Nvidia releases “The Cg Tutorial” book for free online

    A relatively old books (circa 2003) but very useful in learning the basics of high level shading languages for GPUs.

    Add comment May 8th, 2008

    The Supers - project announcement!

    Work is about to fully commence on “The Supers” - an idea that has been incubating since Vortex 2007 back in July.

    The Supers is “Shadow of the Colossus meets superheroes” - big fricking boss battles in a futuristic city!

    • Use your X-ray vision to see robot weakspot then attack them.
    • Climb onto and INSIDE robots.
    • Multiple solutions to defeating a robot.
    • Each superhero has different superpowers that vary how easy/hard it will be to defeat a robot.



    I’ve also entered it into the Intel Game Demo 2008 contest to allow others to view the ongoing progress. I also plan to use this blog to provide bi-weekly updates.

    Concepts: Chris Lam
    Models: Peter Vlachodimitris and Mike Winder

    Copyrights owned by Casually Hardcore Games Inc.

    P.S If anybody has further questions about the project, email me at support @ (– this site — )

    2 comments May 7th, 2008

    GameCamp 2 Toronto - SUCCESS!

    Last weekend, the second GameCamp was held at the University of Toronto featuring speakers from the local game development community - a mix of indies and mainstream developers.

    I love Andy Smith’s Space Race presentation. The game is so offbeat, it needs to be polished + released.

    I spoke about my upcoming game currently in the prototype stage. I’ll make a official game announcement tomorrow.

    Add comment May 6th, 2008

    Final push for TOjam 3!

    TOJam 3 has 103 registrants! But… 150 would be very very nice.

    The gist of the 3-day event is you MAKE a game using whatever tech you want from scratch (okay we allow libraries, etc. but no gameplay logic). It’s fun. It’s stressful. The results are hilarious:

    Add comment May 4th, 2008

    Next Posts Previous Posts


    Calendar

    May 2008
    S M T W T F S
    « Apr   Jun »
     123
    45678910
    11121314151617
    18192021222324
    25262728293031

    Posts by Month

    Posts by Category