From: Juhu <5894800-Juhu_@users.noreply.gitlab.com> Date: Wed, 26 Jan 2022 21:55:59 +0000 (+0100) Subject: make ring fade distance dependent on current ring radius X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=19ac60e44a2f111a891dd77a226ac9c38e9ce96b;p=xonotic%2Fxonotic-data.pk3dir.git make ring fade distance dependent on current ring radius --- diff --git a/gamemodes-server.cfg b/gamemodes-server.cfg index f81313c0f..70c754afa 100644 --- a/gamemodes-server.cfg +++ b/gamemodes-server.cfg @@ -605,5 +605,6 @@ set g_br_ring_timing "0.6 0.8 0.9" "timing values relative to g_br_ring_duration set g_br_ring_strength "2.5 5 10 20 50" "damage values for each stage including beginning and end" set g_br_ring_wait 30 "wait time before each ring stage" set g_br_ring_center_factor 0.25 "factor by which the ring can deviate from the center of the map, 0 means always completely centered, 1 means completely random within world bounds" -set g_br_ring_fadedistance 2000 "distance at which the ring slowly becomes visible until it reaches g_br_ring_alpha when standing right in front of it" +set g_br_ring_fadedistance 0.5 "value multiplied by the current ring radius defines the distance at which the ring slowly becomes visible until it reaches g_br_ring_alpha when standing right in front of it" +set g_br_ring_fadedistance_min 2000 "minimum value generated by g_br_ring_fadedistance" set g_br_ring_exitvehicle 0 "players can't use vehicles outside of the ring" diff --git a/qcsrc/common/gamemodes/gamemode/br/cl_ring.qc b/qcsrc/common/gamemodes/gamemode/br/cl_ring.qc index dd58c8a05..5f830769b 100644 --- a/qcsrc/common/gamemodes/gamemode/br/cl_ring.qc +++ b/qcsrc/common/gamemodes/gamemode/br/cl_ring.qc @@ -27,7 +27,8 @@ void ring_draw(entity this) } this.scale = current_radius / RING_MODEL_RADIUS; - this.alpha = max((1 - min(max(current_radius - vlen((csqcplayer.origin + csqcplayer.view_ofs) - this.origin), 0) / this.br_ring_fadedistance, 1)) * this.br_ring_alpha, 0.01); + float dist_to_ring = max(current_radius - vlen((csqcplayer.origin + csqcplayer.view_ofs) - this.origin), 0); + this.alpha = max((1 - min(dist_to_ring / max(current_radius * this.br_ring_fadedistance, this.br_ring_fadedistance_min), 1)) * this.br_ring_alpha, 0.01); } void ring_draw2d(entity this) @@ -88,7 +89,8 @@ NET_HANDLE(ENT_CLIENT_RING, bool isnew) this.br_ring_alpha = bound(0.01, ReadCoord(), 1); - this.br_ring_fadedistance = max(ReadCoord(), 1); + this.br_ring_fadedistance = max(ReadCoord(), 0); + this.br_ring_fadedistance_min = max(ReadCoord(), 1); this.br_ring_stage_count = max(ReadByte(), 1); this.br_ring_stage_waittime = max(ReadCoord(), 0); diff --git a/qcsrc/common/gamemodes/gamemode/br/ring.qh b/qcsrc/common/gamemodes/gamemode/br/ring.qh index 5e76989d8..5253771f6 100644 --- a/qcsrc/common/gamemodes/gamemode/br/ring.qh +++ b/qcsrc/common/gamemodes/gamemode/br/ring.qh @@ -11,6 +11,7 @@ const int BR_RING_MOVE = 4; .float br_ring_duration; .float br_ring_alpha; .float br_ring_fadedistance; +.float br_ring_fadedistance_min; .int br_ring_stage_count; .float br_ring_stage_waittime; .float br_ring_stage_timing[BR_RING_STAGE_MAX]; diff --git a/qcsrc/common/gamemodes/gamemode/br/sv_ring.qc b/qcsrc/common/gamemodes/gamemode/br/sv_ring.qc index 6404f1d70..815b26335 100644 --- a/qcsrc/common/gamemodes/gamemode/br/sv_ring.qc +++ b/qcsrc/common/gamemodes/gamemode/br/sv_ring.qc @@ -15,7 +15,8 @@ void ring_alignPosition(entity this); float autocvar_g_br_ring_duration = 150; vector autocvar_g_br_ring_color = '1 0 0'; // FIXME: put visual-only cvar client side? float autocvar_g_br_ring_alpha = 0.5; // FIXME: put visual-only cvar client side? -float autocvar_g_br_ring_fadedistance = 2000; // FIXME: put visual-only cvar client side? +float autocvar_g_br_ring_fadedistance = 0.5; // FIXME: put visual-only cvar client side? +float autocvar_g_br_ring_fadedistance_min = 2000; // FIXME: put visual-only cvar client side? float autocvar_g_br_ring_radius = -1; // useful for per map settings string autocvar_g_br_ring_timing = "0.6 0.8 0.9"; string autocvar_g_br_ring_strength = "2.5 5 10 20 50"; @@ -37,7 +38,8 @@ entity ring_initialize() this.br_ring_stage = -1; this.colormod = autocvar_g_br_ring_color; // TODO: color changing ring this.alpha = this.br_ring_alpha = bound(0.01, autocvar_g_br_ring_alpha, 1); - this.br_ring_fadedistance = max(autocvar_g_br_ring_fadedistance, 1); + this.br_ring_fadedistance = max(autocvar_g_br_ring_fadedistance, 0); + this.br_ring_fadedistance_min = max(autocvar_g_br_ring_fadedistance_min, 1); this.br_ring_stage_waittime = max(autocvar_g_br_ring_wait, 0); bool has_invalid_timings = ring_parseTiming(this); @@ -73,6 +75,7 @@ bool ring_send(entity this, entity to, float sf) WriteVector(MSG_ENTITY, this.colormod); WriteCoord(MSG_ENTITY, this.br_ring_alpha); WriteCoord(MSG_ENTITY, this.br_ring_fadedistance); + WriteCoord(MSG_ENTITY, this.br_ring_fadedistance_min); WriteByte(MSG_ENTITY, this.br_ring_stage_count); WriteCoord(MSG_ENTITY, this.br_ring_stage_waittime);