X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fvehicles%2Fsv_vehicles.qc;h=bbecb83da6efe8b9cb65641dc66e6f38977e3cab;hb=6fd652c755699fa4d815f62d6bb40a9fe2114f7c;hp=3ec02901dc14c06435cc35f4d5b738ad940f7add;hpb=61749b7d7dde89c14607ba07d0a106feff962d7e;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/vehicles/sv_vehicles.qc b/qcsrc/common/vehicles/sv_vehicles.qc index 3ec02901d..bbecb83da 100644 --- a/qcsrc/common/vehicles/sv_vehicles.qc +++ b/qcsrc/common/vehicles/sv_vehicles.qc @@ -1,5 +1,17 @@ #include "sv_vehicles.qh" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + bool SendAuxiliaryXhair(entity this, entity to, int sf) { WriteHeader(MSG_ENTITY, ENT_CLIENT_AUXILIARYXHAIR); @@ -161,43 +173,6 @@ void vehicles_locktarget(entity this, float incr, float decr, float _lock_time) } } -float vehicle_altitude(entity this, float amax) -{ - tracebox(this.origin, this.mins, this.maxs, this.origin - ('0 0 1' * amax), MOVE_WORLDONLY, this); - return vlen(this.origin - trace_endpos); -} - -vector vehicles_force_fromtag_hover(entity this, string tag_name, float spring_length, float max_power) -{ - force_fromtag_origin = gettaginfo(this, gettagindex(this, tag_name)); - v_forward = normalize(v_forward) * -1; - traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, this); - - force_fromtag_power = (1 - trace_fraction) * max_power; - force_fromtag_normpower = force_fromtag_power / max_power; - - return v_forward * force_fromtag_power; -} - -vector vehicles_force_fromtag_maglev(entity this, string tag_name, float spring_length, float max_power) -{ - force_fromtag_origin = gettaginfo(this, gettagindex(this, tag_name)); - v_forward = normalize(v_forward) * -1; - traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, this); - - // TODO - this may NOT be compatible with wall/celing movement, unhardcode 0.25 (engine count multiplier) - if(trace_fraction == 1.0) - { - force_fromtag_normpower = -0.25; - return '0 0 -200'; - } - - force_fromtag_power = ((1 - trace_fraction) - trace_fraction) * max_power; - force_fromtag_normpower = force_fromtag_power / max_power; - - return v_forward * force_fromtag_power; -} - // projectile handling void vehicles_projectile_damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force) { @@ -230,7 +205,7 @@ void vehicles_projectile_explode(entity this, entity toucher) PROJECTILE_TOUCH(this, toucher); this.event_damage = func_null; - RadiusDamage (this, this.realowner, this.shot_dmg, 0, this.shot_radius, this, NULL, this.shot_force, this.totalfrags, DMG_NOWEP, toucher); + RadiusDamage (this, this.realowner, this.shot_dmg, 0, this.shot_radius, this, NULL, this.shot_force, this.projectiledeathtype, DMG_NOWEP, toucher); delete(this); } @@ -251,10 +226,8 @@ entity vehicles_projectile(entity this, entity _mzlfx, Sound _mzlsound, int _deahtype, float _projtype, float _health, bool _cull, bool _clianim, entity _owner) { - TC(Sound, _mzlsound); - entity proj; - - proj = spawn(); + TC(Sound, _mzlsound); + entity proj = new(vehicles_projectile); PROJECTILE_MAKETRIGGER(proj); setorigin(proj, _org); @@ -262,7 +235,7 @@ entity vehicles_projectile(entity this, entity _mzlfx, Sound _mzlsound, proj.shot_dmg = _dmg; proj.shot_radius = _radi; proj.shot_force = _force; - proj.totalfrags = _deahtype; + proj.projectiledeathtype = _deahtype; proj.solid = SOLID_BBOX; set_movetype(proj, MOVETYPE_FLYMISSILE); proj.flags = FL_PROJECTILE; @@ -324,7 +297,7 @@ void vehicles_gib_think(entity this) entity vehicle_tossgib(entity this, entity _template, vector _vel, string _tag, bool _burn, bool _explode, float _maxtime, vector _rot) { - entity _gib = spawn(); + entity _gib = new(vehicle_gib); _setmodel(_gib, _template.model); vector org = gettaginfo(this, gettagindex(this, _tag)); setorigin(_gib, org); @@ -369,8 +342,8 @@ bool vehicle_addplayerslot( entity _owner, _slot.vehicle_enter = _enterfunc; STAT(HUD, _slot) = _hud; _slot.vehicle_flags = VHF_PLAYERSLOT; - _slot.vehicle_viewport = spawn(); - _slot.vehicle_hudmodel = spawn(); + _slot.vehicle_viewport = new(vehicle_viewport); + _slot.vehicle_hudmodel = new(vehicle_hudmodel); _slot.vehicle_hudmodel.viewmodelforclient = _slot; _slot.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT); @@ -450,7 +423,7 @@ void vehicles_reset_colors(entity this, entity player) this.velocity = '0 0 0'; this.effects = eff; - Vehicle info = Vehicles_from(this.vehicleid); + Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid); info.vr_setcolors(info, this); } @@ -683,7 +656,7 @@ void vehicles_damage(entity this, entity inflictor, entity attacker, float damag { if (wasfreed(this.vehicle_shieldent) || this.vehicle_shieldent == NULL) { - this.vehicle_shieldent = spawn(); + this.vehicle_shieldent = new(vehicle_shieldent); this.vehicle_shieldent.effects = EF_LOWPRECISION; setmodel(this.vehicle_shieldent, MDL_VEH_SHIELD); @@ -741,7 +714,7 @@ void vehicles_damage(entity this, entity inflictor, entity attacker, float damag antilag_clear(this, this); - Vehicle info = Vehicles_from(this.vehicleid); + Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid); info.vr_death(info, this); vehicles_setreturn(this); } @@ -839,6 +812,7 @@ void vehicles_exit(entity vehic, bool eject) WriteByte (MSG_ONE, SVC_SETVIEWPORT); WriteEntity( MSG_ONE, player); + // NOTE: engine networked WriteByte (MSG_ONE, SVC_SETVIEWANGLES); WriteAngle(MSG_ONE, 0); WriteAngle(MSG_ONE, vehic.angles_y); @@ -931,7 +905,7 @@ void vehicles_touch(entity this, entity toucher) } if(this.play_time < time) { - Vehicle info = Vehicles_from(this.vehicleid); + Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid); info.vr_impact(info, this); } @@ -976,7 +950,7 @@ void vehicles_enter(entity pl, entity veh) || (pl.vehicle) ) { return; } - Vehicle info = Vehicles_from(veh.vehicleid); + Vehicle info = veh.vehicledef; //REGISTRY_GET(Vehicles, veh.vehicleid); if(autocvar_g_vehicles_enter) // vehicle's touch function should handle this if entering via use key is disabled (TODO) if(veh.vehicle_flags & VHF_MULTISLOT) @@ -1026,7 +1000,7 @@ void vehicles_enter(entity pl, entity veh) veh.vehicle_hudmodel.viewmodelforclient = pl; - pl.crouch = false; + UNSET_DUCKED(pl); pl.view_ofs = STAT(PL_VIEW_OFS, pl); setsize(pl, STAT(PL_MIN, pl), STAT(PL_MAX, pl)); @@ -1081,6 +1055,7 @@ void vehicles_enter(entity pl, entity veh) WriteByte (MSG_ONE, SVC_SETVIEWPORT); WriteEntity(MSG_ONE, veh.vehicle_viewport); + // NOTE: engine networked WriteByte (MSG_ONE, SVC_SETVIEWANGLES); if(veh.tur_head) { @@ -1115,7 +1090,7 @@ void vehicles_think(entity this) if(this.owner) STAT(VEHICLESTAT_W2MODE, this.owner) = STAT(VEHICLESTAT_W2MODE, this); - Vehicle info = Vehicles_from(this.vehicleid); + Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid); info.vr_think(info, this); vehicles_painframe(this); @@ -1188,7 +1163,7 @@ void vehicles_spawn(entity this) }); - Vehicle info = Vehicles_from(this.vehicleid); + Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid); info.vr_spawn(info, this); vehicles_reset_colors(this, NULL); @@ -1205,10 +1180,7 @@ bool vehicle_initialize(entity this, Vehicle info, bool nodrop) return false; if(!this.tur_head) - { info.vr_precache(info); - IL_PUSH(g_vehicles, this); - } if(this.targetname && this.targetname != "") { @@ -1256,6 +1228,7 @@ bool vehicle_initialize(entity this, Vehicle info, bool nodrop) this.damagedbycontents = true; IL_PUSH(g_damagedbycontents, this); this.vehicleid = info.vehicleid; + this.vehicledef = info; this.PlayerPhysplug = info.PlayerPhysplug; this.event_damage = func_null; this.event_heal = func_null;