]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/fruitiex/xpmbalance'
authorRudolf Polzer <divVerent@alientrap.org>
Sat, 8 May 2010 13:51:23 +0000 (15:51 +0200)
committerRudolf Polzer <divVerent@alientrap.org>
Sat, 8 May 2010 13:51:23 +0000 (15:51 +0200)
93 files changed:
balance.cfg
balance25.cfg
balanceSamual.cfg
balanceXPM.cfg
config_update.cfg
defaultXonotic.cfg
gfx/menu/wickedx/background.tga [new file with mode: 0644]
gfx/menu/wickedx/background_ingame.tga [new file with mode: 0644]
gfx/menu/wickedx/background_l2.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbutton_c.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbutton_d.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbutton_f.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbutton_n.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbuttongray_c.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbuttongray_d.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbuttongray_f.tga [new file with mode: 0644]
gfx/menu/wickedx/bigbuttongray_n.tga [new file with mode: 0644]
gfx/menu/wickedx/border.tga [new file with mode: 0644]
gfx/menu/wickedx/button_c.tga [new file with mode: 0644]
gfx/menu/wickedx/button_d.tga [new file with mode: 0644]
gfx/menu/wickedx/button_f.tga [new file with mode: 0644]
gfx/menu/wickedx/button_n.tga [new file with mode: 0644]
gfx/menu/wickedx/buttongray_c.tga [new file with mode: 0644]
gfx/menu/wickedx/buttongray_d.tga [new file with mode: 0644]
gfx/menu/wickedx/buttongray_f.tga [new file with mode: 0644]
gfx/menu/wickedx/buttongray_n.tga [new file with mode: 0644]
gfx/menu/wickedx/charmap.tga [new file with mode: 0755]
gfx/menu/wickedx/charmapbutton.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_c0.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_c1.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_d0.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_d1.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_f0.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_f1.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_n0.tga [new file with mode: 0644]
gfx/menu/wickedx/checkbox_n1.tga [new file with mode: 0644]
gfx/menu/wickedx/checkmark.tga [new file with mode: 0644]
gfx/menu/wickedx/closebutton_c.tga [new file with mode: 0644]
gfx/menu/wickedx/closebutton_f.tga [new file with mode: 0644]
gfx/menu/wickedx/closebutton_n.tga [new file with mode: 0644]
gfx/menu/wickedx/color.tga [new file with mode: 0755]
gfx/menu/wickedx/colorbutton_c.tga [new file with mode: 0644]
gfx/menu/wickedx/colorbutton_f.tga [new file with mode: 0644]
gfx/menu/wickedx/colorbutton_n.tga [new file with mode: 0755]
gfx/menu/wickedx/colorpicker.tga [new file with mode: 0755]
gfx/menu/wickedx/colorpicker_m.tga [new file with mode: 0755]
gfx/menu/wickedx/crosshairbutton_c.tga [new file with mode: 0644]
gfx/menu/wickedx/crosshairbutton_d.tga [new file with mode: 0755]
gfx/menu/wickedx/crosshairbutton_f.tga [new file with mode: 0644]
gfx/menu/wickedx/crosshairbutton_n.tga [new file with mode: 0755]
gfx/menu/wickedx/cursor.tga [new file with mode: 0644]
gfx/menu/wickedx/inputbox_f.tga [new file with mode: 0644]
gfx/menu/wickedx/inputbox_n.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_c0.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_c1.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_d0.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_d1.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_f0.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_f1.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_n0.tga [new file with mode: 0644]
gfx/menu/wickedx/radiobutton_n1.tga [new file with mode: 0644]
gfx/menu/wickedx/scrollbar_c.tga [new file with mode: 0644]
gfx/menu/wickedx/scrollbar_f.tga [new file with mode: 0644]
gfx/menu/wickedx/scrollbar_n.tga [new file with mode: 0644]
gfx/menu/wickedx/scrollbar_s.tga [new file with mode: 0644]
gfx/menu/wickedx/skinpreview.jpg [new file with mode: 0755]
gfx/menu/wickedx/skinvalues.txt [new file with mode: 0755]
gfx/menu/wickedx/slider_c.tga [new file with mode: 0644]
gfx/menu/wickedx/slider_d.tga [new file with mode: 0644]
gfx/menu/wickedx/slider_f.tga [new file with mode: 0644]
gfx/menu/wickedx/slider_n.tga [new file with mode: 0644]
gfx/menu/wickedx/slider_s.tga [new file with mode: 0644]
gfx/menu/wickedx/tooltip.tga [new file with mode: 0644]
physicsNexrun.cfg [deleted file]
physicsNexrun_old.cfg [deleted file]
physicsXPM.cfg [new file with mode: 0644]
qcsrc/client/Main.qc
qcsrc/client/View.qc
qcsrc/client/csqc_builtins.qc
qcsrc/client/main.qh
qcsrc/client/progs.src
qcsrc/client/projectile.qc
qcsrc/client/target_music.qc [new file with mode: 0644]
qcsrc/common/constants.qh
qcsrc/common/mapinfo.qc
qcsrc/menu/xonotic/dialog_settings_audio.c
qcsrc/server/cl_client.qc
qcsrc/server/csqcprojectile.qc
qcsrc/server/g_triggers.qc
qcsrc/server/g_world.qc
qcsrc/server/progs.src
qcsrc/server/target_music.qc [new file with mode: 0644]
qcsrc/server/w_grenadelauncher.qc

