Jump to content

dsda-doom source port [v0.24.3]


Recommended Posts

You disabled the "issues" tab from GitHub, so I'm dumping my crash report here.


Run Heretic (-iwad path/to/heretic.wad), -warp 1 1 -nomonsters, and just kitty to the exit. Throw the switch. During the intermission, DSDA-Doom (DSDA-Heretic?) will crash with this:

Spoiler



=================================================================
==37636==ERROR: AddressSanitizer: global-buffer-overflow on address 0x0001008f9520 at pc 0x0001005789d0 bp 0x7ffeefbfed90 sp 0x7ffeefbfed88
READ of size 8 at 0x0001008f9520 thread T0
    #0 0x1005789cf in Hexen_S_StartSoundAtVolume s_sound.c:1028
    #1 0x10057b1e1 in S_StartSound s_sound.c:415
    #2 0x1001b26e8 in IN_DrawSingleStats in_lude.c:698
    #3 0x1001b22fe in IN_Drawer in_lude.c:533
    #4 0x1005baa6e in WI_Drawer wi_stuff.c:2067
    #5 0x10006fe64 in D_Display d_main.c:341
    #6 0x10005a54b in TryRunTics d_client.c:137
    #7 0x10007a1bd in D_DoomLoop d_main.c:523
    #8 0x100074a1d in D_DoomMain d_main.c:2328
    #9 0x100027cb6 in main i_main.c:601
    #10 0x7fff6d76dcc8 in start+0x0 (libdyld.dylib:x86_64+0x1acc8)

0x0001008f9524 is located 0 bytes to the right of global variable 'AlreadyGot' defined in '/Users/ioan/dezvoltare/cross/dsda-doom/prboom2/src/sc_man.c:62:17' (0x1008f9520) of size 4
SUMMARY: AddressSanitizer: global-buffer-overflow s_sound.c:1028 in Hexen_S_StartSoundAtVolume
Shadow bytes around the buggy address:
  0x10002011f250: 00 f9 f9 f9 f9 f9 f9 f9 00 f9 f9 f9 f9 f9 f9 f9
  0x10002011f260: 04 f9 f9 f9 f9 f9 f9 f9 00 f9 f9 f9 f9 f9 f9 f9
  0x10002011f270: 04 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9 f9 f9 f9 f9
  0x10002011f280: 04 f9 f9 f9 f9 f9 f9 f9 00 00 00 00 00 00 00 00
  0x10002011f290: f9 f9 f9 f9 04 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9
=>0x10002011f2a0: f9 f9 f9 f9[04]f9 f9 f9 f9 f9 f9 f9 00 f9 f9 f9
  0x10002011f2b0: f9 f9 f9 f9 00 f9 f9 f9 f9 f9 f9 f9 00 00 f9 f9
  0x10002011f2c0: f9 f9 f9 f9 00 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9
  0x10002011f2d0: f9 f9 f9 f9 00 00 00 00 00 00 00 00 00 00 00 00
  0x10002011f2e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x10002011f2f0: 00 00 00 00 f9 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
