Commit graph

5273 commits

Author SHA1 Message Date
Kp 66d588c624 Use bitmap name in place for non-animated bitmaps 2023-01-07 22:17:31 +00:00
Kp f9ac799d88 Detect escort goal even for silent powerups 2023-01-07 22:17:31 +00:00
Kp 3a4927ddb1 Switch do_morph_frame to enumerate(zip())
Use structured bindings instead of manual decomposition.  This makes the
code more consistent with other zip sites.
2023-01-07 22:17:31 +00:00
Kp e0478f8111 Use if constexpr to guard calls to align_polygon_model_data
This allows the compiler to see and perform basic checks on the call
even in builds with `DXX_WORDS_NEED_ALIGNMENT == 0`.

Also, fix a missing address-of operator in one invocation of
`align_polygon_model_data`.

Reported-by: Brunnis <https://github.com/dxx-rebirth/dxx-rebirth/issues/687> (missing address-of operator)
Fixes: 43e1c841f0 ("Pass polymodel& to polymodel_read")
2022-12-31 16:21:47 +00:00
Kp 199232b10e Pass ranges::subrange to glitz_menu 2022-12-31 16:21:47 +00:00
Kp 5eff03dd88 Store ranges::subrange in newmenu_layout 2022-12-31 16:21:47 +00:00
Kp 3bba60d1b7 Pass ranges::subrange to multi_all_players_alive 2022-12-31 16:21:47 +00:00
Kp 86515f6903 Pass ranges::subrange to multi_interactive_deny_save_game 2022-12-31 16:21:47 +00:00
Kp 0decae2328 Pass ranges::subrange to multi_common_deny_save_game 2022-12-31 16:21:47 +00:00
Kp c428fdee0f Pass ranges::subrange to bitmap_index_read_n 2022-12-31 16:21:47 +00:00
Kp 1e45b0b70b Factor out computing object light from color
Use helper functions so that the computed value can be `const`.
2022-12-31 16:21:47 +00:00
Kp f804d98825 Make enumerate inherit ranges::subrange directly
Remove the intermediate layer of partial_range_t.
2022-12-31 16:21:47 +00:00
Kp 41184654e8 Pass ranges::subrange to reactor_read_n 2022-12-31 16:21:47 +00:00
Kp ca913240d0 Return ranges::subrange from robot_get_anim_state 2022-12-31 16:21:47 +00:00
Kp e3553586c1 Use enum class for bitmap_index 2022-12-31 16:21:47 +00:00
Kp 0fd5ea2972 Inline PHYSFSX_fseek(..., SEEK_SET)
When using SEEK_SET, the call passed through to PhysFS after truncating
the offset.  Call PhysFS directly in this case, bypassing the wrapper.
2022-12-18 23:10:39 +00:00
Kp ae4b3b4c87 Make window_send_event a method of window
Switch from using a macro to capture __FILE__,__LINE__ to using
__builtin_FILE(),__builtin_LINE().  Make the event an explicit argument,
instead of assuming it is a variable named `event`.  Move the
implementation out of line.
2022-12-18 23:10:39 +00:00
Kp 64eae78dcc Prefer direct initialization for bitmap_index 2022-12-18 18:32:14 +00:00
Kp 4257391a47 Use enum class for polygon_model_index 2022-12-18 18:32:14 +00:00
Kp 8d691aa080 Pass std::span to piggy_is_substitutable_bitmap 2022-12-17 13:16:28 +00:00
Kp eda958280e Return DiskBitmapHeader from DiskBitmapHeader_read
This allows the structure to be const in the caller.
2022-12-17 13:16:28 +00:00
Kp 385277b833 Advise gcc that std::span is not std::dynamic_extent long
When building with -D_GLIBCXX_DEBUG, gcc-11 warns:

```
In file included from /usr/include/string.h:535,
                 from similar/main/net_udp.cpp:14:
In function 'void* memcpy(void*, const void*, size_t)',
    inlined from 'virtual void d2x::multi::udp::dispatch_table::send_data_direct(std::span<const unsigned char>, dcx::playernum_t, int) const' at similar/main/net_udp.cpp:5731:8:
/usr/include/bits/string_fortified.h:29:33: error: 'void* __builtin_memcpy(void*, const void*, long unsigned int)' specified bound 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Werror=stringop-overflow=]
   29 |   return __builtin___memcpy_chk (__dest, __src, __len,
      |          ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
   30 |                  __glibc_objsize0 (__dest));
      |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~
```

The warning is invalid: the destination buffer is not PTRDIFF_MAX bytes
long, and the requested length is not SIZE_MAX bytes.  Both claimed
lengths are the result of excessively cautious value range tracking.

