From a4e769ca53d1b3a90920d1c25f4a1acea317c8cd Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 1 May 2006 10:56:53 +0000 Subject: [PATCH] weakened skills 0 to 2: 0 - only 80% aggressivity, no rocket detonating 1 - only 90% aggressivity, no rocket detonating 2 - 95% aggressivity 3 and higher - unchanged git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1357 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/gamec/bots.c | 11 ++- data/qcsrc/server/gamec/w_rocketlauncher.c | 83 +++++++++++----------- 2 files changed, 53 insertions(+), 41 deletions(-) diff --git a/data/qcsrc/server/gamec/bots.c b/data/qcsrc/server/gamec/bots.c index 9afa062f0..fbed4f8f9 100644 --- a/data/qcsrc/server/gamec/bots.c +++ b/data/qcsrc/server/gamec/bots.c @@ -1265,6 +1265,7 @@ float sv_maxspeed; .float bot_pickup; .float(entity player, entity item) bot_pickupevalfunc; .float bot_pickupbasevalue; +.float bot_canfire; // used for aiming currently // FIXME: make the weapon code use these and then replace the calculations here with a call to the weapon code @@ -1417,6 +1418,14 @@ void(float t, float f1, float f2, entity e1, vector v1, vector v2, vector v3, ve self.bot_aimselfvelocity = v2; self.bot_aimtargorigin = v3; self.bot_aimtargvelocity = v4; + if(skill <= 0) + self.bot_canfire = (random() < 0.8); + else if(skill <= 1) + self.bot_canfire = (random() < 0.9); + else if(skill <= 2) + self.bot_canfire = (random() < 0.95); + else + self.bot_canfire = 1; }; float(vector v, float maxfiredeviation) bot_aimdir = @@ -1533,7 +1542,7 @@ float(vector v, float maxfiredeviation) bot_aimdir = self.bot_firetimer = time + 0.3; //dprint(" diff:", vtos(diffang), "\n"); - return time < self.bot_firetimer; + return self.bot_canfire && (time < self.bot_firetimer); }; vector(vector targorigin, vector targvelocity, float shotspeed, float shotdelay) bot_shotlead = diff --git a/data/qcsrc/server/gamec/w_rocketlauncher.c b/data/qcsrc/server/gamec/w_rocketlauncher.c index 9cb2a4062..1e1997eef 100644 --- a/data/qcsrc/server/gamec/w_rocketlauncher.c +++ b/data/qcsrc/server/gamec/w_rocketlauncher.c @@ -20,49 +20,52 @@ void(float req) w_rlauncher = { // aim and decide to fire if appropriate self.button0 = bot_aim(cvar("g_balance_rocketlauncher_speed"), 0, cvar("g_balance_rocketlauncher_lifetime"), FALSE); - // decide whether to detonate rockets - local entity missile, targetlist, targ; - local float edgedamage, coredamage, edgeradius, recipricoledgeradius, d; - local float selfdamage, teamdamage, enemydamage; - edgedamage = cvar("g_balance_rocketlauncher_edgedamage"); - coredamage = cvar("g_balance_rocketlauncher_damage"); - edgeradius = cvar("g_balance_rocketlauncher_radius"); - recipricoledgeradius = 1 / edgeradius; - selfdamage = 0; - teamdamage = 0; - enemydamage = 0; - targetlist = findchainfloat(bot_attack, TRUE); - missile = find(world, classname, "missile"); - while (missile) + if(skill >= 2) // skill 0 and 1 bots won't detonate rockets! { - targ = targetlist; - while (targ) + // decide whether to detonate rockets + local entity missile, targetlist, targ; + local float edgedamage, coredamage, edgeradius, recipricoledgeradius, d; + local float selfdamage, teamdamage, enemydamage; + edgedamage = cvar("g_balance_rocketlauncher_edgedamage"); + coredamage = cvar("g_balance_rocketlauncher_damage"); + edgeradius = cvar("g_balance_rocketlauncher_radius"); + recipricoledgeradius = 1 / edgeradius; + selfdamage = 0; + teamdamage = 0; + enemydamage = 0; + targetlist = findchainfloat(bot_attack, TRUE); + missile = find(world, classname, "missile"); + while (missile) { - d = vlen(targ.origin + (targ.mins + targ.maxs) * 0.5 - missile.origin); - d = edgedamage + (coredamage - edgedamage) * (1 - d * recipricoledgeradius); - // count potential damage according to type of target - if (targ == self) - selfdamage = selfdamage + d; - else if (targ.team == self.team && teamplay) - teamdamage = teamdamage + d; - else if (bot_shouldattack(targ)) - enemydamage = enemydamage + d; - targ = targ.chain; + targ = targetlist; + while (targ) + { + d = vlen(targ.origin + (targ.mins + targ.maxs) * 0.5 - missile.origin); + d = edgedamage + (coredamage - edgedamage) * (1 - d * recipricoledgeradius); + // count potential damage according to type of target + if (targ == self) + selfdamage = selfdamage + d; + else if (targ.team == self.team && teamplay) + teamdamage = teamdamage + d; + else if (bot_shouldattack(targ)) + enemydamage = enemydamage + d; + targ = targ.chain; + } + missile = find(missile, classname, "missile"); + } + local float desirabledamage; + desirabledamage = enemydamage; + if (teamplay != 1 && time > self.invincible_finished && time > self.spawnshieldtime) + desirabledamage = desirabledamage - selfdamage * cvar("g_balance_selfdamagepercent"); + if (self.team && teamplay == 2) + desirabledamage = desirabledamage - teamdamage; + // if we would be doing at least half of the core damage, detonate it + // but don't fire a new shot at the same time! + if (desirabledamage >= 0.5 * coredamage) + { + self.button3 = TRUE; + self.button0 = FALSE; } - missile = find(missile, classname, "missile"); - } - local float desirabledamage; - desirabledamage = enemydamage; - if (teamplay != 1 && time > self.invincible_finished && time > self.spawnshieldtime) - desirabledamage = desirabledamage - selfdamage * cvar("g_balance_selfdamagepercent"); - if (self.team && teamplay == 2) - desirabledamage = desirabledamage - teamdamage; - // if we would be doing at least half of the core damage, detonate it - // but don't fire a new shot at the same time! - if (desirabledamage >= 0.5 * coredamage) - { - self.button3 = TRUE; - self.button0 = FALSE; } } else if (req == WR_FIRE1) -- 2.39.2