set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_grenadelauncher_secondary_health 70
set g_balance_grenadelauncher_secondary_damageforcescale 4
+set g_balance_grenadelauncher_secondary_bouncefactor 0.5
+set g_balance_grenadelauncher_secondary_bouncestop 0.075
// }}}
// {{{ electro
set g_balance_electro_lightning 0
set g_balance_tuba_force 40
// }}}
// {{{ fireball
-set g_balance_fireball_primary_ammo 5
-set g_balance_fireball_primary_animtime 0.3
-set g_balance_fireball_primary_damage 40
+set g_balance_fireball_primary_ammo 40
+set g_balance_fireball_primary_animtime 0.15
+set g_balance_fireball_primary_bfgdamage 100
+set g_balance_fireball_primary_bfgforce 0
+set g_balance_fireball_primary_bfgradius 1000
+set g_balance_fireball_primary_damage 200
set g_balance_fireball_primary_damageforcescale 4
-set g_balance_fireball_primary_damagetime 5
-set g_balance_fireball_primary_force 100
+set g_balance_fireball_primary_edgedamage 0
+set g_balance_fireball_primary_force 700
+set g_balance_fireball_primary_health 50
set g_balance_fireball_primary_laserburntime 0.5
-set g_balance_fireball_primary_laserdamage 30
+set g_balance_fireball_primary_laserdamage 80
set g_balance_fireball_primary_laseredgedamage 20
-set g_balance_fireball_primary_laserradius 110
-set g_balance_fireball_primary_lifetime 7
-set g_balance_fireball_primary_refire 2
-set g_balance_fireball_primary_speed 900
-set g_balance_fireball_primary_speed_up 100
-set g_balance_fireball_primary_speed_z 0
+set g_balance_fireball_primary_laserradius 256
+set g_balance_fireball_primary_lifetime 15
+set g_balance_fireball_primary_radius 200
+set g_balance_fireball_primary_refire 5
+set g_balance_fireball_primary_refire2 0
+set g_balance_fireball_primary_speed 650
set g_balance_fireball_primary_spread 0
-set g_balance_fireball_secondary_ammo 25
-set g_balance_fireball_secondary_animtime 0.15
-set g_balance_fireball_secondary_bfgdamage 100
-set g_balance_fireball_secondary_bfgforce 500
-set g_balance_fireball_secondary_bfgradius 750
-set g_balance_fireball_secondary_damage 150
+set g_balance_fireball_secondary_ammo 5
+set g_balance_fireball_secondary_animtime 0.3
+set g_balance_fireball_secondary_damage 40
set g_balance_fireball_secondary_damageforcescale 4
-set g_balance_fireball_secondary_edgedamage 0
-set g_balance_fireball_secondary_force 700
-set g_balance_fireball_secondary_health 50
+set g_balance_fireball_secondary_damagetime 5
+set g_balance_fireball_secondary_force 100
set g_balance_fireball_secondary_laserburntime 0.5
set g_balance_fireball_secondary_laserdamage 30
set g_balance_fireball_secondary_laseredgedamage 20
-set g_balance_fireball_secondary_laserradius 256
-set g_balance_fireball_secondary_lifetime 15
-set g_balance_fireball_secondary_radius 200
-set g_balance_fireball_secondary_refire 0
-set g_balance_fireball_secondary_refire2 4
-set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_laserradius 110
+set g_balance_fireball_secondary_lifetime 7
+set g_balance_fireball_secondary_refire 2
+set g_balance_fireball_secondary_speed 900
+set g_balance_fireball_secondary_speed_up 100
+set g_balance_fireball_secondary_speed_z 0
set g_balance_fireball_secondary_spread 0
// }}}
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_grenadelauncher_secondary_health 10
set g_balance_grenadelauncher_secondary_damageforcescale 4
+set g_balance_grenadelauncher_secondary_bouncefactor 0.5
+set g_balance_grenadelauncher_secondary_bouncestop 0.075
// }}}
// {{{ electro
set g_balance_electro_lightning 0
set g_balance_tuba_force 40
// }}}
// {{{ fireball
-set g_balance_fireball_primary_ammo 5
-set g_balance_fireball_primary_animtime 0.3
-set g_balance_fireball_primary_damage 100
+set g_balance_fireball_primary_ammo 40
+set g_balance_fireball_primary_animtime 0.15
+set g_balance_fireball_primary_bfgdamage 100
+set g_balance_fireball_primary_bfgforce 0
+set g_balance_fireball_primary_bfgradius 1000
+set g_balance_fireball_primary_damage 200
set g_balance_fireball_primary_damageforcescale 4
-set g_balance_fireball_primary_damagetime 5
-set g_balance_fireball_primary_force 100
+set g_balance_fireball_primary_edgedamage 0
+set g_balance_fireball_primary_force 700
+set g_balance_fireball_primary_health 50
set g_balance_fireball_primary_laserburntime 0.5
set g_balance_fireball_primary_laserdamage 80
set g_balance_fireball_primary_laseredgedamage 20
-set g_balance_fireball_primary_laserradius 128
-set g_balance_fireball_primary_lifetime 7
-set g_balance_fireball_primary_refire 1.5
-set g_balance_fireball_primary_speed 700
-set g_balance_fireball_primary_speed_up 100
-set g_balance_fireball_primary_speed_z 0
+set g_balance_fireball_primary_laserradius 256
+set g_balance_fireball_primary_lifetime 15
+set g_balance_fireball_primary_radius 200
+set g_balance_fireball_primary_refire 5
+set g_balance_fireball_primary_refire2 0
+set g_balance_fireball_primary_speed 650
set g_balance_fireball_primary_spread 0
-set g_balance_fireball_secondary_ammo 15
-set g_balance_fireball_secondary_animtime 0.15
-set g_balance_fireball_secondary_bfgdamage 200
-set g_balance_fireball_secondary_bfgforce 0
-set g_balance_fireball_secondary_bfgradius 1500
-set g_balance_fireball_secondary_damage 150
+set g_balance_fireball_secondary_ammo 5
+set g_balance_fireball_secondary_animtime 0.3
+set g_balance_fireball_secondary_damage 40
set g_balance_fireball_secondary_damageforcescale 4
-set g_balance_fireball_secondary_edgedamage 0
-set g_balance_fireball_secondary_force 700
-set g_balance_fireball_secondary_health 50
+set g_balance_fireball_secondary_damagetime 5
+set g_balance_fireball_secondary_force 100
set g_balance_fireball_secondary_laserburntime 0.5
-set g_balance_fireball_secondary_laserdamage 80
+set g_balance_fireball_secondary_laserdamage 50
set g_balance_fireball_secondary_laseredgedamage 20
-set g_balance_fireball_secondary_laserradius 256
-set g_balance_fireball_secondary_lifetime 15
-set g_balance_fireball_secondary_radius 200
+set g_balance_fireball_secondary_laserradius 110
+set g_balance_fireball_secondary_lifetime 7
set g_balance_fireball_secondary_refire 2
-set g_balance_fireball_secondary_refire2 0
-set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_speed 900
+set g_balance_fireball_secondary_speed_up 100
+set g_balance_fireball_secondary_speed_z 0
set g_balance_fireball_secondary_spread 0
// }}}
+++ /dev/null
-// {{{ weapon replacement
-// NOTE: this only replaces weapons on the map
-// use g_start_weapon_* to also replace the on-startup weapons!
-// example: g_weaponreplace_nex "nex minstanex", then Nexes become MinstaNexes 50% of the times
-// set the cvars to "0" to totally disable a weapon
-set g_weaponreplace_laser ""
-set g_weaponreplace_shotgun "uzi"
-set g_weaponreplace_uzi "shotgun"
-set g_weaponreplace_grenadelauncher ""
-set g_weaponreplace_electro ""
-set g_weaponreplace_crylink ""
-set g_weaponreplace_nex ""
-set g_weaponreplace_hagar ""
-set g_weaponreplace_rocketlauncher ""
-set g_weaponreplace_porto ""
-set g_weaponreplace_minstanex ""
-set g_weaponreplace_hook 0
-set g_weaponreplace_hlac 0
-set g_weaponreplace_campingrifle 0
-set g_weaponreplace_tuba ""
-set g_weaponreplace_fireball 0
-set sv_q3acompat_machineshotgunswap 0
-// }}}
-
-// {{{ starting gear
-set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_shotgun -2 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_uzi 1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hlac 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_start_weapon_campingrifle 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_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_fireball -1 "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 0
-set g_start_ammo_nails 100
-set g_start_ammo_rockets 0
-set g_start_ammo_cells 0
-set g_start_ammo_fuel 0
-set g_warmup_start_health 200 "starting values when being in warmup-stage"
-set g_warmup_start_armor 100 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
-set g_lms_start_health 200
-set g_lms_start_armor 100
-set g_lms_start_ammo_shells 30
-set g_lms_start_ammo_nails 210
-set g_lms_start_ammo_rockets 150
-set g_lms_start_ammo_cells 150
-set g_lms_start_ammo_fuel 0
-set g_balance_nix_roundtime 25
-set g_balance_nix_incrtime 1.6
-set g_balance_nix_ammo_shells 15
-set g_balance_nix_ammo_nails 45
-set g_balance_nix_ammo_rockets 15
-set g_balance_nix_ammo_cells 15
-set g_balance_nix_ammo_fuel 0
-set g_balance_nix_ammoincr_shells 2
-set g_balance_nix_ammoincr_nails 6
-set g_balance_nix_ammoincr_rockets 2
-set g_balance_nix_ammoincr_cells 2
-set g_balance_nix_ammoincr_fuel 2
-// }}}
-
-// {{{ pickup items
-set g_pickup_shells 10
-set g_pickup_shells_max 30
-set g_pickup_nails 30
-set g_pickup_nails_max 210
-set g_pickup_rockets 20
-set g_pickup_rockets_max 150
-set g_pickup_cells 50
-set g_pickup_cells_max 150
-set g_pickup_fuel 25
-set g_pickup_fuel_jetpack 50
-set g_pickup_fuel_max 999
-set g_pickup_armorsmall 5
-set g_pickup_armorsmall_max 200
-set g_pickup_armormedium 25
-set g_pickup_armormedium_max 200
-set g_pickup_armorbig 50
-set g_pickup_armorbig_max 200
-set g_pickup_armorlarge 100
-set g_pickup_armorlarge_max 200
-set g_pickup_healthsmall 5
-set g_pickup_healthsmall_max 200
-set g_pickup_healthmedium 25
-set g_pickup_healthmedium_max 100
-set g_pickup_healthlarge 50
-set g_pickup_healthlarge_max 100
-set g_pickup_healthmega 100
-set g_pickup_healthmega_max 200
-set g_pickup_respawntime_short 30
-set g_pickup_respawntime_medium 30
-set g_pickup_respawntime_long 30
-set g_pickup_respawntime_powerup 90
-set g_pickup_respawntime_weapon 5
-set g_pickup_respawntime_ammo 30
-set g_pickup_respawntimejitter_short 0
-set g_pickup_respawntimejitter_medium 0
-set g_pickup_respawntimejitter_long 0
-set g_pickup_respawntimejitter_powerup 15
-set g_pickup_respawntimejitter_weapon 0
-set g_pickup_respawntimejitter_ammo 0
-// }}}
-
-// {{{ regen/rot
-set g_balance_health_regen 0
-set g_balance_health_regenlinear 0
-set g_balance_pause_health_regen 0
-set g_balance_pause_health_regen_spawn 0
-set g_balance_health_rot 0
-set g_balance_health_rotlinear 1
-set g_balance_pause_health_rot 1
-set g_balance_pause_health_rot_spawn 0
-set g_balance_health_regenstable 100
-set g_balance_health_rotstable 100
-set g_balance_health_limit 999
-set g_balance_armor_regen 0
-set g_balance_armor_regenlinear 0
-set g_balance_armor_rot 0
-set g_balance_armor_rotlinear 1
-set g_balance_pause_armor_rot 1
-set g_balance_pause_armor_rot_spawn 0
-set g_balance_armor_regenstable 100
-set g_balance_armor_rotstable 100
-set g_balance_armor_limit 999
-set g_balance_armor_blockpercent 0.66
-
-set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)"
-set g_balance_fuel_regenlinear 0
-set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
-set g_balance_fuel_rot 0.05
-set g_balance_fuel_rotlinear 0
-set g_balance_pause_fuel_rot 5
-set g_balance_pause_fuel_rot_spawn 10
-set g_balance_fuel_regenstable 50
-set g_balance_fuel_rotstable 100
-set g_balance_fuel_limit 999
-// }}}
-
-// {{{ misc
-set g_balance_selfdamagepercent 0.75
-set g_balance_weaponswitchdelay 0.1
-set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
-set g_weaponratefactor 1 "weapon fire rate multiplier"
-set g_weapondamagefactor 1 "weapon damage multiplier"
-set g_weaponforcefactor 1 "weapon force multiplier"
-set g_weaponspreadfactor 1 "weapon spread multiplier"
-set g_balance_firetransfer_time 0.9
-set g_balance_firetransfer_damage 0.8
-set g_throughfloor_damage 0.5
-set g_throughfloor_force 0.7
-set g_projectiles_newton_style 0
-// possible values:
-// 0: absolute velocity projectiles (like Quake)
-// 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
-// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard)
-// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets)
-// 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
-set g_projectiles_newton_style_2_minfactor 0.7
-set g_projectiles_newton_style_2_maxfactor 5
-set g_projectiles_spread_style 4
-// possible values:
-// 0: forward + solid sphere (like Quake) - varies velocity
-// 1: forward + flattened solid sphere
-// 2: forward + solid circle
-// 3: forward + normal distribution 3D - varies velocity
-// 4: forward + normal distribution on a plane
-// 5: forward + circle with 1-r falloff
-// 6: forward + circle with 1-r^2 falloff
-// 7: forward + circle with (1-r)(2-r) falloff
-set g_balance_falldamage_deadminspeed 150
-set g_balance_falldamage_minspeed 675
-set g_balance_falldamage_factor 0.25
-set g_balance_falldamage_maxdamage 10
-// }}}
-
-// {{{ powerups
-set g_balance_powerup_invincible_takedamage 0.25
-set g_balance_powerup_invincible_time 30
-set g_balance_powerup_strength_damage 4
-set g_balance_powerup_strength_force 4
-set g_balance_powerup_strength_time 30
-set g_balance_powerup_strength_selfdamage 2
-set g_balance_powerup_strength_selfforce 2
-// }}}
-
-// {{{ jetpack/hook
-set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack"
-set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction"
-set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)"
-set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction"
-set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction"
-set g_jetpack_fuel 8 "fuel per second for jetpack"
-set g_jetpack_attenuation 2 "jetpack sound attenuation"
-
-set g_grappling_hook_tarzan 2 // 2: can also pull players
-set g_balance_grapplehook_speed_fly 1800
-set g_balance_grapplehook_speed_pull 2000
-set g_balance_grapplehook_force_rubber 2000
-set g_balance_grapplehook_force_rubber_overstretch 1000
-set g_balance_grapplehook_length_min 50
-set g_balance_grapplehook_stretch 50
-set g_balance_grapplehook_airfriction 0.2
-set g_balance_grapplehook_health 130
-// }}}
-
-// {{{ weapon properties
-// {{{ laser
-set g_balance_laser_primary_damage 22
-set g_balance_laser_primary_edgedamage 0
-set g_balance_laser_primary_force 200
-set g_balance_laser_primary_radius 52
-set g_balance_laser_primary_speed 0
-set g_balance_laser_primary_spread 0
-set g_balance_laser_primary_refire 0.1
-set g_balance_laser_primary_animtime 0.1
-set g_balance_laser_primary_lifetime 0
-set g_balance_laser_primary_shotangle 0
-set g_balance_laser_primary_delay 0
-set g_balance_laser_gauntlet 1
-set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
-set g_balance_laser_secondary_damage 30
-set g_balance_laser_secondary_edgedamage 0
-set g_balance_laser_secondary_force 100
-set g_balance_laser_secondary_radius 3
-set g_balance_laser_secondary_speed 1500
-set g_balance_laser_secondary_spread 0
-set g_balance_laser_secondary_refire 0
-set g_balance_laser_secondary_animtime 0.15
-set g_balance_laser_secondary_lifetime 0.066
-set g_balance_laser_secondary_shotangle 0
-set g_balance_laser_secondary_delay 0
-// }}}
-// {{{ shotgun
-set g_balance_shotgun_primary_bullets 36
-set g_balance_shotgun_primary_damage 3
-set g_balance_shotgun_primary_force 10
-set g_balance_shotgun_primary_spread 0.18
-set g_balance_shotgun_primary_refire 1
-set g_balance_shotgun_primary_animtime 0.7
-set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_speed 12000
-set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
-set g_balance_shotgun_secondary 0
-set g_balance_shotgun_secondary_bullets 22
-set g_balance_shotgun_secondary_damage 2
-set g_balance_shotgun_secondary_force 12
-set g_balance_shotgun_secondary_spread 0.25
-set g_balance_shotgun_secondary_refire 1.5
-set g_balance_shotgun_secondary_animtime 0.2
-set g_balance_shotgun_secondary_ammo 0.5
-set g_balance_shotgun_secondary_speed 12000
-set g_balance_shotgun_secondary_bulletconstant 75 // 3.8qu
-// }}}
-// {{{ uzi
-set g_balance_uzi_first 0
-set g_balance_uzi_first_damage 10
-set g_balance_uzi_first_force 50
-set g_balance_uzi_first_spread 0.007
-set g_balance_uzi_first_refire 0.15
-set g_balance_uzi_first_ammo 1
-set g_balance_uzi_sustained_damage 7
-set g_balance_uzi_sustained_force 30
-set g_balance_uzi_sustained_spread 0.02
-set g_balance_uzi_sustained_refire 0.1
-set g_balance_uzi_sustained_ammo 1
-set g_balance_uzi_speed 18000
-set g_balance_uzi_bulletconstant 115 // 13.1qu
-// }}}
-// {{{ mortar
-set g_balance_grenadelauncher_primary2secondary 1
-set g_balance_grenadelauncher_primary_damage 60
-set g_balance_grenadelauncher_primary_edgedamage 10
-set g_balance_grenadelauncher_primary_force 250
-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_z 0
-set g_balance_grenadelauncher_primary_spread 0
-set g_balance_grenadelauncher_primary_lifetime 5
-set g_balance_grenadelauncher_primary_refire 0.7
-set g_balance_grenadelauncher_primary_animtime 0.3
-set g_balance_grenadelauncher_primary_ammo 2
-set g_balance_grenadelauncher_secondary_damage 65
-set g_balance_grenadelauncher_secondary_edgedamage 10
-set g_balance_grenadelauncher_secondary_force 300
-set g_balance_grenadelauncher_secondary_radius 200
-set g_balance_grenadelauncher_secondary_speed 800
-set g_balance_grenadelauncher_secondary_speed_up 0
-set g_balance_grenadelauncher_secondary_speed_z 200
-set g_balance_grenadelauncher_secondary_spread 0
-set g_balance_grenadelauncher_secondary_lifetime 2
-set g_balance_grenadelauncher_secondary_refire 0.8
-set g_balance_grenadelauncher_secondary_animtime 0.5
-set g_balance_grenadelauncher_secondary_ammo 2
-set g_balance_grenadelauncher_secondary_health 0
-set g_balance_grenadelauncher_secondary_damageforcescale 0
-// }}}
-// {{{ electro
-set g_balance_electro_lightning 1
-set g_balance_electro_primary_damage 6
-set g_balance_electro_primary_edgedamage 0
-set g_balance_electro_primary_force 60 // todo: probaby needs movement nerfing code when hit?
-set g_balance_electro_primary_radius 850
-set g_balance_electro_primary_comboradius 0
-set g_balance_electro_primary_speed 0
-set g_balance_electro_primary_spread 0
-set g_balance_electro_primary_lifetime 0
-set g_balance_electro_primary_refire 0.066
-set g_balance_electro_primary_animtime 0.066
-set g_balance_electro_primary_ammo 0.66
-set g_balance_electro_secondary_damage 45
-set g_balance_electro_secondary_spread 0.10
-set g_balance_electro_secondary_edgedamage 10
-set g_balance_electro_secondary_force 100
-set g_balance_electro_secondary_radius 150
-set g_balance_electro_secondary_speed 900
-set g_balance_electro_secondary_speed_up 200
-set g_balance_electro_secondary_speed_z 0
-set g_balance_electro_secondary_spread 0.05
-set g_balance_electro_secondary_lifetime 2.5
-set g_balance_electro_secondary_refire 0.1
-set g_balance_electro_secondary_refire2 2
-set g_balance_electro_secondary_animtime 0.2
-set g_balance_electro_secondary_ammo 2
-set g_balance_electro_secondary_health 5
-set g_balance_electro_secondary_damageforcescale 4
-set g_balance_electro_secondary_count 3
-set g_balance_electro_combo_damage 50
-set g_balance_electro_combo_edgedamage 0
-set g_balance_electro_combo_force 100
-set g_balance_electro_combo_radius 250
-set g_balance_electro_combo_comboradius 0
-set g_balance_electro_combo_speed 2000
-// }}}
-// {{{ crylink
-set g_balance_crylink_primary_damage 18
-set g_balance_crylink_primary_edgedamage 18
-set g_balance_crylink_primary_force 40
-set g_balance_crylink_primary_radius 110
-set g_balance_crylink_primary_speed 1800
-set g_balance_crylink_primary_spread 0.01
-set g_balance_crylink_primary_shots 4
-set g_balance_crylink_primary_bounces 0
-set g_balance_crylink_primary_refire 0.4
-set g_balance_crylink_primary_animtime 0.4
-set g_balance_crylink_primary_ammo 2
-set g_balance_crylink_primary_bouncedamagefactor 0.5
-
-set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
-set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_star_lifetime 0.1 // range: 700 full, fades to 2450
-set g_balance_crylink_primary_star_fadetime 0.25
-set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2450
-set g_balance_crylink_primary_other_fadetime 0.25
-
-set g_balance_crylink_secondary 0
-set g_balance_crylink_secondary_damage 8
-set g_balance_crylink_secondary_edgedamage 8
-set g_balance_crylink_secondary_force -40
-set g_balance_crylink_secondary_radius 10
-set g_balance_crylink_secondary_speed 4000
-set g_balance_crylink_secondary_spread 0.01
-set g_balance_crylink_secondary_shots 3
-set g_balance_crylink_secondary_bounces 0
-set g_balance_crylink_secondary_refire 0.1
-set g_balance_crylink_secondary_animtime 0.1
-set g_balance_crylink_secondary_ammo 1
-set g_balance_crylink_secondary_bouncedamagefactor 0.5
-
-set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
-set g_balance_crylink_secondary_middle_fadetime 5
-set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 70000
-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 0.8
-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
-// }}}
-// {{{ minstanex
-set g_balance_minstanex_refire 1
-set g_balance_minstanex_animtime 1
-set g_balance_minstanex_ammo 10
-// }}}
-// {{{ hagar
-set g_balance_hagar_primary_damage 12
-set g_balance_hagar_primary_edgedamage 5
-set g_balance_hagar_primary_force 70
-set g_balance_hagar_primary_radius 50
-set g_balance_hagar_primary_spread 0
-set g_balance_hagar_primary_speed 1800
-set g_balance_hagar_primary_lifetime 5
-set g_balance_hagar_primary_refire 0.1
-set g_balance_hagar_primary_ammo 1
-set g_balance_hagar_secondary 0
-set g_balance_hagar_secondary_damage 11
-set g_balance_hagar_secondary_edgedamage 4
-set g_balance_hagar_secondary_force 60
-set g_balance_hagar_secondary_radius 70
-set g_balance_hagar_secondary_spread 0.05
-set g_balance_hagar_secondary_speed 1800
-set g_balance_hagar_secondary_lifetime_min 5
-set g_balance_hagar_secondary_lifetime_rand 0
-set g_balance_hagar_secondary_refire 0.1
-set g_balance_hagar_secondary_ammo 1
-// }}}
-// {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 90
-set g_balance_rocketlauncher_edgedamage 30
-set g_balance_rocketlauncher_force 350
-set g_balance_rocketlauncher_radius 110
-set g_balance_rocketlauncher_speed 1000
-set g_balance_rocketlauncher_speedaccel 0
-set g_balance_rocketlauncher_speedstart 1000
-set g_balance_rocketlauncher_lifetime 10
-set g_balance_rocketlauncher_refire 0.9
-set g_balance_rocketlauncher_animtime 0.7
-set g_balance_rocketlauncher_ammo 3
-set g_balance_rocketlauncher_health 0
-set g_balance_rocketlauncher_damageforcescale 0
-set g_balance_rocketlauncher_detonatedelay 9999 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 0 // max degrees per second
-set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
-set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
-set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
-set g_balance_rocketlauncher_guidestop 1 // stop guiding when firing again
-set g_balance_rocketlauncher_laserguided_speed 1000 //650
-set g_balance_rocketlauncher_laserguided_speedaccel 0
-set g_balance_rocketlauncher_laserguided_speedstart 1000
-set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
-set g_balance_rocketlauncher_laserguided_allow_steal 1
-// }}}
-// {{{ porto
-set g_balance_porto_primary_refire 1.5
-set g_balance_porto_primary_animtime 0.3
-set g_balance_porto_primary_speed 5000
-set g_balance_porto_primary_lifetime 30
-set g_balance_portal_health 200 // these get recharged whenever the portal is used
-set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
-// }}}
-// {{{ hook
-set g_balance_hook_primary_fuel 2 // hook monkeys set 0
-set g_balance_hook_primary_refire 0 // hook monkeys set 0
-set g_balance_hook_primary_animtime 0.3 // good shoot anim
-set g_balance_hook_primary_hooked_time_max 0 // infinite
-set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free
-set g_balance_hook_primary_hooked_fuel 3 // fuel per second hooked
-set g_balance_hook_secondary_damage 25 // not much
-set g_balance_hook_secondary_edgedamage 5 // not much
-set g_balance_hook_secondary_radius 500 // LOTS
-set g_balance_hook_secondary_force -2000 // LOTS
-set g_balance_hook_secondary_ammo 50 // a whole pack
-set g_balance_hook_secondary_lifetime 10 // infinite
-set g_balance_hook_secondary_speed 0 // not much throwing
-set g_balance_hook_secondary_gravity 5 // fast falling
-set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
-set g_balance_hook_secondary_animtime 0.3 // good shoot anim
-set g_balance_hook_secondary_power 3 // effect behaves like a square function
-set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds
-// }}}
-// {{{ hlac
-set g_balance_hlac_primary_spread_min 0.01
-set g_balance_hlac_primary_spread_max 0.03
-set g_balance_hlac_primary_spread_add 0.002
-set g_balance_hlac_primary_spread_crouchmod 0.5
-
-set g_balance_hlac_primary_damage 6
-set g_balance_hlac_primary_edgedamage 0
-set g_balance_hlac_primary_force 60 // todo: probably needs movement nerfing code when hit
-set g_balance_hlac_primary_radius 850
-set g_balance_hlac_primary_speed 0
-set g_balance_hlac_primary_lifetime 0
-
-set g_balance_hlac_primary_refire 0.066
-set g_balance_hlac_primary_animtime 0.066
-set g_balance_hlac_primary_ammo 0.066
-
-set g_balance_hlac_secondary 0
-set g_balance_hlac_secondary_spread 0.06
-set g_balance_hlac_secondary_spread_crouchmod 0.5
-
-set g_balance_hlac_secondary_damage 11
-set g_balance_hlac_secondary_edgedamage 10
-set g_balance_hlac_secondary_force 60
-set g_balance_hlac_secondary_radius 70
-set g_balance_hlac_secondary_speed 20000
-set g_balance_hlac_secondary_lifetime 5
-
-set g_balance_hlac_secondary_refire 0.6
-set g_balance_hlac_secondary_animtime 0.6
-set g_balance_hlac_secondary_ammo 10
-set g_balance_hlac_secondary_shots 5
-// }}}
-// {{{ campingrifle
-set g_balance_campingrifle_magazinecapacity 0
-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.85 // 0.35 - 0.1 + 0.35 - 0.1 + 0.35 = three secondaries
-set g_balance_campingrifle_tracer 1
-set g_balance_campingrifle_primary_damage 50
-set g_balance_campingrifle_primary_headshotaddeddamage 80
-set g_balance_campingrifle_primary_spread 0
-set g_balance_campingrifle_primary_force 0
-set g_balance_campingrifle_primary_speed 35000
-set g_balance_campingrifle_primary_lifetime 5
-set g_balance_campingrifle_primary_refire 0.7
-set g_balance_campingrifle_primary_animtime 0.7
-set g_balance_campingrifle_primary_ammo 10
-set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
-set g_balance_campingrifle_primary_burstcost 0.35 // require same cooldown as secondary, note it's smaller than primary refire time
-set g_balance_campingrifle_secondary_damage 15
-set g_balance_campingrifle_secondary_headshotaddeddamage 25
-set g_balance_campingrifle_secondary_spread 0.02
-set g_balance_campingrifle_secondary_force 0
-set g_balance_campingrifle_secondary_speed 20000
-set g_balance_campingrifle_secondary_lifetime 5
-set g_balance_campingrifle_secondary_refire 0.1
-set g_balance_campingrifle_secondary_animtime 0.1
-set g_balance_campingrifle_secondary_ammo 4
-set g_balance_campingrifle_secondary_bulletconstant 130 // 18.3qu
-set g_balance_campingrifle_secondary_burstcost 0.35
-// }}}
-// {{{ tuba
-set g_balance_tuba_refire 0.05
-set g_balance_tuba_animtime 0.05
-set g_balance_tuba_attenuation 0.5
-set g_balance_tuba_volume 1
-set g_balance_tuba_fadetime 0.25
-set g_balance_tuba_damage 5
-set g_balance_tuba_edgedamage 0
-set g_balance_tuba_radius 200
-set g_balance_tuba_force 40
-// }}}
-// {{{ fireball
-set g_balance_fireball_primary_ammo 5
-set g_balance_fireball_primary_animtime 0.3
-set g_balance_fireball_primary_damage 40
-set g_balance_fireball_primary_damageforcescale 4
-set g_balance_fireball_primary_damagetime 5
-set g_balance_fireball_primary_force 100
-set g_balance_fireball_primary_laserburntime 0.5
-set g_balance_fireball_primary_laserdamage 30
-set g_balance_fireball_primary_laseredgedamage 20
-set g_balance_fireball_primary_laserradius 110
-set g_balance_fireball_primary_lifetime 7
-set g_balance_fireball_primary_refire 2
-set g_balance_fireball_primary_speed 900
-set g_balance_fireball_primary_spread 0
-set g_balance_fireball_primary_speed_up 100
-set g_balance_fireball_primary_speed_z 0
-set g_balance_fireball_secondary_ammo 25
-set g_balance_fireball_secondary_animtime 0.15
-set g_balance_fireball_secondary_bfgdamage 100
-set g_balance_fireball_secondary_bfgforce 500
-set g_balance_fireball_secondary_bfgradius 750
-set g_balance_fireball_secondary_damage 150
-set g_balance_fireball_secondary_damageforcescale 4
-set g_balance_fireball_secondary_edgedamage 0
-set g_balance_fireball_secondary_force 700
-set g_balance_fireball_secondary_health 50
-set g_balance_fireball_secondary_laserburntime 0.5
-set g_balance_fireball_secondary_laserdamage 30
-set g_balance_fireball_secondary_laseredgedamage 20
-set g_balance_fireball_secondary_laserradius 256
-set g_balance_fireball_secondary_lifetime 15
-set g_balance_fireball_secondary_radius 200
-set g_balance_fireball_secondary_refire 0
-set g_balance_fireball_secondary_refire2 4
-set g_balance_fireball_secondary_speed 650
-set g_balance_fireball_secondary_spread 0
-// }}}
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_grenadelauncher_secondary_health 70
set g_balance_grenadelauncher_secondary_damageforcescale 4
+set g_balance_grenadelauncher_secondary_bouncefactor 0.5
+set g_balance_grenadelauncher_secondary_bouncestop 0.075
// }}}
// {{{ electro
set g_balance_electro_lightning 0
set g_balance_tuba_force 40
// }}}
// {{{ fireball
-set g_balance_fireball_primary_ammo 5
-set g_balance_fireball_primary_animtime 0.3
-set g_balance_fireball_primary_damage 40
+set g_balance_fireball_primary_ammo 40
+set g_balance_fireball_primary_animtime 0.15
+set g_balance_fireball_primary_bfgdamage 100
+set g_balance_fireball_primary_bfgforce 0
+set g_balance_fireball_primary_bfgradius 1000
+set g_balance_fireball_primary_damage 200
set g_balance_fireball_primary_damageforcescale 4
-set g_balance_fireball_primary_damagetime 5
-set g_balance_fireball_primary_force 100
+set g_balance_fireball_primary_edgedamage 0
+set g_balance_fireball_primary_force 700
+set g_balance_fireball_primary_health 50
set g_balance_fireball_primary_laserburntime 0.5
-set g_balance_fireball_primary_laserdamage 30
+set g_balance_fireball_primary_laserdamage 80
set g_balance_fireball_primary_laseredgedamage 20
-set g_balance_fireball_primary_laserradius 110
-set g_balance_fireball_primary_lifetime 7
-set g_balance_fireball_primary_refire 2
-set g_balance_fireball_primary_speed 900
-set g_balance_fireball_primary_speed_up 100
-set g_balance_fireball_primary_speed_z 0
+set g_balance_fireball_primary_laserradius 256
+set g_balance_fireball_primary_lifetime 15
+set g_balance_fireball_primary_radius 200
+set g_balance_fireball_primary_refire 5
+set g_balance_fireball_primary_refire2 0
+set g_balance_fireball_primary_speed 650
set g_balance_fireball_primary_spread 0
-set g_balance_fireball_secondary_ammo 25
-set g_balance_fireball_secondary_animtime 0.15
-set g_balance_fireball_secondary_bfgdamage 100
-set g_balance_fireball_secondary_bfgforce 500
-set g_balance_fireball_secondary_bfgradius 750
-set g_balance_fireball_secondary_damage 150
+set g_balance_fireball_secondary_ammo 5
+set g_balance_fireball_secondary_animtime 0.3
+set g_balance_fireball_secondary_damage 40
set g_balance_fireball_secondary_damageforcescale 4
-set g_balance_fireball_secondary_edgedamage 0
-set g_balance_fireball_secondary_force 700
-set g_balance_fireball_secondary_health 50
+set g_balance_fireball_secondary_damagetime 5
+set g_balance_fireball_secondary_force 100
set g_balance_fireball_secondary_laserburntime 0.5
-set g_balance_fireball_secondary_laserdamage 30
+set g_balance_fireball_secondary_laserdamage 50
set g_balance_fireball_secondary_laseredgedamage 20
-set g_balance_fireball_secondary_laserradius 256
-set g_balance_fireball_secondary_lifetime 15
-set g_balance_fireball_secondary_radius 200
-set g_balance_fireball_secondary_refire 0
-set g_balance_fireball_secondary_refire2 4
-set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_laserradius 110
+set g_balance_fireball_secondary_lifetime 7
+set g_balance_fireball_secondary_refire 2
+set g_balance_fireball_secondary_speed 900
+set g_balance_fireball_secondary_speed_up 100
+set g_balance_fireball_secondary_speed_z 0
set g_balance_fireball_secondary_spread 0
// }}}
--- /dev/null
+// {{{ weapon replacement
+// NOTE: this only replaces weapons on the map
+// use g_start_weapon_* to also replace the on-startup weapons!
+// example: g_weaponreplace_nex "nex minstanex", then Nexes become MinstaNexes 50% of the times
+// set the cvars to "0" to totally disable a weapon
+set g_weaponreplace_laser ""
+set g_weaponreplace_shotgun "uzi"
+set g_weaponreplace_uzi "shotgun"
+set g_weaponreplace_grenadelauncher ""
+set g_weaponreplace_electro ""
+set g_weaponreplace_crylink ""
+set g_weaponreplace_nex ""
+set g_weaponreplace_hagar ""
+set g_weaponreplace_rocketlauncher ""
+set g_weaponreplace_porto ""
+set g_weaponreplace_minstanex ""
+set g_weaponreplace_hook 0
+set g_weaponreplace_hlac 0
+set g_weaponreplace_campingrifle 0
+set g_weaponreplace_tuba ""
+set g_weaponreplace_fireball 0
+set sv_q3acompat_machineshotgunswap 0
+// }}}
+
+// {{{ starting gear
+set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_shotgun -2 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_uzi 1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hlac 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_start_weapon_campingrifle 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_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_fireball -1 "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 0
+set g_start_ammo_nails 100
+set g_start_ammo_rockets 0
+set g_start_ammo_cells 0
+set g_start_ammo_fuel 0
+set g_warmup_start_health 200 "starting values when being in warmup-stage"
+set g_warmup_start_armor 100 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
+set g_lms_start_health 200
+set g_lms_start_armor 100
+set g_lms_start_ammo_shells 30
+set g_lms_start_ammo_nails 210
+set g_lms_start_ammo_rockets 150
+set g_lms_start_ammo_cells 150
+set g_lms_start_ammo_fuel 0
+set g_balance_nix_roundtime 25
+set g_balance_nix_incrtime 1.6
+set g_balance_nix_ammo_shells 15
+set g_balance_nix_ammo_nails 45
+set g_balance_nix_ammo_rockets 15
+set g_balance_nix_ammo_cells 15
+set g_balance_nix_ammo_fuel 0
+set g_balance_nix_ammoincr_shells 2
+set g_balance_nix_ammoincr_nails 6
+set g_balance_nix_ammoincr_rockets 2
+set g_balance_nix_ammoincr_cells 2
+set g_balance_nix_ammoincr_fuel 2
+// }}}
+
+// {{{ pickup items
+set g_pickup_shells 10
+set g_pickup_shells_max 30
+set g_pickup_nails 30
+set g_pickup_nails_max 210
+set g_pickup_rockets 20
+set g_pickup_rockets_max 150
+set g_pickup_cells 50
+set g_pickup_cells_max 150
+set g_pickup_fuel 25
+set g_pickup_fuel_jetpack 50
+set g_pickup_fuel_max 999
+set g_pickup_armorsmall 5
+set g_pickup_armorsmall_max 200
+set g_pickup_armormedium 25
+set g_pickup_armormedium_max 200
+set g_pickup_armorbig 50
+set g_pickup_armorbig_max 200
+set g_pickup_armorlarge 100
+set g_pickup_armorlarge_max 200
+set g_pickup_healthsmall 5
+set g_pickup_healthsmall_max 200
+set g_pickup_healthmedium 25
+set g_pickup_healthmedium_max 100
+set g_pickup_healthlarge 50
+set g_pickup_healthlarge_max 100
+set g_pickup_healthmega 100
+set g_pickup_healthmega_max 200
+set g_pickup_respawntime_short 30
+set g_pickup_respawntime_medium 30
+set g_pickup_respawntime_long 30
+set g_pickup_respawntime_powerup 90
+set g_pickup_respawntime_weapon 5
+set g_pickup_respawntime_ammo 30
+set g_pickup_respawntimejitter_short 0
+set g_pickup_respawntimejitter_medium 0
+set g_pickup_respawntimejitter_long 0
+set g_pickup_respawntimejitter_powerup 15
+set g_pickup_respawntimejitter_weapon 0
+set g_pickup_respawntimejitter_ammo 0
+// }}}
+
+// {{{ regen/rot
+set g_balance_health_regen 0
+set g_balance_health_regenlinear 0
+set g_balance_pause_health_regen 0
+set g_balance_pause_health_regen_spawn 0
+set g_balance_health_rot 0
+set g_balance_health_rotlinear 1
+set g_balance_pause_health_rot 1
+set g_balance_pause_health_rot_spawn 0
+set g_balance_health_regenstable 100
+set g_balance_health_rotstable 100
+set g_balance_health_limit 999
+set g_balance_armor_regen 0
+set g_balance_armor_regenlinear 0
+set g_balance_armor_rot 0
+set g_balance_armor_rotlinear 1
+set g_balance_pause_armor_rot 1
+set g_balance_pause_armor_rot_spawn 0
+set g_balance_armor_regenstable 100
+set g_balance_armor_rotstable 100
+set g_balance_armor_limit 999
+set g_balance_armor_blockpercent 0.66
+
+set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)"
+set g_balance_fuel_regenlinear 0
+set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
+set g_balance_fuel_rot 0.05
+set g_balance_fuel_rotlinear 0
+set g_balance_pause_fuel_rot 5
+set g_balance_pause_fuel_rot_spawn 10
+set g_balance_fuel_regenstable 50
+set g_balance_fuel_rotstable 100
+set g_balance_fuel_limit 999
+// }}}
+
+// {{{ misc
+set g_balance_selfdamagepercent 0.75
+set g_balance_weaponswitchdelay 0.05
+set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
+set g_weaponratefactor 1 "weapon fire rate multiplier"
+set g_weapondamagefactor 1 "weapon damage multiplier"
+set g_weaponforcefactor 1 "weapon force multiplier"
+set g_weaponspreadfactor 1 "weapon spread multiplier"
+set g_balance_firetransfer_time 0.9
+set g_balance_firetransfer_damage 0.8
+set g_throughfloor_damage 0.5
+set g_throughfloor_force 0.7
+set g_projectiles_newton_style 0
+// possible values:
+// 0: absolute velocity projectiles (like Quake)
+// 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
+// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard)
+// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets)
+// 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
+set g_projectiles_newton_style_2_minfactor 0.7
+set g_projectiles_newton_style_2_maxfactor 5
+set g_projectiles_spread_style 4
+// possible values:
+// 0: forward + solid sphere (like Quake) - varies velocity
+// 1: forward + flattened solid sphere
+// 2: forward + solid circle
+// 3: forward + normal distribution 3D - varies velocity
+// 4: forward + normal distribution on a plane
+// 5: forward + circle with 1-r falloff
+// 6: forward + circle with 1-r^2 falloff
+// 7: forward + circle with (1-r)(2-r) falloff
+set g_balance_falldamage_deadminspeed 150
+set g_balance_falldamage_minspeed 675
+set g_balance_falldamage_factor 0.25
+set g_balance_falldamage_maxdamage 10
+// }}}
+
+// {{{ powerups
+set g_balance_powerup_invincible_takedamage 0.25
+set g_balance_powerup_invincible_time 30
+set g_balance_powerup_strength_damage 4
+set g_balance_powerup_strength_force 4
+set g_balance_powerup_strength_time 30
+set g_balance_powerup_strength_selfdamage 2
+set g_balance_powerup_strength_selfforce 2
+// }}}
+
+// {{{ jetpack/hook
+set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack"
+set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction"
+set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)"
+set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction"
+set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction"
+set g_jetpack_fuel 8 "fuel per second for jetpack"
+set g_jetpack_attenuation 2 "jetpack sound attenuation"
+
+set g_grappling_hook_tarzan 2 // 2: can also pull players
+set g_balance_grapplehook_speed_fly 1800
+set g_balance_grapplehook_speed_pull 2000
+set g_balance_grapplehook_force_rubber 2000
+set g_balance_grapplehook_force_rubber_overstretch 1000
+set g_balance_grapplehook_length_min 50
+set g_balance_grapplehook_stretch 50
+set g_balance_grapplehook_airfriction 0.2
+set g_balance_grapplehook_health 130
+// }}}
+
+// {{{ weapon properties
+// {{{ laser
+set g_balance_laser_primary_damage 22
+set g_balance_laser_primary_edgedamage 0
+set g_balance_laser_primary_force 200
+set g_balance_laser_primary_radius 52
+set g_balance_laser_primary_speed 0
+set g_balance_laser_primary_spread 0
+set g_balance_laser_primary_refire 0.1
+set g_balance_laser_primary_animtime 0.1
+set g_balance_laser_primary_lifetime 0
+set g_balance_laser_primary_shotangle 0
+set g_balance_laser_primary_delay 0
+set g_balance_laser_gauntlet 1
+set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
+set g_balance_laser_secondary_damage 30
+set g_balance_laser_secondary_edgedamage 0
+set g_balance_laser_secondary_force 100
+set g_balance_laser_secondary_radius 3
+set g_balance_laser_secondary_speed 1500
+set g_balance_laser_secondary_spread 0
+set g_balance_laser_secondary_refire 0
+set g_balance_laser_secondary_animtime 0.15
+set g_balance_laser_secondary_lifetime 0.066
+set g_balance_laser_secondary_shotangle 0
+set g_balance_laser_secondary_delay 0
+// }}}
+// {{{ shotgun
+set g_balance_shotgun_primary_bullets 36
+set g_balance_shotgun_primary_damage 3
+set g_balance_shotgun_primary_force 10
+set g_balance_shotgun_primary_spread 0.18
+set g_balance_shotgun_primary_refire 1
+set g_balance_shotgun_primary_animtime 0.7
+set g_balance_shotgun_primary_ammo 1
+set g_balance_shotgun_primary_speed 12000
+set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
+set g_balance_shotgun_secondary 0
+set g_balance_shotgun_secondary_bullets 22
+set g_balance_shotgun_secondary_damage 2
+set g_balance_shotgun_secondary_force 12
+set g_balance_shotgun_secondary_spread 0.25
+set g_balance_shotgun_secondary_refire 1.5
+set g_balance_shotgun_secondary_animtime 0.2
+set g_balance_shotgun_secondary_ammo 0.5
+set g_balance_shotgun_secondary_speed 12000
+set g_balance_shotgun_secondary_bulletconstant 75 // 3.8qu
+// }}}
+// {{{ uzi
+set g_balance_uzi_first 0
+set g_balance_uzi_first_damage 10
+set g_balance_uzi_first_force 50
+set g_balance_uzi_first_spread 0.007
+set g_balance_uzi_first_refire 0.15
+set g_balance_uzi_first_ammo 1
+set g_balance_uzi_sustained_damage 7
+set g_balance_uzi_sustained_force 30
+set g_balance_uzi_sustained_spread 0.02
+set g_balance_uzi_sustained_refire 0.1
+set g_balance_uzi_sustained_ammo 1
+set g_balance_uzi_speed 18000
+set g_balance_uzi_bulletconstant 115 // 13.1qu
+// }}}
+// {{{ mortar
+set g_balance_grenadelauncher_primary2secondary 1
+set g_balance_grenadelauncher_primary_damage 60
+set g_balance_grenadelauncher_primary_edgedamage 10
+set g_balance_grenadelauncher_primary_force 250
+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_z 0
+set g_balance_grenadelauncher_primary_spread 0
+set g_balance_grenadelauncher_primary_lifetime 5
+set g_balance_grenadelauncher_primary_refire 0.7
+set g_balance_grenadelauncher_primary_animtime 0.3
+set g_balance_grenadelauncher_primary_ammo 2
+set g_balance_grenadelauncher_secondary_damage 65
+set g_balance_grenadelauncher_secondary_edgedamage 10
+set g_balance_grenadelauncher_secondary_force 300
+set g_balance_grenadelauncher_secondary_radius 200
+set g_balance_grenadelauncher_secondary_speed 800
+set g_balance_grenadelauncher_secondary_speed_up 0
+set g_balance_grenadelauncher_secondary_speed_z 200
+set g_balance_grenadelauncher_secondary_spread 0
+set g_balance_grenadelauncher_secondary_lifetime 2
+set g_balance_grenadelauncher_secondary_refire 0.8
+set g_balance_grenadelauncher_secondary_animtime 0.5
+set g_balance_grenadelauncher_secondary_ammo 2
+set g_balance_grenadelauncher_secondary_health 0
+set g_balance_grenadelauncher_secondary_damageforcescale 0
+set g_balance_grenadelauncher_secondary_bouncefactor 0.5
+set g_balance_grenadelauncher_secondary_bouncestop 0.075
+// }}}
+// {{{ electro
+set g_balance_electro_lightning 1
+set g_balance_electro_primary_damage 6
+set g_balance_electro_primary_edgedamage 0
+set g_balance_electro_primary_force 60 // todo: probaby needs movement nerfing code when hit?
+set g_balance_electro_primary_radius 850
+set g_balance_electro_primary_comboradius 0
+set g_balance_electro_primary_speed 0
+set g_balance_electro_primary_spread 0
+set g_balance_electro_primary_lifetime 0
+set g_balance_electro_primary_refire 0.066
+set g_balance_electro_primary_animtime 0.066
+set g_balance_electro_primary_ammo 0.66
+set g_balance_electro_secondary_damage 45
+set g_balance_electro_secondary_spread 0.10
+set g_balance_electro_secondary_edgedamage 10
+set g_balance_electro_secondary_force 100
+set g_balance_electro_secondary_radius 150
+set g_balance_electro_secondary_speed 900
+set g_balance_electro_secondary_speed_up 200
+set g_balance_electro_secondary_speed_z 0
+set g_balance_electro_secondary_spread 0.05
+set g_balance_electro_secondary_lifetime 2.5
+set g_balance_electro_secondary_refire 0.1
+set g_balance_electro_secondary_refire2 2
+set g_balance_electro_secondary_animtime 0.2
+set g_balance_electro_secondary_ammo 2
+set g_balance_electro_secondary_health 5
+set g_balance_electro_secondary_damageforcescale 4
+set g_balance_electro_secondary_count 3
+set g_balance_electro_combo_damage 50
+set g_balance_electro_combo_edgedamage 0
+set g_balance_electro_combo_force 100
+set g_balance_electro_combo_radius 250
+set g_balance_electro_combo_comboradius 0
+set g_balance_electro_combo_speed 2000
+// }}}
+// {{{ crylink
+set g_balance_crylink_primary_damage 18
+set g_balance_crylink_primary_edgedamage 18
+set g_balance_crylink_primary_force 50
+set g_balance_crylink_primary_radius 100
+set g_balance_crylink_primary_speed 1100
+set g_balance_crylink_primary_spread 0.01
+set g_balance_crylink_primary_shots 4
+set g_balance_crylink_primary_bounces 0
+set g_balance_crylink_primary_refire 0.4
+set g_balance_crylink_primary_animtime 0.4
+set g_balance_crylink_primary_ammo 2
+set g_balance_crylink_primary_bouncedamagefactor 0.5
+
+set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
+set g_balance_crylink_primary_middle_fadetime 5
+set g_balance_crylink_primary_star_lifetime 3 // range: 700 full, fades to 2450
+set g_balance_crylink_primary_star_fadetime 5
+set g_balance_crylink_primary_other_lifetime 3 // range: 700 full, fades to 2450
+set g_balance_crylink_primary_other_fadetime 5
+
+set g_balance_crylink_secondary 0
+set g_balance_crylink_secondary_damage 8
+set g_balance_crylink_secondary_edgedamage 8
+set g_balance_crylink_secondary_force -40
+set g_balance_crylink_secondary_radius 10
+set g_balance_crylink_secondary_speed 4000
+set g_balance_crylink_secondary_spread 0.01
+set g_balance_crylink_secondary_shots 3
+set g_balance_crylink_secondary_bounces 0
+set g_balance_crylink_secondary_refire 0.1
+set g_balance_crylink_secondary_animtime 0.1
+set g_balance_crylink_secondary_ammo 1
+set g_balance_crylink_secondary_bouncedamagefactor 0.5
+
+set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
+set g_balance_crylink_secondary_middle_fadetime 5
+set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 70000
+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 0.8
+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
+// }}}
+// {{{ minstanex
+set g_balance_minstanex_refire 1
+set g_balance_minstanex_animtime 1
+set g_balance_minstanex_ammo 10
+// }}}
+// {{{ hagar
+set g_balance_hagar_primary_damage 12
+set g_balance_hagar_primary_edgedamage 5
+set g_balance_hagar_primary_force 70
+set g_balance_hagar_primary_radius 50
+set g_balance_hagar_primary_spread 0
+set g_balance_hagar_primary_speed 1800
+set g_balance_hagar_primary_lifetime 5
+set g_balance_hagar_primary_refire 0.1
+set g_balance_hagar_primary_ammo 1
+set g_balance_hagar_secondary 0
+set g_balance_hagar_secondary_damage 11
+set g_balance_hagar_secondary_edgedamage 4
+set g_balance_hagar_secondary_force 60
+set g_balance_hagar_secondary_radius 70
+set g_balance_hagar_secondary_spread 0.05
+set g_balance_hagar_secondary_speed 1800
+set g_balance_hagar_secondary_lifetime_min 5
+set g_balance_hagar_secondary_lifetime_rand 0
+set g_balance_hagar_secondary_refire 0.1
+set g_balance_hagar_secondary_ammo 1
+// }}}
+// {{{ rocketlauncher
+set g_balance_rocketlauncher_damage 90
+set g_balance_rocketlauncher_edgedamage 30
+set g_balance_rocketlauncher_force 350
+set g_balance_rocketlauncher_radius 110
+set g_balance_rocketlauncher_speed 1000
+set g_balance_rocketlauncher_speedaccel 0
+set g_balance_rocketlauncher_speedstart 1000
+set g_balance_rocketlauncher_lifetime 10
+set g_balance_rocketlauncher_refire 0.9
+set g_balance_rocketlauncher_animtime 0.7
+set g_balance_rocketlauncher_ammo 3
+set g_balance_rocketlauncher_health 0
+set g_balance_rocketlauncher_damageforcescale 0
+set g_balance_rocketlauncher_detonatedelay 9999 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
+set g_balance_rocketlauncher_guiderate 0 // max degrees per second
+set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
+set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
+set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
+set g_balance_rocketlauncher_guidestop 1 // stop guiding when firing again
+set g_balance_rocketlauncher_laserguided_speed 1000 //650
+set g_balance_rocketlauncher_laserguided_speedaccel 0
+set g_balance_rocketlauncher_laserguided_speedstart 1000
+set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
+set g_balance_rocketlauncher_laserguided_allow_steal 1
+// }}}
+// {{{ porto
+set g_balance_porto_primary_refire 1.5
+set g_balance_porto_primary_animtime 0.3
+set g_balance_porto_primary_speed 5000
+set g_balance_porto_primary_lifetime 30
+set g_balance_portal_health 200 // these get recharged whenever the portal is used
+set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
+// }}}
+// {{{ hook
+set g_balance_hook_primary_fuel 2 // hook monkeys set 0
+set g_balance_hook_primary_refire 0 // hook monkeys set 0
+set g_balance_hook_primary_animtime 0.3 // good shoot anim
+set g_balance_hook_primary_hooked_time_max 0 // infinite
+set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free
+set g_balance_hook_primary_hooked_fuel 3 // fuel per second hooked
+set g_balance_hook_secondary_damage 25 // not much
+set g_balance_hook_secondary_edgedamage 5 // not much
+set g_balance_hook_secondary_radius 500 // LOTS
+set g_balance_hook_secondary_force -2000 // LOTS
+set g_balance_hook_secondary_ammo 50 // a whole pack
+set g_balance_hook_secondary_lifetime 10 // infinite
+set g_balance_hook_secondary_speed 0 // not much throwing
+set g_balance_hook_secondary_gravity 5 // fast falling
+set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
+set g_balance_hook_secondary_animtime 0.3 // good shoot anim
+set g_balance_hook_secondary_power 3 // effect behaves like a square function
+set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds
+// }}}
+// {{{ hlac
+set g_balance_hlac_primary_spread_min 0.01
+set g_balance_hlac_primary_spread_max 0.03
+set g_balance_hlac_primary_spread_add 0.002
+set g_balance_hlac_primary_spread_crouchmod 0.5
+
+set g_balance_hlac_primary_damage 6
+set g_balance_hlac_primary_edgedamage 0
+set g_balance_hlac_primary_force 60 // todo: probably needs movement nerfing code when hit
+set g_balance_hlac_primary_radius 850
+set g_balance_hlac_primary_speed 0
+set g_balance_hlac_primary_lifetime 0
+
+set g_balance_hlac_primary_refire 0.066
+set g_balance_hlac_primary_animtime 0.066
+set g_balance_hlac_primary_ammo 0.066
+
+set g_balance_hlac_secondary 0
+set g_balance_hlac_secondary_spread 0.06
+set g_balance_hlac_secondary_spread_crouchmod 0.5
+
+set g_balance_hlac_secondary_damage 11
+set g_balance_hlac_secondary_edgedamage 10
+set g_balance_hlac_secondary_force 60
+set g_balance_hlac_secondary_radius 70
+set g_balance_hlac_secondary_speed 20000
+set g_balance_hlac_secondary_lifetime 5
+
+set g_balance_hlac_secondary_refire 0.6
+set g_balance_hlac_secondary_animtime 0.6
+set g_balance_hlac_secondary_ammo 10
+set g_balance_hlac_secondary_shots 5
+// }}}
+// {{{ campingrifle
+set g_balance_campingrifle_magazinecapacity 0
+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.85 // 0.35 - 0.1 + 0.35 - 0.1 + 0.35 = three secondaries
+set g_balance_campingrifle_tracer 1
+set g_balance_campingrifle_primary_damage 50
+set g_balance_campingrifle_primary_headshotaddeddamage 80
+set g_balance_campingrifle_primary_spread 0
+set g_balance_campingrifle_primary_force 0
+set g_balance_campingrifle_primary_speed 35000
+set g_balance_campingrifle_primary_lifetime 5
+set g_balance_campingrifle_primary_refire 0.7
+set g_balance_campingrifle_primary_animtime 0.7
+set g_balance_campingrifle_primary_ammo 10
+set g_balance_campingrifle_primary_bulletconstant 130 // 56.3qu
+set g_balance_campingrifle_primary_burstcost 0.35 // require same cooldown as secondary, note it's smaller than primary refire time
+set g_balance_campingrifle_secondary_damage 15
+set g_balance_campingrifle_secondary_headshotaddeddamage 25
+set g_balance_campingrifle_secondary_spread 0.02
+set g_balance_campingrifle_secondary_force 0
+set g_balance_campingrifle_secondary_speed 20000
+set g_balance_campingrifle_secondary_lifetime 5
+set g_balance_campingrifle_secondary_refire 0.1
+set g_balance_campingrifle_secondary_animtime 0.1
+set g_balance_campingrifle_secondary_ammo 4
+set g_balance_campingrifle_secondary_bulletconstant 130 // 18.3qu
+set g_balance_campingrifle_secondary_burstcost 0.35
+// }}}
+// {{{ tuba
+set g_balance_tuba_refire 0.05
+set g_balance_tuba_animtime 0.05
+set g_balance_tuba_attenuation 0.5
+set g_balance_tuba_volume 1
+set g_balance_tuba_fadetime 0.25
+set g_balance_tuba_damage 5
+set g_balance_tuba_edgedamage 0
+set g_balance_tuba_radius 200
+set g_balance_tuba_force 40
+// }}}
+// {{{ fireball
+set g_balance_fireball_primary_ammo 40
+set g_balance_fireball_primary_animtime 0.15
+set g_balance_fireball_primary_bfgdamage 100
+set g_balance_fireball_primary_bfgforce 0
+set g_balance_fireball_primary_bfgradius 1000
+set g_balance_fireball_primary_damage 200
+set g_balance_fireball_primary_damageforcescale 4
+set g_balance_fireball_primary_edgedamage 0
+set g_balance_fireball_primary_force 700
+set g_balance_fireball_primary_health 50
+set g_balance_fireball_primary_laserburntime 0.5
+set g_balance_fireball_primary_laserdamage 80
+set g_balance_fireball_primary_laseredgedamage 20
+set g_balance_fireball_primary_laserradius 256
+set g_balance_fireball_primary_lifetime 15
+set g_balance_fireball_primary_radius 200
+set g_balance_fireball_primary_refire 5
+set g_balance_fireball_primary_refire2 0
+set g_balance_fireball_primary_speed 650
+set g_balance_fireball_primary_spread 0
+set g_balance_fireball_secondary_ammo 5
+set g_balance_fireball_secondary_animtime 0.3
+set g_balance_fireball_secondary_damage 40
+set g_balance_fireball_secondary_damageforcescale 4
+set g_balance_fireball_secondary_damagetime 5
+set g_balance_fireball_secondary_force 100
+set g_balance_fireball_secondary_laserburntime 0.5
+set g_balance_fireball_secondary_laserdamage 50
+set g_balance_fireball_secondary_laseredgedamage 20
+set g_balance_fireball_secondary_laserradius 110
+set g_balance_fireball_secondary_lifetime 7
+set g_balance_fireball_secondary_refire 2
+set g_balance_fireball_secondary_speed 900
+set g_balance_fireball_secondary_speed_up 100
+set g_balance_fireball_secondary_speed_z 0
+set g_balance_fireball_secondary_spread 0
+// }}}
_update_generic
set g_configversion 2
+
+// we now use mastervolume
+volume 1
cl_bobcycle 0 // how long the cycle of up/down view movement takes (only works if cl_bob is not 0), default is 0.6
cl_bob 0.01 // how much view moves up/down when moving (does not move if cl_bobcycle is 0, but still enables cl_bobmodel), default is 0.02
cl_bobmodel 1 // whether to have gun model move around on screen when moving (only works if cl_bob is not 0), default is 1
+cl_leanmodel 1 // enables weapon leaning effect when looking around
+cl_followmodel 1 // enables weapon pushing / pulling effect when walking
cl_rollangle 0 // amount of view tilt when strafing, default is 2.0
v_kicktime 0 // how long damage kicks of the view last, default is 0 seconds
gl_polyblend 0.5 // whether to use screen tints, default is 1
set g_telefrags_avoid 0
set g_teleport_maxspeed 0 "maximum speed that a player can keep when going through a teleporter (if a misc_teleporter_dest also has a cap the smallest one of these will be used), 0 = don't limit, -1 = keep no speed"
+set g_respawn_ghosts 1 "if 1 dead bodies become ghosts and float away when the player respawns"
+set g_respawn_ghosts_speed 5 "the speed with which respawn ghosts float and rotate"
+set g_respawn_ghosts_maxtime 6 "maximum amount of time a respawn ghost can last, minimum time is half this value. 0 disables and ghosts fade when the body would"
+
// fragmessage: This allows extra information to be displayed with the frag centerprints.
set sv_fragmessage_information_ping 0 "Enable ping display information, 0 = Never display; 1 = Always display (If the player is a bot, it will say bot instead of the ping.)"
set sv_fragmessage_information_handicap 1 "Enable handicap display information, 0 = Never display; 1 = Only when the player has handicap on; 2 = Always display (Displays Off if off)"
set sv_foginterval 0
// Audio track names (for old-style "cd loop NUMBER" usage)
-set g_cdtracks_remaplist "digital-pursuit breakdown-easy brainsukker chaos-fog infight neuronal-diving subcities thru-the-mirror calling-bogus beast-of-insanity thunder brokenlight brokenlight stairs sixtyfour_ desert3 ninesix sixtyfour_revisited northern-lights" "list used by mapinfo system to automatically assign cdtracks - must match the cd remap command"
-set g_cdtracks_dontusebydefault "digital-pursuit thunder brokenlight" "list used by mapinfo system to automatically assign cdtracks - must be a subset of g_cdtracks_remaplist"
+set _cdtrack_first "1"
+alias _cdtrack_0 "g_cdtracks_remaplist \"$g_cdtracks_remaplist $1\""
+alias _cdtrack_1 "g_cdtracks_remaplist \"$1\"; set _cdtrack_first 0"
+alias _cdtrack "_cdtrack_$_cdtrack_first $2"
+set g_cdtracks_remaplist ""
+exec cdtracks.cfg
+unset _cdtrack_first
+unalias _cdtrack_0
+unalias _cdtrack_1
+unalias _cdtrack
+
cd remap $g_cdtracks_remaplist
set sv_intermission_cdtrack ""
-set menu_cdtrack brokenlight
+
+set g_cdtracks_dontusebydefault ""
+set menu_cdtrack "ninesix"
// maxidle (in seconds): kick players idle for more than that amount of time
set sv_maxidle 0
// improve some minor details
sv_gameplayfix_gravityunaffectedbyticrate 1
sv_gameplayfix_nogravityonground 1
+
+// autodemo deleting
+seta cl_autodemo_delete_keeprecords 0 "when 1, records with a newly made race/cts demo are kept even if cl_autodemo_delete is used to delete demos"
+
+// freeze camera
+set cl_lockview 0 "when 1, the camera does not move any more"
+
+// we now use mastervolume
+volume 1
effect TE_TEI_G3
countabsolute 1
type beam
-tex 60 60
+tex 200 200
color 0xFFFFFF 0xFFFFFF
size 4 4
alpha 128 128 256
effect teleport
count 1000
type spark
-tex 40 40
-color 0x807aff 0x4463d5
-size 1 3
+tex 64 64
+color 0xff8400 0xff2a00
+size 1 1
alpha 0 256 100
+stretchfactor 2
//gravity 1
bounce 1.5
originjitter 1 1 1
velocitymultiplier 0.5
airfriction 2
stretchfactor 0.6
+effect teleport
+countabsolute 1
+type smoke
+tex 65 65
+size 150 150
+alpha 190 190 180
+sizeincrease -80
+color 0xff8400 0xff2a00
// used in qcsrc/server/w_hlac.qc: pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
// used in qcsrc/server/w_laser.qc: pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
effect laser_muzzleflash
-count 1
+// glow and light
+countabsolute 1
type smoke
-color 0xFFFFFF 0xFFFFFF
-tex 0 8
-size 5 5
-alpha 64 64 128
-airfriction 12
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
-velocitymultiplier 0.01
+color 0xcc0000 0xff0000
+tex 65 65
+size 10 15
+alpha 256 512 6280
+airfriction 10
+sizeincrease -100
+stretchfactor 2
lightradius 200
lightradiusfade 2000
lightcolor 3 0.1 0.1
-
+// electricity
+effect laser_muzzleflash
+count 6
+type spark
+color 0xb44215 0xff0000
+tex 43 43
+size 5 7
+alpha 256 512 6280
+airfriction 10
+originjitter 2 2 2
+velocityjitter 150 150 150
+velocitymultiplier 0.2
+sizeincrease -100
+stretchfactor 2.3
+rotate -180 180 4000 -4000
+// fire
+effect laser_muzzleflash
+count 12
+type spark
+color 0xff4200 0xff0000
+tex 8 15
+size 7 9
+alpha 256 512 6280
+airfriction 12
+originjitter 2 2 2
+velocityjitter 100 100 100
+velocitymultiplier 0.2
+sizeincrease -100
+stretchfactor 2
// decal
sizeincrease 12
velocitymultiplier 0.05
effect shotgun_muzzleflash
-count 10
+count 32
type spark
-tex 40 40
-color 0xFFFDD9 0xff5a00
-size 2 2
+tex 48 55
+color 0xffdb96 0xff5400
+size 10 20
alpha 0 128 1024
originjitter 1 1 1
-velocityjitter 444 444 444
-velocitymultiplier 1.7
-gravity 0.3
+velocityjitter 100 100 100
airfriction 5
-
-
+stretchfactor 2.5
+velocitymultiplier 0.5
// shotgun pellet impact
// decal
countabsolute 1
type decal
tex 56 59
-size 3 3
+size 5 8
alpha 256 256 0
originjitter 10 10 10
//lightradius 30
//lightcolor 1 1 1
// dust/smoke drifting away from the impact
effect shotgun_impact
-count 5
-type smoke
+type alphastatic
+notunderwater
tex 0 8
-color 0xFFFFFF 0xA37443
-size 7 7
-alpha 0 64 32
-originjitter 1 1 1
-airfriction 7
-liquidfriction 16
-velocityjitter 100 100 100
-sizeincrease 12
-velocitymultiplier 0.25
+count 6
+size 10 20
+sizeincrease 25
+alpha 300 550 756
+velocityjitter 150 150 150
+velocitymultiplier 0.2
+airfriction 5
+color 0x473a37 0x0b0a07
+rotate 0 360 -50 50
// dust/smoke staying at the impact
effect shotgun_impact
+type alphastatic
+notunderwater
+tex 36 36
count 1
-type smoke
-tex 0 8
-color 0xFFFFFF 0xFFFFFF
-size 17 17
-alpha 64 64 32
-sizeincrease 4
+size 10 11
+sizeincrease 74
+alpha 200 350 500
+velocityjitter 11 11 11
+airfriction 5
+color 0x201d1a 0x000000
+bounce 6
+velocitymultiplier 0.03
+rotate 0 360 -50 50
// sparks
effect shotgun_impact
notunderwater
-count 20
+count 3
type spark
tex 40 40
color 0xFDFFD9 0xFDFFD9
size 0.6 0.6
-alpha 256 256 768
+alpha 0 356 268
gravity 1
-bounce 1
-airfriction 5
+bounce 1.5
+airfriction 1.1
originjitter 1 1 1
-velocityjitter 400 400 400
-velocitymultiplier 0.1
-
+velocityjitter 200 200 200
+velocitymultiplier 0.2
// used in qcsrc/server/w_uzi.qc: pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
airfriction 12
-// decal
// used in qcsrc/server/cl_client.qc: //pointparticles(particleeffectnum("machinegun_impact"), self.origin + self.view_ofs + '0 0 7', '0 0 0', 1)
// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1)
// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1)
+// decal
effect machinegun_impact
countabsolute 1
type decal
lightcolor 6 3.6 0.6
// dust/smoke drifting away from the impact
effect machinegun_impact
-count 5
-type smoke
+type alphastatic
+notunderwater
tex 0 8
-color 0xFFFFFF 0xA37443
-size 7 7
-alpha 0 64 32
-originjitter 1 1 1
-airfriction 7
-liquidfriction 16
-velocityjitter 100 100 100
-sizeincrease 12
-velocitymultiplier 0.25
+count 6
+size 10 20
+sizeincrease 15
+alpha 300 550 456
+velocityjitter 150 150 150
+velocitymultiplier 0.1
+airfriction 5
+color 0x473a37 0x0b0a07
+rotate 0 360 -50 50
// dust/smoke staying at the impact
effect machinegun_impact
+type alphastatic
+notunderwater
+tex 36 36
count 1
-type smoke
-tex 0 8
-color 0xFFFFFF 0xFFFFFF
-size 17 17
-alpha 64 64 32
-sizeincrease 4
+size 10 11
+sizeincrease 74
+alpha 200 350 500
+velocityjitter 11 11 11
+airfriction 5
+color 0x201d1a 0x000000
+bounce 6
+velocitymultiplier 0.03
+rotate 0 360 -50 50
+//derbis
+effect machinegun_impact
+type alphastatic
+notunderwater
+tex 66 68
+count 2
+size 1 5
+airfriction 1
+gravity 1.4
+alpha 300 550 256
+velocityjitter 350 350 350
+velocitymultiplier 0.2
+bounce 1.7
+color 0x63493e 0xffffff
+rotate 0 360 -500 500
// sparks
effect machinegun_impact
notunderwater
-count 20
+count 2
type spark
tex 40 40
color 0xFDFFD9 0xFDFFD9
size 0.3 0.3
-alpha 256 256 768
+alpha 256 256 168
gravity 1
bounce 1
-airfriction 5
+airfriction 2
originjitter 1 1 1
-velocityjitter 400 400 400
-velocitymultiplier 0.1
+velocityjitter 300 300 300
+velocitymultiplier 0.2
+
lightradiusfade 2000
lightcolor 2 1.5 0.2
effect grenadelauncher_muzzleflash
-count 30
+count 32
type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 3 3
+tex 48 55
+color 0xffdb96 0xff5400
+size 10 20
alpha 0 128 1024
originjitter 1 1 1
-velocityjitter 300 300 300
+velocityjitter 100 100 100
velocitymultiplier 0.5
-airfriction 12
+airfriction 5
+stretchfactor 2.5
// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_GRENADE"), from, to)
// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_GRENADE"), from, to)
effect TR_GRENADE
-trailspacing 6
-type alphastatic
-color 0x303030 0x000000
+trailspacing 2
+type smoke
+color 0x101010 0x000000
tex 0 8
-size 1 2
+size 3 2
bounce 1
-sizeincrease 2
-alpha 100 200 280
+sizeincrease 10
+alpha 300 400 780
originjitter 1 1 1
velocityjitter 1 1 1
velocitymultiplier -0.02
// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to)
effect TR_KNIGHTSPIKE // used for MF_TRACER2
notunderwater
-trailspacing 5
-type alphastatic
+trailspacing 3
+type smoke
color 0x303030 0x000000
tex 0 8
size 3 3
bounce 1
sizeincrease 11
-alpha 100 200 400
+alpha 300 400 600
originjitter 2 2 2
velocityjitter 3 3 3
velocitymultiplier -0.02
countabsolute 1
type decal
tex 8 16
-size 72 72
+size 48 48
alpha 256 256 0
-originjitter 23 23 23
-lightradius 400
-lightradiusfade 750
+originjitter 26 26 26
+lightradius 250
+lightradiusfade 400
lightcolor 8 4 1
-// fire effect
+// fire effect which expands then slows
effect grenade_explode
notunderwater
-count 64
+count 80
type static
tex 48 55
-color 0x8f0d00 0xff5a00
-size 33 44
-sizeincrease 45
-alpha 200 256 512
-bounce 1.5
+color 0xe03f00 0x5e0000
+size 16 26
+sizeincrease 20
+alpha 128 228 356
+bounce 4.5
airfriction 8
liquidfriction 8
originjitter 8 8 8
-velocityjitter 512 512 512
-// fire effect 2
+velocityjitter 256 256 256
+// fire effect which make brigt dot inside
effect grenade_explode
notunderwater
-count 28
-type smoke
+count 30
+type static
tex 48 55
-color 0xea691b 0xeed05a
-size 33 44
-sizeincrease 55
-alpha 200 256 612
-bounce 2.5
-airfriction 19
-liquidfriction 19
+color 0xe03f00 0xffdf92
+size 6 16
+sizeincrease 40
+alpha 228 328 756
+bounce 1
+airfriction 8
+liquidfriction 8
originjitter 8 8 8
-velocityjitter 912 912 912
+velocityjitter 256 256 256
// smoke
effect grenade_explode
type alphastatic
notunderwater
tex 0 8
-count 64
+count 20
size 20 40
-sizeincrease 44
-alpha 200 450 456
-velocityjitter 444 444 444
+sizeincrease 34
+alpha 300 550 556
+velocityjitter 256 256 256
airfriction 5
color 0x000000 0x111111
-bounce 2
+bounce 6
// underwater bubbles
effect grenade_explode
underwater
type bubble
tex 62 62
color 0x404040 0x808080
-size 3 3
+size 3 6
alpha 128 256 64
gravity -0.125
bounce 1.5
liquidfriction 0.25
originjitter 16 16 16
-velocityjitter 144 144 144
+velocityjitter 196 196 196
+rotate 0 0 0 0
+// underwatershockwave
+effect grenade_explode
+underwater
+type smoke
+countabsolute 1
+tex 33 33
+size 5 5
+sizeincrease 1500
+alpha 40 40 300
+velocitymultiplier 0.3
// bouncing sparks
effect grenade_explode
notunderwater
-count 64
+count 32
type spark
tex 40 40
-color 0xffa800 0xffedaf
-size 1 1
-sizeincrease 2
-alpha 44 256 384
+color 0xffa35b 0xfff2be
+size 1 0.1
+alpha 644 956 484
gravity 1
-airfriction -1
-bounce 1.5
+airfriction 1
+bounce 1.6
liquidfriction 0.8
velocityoffset 0 0 80
originjitter 16 16 16
-velocityjitter 224 224 324
+velocityjitter 424 424 624
+// derbis
+effect grenade_explode
+notunderwater
+count 24
+type alphastatic
+tex 66 68
+color 0x6a3d25 0xcac5b4
+size 2 6
+alpha 644 956 684
+gravity 1.3
+airfriction 0.5
+bounce 1.6
+velocityjitter 324 324 524
+rotate -180 180 -1000 1000
// used in qcsrc/server/w_electro.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
// used in qcsrc/server/w_electro.qc: pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
effect electro_muzzleflash
-count 1
+countabsolute 1
type smoke
color 0x283880 0x283880 // 0x202020 0x404040
-tex 0 8
-size 5 5
+tex 65 65
+size 15 15
alpha 256 256 512
originjitter 1.5 1.5 1.5
velocityjitter 6 6 6
+sizeincrease -10
velocitymultiplier 0.01
lightradius 200
lightradiusfade 2000
lightcolor 1.5 3 6
+
effect electro_muzzleflash
-count 30
+count 14
type spark
-tex 31 31
+tex 8 15
color 0xD9FDFF 0xD9FDFF
-size 3 3
-alpha 0 128 1024
+size 5 15
+alpha 110 228 2024
originjitter 1 1 1
-velocityjitter 300 300 300
+velocityjitter 150 150 150
velocitymultiplier 0.5
-airfriction 12
+airfriction 2
+stretchfactor 1.5
+effect electro_muzzleflash
+count 10
+type spark
+tex 41 41
+color 0xD9FDFF 0xD9FDFF
+size 7 6
+alpha 110 228 1024
+originjitter 1 1 1
+velocityjitter 350 350 350
+velocitymultiplier 2.5
+airfriction 8
+gravity 1.3
+stretchfactor 0.1
// electro trail
lightradius 250
lightradiusfade 250
lightcolor 3.125 4.375 10
+// shockwave
+effect electro_impact
+type smoke
+countabsolute 1
+tex 33 33
+size 32 32
+sizeincrease 1000
+color 0x80C0FF 0x80C0FF
+alpha 40 40 350
+velocitymultiplier 44
// flare effect
effect electro_impact
countabsolute 1
airfriction 6
originjitter 1 1 1
velocityjitter 512 512 512
+rotate -180 180 -9999 9999
// inner cloud of smoke
effect electro_impact
count 60
type spark
tex 41 41
color 0xFDFFD9 0xFDFFD9
-size 16 16
+size 1 2
alpha 256 256 1024
bounce 2
+stretchfactor 0.4
//airfriction 2
originjitter 1 1 1
velocityjitter 512 512 512
alpha 128 128 64
// large sparks
effect electro_combo
-count 20
+count 10
type static
color 0x2030FF 0x80C0FF
size 32 32
-alpha 256 256 256
+sizeincrease 50
+tex 0 7
+alpha 156 156 156
bounce 2
airfriction 6
liquidfriction 16
count 64
type spark
tex 41 41
-color 0xFDFFD9 0xFDFFD9
-size 16 16
-alpha 444 512 866
-bounce 2
+color 0xa9cacf 0x0054ff
+size 2 4
+stretchfactor 2
+gravity 0.3
+alpha 444 512 700
+velocitymultiplier 3
+bounce 1.6
//airfriction 2
originjitter 1 1 1
-velocityjitter 512 512 512
+velocityjitter 312 312 312
// inner cloud of smoke
effect electro_combo
count 0.25
alpha 256 256 256
originjitter 20 20 20
velocityjitter 32 32 32
+// shockwave
+effect electro_combo
+type smoke
+countabsolute 1
+color 0xa9cacf 0x0054ff
+tex 33 33
+size 30 30
+sizeincrease 600
+alpha 40 40 100
+velocitymultiplier 0.3
effect crylink_muzzleflash
count 1
type smoke
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 128 128 256
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
+color 0xdd9cff 0xff0090
+tex 65 65
+size 15 20
+alpha 128 128 2024
velocitymultiplier 0.01
lightradius 200
lightradiusfade 2000
effect crylink_muzzleflash
count 10
type spark
-tex 40 40
+tex 35 36
color 0xA080C0 0xA080C0
-size 3 3
+size 5 10
alpha 0 128 1024
originjitter 1 1 1
velocityjitter 200 200 200
velocitymultiplier 0.3
airfriction 12
-
+stretchfactor 1.5
// crylink impact effect
tex 41 41
color 0xA040C0 0xA040C0
bounce 2
-size 4 4
+size 1 2
alpha 256 256 1024
velocityjitter 256 256 256
// purple splash
// used in qcsrc/server/w_minstanex.qc: pointparticles(particleeffectnum("nex_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
// used in qcsrc/client/particles.qc: pointparticles(particleeffectnum("nex_muzzleflash"), shotorg, normalize(endpos - shotorg) * 1000, 1)
effect nex_muzzleflash
-count 10
-type smoke
-color 0x202020 0x404040
-tex 0 8
+count 24
+type spark
+color 0x202020 0x0072ff
+tex 48 55
size 16 16
-alpha 128 128 192
+alpha 328 328 4000
originjitter 4 4 4
-velocityjitter 24 24 24
-velocitymultiplier 0.02
+velocityjitter 180 180 180
+velocitymultiplier 1.4
+stretchfactor 2
+sizeincrease -100
+airfriction 9
lightradius 200
lightradiusfade 200
lightcolor 2 2.5 3
effect nex_muzzleflash
-count 150
+count 100
type spark
tex 41 41
color 0xD9FDFF 0xD9FDFF
-size 3 3
+size 1 1
alpha 0 128 1024
originjitter 1 1 1
velocityjitter 600 600 600
-velocitymultiplier 0.5
+velocitymultiplier 1.5
airfriction 9
//effect nex_beam
//countabsolute 1
//type beam
-//tex 60 60
+//tex 200 200
//color 0xFFFFFF 0xFFFFFF
//size 6 6
//alpha 128 128 192
lightradius 200
lightradiusfade 250
lightcolor 4 6 8
+rotate -180 180 0 0
+// rotating something
+effect nex_impact
+count 10
+type smoke
+tex 46 46
+color 0x1680A0 0x1680A0
+size 25 28
+sizeincrease 20
+alpha 55 55 50
+rotate 180 -180 500 -500
// shockwave
effect nex_impact
countabsolute 1
type static
-tex 34 34
+tex 33 33
+color 0x1680A0 0x1680A0
size 16 16
-alpha 100 100 300
-sizeincrease 200
-
+alpha 50 50 400
+sizeincrease 900
+// shockwave2
+effect nex_impact
+countabsolute 1
+type static
+tex 65 65
+color 0x1680A0 0x1680A0
+size 5 5
+alpha 50 50 100
+sizeincrease 500
// flare effect
effect nex_impact
size 4 4
alpha 0 128 512
bounce 2
+stretchfactor 3
velocityjitter 600 600 600
velocitymultiplier 0.5
airfriction 9
-
-
+// small sparks that live longer
+effect nex_impact
+count 32
+type spark
+tex 41 41
+color 0xD9FDFF 0xD9FDFF
+size 2 2
+alpha 255 255 112
+bounce 1.6
+stretchfactor 0.7
+velocityjitter 300 300 600
+velocitymultiplier 2.5
+airfriction 2
+gravity 1
// used in qcsrc/server/w_hagar.qc: pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
// used in qcsrc/server/w_hagar.qc: pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
effect hagar_muzzleflash
count 30
type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 3 3
+tex 48 55
+color 0xff8400 0xff4200
+size 5 10
alpha 0 128 1024
originjitter 1 1 1
-velocityjitter 300 300 300
+velocityjitter 200 200 200
velocitymultiplier 0.5
airfriction 12
+stretchfactor 2
+rotate -180 180 -400 400
// bouncing sparks
effect hagar_explode
notunderwater
-count 16
+count 8
type spark
-color 0x903010 0xFFD030
-size 2 2
tex 40 40
-alpha 256 256 384
+color 0xffa35b 0xfff2be
+size 1 0.1
+alpha 644 956 684
gravity 1
-airfriction 0.2
-bounce 1.5
+airfriction 1
+bounce 1.6
liquidfriction 0.8
velocityoffset 0 0 80
-velocityjitter 256 256 256
+originjitter 16 16 16
+velocityjitter 224 224 224
//lightradiusfade 2000
//lightcolor 2 1.5 0.2
effect rocketlauncher_muzzleflash
-count 30
-type spark
-tex 40 40
+count 12
+type smoke
+tex 35 36
color 0xFFFDD9 0xFFFDD9
-size 3 3
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 300 300 300
-velocitymultiplier 0.5
-airfriction 12
+size 5 10
+sizeincrease 20
+alpha 10 25 20
+originjitter 3 3 3
+velocityjitter 100 100 100
+velocitymultiplier 0.3
+airfriction 9
+rotate -180 180 -30 30
// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_ROCKET"), from, to)
effect TR_ROCKET
trailspacing 5
-type alphastatic
+type smoke
+notunderwater
color 0x000000 0x666666
tex 0 8
-size 1 4
+size 3 4
bounce 1
sizeincrease 11
alpha 200 300 200
originjitter 2 2 2
velocityjitter 3 3 3
velocitymultiplier -0.02
+rotate -180 180 -30 30
//gravity -0.11
// fire
effect TR_ROCKET
-notunderwater
trailspacing 2
type static
color 0xffdf72 0x811200
velocitymultiplier -1.5
// bubbles
effect TR_ROCKET
+type bubble
underwater
trailspacing 8
-type bubble
tex 62 62
-color 0x404040 0x808080
-size 1 1
+size 1 2
alpha 256 256 256
gravity -0.125
bounce 1.5
liquidfriction 4
velocityjitter 16 16 16
+velocitymultiplier -0.31
+rotate 0 0 0 0
// sparks
effect TR_ROCKET
+notunderwater
trailspacing 10
type spark
tex 40 40
color 0xFFFDD9 0xFFFDD9
-size 1 1
+size 0.5 0.5
alpha 444 512 1866
+stretchfactor 0.3
//gravity 1
bounce 1
//velocityoffset 0 0 15
countabsolute 1
type decal
tex 8 16
-size 48 48
+size 72 72
alpha 256 256 0
-originjitter 26 26 26
-lightradius 250
-lightradiusfade 400
+originjitter 23 23 23
+lightradius 400
+lightradiusfade 750
lightcolor 8 4 1
-// fire effect which expands then slows
+// fire effect
effect rocket_explode
notunderwater
-count 80
+count 64
type static
tex 48 55
-color 0xe03f00 0x5e0000
-size 16 26
-sizeincrease 20
-alpha 128 228 356
-bounce 4.5
+color 0x8f0d00 0xff5a00
+size 33 44
+sizeincrease 45
+alpha 200 256 512
+bounce 1.5
airfriction 8
liquidfriction 8
originjitter 8 8 8
-velocityjitter 256 256 256
-// fire effect which make brigt dot inside
+velocityjitter 512 512 512
+// fire effect 2
effect rocket_explode
notunderwater
-count 30
-type static
+count 28
+type smoke
tex 48 55
-color 0xe03f00 0xffdf92
-size 6 16
-sizeincrease 40
-alpha 228 328 756
-bounce 1
-airfriction 8
-liquidfriction 8
+color 0xea691b 0xeed05a
+size 33 44
+sizeincrease 55
+alpha 200 256 612
+bounce 2.5
+airfriction 19
+liquidfriction 19
originjitter 8 8 8
-velocityjitter 256 256 256
+velocityjitter 912 912 912
// smoke
effect rocket_explode
type alphastatic
notunderwater
tex 0 8
-count 20
+count 64
size 20 40
-sizeincrease 34
-alpha 300 550 556
-velocityjitter 256 256 256
+sizeincrease 44
+alpha 200 450 456
+velocityjitter 444 444 444
airfriction 5
color 0x000000 0x111111
-bounce 6
+bounce 2
// underwater bubbles
effect rocket_explode
underwater
-count 32
+count 64
type bubble
tex 62 62
color 0x404040 0x808080
bounce 1.5
liquidfriction 0.25
originjitter 16 16 16
-velocityjitter 96 96 96
+velocityjitter 144 144 144
+// underwatershockwave
+effect rocket_explode
+underwater
+type smoke
+countabsolute 1
+tex 33 33
+size 30 30
+sizeincrease 1900
+alpha 40 40 300
+velocitymultiplier 0.3
// bouncing sparks
effect rocket_explode
notunderwater
-count 16
+count 32
type spark
-color 0x903010 0xFFD030
-size 2 2
tex 40 40
-alpha 256 256 384
+color 0xffa35b 0xfff2be
+size 1 0.1
+alpha 644 956 484
gravity 1
-airfriction 0.2
-bounce 1.5
+airfriction 1
+bounce 1.6
liquidfriction 0.8
velocityoffset 0 0 80
-velocityjitter 256 256 256
-
-
+originjitter 16 16 16
+velocityjitter 424 424 624
+// derbis
+effect rocket_explode
+notunderwater
+count 24
+type alphastatic
+tex 66 68
+color 0x6a3d25 0xcac5b4
+size 2 6
+alpha 644 956 684
+gravity 1.3
+airfriction 0.5
+bounce 1.6
+velocityjitter 324 324 524
+rotate -180 180 -1000 1000
// used in qcsrc/server/g_hook.qc: pointparticles(particleeffectnum("grapple_muzzleflash"), org, '0 0 0', 1)
effect grapple_muzzleflash
effect nex242_misc_laser_beam
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 64
color 0xff0000 0xff0000
effect nex242_misc_laser_beam_fast
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 640
color 0xff0000 0xff0000
effect nex242_misc_laser_green_beam
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 64
color 0x00ff00 0x00ff00
effect nex242_misc_laser_blue_beam
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 64
color 0x0000ff 0x0000ff
effect nex242_misc_laser_yellow_beam
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 64
color 0xffff00 0xffff00
effect nex242_misc_laser_cyan_beam
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 64
color 0x00ffff 0x00ffff
effect nex242_misc_laser_magenta_beam
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 64
color 0xff00ff 0xff00ff
effect nex242_misc_laser_white_beam
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 64
color 0xffffff 0xffffff
effect nex242_misc_laser_black_beam
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 64
color 0x000000 0x000000
effect nex242_misc_laser_orange_beam
countabsolute 1
type beam
-tex 60 60
+tex 200 200
size 1 1
alpha 256 256 64
color 0xff6600 0xff6600
liquidfriction 6
velocityjitter 512 512 512
+
// decal
// used in qcsrc/server/g_triggers.qc: self.cnt = particleeffectnum("laser_deadly")
// used in qcsrc/server/g_triggers.qc: self.cnt = particleeffectnum("laser_deadly")
effect morphed_damage_dissolve
tex 43 43
count 20
-type spark
+type smoke
color 0xffffff 0x9271fb
-size 62 62
+size 40 40
sizeincrease -16
-alpha 256 256 328
-gravity -0.4
-airfriction 3
+alpha 456 456 1828
+gravity -1.9
+airfriction 8
liquidfriction 6
velocityjitter 256 256 512
+rotate -180 180 -399 -99
effect morphed_damage_dissolve
tex 43 43
count 5
-type spark
+type smoke
color 0x7bdbff 0xbed2ff
-size 62 62
+size 40 40
sizeincrease -16
-alpha 256 256 328
+alpha 256 256 628
gravity -0.8
-airfriction 5
+airfriction 9
liquidfriction 6
velocityjitter 256 256 512
+rotate -180 180 0 0
effect morphed_damage_dissolve
-tex 0 8
+tex 65 65
count 10
type smoke
color 0xffffff 0x9271fb
size 44 44
sizeincrease -16
-alpha 256 256 228
+alpha 156 156 128
airfriction 3
liquidfriction 6
-originjitter 32 32 96
-
+originjitter 22 22 76
effect morphed_damage_dissolve
tex 46 46
color 0xffffff 0x9271fb
size 32 32
sizeincrease -16
-alpha 256 256 228
+alpha 56 56 128
gravity 1
bounce 1.5
airfriction 3
liquidfriction 6
velocityjitter 400 400 0
+rotate -180 180 999 -999
// Team / hit minsta effects
effect TE_TEI_G3RED
countabsolute 1
type beam
-tex 60 60
+tex 200 200
color 0xFF0000 0xFF0000
size 4 4
alpha 128 128 256
effect TE_TEI_G3RED_HIT
countabsolute 1
type beam
-tex 60 60
+tex 200 200
color 0xFF0000 0xFF0000
size 8 8
alpha 128 128 256
effect TE_TEI_G3BLUE
countabsolute 1
type beam
-tex 60 60
+tex 200 200
color 0x0000FF 0x1100FF
size 4 4
alpha 128 128 256
effect TE_TEI_G3BLUE_HIT
countabsolute 1
type beam
-tex 60 60
+tex 200 200
color 0x0000FF 0x1100FF
size 8 8
alpha 128 128 256
effect TE_TEI_G3YELLOW
countabsolute 1
type beam
-tex 60 60
+tex 200 200
color 0xffff00 0xffff11
size 4 4
alpha 128 128 256
effect TE_TEI_G3YELLOW_HIT
countabsolute 1
type beam
-tex 60 60
+tex 200 200
color 0xffff00 0xffff11
size 8 8
alpha 128 128 256
effect TE_TEI_G3PINK
countabsolute 1
type beam
-tex 60 60
+tex 200 200
color 0xFF00FF 0xFF11FF
size 4 4
alpha 128 128 256
effect TE_TEI_G3PINK_HIT
countabsolute 1
type beam
-tex 60 60
+tex 200 200
color 0xFF00FF 0xFF11FF
size 8 8
alpha 128 128 256
// rocket guiding start
-// smoke
-effect rocket_guide
-type alphastatic
-notunderwater
-tex 0 8
-count 5
-size 10 20
-sizeincrease 17
-alpha 300 550 556
-velocityjitter 128 128 128
-airfriction 5
-color 0x000000 0x111111
-bounce 6
-velocitymultiplier -0.1
// underwater bubbles
effect rocket_guide
underwater
count 16
type spark
color 0x903010 0xFFD030
-size 2 2
+size 0.3 0.7
tex 40 40
-alpha 256 256 384
+alpha 256 256 984
gravity 1
airfriction 0.2
bounce 1.5
liquidfriction 0.8
velocityoffset 0 0 80
-velocityjitter 256 256 256
-velocitymultiplier -0.1
+velocityjitter 156 156 156
+velocitymultiplier -0.3
+stretchfactor 0.4
+effect rocket_guide
+countabsolute 1
+type smoke
+tex 65 65
+color 0x903010 0xFFD030
+size 10 10
+sizeincrease 300
+alpha 100 100 500
// gauntlet laser
velocitymultiplier 20
velocityoffset 0 0 10
airfriction 1
+
+//happy death fx for cl_gentle
+effect happy_damage_dissolve
+tex 69 69
+count 30
+type alphastatic
+color 0x00FFFF 0xFF00FF
+size 32 32
+sizeincrease -10
+alpha 256 256 228
+gravity -0.4
+bounce 1.5
+airfriction 3
+liquidfriction 6
+velocityjitter 312 312 312
+effect happy_damage_dissolve
+tex 69 69
+count 30
+type alphastatic
+color 0xFF00FF 0xFFFF00
+size 32 32
+sizeincrease -10
+alpha 256 256 228
+gravity -0.4
+bounce 1.5
+airfriction 3
+liquidfriction 6
+velocityjitter 312 312 312
+effect happy_damage_dissolve
+tex 69 69
+count 30
+type alphastatic
+color 0xFFFF00 0x00FFFF
+size 32 32
+sizeincrease -10
+alpha 256 256 228
+gravity -0.4
+bounce 1.5
+airfriction 3
+liquidfriction 6
+velocityjitter 312 312 312
+
+
+//happy damage fx for cl_gentle
+effect happy_damage_hit
+tex 69 69
+count 0.2
+type alphastatic
+color 0x00FFFF 0xFF00FF
+size 26 26
+sizeincrease -28
+alpha 128 128 192
+gravity -0.4
+bounce 1.5
+airfriction 5
+liquidfriction 10
+velocityjitter 156 156 156
+effect happy_damage_hit
+tex 69 69
+count 0.2
+type alphastatic
+color 0xFF00FF 0xFFFF00
+size 26 26
+sizeincrease -28
+alpha 128 128 192
+gravity -0.4
+bounce 1.5
+airfriction 5
+liquidfriction 10
+velocityjitter 156 156 156
+effect happy_damage_hit
+tex 69 69
+count 0.2
+type alphastatic
+color 0xFFFF00 0x00FFFF
+size 26 26
+sizeincrease -28
+alpha 128 128 192
+gravity -0.4
+bounce 1.5
+airfriction 5
+liquidfriction 10
+velocityjitter 156 156 156
\ No newline at end of file
--- /dev/null
+title WickedX
+author sev
+
+// Colors: 'Red Green Blue'
+// Suffixes: Clicked (_c), Disabled (_d), Focused (_f), Normal (_n)
+
+// Background layer scaling:
+// Crop (c), Letterbox (l), Height (h), Width (w), Stretch (s)
+// Background layer positioning:
+// Top Left (7), Top Center (8) Top Right (9)
+// Middle Left (4), Middle Center (5) Middle Right (6)
+// Bottom Left (1), Bottom Center (2) Bottom Right (3)
+// ALIGN_BACKGROUND(_INGAME) spspsp, s=Scale p=Position
+
+//------------------------------------------------------------------------------
+// Structure (e.g. positions, sizes, margins)
+//------------------------------------------------------------------------------
+// item: color picker
+// uses "colorpicker" images
+MARGIN_COLORPICKER '0 0 0'
+
+// item: dialog
+// uses "border" images
+// uses "closebutton" images
+MARGIN_TOP 8
+MARGIN_BOTTOM 8
+MARGIN_LEFT 8
+MARGIN_RIGHT 8
+MARGIN_COLUMNS 4
+MARGIN_ROWS 4
+HEIGHT_DIALOGBORDER 1
+
+// font sizes (used for everything)
+FONTSIZE_NORMAL 12
+HEIGHT_NORMAL 1.5
+FONTSIZE_TITLE 16
+HEIGHT_TITLE 1.5
+HEIGHT_ZOOMEDTITLE -1
+
+// general
+// uses "background" images
+// uses "background_ingame" images
+ALIGN_BACKGROUND h5h5
+ALIGN_BACKGROUND_INGAME h5
+ALPHA_BACKGROUND_INGAME 1
+ALPHA_DISABLED 0.2
+ALPHA_BEHIND 0.5
+ALPHA_TEXT 0.7
+
+// mouse
+// uses "cursor" images
+SIZE_CURSOR '32 32 0'
+OFFSET_CURSOR '0 0 0'
+ALPHA_CURSOR_INTRO 0
+
+// nexposee positions of windows (they are the scale transformation
+// centers, NOT the actual positions of the windows!)
+POSITION_DIALOG_MULTIPLAYER '0.8 0.4 0'
+POSITION_DIALOG_SINGLEPLAYER '0.2 0.4 0'
+POSITION_DIALOG_SETTINGS '0.5 0.95 0'
+POSITION_DIALOG_CREDITS '-0.05 1.2 0'
+POSITION_DIALOG_QUIT '1.05 1.2 0'
+
+// tooltips
+// uses "tooltip" images
+MARGIN_TOOLTIP '8 8 0'
+BORDER_TOOLTIP '16 16 0'
+FONTSIZE_TOOLTIP 12
+ALPHA_TOOLTIP 0.7
+WIDTH_TOOLTIP 0.3
+AVOID_TOOLTIP '8 8 0'
+
+//------------------------------------------------------------------------------
+// Colors (e.g. font colors, field colors)
+//------------------------------------------------------------------------------
+// item: campaign
+ALPHA_CAMPAIGN_SELECTABLE 0.8
+COLOR_CAMPAIGN_SELECTABLE '1 1 1'
+ALPHA_CAMPAIGN_CURRENT 1
+COLOR_CAMPAIGN_CURRENT '1 1 1'
+ALPHA_CAMPAIGN_FUTURE 0.2
+COLOR_CAMPAIGN_FUTURE '1 1 1'
+ALPHA_CAMPAIGN_DESCRIPTION 0.7
+
+// item: credits list
+COLOR_CREDITS_TITLE '0.875 0.375 0'
+ALPHA_CREDITS_TITLE 1
+COLOR_CREDITS_FUNCTION '0 0.1875 0.4375'
+ALPHA_CREDITS_FUNCTION 0.5
+COLOR_CREDITS_PERSON '0 0.375 0.75'
+ALPHA_CREDITS_PERSON 0.875
+ROWS_CREDITS 20
+WIDTH_CREDITS 0.5
+
+// item: cvar list
+ALPHA_CVARLIST_SAVED 1
+ALPHA_CVARLIST_TEMPORARY 0.7
+COLOR_CVARLIST_CHANGED '0 0.375 0.75'
+COLOR_CVARLIST_REVERTBUTTON '1 0 0'
+COLOR_CVARLIST_UNCHANGED '1 1 1'
+
+// item: list box
+COLOR_LISTBOX_SELECTED '0.875 0.375 0'
+ALPHA_LISTBOX_SELECTED 1
+COLOR_LISTBOX_WAITING '1 1 1'
+ALPHA_LISTBOX_WAITING 0.5
+
+// item: map list
+COLOR_MAPLIST_TITLE '1 1 1'
+COLOR_MAPLIST_AUTHOR '0 0.375 0.75'
+COLOR_MAPLIST_INCLUDEDBG '0 0.1875 0.4375'
+ALPHA_MAPLIST_INCLUDEDFG 1
+ALPHA_MAPLIST_INCLUDEDBG 0.375
+ALPHA_MAPLIST_NOTINCLUDEDFG 0.25
+
+// item: nexposee
+ALPHAS_MAINMENU '0.8 0.9 1'
+
+// item: player model
+COLOR_MODELTITLE '1 1 1'
+ALPHA_MODELTITLE 1
+
+// item: server info
+COLOR_SERVERINFO_NAME '1 1 1'
+COLOR_SERVERINFO_IP '0.875 0.375 0'
+
+// item: server list
+ALPHA_SERVERLIST_FULL 0.4
+ALPHA_SERVERLIST_EMPTY 0.7
+COLOR_SERVERLIST_LOWPING '0 1 0'
+COLOR_SERVERLIST_MEDPING '1 0.75 0'
+COLOR_SERVERLIST_HIGHPING '1 0 0'
+ALPHA_SERVERLIST_HIGHPING 0.4
+ALPHA_SERVERLIST_FAVORITE 0.8
+COLOR_SERVERLIST_FAVORITE '1 1 1'
+
+// item: skin list
+COLOR_SKINLIST_TITLE '1 1 1'
+COLOR_SKINLIST_AUTHOR '0 0.375 0.75'
+
+//------------------------------------------------------------------------------
+// Images (colors multiplied to images)
+//------------------------------------------------------------------------------
+// item: button
+// uses "button" images
+// uses "buttongray" images
+// uses "bigbutton" images
+// uses "bigbuttongray" images
+COLOR_BUTTON_N '1 1 1'
+COLOR_BUTTON_C '1 1 1'
+COLOR_BUTTON_F '1 1 1'
+COLOR_BUTTON_D '1 1 1'
+
+// item: checkbox
+// uses "checkbox" images
+COLOR_CHECKBOX_N '1 1 1'
+COLOR_CHECKBOX_C '0.5 0.75 1'
+COLOR_CHECKBOX_F '0.5 0.75 1'
+COLOR_CHECKBOX_D '1 1 1'
+
+// item: crosshair button
+// uses "crosshairbutton" images
+
+// dialog background colors
+// uses "border" images
+COLOR_DIALOG_MULTIPLAYER '1 1 1'
+COLOR_DIALOG_SETTINGS '1 1 1'
+COLOR_DIALOG_TEAMSELECT '1 1 1'
+COLOR_DIALOG_QUIT '1 1 1'
+COLOR_DIALOG_ADVANCED '1 1 1'
+COLOR_DIALOG_MUTATORS '1 1 1'
+COLOR_DIALOG_MAPINFO '1 1 1'
+COLOR_DIALOG_USERBIND '1 1 1'
+COLOR_DIALOG_SINGLEPLAYER '1 1 1'
+COLOR_DIALOG_CREDITS '1 1 1'
+COLOR_DIALOG_WEAPONS '1 1 1'
+COLOR_DIALOG_RADAR '1 1 1'
+COLOR_DIALOG_SERVERINFO '1 1 1'
+COLOR_DIALOG_CVARS '1 0 0'
+
+// item: input box
+// uses "inputbox" images
+COLOR_INPUTBOX_N '1 1 1'
+COLOR_INPUTBOX_F '1 1 1'
+MARGIN_INPUTBOX_CHARS 1
+
+// item: key grabber
+COLOR_KEYGRABBER_TITLES '1 1 1'
+ALPHA_KEYGRABBER_TITLES 1
+COLOR_KEYGRABBER_KEYS '1 1 1'
+ALPHA_KEYGRABBER_KEYS 0.7
+
+// item: player color button
+// uses "colorbutton" images
+// uses "color" images
+
+// item: player name editor
+// uses "charmap" images
+// uses "charmapbutton" images
+
+// item: radio button
+// uses "radiobutton" images
+COLOR_RADIOBUTTON_N '1 1 1'
+COLOR_RADIOBUTTON_C '1 1 1'
+COLOR_RADIOBUTTON_F '1 1 1'
+COLOR_RADIOBUTTON_D '1 1 1'
+
+// item: scrollbar
+// uses "scrollbar" images
+COLOR_SCROLLBAR_N '1 1 1'
+COLOR_SCROLLBAR_C '0.5 0.75 1'
+COLOR_SCROLLBAR_F '0.5 0.75 1'
+COLOR_SCROLLBAR_S '0.25 0.25 0.25'
+WIDTH_SCROLLBAR 16
+
+// item: slider
+// uses "slider" images
+COLOR_SLIDER_N '1 1 1'
+COLOR_SLIDER_C '0.5 0.75 1'
+COLOR_SLIDER_F '0.5 0.75 1'
+COLOR_SLIDER_D '1 1 1'
+COLOR_SLIDER_S '0.25 0.25 0.25'
+WIDTH_SLIDERTEXT 0.333333333333
+TOLERANCE_SLIDER '0.2 2 0'
--- /dev/null
+0 0.00048828125 0.00048828125 0.06201171875 0.06201171875
+1 0.06298828125 0.00048828125 0.12451171875 0.06201171875
+2 0.12548828125 0.00048828125 0.18701171875 0.06201171875
+3 0.18798828125 0.00048828125 0.24951171875 0.06201171875
+4 0.25048828125 0.00048828125 0.31201171875 0.06201171875
+5 0.31298828125 0.00048828125 0.37451171875 0.06201171875
+6 0.37548828125 0.00048828125 0.43701171875 0.06201171875
+7 0.43798828125 0.00048828125 0.49951171875 0.06201171875
+8 0.50048828125 0.00048828125 0.56201171875 0.06201171875
+9 0.56298828125 0.00048828125 0.62451171875 0.06201171875
+10 0.62548828125 0.00048828125 0.68701171875 0.06201171875
+11 0.68798828125 0.00048828125 0.74951171875 0.06201171875
+12 0.75048828125 0.00048828125 0.81201171875 0.06201171875
+13 0.81298828125 0.00048828125 0.87451171875 0.06201171875
+14 0.87548828125 0.00048828125 0.93701171875 0.06201171875
+15 0.93798828125 0.00048828125 0.99951171875 0.06201171875
+16 0.00048828125 0.06298828125 0.06201171875 0.12451171875
+17 0.06298828125 0.06298828125 0.12451171875 0.12451171875
+18 0.12548828125 0.06298828125 0.18701171875 0.12451171875
+19 0.18798828125 0.06298828125 0.24951171875 0.12451171875
+20 0.25048828125 0.06298828125 0.31201171875 0.12451171875
+21 0.31298828125 0.06298828125 0.37451171875 0.12451171875
+22 0.37548828125 0.06298828125 0.43701171875 0.12451171875
+23 0.43798828125 0.06298828125 0.49951171875 0.12451171875
+24 0.50048828125 0.06298828125 0.56201171875 0.12451171875
+25 0.56298828125 0.06298828125 0.62451171875 0.12451171875
+26 0.62548828125 0.06298828125 0.68701171875 0.12451171875
+27 0.68798828125 0.06298828125 0.74951171875 0.12451171875
+28 0.75048828125 0.06298828125 0.81201171875 0.12451171875
+29 0.81298828125 0.06298828125 0.87451171875 0.12451171875
+30 0.87548828125 0.06298828125 0.93701171875 0.12451171875
+31 0.93798828125 0.06298828125 0.99951171875 0.12451171875
+32 0.00048828125 0.12548828125 0.06201171875 0.18701171875
+33 0.06298828125 0.12548828125 0.12451171875 0.18701171875
+34 0.12548828125 0.12548828125 0.18701171875 0.18701171875
+35 0.18798828125 0.12548828125 0.24951171875 0.18701171875
+36 0.25048828125 0.12548828125 0.31201171875 0.18701171875
+37 0.31298828125 0.12548828125 0.37451171875 0.18701171875
+38 0.37548828125 0.12548828125 0.43701171875 0.18701171875
+39 0.43798828125 0.12548828125 0.49951171875 0.18701171875
+40 0.50048828125 0.12548828125 0.56201171875 0.18701171875
+41 0.56298828125 0.12548828125 0.62451171875 0.18701171875
+42 0.62548828125 0.12548828125 0.68701171875 0.18701171875
+43 0.68798828125 0.12548828125 0.74951171875 0.18701171875
+44 0.75048828125 0.12548828125 0.81201171875 0.18701171875
+45 0.81298828125 0.12548828125 0.87451171875 0.18701171875
+46 0.87548828125 0.12548828125 0.93701171875 0.18701171875
+47 0.93798828125 0.12548828125 0.99951171875 0.18701171875
+48 0.00048828125 0.18798828125 0.06201171875 0.24951171875
+49 0.06298828125 0.18798828125 0.12451171875 0.24951171875
+50 0.12548828125 0.18798828125 0.18701171875 0.24951171875
+51 0.18798828125 0.18798828125 0.24951171875 0.24951171875
+52 0.25048828125 0.18798828125 0.31201171875 0.24951171875
+53 0.31298828125 0.18798828125 0.37451171875 0.24951171875
+54 0.37548828125 0.18798828125 0.43701171875 0.24951171875
+55 0.43798828125 0.18798828125 0.49951171875 0.24951171875
+56 0.50048828125 0.18798828125 0.56201171875 0.24951171875
+57 0.56298828125 0.18798828125 0.62451171875 0.24951171875
+58 0.62548828125 0.18798828125 0.68701171875 0.24951171875
+59 0.68798828125 0.18798828125 0.74951171875 0.24951171875
+60 0.75048828125 0.18798828125 0.81201171875 0.24951171875
+61 0.81298828125 0.18798828125 0.87451171875 0.24951171875
+62 0.87548828125 0.18798828125 0.93701171875 0.24951171875
+63 0.93798828125 0.18798828125 0.99951171875 0.24951171875
+64 0.00048828125 0.25048828125 0.06201171875 0.31201171875
+65 0.06298828125 0.25048828125 0.12451171875 0.31201171875
+66 0.12548828125 0.25048828125 0.18701171875 0.31201171875
+67 0.18798828125 0.25048828125 0.24951171875 0.31201171875
+68 0.25048828125 0.25048828125 0.31201171875 0.31201171875
+69 0.31298828125 0.25048828125 0.37451171875 0.31201171875
+70 0.37548828125 0.25048828125 0.43701171875 0.31201171875
+71 0.43798828125 0.25048828125 0.49951171875 0.31201171875
+72 0.50048828125 0.25048828125 0.56201171875 0.31201171875
+73 0.56298828125 0.25048828125 0.62451171875 0.31201171875
+74 0.62548828125 0.25048828125 0.68701171875 0.31201171875
+75 0.68798828125 0.25048828125 0.74951171875 0.31201171875
+76 0.75048828125 0.25048828125 0.81201171875 0.31201171875
+77 0.81298828125 0.25048828125 0.87451171875 0.31201171875
+78 0.87548828125 0.25048828125 0.93701171875 0.31201171875
+79 0.93798828125 0.25048828125 0.99951171875 0.31201171875
+80 0.00048828125 0.31298828125 0.06201171875 0.37451171875
+81 0.06298828125 0.31298828125 0.12451171875 0.37451171875
+82 0.12548828125 0.31298828125 0.18701171875 0.37451171875
+83 0.18798828125 0.31298828125 0.24951171875 0.37451171875
+84 0.25048828125 0.31298828125 0.31201171875 0.37451171875
+85 0.31298828125 0.31298828125 0.37451171875 0.37451171875
+86 0.37548828125 0.31298828125 0.43701171875 0.37451171875
+87 0.43798828125 0.31298828125 0.49951171875 0.37451171875
+88 0.50048828125 0.31298828125 0.56201171875 0.37451171875
+89 0.56298828125 0.31298828125 0.62451171875 0.37451171875
+90 0.62548828125 0.31298828125 0.68701171875 0.37451171875
+91 0.68798828125 0.31298828125 0.74951171875 0.37451171875
+92 0.75048828125 0.31298828125 0.81201171875 0.37451171875
+93 0.81298828125 0.31298828125 0.87451171875 0.37451171875
+94 0.87548828125 0.31298828125 0.93701171875 0.37451171875
+95 0.93798828125 0.31298828125 0.99951171875 0.37451171875
+96 0.00048828125 0.37548828125 0.06201171875 0.43701171875
+97 0.06298828125 0.37548828125 0.12451171875 0.43701171875
+98 0.12548828125 0.37548828125 0.18701171875 0.43701171875
+99 0.18798828125 0.37548828125 0.24951171875 0.43701171875
+100 0.25048828125 0.37548828125 0.31201171875 0.43701171875
+101 0.31298828125 0.37548828125 0.37451171875 0.43701171875
+102 0.37548828125 0.37548828125 0.43701171875 0.43701171875
+103 0.43798828125 0.37548828125 0.49951171875 0.43701171875
+104 0.50048828125 0.37548828125 0.56201171875 0.43701171875
+105 0.56298828125 0.37548828125 0.62451171875 0.43701171875
+106 0.62548828125 0.37548828125 0.68701171875 0.43701171875
+107 0.68798828125 0.37548828125 0.74951171875 0.43701171875
+108 0.75048828125 0.37548828125 0.81201171875 0.43701171875
+109 0.81298828125 0.37548828125 0.87451171875 0.43701171875
+110 0.87548828125 0.37548828125 0.93701171875 0.43701171875
+111 0.93798828125 0.37548828125 0.99951171875 0.43701171875
+112 0.00048828125 0.43798828125 0.06201171875 0.49951171875
+113 0.06298828125 0.43798828125 0.12451171875 0.49951171875
+114 0.12548828125 0.43798828125 0.18701171875 0.49951171875
+115 0.18798828125 0.43798828125 0.24951171875 0.49951171875
+116 0.25048828125 0.43798828125 0.31201171875 0.49951171875
+117 0.31298828125 0.43798828125 0.37451171875 0.49951171875
+118 0.37548828125 0.43798828125 0.43701171875 0.49951171875
+119 0.43798828125 0.43798828125 0.49951171875 0.49951171875
+120 0.50048828125 0.43798828125 0.56201171875 0.49951171875
+121 0.56298828125 0.43798828125 0.62451171875 0.49951171875
+122 0.62548828125 0.43798828125 0.68701171875 0.49951171875
+123 0.68798828125 0.43798828125 0.74951171875 0.49951171875
+124 0.75048828125 0.43798828125 0.81201171875 0.49951171875
+125 0.81298828125 0.43798828125 0.87451171875 0.49951171875
+126 0.87548828125 0.43798828125 0.93701171875 0.49951171875
+127 0.93798828125 0.43798828125 0.99951171875 0.49951171875
+128 0.00048828125 0.50048828125 0.06201171875 0.56201171875
+129 0.06298828125 0.50048828125 0.12451171875 0.56201171875
+130 0.12548828125 0.50048828125 0.18701171875 0.56201171875
+131 0.18798828125 0.50048828125 0.24951171875 0.56201171875
+132 0.25048828125 0.50048828125 0.31201171875 0.56201171875
+133 0.31298828125 0.50048828125 0.37451171875 0.56201171875
+134 0.37548828125 0.50048828125 0.43701171875 0.56201171875
+135 0.43798828125 0.50048828125 0.49951171875 0.56201171875
+136 0.50048828125 0.50048828125 0.56201171875 0.56201171875
+137 0.56298828125 0.50048828125 0.62451171875 0.56201171875
+138 0.62548828125 0.50048828125 0.68701171875 0.56201171875
+139 0.68798828125 0.50048828125 0.74951171875 0.56201171875
+140 0.75048828125 0.50048828125 0.81201171875 0.56201171875
+141 0.81298828125 0.50048828125 0.87451171875 0.56201171875
+142 0.87548828125 0.50048828125 0.93701171875 0.56201171875
+143 0.93798828125 0.50048828125 0.99951171875 0.56201171875
+144 0.00048828125 0.56298828125 0.06201171875 0.62451171875
+145 0.06298828125 0.56298828125 0.12451171875 0.62451171875
+146 0.12548828125 0.56298828125 0.18701171875 0.62451171875
+147 0.18798828125 0.56298828125 0.24951171875 0.62451171875
+148 0.25048828125 0.56298828125 0.31201171875 0.62451171875
+149 0.31298828125 0.56298828125 0.37451171875 0.62451171875
+150 0.37548828125 0.56298828125 0.43701171875 0.62451171875
+151 0.43798828125 0.56298828125 0.49951171875 0.62451171875
+152 0.50048828125 0.56298828125 0.56201171875 0.62451171875
+153 0.56298828125 0.56298828125 0.62451171875 0.62451171875
+154 0.62548828125 0.56298828125 0.68701171875 0.62451171875
+155 0.68798828125 0.56298828125 0.74951171875 0.62451171875
+156 0.75048828125 0.56298828125 0.81201171875 0.62451171875
+157 0.81298828125 0.56298828125 0.87451171875 0.62451171875
+158 0.87548828125 0.56298828125 0.93701171875 0.62451171875
+159 0.93798828125 0.56298828125 0.99951171875 0.62451171875
+1000 0 0.62548828125 1 0.68701171875
+1001 0 0.68798828125 1 0.74951171875
+1002 0 0.75048828125 1 0.81201171875
+1003 0 0.81298828125 1 0.87451171875
+1004 0 0.87548828125 1 0.93701171875
+1005 0 0.93798828125 1 0.99951171875
-0 0.001953125 0.001953125 0.123046875 0.123046875
-1 0.126953125 0.001953125 0.248046875 0.123046875
-2 0.251953125 0.001953125 0.373046875 0.123046875
-3 0.376953125 0.001953125 0.498046875 0.123046875
-4 0.501953125 0.001953125 0.623046875 0.123046875
-5 0.626953125 0.001953125 0.748046875 0.123046875
-6 0.751953125 0.001953125 0.873046875 0.123046875
-7 0.876953125 0.001953125 0.998046875 0.123046875
-8 0.001953125 0.126953125 0.123046875 0.248046875
-9 0.126953125 0.126953125 0.248046875 0.248046875
-10 0.251953125 0.126953125 0.373046875 0.248046875
-11 0.376953125 0.126953125 0.498046875 0.248046875
-12 0.501953125 0.126953125 0.623046875 0.248046875
-13 0.626953125 0.126953125 0.748046875 0.248046875
-14 0.751953125 0.126953125 0.873046875 0.248046875
-15 0.876953125 0.126953125 0.998046875 0.248046875
-16 0.001953125 0.251953125 0.123046875 0.373046875
-17 0.126953125 0.251953125 0.248046875 0.373046875
-18 0.251953125 0.251953125 0.373046875 0.373046875
-19 0.376953125 0.251953125 0.498046875 0.373046875
-20 0.501953125 0.251953125 0.623046875 0.373046875
-21 0.626953125 0.251953125 0.748046875 0.373046875
-22 0.751953125 0.251953125 0.873046875 0.373046875
-23 0.876953125 0.251953125 0.998046875 0.373046875
-24 0.001953125 0.376953125 0.123046875 0.498046875
-25 0.126953125 0.376953125 0.248046875 0.498046875
-26 0.251953125 0.376953125 0.373046875 0.498046875
-27 0.376953125 0.376953125 0.498046875 0.498046875
-28 0.501953125 0.376953125 0.623046875 0.498046875
-29 0.626953125 0.376953125 0.748046875 0.498046875
-30 0.751953125 0.376953125 0.873046875 0.498046875
-31 0.876953125 0.376953125 0.998046875 0.498046875
-32 0.001953125 0.501953125 0.123046875 0.623046875
-33 0.126953125 0.501953125 0.248046875 0.623046875
-34 0.251953125 0.501953125 0.373046875 0.623046875
-35 0.376953125 0.501953125 0.498046875 0.623046875
-36 0.501953125 0.501953125 0.623046875 0.623046875
-37 0.626953125 0.501953125 0.748046875 0.623046875
-38 0.751953125 0.501953125 0.873046875 0.623046875
-39 0.876953125 0.501953125 0.998046875 0.623046875
-40 0.001953125 0.626953125 0.123046875 0.748046875
-41 0.126953125 0.626953125 0.248046875 0.748046875
-42 0.251953125 0.626953125 0.373046875 0.748046875
-43 0.376953125 0.626953125 0.498046875 0.748046875
-44 0.501953125 0.626953125 0.623046875 0.748046875
-45 0.626953125 0.626953125 0.748046875 0.748046875
-46 0.751953125 0.626953125 0.873046875 0.748046875
-47 0.876953125 0.626953125 0.998046875 0.748046875
-48 0.001953125 0.751953125 0.123046875 0.873046875
-49 0.126953125 0.751953125 0.248046875 0.873046875
-50 0.251953125 0.751953125 0.373046875 0.873046875
-51 0.376953125 0.751953125 0.498046875 0.873046875
-52 0.501953125 0.751953125 0.623046875 0.873046875
-53 0.626953125 0.751953125 0.748046875 0.873046875
-54 0.751953125 0.751953125 0.873046875 0.873046875
-55 0.876953125 0.751953125 0.998046875 0.873046875
-56 0.001953125 0.876953125 0.123046875 0.998046875
-57 0.126953125 0.876953125 0.248046875 0.998046875
-58 0.251953125 0.876953125 0.373046875 0.998046875
-59 0.376953125 0.876953125 0.498046875 0.998046875
-// 60 0.501953125 0.876953125 0.623046875 0.998046875
-61 0.626953125 0.876953125 0.748046875 0.998046875
-62 0.751953125 0.876953125 0.873046875 0.998046875
-63 0.876953125 0.876953125 0.998046875 0.998046875
+0 0.00048828125 0.00048828125 0.06201171875 0.06201171875
+1 0.06298828125 0.00048828125 0.12451171875 0.06201171875
+2 0.12548828125 0.00048828125 0.18701171875 0.06201171875
+3 0.18798828125 0.00048828125 0.24951171875 0.06201171875
+4 0.25048828125 0.00048828125 0.31201171875 0.06201171875
+5 0.31298828125 0.00048828125 0.37451171875 0.06201171875
+6 0.37548828125 0.00048828125 0.43701171875 0.06201171875
+7 0.43798828125 0.00048828125 0.49951171875 0.06201171875
+8 0.50048828125 0.00048828125 0.56201171875 0.06201171875
+9 0.56298828125 0.00048828125 0.62451171875 0.06201171875
+10 0.62548828125 0.00048828125 0.68701171875 0.06201171875
+11 0.68798828125 0.00048828125 0.74951171875 0.06201171875
+12 0.75048828125 0.00048828125 0.81201171875 0.06201171875
+13 0.81298828125 0.00048828125 0.87451171875 0.06201171875
+14 0.87548828125 0.00048828125 0.93701171875 0.06201171875
+15 0.93798828125 0.00048828125 0.99951171875 0.06201171875
+16 0.00048828125 0.06298828125 0.06201171875 0.12451171875
+17 0.06298828125 0.06298828125 0.12451171875 0.12451171875
+18 0.12548828125 0.06298828125 0.18701171875 0.12451171875
+19 0.18798828125 0.06298828125 0.24951171875 0.12451171875
+20 0.25048828125 0.06298828125 0.31201171875 0.12451171875
+21 0.31298828125 0.06298828125 0.37451171875 0.12451171875
+22 0.37548828125 0.06298828125 0.43701171875 0.12451171875
+23 0.43798828125 0.06298828125 0.49951171875 0.12451171875
+24 0.50048828125 0.06298828125 0.56201171875 0.12451171875
+25 0.56298828125 0.06298828125 0.62451171875 0.12451171875
+26 0.62548828125 0.06298828125 0.68701171875 0.12451171875
+27 0.68798828125 0.06298828125 0.74951171875 0.12451171875
+28 0.75048828125 0.06298828125 0.81201171875 0.12451171875
+29 0.81298828125 0.06298828125 0.87451171875 0.12451171875
+30 0.87548828125 0.06298828125 0.93701171875 0.12451171875
+31 0.93798828125 0.06298828125 0.99951171875 0.12451171875
+32 0.00048828125 0.12548828125 0.06201171875 0.18701171875
+33 0.06298828125 0.12548828125 0.12451171875 0.18701171875
+34 0.12548828125 0.12548828125 0.18701171875 0.18701171875
+35 0.18798828125 0.12548828125 0.24951171875 0.18701171875
+36 0.25048828125 0.12548828125 0.31201171875 0.18701171875
+37 0.31298828125 0.12548828125 0.37451171875 0.18701171875
+38 0.37548828125 0.12548828125 0.43701171875 0.18701171875
+39 0.43798828125 0.12548828125 0.49951171875 0.18701171875
+40 0.50048828125 0.12548828125 0.56201171875 0.18701171875
+41 0.56298828125 0.12548828125 0.62451171875 0.18701171875
+42 0.62548828125 0.12548828125 0.68701171875 0.18701171875
+43 0.68798828125 0.12548828125 0.74951171875 0.18701171875
+44 0.75048828125 0.12548828125 0.81201171875 0.18701171875
+45 0.81298828125 0.12548828125 0.87451171875 0.18701171875
+46 0.87548828125 0.12548828125 0.93701171875 0.18701171875
+47 0.93798828125 0.12548828125 0.99951171875 0.18701171875
+48 0.00048828125 0.18798828125 0.06201171875 0.24951171875
+49 0.06298828125 0.18798828125 0.12451171875 0.24951171875
+50 0.12548828125 0.18798828125 0.18701171875 0.24951171875
+51 0.18798828125 0.18798828125 0.24951171875 0.24951171875
+52 0.25048828125 0.18798828125 0.31201171875 0.24951171875
+53 0.31298828125 0.18798828125 0.37451171875 0.24951171875
+54 0.37548828125 0.18798828125 0.43701171875 0.24951171875
+55 0.43798828125 0.18798828125 0.49951171875 0.24951171875
+56 0.50048828125 0.18798828125 0.56201171875 0.24951171875
+57 0.56298828125 0.18798828125 0.62451171875 0.24951171875
+58 0.62548828125 0.18798828125 0.68701171875 0.24951171875
+59 0.68798828125 0.18798828125 0.74951171875 0.24951171875
+60 0.75048828125 0.18798828125 0.81201171875 0.24951171875
+61 0.81298828125 0.18798828125 0.87451171875 0.24951171875
+62 0.87548828125 0.18798828125 0.93701171875 0.24951171875
+63 0.93798828125 0.18798828125 0.99951171875 0.24951171875
+64 0.00048828125 0.25048828125 0.06201171875 0.31201171875
+65 0.06298828125 0.25048828125 0.12451171875 0.31201171875
+66 0.12548828125 0.25048828125 0.18701171875 0.31201171875
+67 0.18798828125 0.25048828125 0.24951171875 0.31201171875
+68 0.25048828125 0.25048828125 0.31201171875 0.31201171875
+69 0.31298828125 0.25048828125 0.37451171875 0.31201171875
+70 0.37548828125 0.25048828125 0.43701171875 0.31201171875
+71 0.43798828125 0.25048828125 0.49951171875 0.31201171875
+72 0.50048828125 0.25048828125 0.56201171875 0.31201171875
+73 0.56298828125 0.25048828125 0.62451171875 0.31201171875
+74 0.62548828125 0.25048828125 0.68701171875 0.31201171875
+75 0.68798828125 0.25048828125 0.74951171875 0.31201171875
+76 0.75048828125 0.25048828125 0.81201171875 0.31201171875
+77 0.81298828125 0.25048828125 0.87451171875 0.31201171875
+78 0.87548828125 0.25048828125 0.93701171875 0.31201171875
+79 0.93798828125 0.25048828125 0.99951171875 0.31201171875
+80 0.00048828125 0.31298828125 0.06201171875 0.37451171875
+81 0.06298828125 0.31298828125 0.12451171875 0.37451171875
+82 0.12548828125 0.31298828125 0.18701171875 0.37451171875
+83 0.18798828125 0.31298828125 0.24951171875 0.37451171875
+84 0.25048828125 0.31298828125 0.31201171875 0.37451171875
+85 0.31298828125 0.31298828125 0.37451171875 0.37451171875
+86 0.37548828125 0.31298828125 0.43701171875 0.37451171875
+87 0.43798828125 0.31298828125 0.49951171875 0.37451171875
+88 0.50048828125 0.31298828125 0.56201171875 0.37451171875
+89 0.56298828125 0.31298828125 0.62451171875 0.37451171875
+90 0.62548828125 0.31298828125 0.68701171875 0.37451171875
+91 0.68798828125 0.31298828125 0.74951171875 0.37451171875
+92 0.75048828125 0.31298828125 0.81201171875 0.37451171875
+93 0.81298828125 0.31298828125 0.87451171875 0.37451171875
+94 0.87548828125 0.31298828125 0.93701171875 0.37451171875
+95 0.93798828125 0.31298828125 0.99951171875 0.37451171875
+96 0.00048828125 0.37548828125 0.06201171875 0.43701171875
+97 0.06298828125 0.37548828125 0.12451171875 0.43701171875
+98 0.12548828125 0.37548828125 0.18701171875 0.43701171875
+99 0.18798828125 0.37548828125 0.24951171875 0.43701171875
+100 0.25048828125 0.37548828125 0.31201171875 0.43701171875
+101 0.31298828125 0.37548828125 0.37451171875 0.43701171875
+102 0.37548828125 0.37548828125 0.43701171875 0.43701171875
+103 0.43798828125 0.37548828125 0.49951171875 0.43701171875
+104 0.50048828125 0.37548828125 0.56201171875 0.43701171875
+105 0.56298828125 0.37548828125 0.62451171875 0.43701171875
+106 0.62548828125 0.37548828125 0.68701171875 0.43701171875
+107 0.68798828125 0.37548828125 0.74951171875 0.43701171875
+108 0.75048828125 0.37548828125 0.81201171875 0.43701171875
+109 0.81298828125 0.37548828125 0.87451171875 0.43701171875
+110 0.87548828125 0.37548828125 0.93701171875 0.43701171875
+111 0.93798828125 0.37548828125 0.99951171875 0.43701171875
+112 0.00048828125 0.43798828125 0.06201171875 0.49951171875
+113 0.06298828125 0.43798828125 0.12451171875 0.49951171875
+114 0.12548828125 0.43798828125 0.18701171875 0.49951171875
+115 0.18798828125 0.43798828125 0.24951171875 0.49951171875
+116 0.25048828125 0.43798828125 0.31201171875 0.49951171875
+117 0.31298828125 0.43798828125 0.37451171875 0.49951171875
+118 0.37548828125 0.43798828125 0.43701171875 0.49951171875
+119 0.43798828125 0.43798828125 0.49951171875 0.49951171875
+120 0.50048828125 0.43798828125 0.56201171875 0.49951171875
+121 0.56298828125 0.43798828125 0.62451171875 0.49951171875
+122 0.62548828125 0.43798828125 0.68701171875 0.49951171875
+123 0.68798828125 0.43798828125 0.74951171875 0.49951171875
+124 0.75048828125 0.43798828125 0.81201171875 0.49951171875
+125 0.81298828125 0.43798828125 0.87451171875 0.49951171875
+126 0.87548828125 0.43798828125 0.93701171875 0.49951171875
+127 0.93798828125 0.43798828125 0.99951171875 0.49951171875
+128 0.00048828125 0.50048828125 0.06201171875 0.56201171875
+129 0.06298828125 0.50048828125 0.12451171875 0.56201171875
+130 0.12548828125 0.50048828125 0.18701171875 0.56201171875
+131 0.18798828125 0.50048828125 0.24951171875 0.56201171875
+132 0.25048828125 0.50048828125 0.31201171875 0.56201171875
+133 0.31298828125 0.50048828125 0.37451171875 0.56201171875
+134 0.37548828125 0.50048828125 0.43701171875 0.56201171875
+135 0.43798828125 0.50048828125 0.49951171875 0.56201171875
+136 0.50048828125 0.50048828125 0.56201171875 0.56201171875
+137 0.56298828125 0.50048828125 0.62451171875 0.56201171875
+138 0.62548828125 0.50048828125 0.68701171875 0.56201171875
+139 0.68798828125 0.50048828125 0.74951171875 0.56201171875
+140 0.75048828125 0.50048828125 0.81201171875 0.56201171875
+141 0.81298828125 0.50048828125 0.87451171875 0.56201171875
+142 0.87548828125 0.50048828125 0.93701171875 0.56201171875
+143 0.93798828125 0.50048828125 0.99951171875 0.56201171875
+144 0.00048828125 0.56298828125 0.06201171875 0.62451171875
+145 0.06298828125 0.56298828125 0.12451171875 0.62451171875
+146 0.12548828125 0.56298828125 0.18701171875 0.62451171875
+147 0.18798828125 0.56298828125 0.24951171875 0.62451171875
+148 0.25048828125 0.56298828125 0.31201171875 0.62451171875
+149 0.31298828125 0.56298828125 0.37451171875 0.62451171875
+150 0.37548828125 0.56298828125 0.43701171875 0.62451171875
+151 0.43798828125 0.56298828125 0.49951171875 0.62451171875
+152 0.50048828125 0.56298828125 0.56201171875 0.62451171875
+153 0.56298828125 0.56298828125 0.62451171875 0.62451171875
+154 0.62548828125 0.56298828125 0.68701171875 0.62451171875
+155 0.68798828125 0.56298828125 0.74951171875 0.62451171875
+156 0.75048828125 0.56298828125 0.81201171875 0.62451171875
+157 0.81298828125 0.56298828125 0.87451171875 0.62451171875
+158 0.87548828125 0.56298828125 0.93701171875 0.62451171875
+159 0.93798828125 0.56298828125 0.99951171875 0.62451171875
+200 0 0.62548828125 1 0.68701171875
+201 0 0.68798828125 1 0.74951171875
+202 0 0.75048828125 1 0.81201171875
+203 0 0.81298828125 1 0.87451171875
+204 0 0.87548828125 1 0.93701171875
+205 0 0.93798828125 1 0.99951171875
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 70
sv_maxairstrafespeed 30
sv_aircontrol 150
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
--- /dev/null
+// These have been modified from Nexuiz 2.4.2's physicsQBR.cfg file
+sv_gravity 800
+sv_gravity 802
+sv_maxspeed 417
+sv_maxairspeed 202
+sv_stopspeed 100
+sv_accelerate 5.8
+sv_airaccelerate 5.5
+sv_friction 4.1
+edgefriction 1
+sv_stepheight 34
+sv_jumpvelocity 307
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0.207
+sv_airaccel_qw -0.93
+sv_airstopaccelerate 0
+sv_airstrafeaccelerate 0
+sv_maxairstrafespeed 0
+sv_aircontrol 0
+sv_aircontrol_power 2
+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 0
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
+++ /dev/null
-// Nexrun tweaked to suit CPM
-sv_gravity 800
-sv_maxspeed 320
-// CPMA: 320
-sv_maxairspeed 320
-// CPMA: 320
-sv_stopspeed 100
-sv_accelerate 15
-sv_airaccelerate 1
-sv_friction 8
-edgefriction 1
-sv_stepheight 34
-// CPMA: 18
-sv_jumpvelocity 270
-sv_wateraccelerate 4
-sv_waterfriction 1
-sv_airaccel_sideways_friction 0
-sv_airaccel_qw 0.95
-// CPMA: 1
-sv_airstopaccelerate 2.5
-sv_airstrafeaccelerate 70
-sv_maxairstrafespeed 30
-sv_aircontrol 150
-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 1
-sv_jumpspeedcap_min 0
-sv_jumpspeedcap_max 1
-sv_jumpspeedcap_max_disable_on_ramps 1
+++ /dev/null
-// CPMA tweaked to match the speeds in old Nexrun
-sv_gravity 800
-sv_maxspeed 400
-// CPMA: 320
-sv_maxairspeed 400
-// CPMA: 320
-sv_stopspeed 100
-sv_accelerate 15
-sv_airaccelerate 1
-sv_friction 8
-edgefriction 1
-sv_stepheight 34
-// CPMA: 18
-sv_jumpvelocity 270
-sv_wateraccelerate 4
-sv_waterfriction 1
-sv_airaccel_sideways_friction 0
-sv_airaccel_qw 0.95
-// CPMA: 1
-sv_airstopaccelerate 2.5
-sv_airstrafeaccelerate 70
-sv_maxairstrafespeed 30
-sv_aircontrol 150
-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 1
-sv_jumpspeedcap_min 0
-sv_jumpspeedcap_max 1
-sv_jumpspeedcap_max_disable_on_ramps 1
-// Xonotic 2.0-2.4.2 physics minus QW-bunnyhopping-bug, faster onground accel, CPMA air control
+// 2.0-2.4.2 physics minus QW-bunnyhopping-bug, faster onground accel, CPMA air control
sv_gravity 800
-sv_maxspeed 320
-sv_maxairspeed 320
+sv_maxspeed 400
+sv_maxairspeed 220
sv_stopspeed 100
-sv_accelerate 15
-sv_airaccelerate 5.5
-sv_friction 5
+sv_accelerate 12
+sv_airaccelerate 8
+sv_friction 7
edgefriction 1
sv_stepheight 34
sv_jumpvelocity 300
sv_wateraccelerate -1
sv_waterfriction -1
-sv_airaccel_sideways_friction -1
+sv_airaccel_sideways_friction -0.125
sv_airaccel_qw -0.95
sv_airstopaccelerate 0
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
-sv_aircontrol 70
+sv_aircontrol 100
+sv_aircontrol_power 3
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 0
sv_maxairstrafespeed 0
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 70
sv_maxairstrafespeed 30
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 9 // activates warsow movement mode
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 70
sv_maxairstrafespeed 30
sv_aircontrol 150
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccelerate 70
sv_maxairstrafespeed 30
sv_aircontrol 0
+sv_aircontrol_power 2
sv_warsowbunny_turnaccel 6 // activates warsow movement mode
sv_warsowbunny_accel 0.1585
sv_warsowbunny_topspeed 900
--- /dev/null
+// Nexrun tweaked to suit CPM
+sv_gravity 800
+sv_maxspeed 320
+// CPMA: 320
+sv_maxairspeed 320
+// CPMA: 320
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 1
+sv_friction 8
+edgefriction 1
+sv_stepheight 34
+// CPMA: 18
+sv_jumpvelocity 270
+sv_wateraccelerate 4
+sv_waterfriction 1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw 0.95
+// CPMA: 1
+sv_airstopaccelerate 2.5
+sv_airstrafeaccelerate 70
+sv_maxairstrafespeed 30
+sv_aircontrol 150
+sv_aircontrol_power 2
+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 1
+sv_jumpspeedcap_min 0
+sv_jumpspeedcap_max 1
+sv_jumpspeedcap_max_disable_on_ramps 1
case ENT_CLIENT_TUBANOTE: Ent_TubaNote(bIsNewEntity); break;
case ENT_CLIENT_WARPZONE: WarpZone_Read(bIsNewEntity); break;
case ENT_CLIENT_WARPZONE_CAMERA: WarpZone_Camera_Read(bIsNewEntity); break;
+ case ENT_CLIENT_TRIGGER_MUSIC: Ent_ReadTriggerMusic(); break;
default:
error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"));
break;
g_weaponswitchdelay = ReadByte() / 255.0;
+ g_balance_grenadelauncher_secondary_bouncefactor = ReadCoord();
+ g_balance_grenadelauncher_secondary_bouncestop = ReadCoord();
+
if(!postinit)
PostInit();
}
// NOTE: Could just do return instead of break...
switch(nTEID)
{
+ case TE_CSQC_TARGET_MUSIC:
+ Net_TargetMusic();
+ bHandled = true;
+ break;
case TE_CSQC_PICTURE:
Net_MapVote_Picture();
bHandled = true;
void CSQC_SPIDER_HUD();
void CSQC_RAPTOR_HUD();
+vector freeze_pmove_org, freeze_input_angles;
+
void CSQC_UpdateView(float w, float h)
{
entity e;
pmove_org = warpzone_fixview_origin - vo;
input_angles = warpzone_fixview_angles;
+ if(cvar("cl_lockview"))
+ {
+ pmove_org = warpzone_fixview_origin = freeze_pmove_org;
+ input_angles = freeze_input_angles;
+ R_SetView(VF_ORIGIN, pmove_org + vo);
+ R_SetView(VF_ANGLES, input_angles);
+ //R_SetView(VF_CL_VIEWANGLES, input_angles);
+ }
+ freeze_pmove_org = pmove_org;
+ freeze_input_angles = input_angles;
+
// Render the Scene
if(!intermission || !view_set)
{
}
#endif
+ TargetMusic_Advance();
Fog_Force();
drawframetime = max(0.000001, time - drawtime);
float log(float f) = #532;
void(entity e, entity ignore) tracetoss = #64;
+
+float(entity e, float ch) getsoundtime = #533; // (DP_SND_GETSOUNDTIME)
break;
case WEP_FIREBALL:
if(secondary)
+ {
+ // firemine goes out silently
+ }
+ else
{
org2 = org + backoff * 16;
pointparticles(particleeffectnum("fireball_explode"), org2, '0 0 0', 1);
if(!issilent)
sound(self, CHAN_PROJECTILE, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom
}
- else
- {
- // firemine goes out silently
- }
break;
default:
dprint("Unhandled damage of weapon ", ftos(hitwep), "\n");
if(type & 0x80)
{
- if(cvar("cl_gentle") > 1)
+ if(cvar("cl_gentle") == 2)
gentle_prefix = "";
+ else if(cvar("cl_gentle") == 3)
+ gentle_prefix = "happy_";
else
gentle_prefix = "morphed_";
}
#define HOOK_END 2
.float ping, ping_packetloss, ping_movementloss;
+
+float g_balance_grenadelauncher_secondary_bouncefactor;
+float g_balance_grenadelauncher_secondary_bouncestop;
wall.qc
modeleffects.qc
tuba.qc
+target_music.qc
//vehicles/spiderbot.qc
Main.qc
self.velocity_x = ReadCoord();
self.velocity_y = ReadCoord();
self.velocity_z = ReadCoord();
- self.gravity = ReadCoord();
-
+ if(f & 0x10)
+ self.gravity = ReadCoord();
+ else
+ self.gravity = 0; // none
self.move_origin = self.origin;
self.move_velocity = self.velocity;
}
- if(time == self.spawntime || (self.count & 0x80) || (f & 0x10))
+ if(time == self.spawntime || (self.count & 0x80) || (f & 0x08))
{
self.trail_oldorigin = self.origin;
if(!(self.count & 0x80))
self.maxs = '0 0 -3';
self.move_movetype = MOVETYPE_BOUNCE;
self.move_touch = SUB_Null;
+ self.move_bounce_factor = g_balance_grenadelauncher_secondary_bouncefactor;
+ self.move_bounce_stopspeed = g_balance_grenadelauncher_secondary_bouncestop;
break;
case PROJECTILE_PORTO_RED:
self.colormod = '2 1 1';
rr = RACE_RECORD;
t = stof(db_get(ClientProgsDB, strcat(shortmapname, rr, "time")));
- if(score && score < t || !t)
+ if(score && (score < t || !t)) {
db_put(ClientProgsDB, strcat(shortmapname, rr, "time"), ftos(score));
+ if(cvar("cl_autodemo_delete_keeprecords"))
+ {
+ f = cvar("cl_autodemo_delete");
+ f &~= 1;
+ cvar_set("cl_autodemo_delete", ftos(f)); // don't delete demo with new record!
+ }
+ }
if(t != crecordtime_prev) {
crecordtime_prev = t;
--- /dev/null
+float music_disabled;
+entity music_default;
+entity music_target;
+entity music_trigger;
+
+.float state;
+
+void TargetMusic_Advance()
+{
+ // run AFTER all the thinks!
+ entity best, e;
+ float s0;
+ best = music_default;
+ if(music_target && time < music_target.lifetime)
+ best = music_target;
+ if(music_trigger)
+ best = music_trigger;
+ for(e = world; (e = findfloat(e, enttype, ENT_CLIENT_TRIGGER_MUSIC)); ) if(e.noise)
+ {
+ s0 = e.state;
+ if(getsoundtime(e, CHAN_VOICE) < 0)
+ {
+ s0 = -1;
+ }
+ if(e == best)
+ {
+ // increase volume
+ if(e.fade_time > 0)
+ e.state = bound(0, e.state + frametime / e.fade_time, 1);
+ else
+ e.state = 1;
+ }
+ else
+ {
+ // decrease volume
+ if(e.fade_rate > 0)
+ e.state = bound(0, e.state - frametime / e.fade_rate, 1);
+ else
+ e.state = 0;
+ }
+ if(e.state != s0)
+ {
+ if(s0 < 0)
+ sound(e, CHAN_VOICE, e.noise, e.volume * e.state * cvar("bgmvolume"), ATTN_NONE); // restart
+ else
+ sound(e, CHAN_VOICE, "", e.volume * e.state * cvar("bgmvolume"), ATTN_NONE);
+ }
+ }
+ music_trigger = world;
+}
+
+void Net_TargetMusic()
+{
+ float vol, fai, fao, tim, id;
+ string noi, s;
+ entity e;
+
+ id = ReadShort();
+ vol = ReadByte() / 255.0;
+ fai = ReadByte() / 16.0;
+ fao = ReadByte() / 16.0;
+ tim = ReadByte();
+ noi = ReadString();
+
+ for(e = world; (e = findfloat(e, enttype, ENT_CLIENT_TRIGGER_MUSIC)); )
+ {
+ if(e.count == id)
+ break;
+ }
+ if(!e)
+ {
+ e = spawn();
+ e.enttype = ENT_CLIENT_TRIGGER_MUSIC;
+ }
+ s = e.noise;
+ if(e.noise)
+ strunzone(e.noise);
+ e.noise = strzone(noi);
+ if(e.noise != s)
+ {
+ precache_sound(e.noise);
+ sound(e, CHAN_VOICE, e.noise, 0, ATTN_NONE);
+ if(getsoundtime(e, CHAN_VOICE) < 0)
+ {
+ print("Cannot initialize sound ", e.noise, "\n");
+ strunzone(e.noise);
+ e.noise = string_null;
+ }
+ }
+ e.volume = vol;
+ e.fade_time = fai;
+ e.fade_rate = fao;
+ if(vol > 0)
+ {
+ if(tim == 0)
+ {
+ music_default = e;
+ if(!music_disabled)
+ {
+ e.state = 2;
+ localcmd("cd stop\n"); // just in case
+ music_disabled = 1;
+ }
+ }
+ else
+ {
+ music_target = e;
+ e.lifetime = time + tim;
+ }
+ }
+}
+
+void Ent_TriggerMusic_Think()
+{
+ if(WarpZoneLib_BoxTouchesBrush(view_origin, view_origin, self, world))
+ {
+ music_trigger = self;
+ }
+ self.nextthink = time;
+}
+
+void Ent_TriggerMusic_Remove()
+{
+ if(self.noise)
+ strunzone(self.noise);
+ self.noise = string_null;
+}
+
+void Ent_ReadTriggerMusic()
+{
+ float f;
+ string s;
+ f = ReadByte();
+ if(f & 4)
+ {
+ self.origin_x = ReadCoord();
+ self.origin_y = ReadCoord();
+ self.origin_z = ReadCoord();
+ }
+ if(f & 1)
+ {
+ self.modelindex = ReadShort();
+ if(self.modelindex)
+ {
+ self.mins_x = ReadCoord();
+ self.mins_y = ReadCoord();
+ self.mins_z = ReadCoord();
+ self.maxs_x = ReadCoord();
+ self.maxs_y = ReadCoord();
+ self.maxs_z = ReadCoord();
+ }
+ else
+ {
+ self.mins = '0 0 0';
+ self.maxs_x = ReadCoord();
+ self.maxs_y = ReadCoord();
+ self.maxs_z = ReadCoord();
+ }
+
+ self.volume = ReadByte() / 255.0;
+ self.fade_time = ReadByte() / 16.0;
+ self.fade_rate = ReadByte() / 16.0;
+ s = self.noise;
+ if(self.noise)
+ strunzone(self.noise);
+ self.noise = strzone(ReadString());
+ if(self.noise != s)
+ {
+ precache_sound(self.noise);
+ sound(self, CHAN_VOICE, self.noise, 0, ATTN_NONE);
+ if(getsoundtime(self, CHAN_VOICE) < 0)
+ {
+ print("Cannot initialize sound ", self.noise, "\n");
+ strunzone(self.noise);
+ self.noise = string_null;
+ }
+ }
+ }
+
+ setorigin(self, self.origin);
+ setsize(self, self.mins, self.maxs);
+ self.cnt = 1;
+ self.think = Ent_TriggerMusic_Think;
+ self.nextthink = time;
+}
const float TE_CSQC_VOTE = 108;
const float TE_CSQC_VOTERESET = 109;
const float TE_CSQC_ANNOUNCE = 110;
+const float TE_CSQC_TARGET_MUSIC = 111;
const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
const float RACE_NET_CHECKPOINT_CLEAR = 1;
const float ENT_CLIENT_TUBANOTE = 23;
const float ENT_CLIENT_WARPZONE = 24;
const float ENT_CLIENT_WARPZONE_CAMERA = 25;
+const float ENT_CLIENT_TRIGGER_MUSIC = 26;
const float ENT_CLIENT_TURRET = 40;
// on world: UNUSED
// on players: voice VOICE
// on entities: ambient AMBIENT
- // on csqc: UNUSED
+ // on csqc: background music BGM
float CHAN_TRIGGER = 3; // Triggers/Items
// on world: UNUSED
// on players: item pickup ITEMS
{ }
else if(startsWith(v, "weapon_"))
MapInfo_Map_supportedFeatures |= MAPINFO_FEATURE_WEAPONS;
+ else if(v == "target_music" || v == "trigger_music")
+ _MapInfo_Map_worldspawn_music = string_null; // don't use regular BGM
}
}
}
else
fputs(fh, strcat("cdtrack ", _MapInfo_Map_worldspawn_music, "\n"));
}
- else
+ else if(_MapInfo_Map_worldspawn_music)
{
n = tokenize_console(cvar_string("g_cdtracks_remaplist"));
s = strcat(" ", cvar_string("g_cdtracks_dontusebydefault"), " ");
entity e, s, sl;
me.TR(me);
- s = makeXonoticDecibelsSlider(-20, 0, 0.5, "bgmvolume");
- me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Music:"));
+ s = makeXonoticDecibelsSlider(-20, 0, 0.5, "mastervolume");
+ me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Master:"));
me.TD(me, 1, 2, s);
me.TR(me);
- me.TR(me);
- s = makeXonoticDecibelsSlider(-20, 0, 0.5, "volume");
- me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Master:"));
+ me.TDempty(me, 0.2);
+ s = makeXonoticDecibelsSlider(-20, 0, 0.5, "bgmvolume");
+ makeMulti(s, "snd_csqcchannel2volume");
+ me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Music:"));
me.TD(me, 1, 2, s);
me.TR(me);
me.TDempty(me, 0.2);
WriteString(MSG_ENTITY, world.fog);
else
WriteString(MSG_ENTITY, "");
- WriteByte(MSG_ENTITY, cvar("g_balance_armor_blockpercent") * 255.0);
- WriteByte(MSG_ENTITY, cvar("g_balance_weaponswitchdelay") * 255.0);
+ WriteByte(MSG_ENTITY, self.count * 255.0); // g_balance_armor_blockpercent
+ WriteByte(MSG_ENTITY, self.cnt * 255.0); // g_balance_weaponswitchdelay
+ WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_secondary_bouncefactor
+ WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_secondary_bouncestop
return TRUE;
}
+void ClientInit_CheckUpdate()
+{
+ self.nextthink = time;
+ if(self.count != cvar("g_balance_armor_blockpercent"))
+ {
+ self.count = cvar("g_balance_armor_blockpercent");
+ self.SendFlags |= 1;
+ }
+ if(self.cnt != cvar("g_balance_weaponswitchdelay"))
+ {
+ self.cnt = cvar("g_balance_weaponswitchdelay");
+ self.SendFlags |= 1;
+ }
+ if(self.bouncefactor != cvar("g_balance_grenadelauncher_secondary_bouncefactor"))
+ {
+ self.bouncefactor = cvar("g_balance_grenadelauncher_secondary_bouncefactor");
+ self.SendFlags |= 1;
+ }
+ if(self.bouncestop != cvar("g_balance_grenadelauncher_secondary_bouncestop"))
+ {
+ self.bouncestop = cvar("g_balance_grenadelauncher_secondary_bouncestop");
+ self.SendFlags |= 1;
+ }
+}
+
void ClientInit_Spawn()
{
- Net_LinkEntity(spawn(), FALSE, 0, ClientInit_SendEntity);
+ entity o;
+ entity e;
+ e.classname = "clientinit";
+ e.think = ClientInit_CheckUpdate;
+ e.nextthink = time;
+ Net_LinkEntity(e, FALSE, 0, ClientInit_SendEntity);
+ o = self;
+ self = e;
+ ClientInit_CheckUpdate();
+ self = o;
}
/*
else self.colormod = '1 1 1';
};*/
+.float oldcolormap;
void respawn(void)
{
+ if(self.modelindex != 0 && cvar("g_respawn_ghosts"))
+ {
+ self.solid = SOLID_NOT;
+ self.takedamage = DAMAGE_NO;
+ self.movetype = MOVETYPE_FLY;
+ self.velocity = '0 0 1' * cvar("g_respawn_ghosts_speed");
+ self.avelocity = randomvec() * cvar("g_respawn_ghosts_speed") * 3 - randomvec() * cvar("g_respawn_ghosts_speed") * 3;
+ self.effects |= EF_ADDITIVE;
+ self.oldcolormap = self.colormap;
+ self.colormap = 512;
+ pointparticles(particleeffectnum("respawn_ghost"), self.origin, '0 0 0', 1);
+ if(cvar("g_respawn_ghosts_maxtime"))
+ SUB_SetFade (self, time + cvar("g_respawn_ghosts_maxtime") / 2 + random () * (cvar("g_respawn_ghosts_maxtime") - cvar("g_respawn_ghosts_maxtime") / 2), 1.5);
+ }
+
CopyBody(1);
self.effects |= EF_NODRAW; // prevent another CopyBody
+ if(self.oldcolormap)
+ {
+ self.colormap = self.oldcolormap;
+ self.oldcolormap = 0;
+ }
PutClientInServer();
}
float sv_airstrafeaccelerate;
float sv_maxairstrafespeed;
float sv_aircontrol;
+float sv_aircontrol_power;
float sv_warsowbunny_airforwardaccel;
float sv_warsowbunny_accel;
float sv_warsowbunny_topspeed;
xyspeed = vlen(self.velocity); self.velocity = normalize(self.velocity);
dot = self.velocity * wishdir;
- k *= sv_aircontrol*dot*dot*frametime;
if(dot > 0) // we can't change direction while slowing down
{
+ k *= fabs(sv_aircontrol)*pow(dot, sv_aircontrol_power)*frametime;
self.velocity = normalize(self.velocity * xyspeed + wishdir * k);
}
self.dmg_take = self.dmg_take + take;//max(take - 10, 0);
self.dmg_inflictor = inflictor;
- if (self.health <= -75 && self.modelindex != 0)
+ if (self.health <= -100 && self.modelindex != 0)
{
// don't use any animations as a gib
self.frame = 0;
frag_attacker = attacker;
frag_inflictor = inflictor;
+ frag_target = self;
MUTATOR_CALLHOOK(PlayerDies);
if(self.flagcarried)
{
float ft, fr;
- // note: flag 0x10 = no trail please
- sf = sf & 0x1F;
+ // note: flag 0x08 = no trail please (teleport bit)
+ sf = sf & 0x0F;
if(self.csqcprojectile_clientanimate)
sf |= 0x80; // client animated, not interpolated
sf |= 0x20;
}
+ if(self.gravity != 0)
+ sf |= 0x10;
+
WriteByte(MSG_ENTITY, ENT_CLIENT_PROJECTILE);
WriteByte(MSG_ENTITY, sf);
WriteCoord(MSG_ENTITY, self.velocity_x);
WriteCoord(MSG_ENTITY, self.velocity_y);
WriteCoord(MSG_ENTITY, self.velocity_z);
- WriteCoord(MSG_ENTITY, self.gravity);
+ if(sf & 0x10)
+ WriteCoord(MSG_ENTITY, self.gravity);
}
if(sf & 0x20)
if(e.SendEntity == CSQCProjectile_SendEntity)
{
// send new origin data
- e.SendFlags |= 1;
+ e.SendFlags |= 0x01;
}
}
{
if(e.SendEntity == CSQCProjectile_SendEntity)
{
- // send new origin data and mark as teleported
- e.SendFlags |= 0x11;
+ // send new origin data
+ e.SendFlags |= 0x01;
+ // mark as teleported
+ e.SendFlags |= 0x08;
}
}
//implementation notes:
//entity customization is done before per-client culling (visibility for instance) because the entity may be doing setorigin to display itself in different locations on different clients, may be altering its .modelindex, .effects and other fields important to culling, so customized entities increase cpu usage (non-customized entities can use all the early culling they want however, as they are not changing on a per client basis).
+//DP_SV_DISCARDABLEDEMO
+//idea: parasti
+//darkplaces implementation: parasti
+//field definitions:
+.float discardabledemo;
+//description:
+//when this field is set to a non-zero value on a player entity, a possibly recorded server-side demo for the player is discarded
+//Note that this extension only works if:
+// auto demos are enabled (the cvar sv_autodemo_perclient is set)
+// discarding demos is enabled (the cvar sv_autodemo_perclient_discardable is set)
+
//DP_SV_DRAWONLYTOCLIENT
//idea: LordHavoc
//darkplaces implementation: LordHavoc
entity oldself;
oldself = self;
self = attacker;
+ frag_attacker = attacker;
frag_target = targ;
frag_score = f;
if(MUTATOR_CALLHOOK(GiveFragsForKill))
#ifdef TETRIS
+float autocvar_g_bastet;
.vector tet_org;
float tet_vs_current_id;
var float tet_high_score = 0;
-float TET_LINES = 20;
+vector TET_START_PIECE_POS = '5 1 0';
+float TET_LINES = 22;
+float TET_DISPLAY_LINES = 20;
float TET_WIDTH = 10;
+string TET_EMPTY_LINE = "0000000000"; // must match TET_WIDTH
//character values
float TET_BORDER = 139;
float TET_BLOCK = 133;
float PIECES = 7;
-.float line1, line2, line3, line4, line5, line6, line7,
-line8, line9, line10, line11, line12, line13, line14, line15,
-line16, line17, line18, line19, line20;
-
+float tet_line_buf;
float SVC_CENTERPRINTa = 26;
*********************************
*/
-void SetLine(float ln, float vl)
+void SetLine(float ln, string vl)
{
- if (ln == 1)
- self.line1 = vl;
- else if (ln == 2)
- self.line2 = vl;
- else if (ln == 3)
- self.line3 = vl;
- else if (ln == 4)
- self.line4 = vl;
- else if (ln == 5)
- self.line5 = vl;
- else if (ln == 6)
- self.line6 = vl;
- else if (ln == 7)
- self.line7 = vl;
- else if (ln == 8)
- self.line8 = vl;
- else if (ln == 9)
- self.line9 = vl;
- else if (ln == 10)
- self.line10 = vl;
- else if (ln == 11)
- self.line11 = vl;
- else if (ln == 12)
- self.line12 = vl;
- else if (ln == 13)
- self.line13 = vl;
- else if (ln == 14)
- self.line14 = vl;
- else if (ln == 15)
- self.line15 = vl;
- else if (ln == 16)
- self.line16 = vl;
- else if (ln == 17)
- self.line17 = vl;
- else if (ln == 18)
- self.line18 = vl;
- else if (ln == 19)
- self.line19 = vl;
- else if (ln == 20)
- self.line20 = vl;
+ if(ln < 1 || ln > TET_LINES)
+ error("WTF");
+ bufstr_set(tet_line_buf, ln + TET_LINES * num_for_edict(self), vl);
};
-float GetLine(float ln)
+string GetLine(float ln)
{
- if (ln == 1)
- return self.line1;
- else if (ln == 2)
- return self.line2;
- else if (ln == 3)
- return self.line3;
- else if (ln == 4)
- return self.line4;
- else if (ln == 5)
- return self.line5;
- else if (ln == 6)
- return self.line6;
- else if (ln == 7)
- return self.line7;
- else if (ln == 8)
- return self.line8;
- else if (ln == 9)
- return self.line9;
- else if (ln == 10)
- return self.line10;
- else if (ln == 11)
- return self.line11;
- else if (ln == 12)
- return self.line12;
- else if (ln == 13)
- return self.line13;
- else if (ln == 14)
- return self.line14;
- else if (ln == 15)
- return self.line15;
- else if (ln == 16)
- return self.line16;
- else if (ln == 17)
- return self.line17;
- else if (ln == 18)
- return self.line18;
- else if (ln == 19)
- return self.line19;
- else if (ln == 20)
- return self.line20;
- else
- return 0;
+ if(ln < 1 || ln > TET_LINES)
+ error("WTF");
+ if(ln < 1 || ln > TET_LINES)
+ return TET_EMPTY_LINE;
+ return bufstr_get(tet_line_buf, ln + TET_LINES * num_for_edict(self));
};
-float GetXBlock(float x, float dat)
-{
- if (x == 1)
- return dat & 3;
- else if (x == 2)
- return (dat & 12) / 4;
- else if (x == 3)
- return (dat & 48) / 16;
- else if (x == 4)
- return (dat & 192) / 64;
- else if (x == 5)
- return (dat & 768) / 256;
- else if (x == 6)
- return (dat & 3072) / 1024;
- else if (x == 7)
- return (dat & 12288) / 4096;
- else if (x == 8)
- return (dat & 49152) / 16384;
- else if (x == 9)
- return (dat & 196608) / 65536;
- else if (x == 10)
- return (dat & 786432) / 262144;
- else
- return 0;
+float GetXBlock(float x, string dat)
+{
+ if(x < 1 || x > TET_WIDTH)
+ error("WTF");
+ return stof(substring(dat, x-1, 1));
};
-float SetXBlock(float x, float dat, float new)
-{
- if (x == 1)
- return (dat - (dat & 3)) | new;
- else if (x == 2)
- return (dat - (dat & 12)) | (new*4);
- else if (x == 3)
- return (dat - (dat & 48)) | (new*16);
- else if (x == 4)
- return (dat - (dat & 192)) | (new*64);
- else if (x == 5)
- return (dat - (dat & 768)) | (new*256);
- else if (x == 6)
- return (dat - (dat & 3072)) | (new*1024);
- else if (x == 7)
- return (dat - (dat & 12288)) | (new*4096);
- else if (x == 8)
- return (dat - (dat & 49152)) | (new*16384);
- else if (x == 9)
- return (dat - (dat & 196608)) | (new*65536);
- else if (x == 10)
- return (dat - (dat & 786432)) | (new*262144);
- else
- return dat;
+string SetXBlock(float x, string dat, float new)
+{
+ return strcat(
+ substring(dat, 0, x-1),
+ ftos(new),
+ substring(dat, x, -1)
+ );
};
void SetSquare(float x, float y, float val)
{
- float dat;
-
+ string dat;
dat = GetLine(y);
- dat = SetXBlock(x, dat, val & 3);
+ dat = SetXBlock(x, dat, val);
SetLine(y, dat);
};
+float PieceColor(float pc)
+{
+ if (pc == 1)
+ return 3; // O
+ else if (pc == 2)
+ return 4; // J
+ else if (pc == 3)
+ return 7; // L // we don't have orange, let's use white instead!
+ else if (pc == 4)
+ return 5; // I
+ else if (pc == 5)
+ return 1; // Z
+ else if (pc == 6)
+ return 2; // S
+ else if (pc == 7)
+ return 6; // T
+ else
+ return 0;
+}
vector PieceShape(float pc)
{
if (pc == 1)
- return '5 5 0'; // O
+ return '20 20 0'; // O
else if (pc == 2)
return '1 21 0'; // J
else if (pc == 3)
- return '21 1 0'; // L
+ return '16 21 0'; // L
else if (pc == 4)
- return '85 0 0'; // I
+ return '0 85 0'; // I
else if (pc == 5)
return '5 20 0'; // Z
else if (pc == 6)
else
return '0 0 0';
}
-
+vector PieceSize(float pc)
+{
+ if (pc == 1)
+ return '2 2 0'; // O
+ else if (pc == 2)
+ return '3 2 0'; // J
+ else if (pc == 3)
+ return '3 2 0'; // L
+ else if (pc == 4)
+ return '4 1 0'; // I
+ else if (pc == 5)
+ return '3 2 0'; // Z
+ else if (pc == 6)
+ return '3 2 0'; // S
+ else if (pc == 7)
+ return '3 2 0'; // T
+ else
+ return '0 0 0';
+}
vector PieceCenter(float pc)
{
if(pc == 1)
- return '1.5 1.5 0'; // O
+ return '2.5 1.5 0'; // O
else if (pc == 2)
return '2 2 0'; // J
else if (pc == 3)
- return '2 1 0'; // L
+ return '2 2 0'; // L
else if (pc == 4)
- return '2.5 1.5 0'; // I
+ return '2.5 2.5 0'; // I
else if (pc == 5)
return '2 2 0'; // Z
else if (pc == 6)
float PieceMetric(float x, float y, float rot, float pc)
{
float t;
- vector piece_dat;
- float wid;
+ vector ce;
// return bits of a piece
- wid = piece_dat_z + 1;
- piece_dat = PieceCenter(pc);
+ ce = PieceCenter(pc);
if (rot == 1) // 90 degrees
{
// x+cx, y+cy -> -y+cx, x+cy
// x = X-cx
// y = Y-cy
t = y;
- y = x - piece_dat_x + piece_dat_y;
- x = -t + piece_dat_x + piece_dat_y;
+ y = x - ce_x + ce_y;
+ x = -t + ce_x + ce_y;
}
else if (rot == 2)//180
{
- x = 2 * piece_dat_x - x;
- y = 2 * piece_dat_y - y;
+ x = 2 * ce_x - x;
+ y = 2 * ce_y - y;
}
else if (rot == 3) // 270
{
// x = X-cx
// y = Y-cy
t = y;
- y = -x + piece_dat_y + piece_dat_x;
- x = t - piece_dat_y + piece_dat_x;
+ y = -x + ce_y + ce_x;
+ x = t - ce_y + ce_x;
}
if (x < 1 || y < 1 || x > 4 || y > 2)
return 0;
- piece_dat = PieceShape(pc);
+ ce = PieceShape(pc);
if (y == 1)
- return GetXBlock(x, piece_dat_x); // first row
+ return !!(ce_x & pow(4, x-1)); // first row
else if (y == 2)
- return GetXBlock(x, piece_dat_y); // second row
+ return !!(ce_y & pow(4, x-1)); // second row
else
return 0; // illegal parms
};
+vector tet_piecemins;
+vector tet_piecemaxs;
+void PieceMinsMaxs(float rot, float pc)
+{
+ vector sz, ce;
+ float t;
+ vector v;
+
+ sz = PieceSize(pc);
+ ce = PieceCenter(pc);
+ // 1 = 2..2
+ // 2 = 2..3
+ // 3 = 1..3
+ // 4 = 1..4
+ tet_piecemins_x = floor(3.0 - sz_x * 0.5);
+ tet_piecemaxs_x = floor(2.0 + sz_x * 0.5);
+ if(sz_y == 1)
+ {
+ // special case for "I"
+ tet_piecemins_y = tet_piecemaxs_y = 2;
+ }
+ else
+ {
+ tet_piecemins_y = 1;
+ tet_piecemaxs_y = sz_y;
+ }
+ //print(sprintf("ce%v sz%v mi%v ma%v\n", ce, sz, tet_piecemins, tet_piecemaxs));
+ if (rot == 1) // 90 degrees
+ {
+ t = tet_piecemins_y;
+ tet_piecemins_y = -tet_piecemins_x + ce_y + ce_x;
+ tet_piecemins_x = t - ce_y + ce_x;
+ t = tet_piecemaxs_y;
+ tet_piecemaxs_y = -tet_piecemaxs_x + ce_y + ce_x;
+ tet_piecemaxs_x = t - ce_y + ce_x;
+ // swap mins_y, maxs_y
+ t = tet_piecemins_y;
+ tet_piecemins_y = tet_piecemaxs_y;
+ tet_piecemaxs_y = t;
+ // TODO OPTIMIZE
+ }
+ else if (rot == 2)//180
+ {
+ v = tet_piecemins;
+ tet_piecemins = 2 * ce - tet_piecemaxs;
+ tet_piecemaxs = 2 * ce - v;
+ }
+ else if (rot == 3) // 270
+ {
+ t = tet_piecemins_y;
+ tet_piecemins_y = tet_piecemins_x - ce_x + ce_y;
+ tet_piecemins_x = -t + ce_x + ce_y;
+ t = tet_piecemaxs_y;
+ tet_piecemaxs_y = tet_piecemaxs_x - ce_x + ce_y;
+ tet_piecemaxs_x = -t + ce_x + ce_y;
+ // swap mins_x, maxs_x
+ t = tet_piecemins_x;
+ tet_piecemins_x = tet_piecemaxs_x;
+ tet_piecemaxs_x = t;
+ // TODO OPTIMIZE
+ }
+#ifdef VERIFY
+ print(vtos(tet_piecemins), "-");
+ print(vtos(tet_piecemaxs), "\n");
+ if(tet_piecemins_x > tet_piecemaxs_x)
+ error("inconsistent mins/maxs");
+ if(tet_piecemins_y > tet_piecemaxs_y)
+ error("inconsistent mins/maxs");
+ float i, j;
+ vector realmins, realmaxs;
+ realmins = '4 4 0';
+ realmaxs = '1 1 0';
+ for(i = 1; i <= 4; ++i)
+ for(j = 1; j <= 4; ++j)
+ if(PieceMetric(i, j, rot, pc))
+ {
+ realmins_x = min(realmins_x, i);
+ realmins_y = min(realmins_y, j);
+ realmaxs_x = max(realmaxs_x, i);
+ realmaxs_y = max(realmaxs_y, j);
+ }
+ if(realmins != tet_piecemins || realmaxs != tet_piecemaxs)
+ error(sprintf("incorrect mins/maxs: %v %v in %d rot %d mins %v maxs %v\n", realmins, realmaxs, rot, pc, tet_piecemins, tet_piecemaxs));
+#endif
+}
/*
*********************************
for (x = 1; x <= TET_WIDTH; x = x + 1)
{
- d = GetSquare(x, ln);
+ d = GetSquare(x, ln + TET_LINES - TET_DISPLAY_LINES);
if (d)
{
WriteChar(MSG_ONE, '^');
- WriteChar(MSG_ONE, d * d - 2 * d + 50); // 1, 2, 5
+ WriteChar(MSG_ONE, d + '0');
WriteChar(MSG_ONE, TET_BLOCK);
}
else
{
float x, d, piece_ln, pcolor;
vector piece_dat;
- pcolor = mod(pc, 3) + 1;
+ pcolor = PieceColor(pc);
WriteChar(MSG_ONE, TET_SPACE); // pad to 6
piece_dat = PieceShape(pc);
piece_ln = piece_dat_y;
for (x = 1; x <= 4; x = x + 1)
{
- d = GetXBlock(x, piece_ln) * pcolor;
- if (d)
+ if (piece_ln & pow(4, x-1))
{
WriteChar(MSG_ONE, '^');
- WriteChar(MSG_ONE, d * d - 2 * d + 50); // 1, 2, 5
+ WriteChar(MSG_ONE, pcolor + '0');
WriteChar(MSG_ONE, TET_BLOCK);
}
else
entity head;
msg_entity = self;
WriteChar(MSG_ONE, SVC_CENTERPRINTa);
+ if(autocvar_g_bastet)
+ {
+ WriteTetrisString("NEVER GONNA GIVE YOU");
+ WriteChar(MSG_ONE, 10);
+ }
// decoration
for (i = 1; i <= (TET_WIDTH + 2); i = i + 1)
WriteChar(MSG_ONE, TET_BORDER);
WriteTetrisString(" ");
WriteUnterminatedString(MSG_ONE, TET_PADDING_RIGHT);
WriteChar(MSG_ONE, 10);
- for (i = 1; i <= TET_LINES; i = i + 1)
+ for (i = 1; i <= TET_DISPLAY_LINES; i = i + 1)
{
if(self.tetris_on == 2)
WriteTetrisString(" GAME OVER ");
else
DrawLine(i);
if (i == 1)
- WriteTetrisString(" NEXT ");
+ WriteTetrisString(autocvar_g_bastet ? " THAT " : " NEXT ");
else if (i == 3)
DrawPiece(self.next_piece, 1);
else if (i == 4)
{
float i;
+ if(!tet_line_buf)
+ tet_line_buf = buf_create();
+
for (i=1; i<=TET_LINES; i = i + 1)
- SetLine(i, 0);
+ SetLine(i, TET_EMPTY_LINE);
self.piece_pos = '0 0 0';
self.piece_type = 0;
self.next_piece = self.tet_lines = self.tet_score = 0;
self.movetype = MOVETYPE_WALK;
};
+void PrintField()
+{
+ string l;
+ float r, c;
+ for(r = 1; r <= TET_LINES; ++r)
+ {
+ l = GetLine(r);
+ print(">");
+ for(c = 1; c <= TET_WIDTH; ++c)
+ {
+ print(ftos(GetXBlock(c, l)));
+ }
+ print("\n");
+ }
+}
+
+float BastetEvaluate()
+{
+ float height;
+ string l;
+ float lines;
+ float score, score_save;
+ string occupied, occupied_save;
+ float occupied_count, occupied_count_save;
+ float i, j, line;
+
+ score = 0;
+
+ // adds a bonus for each free dot above the occupied blocks profile
+ occupied = TET_EMPTY_LINE;
+ occupied_count = TET_WIDTH;
+ height = 0;
+ lines = 0;
+ for(i = 1; i <= TET_LINES; ++i)
+ {
+ l = GetLine(i);
+ if(l == TET_EMPTY_LINE)
+ {
+ height = i;
+ continue;
+ }
+ line = 1;
+ occupied_save = occupied;
+ occupied_count_save = occupied_count;
+ score_save = score;
+ for(j = 1; j <= TET_WIDTH; ++j)
+ {
+ if(GetXBlock(j, l))
+ {
+ if(!GetXBlock(j, occupied))
+ {
+ occupied = SetXBlock(j, occupied, 1);
+ --occupied_count;
+ }
+ }
+ else
+ line = 0;
+ score += 10000 * occupied_count;
+ }
+ if(line)
+ {
+ occupied = occupied_save;
+ occupied_count = occupied_count_save;
+ score = score_save + 100000000 + 10000 * TET_WIDTH + 1000;
+ ++lines;
+ }
+ }
+
+ score += 1000 * height;
+
+ return score;
+}
+
+float CheckMetrics(float piece, float orgx, float orgy, float rot);
+void ClearPiece(float piece, float orgx, float orgy, float rot);
+void CementPiece(float piece, float orgx, float orgy, float rot);
+float bastet_profile_evaluate_time;
+float bastet_profile_checkmetrics_time;
+float BastetSearch(float buf, float pc, float x, float y, float rot, float move_bias)
+// returns best score, or -1 if position is impossible
+{
+ string r;
+ float b;
+ float s, sm;
+ float t1, t2;
+
+ if(move_bias < 0)
+ return 0; // DO NOT WANT
+
+ if(x < 1 || x > TET_WIDTH || y < 1 || y > TET_LINES)
+ return -1; // impossible
+ if(rot < 0) rot = 3;
+ if(rot > 3) rot = 0;
+
+ // did we already try?
+ b = x + (TET_WIDTH+2) * (y + (TET_LINES+2) * rot);
+ r = bufstr_get(buf, b);
+ if(r != "") // already tried
+ return stof(r);
+
+ bufstr_set(buf, b, "0"); // in case we READ that, not that bad - we already got that value in another branch then anyway
+
+
+
+ t1 = gettime(GETTIME_HIRES);
+ if(CheckMetrics(pc, x, y, rot))
+ {
+ t2 = gettime(GETTIME_HIRES);
+ bastet_profile_checkmetrics_time += (t2 - t1);
+ // try all moves
+ sm = 1;
+ s = BastetSearch(buf, pc, x-1, y, rot, move_bias - 1); if(s > sm) sm = s;
+ s = BastetSearch(buf, pc, x+1, y, rot, move_bias - 1); if(s > sm) sm = s;
+ s = BastetSearch(buf, pc, x, y, rot+1, move_bias - 1); if(s > sm) sm = s;
+ s = BastetSearch(buf, pc, x, y, rot-1, move_bias - 1); if(s > sm) sm = s;
+
+ s = BastetSearch(buf, pc, x, y+1, rot, move_bias + 2); if(s > sm) sm = s;
+ if(s < 0)
+ {
+ //print(sprintf("MAY CEMENT AT: %d %d %d\n", x, y, rot));
+ // moving down did not work - that means we can fixate the block here
+ t1 = gettime(GETTIME_HIRES);
+
+ CementPiece(pc, x, y, rot);
+ s = BastetEvaluate();
+ ClearPiece(pc, x, y, rot);
+
+ t2 = gettime(GETTIME_HIRES);
+ bastet_profile_evaluate_time += (t2 - t1);
+
+ if(s > sm) sm = s;
+ }
+ }
+ else
+ {
+ t2 = gettime(GETTIME_HIRES);
+ bastet_profile_checkmetrics_time += (t2 - t1);
+ sm = -1; // impassible
+ }
+
+ bufstr_set(buf, b, ftos(sm));
+
+ return sm;
+}
+
+float bastet_piece[7];
+float bastet_score[7];
+float bastet_piecetime[7];
+float BastetPiece()
+{
+ float b;
+
+ bastet_profile_evaluate_time = 0;
+ bastet_profile_checkmetrics_time = 0;
+ var float t1 = gettime(GETTIME_HIRES);
+
+ b = buf_create(); bastet_piece[0] = 1; bastet_score[0] = BastetSearch(b, 1, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[0]; buf_del(b);
+ b = buf_create(); bastet_piece[1] = 2; bastet_score[1] = BastetSearch(b, 2, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[1]; buf_del(b);
+ b = buf_create(); bastet_piece[2] = 3; bastet_score[2] = BastetSearch(b, 3, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[2]; buf_del(b);
+ b = buf_create(); bastet_piece[3] = 4; bastet_score[3] = BastetSearch(b, 4, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[3]; buf_del(b);
+ b = buf_create(); bastet_piece[4] = 5; bastet_score[4] = BastetSearch(b, 5, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[4]; buf_del(b);
+ b = buf_create(); bastet_piece[5] = 6; bastet_score[5] = BastetSearch(b, 6, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[5]; buf_del(b);
+ b = buf_create(); bastet_piece[6] = 7; bastet_score[6] = BastetSearch(b, 7, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[6]; buf_del(b);
+
+ var float t2 = gettime(GETTIME_HIRES);
+ dprint(sprintf("Time taken: %.6f seconds (of this, ev = %.2f%%, cm = %.2f%%)\n", t2 - t1, 100 * bastet_profile_evaluate_time / (t2 - t1), 100 * bastet_profile_checkmetrics_time / (t2 - t1)));
+
+ // sort
+ float i, j, k, p, s;
+
+/*
+ for(i = 0; i < 7; ++i)
+ {
+ print(sprintf("piece %s value = %d\n", substring("OJLIZST", bastet_piece[i]-1, 1), bastet_score[i]));
+ }
+*/
+
+ for(i = 0; i < 7; ++i)
+ {
+ k = i;
+ p = bastet_piece[k];
+ s = bastet_score[k];
+ for(j = i + 1; j < 7; ++j)
+ {
+ if(bastet_score[j] < s)
+ {
+ k = j;
+ s = bastet_score[k];
+ p = bastet_piece[k];
+ }
+ }
+ if(k != i)
+ {
+ bastet_score[k] = bastet_score[i];
+ bastet_piece[k] = bastet_piece[i];
+ bastet_score[i] = s;
+ bastet_piece[i] = p;
+ }
+ }
+
+ b = random();
+ if(b < 0.8)
+ j = 0;
+ else if(b < 0.92)
+ j = 1;
+ else if(b < 0.98)
+ j = 2;
+ else
+ j = 3;
+ j = bastet_piece[j];
+
+ for(i = 0; i < 7; ++i)
+ {
+ if(i == j-1)
+ bastet_piecetime[i] = 0.2 * bastet_piecetime[i];
+ else
+ bastet_piecetime[i] = 1.8 * bastet_piecetime[i] + 1000;
+ }
+
+ return j;
+}
/*
float p, q;
float b;
float seen;
+
if(self.tet_piece_bucket > 1)
{
p = mod(self.tet_piece_bucket, 7);
// check to see if the piece, if moved to the locations will overlap
float x, y;
+ string l;
// why did I start counting from 1, damnit
orgx = orgx - 1;
orgy = orgy - 1;
- for (y = 0; y < 5; y = y + 1)
+ PieceMinsMaxs(rot, piece);
+ if (tet_piecemins_x+orgx<1 || tet_piecemaxs_x+orgx > TET_WIDTH || tet_piecemins_y+orgy<1 || tet_piecemaxs_y+orgy> TET_LINES)
+ return FALSE; // ouside the level
+ for (y = tet_piecemins_y; y <= tet_piecemaxs_y; y = y + 1)
{
- for (x = 0; x < 5; x = x + 1)
- {
+ l = GetLine(y + orgy);
+ if(l != TET_EMPTY_LINE)
+ for (x = tet_piecemins_x; x <= tet_piecemaxs_x; x = x + 1)
if (PieceMetric(x, y, rot, piece))
- {
- if (GetSquare(x + orgx, y + orgy))
+ if (GetXBlock(x + orgx, l))
return FALSE; // uhoh, gonna hit something.
- if (x+orgx<1 || x+orgx > TET_WIDTH || y+orgy<1 || y+orgy> TET_LINES)
- return FALSE; // ouside the level
- }
- }
}
return TRUE;
}
void ClearPiece(float piece, float orgx, float orgy, float rot) /*FIXDECL*/
{
-
float x, y;
// why did I start counting from 1, damnit
orgx = orgx - 1;
orgy = orgy - 1;
- for (y = 0; y < 5; y = y + 1)
+ PieceMinsMaxs(rot, piece);
+ for (y = tet_piecemins_y; y <= tet_piecemaxs_y; y = y + 1)
{
- for (x = 0; x < 5; x = x + 1)
+ for (x = tet_piecemins_x; x <= tet_piecemaxs_x; x = x + 1)
{
if (PieceMetric(x, y, rot, piece))
{
orgx = orgx - 1;
orgy = orgy - 1;
- pcolor = mod(piece, 3) + 1;
+ pcolor = PieceColor(piece);
- for (y = 0; y < 5; y = y + 1)
+ PieceMinsMaxs(rot, piece);
+ for (y = tet_piecemins_y; y <= tet_piecemaxs_y; y = y + 1)
{
- for (x = 0; x < 5; x = x + 1)
+ for (x = tet_piecemins_x; x <= tet_piecemaxs_x; x = x + 1)
{
if (PieceMetric(x, y, rot, piece))
{
void CompletedLines()
{
- float y, cleared, ln, added, pos, i;
+ float y, cleared, added, pos, i;
+ string ln;
cleared = 0;
y = TET_LINES;
- while(y >= 1)
+ for(;;)
{
ln = GetLine(y);
- if (((ln & LINE_LOW) | ((ln & LINE_HIGH)/2)) == LINE_LOW)
+ if(strstrofs(ln, "0", 0) < 0)
cleared = cleared + 1;
else
y = y - 1;
- ln = GetLine(y - cleared);
+ if(y < 1)
+ break;
+ if(y - cleared < 1)
+ ln = TET_EMPTY_LINE;
+ else
+ ln = GetLine(y - cleared);
SetLine(y, ln);
}
for(y = max(1, TET_LINES - added + 1); y <= TET_LINES; ++y)
{
pos = floor(random() * TET_WIDTH);
- ln = 0;
+ ln = TET_EMPTY_LINE;
for(i = 1; i <= TET_WIDTH; ++i)
if(i != pos)
- ln = SetXBlock(i, ln, floor(random() * 3 + 1));
+ ln = SetXBlock(i, ln, floor(random() * 7 + 1));
SetLine(y, ln);
}
}
self.tet_highest_line = 0;
for(y = 1; y <= TET_LINES; ++y)
- if(GetLine(y) != 0)
+ if(GetLine(y) != TET_EMPTY_LINE)
{
self.tet_highest_line = TET_LINES + 1 - y;
break;
if (self.piece_type == 0)
{
- self.piece_pos = '5 1 0'; // that's about middle top, we count from 1 ARGH
- if (self.next_piece)
- self.piece_type = self.next_piece;
+ self.piece_pos = TET_START_PIECE_POS; // that's about middle top, we count from 1 ARGH
+
+ if(autocvar_g_bastet)
+ {
+ self.piece_type = BastetPiece();
+ self.next_piece = bastet_piece[6];
+ }
else
- self.piece_type = RandomPiece();
- self.next_piece = RandomPiece();
+ {
+ if (self.next_piece)
+ self.piece_type = self.next_piece;
+ else
+ self.piece_type = RandomPiece();
+ self.next_piece = RandomPiece();
+ }
keyss = 0; // no movement first frame
self.tet_autodown = time + 0.2;
brand_new = 1;
//
//////////////////////////////////////////////////////////////
+.entity trigger_gravity_check;
+void trigger_gravity_remove(entity own)
+{
+ if(own.trigger_gravity_check.owner == own)
+ {
+ UpdateCSQCProjectile(own);
+ own.gravity = own.trigger_gravity_check.gravity;
+ remove(own.trigger_gravity_check);
+ }
+ else
+ backtrace("Removing a trigger_gravity_check with no valid owner");
+ own.trigger_gravity_check = world;
+}
+void trigger_gravity_check_think()
+{
+ // This spawns when a player enters the gravity zone and checks if he left.
+ // Each frame, self.count is set to 2 by trigger_gravity_touch() and decreased by 1 here.
+ // It the player has left the gravity trigger, this will be allowed to reach 0 and indicate that.
+ if(self.count <= 0)
+ {
+ if(self.owner.trigger_gravity_check == self)
+ trigger_gravity_remove(self.owner);
+ else
+ remove(self);
+ return;
+ }
+ else
+ {
+ self.count -= 1;
+ self.nextthink = time;
+ }
+};
+
+void trigger_gravity_use()
+{
+ self.state = !self.state;
+};
+
+void trigger_gravity_touch()
+{
+ float g;
+
+ if(self.state != TRUE)
+ return;
+
+ EXACTTRIGGER_TOUCH;
+
+ g = self.gravity;
+
+ if not(self.spawnflags & 1)
+ {
+ if(other.trigger_gravity_check)
+ {
+ if(self == other.trigger_gravity_check.enemy)
+ {
+ // same?
+ other.trigger_gravity_check.count = 2; // gravity one more frame...
+ return;
+ }
+
+ // compare prio
+ if(self.cnt > other.trigger_gravity_check.enemy.cnt)
+ trigger_gravity_remove(other);
+ else
+ return;
+ }
+ other.trigger_gravity_check = spawn();
+ other.trigger_gravity_check.enemy = self;
+ other.trigger_gravity_check.owner = other;
+ other.trigger_gravity_check.gravity = other.gravity;
+ other.trigger_gravity_check.think = trigger_gravity_check_think;
+ other.trigger_gravity_check.nextthink = time;
+ other.trigger_gravity_check.count = 2;
+ if(other.gravity)
+ g *= other.gravity;
+ }
+
+ if (other.gravity != g)
+ {
+ other.gravity = g;
+ if(self.noise != "")
+ sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NORM);
+ UpdateCSQCProjectile(self.owner);
+ }
+};
+void spawnfunc_trigger_gravity()
+{
+ if(self.gravity == 1)
+ return;
+
+ EXACTTRIGGER_INIT;
+ self.touch = trigger_gravity_touch;
+ if(self.noise != "")
+ precache_sound(self.noise);
+
+ self.state = TRUE;
+ IFTARGETED
+ {
+ self.use = trigger_gravity_use;
+ if(self.spawnflags & 2)
+ self.state = FALSE;
+ }
+};
+
+//=============================================================================
// TODO add a way to do looped sounds with sound(); then complete this entity
.float volume, atten;
return TRUE;
}
+void TargetMusic_RestoreGame();
void RestoreGame()
{
// Loaded from a save game
MapInfo_Enumerate();
MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 1);
WeaponStats_Init();
+
+ TargetMusic_RestoreGame();
}
void SV_Shutdown()
// INPUT:
entity frag_inflictor;
entity frag_attacker;
+ entity frag_target; // same as self
MUTATOR_HOOKABLE(GiveFragsForKill);
// called when someone was fragged by "self", and is expected to change frag_score to adjust scoring for the kill
// INPUT:
+ entity frag_attacker; // same as self
entity frag_target;
// INPUT, OUTPUT:
float frag_score;
target_spawn.qc
func_breakable.qc
+target_music.qc
../common/items.qc
{
if(gameover)
return 0;
- error("Adding score to unknown player!");
+ backtrace("Adding score to unknown player!");
+ return 0;
}
if(score)
if(scores_label[scorefield] != "")
sv_airstrafeaccelerate = cvar("sv_airstrafeaccelerate");
sv_maxairstrafespeed = cvar("sv_maxairstrafespeed");
sv_aircontrol = cvar("sv_aircontrol");
+ sv_aircontrol_power = cvar("sv_aircontrol_power");
sv_warsowbunny_airforwardaccel = cvar("sv_warsowbunny_airforwardaccel");
sv_warsowbunny_accel = cvar("sv_warsowbunny_accel");
sv_warsowbunny_topspeed = cvar("sv_warsowbunny_topspeed");
{
startitem_failed = FALSE;
+ self.items = itemid;
+ self.weapons = weaponid;
+
// is it a dropped weapon?
if (self.classname == "droppedweapon")
{
}
else
{
- self.items = itemid;
- self.weapons = weaponid;
-
if(MUTATOR_CALLHOOK(FilterItem)) // error means we do not want the item
{
startitem_failed = TRUE;
--- /dev/null
+.float lifetime;
+// values:
+// volume
+// noise
+// targetname
+// lifetime
+// fade_time
+// fade_rate
+// when triggered, the music is overridden for activator until lifetime (or forever, if lifetime is 0)
+// when targetname is not set, THIS ONE is default
+void target_music_sendto(float to, float is)
+{
+ WriteByte(to, SVC_TEMPENTITY);
+ WriteByte(to, TE_CSQC_TARGET_MUSIC);
+ WriteShort(to, num_for_edict(self));
+ WriteByte(to, self.volume * 255.0 * is);
+ WriteByte(to, self.fade_time * 16.0);
+ WriteByte(to, self.fade_rate * 16.0);
+ WriteByte(to, self.lifetime);
+ WriteString(to, self.noise);
+}
+void target_music_reset()
+{
+ if(self.targetname == "")
+ target_music_sendto(MSG_ALL, 1);
+}
+void target_music_use()
+{
+ if(!activator)
+ return;
+ msg_entity = activator;
+ target_music_sendto(MSG_ONE, 1);
+}
+void spawnfunc_target_music()
+{
+ self.use = target_music_use;
+ self.reset = target_music_reset;
+ if(!self.volume)
+ self.volume = 1;
+ if(self.targetname == "")
+ target_music_sendto(MSG_INIT, 1);
+ else
+ target_music_sendto(MSG_INIT, 0);
+}
+void TargetMusic_RestoreGame()
+{
+ for(self = world; (self = find(self, classname, "target_music")); )
+ {
+ if(self.targetname == "")
+ target_music_sendto(MSG_INIT, 1);
+ else
+ target_music_sendto(MSG_INIT, 0);
+ }
+}
+// values:
+// volume
+// noise
+// targetname
+// fade_time
+// spawnflags:
+// 1 = START_OFF
+// when triggered, it is disabled/enabled for everyone
+float trigger_music_SendEntity(entity to, float sf)
+{
+ WriteByte(MSG_ENTITY, ENT_CLIENT_TRIGGER_MUSIC);
+ sf &~= 0x80;
+ if(self.cnt)
+ sf |= 0x80;
+ WriteByte(MSG_ENTITY, sf);
+ if(sf & 4)
+ {
+ WriteCoord(MSG_ENTITY, self.origin_x);
+ WriteCoord(MSG_ENTITY, self.origin_y);
+ WriteCoord(MSG_ENTITY, self.origin_z);
+ }
+ if(sf & 1)
+ {
+ if(self.model != "null")
+ {
+ WriteShort(MSG_ENTITY, self.modelindex);
+ WriteCoord(MSG_ENTITY, self.mins_x);
+ WriteCoord(MSG_ENTITY, self.mins_y);
+ WriteCoord(MSG_ENTITY, self.mins_z);
+ WriteCoord(MSG_ENTITY, self.maxs_x);
+ WriteCoord(MSG_ENTITY, self.maxs_y);
+ WriteCoord(MSG_ENTITY, self.maxs_z);
+ }
+ else
+ {
+ WriteShort(MSG_ENTITY, 0);
+ WriteCoord(MSG_ENTITY, self.maxs_x);
+ WriteCoord(MSG_ENTITY, self.maxs_y);
+ WriteCoord(MSG_ENTITY, self.maxs_z);
+ }
+ WriteByte(MSG_ENTITY, self.volume * 255.0);
+ WriteByte(MSG_ENTITY, self.fade_time * 16.0);
+ WriteByte(MSG_ENTITY, self.fade_rate * 16.0);
+ WriteString(MSG_ENTITY, self.noise);
+ }
+ return 1;
+}
+void trigger_music_reset()
+{
+ self.cnt = !(self.spawnflags & 1);
+ self.SendFlags |= 0x80;
+}
+void trigger_music_use()
+{
+ self.cnt = !self.cnt;
+ self.SendFlags |= 0x80;
+}
+void spawnfunc_trigger_music()
+{
+ if(self.model != "")
+ setmodel(self, self.model);
+ if(!self.volume)
+ self.volume = 1;
+ if(!self.modelindex)
+ {
+ setorigin(self, self.origin + self.mins);
+ setsize(self, '0 0 0', self.maxs - self.mins);
+ }
+ trigger_music_reset();
+
+ self.use = trigger_music_use;
+ self.reset = trigger_music_reset;
+
+ Net_LinkEntity(self, FALSE, 0, trigger_music_SendEntity);
+}
target_spawn_useon(e);
e.target_spawn_id = self.target_spawn_id;
}
+ else if(self.target == "*activator")
+ {
+ // edit entity
+ if(activator)
+ target_spawn_useon(activator);
+ }
else
{
// edit entity
#ifdef REGISTER_WEAPON
-REGISTER_WEAPON(FIREBALL, w_fireball, IT_ROCKETS, 9, WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "fireball", "fireball", "Fireball");
+REGISTER_WEAPON(FIREBALL, w_fireball, IT_FUEL, 9, WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "fireball", "fireball", "Fireball");
#else
-.float bot_secondary_fireballmooth; // whatever a mooth is
+.float bot_primary_fireballmooth; // whatever a mooth is
.vector fireball_impactvec;
-.float fireball_secondarytime;
+.float fireball_primarytime;
void W_Fireball_Explode (void)
{
// 1. dist damage
d = (self.owner.health + self.owner.armorvalue);
- RadiusDamage (self, self.realowner, cvar("g_balance_fireball_secondary_damage"), cvar("g_balance_fireball_secondary_edgedamage"), cvar("g_balance_fireball_secondary_radius"), world, cvar("g_balance_fireball_secondary_force"), self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, cvar("g_balance_fireball_primary_damage"), cvar("g_balance_fireball_primary_edgedamage"), cvar("g_balance_fireball_primary_radius"), world, cvar("g_balance_fireball_primary_force"), self.projectiledeathtype, other);
if(self.realowner.health + self.realowner.armorvalue >= d)
if(!self.cnt)
{
- modeleffect_spawn("models/sphere/sphere.md3", 0, 0, self.origin, '0 0 0', '0 0 0', '0 0 0', 0, cvar("g_balance_fireball_secondary_bfgradius"), 0.2, 0.05, 0.25);
+ modeleffect_spawn("models/sphere/sphere.md3", 0, 0, self.origin, '0 0 0', '0 0 0', '0 0 0', 0, cvar("g_balance_fireball_primary_bfgradius"), 0.2, 0.05, 0.25);
// 2. bfg effect
// NOTE: this cannot be made warpzone aware by design. So, better intentionally ignore warpzones here.
- for(e = findradius(self.origin, cvar("g_balance_fireball_secondary_bfgradius")); e; e = e.chain)
+ for(e = findradius(self.origin, cvar("g_balance_fireball_primary_bfgradius")); e; e = e.chain)
if(e != self.owner) if(e.takedamage == DAMAGE_AIM) if(e.classname != "player" || !self.owner || IsDifferentTeam(e, self))
{
// can we see fireball?
if(/* trace_startsolid || */ trace_fraction != 1)
continue;
dist = vlen(self.origin - e.origin - e.view_ofs);
- points = (1 - sqrt(dist / cvar("g_balance_fireball_secondary_bfgradius")));
+ points = (1 - sqrt(dist / cvar("g_balance_fireball_primary_bfgradius")));
if(points <= 0)
continue;
dir = normalize(e.origin + e.view_ofs - self.origin);
- Damage(e, self, self.realowner, cvar("g_balance_fireball_secondary_bfgdamage") * points, self.projectiledeathtype | HITTYPE_BOUNCE | HITTYPE_SPLASH, e.origin + e.view_ofs, cvar("g_balance_fireball_secondary_bfgforce") * dir);
+ Damage(e, self, self.realowner, cvar("g_balance_fireball_primary_bfgdamage") * points, self.projectiledeathtype | HITTYPE_BOUNCE | HITTYPE_SPLASH, e.origin + e.view_ofs, cvar("g_balance_fireball_primary_bfgforce") * dir);
pointparticles(particleeffectnum("fireball_bfgdamage"), e.origin, -1 * dir, 1);
- Damage_RecordDamage(self.owner, self.projectiledeathtype, cvar("g_balance_fireball_secondary_bfgdamage") * points);
+ Damage_RecordDamage(self.owner, self.projectiledeathtype, cvar("g_balance_fireball_primary_bfgdamage") * points);
}
}
return;
}
- W_Fireball_LaserPlay(0.1, cvar("g_balance_fireball_secondary_laserradius"), cvar("g_balance_fireball_secondary_laserdamage"), cvar("g_balance_fireball_secondary_laseredgedamage"), cvar("g_balance_fireball_secondary_laserburntime"));
+ W_Fireball_LaserPlay(0.1, cvar("g_balance_fireball_primary_laserradius"), cvar("g_balance_fireball_primary_laserdamage"), cvar("g_balance_fireball_primary_laseredgedamage"), cvar("g_balance_fireball_primary_laserburntime"));
self.nextthink = time + 0.1;
}
}
}
-void W_Fireball_Attack2()
+void W_Fireball_Attack1()
{
local entity proj;
- W_SetupShot_ProjectileSize (self, '-16 -16 -16', '16 16 16', FALSE, 2, "weapons/fireball_fire2.wav", cvar("g_balance_fireball_secondary_damage") + cvar("g_balance_fireball_secondary_bfgdamage"));
+ W_SetupShot_ProjectileSize (self, '-16 -16 -16', '16 16 16', FALSE, 2, "weapons/fireball_fire2.wav", cvar("g_balance_fireball_primary_damage") + cvar("g_balance_fireball_primary_bfgdamage"));
pointparticles(particleeffectnum("fireball_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
proj.classname = "plasma_prim";
proj.owner = proj.realowner = self;
proj.bot_dodge = TRUE;
- proj.bot_dodgerating = cvar("g_balance_fireball_secondary_damage");
- proj.pushltime = time + cvar("g_balance_fireball_secondary_lifetime");
+ proj.bot_dodgerating = cvar("g_balance_fireball_primary_damage");
+ proj.pushltime = time + cvar("g_balance_fireball_primary_lifetime");
proj.use = W_Fireball_Explode;
proj.think = W_Fireball_Think;
proj.nextthink = time;
- proj.health = cvar("g_balance_fireball_secondary_health");
+ proj.health = cvar("g_balance_fireball_primary_health");
proj.team = self.team;
proj.event_damage = W_Fireball_Damage;
proj.takedamage = DAMAGE_YES;
- proj.damageforcescale = cvar("g_balance_fireball_secondary_damageforcescale");
+ proj.damageforcescale = cvar("g_balance_fireball_primary_damageforcescale");
PROJECTILE_MAKETRIGGER(proj);
- proj.projectiledeathtype = WEP_FIREBALL | HITTYPE_SECONDARY;
+ proj.projectiledeathtype = WEP_FIREBALL;
setorigin(proj, w_shotorg);
proj.movetype = MOVETYPE_FLY;
- W_SETUPPROJECTILEVELOCITY(proj, g_balance_fireball_secondary);
+ W_SETUPPROJECTILEVELOCITY(proj, g_balance_fireball_primary);
proj.angles = vectoangles(proj.velocity);
proj.touch = W_Fireball_TouchExplode;
setsize(proj, '-16 -16 -16', '16 16 16');
pointparticles(particleeffectnum("fireball_preattack_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
}
-void W_Fireball_Attack2_Frame4()
+void W_Fireball_Attack1_Frame4()
{
- W_Fireball_Attack2();
- weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_secondary_animtime"), w_ready);
+ W_Fireball_Attack1();
+ weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_primary_animtime"), w_ready);
}
-void W_Fireball_Attack2_Frame3()
+void W_Fireball_Attack1_Frame3()
{
W_Fireball_AttackEffect(0, '+1.25 +3.75 0');
- weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_secondary_animtime"), W_Fireball_Attack2_Frame4);
+ weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_primary_animtime"), W_Fireball_Attack1_Frame4);
}
-void W_Fireball_Attack2_Frame2()
+void W_Fireball_Attack1_Frame2()
{
W_Fireball_AttackEffect(0, '-1.25 +3.75 0');
- weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_secondary_animtime"), W_Fireball_Attack2_Frame3);
+ weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_primary_animtime"), W_Fireball_Attack1_Frame3);
}
-void W_Fireball_Attack2_Frame1()
+void W_Fireball_Attack1_Frame1()
{
W_Fireball_AttackEffect(1, '+1.25 -3.75 0');
- weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_secondary_animtime"), W_Fireball_Attack2_Frame2);
+ weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_primary_animtime"), W_Fireball_Attack1_Frame2);
}
-void W_Fireball_Attack2_Frame0()
+void W_Fireball_Attack1_Frame0()
{
if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
- self.ammo_rockets = self.ammo_rockets - cvar("g_balance_fireball_secondary_ammo");
+ self.ammo_fuel = self.ammo_fuel - cvar("g_balance_fireball_primary_ammo");
W_Fireball_AttackEffect(0, '-1.25 -3.75 0');
sound (self, CHAN_WEAPON, "weapons/fireball_prefire2.wav", VOL_BASE, ATTN_NORM);
- weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_secondary_animtime"), W_Fireball_Attack2_Frame1);
+ weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_fireball_primary_animtime"), W_Fireball_Attack1_Frame1);
}
void W_Firemine_Think()
// make it "hot" once it leaves its owner
if(self.owner)
{
- if(vlen(self.origin - self.owner.origin - self.owner.view_ofs) > cvar("g_balance_fireball_primary_laserradius"))
+ if(vlen(self.origin - self.owner.origin - self.owner.view_ofs) > cvar("g_balance_fireball_secondary_laserradius"))
{
self.cnt += 1;
if(self.cnt == 3)
self.cnt = 0;
}
- W_Fireball_LaserPlay(0.1, cvar("g_balance_fireball_primary_laserradius"), cvar("g_balance_fireball_primary_laserdamage"), cvar("g_balance_fireball_primary_laseredgedamage"), cvar("g_balance_fireball_primary_laserburntime"));
+ W_Fireball_LaserPlay(0.1, cvar("g_balance_fireball_secondary_laserradius"), cvar("g_balance_fireball_secondary_laserdamage"), cvar("g_balance_fireball_secondary_laseredgedamage"), cvar("g_balance_fireball_secondary_laserburntime"));
self.nextthink = time + 0.1;
}
{
PROJECTILE_TOUCH;
if (other.takedamage == DAMAGE_AIM)
- if(Fire_AddDamage(other, self.realowner, cvar("g_balance_fireball_primary_damage"), cvar("g_balance_fireball_primary_damagetime"), self.projectiledeathtype | HITTYPE_HEADSHOT) >= 0)
+ if(Fire_AddDamage(other, self.realowner, cvar("g_balance_fireball_secondary_damage"), cvar("g_balance_fireball_secondary_damagetime"), self.projectiledeathtype | HITTYPE_HEADSHOT) >= 0)
{
remove(self);
return;
self.projectiledeathtype |= HITTYPE_BOUNCE;
}
-void W_Fireball_Attack1()
+void W_Fireball_Attack2()
{
local entity proj;
vector f_diff;
float c;
if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
- self.ammo_rockets = self.ammo_rockets - cvar("g_balance_fireball_primary_ammo");
+ self.ammo_fuel = self.ammo_fuel - cvar("g_balance_fireball_secondary_ammo");
c = mod(self.bulletcounter, 4);
switch(c)
f_diff = '+1.25 +3.75 0';
break;
}
- W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', FALSE, 2, "weapons/fireball_fire.wav", cvar("g_balance_fireball_primary_damage"));
+ W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', FALSE, 2, "weapons/fireball_fire.wav", cvar("g_balance_fireball_secondary_damage"));
traceline(w_shotorg, w_shotorg + f_diff_x * v_up + f_diff_y * v_right, MOVE_NORMAL, self);
w_shotorg = trace_endpos;
proj.owner = proj.realowner = self;
proj.classname = "grenade";
proj.bot_dodge = TRUE;
- proj.bot_dodgerating = cvar("g_balance_fireball_primary_damage");
+ proj.bot_dodgerating = cvar("g_balance_fireball_secondary_damage");
proj.movetype = MOVETYPE_BOUNCE;
- proj.projectiledeathtype = WEP_FIREBALL;
+ proj.projectiledeathtype = WEP_FIREBALL | HITTYPE_SECONDARY;
proj.touch = W_Firemine_Touch;
PROJECTILE_MAKETRIGGER(proj);
setsize(proj, '-4 -4 -4', '4 4 4');
setorigin(proj, w_shotorg);
proj.think = W_Firemine_Think;
proj.nextthink = time;
- proj.damageforcescale = cvar("g_balance_fireball_primary_damageforcescale");
- proj.pushltime = time + cvar("g_balance_fireball_primary_lifetime");
- W_SETUPPROJECTILEVELOCITY_UP(proj, g_balance_fireball_primary);
+ proj.damageforcescale = cvar("g_balance_fireball_secondary_damageforcescale");
+ proj.pushltime = time + cvar("g_balance_fireball_secondary_lifetime");
+ W_SETUPPROJECTILEVELOCITY_UP(proj, g_balance_fireball_secondary);
proj.angles = vectoangles(proj.velocity);
proj.flags = FL_PROJECTILE;
{
self.BUTTON_ATCK = FALSE;
self.BUTTON_ATCK2 = FALSE;
- if (self.bot_secondary_fireballmooth == 0)
+ if (self.bot_primary_fireballmooth == 0)
{
- if(bot_aim(cvar("g_balance_fireball_primary_speed"), cvar("g_balance_fireball_primary_speed_up"), cvar("g_balance_fireball_primary_lifetime"), TRUE))
+ if(bot_aim(cvar("g_balance_fireball_primary_speed"), 0, cvar("g_balance_fireball_primary_lifetime"), FALSE))
{
self.BUTTON_ATCK = TRUE;
- if(random() < 0.01) self.bot_secondary_fireballmooth = 1;
+ if(random() < 0.02) self.bot_primary_fireballmooth = 0;
}
}
else
{
- if(bot_aim(cvar("g_balance_fireball_secondary_speed"), 0, cvar("g_balance_fireball_secondary_lifetime"), FALSE))
+ if(bot_aim(cvar("g_balance_fireball_secondary_speed"), cvar("g_balance_fireball_secondary_speed_up"), cvar("g_balance_fireball_secondary_lifetime"), TRUE))
{
self.BUTTON_ATCK2 = TRUE;
- if(random() < 0.02) self.bot_secondary_fireballmooth = 0;
+ if(random() < 0.01) self.bot_primary_fireballmooth = 1;
}
}
}
else if (req == WR_THINK)
{
if (self.BUTTON_ATCK)
- if (weapon_prepareattack(0, cvar("g_balance_fireball_primary_refire")))
+ if (time >= self.fireball_primarytime)
+ if (weapon_prepareattack(1, cvar("g_balance_fireball_primary_refire")))
{
- W_Fireball_Attack1();
- weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_fireball_primary_animtime"), w_ready);
+ W_Fireball_Attack1_Frame0();
+ self.fireball_primarytime = time + cvar("g_balance_fireball_primary_refire2");
}
if (self.BUTTON_ATCK2)
- if (time >= self.fireball_secondarytime)
- if (weapon_prepareattack(1, cvar("g_balance_fireball_secondary_refire")))
+ if (weapon_prepareattack(0, cvar("g_balance_fireball_secondary_refire")))
{
- W_Fireball_Attack2_Frame0();
- self.fireball_secondarytime = time + cvar("g_balance_fireball_secondary_refire2");
+ W_Fireball_Attack2();
+ weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_fireball_secondary_animtime"), w_ready);
}
}
else if (req == WR_PRECACHE)
else if (req == WR_SETUP)
weapon_setup(WEP_FIREBALL);
else if (req == WR_CHECKAMMO1)
- return self.ammo_rockets >= cvar("g_balance_fireball_primary_ammo");
+ return self.ammo_fuel >= cvar("g_balance_fireball_primary_ammo");
else if (req == WR_CHECKAMMO2)
- return self.ammo_rockets >= cvar("g_balance_fireball_secondary_ammo");
+ return self.ammo_fuel >= cvar("g_balance_fireball_secondary_ammo");
else if (req == WR_SUICIDEMESSAGE)
{
if(w_deathtype & HITTYPE_SECONDARY)
- w_deathtypestring = "should have used a smaller gun";
- else
w_deathtypestring = "forgot about some firemine";
+ else
+ w_deathtypestring = "should have used a smaller gun";
}
else if (req == WR_KILLMESSAGE)
{
if(w_deathtype & HITTYPE_SECONDARY)
+ {
+ if(w_deathtype & HITTYPE_HEADSHOT)
+ w_deathtypestring = "tried to catch #'s firemine";
+ else
+ w_deathtypestring = "fatefully ignored #'s firemine";
+ }
+ else
{
if(w_deathtype & HITTYPE_BOUNCE)
{
else
w_deathtypestring = "tasted #'s fireball";
}
- else
- {
- if(w_deathtype & HITTYPE_HEADSHOT)
- w_deathtypestring = "tried to catch #'s firemine";
- else
- w_deathtypestring = "fatefully ignored #'s firemine";
- }
}
else if (req == WR_RESETPLAYER)
{
- self.fireball_secondarytime = time;
+ self.fireball_primarytime = time;
}
return TRUE;
};
gren.bot_dodge = TRUE;
gren.bot_dodgerating = cvar("g_balance_grenadelauncher_secondary_damage");
gren.movetype = MOVETYPE_BOUNCE;
+ gren.bouncefactor = cvar("g_balance_grenadelauncher_secondary_bouncefactor");
+ gren.bouncestop = cvar("g_balance_grenadelauncher_secondary_bouncestop");
PROJECTILE_MAKETRIGGER(gren);
gren.projectiledeathtype = WEP_GRENADE_LAUNCHER | HITTYPE_SECONDARY;
setsize(gren, '0 0 -3', '0 0 -3');
void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, float nomonsters, entity forent, entity zone, WarpZone_trace_callback_t cb)
{
- float frac, sol;
+ float frac, sol, i;
vector o0, e0;
entity wz;
vector vf, vr, vu;
WarpZone_MakeAllSolid();
sol = -1;
frac = 0;
+ i = 16;
for(;;)
{
+ if(--i < 1)
+ {
+ dprint("Too many warpzones in sequence, aborting trace.\n");
+ break;
+ }
tracebox(org, mi, ma, end, nomonsters, forent);
if(cb)
cb(org, trace_endpos, end);
void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZone_trace_callback_t cb)
{
- float g, dt;
+ float g, dt, i;
vector vf, vr, vu, v0, o0;
entity wz;
WarpZone_MakeAllSolid();
g = cvar("sv_gravity") * e.gravity;
WarpZone_tracetoss_time = 0;
+ i = 16;
for(;;)
{
+ if(--i < 1)
+ {
+ dprint("Too many warpzones in sequence, aborting trace.\n");
+ break;
+ }
tracetoss(e, forent);
if(cb)
cb(e.origin, trace_endpos, trace_endpos);
--- /dev/null
+textures/electro_plasma
+{
+ {
+ map textures/electro_plasma.tga
+ tcMod scroll 0.03 0.001
+ }
+}
+
+textures/electro_plasma_hull
+{
+ {
+ map textures/electro_plasma_hull.tga
+ alphaFunc GT0
+ rgbGen Vertex
+ }
+}
--- /dev/null
+textures/fireball
+{
+ {
+ map textures/fireball
+ tcgen environment
+ }
+ {
+ map $lightmap
+ }
+}
--- /dev/null
+textures/flags/flag_red_cloth {
+ cull none
+ deformVertexes wave 100 sin 0 0.4 0 2.5
+ {
+ map textures/flags/flag_red_cloth.tga
+ }
+}
+
+textures/flags/flag_red_laser {
+ {
+ map textures/flags/flag_red_laser.tga
+ tcMod scroll 0.2 -1
+ blendfunc add
+ }
+}
+
+
+textures/flags/flag_blue_cloth {
+ cull none
+ deformVertexes wave 100 sin 0 0.4 0 2.5
+ {
+ map textures/flags/flag_blue_cloth.tga
+ }
+}
+
+textures/flags/flag_blue_laser {
+ {
+ map textures/flags/flag_blue_laser.tga
+ tcMod scroll 0.2 -1
+ blendfunc add
+ }
+}
+
--- /dev/null
+hlac_plasma
+{
+ {
+ map textures/hlac_plasma.tga
+ tcMod scroll 22.5 0.2
+ tcmod scale 0.01 0.01
+ }
+}
+
+hlac_metal
+{
+ cull none
+ {
+ map textures/hlac_metal.tga
+ rgbgen vertex
+ }
+}
+hlac_glass
+{
+ qer_editorimage textures/hlac_glass.tga
+ surfaceparm trans
+ cull disable
+ qer_trans 0.5
+ {
+ map textures/hlac_glass.tga
+ blendfunc add
+ //rgbGen vertex
+ tcgen environment
+ tcmod scale 4 4
+ }
+}
+hlac_bullet
+{
+ cull disable
+ deformVertexes autosprite
+ {
+ map models/hlac_bullet.tga
+ blendfunc add
+ }
+}
--- /dev/null
+ons_shield
+{
+ {
+ map textures/ons_shield.tga
+ tcMod rotate 15
+ tcMod scale 0.3 0.3
+ tcMod scroll 0.03 0.001
+ tcGen environment
+ }
+}
+
+ons_pad_text
+{
+ cull none
+ {
+ map textures/ons_text.tga
+ tcMod scroll 0.1 0
+ blendfunc add
+
+ }
+}
+
+ons_icon_text
+{
+ {
+ map textures/ons_text.tga
+ tcMod scroll 0.1 0
+ }
+}
+
+ons_icon_thrust
+{
+ {
+ map textures/ons_icon_thrust.tga
+ tcMod scroll 3 0
+ tcMod rotate 10
+ }
+}
+ons_gen_spark
+{
+ cull none
+ {
+ animmap 9 textures/generator_lightning.tga textures/generator_lightning2.tga
+ tcMod scroll 0.5 0
+ blendfunc add
+
+ }
+}
+ons_fire
+{
+ {
+ map textures/ons_boom1.tga
+ tcMod scroll 0.05 0.1
+ tcMod rotate 0.01
+ blendfunc add
+
+ }
+}
+ons_smoke
+{
+ deformVertexes wave sin 1 3 2 0.2
+ {
+ map textures/ons_smoke1.tga
+ tcMod scroll 0.01 0.04
+ tcMod rotate 0.01
+ alphaFunc GE128
+
+ }
+}
+ons_shockwave
+{
+ cull none
+ {
+ map textures/ons_shockwave1.tga
+ tcMod scroll 0.2 0
+ blendfunc add
+
+ }
+}
+ons_shockwave2
+{
+ {
+ map textures/ons_shockwave2.tga
+ tcMod rotate 85
+ tcMod scroll 0.03 0.6
+ tcGen environment
+ blendfunc add
+ }
+}
+
+ons_ray
+{
+cull none
+ {
+ map textures/ons_ray.tga
+ tcMod rotate 85
+ blendfunc add
+ }
+}
\ No newline at end of file
--- /dev/null
+portals_red_vortex
+{
+ cull none
+ deformVertexes wave 100 sin 1.5 0.6 0 1.5
+ {
+ map textures/portals/portals_red_vortex.tga
+ tcMod rotate 10
+ blendfunc blend
+ }
+}
+
+portals_blue_vortex
+{
+ cull none
+ deformVertexes wave 100 sin 1.5 0.6 0 1.5
+ {
+ map textures/portals/portals_blue_vortex.tga
+ tcMod rotate 10
+ blendfunc blend
+ }
+}
+
+portals_inactive_vortex
+{
+ cull none
+ deformVertexes wave 100 sin 1.5 0.6 0 1.5
+ {
+ map textures/portals/portals_inactive_vortex.tga
+ tcMod rotate 10
+ blendfunc blend
+ }
+}
+
+textures/portals/portals_red
+{
+ surfaceparm nonsolid
+ {
+ map textures/portals/portals_red.tga
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ }
+}
+
+textures/portals/portals_blue
+{
+ surfaceparm nonsolid
+ {
+ map textures/portals/portals_blue.tga
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ }
+}
+
+textures/portals/portals_inactive
+{
+ surfaceparm nonsolid
+ {
+ map textures/portals/portals_inactive.tga
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ }
+}
--- /dev/null
+textures/shotgun_sight
+{
+ surfaceparm trans
+
+ {
+ map textures/shotgun_sight.tga
+ blendfunc add
+ //rgbGen vertex
+ }
+}
--- /dev/null
+darkvisor
+{
+ qer_editorimage darkvisor.tga
+ {
+ map darkvisor.tga
+ rgbGen vertex
+ tcgen environment
+ tcmod scale 4 4
+ }
+}
\ No newline at end of file
--- /dev/null
+teamfx/blobblue
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+ map models/teamfx/blobblue.tga
+ blendfunc add
+}
+}
+
+teamfx/blobred
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+ map models/teamfx/blobred.tga
+ blendfunc add
+}
+
+}
+
+teamfx/blobyellow
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+ map models/teamfx/blobyellow.tga
+ blendfunc add
+}
+
+}
+
+teamfx/blobpink
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+ map models/teamfx/blobpink.tga
+ blendfunc add
+}
+
+}
+
+teamfx/bluering
+{
+surfaceparm trans
+{
+ map models/teamfx/blobblue.tga
+ blendfunc add
+}
+}
+teamfx/redring
+{
+surfaceparm trans
+{
+ map models/teamfx/blobyellow.tga
+ blendfunc add
+}
+}
+teamfx/yellowring
+{
+surfaceparm trans
+{
+ map models/teamfx/blobpink.tga
+ blendfunc add
+}
+}
+teamfx/pinkring
+{
+surfaceparm trans
+{
+ map models/teamfx/blobpink.tga
+ blendfunc add
+}
+}
+teamfx/flare
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+ map models/teamfx/flare.tga
+ blendfunc add
+}
+}
+teamfx/rayblue
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+ map models/teamfx/rayblue.tga
+ blendfunc add
+}
+}
+teamfx/rayred
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+ map models/teamfx/rayred.tga
+ blendfunc add
+}
+}
+teamfx/rayyellow
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+ map models/teamfx/rayyellow.tga
+ blendfunc add
+}
+}
+teamfx/raypink
+{
+surfaceparm trans
+deformVertexes autosprite
+{
+ map models/teamfx/raypink.tga
+ blendfunc add
+}
+}
--- /dev/null
+textures/tuba
+{
+ {
+ map textures/tuba
+ tcgen environment
+ }
+ {
+ map $lightmap
+ }
+}
+textures/tuba_misc
+{
+ {
+ map textures/tuba
+ }
+ {
+ map $lightmap
+ }
+}
#!/bin/sh
-balance_cfgs="balance25.cfg balanceSamual.cfg balanceNexrun.cfg"
+balance_cfgs="balance25.cfg balanceSamual.cfg balanceXPM.cfg"
countw=`awk '/^seta? g_/ { print $2; }' balance.cfg | sort -u | tr -d '\r' | md5sum | cut -c 1-32`
for b in $balance_cfgs; do