]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Make bumblebee work as a spv first
authorJakob MG <jakob_mg@hotmail.com>
Tue, 12 Apr 2011 17:10:44 +0000 (19:10 +0200)
committerJakob MG <jakob_mg@hotmail.com>
Tue, 12 Apr 2011 17:10:44 +0000 (19:10 +0200)
qcsrc/server/vehicles/bumblebee.qc
vehicle_bumblebee.cfg
vehicles.cfg

index 79ec50ba483eac6bb3c0ec8300e839568ad5bf72..0611013459c4d8ec047e59f70cb8de43f177bf12 100644 (file)
@@ -1,8 +1,11 @@
 // Auto cvars
 float autocvar_g_vehicle_bumblebee_speed_forward;
 float autocvar_g_vehicle_bumblebee_speed_strafe;
+float autocvar_g_vehicle_bumblebee_speed_up;
+float autocvar_g_vehicle_bumblebee_speed_down;
 float autocvar_g_vehicle_bumblebee_turnspeed;
 float autocvar_g_vehicle_bumblebee_pitchspeed;
+float autocvar_g_vehicle_bumblebee_pitchlimit;
 float autocvar_g_vehicle_bumblebee_friction;
 
 float autocvar_g_vehicle_bumblebee_energy;
@@ -39,11 +42,119 @@ float autocvar_g_vehicle_bumblebee_blowup_forceintensity;
 .entity gunner1;
 .entity gunner2;
 
-float bumb_frame()
+float bumb_pilot_frame()
 {
     entity pilot, gunner, vehic;
+    vector newvel;
+    
+    pilot = self;
+    vehic = self.vehicle;
+    self   = vehic;
+
+    if(pilot.BUTTON_USE && vehic.deadflag == DEAD_NO)
+    {
+        self = vehic;
+        vehicles_exit(VHEF_NORMAL);
+        self = pilot;
+        return 0;
+    }
+
+    if(vehic.deadflag != DEAD_NO)
+    {
+        self = pilot;
+        pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = 0;
+        return 1;
+    }
+
+    crosshair_trace(pilot);    
+    
 
+    vector vang;
+    float ftmp;
+    
+    vang = vehic.angles;
+    newvel = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
+    vang_x *= -1;
+    newvel_x *= -1;
+    if(newvel_x > 180)  newvel_x -= 360;
+    if(newvel_x < -180) newvel_x += 360;
+    if(newvel_y > 180)  newvel_y -= 360;
+    if(newvel_y < -180) newvel_y += 360;
+
+    ftmp = shortangle_f(pilot.v_angle_y - vang_y, vang_y);
+    if(ftmp > 180)  ftmp -= 360; if(ftmp < -180) ftmp += 360;
+    vehic.avelocity_y = bound(-autocvar_g_vehicle_bumblebee_turnspeed, ftmp + vehic.avelocity_y * 0.9, autocvar_g_vehicle_bumblebee_turnspeed);
+
+    // Pitch
+    ftmp = 0;
+    if(pilot.movement_x > 0 && vang_x < autocvar_g_vehicle_bumblebee_pitchlimit) ftmp = 5;
+    else if(pilot.movement_x < 0 && vang_x > -autocvar_g_vehicle_bumblebee_pitchlimit) ftmp = -20;
+
+    newvel_x = bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel_x , autocvar_g_vehicle_bumblebee_pitchlimit);
+    ftmp = vang_x - bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel_x + ftmp, autocvar_g_vehicle_bumblebee_pitchlimit);
+    vehic.avelocity_x = bound(-autocvar_g_vehicle_bumblebee_pitchspeed, ftmp + vehic.avelocity_x * 0.9, autocvar_g_vehicle_bumblebee_pitchspeed);
+
+    vehic.angles_x = anglemods(vehic.angles_x);
+    vehic.angles_y = anglemods(vehic.angles_y);
+    vehic.angles_z = anglemods(vehic.angles_z);
 