index 37a36e8d9d0a2acd5618785b4f3e97b6f1a6d154..6bed5814480fa1748aee89ccb8ef875ab4813713 100644 (file)
@@ -309,6 +309,8 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 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
index 11cc3a40ba08574826427a8b24733d841b0fba45..e3e7b7678de378bca72c1c8d68dc50e2497ac2f9 100644 (file)
@@ -309,6 +309,8 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 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
index 19f7896188a8c8acd764d487c05e748d8fbc5291..2357d8bb1cb361a0c3547dc2f3a6a1ff209769dc 100644 (file)
@@ -309,6 +309,8 @@ set g_balance_grenadelauncher_secondary_animtime 0.3
 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
index e5e2e0c381001bfcc4ddf77bd8fe58b4ae8c777d..0b9b96439d0a2e9909236b029476e4861106edb4 100644 (file)
@@ -309,6 +309,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
index 0143318be3e98c8aa12e4a1f110730582142e8e6..372784dd780c5cc14b7e4affc50518ddca673458 100644 (file)
@@ -20,3 +20,6 @@ _update_configversion_$g_configversion
 _update_generic
 
 set g_configversion 2
+
+// we now use mastervolume
+volume 1
index d373f9964dbf8488e827e8b5c58668c000ce9c9e..35abf9dbef84a134c9deabf87f269cfa7aa9958a 100644 (file)
@@ -1810,3 +1810,6 @@ seta cl_autodemo_delete_keeprecords 0 "when 1, records with a newly made race/ct
 
 // freeze camera
 set cl_lockview 0 "when 1, the camera does not move any more"