2021-11-06 09:23:04.075300+0200 dsda-doom[37636:1701103] =================================================================
2021-11-06 09:23:04.075437+0200 dsda-doom[37636:1701103] ==37636==ERROR: AddressSanitizer: global-buffer-overflow on address 0x0001008f9520 at pc 0x0001005789d0 bp 0x7ffeefbfed90 sp 0x7ffeefbfed88
2021-11-06 09:23:04.075533+0200 dsda-doom[37636:1701103] READ of size 8 at 0x0001008f9520 thread T0
2021-11-06 09:23:04.075598+0200 dsda-doom[37636:1701103]     #0 0x1005789cf in Hexen_S_StartSoundAtVolume s_sound.c:1028
2021-11-06 09:23:04.075672+0200 dsda-doom[37636:1701103]     #1 0x10057b1e1 in S_StartSound s_sound.c:415
2021-11-06 09:23:04.075769+0200 dsda-doom[37636:1701103]     #2 0x1001b26e8 in IN_DrawSingleStats in_lude.c:698
2021-11-06 09:23:04.075833+0200 dsda-doom[37636:1701103]     #3 0x1001b22fe in IN_Drawer in_lude.c:533
2021-11-06 09:23:04.075886+0200 dsda-doom[37636:1701103]     #4 0x1005baa6e in WI_Drawer wi_stuff.c:2067
2021-11-06 09:23:04.075969+0200 dsda-doom[37636:1701103]     #5 0x10006fe64 in D_Display d_main.c:341
2021-11-06 09:23:04.076025+0200 dsda-doom[37636:1701103]     #6 0x10005a54b in TryRunTics d_client.c:137
2021-11-06 09:23:04.076087+0200 dsda-doom[37636:1701103]     #7 0x10007a1bd in D_DoomLoop d_main.c:523
2021-11-06 09:23:04.076146+0200 dsda-doom[37636:1701103]     #8 0x100074a1d in D_DoomMain d_main.c:2328
2021-11-06 09:23:04.076235+0200 dsda-doom[37636:1701103]     #9 0x100027cb6 in main i_main.c:601
2021-11-06 09:23:04.076296+0200 dsda-doom[37636:1701103]     #10 0x7fff6d76dcc8 in start+0x0 (libdyld.dylib:x86_64+0x1acc8)
2021-11-06 09:23:04.076365+0200 dsda-doom[37636:1701103] 
2021-11-06 09:23:04.076496+0200 dsda-doom[37636:1701103] 0x0001008f9524 is located 0 bytes to the right of global variable 'AlreadyGot' defined in '/Users/ioan/dezvoltare/cross/dsda-doom/prboom2/src/sc_man.c:62:17' (0x1008f9520) of size 4
2021-11-06 09:23:04.076623+0200 dsda-doom[37636:1701103] SUMMARY: AddressSanitizer: global-buffer-overflow s_sound.c:1028 in Hexen_S_StartSoundAtVolume
2021-11-06 09:23:04.076772+0200 dsda-doom[37636:1701103] Shadow bytes around the buggy address:
2021-11-06 09:23:04.076873+0200 dsda-doom[37636:1701103]   0x10002011f250: 00 f9 f9 f9 f9 f9 f9 f9 00 f9 f9 f9 f9 f9 f9 f9
2021-11-06 09:23:04.076943+0200 dsda-doom[37636:1701103]   0x10002011f260: 04 f9 f9 f9 f9 f9 f9 f9 00 f9 f9 f9 f9 f9 f9 f9
2021-11-06 09:23:04.077021+0200 dsda-doom[37636:1701103]   0x10002011f270: 04 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9 f9 f9 f9 f9
2021-11-06 09:23:04.077137+0200 dsda-doom[37636:1701103]   0x10002011f280: 04 f9 f9 f9 f9 f9 f9 f9 00 00 00 00 00 00 00 00
2021-11-06 09:23:04.077235+0200 dsda-doom[37636:1701103]   0x10002011f290: f9 f9 f9 f9 04 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9
2021-11-06 09:23:04.077342+0200 dsda-doom[37636:1701103] =>0x10002011f2a0: f9 f9 f9 f9[04]f9 f9 f9 f9 f9 f9 f9 00 f9 f9 f9
2021-11-06 09:23:04.077412+0200 dsda-doom[37636:1701103]   0x10002011f2b0: f9 f9 f9 f9 00 f9 f9 f9 f9 f9 f9 f9 00 00 f9 f9
2021-11-06 09:23:04.077513+0200 dsda-doom[37636:1701103]   0x10002011f2c0: f9 f9 f9 f9 00 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9
2021-11-06 09:23:04.077636+0200 dsda-doom[37636:1701103]   0x10002011f2d0: f9 f9 f9 f9 00 00 00 00 00 00 00 00 00 00 00 00
2021-11-06 09:23:04.077742+0200 dsda-doom[37636:1701103]   0x10002011f2e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2021-11-06 09:23:04.077843+0200 dsda-doom[37636:1701103]   0x10002011f2f0: 00 00 00 00 f9 f9 f9 f9 f9 f9 f9 f9 04 f9 f9 f9
2021-11-06 09:23:04.077958+0200 dsda-doom[37636:1701103] Shadow byte legend (one shadow byte represents 8 application bytes):
2021-11-06 09:23:04.078072+0200 dsda-doom[37636:1701103]   Addressable:           00
2021-11-06 09:23:04.078177+0200 dsda-doom[37636:1701103]   Partially addressable: 01 02 03 04 05 06 07
2021-11-06 09:23:04.078286+0200 dsda-doom[37636:1701103]   Heap left redzone:       fa
2021-11-06 09:23:04.078388+0200 dsda-doom[37636:1701103]   Freed heap region:       fd
2021-11-06 09:23:04.078483+0200 dsda-doom[37636:1701103]   Stack left redzone:      f1
2021-11-06 09:23:04.078590+0200 dsda-doom[37636:1701103]   Stack mid redzone:       f2
2021-11-06 09:23:04.078681+0200 dsda-doom[37636:1701103]   Stack right redzone:     f3
2021-11-06 09:23:04.078744+0200 dsda-doom[37636:1701103]   Stack after return:      f5
2021-11-06 09:23:04.078817+0200 dsda-doom[37636:1701103]   Stack use after scope:   f8
2021-11-06 09:23:04.078907+0200 dsda-doom[37636:1701103]   Global redzone:          f9
2021-11-06 09:23:04.079009+0200 dsda-doom[37636:1701103]   Global init order:       f6
2021-11-06 09:23:04.079141+0200 dsda-doom[37636:1701103]   Poisoned by user:        f7
2021-11-06 09:23:04.079308+0200 dsda-doom[37636:1701103]   Container overflow:      fc
2021-11-06 09:23:04.079409+0200 dsda-doom[37636:1701103]   Array cookie:            ac
2021-11-06 09:23:04.079551+0200 dsda-doom[37636:1701103]   Intra object redzone:    bb
2021-11-06 09:23:04.079642+0200 dsda-doom[37636:1701103]   ASan internal:           fe
2021-11-06 09:23:04.079767+0200 dsda-doom[37636:1701103]   Left alloca redzone:     ca
2021-11-06 09:23:04.079868+0200 dsda-doom[37636:1701103]   Right alloca redzone:    cb
2021-11-06 09:23:04.079994+0200 dsda-doom[37636:1701103]   Shadow gap:              cc
==37636==ABORTING
AddressSanitizer report breakpoint hit. Use 'thread info -s' to get extended information about the report.