Eliminate the warning by adding a `cf_assert` to assure gcc that
`data.size() != std::dynamic_extent`.
2022-12-17 13:16:28 +00:00
Kp cba14b91e4 Pass std::span to piggy_find_sound 2022-12-17 13:16:28 +00:00
Kp 102d19ec28 Pass std::span to piggy_find_bitmap 2022-12-17 13:16:28 +00:00
Kp 8bd94c4f5c Pass std::span to piggy_register_sound 2022-12-17 13:16:28 +00:00
Kp eefa61e1fb Return bitmap name from get_message_name 2022-12-17 13:16:28 +00:00
Kp 030897e911 Avoid temporary copy when generating abmname
Use printf `%.*s` with an appropriate length, instead of copying the
appropriate number of bytes into a temporary, null terminating it, and
relying on the terminator for printf.
2022-12-17 13:16:28 +00:00
Kp 5f39ffc2f5 Use enum class for sound_channel 2022-12-17 13:16:28 +00:00
Kp 57a9c384e8 Return color from redraw_messagestream
This avoids requiring it to be in memory.
2022-12-10 18:09:54 +00:00
Kp afb7406127 Pass std::span to callsign_t::copy_lower 2022-12-10 18:09:54 +00:00
Kp 1b92a56648 Use unique_ptr to manage digi_sound allocation 2022-12-10 18:09:54 +00:00
Kp dbab38b8ea Centralize and defer robot gun point setup
Use a std::optional<vms_vector> to store the gun point and a flag of
whether the gun point is valid.  This allows deferring computation of
the gun point until it is needed, and avoids recomputing it once it has
been computed.  This also fixes an obscure case where a robot with its
gun positioned at 0,0,0 would be incorrectly considered too far away.
2022-12-02 04:09:20 +00:00
Kp 39b009744e Remove unnecessary reload of robptr 2022-12-02 04:09:20 +00:00
Kp d1b55a15ac Pass robot_info to move_towards_segment_center 2022-12-02 04:09:20 +00:00
Kp c3eda53fb0 Pass robot_info to move_towards_vector 2022-12-02 04:09:20 +00:00
Arne de Bruijn cce8acf908 Make sure gun point is calculated when firing
Gun point calculation is skipped in do_ai_frame if
dist_to_player >= 200 but a bot might still fire a homing weapon
if it is further away.
Add extra call to calc_gun_point in ai_do_actual_firing_stuff when
a homing weapon is fired without visibility to make sure a valid
gun point is used.

This is an original game bug, shown for example in this video:
https://www.youtube.com/watch?v=2dP51znGh7o
2022-11-28 00:08:43 +01:00
Kp 9086327de1 Fix generate-kconfig-udlr.py for Python3
Python3 does not expose an attribute `message` on `Exception`.  However,
`Exception` can implicitly convert to a string, and produces the
message.  Switch to that.
2022-11-13 21:17:23 +00:00
Kp 211d6167b2 Inline object_create_muzzle_flash into callers
object_create_muzzle_flash delegated to
object_create_explosion_without_damage, adding one parameter that
callers ought to provide instead.  Inline object_create_muzzle_flash into
callers and change them to provide `Vclip`.
2022-11-13 21:17:23 +00:00
Kp 30500cbaa8 Add inttypes.h to bmread.cpp for PRIuFAST32
bmread.cpp uses PRIuFAST32, so it should include inttypes.h to get the
definition of this macro.  Some platforms happened to include inttypes.h
as an implementation detail, but for portability, it needs to be
included explicitly in this file.

Reported-by: AlumiuN <https://github.com/dxx-rebirth/dxx-rebirth/issues/678#issuecomment-1304962448>
2022-11-10 02:04:09 +00:00
Kp cb53ce8c0e Replace strcpy with std::move in multi_message_input_sub
The documentation for `strcpy` states in part:

```
The strings may not overlap
```

However, for this use, the strings do overlap.  Switch to `std::move`,
which is documented to handle this so long as the destination iterator
is outside the source range, which it will be for this use.
2022-11-08 02:55:09 +00:00
Kp 1e093bacae Preserve trailing space in ": " in a long message
Previously, the `strcpy` would preserve the `:`, but overwrite the ` `.
This is probably not what the player wants, since the first `": "` in
the line can direct a message to specific recipients, but a bare `":"`
will not.  As a result, the old system would send the first part
privately, but then mangle the directed-message prefix such that
subsequent parts were sent publicly.  Switch to preserve the trailing
space so that the `": "` retains its special meaning in subsequent
messages.
2022-11-08 02:55:09 +00:00
Kp 1a2ca399b3 Use iterators to examine Network_message 2022-11-08 02:55:08 +00:00
Kp ad8f75b0dd Cache Player_num result in multi_message_input_sub
Save a reference to the appropriate multi_sending_message for reuse
later.
2022-11-08 02:55:08 +00:00
Kp 98cb7bf923 Use size_t for multi_message_index
As an index, it can never be negative.
2022-11-08 02:55:08 +00:00
Kp e2c61f6aee Pass context to init_morphs 2022-11-07 01:59:34 +00:00
Kp 70505e69d0 Use enum class for delta_light_index 2022-11-07 01:59:34 +00:00
Kp e9b4711d87 Inline object_create_explosion into callers
`object_create_explosion` delegated to
`object_create_explosion_without_damage`, adding one parameter that
callers ought to provide instead.  Inline `object_create_explosion` into
callers and change them to provide `Vclip`.
2022-11-07 01:59:34 +00:00
Kp 8d329c0f54 Pass std::span to net_udp_process_game_info_light 2022-11-07 01:59:34 +00:00
Kp b8cc509cbe Fix tracker upid values
Commit 0512ea8d65 changed the value of the tracker_ upid codes when
they were converted from `#define` statements with explicit values to
`enum` members with implicit values.  The tracker program is maintained
separately, and continues to use the old values, so games with this
commit use the wrong numbers when requesting service from the tracker.
Switch the upid codes back to their previous values, and add a warning
comment about the special compatibility concerns for tracker upid
codes, relative to game-to-game codes.

Fixes: 0512ea8d65 ("Use enum class for upid")
2022-11-07 01:59:34 +00:00
Kp 16c86edabc Fix cockpit switch in SDL-only build
The cockpit graphic is not scaled in the SDL build, so it is only
meaningful to show when the game window dimensions match the graphic's
dimensions.  Prior to 4a8d7c7574, this worked, because the
`initial_large_game_screen_mode` was the same as the graphic's
dimensions.  That commit changed `initial_large_game_screen_mode` to
prefer a larger screen resolution for new users.  It should have
retained the original dimensions for this test.  Make that change here.

Fixes: 4a8d7c7574 ("Default to 1024x768 for new users, not 640x480")
2022-11-06 18:18:57 +00:00