if(time > physics_update_time)
{
// workaround for ftos_decimals returning a negative 0
- if(discrete_acceleration > -1 / (10 ** acc_decimals) && discrete_acceleration < 0)
+ if(discrete_acceleration > -1 / EXP(10, acc_decimals) && discrete_acceleration < 0)
discrete_acceleration = 0;
discrete_acceleration = acceleration;
discrete_speed = speed;
// distribution display
distribution = me.(scores(ps_primary)) - pl.(scores(ps_primary));
- distrtimer = ftos_decimals(fabs(distribution/(10 ** TIME_DECIMALS)), TIME_DECIMALS);
+ distrtimer = ftos_decimals(fabs(distribution/EXP(10, TIME_DECIMALS)), TIME_DECIMALS);
if (distribution <= 0) {
distribution_color = '0 1 0';
current_zoomfraction = (current_viewzoom - 1) / (1/zoomfactor - 1);
if(zoomsensitivity < 1)
- setsensitivityscale(current_viewzoom ** (1 - zoomsensitivity));
+ setsensitivityscale(EXP(current_viewzoom, (1 - zoomsensitivity)));
else
setsensitivityscale(1);
t = (time - blurtest_time0) / (blurtest_time1 - blurtest_time0);
r = t * blurtest_radius;
- f = 1 / (t ** blurtest_power) - 1;
+ f = 1 / EXP(t, blurtest_power) - 1;
cvar_set("r_glsl_postprocess", "1");
cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(r), " ", ftos(f), " 0 0"));
rpn_setf(f2 - f * floor(f2 / f));
} else if(rpncmd == "pow" || rpncmd == "**") {
f = rpn_popf();
- rpn_setf(rpn_getf() ** f);
+ rpn_setf(EXP(rpn_getf(), f));
} else if(rpncmd == "bitand" || rpncmd == "&") {
f = rpn_popf();
rpn_setf(rpn_getf() & f);
float upspeed = this.velocity * v_up;
// responsiveness factor for steering and acceleration
- float f = 1 / (1 + ((max(-myspeed, myspeed) / PHYS_BUGRIGS_SPEED_REF(this)) ** PHYS_BUGRIGS_SPEED_POW(this)));
+ float f = 1 / (1 + EXP((max(-myspeed, myspeed) / PHYS_BUGRIGS_SPEED_REF(this)), PHYS_BUGRIGS_SPEED_POW(this)));
//MAXIMA: f(v) := 1 / (1 + (v / PHYS_BUGRIGS_SPEED_REF(this)) ^ PHYS_BUGRIGS_SPEED_POW(this));
float steerfactor;
float myspeed = vlen(this.velocity);
// responsiveness factor for steering and acceleration
- float f = 1 / (1 + (max(0, myspeed / PHYS_BUGRIGS_SPEED_REF(this)) ** PHYS_BUGRIGS_SPEED_POW(this)));
+ float f = 1 / (1 + EXP(max(0, myspeed / PHYS_BUGRIGS_SPEED_REF(this)), PHYS_BUGRIGS_SPEED_POW(this)));
float steerfactor = -myspeed * f;
this.angles_y += steer * dt * steerfactor; // apply steering
if(!pushdeltatime) return;
// div0: ticrate independent, 1 = identity (not 20)
- toucher.velocity = toucher.velocity * (autocvar_g_nades_entrap_strength ** pushdeltatime);
+ toucher.velocity = toucher.velocity * EXP(autocvar_g_nades_entrap_strength, pushdeltatime);
#ifdef SVQC
UpdateCSQCProjectile(toucher);
void Draw_WaypointSprite(entity this)
{
if (this.lifetime > 0)
- this.alpha = (bound(0, (this.fadetime - time) / this.lifetime, 1) ** waypointsprite_timealphaexponent);
+ this.alpha = EXP(bound(0, (this.fadetime - time) / this.lifetime, 1), waypointsprite_timealphaexponent);
else
this.alpha = 1;
float a = this.alpha * autocvar_hud_panel_fg_alpha;
if (this.maxdistance > waypointsprite_normdistance)
- a *= (bound(0, (this.maxdistance - dist) / (this.maxdistance - waypointsprite_normdistance), 1) ** waypointsprite_distancealphaexponent);
+ a *= EXP(bound(0, (this.maxdistance - dist) / (this.maxdistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent);
else if (this.maxdistance > 0)
- a *= (bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1) ** waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha;
+ a *= EXP(bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha;
vector rgb = spritelookupcolor(this, spriteimage, this.teamradar_color);
if (rgb == '0 0 0')
(vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o.x,
(vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o.y);
- float crosshairdistance = sqrt( ((o.x - vid_conwidth/2) ** 2) + ((o.y - vid_conheight/2) ** 2) );
+ float crosshairdistance = sqrt(EXP((o.x - vid_conwidth/2), 2) + EXP((o.y - vid_conheight/2), 2) );
t = waypointsprite_scale;
a *= waypointsprite_alpha;
{
return a == 0 ? (_lerp < 1 ? 0 : b)
: b == 0 ? (_lerp > 0 ? 0 : a)
- : a * (fabs(b / a) ** _lerp);
+ : a * EXP(fabs(b / a), _lerp);
}
void PM_ClientMovement_UpdateStatus(entity this)
if (dot > 0) // we can't change direction while slowing down
{
- k *= (dot ** PHYS_AIRCONTROL_POWER(this)) * dt;
+ k *= EXP(dot, PHYS_AIRCONTROL_POWER(this)) * dt;
xyspeed = max(0, xyspeed - PHYS_AIRCONTROL_PENALTY(this) * sqrt(max(0, 1 - dot*dot)) * k/32);
k *= PHYS_AIRCONTROL(this);
this.velocity = normalize(this.velocity * xyspeed + wishdir * k);
if(!pushdeltatime) return;
// div0: ticrate independent, 1 = identity (not 20)
- toucher.velocity = toucher.velocity * (this.strength ** pushdeltatime);
+ toucher.velocity = toucher.velocity * EXP(this.strength, pushdeltatime);
#ifdef SVQC
UpdateCSQCProjectile(toucher);
else
{
if(!this.strength) this.strength = 0.9;
- this.strength = (this.strength ** autocvar_g_triggerimpulse_accel_power) * autocvar_g_triggerimpulse_accel_multiplier;
+ this.strength = EXP(this.strength, autocvar_g_triggerimpulse_accel_power) * autocvar_g_triggerimpulse_accel_multiplier;
settouch(this, trigger_impulse_touch2);
}
}
if(this.maxdistance > waypointsprite_normdistance)
- a *= (bound(0, (this.maxdistance - dist) / (this.maxdistance - waypointsprite_normdistance), 1) ** waypointsprite_distancealphaexponent);
+ a *= EXP(bound(0, (this.maxdistance - dist) / (this.maxdistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent);
else if(this.maxdistance > 0)
- a *= (bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1) ** waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha;
+ a *= EXP(bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha;
if(rgb == '0 0 0')
{
(vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x,
(vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o_y);
- float crosshairdistance = sqrt( ((o.x - vid_conwidth/2) ** 2) + ((o.y - vid_conheight/2) ** 2) );
+ float crosshairdistance = sqrt( EXP((o.x - vid_conwidth/2), 2) + EXP((o.y - vid_conheight/2), 2) );
t = waypointsprite_scale;
a *= waypointsprite_alpha;
STATIC_INIT(compressShortVector)
{
float l = 1;
- float f = (2 ** (1/8));
+ float f = EXP(2, (1/8));
int i;
for(i = 0; i < 128; ++i)
{
if (a >= 24)
{
a -= 24;
- return '0 0 1' * (2 ** a);
+ return '0 0 1' * EXP(2, a);
}
- return '0 1 0' * (2 ** a);
+ return '0 1 0' * EXP(2, a);
}
- return '1 0 0' * (2 ** a);
+ return '1 0 0' * EXP(2, a);
}
#ifdef SVQC
void WriteWepSet(float dst, WepSet w)
return avg_origin; // nothing to do
// yes, mathematically we can do this in ONE step, but beware of 32bit floats...
- avg_dist = (vlen(e.origin - avg_origin) ** 2);
+ avg_dist = EXP(vlen(e.origin - avg_origin), 2);
for(p = e; (p = p.queuenext) != e; )
- avg_dist += (vlen(WarpZone_RefSys_TransformOrigin(p, e, p.origin) - avg_origin) ** 2);
+ avg_dist += EXP(vlen(WarpZone_RefSys_TransformOrigin(p, e, p.origin) - avg_origin), 2);
avg_dist *= (1.0 / n);
avg_dist = sqrt(avg_dist);
float dt, dmg_remaining_next, f;
dt = time - this.teleport_time;
- dmg_remaining_next = (bound(0, 1 - dt / this.dmg_duration, 1) ** this.dmg_power);
+ dmg_remaining_next = EXP(bound(0, 1 - dt / this.dmg_duration, 1), this.dmg_power);
f = this.dmg_last - dmg_remaining_next;
this.dmg_last = dmg_remaining_next;
if (restart) {
snd1 = TUBA_STARTNOTE(e.tuba_instrument, e.note - m + Tuba_PitchStep);
}
- speed1 = (2.0 ** ((m - Tuba_PitchStep) / 12.0));
+ speed1 = EXP(2.0, ((m - Tuba_PitchStep) / 12.0));
} else if (e.note - m + Tuba_PitchStep > TUBA_MAX) {
if (restart) {
snd1 = TUBA_STARTNOTE(e.tuba_instrument, e.note - m);
}
- speed1 = (2.0 ** (m / 12.0));
+ speed1 = EXP(2.0, (m / 12.0));
} else {
if (restart) {
snd1 = TUBA_STARTNOTE(e.tuba_instrument, e.note - m);
}
vol1 = cos(M_PI_2 * m / Tuba_PitchStep);
- speed1 = (2.0 ** (m / 12.0));
+ speed1 = EXP(2.0, (m / 12.0));
if (restart) {
snd2 = TUBA_STARTNOTE(e.tuba_instrument, e.note - m + Tuba_PitchStep);
}
vol2 = sin(M_PI_2 * m / Tuba_PitchStep);
- speed2 = (2.0 ** ((m - Tuba_PitchStep) / 12.0));
+ speed2 = EXP(2.0, ((m - Tuba_PitchStep) / 12.0));
}
} else if (restart) {
snd1 = TUBA_STARTNOTE(e.tuba_instrument, e.note);
#include "lib/float.qh"
+// uncrustify doesn't like the ** operator so let's wrap it in this wonderful macro
+// *INDENT-OFF*
+#define EXP(a, e) ((a) ** (e))
+// *INDENT-ON*
+
ERASEABLE
void mean_accumulate(entity e, .float a, .float c, float mean, float value, float weight)
{
if (weight == 0) return;
- if (mean == 0) e.(a) *= (value ** weight);
- else e.(a) += (value ** mean) * weight;
+ if (mean == 0) e.(a) *= EXP(value, weight);
+ else e.(a) += EXP(value, mean) * weight;
e.(c) += weight;
}
float mean_evaluate(entity e, .float a, .float c, float mean)
{
if (e.(c) == 0) return 0;
- if (mean == 0) return (e.(a) ** (1.0 / e.(c)));
- else return ((e.(a) / e.(c)) ** (1.0 / mean));
+ if (mean == 0) return EXP(e.(a), (1.0 / e.(c)));
+ else return EXP((e.(a) / e.(c)), (1.0 / mean));
}
#define MEAN_ACCUMULATE(s, prefix, v, w) mean_accumulate(s, prefix##_accumulator, prefix##_count, prefix##_mean, v, w)
ERASEABLE
float ExponentialFalloff(float mindist, float maxdist, float halflifedist, float d)
{
- if (halflifedist > 0) return (0.5 ** ((bound(mindist, d, maxdist) - mindist) / halflifedist));
- else if (halflifedist < 0) return (0.5 ** ((bound(mindist, d, maxdist) - maxdist) / halflifedist));
+ if (halflifedist > 0) return EXP(0.5, ((bound(mindist, d, maxdist) - mindist) / halflifedist));
+ else if (halflifedist < 0) return EXP(0.5, ((bound(mindist, d, maxdist) - maxdist) / halflifedist));
else return 1;
}
-#define power2of(e) (2 ** e)
+#define power2of(e) EXP(2, e)
ERASEABLE
float log2of(float e)
float f;
f = dt * 60;
// http://home.earthlink.net/~ltrammell/tech/pinkalg.htm
- if (random() > (0.3190 ** f)) e.noise_paccum = 0.34848 * (2 * random() - 1);
- if (random() > (0.7756 ** f)) e.noise_paccum2 = 0.28768 * (2 * random() - 1);
- if (random() > (0.9613 ** f)) e.noise_paccum3 = 0.43488 * (2 * random() - 1);
+ if (random() > EXP(0.3190, f)) e.noise_paccum = 0.34848 * (2 * random() - 1);
+ if (random() > EXP(0.7756, f)) e.noise_paccum2 = 0.28768 * (2 * random() - 1);
+ if (random() > EXP(0.9613, f)) e.noise_paccum3 = 0.43488 * (2 * random() - 1);
return e.noise_paccum + e.noise_paccum2 + e.noise_paccum3;
}
ERASEABLE
ERASEABLE
float Noise_Burst(entity e, float dt, float p)
{
- if (random() > (p ** dt)) e.noise_bstate = !e.noise_bstate;
+ if (random() > EXP(p, dt)) e.noise_bstate = !e.noise_bstate;
return 2 * e.noise_bstate - 1;
}
#include "mathlib.qh"
-#if defined(CSQC)
-#elif defined(MENUQC)
-#elif defined(SVQC)
-#endif
+
+#include <lib/math.qh>
int fpclassify(float e)
{
float exp(float e)
{
- return (M_E ** e);
+ return EXP(M_E, e);
}
float exp2(float e)
{
- return (2 ** e);
+ return EXP(2, e);
}
float expm1(float e)
{
vector v;
v.z = 0;
v.y = ilogb(e) + 1;
- v.x = e / (2 ** v.y);
+ v.x = e / EXP(2, v.y);
return v;
}
int ilogb(float e)
}
float ldexp(float e, int e)
{
- return e * (2 ** e);
+ return e * EXP(2, e);
}
float logn(float e, float base)
{
float scalbn(float e, int n)
{
- return e * (2 ** n);
+ return e * EXP(2, n);
}
float cbrt(float e)
{
- return copysign((fabs(e) ** (1.0/3.0)), e);
+ return copysign(EXP(fabs(e), (1.0/3.0)), e);
}
float hypot(float e, float f)
{
{
return
(
- 2500 * (0.25 ** max(0, cvar("gl_picmip") + cvar("gl_picmip_other")))
- + 1500 * (0.25 ** max(0, cvar("gl_picmip") + cvar("gl_picmip_world")))
+ 2500 * EXP(0.25, max(0, cvar("gl_picmip") + cvar("gl_picmip_other")))
+ + 1500 * EXP(0.25, max(0, cvar("gl_picmip") + cvar("gl_picmip_world")))
) * ((s3tc && (cvar("r_texture_dds_load") || cvar("gl_texturecompression"))) ? 0.2 : 1.0); // TC: normalmaps 50%, other 25%, few incompressible, guessing 40% as conservative average
}
void XonoticPicmipSlider_autofix(entity me)
blendrate = autocvar_bot_ai_aimskill_blendrate;
r = max(fixedrate, blendrate);
//this.v_angle = this.v_angle + diffang * bound(frametime, r * frametime * (2+skill*skill*0.05-random()*0.05*(10-skill)), 1);
- this.v_angle = this.v_angle + diffang * bound(delta_t, r * delta_t * (2 + ((skill + this.bot_mouseskill) ** 3) * 0.005 - random()), 1);
+ this.v_angle = this.v_angle + diffang * bound(delta_t, r * delta_t * (2 + EXP((skill + this.bot_mouseskill), 3) * 0.005 - random()), 1);
this.v_angle = this.v_angle * bound(0,autocvar_bot_ai_aimskill_mouse,1) + desiredang * bound(0,(1-autocvar_bot_ai_aimskill_mouse),1);
//this.v_angle = this.v_angle + diffang * bound(0, r * frametime * (skill * 0.5 + 2), 1);
//this.v_angle = this.v_angle + diffang * (1/ blendrate);
if(autocvar_bot_god)
this.flags |= FL_GODMODE;
- this.bot_nextthink = max(time, this.bot_nextthink) + max(0.01, autocvar_bot_ai_thinkinterval * (0.5 ** this.bot_aiskill) * min(14 / (skill + 14), 1));
+ this.bot_nextthink = max(time, this.bot_nextthink) + max(0.01, autocvar_bot_ai_thinkinterval * EXP(0.5, this.bot_aiskill) * min(14 / (skill + 14), 1));
//if (this.bot_painintensity > 0)
// this.bot_painintensity = this.bot_painintensity - (skill + 1) * 40 * frametime;
dxy = this.origin - ( ( this.goalcurrent.absmin + this.goalcurrent.absmax ) * 0.5 ); dxy.z = 0;
d = vlen(dxy);
v = vlen(this.velocity - this.velocity.z * '0 0 1');
- db = ((v ** 2) / (autocvar_g_jetpack_acceleration_side * 2)) + 100;
+ db = (EXP(v, 2) / (autocvar_g_jetpack_acceleration_side * 2)) + 100;
// dprint("distance ", ftos(ceil(d)), " velocity ", ftos(ceil(v)), " brake at ", ftos(ceil(db)), "\n");
if(d < db || d < 500)
{
this.lastcombotime = time;
}
- distance *= (2 ** this.bot_rangepreference);
+ distance *= EXP(2, this.bot_rangepreference);
// Custom weapon list based on distance to the enemy
if(bot_custom_weapon){
{
case "all":
if(enabled)
- this.bot_cmd_keys = (2 ** 20) - 1; // >:)
+ this.bot_cmd_keys = EXP(2, 20) - 1; // >:)
else
this.bot_cmd_keys = BOT_CMD_KEY_NONE;
case "forward":
dragger.dragdistance = vlen(touchpoint - dragger.origin - dragger.view_ofs);
dragger.draglocalangle = draggee.angles.y - dragger.v_angle.y;
touchpoint = touchpoint - gettaginfo(draggee, 0);
- tagscale = (vlen(v_forward) ** -2);
+ tagscale = EXP(vlen(v_forward), -2);
dragger.draglocalvector_x = touchpoint * v_forward * tagscale;
dragger.draglocalvector_y = touchpoint * v_right * tagscale;
dragger.draglocalvector_z = touchpoint * v_up * tagscale;
void Drag_SetSpeed(entity dragger, float s)
{
- dragger.dragspeed = (2 ** s);
+ dragger.dragspeed = EXP(2, s);
}
void Drag_MoveBackward(entity dragger)
LOG_INFOF("THROUGHFLOOR: D=%f F=%f max(dD)=1/%f max(dF)=1/%f", finaldmg, vlen(force), mininv_d, mininv_f);
- total = 0.25 * (max(mininv_f, mininv_d) ** 2);
+ total = 0.25 * EXP(max(mininv_f, mininv_d), 2);
if(autocvar_g_throughfloor_debug)
LOG_INFOF(" steps=%f", total);
string newlist;
// now reinsert this at another position
- insertpos = (random() ** (1 / exponent)); // ]0, 1]
+ insertpos = EXP(random(), (1 / exponent)); // ]0, 1]
insertpos = insertpos * (Map_Count - 1); // ]0, Map_Count - 1]
insertpos = ceil(insertpos) + 1; // {2, 3, 4, ..., Map_Count}
LOG_TRACE("SHUFFLE: insert pos = ", ftos(insertpos));
float tagscale;
org = e.origin - gettaginfo(to, gettagindex(to, tag));
- tagscale = (vlen(v_forward) ** -2); // undo a scale on the tag
+ tagscale = EXP(vlen(v_forward), -2); // undo a scale on the tag
t_forward = v_forward * tagscale;
t_left = v_right * -tagscale;
t_up = v_up * tagscale;
f = key.team;
else
f = 30;
- s |= (32 ** key.count) * f;
+ s |= EXP(32, key.count) * f;
}
FOREACH_CLIENT(true, { it.kh_state = s; });
FOR_EACH_KH_KEY(key)
{
if(key.owner)
- key.owner.kh_state |= (32 ** key.count) * 31;
+ key.owner.kh_state |= EXP(32, key.count) * 31;
}
//print(ftos((nextent(NULL)).kh_state), "\n");
}
++players;
});
if (!players)
- missing_teams |= (2 ** i);
+ missing_teams |= EXP(2, i);
}
return missing_teams;
}
}
if(score)
if(teamscores_label(scorefield) != "")
- s.SendFlags |= (2 ** scorefield);
+ s.SendFlags |= EXP(2, scorefield);
return (s.(teamscores(scorefield)) += score);
}
FOREACH(Scores, true, {
if(sk.(scores(it)) != 0)
if(scores_label(it) != "")
- sk.SendFlags |= (2 ** (i % 16));
+ sk.SendFlags |= EXP(2, (i % 16));
if(i != SP_ELO.m_id)
sk.(scores(it)) = 0;
});
FOREACH(Scores, true, {
if(sk.(scores(it)) != 0)
if(scores_label(it) != "")
- sk.SendFlags |= (2 ** (i % 16));
+ sk.SendFlags |= EXP(2, (i % 16));
if(i != SP_ELO.m_id)
sk.(scores(it)) = 0;
});
{
if(sk.(teamscores(j)) != 0)
if(teamscores_label(j) != "")
- sk.SendFlags |= (2 ** j);
+ sk.SendFlags |= EXP(2, j);
sk.(teamscores(j)) = 0;
}
}
return s.(scores(scorefield));
}
if(scores_label(scorefield) != "")
- s.SendFlags |= (2 ** (scorefield.m_id % 16));
+ s.SendFlags |= EXP(2, (scorefield.m_id % 16));
if(!warmup_stage)
PS_GR_P_ADDVAL(s.owner, strcat(PLAYERSTATS_TOTAL, scores_label(scorefield)), score);
return (s.(scores(scorefield)) += score);
RandomSelection_Init();
for(spot = firstspot; spot; spot = spot.chain)
- RandomSelection_AddEnt(spot, (bound(lower, spot.spawnpoint_score.y, upper) ** exponent) * spot.cnt, (spot.spawnpoint_score.y >= lower) * 0.5 + spot.spawnpoint_score.x);
+ RandomSelection_AddEnt(spot, EXP(bound(lower, spot.spawnpoint_score.y, upper), exponent) * spot.cnt, (spot.spawnpoint_score.y >= lower) * 0.5 + spot.spawnpoint_score.x);
return RandomSelection_chosen_ent;
}