Commit graph

196 commits

Author SHA1 Message Date
Kp 9e174a0e0e Factor out primary/secondary search/reorder 2016-01-17 17:36:48 +00:00
Kp dd877f52c2 Remove unused weapon defines 2016-01-09 16:38:15 +00:00
Kp 86709f547b Fix capitalization of PHYSFS_File
Per comment in physfs.h, the spelling PHYSFS_file is deprecated.
Replace all instances with PHYSFS_File.
2016-01-09 16:38:14 +00:00
Kp 98f5afa9f8 Remove default argument for basic_ptr(pointer,array &) 2016-01-09 16:38:13 +00:00
Kp e8c34be843 Use v*ptr* factories with highest_valid 2015-12-22 04:18:51 +00:00
Kp db9fb0ed42 Move more symbols into namespace dcx/dsx 2015-12-22 04:18:50 +00:00
Kp edfd337c50 Compile out unused weapon_info_write
Unused since 547193c591 ("Compile out unused bm_write_all") disabled caller bm_write_all.
2015-12-04 03:36:31 +00:00
Kp 708dc0a7e1 Use vobjptr/vcobjptr for more Objects[] access 2015-12-03 03:26:49 +00:00
Kp b683b4cc68 Scope weapon type 2015-12-03 03:26:49 +00:00
Kp 472c492ac4 Prevent selecting secondaries with ammo==0
derhass reported that using demo content allows the user to select
non-demo weapons, which then render incorrectly.  derhass observed the
problem when the game automatically changed weapons, but affected users
can also select the missing weapon by hand.  Demo data sets non-demo
weapons to have zero ammo_usage, so a player has "enough" rounds even
when he has none.  Past releases blocked this through the dedicated
secondary_weapon_flags field.  Add an explicit check for non-zero ammo.

Reported-by: derhass <https://github.com/dxx-rebirth/dxx-rebirth/issues/165>
2015-11-19 03:23:35 +00:00
Kp 82d0c2ed96 Make some implicit uses of ptridx construction explicit 2015-11-19 03:23:34 +00:00
Kp 7df905c1db Fix weapon selection after respawn
Commit 7da64d3 added the ability to select a weapon when firing stops.
However, it did not take into account that
select_primary_weapon/select_secondary_weapon do not check whether the
selected weapon is available.  The caller must perform that check.  The
draft version proposed by Mako88 in the original feature request mostly
avoided the problem by clearing the delayed auto-select when it was
first applied.  That version would only manifest the problem if the
player had a delayed auto-select and lost the weapon before resolving
it, whether due to death, a thief bot, or, in the case of mines,
direct-dropping the last mine by the "Drop Bomb" key.

The version that went in switched to using delayed==active to indicate
that no change was required.  Under that design, the incorrect
auto-select appears if the player loses the active weapon even if no
delayed selection was pending.

Add a check that the player has the weapon before switching to it and
reset delayed=current if the delayed weapon is not available.  This
fixes all known cases under which a spurious delayed selection could
activate a missing weapon and prevents repeated checks for weapon
availability.

