set g_balance_laser_primary_shotangle 0
set g_balance_laser_primary_delay 0
set g_balance_laser_primary_gauntlet 0
-set g_balance_laser_primary_force_zscale 1.25
+set g_balance_laser_primary_force_zscale 1.2
set g_balance_laser_primary_force_velocitybias 0
set g_balance_laser_primary_force_other_scale 1
set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
set g_balance_crylink_secondary 1
set g_balance_crylink_secondary_damage 10
set g_balance_crylink_secondary_edgedamage 5
-set g_balance_crylink_secondary_force -150
+set g_balance_crylink_secondary_force -250
set g_balance_crylink_secondary_radius 100
set g_balance_crylink_secondary_speed 3000
set g_balance_crylink_secondary_spread 0.01
set g_balance_hagar_primary_damageforcescale 0
set g_balance_hagar_primary_radius 65
set g_balance_hagar_primary_spread 0.03
-set g_balance_hagar_primary_speed 2200
+set g_balance_hagar_primary_speed 2500
set g_balance_hagar_primary_lifetime 5
set g_balance_hagar_primary_refire 0.16667 // 6 rockets per second
set g_balance_hagar_primary_ammo 1
// {{{ rocketlauncher
set g_balance_rocketlauncher_damage 80
set g_balance_rocketlauncher_edgedamage 40
-set g_balance_rocketlauncher_force 400
+set g_balance_rocketlauncher_force 450
set g_balance_rocketlauncher_radius 110
set g_balance_rocketlauncher_speed 1300
set g_balance_rocketlauncher_speedaccel 1300
set g_balance_laser_primary_shotangle 0
set g_balance_laser_primary_delay 0
set g_balance_laser_primary_gauntlet 0
-set g_balance_laser_primary_force_zscale 1.25
+set g_balance_laser_primary_force_zscale 1.2
set g_balance_laser_primary_force_velocitybias 0
set g_balance_laser_primary_force_other_scale 1
set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
set g_balance_crylink_secondary 1
set g_balance_crylink_secondary_damage 10
set g_balance_crylink_secondary_edgedamage 5
-set g_balance_crylink_secondary_force -150
+set g_balance_crylink_secondary_force -250
set g_balance_crylink_secondary_radius 100
set g_balance_crylink_secondary_speed 3000
set g_balance_crylink_secondary_spread 0.01
set g_balance_hagar_primary_damageforcescale 0
set g_balance_hagar_primary_radius 65
set g_balance_hagar_primary_spread 0.03
-set g_balance_hagar_primary_speed 2200
+set g_balance_hagar_primary_speed 2500
set g_balance_hagar_primary_lifetime 5
set g_balance_hagar_primary_refire 0.16667 // 6 rockets per second
set g_balance_hagar_primary_ammo 1
set g_balance_hagar_secondary_damageforcescale 0
set g_balance_hagar_secondary_radius 80
set g_balance_hagar_secondary_spread 0.05
-set g_balance_hagar_secondary_speed 2000
+set g_balance_hagar_secondary_speed 2500
set g_balance_hagar_secondary_lifetime_min 10
set g_balance_hagar_secondary_lifetime_rand 0
set g_balance_hagar_secondary_refire 0.5
// {{{ rocketlauncher
set g_balance_rocketlauncher_damage 80
set g_balance_rocketlauncher_edgedamage 40
-set g_balance_rocketlauncher_force 400
+set g_balance_rocketlauncher_force 450
set g_balance_rocketlauncher_radius 110
set g_balance_rocketlauncher_speed 1300
set g_balance_rocketlauncher_speedaccel 1300
--- /dev/null
+g_mod_physics Xonotic
+// current Xonotic physics
+
+sv_gravity 700
+sv_maxspeed 360
+sv_maxairspeed 360
+
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 2
+sv_friction 6
+edgefriction 1
+sv_stepheight 34
+// Q1: 16+2
+// Nex: 32+2
+// we try: 24+2
+// samual: 32+2
+
+// jump height == sv_jumpvelocity^2 / (2*sv_gravity)
+// in this case: 42.87 qu
+// player: 24+45 qu
+// total: 111.87qu
+// this is smaller than 112 qu, so a 112 qu high corridor (7 of 8 grid units in
+// the 16 grid, and the 8th unit used for wall/floor) just lets a player jump!
+sv_jumpvelocity 245
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw -0.8
+sv_airaccel_qw_stretchfactor 2
+
+sv_airstopaccelerate 3
+sv_airstrafeaccelerate 18
+sv_maxairstrafespeed 100
+sv_airstrafeaccel_qw -0.95
+sv_aircontrol 100
+sv_aircontrol_penalty 0
+sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 900
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
case PROJECTILE_GRENADE_BOUNCING:
rot = '0 -1000 0'; // sideways
break;
+ case PROJECTILE_NADE_RED_BURN:
+ case PROJECTILE_NADE_RED:
+ case PROJECTILE_NADE_BLUE_BURN:
+ case PROJECTILE_NADE_BLUE:
+ case PROJECTILE_NADE_YELLOW_BURN:
+ case PROJECTILE_NADE_YELLOW:
+ case PROJECTILE_NADE_PINK_BURN:
+ case PROJECTILE_NADE_PINK:
+ case PROJECTILE_NADE_BURN:
+ case PROJECTILE_NADE:
+ rot = self.avelocity;
+ break;
case PROJECTILE_HOOKBOMB:
rot = '1000 0 0'; // forward
break;
trailorigin = self.origin;
switch(self.cnt)
{
+ case PROJECTILE_NADE_RED_BURN:
+ case PROJECTILE_NADE_RED:
+ case PROJECTILE_NADE_BLUE_BURN:
+ case PROJECTILE_NADE_BLUE:
+ case PROJECTILE_NADE_YELLOW_BURN:
+ case PROJECTILE_NADE_YELLOW:
+ case PROJECTILE_NADE_PINK_BURN:
+ case PROJECTILE_NADE_PINK:
+ case PROJECTILE_NADE_BURN:
+ case PROJECTILE_NADE:
+ trailorigin += v_up * 4;
+ break;
case PROJECTILE_GRENADE:
case PROJECTILE_GRENADE_BOUNCING:
trailorigin += v_right * 1 + v_forward * -10;
case PROJECTILE_NADE_PINK:
case PROJECTILE_NADE_BURN:
case PROJECTILE_NADE:
- self.mins = '-3 -3 -3';
- self.maxs = '3 3 3';
+ self.mins = '-16 -16 -16';
+ self.maxs = '16 16 16';
self.move_movetype = MOVETYPE_BOUNCE;
self.move_touch = func_null;
self.scale = 1.5;
precache_model("models/rocket.md3");
precache_model("models/tagrocket.md3");
precache_model("models/tracer.mdl");
+
+ precache_model("models/weapons/v_ok_grenade.md3");
precache_sound("weapons/electro_fly.wav");
precache_sound("weapons/rocket_fly.wav");
void nade_touch()
{
PROJECTILE_TOUCH;
- setsize(self, '-2 -2 -2', '2 2 2');
- UpdateCSQCProjectile(self);
+ //setsize(self, '-2 -2 -2', '2 2 2');
+ //UpdateCSQCProjectile(self);
if(self.health == autocvar_g_nades_nade_health)
{
spamsound(self, CH_SHOTS, strcat("weapons/grenade_bounce", ftos(1 + rint(random() * 5)), ".wav"), VOL_BASE, ATTN_NORM);
makevectors(e.v_angle);
+ W_SetupShot(e, FALSE, FALSE, "", CH_WEAPON_A, 0);
+
Kill_Notification(NOTIF_ONE_ONLY, e, MSG_CENTER_CPID, CPID_NADES);
- setorigin(_nade, CENTER_OR_VIEWOFS(e) + (v_right * 10) * -1);
+ //setorigin(_nade, CENTER_OR_VIEWOFS(e) + (v_right * 10) * -1);
+ setorigin(_nade, w_shotorg + (v_right * 10) * -1);
setmodel(_nade, "models/weapons/v_ok_grenade.md3");
setattachment(_nade, world, "");
PROJECTILE_MAKETRIGGER(_nade);
setsize(_nade, '-16 -16 -16', '16 16 16');
_nade.movetype = MOVETYPE_BOUNCE;
+ tracebox(_nade.origin, _nade.mins, _nade.maxs, _nade.origin, FALSE, _nade);
+ if (trace_startsolid)
+ setorigin(_nade, e.origin);
+
if(e.crouch)
_nade.velocity = '0 0 -10';
else if(autocvar_g_nades_nade_newton_style == 1)
else if(autocvar_g_nades_nade_newton_style == 2)
_nade.velocity = _velocity;
else
- _nade.velocity = W_CalculateProjectileVelocity(e.velocity, _velocity, FALSE);
+ _nade.velocity = W_CalculateProjectileVelocity(e.velocity, _velocity, TRUE);
- _nade.solid = SOLID_BBOX;
+ //_nade.solid = SOLID_BBOX; // TODO: remember why this was needed
_nade.touch = nade_touch;
_nade.health = autocvar_g_nades_nade_health;
_nade.takedamage = DAMAGE_AIM;
_nade.event_damage = nade_damage;
_nade.teleportable = TRUE;
+ _nade.pushable = TRUE;
+ _nade.gravity = 1;
+ _nade.missile_flags = MIF_SPLASH | MIF_ARC;
+ _nade.damagedbycontents = TRUE;
+ _nade.angles = vectoangles(_nade.velocity);
+ _nade.flags = FL_PROJECTILE;
nade_spawn(_nade);
self.nade.colormap = self.colormap;
self.nade.glowmod = self.glowmod;
self.nade.wait = time + autocvar_g_nades_nade_lifetime;
- self.nade.cnt = time;
+ self.nade.lifetime = time;
self.nade.think = nade_beep;
self.nade.nextthink = max(self.nade.wait - 3, time);
self.nade.projectiledeathtype = DEATH_NADE;
}
else
{
- if(time - self.nade.cnt >= 1)
+ if(time - self.nade.lifetime >= 1)
{
makevectors(self.v_angle);
- float _force = time - self.nade.cnt;
+ float _force = time - self.nade.lifetime;
_force /= autocvar_g_nades_nade_lifetime;
_force = autocvar_g_nades_nade_minforce + (_force * (autocvar_g_nades_nade_maxforce - autocvar_g_nades_nade_minforce));
toss_nade(self, (v_forward * 0.75 + v_up * 0.2 + v_right * 0.05) * _force, 0);
if(!self.nade)
nade_prime();
}
- else if(time - self.nade.cnt >= 1)
+ else if(time - self.nade.lifetime >= 1)
{
if(self.nade)
{
makevectors(self.v_angle);
- float _force = time - self.nade.cnt;
+ float _force = time - self.nade.lifetime;
_force /= autocvar_g_nades_nade_lifetime;
_force = autocvar_g_nades_nade_minforce + (_force * (autocvar_g_nades_nade_maxforce - autocvar_g_nades_nade_minforce));
toss_nade(self, (v_forward * 0.7 + v_up * 0.2 + v_right * 0.1) * _force, 0);