The build I tested is b4a5ee48583268e1e18064472b610a54c5adabed (master) and it happened in Hexen_S_StartSoundAtVolume at the line (in the middle of the excerpt):


  for (i = 0; i < numChannels; i++)
  {
    if (origin->player)
    {
      i = numChannels;


 

EDIT: also tested with -heretic, still crashes.

mod edit: I threw the report into a spoiler for better thread readability. -dew

Edited by dew

Share this post


Link to post
12 hours ago, printz said:

crash report

Huh, this is one of those funny things that only crashes for certain builds, and it looks like it's a bug that exists in the original source. So it just hasn't come up by chance I guess :^)

 

When there's no player mobj, heretic and hexen use a dummy listener object. But the listener object is a limited struct without a player pointer element. And the code for sounds checks if there is a player, so it's referencing memory offset from the static listener's address. Nice.

 

Try the latest master and see if you still have a crash there.

Share this post


Link to post

[Feature request]

 

Can we have "Pitch-shifted sounds" in heretic again please? Its one of thoose things that heretic did better than doom lol, they sound great and not horrendous like the doom ones.

Share this post


Link to post
On 11/4/2021 at 9:14 PM, kraflab said:
On 11/4/2021 at 5:25 PM, Kappa971 said:

My curiosity, I would like to ask why compiling PrBoom-plus/DSDA-Doom with Visual Studio, the number of required .dlls is less (16 .dll files vs 40 .dll files).

There are many factors that affect this, and two people compiling in the same environment could have different numbers as well. It depends on how many libraries you use (many are optional when compiling) and how you link those libraries.

I can now say that all libraries (or almost) are active by default by compiling both with MinGW64 and Visual Studio and that with the executable produced with Visual Studio, the required dlls are much less (in terms of total size it is 18mb vs 8mb approximately). For information only.

Share this post


Link to post

One of the culprits is fluidsynth, which pulls in a number of other rather heavy-weight dependencies like e.g. libglib.

Share this post


Link to post
On 10/20/2021 at 11:33 AM, kraflab said:

Yes, I'm planning on overhauling gamepad support at some point.

If it's not already being considered, any chance for flick stick being natively implemented? Something along the lines of the unity port's weapon carousel would be nice for gamepad viability as well.

Edited by Firebert

Share this post


Link to post
21 hours ago, Firebert said:

If it's not already being considered, any chance for flick stick being natively implemented? Something along the lines of the unity port's weapon carousel would be nice for gamepad viability as well.

 

You can already sort of use flick stick with steam's controller support outputting as a mouse. They have flick stick integrated there.

Share this post


Link to post

So, I've played a couple of maps that don't get their levelstats saved properly onto Doom Launcher. Now, that sounds like a Doom Launcher bug, so this could be more of a question than a bug report - but the one thing both instances had in common was that stats files indicated negative kill percentage. At first I thought it was some technicality caused by archvile resurrections, but just a moment ago I finished a level (Going Down MAP20, HMP) that had no archviles that I could see. In the ingame screen that stats indicated all kills when I exited level, but stats file shows following:

 

===========================================
MAP20
===========================================

Time: 11:53 (par: 2:30)

Player 1 (Green):
    Kills: 538 / 538 (-21%)
    Items: 4 / 4 (100%)
    Secrets: 1 / 2 (50%)

 

===========================================
MAP21
===========================================

Time: 13:26 (par: 4:00)

Player 1 (Green):
    Kills: 105 / 113 (92%)
    Items: 6 / 6 (100%)
    Secrets: 0

 

Now, another thing both levels had in common was that they were episode enders (the other map negatives occurred was Interception II's MAP11). And now that I'm looking at these stats, it looks like -21% may be caused by this: 113/538 = 0.210037, ie. it somehow considers next level's enemy tally into equation?

 

However, if I load my Interception save at the end of the level, the stats show:

 

===========================================
MAP11
===========================================

Time: 87:58 (par: 0:00)

Player 1 (Green):
    Kills: 620 / 601 (-5%)
    Items: 502 / 551 (-27%)
    Secrets: 10 / 11 (90%)

 

This I understand less. MAP12 has 218 enemies, I cannot get any coincidentally aligning percentages with any obvious alternatives, and now even the item count looks silly, where in Going Down's case looked perfectly normal.

 

Is it a bug after all, or am I misunderstanding something?

 

.

Share this post


Link to post

DSDA-Doom version: 0.21.3

There seems to be a bug that's inherited from PrBoom+ regarding the A_LineEffect action pointer. As per the specs W1 and S1 actions should only be triggered once, but DSDA-Doom (and PrBoom+) go a bit overboard and will not trigger the action again even when loading a saved game or starting a new game. The only way to get it to trigger again ist quitting and restarting DSDA-Doom.

 

Example map: triggerfail.zip

 

The map contains a modified Commander Keen that immediately runs A_LineEffect with line action 20 ("S1 Floor To Higher Floor Change Texture") to raise a platform out of the lava. When starting a new game the platform will not rise out of the lava. To trigger it again DSDA-Doom has to be exited and restarted.

Share this post


Link to post
8 hours ago, RHhe82 said:

So, I've played a couple of maps that don't get their levelstats saved properly onto Doom Launcher.

By my understanding, Doom Launcher uses the -levelstat parameter when running PrBoom+ (or dsda-doom, I assume) and parses the generated levelstat.txt to save statistics. It'll be helpful if you can share the levelstat.txt when this happens (if you're not sure where it is, check the dsda-doom directory) so we can narrow down whether the error is in dsda-doom generating the levelstat.txt output or in Doom Launcher's parsing of that file.

 

2 hours ago, boris said:

There seems to be a bug that's inherited from PrBoom+ regarding the A_LineEffect action pointer.

I can reproduce this with your test wad. This also occurs when recording a demo and using the level restart button, which will cause demos after the first attempt to desync(!).

Share this post


Link to post

I have a couple of questions/suggestions that have been on my mind again for the last week. Nothing pressing just a check in of sorts.

 

1. Will the Windows launcher or something similar be ported to Linux? I think I remember entryway being asked for it ages ago by someone. It is handy sometimes for watching demos that don't have footers or demo_patterns to automatically select the required wads.

 

2. Can DSDA-Doom's wad search be made case insensitive on Linux?

 

I ask because double clicking on a demo will fail sometimes because of a simple case mismatch. Some wads have uppercase names like MM2.WAD but the demo_patterns are written in lowercase. Demo footers can list uppercase, lowercase or even mixed-case file names for IWADs and PWADs. There are a few Eviternity.wad and eviternity.wad footers on DSDArchive. It should be safe to assume case doesn't really matter for this if the spelling is correct. Yes?

 

Obviously there are workarounds for the user. They can rename files or just launch demos manually from the command line or write their own scrips. Right now I avoid the whole thing by calling a separate copy of the Windows version in Wine solely for watching demos since it doesn't recognize case. But running in Wine comes with it's own problems (it's slow to load, screenshots are blank) and some people might not even want Wine on their systems. This is just a small suggestion to make Linux native a little more user friendly for people who download demos from DSDArchive. Either way, thanks for listening. :)

Share this post


Link to post
3 hours ago, Shepardus said:

By my understanding, Doom Launcher uses the -levelstat parameter when running PrBoom+ (or dsda-doom, I assume) and parses the generated levelstat.txt to save statistics. It'll be helpful if you can share the levelstat.txt when this happens (if you're not sure where it is, check the dsda-doom directory) so we can narrow down whether the error is in dsda-doom generating the levelstat.txt output or in Doom Launcher's parsing of that file.

 

Sure, here they are. I had savefile at the of Interception MAP11, and with GD I fast-replayed level using cheats, but I suppose those have no bearing on Doom Launcher functionality, and I don't think cheats are saved onto levelstats. The files in the zip file are copies of stats.txt right after I completed each map and quit back to Windows.

 

Are the negative percentages expected behaviour?

 

DSDA negative stats examples.zip

Share this post


Link to post
On 11/14/2021 at 12:55 AM, boris said:

DSDA-Doom version: 0.21.3

There seems to be a bug that's inherited from PrBoom+ regarding the A_LineEffect action pointer. As per the specs W1 and S1 actions should only be triggered once, but DSDA-Doom (and PrBoom+) go a bit overboard and will not trigger the action again even when loading a saved game or starting a new game. The only way to get it to trigger again ist quitting and restarting DSDA-Doom.

 

Example map: triggerfail.zip

 

The map contains a modified Commander Keen that immediately runs A_LineEffect with line action 20 ("S1 Floor To Higher Floor Change Texture") to raise a platform out of the lava. When starting a new game the platform will not rise out of the lava. To trigger it again DSDA-Doom has to be exited and restarted.

Yep, this function edits not just the game state but the game's underlying configuration, changing the dehacked state itself (permanently). Since it has been this way for decades, I don't think there's much point "fixing" anything right now. It's more accurate to consider that this action doesn't exist / work for single use actions.

Share this post


Link to post

Is there a way to hide the extra time numbers that show up in the top-left of the screen at the end of a level? Seems a bit redundant for non-speedrunners.

Share this post


Link to post
2 hours ago, Valboom said:

Added widescreen low-resolution options ❤️

This. I'd love to see some crispy-style pixel scaling options for DSDA, lots of potential there.

Share this post


Link to post
On 11/6/2021 at 4:45 PM, El juancho said:

[Feature request]

 

Can we have "Pitch-shifted sounds" in heretic again please? Its one of thoose things that heretic did better than doom lol, they sound great and not horrendous like the doom ones.

Also, it'd be nice if DSDA could use separate config files for Heretic and Hexen, that way you don't have to constantly change settings back and forth to make the messages, pitch-shifting sounds and automap behave right.

Share this post


Link to post
16 minutes ago, OpenRift said:

This. I'd love to see some crispy-style pixel scaling options for DSDA, lots of potential there.

You can more or less do this by using the software renderer, picking one of the super low res options, and setting "screen multiple factor" above 1. We're working on making this possible in the hardware renderer as well, but for now software is the only option.

Share this post


Link to post

Good stuff. I'm glad you added the lo-fi widescreen options, fun stuff.

 

One thing I think it really does need though is the ability to also do vanilla-style quicksaving/quickloading, where it saves to an entry in the Saves menu instead of doing the Quake-like thing where it only loads if you press F9. That's the only significant drawback I see here.

Share this post


Link to post

Clean v0.22.0 install, every time i start dsda-doom.exe with the launcher set to "smart" or "always" this error appears for me, if i turn off the launcher this error does not show, same if i click a wad with smart launcher enabled.

 

image.png.c9ee34b896874ae9a7d3376de05a8957.png

Edited by El juancho

Share this post


Link to post

I noticed that since v.21.3 it is no longer possible to enable texture mode in the automap. You can bind a key to it but it won't do anything. And the same thing is true for "show alive monsters". You can bind whatever key you want to it, it won't work. Surely this is not intended?? Have these two options been accidentally broken?

Share this post


Link to post
13 minutes ago, Gregor said:

I noticed that since v.21.3 it is no longer possible to enable texture mode in the automap. You can bind a key to it but it won't do anything. And the same thing is true for "show alive monsters". You can bind whatever key you want to it, it won't work. Surely this is not intended?? Have these two options been accidentally broken?

Did you switch renderers? Those options only work in opengl mode.

Share this post


Link to post
Guest
This topic is now closed to further replies.
×
×
  • Create New...