Merge commit 'refs/pull/657/head' into master
This commit is contained in:
commit
366b048879
|
@ -148,6 +148,8 @@ void kconfig_end_loop(control_info &, const fix frametime);
|
|||
#define CONTROL_USING_JOYSTICK 1
|
||||
#define CONTROL_USING_MOUSE 2
|
||||
#define MOUSEFS_DELTA_RANGE 512
|
||||
#define LOCKED_PITCH_FACTOR 2
|
||||
#define FREE_PITCH_FACTOR 1
|
||||
#ifdef dsx
|
||||
namespace dsx {
|
||||
#if defined(DXX_BUILD_DESCENT_I)
|
||||
|
|
|
@ -108,7 +108,7 @@ enum class multiplayer_data_priority : uint8_t
|
|||
#define MULTI_PROTO_UDP 1 // UDP protocol
|
||||
|
||||
// What version of the multiplayer protocol is this? Increment each time something drastic changes in Multiplayer without the version number changes. Reset to 0 each time the version of the game changes
|
||||
#define MULTI_PROTO_VERSION static_cast<uint16_t>(15)
|
||||
#define MULTI_PROTO_VERSION static_cast<uint16_t>(16)
|
||||
// PROTOCOL VARIABLES AND DEFINES - END
|
||||
|
||||
// limits for Packets (i.e. positional updates) per sec
|
||||
|
@ -836,6 +836,7 @@ struct netgame_info : prohibit_void_ptr<netgame_info>
|
|||
ubyte team_vector;
|
||||
uint8_t SecludedSpawns;
|
||||
uint8_t MouselookFlags;
|
||||
uint8_t PitchLockFlags;
|
||||
uint32_t AllowedItems;
|
||||
packed_spawn_granted_items SpawnGrantedItems;
|
||||
packed_netduplicate_items DuplicatePowerups;
|
||||
|
|
|
@ -159,6 +159,7 @@ struct player_config : prohibit_void_ptr<player_config>
|
|||
HudType HudMode;
|
||||
RespawnPress RespawnMode;
|
||||
uint8_t MouselookFlags;
|
||||
uint8_t PitchLockFlags;
|
||||
using primary_weapon_order = std::array<uint8_t, MAX_PRIMARY_WEAPONS + 1>;
|
||||
using secondary_weapon_order = std::array<uint8_t, MAX_SECONDARY_WEAPONS + 1>;
|
||||
primary_weapon_order PrimaryOrder;
|
||||
|
|
|
@ -1082,6 +1082,18 @@ static unsigned allow_uncapped_turning()
|
|||
: MouselookMode::MPAnarchy);
|
||||
}
|
||||
|
||||
static unsigned release_pitch_lock()
|
||||
{
|
||||
const auto game_mode = Game_mode;
|
||||
if(!(game_mode & GM_MULTI)) {
|
||||
return PlayerCfg.PitchLockFlags & MouselookMode::Singleplayer;
|
||||
}
|
||||
|
||||
return PlayerCfg.PitchLockFlags &
|
||||
Netgame.PitchLockFlags &
|
||||
((game_mode & GM_MULTI_COOP) ? MouselookMode::MPCoop : MouselookMode::MPAnarchy);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1264,9 +1276,14 @@ void kconfig_end_loop(control_info &Controls, const fix frametime)
|
|||
//------------ Read pitch_time -----------
|
||||
if ( !Controls.state.slide_on )
|
||||
{
|
||||
// From keyboard...
|
||||
adjust_ramped_keyboard_field(plus, key_pitch_forward, Controls.pitch_time, PlayerCfg.KeyboardSens[player_config_keyboard_index::pitch_ud], speed_factor, 2);
|
||||
adjust_ramped_keyboard_field(minus, key_pitch_backward, Controls.pitch_time, PlayerCfg.KeyboardSens[player_config_keyboard_index::pitch_ud], speed_factor, 2);
|
||||
auto pitch_factor = LOCKED_PITCH_FACTOR;
|
||||
if (release_pitch_lock())
|
||||
pitch_factor = FREE_PITCH_FACTOR;
|
||||
|
||||
// From keyboard...
|
||||
adjust_ramped_keyboard_field(plus, key_pitch_forward, Controls.pitch_time, PlayerCfg.KeyboardSens[player_config_keyboard_index::pitch_ud], speed_factor, pitch_factor);
|
||||
adjust_ramped_keyboard_field(minus, key_pitch_backward, Controls.pitch_time, PlayerCfg.KeyboardSens[player_config_keyboard_index::pitch_ud], speed_factor, pitch_factor);
|
||||
|
||||
// From joystick...
|
||||
#ifdef dxx_kconfig_ui_kc_joystick_pitch_ud
|
||||
adjust_axis_field(Controls.pitch_time, joy_axis, kcm_joystick[dxx_kconfig_ui_kc_joystick_pitch_ud].value, kcm_joystick[dxx_kconfig_ui_kc_joystick_invert_pitch].value, PlayerCfg.JoystickSens[player_config_joystick_index::pitch_ud]);
|
||||
|
@ -1396,7 +1413,11 @@ void kconfig_end_loop(control_info &Controls, const fix frametime)
|
|||
clamp_kconfig_control_with_overrun(Controls.forward_thrust_time, frametime, Controls.excess_forward_thrust_time, frametime * PlayerCfg.MouseOverrun[player_config_mouse_index::throttle]);
|
||||
if (!allow_uncapped_turning())
|
||||
{
|
||||
clamp_kconfig_control_with_overrun(Controls.pitch_time, frametime / 2, Controls.excess_pitch_time, frametime * PlayerCfg.MouseOverrun[player_config_mouse_index::pitch_ud]);
|
||||
auto pitch_frametime = frametime / LOCKED_PITCH_FACTOR;
|
||||
if(release_pitch_lock()) {
|
||||
pitch_frametime = frametime / FREE_PITCH_FACTOR;
|
||||
}
|
||||
clamp_kconfig_control_with_overrun(Controls.pitch_time, pitch_frametime, Controls.excess_pitch_time, frametime * PlayerCfg.MouseOverrun[player_config_mouse_index::pitch_ud]);
|
||||
clamp_kconfig_control_with_overrun(Controls.heading_time, frametime, Controls.excess_heading_time, frametime * PlayerCfg.MouseOverrun[player_config_mouse_index::turn_lr]);
|
||||
clamp_kconfig_control_with_overrun(Controls.bank_time, frametime, Controls.excess_bank_time, frametime * PlayerCfg.MouseOverrun[player_config_mouse_index::bank_lr]);
|
||||
}
|
||||
|
|
|
@ -1631,6 +1631,11 @@ class input_config_menu_items
|
|||
DXX_MENUITEM(VERB, CHECK, "Multi Coop (if host allows)", opt_ic_mouselook_mp_cooperative, PlayerCfg.MouselookFlags & MouselookMode::MPCoop) \
|
||||
DXX_MENUITEM(VERB, CHECK, "Multi Anarchy (if host allows)", opt_ic_mouselook_mp_anarchy, PlayerCfg.MouselookFlags & MouselookMode::MPAnarchy) \
|
||||
DXX_MENUITEM(VERB, TEXT, "", opt_label_blank_mouselook) \
|
||||
DXX_MENUITEM(VERB, TEXT, "Release pitch lock:", opt_label_pitch_lock_mode) \
|
||||
DXX_MENUITEM(VERB, CHECK, "Single player", opt_ic_pitch_lock_sp, PlayerCfg.PitchLockFlags & MouselookMode::Singleplayer) \
|
||||
DXX_MENUITEM(VERB, CHECK, "Multi Coop (if host allows)", opt_ic_pitch_lock_mp_coop, PlayerCfg.PitchLockFlags & MouselookMode::MPCoop) \
|
||||
DXX_MENUITEM(VERB, CHECK, "Multi Anarchy (if host allows)", opt_ic_pitch_lock_mp_anarchy, PlayerCfg.PitchLockFlags & MouselookMode::MPAnarchy) \
|
||||
DXX_MENUITEM(VERB, TEXT, "", opt_label_blank_rotational_setting) \
|
||||
DXX_MENUITEM(VERB, MENU, "GAME SYSTEM KEYS", opt_ic_help0) \
|
||||
DXX_MENUITEM(VERB, MENU, "NETGAME SYSTEM KEYS", opt_ic_help1) \
|
||||
DXX_MENUITEM(VERB, MENU, "DEMO SYSTEM KEYS", opt_ic_help2) \
|
||||
|
@ -1678,6 +1683,7 @@ window_event_result input_config_menu::event_handler(const d_event &event)
|
|||
{
|
||||
const auto citem = static_cast<const d_change_event &>(event).citem;
|
||||
MouselookMode mousemode;
|
||||
MouselookMode pitchlock;
|
||||
#if DXX_MAX_JOYSTICKS
|
||||
if (citem == opt_ic_usejoy)
|
||||
{
|
||||
|
@ -1717,6 +1723,15 @@ window_event_result input_config_menu::event_handler(const d_event &event)
|
|||
else
|
||||
PlayerCfg.MouselookFlags &= ~mousemode;
|
||||
}
|
||||
else if ((citem == opt_ic_pitch_lock_sp && (pitchlock = MouselookMode::Singleplayer, true)) ||
|
||||
(citem == opt_ic_pitch_lock_mp_coop && (pitchlock = MouselookMode::MPCoop, true)) ||
|
||||
(citem == opt_ic_pitch_lock_mp_anarchy && (pitchlock = MouselookMode::MPAnarchy, true))) {
|
||||
if (items[citem].value)
|
||||
PlayerCfg.PitchLockFlags |= pitchlock;
|
||||
else
|
||||
PlayerCfg.PitchLockFlags &= ~pitchlock;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case EVENT_NEWMENU_SELECTED:
|
||||
|
|
|
@ -2853,6 +2853,7 @@ static uint_fast32_t net_udp_prepare_heavy_game_info(const _sockaddr *addr, ubyt
|
|||
buf[len] = Netgame.PacketLossPrevention; len++;
|
||||
buf[len] = Netgame.NoFriendlyFire; len++;
|
||||
buf[len] = Netgame.MouselookFlags; len++;
|
||||
buf[len] = Netgame.PitchLockFlags; len++;
|
||||
copy_from_ntstring(buf, len, Netgame.game_name);
|
||||
copy_from_ntstring(buf, len, Netgame.mission_title);
|
||||
copy_from_ntstring(buf, len, Netgame.mission_name);
|
||||
|
@ -3108,6 +3109,7 @@ static void net_udp_process_game_info(const uint8_t *data, uint_fast32_t, const
|
|||
Netgame.PacketLossPrevention = data[len]; len++;
|
||||
Netgame.NoFriendlyFire = data[len]; len++;
|
||||
Netgame.MouselookFlags = data[len]; len++;
|
||||
Netgame.PitchLockFlags = data[len]; len++;
|
||||
copy_to_ntstring(data, len, Netgame.game_name);
|
||||
copy_to_ntstring(data, len, Netgame.mission_title);
|
||||
copy_to_ntstring(data, len, Netgame.mission_name);
|
||||
|
@ -3609,6 +3611,7 @@ constexpr std::integral_constant<unsigned, 5 * reactor_invul_time_mini_scale> re
|
|||
DXX_MENUITEM(VERB, CHECK, "Show enemy names on HUD", opt_show_names, Netgame.ShowEnemyNames) \
|
||||
DXX_MENUITEM(VERB, CHECK, "No friendly fire (Team, Coop)", opt_ffire, Netgame.NoFriendlyFire) \
|
||||
DXX_MENUITEM(VERB, FCHECK, game_is_cooperative ? "Allow coop mouselook" : "Allow anarchy mouselook", opt_mouselook, Netgame.MouselookFlags, MouselookMPFlag(game_is_cooperative)) \
|
||||
DXX_MENUITEM(VERB, FCHECK, game_is_cooperative ? "Release coop pitch lock" : "Release anarchy pitch lock", opt_pitch_lock, Netgame.PitchLockFlags, MouselookMPFlag(game_is_cooperative)) \
|
||||
DXX_MENUITEM(VERB, TEXT, "", blank_4) \
|
||||
DXX_MENUITEM_AUTOSAVE_LABEL_INPUT(VERB) \
|
||||
DXX_MENUITEM(VERB, TEXT, "", blank_6) \
|
||||
|
@ -4241,6 +4244,7 @@ window_event_result net_udp_setup_game()
|
|||
Netgame.PacketLossPrevention = 1;
|
||||
Netgame.NoFriendlyFire = 0;
|
||||
Netgame.MouselookFlags = 0;
|
||||
Netgame.PitchLockFlags = 0;
|
||||
|
||||
#if DXX_USE_TRACKER
|
||||
Netgame.Tracker = 1;
|
||||
|
|
|
@ -81,6 +81,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#define PacketsPerSecStr "PacketsPerSec"
|
||||
#define NoFriendlyFireStr "NoFriendlyFire"
|
||||
#define MouselookFlagsStr "Mouselook"
|
||||
#define PitchLockFlagsStr "PitchLockRelease"
|
||||
#define AutosaveIntervalStr "AutosaveInterval"
|
||||
#define TrackerStr "Tracker"
|
||||
#define TrackerNATHPStr "trackernat"
|
||||
|
@ -173,6 +174,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#define TOGGLES_CLOAKINVULTIMER_NAME_TEXT "cloakinvultimer"
|
||||
#define TOGGLES_RESPAWN_ANY_KEY "respawnkey"
|
||||
#define TOGGLES_MOUSELOOK "mouselook"
|
||||
#define TOGGLES_PITCH_LOCK "pitchlock"
|
||||
#define TOGGLES_THIEF_ABSENCE_SP "thiefabsent"
|
||||
#define TOGGLES_THIEF_NO_ENERGY_WEAPONS_SP "thiefnoenergyweapons"
|
||||
#define TOGGLES_AUTOSAVE_INTERVAL_SP "autosaveinterval"
|
||||
|
@ -229,6 +231,7 @@ void new_player_config()
|
|||
PlayerCfg.ControlType=0; // Assume keyboard
|
||||
PlayerCfg.RespawnMode = RespawnPress::Any;
|
||||
PlayerCfg.MouselookFlags = 0;
|
||||
PlayerCfg.PitchLockFlags = 0;
|
||||
PlayerCfg.KeySettings = DefaultKeySettings;
|
||||
PlayerCfg.KeySettingsRebirth = DefaultKeySettingsRebirth;
|
||||
kc_set_controls();
|
||||
|
@ -482,6 +485,7 @@ static void read_player_dxx(const char *filename)
|
|||
else if (!strcmp(line,TOGGLES_HEADER_TEXT))
|
||||
{
|
||||
PlayerCfg.MouselookFlags = 0;
|
||||
PlayerCfg.PitchLockFlags = 0;
|
||||
#if defined(DXX_BUILD_DESCENT_II)
|
||||
PlayerCfg.ThiefModifierFlags = 0;
|
||||
#endif
|
||||
|
@ -536,6 +540,8 @@ static void read_player_dxx(const char *filename)
|
|||
PlayerCfg.RespawnMode = static_cast<RespawnPress>(atoi(value));
|
||||
else if (!strcmp(line, TOGGLES_MOUSELOOK))
|
||||
PlayerCfg.MouselookFlags = strtoul(value, 0, 10);
|
||||
else if (!strcmp(line, TOGGLES_PITCH_LOCK))
|
||||
PlayerCfg.PitchLockFlags = strtoul(value, 0, 10);
|
||||
}
|
||||
}
|
||||
else if (!strcmp(line,GRAPHICS_HEADER_TEXT))
|
||||
|
@ -845,6 +851,7 @@ static int write_player_dxx(const char *filename)
|
|||
PHYSFSX_printf(fout,TOGGLES_CLOAKINVULTIMER_NAME_TEXT "=%i\n",PlayerCfg.CloakInvulTimer);
|
||||
PHYSFSX_printf(fout,TOGGLES_RESPAWN_ANY_KEY "=%i\n",static_cast<unsigned>(PlayerCfg.RespawnMode));
|
||||
PHYSFSX_printf(fout, TOGGLES_MOUSELOOK "=%i\n", PlayerCfg.MouselookFlags);
|
||||
PHYSFSX_printf(fout, TOGGLES_PITCH_LOCK "=%i\n", PlayerCfg.PitchLockFlags);
|
||||
PHYSFSX_puts_literal(fout,
|
||||
END_TEXT "\n"
|
||||
GRAPHICS_HEADER_TEXT "\n"
|
||||
|
@ -1713,6 +1720,8 @@ void read_netgame_profile(netgame_info *ng)
|
|||
convert_integer(ng->NoFriendlyFire, value);
|
||||
else if (cmp(lb, eq, MouselookFlagsStr))
|
||||
convert_integer(ng->MouselookFlags, value);
|
||||
else if (cmp(lb, eq, PitchLockFlagsStr))
|
||||
convert_integer(ng->PitchLockFlags, value);
|
||||
else if (cmp(lb, eq, AutosaveIntervalStr))
|
||||
{
|
||||
uint16_t AutosaveInterval;
|
||||
|
@ -1764,6 +1773,7 @@ void write_netgame_profile(netgame_info *ng)
|
|||
PHYSFSX_printf(file, PacketsPerSecStr "=%i\n", ng->PacketsPerSec);
|
||||
PHYSFSX_printf(file, NoFriendlyFireStr "=%i\n", ng->NoFriendlyFire);
|
||||
PHYSFSX_printf(file, MouselookFlagsStr "=%i\n", ng->MouselookFlags);
|
||||
PHYSFSX_printf(file, PitchLockFlagsStr "=%i\n", ng->PitchLockFlags);
|
||||
PHYSFSX_printf(file, AutosaveIntervalStr "=%i\n", ng->MPGameplayOptions.AutosaveInterval.count());
|
||||
#if DXX_USE_TRACKER
|
||||
PHYSFSX_printf(file, TrackerStr "=%i\n", ng->Tracker);
|
||||
|
|
Loading…
Reference in a new issue