For several years, Clint's company has been working on a game that's undergone several engine and tool changes. And I'll stop you right there- it's not Duke Nukem Forever because this game exists, and has been released.

If you've ever seen or worked in a codebase that has seen significant change, you know that the replaced component is seldom completely exorcised. Little hooks from it remain in some random function that need to stay there or else everything breaks. To give you an idea of some of the changes this game's codebase has seen, have a look at this:

int Level::loadObject( FileHandler* pHandler )
{
   LevelObject* pNewObject = new LevelObject();
   pNewObject->loadFromFile( pHandler->getString() );
  
   // Revision 10/10: support for new design
   pNewObject->newFixUp();
  
   // Revision 01/20: port to xenith engine
   pNewObject->xenFixUp();

   // Revision 02/11: Make work with new format from level tool
   pNewObject->kludgeFixLevelFormat( pHandler );

   //  Revision 7/15: New physics engine port
   pNewObject->hackFixPhysics();
  
   //  Revision 11/04: Added physics editing to level tool
   pNewObject->postHackPhysicsData( pHandler );

   /* SNIP */

    //return GE_SUCCESS;
   return XENITH_SUCCESS;
}

It was more trouble than anyone would've liked, but things were mostly working. Except now there was a new bug that no one could figure out.

The in-game sports cars' physics were all off. Sometimes you'd nudge a curb and take off; other times it was like you were driving a cluster of anvils on a syrup-covered road. Since they were already low on budget, sports cars were removed.

Then the VW Bugs in the game stopped working. Sometimes they'd flicker on and off, sometimes they were invisible for minutes at a time, sometimes they'd collide with other cars, other times the other vehicles would ghost right through them. So they removed the bugs (so to speak).

Then, well, let's just say things weren't going great for the other vehicles, either.

   // // Revision 10/10: Rather than the designers editing all levels
   //  Management sees this as the quickest fix
   //  Revision 01/12: Taking out sports cars
   //  Revision 01/19: No more vw bugs
   //  Revision 01/22: No more vehicles
   if ( pNewObject->getType() != OBJTYPE_TOWER &&
   pNewObject->getType() != OBJTYPE_CAR5 &&
   pNewObject->getType() != OBJTYPE_CAR2 &&
   pNewObject->getEnvType() != ENVTYPE_VEHICLE )
   {
       getEnvironmentObjMgr()->AddObj( pNewObj );
       getPhysicsMgr()->AddBB( pNewObj->getBB() );
       // Revision 7/15:
       //  No need to add proxy here. It's already added
       //  by the time we get here.
       getPhysicsMgr()->RemoveBB( pNewObj->getBB() );
   }

Finally, the pedestrians were causing issues. I can neither confirm nor deny that this was the same situation with SimCopter.

   //  Revision 03/24: Taking out Pedestrians
   if ( pNewObject->getEnvType() == ENVTYPE_PEDESTRIAN )
   {
      getEnvironmentObjMgr()->RemoveObj( pNewObj );
   }

Finally, all was well. And now I can't even imagine what The Legend of Zelda would have been like if they hadn't taken the cars and pedestrians out!

[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!