+
+// we now use mastervolume
+volume 1
diff --git a/gfx/menu/wickedx/background.tga b/gfx/menu/wickedx/background.tga
new file mode 100644 (file)
index 0000000..d785d64
Binary files /dev/null and b/gfx/menu/wickedx/background.tga differ
diff --git a/gfx/menu/wickedx/background_ingame.tga b/gfx/menu/wickedx/background_ingame.tga
new file mode 100644 (file)
index 0000000..2532d17
Binary files /dev/null and b/gfx/menu/wickedx/background_ingame.tga differ
diff --git a/gfx/menu/wickedx/background_l2.tga b/gfx/menu/wickedx/background_l2.tga
new file mode 100644 (file)
index 0000000..2532d17
Binary files /dev/null and b/gfx/menu/wickedx/background_l2.tga differ
diff --git a/gfx/menu/wickedx/bigbutton_c.tga b/gfx/menu/wickedx/bigbutton_c.tga
new file mode 100644 (file)
index 0000000..a8bf8ad
Binary files /dev/null and b/gfx/menu/wickedx/bigbutton_c.tga differ
diff --git a/gfx/menu/wickedx/bigbutton_d.tga b/gfx/menu/wickedx/bigbutton_d.tga
new file mode 100644 (file)
index 0000000..f6a832b
Binary files /dev/null and b/gfx/menu/wickedx/bigbutton_d.tga differ
diff --git a/gfx/menu/wickedx/bigbutton_f.tga b/gfx/menu/wickedx/bigbutton_f.tga
new file mode 100644 (file)
index 0000000..c4cda96
Binary files /dev/null and b/gfx/menu/wickedx/bigbutton_f.tga differ
diff --git a/gfx/menu/wickedx/bigbutton_n.tga b/gfx/menu/wickedx/bigbutton_n.tga
new file mode 100644 (file)
index 0000000..d54d5d5
Binary files /dev/null and b/gfx/menu/wickedx/bigbutton_n.tga differ
diff --git a/gfx/menu/wickedx/bigbuttongray_c.tga b/gfx/menu/wickedx/bigbuttongray_c.tga
new file mode 100644 (file)
index 0000000..38e9653
Binary files /dev/null and b/gfx/menu/wickedx/bigbuttongray_c.tga differ
diff --git a/gfx/menu/wickedx/bigbuttongray_d.tga b/gfx/menu/wickedx/bigbuttongray_d.tga
new file mode 100644 (file)
index 0000000..959ef93
Binary files /dev/null and b/gfx/menu/wickedx/bigbuttongray_d.tga differ
diff --git a/gfx/menu/wickedx/bigbuttongray_f.tga b/gfx/menu/wickedx/bigbuttongray_f.tga
new file mode 100644 (file)
index 0000000..55ff591
Binary files /dev/null and b/gfx/menu/wickedx/bigbuttongray_f.tga differ
diff --git a/gfx/menu/wickedx/bigbuttongray_n.tga b/gfx/menu/wickedx/bigbuttongray_n.tga
new file mode 100644 (file)
index 0000000..edff6d6
Binary files /dev/null and b/gfx/menu/wickedx/bigbuttongray_n.tga differ
diff --git a/gfx/menu/wickedx/border.tga b/gfx/menu/wickedx/border.tga
new file mode 100644 (file)
index 0000000..d435e60
Binary files /dev/null and b/gfx/menu/wickedx/border.tga differ
diff --git a/gfx/menu/wickedx/button_c.tga b/gfx/menu/wickedx/button_c.tga
new file mode 100644 (file)
index 0000000..745ee7c
Binary files /dev/null and b/gfx/menu/wickedx/button_c.tga differ
diff --git a/gfx/menu/wickedx/button_d.tga b/gfx/menu/wickedx/button_d.tga
new file mode 100644 (file)
index 0000000..6639525
Binary files /dev/null and b/gfx/menu/wickedx/button_d.tga differ
diff --git a/gfx/menu/wickedx/button_f.tga b/gfx/menu/wickedx/button_f.tga
new file mode 100644 (file)
index 0000000..817d849
Binary files /dev/null and b/gfx/menu/wickedx/button_f.tga differ
diff --git a/gfx/menu/wickedx/button_n.tga b/gfx/menu/wickedx/button_n.tga
new file mode 100644 (file)
index 0000000..643360e
Binary files /dev/null and b/gfx/menu/wickedx/button_n.tga differ
diff --git a/gfx/menu/wickedx/buttongray_c.tga b/gfx/menu/wickedx/buttongray_c.tga
new file mode 100644 (file)
index 0000000..032ea91
Binary files /dev/null and b/gfx/menu/wickedx/buttongray_c.tga differ
diff --git a/gfx/menu/wickedx/buttongray_d.tga b/gfx/menu/wickedx/buttongray_d.tga
new file mode 100644 (file)
index 0000000..55f1e62
Binary files /dev/null and b/gfx/menu/wickedx/buttongray_d.tga differ
diff --git a/gfx/menu/wickedx/buttongray_f.tga b/gfx/menu/wickedx/buttongray_f.tga
new file mode 100644 (file)
index 0000000..5ed3a7d
Binary files /dev/null and b/gfx/menu/wickedx/buttongray_f.tga differ
diff --git a/gfx/menu/wickedx/buttongray_n.tga b/gfx/menu/wickedx/buttongray_n.tga
new file mode 100644 (file)
index 0000000..6ba22b5
Binary files /dev/null and b/gfx/menu/wickedx/buttongray_n.tga differ
diff --git a/gfx/menu/wickedx/charmap.tga b/gfx/menu/wickedx/charmap.tga
new file mode 100755 (executable)
index 0000000..d8ed1d5
Binary files /dev/null and b/gfx/menu/wickedx/charmap.tga differ
diff --git a/gfx/menu/wickedx/charmapbutton.tga b/gfx/menu/wickedx/charmapbutton.tga
new file mode 100644 (file)
index 0000000..54fe07e
Binary files /dev/null and b/gfx/menu/wickedx/charmapbutton.tga differ
diff --git a/gfx/menu/wickedx/checkbox_c0.tga b/gfx/menu/wickedx/checkbox_c0.tga
new file mode 100644 (file)
index 0000000..aafd089
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_c0.tga differ
diff --git a/gfx/menu/wickedx/checkbox_c1.tga b/gfx/menu/wickedx/checkbox_c1.tga
new file mode 100644 (file)
index 0000000..4e517e2
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_c1.tga differ
diff --git a/gfx/menu/wickedx/checkbox_d0.tga b/gfx/menu/wickedx/checkbox_d0.tga
new file mode 100644 (file)
index 0000000..40efe7a
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_d0.tga differ
diff --git a/gfx/menu/wickedx/checkbox_d1.tga b/gfx/menu/wickedx/checkbox_d1.tga
new file mode 100644 (file)
index 0000000..bba6824
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_d1.tga differ
diff --git a/gfx/menu/wickedx/checkbox_f0.tga b/gfx/menu/wickedx/checkbox_f0.tga
new file mode 100644 (file)
index 0000000..aafd089
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_f0.tga differ
diff --git a/gfx/menu/wickedx/checkbox_f1.tga b/gfx/menu/wickedx/checkbox_f1.tga
new file mode 100644 (file)
index 0000000..4e517e2
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_f1.tga differ
diff --git a/gfx/menu/wickedx/checkbox_n0.tga b/gfx/menu/wickedx/checkbox_n0.tga
new file mode 100644 (file)
index 0000000..aafd089
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_n0.tga differ
diff --git a/gfx/menu/wickedx/checkbox_n1.tga b/gfx/menu/wickedx/checkbox_n1.tga
new file mode 100644 (file)
index 0000000..4e517e2
Binary files /dev/null and b/gfx/menu/wickedx/checkbox_n1.tga differ
diff --git a/gfx/menu/wickedx/checkmark.tga b/gfx/menu/wickedx/checkmark.tga
new file mode 100644 (file)
index 0000000..cf34dde
Binary files /dev/null and b/gfx/menu/wickedx/checkmark.tga differ
diff --git a/gfx/menu/wickedx/closebutton_c.tga b/gfx/menu/wickedx/closebutton_c.tga
new file mode 100644 (file)
index 0000000..56488ec
Binary files /dev/null and b/gfx/menu/wickedx/closebutton_c.tga differ
diff --git a/gfx/menu/wickedx/closebutton_f.tga b/gfx/menu/wickedx/closebutton_f.tga
new file mode 100644 (file)
index 0000000..7338573
Binary files /dev/null and b/gfx/menu/wickedx/closebutton_f.tga differ
diff --git a/gfx/menu/wickedx/closebutton_n.tga b/gfx/menu/wickedx/closebutton_n.tga
new file mode 100644 (file)
index 0000000..e4b6058
Binary files /dev/null and b/gfx/menu/wickedx/closebutton_n.tga differ
diff --git a/gfx/menu/wickedx/color.tga b/gfx/menu/wickedx/color.tga
new file mode 100755 (executable)
index 0000000..5189ab4
Binary files /dev/null and b/gfx/menu/wickedx/color.tga differ
diff --git a/gfx/menu/wickedx/colorbutton_c.tga b/gfx/menu/wickedx/colorbutton_c.tga
new file mode 100644 (file)
index 0000000..1c294f7
Binary files /dev/null and b/gfx/menu/wickedx/colorbutton_c.tga differ
diff --git a/gfx/menu/wickedx/colorbutton_f.tga b/gfx/menu/wickedx/colorbutton_f.tga
new file mode 100644 (file)
index 0000000..0031c35
Binary files /dev/null and b/gfx/menu/wickedx/colorbutton_f.tga differ
diff --git a/gfx/menu/wickedx/colorbutton_n.tga b/gfx/menu/wickedx/colorbutton_n.tga
new file mode 100755 (executable)
index 0000000..7fec859
Binary files /dev/null and b/gfx/menu/wickedx/colorbutton_n.tga differ
diff --git a/gfx/menu/wickedx/colorpicker.tga b/gfx/menu/wickedx/colorpicker.tga
new file mode 100755 (executable)
index 0000000..6f9845b
Binary files /dev/null and b/gfx/menu/wickedx/colorpicker.tga differ
diff --git a/gfx/menu/wickedx/colorpicker_m.tga b/gfx/menu/wickedx/colorpicker_m.tga
new file mode 100755 (executable)
index 0000000..6775942
Binary files /dev/null and b/gfx/menu/wickedx/colorpicker_m.tga differ
diff --git a/gfx/menu/wickedx/crosshairbutton_c.tga b/gfx/menu/wickedx/crosshairbutton_c.tga
new file mode 100644 (file)
index 0000000..1c294f7
Binary files /dev/null and b/gfx/menu/wickedx/crosshairbutton_c.tga differ
diff --git a/gfx/menu/wickedx/crosshairbutton_d.tga b/gfx/menu/wickedx/crosshairbutton_d.tga
new file mode 100755 (executable)
index 0000000..110faa1
Binary files /dev/null and b/gfx/menu/wickedx/crosshairbutton_d.tga differ
diff --git a/gfx/menu/wickedx/crosshairbutton_f.tga b/gfx/menu/wickedx/crosshairbutton_f.tga
new file mode 100644 (file)
index 0000000..0031c35
Binary files /dev/null and b/gfx/menu/wickedx/crosshairbutton_f.tga differ
diff --git a/gfx/menu/wickedx/crosshairbutton_n.tga b/gfx/menu/wickedx/crosshairbutton_n.tga
new file mode 100755 (executable)
index 0000000..ac94535
Binary files /dev/null and b/gfx/menu/wickedx/crosshairbutton_n.tga differ
diff --git a/gfx/menu/wickedx/cursor.tga b/gfx/menu/wickedx/cursor.tga
new file mode 100644 (file)
index 0000000..0a2e295
Binary files /dev/null and b/gfx/menu/wickedx/cursor.tga differ
diff --git a/gfx/menu/wickedx/inputbox_f.tga b/gfx/menu/wickedx/inputbox_f.tga
new file mode 100644 (file)
index 0000000..6b5bd20
Binary files /dev/null and b/gfx/menu/wickedx/inputbox_f.tga differ
diff --git a/gfx/menu/wickedx/inputbox_n.tga b/gfx/menu/wickedx/inputbox_n.tga
new file mode 100644 (file)
index 0000000..ad169c2
Binary files /dev/null and b/gfx/menu/wickedx/inputbox_n.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_c0.tga b/gfx/menu/wickedx/radiobutton_c0.tga
new file mode 100644 (file)
index 0000000..68ed15e
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_c0.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_c1.tga b/gfx/menu/wickedx/radiobutton_c1.tga
new file mode 100644 (file)
index 0000000..68ed15e
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_c1.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_d0.tga b/gfx/menu/wickedx/radiobutton_d0.tga
new file mode 100644 (file)
index 0000000..f935318
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_d0.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_d1.tga b/gfx/menu/wickedx/radiobutton_d1.tga
new file mode 100644 (file)
index 0000000..1bcc41d
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_d1.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_f0.tga b/gfx/menu/wickedx/radiobutton_f0.tga
new file mode 100644 (file)
index 0000000..237e09b
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_f0.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_f1.tga b/gfx/menu/wickedx/radiobutton_f1.tga
new file mode 100644 (file)
index 0000000..68ed15e
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_f1.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_n0.tga b/gfx/menu/wickedx/radiobutton_n0.tga
new file mode 100644 (file)
index 0000000..55dae24
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_n0.tga differ
diff --git a/gfx/menu/wickedx/radiobutton_n1.tga b/gfx/menu/wickedx/radiobutton_n1.tga
new file mode 100644 (file)
index 0000000..68ed15e
Binary files /dev/null and b/gfx/menu/wickedx/radiobutton_n1.tga differ
diff --git a/gfx/menu/wickedx/scrollbar_c.tga b/gfx/menu/wickedx/scrollbar_c.tga
new file mode 100644 (file)
index 0000000..eb4326d
Binary files /dev/null and b/gfx/menu/wickedx/scrollbar_c.tga differ
diff --git a/gfx/menu/wickedx/scrollbar_f.tga b/gfx/menu/wickedx/scrollbar_f.tga
new file mode 100644 (file)
index 0000000..eb4326d
Binary files /dev/null and b/gfx/menu/wickedx/scrollbar_f.tga differ
diff --git a/gfx/menu/wickedx/scrollbar_n.tga b/gfx/menu/wickedx/scrollbar_n.tga
new file mode 100644 (file)
index 0000000..eb4326d
Binary files /dev/null and b/gfx/menu/wickedx/scrollbar_n.tga differ
diff --git a/gfx/menu/wickedx/scrollbar_s.tga b/gfx/menu/wickedx/scrollbar_s.tga
new file mode 100644 (file)
index 0000000..c7d4700
Binary files /dev/null and b/gfx/menu/wickedx/scrollbar_s.tga differ
diff --git a/gfx/menu/wickedx/skinpreview.jpg b/gfx/menu/wickedx/skinpreview.jpg
new file mode 100755 (executable)
index 0000000..9b8e393
Binary files /dev/null and b/gfx/menu/wickedx/skinpreview.jpg differ
diff --git a/gfx/menu/wickedx/skinvalues.txt b/gfx/menu/wickedx/skinvalues.txt
new file mode 100755 (executable)
index 0000000..f91a8f2
--- /dev/null
@@ -0,0 +1,224 @@
+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'
diff --git a/gfx/menu/wickedx/slider_c.tga b/gfx/menu/wickedx/slider_c.tga
new file mode 100644 (file)
index 0000000..42e3e98
Binary files /dev/null and b/gfx/menu/wickedx/slider_c.tga differ
diff --git a/gfx/menu/wickedx/slider_d.tga b/gfx/menu/wickedx/slider_d.tga
new file mode 100644 (file)
index 0000000..87ccbe5
Binary files /dev/null and b/gfx/menu/wickedx/slider_d.tga differ
diff --git a/gfx/menu/wickedx/slider_f.tga b/gfx/menu/wickedx/slider_f.tga
new file mode 100644 (file)
index 0000000..42e3e98
Binary files /dev/null and b/gfx/menu/wickedx/slider_f.tga differ
diff --git a/gfx/menu/wickedx/slider_n.tga b/gfx/menu/wickedx/slider_n.tga
new file mode 100644 (file)
index 0000000..42e3e98
Binary files /dev/null and b/gfx/menu/wickedx/slider_n.tga differ
diff --git a/gfx/menu/wickedx/slider_s.tga b/gfx/menu/wickedx/slider_s.tga
new file mode 100644 (file)
index 0000000..954c90c
Binary files /dev/null and b/gfx/menu/wickedx/slider_s.tga differ
diff --git a/gfx/menu/wickedx/tooltip.tga b/gfx/menu/wickedx/tooltip.tga
new file mode 100644 (file)
index 0000000..1dc5679
Binary files /dev/null and b/gfx/menu/wickedx/tooltip.tga differ
diff --git a/physicsNexrun.cfg b/physicsNexrun.cfg
deleted file mode 100644 (file)
index da81a24..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// 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
diff --git a/physicsNexrun_old.cfg b/physicsNexrun_old.cfg
deleted file mode 100644 (file)
index 164c48d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// 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_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
diff --git a/physicsXPM.cfg b/physicsXPM.cfg
new file mode 100644 (file)
index 0000000..da81a24
--- /dev/null
@@ -0,0 +1,33 @@
+// 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
index 985bcc7eacc9ab0cbac6aff21bbe43b71f90fb7e..d16e91820e1a31cdda5a0406791331e1d1b777d8 100644 (file)
@@ -902,6 +902,7 @@ void(float bIsNewEntity) CSQC_Ent_Update =
                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;
