]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/vehicles/vehicle/bumblebee.qc
Update oldorigin when setting player's new position in a vehicle, fixes falldamage...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / vehicles / vehicle / bumblebee.qc
index ad376e809b0d86a3804bce1ab2ba1592211a47c8..1c9e6e1a41d549166b53d6c9f3ec004438a1dc07 100644 (file)
@@ -99,6 +99,7 @@ bool bumblebee_gunner_frame(entity this, float dt)
                _out = autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
                setorigin(this, vehic.origin + v_up * -16 + v_forward * -16 + v_right * -128);
        }
+       this.oldorigin = this.origin; // negate fall damage
 
        crosshair_trace(this);
        vector _ct = trace_endpos;
@@ -236,7 +237,12 @@ void bumblebee_gunner_exit(entity this, int _exitflag)
        player.event_damage   = PlayerDamage;
        player.hud            = HUD_NORMAL;
        player.teleportable       = TELEPORT_NORMAL;
-       PS(player).m_switchweapon = gunner.m_switchweapon;
+       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       {
+               .entity weaponentity = weaponentities[slot];
+               player.(weaponentity).m_switchweapon = gunner.(weaponentity).m_switchweapon;
+               delete(gunner.(weaponentity));
+       }
        player.vehicle_enter_delay = time + 2;
 
        fixedmakevectors(vehic.angles);
@@ -304,9 +310,15 @@ bool bumblebee_gunner_enter(entity this, entity player)
        player.vehicle_energy   = vehic.vehicle_energy;
        UNSET_ONGROUND(player);
 
-       RemoveGrapplingHook(player);
+       RemoveGrapplingHooks(player);
 
-       gunner.m_switchweapon = PS(player).m_switchweapon;
+       for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+       {
+               .entity weaponentity = weaponentities[slot];
+
+               gunner.(weaponentity) = new(temp_wepent);
+               gunner.(weaponentity).m_switchweapon = player.(weaponentity).m_switchweapon;
+       }
        gunner.vehicle_exit = bumblebee_gunner_exit;
        gunner.vehicle_hudmodel.viewmodelforclient = player;
 
@@ -391,7 +403,7 @@ bool bumblebee_pilot_frame(entity this, float dt)
        entity vehic = this.vehicle;
        return = true;
 
-       if(gameover)
+       if(game_stopped)
        {
                vehic.solid = SOLID_NOT;
                vehic.takedamage = DAMAGE_NO;
@@ -596,6 +608,7 @@ bool bumblebee_pilot_frame(entity this, float dt)
        makevectors(vehic.angles);
        vehic.angles_x *= -1;
        setorigin(this, vehic.origin + v_up * 48 + v_forward * 160);
+       this.oldorigin = this.origin; // negate fall damage
 
        PHYS_INPUT_BUTTON_ATCK(this) = PHYS_INPUT_BUTTON_ATCK2(this) = PHYS_INPUT_BUTTON_CROUCH(this) = false;
 }
@@ -645,7 +658,7 @@ void bumblebee_exit(entity this, int eject)
        else
                spot = this.origin + v_up * 128 - v_forward * 300;
 
-       spot = vehicles_findgoodexit(this, spot);
+       spot = vehicles_findgoodexit(this, this.owner, spot);
 
        // Hide beam
        if(this.gun3.enemy || !wasfreed(this.gun3.enemy))