+    
+    makevectors('0 1 0' * vehic.angles_y);
+    newvel = vehic.velocity * -autocvar_g_vehicle_bumblebee_friction;
+
+    if(pilot.movement_x != 0)
+    {
+        if(pilot.movement_x > 0)
+            newvel += v_forward  * autocvar_g_vehicle_bumblebee_speed_forward;
+        else if(pilot.movement_x < 0)
+            newvel -= v_forward  * autocvar_g_vehicle_bumblebee_speed_forward;
+    }
+
+    if(pilot.movement_y != 0)
+    {
+        if(pilot.movement_y < 0)
+            newvel -= v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
+        else if(pilot.movement_y > 0)
+            newvel += v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
+        ftmp = newvel * v_right;
+        ftmp / autocvar_g_vehicle_bumblebee_speed_strafe;
+        ftmp *= frametime * 0.1;
+        vehic.angles_z = bound(-15, vehic.angles_z + ftmp, 15);
+    }
+    else
+    {
+        vehic.angles_z *= 0.95;
+        if(vehic.angles_z >= -1 && vehic.angles_z <= -1)
+            vehic.angles_z = 0;
+    }
+
+    if(pilot.BUTTON_CROUCH)
+        newvel -=   v_up * autocvar_g_vehicle_bumblebee_speed_down;
+    else if (pilot.BUTTON_JUMP)
+        newvel +=  v_up * autocvar_g_vehicle_bumblebee_speed_up;
+
+    vehic.velocity  += newvel * frametime;
+    pilot.velocity = pilot.movement  = vehic.velocity;
+    setorigin(pilot,vehic.origin + '0 0 32');
+
+
+    if(vehic.vehicle_flags  & VHF_SHIELDREGEN)
+        vehicles_regen(dmg_time, vehicle_shield, autocvar_g_vehicle_bumblebee_shield, autocvar_g_vehicle_bumblebee_shield_regen_pause, autocvar_g_vehicle_bumblebee_shield_regen, frametime);
+
+    if(vehic.vehicle_flags  & VHF_HEALTHREGEN)
+        vehicles_regen(dmg_time, vehicle_health, autocvar_g_vehicle_bumblebee_health, autocvar_g_vehicle_bumblebee_health_regen_pause, autocvar_g_vehicle_bumblebee_health_regen, frametime);
+
+    if(vehic.vehicle_flags  & VHF_ENERGYREGEN)
+        vehicles_regen(cnt, vehicle_energy, autocvar_g_vehicle_bumblebee_energy, autocvar_g_vehicle_bumblebee_energy_regen_pause, autocvar_g_vehicle_bumblebee_energy_regen, frametime);
+
+    VEHICLE_UPDATE_PLAYER(health, bumblebee);
+    VEHICLE_UPDATE_PLAYER(energy, bumblebee);
+    if(vehic.vehicle_flags & VHF_HASSHIELD)
+        VEHICLE_UPDATE_PLAYER(shield, bumblebee);
+
+    pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = pilot.BUTTON_CROUCH = 0;
+    self = pilot;
+    
     return 1;
 }
 
@@ -57,10 +168,16 @@ void bumb_enter()
 
 void bumb_exit(float eject)
 {
+    self.owner = world;
 }
 
 void bumb_spawn()
 {    
+    self.vehicle_health = autocvar_g_vehicle_bumblebee_health;
+    self.vehicle_shield = autocvar_g_vehicle_bumblebee_shield;
+    self.movetype       = MOVETYPE_TOSS;
+    self.solid          = SOLID_BBOX;
+    //self.vehicle_energy = 1;
     self.movetype = MOVETYPE_FLY;
     setorigin(self, self.origin + '0 0 150');
 }
@@ -86,23 +203,31 @@ void bumb_dinit()
              "",
              "models/vehicles/wakizashi_cockpit.dpm",
              "", "", "tag_viewport",
-             HUD_WAKIZASHI,
+             HUD_BUMBLEBEE,
              BUMB_MIN, BUMB_MAX,
              FALSE,
              bumb_spawn, autocvar_g_vehicle_bumblebee_respawntime,
-             bumb_frame,
+             bumb_pilot_frame,
              bumb_enter, bumb_exit,
              bumb_die,   bumb_think))
     {
         remove(self);
         return;
     }
+    self.gun1 = spawn();
+    setmodel(self.gun1, "models/vehicles/bumblebee_ray.dpm");
+    setattachment(self.gun1, self, "tag_hardpoint03");
+    
     self.gun1 = spawn();
     self.gun2 = spawn();
+    
     setmodel(self.gun1, "models/vehicles/bumblebee_plasma_left.dpm");
     setmodel(self.gun2, "models/vehicles/bumblebee_plasma_right.dpm");
-    setattachment(self.gun1, self, "tag_hardpoint02");
-    setattachment(self.gun2, self, "tag_hardpoint01");
+    setattachment(self.gun1, self, "tag_hardpoint01");
+    setattachment(self.gun2, self, "tag_hardpoint02");
+    // H@XZ!
+    self.gun1.angles = '90 90 0';
+    self.gun2.angles = '-90 -90 0';
 }
 
 void spawnfunc_vehicle_bumblebee()
index 70fa221977070426eea2e9f30c7138fcc0c65045..d2bf3541fd50d4fb9e27f2a91c1ec24a596f5f41 100644 (file)
@@ -1,8 +1,11 @@
 set g_vehicle_bumblebee_speed_forward            400
 set g_vehicle_bumblebee_speed_strafe             200
-set g_vehicle_bumblebee_turnspeed                180
-set g_vehicle_bumblebee_pitchspeed               90
-set g_vehicle_bumblebee_friction                 0.25
+set g_vehicle_bumblebee_speed_up                 200
+set g_vehicle_bumblebee_speed_down               200
+set g_vehicle_bumblebee_turnspeed                72
+set g_vehicle_bumblebee_pitchspeed               36
+set g_vehicle_bumblebee_pitchlimit               15
+set g_vehicle_bumblebee_friction                 0.75
 
 set g_vehicle_bumblebee_energy                   500
 set g_vehicle_bumblebee_energy_regen             50
index 2b9a94754db884fe2e01e8d2f62c7d8d9cea518e..2919aa225634e3f8ea4cc1562c9ec75389476f57 100644 (file)
@@ -3,6 +3,7 @@ set g_vehicles 1
 exec vehicle_racer.cfg
 exec vehicle_raptor.cfg
 exec vehicle_spiderbot.cfg
+exec vehicle_bumblebee.cfg
 
 set g_vehicle_racer_respawntime     10
 set g_vehicle_spiderbot_respawntime 10