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!