Commit graph

10583 commits

Author SHA1 Message Date
Kp 3e2d47f879 Track mission type correctly when loading mission list
- In D2X, do not accept Descent2-specific directives from Descent 1
  `.msn` files.
- Set the descent_version field correctly in the `mle`.  Previously,
  `.msn` was set to descent1 and all `.mn2` were set to descent2,
  regardless of whether the `.mn2` used `name`, `xname`, `zname`, or
  `!name`.
- Avoid rewinding the file and rereading the same line while checking
  the possible name types.
- Avoid recomputing end-of-string when it is already known.
- Avoid re-reading the mission file's version when the mission is
  chosen.  Instead, use the version that was recorded when the mission
  was loaded into the mission list.  This also fixes a bug where Descent
  1 `.msn` files would be classified as descent_version_type::descent2
  since both use `name =`, but that string has a different meaning
  depending on whether the file is `.msn` or `.mn2`.
2020-01-18 21:57:39 +00:00
Kp 3d09f4544b Remove macro Current_mission_filename 2020-01-18 21:57:39 +00:00
Kp 99356e0cdb Use enum for include/exclude anarchy mode 2020-01-18 21:57:39 +00:00
Kp d879fc7f6b Convert file selection to use array<char, N>, not char[N]
Eliminate some uses of strncpy as part of the conversion.
2020-01-18 21:57:39 +00:00
Kp 47a3df9fab Clean invalid robot joint data on load
Some levels have robots with n_joints=0 and an invalid offset.  If the
number of joints is zero, the offset is irrelevant.  Reset it to 0, so
that a later call to partial_range will not trap.

Reported-by: kakhome1 <https://github.com/dxx-rebirth/dxx-rebirth/issues/485>
2020-01-08 04:32:39 +00:00
Kp b0185e44ad Fix displacing players when synthesizing player start positions
TORRaven reported an issue where `Descent: First Strike` level 4 in
cooperative games would cause the player 0 ship to be unable to move.
On investigation, this occurs when the host has enabled extra player
starts, and the resulting synthesis of new player start positions moves
the player 0 start out of its origin segment.  The physics engine reacts
poorly to this situation, causing the object to be unable to move and to
report HIT_BAD_P0 in debug builds.  Add a test to cancel the
displacement if get_seg_masks reports that the center point would move
outside the origin segment.  More clever logic might be appropriate, but
since this is the first report of problems with the feature since its
introduction in 5a64ee5132, this commit just eliminates the
immediate problem.  Possible future improvements if the existing
displacement causes collisions:

- Reduce the magnitude of the existing displacement, instead of
  abandoning it entirely.
- Move the player start to the segment's center before displacing it.
- Add logic to move the player into a nearby logically connected
  segment.

Reported-by: TORRaven <https://github.com/dxx-rebirth/dxx-rebirth/issues/483>
Fixes: 5a64ee5132 ("Add experimental support for larger cooperative games")
2020-01-06 01:25:35 +00:00
Kp ffb4240710 Report failure when a mission is not found in the mission list
AlumiuN reported a crash when a save game is unable to load the
underlying mission.  The crash is because the game proceeds to load the
savegame onto whatever level was loaded before this mission, which will
usually result in fatal inconsistencies in the data.

This commit does not fix the cause of the inability to load the mission,
but instead fixes the logic so that the user gets a reasonable error
message advising that the mission failed to load.  This was
unintentionally broken in db80a88ad2 when the sense of the return
value was inverted, and the fallthrough case was not adjusted.  This
impacts all uses of `load_mission_by_name`, though in practice restoring
from a savegame is the most obvious way to hit the problem.

Reported-by: AlumiuN <https://github.com/dxx-rebirth/dxx-rebirth/issues/486> (indirectly)
Fixes: db80a88ad2 ("Improve error message on failure to load mission")
2020-01-06 01:25:35 +00:00
Kp 59b94a4dcb Call arch_close before atexit hooks begin
arch_close calls various library shutdown routines, some of which may
not be in good order after atexit hooks begin executing.  Call it before
returning from main, so that the libraries are still fully initialized.
2020-01-06 01:25:35 +00:00
Kp 8fcbb893b7 Rewrite guessed git commit: s/-/_/
In exported archives, the commit will be
`archive-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` for some hexadecimal
characters `x`.  `-` is not valid in a C identifier, but the commit
needs to be a valid C identifier.  Change `-` to `_` so that it will be
valid.

