• globlin (unregistered)

    The game was Desert Bus.

  • (cs) in reply to UKKay
    UKKay:
    typedef mc:
    Plenty of men drive MX5s. It's probably the closest you can come to driving a track car for under $30k. It's a great car to go trolling for mouth breathing Mustang drivers.
    Maybe in the US, where even the likes of the Mustang are ridiculously heavy and have crappy handling.

    In the UK you can pick up hot hatches that will outperform both your Mustangs and Miatas (MX-5 dammit!) for under £15k, so the men drive them and leave the pretty cars to the women.

    </femaleLotusEliseDriver>

    Save your miata, I want a MR2 spyder - it's a baby elise that doesn't cost 45k.

  • (cs) in reply to Mr^B
    Mr^B:

    Do Mazda still do the "Free curling tongs" offer on all new MX-5s? A pink Ferrari may well be a Ferrari, go like stink, handle like it's on rails...but over and above everything else, it's still PINK and if you won one the first thing you'd do is re-spray it to a proper colour.

    No, I'd get a smartass license plate and try not to wreck it learning how to drive fast.

  • (cs) in reply to ruijoel
    ruijoel:
    I was thinking of Daikatana. It's set on different times, some in the future, so it could have cars but didn't need them. In addition, its development spanned several years, engines, and development teams. If it's not this WTF, it's a very good WTF on its own.
    I think Daikatana was a WTF by itself, beginning with the "SUCK IT DOWN/John Romero is going to make you his bitch" advertising stunt.
  • neveralull (unregistered)

    if ( pNewObject->getType() != OBJTYPE_TOWER && pNewObject->getType() != OBJTYPE_CAR5 && pNewObject->getType() != OBJTYPE_CAR2 && pNewObject->getEnvType() != ENVTYPE_VEHICLE )

    When you see code doing different kinds of processing for different "types" of class objects, consider using sub-classes - that's what object-oriented coding is all about.

  • JimBob (unregistered) in reply to mrprogguy
    mrprogguy:
    - No checking to see if 'new LevelObject()' returned a value? *UNSAFE* - Pointer dereferencing instead of passing object references? *SLOW* - I see some refactoring opportunities in there, but somehow that never gets done.

    Glad I don't work there. I'd be tanning hides all over the place.

    If you run out of memory, the result of a null pointer reference will be the least of your problems. As long as your memory manager has the required debugging tools, it's redundant to put a null check on every allocation - at least for non-critical/non-real-time systems.
  • (cs) in reply to Keith
    Keith:
    Link: Alright guys, Ganondorf is at it again. Lets jump in my Miata.

    Navi: Dude, there's only room for one passenger in this P.O.S. How are we going to seat everyone when we rescue Princess Zelda?

    Link: You're a fairy - you can go in the glove compartment.

    Link, mah boy! Bugs like this is what all programmers strive for!

  • Robert') (unregistered)

    I remember reading about Zelda OoT in Nintendo Power before it was released. They discussed the idea of having Link drive a Lincoln instead of a horse. Man, that would have been sweet...

    And WTF @ banning TopCod3r, his posts were more amusing than the articles.

  • DrGuz (unregistered) in reply to SomeCoder
    SomeCoder:
    I would be curious to know how many of this group has actually tried their hand at game programming.
    At least two professional, full-time game coders from this office are daily readers.

    I've attempted full-blown cleanup efforts enough times to recognize when it's smarter to make "unclean" patches (less untested code, less delay).

    History comments of importance can be great timesavers over searching the revision history, and better guideposts for newcomers, though it's good to remove what becomes completely obsolete. They can also deflect ping-pong edits ("hey, why are VWs allowed here but not sports cars? clearly an oversight, I'll just fix that up...")

    JRH:
    I'd gladly wait 1 or 2 years longer per game if it meant we get something greater than or equal to the designers' original concept for the game.
    Funding development for 4 years is very expensive, the odds of reaping proportional profit gains are very low. It also risks looking old, with artwork made two to three years earlier than other games matching its release date. (Game art is more than just painting, which is timeless but for fads of style -- consider surface detail, lighting, and animation fluidity, all of which reap incremental yearly benefits from technological improvements and are not quickly re-done once made.)

    It's nice to see Flash games expanding the demographics, hopefully the wider potential profit base will encourage more studios to fund smaller-scoped projects with tighter focus. Passion in Art alone won't pay the mortgage.

  • rast (unregistered)

    One more vote for keeping TopCod3r. If anyone is going to be banned, it should be those whom he hooks.

  • Max Dyckhoff (unregistered) in reply to Worf
    Worf:
    Game code is written to be fast to release, not efficient, nor maintainable - the faster you can release a game, the faster you make money on it. Take too long, and your game can be worthless.

    The only interesting thing is why we don't see more game-related WTFs here - a typical game will have enough to post for years... but I guess game devs are easily scared (and highly replacable), and always under time crunch, so the luxury of posting isn't available.

    That isn't exclusively true. I work at a major independent game developer (the title we released last year grossed a few hundred million dollars, from that and my name you might be able to identify what it is) and we are extremely principled about the code that we write. We realise that wasting time rewriting code over and over is worthless, and instead we concentrate on making a solid code base which we can build upon time and time again, as we have proven.

    The times, they are changing, of this I am sure. Huge monoliths like EA and (to a lesser extent) Ubisoft certainly have such bad coding practices, but there is a growing sense of responsibility among game engineers for the products we are writing.

    As for not releasing any WTFs; well I would love to but honestly at my current place of employment there isn't anything very exciting, and if there is it is so engrossed in the subtleties of the engine that it would take a dozen pages to explain it fully. I did somehow manage to leave a "static" identifier before a locally scoped variable a couple of weeks ago; that was pretty embarrassing but our test team found it pretty quickly. :)

    And yes, there is probably some NDA restriction, too, which I wouldn't want to break. I'm certainly not easily replaced, but I love my job and don't want to jeopardise it. :)

    Max

  • Mark (unregistered) in reply to Steve
    Steve:
    Not wtf:
    The real wtf is Alex banned top coder because he was too funny and stealing the spotlight. The next wtf is this comment will be deleted shortly.
    I used to really enjoy TopCod3r's post's but I must admit that now they are really starting to piss me off. Whilst he is often funny and inventive, his baiting almost always derails the entire comments section. Often there are some really good and interesting points made in the comments but as soon as TopCod3r posts the whole thing just degenerates. Some people try to reply seriously, others start breaking out the "you've been trolled" posts and then there are a handful of people who are like "oh my god I LOVE you TopCod3r, have my babies!" which is also just pathetic.

    If Alex really has 'moderated' TopCod3r then I don't see it as a WTF - far from it. Maybe it will convince TopCod3r that he doesn't need to troll every single article on TDWTF.

    TRWTF is that TopCod3r hasnt even posted in this article and yet still half the post is devoted to him.

  • adamazing (unregistered) in reply to Mark
    Mark:
    TRWTF is that TopCod3r hasnt even posted in this article and yet still half the post is devoted to him.

    ^This. A 1000 times this. Even in articles where TopCod3r did post, there wasn't this much off-topic back and forth.

    I'm just interested to see how many more off-topic TopCod3r related posts will go by before someone else acknowledges that Max Dyckhoff of Bungie just posted.

    Unless Max wrote TopCod3r's AI, everything's interconnected and it's turtles all the way down of course...

  • · (unregistered) in reply to Mister Fritters
    Mister Fritters:
    The "This" adjective is representing the game described by TDWTF, not Duke Nukem Forever. Do I get a cookie?
    Nope, but maybe you would have if you knew what "adjective" meant.
  • · (unregistered) in reply to ·
    ·:
    Nope...
    Already found the mistake. Sorry.
  • katastrofa (unregistered) in reply to shMerker
    shMerker:
    I don't know how this happens but I can tell you that it does happen. I worked in QA on a game that, except for the specific features cut, could've been the one in this article. It was a fairly high-budget, high-profile title too.

    It was a big disappointment to the test team when those features got cut too, since we felt it really hurt what made the game fun in the first place. I remember getting a pep talk from a senior tester saying that this happens on every game, that designs are always more ambitious than what you can actually ship and that stuff always gets cut at the last minute and that you have to just keep plugging away even though all you see any more is the bugs and you're no longer excited about the project you're working on.

    It was the most depressing pep talk I've ever heard.

    Well... it's not the coders who are to enjoy the game, but the gamers :P Who said that bringing fun to other people must be fun, not hard boring work?

  • katastrofa (unregistered) in reply to Zach Bora
    Zach Bora:
    I have no idea what date stuff like 01/11 is.

    But you probably know what "9/11" is ;-)

  • katastrofa (unregistered) in reply to SomeCoder
    SomeCoder:
    typedef mc:
    mrprogguy:
    - Pointer dereferencing instead of passing object references? *SLOW*

    How do you think object references are implemented?

    Agreed, object references are essentially syntactic sugar for pointers. They just make it so you don't have to use the -> operator, nor deal with any pointer semantics but it's still a pointer.

    Well, not exactly: if you declare your argument as "int * ptrToSth", you are GUARANTEED to get a pointer. Now, if you take an "int & refToSth", you may or may not, depending on how the function treats the argument and how compiler decides to optimize the code.

  • (cs)

    So that's the story of Big Rigs. This explains much...

  • TopCod3r (unregistered) in reply to Ie
    Ie:
    ButtomCod3r:
    Thus, it's faster because the compiler can perform optimizations on a reference that it wouldn't be sure about if it was a plain pointer.

    Welcome back, TopCod3r! Big fan big fan.

    No! I'm TopCod3cus!

  • Chainsaw (unregistered) in reply to katastrofa
    katastrofa:
    But you probably know what "9/11" is ;-)
    According to my calculator, it's 0,818181818181818

    According do the date format in my country: November the 9:th.

  • (cs) in reply to Code Dependent
    Code Dependent:
    // Revision 01/12: Taking out sports cars // Revision 01/19: No more vw bugs // Revision 01/22: No more vehicles
    Mechanic: "The trouble is in your carburetor." Owner: "So, did you fix it?" Mechanic: "Yes. We took the carburetor out."
    I think Groucho and Chico said it best:

    Wagstaff: Oh, you have got a chauffeur? Baravelli: Yeah. Wagstaff: What kind of car have you got? Baravelli: I no gotta car. I just gotta chauffeur. Wagstaff: Well, maybe I'm crazy, but when you have a chauffeur, aren't you supposed to have a car? Baravelli: Well, I had one, but you see, it cost too much money to keep a car and a chauffeur, so I sold the car. Wagstaff: Well, that shows you how little I know. I would have kept the car and sold the chauffeur. Baravelli: That'sa no good. I gotta have chauffeur to take me to work in the morning. Wagstaff: Well, if you've got no car, how can he take you to work? Baravelli: He don't have to take me to work. I no gotta job.

  • (cs) in reply to Code Dependent
    Code Dependent:
    Keith:
    Link: Alright guys, Ganondorf is at it again. Lets jump in my Miata.

    Navi: Dude, there's only room for one passenger in this P.O.S. How are we going to seat everyone when we rescue Princess Zelda?

    You guys just stay put. She can ride with me.

    [image]
    ROFL yeh, I'll just bet she can, you cool studly dude, you!
  • (cs) in reply to JimBob
    JimBob:
    gabba:
    Lots of rather mundane WTFs here.

    Why does anybody document the file history inside the source code? Use source control history.

    you'd be surprised how useful that can be, particularly when someone is looking at a large code base and says "why the hell did they do that?" Perhaps when you work on a project more than a couple thousand lines of code, and more than a year old, you'll understand.

    You need to use better tools then. Revision history is already there. No reason to clutter the source code, And yeah I worked on large source code... Probably had a couple thousand files

  • (cs) in reply to DaveK
    DaveK:
    ROFL yeh, I'll just bet she can, you cool studly dude, you!
    Hang in there, Dave. One day you'll get a chick too, and then you won't have to express your wanking frustration in this public manner.
  • Jeff (unregistered) in reply to SoonerMatt

    That's not a feature, that's a bug! :-)

  • Rowan (unregistered) in reply to MechanicJay

    MX5's (as they're called here) are brilliant cars. I'll talk serious handling potential over straight line gas guzzling power any day.

    Don't worry, the original poster probably drives a hummer.

    "Looks like a fish, moves like a fish, steers like a cow." (from The Restaurant at the End of the Universe)

  • Jim mason (unregistered)

    OMG Duke Nujem ROCKS! I just got the Hi-Res pack for Duke Nukem 3D and its a blast on the modern PC.

    Jiff www.privacy-center.ru.tc

  • (cs) in reply to Zach Bora
    Zach Bora:
    The real WTF is that they use dates in 2 number formats instead of including day, month and year. I have no idea what date stuff like 01/11 is. If it's day/month, then you`re missing the year which is a real WTF because softwares live over years.

    At my company, we use format YYYY-MM-DD HH:mm.

    That date format sucks. It is so easily confused with YYYY-DD-MM.

  • notme (unregistered) in reply to ahnfelt
    ahnfelt:
    Zach Bora:
    At my company, we use format YYYY-MM-DD HH:mm.

    That date format sucks. It is so easily confused with YYYY-DD-MM.

    Good thing I followed that link before writing a heated response...

  • Kuba (unregistered) in reply to mrprogguy
    mrprogguy:
    - No checking to see if 'new LevelObject()' returned a value? *UNSAFE*
    Probably if it returns zero, the game would better crash as there is next to nothing you can do on a modern non-realtime OS when a presumedly small object allocation fails.
    mrprogguy:
    - Pointer dereferencing instead of passing object references? *SLOW*
    Last time I checked, it'd generate exactly same assembly in popular C++ compilers, as long as said reference was passed as an argument to a function.

    You can even do this:

    void test(void) {
    int * p = (int*)0;
    test2(*p);
    }
    void test2(int & i) {
    if (! &i) {
    cerr << "Shit happens.\n";
    }
    }
    Of course the standard says that dereferncing an invalid pointer has untold consequences, the code above I presume will work when compiled with almost any C++ compiler, on any sensible platform.

    Cheers!

  • Anon (unregistered) in reply to PSWorx
    PSWorx:
    So that's the story of Big Rigs. This explains much...

    Management: Damnit, now the trucks are colliding with the buildings funny! What's the easiest solution? Programmer: Turn off collision detection? Management: Make it so.

    [later]

    Management: Oh for heaven's sake, have you got the physics right for climbing hills yet? What's the quickest way to fix it? Programmer: We could ignore the angle completely I guess, but... Management: Do it!

    [even later]

    Management: Oh what now?! Why is the AI being stupid? Isn't fixed yet? Programmer: We- Management: Quickest solution? Programmer: Disable the AI... Management: Brilliant!

    For anyone that hasn't seen reviews of Big Rigs, yes, you really can drive through the buildings, up a vertical cliff, and race against opponents that don't move.

  • Tom (unregistered)

    PS: Duke Nukem Forever hasn't been released yet. There was some bogus news about it on Slashdot but that was a misunderstanding, they actually released DN 3D for some other platform than the PC. Duke Nukem Forever will be relased "when it's done" - quoting 3D Realms.

  • Anonymous OG Mac Gamer (unregistered)

    Reminds me of Marathon--once the source code was released, we got to look at shell.c (the file with the implementation of main()). It turned out Alex Seropian had used revisions of the same file in Marathon 2, Marathon, Pathways into Darkness, Minotaur, Operation Desert Storm, and all the way back to Gnop (and probably forward into Myth, Myth 2, Oni, and early versions of Halo, for that matter). We were rather amused.

  • Uli (unregistered) in reply to rusty
    rusty:
    And regarding the whole hungarian notation thing.

    When you have to worry about cache constraints, member alignment and a whole load of other things, then just a smattering of hungarian can be a god send.

    Can you please explain how a variable naming convention affects your cache constraints?!?

    Unless the IDE changes the variable names automatically to reflect the actual type I cannot see any benefit - only drawbacks. Then again I never had to use it.

  • grammernarzee (unregistered)

    Games programming - Yawn. MX5 vs American mouth-breathers - Yawn. Bring back TopCod3r.

  • (cs) in reply to Code Dependent
    Code Dependent:
    Keith:
    Link: Alright guys, Ganondorf is at it again. Lets jump in my Miata.

    Navi: Dude, there's only room for one passenger in this P.O.S. How are we going to seat everyone when we rescue Princess Zelda?

    You guys just stay put. She can ride with me.

    [image]

    Is it just me or does he look like Patrick Stewart with a goatee?

  • rusty (unregistered) in reply to Uli
    Uli:
    rusty:
    And regarding the whole hungarian notation thing.

    When you have to worry about cache constraints, member alignment and a whole load of other things, then just a smattering of hungarian can be a god send.

    Can you please explain how a variable naming convention affects your cache constraints?!?

    Unless the IDE changes the variable names automatically to reflect the actual type I cannot see any benefit - only drawbacks. Then again I never had to use it.

    A good example is the use of prefixing 'l' to local variables (this includes arguments) and 'm' to member vars.

    On the PS2, cache performance was absolutley critical as the cache refresh was pretty slow. You could do something like 33 vector multiplies in the time it took to refresh the read cache. Just by simple prefixing the member and local variables, you could at a glance, see if code was constantly fetching / writing member variables of a class and thus, thrashing the cache in a given circumstance.

    And if you think hungarian notation just means "encoding of type" then you've actually missed what hungarian notation was meant to do. And you've also been using it wrong, if that's what you've done in the past.

    Hungarian notation was meant a short-hand way of expressing the intent of the variable for example, consider the follwing;

    CQuaternion mlOrient; CQuaternion mwOrient;

    Both are quaternions, so both represent rotations. But the context for each is different. One specfies the rotation in local space, and the other in world space. You could also call them something like mOrientLocal and mOrientWorld but variable names must not also be clear, but also the must be as brief as possible.

    It's not uncommon for lines of code to get out of hand when dealing with 3d operations, so the 'l' and 'w' prefix to my mind, is a valid thing to use. This is especially true when you don't want to mix world and local operations in some circumstances. And the hungarian helps with that while keeping the lines of code at a readable size.

    And what if I change from a Quaternion to a 3x3 basis, so this is becomes;

    CMatrix3 mlOrient; CMatrix3 mwOrient;

    The notation is still valid, beause I'm not being simple and simply enocding the type. I've encoded the CONTEXT of the variable, so it's still valid.

    Anyhow....that's my take on it. You may not agree with me, but until you've done my job for as long as I have done it, then you can tell me that I'm right or wrong.

  • Ggreg (unregistered) in reply to rusty

    Hey, surely this rumour that topcod3r has been banned can't be true!

    I'm an addict and I need my fix, please ...

  • (cs) in reply to Worf
    Worf:
    Game code is written to be fast to release, not efficient, nor maintainable - the faster you can release a game, the faster you make money on it.
    Thus all games should be written in VB!!
  • skztr (unregistered) in reply to rusty

    Correct me here, but wouldn't it be preferable to make CQuaternionLocal and CQuaternionWorld classes, so that you could actually enforce the local vs world "these shouldn't interact" policies?

  • Bob (unregistered)

    Well, I think we all learnt something today. TopCod3r goes to all that trouble to derail the comments with his trolling yet all it actually takes is for someone to say "that's a GIRL'S car!!!". Game over, comments derailed.

  • rusty (unregistered) in reply to skztr
    skztr:
    Correct me here, but wouldn't it be preferable to make CQuaternionLocal and CQuaternionWorld classes, so that you could actually enforce the local vs world "these shouldn't interact" policies?

    I remember an intern suggesting that to me once, but here's the trick; sometimes I may actually want to allow world -> local rotation interactions.

    After all, how would you transform a local rotation into the world frame? The sames goes for vectors/points too. You could, I suppose, have an "allow mixing" flag or state, but I think that would be far too much effort to use in practice.

  • (cs) in reply to snoofle
    snoofle:
    tezoatlipoca:
    I think it was more "I worked hard, earned this, won't abuse it, but I could if I wanted to." kinda thing (despite me being technically a poser for that day.)
    I think that the attitude stems from: I could and you know it, so I don't need to.
    Also known as: I bought or more likely leased/rented this car for its badass/player image and don't actually know how to drive it.

    Don't even try to deny it - both of these quotes sound defensive and one even uses the word "you". Who cares about "you"? If you don't actually love to drive then don't waste your money on a fast car, get yourself a Civic or a Corolla like the rest of the granny Sunday drivers. Maybe a Camry if you really feel like making a statement.

  • sirGustav (unregistered) in reply to rusty
    rusty:
    After all, how would you transform a local rotation into the world frame? The sames goes for vectors/points too. You could, I suppose, have an "allow mixing" flag or state, but I think that would be far too much effort to use in practice.
    I use conversion functions.
  • Zach Bora (unregistered) in reply to notme
    notme:
    ahnfelt:
    Zach Bora:
    At my company, we use format YYYY-MM-DD HH:mm.

    That date format sucks. It is so easily confused with YYYY-DD-MM.

    Good thing I followed that link before writing a heated response...

    Except it's dashes instead of slashes.

  • (cs) in reply to Code Dependent

    Wow, an argument between a bunch of random internet web board denizens about who's got the biggest dick or had the most girlfriends. Yeh, that'll really be productive, worthwhile, and well-grounded in fact!

    Code Dependent:
    DaveK:
    ROFL yeh, I'll just bet she can, you cool studly dude, you!
    Hang in there, Dave. One day you'll get a chick too, and then you won't have to express your wanking frustration in this public manner.
    Maybe you just don't see attempting to pull a whoa-i'm-so-macho number over some little cartoon princess in an anime game as inherently mock-worthy, maybe that sort of claim wins your envy and/or respect, but to me, it's pretty silly and deserves a silly response. YMMV, BCSD, okthxbye and all that.
  • (cs) in reply to rusty
    rusty:
    And if you think hungarian notation just means "encoding of type" then you've actually missed what hungarian notation was meant to do. And you've also been using it wrong, if that's what you've done in the past.

    Hungarian notation was meant a short-hand way of expressing the intent of the variable [ ... ]

    Yep. And then Microsoft adopted it, and got the whole concept massively wrong, and because of their unhealthy monopoly/monoculture status, polluted the entire industry's knowledge pool with this misbegotten interpretation, until now everyone thinks it was always nothing more than an in-band, redundant and inconsistent way of expressing typing metadata about a variable.

    Just one more example of how Microsoft's incompetence and greed do real measurable and genuine damage to the entire industry and to the sum total of human knowledge / cultural heritage of the whole human race... it was a useful concept once, now it's been broken. A pox on the bunch of them.

  • Jenny Peters (unregistered)

    DUKE NUKEM ROCKS!!!!!!!!!!!!!!!!

    Jiff www.privacy.es.tc

  • pong (unregistered)

    I know what game it was!

    Duke Nukem Forever 2!

Leave a comment on “A Completely Different Game”

Log In or post as a guest

Replying to comment #:

« Return to Article