X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fvehicles%2Fvehicle%2Fracer.qc;h=848fa2ff78fc953af82da7f8577f15efe9041165;hp=38c6844d49415a1e7ded8d85823baf13c432cbfc;hb=692cb758fe8f25fa078bfd5885333ee031885600;hpb=8c7cd804a5fa9b90d8c2753265727f5ea32087cb diff --git a/qcsrc/common/vehicles/vehicle/racer.qc b/qcsrc/common/vehicles/vehicle/racer.qc index 38c6844d4..848fa2ff7 100644 --- a/qcsrc/common/vehicles/vehicle/racer.qc +++ b/qcsrc/common/vehicles/vehicle/racer.qc @@ -7,6 +7,8 @@ CLASS(Racer, Vehicle) /* spawnflags */ ATTRIB(Racer, spawnflags, int, VHF_DMGSHAKE | VHF_DMGROLL); /* mins */ ATTRIB(Racer, mins, vector, '-120 -120 -40' * 0.5); /* maxs */ ATTRIB(Racer, maxs, vector, '120 120 40' * 0.5); +/* view offset*/ ATTRIB(Racer, view_ofs, vector, '0 0 50'); +/* view dist */ ATTRIB(Racer, height, float, 200); /* model */ ATTRIB(Racer, mdl, string, "models/vehicles/wakizashi.dpm"); /* model */ ATTRIB(Racer, model, string, "models/vehicles/wakizashi.dpm"); /* head_model */ ATTRIB(Racer, head_model, string, "null"); @@ -27,8 +29,7 @@ REGISTER_VEHICLE(RACER, NEW(Racer)); #include "racer_weapon.qc" #ifdef SVQC -#include "../../effects/effects.qh" -#include "../../triggers/trigger/impulse.qh" +#include bool autocvar_g_vehicle_racer; @@ -94,48 +95,48 @@ vector autocvar_g_vehicle_racer_bouncepain; .float racer_watertime; -var vector racer_force_from_tag(string tag_name, float spring_length, float max_power); +var vector racer_force_from_tag(entity this, string tag_name, float spring_length, float max_power); -void racer_align4point(float _delta) -{SELFPARAM(); +void racer_align4point(entity this, float _delta) +{ vector push_vector; float fl_push, fr_push, bl_push, br_push; - push_vector = racer_force_from_tag("tag_engine_fr", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower); + push_vector = racer_force_from_tag(this, "tag_engine_fr", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower); fr_push = force_fromtag_normpower; - //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier); + //vehicles_sweap_collision(force_fromtag_origin, this.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier); - push_vector += racer_force_from_tag("tag_engine_fl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower); + push_vector += racer_force_from_tag(this, "tag_engine_fl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower); fl_push = force_fromtag_normpower; - //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier); + //vehicles_sweap_collision(force_fromtag_origin, this.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier); - push_vector += racer_force_from_tag("tag_engine_br", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower); + push_vector += racer_force_from_tag(this, "tag_engine_br", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower); br_push = force_fromtag_normpower; - //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier); + //vehicles_sweap_collision(force_fromtag_origin, this.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier); - push_vector += racer_force_from_tag("tag_engine_bl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower); + push_vector += racer_force_from_tag(this, "tag_engine_bl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower); bl_push = force_fromtag_normpower; - //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier); + //vehicles_sweap_collision(force_fromtag_origin, this.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier); - self.velocity += push_vector * _delta; + this.velocity += push_vector * _delta; float uforce = autocvar_g_vehicle_racer_upforcedamper; - int cont = pointcontents(self.origin - '0 0 64'); + int cont = pointcontents(this.origin - '0 0 64'); if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME) { uforce = autocvar_g_vehicle_racer_water_upforcedamper; - if(self.owner.BUTTON_CROUCH && time < self.air_finished) - self.velocity_z += 30; + if(this.owner.BUTTON_CROUCH && time < this.air_finished) + this.velocity_z += 30; else - self.velocity_z += 200; + this.velocity_z += 200; } // Anti ocilation - if(self.velocity_z > 0) - self.velocity_z *= 1 - uforce * _delta; + if(this.velocity_z > 0) + this.velocity_z *= 1 - uforce * _delta; push_vector_x = (fl_push - bl_push); push_vector_x += (fr_push - br_push); @@ -146,19 +147,19 @@ void racer_align4point(float _delta) push_vector_z *= 360; // Apply angle diffrance - self.angles_z += push_vector_z * _delta; - self.angles_x += push_vector_x * _delta; + this.angles_z += push_vector_z * _delta; + this.angles_x += push_vector_x * _delta; // Apply stabilizer - self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta); - self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta); + this.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta); + this.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta); } -void racer_fire_rocket_aim(string tagname, entity trg) +void racer_fire_rocket_aim(entity player, string tagname, entity trg) { - SELFPARAM(); - vector v = gettaginfo(self, gettagindex(self, tagname)); - racer_fire_rocket(v, v_forward, trg); + entity racer = player.vehicle; + vector v = gettaginfo(racer, gettagindex(racer, tagname)); + racer_fire_rocket(player, v, v_forward, trg); } float racer_frame() @@ -178,19 +179,19 @@ float racer_frame() racer = self.vehicle; setself(racer); - vehicles_painframe(); + vehicles_frame(racer, player); if(pointcontents(racer.origin) != CONTENT_WATER) racer.air_finished = time + autocvar_g_vehicle_racer_water_time; - if(racer.deadflag != DEAD_NO) + if(IS_DEAD(racer)) { setself(player); player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0; return 1; } - racer_align4point(PHYS_INPUT_TIMELENGTH); + racer_align4point(self, PHYS_INPUT_TIMELENGTH); player.BUTTON_ZOOM = player.BUTTON_CROUCH = 0; @@ -219,7 +220,7 @@ float racer_frame() //racer.velocity_z = ftmp; int cont = pointcontents(racer.origin); - if(vlen(player.movement) != 0) + if(player.movement) { if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME) { @@ -258,7 +259,7 @@ float racer_frame() { #ifdef SVQC if(time - racer.wait > 0.2) - pointparticles(particleeffectnum(EFFECT_RACER_BOOSTER), self.origin - v_forward * 32, v_forward * vlen(self.velocity), 1); + pointparticles(EFFECT_RACER_BOOSTER, self.origin - v_forward * 32, v_forward * vlen(self.velocity), 1); #endif racer.wait = time; @@ -279,7 +280,7 @@ float racer_frame() { traceline(racer.origin, racer.origin - '0 0 256', MOVE_NORMAL, self); if(trace_fraction != 1.0) - pointparticles(particleeffectnum(EFFECT_SMOKE_SMALL), trace_endpos, '0 0 0', 1); + pointparticles(EFFECT_SMOKE_SMALL, trace_endpos, '0 0 0', 1); racer.invincible_finished = time + 0.1 + (random() * 0.1); } @@ -322,12 +323,13 @@ float racer_frame() // Fix z-aim (for chase mode) crosshair_trace(player); w_shotdir.z = normalize(trace_endpos - org).z * 0.5; - wep1.wr_think(wep1, self, true, false); + .entity weaponentity = weaponentities[0]; + wep1.wr_think(wep1, self, weaponentity, 1); } if(autocvar_g_vehicle_racer_rocket_locktarget) { - vehicles_locktarget((1 / autocvar_g_vehicle_racer_rocket_locking_time) * frametime, + vehicles_locktarget(self, (1 / autocvar_g_vehicle_racer_rocket_locking_time) * frametime, (1 / autocvar_g_vehicle_racer_rocket_locking_releasetime) * frametime, autocvar_g_vehicle_racer_rocket_locked_time); @@ -351,12 +353,12 @@ float racer_frame() if(racer.misc_bulletcounter == 1) { - racer_fire_rocket_aim("tag_rocket_r", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world); + racer_fire_rocket_aim(player, "tag_rocket_r", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world); player.vehicle_ammo2 = 50; } else if(racer.misc_bulletcounter == 2) { - racer_fire_rocket_aim("tag_rocket_l", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world); + racer_fire_rocket_aim(player, "tag_rocket_l", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world); racer.lock_strength = 0; racer.lock_target = world; racer.misc_bulletcounter = 0; @@ -452,7 +454,7 @@ void racer_exit(float eject) } else { - if(vlen(self.velocity) > 2 * autocvar_sv_maxairspeed) + if(vdist(self.velocity, >, 2 * autocvar_sv_maxairspeed)) { self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed * 2; self.owner.velocity_z += 200; @@ -482,7 +484,7 @@ void racer_blowup() autocvar_g_vehicle_racer_blowup_edgedamage, autocvar_g_vehicle_racer_blowup_radius, world, world, autocvar_g_vehicle_racer_blowup_forceintensity, - DEATH_VH_WAKI_DEATH, world); + DEATH_VH_WAKI_DEATH.m_id, world); self.nextthink = time + autocvar_g_vehicle_racer_respawntime; self.think = vehicles_spawn; @@ -532,17 +534,17 @@ void racer_draw() self.lastpushtime = time; if(!pushdeltatime) return; - tracebox(self.move_origin, self.mins, self.maxs, self.move_origin - ('0 0 1' * getstatf(STAT_VEH_RACER_SPRINGLENGTH)), MOVE_NOMONSTERS, self); + tracebox(self.move_origin, self.mins, self.maxs, self.move_origin - ('0 0 1' * STAT(VEH_RACER_SPRINGLENGTH)), MOVE_NOMONSTERS, self); - vector df = self.move_velocity * -getstatf(STAT_VEH_RACER_FRICTION); - df_z += (1 - trace_fraction) * getstatf(STAT_VEH_RACER_HOVERPOWER) + sin(time * 2) * (getstatf(STAT_VEH_RACER_SPRINGLENGTH) * 2); + vector df = self.move_velocity * -STAT(VEH_RACER_FRICTION); + df_z += (1 - trace_fraction) * STAT(VEH_RACER_HOVERPOWER) + sin(time * 2) * (STAT(VEH_RACER_SPRINGLENGTH) * 2); - float forced = getstatf(STAT_VEH_RACER_UPFORCEDAMPER); + float forced = STAT(VEH_RACER_UPFORCEDAMPER); int cont = pointcontents(self.move_origin - '0 0 64'); if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME) { - forced = getstatf(STAT_VEH_RACER_WATER_UPFORCEDAMPER); + forced = STAT(VEH_RACER_WATER_UPFORCEDAMPER); self.move_velocity_z += 200; } @@ -550,15 +552,15 @@ void racer_draw() if(self.move_velocity_z > 0) self.move_velocity_z *= 1 - forced * pushdeltatime; - self.move_angles_x *= 1 - (getstatf(STAT_VEH_RACER_ANGLESTABILIZER) * pushdeltatime); - self.move_angles_z *= 1 - (getstatf(STAT_VEH_RACER_ANGLESTABILIZER) * pushdeltatime); + self.move_angles_x *= 1 - (STAT(VEH_RACER_ANGLESTABILIZER) * pushdeltatime); + self.move_angles_z *= 1 - (STAT(VEH_RACER_ANGLESTABILIZER) * pushdeltatime); Movetype_Physics_MatchServer(false); } #endif #endif - METHOD(Racer, vr_impact, void(Racer thisveh)) + METHOD(Racer, vr_impact, void(Racer thisveh, entity instance)) { #ifdef SVQC if(autocvar_g_vehicle_racer_bouncepain) @@ -566,7 +568,7 @@ void racer_draw() #endif } - METHOD(Racer, vr_enter, void(Racer thisveh)) + METHOD(Racer, vr_enter, void(Racer thisveh, entity instance)) { #ifdef SVQC self.movetype = MOVETYPE_BOUNCE; @@ -581,7 +583,7 @@ void racer_draw() #endif } - METHOD(Racer, vr_spawn, void(Racer thisveh)) + METHOD(Racer, vr_spawn, void(Racer thisveh, entity instance)) { #ifdef SVQC if(self.scale != 0.5) @@ -619,7 +621,7 @@ void racer_draw() #endif } - METHOD(Racer, vr_death, void(Racer thisveh)) + METHOD(Racer, vr_death, void(Racer thisveh, entity instance)) { #ifdef SVQC self.SendEntity = func_null; // stop networking this racer (for now) @@ -662,7 +664,7 @@ void racer_draw() Vehicles_drawCrosshair(vCROSS_GUIDE); } #endif - METHOD(Racer, vr_setup, void(Racer thisveh)) + METHOD(Racer, vr_setup, void(Racer thisveh, entity instance)) { #ifdef SVQC self.vehicle_exit = racer_exit;