Reported-by: andrew-strong <https://github.com/dxx-rebirth/dxx-rebirth/issues/484>
Fixes: fafa07a456 ("Instruct git-archive to insert a commit ID in SConstruct")
2020-01-04 22:24:25 +00:00
SanskritFritz 3aaac8922e
Merge c62e0d322c into fafa07a456 2019-12-31 13:23:30 -05:00
SanskritFritz c62e0d322c Version 20191227 2019-12-31 13:10:12 +01:00
SanskritFritz 4fe2d8f35f Minor fixes in the Archlinux PKGBUILDs. 2019-12-31 12:31:04 +01:00
SanskritFritz 40f344125e Archlinux PKGBUILD fixes. 2019-12-30 00:15:33 +01:00
Kp fafa07a456 Instruct git-archive to insert a commit ID in SConstruct 2019-12-29 22:24:20 +00:00
Kp 4a47e27f08 Apply .decode() to various objects that are embedded in vers_id
Python 2 byte sequences look best when not decoded.  Python 3 byte
sequences look best when decoded.  As Python 2 is near end of life and
most distributions have moved on to Python 3, switch to the style that
looks better in Python 3.  The code still runs in Python 2, but produces
a u'' wrapper around the text because the type is `unicode` in Python 2,
but `str` in Python 3.  This change eliminates the b'' wrapper around
the text in Python 3.
2019-12-29 22:24:20 +00:00
Kp e2a108bbf5 Use base32 instead of base64+extended-identifiers
Extended identifiers have proved to cause more problems than they solve.
Switch to base32 which, while less commonly supported, is available in
Python and uses an alphabet that is almost a subset of the C identifier
alphabet.  Padding characters are still a problem, but can be remapped
to a valid C identifier that is not a valid base32 character.
2019-12-29 22:24:20 +00:00
Kp e20152da11 Remove -Wredundant-decls from the default options
This is primarily a developer option, and it conflicts with some Windows
toolchains that choke on their own headers.  Remove it from the default
options, and rely on developers to set it locally.

Reported-by: AlumiuN <https://github.com/dxx-rebirth/dxx-rebirth/issues/473#issuecomment-554935866>
2019-12-28 21:26:37 +00:00
Kp 1d6d5234ea Add documentation warning not to use paths with spaces
Rebirth handles this as best it can, but some prerequisites print paths
without quoting.  Advise users to avoid the problem by avoiding paths
with embedded spaces.
2019-12-28 21:26:37 +00:00
Kp ff42ee719f Improve install documentation regarding header/library paths 2019-12-28 21:26:37 +00:00
Kp 05a54ef7c1 Merge pull #479 into master 2019-12-27 02:08:58 +00:00
Kp ce906560ab Use susegment for segment2_read 2019-12-27 02:02:23 +00:00
Kp 34366d84c2 Use susegment for dumpmine iteration 2019-12-27 02:02:23 +00:00
Kp c9b1b5b1ec Use susegment for WALL_IS_DOORWAY 2019-12-27 02:02:23 +00:00
ziplantil 398d9013ef Merge remote-tracking branch 'upstream/master' into vertigo-exit-fix 2019-12-24 01:49:11 +02:00
Kp dfae1c7203 Split object_move_all for game/endlevel
endlevel wants to freeze the console player's last in-mine position.
Instead of copying the position out and back, refactor the flow to let
endlevel skip the update of the position.
2019-12-22 05:34:08 +00:00
Kp 36873ec12d Simplify maybe_ai_do_actual_firing_stuff
The second parameter always points to a substructure in the first
parameter.  Remove the second parameter.
2019-12-22 05:34:08 +00:00
Kp 5dfd62c4f6 Use susegment for references introduced by valptridx conversion 2019-12-22 05:34:08 +00:00
Kp c93e7f44c3 Move object::last_pos to LevelUniqueObjectState
Only the console player's last position needs to be remembered across
frames.  Copy the console player's position out before processsing
object movement.  For all other objects, retain a temporary for use by
the position recovery code.
2019-12-22 05:34:08 +00:00
Kp 30091902af Simplify valptridx types where possible
Switch valptridx::ptr to a reference type.
Switch valptridx::ptridx to a reference type or to ::ptr.

