[D2X Rebirth all versions Win7 x64] Bug - demo playback stops suddenly (crashes?)
#1
Happens in Entropy experiment, level 4, mission :
http://www.enspiar.com/dmdb/viewMission.php?id=212
start the demo, it suddenly stops when I kill the first Pyro boss (at 18%). You can fast forward the demo, or play normally, it stops anyway. Demo :
https://www.sendspace.com/file/qz90kl
same thing happens if you go to the end of the demo (ctrl + ->) and scroll it back (shift + <-), at the point when you kill the third Pyro boss
Could you please help me, I spent a lot of time recording the demo and need to upload a video of it soon, if this is hard to fix maybe you know a workaround (earlier version or smth else?). This issue reproduces in 0.58.1 and the latest build, and even in DOS version! So I don't have any way to record this level at all (as I don't think another demo will behave in different way)!
Reply
#2
I can reproduce strange results, but no crash. The demo ceases to make forward progress. If I attempt to step backward, I am dumped back to the demo selection menu. This is inconvenient; a crash would point me to a specific bug, but this is merely odd results. Since it's broken in DOS, that suggests a fundamental problem with the demo code.
Reply
#3
(12-23-2017, 10:51 PM)Kp Wrote: I can reproduce strange results, but no crash.  The demo ceases to make forward progress.  If I attempt to step backward, I am dumped back to the demo selection menu.  This is inconvenient; a crash would point me to a specific bug, but this is merely odd results.  Since it's broken in DOS, that suggests a fundamental problem with the demo code.
When saying "crash?", I thought that demo playback is maybe wrapped in exception handler code, that causes the demo to stop everytime smth bad happens - without giving any meaningful error; good if it is not so. Still there is no way to play the demo of this level; and I think - ANY demo of this level. So I consider it a serious bug in demo playback system (even if it existed in all versions) and would be happy to see it fixed.
There are more problems like this (I don't know whether it is the same bug or not), but maybe this info will help,
this demo of Obsidian (http://www.enspiar.com/dmdb/viewMission.php?id=223)
Level 12 - https://www.sendspace.com/file/c1elro
stops after a few seconds, but there is a workaround for this one - if you run any campaign - for example, start Counterstrike level 1, abort, then play demo again - it will work! There are more cases like the later.
Would you accept it as a bug, and if so, give any time estimate when it will be fixed (at least investigated further)?
BTW I recorded a video for this Entropy level already via direct video capture of the game (had to re-do the run of course), so using the demo is not as urgent; but still will be very grateful if you could fix it.
Reply
#4
Yes, I consider those to be bugs. No time estimate yet. For the original problem, I found why stepping backward dumps me to the demo playback menu. It seems to be related to the problem you reported. For reasons yet unknown, the demo has a bogus end-of-file marker right when you beat that boss, even though the file then continues on for quite a ways afterward. The demo code sees that end-of-file and, if playing normally, drops you to the main menu. If fast-forwarding, pauses in place.

I am inclined to say that the demo is broken as recorded. I don't know why your game wrote a bogus end-of-file marker here, but I will keep looking.
Reply
#5
(12-24-2017, 08:31 PM)Kp Wrote: Yes, I consider those to be bugs.  No time estimate yet.  For the original problem, I found why stepping backward dumps me to the demo playback menu.  It seems to be related to the problem you reported.  For reasons yet unknown, the demo has a bogus end-of-file marker right when you beat that boss, even though the file then continues on for quite a ways afterward.  The demo code sees that end-of-file and, if playing normally, drops you to the main menu.  If fast-forwarding, pauses in place.

I am inclined to say that the demo is broken as recorded.  I don't know why your game wrote a bogus end-of-file marker here, but I will keep looking.

Ok, thanks a lot! The second demo (Obsidian) should have a different problem, then. Because it is still possible to play it back with the trick I explained. I've seen the same bug as in the Obsidian in couple more levels in different campaigns, but this inability to play back a demo at all - I've seen it only once.
Reply
#6
It is entirely possible that there was a certain piece of data that happened to be the same as an EOF marker?


On a related note, is it possible to use the actual end of file as the marker rather than the specific EOF marker?
Reply
#7
I haven't looked at Obsidian yet, since it's a bit less severe because a workaround exists (albeit an ugly one).

I believe that the Entropy demo is broken as-recorded. I would like to record a new demo from Entropy and debug through the failure, but the one attempt I made came out clean. The resulting demo played through my victory over the robot-pyro without stopping. The offending robot-pyro is the one which holds the gold key, correct? I have a savegame from just before I begin fighting the robot-pyro. I loaded that game, started a demo, killed the robot-pyro, grabbed the gold key, and stopped the demo. If you do the same, does your demo come out usable? If yes, do you have any suggestions for minimal steps to reproduce recording of a broken demo?

Also, potentially relevant, if I play that area in a debug build, I get a trap every frame because the robot-pyro is trying to wave an arm it doesn't have.
Code:
if (jointnum >= Polygon_models[objp.rtype.pobj_info.model_num].n_models) { Int3(); // Contact Mike: incompatible data, illegal jointnum, problem in pof file? continue; }
This leads me to suspect that the mod required to make a robot look like a pyro was not done correctly, and that this somehow accounts for the demo being recorded improperly. However, since I cannot reproduce the incorrect recording, I cannot confirm that.

LightWolf: not just possible, but absurdly probable. The original author of this code thought it would be a good idea to use 0x00 (the null byte) as an EOF marker, so any time someone dumps a block of nulls into the file, you get a run of fake EOFs. Even worse, since 0x00 and its zero-extended forms are a very common value for unused fields, unused data is likely to be a run of nulls. My current working theory is that somehow the game wrote N vectors into the file, but reads back only M vectors, for N > M, leaving the unused all-zero vectors to be misinterpreted as a run of EOF marker.

Yes, we could try to use the actual end-of-file. I considered that, but have no idea what it would break. The demo code is so fragile that I'm surprised I don't get more problem reports for it.
Reply
#8
Only one way to find out Wink
Reply
#9
(12-28-2017, 02:56 AM)Kp Wrote: I haven't looked at Obsidian yet, since it's a bit less severe because a workaround exists (albeit an ugly one).

I believe that the Entropy demo is broken as-recorded.  I would like to record a new demo from Entropy and debug through the failure, but the one attempt I made came out clean.  The resulting demo played through my victory over the robot-pyro without stopping.  The offending robot-pyro is the one which holds the gold key, correct?  I have a savegame from just before I begin fighting the robot-pyro.  I loaded that game, started a demo, killed the robot-pyro, grabbed the gold key, and stopped the demo.  If you do the same, does your demo come out usable?  If yes, do you have any suggestions for minimal steps to reproduce recording of a broken demo?

Also, potentially relevant, if I play that area in a debug build, I get a trap every frame because the robot-pyro is trying to wave an arm it doesn't have.
Code:
if (jointnum >= Polygon_models[objp.rtype.pobj_info.model_num].n_models) { Int3(); // Contact Mike: incompatible data, illegal jointnum, problem in pof file? continue; }
This leads me to suspect that the mod required to make a robot look like a pyro was not done correctly, and that this somehow accounts for the demo being recorded improperly.  However, since I cannot reproduce the incorrect recording, I cannot confirm that.

LightWolf: not just possible, but absurdly probable.  The original author of this code thought it would be a good idea to use 0x00 (the null byte) as an EOF marker, so any time someone dumps a block of nulls into the file, you get a run of fake EOFs.  Even worse, since 0x00 and its zero-extended forms are a very common value for unused fields, unused data is likely to be a run of nulls.  My current working theory is that somehow the game wrote N vectors into the file, but reads back only M vectors, for N > M, leaving the unused all-zero vectors to be misinterpreted as a run of EOF marker.

Yes, we could try to use the actual end-of-file.  I considered that, but have no idea what it would break.  The demo code is so fragile that I'm surprised I don't get more problem reports for it.
In fact, I tried it from the cold-start and yes, nothing happens! Even recorded an Insane cold-start full demo in process. Probably the game is just trying to tell me, that you suck if don't cold-start! But jokes aside, I loaded my save (end of level 3, before the secret teleporter, enter and exit the secret level immediately, start recording at staart of L4, kill the yellow key boss, and the same thing happens again... Here is the save https://www.sendspace.com/file/o6890m

Skipping erroneous NULL marker probably would be a bad idea if the demo is corrupted...

Also, is demo stopping when entering any D2 secret level considered a bug? I'd say so especially given the fact that playing such demo, you can skip the "transition" point via fast-forward in the first case, and play the SL part! In normal playback it just stops. And another problem - demo stops recording when you exit the secret level. Should I report both as bugs, if so, should it be in different/separate e-mails?
Reply
#10
Confirmed, cold start produces a good demo; warm start from prior level produces a bad demo. Fortunately, some editor features can be used to cheat to this point quite quickly.
  • Start level 3
  • Use Del-Shift-B to start the countdown and teleport to the exit.
  • On level 4, press Del-P to suspend all robots.
  • Set Cursegp to segment 167, then use Del-Shift-C to warp there. This brings you in near the plasma-spewing bot a bit behind the target Pyro-robot.
With this approach, I can set up a reproduction in about a minute, with no need to know the level layout or be able to beat anything.

I now have two very short demos of me destroying this robot-pyro. One works, one fails as you saw. I have not yet determined why they differ.

Demos are such a mess that I consider them nearly unsupported. Perhaps other contributors take a kinder view of the code and wish to more actively pursue improvements in this area. This problem is so clearly a bug that I would like to understand and fix it, but anything marginal is probably not something I will pursue.

Yes, please open separate threads for each issue.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)