• ilinamorato@lemmy.world
    link
    fedilink
    arrow-up
    96
    ·
    1 day ago

    First Dev: “Oof. Uh…hm. Ok. So…no, give me a second, I’m thinking…So, the player character already has an attribute for a familiar that we’re not using, since we removed familiars from the game. We could use that as a scarf, I think. One of the options was a tiger that walked next to the character, we could translate that up and around to the neck. Animation would be tough…could we come up with some reason why the scarf sticks to his shirt? …no? How about a reason why it’s always fluttering behind him? …ok. So yeah, that should work…I think. We’re a month out from code freeze, so we won’t be able to do much with it other than put it in.”

    After launch

    Project Manager: “Hey, people on Twitch have discovered that some of the player’s clothes disappear randomly if you lose to the lich in level six…?”

    Second Dev: “Weird. I’ll take a look…”

    Second Dev, in Slack: “Hey, does anyone know why all of the neck-slot customization items are coded as cats? Turns out the Dog Lich still deletes cat familiars if you lose to it.”

    • sunbeam60@feddit.uk
      link
      fedilink
      arrow-up
      29
      ·
      23 hours ago

      Been there, so many times.

      Late in Perfect Dark Zero’s development (a complete shitshow to get launched for X360 day 1) we added something called “kill planes”, behind which all entities would get nuked. The aim was that you would physically move through the world and eventually get to “no turning back” points, behind which we could remove all entities to save some cycles.

      Turns out there were a large amount of places that assumed that once they had a pointer to an entity that pointer would remain valid.

      So yeah, code that was like “I’ll just flip this bit on this entity I kept track of” was now flipping random bits on memory.

      These were fun to chase down.

      In the end we inplemented NoTaD pointers (“notified on target destruction”, essentially weak pointers but this was back in the day when weak pointers and smart pointers weren’t really well defined) that would discover when the thing they took a precious pointer to was actually no longer valid.

      • CanadaPlus@lemmy.sdf.org
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        10 hours ago

        In the end we inplemented NoTaD pointers (“notified on target destruction”, essentially weak pointers but this was back in the day when weak pointers and smart pointers weren’t really well defined) that would discover when the thing they took a precious pointer to was actually no longer valid.

        It’s weird to me that programming practice has changed that much in 20 years. That’s still closer to today than to Dennis Richie doing his thing.

    • ZombiFrancis@sh.itjust.works
      link
      fedilink
      arrow-up
      21
      ·
      1 day ago

      Also a cautionary tale on adding and removing features without plan or controls. Every ‘hey could we add…? It’s what everyones talking about!’ is another step taken away from the design.