@@ -1016,6 +1017,9 @@ void Ent_Init()
 
        g_weaponswitchdelay = ReadByte() / 255.0;
 
+       g_balance_grenadelauncher_secondary_bouncefactor = ReadCoord();
+       g_balance_grenadelauncher_secondary_bouncestop = ReadCoord();
+
        if(!postinit)
                PostInit();
 }
@@ -1231,6 +1235,10 @@ float CSQC_Parse_TempEntity()
                // 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;
index c5c4c7093f64f3c586043cd77287215e2659ab70..afa884df1ea055a8a1c578d16243e5f3811b9431 100644 (file)
@@ -413,6 +413,7 @@ void CSQC_UpdateView(float w, float h)
        }
 #endif
 
+       TargetMusic_Advance();
        Fog_Force();
 
        drawframetime = max(0.000001, time - drawtime);
index d3e42cd986a566348f5a193fe5b62fec97ff5290..c108a4ca0ab152a2239f0551e8364ab98c343a2f 100644 (file)
@@ -308,3 +308,5 @@ float PI      = 3.14159265358979323846264338327950288419716939937510582097494459
 float log(float f) = #532;
 
 void(entity e, entity ignore) tracetoss = #64;
+
+float(entity e, float ch) getsoundtime = #533; // (DP_SND_GETSOUNDTIME)
index b7a3d59b34ad0f70510c37d87bd251d15a874975..d2847af00bd7c323d1e439053a72ca002a95c064 100644 (file)
@@ -163,3 +163,6 @@ float calledhooks;
 #define HOOK_END      2
 
 .float ping, ping_packetloss, ping_movementloss;