Reported-by: Mako88 <https://github.com/dxx-rebirth/dxx-rebirth/issues/158>
Fixes: 7da64d3782 ("Add new autoselect-while-firing mode: "when firing stops"")
2015-11-12 02:57:45 +00:00
Kp 9c5b5b3e36 Start ammunition-driven autoselect at 0 2015-11-07 21:56:00 +00:00
Kp 6b353cb9ac Move player powerup_flags to object.ctype.player_info 2015-11-07 21:55:59 +00:00
Kp 8a81e25ab0 Move player laser_level to object.ctype.player_info 2015-11-07 21:55:59 +00:00
Kp b788d0b563 Move player primary_weapon_flags to object.ctype.player_info 2015-11-07 21:55:59 +00:00
Kp 6037372cdf Move player vulcan_ammo to object.ctype.player_info 2015-11-07 21:55:59 +00:00
Kp a0a5aaef8d Fix bogus "You have no" selecting missiles
Fixes: e130ea7b36 ("Remove unnecessary secondary_weapon_flags")
2015-11-06 03:51:10 +00:00
Kp 19e0a3041c Fix -O0 build
Fixes: 9a6d027e63 ("Factor out weapon cycling")
2015-11-06 03:51:10 +00:00
Kp 92f78caf22 Use macro get_local_player_vulcan_ammo for player's vulcan_ammo 2015-10-30 02:52:56 +00:00
Kp dc5dfb80e8 Use macro get_local_player_secondary_ammo for player's secondary_ammo 2015-10-30 02:52:56 +00:00
Kp ea5b7a08c1 Use macro get_local_player_energy for local player's energy 2015-10-30 02:52:55 +00:00
Kp 9a6d027e63 Factor out weapon cycling 2015-10-30 02:52:54 +00:00
Kp e130ea7b36 Remove unnecessary secondary_weapon_flags 2015-10-30 02:52:53 +00:00
Kp 533f1cb3bb Qualify references to primary weapons 2015-10-18 21:01:18 +00:00
Kp 7da64d3782 Add new autoselect-while-firing mode: "when firing stops"
Mako88 reports that some users want not to autoselect while firing, but
do not notice when a new weapon is added to the HUD, and end up never
activating a preferred weapon.  Add a new autoselect mode that remembers
what would be selected and switches to it once the player ceases firing.

Changes since Mako88's proposed version:
- Use `enum class` for autoselection mode and a radio button to
  represent the decision of Immediate/Never/Delayed.
- Handle delayed autoselect for vulcan ammo.
- Set Delayed_primary == Primary_weapon to indicate no change is needed,
  rather than Delayed_primary==-1.  This lets some paths use
  Delayed_primary without checking for a magic value.
- Likewise Delayed_secondary / Secondary_weapon.
- Update Delayed_primary/Delayed_secondary when changing active
  primary/secondary weapon, so that a player who changes weapons while
  firing will automatically clear any deferred change.

Requested-by: Mako88 <https://github.com/dxx-rebirth/dxx-rebirth/issues/97>
Based-on-patch-by: Mako88 <https://github.com/dxx-rebirth/dxx-rebirth/pull/147>
2015-10-18 18:11:57 +00:00
Kp 8032aee461 Enable ammo-based auto-select for Gauss
Autoselect from pick_up_vulcan_ammo only ever armed the Vulcan cannon,
even if the user has and prefers a Gauss cannon.  This is probably an
oversight from when D2 weapons were added.  Rework the pickup logic in
D2 so that the more desirable of Vulcan or Gauss is picked.
2015-10-09 02:46:10 +00:00
Kp 8d2d69d663 Always run mini-autoselect for bombs
Autoselect events are gated on the player having none of the item prior
to this pickup, so making the mini-autoselect more aggressive should not
cause unwanted switches.

