From 73150f69afb104eb1b45145e85c6d0fd69fec299 Mon Sep 17 00:00:00 2001 From: Morosophos Date: Mon, 9 Sep 2019 23:25:11 +0300 Subject: [PATCH] Rebase q3 haste changes on top of Mario's buff timers work --- buffs-xdf.cfg | 79 ++++++++++++++++++++++++++++++++++ physicsXDF.cfg | 2 + qcsrc/common/physics/player.qc | 27 ++++++++---- qcsrc/server/autocvars.qh | 1 + xonotic-server.cfg | 1 + 5 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 buffs-xdf.cfg diff --git a/buffs-xdf.cfg b/buffs-xdf.cfg new file mode 100644 index 0000000000..fcc3b5bbff --- /dev/null +++ b/buffs-xdf.cfg @@ -0,0 +1,79 @@ +seta cl_buffs_autoreplace 1 +set g_buffs -1 +set g_buffs_effects 1 +set g_buffs_waypoint_distance 1024 +set g_buffs_pickup_anyway 1 +set g_buffs_pickup_delay 0 +set g_buffs_randomize 0 +set g_buffs_random_lifetime 0.1 +set g_buffs_random_location 0 +set g_buffs_random_location_attempts 10 +set g_buffs_spawn_count 0 +set g_buffs_replace_powerups 0 +set g_buffs_drop 0 +set g_buffs_cooldown_activate 0 +set g_buffs_cooldown_respawn 0 +set g_buffs_ammo 0 +set g_buffs_ammo_time 60 +set g_buffs_resistance 1 +set g_buffs_resistance_time 60 +set g_buffs_resistance_blockpercent 0.5 +set g_buffs_medic 0 +set g_buffs_medic_time 60 +set g_buffs_medic_survive_chance 0.6 +set g_buffs_medic_survive_health 5 +set g_buffs_medic_rot 0.2 +set g_buffs_medic_max 1.5 +set g_buffs_medic_regen 1.7 +set g_buffs_medic_heal_amount 15 +set g_buffs_medic_heal_range 400 +set g_buffs_medic_heal_delay 1 +set g_buffs_vengeance 1 +set g_buffs_vengeance_time 60 +set g_buffs_vengeance_damage_multiplier 0.4 +set g_buffs_bash 0 +set g_buffs_bash_time 60 +set g_buffs_bash_force 2 +set g_buffs_bash_force_self 1.2 +set g_buffs_disability 0 +set g_buffs_disability_time 60 +set g_buffs_disability_slowtime 3 +set g_buffs_disability_speed 0.7 +set g_buffs_disability_rate 1.5 +set g_buffs_disability_weaponspeed 0.7 +set g_buffs_speed 1 +set g_buffs_speed_time 30 +set g_buffs_speed_speed 1.3 // q3 haste lasts 30 seconds +set g_buffs_speed_rate 0.7692307692 // 1/1.3 +set g_buffs_speed_weaponspeed 1 // do not increase projectile speed +set g_buffs_speed_damage_take 1 +set g_buffs_speed_regen 1.2 +set g_buffs_vampire 1 +set g_buffs_vampire_time 60 +set g_buffs_vampire_damage_steal 0.4 +set g_buffs_jump 0 +set g_buffs_jump_time 60 +set g_buffs_jump_height 600 +set g_buffs_invisible 1 +set g_buffs_invisible_time 60 +set g_buffs_invisible_alpha 0.15 +set g_buffs_inferno 0 +set g_buffs_inferno_time 60 +set g_buffs_inferno_damagemultiplier 0.3 +set g_buffs_inferno_burntime_factor 2 +set g_buffs_inferno_burntime_min_time 0.5 +set g_buffs_inferno_burntime_target_damage 150 +set g_buffs_inferno_burntime_target_time 5 +set g_buffs_swapper 0 +set g_buffs_swapper_time 60 +set g_buffs_swapper_range 1500 +set g_buffs_magnet 0 +set g_buffs_magnet_time 60 +set g_buffs_magnet_range_item 250 +set g_buffs_magnet_range_buff 100 +set g_buffs_luck 0 +set g_buffs_luck_time 60 +set g_buffs_luck_chance 0.15 +set g_buffs_luck_damagemultiplier 2 +set g_buffs_flight 0 +set g_buffs_flight_time 60 diff --git a/physicsXDF.cfg b/physicsXDF.cfg index e0bea6a0ea..d08c07ac80 100644 --- a/physicsXDF.cfg +++ b/physicsXDF.cfg @@ -44,3 +44,5 @@ sv_jumpspeedcap_min 0 sv_jumpspeedcap_max 0.5 sv_jumpspeedcap_max_disable_on_ramps 1 g_teleport_maxspeed 600 +// A cvar to toggle speed buff into q3 haste compat mode +g_movement_highspeed_q3_compat 1 diff --git a/qcsrc/common/physics/player.qc b/qcsrc/common/physics/player.qc index acef8c97ad..6fcf452e47 100644 --- a/qcsrc/common/physics/player.qc +++ b/qcsrc/common/physics/player.qc @@ -41,14 +41,18 @@ void Physics_UpdateStats(entity this) MUTATOR_CALLHOOK(PlayerPhysics_UpdateStats, this); float maxspd_mod = PHYS_HIGHSPEED(this); - - STAT(MOVEVARS_AIRACCEL_QW, this) = AdjustAirAccelQW(Physics_ClientOption(this, "airaccel_qw", autocvar_sv_airaccel_qw), maxspd_mod); - STAT(MOVEVARS_AIRSTRAFEACCEL_QW, this) = (Physics_ClientOption(this, "airstrafeaccel_qw", autocvar_sv_airstrafeaccel_qw)) - ? AdjustAirAccelQW(Physics_ClientOption(this, "airstrafeaccel_qw", autocvar_sv_airstrafeaccel_qw), maxspd_mod) - : 0; - STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, this) = Physics_ClientOption(this, "airspeedlimit_nonqw", autocvar_sv_airspeedlimit_nonqw) * maxspd_mod; - STAT(MOVEVARS_MAXSPEED, this) = Physics_ClientOption(this, "maxspeed", autocvar_sv_maxspeed) * maxspd_mod; // also slow walking - + STAT(MOVEVARS_MAXSPEED, this) = Physics_ClientOption(this, "maxspeed", autocvar_sv_maxspeed) * maxspd_mod; // also slow walking + if (autocvar_g_movement_highspeed_q3_compat) { + STAT(MOVEVARS_AIRACCEL_QW, this) = Physics_ClientOption(this, "airaccel_qw", autocvar_sv_airaccel_qw); + STAT(MOVEVARS_AIRSTRAFEACCEL_QW, this) = Physics_ClientOption(this, "airstrafeaccel_qw", autocvar_sv_airstrafeaccel_qw); + STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, this) = Physics_ClientOption(this, "airspeedlimit_nonqw", autocvar_sv_airspeedlimit_nonqw); + } else { + STAT(MOVEVARS_AIRACCEL_QW, this) = AdjustAirAccelQW(Physics_ClientOption(this, "airaccel_qw", autocvar_sv_airaccel_qw), maxspd_mod); + STAT(MOVEVARS_AIRSTRAFEACCEL_QW, this) = (Physics_ClientOption(this, "airstrafeaccel_qw", autocvar_sv_airstrafeaccel_qw)) + ? AdjustAirAccelQW(Physics_ClientOption(this, "airstrafeaccel_qw", autocvar_sv_airstrafeaccel_qw), maxspd_mod) + : 0; + STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, this) = Physics_ClientOption(this, "airspeedlimit_nonqw", autocvar_sv_airspeedlimit_nonqw) * maxspd_mod; + } bool vq3compat = autocvar_sv_vq3compat && autocvar_sv_vq3compat_changehitbox; // NOTE: these hitboxes are off by 1 due to engine differences STAT(PL_MIN, this) = (vq3compat) ? '-15 -15 -24' : autocvar_sv_player_mins; STAT(PL_MAX, this) = (vq3compat) ? '15 15 32' : autocvar_sv_player_maxs; @@ -61,7 +65,12 @@ void Physics_UpdateStats(entity this) // fix some new settings STAT(MOVEVARS_AIRACCEL_QW_STRETCHFACTOR, this) = Physics_ClientOption(this, "airaccel_qw_stretchfactor", autocvar_sv_airaccel_qw_stretchfactor); STAT(MOVEVARS_MAXAIRSTRAFESPEED, this) = Physics_ClientOption(this, "maxairstrafespeed", autocvar_sv_maxairstrafespeed); - STAT(MOVEVARS_MAXAIRSPEED, this) = Physics_ClientOption(this, "maxairspeed", autocvar_sv_maxairspeed); + if (autocvar_g_movement_highspeed_q3_compat) { + STAT(MOVEVARS_MAXAIRSPEED, this) = Physics_ClientOption(this, "maxairspeed", autocvar_sv_maxairspeed) * maxspd_mod; + } else { + STAT(MOVEVARS_MAXAIRSPEED, this) = Physics_ClientOption(this, "maxairspeed", autocvar_sv_maxairspeed); + } + STAT(MOVEVARS_AIRSTRAFEACCELERATE, this) = Physics_ClientOption(this, "airstrafeaccelerate", autocvar_sv_airstrafeaccelerate); STAT(MOVEVARS_WARSOWBUNNY_TURNACCEL, this) = Physics_ClientOption(this, "warsowbunny_turnaccel", autocvar_sv_warsowbunny_turnaccel); STAT(MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION, this) = Physics_ClientOption(this, "airaccel_sideways_friction", autocvar_sv_airaccel_sideways_friction); diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 7f3c0b7207..2c77cc85ab 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -169,6 +169,7 @@ float autocvar_g_maxspeed; bool autocvar_g_mirrordamage_onlyweapons; float autocvar_g_movement_highspeed = 1; +bool autocvar_g_movement_highspeed_q3_compat = 0; string autocvar_g_mutatormsg; //float autocvar_g_nick_flood_penalty; int autocvar_g_nick_flood_penalty_red; diff --git a/xonotic-server.cfg b/xonotic-server.cfg index 89a04782f8..84183daa95 100644 --- a/xonotic-server.cfg +++ b/xonotic-server.cfg @@ -487,6 +487,7 @@ set sv_q3acompat_machineshotgunswap 0 "shorthand for swapping machinegun and sho set sv_vq3compat 0 "toggle for some compatibility hacks (for VQ3 and CPM map compatibility in mapinfo files)" set g_movement_highspeed 1 "movement speed modification factor (only changes movement when above maxspeed)" +set g_movement_highspeed_q3_compat 0 "apply g_movement_highspeed in q3-compatible way (recommended for q3 defrag maps)" set g_maxspeed 0 "player speed limit, faster players are killed (0 for unlimited speed)" -- 2.39.2