Commit graph

12471 commits

Author SHA1 Message Date
Kp 5534e10d74 Add further comments around the laser damage penalty logic
Due to original game bugs, which Rebirth intentionally replicates in
order to match the balance of the original game, the logic looks odd.
Add comments explaining that the oddity is intentional.
2023-04-22 15:02:12 +00:00
Kp c98b30ca23 Reduce console colors to in-range values
`gr_find_closest_color` takes inputs in the range [0, 63].  Clamp input
values to fit in that range.
2023-04-22 14:56:35 +00:00
Kp e55bd77472 Document type of gr_find_closest_color_15bpp input 2023-04-22 14:56:35 +00:00
Kp 44086eb539 Remove unused macro BM_RGB 2023-04-22 14:56:35 +00:00
AlumiuN d93787d942 Fix inaccurate handling of D2 super laser damage with quad-lasers (as D2 was bugged and didn't apply the intended penalty to them) 2023-04-21 12:16:54 +12:00
Kp 697ef5c32a Use std::array for last_palette_loaded_pig 2023-04-15 19:11:14 +00:00
Kp 0b066d23b4 Use enum class for load_palette arguments 2023-04-15 19:11:14 +00:00
Kp f10a79f157 Pass menu_filename to nm_draw_background1 2023-04-15 19:11:14 +00:00
Kp fcca2693f9 Use uint8_t for movie::paused 2023-04-15 19:11:14 +00:00
Kp c49598d5f5 Merge commit 'clang-warnings' into master 2023-04-08 20:12:32 +00:00
Kp 51bb01f9f4 Merge commit 'sdl2-audio-Windows' into master 2023-04-08 20:12:07 +00:00
Kp a4be0001e0 Merge commit 'physfsrwops_seek-sdl2' into master 2023-04-08 20:11:38 +00:00
Kp 8c718335b8 Merge commit 'windows-shift-alt-f4' into master 2023-04-08 20:10:52 +00:00
Kreeblah 980c03b9ae
Fix Apple Clang errors and warnings 2023-04-06 16:42:49 -07:00
Arne de Bruijn 0de6290cd6 Make sure SDL2 uses specified audio format
Use extended open function Mix_OpenAudioDevice to set allowed_changes
to 0.
Prevents higher pitched sound on Windows.
2023-04-06 19:27:43 +02:00
Arne de Bruijn 4c371734b5 Fix physfsrwops_seek for SDL2
SEEK_CUR and SEEK_END were not handled correctly.
2023-04-06 19:23:02 +02:00
Arne de Bruijn 4832fc319e Support Alt+Shift+F4 with SDL2 on Windows 2023-04-05 19:16:16 +02:00
Kp ae3f4ab533 Return computed filename from removeext 2023-04-02 10:15:20 +00:00
Kp 488278ddfe Fix build for sdlimage=0
Fixes: 2ded2b2d0c ("Make kmatrix background optional")
2023-03-25 12:41:29 +00:00
Kp 841ebcc11d Merge commit 'ppc-build-template' into master 2023-03-23 01:14:37 +00:00
Kp b7e96e0dac Reduce list copying in environment overrides
Prefer creating a copy explicitly, then appending or extending it as
needed, rather than using `__add__` and allowing it to duplicate the
sequence.  `__add__` has two undesirable properties in this script:

- Using `A + B + C` can create multiple temporaries unnecessarily.
- `A + B` typically requires that `A` and `B` be the same type of
  sequence, but this script does not need to require that.  Using an
  explicit copy+extend allows `A` and `B` to be different types of
  sequence.

Make use of the latter property to turn some member variables that were
`list` for the sake of `__add__`'s type requirement into `tuple`, since
they are never rewritten.
2023-03-23 01:14:37 +00:00
Kp 9b9a9712e4 Improve output in compile_commands.json
The link line is not used by clang, but is recorded in the hope that it
is useful for other tools.  Stabilize the output by requesting the
`str`, not the `repr`, of the input nodes.  `repr` in scons-4.4
generates a bare Python repr, rather than any useful text.  In addition
to not being useful, the bare repr exposes the memory address of the
`SCons.Node.FS.File`, which can vary from run to run even with no
changes to the code, causing needless rebuilds of the compilation
database.  The `str` of a node is its filename, which is stable across
runs.
2023-03-23 01:14:37 +00:00
Arne de Bruijn 769164a55b Fix SConstruct for scons 4.5.0+
env['CPPDEFINES'] may return a deque object in scons 4.5.0+ (see
SCons/scons#4321).
Explicitly convert it to a list where needed.

Tested with scons 4.4.0, 4.5.0, 4.5.1 and 4.5.2.
2023-03-22 10:52:33 +01:00
Kp 189ac23f61 Prefer V.copy over V[:] for creating shallow copies of sequences
According to `timeit`, this is slightly faster.  Also, `.copy()` will
work when `V` is a `collections.deque`, but `[:]` fails in that case.

SCons issue https://github.com/SCons/scons/issues/3876 (first released
in SCons 4.5.0) changed the storage of the `CPPDEFINES` variable from a
`list` to a `deque`, which broke use of `env.get(name, [])[:]`, since
`deque` cannot copy itself using `[:]`.  Switch to using `.copy()` to
obtain a shallow copy.

```
>>> # timing comparison
>>> timeit.timeit(stmt='a.copy()', setup='a = [1, 2, 3, 4]')
0.05652548000216484
>>> timeit.timeit(stmt='a[:]', setup='a = [1, 2, 3, 4]')
0.06801111809909344
```

```
>>> # deque cannot copy using slice notation
>>> a = [1, 2, 3]
>>> from collections import deque
>>> b = deque([1, 2, 3])
>>> a.copy()
[1, 2, 3]
>>> a[:]
[1, 2, 3]
>>> b.copy()
deque([1, 2, 3])
>>> b[:]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence index must be integer, not 'slice'
```

Reported-by: Kreeblah <https://github.com/dxx-rebirth/dxx-rebirth/issues/704>
2023-03-19 23:39:45 +00:00
Kp 5a5f10ff4f Print shell subcommands in reusable form
Switch from showing the Python tuple, which is unambiguous but hard to
run at a prompt, to showing the output of `shlex.join`, which is
normally correct for use at a shell prompt, and should still be
reasonably unambiguous.
2023-03-18 19:23:17 +00:00
Kp 4580811252 Use Python f-strings for SConstruct formatting 2023-03-18 19:23:17 +00:00
Kp 89e89c8afb Move global constants from mglobal.cpp to cglobal.cpp
These constants can be useful in unit tests, so move them out to their
own file.
2023-03-12 10:40:25 +00:00
Kp 6add766bb3 Generate build failure string in one step 2023-03-11 19:02:48 +00:00
Kp 2c25c15b74 Remove obsolete snapshot ebuild 2023-03-04 13:03:28 +00:00
Kp b5a8f72e6e Add python3_11 to PYTHON_COMPAT 2023-03-04 13:03:28 +00:00
Kp 114cdef1d2 Remove unused argument to parse_bmhd
clang-15 warns for a write-only parameter.  The parameter is only used
in a debug print, which has been commented out since the code was
originally imported.  Remove the parameter and the commented print.
2023-02-26 18:42:12 +00:00
pkubaj d4f8a7c054
Include ppc* in the build fail template 2023-02-21 13:46:50 +00:00
Kp 452a50f80b Move WID_* constants into wall_is_doorway_result
This allows them to be reported symbolically in a debugger when a
variable is of type wall_is_doorway_result.
2023-02-18 14:30:59 +00:00
Kp 56d1814489 Add alternative mixer resamplers
SDL2_mixer changed how it upsamples sounds, and some users complained
about the difference.  Add an internal resampler that emulates how
SDL_mixer upsamples sounds.  Since all Rebirth upsampling is an integer
upsample (11Khz -> 44KHz, 22KHz -> 44Khz), this internal emulation is
considerably simpler than a general purpose resampler.

With this commit, the builder can choose which resamplers to enable.
The available resamplers are chosen by preprocessor directive, and
presently do not have an SConstruct flag.  For each resampler, if no
choice is made, then the resampler will be enabled if it is reasonable.
At least one of the resamplers must be enabled, or the build will fail
with a `#error` message.

The user may choose at program start time which of the available
resamplers to use for that execution of the program, through passing one
of the command line arguments:
- `-sdlmixer-resampler=sdl-native`
- `-sdlmixer-resampler=emulate-sdl1`
- `-sdlmixer-resampler=emulate-soundblaster16`

Runtime switching is not supported.  If the user does not choose, then
the first enabled resampler from the list below will be used.  The
available resamplers are:
- sdl_native (DXX_FEATURE_EXTERNAL_RESAMPLER_SDL_NATIVE) - delegates to
  SDL_mixer / SDL2_mixer, the way Rebirth has historically done.
- emulate_sdl1 (DXX_FEATURE_INTERNAL_RESAMPLER_EMULATE_SDL1) - an
  internal resampler that emulates how SDL_mixer worked.  This should be
  equivalent to sdl_native when using SDL_mixer, so by default it is
  enabled when Rebirth is built to use SDL2_mixer and disabled when
  Rebirth is built to use SDL_mixer.  It can still be enabled manually
  even when building for SDL_mixer, but this does not seem likely to be
  useful.
- emulate_soundblaster16
  (DXX_FEATURE_INTERNAL_RESAMPLER_EMULATE_SOUNDBLASTER16) - an internal
  resampler submitted by @raptor in
  5165efbc46.  Some users reported audio
  quality issues with this resampler, so it is not presently the
  default.
2023-02-11 10:50:21 +00:00
Kp f2acbf443a Move digi_mixer_init to namespace dcx 2023-02-04 19:21:25 +00:00
Kp 15d54d4d6d Precompute ui_file_browser::spaces 2023-02-04 19:21:25 +00:00
Kp f0f669e8ab Use sentinel for null_sentinel_iterator end() 2023-02-04 19:21:25 +00:00
Kp 3aef1ee569 Tighten PHYSFSX_counted_list_template reset rules
Prefer move-assignment over use of reset() so that the count cannot go
out of sync from the list.

Shorten lifetime of some lists.
2023-02-04 19:21:25 +00:00
Kp 0d97683cee Construct PHYSFSX_counted_list with the correct count
Remove the method for adjusting the count later, and instead store the
list in a PHYSFSX_uncounted_list until the count is available, then move
it into the PHYSFSX_counted_list along with the count.  This prevents
using a list with its count unset.
2023-02-04 19:21:25 +00:00
Kp 87ab4f3360 Store filename_list in ui_file_browser
Store the list directly instead of a reference to a local variable in
the caller's scope.  No compiler has warned about this yet, but gcc-12
warned about a similar construct in newmenu_do2, so fix this up before
it becomes a problem.
2023-02-04 19:21:25 +00:00
Kp 0456e8f50b Remove #if DXX_USE_EDITOR from editor-only file.cpp
This file is not compiled when !DXX_USE_EDITOR, so the preprocessor
guard is unnecessary.
2023-02-04 19:21:25 +00:00
Kp da90b6801e Move JukeboxSongs.num_songs into local scope
It is only needed briefly during loading, so do not store it in a global
variable.
2023-02-04 19:21:25 +00:00
Kp 1f5e9808e5 Pass std::span to rotate_list 2023-02-04 19:21:25 +00:00
Kp a582b4ee82 Remove write-only g3d_interp_outline 2023-02-04 19:21:25 +00:00
Kp 805f3126db Simplify test for support of explicitly deleted functions
Support for explicitly deleted functions has been mandatory for a long
time.  Historically, this was handled through a special SConf test to
work around a clang-3.4 bug that warned when a deleted function had
named parameters.  Support for clang-3.4 was dropped some time ago, and
newer versions do not require this workaround.  Simplify the SConf
script by declaring explicitly deleted functions a required feature, so
that they can be tested as a group with the other required features.
2023-02-04 19:21:25 +00:00
Kp 580fe803f0 Make tmapinfo_flags a complete type
For the same reason as 26ab08d55f884ae77ba0e1d400a2d6a92d1c0831: gdb
refuses to fully show an instance of an enum that has incomplete type,
even when the size is known.
2023-01-29 20:42:03 +00:00
Kp 0e1219a66b Factor out texture setup to get_texture 2023-01-29 20:42:03 +00:00
Kp c5d15d5c6e Inline the single use of MAX_POLYGON_VECS 2023-01-29 20:42:03 +00:00
Kp 4f37720882 Use enumerated_array for ambient sound depth tracking 2023-01-29 20:42:03 +00:00
Kp fecc1f102f Use enum class for clwallnum_t 2023-01-29 20:42:03 +00:00