Fix up uses of operator-> accordingly.
2019-12-22 05:34:08 +00:00
Kp c3265f6b90 Convert segment & to susegment where possible 2019-12-22 05:34:08 +00:00
Kp 00d09b2bdb Move free_object_slots predicates to dcx 2019-12-22 05:34:08 +00:00
Kp cc144647b5 Make kconfig.ui-table.cpp compile when freestanding
Special macros are used to pass information to
`generate-kconfig-udlr.py`.  Provide default definitions for these
macros in `kconfig.ui-table.cpp`, and override them in the one build
where they need to be special.  This enables `kconfig.ui-table.cpp` to
build cleanly when invoked from the command line in the compilation
database.
2019-12-22 05:34:08 +00:00
Kp f26d91bbe2 Change kconfig type/state fields to enums 2019-12-22 05:34:08 +00:00
Kp d2f2f98850 Use symbolic STATE_NONE for kconfig entries with no state bit 2019-12-22 05:34:08 +00:00
Kp 3eedd9234e Add susegment to pair references to shared_segment/unique_segment
Various functions need to access both `shared_segment` and
`unique_segment` data.  Using `segment &` for this blocks eliminating
the `segment` type.  Add `susegment` and type aliases to it.
`susegment` records a reference to a `shared_segment` and a
`unique_segment` together, so that users cannot accidentally mismatch
`shared_segment` #1 with `unique_segment` #2 when passing references
down to a function which needs both `shared_segment` and
`unique_segment`.
2019-12-22 05:34:08 +00:00
ziplantil 4cb06c43f7 revert to old load behavior when emulating D1 2019-12-21 23:42:04 +02:00
ziplantil e5c7d47199 adjust exit bitmap indexes for hatch models 2019-12-19 15:33:58 +02:00
ziplantil 0a21784aa7 some changes as per comments in #479 2019-12-18 13:44:43 +02:00
Kp 065bcb3da8 Escape more characters when quoting for the command line
Inserting the compile command for vers_id.cpp into a compilation
database does not quote a string with embedded whitespace, although this
string is correctly quoted when used to invoke a shell.  Remove
whitespace from the character whitelist, so that it is always escaped.
2019-12-17 05:01:38 +00:00
Kp b037cd556f Explicitly default valptridx<T>::strong_typedef
gcc considers strong_typedef to be POD both with and without the
explicit default.  clang considers it to be POD only if the constructor
is explicitly defaulted.
2019-12-17 05:01:38 +00:00
Kp 0d9b488be4 Support building valptridx without slice checking
For correctness, valptridx::ptridx instances must not be sliced down to
their component ::ptr or ::idx base classes.  Previously, this was done
with a dummy template parameter to ensure that a bare ::idx had a
different type than the idx base of a ::ptridx.  This extra distinction
complicates analysis of the code, and is not needed when the code is
already correct.  Add the ability to build without slice checking.
2019-12-16 01:57:00 +00:00
Kp 6b637e856b Copy last_hitobj to a temporary before passing it to reset_hitobj
obj_rw is a packed structure, so configurations where reset_hitobj takes
its parameter by reference (or where its parameter requires passing
through a constructor that takes its input by reference) fail because
gcc refuses to bind a reference to a member of a packed structure.  Copy
the member variable into a local, which gcc will bind.
2019-12-16 01:56:59 +00:00
Kp 3f74084c0f Include segment.h for terrain.cpp to handle over-eager instantiation
In some configurations, gcc (but not clang) instantiate
valptridx<segment>::array_managed_type too eagerly, then fail if the
sizeof(segment) is unknown.  Include segment.h so that the size is
available.
2019-12-16 01:56:59 +00:00
Kp 219a3fcd11 Move laser_info::get_last_hitobj out of line
It is only used in two places, neither of which are hot paths.  Move it
out of line so that other files do not need to parse it.
2019-12-16 01:56:59 +00:00
Kp 28d9358b00 Expand local aliases to their target variables
This makes the code easier to read, at the price of a bit of churn.
2019-12-16 01:56:59 +00:00
Kp 148fe47d82 Split checked/unchecked valptridx converting constructor logic
This allows the caller to omit filename/line information for calls that
will never need it.
2019-12-16 01:56:59 +00:00
Kp 5950485a6c Fix ptridx move constructor delegating to ptr copy constructor
Fix a bug where the ptridx converting move constructor delegated to the
ptr converting copy constructor, since the ptr copy constructor had
filename/line arguments, the ptr move constructor did not, and the
ptridx move constructor always passed filename/line.
2019-12-16 01:56:59 +00:00
ziplantil 341c622e69 that verbose one is no longer needed 2019-12-12 17:42:53 +02:00
ziplantil ed88836e9d make sure there is enough space to load exit data 2019-12-12 17:34:42 +02:00
ziplantil cb2b844af3 do not free extra models when loading exit stuff on D2 2019-12-12 17:25:11 +02:00