+
+float g_balance_grenadelauncher_secondary_bouncefactor;
+float g_balance_grenadelauncher_secondary_bouncestop;
index 15f230d7f0a5fe4d308948ec0c82a06c36c002ef..e039ce46dcda8777ed171f7c5a7df158e1b891b9 100644 (file)
@@ -49,6 +49,7 @@ effects.qc
 wall.qc
 modeleffects.qc
 tuba.qc
+target_music.qc
 
 //vehicles/spiderbot.qc
 Main.qc
index 2730a322d22f52ee7a262ff128d52603ed1c44b3..9a2907c5c83397ba88ae2f10e5891f905472b0a0 100644 (file)
@@ -213,13 +213,15 @@ void Ent_Projectile()
                        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; // default
                        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))
@@ -304,6 +306,8 @@ void Ent_Projectile()
                                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';
diff --git a/qcsrc/client/target_music.qc b/qcsrc/client/target_music.qc
new file mode 100644 (file)
index 0000000..4ef9a37
--- /dev/null
@@ -0,0 +1,185 @@
+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;
+}
index 92ef9844eb206c5911c275a2b131ae4a1c25fab7..5daa3e51f740f00b405385cd7808ac49a7ecaa65 100644 (file)
@@ -56,6 +56,7 @@ const float TE_CSQC_PINGPLREPORT = 107;
 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;
