• flamingo_pinyata@sopuli.xyz
    link
    fedilink
    English
    arrow-up
    106
    arrow-down
    3
    ·
    1 day ago

    The opposite actually - rows are dramatically added to a database. In most games save files grow the longer you play.

    • jdeath@lemm.ee
      link
      fedilink
      English
      arrow-up
      38
      ·
      1 day ago

      and even if some idiot put every zombie npc in a database (or if you want to think of it that way), you wouldn’t just delete the rows! the bodies would disappear, so instead you would update that row like (npcState = KIL, bodyLocation = <some coords>) or something. Especially if you wanted to keep player stats

      • AdrianTheFrog@lemmy.world
        link
        fedilink
        English
        arrow-up
        1
        ·
        17 hours ago

        Maybe you would have an array of active enemies in RAM, and when enemies are killed they are removed from that array for example?

        In a game like Minecraft for example, you definitely wouldn’t want to store every single dead entity and its location when there can easily be thousands created and destroyed in a single second

        It obviously depends on the game though.

        • Natanael@infosec.pub
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          12 hours ago

          Definitely depends on the type of game, but it’s more likely the game stores data about which areas you cleared and then infer that the bodies of any permanently remaining enemy (like bosses) is to be displayed.

          Can vary even more for procedurally generated levels. If the set of enemies is fixed and stay in calculated positions in a map generated randomly, then it might store an array or something tracking the enemies.

      • VitoRobles@lemmy.today
        link
        fedilink
        English
        arrow-up
        8
        ·
        1 day ago

        This is how it works in many game engines.

        You set up the monsters and just hide them/disable them. They’re already allocated to memory.

        And it’s a performance cost to create/delete versus just moving a dead enemy out of view, then respawning that enemy later in the level.

        • Natanael@infosec.pub
          link
          fedilink
          English
          arrow-up
          1
          ·
          12 hours ago

          If it’s a type of enemy you see just one of at a time but see it often, sure. If there’s many, cost of copy/delete is definitely not that high relatively speaking.

          (random sidenote: in the first Mirror’s Edge game, you can sometimes hear enemies you passed scream as they fall when you pass from one part of a map to another, as the ground in the map is unloaded before the enemies unload)

        • umbrella@lemmy.ml
          link
          fedilink
          English
          arrow-up
          2
          ·
          1 day ago

          im not very versed in game engine design, but dont they dynamically stream them into memory before they will be needed, and discard them when they wont nowadays?

          • AdrianTheFrog@lemmy.world
            link
            fedilink
            English
            arrow-up
            5
            ·
            17 hours ago

            Dynamic streaming is common nowadays, as games have gotten large enough that not everything in a level can fit into memory.

            I don’t know about what is actually done in industry but I feel like most of the time you wouldn’t bother with keeping dead instances unless instancing is shown to actually be a performance problem, which will probably not happen all that often

            Godot for example doesn’t have built in dynamic level streaming yet or a built in way to cycle through dead instances as far as I can tell, although I’m sure that wouldn’t be hard to do with code

    • AdrianTheFrog@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      ·
      18 hours ago

      I was looking at the savegames from the game control recently, it’s kinda funny because you open them in notepad, you see a bunch of random gibberish from bad decoding (the game uses a proprietary save format) with the words “collected” “Collected” “unlocked” “available” “VariableRestoreHack” (??) “STATE_B_PUZZLE_SOLVED” “Powercore_Not_Attached” randomly interspersed

      Like, surely there is a better way to store 2 state data other than an english word?

      It does generally get longer as you play, but also “locked” just switches to “unlocked” for example when you unlock something

      • SkaveRat@discuss.tchncs.de
        link
        fedilink
        English
        arrow-up
        5
        ·
        15 hours ago

        Eh, really depends

        They are likely just serializing a bunch of data objects. And set states and flags with humans readable enums

        Enums make code a lot easier to read, especially if you use it to check stuff all over the place

        Using to a couple bytes more storage is worth it

        • Echo Dot@feddit.uk
          link
          fedilink
          English
          arrow-up
          2
          ·
          edit-2
          14 hours ago

          I thought that enums were supposed to compile down to aa, ab, ac when you actually build the game.

          • SkaveRat@discuss.tchncs.de
            link
            fedilink
            English
            arrow-up
            4
            ·
            13 hours ago

            Depending on the language, they are.

            Lots of games also use data structures derived from tables/csv at runtime to configure things like stats. So they would also need these (human readable) values in the save files

            Hard to tell from speculation and not having the data

          • Natanael@infosec.pub
            link
            fedilink
            English
            arrow-up
            1
            ·
            13 hours ago

            Depends on optimization levels, data types, and whatnot. If it’s a string to be fed into the API of a different binary then the compiler will often not optimize down that representation. Internal function names are likely to be optimized that way, with lookup tables holding original function names (at least for any externally exposed function).

    • NocturnalMorning@lemmy.world
      link
      fedilink
      English
      arrow-up
      15
      arrow-down
      1
      ·
      1 day ago

      This is why Breathe of the Wild did the blood moon thing, periodically they’d just bring all the dead enemies back so file size didn’t get too large.

    • marcos@lemmy.world
      link
      fedilink
      English
      arrow-up
      8
      ·
      1 day ago

      Also, it’s an unreasonably fast database. That makes lots of trade-offs that normal ones aren’t willing to do.

    • AngryCommieKender@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      ·
      23 hours ago

      There for a minute when Dyson Sphere Program first went into open pre-release, something was wrong with their save file compression, and very quickly people were reporting multiple GB saves.

    • Evil_Shrubbery@lemm.ee
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 day ago

      Me in the matrix (so irl basically), holding a gun: “Don’t worry, I’m not deleting you!”