- Added separate
off
variant of hud config when extended hud is off - Added "armor color by class" hud option (default is on)
- Added
big_health_text
andbig_armor_text
hud components (status bar font without sprite)
- Added portmidi reverb and chorus options (ceski)
- Removed anisotropic filtering setting (only applied to "detail textures")
- Fixed various portmidi issues (ceski)
- Fixed looping sound on intermission screen
- Fixed exhud toggle not always applying immediately
- Fixed assign causing a permanent change for screen resolution
- Fixed fullclip not working with A_ConsumeAmmo (e.g., vesper weapons)
This update is the biggest yet, including improvements in many areas of the port. There is a new indexed light mode (software fidelity in opengl), expanded doom-in-hexen coverage, improved controller support, a new HUD system with new components, command-line-argument validations and descriptions, new console commands and better usability, debugging tools for testers / creators, scripting, a basic build mode, new trackers, various quality of life improvements, and a configuration / menu overhaul. Check out the details below.
- OpenGL windows are now resizable / maximizable (elim)
- OpenGL now stretches in full screen mode (elim)
- Improved performance of raven title screens (xaser)
- Indexed Light Mode (xaser)
- Xaser has implemented a new light mode for opengl that closely replicates the visuals of the software renderer. It uses the software palette system (including the pain palette and gamma) and can replicate previously software-exclusive effects like fake fog (recently seen in wormwood 4 map 5). This is the new default for opengl and combines the accuracy of software with the performance of hardware. Enjoy!
- There are still quirks of the software renderer that cannot be reproduced, but this is a significant improvement in visual fidelity.
- Completed the first iteration of the format!
- Thing specials
- Creatures / destructables execute their specials when killed / destroyed
- Items execute their specials when picked up
- New thing type
- Custom MusicChanger
- The track number can be from 0 to 64
- The order argument is currently not supported
- Custom MusicChanger
- TeleportDest2 & TeleportDest3 now use their z position for teleports
- New line specials
- Radius_Quake
- Thing_SetSpecial
- TeleportGroup
- TeleportInSector
- Teleport_NewMap
- The cluster concept is not supported yet
- Teleport_EndGame
- The interaction between Teleport_* and UMAPINFO is currently undefined
- The position argument (arg 0) is now supported in Exit_Normal and Exit_Secret
- Thing specials
- Added support for modern controller buttons
- Added support for dual analogs
- Added semantic names for the binding menu (i.e.,
pad x
instead ofjsb2
) - Improved menu navigation
- Updated default bindings
L
strafeR
use item (heretic / hexen)LT
mapRT
fireA
useB
jump (hexen)X
previous weaponY
next weaponDpad Up
fly up (heretic / hexen)Dpad Down
fly down (heretic / hexen)Dpad Left
inventory left (heretic / hexen)Dpad Right
inventory right (heretic / hexen)Left Stick
toggle auto runRight Stick
turn 180
- New config variables:
left_analog_deadzone
right_analog_deadzone
left_trigger_deadzone
right_trigger_deadzone
left_analog_sensitivity_x
left_analog_sensitivity_y
right_analog_sensitivity_x
right_analog_sensitivity_y
analog_look_acceleration
swap_analogs
- When on, the left analog stick looks and the right analog stick moves
invert_analog_look
- While recording in strict mode, mouse and controller cannot be used simultaneously
- The port will detect the first peripheral used and block the other
- Replaced the fullscreen hud
- Added a hud configuration lump (
DSDAHUD.lmp
)- Can be used to configure the fullscreen hud (like
-PRBHUD-.lmp
) - Can also be used to configure the extended hud
- Added
-hud my_hud.cfg
command line argument to override the lump
- Can be used to configure the fullscreen hud (like
- The fullscreen hud now works in hexen and heretic
- Heretic and hexen hud text colors have been corrected
- Coordinate display now works with the fullscreen hud
- Command display now works with the fullscreen hud
- Full documentation here
- Added angle to coordinate display
- Added distance traveled to coordinate display
- Added line interactions to coordinate display
- Added extended hud scale option (under quality of life in general settings)
- Added simple fps component (menu toggle and key binding)
- Command display now shows on the intermission stats screen
- Coordinate display now shifts down when the console is open
- Added
-help
/--help
- Prints out brief description of the options
- Options and their arguments are now validated
-warp abc
raises an error (cannot interpret string as a map)-recordfromto a.lmp
raises an error (missing destination file)-skill -warp
raises an error (no skill specified)-recor my.lmp
raises an error (unknown option)
-file
now accepts.deh
files instead of silently ignoring them-file
now raises an error if it can't find the file-time_*
now accepts an optional message duration argument (in tics)- Using
-recordfromto
with a missing source demo now causes an error - Changed default
-turbo
value to 255 - Added a warning for duplicate options
- Added error message when recording without specifying a compatibility level
- Added
-cl
alias for-complevel
- Added
-skiptic
(-skipsec
analog for tics) - Added
-assign attribute=value [attribute2=value2 ...]
- Sets the
value
ofattribute
(a config file key) - These changes are temporary and will not be written to the config file
- Sets the
- Added
-update attribute=value [attribute2=value2 ...]
- Sets the
value
ofattribute
(a config file key) - These changes are permanent and will be written to the config file
- Sets the
- Removed
-nowindow
and-nofullscreen
- Use
-window
and-fullscreen
(temporary settings)
- Use
- Removed -ffmap (use -warp)
- Added basic console doc
- Added
assign attribute value
- Sets the
value
ofattribute
(a config file key) - These changes are temporary and will not be written to the config file
- Sets the
- Added
update attribute value
- Sets the
value
ofattribute
(a config file key) - These changes are permanent and will be written to the config file
- Sets the
- Added
toggle_assign attribute
- Toggles
attribute
(a config file key) - These changes are temporary and will not be written to the config file
- Toggles
- Added
toggle_update attribute
- Toggles
attribute
(a config file key) - These changes are permanent and will be written to the config file
- Toggles
- Added
demo.export X
- Exports current demo buffer to file
X.lmp
- Existing demo will continue as normal
- Exports current demo buffer to file
- Added
demo.start X
- Starts a demo recording in the middle of a session, with name
X.lmp
- Demos may not play back on other operating systems (due to how the state is archived)
- Consider this experimental right now - the side effects are not well understood
- Starts a demo recording in the middle of a session, with name
- Added
demo.stop
- Exports current demo buffer and stops recording
- Added
music.restart
- Added
jump.to_tic X
- Works during playback and recording
- Added
jump.by_tic X
- Accepts positive and negative values
- Added
script.run X
- Loads text file
X
and runs each line as a console command - Lines starting with
!
,#
, and/
are considered comments
- Loads text file
- Added
fullclip
(infinite ammo) - Added
freeze
(freeze time) - Added
nosleep
(wakes up all monsters) - Added
allghosts
(trigger intercept overflow blockmap corruption) - Added another batch of cheats
idclev
,idmus
,gimme
,engage
,shadowcaster
,visit
, andpuke
- These commands all take one argument, without spaces (
idclev 24
for map 24 or e2m4)
- Added
player.give_weapon X
- Added
player.give_ammo ammo_type [ammo_amount]
- If no
ammo_amount
is given, gives the player max ammo
- If no
- Added
player.set_ammo ammo_type ammo_amount
- Added
player.give_power power [duration]
andplayer.remove_power power
- If no
duration
(in tics) is given, the duration is infinite - Adding or removing powers from a different game has undefined behaviour
- Powers:
- 0: Invulnerability
- 1: Berserk
- 2: Partial Invisibility
- 3: Radiation Suit
- 4: Map
- 5: Light Amplification
- 6: Tome of Power
- 7: Flight
- 10: Speed
- If no
- Added
player.give_key X
andplayer.remove_key X
- Added basic feedback to console ("command invalid")
- Unallowed cheats are interpreted as invalid
- Added context validations (some commands are invalid while recording)
- Added support for semicolon-separated commands on one line
- Enabled console in strict mode (most commands are invalid)
- Pressing up & down now moves through the console entry history
- Pressing left & right now adjusts the cursor
- Added support for SDL text input
- You can now type characters like
_
- Existing commands have been converted to snake case
- Non-ascii characters are currently ignored
- You can now type characters like
- Removed
command.lock
/command.unlock
(superseded by build mode)
- Console command subjects:
target.* [args]
commands affect the thing the player is aiming atmobj.* <mobj_index> [args]
commands affect the thing with the given indexboss.* <mobj_index> [args]
commands execute with the boss action flag setplayer.* [args]
commands are executed by the console player
- Added thing manipulation console commands
- Supports
target
andmobj
- Added state manipulation:
*.spawn
*.see
*.pain
*.melee
*.missile
*.death
*.xdeath
*.raise
*.set_state <state_num>
- Added flag manipulation:
- Use named format (e.g.,
LOGRAV+SHOOTABLE
) - Some flag changes may have unforeseen side effects
*.add_flags <flags>
*.remove_flags <flags>
*.set_flags <flags>
- Use named format (e.g.,
- Added
*.set_health <health>
- Added
*.move <x> <y>
- Added
*.set_target <mobj_index>
- Added
*.target_player
- Supports
- Added
spawn <x> <y> <z> <type>
console command - Added
*.activate_line <line_id>
- Supports
player
,target
,mobj
, andboss
- Supports
- Added state manipulation console commands
state.set_tics <state_id> <value>
state.set_misc1 <state_id> <value>
state.set_misc2 <state_id> <value>
state.set_args1 <state_id> <value>
state.set_args2 <state_id> <value>
state.set_args3 <state_id> <value>
state.set_args4 <state_id> <value>
state.set_args5 <state_id> <value>
state.set_args6 <state_id> <value>
state.set_args7 <state_id> <value>
state.set_args8 <state_id> <value>
- Added mobj info manipulation console commands
- Some changes to mobj info require restarting a map
mobjinfo.set_health <type> <value>
mobjinfo.set_radius <type> <value>
mobjinfo.set_height <type> <value>
mobjinfo.set_mass <type> <value>
mobjinfo.set_damage <type> <value>
mobjinfo.set_speed <type> <value>
mobjinfo.set_fast_speed <type> <value>
mobjinfo.set_melee_range <type> <value>
mobjinfo.set_reaction_time <type> <value>
mobjinfo.set_pain_chance <type> <value>
mobjinfo.set_infighting_group <type> <value>
mobjinfo.set_projectile_group <type> <value>
mobjinfo.set_splash_group <type> <value>
- Flags
- Use named format (e.g.,
LOGRAV+SHOOTABLE
) mobjinfo.add_flags <type> <value>
mobjinfo.remove_flags <type> <value>
mobjinfo.set_flags <type> <value>
- Use named format (e.g.,
- Replaced the
idrate
component- Tracks and shows the max values for segs, planes, and sprites
- Color codes the values based on static limits
- These depend on the rendering mode and are not guaranteed
- Uses the hud font rather than hooking into the message widget
- Added 10 script entries to the config file,
dsda_script_*
- Scripts can be bound to keys
- Use
;
to delimit multiple commands - Example:
- Config file:
dsda_script_0 "fly;idclip;iddqd"
- Bind
K
toScript 0
- Pressing
K
will now toggle flight, no clip, and god mode
- Config file:
- Added automatic time suffix for demo file names
- Add
$
to the end of your file name to trigger this behaviour - You may need to escape this character depending on environment (
-record ny01p\$
) - The suffix is only applied for "completed" runs
- By default a run is assumed to be an IL, so a completed run is one that exits the first map only
- To apply this logic for movies, use
-movie X
to set the final map that your movie must end on. For example, a doom 1 episode run would use-movie 8
. A d2all would use-movie 30
- Runs with the same time will have a counter like normal demos (
ny01p597-00002.lmp
)
- The suffix format depends on the type of run:
- IL:
11.97
is1197
1:01.03
is10103
- Movie:
0:09
is009
1:01
is101
2:13:45
is21345
- IL:
- Add
- Added extra error info if splits fail to write
- Added
reborn
to analysis output - Opening the menu pauses demo playback
- The join key now works during demo playback
- The restart key now works during demo playback
- Improved startup time during demo playback
- Disabled mlook in strict mode
- Disabled simple shadows in strict mode
- Disabled idrate stats in strict mode
- Disabled ghosts in strict mode
- Removed mlook data from extended demo footer
- Removed the option to overwrite existing demos
- Added
cap_wipescreen
option in config file (pr+) - Heretic key frames should be safe and reliable now
- Hexen key frames are more stable but not perfect yet
- Added
boom_translucent_sprites
toggle option - Added option to hide top left precise intermission time
- Added option to hide player weapon (e.g., for screenshots)
- Added quake intensity accessibility option (hexen)
- Restored the default secret sound effect from zdoom
- Added looping sounds to reduce clicking in certain level events
- Improved portmidi player (pr+)
- Improved audio buffer slize size calculation (pr+)
- Improved fluidsynth defaults (pr+)
- Added support for 8-bit and 16-bit WAV sfx (rfomin)
- Added tracker to extended hud (unavailable in strict mode)
- line (special)
- sector (special, active, floor height)
- mobj (health)
- player (last damage dealt)
- Added tracker console commands:
tracker.add_line X
/t.al X
: adds line index X to trackertracker.remove_line X
/t.rl X
: removes line index X from trackertracker.add_line_distance X
/t.ald X
: adds distance from line index X to trackertracker.remove_line_distance X
/t.rld X
: removes distance from line index X from trackertracker.add_sector X
/t.as X
: adds sector index X to trackertracker.remove_sector X
/t.rs X
: removes sector index X from trackertracker.add_mobj X
/t.am X
: adds mobj index X to trackertracker.remove_mobj X
/t.rm X
: removes mobj index X from trackertracker.add_player
/t.ap
: adds player to trackertracker.remove_player
/t.rp
: removes player from trackertracker.reset
/t.r
: removes all trackers
- Added tracker command line arguments:
-track_line a [b c ...]
-track_line_distance a [b c ...]
-track_sector a [b c ...]
-track_mobj a [b c ...]
-track_player
- Removed old tas tracers
- Added basic build mode
- Supports doom and heretic fully
- Hexen building is still unreliable due to imperfect key frames
- Added simple brute force
- Added frame-by-frame control of demo playback
- Added support for automap color OPTIONS lump entries
- Added automatic compatibilty correction for the following maps:
- roomblow e1m1 (comp_stairs)
- esp map21 (comp_stairs)
- av map07 (comp_model)
- sin2_9 map02 (comp_vile)
- d2reload map09 (comp_vile)
- amoreupho map02 (comp_vile)
- dbp20_dnd map07 (comp_vile)
- arch map01 (comp_vile)
- ur map06 (comp_vile)
- Consolidated and rearranged many menus
- Protected the select item keybinding from being cleared
- Removed chat setup menu and settings
- Improved resolution sorting (fabian)
- Removed legacy windows launcher
- See the official launcher by PBeGood4 here.
- Removed legacy autoload configuration (use autoload folder)
- Removed ENDOOM / ENDBOOM screen emulation
- Added
ansi_endoom
config setting- Dumps the endoom data to the terminal at exit, using ansi format codes
- Set this to
1
for the CP437 character set - Set this to
2
for the UTF-8 character set
- Support may be added to the official launcher later on
- Added
- Added extra context information in signal crashes
- Added a specific error message when trying to load a udmf map
- Terminal interrupt now exits without a message box on windows
- Cleaned up log output
- Improved mouse stutter correction formula (mikeday0)
- Fixed gamma changes not preserving palette
- Fixed an issue with flat / texture animation syncing
- Fixed erroneous color duplicate detection
- Fixed heretic e3 finale scroll jitter in uncapped fps
- Fixed heretic door landing sound
- Fixed certain hexen sounds having lower than intended priority
- Fixed an issue where fewer than expected raven sounds would play simultaneously
- Fixed a few fluidsynth errors and warnings
- Fixed menu choice settings being updated even after pressing escape
- Fixed "show alive monsters" behaviour when toggling strict mode
- Fixed various cases where rewind did not work
- You can now rewind past a map restart
- You can now rewind past a load event
- Fixed various desyncs caused by mixing manual and automatic key frames
- Fixed an edge case where an automatic key frame could be skipped
- Fixed TNTR Map 30 comp option in MBF21
- Fixed minor memory leak from in-game restart
- Fixed dsda-format playback progress bar (for future demos)
- Fixed top left intermission time not showing right away in heretic
- Fixed iddqd / idclip key bindings in
-dsdademo
mode - Fixed desync from combining key frames and
-recordfromto
- Fixed
-warp
and-skipsec
hanging in certain cases when combined with-recordfromto
- Fixed
-turbo
default handling - Fixed
-turbo
value overflows - Fixed
-warp 0
- Fixed an error in split file parsing
- Fixed umapinfo actor index calculation
- Fixed weapon swap overrides while holding down fire when running out of ammo in cl9+
- Fixed a key frame desync in heretic caused by ambient sounds
- Fixed a key frame desync in hexen caused by animated textures
- Fixed a key frame desync in hexen caused by lightning
- Fixed a key frame desync in hexen caused by poly objects
- Fixed a key frame desync in hexen caused by inconsistent bounding boxes
- Fixed a corrupt save game bug caused by msecnode orphans
- Fixed strafe not applying for the quickstart cache
- Fixed a rare crash caused by out-of-bounds patches in the software renderer
- Fixed turn keys leaking into the mouse cache
- Fixed smooth demo teleport in raven games
- Fixed a case where umapinfo levels would not trigger a levelstat entry
- Fixed map finish log in hexen
- Fixed a umapinfo crash when using endgame in doom 2 without an endpic
- Fixed some issues related to par times in umapinfo
- Fixed the default umapinfo endpic for e2
- Fixed clicking caused by moving planes under certain conditions
- Fixed portmidi volume spikes (ceski)
- Fixed sound attenuation at long distances (decino)
- Fixed distant sounds counting for parallel sfx limit (jackrjli)
- Fixed
iddit
andiddkt
behavior when only one thing exists (jackrjli) - Fixed various umapinfo consistency issues (pr+)
- Fixed sky bleed opengl issue (pr+)
- Fixed midtexture overlap judder (pr+)
- Fixed rare desync in clang builds (pr+)
- Fixed translation table behaviour (pr+)
- Fixed an issue with drawing status bar numbers with offsets (woof)
The way configuration works in dsda-doom has been completely rewritten. This was done to create a generic interface that allows for temporary and permanent changes to every configurable variable. This process required evaluating each variable's presence in the code base and migrating it from the old system to the new one. Since this migration took considerable effort, it was a good excuse to perform an audit on the config file and remove variables that have little value to the port as it currently exists, and to make some semantic changes in a few places. This additionally makes the settings less confusing and overwhelming for new players (though there is still work to do). It also improves predictability in the user experience and reduces the number of bugs that can occur over time. If a setting was removed, it doesn't mean it can't come back - it only means that it did not make the initial cut as I was prioritizing the things that have clear, fundamental importance.
- Deconfigured the following settings (the default value is assumed):
demo_demoex_filename
filter_floor
filter_patch
filter_sprite
filter_threshold
filter_wall
filter_z
getwad_cmdline
gl_allow_detail_textures
gl_arb_multitexture
gl_arb_texture_compression
gl_arb_texture_non_power_of_two
gl_arb_pixel_buffer_object
gl_arb_shader_objects
gl_boom_colormaps
gl_clear
gl_color_mip_levels
gl_colorbuffer_bits
gl_detail_maxdist
gl_depthbuffer_bits
gl_exclusive_fullscreen
gl_ext_arb_vertex_buffer_object
gl_ext_blend_color
gl_ext_framebuffer_object
gl_ext_packed_depth_stencil
gl_ext_texture_filter_anisotropic
gl_finish
gl_fog_color
gl_hires_24bit_colormap
gl_hires_override_pwads
gl_mask_sprite_threshold
gl_motionblur
gl_motionblur_att_a
gl_motionblur_att_b
gl_motionblur_att_c
gl_motionblur_min_angle
gl_motionblur_min_speed
gl_nearclip
gl_patch_filter
gl_shadows
gl_shadows_factor
gl_shadows_maxdist
gl_sky_detail
gl_sprite_blend
gl_sprite_filter
gl_sprite_offset
gl_spriteclip
gl_spriteclip_threshold
gl_sprites_frustum_culling
gl_texture_external_hires
gl_texture_filter
gl_texture_hires_dir
gl_texture_hqresize
gl_texture_hqresize_patches
gl_texture_hqresize_sprites
gl_texture_hqresize_textures
gl_texture_internal_hires
gl_use_display_lists
gl_use_paletted_texture
gl_use_shared_texture_palette
gl_use_stencil
gl_ztrick
health_bar_full_length
health_bar_green
health_bar_red
health_bar_yellow
hud_list_bgon
hud_msg_lines
hudcolor_list
hudcolor_mapstat_time
hudcolor_mapstat_title
hudcolor_mapstat_value
hudcolor_mesg
hudcolor_titl
hudcolor_xyco
interpolation_maxobjects
level_precache
map_always_updates
map_overlay_pos_width
map_overlay_pos_height
map_overlay_pos_x
map_overlay_pos_y
movement_maxviewpitch
mus_extend_volume
patch_edges
render_paperitems
speed_step
sprite_edges
sprites_doom_order
tran_filter_pct
- Changed the following settings:
sound_card
(unused and removed)music_card
(unused and removed)gl_light_ambient
(unused and removed)map_use_multisamling
(corrected tomap_use_multisampling
)health_red
(changed tohud_health_red
)health_yellow
(changed tohud_health_yellow
)health_green
(changed tohud_health_green
)ammo_red
(changed tohud_ammo_red
)ammo_yellow
(changed tohud_ammo_yellow
)quickstart_window_ms
(changed tostartup_delay_ms
)movement_mousenovert
(replaced bymovement_vertmouse
)render_multisampling
(changed bygl_render_multisampling
)render_fov
(changed bygl_render_fov
)useglgamma
(changed bygl_usegamma
)automapmode
(split intoautomap_follow
, etc)movement_mouselook
(replaced byallow_freelook
)samplerate
(replaced bysnd_samplerate
)slice_samplecount
(replaced bysnd_samplecount
)
- Rearranged and consolidated sections in the config file
- Added console commands for editing config variables (see console section above)
- Added command line arguments for editing config variables (see above)