@@ -98,6 +99,7 @@ const float ENT_CLIENT_MODELEFFECT = 22;
 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;
 
@@ -368,7 +370,7 @@ float       CHAN_VOICE                              = 2; // Voice/Radio
        // 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
index 003377e8c30d0d0ab15f5c590914ee9a2ea25d0b..53a07186b6a126461fa1af1a05f2445e7ee33539 100644 (file)
@@ -324,6 +324,8 @@ float _MapInfo_Generate(string pFilename) // 0: failure, 1: ok ent, 2: ok bsp
                                        { }
                                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
                        }
                }
        }
@@ -630,7 +632,7 @@ float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametype
                        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"), " ");
index 1c589eccd175a59b6a87c57037c7b832f046b3c1..7c3c754d4cce746dbb49ad9acf44c44ec8814fa4 100644 (file)
@@ -23,13 +23,14 @@ void fillXonoticAudioSettingsTab(entity me)
        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);
index 8a3fe88fd54ef39d6eb4de33f658417e57f7fba7..0ec16a9a3db6de3c40590be7c3a179e62d798e12 100644 (file)
@@ -1064,14 +1064,50 @@ float ClientInit_SendEntity(entity to, float sf)
                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;
 }
 
 /*
index e585b1e37900497737a4800e9f5e5192588a7b50..49076bb813537061bd02fad06ffd43fb4dd65535 100644 (file)
@@ -4,8 +4,8 @@ float CSQCProjectile_SendEntity(entity to, float sf)
 {
        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
@@ -21,6 +21,9 @@ float CSQCProjectile_SendEntity(entity to, float sf)
                        sf |= 0x20;
        }
 
+       if(self.gravity != 0 && self.gravity != 1)
+               sf |= 0x10;
+
        WriteByte(MSG_ENTITY, ENT_CLIENT_PROJECTILE);
        WriteByte(MSG_ENTITY, sf);
 
@@ -35,7 +38,8 @@ float CSQCProjectile_SendEntity(entity to, float 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)
@@ -85,7 +89,7 @@ void UpdateCSQCProjectile(entity e)
        if(e.SendEntity == CSQCProjectile_SendEntity)
        {
                // send new origin data
-               e.SendFlags |= 1;
+               e.SendFlags |= 0x01;
        }
 }
 
@@ -93,8 +97,10 @@ void UpdateCSQCProjectileAfterTeleport(entity e)
 {
        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;
        }
 }
 
index 786884454d1ac5323d3b14036242670e2e1ef9ca..9c10e38a9347a06a7d503a1e50d51b79efd67a7b 100644 (file)
@@ -533,7 +533,88 @@ void spawnfunc_trigger_heal()
 //
 //////////////////////////////////////////////////////////////
 
+.entity trigger_gravity_check;
+void trigger_gravity_check_think()
+{
+       // This spawns when a player enters the gravity zone and checks if he left.
+       // Each frame, self.cnt 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.cnt <= 0)
+       {
+               UpdateCSQCProjectile(self.owner);
+               self.owner.gravity = self.gravity;
+               self.owner.trigger_gravity_check = world;
+               remove(self);
+       }
+       else
+       {
+               self.cnt -= 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)
+               {
+                       other.trigger_gravity_check.cnt = 2; // gravity one more frames...
+                       return;
+               }
+               other.trigger_gravity_check = spawn();
+               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.cnt = 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;
index 228782748d2aa6fd160719863791434b2fae502e..c815b0815a8539690c0c882f2b0e9b5a7663e6f5 100644 (file)
@@ -2697,6 +2697,7 @@ float RedirectionThink()
        return TRUE;
 }
 
+void TargetMusic_RestoreGame();
 void RestoreGame()
 {
        // Loaded from a save game
@@ -2710,6 +2711,8 @@ void RestoreGame()
        MapInfo_Enumerate();
        MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 1);
        WeaponStats_Init();
+
+       TargetMusic_RestoreGame();
 }
 
 void SV_Shutdown()
index b325251cfd611ffdcf70b97112a5f1ff879ccacb..d1d0d1d3af9677dc9f6470d359a82707ee8f7b9c 100644 (file)
@@ -156,6 +156,7 @@ portals.qc
 
 target_spawn.qc
 func_breakable.qc
+target_music.qc
 
 ../common/items.qc
 
diff --git a/qcsrc/server/target_music.qc b/qcsrc/server/target_music.qc
new file mode 100644 (file)
index 0000000..daab646
--- /dev/null
@@ -0,0 +1,129 @@
+.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);
+}
index 80b7020130a945a2a76aa07ab707f75cfb926bc3..559ced33d8193be473e668cb6445cb70ecfd8866 100644 (file)
@@ -127,6 +127,8 @@ void W_Grenade_Attack2 (void)
        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');