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"
}
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)
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);
.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];
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";
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);
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);