Aller au contenu

Photo

Delayed death bug - Full information gather


  • Veuillez vous connecter pour répondre
3 réponses à ce sujet

#1
Thajocoth

Thajocoth
  • Members
  • 102 messages
Known:

The bug is a delay in the registering of death events in the game.  The things that are delayed are:
* Visual - Corpse bleeds out (creates a puddle of blood)
* Mechanical - Loot is often created and the corpse sparkles
* Story - Some conversations are triggered by certain deaths

The bug is apparent within the first 15 minutes of play with a wait of 2-3 seconds, and the duration of the wait gets longer as you play, reaching as far as a 5 minute wait (this was my longest).  Some people have reported waiting 10 minutes.

Side note: Most games that I've worked on have been for a Nintendo console, and this is a bug that I'm fairly certain would never pass Big N's quality control.  Obviously Microsoft is not as strict.

-----

Technical Speculation:

As the bug is getting worse with time, my instinct as a programmer is to say "Memory Leak!" with a Phoenix Wright style action pointing pose, complete with moving lines in the background.  However, this is on the 360.  I know from the XNA title I'm working on now that the 360 requires that you code in C#.

C# has what's called a "garbage collector".  How this works is, when it runs, it looks through the main part of the code for all objects pointed to and marks them as ok.  Then each object those objects point to, and so on & so on.  Once it's out of objects to look at, it deletes from memory anything that's left (anything that has nothing pointing to it).  This makes it very difficult (though not impossible) to leak memory.

However, the garbage collector may create lag when it runs, as it's looking at everything.  On top of that, the garbage collector runs whenever you create a new object, which is when you need those cycles for initializing the new object.  In the game I'm working on now, we had this problem and had to create a buffer of objects to circumvent the garbage collector to keep our game from lagging every time something new is created.  I don't know if doing this would be useful for Bioware or not, as I cannot be certain of the nature of their bug, but I'm tossing the idea out there.

I mentioned that, while more difficult, it's certainly still possible to leak memory.  All it takes is to keep a list of references to objects that is not getting references removed from as you press onward.  This means that those objects stay in memory, and depending on what list they're added to, may even be getting processed posthumously.  Oddly enough, this is an easier oversight to achieve with "good code" than "bad code", as "good code" has more autonomous objects.  (That means they're seperate pieces that don't assume a whole lot about the other pieces.  Makes for nice code reuse.)  So this is another avenue to possibly look into.

During battles, a lot of little objects are likely to be created.  The numbers for damage over an enemy's head...  The projectiles...  Various AI structures...  Animation objects...  Ect...  It makes sense to me that these objects might be held onto until the enemy's death, then released, to prevent the garbage collector from having anything to do in the middle of battle.  Or perhaps an enemy keeps a pool of these objects that they use, that get released upon their death.  I couldn't really claim to know.  If so, this could easily lead to either of the speculated issues I've mentioned.

Off-topic Aside (Does this board have a [spoiler] tag equivalent?):
Part of why I like C++ so much is that I have control over when everything happens.  I can say when to delete a specific object, instead of leaving it up to the garbage collector.  My coding style, however, thrives on knowing everything that's going on related to a system at once, as I keep the entire system in my head, so I can see as I change things everything else that will need to be adjusted as I go.  It also makes debugging a lot easier.  Black boxes, like a garbage collector, just make it more difficult to debug things, as ALL code has bugs, so you cannot assume a bug is in your code unless you can see what everything in your code is doing.  This doesn't mean I need to write all the code in a system, it just means it's very useful and speeds things up greatly for me to be able to see all the code in a system.

-----

Other Speculation:

We also don't know if the issue is somehow related to an issue that's already being fixed in the coming patch.  I would certainly like to know, as it effects what I purchase.  I'm not going to buy more DLC just to spend half my play time waiting for things to register their death.  If this bug is fixed though, I will have no reason not to buy all the remaining DLCs that I don't yet have, and will hopefully enjoy them as much as the original game.

-----

Does anyone else have any known facts or speculation to add regarding this specific major game-delaying bug?

Modifié par Thajocoth, 15 juin 2010 - 11:20 .


#2
Thajocoth

Thajocoth
  • Members
  • 102 messages
So... With the new patch... Is this fixed?

#3
Serenade

Serenade
  • Members
  • 783 messages
I get some delay, but not so much. I would say it's definitely better. If you look at the 1.04 patch notes, you'll see that some memory leaks has been addressed.

Modifié par Master Bandit, 18 août 2010 - 09:36 .


#4
Last Darkness

Last Darkness
  • Members
  • 2 794 messages
Sometimes using the Reaver Ability "Devour" forces the death effects on enemies to refresh, in essence killing them twice.