Since the main autoselect is complicated, requiring the mini-autoselect
to happen only when the main autoselect is skipped makes it complicated
for players to reason about whether the mini-autoselect will happen.
2015-10-09 02:46:09 +00:00
Kp 9df40a86cb Use uint8 for secondary ammo counts
Maximum non-cheating is 40 missiles, which fits in a signed 8 bit value.
Maximum cheating is 200 missiles, which fits in an unsigned 8 bit value.
2015-10-03 17:17:49 +00:00
Kp d6059a3abf Rework pickup of weapon powerups 2015-09-26 21:17:12 +00:00
Kp 7673bba50d Factor out special handling of super laser 2015-09-19 23:04:36 +00:00
Kp f15116f2cb Simplify multiplayer sound handling 2015-08-05 02:59:02 +00:00
Kp bda7fef3a0 Use get_local_player to compute reference to local player 2015-07-25 23:10:46 +00:00
Kp 73fdd59225 Require exact type for valptridx factory 2015-07-13 01:09:36 +00:00
Kp 06b453d617 Enable D1 weapon drops 2015-07-02 02:37:55 +00:00
Kp 906f93ddf1 Fix has_weapon_result -fno-inline build
Fixes: 9d213b5282 ("Wrap player_has_weapon return type")
2015-06-11 03:06:58 +00:00
Kp 3239693c26 Fix primary/secondary select mismatch
Fixes: d161b17191 ("Factor out shareware/unusable weapon handling")
Reported-by: Mako88 <https://github.com/dxx-rebirth/dxx-rebirth/issues/72>
2015-05-29 03:15:48 +00:00
Kp 168533bca0 Fix super weapon selection message 2015-05-06 02:11:03 +00:00
Kp 0d564814f5 Convert Primary_weapon to primary_weapon_index_t 2015-04-26 20:15:57 +00:00
Kp cca163fc30 Split select_weapon 2015-04-26 20:15:52 +00:00
Kp f789e29b41 Simplify check_to_use_primary 2015-04-26 20:15:52 +00:00
Kp 610f603ebf Pass weapon_name to select_weapon 2015-04-26 20:15:52 +00:00
Kp d161b17191 Factor out shareware/unusable weapon handling 2015-04-26 20:15:51 +00:00
Kp 10b9206a9b Split do_weapon_select 2015-04-26 20:15:51 +00:00
Kp 4d046c5336 Split auto_select_weapon 2015-04-26 20:15:51 +00:00
Kp 4381b81497 Pack spawn granted items in D1 2015-04-19 04:18:53 +00:00
Kp b88c232f9f Use powerup_type_t for *_weapon_to_powerup 2015-04-19 04:18:53 +00:00
Kp d7066c3eb9 Remove constant arguments to pick_up_ammo 2015-04-19 04:18:53 +00:00
Kp 28b4a65547 Centralize ammo rack bonus 2015-04-19 04:18:52 +00:00
Kp c338862ad6 Reduce gauges.h includes 2015-04-19 04:18:51 +00:00
Kp 8582907b91 Reduce ai.h includes 2015-04-19 04:18:51 +00:00
Kp 12673084a0 Remove obsolete player_has_primary_weapon D1 special case 2015-04-19 04:18:50 +00:00
Kp 9d213b5282 Wrap player_has_weapon return type 2015-04-19 04:18:50 +00:00
Kp 0a1d643442 Remove obsolete weapon_num check 2015-04-19 04:18:50 +00:00
Kp a9c81c5614 Move Weapon_is_energy to collide.cpp 2015-04-02 02:36:57 +00:00
Kp 90fbebf8fd Convert most global arrays to array<> 2015-04-02 02:36:52 +00:00
Kp f76b112304 Allow dropping laser powerups 2015-03-28 17:18:02 +00:00
Kp c5f6a115ec Add <stdexcept> for files that throw std::runtime_error 2015-03-22 04:16:49 +00:00
Kp 2c09f9fa90 Propagate special types for distance/magnitude 2015-03-12 02:21:19 +00:00
Kp e8c70cfe23 Use array<> for Smega_detonate_times 2015-02-14 22:48:29 +00:00
Kp 5212daa4ad Fix seismic duration sync 2015-02-14 22:48:29 +00:00
Kp 697c81e0c3 Factor out starting seismic sound 2015-02-14 22:48:29 +00:00
Kp 99a4a0ed62 Capture range_for by-value temporaries as const
Modifying a by-value temporary does not affect the underlying container,
so modifying it is almost always a bug.  Require use of a by-reference
capture when modification is desired.

