X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fvehicles%2Fvehicle%2Fraptor_weapons.qc;h=dc2f293d65fd533e0582bee09e38b0cf8aea3939;hb=HEAD;hp=66b5bec883392c1527a1adb229e209c798355996;hpb=25f7a4a5f137ffb344c47107636fcfc7cdfa2045;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/vehicles/vehicle/raptor_weapons.qc b/qcsrc/common/vehicles/vehicle/raptor_weapons.qc index 66b5bec88..dc2f293d6 100644 --- a/qcsrc/common/vehicles/vehicle/raptor_weapons.qc +++ b/qcsrc/common/vehicles/vehicle/raptor_weapons.qc @@ -7,7 +7,7 @@ METHOD(RaptorCannon, wr_think, void(entity thiswep, entity actor, .entity weapon entity player = isPlayer ? actor : actor.owner; entity veh = player.vehicle; // 1 [wait] 1 [wait] 2 [wait] 2 [wait] [wait] - float t = autocvar_g_vehicle_raptor_cannon_refire * (1 + veh.misc_bulletcounter == 4); + float t = autocvar_g_vehicle_raptor_cannon_refire * (1 + ((veh.misc_bulletcounter + 1) >= 4)); if (fire & 1) if (weapon_prepareattack(thiswep, player, weaponentity, false, t)) { if (isPlayer) W_SetupShot_Dir(player, weaponentity, v_forward, false, 0, SND_Null, CH_WEAPON_B, 0, DEATH_VH_RAPT_CANNON.m_id); @@ -16,12 +16,12 @@ METHOD(RaptorCannon, wr_think, void(entity thiswep, entity actor, .entity weapon if (veh) { veh.misc_bulletcounter += 1; org = (veh.misc_bulletcounter <= 2) ? gettaginfo(veh.gun1, gettagindex(veh.gun1, "fire1")) - : (((veh.misc_bulletcounter == 4) ? veh.misc_bulletcounter = 0 : 0), gettaginfo(veh.gun2, gettagindex(veh.gun2, "fire1"))); + : (((veh.misc_bulletcounter >= 4) ? veh.misc_bulletcounter = 0 : 0), gettaginfo(veh.gun2, gettagindex(veh.gun2, "fire1"))); dir = v_forward; veh.vehicle_energy -= autocvar_g_vehicle_raptor_cannon_cost; actor.cnt = time; } - vehicles_projectile(veh, EFFECT_RAPTOR_MUZZLEFLASH.eent_eff_name, SND_LASERGUN_FIRE, + vehicles_projectile(veh, EFFECT_RAPTOR_MUZZLEFLASH, SND_LASERGUN_FIRE, org, normalize(dir + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed, autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force, 0, DEATH_VH_RAPT_CANNON.m_id, PROJECTILE_RAPTORCANNON, 0, true, true, player); @@ -59,19 +59,21 @@ METHOD(RaptorFlare, wr_think, void(entity thiswep, entity actor, .entity weapone entity veh = player.vehicle; if (fire & 2) if (!isPlayer || weapon_prepareattack(thiswep, player, weaponentity, true, autocvar_g_vehicle_raptor_flare_refire)) { + vector forward, right, up; + MAKE_VECTORS(player.v_angle, forward, right, up); for(int i = 0; i < 3; ++i) { - entity _flare = spawn(); + entity _flare = new(RaptorFlare_flare); setmodel(_flare, MDL_VEH_RAPTOR_FLARE); _flare.effects = EF_LOWPRECISION | EF_FLAME; _flare.scale = 0.5; + _flare.solid = SOLID_CORPSE; // before setorigin so it will be linked to the area grid setorigin(_flare, actor.origin - '0 0 16'); set_movetype(_flare, MOVETYPE_TOSS); _flare.gravity = 0.15; - _flare.velocity = 0.25 * actor.velocity + (v_forward + randomvec() * 0.25)* -500; + _flare.velocity = 0.25 * actor.velocity + (forward + randomvec() * 0.25)* -500; setthink(_flare, raptor_flare_think); _flare.nextthink = time; _flare.owner = veh ? veh : player; - _flare.solid = SOLID_CORPSE; _flare.takedamage = DAMAGE_YES; _flare.event_damage = raptor_flare_damage; SetResourceExplicit(_flare, RES_HEALTH, 20); @@ -123,7 +125,7 @@ void raptor_bomb_burst(entity this) for(i = 0; i < autocvar_g_vehicle_raptor_bomblets; ++i) { - bomblet = spawn(); + bomblet = new(raptor_bomb_bomblet); setorigin(bomblet, this.origin); set_movetype(bomblet, MOVETYPE_TOSS); @@ -148,12 +150,11 @@ void raptor_bomb_touch(entity this, entity toucher) void raptor_bombdrop(entity this) { - entity bomb_1, bomb_2; - - bomb_1 = spawn(); - bomb_2 = spawn(); + entity bomb_1 = new(bombmount_left); + entity bomb_2 = new(bombmount_right); vector org = gettaginfo(this, gettagindex(this, "bombmount_left")); + bomb_1.solid = bomb_2.solid = SOLID_BBOX; // before setorigin to ensure area grid linking setorigin(bomb_1, org); org = gettaginfo(this, gettagindex(this, "bombmount_right")); setorigin(bomb_2, org); @@ -174,7 +175,6 @@ void raptor_bombdrop(entity this) bomb_1.owner = bomb_2.owner = this; bomb_1.realowner = bomb_2.realowner = this.owner; - bomb_1.solid = bomb_2.solid = SOLID_BBOX; bomb_1.gravity = bomb_2.gravity = 1; PROJECTILE_MAKETRIGGER(bomb_1); @@ -232,13 +232,13 @@ void RaptorCBShellfragDraw(entity this) void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang) { - entity sfrag = spawn(); + entity sfrag = new(RaptorCBShellfrag); setmodel(sfrag, MDL_VEH_RAPTOR_CB_FRAGMENT); + sfrag.solid = SOLID_CORPSE; // before setorigin to ensure area grid linking setorigin(sfrag, _org); set_movetype(sfrag, MOVETYPE_BOUNCE); sfrag.gravity = 0.15; - sfrag.solid = SOLID_CORPSE; sfrag.draw = RaptorCBShellfragDraw; IL_PUSH(g_drawables, sfrag);