set g_balance_crylink_secondary_line_fadetime 2
// }}}
// {{{ nex
-set g_balance_nex_damage 100
-set g_balance_nex_force 600
-set g_balance_nex_refire 1.5
-set g_balance_nex_animtime 0.3
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 0
-set g_balance_nex_damagefalloff_maxdist 0
-set g_balance_nex_damagefalloff_halflife 0
-set g_balance_nex_damagefalloff_forcehalflife 0
+set g_balance_nex_primary_damage 100
+set g_balance_nex_primary_force 600
+set g_balance_nex_primary_refire 1.5
+set g_balance_nex_primary_animtime 0.3
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 0
+set g_balance_nex_primary_damagefalloff_maxdist 0
+set g_balance_nex_primary_damagefalloff_halflife 0
+set g_balance_nex_primary_damagefalloff_forcehalflife 0
+
+set g_balance_nex_secondary 0
+set g_balance_nex_secondary_damage 100
+set g_balance_nex_secondary_force 600
+set g_balance_nex_secondary_refire 1.5
+set g_balance_nex_secondary_animtime 0.3
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 0
+set g_balance_nex_secondary_damagefalloff_maxdist 0
+set g_balance_nex_secondary_damagefalloff_halflife 0
+set g_balance_nex_secondary_damagefalloff_forcehalflife 0
// }}}
// {{{ minstanex
set g_balance_minstanex_refire 1
set g_balance_crylink_secondary_line_fadetime 2
// }}}
// {{{ nex
-set g_balance_nex_damage 90
-set g_balance_nex_force 200
-set g_balance_nex_refire 1.5
-set g_balance_nex_animtime 0.3
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 1000
-set g_balance_nex_damagefalloff_maxdist 3000
-set g_balance_nex_damagefalloff_halflife 1500
-set g_balance_nex_damagefalloff_forcehalflife 1500
+set g_balance_nex_primary_damage 90
+set g_balance_nex_primary_force 200
+set g_balance_nex_primary_refire 1.5
+set g_balance_nex_primary_animtime 0.3
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 1000
+set g_balance_nex_primary_damagefalloff_maxdist 3000
+set g_balance_nex_primary_damagefalloff_halflife 1500
+set g_balance_nex_primary_damagefalloff_forcehalflife 1500
+
+set g_balance_nex_secondary 0
+set g_balance_nex_secondary_damage 90
+set g_balance_nex_secondary_force 200
+set g_balance_nex_secondary_refire 1.5
+set g_balance_nex_secondary_animtime 0.3
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 1000
+set g_balance_nex_secondary_damagefalloff_maxdist 3000
+set g_balance_nex_secondary_damagefalloff_halflife 1500
+set g_balance_nex_secondary_damagefalloff_forcehalflife 1500
// }}}
// {{{ minstanex
set g_balance_minstanex_refire 1
set g_balance_crylink_secondary_line_fadetime 2
// }}}
// {{{ nex
-set g_balance_nex_damage 90
-set g_balance_nex_force 300
-set g_balance_nex_refire 1.5
-set g_balance_nex_animtime 0.3
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 1000
-set g_balance_nex_damagefalloff_maxdist 3000
-set g_balance_nex_damagefalloff_halflife 1500
-set g_balance_nex_damagefalloff_forcehalflife 1500
+set g_balance_nex_primary_damage 90
+set g_balance_nex_primary_force 300
+set g_balance_nex_primary_refire 1.5
+set g_balance_nex_primary_animtime 0.3
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 1000
+set g_balance_nex_primary_damagefalloff_maxdist 3000
+set g_balance_nex_primary_damagefalloff_halflife 1500
+set g_balance_nex_primary_damagefalloff_forcehalflife 1500
+
+set g_balance_nex_secondary 0
+set g_balance_nex_secondary_damage 90
+set g_balance_nex_secondary_force 300
+set g_balance_nex_secondary_refire 1.5
+set g_balance_nex_secondary_animtime 0.3
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 1000
+set g_balance_nex_secondary_damagefalloff_maxdist 3000
+set g_balance_nex_secondary_damagefalloff_halflife 1500
+set g_balance_nex_secondary_damagefalloff_forcehalflife 1500
// }}}
// {{{ minstanex
set g_balance_minstanex_refire 1
set g_balance_crylink_secondary_line_fadetime 2
// }}}
// {{{ nex
-set g_balance_nex_damage 100
-set g_balance_nex_force 200
-set g_balance_nex_refire 1.25
-set g_balance_nex_animtime 1
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 1000
-set g_balance_nex_damagefalloff_maxdist 3000
-set g_balance_nex_damagefalloff_halflife 2000
-set g_balance_nex_damagefalloff_forcehalflife 2000
+set g_balance_nex_primary_damage 100
+set g_balance_nex_primary_force 200
+set g_balance_nex_primary_refire 1.25
+set g_balance_nex_primary_animtime 1
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 1000
+set g_balance_nex_primary_damagefalloff_maxdist 3000
+set g_balance_nex_primary_damagefalloff_halflife 2000
+set g_balance_nex_primary_damagefalloff_forcehalflife 2000
+
+set g_balance_nex_secondary 0
+set g_balance_nex_secondary_damage 100
+set g_balance_nex_secondary_force 200
+set g_balance_nex_secondary_refire 1.25
+set g_balance_nex_secondary_animtime 1
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 1000
+set g_balance_nex_secondary_damagefalloff_maxdist 3000
+set g_balance_nex_secondary_damagefalloff_halflife 2000
+set g_balance_nex_secondary_damagefalloff_forcehalflife 2000
// }}}
// {{{ minstanex
set g_balance_minstanex_refire 1.25
set g_start_weapon_seeker 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_balance_health_start 125
set g_balance_armor_start 0
-set g_start_ammo_shells 14
+set g_start_ammo_shells 20
set g_start_ammo_nails 0
set g_start_ammo_rockets 0
set g_start_ammo_cells 0
// {{{ pickup items
set g_pickup_ammo_anyway 1
set g_pickup_weapons_anyway 1
-set g_pickup_shells 10
-set g_pickup_shells_max 30
+set g_pickup_shells 20
+set g_pickup_shells_max 45
set g_pickup_nails 120
set g_pickup_nails_max 300
set g_pickup_rockets 25
// }}}
// {{{ regen/rot
-set g_balance_health_regen 0
+set g_balance_health_regen 0.05
set g_balance_health_regenlinear 0
-set g_balance_pause_health_regen 0
+set g_balance_pause_health_regen 5
set g_balance_pause_health_regen_spawn 0
set g_balance_health_rot 0
set g_balance_health_rotlinear 1
set g_balance_laser_primary_delay 0
set g_balance_laser_primary_gauntlet 0
set g_balance_laser_secondary 1 // when 1, a secondary laser mode exists
-set g_balance_laser_secondary_damage 110 // dps
+set g_balance_laser_secondary_damage 200 // dps
set g_balance_laser_secondary_edgedamage 0
-set g_balance_laser_secondary_force 1000
+set g_balance_laser_secondary_force 1300
set g_balance_laser_secondary_radius 60
set g_balance_laser_secondary_speed 0
set g_balance_laser_secondary_spread 0
set g_balance_laser_secondary_gauntlet 1
// }}}
// {{{ shotgun
-set g_balance_shotgun_primary_bullets 16
+set g_balance_shotgun_primary_bullets 20
set g_balance_shotgun_primary_damage 4
set g_balance_shotgun_primary_force 20
set g_balance_shotgun_primary_spread 0.16
set g_balance_grenadelauncher_primary2secondary 0
set g_balance_grenadelauncher_primary_sticky 0
set g_balance_grenadelauncher_primary_damage 60
-set g_balance_grenadelauncher_primary_edgedamage 35
+set g_balance_grenadelauncher_primary_edgedamage 25
set g_balance_grenadelauncher_primary_force 300
set g_balance_grenadelauncher_primary_radius 100
-set g_balance_grenadelauncher_primary_speed 2000
-set g_balance_grenadelauncher_primary_speed_up 200
+set g_balance_grenadelauncher_primary_speed 1400
+set g_balance_grenadelauncher_primary_speed_up 225
set g_balance_grenadelauncher_primary_speed_z 0
set g_balance_grenadelauncher_primary_spread 0
set g_balance_grenadelauncher_primary_lifetime 5
set g_balance_grenadelauncher_primary_ammo 2
set g_balance_grenadelauncher_primary_health 72
set g_balance_grenadelauncher_secondary_sticky 1
-set g_balance_grenadelauncher_secondary_damage 100
-set g_balance_grenadelauncher_secondary_edgedamage 30
+set g_balance_grenadelauncher_secondary_damage 90
+set g_balance_grenadelauncher_secondary_edgedamage 32
set g_balance_grenadelauncher_secondary_force 300
set g_balance_grenadelauncher_secondary_radius 150
-set g_balance_grenadelauncher_secondary_speed 1000
-set g_balance_grenadelauncher_secondary_speed_up 200
+set g_balance_grenadelauncher_secondary_speed 1400
+set g_balance_grenadelauncher_secondary_speed_up 225
set g_balance_grenadelauncher_secondary_speed_z 0
set g_balance_grenadelauncher_secondary_spread 0
set g_balance_grenadelauncher_secondary_lifetime 5
set g_balance_grenadelauncher_secondary_refire 0.8
set g_balance_grenadelauncher_secondary_animtime 0.2
set g_balance_grenadelauncher_secondary_ammo 2
-set g_balance_grenadelauncher_secondary_health 72
+set g_balance_grenadelauncher_secondary_health 40
set g_balance_grenadelauncher_secondary_damageforcescale 0
set g_balance_grenadelauncher_secondary_bouncefactor 0.7
set g_balance_grenadelauncher_secondary_bouncestop 0.12
// }}}
// {{{ electro // TODO
set g_balance_electro_lightning 1
-set g_balance_electro_primary_damage 100
+set g_balance_electro_primary_damage 90
set g_balance_electro_primary_edgedamage 0
-set g_balance_electro_primary_force 600
+set g_balance_electro_primary_force 550
set g_balance_electro_primary_force_up 125
set g_balance_electro_primary_radius 850
set g_balance_electro_primary_comboradius 75
set g_balance_electro_primary_lifetime 0
set g_balance_electro_primary_refire 0.03333333
set g_balance_electro_primary_animtime 0.03333333
-set g_balance_electro_primary_ammo 6
+set g_balance_electro_primary_ammo 10
set g_balance_electro_primary_range 800
-set g_balance_electro_secondary_damage 40
+set g_balance_electro_secondary_damage 25
set g_balance_electro_secondary_spread 0
set g_balance_electro_secondary_edgedamage 0
set g_balance_electro_secondary_force 100
set g_balance_electro_secondary_radius 100
-set g_balance_electro_secondary_speed 500
+set g_balance_electro_secondary_speed 700
set g_balance_electro_secondary_speed_up 200
set g_balance_electro_secondary_speed_z 0
set g_balance_electro_secondary_spread 0.08
set g_balance_electro_secondary_lifetime 3.5
-set g_balance_electro_secondary_refire 0.5
-set g_balance_electro_secondary_refire2 0
-set g_balance_electro_secondary_animtime 0.5
+set g_balance_electro_secondary_refire 0.2
+set g_balance_electro_secondary_refire2 1
+set g_balance_electro_secondary_animtime 0.2
set g_balance_electro_secondary_ammo 2
set g_balance_electro_secondary_health 10
set g_balance_electro_secondary_damageforcescale 4
-set g_balance_electro_secondary_count 1
+set g_balance_electro_secondary_count 3
set g_balance_electro_combo_damage 40
set g_balance_electro_combo_edgedamage 0
set g_balance_electro_combo_force 80
// {{{ crylink
set g_balance_crylink_primary_damage 10
set g_balance_crylink_primary_edgedamage 8
-set g_balance_crylink_primary_force 25
+set g_balance_crylink_primary_force -150
set g_balance_crylink_primary_radius 100
set g_balance_crylink_primary_speed 1100
set g_balance_crylink_primary_spread 0.1
set g_balance_crylink_primary_shots 7
-set g_balance_crylink_primary_bounces 1
+set g_balance_crylink_primary_bounces 2
set g_balance_crylink_primary_refire 0.8
set g_balance_crylink_primary_animtime 0.4
set g_balance_crylink_primary_ammo 2
set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000
set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_star_lifetime 0.8 // range: 800 full, fades to 1300
+set g_balance_crylink_primary_star_lifetime 2 // range: 800 full, fades to 1300
set g_balance_crylink_primary_star_fadetime 0.25
-set g_balance_crylink_primary_other_lifetime 0.8 // range: 800 full, fades to 1300
+set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
set g_balance_crylink_primary_other_fadetime 0.25
set g_balance_crylink_secondary 1
set g_balance_crylink_secondary_damage 4
set g_balance_crylink_secondary_edgedamage 0
-set g_balance_crylink_secondary_force 16
+set g_balance_crylink_secondary_force -40
set g_balance_crylink_secondary_radius 15
set g_balance_crylink_secondary_speed 1600
set g_balance_crylink_secondary_spread 0.03
set g_balance_crylink_secondary_line_fadetime 2
// }}}
// {{{ nex
-set g_balance_nex_damage 100
-set g_balance_nex_force 200
-set g_balance_nex_refire 1.25
-set g_balance_nex_animtime 1
-set g_balance_nex_ammo 5
-set g_balance_nex_damagefalloff_mindist 1000
-set g_balance_nex_damagefalloff_maxdist 3000
-set g_balance_nex_damagefalloff_halflife 2000
-set g_balance_nex_damagefalloff_forcehalflife 2000
+set g_balance_nex_primary_damage 80
+set g_balance_nex_primary_force 200
+set g_balance_nex_primary_refire 1.25
+set g_balance_nex_primary_animtime 0.75
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 1000
+set g_balance_nex_primary_damagefalloff_maxdist 3000
+set g_balance_nex_primary_damagefalloff_halflife 4000
+set g_balance_nex_primary_damagefalloff_forcehalflife 4000
+
+set g_balance_nex_secondary 1
+set g_balance_nex_secondary_damage 80
+set g_balance_nex_secondary_force -200
+set g_balance_nex_secondary_refire 1.25
+set g_balance_nex_secondary_animtime 0.75
+set g_balance_nex_secondary_ammo 5
+set g_balance_nex_secondary_damagefalloff_mindist 1000
+set g_balance_nex_secondary_damagefalloff_maxdist 3000
+set g_balance_nex_secondary_damagefalloff_halflife 4000
+set g_balance_nex_secondary_damagefalloff_forcehalflife 4000
// }}}
// {{{ minstanex
set g_balance_minstanex_refire 1.25
set g_balance_hlac_secondary_shots 6
// }}}
// {{{ campingrifle
-set g_balance_campingrifle_magazinecapacity 0
+set g_balance_campingrifle_magazinecapacity 4 // make it pretty much useless in close combat
set g_balance_campingrifle_reloadtime 2 // matches reload anim
set g_balance_campingrifle_auto_reload_after_changing_weapons 0
set g_balance_campingrifle_bursttime 0
set g_balance_campingrifle_tracer 1
-set g_balance_campingrifle_primary_damage 50
+set g_balance_campingrifle_primary_damage 60
set g_balance_campingrifle_primary_headshotaddeddamage 35
set g_balance_campingrifle_primary_spread 0
set g_balance_campingrifle_primary_force 2
set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
set g_balance_campingrifle_primary_burstcost 0
set g_balance_campingrifle_primary_bullethail 0 // empty magazine on shot
-set g_balance_campingrifle_secondary 0
-set g_balance_campingrifle_secondary_damage 15
-set g_balance_campingrifle_secondary_headshotaddeddamage 25 // 50 damage only on head
+set g_balance_campingrifle_secondary 1
+set g_balance_campingrifle_secondary_damage 25
+set g_balance_campingrifle_secondary_headshotaddeddamage 15 // 40 damage only on head
set g_balance_campingrifle_secondary_spread 0.008
set g_balance_campingrifle_secondary_force 1
set g_balance_campingrifle_secondary_speed 20000
set g_balance_seeker_missile_accel 1.05
set g_balance_seeker_missile_ammo 2
set g_balance_seeker_missile_animtime 0.3
-set g_balance_seeker_missile_count 3
-set g_balance_seeker_missile_damage 33
+set g_balance_seeker_missile_count 8
+set g_balance_seeker_missile_damage 15
set g_balance_seeker_missile_damageforcescale 4
set g_balance_seeker_missile_decel 0.9
set g_balance_seeker_missile_delay 0.25
set g_movement_highspeed 1 "movement speed modification factor (only changes movement when above maxspeed)"
set g_maxspeed 0 "player speed limit, faster players are killed (0 for unlimited speed)"
+
+scr_conalpha 1
+scr_conalpha2factor 0.3
+scr_conalpha3factor 1
+scr_conalphafactor 0.8
+scr_conbrightness 0.35
+scr_conforcewhiledisconnected 1
+scr_conscroll2_x 0.11
+scr_conscroll2_y 0.2
+scr_conscroll3_x 0
+scr_conscroll3_y 0
+scr_conscroll_x -0.1
+scr_conscroll_y -0.3
effect electro_lightning
count 300
type spark
-color 0x283880 0x283880 // 0x202020 0x404040
+color 0x501860 0x501860 // 0x202020 0x404040
+tex 65 65
+size 6 6
+alpha 100 206 1724
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+sizeincrease 10
+velocitymultiplier 2000
+effect electro_lightning
+count 30
+type spark
+tex 8 15
+color 0xDDFDFF 0xFDFDFF
+size 2 5
+alpha 110 170 1500
+originjitter 1 1 1
+velocityjitter 150 150 150
+velocitymultiplier 0.5
+airfriction 2
+stretchfactor 1.5
+effect electro_lightning
+count 50
+type spark
+tex 41 41
+color 0xFDFDFF 0xF9FDFF
+size 2 3
+alpha 110 170 1500
+originjitter 1 1 1
+velocityjitter 350 350 350
+velocitymultiplier 2.5
+airfriction 8
+gravity 1.3
+stretchfactor 0.1
+
+// used in qcsrc/server/w_gauntlet.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect gauntlet_lightning
+count 300
+type spark
+color 0x280000 0x280000 // 0x202020 0x404040
tex 65 65
size 3 3
alpha 256 256 1024
velocityjitter 6 6 6
sizeincrease 15
velocitymultiplier 2000
-effect electro_lightning
+effect gauntlet_lightning
count 30
type spark
tex 8 15
-color 0xD9FDFF 0xD9FDFF
-size 3 7
-alpha 110 228 2024
+color 0xDD0000 0xFD0000
+size 2 5
+alpha 110 228 1024
originjitter 1 1 1
velocityjitter 150 150 150
velocitymultiplier 0.5
airfriction 2
stretchfactor 1.5
-effect electro_lightning
+effect gauntlet_lightning
count 50
type spark
tex 41 41
-color 0xD9FDFF 0xD9FDFF
-size 3 4
-alpha 110 228 1500
+color 0xFD0000 0xF90000
+size 2 3
+alpha 110 228 600
originjitter 1 1 1
velocityjitter 350 350 350
velocitymultiplier 2.5
vector w_org, w_backoff;
float campingrifle_scope;
+float nex_scope;
campingrifle_scope = TRUE;
}
+void Net_NexScope() {
+ nex_scope = TRUE;
+}
+
// CSQC_Parse_TempEntity : Handles all temporary entity network data in the CSQC layer.
// You must ALWAYS first acquire the temporary ID, which is sent as a byte.
// Return value should be 1 if CSQC handled the temporary entity, otherwise return 0 to have the engine process the event.
Net_CampingrifleScope();
bHandled = true;
break;
+ case TE_CSQC_NEX_SCOPE:
+ Net_NexScope();
+ bHandled = true;
+ break;
default:
// No special logic for this temporary entity; return 0 so the engine can handle it
bHandled = false;
zoomspeed = 3.5;
zoomdir = button_zoom;
- if(getstati(STAT_ACTIVEWEAPON) == WEP_NEX || (getstati(STAT_ACTIVEWEAPON) == WEP_CAMPINGRIFLE && campingrifle_scope)) // do NOT use switchweapon here
+ if((getstati(STAT_ACTIVEWEAPON) == WEP_NEX && nex_scope) || (getstati(STAT_ACTIVEWEAPON) == WEP_CAMPINGRIFLE && campingrifle_scope)) // do NOT use switchweapon here
zoomdir += button_attack2;
if(spectatee_status > 0 || isdemo())
{
pointparticles(particleeffectnum("electro_lightning"), trace_endpos, normalize(atrans - trace_endpos), frametime);
break;
case ENT_CLIENT_GAUNTLET:
+ pointparticles(particleeffectnum("gauntlet_lightning"), b, normalize(a - b), frametime);
break;
}
}
float weapontime;
float teamnagger;
-float hud_fg_alpha;
float hud_accuracy_hud;
float hud_border_thickness;
float hud_accuracy_border_thickness;
MapVote_DrawAbstain(pos, isize, xmax - xmin, tmp, i);
}
- drawpic(mv_mousepos, strcat("gfx/menu/", cvar_string("menu_skin"), "/cursor.tga"), '32 32 0', '1 1 1', hud_fg_alpha, DRAWFLAG_NORMAL);
+ drawpic(mv_mousepos, strcat("gfx/menu/", cvar_string("menu_skin"), "/cursor.tga"), '32 32 0', '1 1 1', autocvar_hud_panel_fg_alpha, DRAWFLAG_NORMAL);
}
void Cmd_MapVote_MapDownload(float argc)
dist = vlen(self.origin - view_origin);
float a;
- a = self.alpha * hud_fg_alpha;
+ a = self.alpha * autocvar_hud_panel_fg_alpha;
if(self.maxdistance > waypointsprite_normdistance)
a *= pow(bound(0, (self.maxdistance - dist) / (self.maxdistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent);
const float TE_CSQC_NOTIFY = 112;
const float TE_CSQC_WEAPONCOMPLAIN = 113;
const float TE_CSQC_CAMPINGRIFLE_SCOPE = 115;
+const float TE_CSQC_NEX_SCOPE = 116;
const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
const float RACE_NET_CHECKPOINT_CLEAR = 1;
// works for up to 10 decimals!
string ftos_decimals(float number, float decimals)
{
- string result;
- string tmp;
- float len;
-
- // if negative, cut off the sign first
- if(number < 0)
- return strcat("-", ftos_decimals(-number, decimals));
- // it now is always positive!
-
- // 3.516 -> 352
- number = floor(number * pow(10, decimals) + 0.5);
-
- // 352 -> "352"
- result = ftos(number);
- len = strlen(result);
- // does it have a decimal point (should not happen)? If there is one, it is always at len-7)
- // if ftos had messed it up, which should never happen: "34278.000000"
- if(len >= 7)
- if(substring(result, len - 7, 1) == ".")
- {
- dprint("ftos(integer) has comma? Can't be. Affected result: ", result, "\n");
- result = substring(result, 0, len - 7);
- len -= 7;
- }
- // "34278"
- if(decimals == 0)
- return result; // don't insert a point for zero decimals
- // is it too short? If yes, insert leading zeroes
- if(len <= decimals)
- {
- result = strcat(substring("0000000000", 0, decimals - len + 1), result);
- len = decimals + 1;
- }
- // and now... INSERT THE POINT!
- tmp = substring(result, len - decimals, decimals);
- result = strcat(substring(result, 0, len - decimals), ".", tmp);
- return result;
+ // we have sprintf...
+ return sprintf("%.*f", decimals, number);
}
float time;
ATTRIB(BorderImage, isNexposeeTitleBar, float, 0)
ATTRIB(BorderImage, zoomedOutTitleBarPosition, float, 0)
ATTRIB(BorderImage, zoomedOutTitleBar, float, 0)
- ATTRIB(BorderImage, borderLines, float, 1)
ENDCLASS(BorderImage)
#endif
me.realFontSize_Nexposeed = me.realFontSize;
}
SUPER(BorderImage).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
- me.borderVec = me.borderHeight / absSize_y * (eY + eX * (absSize_y / absSize_x));
+ me.borderVec_x = me.borderHeight / absSize_x;
+ me.borderVec_y = me.borderHeight / absSize_y;
me.realOrigin_y = 0.5 * (me.borderVec_y - me.realFontSize_y);
if(me.closeButton)
{
//print(vtos(me.borderVec), "\n");
if(me.src)
- draw_BorderPicture('0 0 0', me.src, '1 1 0', me.color, 1, me.borderLines * me.borderVec);
+ draw_BorderPicture('0 0 0', me.src, '1 1 0', me.color, 1, me.borderVec);
if(me.fontSize > 0)
{
vector ro, rf, df;
ATTRIB(Dialog, zoomedOutTitleBar, float, 0)
ATTRIB(Dialog, backgroundImage, string, string_null)
+ ATTRIB(Dialog, borderLines, float, 1)
ATTRIB(Dialog, closeButtonImage, string, string_null)
ATTRIB(Dialog, frame, entity, NULL)
float absWidth, absHeight;
me.frame = spawnBorderImage();
- me.frame.configureBorderImage(me.frame, me.title, me.titleFontSize, me.color, me.backgroundImage, me.titleHeight);
+ me.frame.configureBorderImage(me.frame, me.title, me.titleFontSize, me.color, me.backgroundImage, me.borderLines * me.titleHeight);
me.frame.zoomedOutTitleBarPosition = me.zoomedOutTitleBarPosition;
me.frame.zoomedOutTitleBar = me.zoomedOutTitleBar;
me.frame.alpha = me.alpha;
me.titleHeight = 0; // no title bar
absWidth = me.intendedWidth * conwidth;
- absHeight = me.titleHeight + me.marginTop + me.rows * me.rowHeight + (me.rows - 1) * me.rowSpacing + me.marginBottom;
+ absHeight = me.borderLines * me.titleHeight + me.marginTop + me.rows * me.rowHeight + (me.rows - 1) * me.rowSpacing + me.marginBottom;
me.itemOrigin = eX * (me.marginLeft / absWidth)
- + eY * ((me.titleHeight + me.marginTop) / absHeight);
+ + eY * ((me.borderLines * me.titleHeight + me.marginTop) / absHeight);
me.itemSize = eX * ((1 - (me.marginLeft + me.marginRight + me.columnSpacing * (me.columns - 1)) / absWidth) / me.columns)
+ eY * (me.rowHeight / absHeight);
me.itemSpacing = me.itemSize
float sortbuf, glob, i;
string fn;
+ glob = search_begin(get_model_datafilename(string_null, -1, "txt"), TRUE, TRUE);
+ if (glob < 0)
+ return;
+
me.configureXonoticImage(me, string_null, -1);
sortbuf = buf_create();
- glob = search_begin(get_model_datafilename(string_null, -1, "txt"), TRUE, TRUE);
for(i = 0; i < search_getsize(glob); ++i)
{
// select model #i!
}
buf_del(sortbuf);
get_model_parameters(string_null, 0);
- me.loadCvars(me);
+ me.loadCvars(me); // this will select the initial model, depending on the current cvars
+ me.go(me, 0); // this will set the vars for the selected model
}
void XonoticPlayerModelSelector_destroy(entity me)
{
void XonoticPlayerModelSelector_loadCvars(entity me)
{
+ string skin, model;
float i;
- if(me.currentModel)
- strunzone(me.currentModel);
- me.currentSkin = cvar("_cl_playerskin");
- me.currentModel = strzone(cvar_string("_cl_playermodel"));
+
+ skin = cvar_string("_cl_playerskin");
+ model = cvar_string("_cl_playermodel");
+
for(i = 0; i < me.numModels; ++i)
{
- if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL) == me.currentModel)
- if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN) == ftos(me.currentSkin))
+ if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL) == model)
+ if(bufstr_get(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN) == skin)
break;
}
if(i >= me.numModels) // fail
i = 0;
me.idxModels = i;
- me.go(me, 0); // this will set the other vars for currentSkin and currentModel
}
void XonoticPlayerModelSelector_go(entity me, float d)
void PlayerModelSelector_Next_Click(entity btn, entity me)
{
+ if (me.numModels <= 0)
+ return;
me.go(me, +1);
me.saveCvars(me);
}
void PlayerModelSelector_Prev_Click(entity btn, entity me)
{
+ if (me.numModels <= 0)
+ return;
me.go(me, -1);
me.saveCvars(me);
}
float i, n;
vector o;
- SUPER(XonoticPlayerModelSelector).draw(me);
+ if (me.numModels <= 0)
+ {
+ draw_CenterText('0.5 0.5 0', "<no model found>", me.realFontSize, '1 1 1', 0.6, FALSE);
+ return;
+ }
+ SUPER(XonoticPlayerModelSelector).draw(me);
// draw text on the image, handle \n in the description
draw_CenterText('0.5 0 0', me.currentModelTitle, me.realFontSize * (me.titleFontSize / me.fontSize), SKINCOLOR_MODELTITLE, SKINALPHA_MODELTITLE, FALSE);
vector force;
force = w_shotdir * cvar("g_balance_electro_primary_force") + '0 0 1' * cvar("g_balance_electro_primary_force_up");
Damage (trace_ent, self.owner, self.owner, cvar("g_balance_electro_primary_damage") * dt, WEP_ELECTRO, trace_endpos, force * dt);
+ Damage_RecordDamage(self.owner, WEP_ELECTRO, cvar("g_balance_electro_primary_damage") * dt);
}
W_Plasma_TriggerCombo(trace_endpos, cvar("g_balance_electro_primary_comboradius"), self.owner);
vector force;
force = w_shotdir * myforce;
Damage (trace_ent, self.owner, self.owner, damage * dt, WEP_LASER | HITTYPE_SECONDARY, trace_endpos, force * dt);
+ Damage_RecordDamage(self.owner, WEP_LASER | HITTYPE_SECONDARY, damage * dt);
}
// draw effect
WriteCoord(MSG_BROADCAST, v_z);
}
-void W_Nex_Attack (void)
+void W_Nex_Attack (float issecondary)
{
+ float mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, myammo;
+ if(issecondary)
+ {
+ mydmg = cvar("g_balance_nex_secondary_damage");
+ myforce = cvar("g_balance_nex_secondary_force");
+ mymindist = cvar("g_balance_nex_secondary_damagefalloff_mindist");
+ mymaxdist = cvar("g_balance_nex_secondary_damagefalloff_maxdist");
+ myhalflife = cvar("g_balance_nex_secondary_damagefalloff_halflife");
+ myforcehalflife = cvar("g_balance_nex_secondary_damagefalloff_forcehalflife");
+ myammo = cvar("g_balance_nex_secondary_ammo");
+ }
+ else
+ {
+ mydmg = cvar("g_balance_nex_primary_damage");
+ myforce = cvar("g_balance_nex_primary_force");
+ mymindist = cvar("g_balance_nex_primary_damagefalloff_mindist");
+ mymaxdist = cvar("g_balance_nex_primary_damagefalloff_maxdist");
+ myhalflife = cvar("g_balance_nex_primary_damagefalloff_halflife");
+ myforcehalflife = cvar("g_balance_nex_primary_damagefalloff_forcehalflife");
+ myammo = cvar("g_balance_nex_primary_ammo");
+ }
+
float flying;
flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last
- W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", cvar("g_balance_nex_damage"));
+ W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", mydmg);
yoda = 0;
- FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, cvar("g_balance_nex_damage"), cvar("g_balance_nex_force"), cvar("g_balance_nex_damagefalloff_mindist"), cvar("g_balance_nex_damagefalloff_maxdist"), cvar("g_balance_nex_damagefalloff_halflife"), cvar("g_balance_nex_damagefalloff_forcehalflife"), WEP_NEX);
+ FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, WEP_NEX);
if(yoda && flying)
AnnounceTo(self, "yoda");
// flash and burn the wall
if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT))
- Damage_DamageInfo(trace_endpos, cvar("g_balance_nex_damage"), 0, 0, cvar("g_balance_nex_force") * w_shotdir, WEP_NEX, self);
+ Damage_DamageInfo(trace_endpos, mydmg, 0, 0, myforce * w_shotdir, WEP_NEX, self);
if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
- self.ammo_cells = self.ammo_cells - cvar("g_balance_nex_ammo");
+ self.ammo_cells = self.ammo_cells - myammo;
}
void spawnfunc_weapon_nex (void); // defined in t_items.qc
+.float sent_nex_scope;
float w_nex(float req)
{
if (req == WR_AIM)
+ {
self.BUTTON_ATCK = bot_aim(1000000, 0, 1, FALSE);
+ self.BUTTON_ATCK2 = bot_aim(1000000, 0, 1, FALSE);
+ }
else if (req == WR_THINK)
{
if (self.BUTTON_ATCK)
{
- if (weapon_prepareattack(0, cvar("g_balance_nex_refire")))
+ if (weapon_prepareattack(0, cvar("g_balance_nex_primary_refire")))
+ {
+ W_Nex_Attack(0);
+ weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_nex_primary_animtime"), w_ready);
+ }
+ }
+ if (self.BUTTON_ATCK2)
+ {
+ if(cvar("g_balance_nex_secondary"))
+ {
+ if (weapon_prepareattack(0, cvar("g_balance_nex_secondary_refire")))
+ {
+ W_Nex_Attack(1);
+ weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_nex_secondary_animtime"), w_ready);
+ }
+ }
+ else
{
- W_Nex_Attack();
- weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_nex_animtime"), w_ready);
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if(!self.sent_nex_scope)
+ {
+ msg_entity = self;
+ WriteByte(MSG_ONE, SVC_TEMPENTITY);
+ WriteByte(MSG_ONE, TE_CSQC_NEX_SCOPE);
+ self.sent_nex_scope = 1;
+ }
}
}
}
else if (req == WR_SETUP)
weapon_setup(WEP_NEX);
else if (req == WR_CHECKAMMO1)
- return self.ammo_cells >= cvar("g_balance_nex_ammo");
+ return self.ammo_cells >= cvar("g_balance_nex_primary_ammo");
else if (req == WR_CHECKAMMO2)
- return FALSE;
+ return self.ammo_cells >= cvar("g_balance_nex_secondary_ammo");
return TRUE;
};
#endif
f = (self.cnt + cvar("g_balance_shotgun_secondary_melee_time") - time) / cvar("g_balance_shotgun_secondary_melee_time") * 2 - 1;
vector targpos;
targpos = self.owner.origin + self.owner.view_ofs + angle * cvar("g_balance_shotgun_secondary_melee_range") + v_right * f * cvar("g_balance_shotgun_secondary_melee_swing") + v_up * f * cvar("g_balance_shotgun_secondary_melee_swing");
+
WarpZone_traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, targpos, FALSE, self.owner, ANTILAG_LATENCY(self.owner));
// apply the damage, also remove self
vector force;
force = angle * cvar("g_balance_shotgun_secondary_force");
Damage (trace_ent, self.owner, self.owner, cvar("g_balance_shotgun_secondary_damage") * ((f + 1) / 2), WEP_SHOTGUN | HITTYPE_SECONDARY , self.owner.origin + self.owner.view_ofs, force);
+ Damage_RecordDamage(self.owner, WEP_SHOTGUN | HITTYPE_SECONDARY, cvar("g_balance_shotgun_secondary_damage") * ((f + 1) / 2));
remove(self);
}
else if(time >= self.cnt + cvar("g_balance_shotgun_secondary_melee_time")) // missed, remove ent
meleetemp.owner = self;
meleetemp.think = shotgun_meleethink;
meleetemp.nextthink = time + cvar("g_balance_shotgun_secondary_melee_delay");
+ W_SetupShot_Range(self, TRUE, 0, "", cvar("g_balance_shotgun_secondary_damage"), cvar("g_balance_shotgun_secondary_melee_range"));
}
void spawnfunc_weapon_shotgun(); // defined in t_items.qc
#ifdef SVQC
// leilei's fancy muzzleflash stuff
void W_Uzi_Flash_Go() {
- if (self.frame > 10){
- SUB_Remove();
+ if (self.alpha >= 0)
+ {
+ setmodel(self, "");
return;
}
self.frame = self.frame + 2;
- self.alpha = self.alpha - 0.2;
+ self.scale = self.scale * 0.5;
+ self.alpha = self.alpha - 0.25;
self.think = W_Uzi_Flash_Go;
- self.nextthink = time + 0.02;
+ self.nextthink = time + 0.05;
};
.float uzi_bulletcounter;
+.entity muzzleflash;
void W_Uzi_Attack (float deathtype)
{
local entity flash;
pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ if ((self.muzzleflash == world) || wasfreed(self.muzzleflash))
+ self.muzzleflash = spawn();
+
// muzzle flash for 1st person view
- flash = spawn();
- setmodel(flash, "models/uziflash.md3"); // precision set below
+ setmodel(self.muzzleflash, "models/uziflash.md3"); // precision set below
//SUB_SetFade(flash, time + 0.06, 0);
- flash.think = W_Uzi_Flash_Go;
- flash.nextthink = time + 0.02;
- flash.frame = 2;
- flash.alpha = 1;
- flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
- W_AttachToShotorg(flash, '5 0 0');
+ self.muzzleflash.scale = 0.75;
+ self.muzzleflash.think = W_Uzi_Flash_Go;
+ self.muzzleflash.nextthink = time + 0.02;
+ self.muzzleflash.frame = 2;
+ self.muzzleflash.alpha = 0.75;
+ self.muzzleflash.angles_z = random() * 180;
+ self.muzzleflash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
+ W_AttachToShotorg(self.muzzleflash, '5 0 0');
// casing code
if (cvar("g_casings") >= 2)