sed -i -e 's/range_for\s*(\s*\(const\s\+\)\?auto\s\+\([[:alpha:]_]\)/range_for (const auto \2/g'
2015-02-05 03:03:49 +00:00
Kp f4517dc0bd Reduce inclusion of segment.h 2015-01-29 04:27:36 +00:00
Kp 5c1056efab Refactor smart mine handling 2015-01-22 03:34:20 +00:00
Kp c8b5fe5552 Pass find_vector_intersection arg by & 2015-01-20 02:46:42 +00:00
Kp 84e3a03451 Remove unused parameters 2015-01-18 01:58:33 +00:00
Kp 67e503b9b7 Add helper nm_item_menu 2015-01-18 01:58:31 +00:00
Kp bca8889695 Simplify Primary_ammo_max 2015-01-17 18:31:42 +00:00
Kp eb09eb4396 Refactor newmenu reordering 2015-01-17 18:31:41 +00:00
Kp f206b3b127 Reduce inclusion of object.h 2014-11-23 04:36:58 +00:00
Kp a17cf6f808 Avoid slicing into objnum_t local 2014-11-20 03:00:41 +00:00
Kp 40eb2e6b01 Add vm_vec_scale_add that returns result 2014-11-02 03:43:57 +00:00
Kp 6746879427 Use const & in process_super_mines_frame 2014-11-02 03:43:42 +00:00
Kp 53aa70cecb Use vsegptridx_t 2014-10-28 03:08:51 +00:00
Kp 2a5265493e Pass obj_create position vms_vector by & 2014-10-26 21:35:16 +00:00
Kp fb641b3250 Wrap object iteration idiom 2014-10-12 23:05:46 +00:00
Kp 1fff2db9a8 Pass vm_vec_dist_quick arg by & 2014-10-01 02:28:41 +00:00
Kp 4104bf4f11 Pass vm_vec_scale_add arguments by & 2014-09-28 21:43:14 +00:00
Kp f12273746f Pass vm_vec_zero v by & 2014-09-28 21:11:04 +00:00
Kp 78ad2adabf Write weapon_info carefully 2014-09-27 22:46:25 +00:00
Kp 382afad2b8 Refactor weapon_info_read_n
Fix potential for initializing .children to wrong value with old data
files.  Currently, this cannot be hit because no caller uses the right
combination of arguments to cause it.

Rely on partial_range to report invalid custom files.
2014-09-27 21:21:58 +00:00
Kp 703f60ac3f Fix -Wtype-limits warnings 2014-09-21 21:41:55 +00:00
Kp f5c950df69 Throw exception on corrupt weapon list 2014-09-17 02:11:59 +00:00
Kp 0c7e5aa178 Avoid slicing obj_create return value 2014-09-08 03:24:48 +00:00
Kp f5e7516448 Overwrite oldest earthshaker even if not done
Otherwise the newest earthshaker will be lost.
2014-09-06 04:07:45 +00:00
Kp 3e8ec8932f Use array<> for player_config 2014-08-26 02:59:01 +00:00
Kp 125d9257be Use special type names for segment/object numbers 2014-08-13 02:57:12 +00:00
Kp 64b78e0061 Fix copy-paste bug for multiplayer weapon sound
Send SOUND_GOOD_SELECTION_SECONDARY for changing secondaries.
2014-06-15 04:00:18 +00:00
zico ad7cb106bc Changed custom D1X license to GPLv3 2014-06-01 19:55:23 +02:00
Kp 9a5d0f6f09 Use symbolic values for segment/object first/none 2014-01-06 04:17:55 +00:00
Kp 2bd302cddd Move Controls ubyte values into substructure 2013-12-13 03:47:57 +00:00
Kp 6fc8d110f3 Only give secondaries that exist 2013-11-02 04:25:33 +00:00
Kp 58958e091b Only give primaries that exist 2013-11-02 04:24:14 +00:00
Kp 2714679284 Mark private functions static 2013-11-02 04:23:55 +00:00
Kp 894570b14d Move similar/main/weapon.c -> similar/main/weapon.cpp 2012-11-11 22:12:51 +00:00
Renamed from similar/main/weapon.c (Browse further)