From: terencehill Date: Sat, 4 Jan 2014 18:48:00 +0000 (+0100) Subject: Merge branch 'master' into terencehill/vehicles_fixes X-Git-Tag: xonotic-v0.8.0~243^2^2 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=0f0e69c6625fc4db17559e2e47f2fdaed8298076;hp=e23579dcf3caf46f7d186bfc4b641458b36b5365 Merge branch 'master' into terencehill/vehicles_fixes Conflicts: qcsrc/server/vehicles/bumblebee.qc qcsrc/server/vehicles/raptor.qc qcsrc/server/vehicles/spiderbot.qc --- diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 2810c8b641..93ee2a6a7e 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -400,6 +400,9 @@ void PutClientInServer (void) RemoveGrapplingHook(self); // Wazat's Grappling Hook + if(self.vehicle) + vehicles_exit(VHEF_RELESE); + self.classname = "player"; self.wasplayer = TRUE; self.iscreature = TRUE; diff --git a/qcsrc/server/cl_impulse.qc b/qcsrc/server/cl_impulse.qc index a4376bd418..28d794c6df 100644 --- a/qcsrc/server/cl_impulse.qc +++ b/qcsrc/server/cl_impulse.qc @@ -55,8 +55,8 @@ void ImpulseCommands (void) if(self.vehicle) if(self.vehicle.deadflag == DEAD_NO) - if(self.vehicle.vehicles_impusle) - if(self.vehicle.vehicles_impusle(imp)) + if(self.vehicle.vehicles_impulse) + if(self.vehicle.vehicles_impulse(imp)) return; if(CheatImpulse(imp)) diff --git a/qcsrc/server/mutators/gamemode_assault.qc b/qcsrc/server/mutators/gamemode_assault.qc index 0325067f28..60df95a006 100644 --- a/qcsrc/server/mutators/gamemode_assault.qc +++ b/qcsrc/server/mutators/gamemode_assault.qc @@ -212,31 +212,8 @@ void assault_wall_think() // trigger new round // reset objectives, toggle spawnpoints, reset triggers, ... -void vehicles_clearrturn(); -void vehicles_spawn(); void assault_new_round() { - entity oldself; - //bprint("ASSAULT: new round\n"); - - oldself = self; - // Eject players from vehicles - FOR_EACH_PLAYER(self) - { - if(self.vehicle) - vehicles_exit(VHEF_RELESE); - } - - self = findchainflags(vehicle_flags, VHF_ISVEHICLE); - while(self) - { - vehicles_clearrturn(); - vehicles_spawn(); - self = self.chain; - } - - self = oldself; - // up round counter self.winning = self.winning + 1; diff --git a/qcsrc/server/vehicles/bumblebee.qc b/qcsrc/server/vehicles/bumblebee.qc index bc5f03d8ae..657d227051 100644 --- a/qcsrc/server/vehicles/bumblebee.qc +++ b/qcsrc/server/vehicles/bumblebee.qc @@ -792,10 +792,8 @@ void bumb_die() void bumb_impact() { - if(autocvar_g_vehicle_bumblebee_bouncepain_x) - vehilces_impact(autocvar_g_vehicle_bumblebee_bouncepain_x, - autocvar_g_vehicle_bumblebee_bouncepain_y, - autocvar_g_vehicle_bumblebee_bouncepain_z); + if(autocvar_g_vehicle_bumblebee_bouncepain_x) + vehicles_impact(autocvar_g_vehicle_bumblebee_bouncepain_x, autocvar_g_vehicle_bumblebee_bouncepain_y, autocvar_g_vehicle_bumblebee_bouncepain_z); } void bumb_spawn(float _f) diff --git a/qcsrc/server/vehicles/racer.qc b/qcsrc/server/vehicles/racer.qc index ff54539027..f009723b7f 100644 --- a/qcsrc/server/vehicles/racer.qc +++ b/qcsrc/server/vehicles/racer.qc @@ -74,7 +74,6 @@ 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_spawn_default(); void racer_align4point(float _delta) { @@ -529,8 +528,8 @@ void racer_exit(float eject) void racer_impact() { - if(autocvar_g_vehicle_racer_bouncepain_x) - vehilces_impact(autocvar_g_vehicle_racer_bouncepain_x, autocvar_g_vehicle_racer_bouncepain_y, autocvar_g_vehicle_racer_bouncepain_z); + if(autocvar_g_vehicle_racer_bouncepain_x) + vehicles_impact(autocvar_g_vehicle_racer_bouncepain_x, autocvar_g_vehicle_racer_bouncepain_y, autocvar_g_vehicle_racer_bouncepain_z); } void racer_blowup() @@ -544,16 +543,16 @@ void racer_blowup() autocvar_g_vehicle_racer_blowup_forceintensity, DEATH_VH_WAKI_DEATH, world); - self.nextthink = time + autocvar_g_vehicle_racer_respawntime; - self.think = racer_spawn_default; + self.alpha = -1; self.movetype = MOVETYPE_NONE; self.effects = EF_NODRAW; - self.colormod = '0 0 0'; self.avelocity = '0 0 0'; self.velocity = '0 0 0'; setorigin(self, self.pos1); + self.touch = func_null; + self.nextthink = 0; } void racer_deadtouch() @@ -624,12 +623,6 @@ void racer_spawn(float _spawnflag) self.damageforcescale = 0.5; //self.destvec = autocvar_g_vehicle_racer_bouncepain; } -void racer_spawn_default() -{ - racer_spawn(0); -} - - void spawnfunc_vehicle_racer() { diff --git a/qcsrc/server/vehicles/raptor.qc b/qcsrc/server/vehicles/raptor.qc index 58a640e9cf..a6ef526499 100644 --- a/qcsrc/server/vehicles/raptor.qc +++ b/qcsrc/server/vehicles/raptor.qc @@ -70,6 +70,11 @@ 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_blowup_radius; +float autocvar_g_vehicle_raptor_blowup_coredamage; +float autocvar_g_vehicle_raptor_blowup_edgedamage; +float autocvar_g_vehicle_raptor_blowup_forceintensity; + float autocvar_g_vehicle_raptor_bouncefactor; float autocvar_g_vehicle_raptor_bouncestop; vector autocvar_g_vehicle_raptor_bouncepain; @@ -690,7 +695,10 @@ void raptor_blowup() { self.deadflag = DEAD_DEAD; self.vehicle_exit(VHEF_NORMAL); - RadiusDamage (self, self.enemy, 250, 15, 250, world, 250, DEATH_VH_RAPT_DEATH, world); + RadiusDamage(self, self.enemy, autocvar_g_vehicle_raptor_blowup_coredamage, + autocvar_g_vehicle_raptor_blowup_edgedamage, + autocvar_g_vehicle_raptor_blowup_radius, world, + autocvar_g_vehicle_raptor_blowup_forceintensity, DEATH_VH_RAPT_DEATH, world); self.alpha = -1; self.movetype = MOVETYPE_NONE; @@ -742,8 +750,8 @@ void raptor_die() void raptor_impact() { - if(autocvar_g_vehicle_raptor_bouncepain_x) - vehilces_impact(autocvar_g_vehicle_raptor_bouncepain_x, autocvar_g_vehicle_raptor_bouncepain_y, autocvar_g_vehicle_raptor_bouncepain_z); + if(autocvar_g_vehicle_raptor_bouncepain_x) + vehicles_impact(autocvar_g_vehicle_raptor_bouncepain_x, autocvar_g_vehicle_raptor_bouncepain_y, autocvar_g_vehicle_raptor_bouncepain_z); } // If we dont do this ever now and then, the raptors rotors @@ -798,7 +806,7 @@ void raptor_spawn(float _f) //FIXME: Camera is in a bad place in HUD model. //setorigin(self.vehicle_viewport, '25 0 5'); - self.vehicles_impusle = raptor_impulse; + self.vehicles_impulse = raptor_impulse; self.frame = 0; diff --git a/qcsrc/server/vehicles/spiderbot.qc b/qcsrc/server/vehicles/spiderbot.qc index a73997fda5..1085a904e2 100644 --- a/qcsrc/server/vehicles/spiderbot.qc +++ b/qcsrc/server/vehicles/spiderbot.qc @@ -58,6 +58,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_blowup_radius; +float autocvar_g_vehicle_spiderbot_blowup_coredamage; +float autocvar_g_vehicle_spiderbot_blowup_edgedamage; +float autocvar_g_vehicle_spiderbot_blowup_forceintensity; + vector autocvar_g_vehicle_spiderbot_bouncepain; @@ -634,8 +639,8 @@ void spiderbot_exit(float eject) void spider_impact() { - if(autocvar_g_vehicle_spiderbot_bouncepain_x) - vehilces_impact(autocvar_g_vehicle_spiderbot_bouncepain_x, autocvar_g_vehicle_spiderbot_bouncepain_y, autocvar_g_vehicle_spiderbot_bouncepain_z); + if(autocvar_g_vehicle_spiderbot_bouncepain_x) + vehicles_impact(autocvar_g_vehicle_spiderbot_bouncepain_x, autocvar_g_vehicle_spiderbot_bouncepain_y, autocvar_g_vehicle_spiderbot_bouncepain_z); } void spiderbot_headfade() @@ -718,14 +723,18 @@ void spiderbot_blowup() SUB_SetFade(g1, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10)); SUB_SetFade(g2, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10)); - RadiusDamage (self, self.enemy, 250, 15, 250, world, 250, DEATH_VH_SPID_DEATH, world); + RadiusDamage(self, self.enemy, autocvar_g_vehicle_spiderbot_blowup_coredamage, + autocvar_g_vehicle_spiderbot_blowup_edgedamage, + autocvar_g_vehicle_spiderbot_blowup_radius, world, + autocvar_g_vehicle_spiderbot_blowup_forceintensity, DEATH_VH_SPID_DEATH, world); self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1; self.movetype = MOVETYPE_NONE; self.deadflag = DEAD_DEAD; self.solid = SOLID_NOT; self.tur_head.effects &= ~EF_FLAME; - self.vehicle_hudmodel.viewmodelforclient = self; + self.vehicle_hudmodel.viewmodelforclient = self; + setorigin(self, self.pos1); } void spiderbot_die() @@ -784,7 +793,7 @@ void spiderbot_spawn(float _f) { if(!self.gun1) { - self.vehicles_impusle = spiderbot_impulse; + self.vehicles_impulse = spiderbot_impulse; self.gun1 = spawn(); self.gun2 = spawn(); setmodel(self.gun1, "models/vehicles/spiderbot_barrels.dpm"); diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc index 1e5537a259..b9740b5d88 100644 --- a/qcsrc/server/vehicles/vehicles.qc +++ b/qcsrc/server/vehicles/vehicles.qc @@ -16,7 +16,7 @@ void vehicles_return(); void vehicles_enter(); void vehicles_touch(); void vehicles_reset_colors(); -void vehicles_clearrturn(); +void vehicles_clearreturn(); void vehicles_setreturn(); @@ -456,6 +456,30 @@ entity vehicles_projectile(string _mzlfx, string _mzlsound, } // End generic vehile projectile system +void vehicles_reset() +{ + if(self.owner) + { + entity oldself = self; + self = self.owner; + vehicles_exit(VHEF_RELESE); + self = oldself; + } + self.alpha = -1; + self.movetype = MOVETYPE_NONE; + self.effects = EF_NODRAW; + self.colormod = '0 0 0'; + self.avelocity = '0 0 0'; + self.velocity = '0 0 0'; + self.event_damage = func_null; + self.solid = SOLID_NOT; + self.deadflag = DEAD_NO; + + self.touch = func_null; + self.nextthink = 0; + vehicles_setreturn(); +} + /** vehicles_spawn Exetuted for all vehicles on (re)spawn. Sets defaults for newly spawned units. @@ -470,6 +494,7 @@ void vehicles_spawn() self.owner = world; self.touch = vehicles_touch; self.event_damage = vehicles_damage; + self.reset = vehicles_reset; self.iscreature = TRUE; self.teleportable = FALSE; // no teleporting for vehicles, too buggy self.damagedbycontents = TRUE; @@ -512,7 +537,7 @@ float vehicles_crushable(entity e) return FALSE; } -void vehilces_impact(float _minspeed, float _speedfac, float _maxpain) +void vehicles_impact(float _minspeed, float _speedfac, float _maxpain) { if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) return; @@ -658,7 +683,7 @@ void vehicles_enter() } } - vehicles_clearrturn(); + vehicles_clearreturn(); CSQCVehicleSetup(self.owner, self.hud); @@ -964,7 +989,7 @@ void vehicles_damage(entity inflictor, entity attacker, float damage, float deat } } -void vehicles_clearrturn() +void vehicles_clearreturn() { entity ret; // Remove "return helper", if any. @@ -1055,7 +1080,7 @@ void vehicles_setreturn() { entity ret; - vehicles_clearrturn(); + vehicles_clearreturn(); ret = spawn(); ret.classname = "vehicle_return"; @@ -1063,19 +1088,16 @@ void vehicles_setreturn() ret.team = self.team; ret.think = vehicles_showwp; - if(self.deadflag != DEAD_NO) - { - ret.cnt = time + self.vehicle_respawntime; - ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 5); - } - else - { - ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 1); - } + if(self.deadflag != DEAD_NO) + { + ret.cnt = max(game_starttime, time) + self.vehicle_respawntime; + ret.nextthink = max(game_starttime, time) + max(0, self.vehicle_respawntime - 5); + } + else + ret.nextthink = max(game_starttime, time) + max(0, self.vehicle_respawntime - 1); setmodel(ret, "null"); setorigin(ret, self.pos1 + '0 0 96'); - } void vehicles_reset_colors() @@ -1273,15 +1295,14 @@ float vehicle_initialize(string net_name, self.event_damage = func_null; self.touch = vehicles_touch; self.think = vehicles_spawn; - self.nextthink = time; - self.vehicle_respawntime = _respawntime; self.vehicle_spawn = spawnproc; + self.vehicle_respawntime = max(0, _respawntime); self.effects = EF_NODRAW; self.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_SOLID; - if(!autocvar_g_vehicles_delayspawn) - self.nextthink = time + game_starttime; - else - self.nextthink = time + _respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter); + if(!autocvar_g_vehicles_delayspawn || !self.vehicle_respawntime) + self.nextthink = time; + else + self.nextthink = max(time, game_starttime) + max(0, self.vehicle_respawntime + ((random() * 2 - 1) * autocvar_g_vehicles_delayspawn_jitter)); if(autocvar_g_playerclip_collisions) self.dphitcontentsmask |= DPCONTENTS_PLAYERCLIP; diff --git a/qcsrc/server/vehicles/vehicles_def.qh b/qcsrc/server/vehicles/vehicles_def.qh index 393563f18b..56fc9ea009 100644 --- a/qcsrc/server/vehicles/vehicles_def.qh +++ b/qcsrc/server/vehicles/vehicles_def.qh @@ -62,11 +62,9 @@ const float SVC_UPDATEENTITY = 128; // Net.Protocol 0x80 #define VHSF_NORMAL 0 #define VHSF_FACTORY 2 .void(float _spawnflag) vehicle_spawn; /// Vehicles custom fucntion to be efecuted when vehicle (re)spawns -.float(float _imp) vehicles_impusle; +.float(float _imp) vehicles_impulse; .float vehicle_weapon2mode = volly_counter; -//ยง .void() vehicle_factory() - #ifdef VEHICLES_USE_ODE void(entity e, float physics_enabled) physics_enable = #540; // enable or disable physics on object void(entity e, vector force, vector force_pos) physics_addforce = #541; // apply a force from certain origin, length of force vector is power of force diff --git a/vehicle_raptor.cfg b/vehicle_raptor.cfg index d91b79b6ce..86864eef19 100644 --- a/vehicle_raptor.cfg +++ b/vehicle_raptor.cfg @@ -65,6 +65,11 @@ set g_vehicle_raptor_shield 75 set g_vehicle_raptor_shield_regen 25 set g_vehicle_raptor_shield_regen_pause 1.5 +set g_vehicle_raptor_blowup_radius 250 +set g_vehicle_raptor_blowup_coredamage 250 +set g_vehicle_raptor_blowup_edgedamage 15 +set g_vehicle_raptor_blowup_forceintensity 250 + set g_vehicle_raptor_bouncefactor 0.2 set g_vehicle_raptor_bouncestop 0 set g_vehicle_raptor_bouncepain "1 4 1000" diff --git a/vehicle_spiderbot.cfg b/vehicle_spiderbot.cfg index 253ed31662..4258095f7c 100644 --- a/vehicle_spiderbot.cfg +++ b/vehicle_spiderbot.cfg @@ -54,6 +54,11 @@ set g_vehicle_spiderbot_rocket_noise 0.2 set g_vehicle_spiderbot_rocket_lifetime 20 set g_vehicle_spiderbot_rocket_spread 0.05 +set g_vehicle_spiderbot_blowup_radius 250 +set g_vehicle_spiderbot_blowup_coredamage 250 +set g_vehicle_spiderbot_blowup_edgedamage 15 +set g_vehicle_spiderbot_blowup_forceintensity 250 + 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"