From: Jakob MG Date: Wed, 26 Oct 2011 07:09:26 +0000 (+0200) Subject: g_vehicle_*_bouncefactor - allow setting bouncyness per vehicle. g_vehicle_*_bouncest... X-Git-Tag: xonotic-v0.6.0~35^2~78^2~8 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=52821998dcc98b69d13db2442e1ef34241daf10f;p=xonotic%2Fxonotic-data.pk3dir.git g_vehicle_*_bouncefactor - allow setting bouncyness per vehicle. g_vehicle_*_bouncestop - allow stopspeed per vehicle. g_vehicle_*_bouncepain - allow world colission pain per vehicle. Fix raptor landing animation. --- diff --git a/qcsrc/server/vehicles/racer.qc b/qcsrc/server/vehicles/racer.qc index e3c74c5e1..ff7f2e483 100644 --- a/qcsrc/server/vehicles/racer.qc +++ b/qcsrc/server/vehicles/racer.qc @@ -66,6 +66,10 @@ float autocvar_g_vehicle_racer_blowup_coredamage; float autocvar_g_vehicle_racer_blowup_edgedamage; float autocvar_g_vehicle_racer_blowup_forceintensity; +float autocvar_g_vehicle_racer_bouncefactor; +float autocvar_g_vehicle_racer_bouncestop; +vector autocvar_g_vehicle_racer_bouncepain; + var vector racer_force_from_tag(string tag_name, float spring_length, float max_power); void racer_align4point() @@ -527,6 +531,13 @@ void racer_exit(float eject) self.owner = world; } +void racer_worldimpact() +{ + if(self.play_time < time) + if(autocvar_g_vehicle_racer_bouncepain_x) + vehilces_worldimpact(autocvar_g_vehicle_racer_bouncepain_x, autocvar_g_vehicle_racer_bouncepain_y, autocvar_g_vehicle_racer_bouncepain_z); + +} void racer_spawn() { @@ -541,6 +552,10 @@ void racer_spawn() self.scale = 0.5; setsize(self, RACER_MIN * 0.5, RACER_MAX * 0.5); + self.bouncefactor = autocvar_g_vehicle_racer_bouncefactor; + self.bouncestop = autocvar_g_vehicle_racer_bouncestop; + self.vehicle_worldimpact = racer_worldimpact; + //self.destvec = autocvar_g_vehicle_racer_bouncepain; } diff --git a/qcsrc/server/vehicles/raptor.qc b/qcsrc/server/vehicles/raptor.qc index 201c186c3..63509aecd 100644 --- a/qcsrc/server/vehicles/raptor.qc +++ b/qcsrc/server/vehicles/raptor.qc @@ -57,6 +57,10 @@ float autocvar_g_vehicle_raptor_shield; float autocvar_g_vehicle_raptor_shield_regen; float autocvar_g_vehicle_raptor_shield_regen_pause; +float autocvar_g_vehicle_raptor_bouncefactor; +float autocvar_g_vehicle_raptor_bouncestop; +vector autocvar_g_vehicle_raptor_bouncepain; + void raptor_spawn(); float raptor_frame(); float raptor_takeoff(); @@ -66,7 +70,7 @@ float raptor_takeoff(); float raptor_altitude(float amax) { - tracebox(self.origin, self.mins, self.maxs, self.origin - ('0 0 1' * amax), TRUE, self); + tracebox(self.origin, self.mins, self.maxs, self.origin - ('0 0 1' * amax), MOVE_WORLDONLY, self); return vlen(self.origin - trace_endpos); } @@ -194,26 +198,26 @@ void raptor_enter() } void raptor_land() -{ - +{ float hgt; - - hgt = raptor_altitude(512); + + hgt = raptor_altitude(512); self.velocity = (self.velocity * 0.9) + ('0 0 -1800' * (hgt / 256) * sys_frametime); self.angles_x *= 0.95; self.angles_z *= 0.95; if(hgt < 128) - if(self.frame != 0) - self.frame = max(self.frame - 0.25, 0); + if(hgt > 0) + self.frame = (hgt / 128) * 25; self.bomb1.gun1.avelocity_y = 90 + ((self.frame / 25) * 2000); self.bomb1.gun2.avelocity_y = -self.bomb1.gun1.avelocity_y; if(hgt < 16) { - self.movetype = MOVETYPE_TOSS; - self.think = raptor_think; + self.movetype = MOVETYPE_TOSS; + self.think = raptor_think; + self.frame = 0; } self.nextthink = time; @@ -591,6 +595,13 @@ void raptor_die() self.touch = raptor_blowup; } +void raptor_worldimpact() +{ + if(self.play_time < time) + if(autocvar_g_vehicle_raptor_bouncepain_x) + vehilces_worldimpact(autocvar_g_vehicle_raptor_bouncepain_x, autocvar_g_vehicle_raptor_bouncepain_y, autocvar_g_vehicle_raptor_bouncepain_z); +} + void raptor_spawn() { self.frame = 0; @@ -605,6 +616,10 @@ void raptor_spawn() setsize(self, RAPTOR_MIN, RAPTOR_MAX ); self.delay = time; + + self.bouncefactor = autocvar_g_vehicle_raptor_bouncefactor; + self.bouncestop = autocvar_g_vehicle_raptor_bouncestop; + self.vehicle_worldimpact = raptor_worldimpact; } // If we dont do this ever now and then, the raptors rotors diff --git a/qcsrc/server/vehicles/spiderbot.qc b/qcsrc/server/vehicles/spiderbot.qc index f43ec08e5..903d3b204 100644 --- a/qcsrc/server/vehicles/spiderbot.qc +++ b/qcsrc/server/vehicles/spiderbot.qc @@ -51,6 +51,11 @@ float autocvar_g_vehicle_spiderbot_rocket_noise; float autocvar_g_vehicle_spiderbot_rocket_turnrate; float autocvar_g_vehicle_spiderbot_rocket_lifetime; +float autocvar_g_vehicle_spiderbot_bouncefactor; +float autocvar_g_vehicle_spiderbot_bouncestop; +vector autocvar_g_vehicle_spiderbot_bouncepain; + + void spiderbot_exit(float eject); void spiderbot_enter(); void spiderbot_spawn(); @@ -480,7 +485,12 @@ void spiderbot_exit(float eject) self.owner = world; } - +void spider_worldimpact() +{ + if(self.play_time < time) + if(autocvar_g_vehicle_spiderbot_bouncepain_x) + vehilces_worldimpact(autocvar_g_vehicle_spiderbot_bouncepain_x, autocvar_g_vehicle_spiderbot_bouncepain_y, autocvar_g_vehicle_spiderbot_bouncepain_z); +} void spiderbot_spawn() { self.frame = 5; @@ -496,6 +506,7 @@ void spiderbot_spawn() setorigin(self, self.pos1 + '0 0 128'); self.angles = self.pos2; + self.vehicle_worldimpact = spider_worldimpact; } void spiderbot_headfade() diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc index c4e287538..908ccc624 100644 --- a/qcsrc/server/vehicles/vehicles.qc +++ b/qcsrc/server/vehicles/vehicles.qc @@ -376,6 +376,28 @@ float vehicles_crushable(entity e) return FALSE; } +void vehilces_worldimpact(float _minspeed, float _speedfac, float _maxpain) +{ + if(self.play_time < time) + { + float wc, take; + wc = vlen(self.velocity - self.oldvelocity); + if(_minspeed < wc) + { + take = min(_speedfac * wc, _maxpain); + Damage (self, world, world, take, DEATH_FALL, self.origin, '0 0 0'); + self.play_time = time + 0.25; + + dprint("oldvel: ", vtos(self.oldvelocity), "\n"); + dprint("vel: ", vtos(self.velocity), "\n"); + dprint("wc: ", ftos(wc), "\n"); + dprint("take: ", ftos(take), "\n"); + + } + } +} + +.void() vehicle_worldimpact; void vehicles_touch() { // Vehicle currently in use @@ -384,6 +406,8 @@ void vehicles_touch() // Colided with world? if(other == world) { + if(self.vehicle_worldimpact) + self.vehicle_worldimpact(); } else { diff --git a/vehicle_racer.cfg b/vehicle_racer.cfg index af6587546..33fb4140b 100644 --- a/vehicle_racer.cfg +++ b/vehicle_racer.cfg @@ -61,4 +61,8 @@ set g_vehicle_racer_blowup_coredamage 250 set g_vehicle_racer_blowup_edgedamage 15 set g_vehicle_racer_blowup_forceintensity 250 +set g_vehicle_racer_bouncefactor 0.25 // Factor of old velocity to keep after colission +set g_vehicle_racer_bouncestop 0 // if != 0, New veloctiy after bounce = 0 if new velocity < this +set g_vehicle_racer_bouncepain "35 2 250" // "minspeed_for_pain speedchange_to_pain_factor max_damage" + set g_vehicle_racer_mass 900 diff --git a/vehicle_raptor.cfg b/vehicle_raptor.cfg index e502c8db2..2a46dd282 100644 --- a/vehicle_raptor.cfg +++ b/vehicle_raptor.cfg @@ -58,4 +58,8 @@ set g_vehicle_raptor_shield 120 set g_vehicle_raptor_shield_regen 25 set g_vehicle_raptor_shield_regen_pause 1.5 +set g_vehicle_raptor_bouncefactor 0.2 +set g_vehicle_raptor_bouncestop 0 +set g_vehicle_raptor_bouncepain "1 1.5 500" + set g_vehicle_raptor_mass 2200 diff --git a/vehicle_spiderbot.cfg b/vehicle_spiderbot.cfg index 10a09454c..bb866037a 100644 --- a/vehicle_spiderbot.cfg +++ b/vehicle_spiderbot.cfg @@ -55,6 +55,9 @@ set g_vehicle_spiderbot_crush_force 50 set g_vehicle_spiderbot_mass 5000 +set g_vehicle_spiderbot_bouncefactor 0 // Factor of old velocity to keep after colission +set g_vehicle_spiderbot_bouncestop 0 // if != 0, New veloctiy after bounce = 0 if new velocity < this +set g_vehicle_spiderbot_bouncepain "0 0 0" // "minspeed_for_pain speedchange_to_pain_factor max_damage" set cl_vehicle_spiderbot_cross_alpha 0.4 set cl_vehicle_spiderbot_cross_size 1