X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fvehicles%2Funit%2Fracer.qc;h=3c0db885461bafbf9fb0cf29c364a462d21e187b;hb=129cf6ae83fa24855423c8edec3ad2cb072cb4cd;hp=f83df2873eb29e54020e0edeacd894c04375ae7d;hpb=1556aa4ea70b3b275afb1cb4587e555fb44f71c3;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/vehicles/unit/racer.qc b/qcsrc/common/vehicles/unit/racer.qc index f83df2873..3c0db8854 100644 --- a/qcsrc/common/vehicles/unit/racer.qc +++ b/qcsrc/common/vehicles/unit/racer.qc @@ -1,5 +1,6 @@ #ifndef VEHICLE_RACER #define VEHICLE_RACER + #ifndef MENUQC int v_racer(int); #endif @@ -19,13 +20,36 @@ REGISTER_VEHICLE_SIMPLE( this.vehicle_func = v_racer; #endif } + +#include "../../weapons/all.qh" + +CLASS(RacerAttack, PortoLaunch) +/* flags */ ATTRIB(RacerAttack, spawnflags, int, WEP_TYPE_OTHER); +/* impulse */ ATTRIB(RacerAttack, impulse, int, 3); +/* refname */ ATTRIB(RacerAttack, netname, string, "racercannon"); +/* wepname */ ATTRIB(RacerAttack, message, string, _("Racer cannon")); +ENDCLASS(RacerAttack) +REGISTER_WEAPON(RACER, NEW(RacerAttack)); + #endif #ifdef IMPLEMENTATION #ifdef SVQC -#include "../../effects.qh" +#include "../../effects/effects.qh" #include "../../triggers/trigger/impulse.qh" +void racer_fire_cannon(string tagname); +METHOD(RacerAttack, wr_think, bool(entity thiswep)) { + SELFPARAM(); + if (self.BUTTON_ATCK) + if (weapon_prepareattack(0, 0)) { + W_SetupShot_Dir(self, v_forward, false, 0, W_Sound("lasergun_fire"), CH_WEAPON_B, 0); + racer_fire_cannon("tag_fire1"); + weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(machinegun, sustained_refire), w_ready); + } + return true; +} + bool autocvar_g_vehicle_racer; float autocvar_g_vehicle_racer_speed_afterburn; @@ -111,7 +135,7 @@ vector autocvar_g_vehicle_racer_bouncepain; var vector racer_force_from_tag(string tag_name, float spring_length, float max_power); void racer_align4point(float _delta) -{ +{SELFPARAM(); vector push_vector; float fl_push, fr_push, bl_push, br_push; @@ -169,12 +193,12 @@ void racer_align4point(float _delta) } void racer_fire_cannon(string tagname) -{ +{SELFPARAM(); vector v; entity bolt; v = gettaginfo(self, gettagindex(self, tagname)); - bolt = vehicles_projectile("wakizashi_gun_muzzleflash", W_Sound("lasergun_fire"), + bolt = vehicles_projectile(EFFECT_RACER_MUZZLEFLASH.eent_eff_name, SND(LASERGUN_FIRE), v, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed, autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force, 0, DEATH_VH_WAKI_GUN, PROJECTILE_WAKICANNON, 0, true, true, self.owner); @@ -186,7 +210,7 @@ void racer_fire_cannon(string tagname) } void racer_rocket_groundhugger() -{ +{SELFPARAM(); vector olddir, newdir; float oldvel, newvel; @@ -238,7 +262,7 @@ void racer_rocket_groundhugger() } void racer_rocket_tracker() -{ +{SELFPARAM(); vector olddir, newdir; float oldvel, newvel; @@ -290,9 +314,9 @@ void racer_rocket_tracker() } void racer_fire_rocket(string tagname, entity trg) -{ +{SELFPARAM(); vector v = gettaginfo(self, gettagindex(self, tagname)); - entity rocket = vehicles_projectile("wakizashi_rocket_launch", W_Sound("rocket_fire"), + entity rocket = vehicles_projectile(EFFECT_RACER_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE), v, v_forward * autocvar_g_vehicle_racer_rocket_speed, autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3, DEATH_VH_WAKI_ROCKET, PROJECTILE_WAKIROCKET, 20, false, false, self.owner); @@ -310,7 +334,7 @@ void racer_fire_rocket(string tagname, entity trg) } float racer_frame() -{ +{SELFPARAM(); entity player, racer; vector df; float ftmp; @@ -324,7 +348,7 @@ float racer_frame() player = self; racer = self.vehicle; - self = racer; + setself(racer); vehicles_painframe(); @@ -333,7 +357,7 @@ float racer_frame() if(racer.deadflag != DEAD_NO) { - self = player; + setself(player); player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0; return 1; } @@ -385,7 +409,7 @@ float racer_frame() { self.sounds = 1; self.sound_nexttime = time + 10.922667; //soundlength("vehicles/racer_move.wav"); - sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_move.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_RACER_MOVE, VOL_VEHICLEENGINE, ATTEN_NORM); } #endif } @@ -396,7 +420,7 @@ float racer_frame() { self.sounds = 0; self.sound_nexttime = time + 11.888604; //soundlength("vehicles/racer_idle.wav"); - sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self, CH_TRIGGER_SINGLE, SND_VEH_RACER_IDLE, VOL_VEHICLEENGINE, ATTEN_NORM); } } #endif @@ -406,7 +430,7 @@ float racer_frame() { #ifdef SVQC if(time - racer.wait > 0.2) - pointparticles(particleeffectnum("wakizashi_booster_smoke"), self.origin - v_forward * 32, v_forward * vlen(self.velocity), 1); + pointparticles(particleeffectnum(EFFECT_RACER_BOOSTER), self.origin - v_forward * 32, v_forward * vlen(self.velocity), 1); #endif racer.wait = time; @@ -427,7 +451,7 @@ float racer_frame() { traceline(racer.origin, racer.origin - '0 0 256', MOVE_NORMAL, self); if(trace_fraction != 1.0) - pointparticles(particleeffectnum("smoke_small"), trace_endpos, '0 0 0', 1); + pointparticles(particleeffectnum(EFFECT_SMOKE_SMALL), trace_endpos, '0 0 0', 1); racer.invincible_finished = time + 0.1 + (random() * 0.1); } @@ -435,14 +459,14 @@ float racer_frame() if(racer.strength_finished < time) { racer.strength_finished = time + 10.922667; //soundlength("vehicles/racer_boost.wav"); - sound (racer.tur_head, CH_TRIGGER_SINGLE, "vehicles/racer_boost.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (racer.tur_head, CH_TRIGGER_SINGLE, SND_VEH_RACER_BOOST, VOL_VEHICLEENGINE, ATTEN_NORM); } #endif } else { racer.strength_finished = 0; - sound (racer.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (racer.tur_head, CH_TRIGGER_SINGLE, SND_Null, VOL_VEHICLEENGINE, ATTEN_NORM); } if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME) @@ -545,12 +569,12 @@ float racer_frame() setorigin(player,racer.origin + '0 0 32'); player.velocity = racer.velocity; - self = player; + setself(player); return 1; } void racer_think() -{ +{SELFPARAM(); self.nextthink = time; float pushdeltatime = time - self.lastpushtime; @@ -579,17 +603,17 @@ void racer_think() self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime); self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime); - CSQCMODEL_AUTOUPDATE(); + CSQCMODEL_AUTOUPDATE(self); } void racer_exit(float eject) -{ +{SELFPARAM(); vector spot; self.think = racer_think; self.nextthink = time; self.movetype = MOVETYPE_BOUNCE; - sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM); + sound (self.tur_head, CH_TRIGGER_SINGLE, SND_Null, VOL_VEHICLEENGINE, ATTEN_NORM); if(!self.owner) return; @@ -627,7 +651,7 @@ void racer_exit(float eject) } void racer_blowup() -{ +{SELFPARAM(); self.deadflag = DEAD_DEAD; self.vehicle_exit(VHEF_NORMAL); @@ -650,17 +674,17 @@ void racer_blowup() } void racer_blowup_think() -{ +{SELFPARAM(); self.nextthink = time; if(time >= self.delay) racer_blowup(); - CSQCMODEL_AUTOUPDATE(); + CSQCMODEL_AUTOUPDATE(self); } void racer_deadtouch() -{ +{SELFPARAM(); self.avelocity_x *= 0.7; self.cnt -= 1; if(self.cnt <= 0) @@ -668,7 +692,7 @@ void racer_deadtouch() } void spawnfunc_vehicle_racer() -{ +{SELFPARAM(); if(!autocvar_g_vehicle_racer) { remove(self); return; } if(!vehicle_initialize(VEH_RACER, false)) { remove(self); return; } } @@ -678,7 +702,7 @@ void spawnfunc_vehicle_racer() #ifdef CSQC #if 0 void racer_draw() -{ +{SELFPARAM(); float pushdeltatime = time - self.lastpushtime; if (pushdeltatime > 0.15) pushdeltatime = 0; self.lastpushtime = time; @@ -711,7 +735,7 @@ void racer_draw() #endif bool v_racer(int req) -{ +{SELFPARAM(); switch(req) { case VR_IMPACT: @@ -794,7 +818,7 @@ bool v_racer(int req) self.cnt = 1 + random() * 2; self.touch = racer_deadtouch; - Send_Effect("explosion_medium", self.origin, '0 0 0', 1); + Send_Effect(EFFECT_EXPLOSION_MEDIUM, self.origin, '0 0 0', 1); if(random() < 0.5) self.avelocity_z = 32; @@ -856,20 +880,6 @@ bool v_racer(int req) case VR_PRECACHE: { - #ifdef SVQC - precache_sound (W_Sound("lasergun_fire")); - precache_sound (W_Sound("rocket_fire")); - - precache_sound ("vehicles/racer_idle.wav"); - precache_sound ("vehicles/racer_move.wav"); - precache_sound ("vehicles/racer_boost.wav"); - - precache_model ("models/vhshield.md3"); - #endif - #ifndef MENUQC - precache_model ("models/vehicles/wakizashi.dpm"); - precache_model ("models/vehicles/wakizashi_cockpit.dpm"); - #endif return true; } }