diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/lamps/bot_lamp2.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/lamps/bot_lamp2.md3
new file mode 100644
index 0000000..8fc8456
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/lamps/bot_lamp2.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/entries
new file mode 100644
index 0000000..6fabc9d
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/pipe
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+pipe02.md3
+file
+
+
+
+
+2012-04-01T16:52:03.645658Z
+50e7d8a93a39e1fbdb0843dcea4a8a91
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3052
+
+pipe02b.md3
+file
+
+
+
+
+2012-04-01T16:52:03.648659Z
+a3e71d852f7a1cb8d32cf0ecd1764127
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3052
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/prop-base/pipe02.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/prop-base/pipe02.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/prop-base/pipe02.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/prop-base/pipe02b.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/prop-base/pipe02b.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/prop-base/pipe02b.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/text-base/pipe02.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/text-base/pipe02.md3.svn-base
new file mode 100644
index 0000000..1d7c09a
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/text-base/pipe02.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/text-base/pipe02b.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/text-base/pipe02b.md3.svn-base
new file mode 100644
index 0000000..f8f13ae
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/.svn/text-base/pipe02b.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/pipe02.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/pipe02.md3
new file mode 100644
index 0000000..1d7c09a
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/pipe02.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/pipe02b.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/pipe02b.md3
new file mode 100644
index 0000000..f8f13ae
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/pipe/pipe02b.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/.svn/entries
new file mode 100644
index 0000000..38493c4
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/podium
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+podium4.md3
+file
+
+
+
+
+2012-04-01T16:52:03.415645Z
+d3cc143655edec16bb17ce9612c4d669
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+20452
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/.svn/prop-base/podium4.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/.svn/prop-base/podium4.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/.svn/prop-base/podium4.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/.svn/text-base/podium4.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/.svn/text-base/podium4.md3.svn-base
new file mode 100644
index 0000000..6f7c580
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/.svn/text-base/podium4.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/podium4.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/podium4.md3
new file mode 100644
index 0000000..6f7c580
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/podium/podium4.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/.svn/entries
new file mode 100644
index 0000000..74c9d8d
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/portal_2
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+portal_2.md3
+file
+
+
+
+
+2012-04-01T16:52:00.579483Z
+ab162edd13ba40fdbd3cdd69c3ac88f6
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11180
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/.svn/prop-base/portal_2.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/.svn/prop-base/portal_2.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/.svn/prop-base/portal_2.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/.svn/text-base/portal_2.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/.svn/text-base/portal_2.md3.svn-base
new file mode 100644
index 0000000..fd60db4
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/.svn/text-base/portal_2.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/portal_2.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/portal_2.md3
new file mode 100644
index 0000000..fd60db4
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/portal_2/portal_2.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/entries
new file mode 100644
index 0000000..40e1d3d
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/entries
@@ -0,0 +1,198 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/skel
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+skel_ribs.md3
+file
+
+
+
+
+2012-04-01T16:52:04.236692Z
+eef71f8bdf21fde5b01a3d255e3b978e
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1988
+
+skel01.md3
+file
+
+
+
+
+2012-04-01T16:52:04.238692Z
+5a30a7c80befc29973c215c1094cba10
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+13420
+
+xray.md3
+file
+
+
+
+
+2012-04-01T16:52:04.241692Z
+1cc5c115dc2c9766a1c25b3726d18648
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+13420
+
+xraybig.md3
+file
+
+
+
+
+2012-04-01T16:52:04.277695Z
+1c2da97a8d2f791da507d8789c7c6486
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+13420
+
+skel02mid.md3
+file
+
+
+
+
+2012-04-01T16:52:04.280695Z
+7317180e665dcbd1c4ab1bdd48b2f472
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+13420
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/skel01.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/skel01.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/skel01.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/skel02mid.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/skel02mid.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/skel02mid.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/skel_ribs.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/skel_ribs.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/skel_ribs.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/xray.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/xray.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/xray.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/xraybig.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/xraybig.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/prop-base/xraybig.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/skel01.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/skel01.md3.svn-base
new file mode 100644
index 0000000..635bf18
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/skel01.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/skel02mid.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/skel02mid.md3.svn-base
new file mode 100644
index 0000000..1d57388
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/skel02mid.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/skel_ribs.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/skel_ribs.md3.svn-base
new file mode 100644
index 0000000..969948e
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/skel_ribs.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/xray.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/xray.md3.svn-base
new file mode 100644
index 0000000..39693db
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/xray.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/xraybig.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/xraybig.md3.svn-base
new file mode 100644
index 0000000..c22ae9f
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/.svn/text-base/xraybig.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/skel01.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/skel01.md3
new file mode 100644
index 0000000..635bf18
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/skel01.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/skel02mid.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/skel02mid.md3
new file mode 100644
index 0000000..1d57388
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/skel02mid.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/skel_ribs.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/skel_ribs.md3
new file mode 100644
index 0000000..969948e
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/skel_ribs.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/xray.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/xray.md3
new file mode 100644
index 0000000..39693db
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/xray.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/xraybig.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/xraybig.md3
new file mode 100644
index 0000000..c22ae9f
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skel/xraybig.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/entries
new file mode 100644
index 0000000..f5699bb
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/entries
@@ -0,0 +1,130 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/skull
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+monkeyface.md3
+file
+
+
+
+
+2012-04-01T16:52:02.620600Z
+5c2f4589a7e90b6ce67a2b6602deca30
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3500
+
+skull_tilt1.md3
+file
+
+
+
+
+2012-04-01T16:52:02.623600Z
+b8f1e78887f879f43d0f7d2af546f1e3
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2452
+
+skull.md3
+file
+
+
+
+
+2012-04-01T16:52:02.635601Z
+6ebb97e0b80ed5ddaa773c96c1480de0
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2452
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/prop-base/monkeyface.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/prop-base/monkeyface.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/prop-base/monkeyface.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/prop-base/skull.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/prop-base/skull.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/prop-base/skull.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/prop-base/skull_tilt1.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/prop-base/skull_tilt1.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/prop-base/skull_tilt1.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/text-base/monkeyface.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/text-base/monkeyface.md3.svn-base
new file mode 100644
index 0000000..e04a6b1
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/text-base/monkeyface.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/text-base/skull.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/text-base/skull.md3.svn-base
new file mode 100644
index 0000000..812c4d1
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/text-base/skull.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/text-base/skull_tilt1.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/text-base/skull_tilt1.md3.svn-base
new file mode 100644
index 0000000..d316000
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/.svn/text-base/skull_tilt1.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/monkeyface.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/monkeyface.md3
new file mode 100644
index 0000000..e04a6b1
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/monkeyface.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/skull.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/skull.md3
new file mode 100644
index 0000000..812c4d1
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/skull.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/skull_tilt1.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/skull_tilt1.md3
new file mode 100644
index 0000000..d316000
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/skull/skull_tilt1.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/.svn/entries
new file mode 100644
index 0000000..6a1e550
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/spotlamp
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+spotlamp.md3
+file
+
+
+
+
+2012-04-01T16:52:04.419703Z
+f091f34e03f6095decfe5e864ad7b561
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6348
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/.svn/prop-base/spotlamp.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/.svn/prop-base/spotlamp.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/.svn/prop-base/spotlamp.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/.svn/text-base/spotlamp.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/.svn/text-base/spotlamp.md3.svn-base
new file mode 100644
index 0000000..37dc2a7
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/.svn/text-base/spotlamp.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/spotlamp.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/spotlamp.md3
new file mode 100644
index 0000000..37dc2a7
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/spotlamp/spotlamp.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/statue_major.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/statue_major.md3
new file mode 100644
index 0000000..112af2c
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/statue_major.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/entries
new file mode 100644
index 0000000..efd8a75
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/entries
@@ -0,0 +1,130 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/storch
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+storch.md3
+file
+
+
+
+
+2012-04-01T16:52:04.795724Z
+bfa84b2c1b3ed943e0b8d439acc7138f
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1660
+
+storchx.md3
+file
+
+
+
+
+2012-04-01T16:52:04.799724Z
+320b93298191d3ffcd0b922b70a004fa
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2012
+
+tall_torch.md3
+file
+
+
+
+
+2012-04-01T16:52:04.803725Z
+ab4a251dadd95851f8588bc15750d241
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3332
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/prop-base/storch.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/prop-base/storch.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/prop-base/storch.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/prop-base/storchx.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/prop-base/storchx.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/prop-base/storchx.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/prop-base/tall_torch.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/prop-base/tall_torch.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/prop-base/tall_torch.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/text-base/storch.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/text-base/storch.md3.svn-base
new file mode 100644
index 0000000..100ffb3
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/text-base/storch.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/text-base/storchx.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/text-base/storchx.md3.svn-base
new file mode 100644
index 0000000..e03da76
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/text-base/storchx.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/text-base/tall_torch.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/text-base/tall_torch.md3.svn-base
new file mode 100644
index 0000000..50f6881
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/.svn/text-base/tall_torch.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/storch.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/storch.md3
new file mode 100644
index 0000000..100ffb3
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/storch.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/storchx.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/storchx.md3
new file mode 100644
index 0000000..e03da76
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/storchx.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/tall_torch.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/tall_torch.md3
new file mode 100644
index 0000000..50f6881
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/storch/tall_torch.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/.svn/entries
new file mode 100644
index 0000000..89e4fe1
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/teleporter
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+teleporter.md3
+file
+
+
+
+
+2012-04-01T16:52:01.334526Z
+4cfcb220431ff5d0863361c52b9735cd
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6500
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/.svn/prop-base/teleporter.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/.svn/prop-base/teleporter.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/.svn/prop-base/teleporter.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/.svn/text-base/teleporter.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/.svn/text-base/teleporter.md3.svn-base
new file mode 100644
index 0000000..b7f4cbd
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/.svn/text-base/teleporter.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/teleporter.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/teleporter.md3
new file mode 100644
index 0000000..b7f4cbd
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/teleporter/teleporter.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/.svn/entries
new file mode 100644
index 0000000..67059cd
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/timlamp
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+timlamp.md3
+file
+
+
+
+
+2012-04-01T16:52:05.185746Z
+f0dfd0643af91634ed9435a091988583
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2260
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/.svn/prop-base/timlamp.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/.svn/prop-base/timlamp.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/.svn/prop-base/timlamp.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/.svn/text-base/timlamp.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/.svn/text-base/timlamp.md3.svn-base
new file mode 100644
index 0000000..d837304
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/.svn/text-base/timlamp.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/timlamp.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/timlamp.md3
new file mode 100644
index 0000000..d837304
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/timlamp/timlamp.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/entries
new file mode 100644
index 0000000..da26d9f
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/entries
@@ -0,0 +1,436 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/tree2
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+trunk2.tga
+file
+
+
+
+
+2012-04-01T16:51:59.993449Z
+17864e38bbd6faf982eb179a42f42c64
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+49196
+
+tree1.md3
+file
+
+
+
+
+2012-04-01T16:51:59.997450Z
+87766d3370e9375f8565246c1887e097
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2284
+
+tree10.md3
+file
+
+
+
+
+2012-04-01T16:51:59.999450Z
+44aa061f1f17f019304663a3bb04a883
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3868
+
+tree2.md3
+file
+
+
+
+
+2012-04-01T16:52:00.026451Z
+93fe60e197be8b0efae50a9ea253a853
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1748
+
+tree3.md3
+file
+
+
+
+
+2012-04-01T16:52:00.039452Z
+4597f5cfe8aaea8b1a6332bd9804c86c
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2808
+
+tree4.md3
+file
+
+
+
+
+2012-04-01T16:52:00.042452Z
+5ae8e4856a60f663d61f9bdfd44a26d2
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2808
+
+tree5.md3
+file
+
+
+
+
+2012-04-01T16:52:00.047453Z
+34b21e0190953f94fabb7b8b09c41ce2
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2808
+
+tree6.md3
+file
+
+
+
+
+2012-04-01T16:52:00.049453Z
+06b6500d42cc8f1266b4be4e4cfa1eb0
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2808
+
+tree7.md3
+file
+
+
+
+
+2012-04-01T16:52:00.051453Z
+8b3cf09fdf896cfada33be4f89d9d397
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2808
+
+branch2.tga
+file
+
+
+
+
+2012-04-01T16:52:00.056453Z
+5c21b6df305cc6dc07564edb14ebcc31
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+196652
+
+tree8.md3
+file
+
+
+
+
+2012-04-01T16:52:00.059453Z
+82d987d5bb1a314a632b9ac7abad9b29
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2808
+
+tree9.md3
+file
+
+
+
+
+2012-04-01T16:52:00.061453Z
+adecb39fa0a4cd6154293c19c587eb30
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3868
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/branch2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/branch2.tga.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/branch2.tga.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree1.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree1.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree1.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree10.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree10.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree10.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree2.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree2.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree2.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree3.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree3.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree3.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree4.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree4.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree4.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree5.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree5.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree5.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree6.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree6.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree6.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree7.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree7.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree7.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree8.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree8.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree8.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree9.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree9.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/tree9.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/trunk2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/trunk2.tga.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/prop-base/trunk2.tga.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/branch2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/branch2.tga.svn-base
new file mode 100644
index 0000000..3c76b55
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/branch2.tga.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree1.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree1.md3.svn-base
new file mode 100644
index 0000000..eba900f
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree1.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree10.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree10.md3.svn-base
new file mode 100644
index 0000000..e576df0
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree10.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree2.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree2.md3.svn-base
new file mode 100644
index 0000000..9a4cd7c
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree2.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree3.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree3.md3.svn-base
new file mode 100644
index 0000000..47f8644
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree3.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree4.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree4.md3.svn-base
new file mode 100644
index 0000000..e4cffab
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree4.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree5.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree5.md3.svn-base
new file mode 100644
index 0000000..abff0d8
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree5.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree6.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree6.md3.svn-base
new file mode 100644
index 0000000..b272036
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree6.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree7.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree7.md3.svn-base
new file mode 100644
index 0000000..0661ea6
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree7.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree8.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree8.md3.svn-base
new file mode 100644
index 0000000..d9b87c1
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree8.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree9.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree9.md3.svn-base
new file mode 100644
index 0000000..0145174
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/tree9.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/trunk2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/trunk2.tga.svn-base
new file mode 100644
index 0000000..a278d99
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/.svn/text-base/trunk2.tga.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/branch2.tga b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/branch2.tga
new file mode 100644
index 0000000..3c76b55
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/branch2.tga differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree1.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree1.md3
new file mode 100644
index 0000000..eba900f
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree1.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree10.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree10.md3
new file mode 100644
index 0000000..e576df0
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree10.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree2.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree2.md3
new file mode 100644
index 0000000..9a4cd7c
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree2.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree3.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree3.md3
new file mode 100644
index 0000000..47f8644
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree3.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree4.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree4.md3
new file mode 100644
index 0000000..e4cffab
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree4.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree5.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree5.md3
new file mode 100644
index 0000000..abff0d8
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree5.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree6.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree6.md3
new file mode 100644
index 0000000..b272036
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree6.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree7.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree7.md3
new file mode 100644
index 0000000..0661ea6
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree7.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree8.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree8.md3
new file mode 100644
index 0000000..d9b87c1
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree8.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree9.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree9.md3
new file mode 100644
index 0000000..0145174
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/tree9.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/trunk2.tga b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/trunk2.tga
new file mode 100644
index 0000000..a278d99
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/tree2/trunk2.tga differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/visor_posed.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/visor_posed.md3
new file mode 100644
index 0000000..aae1d8f
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/visor_posed.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/entries b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/entries
new file mode 100644
index 0000000..7e74bd4
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/entries
@@ -0,0 +1,130 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/models/mapobjects/wallhead
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+lion.md3
+file
+
+
+
+
+2012-04-01T16:52:00.409473Z
+3b2962c40611ff3da36435eee361c2ff
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3764
+
+wallhead02.md3
+file
+
+
+
+
+2012-04-01T16:52:00.411473Z
+05cff486c3effab6f9d309a9c47ae77d
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3452
+
+femhead.md3
+file
+
+
+
+
+2012-04-01T16:52:00.415474Z
+3e1a19b0c377a415e186f244eeac3225
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9228
+
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/prop-base/femhead.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/prop-base/femhead.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/prop-base/femhead.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/prop-base/lion.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/prop-base/lion.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/prop-base/lion.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/prop-base/wallhead02.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/prop-base/wallhead02.md3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/prop-base/wallhead02.md3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/text-base/femhead.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/text-base/femhead.md3.svn-base
new file mode 100644
index 0000000..f26dadc
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/text-base/femhead.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/text-base/lion.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/text-base/lion.md3.svn-base
new file mode 100644
index 0000000..fda947d
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/text-base/lion.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/text-base/wallhead02.md3.svn-base b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/text-base/wallhead02.md3.svn-base
new file mode 100644
index 0000000..ab7ab3a
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/.svn/text-base/wallhead02.md3.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/femhead.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/femhead.md3
new file mode 100644
index 0000000..f26dadc
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/femhead.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/lion.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/lion.md3
new file mode 100644
index 0000000..fda947d
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/lion.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/wallhead02.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/wallhead02.md3
new file mode 100644
index 0000000..ab7ab3a
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/wallhead/wallhead02.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/models/mapobjects/walllamp3.md3 b/install/installs/Q3Pack/install/baseq3/models/mapobjects/walllamp3.md3
new file mode 100644
index 0000000..9baac19
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/models/mapobjects/walllamp3.md3 differ
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/entries b/install/installs/Q3Pack/install/baseq3/scripts/.svn/entries
new file mode 100644
index 0000000..bd651e8
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/entries
@@ -0,0 +1,1082 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/scripts
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2008-03-02T21:35:45.428388Z
+32
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+base_floor.shader
+file
+
+
+
+
+2012-04-01T16:52:10.023023Z
+76f07736637f598b71d3e53ccd0d70ab
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+17698
+
+museum.shader
+file
+
+
+
+
+2012-04-01T16:52:10.053025Z
+a72e9fe5f9eca2d0d193277edf0af585
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+536
+
+skies.shader
+file
+
+
+
+
+2012-04-01T16:52:10.135030Z
+a15a65a06bc84c161ffa6f9dd747ceb7
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+20574
+
+hell.shader
+file
+
+
+
+
+2012-04-01T16:52:10.154031Z
+bfa97d2e2d8bb31b19573e0a0021e5db
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7833
+
+terrademoQ3.shader
+file
+
+
+
+
+2012-04-01T16:52:10.157031Z
+9c9869dc3afb1970bebf4a4ad438b665
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10292
+
+common.shader
+file
+
+
+
+
+2012-04-01T16:52:10.162031Z
+59dee7ed6e9c6fe07f8e1770c5141d3a
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5620
+
+base_wall.shader
+file
+
+
+
+
+2012-04-01T16:52:10.167031Z
+c9b6a4598ecaa7a088c12d0b60380a38
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+25377
+
+gothic_wall.shader
+file
+
+
+
+
+2012-04-01T16:52:10.197033Z
+90ac9c800e2e815fbfcd045c94bebc78
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2110
+
+base_door.shader
+file
+
+
+
+
+2012-04-01T16:52:10.208034Z
+84240d6a8e4cc39739b3cd3c244784d1
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1542
+
+gothic_door.shader
+file
+
+
+
+
+2012-04-01T16:52:10.218034Z
+0767707e626606d3b26c873a71d4b49a
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1455
+
+base_object.shader
+file
+
+
+
+
+2012-04-01T16:52:10.212034Z
+eb93c5e1dd4c52e9ffe66ddc01a6b998
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+531
+
+skin.shader
+file
+
+
+
+
+2012-04-01T16:52:10.232035Z
+75b1202b5a1fe282b9ce814053688c30
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2442
+
+gothic_light.shader
+file
+
+
+
+
+2012-04-01T16:52:10.230035Z
+c17f77fcc3ef25034b7b97b91e2e4add
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+31297
+
+base_trim.shader
+file
+
+
+
+
+2012-04-01T16:52:10.235035Z
+1d2be52751258a2b4e6816e8e58abc3e
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11903
+
+base_support.shader
+file
+
+
+
+
+2012-04-01T16:52:10.245036Z
+d403a766a17ca6393a98e5be9706cb4f
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3779
+
+gothic_trim.shader
+file
+
+
+
+
+2012-04-01T16:52:10.271037Z
+5051248ff6593df4880a642458269486
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5169
+
+liquids.shader
+file
+
+
+
+
+2012-04-01T16:52:10.020023Z
+ed6a70ccaa94df18381f59a5991f2ae5
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+13815
+
+entities.def
+file
+
+
+
+
+2012-04-01T16:52:10.071026Z
+b86083ec3cc3c2510eee738b0b8ed5e0
+2008-02-28T02:40:44.363662Z
+30
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+139167
+
+ctf.shader
+file
+
+
+
+
+2012-04-01T16:52:10.074026Z
+fde130d5d5d3817fa44ea7e104b1567d
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11611
+
+default_project.proj
+file
+
+
+
+
+2012-04-01T16:52:10.078026Z
+7dbc3bc571b94f7311c0147f1bce9a89
+2008-03-02T21:35:45.428388Z
+32
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6414
+
+gothic_floor.shader
+file
+
+
+
+
+2012-04-01T16:52:10.132029Z
+dc0cdcf46e12dc5584a33697ae83727d
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4627
+
+default_shaderlist.txt
+file
+
+
+
+
+2012-04-01T16:52:10.138030Z
+e0553714a5a63c8410b1a0cf46f9952a
+2008-02-28T02:40:44.363662Z
+30
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1186
+
+test.shader
+file
+
+
+
+
+2012-04-01T16:52:10.141030Z
+aa163245e20ee9b97e630112d8787aa9
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+18145
+
+models.shader
+file
+
+
+
+
+2012-04-01T16:52:10.148030Z
+706440a10f4caadaf5c1876b914731cd
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+106019
+
+gfx.shader
+file
+
+
+
+
+2012-04-01T16:52:10.151030Z
+0008c745b3d690c65a9b78a103d4adc6
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+25381
+
+gothic_block.shader
+file
+
+
+
+
+2012-04-01T16:52:10.159031Z
+c4d2bdfb36b65cec5d485a232b6da4d4
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11251
+
+sfx.shader
+file
+
+
+
+
+2012-04-01T16:52:10.222035Z
+71719108e0590d3fdbca0ebf41c64523
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+67806
+
+base_light.shader
+file
+
+
+
+
+2012-04-01T16:52:10.227035Z
+ed4c32860fa809bab26f07e31dd33634
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+31565
+
+organics.shader
+file
+
+
+
+
+2012-04-01T16:52:10.242036Z
+7bc525a954fff0c41d1cccb5bac76f50
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+458
+
+base_button.shader
+file
+
+
+
+
+2012-04-01T16:52:10.238035Z
+683222c51ed526d8e5bcdc0d41dcbba4
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+441
+
+gothic_button.shader
+file
+
+
+
+
+2012-04-01T16:52:10.268037Z
+dd7ba49d21373128ab8ecd1060d8fe28
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+382
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_button.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_button.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_button.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_door.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_door.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_door.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_floor.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_floor.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_floor.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_light.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_light.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_light.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_object.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_object.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_object.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_support.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_support.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_support.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_trim.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_trim.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_trim.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_wall.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_wall.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/base_wall.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/common.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/common.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/common.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/ctf.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/ctf.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/ctf.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gfx.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gfx.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gfx.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_block.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_block.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_block.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_button.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_button.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_button.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_door.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_door.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_door.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_floor.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_floor.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_floor.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_light.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_light.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_light.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_trim.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_trim.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_trim.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_wall.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_wall.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/gothic_wall.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/hell.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/hell.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/hell.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/liquids.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/liquids.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/liquids.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/models.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/models.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/models.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/museum.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/museum.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/museum.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/organics.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/organics.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/organics.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/sfx.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/sfx.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/sfx.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/skies.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/skies.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/skies.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/skin.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/skin.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/skin.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/terrademoQ3.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/terrademoQ3.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/terrademoQ3.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/test.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/test.shader.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/prop-base/test.shader.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_button.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_button.shader.svn-base
new file mode 100644
index 0000000..f9de754
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_button.shader.svn-base
@@ -0,0 +1,21 @@
+
+textures/base_button/shootme2
+{
+ qer_editorimage textures/base_button/metal3_3_shootme.tga
+ q3map_lightimage textures/base_button/shootme_glow.tga
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_support/metal3_3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_button/shootme_glow.tga
+ rgbGen wave sin 0.5 1.0 0 .3
+ blendFunc GL_ONE GL_ONE
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_door.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_door.shader.svn-base
new file mode 100644
index 0000000..e697701
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_door.shader.svn-base
@@ -0,0 +1,97 @@
+
+textures/base_door/shinymetaldoor
+{
+
+ {
+ //map $lightmap
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .25
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_door/shinymetaldoor.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map textures/base_door/quake3sign.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+}
+
+textures/base_door/shinymetaldoor_outside
+{
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .25
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_door/shinymetaldoor_outside.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map textures/base_door/quake3sign_outside.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+}
+
+textures/base_door/shinymetaldoor_outside3a2
+{
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .25
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_door/shinymetaldoor_outside3a2.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc filter
+ }
+
+ {
+ map textures/base_door/shinymetaldoor_outside3glow.tga
+ blendFunc add
+ rgbGen wave sin .9 .1 0 5
+ }
+
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_floor.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_floor.shader.svn-base
new file mode 100644
index 0000000..b6c754a
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_floor.shader.svn-base
@@ -0,0 +1,900 @@
+textures/base_floor/clang_floor3blava
+{
+ surfaceparm nolightmap
+ {
+ map textures/liquids/protolava2.tga
+ tcmod scale .2 .2
+ tcmod scroll .04 .03
+ tcMod turb 0 .1 0 .01
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/clang_floor3blava.tga
+ blendfunc blend
+
+ }
+
+}
+
+textures/base_floor/clangdark
+{
+ surfaceparm metalsteps
+
+ // metal that makes metalsteps sound
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/clangdark.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_floor/clangdark_ow
+{
+ surfaceparm metalsteps
+
+ // metal that makes metalsteps sound
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/clangdark_ow.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_floor/clangdark_ow3
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/clangdark_ow3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/clangdarkspot
+{
+ surfaceparm metalsteps
+ //{
+ // map textures/base_floor/clangdarkspot.tga
+ // rgbGen identity
+ //}
+
+ {
+ map textures/liquids/proto_grueldark.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+
+ tcMod turb 0 0.05 0 .05
+ //rgbGen identity
+ }
+
+ {
+ map textures/effects/tinfx3.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ //tcMod turb 0 0.01 0 9
+ //rgbGen identity
+ }
+
+ {
+ map textures/base_floor/clangdarkspot.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/clangfloor_noisy
+{
+ qer_editorimage textures/base_floor/clang_floor.tga
+ surfaceparm metalsteps
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/base_floor/clang_floor.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbgen identity
+
+ }
+
+}
+
+textures/base_floor/clangspot2
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/liquids/proto_grueldark.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+
+ tcMod turb 0 0.05 0 .05
+ //rgbGen identity
+ }
+
+ {
+ map textures/effects/tinfx3.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ //tcMod turb 0 0.01 0 9
+ //rgbGen identity
+ }
+
+ {
+ map textures/base_floor/clangspot2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/concretefloor1
+{
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcgen environment
+ rgbgen wave sin .25 0 0 0
+ }
+
+
+ {
+ map textures/base_floor/concretefloor1.tga
+ blendFunc GL_ZERO GL_SRC_ALPHA
+ tcmod scale .1 .1
+ rgbgen identity
+ }
+
+ {
+ map textures/base_floor/concretefloor1.tga
+ blendFunc GL_ONE GL_SRC_ALPHA
+ rgbgen identity
+ }
+
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+
+
+
+}
+
+textures/base_floor/cybergrate2
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm metalsteps
+ surfaceparm nomarks
+ {
+ map textures/base_floor/cybergrate2.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_floor/cybergrate3
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm metalsteps
+ surfaceparm nomarks
+ {
+ map textures/sfx/hologirl.tga
+ blendFunc add
+ tcmod scale 1.2 .5
+ tcmod scroll 3.1 1.1
+
+ }
+ {
+ map textures/base_floor/cybergrate3.tga
+ alphaFunc GE128
+ depthWrite
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_floor/diamond2c_ow
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/diamond2c_ow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/diamond2cspot
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/liquids/proto_grueldark2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+ tcMod turb 0 0.05 0 .05
+ }
+
+ {
+ map textures/effects/tinfx3.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ }
+
+ {
+ map textures/base_floor/diamond2cspot.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/diamond_noisy
+{
+ qer_editorimage textures/base_floor/diamond2.tga
+ surfaceparm metalsteps
+
+ // metal that makes metalsteps sound
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/diamond2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_floor/floor3_3dark_ow
+{
+
+ {
+ map textures/effects/envmapblue.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/base_floor/floor3_3dark_ow.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_floor/hfloor3
+{
+ //deformVertexes wave 100 sin 3 2 .1 3
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_floor/hfloor3.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map textures/effects/tinfx.tga
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+ {
+ map textures/base_floor/hfloor3.tga
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_floor/metalbridge04dbroke
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/metalbridge04dbroke.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/nomarkstone_1
+{
+ qer_editorimage textures/base_floor/smallstone.tga
+ q3map_lightimage textures/base_floor/smallstone.tga
+ q3map_globaltexture
+ surfaceparm nomarks
+ surfaceparm noimpact
+
+ // A stone that isn't marked by weapons. Used below red fog in pj_dm10
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/smallstone.tga
+ tcMod scale 2 2
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_floor/pjgrate1
+{
+ surfaceparm metalsteps
+ cull none
+
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/pjgrate1.tga
+ tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/pjgrate2
+{
+ surfaceparm metalsteps
+ cull none
+
+ // A RUSTED GRATE THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/pjgrate2.tga
+ tcMod scale 2.0 2.0
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ rgbGen identity
+ }
+}
+
+textures/base_floor/pool_floor2
+{
+
+
+ {
+ map textures/liquids/pool3d_5e.tga
+ tcmod scale -.25 -.25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+
+ }
+
+ {
+ map textures/liquids/pool3d_6e.tga
+ blendFunc GL_one GL_ONE
+ tcmod scale .25 .25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/base_floor/pool_floor2.tga
+ blendFunc GL_one GL_src_color
+ rgbgen identity
+ }
+
+
+ {
+ rgbGen identity
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_floor/pool_floor3
+{
+ qer_editorimage textures/base_wall/patch10rusty5.tga
+
+ {
+ map textures/liquids/pool3d_5e.tga
+ tcmod scale -.25 -.25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+
+ }
+
+ {
+ map textures/liquids/pool3d_6e.tga
+ blendFunc GL_one GL_ONE
+ tcmod scale .25 .25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/base_wall/patch10rusty5.tga
+ blendFunc GL_one GL_src_color
+ rgbgen identity
+ }
+
+
+ {
+ rgbGen identity
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_floor/pool_side2
+{
+
+
+ {
+ map textures/liquids/pool3d_5e.tga
+ tcmod scale -.5 -.25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/liquids/pool3d_6e.tga
+ blendFunc GL_one GL_ONE
+ tcmod scale .5 .25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/base_floor/pool_side2.tga
+ blendFunc GL_one GL_src_color
+ tcmod scale .5 .5
+ rgbgen identity
+ }
+
+
+ {
+ rgbGen identity
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_floor/pool_side3
+{
+ qer_editorimage textures/base_wall/patch10rusty5.tga
+
+ {
+ map textures/liquids/pool3d_5e.tga
+ tcmod scale -.5 -.25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/liquids/pool3d_6e.tga
+ blendFunc GL_one GL_ONE
+ tcmod scale .5 .25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/base_wall/patch10rusty5.tga
+ blendFunc GL_one GL_src_color
+ tcmod scale .5 .5
+ rgbgen identity
+ }
+
+
+ {
+ rgbGen identity
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_floor/proto_grate
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ cull none
+ nopicmip
+
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_grate.tga
+ //tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/proto_grate3
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ cull none
+ nopicmip
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_grate3.tga
+ //tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/proto_grate4
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm nonsolid //Tim's fuckage
+ cull none
+ nopicmip
+
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_grate4.tga
+ //tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/proto_rustygrate
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ cull none
+ nopicmip
+ // A RUSTY GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_rustygrate.tga
+ // tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/proto_rustygrate2
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ cull none
+ nopicmip
+ // A RUSTY GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_rustygrate2.tga
+ // tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/rusty_pentagrate
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+
+ cull none
+ nopicmip
+ // A RUSTY and Eeevil grate THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/rusty_pentagrate.tga
+ // tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/skylight1
+{
+ q3map_lightimage textures/base_floor/skylight1_lm.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/skylight1.tga
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/skylight1_lm.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle .2 2 0 7.7
+ }
+ {
+ map textures/base_floor/skylight1_lm.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle .2 5 1 5.1
+ }
+
+}
+
+textures/base_floor/skylight_spec
+{
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_floor/skylight_spec.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_floor/techfloor
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/sfx/proto_zzztpink.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ //clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ clampmap textures/base_floor/techfloor2.tga
+ blendFunc blend
+ tcmod rotate 170
+ tcMod stretch sin .8 0.2 0 .4
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/techfloor.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/techfloor2
+{
+ cull disable
+ //surfaceparm trans
+ surfaceparm nomarks
+ //nomipmaps
+
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ alphaFunc GE128
+ tcmod rotate 70
+ tcMod stretch sin .8 0.2 0 .3
+ rgbGen identity
+ }
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ alphaFunc GE128
+ tcmod rotate -50
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ alphaFunc GE128
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+
+}
+
+textures/base_floor/tilefloor7_ow
+{
+ q3map_lightimage textures/base_floor/tilefloor7_owfx.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/tilefloor7_ow.tga
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/tilefloor7_owfx.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 2 0 7
+ }
+ {
+ map textures/base_floor/tilefloor7_owfx.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ }
+
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_light.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_light.shader.svn-base
new file mode 100644
index 0000000..07ade96
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_light.shader.svn-base
@@ -0,0 +1,1683 @@
+textures/base_light/baslt4_1_2k
+{
+ qer_editorimage textures/base_light/baslt4_1.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ //light 1
+
+ // New Fluorescent light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/baslt4_1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/baslt4_1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/baslt4_1_4k
+{
+ qer_editorimage textures/base_light/baslt4_1.tga
+ surfaceparm nomarks
+ q3map_surfacelight 4000
+ //light 1
+
+ // New Fluorescent light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/baslt4_1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/baslt4_1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/border11light
+{
+ q3map_surfacelight 500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border11light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border11light.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/border11light_300
+{
+ qer_editorimage textures/base_light/border11light.tga
+ q3map_lightimage textures/base_light/border11light.blend.tga
+
+ q3map_surfacelight 235
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border11light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border11light.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/border7_ceil50
+{
+ qer_editorimage textures/base_light/border7_ceil50.tga
+ q3map_surfacelight 100
+ // Square dirty white llight
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border7_ceil50.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border7_ceil50glow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_22a
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_22a_8k
+{
+ surfaceparm nomarks
+ qer_editorimage textures/base_light/ceil1_22a.tga
+ q3map_surfacelight 8000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_22a_trans
+{
+ qer_editorimage textures/base_light/ceil1_22a.tga
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_30
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+// light 1
+ // Square rich blue light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_30_8k
+{
+ surfaceparm nomarks
+ qer_editorimage textures/base_light/ceil1_30.tga
+ q3map_surfacelight 8000
+// light 1
+ // Square rich blue light (8k light wattage
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_30_trans
+{
+ qer_editorimage textures/base_light/ceil1_30.tga
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+// light 1
+ // Square tourquoise light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34_10k
+{
+ qer_editorimage textures/base_light/ceil1_34.tga
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+// light 1
+ // Square tourquoise light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34_1k
+{
+ qer_editorimage textures/base_light/ceil1_34.tga
+ q3map_lightimage textures/base_light/ceil1_34.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34_2k
+{
+ qer_editorimage textures/base_light/ceil1_34.tga
+ q3map_lightimage textures/base_light/ceil1_34.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34_5k
+{
+ qer_editorimage textures/base_light/ceil1_34.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_37
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_37.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_37.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38
+{
+ surfaceparm nomarks
+ q3map_surfacelight 2500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_10k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_20k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 20000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_30k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 30000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_40k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 40000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_50k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 50000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_70k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 70000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_90k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 90000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_39
+{
+ surfaceparm nomarks
+ q3map_surfacelight 7500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_4
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_4.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_4.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil_white5k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/cornerlight
+{
+ q3map_lightimage textures/base_light/cornerlight.glow.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2500
+ {
+ map textures/base_light/cornerlight.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_light/cornerlight.glow.tga
+ blendfunc GL_one gl_one
+ rgbgen wave sawtooth .6 .1 0 7
+ }
+}
+
+textures/base_light/geolight
+{
+ q3map_lightimage textures/base_light/geolight_glow.tga
+ surfaceparm nomarks
+ q3map_surfacelight 4000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/geolight.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map textures/base_light/geolight_glow.tga
+ blendFunc add
+ rgbgen wave sin .575 .025 0 10
+ }
+
+}
+
+textures/base_light/jaildr03_1
+{
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr03_1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr03_1.tga
+ rgbGen wave sin 0.5 0.5 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/jaildr03_2
+{
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr03_2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr03_2.blend.tga
+ rgbGen wave sin 0.5 0.5 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/base_light/jaildr1_3
+{
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr1_3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr1_3.blend.tga
+ rgbGen wave sin 0.5 0.5 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1_1500
+{
+ qer_editorimage textures/base_light/light1.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ //rgbGen wave sin 0.5 0.5 0 3
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1_3000
+{
+ qer_editorimage textures/base_light/light1.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ //rgbGen wave sin 0.5 0.5 0 3
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1_5000
+{
+ qer_editorimage textures/base_light/light1.tga
+ q3map_lightimage textures/base_light/light1.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1blue_1500
+{
+ qer_editorimage textures/base_light/light1blue.tga
+ q3map_lightimage textures/base_light/light1blue.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1blue_2000
+{
+ qer_editorimage textures/base_light/light1blue.tga
+ q3map_lightimage textures/base_light/light1blue.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1blue_5000
+{
+ qer_editorimage textures/base_light/light1blue.tga
+ q3map_lightimage textures/base_light/light1blue.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1blue_800
+{
+ qer_editorimage textures/base_light/light1blue.tga
+ q3map_lightimage textures/base_light/light1blue.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 800
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1dark
+{
+ qer_editorimage textures/base_light/light1.tga
+ q3map_lightimage textures/base_light/light1.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 6000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1red_2000
+{
+ qer_editorimage textures/base_light/light1red.tga
+ q3map_lightimage textures/base_light/light1red.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1red_5000
+{
+ qer_editorimage textures/base_light/light1red.tga
+ q3map_lightimage textures/base_light/light1red.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light5_10k
+{
+ qer_editorimage textures/base_light/light5.tga
+ q3map_lightimage textures/base_light/xlight5.blend.tga
+// light 1
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/xlight5.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/xlight5.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light5_15k
+{
+ qer_editorimage textures/base_light/light5.tga
+ q3map_lightimage textures/base_light/light5.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 15000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light5.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light5.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light5_3000
+{
+ qer_editorimage textures/base_light/light5.tga
+// light 1
+ surfaceparm nomarks
+ q3map_surfacelight 3000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/xlight5.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/xlight5.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light5_5k
+{
+ qer_editorimage textures/base_light/light5.tga
+ //light 1
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_surfacelight 5000
+ {
+ map textures/base_light/light5.tga
+ rgbGen identity
+ }
+}
+
+textures/base_light/lt2_2000
+{
+ qer_editorimage textures/base_light/light2.tga
+// light 1
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.blend.tga
+ rgbGen wave sin 0.6 0.1 .1 .1
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/lt2_4000
+{
+ qer_editorimage textures/base_light/light2.tga
+ //light 1
+ surfaceparm nomarks
+ q3map_surfacelight 4000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/lt2_8000
+{
+ qer_editorimage textures/base_light/light2.tga
+ surfaceparm nomarks
+ q3map_surfacelight 8000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/patch10_pj_lite
+{
+ q3map_surfacelight 2500
+ surfaceparm nomarks
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/patch10_pj_lite2
+{
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite2.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/patch10_pj_lite2_1000
+{
+ qer_editorimage textures/base_light/patch10_pj_lite2.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ //light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite2.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/pjceil1_39_1K
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+// light 1
+ // Square dirty white
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/pjceil1_39_1p5k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/proto_light
+{
+ q3map_lightimage textures/base_light/proto_lightmap.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightmap.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 0.5 1 .1
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 -1
+ rgbgen wave triangle 1 2 0 7
+ }
+}
+
+textures/base_light/proto_light_2k
+{
+ qer_editorimage textures/base_light/proto_light.tga
+ q3map_lightimage textures/base_light/proto_lightmap.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightmap.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 0.5 1 .1
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 -1
+ rgbgen wave triangle 1 2 0 7
+ }
+}
+
+textures/base_light/proto_lightred
+{
+ q3map_lightimage textures/base_light/proto_lightred.tga
+ surfaceparm nomarks
+ q3map_surfacelight 300
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightred.tga
+ blendFunc filter
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightred.tga
+ blendFunc add
+ }
+
+}
+
+textures/base_light/proto_lightred2
+{
+ q3map_lightimage textures/base_light/proto_lightred.tga
+ qer_editorimage textures/base_light/proto_lightred.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightred.tga
+ blendFunc filter
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightred.tga
+ blendFunc add
+ rgbGen wave square .5 .5 0 1
+ }
+
+}
+
+textures/base_light/runway
+{
+ q3map_lightimage textures/base_light/runway_glow.tga
+ surfaceparm nomarks
+ q3map_surfacelight 400
+ {
+ map textures/base_light/runway_glow.tga
+ tcmod scale 1 .25
+ rgbgen wave square -1 2 .5 8
+ tcmod scroll 0 .5
+ }
+
+ {
+ map textures/base_light/runway.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc filter
+ }
+
+ {
+ map textures/base_light/runwayb.tga
+ blendFunc add
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_light/s_proto_light
+{
+ q3map_lightimage textures/base_light/s_proto_lightmap.tga
+ qer_editorimage textures/base_light/proto_light.tga
+ surfaceparm nomarks
+ q3map_surfacelight 100
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightmap.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 0.5 1 .1
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 -1
+ rgbgen wave triangle 1 2 0 7
+ }
+}
+
+textures/base_light/scrolllight
+{
+ q3map_lightimage textures/sfx/scrolllight2.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ Map textures/base_light/scrolllight.tga
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+ {
+ Map textures/base_light/scrolllight2.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -1 0
+ }
+ {
+ Map textures/base_light/scrolllight2.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -2 0
+ }
+
+
+}
+
+textures/base_light/trianglelight
+{
+ q3map_lightimage textures/base_light/trianglelight.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2500
+ {
+ map textures/base_light/trianglelight.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_light/trianglelight.blend.tga
+ blendfunc GL_one gl_one
+ rgbgen wave sawtooth .6 .1 0 7
+ }
+
+
+}
+
+textures/base_light/wsupprt1_12
+{
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ //light1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/wsupprt1_12.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/wsupprt1_12.blend.tga
+ rgbGen wave sin 0.5 0.5 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 20000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_1
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_10k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_110k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 110000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_15k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 15000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_20k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 20000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_2k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_30k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 30000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_500k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 500000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_50k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 50000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_5k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_70k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 70000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_90k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 90000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_a
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 30000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_b
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 40000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_object.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_object.shader.svn-base
new file mode 100644
index 0000000..964e334
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_object.shader.svn-base
@@ -0,0 +1,30 @@
+
+textures/base_object/boxQ3_3
+{
+ // A red box side with a specular map on it
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_object/boxQ3_3.tga
+ rgbGen identity
+ alphaGen lightingSpecular
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ }
+}
+
+textures/base_object/boxq3_4
+{
+ // A golden yellow box with a specular map on it
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_object/boxq3_4.tga
+ rgbGen identity
+ alphaGen lightingSpecular
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_support.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_support.shader.svn-base
new file mode 100644
index 0000000..03647ee
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_support.shader.svn-base
@@ -0,0 +1,211 @@
+
+textures/base_support/cable_trans
+{
+
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/base_support/cable_trans.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/base_support/grate1_3
+{
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_support/grate1_3.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ alphaGen lightingSpecular
+ rgbGen identity
+ }
+
+}
+
+textures/base_support/pj_metal14_1
+//Paul Jaquays uses this on the tops of metal frameworks
+{
+ qer_editorimage textures/base_support/metal14_1.tga
+ surfaceparm metalsteps
+
+ // metal that makes metalsteps sound
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_support/metal14_1.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/base_support/support1rust
+{
+ //deformVertexes wave 100 sin 3 2 .1 3
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_support/support1rust.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map textures/base_trim/tinfx.tga
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+ {
+ map textures/base_support/support1rust.tga
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_support/support1shiny
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_support/support1shiny.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+
+textures/base_support/support2rust
+{
+ qer_editorimage textures/base_support/support1rust.tga
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_support/support1rust.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_support/x_support
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_support/x_support.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_support/x_support2
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm playerclip
+ surfaceparm nonsolid
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_support/x_support2.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_support/x_support3
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_support/x_support3.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_support/z_support
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_support/z_support.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_trim.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_trim.shader.svn-base
new file mode 100644
index 0000000..c0582be
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_trim.shader.svn-base
@@ -0,0 +1,591 @@
+
+textures/base_trim/border11_250
+{
+ qer_editorimage textures/base_trim/border11light.tga
+ q3map_surfacelight 250
+ q3map_lightimage textures/base_trim/border11light.glow.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border11light.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border11light.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave sin .9 .1 0 10
+ }
+}
+
+textures/base_trim/border11light
+{
+ q3map_surfacelight 500
+ Q3map_lightimage textures/base_trim/border11light.glow.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border11light.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border11light.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave sin .9 .1 0 10
+ }
+}
+
+textures/base_trim/border12b
+{
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border12b.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border12bfx.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_trim/border12b_pj
+{
+ qer_editorimage textures/base_trim/border12b.tga
+ q3map_surfacelight 150
+ q3map_lightimage textures/base_trim/border12bfx.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border12b.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border12bfx.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_trim/dark_tin2
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen vertex
+ }
+ {
+ map textures/base_trim/dark_tin2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_trim/dark_tin2_trans
+{
+ qer_editorimage textures/base_trim/dark_tin2.tga
+ surfaceparm nonsolid
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen vertex
+ }
+ {
+ map textures/base_trim/dark_tin2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_trim/deeprust_trans
+{
+ qer_editorimage textures/base_trim/deeprust.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/base_trim/deeprust.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/base_trim/electricwall
+{
+ qer_editorimage textures/organics/wire02a_f.tga
+ q3map_surfacelight 400
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/organics/wire02a_f.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/organics/wire02a_f.tga
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ map textures/sfx/electric2.blend.tga
+ rgbGen wave sin 0.6 1 0 2
+ tcMod scroll 0.53 0.43
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_trim/panel_glo
+{
+
+ {
+ map textures/sfx/firegorre2.tga
+
+ tcMod turb 0 .6 0 0.06
+ tcmod scale .53 .61
+ tcmod scroll 0 4
+ blendFunc GL_ONE GL_ZERO
+ rgbGen wave sin 1 1 0 .1
+ }
+ {
+ map textures/base_trim/panel_glo.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/panel_shiny
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/panel_shiny.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/panelbrn010w
+{
+ q3map_lightimage textures/base_trim/panelbrn010wfx.tga
+
+ {
+ map textures/base_trim/panelbrn010w.tga
+ }
+
+ {
+ map textures/sfx/hologirl2.tga
+ tcmod scale .4 .4
+ tcmod scroll 6 2
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/panelbrn010w.tga
+ blendfunc blend
+
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ }
+
+}
+
+textures/base_trim/pewter_nonsolid
+{
+ qer_editorimage textures/base_trim/dirty_pewter.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/base_trim/dirty_pewter.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/base_trim/pewter_shiney
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/pewter_shiney.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/pewter_spec
+{
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_trim/pewter_spec.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+textures/base_trim/proto_comp
+{
+ {
+ map textures/base_trim/proto_comp2.tga
+ tcmod scroll 0 -.2
+ rgbGen wave sin .5 .5 0 3
+ rgbGen identity
+ }
+ {
+ clampmap textures/sfx/console03.tga
+ tcmod rotate -33
+ tcMod stretch sin .8 0 0 0
+ blendfunc add
+ rgbGen wave sin .6 0 0 0
+ }
+ {
+ clampmap textures/sfx/console02.tga
+ tcmod rotate -333
+ tcMod stretch sin .8 0 0 0
+ blendfunc add
+ rgbGen wave sin .3 0 0 0
+ }
+ {
+ map textures/effects/tinfx2c.tga
+ tcGen environment
+ blendfunc add
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/proto_comp.tga
+ blendfunc blend
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_trim/proto_fence
+{
+ surfaceparm trans
+ cull none
+ nopicmip
+
+ {
+ map textures/base_trim/proto_fence.tga
+ tcMod scale 3 3
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_trim/spiderbit
+{
+ q3map_lightimage textures/base_trim/spiderbit_fx.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbit.tga
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbit_fx.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle .1 .5 0 7
+ }
+
+}
+
+textures/base_trim/spiderbite
+{
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .3 0 .2
+ tcmod scroll 6 .7
+ tcmod scale .4 1
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbite.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ tcMod stretch sin .8 0.4 0 .2
+ tcmod scroll .3 0
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbite.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ tcMod stretch sin .8 0.2 0 .1
+ tcmod scroll -.5 0
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbite.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/spidertrim3
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spidertrim3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/spidertrim4
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spidertrim4.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/techborder
+{
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_trim/techborder_fx.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/techborder.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/techborder_fx.tga
+ //tcmod scale .1 1
+ tcmod scroll .1 0
+
+ blendfunc GL_ONE GL_ONE
+ }
+ {
+ map textures/base_trim/techborder_fx.tga
+ tcmod scale .1 1
+ tcmod scroll .1 0
+
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_trim/tin
+{
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_trim/tin.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map textures/base_trim/tinfx.tga
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+ {
+ map textures/base_trim/tin.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_trim/wires01
+{
+ cull disable
+ surfaceparm alphashadow
+ deformVertexes autoSprite2
+ surfaceparm trans
+ {
+ map textures/base_trim/wires01.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_trim/wires01_ass
+{
+ cull disable
+ surfaceparm alphashadow
+ deformVertexes autoSprite2
+ {
+ map textures/base_trim/wires01_ass.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_trim/wires02
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm trans
+ {
+ map textures/base_trim/wires02.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_trim/xborder12b
+{
+ qer_editorimage textures/base_trim/border12b.tga
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_trim/border12bfx.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border12b.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border12bfx.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_wall.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_wall.shader.svn-base
new file mode 100644
index 0000000..82730f6
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/base_wall.shader.svn-base
@@ -0,0 +1,1406 @@
+
+textures/base_wall/atech1_alpha
+{
+
+ {
+ map textures/sfx/hologirl.tga
+ tcmod scale 2 .4
+ tcmod scroll 6 .6
+ //tcMod turb 0 .1 0 .01
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/atech1_alpha.tga
+ blendfunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ }
+
+}
+
+textures/base_wall/atechengine_ax
+{
+ q3map_lightimage textures/base_wall/atechengine_ax2.tga
+ q3map_surfacelight 300
+ {
+ map textures/sfx/proto_zzztpink.tga
+ tcmod rotate 60
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/atechengine_ax.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_wall/basewall01_ow
+{
+ q3map_lightimage textures/base_wall/basewall01_owfx.tga
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/basewall01_ow.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/basewall01_owfx.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 0.5 0 .5
+ }
+
+}
+
+textures/base_wall/basewall01bit
+{
+ q3map_lightimage textures/base_wall/basewall01bitfx.tga
+ q3map_surfacelight 300
+ {
+ map textures/base_wall/basewall01bit.tga
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/basewall01bitfx.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scroll 3.3 1
+ rgbGen wave sin .5 0.5 0 5
+ }
+ {
+ map textures/effects/envmap2.tga
+ tcGen environment
+ tcmod scale 4 4
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/basewall01bit.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_wall/bluemetal1b_chrome
+{
+ qer_editorimage textures/base_wall/bluemetal1b_shiny.tga
+
+ {
+ map textures/base_wall/chrome_env2.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetal1b_shiny.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetal1b_shiny
+{
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/bluemetal1b_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/bluemetal2_noisy
+{
+ qer_editorimage textures/base_wall/bluemetal2_shiny.tga
+ surfaceparm metalsteps
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/bluemetal2_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_wall/bluemetal2_shiny
+{
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/bluemetal2_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_wall/bluemetal2_shiny_trans
+{
+ qer_editorimage textures/base_wall/bluemetal2_shiny.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/bluemetal2_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_wall/bluemetalsupport2
+{
+
+
+ {
+ map textures/base_wall/chrome_env2.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2b
+{
+
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_wall/bluemetalsupport2bglow.tga
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2b.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/bluemetalsupport2bglow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 .2
+ }
+}
+
+textures/base_wall/bluemetalsupport2c
+{
+
+
+ {
+ map textures/base_wall/chrome_env2.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2c.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2c_1
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2c_1.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2c_1vent
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2c_1vent.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2clight
+{
+ surfaceparm nomarks
+ q3map_surfacelight 500
+
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2clight.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/bluemetalsupport2clight.glow.tga
+ blendFunc add
+ rgbgen wave sawtooth .6 .1 0 4
+ }
+}
+
+textures/base_wall/bluemetalsupport2d_1
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2d_1.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2e
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2e.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2e2
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2e2.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2eye
+{
+
+ surfaceparm nomarks
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_wall/bluemetalsupport2eyel.tga
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2eye.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/bluemetalsupport2eyel.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .5 .5 0 .5
+ }
+}
+
+textures/base_wall/bluemetalsupport2f
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2f.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2fline
+{
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_wall/bluemetalsupport2fline_glow.tga
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2fline.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2fline_glow.tga
+ blendFunc add
+ rgbGen wave sin .5 .5 0 1
+ }
+
+
+}
+
+textures/base_wall/bluemetalsupport2ftv
+{
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_wall/bluemetalsupport2ftv_glow.tga
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2ftv.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2ftv_glow.tga
+ blendFunc add
+ rgbGen wave sawtooth .4 .05 0 10
+ }
+
+
+}
+
+textures/base_wall/blumtlspt2b
+{
+
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_wall/blumtlspt2bglow.tga
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/blumtlspt2b.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/bluemetalsupport2bglow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 .2
+ }
+}
+
+textures/base_wall/c_met5_2_trans
+{
+ qer_editorimage textures/base_wall/c_met5_2.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/base_wall/c_met5_2.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/base_wall/chrome_metal
+{
+ {
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .25
+
+ }
+
+ {
+ map textures/base_wall/chrome_metal.tga
+ blendFunc GL_ONE GL_ONE
+ detail
+ tcMod scale 0.0693 0.0712
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+ }
+
+
+
+}
+
+textures/base_wall/comp3
+{
+ q3map_lightimage textures/base_wall/comp3env.tga
+ qer_editorimage textures/base_wall/comp3_qer.tga
+ q3map_surfacelight 1000
+ {
+ map textures/base_wall/comp3text.tga
+ rgbGen identity
+ tcmod scroll 3 1
+ }
+
+ {
+ map textures/base_wall/comp3env.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .98 .02 0 5
+ }
+
+ {
+ map $lightmap
+ tcGen environment
+ blendFunc GL_DST_COLOR GL_ONE
+ }
+
+
+ {
+ map textures/base_wall/comp3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_wall/comp3b
+{
+ q3map_lightimage textures/base_wall/comp3textb.tga
+ qer_editorimage textures/base_wall/comp3b_qer.tga
+ q3map_surfacelight 1000
+ {
+ map textures/base_wall/comp3textb.tga
+ rgbGen identity
+ tcmod scroll 3 3
+ }
+
+ {
+ map textures/base_wall/comp3env.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .98 .02 0 5
+ }
+
+ {
+ map $lightmap
+ tcGen environment
+ blendFunc GL_DST_COLOR GL_ONE
+ }
+
+
+ {
+ map textures/base_wall/comp3b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_wall/comp3b_dark
+{
+ q3map_lightimage textures/base_wall/comp3textb.tga
+ qer_editorimage textures/base_wall/comp3b_qer.tga
+ q3map_surfacelight 1
+ {
+ map textures/base_wall/comp3textb.tga
+ rgbGen identity
+ tcmod scroll 3 3
+ }
+
+ {
+ map textures/base_wall/comp3env.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .98 .02 0 5
+ }
+
+ {
+ map $lightmap
+ tcGen environment
+ blendFunc GL_DST_COLOR GL_ONE
+ }
+
+
+ {
+ map textures/base_wall/comp3b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_wall/comp3c
+{
+ qer_editorimage textures/base_wall/comp3c_qer.tga
+
+ {
+ map textures/base_wall/comp3env.tga
+ rgbGen identity
+ tcGen environment
+ }
+
+ {
+ map $lightmap
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ }
+
+ {
+ map textures/base_wall/comp3c.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_wall/concrete_ow
+{
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/concrete_ow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_wall/dooreye
+{
+ surfaceparm nomarks
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_wall/dooreyelight.tga
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreye.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreyelight.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .5 .5 0 .5
+ }
+
+
+}
+
+textures/base_wall/dooreye2
+{
+ surfaceparm nomarks
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_wall/dooreyelight.tga
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreye2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreyelight.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .5 .5 0 .5
+ }
+
+
+}
+
+textures/base_wall/dooreye3
+{
+ surfaceparm nomarks
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_wall/dooreyelight.tga
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreye3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreyelight.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .5 .5 0 .5
+ }
+
+
+}
+
+textures/base_wall/girders1i_yellofin
+{
+ qer_editorimage textures/base_wall/girders1i_yellodark_fin.tga
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm playerclip
+ surfaceparm nonsolid
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_wall/girders1i_yellodark_fin.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_wall/glass01
+{
+ qer_editorimage textures/base_wall/shiny3.tga
+ surfaceparm trans
+ cull none
+ qer_trans 0.5
+
+ {
+ map textures/effects/tinfx.tga
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ }
+
+}
+
+textures/base_wall/glass_frame
+{
+ cull none
+ surfaceparm alphashadow
+
+ {
+ map textures/effects/tinfx2.tga
+ blendFunc GL_ONE GL_ONE
+ tcgen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/glass_frame.tga
+ alphaFunc GE128
+ depthWrite
+ //rgbGen vertex
+ //blendfunc blend
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ }
+
+}
+
+textures/base_wall/grill
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/grill.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/main_q3abanner
+{
+ q3map_lightimage textures/base_wall/main_q3abanner.tga
+ q3map_surfacelight 100
+
+
+ {
+ map textures/base_wall/main_q3abanner.tga
+ rgbGen wave square 0 1 0 .5
+ }
+
+ {
+ map textures/base_wall/comp3text.tga
+ blendfunc add
+ rgbGen identity
+ tcmod scroll 3 3
+ }
+
+ {
+ map textures/base_wall/comp3textb.tga
+ blendfunc add
+ rgbGen identity
+ tcmod scroll 3 3
+ }
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map $lightmap
+ tcgen environment
+ tcmod scale .5 .5
+ rgbGen wave sin .25 0 0 0
+ blendfunc add
+ }
+}
+
+textures/base_wall/medal_impressive
+{
+ qer_editorimage textures/base_wall/medal_impressive.tga
+ q3map_surfacelight 100
+
+
+ {
+ animMap .25 textures/base_wall/medal_impressive.tga textures/base_wall/medal_gauntlet.tga textures/base_wall/medal_excellent.tga textures/base_wall/medal_accuracy.tga textures/base_wall/medal_victory.tga textures/base_wall/medal_frags.tga
+ rgbGen wave sawtooth 0 1 0 .25
+
+ }
+
+ {
+ map textures/base_wall/comp3textd.tga
+ blendfunc add
+ tcmod scroll 5 .25
+ rgbGen wave inversesawtooth 0 1 0 .25
+ }
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcgen environment
+ tcmod scale .5 .5
+ blendfunc add
+ rgbgen wave triangle .5 .05 0 10
+ }
+
+ {
+ map textures/base_wall/comp3frame.tga
+ blendfunc blend
+ rgbgen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_wall/metalfloor_wall_14_specular
+{
+ qer_editorimage textures/base_wall/metalfloor_wall_14_specular.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/metalfloor_wall_14_specular.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_wall/metalfloor_wall_15ow
+{
+ {
+ map textures/base_wall/metalfloor_wall_15ow.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/hologirl.tga
+ tcmod scale 2 .4
+ tcmod scroll 6 .6
+ //tcMod turb 0 .1 0 .01
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+
+ }
+ {
+ map textures/base_wall/metalfloor_wall_15ow.tga
+ blendfunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ //blendfunc dst_color gl_zero
+ }
+
+}
+
+textures/base_wall/metaltechgeomtrn
+{
+
+
+ {
+ map textures/sfx/fire_ctfblue.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/metaltechgeomtrn.tga
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/metaltechgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/metaltechgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_wall/patch10shiny
+{
+ qer_editorimage textures/base_wall/patch10_beatup4_alpha.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/patch10_beatup4_alpha.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/patch10shiny_trans
+{
+ qer_editorimage textures/base_wall/patch10_beatup4_alpha.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/patch10_beatup4_alpha.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/protobanner
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm trans
+ surfaceparm nomarks
+ tessSize 64
+ deformVertexes wave 30 sin 0 3 0 .2
+ deformVertexes wave 100 sin 0 3 0 .7
+
+ {
+ map textures/base_wall/protobanner.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_wall/protobanner_ow
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm trans
+ surfaceparm nomarks
+ deformVertexes wave 100 sin 0 1 0 .1
+ deformVertexes wave 100 sin 0 1 0 .2
+
+ {
+ map textures/base_wall/protobanner_ow.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_wall/protobanner_still
+{
+ qer_editorimage textures/base_wall/protobanner.tga
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm trans
+ surfaceparm nomarks
+ tessSize 64
+ //deformVertexes wave 30 sin 0 3 0 .2
+ //deformVertexes wave 100 sin 0 3 0 .7
+
+ {
+ map textures/base_wall/protobanner.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_wall/q3tourneyscreen
+{
+ qer_editorimage textures/base_wall/q3tourney1.tga
+ q3map_surfacelight 100
+
+
+
+ {
+ animMap .25 textures/base_wall/q3tourney1.tga textures/base_wall/q3tourney2.tga textures/base_wall/q3tourney3.tga textures/base_wall/q3tourney4.tga textures/base_wall/q3tourney5.tga
+ rgbGen wave sawtooth 0 1 0 .25
+
+ }
+
+ {
+ map textures/base_wall/comp3textd.tga
+ blendfunc add
+ rgbGen wave inversesawtooth 0 1 0 .25
+ tcmod scroll 5 .25
+ }
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcgen environment
+ tcmod scale .5 .5
+ blendfunc add
+ rgbgen wave triangle .5 .05 0 10
+ }
+
+ {
+ map textures/base_wall/comp3frame.tga
+ blendfunc blend
+ rgbgen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+}
+
+textures/base_wall/shinybluemetal1
+{
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/shinybluemetal1.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/shinygrate1_4
+{
+
+ {
+ map $lightmap
+ tcgen environment
+ tcmod scale .25 .25
+ rgbgen identity
+ }
+
+
+ {
+ map textures/base_wall/shinygrate1_4.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+
+}
+
+textures/base_wall/steed1gf
+{
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/steed1gf.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/symbol_bluelt1
+{
+ q3map_lightimage textures/base_wall/symbol_bluelt1_mask.tga
+ q3map_surfacelight 100
+// light 1
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/symbol_bluelt1.tga
+ blendfunc filter
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/symbol_bluelt1_mask.tga
+ blendfunc add
+ rgbgen wave sawtooth .2 .05 0 7
+ }
+}
+
+textures/base_wall/train1
+{
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .1
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/train1.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/common.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/common.shader.svn-base
new file mode 100644
index 0000000..1cd1fe4
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/common.shader.svn-base
@@ -0,0 +1,321 @@
+
+textures/common/areaportal
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm structural
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm areaportal
+}
+
+textures/common/caulk
+{
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+}
+
+textures/common/clip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm playerclip
+}
+
+textures/common/clusterportal
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm clusterportal
+}
+
+textures/common/cushion
+{
+ qer_nocarve
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nodamage
+}
+
+textures/common/donotenter
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm donotenter
+}
+
+
+// never used
+//
+//textures/common/energypad
+//{
+// qer_editorimage textures/sfx/bluegoal.tga
+// surfaceparm nolightmap
+// cull twosided
+// {
+// map textures//bluegoal.tga
+// blendFunc GL_ONE GL_SRC_ALPHA
+// tcGen environment
+// tcMod turb 0 0.25 0 0.05
+// }
+//}
+
+textures/common/full_clip // silly shader, use weapclip instead
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm playerclip
+}
+
+textures/common/hint // should NOT use surfaceparm hint.. strange but true
+{
+ qer_nocarve
+ qer_trans 0.30
+ surfaceparm nodraw
+ surfaceparm nonsolid
+ surfaceparm structural
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm hint // ydnar: yes it should.
+}
+
+textures/common/invisible // solid, transparent polygons, casts shadows
+{
+ surfaceparm nolightmap
+ {
+ map textures/common/invisible.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+textures/common/mirror1
+{
+ qer_editorimage textures/common/mirror1.tga
+ surfaceparm nolightmap
+ portal
+
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+
+
+
+}
+
+textures/common/mirror2
+{
+ qer_editorimage textures/common/qer_mirror.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+ {
+ map textures/sfx/mirror.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ }
+
+}
+
+textures/common/missileclip
+{
+ qer_trans 0.40
+ surfaceparm nodamage
+ surfaceparm nomarks
+ surfaceparm nodraw
+ //surfaceparm nonsolid
+ surfaceparm playerclip
+ surfaceparm trans
+}
+
+textures/common/nodraw
+{
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+}
+
+textures/common/nodrawnonsolid
+{
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ surfaceparm nodraw
+}
+
+textures/common/nodrop
+{
+ qer_nocarve
+ qer_trans 0.5
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nodrop
+}
+
+
+textures/common/noimpact
+{
+ qer_editorimage textures/common/nolightmap.tga
+ surfaceparm noimpact
+}
+
+textures/common/nolightmap
+{
+ surfaceparm nolightmap
+}
+
+textures/common/origin
+{
+ qer_nocarve
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm origin
+}
+
+textures/common/portal
+{
+ qer_editorimage textures/common/qer_portal.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ tcMod turb 0 0.25 0 0.05
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+
+ }
+}
+
+textures/common/slick
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+ surfaceparm trans
+ surfaceparm slick
+}
+
+textures/common/terrain
+{
+ q3map_terrain
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+}
+
+textures/common/terrain2
+{
+ q3map_terrain
+ qer_editorimage textures/common/terrain.tga
+ surfaceparm dust
+ surfaceparm nodraw
+ surfaceparm nomarks
+ surfaceparm nolightmap
+}
+
+textures/common/timportal
+{
+ qer_editorimage textures/common/qer_portal.tga
+ portal
+ surfaceparm nolightmap
+ {
+ map textures/common/portal.tga
+ tcMod turb 0 0.25 0 0.05
+ blendFunc GL_ONE GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/common/trigger
+{
+ qer_trans 0.50
+ qer_nocarve
+ surfaceparm nodraw
+}
+
+textures/common/weapclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+}
+
+textures/common/metalclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm playerclip
+ surfaceparm metalsteps
+}
+
+textures/common/botclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm botclip
+}
+
+//
+// ydnar q3map lightgrid bounds
+//
+// the min/max bounds of brushes with this shader in a map
+// will define the bounds of the map's lightgrid (model lighting)
+// note: make it as small as possible around player space
+// to minimize bsp size and compile time
+//
+
+textures/common/lightgrid
+{
+ qer_trans 0.5
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm detail
+ surfaceparm nomarks
+ surfaceparm trans
+ surfaceparm lightgrid
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/ctf.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/ctf.shader.svn-base
new file mode 100644
index 0000000..6a28038
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/ctf.shader.svn-base
@@ -0,0 +1,577 @@
+
+textures/ctf/blue_telep
+{
+ cull disable
+ surfaceparm nomarks
+ surfaceparm trans
+ sort additive
+
+ {
+
+ clampmap textures/ctf/blue_telep.tga
+ blendFunc add
+ //depthWrite
+ //tcMod stretch sin .9 0.1 0 .5
+ tcmod rotate 327
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/blue_telep2.tga
+ blendFunc add
+ //depthWrite
+ //tcMod stretch sin .9 0.1 0 .1
+ tcmod rotate -211
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/telep.tga
+ alphaFunc GE128
+ depthWrite
+ tcmod rotate 20
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/telep.tga
+ alphaFunc GE128
+ depthWrite
+ tcMod stretch sin .7 0 0 0
+ tcmod rotate -20
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+
+
+
+}
+
+textures/ctf/ctf_arch_b_shiny
+{
+ qer_editorimage textures/ctf/ctf_arch_b.tga
+ {
+ map textures/ctf/ctf_arch_b.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod scale 10 10
+ rgbGen identity
+ }
+ {
+ map textures/ctf/ctf_arch_b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/ctf_arch_r_shiny
+{
+ qer_editorimage textures/ctf/ctf_arch_r.tga
+ {
+ map textures/ctf/ctf_arch_r.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod scale 10 10
+ rgbGen identity
+ }
+ {
+ map textures/ctf/ctf_arch_r.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/ctf_blueflag
+{
+ tessSize 64
+ deformVertexes wave 194 sin 0 3 0 .4
+ deformVertexes normal .5 .1
+ surfaceparm nomarks
+ cull none
+
+ {
+ map textures/ctf/ctf_blueflag.tga
+ rgbGen identity
+ }
+ {
+ map textures/effects/redflagmap.tga
+ tcGen environment
+ tcmod scale 9 3
+ tcmod scroll .1 .7
+
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/ctf/ctf_blueflag.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+ {
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/ctf/ctf_redflag
+{
+ tessSize 64
+ deformVertexes wave 194 sin 0 3 0 .4
+ deformVertexes normal .3 .2
+ surfaceparm nomarks
+ cull none
+
+ {
+ map textures/ctf/ctf_redflag.tga
+ rgbGen identity
+ }
+ {
+ map textures/effects/blueflagmap.tga
+ tcGen environment
+ tcmod scale 9 3
+ tcmod scroll .1 .7
+
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/ctf/ctf_redflag.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+ {
+
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/ctf/ctf_tower_bluefin_shiny
+{
+qer_editorimage textures/ctf/ctf_tower_bluefin.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/ctf_tower_bluefin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/ctf_tower_redfin_shiny
+{
+qer_editorimage textures/ctf/ctf_tower_redfin.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/ctf_tower_redfin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/killblockctf_b
+{
+ qer_editorimage textures/gothic_block/killblockgeomtrn.tga
+
+ {
+ map textures/sfx/fire_ctfblue.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/killblockgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/ctf/killblockctf_r
+{
+ qer_editorimage textures/gothic_block/blocks15cgeomtrn.tga
+
+ {
+ map textures/sfx/fire_ctfred.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks15cgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/ctf/metalbase09_bluekillblock_shiny
+{
+qer_editorimage textures/ctf/metalbase09_bluekillblock.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/metalbase09_bluekillblock.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/red_scary4_cfin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/red_scary4_cfin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/red_scary4_csansfacefin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/red_scary4_csansfacefin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/red_scary4_d3fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/red_scary4_d3fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/red_telep
+{
+ cull disable
+ surfaceparm nomarks
+ surfaceparm trans
+
+ {
+
+ clampmap textures/ctf/red_telep.tga
+ blendFunc add
+ //tcMod stretch sin .9 0.1 0 .5
+ tcmod rotate 327
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/red_telep2.tga
+ blendFunc add
+ //tcMod stretch sin .9 0.1 0 .1
+ tcmod rotate -211
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/telep.tga
+ alphaFunc GE128
+ tcmod rotate 20
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/telep.tga
+ alphaFunc GE128
+ tcMod stretch sin .7 0 0 0
+ tcmod rotate -20
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+
+
+
+}
+
+textures/ctf/tallblue_1L_fin_shiny
+{
+qer_editorimage textures/ctf/tallblue_1L_fin.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_1L_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_1R_fin_shiny
+{
+qer_editorimage textures/ctf/tallblue_1R_fin.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_1R_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_2_fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_2_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_2b_fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_2b_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_4bsmall_fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_4bsmall_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_4c_fin_shiny
+{
+qer_editorimage textures/ctf/tallblue_4c_fin.tga
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_4c_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_5esmallb_fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_5esmallb_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/test2_r_trans
+{
+ qer_editorimage textures/ctf/test2_r.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/ctf/test2_r.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/ctf/test2_trans
+{
+ qer_editorimage textures/ctf/test2.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/ctf/test2.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/default_project.proj.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/default_project.proj.svn-base
new file mode 100644
index 0000000..42ccdb4
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/default_project.proj.svn-base
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/default_shaderlist.txt.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/default_shaderlist.txt.svn-base
new file mode 100644
index 0000000..04ad521
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/default_shaderlist.txt.svn-base
@@ -0,0 +1,47 @@
+//**********************************************************************//
+// shaderlist.txt modified for Q3Radiant //
+// by Eutectic - 13 May 2000 //
+// //
+// Rev history: //
+// 08/11/2000
+// TTimo - changed liquid to liquids and sky to skies for better //
+// consistency with the directories and actual shader names //
+// //
+// Added the names of the new shader files created as a result //
+// of the cleanup of the old shader files so Q3Radiant will read //
+// and display all the shaders in the texture window. //
+// //
+// SHADER FILE NAMES ADDED: //
+// base_door //
+// gothic_button //
+// gothic_door //
+//**********************************************************************//
+
+// this file lists all the separate shader files
+base_button
+base_door
+base_floor
+base_light
+base_object
+base_support
+base_trim
+base_wall
+common
+ctf
+//eerie
+//gfx
+//hell
+gothic_block
+gothic_button
+gothic_door
+gothic_floor
+gothic_light
+gothic_trim
+gothic_wall
+liquids
+//menu
+//models
+organics
+sfx
+skin
+skies
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/entities.def.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/entities.def.svn-base
new file mode 100644
index 0000000..ed7260c
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/entities.def.svn-base
@@ -0,0 +1,1747 @@
+// Quake3 Arena entity definition file for Q3Radiant
+// Based on draft by Suicide 20 7.30.99 and inolen 9-3-99
+// Upgraded by Eutectic: eutectic@ritualistic.com
+// (visible models added by raYGunn - paths provided by Suicide 20)
+// (terrain information added to func_group entity by Paul Jaquays)
+// Q3Map2 entitys/keys added by ydnar
+// Version: 1.6
+// Last updated: 2003-11-28
+
+//=============================================================================
+
+// Q3Map2 entities
+
+//=============================================================================
+
+/*QUAKED _decal (0 1.0 0) ?
+-------- KEYS --------
+"target" : the name of the entity targetted at for projection
+-------- SPAWNFLAGS --------
+(none)
+-------- NOTES --------
+Compiler-only entity that specifies a decal to be projected. Should contain 1 or more patch meshes (curves) and target an info_null entity. The distance between the center of the _decal entity and the target is the axis and distance of projection.
+*/
+
+/*QUAKED _skybox (0.77 0.88 1.0) (-4 -4 -4) (4 4 4)
+-------- KEYS --------
+"angle" : rotation angle of the sky surfaces.
+"angles" : Individual control of PITCH, YAW, and ROLL (default 0 0 0).
+"_scale" : scaling factor (default 64), good values are between 50 and 300, depending on the map.
+-------- SPAWNFLAGS --------
+(none)
+-------- NOTES --------
+Compiler-only entity that specifies a the origin of a skybox (a wholly contained, seperate area of the map), similar to some games' portal skies. When compiled with Q3Map2, the skybox surfaces will be visible from any place where sky is normally visible. It will cast shadows on the normal parts of the map, and can be used with cloud layers and other effects.
+*/
+
+
+//=============================================================================
+
+AMMO_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED ammo_bfg (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+BFG ammo. Gives the player 15 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 15).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/bfgam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_bullets (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Machine Gun ammo. Gives the player 50 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/machinegunam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_cells (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Plasma Gun ammo. Gives the player 30 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/plasmaam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_grenades (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Grenade Launcher ammo. Gives the player 5 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/grenadeam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_lightning (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Lightning Gun ammo. Gives the player 60 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 60).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/lightningam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_rockets (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Rocket Launcher ammo. Gives the player 5 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/rocketam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_shells (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Shotgun ammo. Gives the player 10 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/shotgunam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_slugs (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Railgun ammo. Gives the player 10 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/railgunam.md3"*/
+
+//=============================================================================
+
+FUNC_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED func_bobbing (0 .5 .8) ? X_AXIS Y_AXIS
+Solid entity that oscillates back and forth in a linear motion. By default, it will have an amount of displacement in either direction equal to the dimension of the brush in the axis in which it's bobbing. Entity bobs on the Z axis (up-down) by default. It can also emit sound if the "noise" key is set. Will crush the player when blocked.
+-------- KEYS --------
+speed : amount of time in seconds for one complete oscillation cycle (default 4).
+height : sets the amount of travel of the oscillation movement (default 32).
+phase : sets the start offset of the oscillation cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav - See Notes).
+model2 : path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
+origin : alternate method of setting XYZ origin of sound and .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+X_AXIS : entity will bob along the X axis.
+Y_AXIS : entity will bob along the Y axis.
+-------- NOTES --------
+In order for the sound to be emitted from the entity, it is recommended to include a brush with an origin shader at its center, otherwise the sound will not follow the entity as it moves. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_button (0 .5 .8) ?
+When a button is touched by a player, it moves in the direction set by the "angle" key, triggers all its targets, stays pressed by an amount of time set by the "wait" key, then returns to it's original position where it can be operated again.
+-------- KEYS --------
+angle : determines the direction in which the button will move (up = -1, down = -2).
+target : all entities with a matching targetname will be triggered.
+speed : speed of button's displacement (default 40).
+wait : number of seconds button stays pressed (default 1, -1 = return immediately).
+lip : lip remaining at end of move (default 4 units).
+health : (default 0) if set to any non-zero value, the button must take damage (any amount) to activate.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_door (0 .5 .8) ? START_OPEN - CRUSHER
+Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted to it.
+-------- KEYS --------
+angle : determines the opening direction of door (up = -1, down = -2).
+speed : determines how fast the door moves (default 100).
+wait : number of seconds before door returns (default 2, -1 = return immediately)
+lip : lip remaining at end of move (default 8)
+targetname : if set, a func_button or trigger is required to activate the door.
+health : (default 0) if set to any non-zero value, the button must take damage (any amount) to activate.
+dmg : damage to inflict on player when he blocks operation of door (default 4). Door will reverse direction when blocked unless CRUSHER spawnflag is set.
+team: assign the same team name to multiple doors that should operate together (see Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+START_OPEN : the door will spawn in the open state and operate in reverse.
+CRUSHER : door will not reverse direction when blocked and will keep damaging player until he dies or gets out of the way.
+-------- NOTES --------
+Unlike in Quake 2, doors that touch are NOT automatically teamed. If you want doors to operate together, you have to team them manually by assigning the same team name to all of them. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_group (0 .5 .8) ?
+This is not an entity as such. It is strictly an editor utility to group world brushes and patches together for convenience (selecting, moving, copying, etc). You cannot group entities with this.
+-------- OLD TERRAIN KEYS (note: obsolete with Q3Map2) --------
+alphamap : this is the path/name for the art file used to guide the mapping of textures on the terrain surface.
+layers : this integer value is the number unique root shaders that will be use on the terrain.
+shader : this is the path to the metashader used to assign textures to the terrain entity.
+terrain : this is an on/off flag. When set to 1, the entity becomes a terrain entity. Note: unecessary when compiling with Q3Map2. See Q3Map2 keys.
+-------- Q3MAP2 KEYS --------
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+The TAB key can be used to flip through the component pieces of a selected func_group entity, isolating individual components. To make a func_group into a terrain entity, refer to the Terrain Construction documentation.*/
+
+//=============================================================================
+
+/*QUAKED func_pendulum (0 .5 .8) ?
+Solid entity that describes a pendulum back and forth rotation movement. Rotates on the X axis by default. Pendulum frequency is a physical constant based on the length of the beam and gravity. Blocking the pendulum instantly kills a player.
+-------- KEYS --------
+angle : angle offset of axis of rotation from default X axis (default 0).
+speed : angle of swing arc in either direction from initial position (default 30).
+phase : sets the start offset of the swinging cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
+model2 : path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
+origin : alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. Pendulum will rotate along the X axis by default. Very crude operation: pendulum cannot rotate along Z axis, the speed of swing (frequency) is not adjustable. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_plat (0 .5 .8) ?
+Rising platform the player can ride to reach higher places. Plats must always be drawn in the raised position, so they will operate and be lighted correctly but they spawn in the lowered position. The plat will stay in the raised position until the player steps off. There are no proper sounds for this entity, only beep noises. It will spawn in the game and work properly but it sounds silly (see Notes).
+-------- KEYS --------
+speed : determines how fast the plat moves (default 150).
+lip : lip remaining at end of move (default 16). Has no effect if "height" is set.
+height : if set, this will determine the total amount of vertical travel of the plat.
+dmg : damage to inflict on player when he blocks operation of plat (default 4). Plat will reverse direction when blocked.
+targetname : if set, the trigger that points to this will raise the plat each time it fires. The plat raises and comes back down a second later if no player is on it.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+By default, the total amount of vertical travel of a platform is implicitly determined by the overall vertical size of the brushes of which it's made minus the lip value. But if the "height" key is used, then the total amount of vertical travel of the plat will be exactly that value regardless of the shape and size of the plat and regardless of the value of the "lip" key. Using the "height" key is the best method for any kind of platforms and the only possible one for thin plats which need to travel vertical distances many times their own thickness. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+There is a way to make plats play proper sounds. Just create a sound\movers\plats folder under baseq3 and put 2 sounds named pt1_strt.wav and pt1_end.wav in it. Those can be the renamed sounds from the Q2 plats or renamed copies of the sound\movers\doors sounds you can extract from your pak0.pk3 file or new custom sounds if you're up to it. Thanks to Fragzilla for the tip.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_rotating (0 .5 .8) ? - - X_AXIS Y_AXIS
+Solid entity that rotates continuously. Rotates on the Z axis by default and requires an origin brush. It will always start on in the game and is not targetable.
+-------- KEYS --------
+speed : determines how fast entity rotates (default 100).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
+model2 : path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
+origin : alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+X_AXIS : entity will rotate along the X axis.
+Y_AXIS : entity will rotate along the Y axis.
+-------- NOTES --------
+You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. It will rotate along the Z axis by default. You can check either the X_AXIS or Y_AXIS box to change that. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_static (0 .5 .8) ?
+Static non-solid bspmodel. Can be used for conditional walls and models.
+-------- KEYS --------
+model2 : path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+targetname : NOT SUPPORTED BY RENDERER - if set, a func_button or trigger can make entity disappear from the game (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. If a model is included with a targeted func_static, the brush(es) of the entity will be removed from the game but the .md3 model won't: it will automatically be moved to the (0 0 0) world origin so you should NOT include an .md3 model to a targeted func_static.
+
+Because the map has only a single bot navigation file, func_static's cannot be used to make significant changes in game play flow between differing game types.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_timer (0 .5 .8) (-8 -8 -8) (8 8 8) START_ON
+Time delay trigger that will continuously fire its targets after a preset time delay. The time delay can also be randomized. When triggered, the timer will toggle on/off.
+-------- KEYS --------
+wait : delay in seconds between each triggering of its targets (default 1).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+target : this points to the entities to trigger.
+targetname : a func_button or trigger that points to this will toggle the timer on/off when activated.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+START_ON : timer will start on in the game and continuously fire its targets.
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED func_train (0 .5 .8) ?
+Trains are moving solids that follow a string of path_corner entities. Trains in Q3A are very basic, they also require an origin brush (see Notes).
+-------- KEYS --------
+speed : speed of displacement of train (default 100 or overridden by speed value of path).
+target : this points to the first path_corner of the path which is also the spawn location of the train's origin.
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of the train's brush(es) and .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+1. Trains always start on in the game.
+2. Trains do not damage the played when blocked.
+3. Trains cannot emit sound.
+4. Trains are not triggerable or toggle-able.
+5. Trains cannot be block-stopped just by getting in their way, the player must be wedged between the train and another obstacle to block it.
+
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+HOLDABLE_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED holdable_medkit (.7 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Medkit that can be picked up and used later. Brings the player's health back to 100 when used. Player can only carry one holdable item at a time.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/holdable/medkit.md3"*/
+
+//=============================================================================
+
+/*QUAKED holdable_teleporter (.7 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Teleporter item that can be picked up and used later. Teleports the player to a random player spawn point when used. Player can only carry one holdable item at a time.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/holdable/teleporter.md3"*/
+
+//=============================================================================
+
+INFO_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED info_camp (0 .5 0) (-8 -8 -8) (8 8 8)
+This atttracts bots which have a camping preference in their AI characteristics. It should be placed at least 32 units away from any brush surface.
+-------- KEYS --------
+range : number of units that the bot can move away from camp entity while camping on it.
+weight : number that is compared against the weight assigned to all the other camp spots in the map to determine if a bot chooses to camp there. The value is normalized against all other weight values.
+-------- NOTES --------
+Examples of bots which have a high camping preference are: Razor, Tank Jr., Grunt, Patriot and Doom. Examples of bots which have a low camping preference are: Klesk, Mynx, Sarge, Keel and Xaero.*/
+
+//=============================================================================
+
+/*QUAKED info_notnull (0 .5 0) (-8 -8 -8) (8 8 8)
+Used as a positional target for entities that can use directional pointing. A target_position can be used instead of this but was kept in Q3A for legacy purposes.
+-------- KEYS --------
+targetname : must match the target key of entity that uses this for pointing.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED info_null (0 .5 0) (-8 -8 -8) (8 8 8)
+Used as a positional target for light entities to create a spotlight effect. A target_position can be used instead of this but was kept in Q3A for legacy purposes.
+-------- KEYS --------
+targetname : must match the target key of entity that uses this for pointing.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED info_player_deathmatch (1 0 1) (-16 -16 -24) (16 16 32) INITIAL
+Normal player spawning location for Q3A levels.
+-------- KEYS --------
+angle : direction in which player will look when spawning in the game. Does not apply to bots.
+target : this can point at a target_give entity for respawn freebies.
+nobots : when set to 1, bots will never use this spawn point to respawn in the game.
+nohumans : when set to 1, human players will never use this spawn point to respawn in the game.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+INITIAL : makes the spawnpoint the initial place for the player to spawn at the beginning of the game.*/
+
+//=============================================================================
+
+/*QUAKED info_player_intermission (1 0 1) (-16 -16 -16) (16 16 16)
+Camera for intermission screen between matches. This also automatically generates the podium for bot arena matches (see Notes). Can be aimed by setting the "angles" key or targeting an pointing to an aiming entity. Use only one per level.
+-------- KEYS --------
+angles: alternate "pitch, yaw, roll" angles method of aiming intermission camera (default 0 0 0).
+target : point this to an info_notnull or target_position entity to set the camera's pointing angles.
+-------- NOTES --------
+In genuine bot arena matches, the podium for the 1st, 2nd and 3rd place players at the end of the match is generated by this entity. The podium's origin will automatically be located 128 units in the direction of the camera's view and 84 units down from the y height of the view line at that point. It will also always be generated on a level plane regardless of the pointing angle of the camera so if that angle is too steep, part of the podium model might not be visible. Make sure you leave at least 106 units of free space in front of where the camera points to otherwise the podium model won't be visible at all.*/
+
+//=============================================================================
+
+/*QUAKED info_player_start (1 0 0) (-16 -16 -24) (16 16 32)
+Player spawn location. It works in Quake III Arena, but it is not used in the Id maps. Use info_player_deathmatch instead.
+-------- KEYS --------
+angle : direction in which player will look when spawning in the game.
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+//QUAKED info_spectator_start (1 0 0) (-16 -16 -24) (16 16 32)
+//Spectator spawn location. Doesn't appear to work in game. Commented out.
+//-------- KEYS --------
+//notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+//notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+//notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+
+//=============================================================================
+
+ITEM_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED item_armor_body (.6 0 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Red Armor - 100 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/armor_red.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_armor_combat (1 .75 .3) (-16 -16 -16) (16 16 16) SUSPENDED
+Yellow Armor - 50 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/armor_yel.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_armor_shard (0 .7 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Green Armor Shard - 5 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/shard.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_botroam (1 0.5 0) (-8 -8 -8) (8 8 8) SUSPENDED
+Game Function: An invisible entity which attracts a bot to it. Use to move bots to parts of a map that might otherwise not be used (NEW ENTITY).
+-------- KEYS --------
+weight: non-zero floating point value, most often in the range 0 to 400. (Higher values are allowed but keep in mind that the bot should also be attracted to normal items. Don't make the weight value too high.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The item_botroam entity can be used when a bot does not roam the whole level or prefers to go to only specific areas. This (invisible) item can be placed in a map just like regular items. Nobody can actually pick up the item it's only used to attract bots to certain places of the map. The value is the weight of the roam_item is relative to the weight assigned other items in the map (each bot has its own weights). The bot character specific item weights are stored with the bot characters AI files ("botname"_i.c for items and "botname"_w.c for weapons) in the botfiles/bots/ sub-folder in the .pk3 file.*/
+
+//=============================================================================
+
+/*QUAKED item_enviro (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Battle Suit power-up - Gives protection against slime, lava and weapon splash damage. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/enviro.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_flight (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Flight power-up. Lasts 60 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 60).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/flight.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_haste (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Speed power-up. Makes player run at double speed for 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/haste.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health (.8 .8 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Yellow cross bubble - 25 Health. Cannot be picked up over 100 health.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 25).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/medium_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_large (1 0 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Gold cross bubble - 50 Health. Cannot be picked up over 100 health.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/large_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_mega (0 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Blue M bubble - 100 Health. Adds 100 health points to current health up to a maximum of 200.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/mega_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_small (0 1 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Green cross bubble - 5 Health. Can be picked up over 100 health but slowly wears out to 100 afterwards.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/small_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_invis (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Invisibility power-up. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/invis.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_quad (.4 .6 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Quad Damage power-up. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+model="models/powerups/instant/quad.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_regen (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Health Regeneration power-up. This will boost your current health by 5 points every second for a period of up to 30 seconds or up to 200 points whichever comes first. Afterwards, any health points over 100 slowly wears out to 100.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/regen.md3"*/
+
+//=============================================================================
+
+LIGHT ENTITY
+
+//=============================================================================
+
+
+/*QUAKED light (.65 .65 1) (-8 -8 -8) (8 8 8) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT
+Non-displayed point light source. The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights.
+-------- KEYS --------
+_light OR light: overrides the default 300 intensity.
+_color : weighted RGB value of light color (default white - 1.0 1.0 1.0).
+target : Lights pointed at a target will be spotlights.
+radius: overrides the default 64 unit radius of a spotlight at the target point.
+-------- Q3MAP2 KEYS --------
+_sun : Set this key to 1 on a spotlight to make an infinite sun light.
+fade : Fades light attenuation. Only affects linear lights.
+scale : Scales light attentation, from SOF2/JK2. Scales the "light" value.
+-------- SPAWNFLAGS --------
+LINEAR : Use a linear falloff. Default is inverse distance squared (more realistic).
+NOANGLE : Ignore angle attenuation.
+NOGRIDLIGHT : Do not affect the lightgrid (dynamic entity lighting).*/
+
+/*QUAKED lightJunior (0 0.7 0.3) (-6 -6 -6) (6 6 6) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT
+Non-displayed point light source THAT ONLY AFFECTS ENTITIES (lightgrid). The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights.
+-------- KEYS --------
+_light OR light: overrides the default 300 intensity.
+_color : weighted RGB value of light color (default white - 1.0 1.0 1.0).
+target : Lights pointed at a target will be spotlights.
+radius: overrides the default 64 unit radius of a spotlight at the target point.
+-------- Q3MAP2 KEYS --------
+_sun : Set this key to 1 on a spotlight to make an infinite sun light.
+fade : Fades light attenuation. Only affects linear lights.
+scale : Scales light attentation, from SOF2/JK2. Scales the "light" value.
+-------- SPAWNFLAGS --------
+LINEAR : Use a linear falloff. Default is inverse distance squared (more realistic).
+NOANGLE : Ignore angle attenuation.
+NOGRIDLIGHT : Do not affect the lightgrid (dynamic entity lighting). Setting this spawnflag will disable this light entirely.*/
+
+//=============================================================================
+
+MISC_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED misc_model (1 .5 .25) (-16 -16 -16) (16 16 16)
+Generic placeholder for inserting MD3 models in game. Requires compilation of map geometry to be added to level. If the map is compiled with Q3Map2, then ASE, 3DS, OBJ and other model formats are supported.
+-------- KEYS --------
+angle: direction in which model will be oriented.
+model : path/name of model to use (eg: models/mapobjects/teleporter/teleporter.md3).
+-------- Q3MAP2 KEYS --------
+angles : Individual control of PITCH, YAW, and ROLL (default 0 0 0).
+modelscale : Floating-point value used to scale a model up or down (default 1.0).
+modelscale_vec : Floating-point vector used to scale a model's axes individually (default 1.0 1.0 1.0).
+_remap : Used to remap textures/shaders in the model. To remap all shaders to a given shader, use "*;models/mymodel/mytexture". To remap a specific shader, use "models/mymodel/old;models/mymodel/new".
+target : Used to attach the misc_model to a brush entity, where its "targetname" key is the same value.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on this model (if model is using lightmapped shaders) (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+*/
+
+//=============================================================================
+
+/*QUAKED misc_portal_camera (1 .5 .25) (-8 -8 -8) (8 8 8) SLOWROTATE FASTROTATE
+Portal camera. This camera is used to project its view onto a portal surface in the level through the intermediary of a misc_portal_surface entity. Use the "angles" key or target a target_position or info_notnull entity to set the camera's pointing direction.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of the portal camera (default 0 0). Use "roll" key to set roll angle.
+target : point this to a target_position entity to set the camera's pointing direction.
+targetname : a misc_portal_surface portal surface indicator must point to this.
+roll: roll angle of camera. A value of 0 is upside down and 180 is the same as the player's view.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+SLOWROTATE : makes the portal camera rotate slowly along the roll axis.
+FASTROTATE : makes the portal camera rotate faster along the roll axis.
+-------- NOTES --------
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the camera. However, the target_position method is simpler. In both cases, the "roll" key must be used to set the roll angle. If either the SLOWROTATE or FASTROTATE spawnflag is set, then the "roll" value is irrelevant.*/
+
+//=============================================================================
+
+/*QUAKED misc_portal_surface (1 .5 .25) (-8 -8 -8) (8 8 8)
+Portal surface indicator. This will "lock on" the brush face closest to it and identify as a portal. The view displayed on the portal surface is the view of the misc_portal_camera that this entity targets. Also used for mirrors (see Notes).
+-------- KEYS --------
+target : point this to a misc_portal_camera that "sees" the view you want to display on the portal.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+The entity must be no farther than 64 units away from the portal surface to lock onto it. To make a mirror, apply the common/mirror shader to the surface, place this entity near it but don't target a misc_portal_camera.*/
+
+//=============================================================================
+
+/*QUAKED misc_teleporter_dest (1 .5 .25) (-32 -32 -24) (32 32 -16)
+Teleport destination location point for trigger_teleporter entities.
+-------- KEYS --------
+angle : direction in which player will look when teleported.
+targetname : make the trigger_teleporter point to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+PATH_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED path_corner (.5 .3 0) (-8 -8 -8) (8 8 8)
+Path corner entity that func_trains can be made to follow.
+-------- KEYS --------
+target : point to next path_corner in the path.
+targetname : the train following the path or the previous path_corner in the path points to this.
+speed : speed of func_train while moving to the next path corner. This will override the speed value of the train.
+wait : number of seconds func_train will pause on path corner before moving to next path corner (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+Setting the wait key to -1 will not make the train stop on the path corner, it will simply default to 0.*/
+
+//=============================================================================
+
+SHOOTER_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED shooter_grenade (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a grenade each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the grenades.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+/*QUAKED shooter_plasma (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a plasma ball each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the plasma balls.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+/*QUAKED shooter_rocket (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a rocket each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the rockets.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+TARGET_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED target_delay (0 .7 .7) (-8 -8 -8) (8 8 8)
+Time delay trigger intermediary. Like a target_relay, this can only be fired by other triggers which will cause it in turn to fire its own targets.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this points to entities to activate when this entity is triggered.
+wait : delay in seconds from when this gets triggered to when it fires its own targets (default approx. 1).
+delay : same as wait? replaces it? WTF?...I'm confused now.
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED target_give (0 .5 0) (-8 -8 -8) (8 8 8)
+This is used to give ammo, weapons, health or items to the player who activates it.
+-------- KEYS --------
+target : this points to the item(s) to give when activated.
+targetname : activating trigger or spawn entity points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+There are 2 ways to use this entity.
+a) automatically give items to players when they spawn in the game: make a spawn location entity like info_player_deathmatch or CTF respawn points target this entity, then make it target the item(s) to give to the player upon respawn.
+b) give items to players during the game: make a trigger_multiple target this entity, then make it target the item(s) to give to the player when the trigger is touched.*/
+
+//=============================================================================
+
+/*QUAKED target_kill (0 .5 0) (-8 -8 -8) (8 8 8)
+This will kill the player who activates the trigger that fires this target.
+-------- KEYS --------
+targetname : the activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+//QUAKED target_laser (0 .5 0) (-8 -8 -8) (8 8 8) START_ON
+//Generates a red laser beam. I think this can somehow spawn in the game, I saw it once but it's too inconsistent to be usable. Commented out.
+//-------- KEYS --------
+//angles: alternate "pitch, yaw, roll" angles method of aiming laser (default 0 0 0).
+//target : point this to a target_position entity to set the laser's aiming direction.
+//targetname : the activating trigger points to this.
+//notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+//notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+//notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+//-------- SPAWNFLAGS --------
+//START_ON : when set, the laser will start on in the game.
+
+//=============================================================================
+
+/*QUAKED target_location (0 .5 0) (-8 -8 -8) (8 8 8)
+Location marker used by bots and players for team orders and team chat in the course of Teamplay games. The closest target_location in sight is used for the location. If none is in sight, the closest in distance is used.
+-------- KEYS --------
+message : name of the location (text string). Displayed in parentheses in front of all team chat and order messages.
+count : color of the location text displayed in parentheses during team chat. Set to 0-7 for color.
+ 0 : white (default)
+ 1 : red
+ 2 : green
+ 3 : yellow
+ 4 : blue
+ 5 : cyan
+ 6 : magenta
+ 7 : white
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_position (0 .5 0) (-8 -8 -8) (8 8 8)
+Aiming target for entities like light, misc_portal_camera and trigger_push (jump pads) in particular.
+-------- KEYS --------
+targetname : the entity that requires an aiming direction points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+To make a jump pad, place this entity at the highest point of the jump and target it with a trigger_push entity.*/
+
+//=============================================================================
+
+/*QUAKED target_print (0 .5 0) (-8 -8 -8) (8 8 8) REDTEAM BLUETEAM PRIVATE
+This will print a message on the center of the screen when triggered. By default, all the clients will see the message.
+-------- KEYS --------
+message : text string to print on screen.
+targetname : the activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+REDTEAM : only the red team players will see the message.
+BLUETEAM : only the blue team players will see the message.
+PRIVATE : only the player that activates the target will see the message.*/
+
+//=============================================================================
+
+/*QUAKED target_push (.5 .5 .5) (-8 -8 -8) (8 8 8) BOUNCEPAD
+This can be used to create jump pads and launch ramps. The direction of push can be set by the "angles" key or pointing to a target_position or info_notnull entity. Unlike trigger_push, this is NOT client side predicted and must be activated by a trigger.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of push entity (default 0 0). The roll angle does not apply.
+speed : speed of push (default 1000). Has no effect if entity targets an aiming entity.
+targetname : the activating trigger points to this. Push originates from the location of the trigger.
+target : this points to the aiming entity to which the player will jump.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+BOUNCEPAD : if set, trigger will play bounce noise instead of beep noise when activated (recommended).
+-------- NOTES --------
+To make a jump pad or launch ramp, create a trigger_multiple where the jump must originate. Place the target_push directly above the trigger_multiple and place the target_position entity at the highest point of the jump. Target the trigger_multiple to the target_push and target the target_push to the target_position/info_notnull (or set the target_push's "angles" key). Note that the "angle" key also works.*/
+
+//=============================================================================
+
+/*QUAKED target_relay (0 .7 .7) (-8 -8 -8) (8 8 8) RED_ONLY BLUE_ONLY RANDOM
+This can only be activated by other triggers which will cause it in turn to activate its own targets.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this points to entities to activate when this entity is triggered.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+RED_ONLY : only red team players can activate trigger.
+BLUE_ONLY : only red team players can activate trigger.
+RANDOM : one one of the targeted entities will be triggered at random.*/
+
+//=============================================================================
+
+/*QUAKED target_remove_powerups (0 .7 .7) (-8 -8 -8) (8 8 8)
+This takes away any and all item_* type powerups from player except health and armor (holdable_* items are not taken away either). Must be activated by a button or trigger_multiple entity. The player that activates the trigger will lose any powerup(s) currently in his possession.
+-------- KEYS --------
+targetname : activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_score (0 .5 0) (-8 -8 -8) (8 8 8)
+This is used to automatically give frag points to the player who activates this. A spawn location entity like info_player_* or CTF respawn points can target this entity to give points to the player when he spawns in the game. Or a trigger can also be used to activate this. The activator of the trigger will get the points.
+-------- KEYS --------
+targetname : ativating entity points to this.
+count: number of frag points to give to player (default 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_speaker (0 .7 .7) (-8 -8 -8) (8 8 8) LOOPED_ON LOOPED_OFF GLOBAL ACTIVATOR
+Sound generating entity that plays .wav files. Normal non-looping sounds play each time the target_speaker is triggered. Looping sounds can be set to play by themselves (no activating trigger) or be toggled on/off by a trigger.
+-------- KEYS --------
+noise : path/name of .wav file to play (eg. sound/world/growl1.wav - see Notes).
+wait : delay in seconds between each time the sound is played ("random" key must be set - see Notes).
+random : random time variance in seconds added or subtracted from "wait" delay ("wait" key must be set - see Notes).
+targetname : the activating button or trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+LOOPED_ON : sound will loop and initially start on in level (will toggle on/off when triggered).
+LOOPED_OFF : sound will loop and initially start off in level (will toggle on/off when triggered).
+GLOBAL : sound will play full volume throughout the level.
+ACTIVATOR : sound will play only for the player that activated the target.
+-------- NOTES --------
+The path portion value of the "noise" key can be replaced by the implicit folder character "*" for triggered sounds that belong to a particular player model. For example, if you want to create a "bottomless pit" in which the player screams and dies when he falls into, you would place a trigger_multiple over the floor of the pit and target a target_speaker with it. Then, you would set the "noise" key to "*falling1.wav". The * character means the current player model's sound folder. So if your current player model is Visor, * = sound/player/visor, if your current player model is Sarge, * = sound/player/sarge, etc. This cool feature provides an excellent way to create "player-specific" triggered sounds in your levels.
+
+The combination of the "wait" and "random" keys can be used to play non-looping sounds without requiring an activating trigger but both keys must be used together. The value of the "random" key is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED target_teleporter (0 .5 0) (-8 -8 -8) (8 8 8)
+Activating this will teleport players to the location of the targeted misc_teleporter_dest entity. Unlike trigger_teleport, this entity must be activated by a trigger and does NOT allow client prediction of events.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this must point to a misc_teleporter_dest entity.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+TEAM_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED team_CTF_blueflag (0 .2 1) (-16 -16 -16) (16 16 16)
+Blue team flag for CTF games.
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/flags/b_flag.md3"*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_blueplayer (0 .2 1) (-16 -16 -24) (16 16 32)
+Initial Blue team spawning position for CTF games. This is where players spawn when they join the Blue team.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_bluespawn (0 .2 1) (-16 -16 -24) (16 16 32)
+Blue team respawning position for CTF games. This is where Blue team players respawn after they get fragged.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redflag (1 .2 0) (-16 -16 -16) (16 16 16)
+Red team flag for CTF games.
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/flags/r_flag.md3"*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redplayer (1 .2 0) (-16 -16 -24) (16 16 32)
+Initial Red team spawning position for CTF games. This is where players spawn when they join the Red team.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redspawn (0 .2 1) (-16 -16 -24) (16 16 32)
+Red team respawning position for CTF games. This is where Red team players respawn after they get fragged.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+TRIGGER_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED trigger_always (.5 .5 .5) (-8 -8 -8) (8 8 8)
+Automatic trigger. It will fire the entities it targets as soon as it spawns in the game.
+-------- KEYS --------
+target : this points to the entity to activate.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED trigger_hurt (.5 .5 .5) ? START_OFF - SILENT NO_PROTECTION SLOW
+Any player that touches this will be hurt by "dmg" points of damage once per server frame (very fast). A sizzling sound is also played while the player is being hurt.
+-------- KEYS --------
+dmg : number of points of damage inflicted to player per server frame (default 5 - integer values only).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+START_OFF needs to be triggered (toggle) for damage
+SILENT : supresses the sizzling sound while player is being hurt.
+NO_PROTECTION : player will be hurt regardless of protection (see Notes).
+SLOW : changes the damage rate to once per second.
+-------- NOTES --------
+The invulnerability power-up (item_enviro) does not protect the player from damage caused by this entity regardless of whether the NO_PROTECTION spawnflag is set or not. Triggering a trigger_hurt will have no effect if the START_OFF spawnflag is not set. A trigger_hurt always starts on in the game.*/
+
+//=============================================================================
+
+/*QUAKED trigger_multiple (.5 .5 .5) ?
+Variable size repeatable trigger. It will fire the entities it targets when touched by player. Can be made to operate like a trigger_once entity by setting the "wait" key to -1. It can also be activated by another trigger that targets it.
+-------- KEYS --------
+target : this points to the entity to activate.
+targetname : activating trigger points to this.
+wait : time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED trigger_push (.5 .5 .5) ?
+This is used to create jump pads and launch ramps. It MUST point to a target_position or info_notnull entity to work. Unlike target_push, this is client side predicted.
+-------- KEYS --------
+target : this points to the target_position to which the player will jump.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+To make a jump pad or launch ramp, place the target_position/info_notnull entity at the highest point of the jump and target it with this entity.*/
+
+//=============================================================================
+
+/*QUAKED trigger_teleport (.5 .5 .5) ?
+Touching this will teleport players to the location of the targeted misc_teleporter_dest entity. This entity allows client prediction of events.
+-------- KEYS --------
+target : this must point to a misc_teleporter_dest entity.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+WEAPON_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED weapon_bfg (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Big Freaking Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 20).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/bfg/bfg.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_gauntlet (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Gauntlet.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/gauntlet/gauntlet.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_grapplinghook (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Grappling Hook. Spawns in the game and works but is unskinned.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/grapple/grapple.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_grenadelauncher (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Grenade Launcher.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/grenadel/grenadel.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_lightning (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Lightning Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models\weapons2\lightning\lightning.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_machinegun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Machine Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models\weapons2\machinegun\machinegun.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_plasmagun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Plasma gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/plasma/plasma.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_railgun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Railgun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/railgun/railgun.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_rocketlauncher (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Rocket Launcher.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/rocketl/rocketl.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_shotgun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Shotgun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/shotgun/shotgun.md3"*/
+
+//=============================================================================
+
+WORLDSPAWN ENTITY
+
+//=============================================================================
+
+/*QUAKED worldspawn (0 0 0) ?
+Only used for the world.
+-------- KEYS --------
+message : text to print at user logon. Used for name of level.
+music : path/name of looping .wav file used for level's music (eg. music/sonic5.wav).
+_ambient OR ambient : Adds a constant value to overall lighting. Use is not recommended. Ambient light will have a tendency to flatten out variations in light and shade.
+_color : RGB value for ambient light color (default is 0 0 0).
+gravity : gravity of level (default is normal gravity: 800).
+gridsize : granularity of the lightgrid created by q3map. Value is three integers separated by spaces, representing number of units between grid points in X Y Z. Default gridsize value is 128 128 256. Use larger powers of 2 to reduce BSP size and compile time on very large maps.
+_blocksize : q3map always splits the BSP tree along the planes X=_blocksize*n and Y=_blocksize*n. Default _blocksize value is 1024. Increase the blocksize using larger powers of 2 to reduce compile times on very large maps with a low structural brush density.
+-------- Q3MAP2 KEYS --------
+_minlight : Minimum light value, levelwide. Uses the _color key to set color. Does not add unlike ambient.
+_minvertexlight : Minimum vertex lighting, levelwide.
+_mingridlight : Minimum lightgrid (dynamic entity lighting) levelwide.
+_keeplights : Keep light entities in the BSP. Normally stripped out by the BSP process and read from the .map file by the lighting phase.
+_noshadersun : Ignore q3map_sun/sun directives in sky shaders and ONLY use entity sun lights.
+_farplanedist : Limit on how many units the vis phase of compilation can see. Used in combination with level-wide fog, it can help reduce r_speeds on large, open maps.
+_foghull : Shader to use for "fog hull." Foghull shader should be a sky shader. Omit the "textures/" prefix.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in the world. Can be overridden in func_group (or other entities) (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. Overridable in entities.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.*/
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gfx.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gfx.shader.svn-base
new file mode 100644
index 0000000..e95ff57
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gfx.shader.svn-base
@@ -0,0 +1,1474 @@
+//**********************************************************************//
+// gfx.shader updated //
+// by Eutectic - 23 Jan 2000 //
+// This file is irrelevant for Q3Radiant //
+// It was updated for sake of completeness: //
+// shaders that belong here were moved from other shader files //
+// //
+// SHADERS THAT DIDN'T BELONG HERE AND MOVED TO PROPER FILE: 0 //
+// SHADERS THAT BELONGED HERE BUT WERE IN ANOTHER FILE: 6 //
+// powerups/blueflag //
+// powerups/redflag //
+// sprites/foe //
+// sprites/friend //
+// sprites/plasma1 //
+// sprites/plasma2 //
+//**********************************************************************//
+
+// GFX.SHADER
+//
+// this file contains shaders that are used by the programmers to
+// generate special effects not attached to specific geometry. This
+// also has 2D shaders such as fonts, etc.
+//
+
+// the REGION shader is generated by the map editor on temporary
+// brushes around a selected area for testing parts of maps
+
+textures/REGION
+{
+ surfaceparm nolightmap
+}
+
+// the background for the netgraph
+lagometer
+{
+ nopicmip
+ {
+ map gfx/2d/lag.tga
+ }
+}
+
+// blinked on top of lagometer when connection is interrupted
+disconnected
+{
+ nopicmip
+ {
+ map gfx/2d/net.tga
+ }
+}
+
+white
+{
+ {
+ map *white
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+console
+{
+ nopicmip
+ nomipmaps
+
+ {
+ map gfx/misc/console01.tga
+ blendFunc GL_ONE GL_ZERO
+ tcMod scroll .02 0
+ tcmod scale 2 1
+ }
+ {
+ map gfx/misc/console02.tga
+ //map textures/sfx/firegorre3.tga
+ blendFunc add
+ tcMod turb 0 .1 0 .1
+ tcMod scale 2 1
+ tcmod scroll 0.2 .1
+ }
+
+}
+
+menuback
+{
+ nopicmip
+ nomipmaps
+ //{
+ // map textures/sfx/logo512.tga
+ //}
+
+ //{
+ // map textures/sfx/specular.tga
+ // //blendfunc add
+ // tcMod turb 0 .8 0 .2
+ // tcmod scroll -.1 -.2
+ //}
+ {
+ map textures/sfx/logo512.tga
+ // blendFunc blend
+ rgbgen identity
+ }
+ //{
+ // map textures/sfx/proto_zzzdrk.tga
+ // blendFunc add
+ // tcMod turb 0 .1 0 .9
+ // tcmod scale .2 .2
+ // tcMod scroll .02 0.7
+ // rgbgen identity
+ //}
+
+}
+menubacknologo
+{
+ nopicmip
+ nomipmaps
+
+ {
+ map gfx/colors/black.tga
+ //map textures/sfx/proto_zzzdrk.tga
+ // tcMod turb 0 .1 0 .9
+ // tcmod scale .2 .2
+ // tcMod scroll .02 0.7
+ }
+
+}
+
+menubackRagePro // blends turn to shit on rage pro, so skip it
+{
+ nopicmip
+ nomipmaps
+ {
+ map textures/sfx/logo512.tga
+ }
+
+}
+
+
+levelShotDetail
+// used to break up the blur on levelshots
+{
+ nopicmip
+ {
+ map textures/sfx/detail.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR
+ rgbgen identity
+ }
+}
+
+//
+// special effects as seen on players
+//
+
+powerups/battleSuit
+{
+ deformVertexes wave 100 sin 1 0 0 0
+ {
+ map textures/effects/envmapgold2.tga
+ //map textures/sfx/specular.tga
+ tcGen environment
+ tcMod turb 0 0.15 0 0.3
+ tcmod rotate 333
+ tcmod scroll .3 .3
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+powerups/battleWeapon
+{
+ deformVertexes wave 100 sin 0.5 0 0 0
+ {
+ map textures/effects/envmapgold2.tga
+ //map textures/sfx/specular.tga
+ tcGen environment
+ tcMod turb 0 0.15 0 0.3
+ tcmod rotate 333
+ tcmod scroll .3 .3
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+powerups/invisibility
+{
+ {
+ map textures/effects/invismap.tga
+ //map textures/sfx/specular.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 0.15 0 0.25
+ tcGen environment
+ }
+}
+
+powerups/quad
+{
+ deformVertexes wave 100 sin 3 0 0 0
+ {
+ map textures/effects/quadmap2.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod rotate 30
+ //tcMod turb 0 0.2 0 .2
+ tcmod scroll 1 .1
+ }
+}
+
+powerups/quadWeapon
+{
+ deformVertexes wave 100 sin 0.5 0 0 0
+ {
+ map textures/effects/quadmap2.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod rotate 30
+ //tcMod turb 0 0.2 0 .2
+ tcmod scroll 1 .1
+ }
+}
+
+powerups/regen
+{
+ deformVertexes wave 100 sin 3 0 0 0
+ {
+ map textures/effects/regenmap2.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod rotate 30
+ //tcMod turb 0 0.2 0 .2
+ tcmod scroll 1 .1
+ }
+}
+
+powerups/blueflag
+{
+ deformVertexes wave 100 sin 3 0 0 0
+ {
+ map textures/effects/blueflagmap.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcMod turb 0 0.2 0 1
+ }
+}
+
+powerups/redflag
+{
+ deformVertexes wave 100 sin 3 0 0 0
+ {
+ map textures/effects/redflagmap.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcMod turb 0 0.2 0 1
+ }
+}
+
+
+//=========================
+
+//
+// holdable item icons
+//
+
+icons/medkit
+{
+ nopicmip
+ {
+ map icons/medkit.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/teleporter
+{
+ nopicmip
+ {
+ map icons/teleporter.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+//
+// powerup icons
+//
+
+icons/envirosuit
+{
+ nopicmip
+ {
+ map icons/envirosuit.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/flight
+{
+ nopicmip
+ {
+ map icons/flight.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/haste
+{
+ nopicmip
+ {
+ map icons/haste.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/invis
+{
+ nopicmip
+ {
+ map icons/invis.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/quad
+{
+ nopicmip
+ {
+ map icons/quad.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/regen
+{
+ nopicmip
+ {
+ map icons/regen.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+
+// reward medals used in the game floating over client's heads
+
+medal_excellent
+{
+ nopicmip
+ {
+ clampmap menu/medals/medal_excellent.tga
+ blendFunc blend
+ }
+}
+
+medal_gauntlet
+{
+ nopicmip
+ {
+ clampmap menu/medals/medal_gauntlet.tga
+ blendFunc blend
+ }
+}
+
+medal_impressive
+{
+ nopicmip
+ {
+ clampmap menu/medals/medal_impressive.tga
+ blendFunc blend
+ }
+}
+
+//
+// weapon icons
+//
+
+icons/iconw_gauntlet
+{
+ nopicmip
+ {
+ map icons/iconw_gauntlet.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_machinegun
+{
+ nopicmip
+ {
+ map icons/iconw_machinegun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_rocket
+{
+ nopicmip
+ {
+ map icons/iconw_rocket.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_shotgun
+{
+ nopicmip
+ {
+ map icons/iconw_shotgun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen identitylighting
+ }
+}
+
+icons/iconw_grenade
+{
+ nopicmip
+ {
+ map icons/iconw_grenade.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_lightning
+{
+ nopicmip
+ {
+ map icons/iconw_lightning.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_plasma
+{
+ nopicmip
+ {
+ map icons/iconw_plasma.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_railgun
+{
+ nopicmip
+ {
+ map icons/iconw_railgun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_bfg
+{
+ nopicmip
+ {
+ map icons/iconw_bfg.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_grapple
+{
+ nopicmip
+ {
+ map icons/iconw_grapple.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+//
+// ammo icons
+//
+
+icons/icona_machinegun
+{
+ nopicmip
+ {
+ map icons/icona_machinegun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_rocket
+{
+ nopicmip
+ {
+ map icons/icona_rocket.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_shotgun
+{
+ nopicmip
+ {
+ map icons/icona_shotgun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen identitylighting
+ }
+}
+
+icons/icona_grenade
+{
+ nopicmip
+ {
+ map icons/icona_grenade.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_lightning
+{
+ nopicmip
+ {
+ map icons/icona_lightning.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_plasma
+{
+ nopicmip
+ {
+ map icons/icona_plasma.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_railgun
+{
+ nopicmip
+ {
+ map icons/icona_railgun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_bfg
+{
+ nopicmip
+ {
+ map icons/icona_bfg.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+
+//
+// armor icons
+//
+
+icons/iconr_shard
+{
+ nopicmip
+ {
+ map icons/iconr_shard.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconr_yellow
+{
+ nopicmip
+ {
+ map icons/iconr_yellow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconr_red
+{
+ nopicmip
+ {
+ map icons/iconr_red.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+//
+// health icons
+//
+
+icons/iconh_green
+{
+ nopicmip
+ {
+ map icons/iconh_green.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconh_yellow
+{
+ nopicmip
+ {
+ map icons/iconh_yellow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconh_red
+{
+ nopicmip
+ {
+ map icons/iconh_red.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+ //{
+ // clampmap icons/iconh_red2.tga
+ // blendFunc blend
+ // tcMod stretch sin .04 1 0 1
+ //}
+}
+
+icons/iconh_mega
+{
+ nopicmip
+ {
+ map icons/iconh_mega.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+//
+// CTF icons
+//
+
+icons/iconf_red
+{
+ nopicmip
+ {
+ map icons/iconf_red.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconf_blu
+{
+ nopicmip
+ {
+ map icons/iconf_blu.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+
+//===================================================
+
+gfx/2d/menuinfo
+{
+ nopicmip
+ {
+ map gfx/2d/menuinfo.tga
+ }
+}
+
+gfx/2d/menuinfo2
+{
+ nopicmip
+ {
+ map gfx/2d/menuinfo2.tga
+ }
+}
+
+gfx/2d/quit
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/quit.tga
+ }
+}
+
+gfx/2d/cursor
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/cursor.tga
+ }
+}
+
+//==========================================================================
+
+// chat icon floating over client's heads in the game
+
+sprites/balloon3
+{
+ {
+ map sprites/balloon4.tga
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+// friend and foe icons floating over client's heads in teamplay games
+
+sprites/foe
+{
+ nomipmaps
+ nopicmip
+ {
+ map sprites/foe2.tga
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+sprites/friend
+{
+ nomipmaps
+ nopicmip
+ {
+ map sprites/friend1.tga
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+sprites/plasma1
+{
+ cull disable
+ {
+ clampmap sprites/plasmaa.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod rotate 931
+ }
+}
+
+sprites/plasma2
+{
+ cull disable
+ {
+ map sprites/plasma2.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+// this is an example of a crossfaded animation cycle
+
+textures/animationTest
+{
+ qer_editorimage textures/liquids/bloodwater1.tga
+ {
+ animMap 0.5 textures/liquids/bloodwater1.tga textures/liquids/pool.tga textures/liquids/slime7.tga
+ }
+ {
+ animMap 0.5 textures/liquids/pool.tga textures/liquids/slime7.tga textures/liquids/bloodwater1.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaGen wave sawtooth 0 1 0 0.5
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+teleportEffect
+{
+ cull none
+ {
+ map gfx/misc/teleportEffect2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen entity
+ tcMod scale 1 4
+ tcMod scroll 0 2
+ }
+}
+
+// markShadow is the very cheap blurry blob underneat the player
+
+markShadow
+{
+ polygonOffset
+ {
+ map gfx/damage/shadow.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+// projectionShadow is used for cheap squashed model shadows
+
+projectionShadow
+{
+ polygonOffset
+ deformVertexes projectionShadow
+ {
+ map *white
+ blendFunc GL_ONE GL_ZERO
+ rgbGen wave square 0 0 0 0 // just solid black
+ }
+}
+
+
+// wake is the mark on water surfaces for paddling players
+
+wake
+{
+ {
+ clampmap sprites/splash.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ tcmod rotate 250
+ tcMod stretch sin .9 0.1 0 0.7
+ rgbGen wave sin .7 .3 .25 .5
+ }
+ {
+ clampmap sprites/splash.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ tcmod rotate -230
+ tcMod stretch sin .9 0.05 0 0.9
+ rgbGen wave sin .7 .3 .25 .4
+ }
+}
+
+
+// viewBloodBlend gives the blended directional cue when you get hit
+
+viewBloodBlend
+{
+ sort nearest
+ {
+ //map models/weaphits/blood201.tga
+ map gfx/damage/blood_screen.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identityLighting
+ alphaGen vertex
+ }
+}
+
+waterBubble
+{
+ sort underwater
+ cull none
+ entityMergable // allow all the sprites to be merged together
+ {
+ map sprites/bubble.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+smokePuff
+{
+ cull none
+ entityMergable // allow all the sprites to be merged together
+ {
+ map gfx/misc/smokepuff3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+hasteSmokePuff // drops behind player's feet when speeded
+{
+ cull none
+ entityMergable // allow all the sprites to be merged together
+ {
+ map gfx/misc/smokepuff3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //blendfunc GL_ONE GL_ONE
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+smokePuffRagePro
+{
+ cull none
+ entityMergable // allow all the sprites to be merged together
+ {
+ map gfx/misc/smokepuffragepro.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+shotgunSmokePuff
+{
+ cull none
+ {
+ map gfx/misc/smokepuff2b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaGen entity
+ rgbGen entity
+ }
+}
+
+flareShader
+{
+ cull none
+ {
+ map gfx/misc/flare.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+}
+
+sun
+{
+ cull none
+ {
+ map gfx/misc/sun.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+}
+
+railDisc
+{
+ sort nearest
+ cull none
+ deformVertexes wave 100 sin 0 .5 0 2.4
+ {
+ clampmap gfx/misc/raildisc_mono2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ tcMod rotate -30
+ }
+}
+
+railCore
+{
+ sort nearest
+ cull none
+ {
+ map gfx/misc/railcorethin_mono.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ tcMod scroll -1 0
+ }
+}
+
+lightningBolt
+{
+ cull none
+ {
+ map gfx/misc/lightning3.tga
+ blendFunc GL_ONE GL_ONE
+// rgbgen wave sin 1 5.1 0 7.1
+ rgbgen wave sin 1 0.5 0 7.1
+ tcmod scale 2 1
+ tcMod scroll -5 0
+ }
+ {
+ map gfx/misc/lightning3.tga
+ blendFunc GL_ONE GL_ONE
+// rgbgen wave sin 1 8.3 0 8.1
+ rgbgen wave sin 1 0.8 0 8.1
+ tcmod scale -1.3 -1
+ tcMod scroll -7.2 0
+ }
+}
+
+// shader used on the occasional machinegun bullet tracers
+
+gfx/misc/tracer
+{
+ cull none
+ {
+ map gfx/misc/tracer2.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+//
+// wall marks
+// use blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR so that
+// their "contribution" can be damped down in fog volumes
+// with distance
+
+bloodMark
+{
+ nopicmip // make sure a border remains
+ polygonOffset
+ {
+ clampmap gfx/damage/blood_stain.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identityLighting
+ alphaGen vertex
+ }
+}
+
+bloodTrail
+{
+
+ nopicmip // make sure a border remains
+ entityMergable // allow all the sprites to be merged together
+ {
+ //clampmap gfx/misc/blood.tga
+ clampmap gfx/damage/blood_spurt.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+gfx/damage/bullet_mrk
+{
+ polygonOffset
+ {
+ map gfx/damage/bullet_mrk.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+gfx/damage/burn_med_mrk
+{
+ polygonOffset
+ {
+ map gfx/damage/burn_med_mrk.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+gfx/damage/hole_lg_mrk
+{
+ polygonOffset
+ {
+ map gfx/damage/hole_lg_mrk.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+gfx/damage/plasma_mrk
+{
+ polygonOffset
+ {
+ map gfx/damage/plasma_mrk.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+
+//===============================================================
+
+// scoreboard header tabs
+
+scoreboardName
+{
+ nopicmip
+ nomipmaps
+ {
+ clampmap menu/tab/name.tga
+ blendfunc blend
+ }
+}
+
+scoreboardScore
+{
+ nopicmip
+ nomipmaps
+ {
+ clampmap menu/tab/score.tga
+ blendfunc blend
+ }
+}
+
+scoreboardTime
+{
+ nopicmip
+ nomipmaps
+ {
+ clampmap menu/tab/time.tga
+ blendfunc blend
+ }
+}
+
+scoreboardPing
+{
+ nopicmip
+ nomipmaps
+ {
+ clampmap menu/tab/ping.tga
+ blendfunc blend
+ }
+}
+
+//===============================================================
+
+gfx/2d/crosshair
+{
+ nopicmip
+ {
+ map gfx/2d/crosshair.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairb
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairb.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairc
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairc.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshaird
+{
+ nopicmip
+ {
+ map gfx/2d/crosshaird.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshaire
+{
+ nopicmip
+ {
+ map gfx/2d/crosshaire.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairf
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairf.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairg
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairg.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairh
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairh.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairi
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairi.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+}
+
+gfx/2d/crosshairj
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairj.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairk
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairk.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/bigchars
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/bigchars.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/select
+{
+ nopicmip
+ {
+ map gfx/2d/select.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ rgbgen vertex
+ }
+}
+
+gfx/2d/assault1d
+{
+ nopicmip
+ {
+ map gfx/2d/assault1d.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+gfx/2d/armor1h
+{
+ nopicmip
+ {
+ map gfx/2d/armor1h.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+gfx/2d/health
+{
+ nopicmip
+ {
+ map gfx/2d/health.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+gfx/2d/blank
+{
+ nopicmip
+ {
+ map gfx/2d/blank.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+gfx/2d/numbers/zero_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/zero_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/one_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/one_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/two_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/two_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/three_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/three_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/four_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/four_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/five_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/five_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/six_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/six_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/seven_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/seven_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/eight_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/eight_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/nine_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/nine_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/minus_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/minus_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+
+//
+// weapon hits
+// All of these will be put on entities with a shaderTime offset, so they
+// can be expected to start at time 0 for each separate explosion
+//
+// Many of these are use smoothly morphed animating textures by pairing
+// sawtooth and iverse sawtooth rgbGens
+
+plasmaExplosion
+{
+ cull disable
+ {
+ clampmap models/weaphits/plasmaboom.tga
+ blendfunc add
+ tcMod stretch triangle .6 0.1 0 8
+ tcmod rotate 999
+ rgbGen wave inversesawtooth 0 1 0 1.5
+ }
+}
+
+railExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/ring02_1.tga models/weaphits/ring02_2.tga models/weaphits/ring02_3.tga models/weaphits/ring02_4.tga gfx/colors/black.tga
+ alphaGen wave inversesawtooth 0 1 0 5
+ blendfunc blend
+ }
+ {
+ animmap 5 models/weaphits/ring02_2.tga models/weaphits/ring02_3.tga models/weaphits/ring02_4.tga gfx/colors/black.tga gfx/colors/black.tga
+ alphaGen wave sawtooth 0 1 0 5
+ blendfunc blend
+ }
+}
+
+lightningExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/ring02_1.tga models/weaphits/ring02_3.tga models/weaphits/ring02_3.tga gfx/colors/black.tga
+ rgbGen wave inversesawtooth 0 1 0 5
+ blendfunc add
+ }
+ {
+ animmap 5 models/weaphits/ring02_2.tga models/weaphits/ring02_3.tga gfx/colors/black.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 5
+ blendfunc add
+ }
+}
+
+bulletExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/bullet1.tga models/weaphits/bullet2.tga models/weaphits/bullet3.tga gfx/colors/black.tga
+ rgbGen wave inversesawtooth 0 1 0 5
+ blendfunc add
+ }
+ {
+ animmap 5 models/weaphits/bullet2.tga models/weaphits/bullet3.tga gfx/colors/black.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 5
+ blendfunc add
+ }
+}
+
+rocketExplosion
+{
+ cull disable
+ {
+ animmap 8 models/weaphits/rlboom/rlboom_1.tga models/weaphits/rlboom/rlboom_2.tga models/weaphits/rlboom/rlboom_3.tga models/weaphits/rlboom/rlboom_4.tga models/weaphits/rlboom/rlboom_5.tga models/weaphits/rlboom/rlboom_6.tga models/weaphits/rlboom/rlboom_7.tga models/weaphits/rlboom/rlboom_8.tga
+ rgbGen wave inversesawtooth 0 1 0 8
+ blendfunc add
+ }
+ {
+ animmap 8 models/weaphits/rlboom/rlboom_2.tga models/weaphits/rlboom/rlboom_3.tga models/weaphits/rlboom/rlboom_4.tga models/weaphits/rlboom/rlboom_5.tga models/weaphits/rlboom/rlboom_6.tga models/weaphits/rlboom/rlboom_7.tga models/weaphits/rlboom/rlboom_8.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 8
+ blendfunc add
+ }
+}
+
+grenadeExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/glboom/glboom_1.tga models/weaphits/glboom/glboom_2.tga models/weaphits/glboom/glboom_3.tga
+ rgbGen wave inversesawtooth 0 1 0 5
+ blendfunc add
+ }
+ {
+ animmap 5 models/weaphits/glboom/glboom_2.tga models/weaphits/glboom/glboom_3.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 5
+ blendfunc add
+ }
+}
+
+bfgExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/bfgboom/bfgboom_1.tga models/weaphits/bfgboom/bfgboom_2.tga models/weaphits/bfgboom/bfgboom_3.tga
+ rgbGen wave inversesawtooth 0 1 0 5
+ blendfunc add
+ }
+ {
+ animmap 5 models/weaphits/bfgboom/bfgboom_2.tga models/weaphits/bfgboom/bfgboom_3.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 5
+ blendfunc add
+ }
+}
+
+bloodExplosion // spurt of blood at point of impact
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/blood201.tga models/weaphits/blood202.tga models/weaphits/blood203.tga models/weaphits/blood204.tga models/weaphits/blood205.tga
+ blendfunc blend
+ }
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_block.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_block.shader.svn-base
new file mode 100644
index 0000000..5a0569b
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_block.shader.svn-base
@@ -0,0 +1,514 @@
+
+textures/gothic_block/blocks15cgeomtrn
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks15cgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks17_ow
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_block/blocks17_ow.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks17bloody
+{
+
+ {
+ map textures/liquids/proto_grueldark2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+ tcMod turb 0 0.05 0 .05
+ }
+ {
+ map textures/effects/tinfx3.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ }
+
+ {
+ map textures/gothic_block/blocks17bloody.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks17g_ow
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_block/blocks17g_ow.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks18b_ow
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_block/blocks18b_ow.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks18cgeomtrn2
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ alphaFunc GE128
+ tcmod rotate 40
+ tcMod stretch sin .8 0.2 0 .3
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ alphaFunc GE128
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ alphaFunc GE128
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/gothic_block/blocks18cgeomtrnx
+{
+
+ {
+ map textures/sfx/fireswirl2blue.tga
+ tcMod stretch sin .8 0.3 0 9.7
+ tcmod rotate 333
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrnx.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks18d_trans
+{
+ qer_editorimage textures/gothic_block/blocks18d.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_block/blocks18d.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/gothic_block/demon_block15fx
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/demon_block15fx.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/evil_e3bwindow
+{
+ qer_editorimage textures/gothic_block/windowevil2c_killblock.tga
+ //surfaceparm nomarks
+ q3map_lightimage textures/gothic_block/evil2ckillblockglow.tga
+ q3map_surfacelight 200
+ // Glowing evil window for e3 demo map
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/windowevil2c_killblock.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/evil2ckillblockglow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_block/evil_e3window
+{
+ qer_editorimage textures/gothic_block/windowevil2c_block18c.tga
+ //surfaceparm nomarks
+ q3map_lightimage textures/gothic_block/evil2cglow.tga
+ q3map_surfacelight 1000
+ // Glowing evil window for e3 demo map
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/windowevil2c_block18c.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/evil2cglow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_block/evil_e3window_dark
+{
+ qer_editorimage textures/gothic_block/windowevil2c_block18c.tga
+ //surfaceparm nomarks
+ q3map_lightimage textures/gothic_block/evil2cglow.tga
+ q3map_surfacelight 100
+ // Glowing evil window for temp in tim_dm7
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/windowevil2c_block18c.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/evil2cglow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_block/flicker_blocks10
+{
+ qer_editorimage textures/gothic_block/blocks10.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks10.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen wave noise 0.75 0.25 0 10
+ }
+}
+
+textures/gothic_block/gkc17d
+{
+ // spine texture with specular highlights
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/gothic_block/gkc17d.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_block/gkcspinemove
+{
+ qer_editorimage textures/gothic_block/gkc17d.tga
+ tessSize 128
+// deformVertexes wave 100 sin 3 2 0 0.3
+ deformVertexes bulge 3 10 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/gkc17d.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+textures/gothic_block/killblock_i4b
+{
+ q3map_surfacelight 300
+ q3map_lightimage textures/gothic_block/killblock_i4glow.tga
+ qer_editorimage textures/gothic_block/killblock_i4.tga
+
+
+ {
+ map textures/gothic_block/killblock_i4.tga
+ rgbgen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/gothic_block/killblock_i4glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave sin .9 .1 0 .1
+ }
+
+}
+
+textures/gothic_block/killblockgeomtrn
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/killblockgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/killtrim_trans
+{
+ qer_editorimage textures/gothic_block/killtrim.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_block/killtrim.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_block/largerblock3blood
+{
+
+ {
+ map textures/liquids/proto_grueldark2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+ tcMod turb 0 0.05 0 .05
+ }
+ {
+ map textures/effects/tinfx3.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ }
+
+ {
+ map textures/gothic_block/largerblock3blood.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/mkc_evil_e3window
+{
+ qer_editorimage textures/gothic_block/windowevil2c_block18c.tga
+ q3map_lightimage textures/gothic_block/evil2cglow.tga
+ q3map_surfacelight 400
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/windowevil2c_block18c.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/evil2cglow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_block/wetwall
+{
+ {
+ map textures/gothic_block/wetwall.tga
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/wetwallfx.tga
+ tcmod scroll 0 -.1
+ tcmod scale 2 .6
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/wetwall.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_button.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_button.shader.svn-base
new file mode 100644
index 0000000..e693b5c
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_button.shader.svn-base
@@ -0,0 +1,25 @@
+
+textures/gothic_button/timbutton
+{
+ q3map_lightimage textures/gothic_button/timbutton2.tga
+ q3map_surfacelight 10
+ //light 1
+
+ {
+ map textures/gothic_button/timbutton.tga
+ }
+
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_button/timbutton2.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin .5 .5 0 1
+ }
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_door.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_door.shader.svn-base
new file mode 100644
index 0000000..fb2cee6
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_door.shader.svn-base
@@ -0,0 +1,77 @@
+
+textures/gothic_door/door02_bred2_shiny
+{
+qer_editorimage textures/gothic_door/door02_bred2.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_door/door02_bred2.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/gothic_door/door02_eblue2_shiny
+{
+qer_editorimage textures/gothic_door/door02_eblue2.tga
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_door/door02_eblue2.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/gothic_door/door02_i_ornate5_fin
+{
+ qer_editorimage textures/gothic_door/door02_i_ornate5_fin.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_door/door02_i_ornate5_fin.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_door/skullarch_b
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_door/skullarch_b.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_floor.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_floor.shader.svn-base
new file mode 100644
index 0000000..8ea5491
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_floor.shader.svn-base
@@ -0,0 +1,212 @@
+
+textures/gothic_floor/center2trn
+{
+
+ {
+ map textures/sfx/fireswirl2.tga
+ tcmod rotate 333
+ tcMod stretch sin .8 0.2 0 9.7
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/center2trn.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/center2trn.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_floor/largerblock3b_ow
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/largerblock3b_ow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_floor/metalbridge06brokeb
+{
+ {
+ map textures/sfx/kenelectric.tga
+ tcmod scale 2 2
+ tcMod turb 0 .2 0 .3
+ tcmod scroll 3 5
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/metalbridge06brokeb.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+
+}
+
+textures/gothic_floor/pent_metalbridge02
+{
+ q3map_lightimage textures/gothic_floor/pent_glow.tga
+ q3map_surfacelight 500
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_metalbridge02.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 0.5
+ }
+}
+
+textures/gothic_floor/pent_metalbridge06
+{
+ q3map_lightimage textures/gothic_floor/pent_glow.tga
+ q3map_surfacelight 500
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_metalbridge06.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 0.5
+ }
+}
+
+textures/gothic_floor/pent_metalbridge06b
+{
+ q3map_lightimage textures/gothic_floor/pent_glow.tga
+ q3map_surfacelight 500
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_metalbridge06b.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 0.5
+ }
+}
+
+textures/gothic_floor/q1metal7_99spot
+{
+
+ {
+ map textures/liquids/proto_grueldark2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+ tcMod turb 0 0.05 0 .05
+ }
+ {
+ map textures/effects/tinfx3.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ }
+
+ {
+ map textures/gothic_floor/q1metal7_99spot.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_floor/xq1metalbig_ow
+{
+ {
+ map textures/gothic_floor/xq1metalbig_ow.tga
+ rgbGen identity
+ }
+ {
+ map textures/sfx/specular.tga
+ //map textures/liquids/proto_gruel3.tga
+ tcGen environment
+ tcmod scale 3 3
+ //tcmod rotate 30
+ tcMod turb 0 .25 0 .05
+ //tcmod scroll .1 .2
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/xq1metalbig_ow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_floor/xstepborder3_shiney
+{
+ qer_editorimage textures/gothic_floor/xstepborder3_alpha.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_floor/xstepborder3_alpha.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_light.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_light.shader.svn-base
new file mode 100644
index 0000000..b3babce
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_light.shader.svn-base
@@ -0,0 +1,1468 @@
+
+textures/gothic_light/border7_ceil39_6k
+{
+ qer_editorimage textures/gothic_light/border7_ceil39.tga
+ q3map_surfacelight 3700
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/border7_ceil39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/border_ceil39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/border7_ceil39b_10k
+{
+ qer_editorimage textures/gothic_light/border7_ceil39b.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/border7_ceil39b.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/border7_ceil39b.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/flicker_light15k
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 15000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen wave noise 0.75 0.25 0 10
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave noise 0.75 0.25 0 10
+ }
+}
+
+textures/gothic_light/goth_lt2_lrg2k
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_1k
+{
+ qer_editorimage textures/gothic_light/gothic_light2.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_2K
+{
+ qer_editorimage textures/gothic_light/gothic_light2.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_4K
+{
+ qer_editorimage textures/gothic_light/gothic_light2.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_lrg_1k
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_lrg_200
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 200
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_lrg_2k
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_lrg_500
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 500
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_10K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_15K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 15000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_1K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/gothic_light/gothic_light3_20K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_2K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/gothic_light/gothic_light3_3k
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/gothic_light/gothic_light3_4K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_5K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_6K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 6000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_7K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 7000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_8K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 8000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_1000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_10000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_120000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 120000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_2000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_20000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_2500
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 3500
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_3000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_30000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 30000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_4000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_40000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 40000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_5000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_500000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 500000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_1000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_10000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_2000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_20000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_2500
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 2500
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_3000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_30000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 30000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_4000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_40000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 40000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_5000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_10000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_2000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_20000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_3000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_30000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 30000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_4000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_5000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_10000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 10000
+// light 1
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_2000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_20000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_3000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_30000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 30000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_4000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_5000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/light1_4Kgothic
+{
+ qer_editorimage textures/base_light/light1.tga
+ q3map_lightimage textures/base_light/light1.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ //q3map_surfacelight 4000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ rgbGen wave sin 0.25 0.25 0 .2
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/light1_6Kgothic
+{
+ qer_editorimage textures/base_light/light1.tga
+ q3map_lightimage textures/base_light/light1.blend.tga
+ q3map_surfacelight 6000
+ surfaceparm nomarks
+ //q3map_surfacelight 4000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ rgbGen wave sin 0.25 0.25 0 .2
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/light1_6Kgothicred
+{
+ qer_editorimage textures/base_light/light1red.tga
+ q3map_lightimage textures/base_light/light1red.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.blend.tga
+ rgbGen wave sin 0.25 0.25 0 .2
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/pentagram_light1_10K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+
+
+}
+
+textures/gothic_light/pentagram_light1_15K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 15000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+
+
+}
+
+textures/gothic_light/pentagram_light1_1K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+
+
+}
+
+textures/gothic_light/pentagram_light1_2K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+}
+
+textures/gothic_light/pentagram_light1_3K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+}
+
+textures/gothic_light/pentagram_light1_4K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+}
+
+textures/gothic_light/pentagram_light1_5K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_trim.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_trim.shader.svn-base
new file mode 100644
index 0000000..100fa7c
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_trim.shader.svn-base
@@ -0,0 +1,296 @@
+
+textures/gothic_trim/baseboard09_p_shiny
+{
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_trim/baseboard09_p_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+}
+
+textures/gothic_trim/border6_trans
+{
+ qer_editorimage textures/gothic_trim/border6.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/border6.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+ }
+}
+
+textures/gothic_trim/column2c_trans
+{
+ qer_editorimage textures/gothic_trim/column2c_test.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/column2c_test.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_trim/gothgrate2
+{
+ surfaceparm metalsteps
+ cull none
+
+ {
+ map textures/gothic_trim/gothgrate2.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ alphaFunc GT0
+ depthWrite
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ depthFunc equal
+ }
+}
+
+textures/gothic_trim/km_arena1tower4_shiny
+{
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/km_arena1tower4_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/metalsupport4b_trans
+{
+ qer_editorimage textures/gothic_trim/metalsupport4b.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/metalsupport4b.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_trim/metalsupport4h_shiny
+{
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/metalsupport4h_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/metalsupport4h_trans
+{
+ qer_editorimage textures/gothic_trim/metalsupport4h_shiny.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/metalsupport4h_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/metalsupport4j_trans
+{
+ qer_editorimage textures/gothic_trim/metalsupport4j.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/metalsupport4j.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/gothic_trim/metlsupport4i_shiney
+{
+ qer_editorimage textures/gothic_trim/xmetalsupport4i_alpha.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/xmetalsupport4i_alpha.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/pitted_rust2_trans
+{
+ qer_editorimage textures/gothic_trim/pitted_rust2.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/pitted_rust2.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_trim/pitted_rust3_trans
+{
+ qer_editorimage textures/gothic_trim/pitted_rust3.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/pitted_rust3.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_trim/supportborderside_shiney
+{
+ qer_editorimage textures/gothic_trim/xsupportborderside_shiney.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/xsupportborderside_shiney.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/tongue_bone
+{
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/tongue_bone.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/tongue_bone.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 0.2
+ }
+}
+
+textures/gothic_trim/x_noblight
+{
+ q3map_lightimage textures/gothic_trim/x_noblightfx.tga
+ q3map_surfacelight 100
+ {
+ map textures/sfx/firegorre2.tga
+ tcmod scroll .1 1
+ tcmod scale 1 1
+ }
+ {
+ map textures/gothic_trim/x_noblight.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/x_noblightfx.tga
+ blendFunc add
+ rgbGen wave sin .5 .5 0 .1
+ }
+}
+
+textures/gothic_trim/zinc_shiny
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/zinc_shiny.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_wall.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_wall.shader.svn-base
new file mode 100644
index 0000000..4203aec
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/gothic_wall.shader.svn-base
@@ -0,0 +1,120 @@
+
+textures/gothic_wall/iron01_m
+{
+ qer_editorimage textures/gothic_wall/iron01_m.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_wall/iron01_m.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_wall/iron01_ndark
+{
+ qer_editorimage textures/gothic_wall/iron01_ndark.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_wall/iron01_ndark.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_wall/streetbricks10_shiny
+{
+ qer_editorimage textures/gothic_wall/streetbricks11.tga
+ q3map_globaltexture
+ sort opaque
+
+ {
+ map $lightmap
+ tcmod scale 2 2
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_wall/streetbricks11.tga
+ rgbGen identity
+ blendfunc gl_one gl_src_color
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+
+}
+
+textures/gothic_wall/window_evil6a
+
+{
+ q3map_lightimage textures/gothic_wall/window_evil6a_glow.tga
+ q3map_surfacelight 50
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_wall/window_evil6a.tga
+ blendfunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_wall/window_evil6a_glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+}
+
+textures/gothic_wall/xoct20c_shiney
+{
+ qer_editorimage textures/gothic_wall/xoct20c_shiney.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_wall/xoct20c_shiney.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_wall/xpipecolumn_gray_shiny
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/gothic_wall/xpipecolumn_gray_shiny.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/hell.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/hell.shader.svn-base
new file mode 100644
index 0000000..23b6410
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/hell.shader.svn-base
@@ -0,0 +1,437 @@
+//**********************************************************************//
+// hell.shader updated //
+// by Eutectic - 21 Jan 2000 //
+// This file is irrelevant for Q3Radiant since none of these //
+// shaders work (textures/hell folder does not exist) //
+// It was updated for sake of completeness: //
+// shaders that belong here were moved from other shader files //
+// Phase 2 update: 13 May 2000 //
+// sorted shaders in alphabetical order. //
+// //
+// TOTAL SHADERS: 19 //
+// NO. OF BROKEN SHADERS: 19 //
+// NO. OF WORKING SHADERS WITH DUPLICATE ENTRIES: N/A //
+// NO. OF WORKING SHADERS THAT DIDN'T APPEAR IN EDITOR: N/A //
+// SHADERS THAT DIDN'T BELONG HERE AND MOVED TO PROPER FILE: 0 //
+// SHADERS THAT BELONGED HERE BUT WERE IN ANOTHER FILE: 3 //
+// textures/hell/hellsky2goo //
+// textures/hell/lavasolid //
+// textures/hell/newhell //
+//**********************************************************************//
+
+textures/hell/bluepad
+{
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/bluepad.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/bluepad.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 .2
+ }
+}
+
+textures/hell/darkness
+{
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ cull back
+ fogonly
+ fogparms 0 0 0 400 256
+}
+
+//*********************************//
+//Moved from sky.shader by Eutectic//
+//*********************************//
+
+textures/hell/hellsky2goo
+{
+ surfaceparm sky
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 300
+
+ sky env/hell2
+ cloudparms 256
+
+ {
+ map env/redcloudsa.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0
+ tcMod scale 2 2
+ }
+
+ {
+ map env/redclouds.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scroll 0.05 0.05
+ tcMod scale 1 1
+ }
+}
+
+textures/hell/hellbutt01
+{
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/hellbutt01.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/hellbutt01.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 0.2
+ }
+}
+
+textures/hell/hellredclouds
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 280
+
+ cloudparms 512 full
+ lightning
+
+ {
+ map env/redclouds.tga
+ tcMod scroll 0.02 0
+ tcMod scale 2 2
+ }
+
+
+ {
+ map textures/dont_use/lightningsky8_kc.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scale 10 10
+ tcMod scroll .2 .2
+ }
+
+
+ {
+ map env/redcloudsa.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.02 0.01
+ }
+
+
+}
+
+textures/hell/ironcrosslt1
+{
+ q3map_surfacelight 7000
+ //light 1
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/hell/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+}
+
+textures/hell/ironcrosslt1_5000
+{
+ qer_editorimage textures/hell/ironcrosslt1.tga
+ q3map_lightimage textures/hell/ironcrosslt1.blend.tga
+ q3map_surfacelight 5000
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/hell/killblock_b
+{
+ q3map_surfacelight 50
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/killblock_b.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/killblock_b.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/hell/killblock_c
+{
+ q3map_surfacelight 50
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/killblock_c.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/killblock_c.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.1 0 0.2
+ }
+}
+
+textures/hell/lava2z
+{
+ surfaceparm nonsolid
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 150
+}
+
+//*************************************//
+//Moved from liquids.shader by Eutectic//
+//*************************************//
+
+textures/hell/lavasolid
+{
+ // Added to g3map_global texture on May 11, 1999
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 450
+
+ tesssize 64
+ deformVertexes wave 100 sin 2 2 0 0.1
+
+ {
+ map textures/hell/lava2d.tga
+ tcGen environment
+ tcMod turb 0 0.25 0 0.05
+ }
+
+ {
+ map textures/hell/lava2d.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 0.25 0 0.05
+ }
+}
+
+textures/hell/light1blue
+{
+ q3map_surfacelight 3250
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1blue.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.1 0 .2
+ }
+}
+
+textures/hell/light1dark
+{
+ q3map_surfacelight 6000
+ //light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1dark.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1dark.tga
+ blendFunc GL_ONE GL_ONE
+// rgbGen wave sin 0.5 0.1 0 .2
+ }
+}
+
+textures/hell/light1red
+{
+ q3map_surfacelight 5000
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1red.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1red.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.1 0 .2
+ }
+}
+
+textures/hell/metal2_2
+{
+ cull twosided
+ surfaceparm trans
+ {
+ map textures/hell/metal2_2.tga
+ rgbGen identity
+ alphaFunc GE128
+ //blendFunc GL_ONE GL_ZERO
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/hell/newhell
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ surfaceparm sky
+ q3map_surfacelight 200
+
+ sky env/hell2
+ cloudparms 512 full
+ lightning
+
+ {
+ map env/redcloudsa.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0
+ tcMod scale 2 2
+ }
+ {
+ map env/redclouds.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ tcMod scroll 0.05 0.06
+ tcMod scale 1 1
+ }
+}
+
+textures/hell/skin7_teeth2
+{
+ deformVertexes wave 100 sin 2 3 0 0.4
+ {
+ map $lightmapt
+ rgbGen identity
+ }
+ {
+ map textures/hell/skin7_teeth2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/hell/xfiretest1
+{
+ qer_editorimage textures/hell/firetestb.tga
+ //surfaceparm trans
+ surfaceparm noimpact
+ //surfaceparm nonsolid
+ surfaceparm nolightmap
+ q3map_surfacelight 1000
+ tesssize 64
+
+
+ {
+ map textures/hell/firetestb.tga
+ blendfunc gl_one gl_zero
+ tcMod turb .2 .2 .1 1
+ tcMod scale .25 .25
+ tcMod scroll .5 1.5
+ }
+
+ {
+ map textures/hell/firetest.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .2 .1 .1 1
+ tcMod scale .1 .1
+ tcMod scroll 0 1.0
+ }
+
+ {
+ map textures/hell/firetest2.tga
+ blendFunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 .5 .5
+ tcMod scroll 1 5.0
+ }
+
+}
+
+textures/hell/xfiretest2
+{
+ qer_editorimage textures/hell/firetestb.tga
+ //surfaceparm trans
+ surfaceparm noimpact
+ //surfaceparm nonsolid
+ surfaceparm nolightmap
+ q3map_surfacelight 1000
+ tesssize 64
+ {
+ map textures/hell/firetest2.tga
+ blendfunc gl_one gl_zero
+ tcMod turb .2 .2 .1 1
+ tcMod scale .25 .25
+ tcMod scroll .5 1.5
+ }
+
+ {
+ map textures/hell/firetest.tga
+
+// blendFunc GL_DST_COLOR GL_ONE
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .2 .1 .1 1
+ tcMod scale .1 .1
+ tcMod scroll 0 1.0
+ }
+
+ {
+
+ map textures/hell/firetestb.tga
+ blendFunc GL_DST_COLOR GL_ONE
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .1 .1 .5 .5
+ tcMod scroll 1 5.0
+ }
+
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/liquids.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/liquids.shader.svn-base
new file mode 100644
index 0000000..cb2768f
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/liquids.shader.svn-base
@@ -0,0 +1,759 @@
+
+textures/liquids/protolava
+{
+
+ q3map_globaltexture
+ surfaceparm trans
+ //surfaceparm nonsolid
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 600
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/protolava2.tga
+ tcmod scale .2 .2
+ tcmod scroll .04 .03
+ tcMod turb 0 .1 0 .01
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/liquids/protolava.tga
+ blendfunc blend
+ tcMod turb 0 .2 0 .1
+ }
+
+}
+
+textures/liquids/watertest
+ {
+ qer_editorimage textures/liquids/pool3d_3b.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ tessSize 32
+ deformVertexes normal .15 2
+ deformVertexes bulge 128 5 2
+ {
+ map $lightmap
+ blendfunc filter
+ }
+
+ {
+ map textures/liquids/pool3d_4byell2.tga
+ blendfunc add
+ tcgen environment
+ }
+
+
+ }
+
+
+
+
+textures/liquids/flatripplewater_1500
+ {
+ qer_editorimage textures/liquids/pool2.tga
+ q3map_globaltexture
+ q3map_lightsubdivide 32
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 500
+ cull disable
+
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/pool2.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+
+textures/liquids/xctf_painwater
+ {
+ qer_editorimage textures/liquids/pool2.tga
+ q3map_globaltexture
+ qer_trans .5
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+ q3map_surfacelight 450
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .1
+ {
+ map textures/liquids/pool2.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+ {
+ map textures/liquids/pool3.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 0 .01
+ tcMod scale .5 .5
+ tcMod scroll -.025 .02
+ }
+ {
+ map textures/sfx/bolts.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scale .2 .2
+ tcMod scroll .1 .1
+ tcmod rotate 290
+
+ }
+ }
+textures/liquids/clear_calm1
+ {
+ qer_editorimage textures/liquids/pool3d_3e.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .25 .25 0 .5
+ {
+ map textures/liquids/pool3d_5e.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod scroll .025 .01
+ }
+
+ {
+ map textures/liquids/pool3d_3e.tga
+ blendFunc GL_dst_color GL_one
+ tcmod scale -.5 -.5
+ tcmod scroll .025 .025
+ }
+
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+
+
+
+}
+
+textures/liquids/clear_ripple3
+ {
+ qer_editorimage textures/liquids/pool3d_3c.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .5 .5 0 .5
+
+ {
+ map textures/liquids/pool3d_5c.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 1.5 0 1.5 1 1 2
+ tcmod scroll -.05 .001
+ }
+
+ {
+ map textures/liquids/pool3d_6c.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 0 1.5 1 1.5 2 1
+ tcmod scroll .025 -.001
+ }
+
+ {
+ map textures/liquids/pool3d_3c.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .25 .5
+ tcmod scroll .001 .025
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+
+
+}
+
+
+textures/liquids/clear_ripple2
+ {
+ qer_editorimage textures/liquids/pool3d_3b.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .5 .5 0 .5
+
+ {
+ map textures/liquids/pool3d_5b.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 1.5 0 1.5 1 1 2
+ tcmod scroll -.05 .001
+ }
+
+ {
+ map textures/liquids/pool3d_6b.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 0 1.5 1 1.5 2 1
+ tcmod scroll .025 -.001
+ }
+
+ {
+ map textures/liquids/pool3d_3b.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .25 .5
+ tcmod scroll .001 .025
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+
+
+}
+
+
+textures/liquids/clear_ripple1
+ {
+ qer_editorimage textures/liquids/pool3d_3.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .5 .5 0 .5
+
+
+ {
+ map textures/liquids/pool3d_5.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 1.5 0 1.5 1 1 2
+ tcmod scroll -.05 .001
+ }
+
+ {
+ map textures/liquids/pool3d_6.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 0 1.5 1 1.5 2 1
+ tcmod scroll .025 -.001
+ }
+
+ {
+ map textures/liquids/pool3d_3.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .25 .5
+ tcmod scroll .001 .025
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+
+}
+
+textures/liquids/clear_ripple1_q3dm1
+ {
+ qer_editorimage textures/liquids/pool3d_3.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .5 .5 0 .5
+
+
+ {
+ map textures/liquids/pool3d_5.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 1.5 0 1.5 1 1 2
+ tcmod scroll -.05 .001
+ }
+
+ {
+ map textures/liquids/pool3d_6.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 0 1.5 1 1.5 2 1
+ tcmod scroll .025 -.001
+ }
+
+ {
+ map textures/liquids/pool3d_3.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .25 .5
+ tcmod scroll .001 .025
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+}
+
+textures/liquids/lavahell
+{
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm trans
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 600
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+
+}
+
+textures/liquids/lavahell_xdm1
+{
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm nodlight
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 600
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+}
+
+textures/liquids/lavahell_1000
+{
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 1000
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+
+textures/liquids/lavahell_2000
+ {
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 2000
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+textures/liquids/lavahell_750
+ {
+
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ q3map_lightsubdivide 32
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 500
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+
+textures/liquids/flatlavahell_1500
+ {
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ q3map_lightsubdivide 32
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 1500
+ cull disable
+
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+}
+
+
+textures/liquids/lavahell_2500
+ {
+
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 2500
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+
+textures/liquids/lavahelldark
+ {
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 150
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+
+}
+
+textures/liquids/lavahellflat_400
+{
+
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 400
+ cull disable
+
+ tesssize 128
+ cull disable
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+}
+
+textures/liquids/calm_pool
+ {
+ qer_editorimage textures/liquids/pool2.tga
+ qer_trans .5
+ q3map_globaltexture
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .1
+
+
+
+ {
+ map textures/liquids/pool2.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+
+ {
+ map textures/liquids/pool3.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 0 .01
+ tcMod scale .5 .5
+ tcMod scroll -.025 .02
+ }
+
+
+}
+
+textures/liquids/calm_pool_bgtess
+ {
+ qer_editorimage textures/liquids/pool2.tga
+ qer_trans .5
+ q3map_globaltexture
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 256
+ deformVertexes wave 256 sin 1 1 1 .1
+
+
+
+ {
+ map textures/liquids/pool2.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+
+ {
+ map textures/liquids/pool3.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 0 .01
+ tcMod scale .5 .5
+ tcMod scroll -.025 .02
+ }
+
+
+}
+
+textures/liquids/ripplewater2_back
+{
+ qer_editorimage textures/liquids/ripplewater3.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ {
+ map textures/liquids/ripplewater3.tga
+ blendfunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod scale .05 .05
+ tcGen environment
+ tcMod scroll .001 .001
+ }
+
+}
+
+textures/liquids/slime1
+ {
+ qer_editorimage textures/liquids/slime7.tga
+ q3map_lightimage textures/liquids/slime7.tga
+ q3map_globaltexture
+ qer_trans .5
+
+ surfaceparm noimpact
+ surfaceparm slime
+ surfaceparm nolightmap
+ surfaceparm trans
+
+ q3map_surfacelight 100
+ tessSize 32
+ cull disable
+
+ deformVertexes wave 100 sin 0 1 .5 .5
+
+ {
+ map textures/liquids/slime7c.tga
+ tcMod turb .3 .2 1 .05
+ tcMod scroll .01 .01
+ }
+
+ {
+ map textures/liquids/slime7.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb .2 .1 1 .05
+ tcMod scale .5 .5
+ tcMod scroll .01 .01
+ }
+
+ {
+ map textures/liquids/bubbles.tga
+ blendfunc GL_ZERO GL_SRC_COLOR
+ tcMod turb .2 .1 .1 .2
+ tcMod scale .05 .05
+ tcMod scroll .001 .001
+ }
+
+
+}
+
+textures/liquids/slime1_2000
+ {
+ qer_editorimage textures/liquids/slime7.tga
+ q3map_lightimage textures/liquids/slime7.tga
+ q3map_globaltexture
+ qer_trans .5
+
+ surfaceparm noimpact
+ surfaceparm slime
+ surfaceparm nolightmap
+ surfaceparm trans
+
+ q3map_surfacelight 2000
+ tessSize 32
+ cull disable
+
+ deformVertexes wave 100 sin 0 1 .5 .5
+
+ {
+ map textures/liquids/slime7c.tga
+ tcMod turb .3 .2 1 .05
+ tcMod scroll .01 .01
+ }
+
+ {
+ map textures/liquids/slime7.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb .2 .1 1 .05
+ tcMod scale .5 .5
+ tcMod scroll .01 .01
+ }
+
+ {
+ map textures/liquids/bubbles.tga
+ blendfunc GL_ZERO GL_SRC_COLOR
+ tcMod turb .2 .1 .1 .2
+ tcMod scale .05 .05
+ tcMod scroll .001 .001
+ }
+
+
+}
+
+textures/hell/lavasolid
+{
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 450
+
+ tesssize 64
+ deformVertexes wave 100 sin 2 2 0 0.1
+
+ {
+ map textures/hell/lava2d.tga
+ tcGen environment
+ tcMod turb 0 0.25 0 0.05
+ }
+
+ {
+ map textures/hell/lava2d.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 0.25 0 0.05
+ }
+}
+
+textures/liquids/lavahell_2500_subd
+{
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_lightsubdivide 32
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 2500
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/models.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/models.shader.svn-base
new file mode 100644
index 0000000..169df47
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/models.shader.svn-base
@@ -0,0 +1,4824 @@
+//**********************************************************************//
+// models.shader sorted and updated //
+// by Eutectic - 23 Jan 2000 //
+// This file is irrelevant for Q3Radiant //
+// It was updated for the sake of completeness: //
+// shaders that belong here were moved from other shader files //
+// //
+// SHADERS THAT DIDN'T BELONG HERE AND MOVED TO PROPER FILE: 2 //
+// sprites/plasma1 //
+// sprites/plasma2 //
+// SHADERS THAT BELONGED HERE BUT WERE IN ANOTHER FILE: 1 //
+// models/mapobjects/portal_2/portal_3 //
+//**********************************************************************//
+
+//
+// this file contains shaders attached models
+//
+
+//**************************************************************//
+// //
+// MODELS/AMMO //
+// //
+//**************************************************************//
+
+models/ammo/grenade
+{
+ {
+ map models/ammo/grenade.tga
+ }
+ {
+ AnimMap 7 models/ammo/grenade_r.tga models/ammo/grenade_g.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/ammo/rocket/rockflar
+{
+ cull disable
+ {
+ map models/ammo/rocket/rockflar.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/ammo/rocket/rockfls1
+{
+ cull disable
+ {
+ map models/ammo/rocket/rockfls1.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/ammo/rocket/rockfls2
+{
+ cull disable
+ {
+ map models/ammo/rocket/rockfls2.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+
+//**************************************************************//
+// //
+// MODELS/FLAGS //
+// //
+//**************************************************************//
+
+models/flags/b_flag
+{
+ cull disable
+ deformVertexes wave 100 sin 0 3 0 .7
+
+ {
+ map models/flags/b_flag.tga
+
+ }
+
+
+}
+
+models/flags/b_flag2
+{
+
+ deformVertexes wave 100 sin 4 3 0 0.3
+ deformVertexes wave 30 sin 0 3 0 .8
+ deformVertexes normal .3 .2
+ cull none
+
+ {
+ map models/flags/b_flag2.tga
+ rgbGen identity
+ }
+ {
+ map models/flags/blue_fx.tga
+ tcGen environment
+ //tcmod scale 9 3
+ //tcmod scroll .1 .7
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map models/flags/b_flag2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+models/flags/flag_red
+{
+ cull none
+ deformVertexes wave 90 sin 1 5.6 1 .4
+ deformVertexes wave 100 sin 1 2 1 .9
+ deformVertexes wave 50 sin 1 .5 1 1
+ {
+ map models/flags/flag_red.tga
+ //blendfunc gl_src_alpha gl_one_minus_src_alpha
+ //alphaFunc GE128
+ blendFunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ depthWrite
+ }
+
+
+}
+
+models/flags/flagbits
+{
+ cull none
+ // deformVertexes wave 100 sin 0 5 0 .7
+ {
+ map models/flags/flagbits.tga
+ //blendfunc gl_src_alpha gl_one_minus_src_alpha
+ alphaFunc GE128
+ rgbGen lightingDiffuse
+ depthWrite
+ }
+
+
+}
+
+models/flags/flagtest
+{
+
+ deformVertexes wave 100 sin 4 3 0 0.3
+ deformVertexes wave 30 sin 0 3 0 .8
+ deformVertexes normal .2 .2
+ cull none
+
+ {
+ map models/flags/flagtest.tga
+ rgbGen identity
+ }
+ {
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+models/flags/pole
+{
+
+ {
+ map models/flags/skull.tga
+ tcGen environment
+ rgbGen lightingDiffuse
+
+ }
+
+
+}
+
+models/flags/r_flag
+{
+ cull disable
+ deformVertexes wave 100 sin 0 3 0 .7
+
+ {
+ map models/flags/r_flag.tga
+
+ }
+
+
+}
+
+models/flags/r_flag2
+{
+
+ deformVertexes wave 100 sin 4 3 0 0.3
+ deformVertexes wave 30 sin 0 3 0 .8
+ deformVertexes normal .3 .2
+ cull none
+
+ {
+ map models/flags/r_flag2.tga
+ rgbGen identity
+ }
+ {
+ map models/flags/red_fx.tga
+ tcGen environment
+ //tcmod scale 9 3
+ //tcmod scroll .1 .7
+
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map models/flags/r_flag2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+models/flags/skull
+{
+
+ {
+ map models/flags/skull.tga
+ //tcGen environment
+ rgbGen lightingDiffuse
+
+ }
+
+
+}
+
+
+//**************************************************************//
+// //
+// MODELS/MAPOBJECTS //
+// //
+//**************************************************************//
+
+//******************************************************//
+// mapobjects root folder //
+//******************************************************//
+
+models/mapobjects/arenalogo
+{
+ deformVertexes wave 100 sin 0.25 0 0 0
+ {
+ map textures/effects/quadmap.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcMod turb 0 1 0 0.2
+ }
+}
+
+models/mapobjects/hand
+{
+ deformVertexes wave 100 sin 0 .3 0 .2
+
+ {
+ map models/mapobjects/hand.tga
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/kmlamp_white
+{
+
+ surfaceparm trans
+ {
+ map textures/effects/tinfxb.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+models/mapobjects/lamplight_y
+{
+ q3map_surfacelight 10000
+// light 1
+ cull disable
+ {
+ map textures/effects/envmapmach.tga
+ //map models/mapobjects/lamplight_y.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/mapobjects/lamplight_ys
+{
+ {
+ map models/mapobjects/lamplight_ys.tga
+ blendfunc GL_ONE GL_ONE
+
+ }
+}
+
+models/mapobjects/meteor
+{
+ deformVertexes move 0 0 10 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+
+
+ {
+ map models/mapobjects/meteor.tga
+ rgbGen vertex
+ tcMod scale 4.90 2.234
+ }
+
+
+}
+
+models/mapobjects/pitted_rust_ps
+{
+ cull disable
+
+ {
+ map models/mapobjects/pitted_rust_ps.tga
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/pj_light
+{
+ cull none
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/pj_light.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/standlamp2
+{
+
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/standlamp2.tga
+ blendfunc blend
+ rgbGen vertex
+ }
+
+}
+
+//******************************************************//
+// mapobjects/banner subfolder //
+//******************************************************//
+
+models/mapobjects/banner/q3banner02
+{
+ cull disable
+ nomipmaps
+ //deformVertexes wave 70 sin 0 .7 0 .4
+
+ {
+ map models/mapobjects/banner/q3banner02.tga
+ blendFunc add
+ tcmod scale 2 1
+ tcmod scroll .33 0
+ rgbGen wave sin .5 .5 0 .2
+ }
+ {
+ map models/mapobjects/banner/q3banner02.tga
+ blendFunc add
+ tcmod scale 3 1
+ tcmod scroll -.45 0
+ rgbGen wave sin .5 .5 0 .2
+ }
+ {
+ map models/mapobjects/banner/q3banner02x.tga
+ blendFunc add
+ tcmod scale 4 1
+ tcmod scroll 1 0
+ // rgbGen wave sin .5 .5 0 -.2
+ }
+}
+
+models/mapobjects/banner/q3banner04
+{
+ cull disable
+ nomipmaps
+
+ {
+ //map models/mapobjects/banner/q3banner04.tga
+ map textures/sfx/firegorre2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale .05 .1
+ tcMod turb 0 .25 0 .6
+ tcmod scroll .4 .3
+ //rgbGen wave sin .5 .5 0 .1
+ }
+ {
+
+ map textures/sfx/bolts.tga
+ tcmod scale .2 .2
+ tcmod rotate 999
+ tcmod scroll 9 9
+ blendfunc add
+ rgbGen wave sin .5 .5 0 .2
+ }
+ {
+ map textures/sfx/firegorre2.tga
+ //map models/mapobjects/banner/q3banner04.tga
+ blendFunc add
+ tcGen environment
+ tcmod scale 5 5
+ tcmod scroll 0.09 0.04
+ //rgbGen wave sin .5 .5 0 .1
+ }
+
+}
+
+//******************************************************//
+// mapobjects/baph subfolder //
+//******************************************************//
+
+//models/mapobjects/baph/bapho_lamp
+//{
+//
+// {
+// map textures/sfx/specular3b.tga
+// tcGen environment
+// tcmod scroll .1 0
+// rgbGen identity
+// }
+// {
+// map models/mapobjects/baph/bapho_lamp.tga
+// blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+// rgbGen vertex
+// }
+//
+//
+//}
+
+models/mapobjects/baph/bapholamp_fx
+{
+ deformVertexes autoSprite
+ surfaceparm trans
+ cull none
+ nomipmaps
+ {
+ clampmap models/mapobjects/baph/bapholamp_fx.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod rotate 333
+ tcMod stretch sin .9 0.1 0 7
+ rgbGen identity
+ }
+ {
+ clampmap models/mapobjects/baph/bapholamp_fx2.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod rotate -301
+ tcMod stretch sin 1 .1 0 9
+ rgbGen identity
+ }
+
+}
+
+models/mapobjects/baph/baphomet
+{
+
+ {
+ map textures/sfx/firewalla.tga
+ tcmod scroll 0.1 1
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/baph/baphomet.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/baph/baphomet_gold
+{
+
+ {
+ map textures/sfx/firewalla.tga
+ tcmod scroll 0.1 1
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/baph/baphomet_gold.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/baph/wrist
+{
+ cull none
+ nomipmaps
+ surfaceparm trans
+
+ {
+ map models/mapobjects/baph/wrist.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 2 1
+ tcmod scroll 3 0
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/baph/wrist.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 1
+ tcmod scroll -5 0
+ rgbGen identity
+ }
+}
+
+//******************************************************//
+// mapobjects/barrel subfolder //
+//******************************************************//
+
+models/mapobjects/barrel/barrel2
+{
+
+ {
+ Map models/mapobjects/barrel/barrel2.tga
+ rgbgen vertex
+
+ }
+ {
+ clampmap models/mapobjects/barrel/barrel2fx.tga
+ blendFunc GL_ONE GL_ONE
+ // rgbgen wave triangle 1 1.4 0 9.5
+ tcMod rotate 403
+ }
+ {
+ clampmap models/mapobjects/barrel/barrel2fx.tga
+ blendFunc GL_ONE GL_ONE
+ // rgbgen wave triangle 1 1 0 8.7
+ tcMod rotate -100
+ }
+
+}
+
+//******************************************************//
+// mapobjects/bat subfolder //
+//******************************************************//
+
+models/mapobjects/bat/bat
+{
+ deformVertexes wave 10 sin 0 3 0 3
+ deformVertexes move 500 0 0 sawtooth 0 5 0 .1
+ deformVertexes move 0 0 7 sin 0 5 0 .5
+ cull disable
+
+ {
+ map models/mapobjects/bat/bat.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/bitch subfolder //
+//******************************************************//
+
+models/mapobjects/bitch/bitch02
+{
+ cull none
+
+ {
+ Map models/mapobjects/bitch/bitch02.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcMod scroll 0 0.3
+ }
+
+
+
+}
+
+models/mapobjects/bitch/forearm
+{
+ {
+ map models/mapobjects/bitch/forearm.tga
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/bitch/forearm01.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 2.2 0
+
+ }
+ {
+ map models/mapobjects/bitch/forearm02.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -1.1 0
+
+ }
+}
+
+models/mapobjects/bitch/hologirl
+{
+ cull none
+ //sort additive // alphaFunc with a later blend pass doesn't
+ // make its own sort properly
+ deformVertexes move 0 0 .7 sin 0 5 0 0.2
+
+
+ {
+ map models/mapobjects/bitch/hologirl.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingdiffuse
+
+ }
+ {
+ map models/mapobjects/bitch/hologirl2.tga
+ tcgen environment
+ tcMod scroll -6 -.2
+ tcMod scale 1 1
+ blendFunc GL_ONE GL_ONE
+ //rgbGen wave sin .5 .5 0 .1
+ }
+
+
+}
+
+models/mapobjects/bitch/orb
+{
+ deformVertexes autoSprite
+
+ q3map_surfacelight 70
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ clampmap models/mapobjects/bitch/orb.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod rotate 30
+ }
+
+}
+
+//******************************************************//
+// mapobjects/chain subfolder //
+//******************************************************//
+
+models/mapobjects/chain/chain
+{
+ cull disable
+ {
+ map models/mapobjects/chain/chain.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/chain/chain2
+{
+ cull disable
+ deformVertexes autoSprite2
+ {
+ map models/mapobjects/chain/chain2.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/chain/chain2_end
+{
+ cull disable
+ deformVertexes autoSprite2
+ {
+ map models/mapobjects/chain/chain2_end.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/chain/chain3
+{
+ {
+ map $whiteimage
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/chain/chain3.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map models/mapobjects/chain/chain3.tga
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/colua0 subfolder //
+//******************************************************//
+
+models/mapobjects/colua0/colua0_flare
+{
+ deformVertexes autoSprite
+
+ q3map_surfacelight 1000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map models/mapobjects/colua0/colua0_flare.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/mapobjects/colua0/colua0_lght
+{
+ surfaceparm trans
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// mapobjects/console subfolder //
+//******************************************************//
+
+models/mapobjects/console/centercon
+{
+ cull disable
+ {
+ map models/mapobjects/console/scrolltext.tga
+ blendFunc add
+ tcmod scroll 0 -.3
+ //tcMod stretch sin .9 0.1 0 1.1
+ rgbGen vertex
+ }
+
+ {
+ clampmap models/mapobjects/console/centercon.tga
+ blendFunc add
+ tcMod stretch sin .9 0.1 0 .2
+ tcmod rotate 40
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/console/console
+{
+ cull disable
+
+ {
+ map textures/effects/tinfx2c.tga
+ blendFunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/console/console.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/console/console2.tga
+ blendFunc add
+ rgbGen vertex
+ rgbGen wave sin .5 .5 0 .2
+ }
+}
+
+models/mapobjects/console/jacobs
+{
+ cull disable
+
+ {
+ map textures/effects/tinfxb.tga
+ blendFunc add
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/mapobjects/console/rotate
+{
+ cull disable
+
+ {
+ clampmap models/mapobjects/console/rotate.tga
+ blendFunc add
+ //tcMod stretch sin .9 0.1 0 .5
+ tcmod rotate 40
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/console/scrolltext
+{
+ cull disable
+
+ {
+ map models/mapobjects/console/scrolltext.tga
+ blendFunc add
+ tcmod scroll 0 -.3
+ //tcMod stretch sin .9 0.1 0 1.1
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/console/sphere
+{
+ cull disable
+
+ {
+ map models/mapobjects/console/spherex2.tga
+ blendFunc add
+ tcmod rotate 40
+ tcGen environment
+ tcmod scroll 5 .4
+ rgbGen wave sin .5 .5 0 .2
+ }
+
+ {
+ map models/mapobjects/console/spherex.tga
+ blendFunc add
+ tcmod rotate 40
+ tcGen environment
+ tcmod scroll 5 .4
+ rgbGen wave sin .5 .5 0 -.2
+ }
+}
+
+models/mapobjects/console/sphere2
+{
+ cull disable
+ deformVertexes autoSprite
+
+ //{
+ // clampmap models/mapobjects/console/sphere2.tga
+ // alphaFunc GE128
+ // depthWrite
+ // //tcMod stretch sin .9 0.1 0 .5
+ // tcmod rotate 40
+ // rgbGen identity
+ //}
+ {
+ map models/mapobjects/console/sphere3.tga
+ blendFunc add
+ // depthWrite
+ rgbGen wave sin .5 .5 0 .2
+ }
+ {
+ map models/mapobjects/console/sphere4.tga
+ blendFunc add
+ // depthWrite
+ rgbGen wave sin .5 .5 0 -.2
+ }
+ {
+ clampmap models/mapobjects/console/sphere2.tga
+ alphaFunc GE128
+ //blendfunc blend
+ //depthWrite
+ //tcMod stretch sin .9 0.1 0 .5
+ tcmod rotate 40
+ rgbGen identity
+ }
+}
+
+models/mapobjects/console/under
+{
+ cull disable
+ surfaceparm alphashadow
+ //surfaceparm nodraw
+ {
+ clampmap models/mapobjects/console/under.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+
+ }
+}
+
+//******************************************************//
+// mapobjects/corpse subfolder //
+//******************************************************//
+
+models/mapobjects/corpse/chain
+{
+ cull disable
+
+ {
+ map models/mapobjects/corpse/chain.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/corpse/corpse
+{
+ deformVertexes wave 100 sin 0 .2 0 .2
+
+ {
+ map models/mapobjects/corpse/corpse.tga
+ rgbGen exactVertex
+ }
+
+
+}
+
+models/mapobjects/corpse/intestine
+{
+
+ cull disable
+
+ {
+ map models/mapobjects/corpse/intestine.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/corpse/intestine2
+{
+ cull disable
+ deformVertexes wave 100 sin 0 .6 0 .2
+ // surfaceparm trans
+ {
+ map models/mapobjects/corpse/intestine2.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/corpse/spine
+{
+ cull disable
+
+ {
+ map models/mapobjects/corpse/spine.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/corpse/torso
+{
+ deformVertexes wave 100 sin 0 .2 0 .2
+ {
+ map textures/liquids/proto_grueldark.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 4 4
+ tcMod scroll 0 -.09
+ tcMod turb 0 0.05 0 .05
+ //rgbGen identity
+ }
+ //{
+ // map textures/liquids/proto_grueldark.tga
+ // //tcGen environment
+ // blendFunc GL_ONE GL_ONE
+ // tcmod scale 2 2
+ // tcMod scroll 0 -.09
+ // tcMod turb 0 0.07 0 .08
+ // //rgbGen identity
+ //}
+ {
+ map models/mapobjects/corpse/torso.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ }
+}
+
+//******************************************************//
+// mapobjects/cross subfolder //
+//******************************************************//
+
+models/mapobjects/cross/cross_skull
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ map models/mapobjects/cross/cross_skull.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/cross/cross
+{
+ q3map_lightimage models/mapobjects/cross/cross_light.tga
+ q3map_surfacelight 300
+
+ {
+ map textures/sfx/firewalla.tga
+ tcmod scale 4 4
+ tcmod scroll 0.1 2
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/cross/cross.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+
+}
+
+//******************************************************//
+// mapobjects/flag subfolder //
+//******************************************************//
+
+//models/mapobjects/flag/banner_eg1
+//{
+// cull disable
+// surfaceparm nolightmap
+// deformVertexes wave 100 sin 0 8 0 8
+// sort banner
+// {
+// map models/mapobjects/flag/banner_eg1.tga
+// // blendfunc gl_src_alpha gl_one_minus_src_alpha
+// alphaFunc GE128
+// rgbGen vertex
+// }
+//
+//
+//}
+
+models/mapobjects/flag/banner_strgg
+{
+ cull disable
+ surfaceparm nolightmap
+ surfaceparm alphashadow
+
+ deformVertexes wave 100 sin 0 3 0 .7
+ //deformVertexes normal 0.2 2
+ sort banner
+ {
+ map models/mapobjects/flag/banner_strgg.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ alphaFunc GE128
+ rgbGen vertex
+
+ }
+}
+
+models/mapobjects/flag/banner02
+{
+ cull disable
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .7
+
+ {
+ map models/mapobjects/flag/banner02.tga
+
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/flares subfolder //
+//******************************************************//
+
+models/mapobjects/flares/electric
+{
+
+
+ q3map_surfacelight 200
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ clampmap models/mapobjects/flares/electric.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .8 2 0 9
+ tcMod rotate 360
+ }
+ {
+ clampmap models/mapobjects/flares/electric.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 9.5
+ tcMod rotate -202
+ }
+
+}
+
+//******************************************************//
+// mapobjects/gratelamp subfolder //
+//******************************************************//
+
+models/mapobjects/gratelamp/gratelamp_flare
+{
+ deformVertexes autoSprite
+
+ q3map_surfacelight 300
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map models/mapobjects/gratelamp/gratelamp_flare.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/mapobjects/gratelamp/gratelamp
+{
+ cull disable
+
+ {
+ map models/mapobjects/gratelamp/gratelamp.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/gratelamp/gratetorch
+{
+ cull disable
+
+ {
+ map models/mapobjects/gratelamp/gratetorch.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/gratelamp/gratetorch2b
+{
+ cull disable
+
+ {
+ map models/mapobjects/gratelamp/gratetorch2b.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/grenadel subfolder //
+//******************************************************//
+
+models/mapobjects/grenadel/grenadelx
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ clampmap models/mapobjects/grenadel/grenadelx.tga
+ tcMod rotate 10
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+}
+
+//******************************************************//
+// mapobjects/horned subfolder //
+//******************************************************//
+
+models/mapobjects/horned/horned
+{
+
+ {
+ map textures/sfx/firewalla.tga
+ tcmod scroll 0.1 1
+ }
+ {
+ map models/mapobjects/horned/horned.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+
+}
+
+//******************************************************//
+// mapobjects/jesus subfolder //
+//******************************************************//
+
+models/mapobjects/jesus/jesuswall
+{
+ deformVertexes wave 100 sin 0 .2 0 .2
+ cull none
+ {
+ map $lightmap
+ //rgbGen identity
+ }
+ {
+ map models/mapobjects/jesus/jesuswall.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen vertex
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/jets subfolder //
+//******************************************************//
+
+models/mapobjects/jets/jet_1
+{
+ surfaceparm trans
+ nomipmaps
+ cull disable
+ {
+ map models/mapobjects/jets/jet_1.tga
+ blendFunc add
+ tcmod scale .5 1
+ tcmod scroll 6 0
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/jets/jet_2.tga
+ blendFunc add
+ tcmod scroll 3 -.5
+ rgbGen wave inversesawtooth -.3 1.3 0 .5
+ }
+}
+
+models/mapobjects/jets/jet_as
+{
+ deformVertexes autoSprite2
+ deformVertexes wave 100 sin 0 1 0 9
+ surfaceparm trans
+ nomipmaps
+ {
+ map models/mapobjects/jets/jet_as.tga
+ blendFunc add
+ rgbGen identity
+ }
+}
+
+//******************************************************//
+// mapobjects/lamps subfolder //
+//******************************************************//
+
+models/mapobjects/lamps/beam
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ deformVertexes move 0 0 2 sin 0 5 0 0.3
+ deformVertexes move .6 .8 0 sin 0 9 0 0.1
+ cull none
+ //nopicmip
+ {
+ map models/mapobjects/lamps/beam.tga
+ tcMod Scroll .3 0
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ map models/mapobjects/lamps/beam.tga
+ tcMod Scroll -.3 0
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/mapobjects/lamps/bot_flare
+{
+ deformVertexes autoSprite
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ clampmap models/mapobjects/lamps/bot_flare.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod rotate 20
+
+
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_flare2
+{
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+ deformVertexes wave 100 sin 0 1 0 9
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ map models/mapobjects/lamps/bot_flare2.tga
+ blendFunc GL_ONE GL_ONE
+
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_lamp
+{
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+
+ {
+ map models/mapobjects/lamps/bot_lamp.tga
+ rgbGen vertex
+
+ }
+
+
+}
+models/mapobjects/lamps/bot_lamp2
+{
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+
+ {
+ map models/mapobjects/lamps/bot_lamp2.tga
+ rgbGen vertex
+
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_lamp2b
+{
+ cull disable
+ deformVertexes move 0 0 2 sin 0 5 0 0.3
+ deformVertexes move .6 .8 0 sin 0 9 0 0.1
+ {
+ map models/mapobjects/lamps/bot_lamp2b.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_light
+{
+ cull disable
+ q3map_surfacelight 200
+ deformVertexes move 0 0 2 sin 0 5 0 0.3
+ deformVertexes move .6 .8 0 sin 0 9 0 0.1
+ {
+ map models/mapobjects/lamps/bot_light.tga
+ rgbGen identity
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_wing
+{
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+ deformVertexes wave 100 sin 0 .5 0 .5
+ cull disable
+
+ {
+ map models/mapobjects/lamps/bot_wing.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_wing2
+{
+ //deformVertexes wave 100 sin 0 .5 0 .5
+ //deformVertexes move 0 0 1 triangle 0 20 0 1
+ deformVertexes move 0 0 2 sin 0 5 0 0.3
+ deformVertexes move .6 .8 0 sin 0 9 0 0.1
+ deformVertexes wave 100 sin 0 .5 0 .5
+ cull disable
+
+ {
+ map models/mapobjects/lamps/bot_wing2.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/lamps/flare03
+{
+ deformVertexes autoSprite
+
+ q3map_surfacelight 200
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map models/mapobjects/lamps/flare03.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+//******************************************************//
+// mapobjects/lightning subfolder //
+//******************************************************//
+
+models/mapobjects/lightning/blu/blu01
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 3000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 15 models/mapobjects/lightning/blu/blu01.tga models/mapobjects/lightning/blu/blu02.tga models/mapobjects/lightning/blu/blu03.tga models/mapobjects/lightning/blu/blu04.tga models/mapobjects/lightning/blu/blu05.tga models/mapobjects/lightning/blu/blu06.tga models/mapobjects/lightning/blu/blu07.tga models/mapobjects/lightning/blu/blu08.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/lightning/red/red01
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 3000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 15 models/mapobjects/lightning/red/red01.tga models/mapobjects/lightning/red/red02.tga models/mapobjects/lightning/red/red03.tga models/mapobjects/lightning/red/red04.tga models/mapobjects/lightning/red/red05.tga models/mapobjects/lightning/red/red06.tga models/mapobjects/lightning/red/red07.tga models/mapobjects/lightning/red/red08.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/lightning/white/white1
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 3000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 15 models/mapobjects/lightning/white/white1.tga models/mapobjects/lightning/white/white2.tga models/mapobjects/lightning/white/white3.tga models/mapobjects/lightning/white/white4.tga models/mapobjects/lightning/white/white5.tga models/mapobjects/lightning/white/white6.tga models/mapobjects/lightning/white/white7.tga models/mapobjects/lightning/white/white8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/lightning/yel/yel01
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 3000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 15 models/mapobjects/lightning/yel/yel01.tga models/mapobjects/lightning/yel/yel02.tga models/mapobjects/lightning/yel/yel03.tga models/mapobjects/lightning/yel/yel04.tga models/mapobjects/lightning/yel/yel05.tga models/mapobjects/lightning/yel/yel06.tga models/mapobjects/lightning/yel/yel07.tga models/mapobjects/lightning/yel/yel08.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+//******************************************************//
+// mapobjects/pipe subfolder //
+//******************************************************//
+
+models/mapobjects/pipe/pipe02
+{
+
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/pipe/pipe02.tga
+ blendfunc blend
+ rgbGen lightingdiffuse
+ }
+
+}
+
+models/mapobjects/pipe/pipe02x
+{
+ q3map_lightimage textures/sfx/electricslime_old.tga
+ q3map_surfacelight 150
+ cull disable
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ tcmod scale 1 2
+ blendfunc add
+ rgbGen identity
+ }
+ {
+ map textures/sfx/electricslime_old.tga
+ //tcGen environment
+ //tcmod scale 2 2
+ //tcmod rotate 240
+ tcmod scroll 7.2 1
+ blendfunc add
+ rgbGen identity
+ }
+
+}
+
+//******************************************************//
+// mapobjects/podium subfolder //
+//******************************************************//
+
+models/mapobjects/podium/podium
+{
+ {
+ map models/mapobjects/podium/podium.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod scroll .2 0.01
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/podium/podium.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/mapobjects/podium/podiumglo.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 1 1 0 .2
+ }
+
+
+}
+
+models/mapobjects/podium/podiumfx1
+{
+ cull none
+ surfaceparm trans
+ {
+ map models/mapobjects/podium/podiumfx1.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 2 -.3
+ rgbGen wave inversesawtooth 0 1 .35 .3
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -1.7 -.3
+ rgbGen wave inversesawtooth 0 1 .35 .3
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -1.1 -.3
+ rgbGen wave inversesawtooth 0 1 .35 .3
+ }
+}
+
+models/mapobjects/podium/podiumfx2
+{
+ cull none
+ surfaceparm trans
+ {
+ map models/mapobjects/podium/podiumfx1.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .5
+ tcmod scroll .8 -.3
+ rgbGen wave inversesawtooth 0 1 .7 .6
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .5
+ tcmod scroll -1.7 -.3
+ rgbGen wave inversesawtooth 0 1 .7 .6
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .5
+ tcmod scroll -1.1 -.3
+ rgbGen wave inversesawtooth 0 1 .7 .6
+ }
+}
+
+models/mapobjects/podium/podiumfx3
+{
+ cull none
+ surfaceparm trans
+ {
+ map models/mapobjects/podium/podiumfx1.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .1
+ tcmod scroll 1 -.3
+ rgbGen wave inversesawtooth 0 1 1.1 .9
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .1
+ tcmod scroll -1.7 -.3
+ rgbGen wave inversesawtooth 0 1 1.1 .9
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .1
+ tcmod scroll -1.1 -.3
+ rgbGen wave inversesawtooth 0 1 1.1 .9
+ }
+}
+
+models/mapobjects/podium/podskull
+{
+ {
+ map models/mapobjects/podium/podskull.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod scroll .2 0.03
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/podium/podskull.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/mapobjects/podium/podskullfx.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 1 1 0 .2
+ }
+}
+
+//******************************************************//
+// mapobjects/portal_2 subfolder //
+//******************************************************//
+
+models/mapobjects/portal_2/portal_3
+{
+ // *************************************************
+ // * Portal Sides *
+ // * April 30 1999 *
+ // * Please Comment Changes *
+ // *************************************************
+
+
+ {
+ map models/mapobjects/portal_2/portal_3.tga
+ rgbGen vertex
+ }
+
+ {
+ map models/mapobjects/portal_2/portal_3_glo.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 .2 .5
+ }
+
+}
+
+models/mapobjects/portal_2/portal_3_edge
+{
+ {
+ map models/mapobjects/portal_2/portal_3_edge.tga
+ rgbGen vertex
+ }
+
+ {
+ map models/mapobjects/portal_2/portal_3_edge_glo.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 9.7 .5
+ }
+
+}
+
+//******************************************************//
+// mapobjects/scoreboard subfolder //
+//******************************************************//
+
+models/mapobjects/scoreboard/s_name
+{
+ sort additive
+ cull disable
+ deformVertexes text0
+ {
+ map gfx/2d/bigchars.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+models/mapobjects/scoreboard/s_score
+{
+ sort additive
+ cull disable
+ deformVertexes text1
+ {
+ map gfx/2d/bigchars.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+//******************************************************//
+// mapobjects/signs subfolder //
+//******************************************************//
+
+models/mapobjects/signs/bioh
+{
+ cull disable
+
+ {
+ map models/mapobjects/signs/bioh.tga
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/skel subfolder //
+//******************************************************//
+
+models/mapobjects/skel/skel
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ map models/mapobjects/skel/skel.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/skel/xray
+{
+ deformVertexes move 0 0 .7 sin 0 5 0 0.2
+ cull disable
+ q3map_surfacelight 300
+ {
+ map models/mapobjects/skel/xray.tga
+ blendfunc add
+ rgbGen wave sin 1 .8 0 .3
+ }
+ {
+
+ map models/mapobjects/bitch/hologirl2.tga
+ tcMod scroll -6 -.2
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/skull subfolder //
+//******************************************************//
+
+models/mapobjects/skull/monkeyhead
+{
+ //deformVertexes wave 100 sin 0 .7 0 .2
+ //deformVertexes wave 100 sin 0 .5 1 .1
+ cull disable
+ nomipmaps
+
+ {
+ map models/mapobjects/skull/monkeyhead.tga
+ rgbGen vertex
+ }
+ {
+ //animMap 0.5 models/mapobjects/skull/monkeyhead.tga //models/mapobjects/wallhead/femhead2.tga
+ map models/mapobjects/skull/monkeyheadb.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaGen wave sin 0 1 1 .1
+ // alphaGen wave triangle 0 .7 0 .2
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/skull/monkeyhead2
+{
+ cull disable
+ surfaceparm trans
+ nomipmaps
+ {
+ map models/mapobjects/skull/monkeyhead2.tga
+ blendfunc blend
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/skull/ribcage
+{
+ sort underwater
+ cull disable
+ {
+ map models/mapobjects/skull/ribcage.tga
+ // blendfunc gl_src_alpha gl_one_minus_src_alpha
+ alphaFunc GE128
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/slamp subfolder //
+//******************************************************//
+
+models/mapobjects/slamp/slamp2
+{
+ cull disable
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ {
+ map models/mapobjects/slamp/slamp2.tga
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ map textures/effects/envmapdimb.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ //rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/mapobjects/slamp/slamp3
+{
+ deformVertexes autoSprite2
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 100
+
+ {
+ map models/mapobjects/slamp/slamp3.tga
+ blendFunc GL_ONE GL_ONE
+
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/spotlamp subfolder //
+//******************************************************//
+
+models/mapobjects/spotlamp/beam
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ cull none
+ nomipmaps
+ {
+ map models/mapobjects/spotlamp/beam.tga
+ tcMod Scroll .3 0
+ blendFunc GL_ONE GL_ONE
+ }
+ //{
+ // map models/mapobjects/spotlamp/beam.tga
+ // tcMod Scroll -.3 0
+ // blendFunc GL_ONE GL_ONE
+ //}
+
+}
+
+models/mapobjects/spotlamp/spotlamp
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ map models/mapobjects/spotlamp/spotlamp.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/spotlamp/spotlamp_l
+{
+ cull disable
+ q3map_surfacelight 200
+
+ {
+ map models/mapobjects/spotlamp/spotlamp_l.tga
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/teleporter subfolder //
+//******************************************************//
+
+models/mapobjects/teleporter/energy
+{
+ cull disable
+
+
+ {
+ map models/mapobjects/teleporter/energy.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 2.2 1.3
+ rgbGen wave inversesawtooth -.3 1.3 0 1.3
+
+ }
+ {
+ map models/mapobjects/teleporter/energy2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -1 .5
+ rgbGen wave inversesawtooth -.2 1.2 0 .5
+
+ }
+ {
+ map models/mapobjects/teleporter/energy3.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 3 0
+ rgbGen wave triangle 1 1 0 5.3
+
+ }
+
+}
+
+models/mapobjects/teleporter/teleporter_edge
+{
+
+
+ {
+ map models/mapobjects/teleporter/teleporter_edge.tga
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/teleporter/teleporter_edge2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave inversesawtooth 0 1 .2 1.5
+ }
+
+}
+
+models/mapobjects/teleporter/transparency
+{
+ cull disable
+
+ {
+ map models/mapobjects/teleporter/transparency.tga
+ blendfunc GL_ONE GL_ONE
+
+ }
+ {
+ map models/mapobjects/teleporter/transparency2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll .1 .2
+ }
+
+}
+
+models/mapobjects/teleporter/transparency2
+{
+ cull disable
+
+ {
+ map models/mapobjects/teleporter/transparency2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll .1 .2
+ }
+
+}
+
+models/mapobjects/teleporter/widget
+{
+ cull disable
+
+ {
+ map models/mapobjects/teleporter/widget.tga
+ blendfunc GL_ONE GL_ONE
+
+ }
+ {
+ map models/mapobjects/teleporter/transparency2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -.1 -.2
+ }
+
+}
+
+//******************************************************//
+// mapobjects/timlamp subfolder //
+//******************************************************//
+
+models/mapobjects/timlamp/timlamp
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ map models/mapobjects/timlamp/timlamp.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/tree subfolder //
+//******************************************************//
+
+models/mapobjects/tree/branch
+{
+ cull disable
+ deformVertexes wave 100 sin 0 .1 0 .2
+ surfaceparm trans
+ {
+ map models/mapobjects/tree/branch.tga
+ alphaFunc GE128
+ depthWrite
+ //rgbGen identity
+ //rgbGen lightingDiffuse
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/wallhead subfolder //
+//******************************************************//
+
+//models/mapobjects/wallhead/femhead
+//{
+// deformVertexes wave 100 sin 0 .7 0 .2
+// cull disable
+//
+//
+// {
+// map models/mapobjects/wallhead/femhead2.tga
+// rgbGen vertex
+// }
+// {
+// map models/mapobjects/wallhead/femhead.tga
+// Blendfunc GL_ONE GL_ONE
+// rgbGen vertex
+// rgbGen wave triangle 0 1 0 .05
+// }
+//
+//}
+
+models/mapobjects/wallhead/femhead
+{
+ deformVertexes wave 100 sin 0 .7 0 .2
+ //deformVertexes wave 100 sin 0 1 1 .1
+ cull disable
+
+ {
+ map models/mapobjects/wallhead/femhead3.tga
+ rgbGen vertex
+ }
+ {
+ //animMap 0.5 models/mapobjects/wallhead/femhead4.tga //models/mapobjects/wallhead/femhead2.tga
+ map models/mapobjects/wallhead/femhead4.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaGen wave sin 0 1 1 .1
+ // alphaGen wave triangle 0 .7 0 .2
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/wallhead/lion_m
+{
+ {
+ map models/mapobjects/wallhead/lion_m.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen vertex
+ }
+ {
+ map textures/sfx/firewalla.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 0.1 1
+ //rgbGen wave triangle .5 1 0 .4
+ }
+ {
+ map models/mapobjects/wallhead/lion_m.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ }
+
+}
+
+//models/mapobjects/wallhead/tongue
+//{
+// {
+// //rgbGen lightingDiffuse
+// map $whiteimage
+// rgbGen vertex
+// }
+// {
+// map models/mapobjects/wallhead/tongue.tga
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+// rgbGen identity
+// alphaGen lightingSpecular
+// }
+//}
+
+models/mapobjects/wallhead/wallhead
+{
+
+
+ {
+ map models/mapobjects/wallhead/wallhead.tga
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/wallhead/wallhead_eye
+{
+
+
+ {
+ animMap 0.2 models/mapobjects/wallhead/wallhead_eye.tga models/mapobjects/wallhead/wallhead_eye2.tga
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/weeds subfolder //
+//******************************************************//
+
+models/mapobjects/weeds/weed01
+{
+ sort additive
+ cull disable
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .7
+ {
+ map models/mapobjects/weeds/weed01.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ }
+
+
+}
+
+models/mapobjects/weeds/weed02
+{
+ sort underwater
+ cull disable
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .7
+ {
+ map models/mapobjects/weeds/weed02.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ }
+
+
+}
+
+
+//**************************************************************//
+// //
+// MODELS/PLAYERS //
+// //
+//**************************************************************//
+
+//******************************************************//
+// models/players/anarki subfolder //
+//******************************************************//
+
+models/players/anarki/anarki_b
+{
+ {
+ map textures/effects/envmapbfg.tga
+ tcGen environment
+ tcmod rotate 350
+ tcmod scroll 3 1
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/players/anarki/anarki_b.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/anarki/anarki_g
+{
+ {
+ map models/players/anarki/anarki_g.tga
+ //rgbGen vertex
+ }
+ {
+
+ map models/players/anarki/anarki_g_fx.tga
+ rgbGen lightingDiffuse
+ rgbGen wave triangle 0 1 0 .5
+ blendfunc gl_ONE gl_ONE
+ }
+}
+
+//******************************************************//
+// models/players/biker subfolder //
+//******************************************************//
+
+models/players/biker/cadaver
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/biker/cadaver.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+//******************************************************//
+// models/players/bones subfolder //
+//******************************************************//
+
+models/players/bones/blue
+{
+
+ cull disable
+ {
+ map models/players/bones/blue.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/bones/red
+{
+
+ cull disable
+ {
+ map models/players/bones/red.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/bones/stiff
+{
+
+ cull disable
+ {
+ map models/players/bones/stiff.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/bones/xray
+{
+
+ cull disable
+ {
+ map models/players/bones/xray.tga
+ blendfunc add
+ //rgbGen wave sin 1 .8 0 9
+ }
+ {
+
+ map models/mapobjects/bitch/hologirl2.tga
+ tcMod scroll -6 -.2
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// models/players/brandon subfolder //
+//******************************************************//
+
+models/players/brandon/branhat
+{
+ {
+ map models/players/light/brandon/branhat.tga
+ }
+ {
+ map models/players/light/brandon/branhat.glow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/brandon/braneye
+{
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/light/brandon/braneye.tga
+ rgbGen identity
+ alphaGen lightingSpecular
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ }
+ {
+ map models/players/light/brandon/braneye.glow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/players/crash subfolder //
+//******************************************************//
+
+models/players/crash/crash
+{
+ {
+ map textures/effects/envmapblue.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/crash/crash.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/crash/crash_f
+{
+
+ {
+ map textures/sfx/snow.tga
+ tcmod scale .5 .5
+ tcmod scroll 9 0.3
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendFunc add
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/crash/crash_t
+{
+ {
+ map textures/effects/envmapblue.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/crash/crash_t.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+//******************************************************//
+// models/players/doom subfolder //
+//******************************************************//
+
+models/players/doom/doom_f
+{
+ {
+ map models/players/doom/doom_f.tga
+ rgbGen lightingDiffuse
+ }
+ {
+
+ map models/players/doom/doom_fx.tga
+ tcGen environment
+ rgbGen lightingDiffuse
+ blendfunc gl_ONE gl_ONE
+ }
+
+}
+
+models/players/doom/f_doom
+{
+ {
+ map models/players/doom/f_doom.tga
+ }
+ {
+
+ map models/players/doom/fx_doom.tga
+ tcGen environment
+ rgbGen lightingDiffuse
+ blendfunc gl_ONE gl_ONE
+ }
+}
+
+models/players/doom/phobos
+{
+ {
+ map models/players/doom/phobos_fx.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 7 7
+ tcMod scroll 5 -5
+ tcmod rotate 360
+ rgbGen identity
+ }
+ //{
+ // map textures/effects/tinfx2.tga
+ // tcGen environment
+ // blendFunc GL_ONE GL_ONE
+ // rgbGen lightingDiffuse
+ //}
+ {
+ map models/players/doom/phobos.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+}
+
+models/players/doom/phobos_f
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/doom/phobos_f.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+}
+
+//******************************************************//
+// models/players/grunt subfolder //
+//******************************************************//
+
+models/players/grunt/stripe_h
+{
+
+ {
+ //map textures/effects/tinfx.tga
+ map textures/sfx/electricgrade3.tga
+ //tcmod scale 6 6
+ //tcmod rotate 350
+ tcmod scroll 0 -.5
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/players/grunt/stripe_h.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ rgbGen lightingDiffuse
+ }
+
+}
+
+//******************************************************//
+// models/players/hunter subfolder //
+//******************************************************//
+
+models/players/hunter/harpy
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/hunter/hunter2.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/hunter/harpy_f
+{
+ surfaceparm nodraw
+}
+
+models/players/hunter/harpy_h
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/hunter/hunter_h.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/hunter/hunter_f
+{
+ deformVertexes wave 100 sin 0 .3 0 .2
+ cull disable
+ {
+ map models/players/hunter/hunter_f.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/hunter/red_f
+{
+ deformVertexes wave 100 sin 0 .3 0 .2
+ cull disable
+ {
+ map models/players/hunter/red_f.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+//******************************************************//
+// models/players/klesk subfolder //
+//******************************************************//
+
+models/players/klesk/flisk
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/klesk/flisk.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+models/players/klesk/flisk_h
+{
+ {
+ map models/players/klesk/flisk_h.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/bolts.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 2 2
+ tcmod scroll 2 2
+ }
+ {
+ map models/players/klesk/flisk_h.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/klesk/klesk_h
+{
+ {
+ map models/players/klesk/klesk_h.tga
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+
+ }
+
+ {
+ map models/players/klesk/klesk_g.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave triangle .5 1 0 .5
+
+ }
+}
+
+//******************************************************//
+// models/players/lucy subfolder //
+//******************************************************//
+
+models/players/lucy/angel
+{
+ cull none
+
+ {
+ map models/players/lucy/angel.tga
+ alphaFunc GE128
+ depthWrite
+ //rgbGen identity
+ rgbGen lightingDiffuse
+
+ }
+ {
+
+ //map textures/effects/envmapcirc3.tga
+
+ map models/mapobjects/bitch/hologirl2.tga
+ tcgen environment
+ tcMod scroll -6 -.2
+ tcMod scale 1 1
+ blendFunc GL_ONE GL_ONE
+ //rgbGen identity
+ //rgbGen vertex
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/lucy/h_angel
+{
+ cull none
+
+ {
+ map models/players/lucy/h_angel.tga
+ depthWrite
+ rgbGen lightingDiffuse
+
+ }
+ {
+
+ //map textures/effects/envmapcirc3.tga
+
+ map models/mapobjects/bitch/hologirl2.tga
+ tcgen environment
+ tcMod scroll -6 -.2
+ tcMod scale 1 1
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ // rgbGen vertex
+ rgbGen lightingDiffuse
+ }
+
+}
+
+//******************************************************//
+// models/players/major subfolder //
+//******************************************************//
+
+models/players/major/daemia
+{
+ {
+ map textures/sfx/electricslime.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 3 3
+ tcMod turb 0 .5 0 .7
+ tcMod scroll 1 -1
+ rgbGen identity
+ }
+ {
+ map models/players/major/daemia.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+//******************************************************//
+// models/players/mynx subfolder //
+//******************************************************//
+
+models/players/mynx/mynx_shiny
+{
+
+ {
+ map textures/sfx/specular5.tga
+ blendFunc GL_ONE GL_ZERO
+ tcGen environment
+ }
+ {
+ map models/players/mynx/mynx_shiny.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+}
+
+//******************************************************//
+// models/players/orbb subfolder //
+//******************************************************//
+
+models/players/orbb/blue_h
+{
+
+ {
+ map models/players/orbb/blue_h.tga
+ rgbGen lightingDiffuse
+ }
+
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ blendfunc blend
+ tcmod rotate 90
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/orbb/orbb_h2
+{
+ {
+ map models/players/orbb/orbb_h2.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/effects/tinfx.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/orbb/orbb_h2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/orbb/orbb_light
+{
+ {
+ map models/players/orbb/orbb_light.tga
+ rgbGen wave sin 1 1 0 1
+
+ }
+}
+
+models/players/orbb/orbb_light_blue
+{
+ {
+ map models/players/orbb/orbb_light_blue.tga
+ rgbGen wave sin 1 1 0 1
+
+ }
+}
+
+models/players/orbb/red_h
+{
+
+ {
+ map models/players/orbb/red_h.tga
+ rgbGen lightingDiffuse
+ }
+
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ blendfunc blend
+ tcmod rotate 90
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/orbb/orbb_tail
+{
+
+ {
+ map models/players/orbb/orbb_tail.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 0 .5
+ rgbGen wave sin .5 .25 0 .5
+ }
+}
+
+models/players/orbb/orbb_tail_blue
+{
+
+ {
+ map models/players/orbb/orbb_tail_blue.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 0 .5
+ rgbGen wave sin .5 .25 0 .5
+ }
+}
+
+//******************************************************//
+// models/players/parkr subfolder //
+//******************************************************//
+
+models/players/parkr/parkr_chest
+{
+ {
+ map models/players/parkr/parkr_chest.tga
+ }
+ {
+ AnimMap 4 models/players/parkr/parkr_chest_red.tga models/players/parkr/parkr_chest_blu.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/players/parkr/parkr_head
+{
+ {
+ map textures/effects/envmap2.tga
+ tcGen environment
+ }
+}
+
+//******************************************************//
+// models/players/ranger subfolder //
+//******************************************************//
+
+//models/players/ranger/wrack
+//{
+// {
+// map $whiteimage
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/players/ranger/wrack.tga
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+// rgbGen identity
+// alphaGen lightingSpecular
+// }
+//
+//}
+
+models/players/ranger/wrack
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/ranger/wrack.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+//******************************************************//
+// models/players/razor subfolder //
+//******************************************************//
+
+models/players/razor/h_id
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/razor/h_id.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/razor/id
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/razor/id.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/razor/patriot
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/razor/patriot.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+models/players/razor/patriot_gogs
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/razor/razor_gogs
+{
+ {
+ map models/players/razor/razor_gogs.tga
+ tcGen environment
+
+ }
+
+
+ {
+ map models/players/razor/razor_gogs_fx.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 1.2 9.3
+
+ }
+}
+
+//******************************************************//
+// models/players/sarge subfolder //
+//******************************************************//
+
+models/players/sarge/cigar
+{
+ {
+ map models/players/sarge/cigar.tga
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+
+ }
+
+ {
+ map models/players/sarge/cigar.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave triangle .5 1 0 .2
+
+ }
+}
+
+models/players/sarge/krusade
+{
+ {
+ map textures/sfx/firegorre.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ rgbGen identity
+ }
+ {
+ map models/players/sarge/krusade.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/sarge/null
+{
+ {
+ map models/players/sarge/null.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/players/sarge/roderic
+{
+ {
+ map textures/sfx/firegorre.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ rgbGen identity
+ }
+ {
+ map models/players/sarge/roderic.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+//******************************************************//
+// models/players/slash subfolder //
+//******************************************************//
+
+models/players/slash/grrl_h
+{
+
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/players/slash/grrl_h.tga
+ blendfunc blend
+ rgbGen lightingdiffuse
+ }
+
+}
+
+models/players/slash/slashskate
+{
+ //deformVertexes wave 100 sin 0 1 1 5
+ sort additive
+ cull disable
+ {
+ clampmap models/players/slash/slashskate.tga
+ blendFunc GL_ONE GL_ONE
+ //tcmod rotate 100
+ tcMod stretch sin .9 0.1 0 1.1
+ rgbgen identity
+
+ }
+}
+
+models/players/slash/yuriko
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/slash/yuriko.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/slash/yuriko_h
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/slash/yuriko_h.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/slash/yurikoskate
+{
+ cull disable
+ deformVertexes autoSprite
+
+
+ {
+ clampmap models/players/slash/yurikoskate.tga
+ blendFunc blend
+ //tcMod stretch sin .9 0.1 0 1.1
+ tcmod rotate 999
+ rgbGen lightingdiffuse
+ }
+ {
+ clampmap models/players/slash/yurikoskate.tga
+ blendFunc blend
+ //tcMod stretch sin .9 0.1 0 -1.1
+ tcMod stretch sin .9 0 0 0
+ tcmod rotate 20
+ rgbGen lightingdiffuse
+ }
+}
+
+//******************************************************//
+// models/players/tankjr subfolder //
+//******************************************************//
+
+models/players/tankjr/tankjr
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/tankjr/tankjr.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+//******************************************************//
+// models/players/uriel subfolder //
+//******************************************************//
+
+models/players/uriel/blue_w
+{
+ deformVertexes wave 100 sin 0 .5 0 .2
+
+ {
+ map models/players/uriel/blue_w.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/uriel/null
+{
+ {
+ map models/players/uriel/null.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/players/uriel/red_w
+{
+ deformVertexes wave 100 sin 0 .5 0 .2
+
+ {
+ map models/players/uriel/red_w.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/uriel/uriel_h
+{
+ {
+ map models/players/uriel/uriel_h.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/proto_zzzt.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -0.2 1
+ rgbGen identity
+ }
+ {
+ map models/players/uriel/uriel_h.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/uriel/uriel_w
+{
+ deformVertexes wave 100 sin 0 .5 0 .2
+
+ {
+ map models/players/uriel/uriel_w.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/uriel/zael
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/uriel/zael.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+//******************************************************//
+// models/players/visor subfolder //
+//******************************************************//
+
+models/players/visor/gorre
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ rgbGen identity
+ }
+ //{
+ // map textures/sfx/firewallb.tga
+ // blendFunc GL_ONE GL_ONE
+ // tcmod scale 3 3
+ // tcMod turb 0 .2 0 .1
+ // tcMod scroll 0 3
+ // //tcmod rotate 360
+ // rgbGen identity
+ //}
+ {
+ map models/players/visor/gorre.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+}
+
+//models/players/visor/visortorso2
+//{
+// {
+// map $whiteimage
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/players/visor/visortorso2.tga
+// rgbGen identity
+// alphaGen lightingSpecular
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+// }
+//}
+
+//models/players/visorhead
+//{
+// {
+// map $whiteimage
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/players/visor/visorhead.tga
+// rgbGen identity
+// alphaGen lightingSpecular
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+// }
+//}
+
+//******************************************************//
+// models/players/xaero subfolder //
+//******************************************************//
+
+models/players/xaero/xaero
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/xaero/xaero.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+models/players/xaero/xaero_a
+{
+ {
+ map textures/effects/envmapbfg.tga
+ tcmod rotate 350
+ tcmod scroll 3 1
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/players/xaero/xaero_a.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/xaero/xaero_h
+{
+ {
+ map models/players/xaero/xaero_h.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/firewalla.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 0.1 1
+ //rgbGen wave triangle .5 1 0 .4
+ }
+ {
+ map models/players/xaero/xaero_h.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/xaero/xaero_q
+{
+
+ cull disable
+
+ {
+ map models/players/xaero/xaero_q.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+//******************************************************//
+// models/players/xian subfolder //
+//******************************************************//
+
+models/players/xian/xianfacf
+{
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/medium/xian/xianfacf.tga
+ rgbGen identity
+ alphaGen lightingSpecular
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ }
+}
+
+
+//**************************************************************//
+// //
+// MODELS/POWERUPS //
+// //
+//**************************************************************//
+
+//******************************************************//
+// models/powerups/ammo subfolder //
+//******************************************************//
+
+//models/powerups/ammo/ammo_rail1
+//{
+// {
+// map models/powerups/ammo/ammo_rail1.tga
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/powerups/ammo/ammo_rail1.glow.tga
+// blendfunc GL_ONE GL_ONE
+// rgbGen wave sin 0.75 0.25 0 1
+// }
+//}
+
+//models/powerups/ammo/ammo_rail2
+//{
+// {
+// map models/powerups/ammo/ammo_rail2.tga
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/powerups/ammo/ammo_rail2.glow.tga
+// blendfunc GL_ONE GL_ONE
+// }
+//}
+
+models/powerups/ammo/bfgammo
+{
+ cull none
+ {
+ map textures/effects/envmapbfg.tga
+ //tcmod scale 3 3
+ tcmod rotate 350
+ tcmod scroll 3 1
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/bfgammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/bfgammo1
+{
+ {
+ map textures/effects/envmapbfg.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/bfgammo2
+{
+ {
+ map models/powerups/ammo/bfgammo2.tga
+ rgbGen identity
+ }
+
+}
+
+//models/powerups/ammo/bounammo1
+//{
+// {
+// map models/powerups/ammo/bounammo1.tga
+// rgbGen lightingDiffuse
+// }
+//}
+
+//models/powerups/ammo/bounammo2
+//{
+// {
+// map models/powerups/ammo/bounammo2.tga
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/powerups/ammo/bounammo2.glow.tga
+// blendfunc GL_ONE GL_ONE
+// rgbGen lightingDiffuse
+// }
+//}
+
+//models/powerups/ammo/flamammo1
+//{
+// {
+// map models/powerups/ammo/flamammo1.tga
+// rgbGen lightingDiffuse
+// }
+//}
+
+//models/powerups/ammo/flamammo2
+//{
+// {
+// map models/powerups/ammo/flamammo2.tga
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/powerups/ammo/flamammo2.glow.tga
+// blendfunc GL_ONE GL_ONE
+// }
+//}
+
+models/powerups/ammo/grenammo
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/grenammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/grenammo1
+{
+ {
+ map textures/effects/envmapgren.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/grenammo2
+{
+ {
+ map models/powerups/ammo/grenammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/lighammo
+{
+ {
+ map textures/effects/envmapligh.tga
+ //tcmod scale 3 3
+ tcmod rotate 350
+ tcmod scroll 3 1
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/lighammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/lighammo1
+{
+ {
+ map textures/effects/envmapligh.tga
+ tcGen environment
+ //tcmod scale 2 2
+ tcmod rotate 6
+ tcmod scroll .09 .09
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/lighammo2
+{
+ {
+ map models/powerups/ammo/lighammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/machammo
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/machammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/machammo1
+{
+ {
+ map textures/effects/envmapmach.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/machammo2
+{
+ {
+ map models/powerups/ammo/machammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/plasammo
+{
+ {
+ map textures/effects/envmapplas.tga
+ //tcmod scale 3 3
+ tcmod rotate 350
+ tcmod scroll 3 1
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/plasammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/plasammo1
+{
+ {
+ map textures/effects/envmapplas.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/plasammo2
+{
+ {
+ map models/powerups/ammo/plasammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/railammo
+{
+ {
+ map textures/effects/envmaprail.tga
+ //tcmod scale 3 3
+ tcmod rotate 350
+ tcmod scroll 3 1
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/railammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/railammo1
+{
+ {
+ map textures/effects/envmaprail.tga
+ tcGen environment
+ //tcmod scale 4 4
+ //tcmod rotate 70
+ //tcmod scroll .5 .5
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/railammo2
+{
+ {
+ map models/powerups/ammo/railammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/rockammo
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/rockammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/rockammo1
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/rockammo2
+{
+ {
+ map models/powerups/ammo/rockammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/shotammo
+{
+ {
+ map textures/effects/tinfx2c.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/shotammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/shotammo1
+{
+ {
+ map textures/effects/envmapgold3.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/shotammo2
+{
+ {
+ map models/powerups/ammo/shotammo2.tga
+ rgbGen identity
+ }
+
+}
+
+//******************************************************//
+// models/powerups/armor subfolder //
+//******************************************************//
+
+models/powerups/armor/energy_grn1
+{
+ deformVertexes wave 100 sin 2 0 0 0
+ {
+ map textures/effects/envmaprail.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod rotate 30
+ tcMod scroll 1 1
+ rgbGen wave triangle -.3 1.3 0 .3
+ }
+
+}
+
+models/powerups/armor/energy_red1
+{
+
+ {
+ map models/powerups/armor/energy_red1.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 7.4 1.3
+ }
+
+}
+
+models/powerups/armor/energy_yel1
+{
+
+ {
+ map models/powerups/armor/energy_yel3.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 7.4 1.3
+ }
+
+}
+
+models/powerups/armor/newred
+{
+ {
+ map textures/sfx/specular.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/powerups/armor/newred.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+}
+
+models/powerups/armor/newyellow
+{
+ {
+ map textures/sfx/specular.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/powerups/armor/newyellow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+}
+
+models/powerups/armor/shard2
+{
+ {
+ map textures/effects/tinfx2c.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/powerups/armor/shard2.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+//******************************************************//
+// models/powerups/health subfolder //
+//******************************************************//
+
+models/powerups/health/blue
+{
+ {
+ map textures/effects/envmapbfg.tga
+ tcGen environment
+
+ }
+}
+
+models/powerups/health/blue_sphere
+{
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/powerups/health/green
+{
+
+ {
+ map textures/effects/envmaprail.tga
+ tcGen environment
+
+ }
+}
+
+models/powerups/health/green_sphere
+{
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/powerups/health/mega1
+{
+ {
+ map textures/effects/envmapblue2.tga
+ tcGen environment
+ tcmod rotate 33
+ tcmod scroll 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/powerups/health/mega2
+{
+
+ {
+ map textures/effects/envmapblue.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+
+ }
+ {
+ map textures/sfx/kenelectric.tga
+ tcmod scale 2 2
+ tcmod rotate 333
+ tcmod scroll 9 9
+ blendfunc GL_ONE GL_ONE
+
+ }
+}
+
+models/powerups/health/red
+{
+
+ {
+ map textures/effects/envmapgold.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+
+ }
+ {
+ map textures/sfx/kenelectric.tga
+ tcmod scale 2 2
+ tcmod rotate 333
+ tcmod scroll 9 9
+ blendfunc GL_ONE GL_ONE
+
+ }
+}
+
+models/powerups/health/red_sphere
+{
+ {
+ map textures/effects/envmapgold2.tga
+ tcGen environment
+ tcmod rotate 33
+ tcmod scroll 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/powerups/health/yellow
+{
+
+ {
+ map textures/effects/envmapyel.tga
+ tcGen environment
+ //blendfunc GL_ONE GL_ONE
+
+ }
+
+}
+
+models/powerups/health/yellow_sphere
+{
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/powerups/holdable subfolder //
+//******************************************************//
+
+models/powerups/holdable/medkit_base
+{
+ {
+ map textures/effects/envmap.tga
+ tcgen environment
+ }
+
+}
+
+models/powerups/holdable/medkit_fluid
+{
+ sort additive
+ cull back
+ {
+ map models/powerups/holdable/medkit_fluid.tga
+ tcMod scroll 0 2
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+models/powerups/holdable/medkit_sphere
+{
+ {
+ map textures/effects/envmapdim.tga
+ tcgen environment
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+models/powerups/holdable/teleport_base
+{
+ {
+ map textures/effects/envmap.tga
+ tcgen environment
+ }
+
+}
+
+models/powerups/holdable/teleport_fluid
+{
+ sort additive
+ cull back
+ {
+ map models/powerups/holdable/teleport_fluid.tga
+ tcMod scroll 0 2
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+models/powerups/holdable/teleport_sphere
+{
+ {
+ map textures/effects/envmapdim.tga
+ tcgen environment
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+//******************************************************//
+// models/powerups/instant subfolder //
+//******************************************************//
+
+models/powerups/instant/enviro
+{
+ //{
+ // map models/powerups/instant/enviro.tga
+ //}
+ {
+ map textures/effects/envmapgold.tga
+ blendfunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/flight
+{
+ {
+ map textures/effects/envmappurp.tga
+ blendfunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/haste
+{
+ {
+ map textures/effects/envmapyel.tga
+ blendfunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/invis
+{
+ {
+ map textures/effects/tinfx2c.tga
+ //map textures/sfx/specular.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ }
+}
+
+models/powerups/instant/quad
+{
+ //{
+ // map gfx/colors/darkblue.tga
+ //}
+ {
+ map textures/effects/envmapblue.tga
+ blendfunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/regen
+{
+ {
+ map textures/effects/envmapred.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/scan
+{
+ {
+ map models/powerups/instant/scan.tga
+ }
+ {
+ map textures/effects/envmapdim.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ }
+}
+
+
+//**************************************************************//
+// //
+// MODELS/WEAPONS2 //
+// //
+//**************************************************************//
+
+//******************************************************//
+// models/weapons2/bfg subfolder //
+//******************************************************//
+
+models/weapons2/bfg/bfg
+{
+ {
+ map textures/effects/tinfx2d.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scroll .01 .01
+ tcGen environment
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/weapons2/bfg/bfg.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/bfg/bfg_e
+{
+ {
+ //map models/weapons2/bfg/bfg_e2.tga
+ map textures/effects/envmapbfg.tga
+ blendfunc GL_ONE GL_ZERO
+ tcMod turb 0 .5 0 .1
+ tcmod scale .4 .4
+ tcMod scroll .2 -.2
+ rgbGen identity
+ }
+ {
+ //map models/weapons2/bfg/bfg_e2.tga
+ //map models/players/doom/phobos_fx.tga
+ map textures/effects/envmapbfg.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 .5 0 .1
+ tcmod scale .2 .2
+ tcMod scroll .3 .6
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+}
+
+models/weapons2/bfg/bfg_k
+{
+
+ {
+ map textures/effects/envmapbfg.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod rotate 30
+ tcmod scroll 1 1
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/weapons2/bfg/bfg_k.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/bfg/f_bfg
+{
+ sort additive
+ cull disable
+ {
+ clampmap models/weapons2/bfg/f_bfg.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod rotate 360
+ }
+ {
+ clampmap models/weapons2/bfg/f_bfg2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod rotate -129
+ //tcMod stretch sin .8 0.10 0 .7
+ }
+
+}
+
+//******************************************************//
+// models/weapons2/chainsaw subfolder //
+//******************************************************//
+
+//models/weapons2/chainsaw/f_chainsaw
+//{
+// sort nearest
+// cull back
+// {
+// map models/weapons2/chainsaw/f_chainsaw.tga
+// blendfunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+//
+// }
+//}
+
+//******************************************************//
+// models/weapons2/flamethrower subfolder //
+//******************************************************//
+
+models/weapons2/flamethrower/f_flamethrower
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/flamethrower/f_flamethrower.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/gauntlet subfolder //
+//******************************************************//
+
+models/weapons2/gauntlet/gauntlet2
+{
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ZERO
+ tcGen environment
+ //rgbGen lightingDiffuse
+ rgbGen identity
+ }
+ {
+ map models/weapons2/gauntlet/gauntlet2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/gauntlet/gauntlet3
+{
+
+ cull disable
+ sort additive
+ {
+ // map models/weapons2/gauntlet/gauntlet3.tga
+ AnimMap 10 models/weapons2/gauntlet/gauntlet3.tga models/weapons2/gauntlet/gauntlet4.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/grapple subfolder //
+//******************************************************//
+
+models/weapons2/grapple/f_grapple
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/grapple/f_grapple.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/grapple/grapple
+{
+ {
+ map models/weapons2/grapple/grapple.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll .1 .1
+ tcGen environment
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/weapons2/grapple/grapple.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/grapple/grapple_h
+{
+
+ cull disable
+
+ {
+ map models/weapons2/grapple/grapple_h.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/grapple/grapple_j
+{
+
+ cull disable
+
+ {
+ map models/weapons2/grapple/grapple_j.tga
+ blendFunc GL_ONE GL_ZERO
+ tcMod turb 0 .5 0 .7
+ tcMod scroll 1 -1
+ tcmod scale .5 .5
+ rgbGen identity
+ }
+ {
+ map textures/liquids/jello2.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale .7 .7
+ tcMod turb 0 .4 0 .3
+ tcMod scroll .7 -.4
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+
+}
+
+//******************************************************//
+// models/weapons2/grenadel subfolder //
+//******************************************************//
+
+models/weapons2/grenadel/f_grenadel
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/grenadel/f_grenadel.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/grenadel/ring
+{
+
+ {
+ map models/weapons2/grenadel/ring.tga
+ }
+
+ {
+ map textures/effects/envmapdim.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ //rgbGen identity
+ }
+}
+
+//******************************************************//
+// models/weapons2/lightning subfolder //
+//******************************************************//
+
+models/weapons2/lightning/ball
+{
+ deformVertexes autoSprite
+ {
+ map models/weapons2/lightning/ball.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 2 0 7
+ tcMod rotate 360
+ }
+ {
+ map models/weapons2/lightning/ball.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ tcMod rotate -200
+ }
+
+}
+
+models/weapons2/lightning/ball1
+{
+ sort additive
+ cull disable
+
+ {
+ animMap 15 models/weapons2/lightning/ball1.tga models/weapons2/lightning/ball2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/weapons2/lightning/button
+{
+ {
+ map models/weapons2/lightning/button.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 1 1 0 1
+ }
+
+}
+
+models/weapons2/lightning/crackle1
+{
+ sort additive
+ cull disable
+
+ {
+ animMap 15 models/weapons2/lightning/crackle1.tga models/weapons2/lightning/crackle2.tga models/weapons2/lightning/crackle3.tga models/weapons2/lightning/crackle4.tga models/weapons2/lightning/crackle5.tga models/weapons2/lightning/crackle6.tga models/weapons2/lightning/crackle7.tga models/weapons2/lightning/crackle8.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/weapons2/lightning/f_lightning
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/lightning/f_lightning.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/lightning/glass
+{
+ {
+ map models/weapons2/lightning/glass.tga
+ }
+ {
+ map textures/effects/envmapdim.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+}
+
+models/weapons2/lightning/trail
+{
+ {
+ map models/weapons2/lightning/trail.tga
+ tcMod scroll 3.1 1
+ rgbgen wave triangle 1 2 0 7
+ blendfunc GL_ONE GL_ONE
+ }
+ {
+ map models/weapons2/lightning/trail.tga
+ tcMod scroll -1.7 1
+ rgbgen wave triangle 1 1.1 0 5.1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/lightning/trail1
+{
+ sort additive
+ cull disable
+
+ {
+ animMap 15 models/weapons2/lightning/trail1.tga models/weapons2/lightning/trail2.tga models/weapons2/lightning/trail3.tga models/weapons2/lightning/trail4.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/weapons2/lightning/trail2
+{
+ {
+ map models/weapons2/lightning/trail2.tga
+ tcMod scroll 3.1 1
+ rgbgen wave triangle 1 2 0 7
+ blendfunc GL_ONE GL_ONE
+ }
+ {
+ map models/weapons2/lightning/trail2.tga
+ tcMod scroll -1.7 1
+ rgbgen wave triangle 1 1.1 0 5.1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/machinegun subfolder //
+//******************************************************//
+
+models/weapons2/machinegun/f_machinegun
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/machinegun/f_machinegun.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/plasma subfolder //
+//******************************************************//
+
+models/weapons2/plasma/f_plasma
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/plasma/f_plasma.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/plasma/plasma_glass
+{
+
+ {
+ map textures/effects/tinfxb.tga
+ tcGen environment
+ tcMod scroll .01 .02
+ blendfunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+}
+
+models/weapons2/plasma/plasma_glo
+{
+
+ {
+ map models/weapons2/plasma/plasma_glo.tga
+ tcmod rotate 33
+ tcMod scroll .7 1
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfxb.tga
+ tcGen environment
+ tcMod scroll .01 .02
+ blendfunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+}
+
+//******************************************************//
+// models/weapons2/railgun subfolder //
+//******************************************************//
+
+models/weapons2/railgun/f_railgun2
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/railgun/f_railgun2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen entity
+ }
+}
+
+models/weapons2/railgun/railgun2
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/railgun/railgun2.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen entity // identity
+ }
+}
+
+models/weapons2/railgun/railgun3
+{
+ {
+ map models/weapons2/railgun/railgun3.tga
+ rgbGen lightingDiffuse
+ }
+
+ {
+ map models/weapons2/railgun/railgun3.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen entity // identity
+ }
+}
+
+models/weapons2/railgun/railgun4
+{
+ {
+ map models/weapons2/railgun/railgun4.tga
+ tcMod scroll 0 1
+ rgbGen entity // identity
+ }
+
+}
+
+//******************************************************//
+// models/weapons2/rocketl subfolder //
+//******************************************************//
+
+models/weapons2/rocketl/f_rocketl
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/rocketl/f_rocketl.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+// this one can go away eventually
+models/weapons2/rocketl/rocketl14
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/rocketl/f_rocketl.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/shotgun subfolder //
+//******************************************************//
+
+models/weapons2/shotgun/f_shotgun
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/shotgun/f_shotgun.tga
+ blendfunc add
+ }
+}
+
+models/weapons2/shotgun/shotgun_laser
+{
+
+ {
+ map models/weapons2/shotgun/shotgun_laser.tga
+ blendfunc add
+ }
+}
+
+
+//**************************************************************//
+// //
+// MODELS/WEAPHITS //
+// //
+//**************************************************************//
+
+models/weaphits/bfg01
+{
+ deformVertexes autoSprite
+ cull none
+
+ {
+ clampmap models/weaphits/bfg01.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod rotate 333
+ rgbGen identity
+ }
+ {
+ clampmap models/weaphits/bfg01.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod rotate -100
+ rgbGen identity
+ }
+
+}
+
+models/weaphits/bfg02
+{
+ cull none
+ nomipmaps
+ {
+ map models/weaphits/bfg03.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 2 0
+ rgbGen identity
+ }
+ {
+ map models/weaphits/bfg02.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 3 0
+ tcMod turb 0 .25 0 1.6
+ rgbGen identity
+ }
+}
+
+models/weaphits/electric
+{
+ cull none
+
+ {
+ clampmap models/weaphits/electric.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .8 2 0 9
+ tcMod rotate 360
+ }
+ {
+ clampmap models/weaphits/electric.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 9.5
+ tcMod rotate -202
+ }
+
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/museum.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/museum.shader.svn-base
new file mode 100644
index 0000000..0d65b92
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/museum.shader.svn-base
@@ -0,0 +1,27 @@
+
+//////////////////////////////
+// Rainy Concrete floor //
+//////////////////////////////
+
+textures/base_floor/concfloor_rain
+{
+ tessSize 32
+ deformVertexes normal 1 15
+ {
+ map textures/base_floor/concfloor_rain.tga
+ rgbGen identity
+ }
+ {
+ map textures/liquids/pj_e3_reflection2b.tga
+ tcgen environment
+ rgbgen wave sin .3 0 0 0
+ tcmod scale 2 2
+ tcMod scroll .5 .5
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/organics.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/organics.shader.svn-base
new file mode 100644
index 0000000..c4b23cf
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/organics.shader.svn-base
@@ -0,0 +1,32 @@
+
+textures/organics/dirt_trans
+{
+ qer_editorimage textures/organics/dirt.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/organics/dirt.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/organics/wire02a_f
+{
+ q3map_surfacelight 200
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/organics/wire02a_f.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/sfx.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/sfx.shader.svn-base
new file mode 100644
index 0000000..5edf979
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/sfx.shader.svn-base
@@ -0,0 +1,3253 @@
+textures/sfx/beam
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ cull none
+
+ {
+ map textures/sfx/beam.tga
+ tcMod Scroll .3 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/beam_blue
+ {
+ qer_editorimage textures/sfx/beam_blue4.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ qer_trans .6
+ cull none
+ {
+ map textures/sfx/beam_blue4.tga
+ tcMod Scroll .3 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/beam_dusty2
+{
+ qer_editorimage textures/sfx/beam_1.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ cull none
+ {
+ map textures/sfx/beam_1.tga
+ blendFunc add
+ }
+}
+
+textures/sfx/beam_red
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ qer_trans .5
+ cull none
+ {
+ map textures/sfx/beam_red.tga
+ tcMod Scroll .3 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/beam_waterlight2
+{
+ qer_editorimage textures/sfx/beam_waterlight.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ q3map_surfacelight 50
+ qer_trans 0.6
+ cull none
+ {
+ map textures/sfx/beam_waterlight.tga
+ tcMod turb 0 0.015 0.5 0.07
+ tcMod Scroll .15 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/blackness
+{
+ surfaceparm nolightmap
+ surfaceparm noimpact
+ surfaceparm nomarks
+ {
+ map textures/sfx/blackness.tga
+ }
+}
+
+textures/sfx/blocks17final_pent
+{
+ qer_editorimage textures/sfx/blocks17final_pent.tga
+ {
+ map textures/sfx/blocks17final_pent.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/blocks17g_jumpad
+{
+ surfaceparm nodamage
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/blocks17g_jumpad.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/blocks18ccomputer
+{
+
+ surfaceparm nodamage
+ q3map_surfacelight 200
+
+
+ {
+ map textures/sfx/blocks18ccomputer.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+ {
+ animMap 2 textures/sfx/compscreen/letters1.tga textures/sfx/compscreen/letters2.tga textures/sfx/compscreen/letters3.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters4.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters5.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 2
+ }
+
+}
+
+textures/sfx/border11c
+{
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_trim/border11c_pulse1.tga
+ qer_editorimage textures/base_trim/border11c.tga
+
+ {
+ map textures/base_trim/border11c.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/base_trim/border11c_light.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin 1 .1 0 5
+ }
+
+
+ {
+ map textures/base_trim/border11c_pulse1b.tga
+ blendfunc gl_one gl_one
+ tcmod scale .035 1
+ tcmod scroll -0.65 0
+
+
+ }
+
+
+}
+
+textures/sfx/bounce_concrete
+{
+
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_concrete.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc filter
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc add
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc add
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_dirt
+{
+
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_dirt.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc filter
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc add
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc add
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_largeblock3
+{
+
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_largeblock3.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_largeblock3b
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_largeblock3b.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_metalbridge04
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_metalbridge04.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_xq1metalbig
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_xq1metalbig.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad01_block17
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 1000
+
+
+ {
+ map textures/sfx/bouncepad01_block17.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad01_metalbridge06b
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bouncepad01_metalbridge06b.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad01_xarch
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bouncepad01_xarch.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad01block18b
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 2000
+
+
+ {
+ map textures/sfx/bouncepad01block18b.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad1q1metal7_99
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 2000
+
+
+ {
+ map textures/sfx/bouncepad1q1metal7_99.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bugmirror
+{
+ qer_editorimage textures/sfx/mirrorkc.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+ {
+ map textures/sfx/mirrorkc.tga
+ blendFunc add
+ depthfunc equal
+ }
+}
+
+textures/sfx/bullseye
+{
+ cull disable
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ deformVertexes autosprite
+
+ {
+ clampmap textures/sfx/bullseye.tga
+ tcMod stretch sin .8 0.2 0 .2
+ tcmod rotate 200
+ blendFunc add
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ tcMod stretch sin .8 0.2 0 .3
+ tcmod rotate 70
+ alphaFunc GE128
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ tcMod stretch sin .8 0.2 0 .2
+ tcmod rotate 50
+ alphaFunc GE128
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ tcMod stretch sin .8 0.2 0 .1
+ tcmod rotate 30
+ alphaFunc GE128
+ rgbGen identity
+ }
+
+}
+
+textures/sfx/clangdark_bounce
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/clangdark_bounce.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/computer_blocks17
+{
+ surfaceparm nodamage
+ q3map_surfacelight 200
+
+
+ {
+ map textures/sfx/computer_blocks17.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+ {
+ animMap 2 textures/sfx/compscreen/letters1.tga textures/sfx/compscreen/letters2.tga textures/sfx/compscreen/letters3.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters4.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters5.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 2
+ }
+
+}
+
+textures/sfx/computerblocks15
+{
+ surfaceparm nodamage
+ q3map_surfacelight 200
+
+
+ {
+ map textures/sfx/computerblocks15.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+ {
+ animMap 2 textures/sfx/compscreen/letters1.tga textures/sfx/compscreen/letters2.tga textures/sfx/compscreen/letters3.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters4.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters5.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 2
+ }
+}
+
+textures/sfx/computerpurptileb
+{
+ surfaceparm nodamage
+ q3map_surfacelight 200
+
+
+ {
+ map textures/sfx/computerpurptileb.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ animMap 2 textures/sfx/compscreen/letters1.tga textures/sfx/compscreen/letters2.tga textures/sfx/compscreen/letters3.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters4.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters5.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 2
+ }
+
+}
+
+textures/sfx/console01
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ qer_trans .5
+ q3map_surfacelight 150
+ q3map_lightimage textures/sfx/console01.tga
+ cull none
+ {
+ clampmap textures/sfx/console01.tga
+
+ tcMod rotate 20
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ clampmap textures/sfx/console02.tga
+
+ tcMod rotate -200
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/sfx/console03
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_surfacelight 150
+ q3map_lightimage textures/sfx/console03.tga
+ cull none
+ {
+ clampmap textures/sfx/console01.tga
+
+ tcMod rotate 20
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ clampmap textures/sfx/console02.tga
+
+ tcMod rotate -400
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ clampmap textures/sfx/console03.tga
+
+ tcMod rotate 40
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/sfx/constfog
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ surfaceparm nodrop
+ q3map_surfacelight 100
+ fogparms ( .8 .8 .8 ) 100
+}
+
+textures/sfx/demonltblackfinal
+{
+ q3map_lightimage textures/sfx/demonltblackfinal_glow2.tga
+ q3map_surfacelight 100
+ surfaceparm nomarks
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/sfx/demonltblackfinal.tga
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+ {
+ map textures/sfx/demonltblackfinal_glow2.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin .9 .1 0 5
+ }
+
+}
+
+textures/sfx/diamond2cjumppad
+{
+ qer_editorimage textures/sfx/bouncepad01_diamond2cTGA.tga
+ //q3map_surfacelight 2000
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 500
+
+
+ {
+ map textures/sfx/bouncepad01_diamond2cTGA.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/dust_puppy2
+{
+
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+
+ {
+ map textures/sfx/dust_puppy2.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/sfx/fan
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ clampmap textures/sfx/fan.tga
+ tcMod rotate 256
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/sfx/fan3
+{
+ cull disable
+ surfaceparm alphashadow
+ sort 6
+ {
+ map textures/sfx/fan3.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/sfx/fan3bladeb
+{
+ cull disable
+ surfaceparm trans
+ surfaceparm nolightmap
+ sort 5
+ {
+ clampmap textures/sfx/fan3bladeb.tga
+ blendFunc blend
+ tcmod rotate 999
+ rgbGen identity
+ }
+
+}
+
+textures/sfx/fan_grate
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm metalsteps
+ cull none
+ nopicmip
+ {
+ map textures/sfx/fan_grate.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/sfx/fanfx
+{
+ qer_editorimage textures/sfx/fanfx.tga
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+ cull none
+ nopicmip
+
+ {
+ clampmap textures/sfx/fanfx.tga
+ tcMod rotate 256
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ depthWrite
+ }
+}
+
+textures/sfx/fishy
+{
+ tesssize 32
+ deformVertexes wave 10 sin 0 3 0 .5
+ cull disable
+ surfaceparm nolightmap
+ surfaceparm nomarks
+
+ {
+ clampmap textures/sfx/fishy.tga
+ alphaFunc GE128
+ tcMod stretch sin .8 0.10 0 .07
+ depthWrite
+
+ }
+
+
+}
+
+textures/sfx/flame1
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ surfaceparm trans
+ cull none
+ q3map_surfacelight 7500
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame1_hell
+{
+ qer_editorimage textures/sfx/flame1.tga
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ surfaceparm trans
+ cull none
+ q3map_surfacelight 600
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame1dark
+{
+ qer_editorimage textures/sfx/flame1.tga
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ surfaceparm trans
+ cull none
+ q3map_surfacelight 2000
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame1km
+{
+ qer_editorimage textures/sfx/flame1.tga
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ surfaceparm trans
+ cull none
+ q3map_surfacelight 4000
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame1side
+{
+ qer_editorimage textures/sfx/flame1side.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame2
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 5500
+ qer_editorimage textures/sfx/flame2.tga
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_blue
+{
+ qer_editorimage textures/sfx/b_flame1.tga
+ q3map_lightimage textures/sfx/b_flame7.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 1800
+ {
+ animMap 10 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga textures/sfx/b_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/b_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_blue_nolight
+{
+ qer_editorimage textures/sfx/b_flame1.tga
+ q3map_lightimage textures/sfx/b_flame7.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ {
+ animMap 10 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga textures/sfx/b_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/b_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_blue_pj
+{
+ qer_editorimage textures/sfx/b_flame1.tga
+ q3map_lightimage textures/sfx/b_flame7.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 2500
+
+ {
+ animMap 10 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga textures/sfx/b_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/b_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_dimmer
+{
+ qer_editorimage textures/sfx/flame1.tga
+ q3map_lightimage textures/sfx/flame6.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 1500
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_green_pj
+{
+ qer_editorimage textures/sfx/g_flame1.tga
+ q3map_lightimage textures/sfx/g_flame6.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 2500
+ {
+ animMap 10 textures/sfx/g_flame1.tga textures/sfx/g_flame2.tga textures/sfx/g_flame3.tga textures/sfx/g_flame4.tga textures/sfx/g_flame5.tga textures/sfx/g_flame6.tga textures/sfx/g_flame7.tga textures/sfx/g_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+ }
+ {
+ animMap 10 textures/sfx/g_flame2.tga textures/sfx/g_flame3.tga textures/sfx/g_flame4.tga textures/sfx/g_flame5.tga textures/sfx/g_flame6.tga textures/sfx/g_flame7.tga textures/sfx/g_flame8.tga textures/sfx/g_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+ {
+ map textures/sfx/g_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+}
+
+textures/sfx/flameanim_red
+{
+ qer_editorimage textures/sfx/r_flame1.tga
+ q3map_lightimage textures/sfx/r_flame3.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 1800
+ {
+ animMap 10 textures/sfx/r_flame1.tga textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga textures/sfx/r_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/r_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_red_nolight
+{
+ qer_editorimage textures/sfx/r_flame1.tga
+ q3map_lightimage textures/sfx/r_flame3.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 10 textures/sfx/r_flame1.tga textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga textures/sfx/r_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/r_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_red_pj
+{
+ qer_editorimage textures/sfx/r_flame1.tga
+ q3map_lightimage textures/sfx/r_flame3.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 2500
+ {
+ animMap 10 textures/sfx/r_flame1.tga textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga textures/sfx/r_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/r_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/fog_intel
+{
+ qer_editorimage textures/sfx/fog_yel.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .75 .38 0 ) 800
+}
+
+textures/sfx/fog_mkcdm4
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .5 0 0 ) 96
+}
+
+textures/sfx/fog_pjdm1
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .733 .737 .620 ) 300
+
+}
+
+textures/sfx/fog_q3dm10
+{
+ qer_editorimage textures/sfx/fog_yel.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( 0.75 0.38 0 ) 128
+}
+
+textures/sfx/fog_timctf1
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .729 .729 .780 ) 464
+
+}
+
+textures/sfx/fog_timdm1
+{
+ qer_editorimage textures/sfx/fog_yel.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .615 .309 0 ) 616
+}
+
+textures/sfx/fog_timdm2
+{
+ qer_editorimage textures/sfx/fog_yel.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .615 .309 0 ) 356
+}
+
+textures/sfx/fog_timdm8
+{
+ qer_editorimage textures/sfx/fog_green.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .211 .231 .094 ) 250
+}
+
+textures/sfx/healthfloor
+{
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 130
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 80
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ clampmap textures/sfx/healthfloor.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/sfx/hellfog
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 300
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/hellfog_1k
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 200
+ fogparms ( .5 .12 .1 ) 300
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ }
+}
+
+textures/sfx/hellfog_mini_dm10
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 50
+ fogparms ( .5 .12 .1 ) 16
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/hellfog_pj_dm10
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 50
+ fogparms ( .5 .12 .1 ) 392
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/hellfog_tim_dm14
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 50
+ fogparms ( .55 .11 .1 ) 128
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+
+}
+
+textures/sfx/hellfogdense
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 128
+
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/jacobs_x
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 300
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map textures/sfx/jacobs_x.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 2 0 7
+ //tcMod rotate 103
+ }
+}
+
+textures/sfx/kc_hellfog_1k
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 300
+ q3map_lightsubdivide 32
+ fogparms ( .5 .12 .1 ) 225
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/kenelectric
+{
+ {
+ map textures/sfx/kenelectric.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 7 7
+ tcMod scroll 5 -5
+ tcmod rotate 360
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/sfx/largerblock3b3_pent
+{
+ qer_editorimage textures/sfx/largerblock3b3_pent.tga
+ {
+ map textures/sfx/largerblock3b3_pent.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/largerblock3b3x128_pent
+{
+ q3map_lightimage textures/sfx/pentagramfloor_blue3glowtest.tga
+ q3map_surfacelight 100
+ surfaceparm nomarks
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/sfx/largerblock3b3x128_pent.tga
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+ {
+ map textures/sfx/pentagramfloor_blue3glowtest.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin .9 .1 0 5
+ }
+
+}
+
+textures/sfx/largerblock3b3x128_pentred
+{
+ qer_editorimage textures/sfx/largerblock3b3x128_pent.tga
+ q3map_lightimage textures/gothic_floor/pent_glow.tga
+ q3map_surfacelight 500
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/sfx/largerblock3b3x128_pent.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 0.5
+ }
+}
+
+textures/sfx/launchpad_blocks17
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/launchpad_blocks17.tga
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/launchpad_dot.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 0 1
+ }
+
+ {
+ animmap 4 textures/sfx/launchpad_arrow.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga
+ blendfunc gl_one gl_one
+ tcmod scroll 0 2
+ }
+
+}
+
+textures/sfx/launchpad_blocks18d
+{
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/launchpad_blocks18d.tga
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/launchpad_dot.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 0 1
+ }
+
+ {
+ animmap 4 textures/sfx/launchpad_arrow.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga
+ blendfunc gl_one gl_one
+ tcmod scroll 0 2
+ }
+
+}
+
+textures/sfx/launchpad_diamond
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/launchpad_diamond.tga
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/launchpad_dot.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 0 1
+ }
+
+ {
+ animmap 4 textures/sfx/launchpad_arrow.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga
+ blendfunc gl_one gl_one
+ tcmod scroll 0 2
+ }
+
+}
+
+textures/sfx/launchpad_metalbridge04d
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/launchpad_metalbridge04d.tga
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/launchpad_dot.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 0 1
+ }
+
+ {
+ animmap 4 textures/sfx/launchpad_arrow.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga
+ blendfunc gl_one gl_one
+ tcmod scroll 0 2
+ }
+
+}
+
+textures/sfx/lavabeam
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ cull none
+ nomipmaps
+ {
+ map textures/sfx/lavabeam.tga
+ tcMod Scroll 999 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/lightmap
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nodrop
+ surfaceparm fog
+ fogparms ( .7 .1 .1 ) 64
+
+
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_one
+ tcmod scale 1 .01
+ tcMod scroll 1 -2
+ }
+
+
+}
+
+textures/sfx/metalbridge06_bounce
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/metalbridge06_bounce.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/metaltech12final_bounce
+{
+
+ //q3map_surfacelight 2000
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/metaltech12final_bounce.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/mkc_bigflame
+{
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ qer_editorimage textures/sfx/flame1.tga
+ q3map_surfacelight 500
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/mkc_fog_ctfblue
+{
+ qer_editorimage textures/sfx/fog_blue.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ fogparms ( 0.2 0.2 0.25 ) 320
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+}
+
+textures/sfx/mkc_fog_ctfblue2
+{
+ qer_editorimage textures/sfx/fog_blue.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ fogparms ( 0.1 0.1 0.3 ) 320
+
+ q3map_surfacelight 40
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+}
+
+textures/sfx/mkc_fog_ctfred
+{
+ qer_editorimage textures/sfx/fog_purp.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ fogparms ( 0.3 0.2 0.2 ) 320
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+}
+
+textures/sfx/mkc_fog_tdm3
+{
+ qer_editorimage textures/sfx/fog_purp.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ fogparms ( 0.3 0.2 0.2 ) 320
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+}
+
+textures/sfx/omm
+{
+
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+
+ {
+ map textures/sfx/omm.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/sfx/pentagramfloor_red3test
+{
+ {
+ map textures/sfx/pentagramfloor_red3test.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red3glowtest.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/pentfloor_diamond2c
+{
+ qer_editorimage textures/sfx/pentfloor_diamond2c.tga
+ {
+ map textures/sfx/pentfloor_diamond2c.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/pj_a1_fog1
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ surfaceparm nodrop
+ q3map_surfacelight 30
+ fogparms ( .5 .5 .5 ) 512
+}
+
+textures/sfx/portal2_sfx
+{
+ qer_editorimage textures/sfx/portalfog.tga
+ portal
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .5
+
+
+ {
+ map textures/sfx/portal_sfx3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+
+
+ {
+ map textures/sfx/portal_sfx1.tga
+ blendfunc gl_dst_color gl_zero
+ tcMod rotate 360
+ }
+
+ {
+ map textures/sfx/portal_sfx.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 .5 .2 .5
+ }
+
+ {
+ map textures/sfx/portalfog.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ //alphagen portal 128
+ rgbGen identityLighting
+ tcmod rotate .1 //.1
+ tcmod scroll .01 .03
+ }
+}
+
+textures/sfx/portal_sfx
+{
+ portal
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .5
+
+
+ {
+ map textures/sfx/portal_sfx3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+
+
+ {
+ map textures/sfx/portal_sfx1.tga
+ blendfunc gl_dst_color gl_zero
+ tcMod rotate 360
+ }
+
+ {
+ map textures/sfx/portal_sfx.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 .5 .2 .5
+ }
+
+ {
+ map textures/sfx/portalfog.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ alphagen portal 256
+ rgbGen identityLighting
+ tcmod rotate .1 //.1
+ tcmod scroll .01 .03
+ }
+}
+
+textures/sfx/portal_sfx_ring
+{
+ deformVertexes wave 100 sin 0 2 0 .5
+ cull none
+
+ {
+ map textures/sfx/portal_sfx_ring_blue1.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ }
+
+
+ {
+ map textures/sfx/portal_sfx_ring_electric.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 .2 .5
+ tcmod scroll 0 .5
+
+ }
+
+ {
+ map textures/sfx/portal_sfx1.tga
+ blendfunc gl_dst_color gl_zero
+ tcMod rotate 360
+ }
+
+ {
+ map textures/sfx/portal_sfx_ring.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 .5 .2 .5
+ }
+
+}
+
+textures/sfx/proto_hellfog
+{
+qer_editorimage textures/sfx/fog_red.tga
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+
+fogparms ( .275 .012 0 ) 500
+}
+
+textures/sfx/proto_zzztblu3
+{
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ cull twosided
+ {
+ map textures/sfx/proto_zzztblu3.tga
+ tcGen environment
+ tcMod turb 0 0.25 0 0.5
+ tcmod scroll 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/sfx/pureblack
+{
+ qer_editorimage textures/skies/blacksky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ {
+ map textures/skies/blacksky.tga
+ }
+}
+
+textures/sfx/q3dm14fog
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 256
+
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/q3dm9fog
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 256
+
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/q3tourney3fog
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 384
+
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/rain
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ qer_trans .5
+ deformVertexes move 3 1 0 sin 0 5 0 0.2
+ deformVertexes move .6 3.3 0 sin 0 5 0 0.4
+ deformVertexes wave 30 sin 0 10 0 .2
+ cull none
+
+ {
+ map textures/sfx/rain.tga
+ tcMod Scroll .5 -8
+ tcMod turb .1 .25 0 -.1
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ map textures/sfx/rain.tga
+ tcMod Scroll .01 -6.3
+
+ blendFunc GL_ONE GL_ONE
+ }
+
+
+}
+
+textures/sfx/smallerblock3b3dim_pent
+{
+ qer_editorimage textures/sfx/smallerblock3b3dim_pent.tga
+ {
+ map textures/sfx/smallerblock3b3dim_pent.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/spawn_floor
+{
+
+ {
+ map textures/sfx/firegorre2.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 130
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 80
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/sfx/spawn_floor.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/sfx/spawn_floord2c
+{
+
+ {
+ map textures/sfx/proto_zzztblu.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 130
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 80
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/sfx/spawn_floord2c.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/sfx/teslacoil
+{
+ cull none
+ q3map_lightimage textures/sfx/tesla1.tga
+ qer_editorimage textures/sfx/tesla1.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ tcgen environment
+ blendfunc filter
+ }
+
+ {
+ map textures/sfx/tesla1.tga
+ blendfunc add
+ rgbgen wave sawtooth 0 1 0 5
+ tcmod scale 1 .5
+ tcmod turb 0 .1 0 1
+ tcMod scroll -1 -1
+ }
+
+
+
+ {
+ map textures/sfx/electricslime.tga
+ blendfunc add
+ rgbgen wave sin 0 .5 0 1
+ tcmod scale .5 .5
+ tcmod turb 0 .1 0 1
+ tcmod rotate 180
+ tcmod scroll -1 -1
+ }
+
+ {
+ map textures/sfx/cabletest2.tga
+ blendfunc blend
+ }
+
+
+}
+
+textures/sfx/teslacoil3
+{
+ cull none
+ q3map_lightimage textures/sfx/tesla1b.tga
+ q3map_surfacelight 100
+ qer_editorimage textures/sfx/cabletest2.tga
+ surfaceparm nolightmap
+
+
+
+ {
+ map textures/sfx/cabletest2.tga
+ blendfunc blend
+ }
+
+
+ {
+ map textures/sfx/electricslime2.tga
+ blendfunc add
+ rgbGen wave square .25 .25 0 2.5
+ tcmod scale 1 1
+ tcMod scroll 1 1
+ }
+
+
+
+ {
+ map textures/sfx/tesla1b.tga
+ blendfunc add
+ rgbgen wave square 0 1 0 3
+ tcmod scale 1 1
+ tcMod scroll -2 1
+ }
+
+}
+
+textures/sfx/testconstantfog
+{
+ qer_editorimage textures/sfx/fog_green.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ surfaceparm nodrop
+ q3map_surfacelight 100
+ fogparms ( 0 1 0 ) 300
+}
+
+textures/sfx/x_conduit
+{
+ q3map_lightimage textures/sfx/x_conduit.tga
+ surfaceparm nomarks
+ q3map_surfacelight 100
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/sfx/x_conduit.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ { animMap 10 textures/sfx/x_conduit2.tga textures/sfx/x_conduit3.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+ }
+ {
+ map textures/sfx/x_conduit2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 1
+ rgbGen wave sin .5 0.5 0 7
+ }
+ {
+ map textures/sfx/x_conduit3.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 1
+ rgbgen wave triangle .2 1 0 9
+ }
+}
+
+textures/sfx/xblackfog
+{
+qer_editorimage textures/sfx/fog_black.tga
+qer_nocarve
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+fogparms ( 0 0 0 ) 128
+
+}
+
+textures/sfx/xbluefog
+{
+ qer_editorimage textures/sfx/fog_blue.tga
+ q3map_surfacelight 300
+ q3map_lightsubdivide 64
+ q3map_lightimage textures/sfx/xbluelightimage.tga
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ qer_nocarve
+ fogparms ( 0.3 0.3 0.9 ) 128
+
+}
+
+textures/sfx/xbluefogx128
+{
+ qer_editorimage textures/sfx/fog_blue.tga
+ q3map_surfacelight 300
+ q3map_lightsubdivide 128
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ qer_nocarve
+ fogparms ( 0.3 0.3 0.9 ) 128
+
+}
+
+textures/sfx/xdensegreyfog
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ qer_nocarve
+
+ fogparms ( 0.7 0.7 0.7 ) 1700
+}
+
+textures/sfx/xfinalfog
+{
+qer_editorimage textures/sfx/fog_grey.tga
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+qer_nocarve
+fogparms ( 0.7 0.7 0.7 ) 3000
+
+}
+
+textures/sfx/xfinalfoginvert
+{
+qer_editorimage textures/sfx/fog_black.tga
+qer_nocarve
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+qer_nocarve
+fogparms ( 0 0 0 ) 256
+
+}
+
+textures/sfx/xflame1
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 7500
+ qer_editorimage textures/sfx/flame1.tga
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflame1side
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ qer_editorimage textures/sfx/flame1.tga
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflame2
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 5500
+ qer_editorimage textures/sfx/flame1.tga
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflame2_1800
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 1800
+ qer_editorimage textures/sfx/flame1.tga
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflame2_2250
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 2250
+ qer_editorimage textures/sfx/flame1.tga
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflamebright
+{
+ deformVertexes autoSprite2
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 3000
+ qer_editorimage textures/sfx/flame1.tga
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+}
+
+textures/sfx/xian_dm3padwall
+ {
+ q3map_surfacelight 100
+ q3map_lightimage textures/sfx/xian_dm3padwallglow.tga
+ qer_editorimage textures/sfx/xian_dm3padwall.tga
+
+ {
+ map textures/sfx/xian_dm3padwall.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+ {
+ map textures/sfx/xian_dm3padwallglow.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin 0 1 0 .5
+ tcmod scale 1 .05
+ tcmod scroll 0 1
+ }
+
+}
+
+textures/sfx/xlightgreyfog
+{
+qer_editorimage textures/sfx/fog_grey.tga
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+qer_nocarve
+fogparms ( 0.7 0.7 0.7 ) 1400
+
+}
+
+textures/sfx/xmetalfloor_wall_14b
+{
+ qer_editorimage textures/sfx/metalfloor_wall_14b.tga
+ q3map_lightimage textures/sfx/metalfloor_wall_14bglow2.tga
+ q3map_surfacelight 50
+ {
+ map textures/sfx/metalfloor_wall_14b.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/metalfloor_wall_14bglow2.tga
+ blendfunc gl_one gl_one
+ }
+}
+
+textures/sfx/xmetalfloor_wall_5b
+{
+ qer_editorimage textures/sfx/metalfloor_wall_5b.tga
+
+ {
+ map textures/sfx/metalfloor_wall_7b.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/metalfloor_wall_5bglowblu.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin .5 .2 0 .1
+ }
+}
+
+textures/sfx/xmetalfloor_wall_9b
+{
+ qer_editorimage textures/sfx/metalfloor_wall_9b.tga
+
+ {
+ map textures/sfx/metalfloor_wall_9b.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/metalfloor_wall_9bglow.tga
+ blendfunc gl_one gl_one
+ }
+}
+
+textures/sfx/xq1metalbig_jumppad
+{
+ qer_editorimage textures/gothic_floor/q1metal7_98d_256x256.tga
+ surfaceparm nodamage
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/q1metal7_98d_256x256.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ clampmap textures/sfx/surface6jumppad.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.75 0.25 0 .2
+ tcMod stretch sin 0.80 0.20 0 1
+ }
+}
+
+textures/sfx/xredfog
+{
+ q3map_lightimage textures/sfx/xredlightimage.tga
+ qer_editorimage textures/sfx/fog_red.tga
+ q3map_surfacelight 300
+ q3map_lightsubdivide 64
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ qer_nocarve
+ fogparms ( 0.9 0.3 0.3 ) 128
+
+}
+
+textures/sfx/zap_scroll
+{
+ q3map_surfacelight 300
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map textures/sfx/zap_scroll.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .8 2 0 7
+ tcMod scroll 0 1
+ }
+ {
+ Map textures/sfx/zap_scroll.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 5
+ tcMod scale -1 1
+ tcMod scroll 0 1
+ }
+ {
+ Map textures/sfx/zap_scroll2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 6.3
+ tcMod scale -1 1
+ tcMod scroll 2 1
+ }
+ {
+ Map textures/sfx/zap_scroll2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 7.7
+ tcMod scroll -1.3 1
+ }
+}
+
+textures/sfx/zap_scroll1000
+{
+ q3map_surfacelight 1000
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_lightimage textures/sfx/zap_scroll.tga
+ qer_editorimage textures/sfx/zap_scroll2.tga
+ cull none
+
+ {
+ map textures/sfx/zap_scroll.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .8 2 0 7
+ tcMod scroll 0 1
+ }
+ {
+ map textures/sfx/zap_scroll.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 5
+ tcMod scale -1 1
+ tcMod scroll 0 1
+ }
+ {
+ map textures/sfx/zap_scroll2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 6.3
+ tcMod scale -1 1
+ tcMod scroll 2 1
+ }
+ {
+ map textures/sfx/zap_scroll2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 7.7
+ tcMod scroll -1.3 1
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/skies.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/skies.shader.svn-base
new file mode 100644
index 0000000..27c2797
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/skies.shader.svn-base
@@ -0,0 +1,1073 @@
+textures/skies/blacksky
+{
+ qer_editorimage textures/skies/blacksky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 25
+ q3map_lightsubdivide 512
+ q3map_sun 1 1 1 32 90 90
+ {
+ map gfx/colors/black.tga
+ }
+}
+
+textures/skies/hellsky
+{
+ qer_editorimage textures/skies/dimclouds.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun 4 3 3 65 290 75
+ q3map_surfacelight 50
+ skyparms - 512 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.05 0
+ tcMod scale 2 2
+ depthWrite
+ }
+}
+
+textures/skies/hellsky2
+{
+ qer_editorimage textures/skies/dimclouds.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun .9 .9 1 70 65 78
+ q3map_surfacelight 60
+ skyparms - 512 -
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.02 0
+ tcMod scale 1 1
+ depthWrite
+ }
+ {
+ map textures/skies/dimclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.02 0.01
+ tcMod scale 3 3
+ }
+
+}
+
+textures/skies/hellsky2bright
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun 1 1 1 100 220 50
+ q3map_surfacelight 120
+
+ qer_editorimage textures/skies/inteldimredclouds.tga
+
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/kc_dm10sky
+{
+ q3map_lightimage textures/skies/pjbasesky.tga
+ q3map_lightsubdivide 512
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun .5 .6 .8 90 225 55
+ q3map_surfacelight 150
+
+ qer_editorimage textures/skies/bluetopclouds.tga
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+
+
+}
+
+textures/skies/kcbasesky_arena1_sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 256
+ q3map_sun 0.266383 0.274632 0.358662 150 60 85
+ q3map_surfacelight 500
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.01 0.01
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.01
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/killsky
+{
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun 3 2 2 70 315 65
+ q3map_surfacelight 75
+ skyparms - 512 -
+
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/mkc_sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun 0.266383 0.274632 0.358662 150 60 80
+ q3map_surfacelight 700
+
+ skyparms half 256 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.01 0.01
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.01
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/nightsky_xian_dm1
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 300
+ q3map_sun 1 1 1 100 -41 58
+
+ qer_editorimage textures/skies/xnight2_up.tga
+
+
+ skyparms env/xnight2 - -
+}
+
+textures/skies/nightsky_xian_dm15
+{
+ qer_editorimage textures/skies/xnight2_up.tga
+ surfaceparm nolightmap
+ surfaceparm noimpact
+
+ q3map_surfacelight 900
+ q3map_sun 1 1 1 100 -58 58
+ skyparms env/xnight2 - -
+
+
+}
+
+textures/skies/nightsky_xian_dm4
+{
+ qer_editorimage textures/skies/xnight2_up.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun 1 1 1 80 -41 58
+ q3map_surfacelight 50
+ skyparms env/xnight2 - -
+}
+
+textures/skies/pj_arena2sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+ q3map_sun 0.266383 0.274632 0.358662 100 350 55
+ q3map_surfacelight 100
+
+ skyparms full 200 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.015 0.016
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.012
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/pj_arena4_sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+ q3map_sun 0.266383 0.274632 0.358662 200 165 45
+ q3map_surfacelight 100
+
+ skyparms full 128 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.015 0.016
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.012
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/pj_ctf1sky
+{
+ qer_editorimage textures/skies/pjbasesky
+
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+ q3map_sun 0.266383 0.274632 0.358662 100 350 75
+ q3map_surfacelight 150
+
+ skyparms full 200 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.015 0.016
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.012
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/pj_ctf2_sky
+{
+ qer_editorimage textures/skies/bluetopclouds.tga
+ q3map_lightimage textures/skies/topclouds.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+ q3map_sun 0.266383 0.274632 0.358662 250 90 45
+ q3map_surfacelight 100
+
+ skyparms full 128 -
+
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scroll 0.015 0.016
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.012
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/pj_dm10sky
+{
+ q3map_lightimage textures/common/white.tga
+ q3map_lightsubdivide 512
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun .5 .6 .8 90 225 55
+ q3map_surfacelight 150
+
+ qer_editorimage textures/skies/bluetopclouds.tga
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+
+}
+
+textures/skies/pj_dm9sky
+{
+ qer_editorimage textures/skies/bluetopclouds.tga
+ q3map_lightimage textures/skies/topclouds.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+
+ q3map_sun .5 .6 .8 140 165 60
+ q3map_surfacelight 80
+
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/pjbasesky_arena1_sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 256
+ q3map_sun 0.266383 0.274632 0.358662 150 60 85
+ q3map_surfacelight 100
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.01 0.01
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.01
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/q3dm0
+
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun .5 .6 .8 60 80 75
+ q3map_surfacelight 80
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/skybox
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/space1_bk.tga
+ q3map_sun 1 1 1 100 -58 58
+ q3map_surfacelight 400
+
+ skyparms env/space1 - -
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/stars_arena7
+{
+ qer_editorimage textures/skies/black_up.tga
+
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 10
+ q3map_sun .6 .6 .6 30 35 78
+
+ skyparms env/black - -
+}
+
+textures/skies/tim_dm14
+{
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_sun 3 2 2 90 314 60
+ q3map_surfacelight 80
+ skyparms - 512 -
+
+ //cloudparms 512 full
+ //lightning
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/tim_dm14red
+{
+ q3map_lightimage textures/skies/stars_red.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_sun .5 .37 .19 70 314 60
+
+ q3map_surfacelight 80
+ skyparms - 512 -
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/tim_dm3_red
+{
+ q3map_lightimage textures/skies/stars_red.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun .5 .37 .19 70 30 70
+
+ q3map_surfacelight 80
+ skyparms - 512 -
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/tim_hell
+{
+ q3map_lightimage textures/skies/stars_red.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun 1 .77 .77 80 315 70
+ q3map_surfacelight 130
+ skyparms - 384 -
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/tim_km2
+{
+ q3map_lightimage textures/skies/stars_red.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun .5 .37 .19 90 315 40
+ q3map_surfacelight 80
+ skyparms - 512 -
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/toxicsky
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 80
+ q3map_sun 1 1 0.5 100 30 60
+
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/toxicskydim
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 100
+ q3map_sun 1 1 0.5 80 30 70
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/toxicskytim_blue
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun .5 .6 .8 100 70 60
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_ctf1
+//used in tim_ctf1
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun 1 1 0.5 90 70 40
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm2
+
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun .5 .6 .8 100 190 75
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm3
+
+{
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 80
+ q3map_sun 1 1 0.5 100 30 60
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/toxicskytim_dm4
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun 1 1 0.5 90 120 75
+ q3map_surfacelight 80
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm5
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun 1 .78 .48 90 225 55
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm7
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun .5 .6 .8 100 260 50
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm8
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun 1 1 0.5 85 220 40
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm9
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun .980 .835 .3 100 25 65
+ q3map_surfacelight 80
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/xblacksky
+{
+ qer_editorimage textures/skies/blacksky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 300
+ q3map_lightsubdivide 512
+ q3map_sun 1 1 1 32 45 90
+ {
+ map gfx/colors/black.tga
+ }
+}
+
+textures/skies/xblacksky_dm7
+{
+ qer_editorimage textures/skies/blacksky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ {
+ map gfx/colors/black.tga
+ }
+}
+
+textures/skies/xtoxicsky_ctf
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 500
+ q3map_sun 1 1 0.5 150 30 60
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicsky_dm14
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 800
+ q3map_sun 1 1 0.85 100 90 90
+
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicsky_dm3
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 400
+ q3map_sun 1 1 0.5 150 30 60
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicsky_dm9
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 400
+ q3map_sun 1 1 0.5 150 30 60
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicsky_q3ctf3
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ q3map_surfacelight 500
+ q3map_sun 1 1 0.5 150 30 60
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/xtoxicsky_tourney
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 495
+ q3map_sun 1 1 0.5 150 75 60
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicskytim_q3dm5
+
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 400
+ q3map_sun .5 .6 .8 150 30 60
+
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/skin.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/skin.shader.svn-base
new file mode 100644
index 0000000..f7e248d
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/skin.shader.svn-base
@@ -0,0 +1,161 @@
+
+textures/skin/chapthroat2
+{
+ qer_editorimage textures/skin/chapthroat2.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/chapthroat2.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/chapthroatooz
+{
+
+ surfaceparm nonsolid
+ {
+ map textures/liquids/proto_gruel3.tga
+ tcMod scroll 0 .2
+ tcMod scale 2 2
+ rgbGen vertex
+ }
+ {
+ map textures/skin/chapthroatooz.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/skin/nibbles
+{
+ deformVertexes wave 10 sin 4 3 0 0.3
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/skin/nibbles.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/skin/skin1_trans
+{
+ qer_editorimage textures/skin/skin1.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/skin1.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/skin5_trans
+{
+ qer_editorimage textures/skin/skin5.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/skin5.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/skin6_trans
+{
+ qer_editorimage textures/skin/skin6.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/skin6.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/skin6move
+{
+ tessSize 128
+ deformVertexes wave 100 sin 4 3 0 0.3
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/skin/skin6move.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/skin/surface8_trans
+{
+ qer_editorimage textures/skin/surface8.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/surface8.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/tongue_trans
+{
+ qer_editorimage textures/skin/tongue.tga
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/tongue.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/terrademoQ3.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/terrademoQ3.shader.svn-base
new file mode 100644
index 0000000..0e185b0
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/terrademoQ3.shader.svn-base
@@ -0,0 +1,623 @@
+// if you are using the tree models in any of your maps, make sure you redistribute those shaders
+
+models/mapobjects/tree/branch
+{
+ cull disable
+ deformVertexes wave 100 sin 0 .1 0 .2
+ surfaceparm trans
+ {
+ map models/mapobjects/tree/branch.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/tree2/branch2
+{
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+ cull none
+ sort 10
+ {
+ clampmap models/mapobjects/tree2/branch2.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+// following shaders are for terrain maps
+
+textures/common/terrain
+{
+ surfaceparm nodraw
+ surfaceparm nomarks
+ surfaceparm nolightmap
+}
+
+textures/common/terrain2
+{
+ qer_editorimage textures/common/terrain.tga
+ surfaceparm dust
+ surfaceparm nodraw
+ surfaceparm nomarks
+ surfaceparm nolightmap
+}
+
+// *************************************************
+// *
+// * Vertex Lighting Replacement Shaders
+// *
+// *************************************************
+
+textures/terrain/vxmpterra2
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+
+ {
+
+ map textures/stone/pjrock10b_2.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+
+}
+
+
+textures/terrain/vxmpterra1
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+
+ {
+
+ map textures/stone/pjrock12c.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+
+}
+
+
+// *********************************************************
+
+// *************************************************
+// *
+// * MPTerra2 terrain shaders (PaulJ)
+// *
+// *************************************************
+
+
+textures/terrain/mpterra2_0
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+
+ map textures/stone/pjrock9b_2.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+
+ {
+
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+
+ }
+
+
+}
+
+textures/terrain/mpterra2_1
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+
+ map textures/stone/pjrock12b_2.tga
+ rgbGen vertex
+ tcmod scale 0.1 0.1
+
+ }
+
+ {
+
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+
+ }
+
+
+}
+
+textures/terrain/mpterra2_2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+
+ map textures/stone/pjrock10b_2.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ }
+
+ {
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+
+ }
+
+}
+
+textures/terrain/mpterra2_0to1
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+ map textures/stone/pjrock9b_2.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+
+ {
+ map textures/stone/pjrock12b_2.tga
+ tcmod scale 0.1 0.1
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+ {
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+ }
+
+
+}
+
+textures/terrain/mpterra2_0to2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock9b_2.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/stone/pjrock10b_2.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.05 0.05
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+ {
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+
+ }
+
+
+}
+
+textures/terrain/mpterra2_1to2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+ map textures/stone/pjrock12b_2.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.1 0.1
+ }
+
+ {
+ map textures/stone/pjrock10b_2.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+ {
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+ }
+
+
+}
+
+//////////////////////////////////////////////
+// //
+// x_mpterra //
+// //
+//////////////////////////////////////////////
+
+textures/terrain/vxmpterra3
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px02.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+
+}
+
+
+
+textures/proto2/xproto_0to1
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+
+ {
+ map textures/proto2/px01.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+
+ }
+
+ {
+ map textures/proto2/px02.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale .1 .1
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+
+}
+
+textures/proto2/xproto_1to2
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px02.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ alphaGen vertex
+ }
+
+ {
+ map textures/proto2/px03.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale .1 .1
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+
+}
+
+textures/proto2/xproto_0to2
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+
+ {
+ map textures/proto2/px01.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+ {
+ map textures/proto2/px03.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale .1 .1
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+
+}
+
+
+
+textures/proto2/xproto_0
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px01.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+}
+
+textures/proto2/xproto_1
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px02.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+}
+
+textures/proto2/xproto_2
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px03.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+
+}
+
+
+
+// *************************************************
+// *
+// * MPTerra1 terrain shaders (Tim)
+// *
+// *************************************************
+
+textures/terrain/mpterra1_0
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock9c.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_1
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock12c.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock10c.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_0to1
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock9c.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/stone/pjrock12c.tga
+ tcmod scale 0.125 0.125
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_0to2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock9c.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/stone/pjrock10c.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_1to2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock12c.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/stone/pjrock10c.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+}
+
+// *********************************************************
+// MP Terra 3 Textures (Xian)
+// *********************************************************
+
+textures/proto2/x_sandy01
+{
+ qer_editorimage textures/proto2/xsandy01.tga
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xsandy01.tga
+ tcmod scale .8 .8
+ rgbGen vertex
+ }
+}
+
+textures/proto2/x_rocky01
+{
+ qer_editorimage textures/proto2/xrocky01.tga
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xrocky01.tga
+ tcmod scale .8 .8
+ rgbGen vertex
+ }
+}
+
+
+textures/proto2/tproto_0to1
+{
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xsandy01.tga
+ tcmod scale .3 .3
+ rgbGen vertex
+ alphaGen vertex
+ }
+ {
+ map textures/proto2/xrocky01.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale .1 .1
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+
+textures/proto2/tproto_0
+{
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xsandy01.tga
+ tcmod scale .2 .2
+ rgbGen vertex
+ }
+}
+
+textures/proto2/tproto_1
+{
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xrocky01.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/test.shader.svn-base b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/test.shader.svn-base
new file mode 100644
index 0000000..8b40d0b
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/.svn/text-base/test.shader.svn-base
@@ -0,0 +1,943 @@
+//**********************************************************************//
+// test.shader sorted and updated on Phase 2 //
+// by Eutectic - 12 May 2000 //
+// This file is irrelevant for Q3Radiant and the shaders //
+// in this file must NOT be used to make new maps. //
+// It was updated for the sake of completeness: //
+// some shaders that belonged in other files were moved to those //
+// shader files //
+// //
+// SHADERS THAT DIDN'T BELONG HERE AND MOVED TO PROPER FILE: 8 //
+// textures/base/bluemet1 //
+// textures/common/transwater //
+// textures/gothic_trim/hellodolly //
+// textures/sfx/kenelectric //
+// textures/sfx/mkc_fog_dm1 //
+// textures/sfx/mkc_fog_dm1a //
+// textures/sfx/mkc_fog_dm4 //
+// textures/skies/mkc_sky //
+// SHADERS THAT BELONGED HERE BUT WERE IN ANOTHER FILE: 0 //
+//**********************************************************************//
+
+// *************************************************
+// * TEST SHADERS *
+// * DO NOT USE IN PROJECT MAPS *
+// *************************************************
+
+textures/bwhtest/crackedearth
+{
+ {
+ map textures/bwhtest/crackedearth.tga
+ }
+}
+
+// Rogues sorting trimmed glass//
+
+textures/bwhtest/lightning
+{
+ cull disable
+ {
+ map textures/bwhtest/lightning.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 0.1 0 1
+ }
+}
+
+textures/dont_use/flameshader
+{
+// *************************************************
+// * test flames *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ cull none
+ fogparms .3 .1 .1 0 32
+ tesssize 16
+ deformVertexes wave 100 sin 2.5 5 10 .1
+
+// END
+}
+
+textures/dont_use/foggentest_shader
+{
+// *************************************************
+// * Kevin's fogggen test *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms .2 .1 .3 0 0
+ foggen sin .1 .1 .1 .1
+
+ cull backsided
+
+
+
+// END
+}
+
+textures/dont_use/foglightshader
+{
+// *************************************************
+// * Kevin's simplified fog *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ cull backsided
+ {
+ map textures/dont_use/fogkc.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 1 1
+ tcMod scale .25 .25
+ tcMod turb .1 .1 .1 .1
+ }
+
+
+// END
+}
+
+textures/dont_use/metal2_2kc
+{
+
+ surfaceparm nolightmap
+ cull none
+ {
+ map textures/dont_use/metal2_2kc.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/dont_use/nightsky_kc
+{
+
+// *************************************************
+// * Kevin's strange test sky *
+// *************************************************
+ surfaceparm sky
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 200
+
+ cloudparms 256 half
+
+
+ {
+ map textures/dont_use/strangesky3_kc.tga
+ tcMod scroll .03 .03
+ }
+
+
+ {
+ map textures/dont_use/strangesky.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scroll .05 .05
+ }
+
+
+ {
+ map textures/dont_use/strangesky2_kc.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod scroll 0.01 0.01
+ tcMod scale .5 .5
+ }
+
+//END
+}
+
+textures/dont_use/nightsky_kcold
+{
+
+// *************************************************
+// * Kevin's four layer storm sky *
+// *************************************************
+ surfaceparm sky
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 200
+
+ cloudparms 256 full
+ lightning
+
+ {
+ map textures/dont_use/tileclouds3_kc.tga
+ tcMod scroll 0.01 0.01
+ tcMod scale 2 2
+ }
+
+
+ {
+ map textures/dont_use/tileclouds4_kc.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll .04 .05
+ }
+
+
+ {
+ map textures/dont_use/lightningsky8_kc.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod scroll .1 .1
+ tcMod scale 4 4
+ }
+
+ {
+ map textures/dont_use/tileclouds3b_kc.tga
+ blendFunc GL_DST_COLOR GL_ONE
+ tcMod scroll 0.01 .02
+ }
+
+//END
+}
+
+textures/dont_use/openwindow
+{
+
+ surfaceparm nolightmap
+ cull none
+
+ {
+ map textures/dont_use/openwindow.tga
+ alphaMap openwindow.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/dont_use/rustysupport
+{
+
+ surfaceparm nolightmap
+ cull none
+ {
+ map textures/dont_use/rustysupport.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/dont_use/shader2
+{
+// *************************************************
+// * test shader2 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ {
+ map textures/dont_use/shader2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb .2 .01 0 .1
+ tcMod scroll 0 0
+ }
+// END
+}
+
+textures/dont_use/shader3
+{
+// *************************************************
+// * test shader3 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+
+ tesssize 64
+ deformVertexes wave 100 sin 2 2 10 .01
+
+ {
+ map textures/dont_use/blood2.tga
+ tcMod turb .1 .1 0 0.02
+ tcMod scroll .1 .1
+ }
+
+
+// END
+}
+
+textures/dont_use/shader4
+{
+// *************************************************
+// * test shader4 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .1
+
+ q3map_surfacelight 100
+
+ {
+ map textures/dont_use/slimetest7c.tga
+ blendfunc GL_ONE_MINUS_DST_COLOR GL_ZERO
+ tcMod turb .01 .2 10 0.01
+ tcMod scroll .2 .1
+ }
+ {
+ map textures/dont_use/bubbleslimeelectricc.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .5 .5 10 0.01
+ tcMod scroll .2 .2
+ tcMod scale .1 .1
+ }
+
+
+
+
+// END
+}
+
+textures/dont_use/shader5
+{
+// *************************************************
+// * test shader5 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ tesssize 64
+
+ {
+ map textures/dont_use/firetestb.tga
+ blendfunc gl_one gl_one
+ tcMod scroll 5 15
+ tcMod scale .25 .25
+ tcMod turb .2 .2 .1 1
+ }
+
+ {
+ map textures/dont_use/firetest.tga
+ blendFunc GL_dst_color gl_src_alpha
+ tcMod scroll 0 10
+ tcMod scale .1 .1
+ tcMod turb .2 .1 .1 1
+ rgbGen wave SIN .5 .5 1 .1
+ }
+
+ {
+ map textures/dont_use/firetest2.tga
+ blendFunc GL_dst_color gl_one
+ tcMod scroll 10 50
+ tcMod turb .1 .1 .5 .5
+ rgbGen wave SIN .5 .5 1 .1
+ }
+
+
+// END
+}
+
+textures/dont_use/shader5old
+{
+// *************************************************
+// * test shader5 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ tesssize 64
+
+
+ {
+ map textures/dont_use/firetestb.tga
+ blendfunc gl_one gl_one
+ tcMod scroll 5 15
+ tcMod scale .25 .25
+ tcMod turb .2 .2 .1 1
+ }
+
+ {
+ map textures/dont_use/firetest.tga
+ blendFunc GL_dst_color gl_src_alpha
+ tcMod scroll 0 10
+ tcMod scale .1 .1
+ tcMod turb .2 .1 .1 1
+ }
+
+ {
+ map textures/dont_use/firetest2.tga
+ blendFunc GL_dst_color gl_one
+ tcMod scroll 10 50
+ tcMod turb .1 .1 .5 .5
+ }
+
+// END
+}
+
+textures/dont_use/sign_test_glow
+{
+ surfaceparm trans
+ surfaceparm nolightmap
+ q3map_surfacelight 100
+
+ {
+ map textures/dont_use/sign_test.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE GL_ONE
+ }
+
+ {
+ map textures/dont_use/sign_test_glow.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 1 .1
+ }
+
+// END
+}
+
+textures/dont_use/sky_test
+{
+ surfaceparm sky
+ surfaceparm noimpact
+ q3map_surfacelight 100
+ surfaceparm nolightmap
+ sky textures/dont_use/sky_test
+}
+
+textures/dont_use/train1kc_shader
+{
+// *************************************************
+// * test shader wall *
+// *************************************************
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/common/pjrock5b.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR
+ rgbGen identity
+ detail
+ tcmod scale 9.1 9.2
+ }
+
+ {
+ map textures/common/pjrock5.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+// END
+}
+
+textures/dont_use/web
+{
+
+ surfaceparm nolightmap
+ cull twosided
+ {
+ map textures/dont_use/web.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/test/blocks10pent
+{
+
+ // *************************************************
+ // * TEST BORDER WALL *
+ // * Feb 24 1999 *
+ // * Please Comment Changes *
+ // *************************************************
+
+ q3map_surfacelight 1000
+ surfaceparm nodamage
+ qer_lightimage textures/test/jumpadsmall.tga
+
+
+ {
+ map textures/sfx/bouncepad01block18b.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/test/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin .6 .4 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+ // END
+}
+
+textures/test/electricity3
+{
+ // *************************************************
+ // * Ripply Water Feb 16 1999 *
+ // * IF YOU CHANGE THIS PLEASE COMMENT THE CHANGE *
+ // *************************************************
+
+ qer_trans .5
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 triangle 2 2 1 0.1
+
+
+
+ {
+ map textures/test/fub.tga
+ blendFunc GL_ZERO GL_ONE
+ alphafunc GT0
+ tcMod scale .1 .01
+ tcmod turb 0 .01 .3 .1
+ alphaGen wave sin .5 .5 0 .01
+ tcMod scroll .1 .1
+ depthWrite
+ }
+ {
+ map textures/liquids/pool2.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+
+
+
+ {
+ map textures/test/electricity9.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcmod turb 0 .01 .3 10
+ tcMod scale .5 .5
+ tcMod rotate 1
+ depthfunc equal
+ tcMod scroll -.01 -.05
+ }
+
+ {
+ map textures/test/electricity9.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcmod turb 0 .01 .3 10
+ tcMod scale .5 .5
+ tcMod rotate 1
+ depthfunc equal
+ tcMod scroll -.01 -.05
+ }
+
+ // END
+}
+
+textures/test/densewaterfog
+{
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ backsided
+ fogparms 0.7 0.7 0.7 128 64
+}
+
+textures/test/fire2
+{
+
+ {
+ map textures/test/fire2.tga
+ }
+ {
+ map textures/test/fire3.tga
+ tcMod turb 0 .1 0 .7
+ tcMod scroll 0 10
+ rgbGen wave sin 1 2 0 1
+ }
+ {
+ map textures/test/fire3.blend.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0 10
+ }
+}
+
+textures/test/fogtestshader
+{
+// *************************************************
+// * Kevin's simplified fog *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ cull disable
+ fogparms .2 .225 .25 0 0
+ tesssize 64
+
+ {
+ map textures/test/cloud2.tga
+ blendFunc GL_DST_COLOR GL_ONE
+ tcGen environment
+ tcMod turb .5 .5 .5 0.03
+ tcMod scroll .25 .25
+ tcMod scale .5 .5
+ }
+
+// END
+}
+
+textures/test/lavacrustshader
+{
+// *************************************************
+// * Kevin's brown lava crust *
+// *************************************************
+
+ surfaceparm trans
+ //surfaceparm nonsolid
+ //surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+
+// light 1
+ q3map_surfacelight 100
+
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 0 .03
+ cull disable
+
+ {
+ map textures/test/lavatest.tga
+ tcMod turb .25 0.1 1 0.02
+ tcMod scroll .2 .2
+ }
+ {
+ map textures/test/lavacrust.tga
+ blendfunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .5 .5 5 0.01
+ tcMod scroll .1 .1
+ tcMod scale .1 .1
+ rgbGen wave triangle 1 1 2 1
+ }
+ {
+ map textures/test/lavacrust.tga
+ blendfunc GL_ONE GL_SRC_ALPHA
+ tcMod turb .2 .01 5 .01
+ tcMod scroll -.01 -.01
+ }
+
+
+// END
+}
+
+textures/test/lavatest
+{
+// *************************************************
+// * Kevin's simplified version of lava *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+
+// light 1
+ q3map_surfacelight 100
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 5 5 .5 0.02
+
+ {
+ map textures/test/lavatest.tga
+ tcMod turb .25 0.2 1 0.02
+ tcMod scroll .25 .25
+ }
+
+// END
+}
+
+textures/test/river
+{
+// *************************************************
+// * Kevin's test river shader *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .05
+
+ {
+ map textures/test/watertest8c.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod turb .01 .01 0 0.1
+ tcMod scroll -5 0
+ tcMod scale .5 .5
+ }
+ {
+ map textures/test/watertest10f.tga
+ blendfunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod turb .01 .01 0 0.1
+ rgbGen wave sin .8 .01 1 1
+ tcMod scroll -6 0
+ tcMod scale .5 .5
+ }
+ {
+ map textures/test/watertest8e.tga
+ blendFunc GL_DST_COLOR GL_ONE
+ tcMod turb .01 .01 .1 .1
+ tcMod scroll -10 0
+ }
+
+// END
+}
+
+textures/test/rnd_ledm1
+{
+ surfaceparm nolightmap
+ surfaceparm trans
+ qer_trans 0.5
+ qer_editorimage textures/test/rnd_ledm1.tga
+
+ {
+ map textures/test/rnd_ledm1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/test/rnd_ledm2.tga
+ blendFunc GL_ZERO GL_SRC_COLOR
+ rgbGen identity
+ }
+}
+
+textures/test/slimeshader
+{
+// *************************************************
+// * Kevin's temp slime with electricity *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm slime
+ surfaceparm nolightmap
+
+ tesssize 64
+ cull disable
+ deformVertexes wave 100 sin .5 .5 1 .05
+
+ q3map_surfacelight 500
+
+ {
+ map textures/test/slimetest6.tga
+ tcMod turb .25 0.1 1 0.02
+ tcMod scroll .2 .2
+ }
+ {
+ map textures/test/slimecrust5d.tga
+ blendfunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .5 .5 1 .02
+ tcMod scroll .1 .01
+ tcMod scale .1 .1
+ }
+ {
+ map textures/test/electricslime.tga
+ tcMod turb 1 1 1 .01
+ tcMod scroll 1 5
+ tcMod scale .5 .5
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .1
+ }
+ {
+ map textures/test/slimecrust5d.tga
+ blendfunc GL_ONE GL_SRC_ALPHA
+ tcMod turb .2 .1 5 .01
+ tcMod scroll -.01 -.01
+ }
+
+// FOG
+ surfaceparm fog
+ fogparms .2 1 .25 0 256
+
+// END
+}
+
+textures/test/waterfall
+{
+// *************************************************
+// * Kevin's test waterfall shader *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 16
+ deformVertexes wave 100 sin 0 2 1 .1
+
+
+ {
+ map textures/test/watertest8e.tga
+ blendFunc GL_ONE GL_SRC_ALPHA
+ tcMod turb .01 .01 0 0.1
+ tcMod scroll 15 0
+ }
+ {
+ map textures/test/watertest10f.tga
+ blendfunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod turb .01 .01 0 0.1
+ rgbGen wave sin .8 .01 1 1
+ tcMod scroll 20 0
+ }
+ {
+ map textures/test/watertest10c.tga
+ blendFunc GL_ONE GL_SRC_ALPHA
+ //tcMod turb .05 .05 .1 0.1
+ tcMod scroll 17 1
+ tcMod scale .5 .5
+ }
+
+
+// END
+}
+
+textures/test/watertile
+{
+// *************************************************
+// * Kevin's test water tile with shader *
+// *************************************************
+
+ cull disable
+
+ {
+ map textures/paulbase/tilefloor2.tga
+ }
+ //{
+ //map textures/test/watertest7f.tga
+ //blendFunc GL_ONE GL_SRC_COLOR
+ //tcMod turb .01 .02 0 0.05
+ //tcMod scroll .01 .01
+ //}
+ //{
+ //map textures/test/watertest7h.tga
+ //blendFunc GL_ONE GL_SRC_COLOR
+ //tcMod turb .01 .03 0 0.05
+ //tcMod scroll -.01 -.01
+ //}
+
+// END
+}
+
+textures/test/water_trans
+{
+// **************************************************
+// * Kevin's simplified version of translucent water*
+// * Should be used for small pools *
+// **************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .1
+
+
+ {
+ map textures/test/watertest8d.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+
+ {
+ map textures/test/watertest12e.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod scale .2 .2
+ tcMod stretch sin 1 .1 .02 .05
+ rgbGen wave sin .8 .2 .02 .05
+ tcMod scroll -.001 .001
+ }
+
+ {
+ map textures/test/watertest12e7.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 0 .01
+ tcMod scale .5 .5
+ tcMod scroll -.025 .02
+ }
+
+ {
+ map textures/test/watertest12e6.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod scale .3 .3
+ tcMod turb .1 .01 .01 .01
+ tcMod stretch sin 1 .3 .015 .015
+ rgbGen wave sin .7 .3 .02 .02
+ tcMod scroll .001 -.001
+ }
+
+// END
+}
+
+textures/test/wispy
+{
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+
+ deformVertexes wave 100 sin 0 3 0 0.1
+ tesssize 64
+
+ {
+ map env/alphaclouds.tga
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ tcMod scroll 1 0.8
+ tcMod scale 0.1 0.1
+ tcMod turb 0 0.3 0 0.1
+ }
+
+}
+
+textures/vector
+// testing tcgen vector
+{
+ nomipmaps
+ {
+ map textures/gothic_block/blocks10.tga
+ tcGen vector ( 0.0001 0.0001 0.0001 ) ( 0 0 0 )
+ tcMod scroll 0.01 0
+ rgbGen identity
+ }
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/base_button.shader b/install/installs/Q3Pack/install/baseq3/scripts/base_button.shader
new file mode 100644
index 0000000..f9de754
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/base_button.shader
@@ -0,0 +1,21 @@
+
+textures/base_button/shootme2
+{
+ qer_editorimage textures/base_button/metal3_3_shootme.tga
+ q3map_lightimage textures/base_button/shootme_glow.tga
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_support/metal3_3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_button/shootme_glow.tga
+ rgbGen wave sin 0.5 1.0 0 .3
+ blendFunc GL_ONE GL_ONE
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/base_door.shader b/install/installs/Q3Pack/install/baseq3/scripts/base_door.shader
new file mode 100644
index 0000000..e697701
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/base_door.shader
@@ -0,0 +1,97 @@
+
+textures/base_door/shinymetaldoor
+{
+
+ {
+ //map $lightmap
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .25
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_door/shinymetaldoor.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map textures/base_door/quake3sign.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+}
+
+textures/base_door/shinymetaldoor_outside
+{
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .25
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_door/shinymetaldoor_outside.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map textures/base_door/quake3sign_outside.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+}
+
+textures/base_door/shinymetaldoor_outside3a2
+{
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .25
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_door/shinymetaldoor_outside3a2.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc filter
+ }
+
+ {
+ map textures/base_door/shinymetaldoor_outside3glow.tga
+ blendFunc add
+ rgbGen wave sin .9 .1 0 5
+ }
+
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/base_floor.shader b/install/installs/Q3Pack/install/baseq3/scripts/base_floor.shader
new file mode 100644
index 0000000..b6c754a
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/base_floor.shader
@@ -0,0 +1,900 @@
+textures/base_floor/clang_floor3blava
+{
+ surfaceparm nolightmap
+ {
+ map textures/liquids/protolava2.tga
+ tcmod scale .2 .2
+ tcmod scroll .04 .03
+ tcMod turb 0 .1 0 .01
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/clang_floor3blava.tga
+ blendfunc blend
+
+ }
+
+}
+
+textures/base_floor/clangdark
+{
+ surfaceparm metalsteps
+
+ // metal that makes metalsteps sound
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/clangdark.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_floor/clangdark_ow
+{
+ surfaceparm metalsteps
+
+ // metal that makes metalsteps sound
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/clangdark_ow.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_floor/clangdark_ow3
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/clangdark_ow3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/clangdarkspot
+{
+ surfaceparm metalsteps
+ //{
+ // map textures/base_floor/clangdarkspot.tga
+ // rgbGen identity
+ //}
+
+ {
+ map textures/liquids/proto_grueldark.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+
+ tcMod turb 0 0.05 0 .05
+ //rgbGen identity
+ }
+
+ {
+ map textures/effects/tinfx3.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ //tcMod turb 0 0.01 0 9
+ //rgbGen identity
+ }
+
+ {
+ map textures/base_floor/clangdarkspot.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/clangfloor_noisy
+{
+ qer_editorimage textures/base_floor/clang_floor.tga
+ surfaceparm metalsteps
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/base_floor/clang_floor.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbgen identity
+
+ }
+
+}
+
+textures/base_floor/clangspot2
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/liquids/proto_grueldark.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+
+ tcMod turb 0 0.05 0 .05
+ //rgbGen identity
+ }
+
+ {
+ map textures/effects/tinfx3.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ //tcMod turb 0 0.01 0 9
+ //rgbGen identity
+ }
+
+ {
+ map textures/base_floor/clangspot2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/concretefloor1
+{
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcgen environment
+ rgbgen wave sin .25 0 0 0
+ }
+
+
+ {
+ map textures/base_floor/concretefloor1.tga
+ blendFunc GL_ZERO GL_SRC_ALPHA
+ tcmod scale .1 .1
+ rgbgen identity
+ }
+
+ {
+ map textures/base_floor/concretefloor1.tga
+ blendFunc GL_ONE GL_SRC_ALPHA
+ rgbgen identity
+ }
+
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+
+
+
+}
+
+textures/base_floor/cybergrate2
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm metalsteps
+ surfaceparm nomarks
+ {
+ map textures/base_floor/cybergrate2.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_floor/cybergrate3
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm metalsteps
+ surfaceparm nomarks
+ {
+ map textures/sfx/hologirl.tga
+ blendFunc add
+ tcmod scale 1.2 .5
+ tcmod scroll 3.1 1.1
+
+ }
+ {
+ map textures/base_floor/cybergrate3.tga
+ alphaFunc GE128
+ depthWrite
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_floor/diamond2c_ow
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/diamond2c_ow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/diamond2cspot
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/liquids/proto_grueldark2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+ tcMod turb 0 0.05 0 .05
+ }
+
+ {
+ map textures/effects/tinfx3.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ }
+
+ {
+ map textures/base_floor/diamond2cspot.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/diamond_noisy
+{
+ qer_editorimage textures/base_floor/diamond2.tga
+ surfaceparm metalsteps
+
+ // metal that makes metalsteps sound
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/diamond2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_floor/floor3_3dark_ow
+{
+
+ {
+ map textures/effects/envmapblue.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/base_floor/floor3_3dark_ow.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_floor/hfloor3
+{
+ //deformVertexes wave 100 sin 3 2 .1 3
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_floor/hfloor3.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map textures/effects/tinfx.tga
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+ {
+ map textures/base_floor/hfloor3.tga
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_floor/metalbridge04dbroke
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/metalbridge04dbroke.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_floor/nomarkstone_1
+{
+ qer_editorimage textures/base_floor/smallstone.tga
+ q3map_lightimage textures/base_floor/smallstone.tga
+ q3map_globaltexture
+ surfaceparm nomarks
+ surfaceparm noimpact
+
+ // A stone that isn't marked by weapons. Used below red fog in pj_dm10
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/smallstone.tga
+ tcMod scale 2 2
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_floor/pjgrate1
+{
+ surfaceparm metalsteps
+ cull none
+
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/pjgrate1.tga
+ tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/pjgrate2
+{
+ surfaceparm metalsteps
+ cull none
+
+ // A RUSTED GRATE THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/pjgrate2.tga
+ tcMod scale 2.0 2.0
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ rgbGen identity
+ }
+}
+
+textures/base_floor/pool_floor2
+{
+
+
+ {
+ map textures/liquids/pool3d_5e.tga
+ tcmod scale -.25 -.25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+
+ }
+
+ {
+ map textures/liquids/pool3d_6e.tga
+ blendFunc GL_one GL_ONE
+ tcmod scale .25 .25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/base_floor/pool_floor2.tga
+ blendFunc GL_one GL_src_color
+ rgbgen identity
+ }
+
+
+ {
+ rgbGen identity
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_floor/pool_floor3
+{
+ qer_editorimage textures/base_wall/patch10rusty5.tga
+
+ {
+ map textures/liquids/pool3d_5e.tga
+ tcmod scale -.25 -.25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+
+ }
+
+ {
+ map textures/liquids/pool3d_6e.tga
+ blendFunc GL_one GL_ONE
+ tcmod scale .25 .25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/base_wall/patch10rusty5.tga
+ blendFunc GL_one GL_src_color
+ rgbgen identity
+ }
+
+
+ {
+ rgbGen identity
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_floor/pool_side2
+{
+
+
+ {
+ map textures/liquids/pool3d_5e.tga
+ tcmod scale -.5 -.25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/liquids/pool3d_6e.tga
+ blendFunc GL_one GL_ONE
+ tcmod scale .5 .25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/base_floor/pool_side2.tga
+ blendFunc GL_one GL_src_color
+ tcmod scale .5 .5
+ rgbgen identity
+ }
+
+
+ {
+ rgbGen identity
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_floor/pool_side3
+{
+ qer_editorimage textures/base_wall/patch10rusty5.tga
+
+ {
+ map textures/liquids/pool3d_5e.tga
+ tcmod scale -.5 -.25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/liquids/pool3d_6e.tga
+ blendFunc GL_one GL_ONE
+ tcmod scale .5 .25
+ tcmod scroll .025 .025
+ rgbgen wave sin .75 0 0 0
+ }
+
+ {
+ map textures/base_wall/patch10rusty5.tga
+ blendFunc GL_one GL_src_color
+ tcmod scale .5 .5
+ rgbgen identity
+ }
+
+
+ {
+ rgbGen identity
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_floor/proto_grate
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ cull none
+ nopicmip
+
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_grate.tga
+ //tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/proto_grate3
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ cull none
+ nopicmip
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_grate3.tga
+ //tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/proto_grate4
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm nonsolid //Tim's fuckage
+ cull none
+ nopicmip
+
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_grate4.tga
+ //tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/proto_rustygrate
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ cull none
+ nopicmip
+ // A RUSTY GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_rustygrate.tga
+ // tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/proto_rustygrate2
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ cull none
+ nopicmip
+ // A RUSTY GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/proto_rustygrate2.tga
+ // tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/rusty_pentagrate
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+
+ cull none
+ nopicmip
+ // A RUSTY and Eeevil grate THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/rusty_pentagrate.tga
+ // tcMod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/skylight1
+{
+ q3map_lightimage textures/base_floor/skylight1_lm.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/skylight1.tga
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/skylight1_lm.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle .2 2 0 7.7
+ }
+ {
+ map textures/base_floor/skylight1_lm.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle .2 5 1 5.1
+ }
+
+}
+
+textures/base_floor/skylight_spec
+{
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_floor/skylight_spec.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_floor/techfloor
+{
+ surfaceparm metalsteps
+
+ {
+ map textures/sfx/proto_zzztpink.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ //clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ clampmap textures/base_floor/techfloor2.tga
+ blendFunc blend
+ tcmod rotate 170
+ tcMod stretch sin .8 0.2 0 .4
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/techfloor.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_floor/techfloor2
+{
+ cull disable
+ //surfaceparm trans
+ surfaceparm nomarks
+ //nomipmaps
+
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ alphaFunc GE128
+ tcmod rotate 70
+ tcMod stretch sin .8 0.2 0 .3
+ rgbGen identity
+ }
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ alphaFunc GE128
+ tcmod rotate -50
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ alphaFunc GE128
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+
+}
+
+textures/base_floor/tilefloor7_ow
+{
+ q3map_lightimage textures/base_floor/tilefloor7_owfx.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/tilefloor7_ow.tga
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+ {
+ map textures/base_floor/tilefloor7_owfx.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 2 0 7
+ }
+ {
+ map textures/base_floor/tilefloor7_owfx.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ }
+
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/base_light.shader b/install/installs/Q3Pack/install/baseq3/scripts/base_light.shader
new file mode 100644
index 0000000..07ade96
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/base_light.shader
@@ -0,0 +1,1683 @@
+textures/base_light/baslt4_1_2k
+{
+ qer_editorimage textures/base_light/baslt4_1.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ //light 1
+
+ // New Fluorescent light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/baslt4_1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/baslt4_1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/baslt4_1_4k
+{
+ qer_editorimage textures/base_light/baslt4_1.tga
+ surfaceparm nomarks
+ q3map_surfacelight 4000
+ //light 1
+
+ // New Fluorescent light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/baslt4_1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/baslt4_1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/border11light
+{
+ q3map_surfacelight 500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border11light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border11light.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/border11light_300
+{
+ qer_editorimage textures/base_light/border11light.tga
+ q3map_lightimage textures/base_light/border11light.blend.tga
+
+ q3map_surfacelight 235
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border11light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border11light.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/border7_ceil50
+{
+ qer_editorimage textures/base_light/border7_ceil50.tga
+ q3map_surfacelight 100
+ // Square dirty white llight
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border7_ceil50.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/border7_ceil50glow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_22a
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_22a_8k
+{
+ surfaceparm nomarks
+ qer_editorimage textures/base_light/ceil1_22a.tga
+ q3map_surfacelight 8000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_22a_trans
+{
+ qer_editorimage textures/base_light/ceil1_22a.tga
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_22a.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_30
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+// light 1
+ // Square rich blue light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_30_8k
+{
+ surfaceparm nomarks
+ qer_editorimage textures/base_light/ceil1_30.tga
+ q3map_surfacelight 8000
+// light 1
+ // Square rich blue light (8k light wattage
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_30_trans
+{
+ qer_editorimage textures/base_light/ceil1_30.tga
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_30.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+// light 1
+ // Square tourquoise light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34_10k
+{
+ qer_editorimage textures/base_light/ceil1_34.tga
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+// light 1
+ // Square tourquoise light
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34_1k
+{
+ qer_editorimage textures/base_light/ceil1_34.tga
+ q3map_lightimage textures/base_light/ceil1_34.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34_2k
+{
+ qer_editorimage textures/base_light/ceil1_34.tga
+ q3map_lightimage textures/base_light/ceil1_34.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_34_5k
+{
+ qer_editorimage textures/base_light/ceil1_34.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_34.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_37
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_37.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_37.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38
+{
+ surfaceparm nomarks
+ q3map_surfacelight 2500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_10k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_20k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 20000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_30k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 30000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_40k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 40000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_50k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 50000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_70k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 70000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_38_90k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 90000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_39
+{
+ surfaceparm nomarks
+ q3map_surfacelight 7500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil1_4
+{
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_4.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_4.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/ceil_white5k
+{
+ qer_editorimage textures/base_light/ceil1_38.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_38.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/cornerlight
+{
+ q3map_lightimage textures/base_light/cornerlight.glow.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2500
+ {
+ map textures/base_light/cornerlight.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_light/cornerlight.glow.tga
+ blendfunc GL_one gl_one
+ rgbgen wave sawtooth .6 .1 0 7
+ }
+}
+
+textures/base_light/geolight
+{
+ q3map_lightimage textures/base_light/geolight_glow.tga
+ surfaceparm nomarks
+ q3map_surfacelight 4000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/geolight.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map textures/base_light/geolight_glow.tga
+ blendFunc add
+ rgbgen wave sin .575 .025 0 10
+ }
+
+}
+
+textures/base_light/jaildr03_1
+{
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr03_1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr03_1.tga
+ rgbGen wave sin 0.5 0.5 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/jaildr03_2
+{
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr03_2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr03_2.blend.tga
+ rgbGen wave sin 0.5 0.5 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/base_light/jaildr1_3
+{
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr1_3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/jaildr1_3.blend.tga
+ rgbGen wave sin 0.5 0.5 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1_1500
+{
+ qer_editorimage textures/base_light/light1.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ //rgbGen wave sin 0.5 0.5 0 3
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1_3000
+{
+ qer_editorimage textures/base_light/light1.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ //rgbGen wave sin 0.5 0.5 0 3
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1_5000
+{
+ qer_editorimage textures/base_light/light1.tga
+ q3map_lightimage textures/base_light/light1.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1blue_1500
+{
+ qer_editorimage textures/base_light/light1blue.tga
+ q3map_lightimage textures/base_light/light1blue.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1blue_2000
+{
+ qer_editorimage textures/base_light/light1blue.tga
+ q3map_lightimage textures/base_light/light1blue.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1blue_5000
+{
+ qer_editorimage textures/base_light/light1blue.tga
+ q3map_lightimage textures/base_light/light1blue.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1blue_800
+{
+ qer_editorimage textures/base_light/light1blue.tga
+ q3map_lightimage textures/base_light/light1blue.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 800
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1blue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1dark
+{
+ qer_editorimage textures/base_light/light1.tga
+ q3map_lightimage textures/base_light/light1.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 6000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1red_2000
+{
+ qer_editorimage textures/base_light/light1red.tga
+ q3map_lightimage textures/base_light/light1red.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light1red_5000
+{
+ qer_editorimage textures/base_light/light1red.tga
+ q3map_lightimage textures/base_light/light1red.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light5_10k
+{
+ qer_editorimage textures/base_light/light5.tga
+ q3map_lightimage textures/base_light/xlight5.blend.tga
+// light 1
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/xlight5.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/xlight5.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light5_15k
+{
+ qer_editorimage textures/base_light/light5.tga
+ q3map_lightimage textures/base_light/light5.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 15000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light5.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light5.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light5_3000
+{
+ qer_editorimage textures/base_light/light5.tga
+// light 1
+ surfaceparm nomarks
+ q3map_surfacelight 3000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/xlight5.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/xlight5.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/light5_5k
+{
+ qer_editorimage textures/base_light/light5.tga
+ //light 1
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_surfacelight 5000
+ {
+ map textures/base_light/light5.tga
+ rgbGen identity
+ }
+}
+
+textures/base_light/lt2_2000
+{
+ qer_editorimage textures/base_light/light2.tga
+// light 1
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.blend.tga
+ rgbGen wave sin 0.6 0.1 .1 .1
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/lt2_4000
+{
+ qer_editorimage textures/base_light/light2.tga
+ //light 1
+ surfaceparm nomarks
+ q3map_surfacelight 4000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/lt2_8000
+{
+ qer_editorimage textures/base_light/light2.tga
+ surfaceparm nomarks
+ q3map_surfacelight 8000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light2.blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/patch10_pj_lite
+{
+ q3map_surfacelight 2500
+ surfaceparm nomarks
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/patch10_pj_lite2
+{
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite2.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/patch10_pj_lite2_1000
+{
+ qer_editorimage textures/base_light/patch10_pj_lite2.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ //light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/patch10_pj_lite2.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/pjceil1_39_1K
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+// light 1
+ // Square dirty white
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/pjceil1_39_1p5k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1500
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/proto_light
+{
+ q3map_lightimage textures/base_light/proto_lightmap.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightmap.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 0.5 1 .1
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 -1
+ rgbgen wave triangle 1 2 0 7
+ }
+}
+
+textures/base_light/proto_light_2k
+{
+ qer_editorimage textures/base_light/proto_light.tga
+ q3map_lightimage textures/base_light/proto_lightmap.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightmap.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 0.5 1 .1
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 -1
+ rgbgen wave triangle 1 2 0 7
+ }
+}
+
+textures/base_light/proto_lightred
+{
+ q3map_lightimage textures/base_light/proto_lightred.tga
+ surfaceparm nomarks
+ q3map_surfacelight 300
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightred.tga
+ blendFunc filter
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightred.tga
+ blendFunc add
+ }
+
+}
+
+textures/base_light/proto_lightred2
+{
+ q3map_lightimage textures/base_light/proto_lightred.tga
+ qer_editorimage textures/base_light/proto_lightred.tga
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightred.tga
+ blendFunc filter
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightred.tga
+ blendFunc add
+ rgbGen wave square .5 .5 0 1
+ }
+
+}
+
+textures/base_light/runway
+{
+ q3map_lightimage textures/base_light/runway_glow.tga
+ surfaceparm nomarks
+ q3map_surfacelight 400
+ {
+ map textures/base_light/runway_glow.tga
+ tcmod scale 1 .25
+ rgbgen wave square -1 2 .5 8
+ tcmod scroll 0 .5
+ }
+
+ {
+ map textures/base_light/runway.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc filter
+ }
+
+ {
+ map textures/base_light/runwayb.tga
+ blendFunc add
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_light/s_proto_light
+{
+ q3map_lightimage textures/base_light/s_proto_lightmap.tga
+ qer_editorimage textures/base_light/proto_light.tga
+ surfaceparm nomarks
+ q3map_surfacelight 100
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_light.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/proto_lightmap.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 0.5 1 .1
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ }
+ {
+ map textures/base_light/proto_light2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 -1
+ rgbgen wave triangle 1 2 0 7
+ }
+}
+
+textures/base_light/scrolllight
+{
+ q3map_lightimage textures/sfx/scrolllight2.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ Map textures/base_light/scrolllight.tga
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+ {
+ Map textures/base_light/scrolllight2.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -1 0
+ }
+ {
+ Map textures/base_light/scrolllight2.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -2 0
+ }
+
+
+}
+
+textures/base_light/trianglelight
+{
+ q3map_lightimage textures/base_light/trianglelight.blend.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2500
+ {
+ map textures/base_light/trianglelight.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_light/trianglelight.blend.tga
+ blendfunc GL_one gl_one
+ rgbgen wave sawtooth .6 .1 0 7
+ }
+
+
+}
+
+textures/base_light/wsupprt1_12
+{
+ surfaceparm nomarks
+ q3map_surfacelight 1000
+ //light1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/wsupprt1_12.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/wsupprt1_12.blend.tga
+ rgbGen wave sin 0.5 0.5 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 20000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_1
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_10k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 10000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_110k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 110000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_15k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 15000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_20k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 20000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_2k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_30k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 30000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_500k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 500000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_50k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 50000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_5k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 5000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_70k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 70000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_90k
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 90000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_a
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 30000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_light/xceil1_39_b
+{
+ qer_editorimage textures/base_light/ceil1_39.tga
+ surfaceparm nomarks
+ q3map_surfacelight 40000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/ceil1_39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/base_object.shader b/install/installs/Q3Pack/install/baseq3/scripts/base_object.shader
new file mode 100644
index 0000000..964e334
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/base_object.shader
@@ -0,0 +1,30 @@
+
+textures/base_object/boxQ3_3
+{
+ // A red box side with a specular map on it
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_object/boxQ3_3.tga
+ rgbGen identity
+ alphaGen lightingSpecular
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ }
+}
+
+textures/base_object/boxq3_4
+{
+ // A golden yellow box with a specular map on it
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_object/boxq3_4.tga
+ rgbGen identity
+ alphaGen lightingSpecular
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/base_support.shader b/install/installs/Q3Pack/install/baseq3/scripts/base_support.shader
new file mode 100644
index 0000000..03647ee
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/base_support.shader
@@ -0,0 +1,211 @@
+
+textures/base_support/cable_trans
+{
+
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/base_support/cable_trans.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/base_support/grate1_3
+{
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_support/grate1_3.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ alphaGen lightingSpecular
+ rgbGen identity
+ }
+
+}
+
+textures/base_support/pj_metal14_1
+//Paul Jaquays uses this on the tops of metal frameworks
+{
+ qer_editorimage textures/base_support/metal14_1.tga
+ surfaceparm metalsteps
+
+ // metal that makes metalsteps sound
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_support/metal14_1.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/base_support/support1rust
+{
+ //deformVertexes wave 100 sin 3 2 .1 3
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_support/support1rust.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map textures/base_trim/tinfx.tga
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+ {
+ map textures/base_support/support1rust.tga
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_support/support1shiny
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_support/support1shiny.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+
+textures/base_support/support2rust
+{
+ qer_editorimage textures/base_support/support1rust.tga
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_support/support1rust.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_support/x_support
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_support/x_support.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_support/x_support2
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm playerclip
+ surfaceparm nonsolid
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_support/x_support2.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_support/x_support3
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_support/x_support3.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_support/z_support
+{
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_support/z_support.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/base_trim.shader b/install/installs/Q3Pack/install/baseq3/scripts/base_trim.shader
new file mode 100644
index 0000000..c0582be
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/base_trim.shader
@@ -0,0 +1,591 @@
+
+textures/base_trim/border11_250
+{
+ qer_editorimage textures/base_trim/border11light.tga
+ q3map_surfacelight 250
+ q3map_lightimage textures/base_trim/border11light.glow.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border11light.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border11light.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave sin .9 .1 0 10
+ }
+}
+
+textures/base_trim/border11light
+{
+ q3map_surfacelight 500
+ Q3map_lightimage textures/base_trim/border11light.glow.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border11light.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border11light.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave sin .9 .1 0 10
+ }
+}
+
+textures/base_trim/border12b
+{
+ q3map_surfacelight 1000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border12b.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border12bfx.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_trim/border12b_pj
+{
+ qer_editorimage textures/base_trim/border12b.tga
+ q3map_surfacelight 150
+ q3map_lightimage textures/base_trim/border12bfx.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border12b.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border12bfx.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_trim/dark_tin2
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen vertex
+ }
+ {
+ map textures/base_trim/dark_tin2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_trim/dark_tin2_trans
+{
+ qer_editorimage textures/base_trim/dark_tin2.tga
+ surfaceparm nonsolid
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen vertex
+ }
+ {
+ map textures/base_trim/dark_tin2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_trim/deeprust_trans
+{
+ qer_editorimage textures/base_trim/deeprust.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/base_trim/deeprust.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/base_trim/electricwall
+{
+ qer_editorimage textures/organics/wire02a_f.tga
+ q3map_surfacelight 400
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/organics/wire02a_f.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/organics/wire02a_f.tga
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ map textures/sfx/electric2.blend.tga
+ rgbGen wave sin 0.6 1 0 2
+ tcMod scroll 0.53 0.43
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_trim/panel_glo
+{
+
+ {
+ map textures/sfx/firegorre2.tga
+
+ tcMod turb 0 .6 0 0.06
+ tcmod scale .53 .61
+ tcmod scroll 0 4
+ blendFunc GL_ONE GL_ZERO
+ rgbGen wave sin 1 1 0 .1
+ }
+ {
+ map textures/base_trim/panel_glo.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/panel_shiny
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/panel_shiny.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/panelbrn010w
+{
+ q3map_lightimage textures/base_trim/panelbrn010wfx.tga
+
+ {
+ map textures/base_trim/panelbrn010w.tga
+ }
+
+ {
+ map textures/sfx/hologirl2.tga
+ tcmod scale .4 .4
+ tcmod scroll 6 2
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/panelbrn010w.tga
+ blendfunc blend
+
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ }
+
+}
+
+textures/base_trim/pewter_nonsolid
+{
+ qer_editorimage textures/base_trim/dirty_pewter.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/base_trim/dirty_pewter.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/base_trim/pewter_shiney
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/pewter_shiney.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/pewter_spec
+{
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_trim/pewter_spec.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+textures/base_trim/proto_comp
+{
+ {
+ map textures/base_trim/proto_comp2.tga
+ tcmod scroll 0 -.2
+ rgbGen wave sin .5 .5 0 3
+ rgbGen identity
+ }
+ {
+ clampmap textures/sfx/console03.tga
+ tcmod rotate -33
+ tcMod stretch sin .8 0 0 0
+ blendfunc add
+ rgbGen wave sin .6 0 0 0
+ }
+ {
+ clampmap textures/sfx/console02.tga
+ tcmod rotate -333
+ tcMod stretch sin .8 0 0 0
+ blendfunc add
+ rgbGen wave sin .3 0 0 0
+ }
+ {
+ map textures/effects/tinfx2c.tga
+ tcGen environment
+ blendfunc add
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/proto_comp.tga
+ blendfunc blend
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_trim/proto_fence
+{
+ surfaceparm trans
+ cull none
+ nopicmip
+
+ {
+ map textures/base_trim/proto_fence.tga
+ tcMod scale 3 3
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_trim/spiderbit
+{
+ q3map_lightimage textures/base_trim/spiderbit_fx.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbit.tga
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbit_fx.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle .1 .5 0 7
+ }
+
+}
+
+textures/base_trim/spiderbite
+{
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .3 0 .2
+ tcmod scroll 6 .7
+ tcmod scale .4 1
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbite.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ tcMod stretch sin .8 0.4 0 .2
+ tcmod scroll .3 0
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbite.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ tcMod stretch sin .8 0.2 0 .1
+ tcmod scroll -.5 0
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spiderbite.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/spidertrim3
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spidertrim3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/spidertrim4
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/spidertrim4.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_trim/techborder
+{
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_trim/techborder_fx.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/techborder.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/techborder_fx.tga
+ //tcmod scale .1 1
+ tcmod scroll .1 0
+
+ blendfunc GL_ONE GL_ONE
+ }
+ {
+ map textures/base_trim/techborder_fx.tga
+ tcmod scale .1 1
+ tcmod scroll .1 0
+
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/base_trim/tin
+{
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/base_trim/tin.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map textures/base_trim/tinfx.tga
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+ {
+ map textures/base_trim/tin.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/base_trim/wires01
+{
+ cull disable
+ surfaceparm alphashadow
+ deformVertexes autoSprite2
+ surfaceparm trans
+ {
+ map textures/base_trim/wires01.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_trim/wires01_ass
+{
+ cull disable
+ surfaceparm alphashadow
+ deformVertexes autoSprite2
+ {
+ map textures/base_trim/wires01_ass.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_trim/wires02
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm trans
+ {
+ map textures/base_trim/wires02.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_trim/xborder12b
+{
+ qer_editorimage textures/base_trim/border12b.tga
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_trim/border12bfx.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_trim/border12b.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/base_trim/border12bfx.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/base_wall.shader b/install/installs/Q3Pack/install/baseq3/scripts/base_wall.shader
new file mode 100644
index 0000000..82730f6
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/base_wall.shader
@@ -0,0 +1,1406 @@
+
+textures/base_wall/atech1_alpha
+{
+
+ {
+ map textures/sfx/hologirl.tga
+ tcmod scale 2 .4
+ tcmod scroll 6 .6
+ //tcMod turb 0 .1 0 .01
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/atech1_alpha.tga
+ blendfunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ }
+
+}
+
+textures/base_wall/atechengine_ax
+{
+ q3map_lightimage textures/base_wall/atechengine_ax2.tga
+ q3map_surfacelight 300
+ {
+ map textures/sfx/proto_zzztpink.tga
+ tcmod rotate 60
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/atechengine_ax.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_wall/basewall01_ow
+{
+ q3map_lightimage textures/base_wall/basewall01_owfx.tga
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/basewall01_ow.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/basewall01_owfx.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 0.5 0 .5
+ }
+
+}
+
+textures/base_wall/basewall01bit
+{
+ q3map_lightimage textures/base_wall/basewall01bitfx.tga
+ q3map_surfacelight 300
+ {
+ map textures/base_wall/basewall01bit.tga
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/basewall01bitfx.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scroll 3.3 1
+ rgbGen wave sin .5 0.5 0 5
+ }
+ {
+ map textures/effects/envmap2.tga
+ tcGen environment
+ tcmod scale 4 4
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/basewall01bit.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+
+}
+
+textures/base_wall/bluemetal1b_chrome
+{
+ qer_editorimage textures/base_wall/bluemetal1b_shiny.tga
+
+ {
+ map textures/base_wall/chrome_env2.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetal1b_shiny.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetal1b_shiny
+{
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/bluemetal1b_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/bluemetal2_noisy
+{
+ qer_editorimage textures/base_wall/bluemetal2_shiny.tga
+ surfaceparm metalsteps
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/bluemetal2_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_wall/bluemetal2_shiny
+{
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/bluemetal2_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_wall/bluemetal2_shiny_trans
+{
+ qer_editorimage textures/base_wall/bluemetal2_shiny.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/bluemetal2_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_wall/bluemetalsupport2
+{
+
+
+ {
+ map textures/base_wall/chrome_env2.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2b
+{
+
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_wall/bluemetalsupport2bglow.tga
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2b.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/bluemetalsupport2bglow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 .2
+ }
+}
+
+textures/base_wall/bluemetalsupport2c
+{
+
+
+ {
+ map textures/base_wall/chrome_env2.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2c.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2c_1
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2c_1.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2c_1vent
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2c_1vent.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2clight
+{
+ surfaceparm nomarks
+ q3map_surfacelight 500
+
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2clight.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/bluemetalsupport2clight.glow.tga
+ blendFunc add
+ rgbgen wave sawtooth .6 .1 0 4
+ }
+}
+
+textures/base_wall/bluemetalsupport2d_1
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2d_1.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2e
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2e.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2e2
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2e2.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2eye
+{
+
+ surfaceparm nomarks
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_wall/bluemetalsupport2eyel.tga
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2eye.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/bluemetalsupport2eyel.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .5 .5 0 .5
+ }
+}
+
+textures/base_wall/bluemetalsupport2f
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2f.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/bluemetalsupport2fline
+{
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_wall/bluemetalsupport2fline_glow.tga
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2fline.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2fline_glow.tga
+ blendFunc add
+ rgbGen wave sin .5 .5 0 1
+ }
+
+
+}
+
+textures/base_wall/bluemetalsupport2ftv
+{
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_wall/bluemetalsupport2ftv_glow.tga
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2ftv.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc filter
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/bluemetalsupport2ftv_glow.tga
+ blendFunc add
+ rgbGen wave sawtooth .4 .05 0 10
+ }
+
+
+}
+
+textures/base_wall/blumtlspt2b
+{
+
+ q3map_surfacelight 100
+ q3map_lightimage textures/base_wall/blumtlspt2bglow.tga
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/blumtlspt2b.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/bluemetalsupport2bglow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 .2
+ }
+}
+
+textures/base_wall/c_met5_2_trans
+{
+ qer_editorimage textures/base_wall/c_met5_2.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/base_wall/c_met5_2.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/base_wall/chrome_metal
+{
+ {
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .25
+
+ }
+
+ {
+ map textures/base_wall/chrome_metal.tga
+ blendFunc GL_ONE GL_ONE
+ detail
+ tcMod scale 0.0693 0.0712
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+ }
+
+
+
+}
+
+textures/base_wall/comp3
+{
+ q3map_lightimage textures/base_wall/comp3env.tga
+ qer_editorimage textures/base_wall/comp3_qer.tga
+ q3map_surfacelight 1000
+ {
+ map textures/base_wall/comp3text.tga
+ rgbGen identity
+ tcmod scroll 3 1
+ }
+
+ {
+ map textures/base_wall/comp3env.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .98 .02 0 5
+ }
+
+ {
+ map $lightmap
+ tcGen environment
+ blendFunc GL_DST_COLOR GL_ONE
+ }
+
+
+ {
+ map textures/base_wall/comp3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_wall/comp3b
+{
+ q3map_lightimage textures/base_wall/comp3textb.tga
+ qer_editorimage textures/base_wall/comp3b_qer.tga
+ q3map_surfacelight 1000
+ {
+ map textures/base_wall/comp3textb.tga
+ rgbGen identity
+ tcmod scroll 3 3
+ }
+
+ {
+ map textures/base_wall/comp3env.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .98 .02 0 5
+ }
+
+ {
+ map $lightmap
+ tcGen environment
+ blendFunc GL_DST_COLOR GL_ONE
+ }
+
+
+ {
+ map textures/base_wall/comp3b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_wall/comp3b_dark
+{
+ q3map_lightimage textures/base_wall/comp3textb.tga
+ qer_editorimage textures/base_wall/comp3b_qer.tga
+ q3map_surfacelight 1
+ {
+ map textures/base_wall/comp3textb.tga
+ rgbGen identity
+ tcmod scroll 3 3
+ }
+
+ {
+ map textures/base_wall/comp3env.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .98 .02 0 5
+ }
+
+ {
+ map $lightmap
+ tcGen environment
+ blendFunc GL_DST_COLOR GL_ONE
+ }
+
+
+ {
+ map textures/base_wall/comp3b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_wall/comp3c
+{
+ qer_editorimage textures/base_wall/comp3c_qer.tga
+
+ {
+ map textures/base_wall/comp3env.tga
+ rgbGen identity
+ tcGen environment
+ }
+
+ {
+ map $lightmap
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ }
+
+ {
+ map textures/base_wall/comp3c.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+}
+
+textures/base_wall/concrete_ow
+{
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcMod turb 0 .5 0 9.6
+ tcmod scale 2 2
+ tcmod scroll 9 5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/concrete_ow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_wall/dooreye
+{
+ surfaceparm nomarks
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_wall/dooreyelight.tga
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreye.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreyelight.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .5 .5 0 .5
+ }
+
+
+}
+
+textures/base_wall/dooreye2
+{
+ surfaceparm nomarks
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_wall/dooreyelight.tga
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreye2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreyelight.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .5 .5 0 .5
+ }
+
+
+}
+
+textures/base_wall/dooreye3
+{
+ surfaceparm nomarks
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_wall/dooreyelight.tga
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreye3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/base_wall/dooreyelight.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .5 .5 0 .5
+ }
+
+
+}
+
+textures/base_wall/girders1i_yellofin
+{
+ qer_editorimage textures/base_wall/girders1i_yellodark_fin.tga
+ surfaceparm metalsteps
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm playerclip
+ surfaceparm nonsolid
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ map textures/base_wall/girders1i_yellodark_fin.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/base_wall/glass01
+{
+ qer_editorimage textures/base_wall/shiny3.tga
+ surfaceparm trans
+ cull none
+ qer_trans 0.5
+
+ {
+ map textures/effects/tinfx.tga
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ }
+
+}
+
+textures/base_wall/glass_frame
+{
+ cull none
+ surfaceparm alphashadow
+
+ {
+ map textures/effects/tinfx2.tga
+ blendFunc GL_ONE GL_ONE
+ tcgen environment
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/glass_frame.tga
+ alphaFunc GE128
+ depthWrite
+ //rgbGen vertex
+ //blendfunc blend
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ }
+
+}
+
+textures/base_wall/grill
+{
+
+
+ {
+ map textures/base_wall/chrome_env.tga
+ rgbGen identity
+ tcGen environment
+ tcmod scale .25 .25
+ }
+
+ {
+ map textures/base_wall/grill.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+}
+
+textures/base_wall/main_q3abanner
+{
+ q3map_lightimage textures/base_wall/main_q3abanner.tga
+ q3map_surfacelight 100
+
+
+ {
+ map textures/base_wall/main_q3abanner.tga
+ rgbGen wave square 0 1 0 .5
+ }
+
+ {
+ map textures/base_wall/comp3text.tga
+ blendfunc add
+ rgbGen identity
+ tcmod scroll 3 3
+ }
+
+ {
+ map textures/base_wall/comp3textb.tga
+ blendfunc add
+ rgbGen identity
+ tcmod scroll 3 3
+ }
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map $lightmap
+ tcgen environment
+ tcmod scale .5 .5
+ rgbGen wave sin .25 0 0 0
+ blendfunc add
+ }
+}
+
+textures/base_wall/medal_impressive
+{
+ qer_editorimage textures/base_wall/medal_impressive.tga
+ q3map_surfacelight 100
+
+
+ {
+ animMap .25 textures/base_wall/medal_impressive.tga textures/base_wall/medal_gauntlet.tga textures/base_wall/medal_excellent.tga textures/base_wall/medal_accuracy.tga textures/base_wall/medal_victory.tga textures/base_wall/medal_frags.tga
+ rgbGen wave sawtooth 0 1 0 .25
+
+ }
+
+ {
+ map textures/base_wall/comp3textd.tga
+ blendfunc add
+ tcmod scroll 5 .25
+ rgbGen wave inversesawtooth 0 1 0 .25
+ }
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcgen environment
+ tcmod scale .5 .5
+ blendfunc add
+ rgbgen wave triangle .5 .05 0 10
+ }
+
+ {
+ map textures/base_wall/comp3frame.tga
+ blendfunc blend
+ rgbgen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+}
+
+textures/base_wall/metalfloor_wall_14_specular
+{
+ qer_editorimage textures/base_wall/metalfloor_wall_14_specular.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/metalfloor_wall_14_specular.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/base_wall/metalfloor_wall_15ow
+{
+ {
+ map textures/base_wall/metalfloor_wall_15ow.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/hologirl.tga
+ tcmod scale 2 .4
+ tcmod scroll 6 .6
+ //tcMod turb 0 .1 0 .01
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+
+ }
+ {
+ map textures/base_wall/metalfloor_wall_15ow.tga
+ blendfunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ //blendfunc dst_color gl_zero
+ }
+
+}
+
+textures/base_wall/metaltechgeomtrn
+{
+
+
+ {
+ map textures/sfx/fire_ctfblue.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/metaltechgeomtrn.tga
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/metaltechgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/base_wall/metaltechgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/base_wall/patch10shiny
+{
+ qer_editorimage textures/base_wall/patch10_beatup4_alpha.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/patch10_beatup4_alpha.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/patch10shiny_trans
+{
+ qer_editorimage textures/base_wall/patch10_beatup4_alpha.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/patch10_beatup4_alpha.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/protobanner
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm trans
+ surfaceparm nomarks
+ tessSize 64
+ deformVertexes wave 30 sin 0 3 0 .2
+ deformVertexes wave 100 sin 0 3 0 .7
+
+ {
+ map textures/base_wall/protobanner.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_wall/protobanner_ow
+{
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm trans
+ surfaceparm nomarks
+ deformVertexes wave 100 sin 0 1 0 .1
+ deformVertexes wave 100 sin 0 1 0 .2
+
+ {
+ map textures/base_wall/protobanner_ow.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_wall/protobanner_still
+{
+ qer_editorimage textures/base_wall/protobanner.tga
+ cull disable
+ surfaceparm alphashadow
+ surfaceparm trans
+ surfaceparm nomarks
+ tessSize 64
+ //deformVertexes wave 30 sin 0 3 0 .2
+ //deformVertexes wave 100 sin 0 3 0 .7
+
+ {
+ map textures/base_wall/protobanner.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc filter
+ depthFunc equal
+ }
+
+
+}
+
+textures/base_wall/q3tourneyscreen
+{
+ qer_editorimage textures/base_wall/q3tourney1.tga
+ q3map_surfacelight 100
+
+
+
+ {
+ animMap .25 textures/base_wall/q3tourney1.tga textures/base_wall/q3tourney2.tga textures/base_wall/q3tourney3.tga textures/base_wall/q3tourney4.tga textures/base_wall/q3tourney5.tga
+ rgbGen wave sawtooth 0 1 0 .25
+
+ }
+
+ {
+ map textures/base_wall/comp3textd.tga
+ blendfunc add
+ rgbGen wave inversesawtooth 0 1 0 .25
+ tcmod scroll 5 .25
+ }
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcgen environment
+ tcmod scale .5 .5
+ blendfunc add
+ rgbgen wave triangle .5 .05 0 10
+ }
+
+ {
+ map textures/base_wall/comp3frame.tga
+ blendfunc blend
+ rgbgen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+}
+
+textures/base_wall/shinybluemetal1
+{
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/shinybluemetal1.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/shinygrate1_4
+{
+
+ {
+ map $lightmap
+ tcgen environment
+ tcmod scale .25 .25
+ rgbgen identity
+ }
+
+
+ {
+ map textures/base_wall/shinygrate1_4.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+
+}
+
+textures/base_wall/steed1gf
+{
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/steed1gf.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/base_wall/symbol_bluelt1
+{
+ q3map_lightimage textures/base_wall/symbol_bluelt1_mask.tga
+ q3map_surfacelight 100
+// light 1
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/symbol_bluelt1.tga
+ blendfunc filter
+ rgbgen identity
+ }
+
+ {
+ map textures/base_wall/symbol_bluelt1_mask.tga
+ blendfunc add
+ rgbgen wave sawtooth .2 .05 0 7
+ }
+}
+
+textures/base_wall/train1
+{
+
+ {
+ map textures/base_wall/chrome_env.tga
+ tcGen environment
+ tcmod scale .25 .1
+ rgbGen identity
+ }
+
+
+ {
+ map textures/base_wall/train1.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbgen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/common.shader b/install/installs/Q3Pack/install/baseq3/scripts/common.shader
new file mode 100644
index 0000000..1cd1fe4
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/common.shader
@@ -0,0 +1,321 @@
+
+textures/common/areaportal
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm structural
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm areaportal
+}
+
+textures/common/caulk
+{
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+}
+
+textures/common/clip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm playerclip
+}
+
+textures/common/clusterportal
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm clusterportal
+}
+
+textures/common/cushion
+{
+ qer_nocarve
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nodamage
+}
+
+textures/common/donotenter
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm donotenter
+}
+
+
+// never used
+//
+//textures/common/energypad
+//{
+// qer_editorimage textures/sfx/bluegoal.tga
+// surfaceparm nolightmap
+// cull twosided
+// {
+// map textures//bluegoal.tga
+// blendFunc GL_ONE GL_SRC_ALPHA
+// tcGen environment
+// tcMod turb 0 0.25 0 0.05
+// }
+//}
+
+textures/common/full_clip // silly shader, use weapclip instead
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm playerclip
+}
+
+textures/common/hint // should NOT use surfaceparm hint.. strange but true
+{
+ qer_nocarve
+ qer_trans 0.30
+ surfaceparm nodraw
+ surfaceparm nonsolid
+ surfaceparm structural
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm hint // ydnar: yes it should.
+}
+
+textures/common/invisible // solid, transparent polygons, casts shadows
+{
+ surfaceparm nolightmap
+ {
+ map textures/common/invisible.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+textures/common/mirror1
+{
+ qer_editorimage textures/common/mirror1.tga
+ surfaceparm nolightmap
+ portal
+
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+
+
+
+}
+
+textures/common/mirror2
+{
+ qer_editorimage textures/common/qer_mirror.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+ {
+ map textures/sfx/mirror.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ }
+
+}
+
+textures/common/missileclip
+{
+ qer_trans 0.40
+ surfaceparm nodamage
+ surfaceparm nomarks
+ surfaceparm nodraw
+ //surfaceparm nonsolid
+ surfaceparm playerclip
+ surfaceparm trans
+}
+
+textures/common/nodraw
+{
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+}
+
+textures/common/nodrawnonsolid
+{
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ surfaceparm nodraw
+}
+
+textures/common/nodrop
+{
+ qer_nocarve
+ qer_trans 0.5
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nodrop
+}
+
+
+textures/common/noimpact
+{
+ qer_editorimage textures/common/nolightmap.tga
+ surfaceparm noimpact
+}
+
+textures/common/nolightmap
+{
+ surfaceparm nolightmap
+}
+
+textures/common/origin
+{
+ qer_nocarve
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm origin
+}
+
+textures/common/portal
+{
+ qer_editorimage textures/common/qer_portal.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ tcMod turb 0 0.25 0 0.05
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+
+ }
+}
+
+textures/common/slick
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+ surfaceparm trans
+ surfaceparm slick
+}
+
+textures/common/terrain
+{
+ q3map_terrain
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+}
+
+textures/common/terrain2
+{
+ q3map_terrain
+ qer_editorimage textures/common/terrain.tga
+ surfaceparm dust
+ surfaceparm nodraw
+ surfaceparm nomarks
+ surfaceparm nolightmap
+}
+
+textures/common/timportal
+{
+ qer_editorimage textures/common/qer_portal.tga
+ portal
+ surfaceparm nolightmap
+ {
+ map textures/common/portal.tga
+ tcMod turb 0 0.25 0 0.05
+ blendFunc GL_ONE GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/common/trigger
+{
+ qer_trans 0.50
+ qer_nocarve
+ surfaceparm nodraw
+}
+
+textures/common/weapclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+}
+
+textures/common/metalclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm playerclip
+ surfaceparm metalsteps
+}
+
+textures/common/botclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm botclip
+}
+
+//
+// ydnar q3map lightgrid bounds
+//
+// the min/max bounds of brushes with this shader in a map
+// will define the bounds of the map's lightgrid (model lighting)
+// note: make it as small as possible around player space
+// to minimize bsp size and compile time
+//
+
+textures/common/lightgrid
+{
+ qer_trans 0.5
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm detail
+ surfaceparm nomarks
+ surfaceparm trans
+ surfaceparm lightgrid
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/ctf.shader b/install/installs/Q3Pack/install/baseq3/scripts/ctf.shader
new file mode 100644
index 0000000..6a28038
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/ctf.shader
@@ -0,0 +1,577 @@
+
+textures/ctf/blue_telep
+{
+ cull disable
+ surfaceparm nomarks
+ surfaceparm trans
+ sort additive
+
+ {
+
+ clampmap textures/ctf/blue_telep.tga
+ blendFunc add
+ //depthWrite
+ //tcMod stretch sin .9 0.1 0 .5
+ tcmod rotate 327
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/blue_telep2.tga
+ blendFunc add
+ //depthWrite
+ //tcMod stretch sin .9 0.1 0 .1
+ tcmod rotate -211
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/telep.tga
+ alphaFunc GE128
+ depthWrite
+ tcmod rotate 20
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/telep.tga
+ alphaFunc GE128
+ depthWrite
+ tcMod stretch sin .7 0 0 0
+ tcmod rotate -20
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+
+
+
+}
+
+textures/ctf/ctf_arch_b_shiny
+{
+ qer_editorimage textures/ctf/ctf_arch_b.tga
+ {
+ map textures/ctf/ctf_arch_b.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod scale 10 10
+ rgbGen identity
+ }
+ {
+ map textures/ctf/ctf_arch_b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/ctf_arch_r_shiny
+{
+ qer_editorimage textures/ctf/ctf_arch_r.tga
+ {
+ map textures/ctf/ctf_arch_r.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod scale 10 10
+ rgbGen identity
+ }
+ {
+ map textures/ctf/ctf_arch_r.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/ctf_blueflag
+{
+ tessSize 64
+ deformVertexes wave 194 sin 0 3 0 .4
+ deformVertexes normal .5 .1
+ surfaceparm nomarks
+ cull none
+
+ {
+ map textures/ctf/ctf_blueflag.tga
+ rgbGen identity
+ }
+ {
+ map textures/effects/redflagmap.tga
+ tcGen environment
+ tcmod scale 9 3
+ tcmod scroll .1 .7
+
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/ctf/ctf_blueflag.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+ {
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/ctf/ctf_redflag
+{
+ tessSize 64
+ deformVertexes wave 194 sin 0 3 0 .4
+ deformVertexes normal .3 .2
+ surfaceparm nomarks
+ cull none
+
+ {
+ map textures/ctf/ctf_redflag.tga
+ rgbGen identity
+ }
+ {
+ map textures/effects/blueflagmap.tga
+ tcGen environment
+ tcmod scale 9 3
+ tcmod scroll .1 .7
+
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/ctf/ctf_redflag.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+ {
+
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/ctf/ctf_tower_bluefin_shiny
+{
+qer_editorimage textures/ctf/ctf_tower_bluefin.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/ctf_tower_bluefin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/ctf_tower_redfin_shiny
+{
+qer_editorimage textures/ctf/ctf_tower_redfin.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/ctf_tower_redfin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/killblockctf_b
+{
+ qer_editorimage textures/gothic_block/killblockgeomtrn.tga
+
+ {
+ map textures/sfx/fire_ctfblue.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/killblockgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/ctf/killblockctf_r
+{
+ qer_editorimage textures/gothic_block/blocks15cgeomtrn.tga
+
+ {
+ map textures/sfx/fire_ctfred.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks15cgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/ctf/metalbase09_bluekillblock_shiny
+{
+qer_editorimage textures/ctf/metalbase09_bluekillblock.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/metalbase09_bluekillblock.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/red_scary4_cfin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/red_scary4_cfin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/red_scary4_csansfacefin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/red_scary4_csansfacefin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/red_scary4_d3fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/red_scary4_d3fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/red_telep
+{
+ cull disable
+ surfaceparm nomarks
+ surfaceparm trans
+
+ {
+
+ clampmap textures/ctf/red_telep.tga
+ blendFunc add
+ //tcMod stretch sin .9 0.1 0 .5
+ tcmod rotate 327
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/red_telep2.tga
+ blendFunc add
+ //tcMod stretch sin .9 0.1 0 .1
+ tcmod rotate -211
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/telep.tga
+ alphaFunc GE128
+ tcmod rotate 20
+ rgbGen identity
+ }
+ {
+ clampmap textures/ctf/telep.tga
+ alphaFunc GE128
+ tcMod stretch sin .7 0 0 0
+ tcmod rotate -20
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+
+
+
+}
+
+textures/ctf/tallblue_1L_fin_shiny
+{
+qer_editorimage textures/ctf/tallblue_1L_fin.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_1L_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_1R_fin_shiny
+{
+qer_editorimage textures/ctf/tallblue_1R_fin.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_1R_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_2_fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_2_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_2b_fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_2b_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_4bsmall_fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_4bsmall_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_4c_fin_shiny
+{
+qer_editorimage textures/ctf/tallblue_4c_fin.tga
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_4c_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/tallblue_5esmallb_fin
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/ctf/tallblue_5esmallb_fin.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/ctf/test2_r_trans
+{
+ qer_editorimage textures/ctf/test2_r.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/ctf/test2_r.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/ctf/test2_trans
+{
+ qer_editorimage textures/ctf/test2.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/ctf/test2.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/default_project.proj b/install/installs/Q3Pack/install/baseq3/scripts/default_project.proj
new file mode 100644
index 0000000..42ccdb4
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/default_project.proj
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/default_shaderlist.txt b/install/installs/Q3Pack/install/baseq3/scripts/default_shaderlist.txt
new file mode 100644
index 0000000..04ad521
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/default_shaderlist.txt
@@ -0,0 +1,47 @@
+//**********************************************************************//
+// shaderlist.txt modified for Q3Radiant //
+// by Eutectic - 13 May 2000 //
+// //
+// Rev history: //
+// 08/11/2000
+// TTimo - changed liquid to liquids and sky to skies for better //
+// consistency with the directories and actual shader names //
+// //
+// Added the names of the new shader files created as a result //
+// of the cleanup of the old shader files so Q3Radiant will read //
+// and display all the shaders in the texture window. //
+// //
+// SHADER FILE NAMES ADDED: //
+// base_door //
+// gothic_button //
+// gothic_door //
+//**********************************************************************//
+
+// this file lists all the separate shader files
+base_button
+base_door
+base_floor
+base_light
+base_object
+base_support
+base_trim
+base_wall
+common
+ctf
+//eerie
+//gfx
+//hell
+gothic_block
+gothic_button
+gothic_door
+gothic_floor
+gothic_light
+gothic_trim
+gothic_wall
+liquids
+//menu
+//models
+organics
+sfx
+skin
+skies
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/entities.def b/install/installs/Q3Pack/install/baseq3/scripts/entities.def
new file mode 100644
index 0000000..ed7260c
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/entities.def
@@ -0,0 +1,1747 @@
+// Quake3 Arena entity definition file for Q3Radiant
+// Based on draft by Suicide 20 7.30.99 and inolen 9-3-99
+// Upgraded by Eutectic: eutectic@ritualistic.com
+// (visible models added by raYGunn - paths provided by Suicide 20)
+// (terrain information added to func_group entity by Paul Jaquays)
+// Q3Map2 entitys/keys added by ydnar
+// Version: 1.6
+// Last updated: 2003-11-28
+
+//=============================================================================
+
+// Q3Map2 entities
+
+//=============================================================================
+
+/*QUAKED _decal (0 1.0 0) ?
+-------- KEYS --------
+"target" : the name of the entity targetted at for projection
+-------- SPAWNFLAGS --------
+(none)
+-------- NOTES --------
+Compiler-only entity that specifies a decal to be projected. Should contain 1 or more patch meshes (curves) and target an info_null entity. The distance between the center of the _decal entity and the target is the axis and distance of projection.
+*/
+
+/*QUAKED _skybox (0.77 0.88 1.0) (-4 -4 -4) (4 4 4)
+-------- KEYS --------
+"angle" : rotation angle of the sky surfaces.
+"angles" : Individual control of PITCH, YAW, and ROLL (default 0 0 0).
+"_scale" : scaling factor (default 64), good values are between 50 and 300, depending on the map.
+-------- SPAWNFLAGS --------
+(none)
+-------- NOTES --------
+Compiler-only entity that specifies a the origin of a skybox (a wholly contained, seperate area of the map), similar to some games' portal skies. When compiled with Q3Map2, the skybox surfaces will be visible from any place where sky is normally visible. It will cast shadows on the normal parts of the map, and can be used with cloud layers and other effects.
+*/
+
+
+//=============================================================================
+
+AMMO_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED ammo_bfg (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+BFG ammo. Gives the player 15 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 15).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/bfgam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_bullets (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Machine Gun ammo. Gives the player 50 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/machinegunam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_cells (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Plasma Gun ammo. Gives the player 30 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/plasmaam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_grenades (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Grenade Launcher ammo. Gives the player 5 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/grenadeam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_lightning (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Lightning Gun ammo. Gives the player 60 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 60).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/lightningam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_rockets (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Rocket Launcher ammo. Gives the player 5 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/rocketam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_shells (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Shotgun ammo. Gives the player 10 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/shotgunam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_slugs (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Railgun ammo. Gives the player 10 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/railgunam.md3"*/
+
+//=============================================================================
+
+FUNC_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED func_bobbing (0 .5 .8) ? X_AXIS Y_AXIS
+Solid entity that oscillates back and forth in a linear motion. By default, it will have an amount of displacement in either direction equal to the dimension of the brush in the axis in which it's bobbing. Entity bobs on the Z axis (up-down) by default. It can also emit sound if the "noise" key is set. Will crush the player when blocked.
+-------- KEYS --------
+speed : amount of time in seconds for one complete oscillation cycle (default 4).
+height : sets the amount of travel of the oscillation movement (default 32).
+phase : sets the start offset of the oscillation cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav - See Notes).
+model2 : path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
+origin : alternate method of setting XYZ origin of sound and .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+X_AXIS : entity will bob along the X axis.
+Y_AXIS : entity will bob along the Y axis.
+-------- NOTES --------
+In order for the sound to be emitted from the entity, it is recommended to include a brush with an origin shader at its center, otherwise the sound will not follow the entity as it moves. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_button (0 .5 .8) ?
+When a button is touched by a player, it moves in the direction set by the "angle" key, triggers all its targets, stays pressed by an amount of time set by the "wait" key, then returns to it's original position where it can be operated again.
+-------- KEYS --------
+angle : determines the direction in which the button will move (up = -1, down = -2).
+target : all entities with a matching targetname will be triggered.
+speed : speed of button's displacement (default 40).
+wait : number of seconds button stays pressed (default 1, -1 = return immediately).
+lip : lip remaining at end of move (default 4 units).
+health : (default 0) if set to any non-zero value, the button must take damage (any amount) to activate.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_door (0 .5 .8) ? START_OPEN - CRUSHER
+Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted to it.
+-------- KEYS --------
+angle : determines the opening direction of door (up = -1, down = -2).
+speed : determines how fast the door moves (default 100).
+wait : number of seconds before door returns (default 2, -1 = return immediately)
+lip : lip remaining at end of move (default 8)
+targetname : if set, a func_button or trigger is required to activate the door.
+health : (default 0) if set to any non-zero value, the button must take damage (any amount) to activate.
+dmg : damage to inflict on player when he blocks operation of door (default 4). Door will reverse direction when blocked unless CRUSHER spawnflag is set.
+team: assign the same team name to multiple doors that should operate together (see Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+START_OPEN : the door will spawn in the open state and operate in reverse.
+CRUSHER : door will not reverse direction when blocked and will keep damaging player until he dies or gets out of the way.
+-------- NOTES --------
+Unlike in Quake 2, doors that touch are NOT automatically teamed. If you want doors to operate together, you have to team them manually by assigning the same team name to all of them. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_group (0 .5 .8) ?
+This is not an entity as such. It is strictly an editor utility to group world brushes and patches together for convenience (selecting, moving, copying, etc). You cannot group entities with this.
+-------- OLD TERRAIN KEYS (note: obsolete with Q3Map2) --------
+alphamap : this is the path/name for the art file used to guide the mapping of textures on the terrain surface.
+layers : this integer value is the number unique root shaders that will be use on the terrain.
+shader : this is the path to the metashader used to assign textures to the terrain entity.
+terrain : this is an on/off flag. When set to 1, the entity becomes a terrain entity. Note: unecessary when compiling with Q3Map2. See Q3Map2 keys.
+-------- Q3MAP2 KEYS --------
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+The TAB key can be used to flip through the component pieces of a selected func_group entity, isolating individual components. To make a func_group into a terrain entity, refer to the Terrain Construction documentation.*/
+
+//=============================================================================
+
+/*QUAKED func_pendulum (0 .5 .8) ?
+Solid entity that describes a pendulum back and forth rotation movement. Rotates on the X axis by default. Pendulum frequency is a physical constant based on the length of the beam and gravity. Blocking the pendulum instantly kills a player.
+-------- KEYS --------
+angle : angle offset of axis of rotation from default X axis (default 0).
+speed : angle of swing arc in either direction from initial position (default 30).
+phase : sets the start offset of the swinging cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
+model2 : path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
+origin : alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. Pendulum will rotate along the X axis by default. Very crude operation: pendulum cannot rotate along Z axis, the speed of swing (frequency) is not adjustable. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_plat (0 .5 .8) ?
+Rising platform the player can ride to reach higher places. Plats must always be drawn in the raised position, so they will operate and be lighted correctly but they spawn in the lowered position. The plat will stay in the raised position until the player steps off. There are no proper sounds for this entity, only beep noises. It will spawn in the game and work properly but it sounds silly (see Notes).
+-------- KEYS --------
+speed : determines how fast the plat moves (default 150).
+lip : lip remaining at end of move (default 16). Has no effect if "height" is set.
+height : if set, this will determine the total amount of vertical travel of the plat.
+dmg : damage to inflict on player when he blocks operation of plat (default 4). Plat will reverse direction when blocked.
+targetname : if set, the trigger that points to this will raise the plat each time it fires. The plat raises and comes back down a second later if no player is on it.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+By default, the total amount of vertical travel of a platform is implicitly determined by the overall vertical size of the brushes of which it's made minus the lip value. But if the "height" key is used, then the total amount of vertical travel of the plat will be exactly that value regardless of the shape and size of the plat and regardless of the value of the "lip" key. Using the "height" key is the best method for any kind of platforms and the only possible one for thin plats which need to travel vertical distances many times their own thickness. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+There is a way to make plats play proper sounds. Just create a sound\movers\plats folder under baseq3 and put 2 sounds named pt1_strt.wav and pt1_end.wav in it. Those can be the renamed sounds from the Q2 plats or renamed copies of the sound\movers\doors sounds you can extract from your pak0.pk3 file or new custom sounds if you're up to it. Thanks to Fragzilla for the tip.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_rotating (0 .5 .8) ? - - X_AXIS Y_AXIS
+Solid entity that rotates continuously. Rotates on the Z axis by default and requires an origin brush. It will always start on in the game and is not targetable.
+-------- KEYS --------
+speed : determines how fast entity rotates (default 100).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
+model2 : path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
+origin : alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+X_AXIS : entity will rotate along the X axis.
+Y_AXIS : entity will rotate along the Y axis.
+-------- NOTES --------
+You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. It will rotate along the Z axis by default. You can check either the X_AXIS or Y_AXIS box to change that. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_static (0 .5 .8) ?
+Static non-solid bspmodel. Can be used for conditional walls and models.
+-------- KEYS --------
+model2 : path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+targetname : NOT SUPPORTED BY RENDERER - if set, a func_button or trigger can make entity disappear from the game (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. If a model is included with a targeted func_static, the brush(es) of the entity will be removed from the game but the .md3 model won't: it will automatically be moved to the (0 0 0) world origin so you should NOT include an .md3 model to a targeted func_static.
+
+Because the map has only a single bot navigation file, func_static's cannot be used to make significant changes in game play flow between differing game types.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_timer (0 .5 .8) (-8 -8 -8) (8 8 8) START_ON
+Time delay trigger that will continuously fire its targets after a preset time delay. The time delay can also be randomized. When triggered, the timer will toggle on/off.
+-------- KEYS --------
+wait : delay in seconds between each triggering of its targets (default 1).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+target : this points to the entities to trigger.
+targetname : a func_button or trigger that points to this will toggle the timer on/off when activated.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+START_ON : timer will start on in the game and continuously fire its targets.
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED func_train (0 .5 .8) ?
+Trains are moving solids that follow a string of path_corner entities. Trains in Q3A are very basic, they also require an origin brush (see Notes).
+-------- KEYS --------
+speed : speed of displacement of train (default 100 or overridden by speed value of path).
+target : this points to the first path_corner of the path which is also the spawn location of the train's origin.
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of the train's brush(es) and .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+1. Trains always start on in the game.
+2. Trains do not damage the played when blocked.
+3. Trains cannot emit sound.
+4. Trains are not triggerable or toggle-able.
+5. Trains cannot be block-stopped just by getting in their way, the player must be wedged between the train and another obstacle to block it.
+
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+HOLDABLE_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED holdable_medkit (.7 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Medkit that can be picked up and used later. Brings the player's health back to 100 when used. Player can only carry one holdable item at a time.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/holdable/medkit.md3"*/
+
+//=============================================================================
+
+/*QUAKED holdable_teleporter (.7 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Teleporter item that can be picked up and used later. Teleports the player to a random player spawn point when used. Player can only carry one holdable item at a time.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/holdable/teleporter.md3"*/
+
+//=============================================================================
+
+INFO_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED info_camp (0 .5 0) (-8 -8 -8) (8 8 8)
+This atttracts bots which have a camping preference in their AI characteristics. It should be placed at least 32 units away from any brush surface.
+-------- KEYS --------
+range : number of units that the bot can move away from camp entity while camping on it.
+weight : number that is compared against the weight assigned to all the other camp spots in the map to determine if a bot chooses to camp there. The value is normalized against all other weight values.
+-------- NOTES --------
+Examples of bots which have a high camping preference are: Razor, Tank Jr., Grunt, Patriot and Doom. Examples of bots which have a low camping preference are: Klesk, Mynx, Sarge, Keel and Xaero.*/
+
+//=============================================================================
+
+/*QUAKED info_notnull (0 .5 0) (-8 -8 -8) (8 8 8)
+Used as a positional target for entities that can use directional pointing. A target_position can be used instead of this but was kept in Q3A for legacy purposes.
+-------- KEYS --------
+targetname : must match the target key of entity that uses this for pointing.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED info_null (0 .5 0) (-8 -8 -8) (8 8 8)
+Used as a positional target for light entities to create a spotlight effect. A target_position can be used instead of this but was kept in Q3A for legacy purposes.
+-------- KEYS --------
+targetname : must match the target key of entity that uses this for pointing.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED info_player_deathmatch (1 0 1) (-16 -16 -24) (16 16 32) INITIAL
+Normal player spawning location for Q3A levels.
+-------- KEYS --------
+angle : direction in which player will look when spawning in the game. Does not apply to bots.
+target : this can point at a target_give entity for respawn freebies.
+nobots : when set to 1, bots will never use this spawn point to respawn in the game.
+nohumans : when set to 1, human players will never use this spawn point to respawn in the game.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+INITIAL : makes the spawnpoint the initial place for the player to spawn at the beginning of the game.*/
+
+//=============================================================================
+
+/*QUAKED info_player_intermission (1 0 1) (-16 -16 -16) (16 16 16)
+Camera for intermission screen between matches. This also automatically generates the podium for bot arena matches (see Notes). Can be aimed by setting the "angles" key or targeting an pointing to an aiming entity. Use only one per level.
+-------- KEYS --------
+angles: alternate "pitch, yaw, roll" angles method of aiming intermission camera (default 0 0 0).
+target : point this to an info_notnull or target_position entity to set the camera's pointing angles.
+-------- NOTES --------
+In genuine bot arena matches, the podium for the 1st, 2nd and 3rd place players at the end of the match is generated by this entity. The podium's origin will automatically be located 128 units in the direction of the camera's view and 84 units down from the y height of the view line at that point. It will also always be generated on a level plane regardless of the pointing angle of the camera so if that angle is too steep, part of the podium model might not be visible. Make sure you leave at least 106 units of free space in front of where the camera points to otherwise the podium model won't be visible at all.*/
+
+//=============================================================================
+
+/*QUAKED info_player_start (1 0 0) (-16 -16 -24) (16 16 32)
+Player spawn location. It works in Quake III Arena, but it is not used in the Id maps. Use info_player_deathmatch instead.
+-------- KEYS --------
+angle : direction in which player will look when spawning in the game.
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+//QUAKED info_spectator_start (1 0 0) (-16 -16 -24) (16 16 32)
+//Spectator spawn location. Doesn't appear to work in game. Commented out.
+//-------- KEYS --------
+//notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+//notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+//notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+
+//=============================================================================
+
+ITEM_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED item_armor_body (.6 0 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Red Armor - 100 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/armor_red.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_armor_combat (1 .75 .3) (-16 -16 -16) (16 16 16) SUSPENDED
+Yellow Armor - 50 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/armor_yel.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_armor_shard (0 .7 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Green Armor Shard - 5 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/shard.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_botroam (1 0.5 0) (-8 -8 -8) (8 8 8) SUSPENDED
+Game Function: An invisible entity which attracts a bot to it. Use to move bots to parts of a map that might otherwise not be used (NEW ENTITY).
+-------- KEYS --------
+weight: non-zero floating point value, most often in the range 0 to 400. (Higher values are allowed but keep in mind that the bot should also be attracted to normal items. Don't make the weight value too high.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The item_botroam entity can be used when a bot does not roam the whole level or prefers to go to only specific areas. This (invisible) item can be placed in a map just like regular items. Nobody can actually pick up the item it's only used to attract bots to certain places of the map. The value is the weight of the roam_item is relative to the weight assigned other items in the map (each bot has its own weights). The bot character specific item weights are stored with the bot characters AI files ("botname"_i.c for items and "botname"_w.c for weapons) in the botfiles/bots/ sub-folder in the .pk3 file.*/
+
+//=============================================================================
+
+/*QUAKED item_enviro (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Battle Suit power-up - Gives protection against slime, lava and weapon splash damage. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/enviro.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_flight (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Flight power-up. Lasts 60 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 60).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/flight.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_haste (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Speed power-up. Makes player run at double speed for 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/haste.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health (.8 .8 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Yellow cross bubble - 25 Health. Cannot be picked up over 100 health.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 25).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/medium_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_large (1 0 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Gold cross bubble - 50 Health. Cannot be picked up over 100 health.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/large_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_mega (0 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Blue M bubble - 100 Health. Adds 100 health points to current health up to a maximum of 200.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/mega_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_small (0 1 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Green cross bubble - 5 Health. Can be picked up over 100 health but slowly wears out to 100 afterwards.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/small_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_invis (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Invisibility power-up. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/invis.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_quad (.4 .6 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Quad Damage power-up. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+model="models/powerups/instant/quad.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_regen (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Health Regeneration power-up. This will boost your current health by 5 points every second for a period of up to 30 seconds or up to 200 points whichever comes first. Afterwards, any health points over 100 slowly wears out to 100.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/regen.md3"*/
+
+//=============================================================================
+
+LIGHT ENTITY
+
+//=============================================================================
+
+
+/*QUAKED light (.65 .65 1) (-8 -8 -8) (8 8 8) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT
+Non-displayed point light source. The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights.
+-------- KEYS --------
+_light OR light: overrides the default 300 intensity.
+_color : weighted RGB value of light color (default white - 1.0 1.0 1.0).
+target : Lights pointed at a target will be spotlights.
+radius: overrides the default 64 unit radius of a spotlight at the target point.
+-------- Q3MAP2 KEYS --------
+_sun : Set this key to 1 on a spotlight to make an infinite sun light.
+fade : Fades light attenuation. Only affects linear lights.
+scale : Scales light attentation, from SOF2/JK2. Scales the "light" value.
+-------- SPAWNFLAGS --------
+LINEAR : Use a linear falloff. Default is inverse distance squared (more realistic).
+NOANGLE : Ignore angle attenuation.
+NOGRIDLIGHT : Do not affect the lightgrid (dynamic entity lighting).*/
+
+/*QUAKED lightJunior (0 0.7 0.3) (-6 -6 -6) (6 6 6) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT
+Non-displayed point light source THAT ONLY AFFECTS ENTITIES (lightgrid). The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights.
+-------- KEYS --------
+_light OR light: overrides the default 300 intensity.
+_color : weighted RGB value of light color (default white - 1.0 1.0 1.0).
+target : Lights pointed at a target will be spotlights.
+radius: overrides the default 64 unit radius of a spotlight at the target point.
+-------- Q3MAP2 KEYS --------
+_sun : Set this key to 1 on a spotlight to make an infinite sun light.
+fade : Fades light attenuation. Only affects linear lights.
+scale : Scales light attentation, from SOF2/JK2. Scales the "light" value.
+-------- SPAWNFLAGS --------
+LINEAR : Use a linear falloff. Default is inverse distance squared (more realistic).
+NOANGLE : Ignore angle attenuation.
+NOGRIDLIGHT : Do not affect the lightgrid (dynamic entity lighting). Setting this spawnflag will disable this light entirely.*/
+
+//=============================================================================
+
+MISC_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED misc_model (1 .5 .25) (-16 -16 -16) (16 16 16)
+Generic placeholder for inserting MD3 models in game. Requires compilation of map geometry to be added to level. If the map is compiled with Q3Map2, then ASE, 3DS, OBJ and other model formats are supported.
+-------- KEYS --------
+angle: direction in which model will be oriented.
+model : path/name of model to use (eg: models/mapobjects/teleporter/teleporter.md3).
+-------- Q3MAP2 KEYS --------
+angles : Individual control of PITCH, YAW, and ROLL (default 0 0 0).
+modelscale : Floating-point value used to scale a model up or down (default 1.0).
+modelscale_vec : Floating-point vector used to scale a model's axes individually (default 1.0 1.0 1.0).
+_remap : Used to remap textures/shaders in the model. To remap all shaders to a given shader, use "*;models/mymodel/mytexture". To remap a specific shader, use "models/mymodel/old;models/mymodel/new".
+target : Used to attach the misc_model to a brush entity, where its "targetname" key is the same value.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on this model (if model is using lightmapped shaders) (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+*/
+
+//=============================================================================
+
+/*QUAKED misc_portal_camera (1 .5 .25) (-8 -8 -8) (8 8 8) SLOWROTATE FASTROTATE
+Portal camera. This camera is used to project its view onto a portal surface in the level through the intermediary of a misc_portal_surface entity. Use the "angles" key or target a target_position or info_notnull entity to set the camera's pointing direction.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of the portal camera (default 0 0). Use "roll" key to set roll angle.
+target : point this to a target_position entity to set the camera's pointing direction.
+targetname : a misc_portal_surface portal surface indicator must point to this.
+roll: roll angle of camera. A value of 0 is upside down and 180 is the same as the player's view.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+SLOWROTATE : makes the portal camera rotate slowly along the roll axis.
+FASTROTATE : makes the portal camera rotate faster along the roll axis.
+-------- NOTES --------
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the camera. However, the target_position method is simpler. In both cases, the "roll" key must be used to set the roll angle. If either the SLOWROTATE or FASTROTATE spawnflag is set, then the "roll" value is irrelevant.*/
+
+//=============================================================================
+
+/*QUAKED misc_portal_surface (1 .5 .25) (-8 -8 -8) (8 8 8)
+Portal surface indicator. This will "lock on" the brush face closest to it and identify as a portal. The view displayed on the portal surface is the view of the misc_portal_camera that this entity targets. Also used for mirrors (see Notes).
+-------- KEYS --------
+target : point this to a misc_portal_camera that "sees" the view you want to display on the portal.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+The entity must be no farther than 64 units away from the portal surface to lock onto it. To make a mirror, apply the common/mirror shader to the surface, place this entity near it but don't target a misc_portal_camera.*/
+
+//=============================================================================
+
+/*QUAKED misc_teleporter_dest (1 .5 .25) (-32 -32 -24) (32 32 -16)
+Teleport destination location point for trigger_teleporter entities.
+-------- KEYS --------
+angle : direction in which player will look when teleported.
+targetname : make the trigger_teleporter point to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+PATH_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED path_corner (.5 .3 0) (-8 -8 -8) (8 8 8)
+Path corner entity that func_trains can be made to follow.
+-------- KEYS --------
+target : point to next path_corner in the path.
+targetname : the train following the path or the previous path_corner in the path points to this.
+speed : speed of func_train while moving to the next path corner. This will override the speed value of the train.
+wait : number of seconds func_train will pause on path corner before moving to next path corner (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+Setting the wait key to -1 will not make the train stop on the path corner, it will simply default to 0.*/
+
+//=============================================================================
+
+SHOOTER_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED shooter_grenade (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a grenade each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the grenades.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+/*QUAKED shooter_plasma (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a plasma ball each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the plasma balls.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+/*QUAKED shooter_rocket (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a rocket each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the rockets.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+TARGET_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED target_delay (0 .7 .7) (-8 -8 -8) (8 8 8)
+Time delay trigger intermediary. Like a target_relay, this can only be fired by other triggers which will cause it in turn to fire its own targets.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this points to entities to activate when this entity is triggered.
+wait : delay in seconds from when this gets triggered to when it fires its own targets (default approx. 1).
+delay : same as wait? replaces it? WTF?...I'm confused now.
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED target_give (0 .5 0) (-8 -8 -8) (8 8 8)
+This is used to give ammo, weapons, health or items to the player who activates it.
+-------- KEYS --------
+target : this points to the item(s) to give when activated.
+targetname : activating trigger or spawn entity points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+There are 2 ways to use this entity.
+a) automatically give items to players when they spawn in the game: make a spawn location entity like info_player_deathmatch or CTF respawn points target this entity, then make it target the item(s) to give to the player upon respawn.
+b) give items to players during the game: make a trigger_multiple target this entity, then make it target the item(s) to give to the player when the trigger is touched.*/
+
+//=============================================================================
+
+/*QUAKED target_kill (0 .5 0) (-8 -8 -8) (8 8 8)
+This will kill the player who activates the trigger that fires this target.
+-------- KEYS --------
+targetname : the activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+//QUAKED target_laser (0 .5 0) (-8 -8 -8) (8 8 8) START_ON
+//Generates a red laser beam. I think this can somehow spawn in the game, I saw it once but it's too inconsistent to be usable. Commented out.
+//-------- KEYS --------
+//angles: alternate "pitch, yaw, roll" angles method of aiming laser (default 0 0 0).
+//target : point this to a target_position entity to set the laser's aiming direction.
+//targetname : the activating trigger points to this.
+//notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+//notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+//notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+//-------- SPAWNFLAGS --------
+//START_ON : when set, the laser will start on in the game.
+
+//=============================================================================
+
+/*QUAKED target_location (0 .5 0) (-8 -8 -8) (8 8 8)
+Location marker used by bots and players for team orders and team chat in the course of Teamplay games. The closest target_location in sight is used for the location. If none is in sight, the closest in distance is used.
+-------- KEYS --------
+message : name of the location (text string). Displayed in parentheses in front of all team chat and order messages.
+count : color of the location text displayed in parentheses during team chat. Set to 0-7 for color.
+ 0 : white (default)
+ 1 : red
+ 2 : green
+ 3 : yellow
+ 4 : blue
+ 5 : cyan
+ 6 : magenta
+ 7 : white
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_position (0 .5 0) (-8 -8 -8) (8 8 8)
+Aiming target for entities like light, misc_portal_camera and trigger_push (jump pads) in particular.
+-------- KEYS --------
+targetname : the entity that requires an aiming direction points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+To make a jump pad, place this entity at the highest point of the jump and target it with a trigger_push entity.*/
+
+//=============================================================================
+
+/*QUAKED target_print (0 .5 0) (-8 -8 -8) (8 8 8) REDTEAM BLUETEAM PRIVATE
+This will print a message on the center of the screen when triggered. By default, all the clients will see the message.
+-------- KEYS --------
+message : text string to print on screen.
+targetname : the activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+REDTEAM : only the red team players will see the message.
+BLUETEAM : only the blue team players will see the message.
+PRIVATE : only the player that activates the target will see the message.*/
+
+//=============================================================================
+
+/*QUAKED target_push (.5 .5 .5) (-8 -8 -8) (8 8 8) BOUNCEPAD
+This can be used to create jump pads and launch ramps. The direction of push can be set by the "angles" key or pointing to a target_position or info_notnull entity. Unlike trigger_push, this is NOT client side predicted and must be activated by a trigger.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of push entity (default 0 0). The roll angle does not apply.
+speed : speed of push (default 1000). Has no effect if entity targets an aiming entity.
+targetname : the activating trigger points to this. Push originates from the location of the trigger.
+target : this points to the aiming entity to which the player will jump.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+BOUNCEPAD : if set, trigger will play bounce noise instead of beep noise when activated (recommended).
+-------- NOTES --------
+To make a jump pad or launch ramp, create a trigger_multiple where the jump must originate. Place the target_push directly above the trigger_multiple and place the target_position entity at the highest point of the jump. Target the trigger_multiple to the target_push and target the target_push to the target_position/info_notnull (or set the target_push's "angles" key). Note that the "angle" key also works.*/
+
+//=============================================================================
+
+/*QUAKED target_relay (0 .7 .7) (-8 -8 -8) (8 8 8) RED_ONLY BLUE_ONLY RANDOM
+This can only be activated by other triggers which will cause it in turn to activate its own targets.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this points to entities to activate when this entity is triggered.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+RED_ONLY : only red team players can activate trigger.
+BLUE_ONLY : only red team players can activate trigger.
+RANDOM : one one of the targeted entities will be triggered at random.*/
+
+//=============================================================================
+
+/*QUAKED target_remove_powerups (0 .7 .7) (-8 -8 -8) (8 8 8)
+This takes away any and all item_* type powerups from player except health and armor (holdable_* items are not taken away either). Must be activated by a button or trigger_multiple entity. The player that activates the trigger will lose any powerup(s) currently in his possession.
+-------- KEYS --------
+targetname : activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_score (0 .5 0) (-8 -8 -8) (8 8 8)
+This is used to automatically give frag points to the player who activates this. A spawn location entity like info_player_* or CTF respawn points can target this entity to give points to the player when he spawns in the game. Or a trigger can also be used to activate this. The activator of the trigger will get the points.
+-------- KEYS --------
+targetname : ativating entity points to this.
+count: number of frag points to give to player (default 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_speaker (0 .7 .7) (-8 -8 -8) (8 8 8) LOOPED_ON LOOPED_OFF GLOBAL ACTIVATOR
+Sound generating entity that plays .wav files. Normal non-looping sounds play each time the target_speaker is triggered. Looping sounds can be set to play by themselves (no activating trigger) or be toggled on/off by a trigger.
+-------- KEYS --------
+noise : path/name of .wav file to play (eg. sound/world/growl1.wav - see Notes).
+wait : delay in seconds between each time the sound is played ("random" key must be set - see Notes).
+random : random time variance in seconds added or subtracted from "wait" delay ("wait" key must be set - see Notes).
+targetname : the activating button or trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+LOOPED_ON : sound will loop and initially start on in level (will toggle on/off when triggered).
+LOOPED_OFF : sound will loop and initially start off in level (will toggle on/off when triggered).
+GLOBAL : sound will play full volume throughout the level.
+ACTIVATOR : sound will play only for the player that activated the target.
+-------- NOTES --------
+The path portion value of the "noise" key can be replaced by the implicit folder character "*" for triggered sounds that belong to a particular player model. For example, if you want to create a "bottomless pit" in which the player screams and dies when he falls into, you would place a trigger_multiple over the floor of the pit and target a target_speaker with it. Then, you would set the "noise" key to "*falling1.wav". The * character means the current player model's sound folder. So if your current player model is Visor, * = sound/player/visor, if your current player model is Sarge, * = sound/player/sarge, etc. This cool feature provides an excellent way to create "player-specific" triggered sounds in your levels.
+
+The combination of the "wait" and "random" keys can be used to play non-looping sounds without requiring an activating trigger but both keys must be used together. The value of the "random" key is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED target_teleporter (0 .5 0) (-8 -8 -8) (8 8 8)
+Activating this will teleport players to the location of the targeted misc_teleporter_dest entity. Unlike trigger_teleport, this entity must be activated by a trigger and does NOT allow client prediction of events.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this must point to a misc_teleporter_dest entity.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+TEAM_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED team_CTF_blueflag (0 .2 1) (-16 -16 -16) (16 16 16)
+Blue team flag for CTF games.
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/flags/b_flag.md3"*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_blueplayer (0 .2 1) (-16 -16 -24) (16 16 32)
+Initial Blue team spawning position for CTF games. This is where players spawn when they join the Blue team.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_bluespawn (0 .2 1) (-16 -16 -24) (16 16 32)
+Blue team respawning position for CTF games. This is where Blue team players respawn after they get fragged.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redflag (1 .2 0) (-16 -16 -16) (16 16 16)
+Red team flag for CTF games.
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/flags/r_flag.md3"*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redplayer (1 .2 0) (-16 -16 -24) (16 16 32)
+Initial Red team spawning position for CTF games. This is where players spawn when they join the Red team.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redspawn (0 .2 1) (-16 -16 -24) (16 16 32)
+Red team respawning position for CTF games. This is where Red team players respawn after they get fragged.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+TRIGGER_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED trigger_always (.5 .5 .5) (-8 -8 -8) (8 8 8)
+Automatic trigger. It will fire the entities it targets as soon as it spawns in the game.
+-------- KEYS --------
+target : this points to the entity to activate.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED trigger_hurt (.5 .5 .5) ? START_OFF - SILENT NO_PROTECTION SLOW
+Any player that touches this will be hurt by "dmg" points of damage once per server frame (very fast). A sizzling sound is also played while the player is being hurt.
+-------- KEYS --------
+dmg : number of points of damage inflicted to player per server frame (default 5 - integer values only).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+START_OFF needs to be triggered (toggle) for damage
+SILENT : supresses the sizzling sound while player is being hurt.
+NO_PROTECTION : player will be hurt regardless of protection (see Notes).
+SLOW : changes the damage rate to once per second.
+-------- NOTES --------
+The invulnerability power-up (item_enviro) does not protect the player from damage caused by this entity regardless of whether the NO_PROTECTION spawnflag is set or not. Triggering a trigger_hurt will have no effect if the START_OFF spawnflag is not set. A trigger_hurt always starts on in the game.*/
+
+//=============================================================================
+
+/*QUAKED trigger_multiple (.5 .5 .5) ?
+Variable size repeatable trigger. It will fire the entities it targets when touched by player. Can be made to operate like a trigger_once entity by setting the "wait" key to -1. It can also be activated by another trigger that targets it.
+-------- KEYS --------
+target : this points to the entity to activate.
+targetname : activating trigger points to this.
+wait : time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED trigger_push (.5 .5 .5) ?
+This is used to create jump pads and launch ramps. It MUST point to a target_position or info_notnull entity to work. Unlike target_push, this is client side predicted.
+-------- KEYS --------
+target : this points to the target_position to which the player will jump.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+To make a jump pad or launch ramp, place the target_position/info_notnull entity at the highest point of the jump and target it with this entity.*/
+
+//=============================================================================
+
+/*QUAKED trigger_teleport (.5 .5 .5) ?
+Touching this will teleport players to the location of the targeted misc_teleporter_dest entity. This entity allows client prediction of events.
+-------- KEYS --------
+target : this must point to a misc_teleporter_dest entity.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+WEAPON_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED weapon_bfg (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Big Freaking Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 20).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/bfg/bfg.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_gauntlet (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Gauntlet.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/gauntlet/gauntlet.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_grapplinghook (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Grappling Hook. Spawns in the game and works but is unskinned.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/grapple/grapple.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_grenadelauncher (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Grenade Launcher.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/grenadel/grenadel.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_lightning (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Lightning Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models\weapons2\lightning\lightning.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_machinegun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Machine Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models\weapons2\machinegun\machinegun.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_plasmagun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Plasma gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/plasma/plasma.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_railgun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Railgun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/railgun/railgun.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_rocketlauncher (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Rocket Launcher.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/rocketl/rocketl.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_shotgun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Shotgun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/shotgun/shotgun.md3"*/
+
+//=============================================================================
+
+WORLDSPAWN ENTITY
+
+//=============================================================================
+
+/*QUAKED worldspawn (0 0 0) ?
+Only used for the world.
+-------- KEYS --------
+message : text to print at user logon. Used for name of level.
+music : path/name of looping .wav file used for level's music (eg. music/sonic5.wav).
+_ambient OR ambient : Adds a constant value to overall lighting. Use is not recommended. Ambient light will have a tendency to flatten out variations in light and shade.
+_color : RGB value for ambient light color (default is 0 0 0).
+gravity : gravity of level (default is normal gravity: 800).
+gridsize : granularity of the lightgrid created by q3map. Value is three integers separated by spaces, representing number of units between grid points in X Y Z. Default gridsize value is 128 128 256. Use larger powers of 2 to reduce BSP size and compile time on very large maps.
+_blocksize : q3map always splits the BSP tree along the planes X=_blocksize*n and Y=_blocksize*n. Default _blocksize value is 1024. Increase the blocksize using larger powers of 2 to reduce compile times on very large maps with a low structural brush density.
+-------- Q3MAP2 KEYS --------
+_minlight : Minimum light value, levelwide. Uses the _color key to set color. Does not add unlike ambient.
+_minvertexlight : Minimum vertex lighting, levelwide.
+_mingridlight : Minimum lightgrid (dynamic entity lighting) levelwide.
+_keeplights : Keep light entities in the BSP. Normally stripped out by the BSP process and read from the .map file by the lighting phase.
+_noshadersun : Ignore q3map_sun/sun directives in sky shaders and ONLY use entity sun lights.
+_farplanedist : Limit on how many units the vis phase of compilation can see. Used in combination with level-wide fog, it can help reduce r_speeds on large, open maps.
+_foghull : Shader to use for "fog hull." Foghull shader should be a sky shader. Omit the "textures/" prefix.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in the world. Can be overridden in func_group (or other entities) (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. Overridable in entities.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.*/
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/gfx.shader b/install/installs/Q3Pack/install/baseq3/scripts/gfx.shader
new file mode 100644
index 0000000..e95ff57
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/gfx.shader
@@ -0,0 +1,1474 @@
+//**********************************************************************//
+// gfx.shader updated //
+// by Eutectic - 23 Jan 2000 //
+// This file is irrelevant for Q3Radiant //
+// It was updated for sake of completeness: //
+// shaders that belong here were moved from other shader files //
+// //
+// SHADERS THAT DIDN'T BELONG HERE AND MOVED TO PROPER FILE: 0 //
+// SHADERS THAT BELONGED HERE BUT WERE IN ANOTHER FILE: 6 //
+// powerups/blueflag //
+// powerups/redflag //
+// sprites/foe //
+// sprites/friend //
+// sprites/plasma1 //
+// sprites/plasma2 //
+//**********************************************************************//
+
+// GFX.SHADER
+//
+// this file contains shaders that are used by the programmers to
+// generate special effects not attached to specific geometry. This
+// also has 2D shaders such as fonts, etc.
+//
+
+// the REGION shader is generated by the map editor on temporary
+// brushes around a selected area for testing parts of maps
+
+textures/REGION
+{
+ surfaceparm nolightmap
+}
+
+// the background for the netgraph
+lagometer
+{
+ nopicmip
+ {
+ map gfx/2d/lag.tga
+ }
+}
+
+// blinked on top of lagometer when connection is interrupted
+disconnected
+{
+ nopicmip
+ {
+ map gfx/2d/net.tga
+ }
+}
+
+white
+{
+ {
+ map *white
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+console
+{
+ nopicmip
+ nomipmaps
+
+ {
+ map gfx/misc/console01.tga
+ blendFunc GL_ONE GL_ZERO
+ tcMod scroll .02 0
+ tcmod scale 2 1
+ }
+ {
+ map gfx/misc/console02.tga
+ //map textures/sfx/firegorre3.tga
+ blendFunc add
+ tcMod turb 0 .1 0 .1
+ tcMod scale 2 1
+ tcmod scroll 0.2 .1
+ }
+
+}
+
+menuback
+{
+ nopicmip
+ nomipmaps
+ //{
+ // map textures/sfx/logo512.tga
+ //}
+
+ //{
+ // map textures/sfx/specular.tga
+ // //blendfunc add
+ // tcMod turb 0 .8 0 .2
+ // tcmod scroll -.1 -.2
+ //}
+ {
+ map textures/sfx/logo512.tga
+ // blendFunc blend
+ rgbgen identity
+ }
+ //{
+ // map textures/sfx/proto_zzzdrk.tga
+ // blendFunc add
+ // tcMod turb 0 .1 0 .9
+ // tcmod scale .2 .2
+ // tcMod scroll .02 0.7
+ // rgbgen identity
+ //}
+
+}
+menubacknologo
+{
+ nopicmip
+ nomipmaps
+
+ {
+ map gfx/colors/black.tga
+ //map textures/sfx/proto_zzzdrk.tga
+ // tcMod turb 0 .1 0 .9
+ // tcmod scale .2 .2
+ // tcMod scroll .02 0.7
+ }
+
+}
+
+menubackRagePro // blends turn to shit on rage pro, so skip it
+{
+ nopicmip
+ nomipmaps
+ {
+ map textures/sfx/logo512.tga
+ }
+
+}
+
+
+levelShotDetail
+// used to break up the blur on levelshots
+{
+ nopicmip
+ {
+ map textures/sfx/detail.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR
+ rgbgen identity
+ }
+}
+
+//
+// special effects as seen on players
+//
+
+powerups/battleSuit
+{
+ deformVertexes wave 100 sin 1 0 0 0
+ {
+ map textures/effects/envmapgold2.tga
+ //map textures/sfx/specular.tga
+ tcGen environment
+ tcMod turb 0 0.15 0 0.3
+ tcmod rotate 333
+ tcmod scroll .3 .3
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+powerups/battleWeapon
+{
+ deformVertexes wave 100 sin 0.5 0 0 0
+ {
+ map textures/effects/envmapgold2.tga
+ //map textures/sfx/specular.tga
+ tcGen environment
+ tcMod turb 0 0.15 0 0.3
+ tcmod rotate 333
+ tcmod scroll .3 .3
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+powerups/invisibility
+{
+ {
+ map textures/effects/invismap.tga
+ //map textures/sfx/specular.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 0.15 0 0.25
+ tcGen environment
+ }
+}
+
+powerups/quad
+{
+ deformVertexes wave 100 sin 3 0 0 0
+ {
+ map textures/effects/quadmap2.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod rotate 30
+ //tcMod turb 0 0.2 0 .2
+ tcmod scroll 1 .1
+ }
+}
+
+powerups/quadWeapon
+{
+ deformVertexes wave 100 sin 0.5 0 0 0
+ {
+ map textures/effects/quadmap2.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod rotate 30
+ //tcMod turb 0 0.2 0 .2
+ tcmod scroll 1 .1
+ }
+}
+
+powerups/regen
+{
+ deformVertexes wave 100 sin 3 0 0 0
+ {
+ map textures/effects/regenmap2.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod rotate 30
+ //tcMod turb 0 0.2 0 .2
+ tcmod scroll 1 .1
+ }
+}
+
+powerups/blueflag
+{
+ deformVertexes wave 100 sin 3 0 0 0
+ {
+ map textures/effects/blueflagmap.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcMod turb 0 0.2 0 1
+ }
+}
+
+powerups/redflag
+{
+ deformVertexes wave 100 sin 3 0 0 0
+ {
+ map textures/effects/redflagmap.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcMod turb 0 0.2 0 1
+ }
+}
+
+
+//=========================
+
+//
+// holdable item icons
+//
+
+icons/medkit
+{
+ nopicmip
+ {
+ map icons/medkit.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/teleporter
+{
+ nopicmip
+ {
+ map icons/teleporter.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+//
+// powerup icons
+//
+
+icons/envirosuit
+{
+ nopicmip
+ {
+ map icons/envirosuit.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/flight
+{
+ nopicmip
+ {
+ map icons/flight.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/haste
+{
+ nopicmip
+ {
+ map icons/haste.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/invis
+{
+ nopicmip
+ {
+ map icons/invis.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/quad
+{
+ nopicmip
+ {
+ map icons/quad.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/regen
+{
+ nopicmip
+ {
+ map icons/regen.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+
+// reward medals used in the game floating over client's heads
+
+medal_excellent
+{
+ nopicmip
+ {
+ clampmap menu/medals/medal_excellent.tga
+ blendFunc blend
+ }
+}
+
+medal_gauntlet
+{
+ nopicmip
+ {
+ clampmap menu/medals/medal_gauntlet.tga
+ blendFunc blend
+ }
+}
+
+medal_impressive
+{
+ nopicmip
+ {
+ clampmap menu/medals/medal_impressive.tga
+ blendFunc blend
+ }
+}
+
+//
+// weapon icons
+//
+
+icons/iconw_gauntlet
+{
+ nopicmip
+ {
+ map icons/iconw_gauntlet.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_machinegun
+{
+ nopicmip
+ {
+ map icons/iconw_machinegun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_rocket
+{
+ nopicmip
+ {
+ map icons/iconw_rocket.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_shotgun
+{
+ nopicmip
+ {
+ map icons/iconw_shotgun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen identitylighting
+ }
+}
+
+icons/iconw_grenade
+{
+ nopicmip
+ {
+ map icons/iconw_grenade.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_lightning
+{
+ nopicmip
+ {
+ map icons/iconw_lightning.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_plasma
+{
+ nopicmip
+ {
+ map icons/iconw_plasma.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_railgun
+{
+ nopicmip
+ {
+ map icons/iconw_railgun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_bfg
+{
+ nopicmip
+ {
+ map icons/iconw_bfg.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconw_grapple
+{
+ nopicmip
+ {
+ map icons/iconw_grapple.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+//
+// ammo icons
+//
+
+icons/icona_machinegun
+{
+ nopicmip
+ {
+ map icons/icona_machinegun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_rocket
+{
+ nopicmip
+ {
+ map icons/icona_rocket.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_shotgun
+{
+ nopicmip
+ {
+ map icons/icona_shotgun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen identitylighting
+ }
+}
+
+icons/icona_grenade
+{
+ nopicmip
+ {
+ map icons/icona_grenade.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_lightning
+{
+ nopicmip
+ {
+ map icons/icona_lightning.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_plasma
+{
+ nopicmip
+ {
+ map icons/icona_plasma.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_railgun
+{
+ nopicmip
+ {
+ map icons/icona_railgun.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/icona_bfg
+{
+ nopicmip
+ {
+ map icons/icona_bfg.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+
+//
+// armor icons
+//
+
+icons/iconr_shard
+{
+ nopicmip
+ {
+ map icons/iconr_shard.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconr_yellow
+{
+ nopicmip
+ {
+ map icons/iconr_yellow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconr_red
+{
+ nopicmip
+ {
+ map icons/iconr_red.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+//
+// health icons
+//
+
+icons/iconh_green
+{
+ nopicmip
+ {
+ map icons/iconh_green.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconh_yellow
+{
+ nopicmip
+ {
+ map icons/iconh_yellow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconh_red
+{
+ nopicmip
+ {
+ map icons/iconh_red.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+ //{
+ // clampmap icons/iconh_red2.tga
+ // blendFunc blend
+ // tcMod stretch sin .04 1 0 1
+ //}
+}
+
+icons/iconh_mega
+{
+ nopicmip
+ {
+ map icons/iconh_mega.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+//
+// CTF icons
+//
+
+icons/iconf_red
+{
+ nopicmip
+ {
+ map icons/iconf_red.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+icons/iconf_blu
+{
+ nopicmip
+ {
+ map icons/iconf_blu.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+
+//===================================================
+
+gfx/2d/menuinfo
+{
+ nopicmip
+ {
+ map gfx/2d/menuinfo.tga
+ }
+}
+
+gfx/2d/menuinfo2
+{
+ nopicmip
+ {
+ map gfx/2d/menuinfo2.tga
+ }
+}
+
+gfx/2d/quit
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/quit.tga
+ }
+}
+
+gfx/2d/cursor
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/cursor.tga
+ }
+}
+
+//==========================================================================
+
+// chat icon floating over client's heads in the game
+
+sprites/balloon3
+{
+ {
+ map sprites/balloon4.tga
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+// friend and foe icons floating over client's heads in teamplay games
+
+sprites/foe
+{
+ nomipmaps
+ nopicmip
+ {
+ map sprites/foe2.tga
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+sprites/friend
+{
+ nomipmaps
+ nopicmip
+ {
+ map sprites/friend1.tga
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+sprites/plasma1
+{
+ cull disable
+ {
+ clampmap sprites/plasmaa.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod rotate 931
+ }
+}
+
+sprites/plasma2
+{
+ cull disable
+ {
+ map sprites/plasma2.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+// this is an example of a crossfaded animation cycle
+
+textures/animationTest
+{
+ qer_editorimage textures/liquids/bloodwater1.tga
+ {
+ animMap 0.5 textures/liquids/bloodwater1.tga textures/liquids/pool.tga textures/liquids/slime7.tga
+ }
+ {
+ animMap 0.5 textures/liquids/pool.tga textures/liquids/slime7.tga textures/liquids/bloodwater1.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaGen wave sawtooth 0 1 0 0.5
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+teleportEffect
+{
+ cull none
+ {
+ map gfx/misc/teleportEffect2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen entity
+ tcMod scale 1 4
+ tcMod scroll 0 2
+ }
+}
+
+// markShadow is the very cheap blurry blob underneat the player
+
+markShadow
+{
+ polygonOffset
+ {
+ map gfx/damage/shadow.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+// projectionShadow is used for cheap squashed model shadows
+
+projectionShadow
+{
+ polygonOffset
+ deformVertexes projectionShadow
+ {
+ map *white
+ blendFunc GL_ONE GL_ZERO
+ rgbGen wave square 0 0 0 0 // just solid black
+ }
+}
+
+
+// wake is the mark on water surfaces for paddling players
+
+wake
+{
+ {
+ clampmap sprites/splash.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ tcmod rotate 250
+ tcMod stretch sin .9 0.1 0 0.7
+ rgbGen wave sin .7 .3 .25 .5
+ }
+ {
+ clampmap sprites/splash.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ tcmod rotate -230
+ tcMod stretch sin .9 0.05 0 0.9
+ rgbGen wave sin .7 .3 .25 .4
+ }
+}
+
+
+// viewBloodBlend gives the blended directional cue when you get hit
+
+viewBloodBlend
+{
+ sort nearest
+ {
+ //map models/weaphits/blood201.tga
+ map gfx/damage/blood_screen.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identityLighting
+ alphaGen vertex
+ }
+}
+
+waterBubble
+{
+ sort underwater
+ cull none
+ entityMergable // allow all the sprites to be merged together
+ {
+ map sprites/bubble.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+smokePuff
+{
+ cull none
+ entityMergable // allow all the sprites to be merged together
+ {
+ map gfx/misc/smokepuff3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+hasteSmokePuff // drops behind player's feet when speeded
+{
+ cull none
+ entityMergable // allow all the sprites to be merged together
+ {
+ map gfx/misc/smokepuff3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //blendfunc GL_ONE GL_ONE
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+smokePuffRagePro
+{
+ cull none
+ entityMergable // allow all the sprites to be merged together
+ {
+ map gfx/misc/smokepuffragepro.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+shotgunSmokePuff
+{
+ cull none
+ {
+ map gfx/misc/smokepuff2b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaGen entity
+ rgbGen entity
+ }
+}
+
+flareShader
+{
+ cull none
+ {
+ map gfx/misc/flare.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+}
+
+sun
+{
+ cull none
+ {
+ map gfx/misc/sun.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+}
+
+railDisc
+{
+ sort nearest
+ cull none
+ deformVertexes wave 100 sin 0 .5 0 2.4
+ {
+ clampmap gfx/misc/raildisc_mono2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ tcMod rotate -30
+ }
+}
+
+railCore
+{
+ sort nearest
+ cull none
+ {
+ map gfx/misc/railcorethin_mono.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ tcMod scroll -1 0
+ }
+}
+
+lightningBolt
+{
+ cull none
+ {
+ map gfx/misc/lightning3.tga
+ blendFunc GL_ONE GL_ONE
+// rgbgen wave sin 1 5.1 0 7.1
+ rgbgen wave sin 1 0.5 0 7.1
+ tcmod scale 2 1
+ tcMod scroll -5 0
+ }
+ {
+ map gfx/misc/lightning3.tga
+ blendFunc GL_ONE GL_ONE
+// rgbgen wave sin 1 8.3 0 8.1
+ rgbgen wave sin 1 0.8 0 8.1
+ tcmod scale -1.3 -1
+ tcMod scroll -7.2 0
+ }
+}
+
+// shader used on the occasional machinegun bullet tracers
+
+gfx/misc/tracer
+{
+ cull none
+ {
+ map gfx/misc/tracer2.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+//
+// wall marks
+// use blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR so that
+// their "contribution" can be damped down in fog volumes
+// with distance
+
+bloodMark
+{
+ nopicmip // make sure a border remains
+ polygonOffset
+ {
+ clampmap gfx/damage/blood_stain.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identityLighting
+ alphaGen vertex
+ }
+}
+
+bloodTrail
+{
+
+ nopicmip // make sure a border remains
+ entityMergable // allow all the sprites to be merged together
+ {
+ //clampmap gfx/misc/blood.tga
+ clampmap gfx/damage/blood_spurt.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+gfx/damage/bullet_mrk
+{
+ polygonOffset
+ {
+ map gfx/damage/bullet_mrk.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+gfx/damage/burn_med_mrk
+{
+ polygonOffset
+ {
+ map gfx/damage/burn_med_mrk.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+gfx/damage/hole_lg_mrk
+{
+ polygonOffset
+ {
+ map gfx/damage/hole_lg_mrk.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+gfx/damage/plasma_mrk
+{
+ polygonOffset
+ {
+ map gfx/damage/plasma_mrk.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+
+//===============================================================
+
+// scoreboard header tabs
+
+scoreboardName
+{
+ nopicmip
+ nomipmaps
+ {
+ clampmap menu/tab/name.tga
+ blendfunc blend
+ }
+}
+
+scoreboardScore
+{
+ nopicmip
+ nomipmaps
+ {
+ clampmap menu/tab/score.tga
+ blendfunc blend
+ }
+}
+
+scoreboardTime
+{
+ nopicmip
+ nomipmaps
+ {
+ clampmap menu/tab/time.tga
+ blendfunc blend
+ }
+}
+
+scoreboardPing
+{
+ nopicmip
+ nomipmaps
+ {
+ clampmap menu/tab/ping.tga
+ blendfunc blend
+ }
+}
+
+//===============================================================
+
+gfx/2d/crosshair
+{
+ nopicmip
+ {
+ map gfx/2d/crosshair.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairb
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairb.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairc
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairc.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshaird
+{
+ nopicmip
+ {
+ map gfx/2d/crosshaird.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshaire
+{
+ nopicmip
+ {
+ map gfx/2d/crosshaire.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairf
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairf.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairg
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairg.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairh
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairh.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairi
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairi.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+}
+
+gfx/2d/crosshairj
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairj.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/crosshairk
+{
+ nopicmip
+ {
+ map gfx/2d/crosshairk.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+gfx/2d/bigchars
+{
+ nopicmip
+ nomipmaps
+ {
+ map gfx/2d/bigchars.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/select
+{
+ nopicmip
+ {
+ map gfx/2d/select.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ rgbgen vertex
+ }
+}
+
+gfx/2d/assault1d
+{
+ nopicmip
+ {
+ map gfx/2d/assault1d.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+gfx/2d/armor1h
+{
+ nopicmip
+ {
+ map gfx/2d/armor1h.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+gfx/2d/health
+{
+ nopicmip
+ {
+ map gfx/2d/health.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+gfx/2d/blank
+{
+ nopicmip
+ {
+ map gfx/2d/blank.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+gfx/2d/numbers/zero_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/zero_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/one_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/one_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/two_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/two_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/three_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/three_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/four_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/four_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/five_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/five_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/six_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/six_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/seven_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/seven_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/eight_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/eight_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/nine_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/nine_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+gfx/2d/numbers/minus_32b
+{
+ nopicmip
+ {
+ map gfx/2d/numbers/minus_32b.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbgen vertex
+ }
+}
+
+
+//
+// weapon hits
+// All of these will be put on entities with a shaderTime offset, so they
+// can be expected to start at time 0 for each separate explosion
+//
+// Many of these are use smoothly morphed animating textures by pairing
+// sawtooth and iverse sawtooth rgbGens
+
+plasmaExplosion
+{
+ cull disable
+ {
+ clampmap models/weaphits/plasmaboom.tga
+ blendfunc add
+ tcMod stretch triangle .6 0.1 0 8
+ tcmod rotate 999
+ rgbGen wave inversesawtooth 0 1 0 1.5
+ }
+}
+
+railExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/ring02_1.tga models/weaphits/ring02_2.tga models/weaphits/ring02_3.tga models/weaphits/ring02_4.tga gfx/colors/black.tga
+ alphaGen wave inversesawtooth 0 1 0 5
+ blendfunc blend
+ }
+ {
+ animmap 5 models/weaphits/ring02_2.tga models/weaphits/ring02_3.tga models/weaphits/ring02_4.tga gfx/colors/black.tga gfx/colors/black.tga
+ alphaGen wave sawtooth 0 1 0 5
+ blendfunc blend
+ }
+}
+
+lightningExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/ring02_1.tga models/weaphits/ring02_3.tga models/weaphits/ring02_3.tga gfx/colors/black.tga
+ rgbGen wave inversesawtooth 0 1 0 5
+ blendfunc add
+ }
+ {
+ animmap 5 models/weaphits/ring02_2.tga models/weaphits/ring02_3.tga gfx/colors/black.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 5
+ blendfunc add
+ }
+}
+
+bulletExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/bullet1.tga models/weaphits/bullet2.tga models/weaphits/bullet3.tga gfx/colors/black.tga
+ rgbGen wave inversesawtooth 0 1 0 5
+ blendfunc add
+ }
+ {
+ animmap 5 models/weaphits/bullet2.tga models/weaphits/bullet3.tga gfx/colors/black.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 5
+ blendfunc add
+ }
+}
+
+rocketExplosion
+{
+ cull disable
+ {
+ animmap 8 models/weaphits/rlboom/rlboom_1.tga models/weaphits/rlboom/rlboom_2.tga models/weaphits/rlboom/rlboom_3.tga models/weaphits/rlboom/rlboom_4.tga models/weaphits/rlboom/rlboom_5.tga models/weaphits/rlboom/rlboom_6.tga models/weaphits/rlboom/rlboom_7.tga models/weaphits/rlboom/rlboom_8.tga
+ rgbGen wave inversesawtooth 0 1 0 8
+ blendfunc add
+ }
+ {
+ animmap 8 models/weaphits/rlboom/rlboom_2.tga models/weaphits/rlboom/rlboom_3.tga models/weaphits/rlboom/rlboom_4.tga models/weaphits/rlboom/rlboom_5.tga models/weaphits/rlboom/rlboom_6.tga models/weaphits/rlboom/rlboom_7.tga models/weaphits/rlboom/rlboom_8.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 8
+ blendfunc add
+ }
+}
+
+grenadeExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/glboom/glboom_1.tga models/weaphits/glboom/glboom_2.tga models/weaphits/glboom/glboom_3.tga
+ rgbGen wave inversesawtooth 0 1 0 5
+ blendfunc add
+ }
+ {
+ animmap 5 models/weaphits/glboom/glboom_2.tga models/weaphits/glboom/glboom_3.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 5
+ blendfunc add
+ }
+}
+
+bfgExplosion
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/bfgboom/bfgboom_1.tga models/weaphits/bfgboom/bfgboom_2.tga models/weaphits/bfgboom/bfgboom_3.tga
+ rgbGen wave inversesawtooth 0 1 0 5
+ blendfunc add
+ }
+ {
+ animmap 5 models/weaphits/bfgboom/bfgboom_2.tga models/weaphits/bfgboom/bfgboom_3.tga gfx/colors/black.tga
+ rgbGen wave sawtooth 0 1 0 5
+ blendfunc add
+ }
+}
+
+bloodExplosion // spurt of blood at point of impact
+{
+ cull disable
+ {
+ animmap 5 models/weaphits/blood201.tga models/weaphits/blood202.tga models/weaphits/blood203.tga models/weaphits/blood204.tga models/weaphits/blood205.tga
+ blendfunc blend
+ }
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/gothic_block.shader b/install/installs/Q3Pack/install/baseq3/scripts/gothic_block.shader
new file mode 100644
index 0000000..5a0569b
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/gothic_block.shader
@@ -0,0 +1,514 @@
+
+textures/gothic_block/blocks15cgeomtrn
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks15cgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks17_ow
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_block/blocks17_ow.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks17bloody
+{
+
+ {
+ map textures/liquids/proto_grueldark2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+ tcMod turb 0 0.05 0 .05
+ }
+ {
+ map textures/effects/tinfx3.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ }
+
+ {
+ map textures/gothic_block/blocks17bloody.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks17g_ow
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_block/blocks17g_ow.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks18b_ow
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_block/blocks18b_ow.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks18cgeomtrn2
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ alphaFunc GE128
+ tcmod rotate 40
+ tcMod stretch sin .8 0.2 0 .3
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ alphaFunc GE128
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ alphaFunc GE128
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/gothic_block/blocks18cgeomtrnx
+{
+
+ {
+ map textures/sfx/fireswirl2blue.tga
+ tcMod stretch sin .8 0.3 0 9.7
+ tcmod rotate 333
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrnx.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/blocks18d_trans
+{
+ qer_editorimage textures/gothic_block/blocks18d.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_block/blocks18d.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/gothic_block/demon_block15fx
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/demon_block15fx.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/evil_e3bwindow
+{
+ qer_editorimage textures/gothic_block/windowevil2c_killblock.tga
+ //surfaceparm nomarks
+ q3map_lightimage textures/gothic_block/evil2ckillblockglow.tga
+ q3map_surfacelight 200
+ // Glowing evil window for e3 demo map
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/windowevil2c_killblock.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/evil2ckillblockglow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_block/evil_e3window
+{
+ qer_editorimage textures/gothic_block/windowevil2c_block18c.tga
+ //surfaceparm nomarks
+ q3map_lightimage textures/gothic_block/evil2cglow.tga
+ q3map_surfacelight 1000
+ // Glowing evil window for e3 demo map
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/windowevil2c_block18c.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/evil2cglow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_block/evil_e3window_dark
+{
+ qer_editorimage textures/gothic_block/windowevil2c_block18c.tga
+ //surfaceparm nomarks
+ q3map_lightimage textures/gothic_block/evil2cglow.tga
+ q3map_surfacelight 100
+ // Glowing evil window for temp in tim_dm7
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/windowevil2c_block18c.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/evil2cglow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_block/flicker_blocks10
+{
+ qer_editorimage textures/gothic_block/blocks10.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks10.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen wave noise 0.75 0.25 0 10
+ }
+}
+
+textures/gothic_block/gkc17d
+{
+ // spine texture with specular highlights
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/gothic_block/gkc17d.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_block/gkcspinemove
+{
+ qer_editorimage textures/gothic_block/gkc17d.tga
+ tessSize 128
+// deformVertexes wave 100 sin 3 2 0 0.3
+ deformVertexes bulge 3 10 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/gkc17d.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+textures/gothic_block/killblock_i4b
+{
+ q3map_surfacelight 300
+ q3map_lightimage textures/gothic_block/killblock_i4glow.tga
+ qer_editorimage textures/gothic_block/killblock_i4.tga
+
+
+ {
+ map textures/gothic_block/killblock_i4.tga
+ rgbgen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/gothic_block/killblock_i4glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave sin .9 .1 0 .1
+ }
+
+}
+
+textures/gothic_block/killblockgeomtrn
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ blendFunc blend
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 20
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/killblockgeomtrn.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/killtrim_trans
+{
+ qer_editorimage textures/gothic_block/killtrim.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_block/killtrim.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_block/largerblock3blood
+{
+
+ {
+ map textures/liquids/proto_grueldark2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+ tcMod turb 0 0.05 0 .05
+ }
+ {
+ map textures/effects/tinfx3.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ }
+
+ {
+ map textures/gothic_block/largerblock3blood.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_block/mkc_evil_e3window
+{
+ qer_editorimage textures/gothic_block/windowevil2c_block18c.tga
+ q3map_lightimage textures/gothic_block/evil2cglow.tga
+ q3map_surfacelight 400
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/windowevil2c_block18c.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/evil2cglow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_block/wetwall
+{
+ {
+ map textures/gothic_block/wetwall.tga
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/wetwallfx.tga
+ tcmod scroll 0 -.1
+ tcmod scale 2 .6
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/gothic_block/wetwall.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/gothic_button.shader b/install/installs/Q3Pack/install/baseq3/scripts/gothic_button.shader
new file mode 100644
index 0000000..e693b5c
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/gothic_button.shader
@@ -0,0 +1,25 @@
+
+textures/gothic_button/timbutton
+{
+ q3map_lightimage textures/gothic_button/timbutton2.tga
+ q3map_surfacelight 10
+ //light 1
+
+ {
+ map textures/gothic_button/timbutton.tga
+ }
+
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_button/timbutton2.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin .5 .5 0 1
+ }
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/gothic_door.shader b/install/installs/Q3Pack/install/baseq3/scripts/gothic_door.shader
new file mode 100644
index 0000000..fb2cee6
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/gothic_door.shader
@@ -0,0 +1,77 @@
+
+textures/gothic_door/door02_bred2_shiny
+{
+qer_editorimage textures/gothic_door/door02_bred2.tga
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_door/door02_bred2.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/gothic_door/door02_eblue2_shiny
+{
+qer_editorimage textures/gothic_door/door02_eblue2.tga
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_door/door02_eblue2.tga
+ blendFunc GL_dst_color GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+
+}
+
+textures/gothic_door/door02_i_ornate5_fin
+{
+ qer_editorimage textures/gothic_door/door02_i_ornate5_fin.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_door/door02_i_ornate5_fin.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_door/skullarch_b
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 1.5 1.5
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_door/skullarch_b.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/gothic_floor.shader b/install/installs/Q3Pack/install/baseq3/scripts/gothic_floor.shader
new file mode 100644
index 0000000..8ea5491
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/gothic_floor.shader
@@ -0,0 +1,212 @@
+
+textures/gothic_floor/center2trn
+{
+
+ {
+ map textures/sfx/fireswirl2.tga
+ tcmod rotate 333
+ tcMod stretch sin .8 0.2 0 9.7
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/center2trn.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ tcmod rotate 30
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/center2trn.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_floor/largerblock3b_ow
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/largerblock3b_ow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_floor/metalbridge06brokeb
+{
+ {
+ map textures/sfx/kenelectric.tga
+ tcmod scale 2 2
+ tcMod turb 0 .2 0 .3
+ tcmod scroll 3 5
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/metalbridge06brokeb.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+
+
+}
+
+textures/gothic_floor/pent_metalbridge02
+{
+ q3map_lightimage textures/gothic_floor/pent_glow.tga
+ q3map_surfacelight 500
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_metalbridge02.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 0.5
+ }
+}
+
+textures/gothic_floor/pent_metalbridge06
+{
+ q3map_lightimage textures/gothic_floor/pent_glow.tga
+ q3map_surfacelight 500
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_metalbridge06.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 0.5
+ }
+}
+
+textures/gothic_floor/pent_metalbridge06b
+{
+ q3map_lightimage textures/gothic_floor/pent_glow.tga
+ q3map_surfacelight 500
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_metalbridge06b.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 0.5
+ }
+}
+
+textures/gothic_floor/q1metal7_99spot
+{
+
+ {
+ map textures/liquids/proto_grueldark2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 2 2
+ tcMod scroll .01 .03
+ tcMod turb 0 0.05 0 .05
+ }
+ {
+ map textures/effects/tinfx3.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ }
+
+ {
+ map textures/gothic_floor/q1metal7_99spot.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
+textures/gothic_floor/xq1metalbig_ow
+{
+ {
+ map textures/gothic_floor/xq1metalbig_ow.tga
+ rgbGen identity
+ }
+ {
+ map textures/sfx/specular.tga
+ //map textures/liquids/proto_gruel3.tga
+ tcGen environment
+ tcmod scale 3 3
+ //tcmod rotate 30
+ tcMod turb 0 .25 0 .05
+ //tcmod scroll .1 .2
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/xq1metalbig_ow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/gothic_floor/xstepborder3_shiney
+{
+ qer_editorimage textures/gothic_floor/xstepborder3_alpha.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_floor/xstepborder3_alpha.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/gothic_light.shader b/install/installs/Q3Pack/install/baseq3/scripts/gothic_light.shader
new file mode 100644
index 0000000..b3babce
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/gothic_light.shader
@@ -0,0 +1,1468 @@
+
+textures/gothic_light/border7_ceil39_6k
+{
+ qer_editorimage textures/gothic_light/border7_ceil39.tga
+ q3map_surfacelight 3700
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/border7_ceil39.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/border_ceil39.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/border7_ceil39b_10k
+{
+ qer_editorimage textures/gothic_light/border7_ceil39b.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/border7_ceil39b.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/border7_ceil39b.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/flicker_light15k
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 15000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen wave noise 0.75 0.25 0 10
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave noise 0.75 0.25 0 10
+ }
+}
+
+textures/gothic_light/goth_lt2_lrg2k
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_1k
+{
+ qer_editorimage textures/gothic_light/gothic_light2.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_2K
+{
+ qer_editorimage textures/gothic_light/gothic_light2.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_4K
+{
+ qer_editorimage textures/gothic_light/gothic_light2.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_lrg_1k
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_lrg_200
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 200
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_lrg_2k
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light2_lrg_500
+{
+ qer_editorimage textures/gothic_light/gothic_light2_lrg.tga
+ q3map_surfacelight 500
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_lrg.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ //tcMod scale 0.5 0.5
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_10K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_15K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 15000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_1K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/gothic_light/gothic_light3_20K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_2K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/gothic_light/gothic_light3_3k
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/gothic_light/gothic_light3_4K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_5K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_6K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 6000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_7K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 7000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/gothic_light3_8K
+{
+ qer_editorimage textures/gothic_light/gothic_light3.tga
+ q3map_lightimage textures/gothic_light/gothic_light2_blend.tga
+ q3map_surfacelight 8000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light3.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/gothic_light2_blend.tga
+ rgbGen wave sin .6 .1 .1 .1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_1000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_10000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_120000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 120000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_2000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_20000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_2500
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 3500
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_3000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_30000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 30000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_4000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_40000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 40000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_5000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt1_500000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt1.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt1.blend.tga
+ q3map_surfacelight 500000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_1000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_10000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_2000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_20000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_2500
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 2500
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_3000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_30000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 30000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_4000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_40000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 40000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrosslt2_5000
+{
+ qer_editorimage textures/gothic_light/ironcrosslt2.tga
+ q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_10000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_2000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_20000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_3000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_30000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 30000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_4000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltblue_5000
+{
+ qer_editorimage textures/gothic_light/ironcrossltblue.tga
+ q3map_lightimage textures/gothic_light/ironcrossltblue.blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltblue.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_10000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 10000
+// light 1
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_2000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_20000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 20000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_3000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_30000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 30000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_4000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/ironcrossltred_5000
+{
+ qer_editorimage textures/gothic_light/ironcrossltred.tga
+ q3map_lightimage textures/gothic_light/ironcrossltred.blend.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/ironcrossltred.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/light1_4Kgothic
+{
+ qer_editorimage textures/base_light/light1.tga
+ q3map_lightimage textures/base_light/light1.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ //q3map_surfacelight 4000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ rgbGen wave sin 0.25 0.25 0 .2
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/light1_6Kgothic
+{
+ qer_editorimage textures/base_light/light1.tga
+ q3map_lightimage textures/base_light/light1.blend.tga
+ q3map_surfacelight 6000
+ surfaceparm nomarks
+ //q3map_surfacelight 4000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1.blend.tga
+ rgbGen wave sin 0.25 0.25 0 .2
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/light1_6Kgothicred
+{
+ qer_editorimage textures/base_light/light1red.tga
+ q3map_lightimage textures/base_light/light1red.blend.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/base_light/light1red.blend.tga
+ rgbGen wave sin 0.25 0.25 0 .2
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/gothic_light/pentagram_light1_10K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 10000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+
+
+}
+
+textures/gothic_light/pentagram_light1_15K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 15000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+
+
+}
+
+textures/gothic_light/pentagram_light1_1K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 1000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+
+
+}
+
+textures/gothic_light/pentagram_light1_2K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 2000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+}
+
+textures/gothic_light/pentagram_light1_3K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 3000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+}
+
+textures/gothic_light/pentagram_light1_4K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 4000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+}
+
+textures/gothic_light/pentagram_light1_5K
+{
+ qer_editorimage textures/gothic_light/pentagram_light1.tga
+ q3map_surfacelight 5000
+ surfaceparm nomarks
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_light/pentagram_light1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+ {
+ map textures/gothic_light/pentagram_light1_blend.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .8 .2 0 1
+ }
+
+
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/gothic_trim.shader b/install/installs/Q3Pack/install/baseq3/scripts/gothic_trim.shader
new file mode 100644
index 0000000..100fa7c
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/gothic_trim.shader
@@ -0,0 +1,296 @@
+
+textures/gothic_trim/baseboard09_p_shiny
+{
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_trim/baseboard09_p_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ alphagen lightingspecular
+ rgbGen identity
+ }
+}
+
+textures/gothic_trim/border6_trans
+{
+ qer_editorimage textures/gothic_trim/border6.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/border6.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+ }
+}
+
+textures/gothic_trim/column2c_trans
+{
+ qer_editorimage textures/gothic_trim/column2c_test.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/column2c_test.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_trim/gothgrate2
+{
+ surfaceparm metalsteps
+ cull none
+
+ {
+ map textures/gothic_trim/gothgrate2.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ alphaFunc GT0
+ depthWrite
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ depthFunc equal
+ }
+}
+
+textures/gothic_trim/km_arena1tower4_shiny
+{
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/km_arena1tower4_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/metalsupport4b_trans
+{
+ qer_editorimage textures/gothic_trim/metalsupport4b.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/metalsupport4b.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_trim/metalsupport4h_shiny
+{
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/metalsupport4h_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/metalsupport4h_trans
+{
+ qer_editorimage textures/gothic_trim/metalsupport4h_shiny.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/metalsupport4h_shiny.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/metalsupport4j_trans
+{
+ qer_editorimage textures/gothic_trim/metalsupport4j.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/metalsupport4j.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/gothic_trim/metlsupport4i_shiney
+{
+ qer_editorimage textures/gothic_trim/xmetalsupport4i_alpha.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/xmetalsupport4i_alpha.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/pitted_rust2_trans
+{
+ qer_editorimage textures/gothic_trim/pitted_rust2.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/pitted_rust2.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_trim/pitted_rust3_trans
+{
+ qer_editorimage textures/gothic_trim/pitted_rust3.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/gothic_trim/pitted_rust3.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/gothic_trim/supportborderside_shiney
+{
+ qer_editorimage textures/gothic_trim/xsupportborderside_shiney.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_trim/xsupportborderside_shiney.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+textures/gothic_trim/tongue_bone
+{
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/tongue_bone.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/tongue_bone.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 0.2
+ }
+}
+
+textures/gothic_trim/x_noblight
+{
+ q3map_lightimage textures/gothic_trim/x_noblightfx.tga
+ q3map_surfacelight 100
+ {
+ map textures/sfx/firegorre2.tga
+ tcmod scroll .1 1
+ tcmod scale 1 1
+ }
+ {
+ map textures/gothic_trim/x_noblight.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/x_noblightfx.tga
+ blendFunc add
+ rgbGen wave sin .5 .5 0 .1
+ }
+}
+
+textures/gothic_trim/zinc_shiny
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/gothic_trim/zinc_shiny.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/gothic_wall.shader b/install/installs/Q3Pack/install/baseq3/scripts/gothic_wall.shader
new file mode 100644
index 0000000..4203aec
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/gothic_wall.shader
@@ -0,0 +1,120 @@
+
+textures/gothic_wall/iron01_m
+{
+ qer_editorimage textures/gothic_wall/iron01_m.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_wall/iron01_m.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_wall/iron01_ndark
+{
+ qer_editorimage textures/gothic_wall/iron01_ndark.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_wall/iron01_ndark.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_wall/streetbricks10_shiny
+{
+ qer_editorimage textures/gothic_wall/streetbricks11.tga
+ q3map_globaltexture
+ sort opaque
+
+ {
+ map $lightmap
+ tcmod scale 2 2
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_wall/streetbricks11.tga
+ rgbGen identity
+ blendfunc gl_one gl_src_color
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+
+}
+
+textures/gothic_wall/window_evil6a
+
+{
+ q3map_lightimage textures/gothic_wall/window_evil6a_glow.tga
+ q3map_surfacelight 50
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_wall/window_evil6a.tga
+ blendfunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ {
+ map textures/gothic_wall/window_evil6a_glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+}
+
+textures/gothic_wall/xoct20c_shiney
+{
+ qer_editorimage textures/gothic_wall/xoct20c_shiney.tga
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/gothic_wall/xoct20c_shiney.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/gothic_wall/xpipecolumn_gray_shiny
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map textures/gothic_wall/xpipecolumn_gray_shiny.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/hell.shader b/install/installs/Q3Pack/install/baseq3/scripts/hell.shader
new file mode 100644
index 0000000..23b6410
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/hell.shader
@@ -0,0 +1,437 @@
+//**********************************************************************//
+// hell.shader updated //
+// by Eutectic - 21 Jan 2000 //
+// This file is irrelevant for Q3Radiant since none of these //
+// shaders work (textures/hell folder does not exist) //
+// It was updated for sake of completeness: //
+// shaders that belong here were moved from other shader files //
+// Phase 2 update: 13 May 2000 //
+// sorted shaders in alphabetical order. //
+// //
+// TOTAL SHADERS: 19 //
+// NO. OF BROKEN SHADERS: 19 //
+// NO. OF WORKING SHADERS WITH DUPLICATE ENTRIES: N/A //
+// NO. OF WORKING SHADERS THAT DIDN'T APPEAR IN EDITOR: N/A //
+// SHADERS THAT DIDN'T BELONG HERE AND MOVED TO PROPER FILE: 0 //
+// SHADERS THAT BELONGED HERE BUT WERE IN ANOTHER FILE: 3 //
+// textures/hell/hellsky2goo //
+// textures/hell/lavasolid //
+// textures/hell/newhell //
+//**********************************************************************//
+
+textures/hell/bluepad
+{
+ q3map_surfacelight 2000
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/bluepad.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/bluepad.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 .2
+ }
+}
+
+textures/hell/darkness
+{
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ cull back
+ fogonly
+ fogparms 0 0 0 400 256
+}
+
+//*********************************//
+//Moved from sky.shader by Eutectic//
+//*********************************//
+
+textures/hell/hellsky2goo
+{
+ surfaceparm sky
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 300
+
+ sky env/hell2
+ cloudparms 256
+
+ {
+ map env/redcloudsa.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0
+ tcMod scale 2 2
+ }
+
+ {
+ map env/redclouds.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scroll 0.05 0.05
+ tcMod scale 1 1
+ }
+}
+
+textures/hell/hellbutt01
+{
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/hellbutt01.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/hellbutt01.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.5 0 0.2
+ }
+}
+
+textures/hell/hellredclouds
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 280
+
+ cloudparms 512 full
+ lightning
+
+ {
+ map env/redclouds.tga
+ tcMod scroll 0.02 0
+ tcMod scale 2 2
+ }
+
+
+ {
+ map textures/dont_use/lightningsky8_kc.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scale 10 10
+ tcMod scroll .2 .2
+ }
+
+
+ {
+ map env/redcloudsa.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.02 0.01
+ }
+
+
+}
+
+textures/hell/ironcrosslt1
+{
+ q3map_surfacelight 7000
+ //light 1
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/hell/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+}
+
+textures/hell/ironcrosslt1_5000
+{
+ qer_editorimage textures/hell/ironcrosslt1.tga
+ q3map_lightimage textures/hell/ironcrosslt1.blend.tga
+ q3map_surfacelight 5000
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/ironcrosslt1.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/ironcrosslt1.blend.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/hell/killblock_b
+{
+ q3map_surfacelight 50
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/killblock_b.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/killblock_b.blend.tga
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/hell/killblock_c
+{
+ q3map_surfacelight 50
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/killblock_c.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/killblock_c.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.1 0 0.2
+ }
+}
+
+textures/hell/lava2z
+{
+ surfaceparm nonsolid
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 150
+}
+
+//*************************************//
+//Moved from liquids.shader by Eutectic//
+//*************************************//
+
+textures/hell/lavasolid
+{
+ // Added to g3map_global texture on May 11, 1999
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 450
+
+ tesssize 64
+ deformVertexes wave 100 sin 2 2 0 0.1
+
+ {
+ map textures/hell/lava2d.tga
+ tcGen environment
+ tcMod turb 0 0.25 0 0.05
+ }
+
+ {
+ map textures/hell/lava2d.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 0.25 0 0.05
+ }
+}
+
+textures/hell/light1blue
+{
+ q3map_surfacelight 3250
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1blue.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1blue.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.1 0 .2
+ }
+}
+
+textures/hell/light1dark
+{
+ q3map_surfacelight 6000
+ //light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1dark.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1dark.tga
+ blendFunc GL_ONE GL_ONE
+// rgbGen wave sin 0.5 0.1 0 .2
+ }
+}
+
+textures/hell/light1red
+{
+ q3map_surfacelight 5000
+// light 1
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1red.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/hell/light1red.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.5 0.1 0 .2
+ }
+}
+
+textures/hell/metal2_2
+{
+ cull twosided
+ surfaceparm trans
+ {
+ map textures/hell/metal2_2.tga
+ rgbGen identity
+ alphaFunc GE128
+ //blendFunc GL_ONE GL_ZERO
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/hell/newhell
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ surfaceparm sky
+ q3map_surfacelight 200
+
+ sky env/hell2
+ cloudparms 512 full
+ lightning
+
+ {
+ map env/redcloudsa.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0
+ tcMod scale 2 2
+ }
+ {
+ map env/redclouds.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ tcMod scroll 0.05 0.06
+ tcMod scale 1 1
+ }
+}
+
+textures/hell/skin7_teeth2
+{
+ deformVertexes wave 100 sin 2 3 0 0.4
+ {
+ map $lightmapt
+ rgbGen identity
+ }
+ {
+ map textures/hell/skin7_teeth2.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/hell/xfiretest1
+{
+ qer_editorimage textures/hell/firetestb.tga
+ //surfaceparm trans
+ surfaceparm noimpact
+ //surfaceparm nonsolid
+ surfaceparm nolightmap
+ q3map_surfacelight 1000
+ tesssize 64
+
+
+ {
+ map textures/hell/firetestb.tga
+ blendfunc gl_one gl_zero
+ tcMod turb .2 .2 .1 1
+ tcMod scale .25 .25
+ tcMod scroll .5 1.5
+ }
+
+ {
+ map textures/hell/firetest.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .2 .1 .1 1
+ tcMod scale .1 .1
+ tcMod scroll 0 1.0
+ }
+
+ {
+ map textures/hell/firetest2.tga
+ blendFunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 .5 .5
+ tcMod scroll 1 5.0
+ }
+
+}
+
+textures/hell/xfiretest2
+{
+ qer_editorimage textures/hell/firetestb.tga
+ //surfaceparm trans
+ surfaceparm noimpact
+ //surfaceparm nonsolid
+ surfaceparm nolightmap
+ q3map_surfacelight 1000
+ tesssize 64
+ {
+ map textures/hell/firetest2.tga
+ blendfunc gl_one gl_zero
+ tcMod turb .2 .2 .1 1
+ tcMod scale .25 .25
+ tcMod scroll .5 1.5
+ }
+
+ {
+ map textures/hell/firetest.tga
+
+// blendFunc GL_DST_COLOR GL_ONE
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .2 .1 .1 1
+ tcMod scale .1 .1
+ tcMod scroll 0 1.0
+ }
+
+ {
+
+ map textures/hell/firetestb.tga
+ blendFunc GL_DST_COLOR GL_ONE
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .1 .1 .5 .5
+ tcMod scroll 1 5.0
+ }
+
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/liquids.shader b/install/installs/Q3Pack/install/baseq3/scripts/liquids.shader
new file mode 100644
index 0000000..cb2768f
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/liquids.shader
@@ -0,0 +1,759 @@
+
+textures/liquids/protolava
+{
+
+ q3map_globaltexture
+ surfaceparm trans
+ //surfaceparm nonsolid
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 600
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/protolava2.tga
+ tcmod scale .2 .2
+ tcmod scroll .04 .03
+ tcMod turb 0 .1 0 .01
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/liquids/protolava.tga
+ blendfunc blend
+ tcMod turb 0 .2 0 .1
+ }
+
+}
+
+textures/liquids/watertest
+ {
+ qer_editorimage textures/liquids/pool3d_3b.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ tessSize 32
+ deformVertexes normal .15 2
+ deformVertexes bulge 128 5 2
+ {
+ map $lightmap
+ blendfunc filter
+ }
+
+ {
+ map textures/liquids/pool3d_4byell2.tga
+ blendfunc add
+ tcgen environment
+ }
+
+
+ }
+
+
+
+
+textures/liquids/flatripplewater_1500
+ {
+ qer_editorimage textures/liquids/pool2.tga
+ q3map_globaltexture
+ q3map_lightsubdivide 32
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 500
+ cull disable
+
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/pool2.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+
+textures/liquids/xctf_painwater
+ {
+ qer_editorimage textures/liquids/pool2.tga
+ q3map_globaltexture
+ qer_trans .5
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+ q3map_surfacelight 450
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .1
+ {
+ map textures/liquids/pool2.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+ {
+ map textures/liquids/pool3.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 0 .01
+ tcMod scale .5 .5
+ tcMod scroll -.025 .02
+ }
+ {
+ map textures/sfx/bolts.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scale .2 .2
+ tcMod scroll .1 .1
+ tcmod rotate 290
+
+ }
+ }
+textures/liquids/clear_calm1
+ {
+ qer_editorimage textures/liquids/pool3d_3e.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .25 .25 0 .5
+ {
+ map textures/liquids/pool3d_5e.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod scroll .025 .01
+ }
+
+ {
+ map textures/liquids/pool3d_3e.tga
+ blendFunc GL_dst_color GL_one
+ tcmod scale -.5 -.5
+ tcmod scroll .025 .025
+ }
+
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+
+
+
+}
+
+textures/liquids/clear_ripple3
+ {
+ qer_editorimage textures/liquids/pool3d_3c.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .5 .5 0 .5
+
+ {
+ map textures/liquids/pool3d_5c.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 1.5 0 1.5 1 1 2
+ tcmod scroll -.05 .001
+ }
+
+ {
+ map textures/liquids/pool3d_6c.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 0 1.5 1 1.5 2 1
+ tcmod scroll .025 -.001
+ }
+
+ {
+ map textures/liquids/pool3d_3c.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .25 .5
+ tcmod scroll .001 .025
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+
+
+}
+
+
+textures/liquids/clear_ripple2
+ {
+ qer_editorimage textures/liquids/pool3d_3b.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .5 .5 0 .5
+
+ {
+ map textures/liquids/pool3d_5b.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 1.5 0 1.5 1 1 2
+ tcmod scroll -.05 .001
+ }
+
+ {
+ map textures/liquids/pool3d_6b.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 0 1.5 1 1.5 2 1
+ tcmod scroll .025 -.001
+ }
+
+ {
+ map textures/liquids/pool3d_3b.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .25 .5
+ tcmod scroll .001 .025
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+
+
+}
+
+
+textures/liquids/clear_ripple1
+ {
+ qer_editorimage textures/liquids/pool3d_3.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .5 .5 0 .5
+
+
+ {
+ map textures/liquids/pool3d_5.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 1.5 0 1.5 1 1 2
+ tcmod scroll -.05 .001
+ }
+
+ {
+ map textures/liquids/pool3d_6.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 0 1.5 1 1.5 2 1
+ tcmod scroll .025 -.001
+ }
+
+ {
+ map textures/liquids/pool3d_3.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .25 .5
+ tcmod scroll .001 .025
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+
+}
+
+textures/liquids/clear_ripple1_q3dm1
+ {
+ qer_editorimage textures/liquids/pool3d_3.tga
+ qer_trans .5
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+
+ cull disable
+ deformVertexes wave 64 sin .5 .5 0 .5
+
+
+ {
+ map textures/liquids/pool3d_5.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 1.5 0 1.5 1 1 2
+ tcmod scroll -.05 .001
+ }
+
+ {
+ map textures/liquids/pool3d_6.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .5 .5
+ tcmod transform 0 1.5 1 1.5 2 1
+ tcmod scroll .025 -.001
+ }
+
+ {
+ map textures/liquids/pool3d_3.tga
+ blendFunc GL_dst_color GL_one
+ rgbgen identity
+ tcmod scale .25 .5
+ tcmod scroll .001 .025
+ }
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_zero
+ rgbgen identity
+ }
+}
+
+textures/liquids/lavahell
+{
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm trans
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 600
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+
+}
+
+textures/liquids/lavahell_xdm1
+{
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm nodlight
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 600
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+}
+
+textures/liquids/lavahell_1000
+{
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 1000
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+
+textures/liquids/lavahell_2000
+ {
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 2000
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+textures/liquids/lavahell_750
+ {
+
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ q3map_lightsubdivide 32
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 500
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+
+textures/liquids/flatlavahell_1500
+ {
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ q3map_lightsubdivide 32
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 1500
+ cull disable
+
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+}
+
+
+textures/liquids/lavahell_2500
+ {
+
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 2500
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
+
+textures/liquids/lavahelldark
+ {
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 150
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+
+}
+
+textures/liquids/lavahellflat_400
+{
+
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 400
+ cull disable
+
+ tesssize 128
+ cull disable
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+
+}
+
+textures/liquids/calm_pool
+ {
+ qer_editorimage textures/liquids/pool2.tga
+ qer_trans .5
+ q3map_globaltexture
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .1
+
+
+
+ {
+ map textures/liquids/pool2.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+
+ {
+ map textures/liquids/pool3.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 0 .01
+ tcMod scale .5 .5
+ tcMod scroll -.025 .02
+ }
+
+
+}
+
+textures/liquids/calm_pool_bgtess
+ {
+ qer_editorimage textures/liquids/pool2.tga
+ qer_trans .5
+ q3map_globaltexture
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 256
+ deformVertexes wave 256 sin 1 1 1 .1
+
+
+
+ {
+ map textures/liquids/pool2.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+
+ {
+ map textures/liquids/pool3.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 0 .01
+ tcMod scale .5 .5
+ tcMod scroll -.025 .02
+ }
+
+
+}
+
+textures/liquids/ripplewater2_back
+{
+ qer_editorimage textures/liquids/ripplewater3.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ {
+ map textures/liquids/ripplewater3.tga
+ blendfunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod scale .05 .05
+ tcGen environment
+ tcMod scroll .001 .001
+ }
+
+}
+
+textures/liquids/slime1
+ {
+ qer_editorimage textures/liquids/slime7.tga
+ q3map_lightimage textures/liquids/slime7.tga
+ q3map_globaltexture
+ qer_trans .5
+
+ surfaceparm noimpact
+ surfaceparm slime
+ surfaceparm nolightmap
+ surfaceparm trans
+
+ q3map_surfacelight 100
+ tessSize 32
+ cull disable
+
+ deformVertexes wave 100 sin 0 1 .5 .5
+
+ {
+ map textures/liquids/slime7c.tga
+ tcMod turb .3 .2 1 .05
+ tcMod scroll .01 .01
+ }
+
+ {
+ map textures/liquids/slime7.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb .2 .1 1 .05
+ tcMod scale .5 .5
+ tcMod scroll .01 .01
+ }
+
+ {
+ map textures/liquids/bubbles.tga
+ blendfunc GL_ZERO GL_SRC_COLOR
+ tcMod turb .2 .1 .1 .2
+ tcMod scale .05 .05
+ tcMod scroll .001 .001
+ }
+
+
+}
+
+textures/liquids/slime1_2000
+ {
+ qer_editorimage textures/liquids/slime7.tga
+ q3map_lightimage textures/liquids/slime7.tga
+ q3map_globaltexture
+ qer_trans .5
+
+ surfaceparm noimpact
+ surfaceparm slime
+ surfaceparm nolightmap
+ surfaceparm trans
+
+ q3map_surfacelight 2000
+ tessSize 32
+ cull disable
+
+ deformVertexes wave 100 sin 0 1 .5 .5
+
+ {
+ map textures/liquids/slime7c.tga
+ tcMod turb .3 .2 1 .05
+ tcMod scroll .01 .01
+ }
+
+ {
+ map textures/liquids/slime7.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb .2 .1 1 .05
+ tcMod scale .5 .5
+ tcMod scroll .01 .01
+ }
+
+ {
+ map textures/liquids/bubbles.tga
+ blendfunc GL_ZERO GL_SRC_COLOR
+ tcMod turb .2 .1 .1 .2
+ tcMod scale .05 .05
+ tcMod scroll .001 .001
+ }
+
+
+}
+
+textures/hell/lavasolid
+{
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 450
+
+ tesssize 64
+ deformVertexes wave 100 sin 2 2 0 0.1
+
+ {
+ map textures/hell/lava2d.tga
+ tcGen environment
+ tcMod turb 0 0.25 0 0.05
+ }
+
+ {
+ map textures/hell/lava2d.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 0.25 0 0.05
+ }
+}
+
+textures/liquids/lavahell_2500_subd
+{
+ qer_editorimage textures/liquids/lavahell.tga
+ q3map_lightsubdivide 32
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+ q3map_surfacelight 2500
+ cull disable
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 3 2 .1 0.1
+
+ {
+ map textures/liquids/lavahell.tga
+ tcMod turb 0 .2 0 .1
+ }
+}
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/models.shader b/install/installs/Q3Pack/install/baseq3/scripts/models.shader
new file mode 100644
index 0000000..169df47
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/models.shader
@@ -0,0 +1,4824 @@
+//**********************************************************************//
+// models.shader sorted and updated //
+// by Eutectic - 23 Jan 2000 //
+// This file is irrelevant for Q3Radiant //
+// It was updated for the sake of completeness: //
+// shaders that belong here were moved from other shader files //
+// //
+// SHADERS THAT DIDN'T BELONG HERE AND MOVED TO PROPER FILE: 2 //
+// sprites/plasma1 //
+// sprites/plasma2 //
+// SHADERS THAT BELONGED HERE BUT WERE IN ANOTHER FILE: 1 //
+// models/mapobjects/portal_2/portal_3 //
+//**********************************************************************//
+
+//
+// this file contains shaders attached models
+//
+
+//**************************************************************//
+// //
+// MODELS/AMMO //
+// //
+//**************************************************************//
+
+models/ammo/grenade
+{
+ {
+ map models/ammo/grenade.tga
+ }
+ {
+ AnimMap 7 models/ammo/grenade_r.tga models/ammo/grenade_g.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/ammo/rocket/rockflar
+{
+ cull disable
+ {
+ map models/ammo/rocket/rockflar.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/ammo/rocket/rockfls1
+{
+ cull disable
+ {
+ map models/ammo/rocket/rockfls1.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/ammo/rocket/rockfls2
+{
+ cull disable
+ {
+ map models/ammo/rocket/rockfls2.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+
+//**************************************************************//
+// //
+// MODELS/FLAGS //
+// //
+//**************************************************************//
+
+models/flags/b_flag
+{
+ cull disable
+ deformVertexes wave 100 sin 0 3 0 .7
+
+ {
+ map models/flags/b_flag.tga
+
+ }
+
+
+}
+
+models/flags/b_flag2
+{
+
+ deformVertexes wave 100 sin 4 3 0 0.3
+ deformVertexes wave 30 sin 0 3 0 .8
+ deformVertexes normal .3 .2
+ cull none
+
+ {
+ map models/flags/b_flag2.tga
+ rgbGen identity
+ }
+ {
+ map models/flags/blue_fx.tga
+ tcGen environment
+ //tcmod scale 9 3
+ //tcmod scroll .1 .7
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map models/flags/b_flag2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+models/flags/flag_red
+{
+ cull none
+ deformVertexes wave 90 sin 1 5.6 1 .4
+ deformVertexes wave 100 sin 1 2 1 .9
+ deformVertexes wave 50 sin 1 .5 1 1
+ {
+ map models/flags/flag_red.tga
+ //blendfunc gl_src_alpha gl_one_minus_src_alpha
+ //alphaFunc GE128
+ blendFunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ depthWrite
+ }
+
+
+}
+
+models/flags/flagbits
+{
+ cull none
+ // deformVertexes wave 100 sin 0 5 0 .7
+ {
+ map models/flags/flagbits.tga
+ //blendfunc gl_src_alpha gl_one_minus_src_alpha
+ alphaFunc GE128
+ rgbGen lightingDiffuse
+ depthWrite
+ }
+
+
+}
+
+models/flags/flagtest
+{
+
+ deformVertexes wave 100 sin 4 3 0 0.3
+ deformVertexes wave 30 sin 0 3 0 .8
+ deformVertexes normal .2 .2
+ cull none
+
+ {
+ map models/flags/flagtest.tga
+ rgbGen identity
+ }
+ {
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+models/flags/pole
+{
+
+ {
+ map models/flags/skull.tga
+ tcGen environment
+ rgbGen lightingDiffuse
+
+ }
+
+
+}
+
+models/flags/r_flag
+{
+ cull disable
+ deformVertexes wave 100 sin 0 3 0 .7
+
+ {
+ map models/flags/r_flag.tga
+
+ }
+
+
+}
+
+models/flags/r_flag2
+{
+
+ deformVertexes wave 100 sin 4 3 0 0.3
+ deformVertexes wave 30 sin 0 3 0 .8
+ deformVertexes normal .3 .2
+ cull none
+
+ {
+ map models/flags/r_flag2.tga
+ rgbGen identity
+ }
+ {
+ map models/flags/red_fx.tga
+ tcGen environment
+ //tcmod scale 9 3
+ //tcmod scroll .1 .7
+
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map models/flags/r_flag2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map textures/sfx/shadow.tga
+ tcGen environment
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+models/flags/skull
+{
+
+ {
+ map models/flags/skull.tga
+ //tcGen environment
+ rgbGen lightingDiffuse
+
+ }
+
+
+}
+
+
+//**************************************************************//
+// //
+// MODELS/MAPOBJECTS //
+// //
+//**************************************************************//
+
+//******************************************************//
+// mapobjects root folder //
+//******************************************************//
+
+models/mapobjects/arenalogo
+{
+ deformVertexes wave 100 sin 0.25 0 0 0
+ {
+ map textures/effects/quadmap.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ tcMod turb 0 1 0 0.2
+ }
+}
+
+models/mapobjects/hand
+{
+ deformVertexes wave 100 sin 0 .3 0 .2
+
+ {
+ map models/mapobjects/hand.tga
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/kmlamp_white
+{
+
+ surfaceparm trans
+ {
+ map textures/effects/tinfxb.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+models/mapobjects/lamplight_y
+{
+ q3map_surfacelight 10000
+// light 1
+ cull disable
+ {
+ map textures/effects/envmapmach.tga
+ //map models/mapobjects/lamplight_y.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/mapobjects/lamplight_ys
+{
+ {
+ map models/mapobjects/lamplight_ys.tga
+ blendfunc GL_ONE GL_ONE
+
+ }
+}
+
+models/mapobjects/meteor
+{
+ deformVertexes move 0 0 10 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+
+
+ {
+ map models/mapobjects/meteor.tga
+ rgbGen vertex
+ tcMod scale 4.90 2.234
+ }
+
+
+}
+
+models/mapobjects/pitted_rust_ps
+{
+ cull disable
+
+ {
+ map models/mapobjects/pitted_rust_ps.tga
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/pj_light
+{
+ cull none
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/pj_light.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/standlamp2
+{
+
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/standlamp2.tga
+ blendfunc blend
+ rgbGen vertex
+ }
+
+}
+
+//******************************************************//
+// mapobjects/banner subfolder //
+//******************************************************//
+
+models/mapobjects/banner/q3banner02
+{
+ cull disable
+ nomipmaps
+ //deformVertexes wave 70 sin 0 .7 0 .4
+
+ {
+ map models/mapobjects/banner/q3banner02.tga
+ blendFunc add
+ tcmod scale 2 1
+ tcmod scroll .33 0
+ rgbGen wave sin .5 .5 0 .2
+ }
+ {
+ map models/mapobjects/banner/q3banner02.tga
+ blendFunc add
+ tcmod scale 3 1
+ tcmod scroll -.45 0
+ rgbGen wave sin .5 .5 0 .2
+ }
+ {
+ map models/mapobjects/banner/q3banner02x.tga
+ blendFunc add
+ tcmod scale 4 1
+ tcmod scroll 1 0
+ // rgbGen wave sin .5 .5 0 -.2
+ }
+}
+
+models/mapobjects/banner/q3banner04
+{
+ cull disable
+ nomipmaps
+
+ {
+ //map models/mapobjects/banner/q3banner04.tga
+ map textures/sfx/firegorre2.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale .05 .1
+ tcMod turb 0 .25 0 .6
+ tcmod scroll .4 .3
+ //rgbGen wave sin .5 .5 0 .1
+ }
+ {
+
+ map textures/sfx/bolts.tga
+ tcmod scale .2 .2
+ tcmod rotate 999
+ tcmod scroll 9 9
+ blendfunc add
+ rgbGen wave sin .5 .5 0 .2
+ }
+ {
+ map textures/sfx/firegorre2.tga
+ //map models/mapobjects/banner/q3banner04.tga
+ blendFunc add
+ tcGen environment
+ tcmod scale 5 5
+ tcmod scroll 0.09 0.04
+ //rgbGen wave sin .5 .5 0 .1
+ }
+
+}
+
+//******************************************************//
+// mapobjects/baph subfolder //
+//******************************************************//
+
+//models/mapobjects/baph/bapho_lamp
+//{
+//
+// {
+// map textures/sfx/specular3b.tga
+// tcGen environment
+// tcmod scroll .1 0
+// rgbGen identity
+// }
+// {
+// map models/mapobjects/baph/bapho_lamp.tga
+// blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+// rgbGen vertex
+// }
+//
+//
+//}
+
+models/mapobjects/baph/bapholamp_fx
+{
+ deformVertexes autoSprite
+ surfaceparm trans
+ cull none
+ nomipmaps
+ {
+ clampmap models/mapobjects/baph/bapholamp_fx.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod rotate 333
+ tcMod stretch sin .9 0.1 0 7
+ rgbGen identity
+ }
+ {
+ clampmap models/mapobjects/baph/bapholamp_fx2.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod rotate -301
+ tcMod stretch sin 1 .1 0 9
+ rgbGen identity
+ }
+
+}
+
+models/mapobjects/baph/baphomet
+{
+
+ {
+ map textures/sfx/firewalla.tga
+ tcmod scroll 0.1 1
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/baph/baphomet.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/baph/baphomet_gold
+{
+
+ {
+ map textures/sfx/firewalla.tga
+ tcmod scroll 0.1 1
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/baph/baphomet_gold.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/baph/wrist
+{
+ cull none
+ nomipmaps
+ surfaceparm trans
+
+ {
+ map models/mapobjects/baph/wrist.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 2 1
+ tcmod scroll 3 0
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/baph/wrist.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 1
+ tcmod scroll -5 0
+ rgbGen identity
+ }
+}
+
+//******************************************************//
+// mapobjects/barrel subfolder //
+//******************************************************//
+
+models/mapobjects/barrel/barrel2
+{
+
+ {
+ Map models/mapobjects/barrel/barrel2.tga
+ rgbgen vertex
+
+ }
+ {
+ clampmap models/mapobjects/barrel/barrel2fx.tga
+ blendFunc GL_ONE GL_ONE
+ // rgbgen wave triangle 1 1.4 0 9.5
+ tcMod rotate 403
+ }
+ {
+ clampmap models/mapobjects/barrel/barrel2fx.tga
+ blendFunc GL_ONE GL_ONE
+ // rgbgen wave triangle 1 1 0 8.7
+ tcMod rotate -100
+ }
+
+}
+
+//******************************************************//
+// mapobjects/bat subfolder //
+//******************************************************//
+
+models/mapobjects/bat/bat
+{
+ deformVertexes wave 10 sin 0 3 0 3
+ deformVertexes move 500 0 0 sawtooth 0 5 0 .1
+ deformVertexes move 0 0 7 sin 0 5 0 .5
+ cull disable
+
+ {
+ map models/mapobjects/bat/bat.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/bitch subfolder //
+//******************************************************//
+
+models/mapobjects/bitch/bitch02
+{
+ cull none
+
+ {
+ Map models/mapobjects/bitch/bitch02.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcMod scroll 0 0.3
+ }
+
+
+
+}
+
+models/mapobjects/bitch/forearm
+{
+ {
+ map models/mapobjects/bitch/forearm.tga
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/bitch/forearm01.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 2.2 0
+
+ }
+ {
+ map models/mapobjects/bitch/forearm02.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -1.1 0
+
+ }
+}
+
+models/mapobjects/bitch/hologirl
+{
+ cull none
+ //sort additive // alphaFunc with a later blend pass doesn't
+ // make its own sort properly
+ deformVertexes move 0 0 .7 sin 0 5 0 0.2
+
+
+ {
+ map models/mapobjects/bitch/hologirl.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingdiffuse
+
+ }
+ {
+ map models/mapobjects/bitch/hologirl2.tga
+ tcgen environment
+ tcMod scroll -6 -.2
+ tcMod scale 1 1
+ blendFunc GL_ONE GL_ONE
+ //rgbGen wave sin .5 .5 0 .1
+ }
+
+
+}
+
+models/mapobjects/bitch/orb
+{
+ deformVertexes autoSprite
+
+ q3map_surfacelight 70
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ clampmap models/mapobjects/bitch/orb.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod rotate 30
+ }
+
+}
+
+//******************************************************//
+// mapobjects/chain subfolder //
+//******************************************************//
+
+models/mapobjects/chain/chain
+{
+ cull disable
+ {
+ map models/mapobjects/chain/chain.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/chain/chain2
+{
+ cull disable
+ deformVertexes autoSprite2
+ {
+ map models/mapobjects/chain/chain2.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/chain/chain2_end
+{
+ cull disable
+ deformVertexes autoSprite2
+ {
+ map models/mapobjects/chain/chain2_end.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/chain/chain3
+{
+ {
+ map $whiteimage
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/chain/chain3.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+ {
+ map models/mapobjects/chain/chain3.tga
+ //blendFunc GL_ONE GL_ONE
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/colua0 subfolder //
+//******************************************************//
+
+models/mapobjects/colua0/colua0_flare
+{
+ deformVertexes autoSprite
+
+ q3map_surfacelight 1000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map models/mapobjects/colua0/colua0_flare.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/mapobjects/colua0/colua0_lght
+{
+ surfaceparm trans
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// mapobjects/console subfolder //
+//******************************************************//
+
+models/mapobjects/console/centercon
+{
+ cull disable
+ {
+ map models/mapobjects/console/scrolltext.tga
+ blendFunc add
+ tcmod scroll 0 -.3
+ //tcMod stretch sin .9 0.1 0 1.1
+ rgbGen vertex
+ }
+
+ {
+ clampmap models/mapobjects/console/centercon.tga
+ blendFunc add
+ tcMod stretch sin .9 0.1 0 .2
+ tcmod rotate 40
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/console/console
+{
+ cull disable
+
+ {
+ map textures/effects/tinfx2c.tga
+ blendFunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/console/console.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/console/console2.tga
+ blendFunc add
+ rgbGen vertex
+ rgbGen wave sin .5 .5 0 .2
+ }
+}
+
+models/mapobjects/console/jacobs
+{
+ cull disable
+
+ {
+ map textures/effects/tinfxb.tga
+ blendFunc add
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/mapobjects/console/rotate
+{
+ cull disable
+
+ {
+ clampmap models/mapobjects/console/rotate.tga
+ blendFunc add
+ //tcMod stretch sin .9 0.1 0 .5
+ tcmod rotate 40
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/console/scrolltext
+{
+ cull disable
+
+ {
+ map models/mapobjects/console/scrolltext.tga
+ blendFunc add
+ tcmod scroll 0 -.3
+ //tcMod stretch sin .9 0.1 0 1.1
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/console/sphere
+{
+ cull disable
+
+ {
+ map models/mapobjects/console/spherex2.tga
+ blendFunc add
+ tcmod rotate 40
+ tcGen environment
+ tcmod scroll 5 .4
+ rgbGen wave sin .5 .5 0 .2
+ }
+
+ {
+ map models/mapobjects/console/spherex.tga
+ blendFunc add
+ tcmod rotate 40
+ tcGen environment
+ tcmod scroll 5 .4
+ rgbGen wave sin .5 .5 0 -.2
+ }
+}
+
+models/mapobjects/console/sphere2
+{
+ cull disable
+ deformVertexes autoSprite
+
+ //{
+ // clampmap models/mapobjects/console/sphere2.tga
+ // alphaFunc GE128
+ // depthWrite
+ // //tcMod stretch sin .9 0.1 0 .5
+ // tcmod rotate 40
+ // rgbGen identity
+ //}
+ {
+ map models/mapobjects/console/sphere3.tga
+ blendFunc add
+ // depthWrite
+ rgbGen wave sin .5 .5 0 .2
+ }
+ {
+ map models/mapobjects/console/sphere4.tga
+ blendFunc add
+ // depthWrite
+ rgbGen wave sin .5 .5 0 -.2
+ }
+ {
+ clampmap models/mapobjects/console/sphere2.tga
+ alphaFunc GE128
+ //blendfunc blend
+ //depthWrite
+ //tcMod stretch sin .9 0.1 0 .5
+ tcmod rotate 40
+ rgbGen identity
+ }
+}
+
+models/mapobjects/console/under
+{
+ cull disable
+ surfaceparm alphashadow
+ //surfaceparm nodraw
+ {
+ clampmap models/mapobjects/console/under.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+
+ }
+}
+
+//******************************************************//
+// mapobjects/corpse subfolder //
+//******************************************************//
+
+models/mapobjects/corpse/chain
+{
+ cull disable
+
+ {
+ map models/mapobjects/corpse/chain.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/corpse/corpse
+{
+ deformVertexes wave 100 sin 0 .2 0 .2
+
+ {
+ map models/mapobjects/corpse/corpse.tga
+ rgbGen exactVertex
+ }
+
+
+}
+
+models/mapobjects/corpse/intestine
+{
+
+ cull disable
+
+ {
+ map models/mapobjects/corpse/intestine.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/corpse/intestine2
+{
+ cull disable
+ deformVertexes wave 100 sin 0 .6 0 .2
+ // surfaceparm trans
+ {
+ map models/mapobjects/corpse/intestine2.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/corpse/spine
+{
+ cull disable
+
+ {
+ map models/mapobjects/corpse/spine.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/corpse/torso
+{
+ deformVertexes wave 100 sin 0 .2 0 .2
+ {
+ map textures/liquids/proto_grueldark.tga
+ //tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 4 4
+ tcMod scroll 0 -.09
+ tcMod turb 0 0.05 0 .05
+ //rgbGen identity
+ }
+ //{
+ // map textures/liquids/proto_grueldark.tga
+ // //tcGen environment
+ // blendFunc GL_ONE GL_ONE
+ // tcmod scale 2 2
+ // tcMod scroll 0 -.09
+ // tcMod turb 0 0.07 0 .08
+ // //rgbGen identity
+ //}
+ {
+ map models/mapobjects/corpse/torso.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ }
+}
+
+//******************************************************//
+// mapobjects/cross subfolder //
+//******************************************************//
+
+models/mapobjects/cross/cross_skull
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ map models/mapobjects/cross/cross_skull.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/cross/cross
+{
+ q3map_lightimage models/mapobjects/cross/cross_light.tga
+ q3map_surfacelight 300
+
+ {
+ map textures/sfx/firewalla.tga
+ tcmod scale 4 4
+ tcmod scroll 0.1 2
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/cross/cross.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+
+}
+
+//******************************************************//
+// mapobjects/flag subfolder //
+//******************************************************//
+
+//models/mapobjects/flag/banner_eg1
+//{
+// cull disable
+// surfaceparm nolightmap
+// deformVertexes wave 100 sin 0 8 0 8
+// sort banner
+// {
+// map models/mapobjects/flag/banner_eg1.tga
+// // blendfunc gl_src_alpha gl_one_minus_src_alpha
+// alphaFunc GE128
+// rgbGen vertex
+// }
+//
+//
+//}
+
+models/mapobjects/flag/banner_strgg
+{
+ cull disable
+ surfaceparm nolightmap
+ surfaceparm alphashadow
+
+ deformVertexes wave 100 sin 0 3 0 .7
+ //deformVertexes normal 0.2 2
+ sort banner
+ {
+ map models/mapobjects/flag/banner_strgg.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ alphaFunc GE128
+ rgbGen vertex
+
+ }
+}
+
+models/mapobjects/flag/banner02
+{
+ cull disable
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .7
+
+ {
+ map models/mapobjects/flag/banner02.tga
+
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/flares subfolder //
+//******************************************************//
+
+models/mapobjects/flares/electric
+{
+
+
+ q3map_surfacelight 200
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ clampmap models/mapobjects/flares/electric.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .8 2 0 9
+ tcMod rotate 360
+ }
+ {
+ clampmap models/mapobjects/flares/electric.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 9.5
+ tcMod rotate -202
+ }
+
+}
+
+//******************************************************//
+// mapobjects/gratelamp subfolder //
+//******************************************************//
+
+models/mapobjects/gratelamp/gratelamp_flare
+{
+ deformVertexes autoSprite
+
+ q3map_surfacelight 300
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map models/mapobjects/gratelamp/gratelamp_flare.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/mapobjects/gratelamp/gratelamp
+{
+ cull disable
+
+ {
+ map models/mapobjects/gratelamp/gratelamp.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/gratelamp/gratetorch
+{
+ cull disable
+
+ {
+ map models/mapobjects/gratelamp/gratetorch.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/gratelamp/gratetorch2b
+{
+ cull disable
+
+ {
+ map models/mapobjects/gratelamp/gratetorch2b.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/grenadel subfolder //
+//******************************************************//
+
+models/mapobjects/grenadel/grenadelx
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ clampmap models/mapobjects/grenadel/grenadelx.tga
+ tcMod rotate 10
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+}
+
+//******************************************************//
+// mapobjects/horned subfolder //
+//******************************************************//
+
+models/mapobjects/horned/horned
+{
+
+ {
+ map textures/sfx/firewalla.tga
+ tcmod scroll 0.1 1
+ }
+ {
+ map models/mapobjects/horned/horned.tga
+ blendFunc blend
+ rgbGen vertex
+ }
+
+}
+
+//******************************************************//
+// mapobjects/jesus subfolder //
+//******************************************************//
+
+models/mapobjects/jesus/jesuswall
+{
+ deformVertexes wave 100 sin 0 .2 0 .2
+ cull none
+ {
+ map $lightmap
+ //rgbGen identity
+ }
+ {
+ map models/mapobjects/jesus/jesuswall.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen vertex
+ alphaGen lightingSpecular
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/jets subfolder //
+//******************************************************//
+
+models/mapobjects/jets/jet_1
+{
+ surfaceparm trans
+ nomipmaps
+ cull disable
+ {
+ map models/mapobjects/jets/jet_1.tga
+ blendFunc add
+ tcmod scale .5 1
+ tcmod scroll 6 0
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/jets/jet_2.tga
+ blendFunc add
+ tcmod scroll 3 -.5
+ rgbGen wave inversesawtooth -.3 1.3 0 .5
+ }
+}
+
+models/mapobjects/jets/jet_as
+{
+ deformVertexes autoSprite2
+ deformVertexes wave 100 sin 0 1 0 9
+ surfaceparm trans
+ nomipmaps
+ {
+ map models/mapobjects/jets/jet_as.tga
+ blendFunc add
+ rgbGen identity
+ }
+}
+
+//******************************************************//
+// mapobjects/lamps subfolder //
+//******************************************************//
+
+models/mapobjects/lamps/beam
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ deformVertexes move 0 0 2 sin 0 5 0 0.3
+ deformVertexes move .6 .8 0 sin 0 9 0 0.1
+ cull none
+ //nopicmip
+ {
+ map models/mapobjects/lamps/beam.tga
+ tcMod Scroll .3 0
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ map models/mapobjects/lamps/beam.tga
+ tcMod Scroll -.3 0
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/mapobjects/lamps/bot_flare
+{
+ deformVertexes autoSprite
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ clampmap models/mapobjects/lamps/bot_flare.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod rotate 20
+
+
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_flare2
+{
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+ deformVertexes wave 100 sin 0 1 0 9
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ map models/mapobjects/lamps/bot_flare2.tga
+ blendFunc GL_ONE GL_ONE
+
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_lamp
+{
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+
+ {
+ map models/mapobjects/lamps/bot_lamp.tga
+ rgbGen vertex
+
+ }
+
+
+}
+models/mapobjects/lamps/bot_lamp2
+{
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+
+ {
+ map models/mapobjects/lamps/bot_lamp2.tga
+ rgbGen vertex
+
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_lamp2b
+{
+ cull disable
+ deformVertexes move 0 0 2 sin 0 5 0 0.3
+ deformVertexes move .6 .8 0 sin 0 9 0 0.1
+ {
+ map models/mapobjects/lamps/bot_lamp2b.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_light
+{
+ cull disable
+ q3map_surfacelight 200
+ deformVertexes move 0 0 2 sin 0 5 0 0.3
+ deformVertexes move .6 .8 0 sin 0 9 0 0.1
+ {
+ map models/mapobjects/lamps/bot_light.tga
+ rgbGen identity
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_wing
+{
+ deformVertexes move 0 0 3 sin 0 5 0 0.1
+ deformVertexes move 2 2 0 sin 0 9 0 0.05
+ deformVertexes wave 100 sin 0 .5 0 .5
+ cull disable
+
+ {
+ map models/mapobjects/lamps/bot_wing.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/lamps/bot_wing2
+{
+ //deformVertexes wave 100 sin 0 .5 0 .5
+ //deformVertexes move 0 0 1 triangle 0 20 0 1
+ deformVertexes move 0 0 2 sin 0 5 0 0.3
+ deformVertexes move .6 .8 0 sin 0 9 0 0.1
+ deformVertexes wave 100 sin 0 .5 0 .5
+ cull disable
+
+ {
+ map models/mapobjects/lamps/bot_wing2.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/lamps/flare03
+{
+ deformVertexes autoSprite
+
+ q3map_surfacelight 200
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map models/mapobjects/lamps/flare03.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+//******************************************************//
+// mapobjects/lightning subfolder //
+//******************************************************//
+
+models/mapobjects/lightning/blu/blu01
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 3000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 15 models/mapobjects/lightning/blu/blu01.tga models/mapobjects/lightning/blu/blu02.tga models/mapobjects/lightning/blu/blu03.tga models/mapobjects/lightning/blu/blu04.tga models/mapobjects/lightning/blu/blu05.tga models/mapobjects/lightning/blu/blu06.tga models/mapobjects/lightning/blu/blu07.tga models/mapobjects/lightning/blu/blu08.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/lightning/red/red01
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 3000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 15 models/mapobjects/lightning/red/red01.tga models/mapobjects/lightning/red/red02.tga models/mapobjects/lightning/red/red03.tga models/mapobjects/lightning/red/red04.tga models/mapobjects/lightning/red/red05.tga models/mapobjects/lightning/red/red06.tga models/mapobjects/lightning/red/red07.tga models/mapobjects/lightning/red/red08.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/lightning/white/white1
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 3000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 15 models/mapobjects/lightning/white/white1.tga models/mapobjects/lightning/white/white2.tga models/mapobjects/lightning/white/white3.tga models/mapobjects/lightning/white/white4.tga models/mapobjects/lightning/white/white5.tga models/mapobjects/lightning/white/white6.tga models/mapobjects/lightning/white/white7.tga models/mapobjects/lightning/white/white8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/lightning/yel/yel01
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 3000
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 15 models/mapobjects/lightning/yel/yel01.tga models/mapobjects/lightning/yel/yel02.tga models/mapobjects/lightning/yel/yel03.tga models/mapobjects/lightning/yel/yel04.tga models/mapobjects/lightning/yel/yel05.tga models/mapobjects/lightning/yel/yel06.tga models/mapobjects/lightning/yel/yel07.tga models/mapobjects/lightning/yel/yel08.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+//******************************************************//
+// mapobjects/pipe subfolder //
+//******************************************************//
+
+models/mapobjects/pipe/pipe02
+{
+
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/pipe/pipe02.tga
+ blendfunc blend
+ rgbGen lightingdiffuse
+ }
+
+}
+
+models/mapobjects/pipe/pipe02x
+{
+ q3map_lightimage textures/sfx/electricslime_old.tga
+ q3map_surfacelight 150
+ cull disable
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ tcmod scale 1 2
+ blendfunc add
+ rgbGen identity
+ }
+ {
+ map textures/sfx/electricslime_old.tga
+ //tcGen environment
+ //tcmod scale 2 2
+ //tcmod rotate 240
+ tcmod scroll 7.2 1
+ blendfunc add
+ rgbGen identity
+ }
+
+}
+
+//******************************************************//
+// mapobjects/podium subfolder //
+//******************************************************//
+
+models/mapobjects/podium/podium
+{
+ {
+ map models/mapobjects/podium/podium.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod scroll .2 0.01
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/podium/podium.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/mapobjects/podium/podiumglo.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 1 1 0 .2
+ }
+
+
+}
+
+models/mapobjects/podium/podiumfx1
+{
+ cull none
+ surfaceparm trans
+ {
+ map models/mapobjects/podium/podiumfx1.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 2 -.3
+ rgbGen wave inversesawtooth 0 1 .35 .3
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -1.7 -.3
+ rgbGen wave inversesawtooth 0 1 .35 .3
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -1.1 -.3
+ rgbGen wave inversesawtooth 0 1 .35 .3
+ }
+}
+
+models/mapobjects/podium/podiumfx2
+{
+ cull none
+ surfaceparm trans
+ {
+ map models/mapobjects/podium/podiumfx1.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .5
+ tcmod scroll .8 -.3
+ rgbGen wave inversesawtooth 0 1 .7 .6
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .5
+ tcmod scroll -1.7 -.3
+ rgbGen wave inversesawtooth 0 1 .7 .6
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .5
+ tcmod scroll -1.1 -.3
+ rgbGen wave inversesawtooth 0 1 .7 .6
+ }
+}
+
+models/mapobjects/podium/podiumfx3
+{
+ cull none
+ surfaceparm trans
+ {
+ map models/mapobjects/podium/podiumfx1.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .1
+ tcmod scroll 1 -.3
+ rgbGen wave inversesawtooth 0 1 1.1 .9
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .1
+ tcmod scroll -1.7 -.3
+ rgbGen wave inversesawtooth 0 1 1.1 .9
+ }
+ {
+ map models/mapobjects/podium/podiumfx1b.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 1 .1
+ tcmod scroll -1.1 -.3
+ rgbGen wave inversesawtooth 0 1 1.1 .9
+ }
+}
+
+models/mapobjects/podium/podskull
+{
+ {
+ map models/mapobjects/podium/podskull.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod scroll .2 0.03
+ rgbGen identity
+ }
+ {
+ map models/mapobjects/podium/podskull.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/mapobjects/podium/podskullfx.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 1 1 0 .2
+ }
+}
+
+//******************************************************//
+// mapobjects/portal_2 subfolder //
+//******************************************************//
+
+models/mapobjects/portal_2/portal_3
+{
+ // *************************************************
+ // * Portal Sides *
+ // * April 30 1999 *
+ // * Please Comment Changes *
+ // *************************************************
+
+
+ {
+ map models/mapobjects/portal_2/portal_3.tga
+ rgbGen vertex
+ }
+
+ {
+ map models/mapobjects/portal_2/portal_3_glo.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 .2 .5
+ }
+
+}
+
+models/mapobjects/portal_2/portal_3_edge
+{
+ {
+ map models/mapobjects/portal_2/portal_3_edge.tga
+ rgbGen vertex
+ }
+
+ {
+ map models/mapobjects/portal_2/portal_3_edge_glo.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 9.7 .5
+ }
+
+}
+
+//******************************************************//
+// mapobjects/scoreboard subfolder //
+//******************************************************//
+
+models/mapobjects/scoreboard/s_name
+{
+ sort additive
+ cull disable
+ deformVertexes text0
+ {
+ map gfx/2d/bigchars.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+models/mapobjects/scoreboard/s_score
+{
+ sort additive
+ cull disable
+ deformVertexes text1
+ {
+ map gfx/2d/bigchars.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+}
+
+//******************************************************//
+// mapobjects/signs subfolder //
+//******************************************************//
+
+models/mapobjects/signs/bioh
+{
+ cull disable
+
+ {
+ map models/mapobjects/signs/bioh.tga
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/skel subfolder //
+//******************************************************//
+
+models/mapobjects/skel/skel
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ map models/mapobjects/skel/skel.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/skel/xray
+{
+ deformVertexes move 0 0 .7 sin 0 5 0 0.2
+ cull disable
+ q3map_surfacelight 300
+ {
+ map models/mapobjects/skel/xray.tga
+ blendfunc add
+ rgbGen wave sin 1 .8 0 .3
+ }
+ {
+
+ map models/mapobjects/bitch/hologirl2.tga
+ tcMod scroll -6 -.2
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/skull subfolder //
+//******************************************************//
+
+models/mapobjects/skull/monkeyhead
+{
+ //deformVertexes wave 100 sin 0 .7 0 .2
+ //deformVertexes wave 100 sin 0 .5 1 .1
+ cull disable
+ nomipmaps
+
+ {
+ map models/mapobjects/skull/monkeyhead.tga
+ rgbGen vertex
+ }
+ {
+ //animMap 0.5 models/mapobjects/skull/monkeyhead.tga //models/mapobjects/wallhead/femhead2.tga
+ map models/mapobjects/skull/monkeyheadb.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaGen wave sin 0 1 1 .1
+ // alphaGen wave triangle 0 .7 0 .2
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/skull/monkeyhead2
+{
+ cull disable
+ surfaceparm trans
+ nomipmaps
+ {
+ map models/mapobjects/skull/monkeyhead2.tga
+ blendfunc blend
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/skull/ribcage
+{
+ sort underwater
+ cull disable
+ {
+ map models/mapobjects/skull/ribcage.tga
+ // blendfunc gl_src_alpha gl_one_minus_src_alpha
+ alphaFunc GE128
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/slamp subfolder //
+//******************************************************//
+
+models/mapobjects/slamp/slamp2
+{
+ cull disable
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ {
+ map models/mapobjects/slamp/slamp2.tga
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ map textures/effects/envmapdimb.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ //rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/mapobjects/slamp/slamp3
+{
+ deformVertexes autoSprite2
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 100
+
+ {
+ map models/mapobjects/slamp/slamp3.tga
+ blendFunc GL_ONE GL_ONE
+
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/spotlamp subfolder //
+//******************************************************//
+
+models/mapobjects/spotlamp/beam
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ cull none
+ nomipmaps
+ {
+ map models/mapobjects/spotlamp/beam.tga
+ tcMod Scroll .3 0
+ blendFunc GL_ONE GL_ONE
+ }
+ //{
+ // map models/mapobjects/spotlamp/beam.tga
+ // tcMod Scroll -.3 0
+ // blendFunc GL_ONE GL_ONE
+ //}
+
+}
+
+models/mapobjects/spotlamp/spotlamp
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ map models/mapobjects/spotlamp/spotlamp.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+models/mapobjects/spotlamp/spotlamp_l
+{
+ cull disable
+ q3map_surfacelight 200
+
+ {
+ map models/mapobjects/spotlamp/spotlamp_l.tga
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/teleporter subfolder //
+//******************************************************//
+
+models/mapobjects/teleporter/energy
+{
+ cull disable
+
+
+ {
+ map models/mapobjects/teleporter/energy.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 2.2 1.3
+ rgbGen wave inversesawtooth -.3 1.3 0 1.3
+
+ }
+ {
+ map models/mapobjects/teleporter/energy2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -1 .5
+ rgbGen wave inversesawtooth -.2 1.2 0 .5
+
+ }
+ {
+ map models/mapobjects/teleporter/energy3.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 3 0
+ rgbGen wave triangle 1 1 0 5.3
+
+ }
+
+}
+
+models/mapobjects/teleporter/teleporter_edge
+{
+
+
+ {
+ map models/mapobjects/teleporter/teleporter_edge.tga
+ rgbGen vertex
+ }
+ {
+ map models/mapobjects/teleporter/teleporter_edge2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave inversesawtooth 0 1 .2 1.5
+ }
+
+}
+
+models/mapobjects/teleporter/transparency
+{
+ cull disable
+
+ {
+ map models/mapobjects/teleporter/transparency.tga
+ blendfunc GL_ONE GL_ONE
+
+ }
+ {
+ map models/mapobjects/teleporter/transparency2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll .1 .2
+ }
+
+}
+
+models/mapobjects/teleporter/transparency2
+{
+ cull disable
+
+ {
+ map models/mapobjects/teleporter/transparency2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll .1 .2
+ }
+
+}
+
+models/mapobjects/teleporter/widget
+{
+ cull disable
+
+ {
+ map models/mapobjects/teleporter/widget.tga
+ blendfunc GL_ONE GL_ONE
+
+ }
+ {
+ map models/mapobjects/teleporter/transparency2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -.1 -.2
+ }
+
+}
+
+//******************************************************//
+// mapobjects/timlamp subfolder //
+//******************************************************//
+
+models/mapobjects/timlamp/timlamp
+{
+ cull disable
+ surfaceparm alphashadow
+ {
+ map models/mapobjects/timlamp/timlamp.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/tree subfolder //
+//******************************************************//
+
+models/mapobjects/tree/branch
+{
+ cull disable
+ deformVertexes wave 100 sin 0 .1 0 .2
+ surfaceparm trans
+ {
+ map models/mapobjects/tree/branch.tga
+ alphaFunc GE128
+ depthWrite
+ //rgbGen identity
+ //rgbGen lightingDiffuse
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/wallhead subfolder //
+//******************************************************//
+
+//models/mapobjects/wallhead/femhead
+//{
+// deformVertexes wave 100 sin 0 .7 0 .2
+// cull disable
+//
+//
+// {
+// map models/mapobjects/wallhead/femhead2.tga
+// rgbGen vertex
+// }
+// {
+// map models/mapobjects/wallhead/femhead.tga
+// Blendfunc GL_ONE GL_ONE
+// rgbGen vertex
+// rgbGen wave triangle 0 1 0 .05
+// }
+//
+//}
+
+models/mapobjects/wallhead/femhead
+{
+ deformVertexes wave 100 sin 0 .7 0 .2
+ //deformVertexes wave 100 sin 0 1 1 .1
+ cull disable
+
+ {
+ map models/mapobjects/wallhead/femhead3.tga
+ rgbGen vertex
+ }
+ {
+ //animMap 0.5 models/mapobjects/wallhead/femhead4.tga //models/mapobjects/wallhead/femhead2.tga
+ map models/mapobjects/wallhead/femhead4.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaGen wave sin 0 1 1 .1
+ // alphaGen wave triangle 0 .7 0 .2
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/wallhead/lion_m
+{
+ {
+ map models/mapobjects/wallhead/lion_m.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen vertex
+ }
+ {
+ map textures/sfx/firewalla.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 0.1 1
+ //rgbGen wave triangle .5 1 0 .4
+ }
+ {
+ map models/mapobjects/wallhead/lion_m.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ }
+
+}
+
+//models/mapobjects/wallhead/tongue
+//{
+// {
+// //rgbGen lightingDiffuse
+// map $whiteimage
+// rgbGen vertex
+// }
+// {
+// map models/mapobjects/wallhead/tongue.tga
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+// rgbGen identity
+// alphaGen lightingSpecular
+// }
+//}
+
+models/mapobjects/wallhead/wallhead
+{
+
+
+ {
+ map models/mapobjects/wallhead/wallhead.tga
+ rgbGen vertex
+ }
+
+}
+
+models/mapobjects/wallhead/wallhead_eye
+{
+
+
+ {
+ animMap 0.2 models/mapobjects/wallhead/wallhead_eye.tga models/mapobjects/wallhead/wallhead_eye2.tga
+ rgbGen vertex
+ }
+
+
+}
+
+//******************************************************//
+// mapobjects/weeds subfolder //
+//******************************************************//
+
+models/mapobjects/weeds/weed01
+{
+ sort additive
+ cull disable
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .7
+ {
+ map models/mapobjects/weeds/weed01.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ }
+
+
+}
+
+models/mapobjects/weeds/weed02
+{
+ sort underwater
+ cull disable
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .7
+ {
+ map models/mapobjects/weeds/weed02.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ }
+
+
+}
+
+
+//**************************************************************//
+// //
+// MODELS/PLAYERS //
+// //
+//**************************************************************//
+
+//******************************************************//
+// models/players/anarki subfolder //
+//******************************************************//
+
+models/players/anarki/anarki_b
+{
+ {
+ map textures/effects/envmapbfg.tga
+ tcGen environment
+ tcmod rotate 350
+ tcmod scroll 3 1
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/players/anarki/anarki_b.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/anarki/anarki_g
+{
+ {
+ map models/players/anarki/anarki_g.tga
+ //rgbGen vertex
+ }
+ {
+
+ map models/players/anarki/anarki_g_fx.tga
+ rgbGen lightingDiffuse
+ rgbGen wave triangle 0 1 0 .5
+ blendfunc gl_ONE gl_ONE
+ }
+}
+
+//******************************************************//
+// models/players/biker subfolder //
+//******************************************************//
+
+models/players/biker/cadaver
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/biker/cadaver.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+//******************************************************//
+// models/players/bones subfolder //
+//******************************************************//
+
+models/players/bones/blue
+{
+
+ cull disable
+ {
+ map models/players/bones/blue.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/bones/red
+{
+
+ cull disable
+ {
+ map models/players/bones/red.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/bones/stiff
+{
+
+ cull disable
+ {
+ map models/players/bones/stiff.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/bones/xray
+{
+
+ cull disable
+ {
+ map models/players/bones/xray.tga
+ blendfunc add
+ //rgbGen wave sin 1 .8 0 9
+ }
+ {
+
+ map models/mapobjects/bitch/hologirl2.tga
+ tcMod scroll -6 -.2
+ tcgen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+
+
+}
+
+//******************************************************//
+// models/players/brandon subfolder //
+//******************************************************//
+
+models/players/brandon/branhat
+{
+ {
+ map models/players/light/brandon/branhat.tga
+ }
+ {
+ map models/players/light/brandon/branhat.glow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/brandon/braneye
+{
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/light/brandon/braneye.tga
+ rgbGen identity
+ alphaGen lightingSpecular
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ }
+ {
+ map models/players/light/brandon/braneye.glow.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/players/crash subfolder //
+//******************************************************//
+
+models/players/crash/crash
+{
+ {
+ map textures/effects/envmapblue.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/crash/crash.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/crash/crash_f
+{
+
+ {
+ map textures/sfx/snow.tga
+ tcmod scale .5 .5
+ tcmod scroll 9 0.3
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendFunc add
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/crash/crash_t
+{
+ {
+ map textures/effects/envmapblue.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/crash/crash_t.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+//******************************************************//
+// models/players/doom subfolder //
+//******************************************************//
+
+models/players/doom/doom_f
+{
+ {
+ map models/players/doom/doom_f.tga
+ rgbGen lightingDiffuse
+ }
+ {
+
+ map models/players/doom/doom_fx.tga
+ tcGen environment
+ rgbGen lightingDiffuse
+ blendfunc gl_ONE gl_ONE
+ }
+
+}
+
+models/players/doom/f_doom
+{
+ {
+ map models/players/doom/f_doom.tga
+ }
+ {
+
+ map models/players/doom/fx_doom.tga
+ tcGen environment
+ rgbGen lightingDiffuse
+ blendfunc gl_ONE gl_ONE
+ }
+}
+
+models/players/doom/phobos
+{
+ {
+ map models/players/doom/phobos_fx.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 7 7
+ tcMod scroll 5 -5
+ tcmod rotate 360
+ rgbGen identity
+ }
+ //{
+ // map textures/effects/tinfx2.tga
+ // tcGen environment
+ // blendFunc GL_ONE GL_ONE
+ // rgbGen lightingDiffuse
+ //}
+ {
+ map models/players/doom/phobos.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+}
+
+models/players/doom/phobos_f
+{
+
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/doom/phobos_f.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+}
+
+//******************************************************//
+// models/players/grunt subfolder //
+//******************************************************//
+
+models/players/grunt/stripe_h
+{
+
+ {
+ //map textures/effects/tinfx.tga
+ map textures/sfx/electricgrade3.tga
+ //tcmod scale 6 6
+ //tcmod rotate 350
+ tcmod scroll 0 -.5
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/players/grunt/stripe_h.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ rgbGen lightingDiffuse
+ }
+
+}
+
+//******************************************************//
+// models/players/hunter subfolder //
+//******************************************************//
+
+models/players/hunter/harpy
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/hunter/hunter2.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/hunter/harpy_f
+{
+ surfaceparm nodraw
+}
+
+models/players/hunter/harpy_h
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/hunter/hunter_h.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/hunter/hunter_f
+{
+ deformVertexes wave 100 sin 0 .3 0 .2
+ cull disable
+ {
+ map models/players/hunter/hunter_f.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/hunter/red_f
+{
+ deformVertexes wave 100 sin 0 .3 0 .2
+ cull disable
+ {
+ map models/players/hunter/red_f.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+//******************************************************//
+// models/players/klesk subfolder //
+//******************************************************//
+
+models/players/klesk/flisk
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/klesk/flisk.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+models/players/klesk/flisk_h
+{
+ {
+ map models/players/klesk/flisk_h.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/bolts.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale 2 2
+ tcmod scroll 2 2
+ }
+ {
+ map models/players/klesk/flisk_h.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/klesk/klesk_h
+{
+ {
+ map models/players/klesk/klesk_h.tga
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+
+ }
+
+ {
+ map models/players/klesk/klesk_g.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave triangle .5 1 0 .5
+
+ }
+}
+
+//******************************************************//
+// models/players/lucy subfolder //
+//******************************************************//
+
+models/players/lucy/angel
+{
+ cull none
+
+ {
+ map models/players/lucy/angel.tga
+ alphaFunc GE128
+ depthWrite
+ //rgbGen identity
+ rgbGen lightingDiffuse
+
+ }
+ {
+
+ //map textures/effects/envmapcirc3.tga
+
+ map models/mapobjects/bitch/hologirl2.tga
+ tcgen environment
+ tcMod scroll -6 -.2
+ tcMod scale 1 1
+ blendFunc GL_ONE GL_ONE
+ //rgbGen identity
+ //rgbGen vertex
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/lucy/h_angel
+{
+ cull none
+
+ {
+ map models/players/lucy/h_angel.tga
+ depthWrite
+ rgbGen lightingDiffuse
+
+ }
+ {
+
+ //map textures/effects/envmapcirc3.tga
+
+ map models/mapobjects/bitch/hologirl2.tga
+ tcgen environment
+ tcMod scroll -6 -.2
+ tcMod scale 1 1
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ // rgbGen vertex
+ rgbGen lightingDiffuse
+ }
+
+}
+
+//******************************************************//
+// models/players/major subfolder //
+//******************************************************//
+
+models/players/major/daemia
+{
+ {
+ map textures/sfx/electricslime.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 3 3
+ tcMod turb 0 .5 0 .7
+ tcMod scroll 1 -1
+ rgbGen identity
+ }
+ {
+ map models/players/major/daemia.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+//******************************************************//
+// models/players/mynx subfolder //
+//******************************************************//
+
+models/players/mynx/mynx_shiny
+{
+
+ {
+ map textures/sfx/specular5.tga
+ blendFunc GL_ONE GL_ZERO
+ tcGen environment
+ }
+ {
+ map models/players/mynx/mynx_shiny.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+}
+
+//******************************************************//
+// models/players/orbb subfolder //
+//******************************************************//
+
+models/players/orbb/blue_h
+{
+
+ {
+ map models/players/orbb/blue_h.tga
+ rgbGen lightingDiffuse
+ }
+
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ blendfunc blend
+ tcmod rotate 90
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/orbb/orbb_h2
+{
+ {
+ map models/players/orbb/orbb_h2.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/effects/tinfx.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/orbb/orbb_h2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/orbb/orbb_light
+{
+ {
+ map models/players/orbb/orbb_light.tga
+ rgbGen wave sin 1 1 0 1
+
+ }
+}
+
+models/players/orbb/orbb_light_blue
+{
+ {
+ map models/players/orbb/orbb_light_blue.tga
+ rgbGen wave sin 1 1 0 1
+
+ }
+}
+
+models/players/orbb/red_h
+{
+
+ {
+ map models/players/orbb/red_h.tga
+ rgbGen lightingDiffuse
+ }
+
+ {
+ clampmap textures/base_floor/techfloor2.tga
+ blendfunc blend
+ tcmod rotate 90
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/orbb/orbb_tail
+{
+
+ {
+ map models/players/orbb/orbb_tail.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 0 .5
+ rgbGen wave sin .5 .25 0 .5
+ }
+}
+
+models/players/orbb/orbb_tail_blue
+{
+
+ {
+ map models/players/orbb/orbb_tail_blue.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 0 .5
+ rgbGen wave sin .5 .25 0 .5
+ }
+}
+
+//******************************************************//
+// models/players/parkr subfolder //
+//******************************************************//
+
+models/players/parkr/parkr_chest
+{
+ {
+ map models/players/parkr/parkr_chest.tga
+ }
+ {
+ AnimMap 4 models/players/parkr/parkr_chest_red.tga models/players/parkr/parkr_chest_blu.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/players/parkr/parkr_head
+{
+ {
+ map textures/effects/envmap2.tga
+ tcGen environment
+ }
+}
+
+//******************************************************//
+// models/players/ranger subfolder //
+//******************************************************//
+
+//models/players/ranger/wrack
+//{
+// {
+// map $whiteimage
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/players/ranger/wrack.tga
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+// rgbGen identity
+// alphaGen lightingSpecular
+// }
+//
+//}
+
+models/players/ranger/wrack
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/ranger/wrack.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+//******************************************************//
+// models/players/razor subfolder //
+//******************************************************//
+
+models/players/razor/h_id
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/razor/h_id.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/razor/id
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/razor/id.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/razor/patriot
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/razor/patriot.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+models/players/razor/patriot_gogs
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/razor/razor_gogs
+{
+ {
+ map models/players/razor/razor_gogs.tga
+ tcGen environment
+
+ }
+
+
+ {
+ map models/players/razor/razor_gogs_fx.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 1.2 9.3
+
+ }
+}
+
+//******************************************************//
+// models/players/sarge subfolder //
+//******************************************************//
+
+models/players/sarge/cigar
+{
+ {
+ map models/players/sarge/cigar.tga
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+
+ }
+
+ {
+ map models/players/sarge/cigar.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave triangle .5 1 0 .2
+
+ }
+}
+
+models/players/sarge/krusade
+{
+ {
+ map textures/sfx/firegorre.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ rgbGen identity
+ }
+ {
+ map models/players/sarge/krusade.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/sarge/null
+{
+ {
+ map models/players/sarge/null.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/players/sarge/roderic
+{
+ {
+ map textures/sfx/firegorre.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ rgbGen identity
+ }
+ {
+ map models/players/sarge/roderic.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+//******************************************************//
+// models/players/slash subfolder //
+//******************************************************//
+
+models/players/slash/grrl_h
+{
+
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/players/slash/grrl_h.tga
+ blendfunc blend
+ rgbGen lightingdiffuse
+ }
+
+}
+
+models/players/slash/slashskate
+{
+ //deformVertexes wave 100 sin 0 1 1 5
+ sort additive
+ cull disable
+ {
+ clampmap models/players/slash/slashskate.tga
+ blendFunc GL_ONE GL_ONE
+ //tcmod rotate 100
+ tcMod stretch sin .9 0.1 0 1.1
+ rgbgen identity
+
+ }
+}
+
+models/players/slash/yuriko
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/slash/yuriko.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/slash/yuriko_h
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ rgbGen lightingdiffuse
+ }
+ {
+ map models/players/slash/yuriko_h.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/slash/yurikoskate
+{
+ cull disable
+ deformVertexes autoSprite
+
+
+ {
+ clampmap models/players/slash/yurikoskate.tga
+ blendFunc blend
+ //tcMod stretch sin .9 0.1 0 1.1
+ tcmod rotate 999
+ rgbGen lightingdiffuse
+ }
+ {
+ clampmap models/players/slash/yurikoskate.tga
+ blendFunc blend
+ //tcMod stretch sin .9 0.1 0 -1.1
+ tcMod stretch sin .9 0 0 0
+ tcmod rotate 20
+ rgbGen lightingdiffuse
+ }
+}
+
+//******************************************************//
+// models/players/tankjr subfolder //
+//******************************************************//
+
+models/players/tankjr/tankjr
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/tankjr/tankjr.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+//******************************************************//
+// models/players/uriel subfolder //
+//******************************************************//
+
+models/players/uriel/blue_w
+{
+ deformVertexes wave 100 sin 0 .5 0 .2
+
+ {
+ map models/players/uriel/blue_w.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/uriel/null
+{
+ {
+ map models/players/uriel/null.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/players/uriel/red_w
+{
+ deformVertexes wave 100 sin 0 .5 0 .2
+
+ {
+ map models/players/uriel/red_w.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/uriel/uriel_h
+{
+ {
+ map models/players/uriel/uriel_h.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/proto_zzzt.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll -0.2 1
+ rgbGen identity
+ }
+ {
+ map models/players/uriel/uriel_h.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/uriel/uriel_w
+{
+ deformVertexes wave 100 sin 0 .5 0 .2
+
+ {
+ map models/players/uriel/uriel_w.tga
+ //blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ //alphaFunc GT0
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/players/uriel/zael
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/uriel/zael.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+//******************************************************//
+// models/players/visor subfolder //
+//******************************************************//
+
+models/players/visor/gorre
+{
+
+ {
+ map textures/sfx/firegorre.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 4 4
+ rgbGen identity
+ }
+ //{
+ // map textures/sfx/firewallb.tga
+ // blendFunc GL_ONE GL_ONE
+ // tcmod scale 3 3
+ // tcMod turb 0 .2 0 .1
+ // tcMod scroll 0 3
+ // //tcmod rotate 360
+ // rgbGen identity
+ //}
+ {
+ map models/players/visor/gorre.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+}
+
+//models/players/visor/visortorso2
+//{
+// {
+// map $whiteimage
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/players/visor/visortorso2.tga
+// rgbGen identity
+// alphaGen lightingSpecular
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+// }
+//}
+
+//models/players/visorhead
+//{
+// {
+// map $whiteimage
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/players/visor/visorhead.tga
+// rgbGen identity
+// alphaGen lightingSpecular
+// blendFunc GL_DST_COLOR GL_SRC_ALPHA
+// }
+//}
+
+//******************************************************//
+// models/players/xaero subfolder //
+//******************************************************//
+
+models/players/xaero/xaero
+{
+
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/xaero/xaero.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+
+}
+
+models/players/xaero/xaero_a
+{
+ {
+ map textures/effects/envmapbfg.tga
+ tcmod rotate 350
+ tcmod scroll 3 1
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/players/xaero/xaero_a.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+models/players/xaero/xaero_h
+{
+ {
+ map models/players/xaero/xaero_h.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/firewalla.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 0.1 1
+ //rgbGen wave triangle .5 1 0 .4
+ }
+ {
+ map models/players/xaero/xaero_h.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+}
+
+models/players/xaero/xaero_q
+{
+
+ cull disable
+
+ {
+ map models/players/xaero/xaero_q.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+//******************************************************//
+// models/players/xian subfolder //
+//******************************************************//
+
+models/players/xian/xianfacf
+{
+ {
+ map $whiteimage
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/players/medium/xian/xianfacf.tga
+ rgbGen identity
+ alphaGen lightingSpecular
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ }
+}
+
+
+//**************************************************************//
+// //
+// MODELS/POWERUPS //
+// //
+//**************************************************************//
+
+//******************************************************//
+// models/powerups/ammo subfolder //
+//******************************************************//
+
+//models/powerups/ammo/ammo_rail1
+//{
+// {
+// map models/powerups/ammo/ammo_rail1.tga
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/powerups/ammo/ammo_rail1.glow.tga
+// blendfunc GL_ONE GL_ONE
+// rgbGen wave sin 0.75 0.25 0 1
+// }
+//}
+
+//models/powerups/ammo/ammo_rail2
+//{
+// {
+// map models/powerups/ammo/ammo_rail2.tga
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/powerups/ammo/ammo_rail2.glow.tga
+// blendfunc GL_ONE GL_ONE
+// }
+//}
+
+models/powerups/ammo/bfgammo
+{
+ cull none
+ {
+ map textures/effects/envmapbfg.tga
+ //tcmod scale 3 3
+ tcmod rotate 350
+ tcmod scroll 3 1
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/bfgammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/bfgammo1
+{
+ {
+ map textures/effects/envmapbfg.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/bfgammo2
+{
+ {
+ map models/powerups/ammo/bfgammo2.tga
+ rgbGen identity
+ }
+
+}
+
+//models/powerups/ammo/bounammo1
+//{
+// {
+// map models/powerups/ammo/bounammo1.tga
+// rgbGen lightingDiffuse
+// }
+//}
+
+//models/powerups/ammo/bounammo2
+//{
+// {
+// map models/powerups/ammo/bounammo2.tga
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/powerups/ammo/bounammo2.glow.tga
+// blendfunc GL_ONE GL_ONE
+// rgbGen lightingDiffuse
+// }
+//}
+
+//models/powerups/ammo/flamammo1
+//{
+// {
+// map models/powerups/ammo/flamammo1.tga
+// rgbGen lightingDiffuse
+// }
+//}
+
+//models/powerups/ammo/flamammo2
+//{
+// {
+// map models/powerups/ammo/flamammo2.tga
+// rgbGen lightingDiffuse
+// }
+// {
+// map models/powerups/ammo/flamammo2.glow.tga
+// blendfunc GL_ONE GL_ONE
+// }
+//}
+
+models/powerups/ammo/grenammo
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/grenammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/grenammo1
+{
+ {
+ map textures/effects/envmapgren.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/grenammo2
+{
+ {
+ map models/powerups/ammo/grenammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/lighammo
+{
+ {
+ map textures/effects/envmapligh.tga
+ //tcmod scale 3 3
+ tcmod rotate 350
+ tcmod scroll 3 1
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/lighammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/lighammo1
+{
+ {
+ map textures/effects/envmapligh.tga
+ tcGen environment
+ //tcmod scale 2 2
+ tcmod rotate 6
+ tcmod scroll .09 .09
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/lighammo2
+{
+ {
+ map models/powerups/ammo/lighammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/machammo
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/machammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/machammo1
+{
+ {
+ map textures/effects/envmapmach.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/machammo2
+{
+ {
+ map models/powerups/ammo/machammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/plasammo
+{
+ {
+ map textures/effects/envmapplas.tga
+ //tcmod scale 3 3
+ tcmod rotate 350
+ tcmod scroll 3 1
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/plasammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/plasammo1
+{
+ {
+ map textures/effects/envmapplas.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/plasammo2
+{
+ {
+ map models/powerups/ammo/plasammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/railammo
+{
+ {
+ map textures/effects/envmaprail.tga
+ //tcmod scale 3 3
+ tcmod rotate 350
+ tcmod scroll 3 1
+ //tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/railammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/railammo1
+{
+ {
+ map textures/effects/envmaprail.tga
+ tcGen environment
+ //tcmod scale 4 4
+ //tcmod rotate 70
+ //tcmod scroll .5 .5
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/railammo2
+{
+ {
+ map models/powerups/ammo/railammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/rockammo
+{
+ {
+ map textures/effects/tinfx2d.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/rockammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/rockammo1
+{
+ {
+ map textures/effects/envmaproc.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/rockammo2
+{
+ {
+ map models/powerups/ammo/rockammo2.tga
+ rgbGen identity
+ }
+
+}
+
+models/powerups/ammo/shotammo
+{
+ {
+ map textures/effects/tinfx2c.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ map models/powerups/ammo/shotammo.tga
+ blendfunc blend
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/shotammo1
+{
+ {
+ map textures/effects/envmapgold3.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+}
+
+models/powerups/ammo/shotammo2
+{
+ {
+ map models/powerups/ammo/shotammo2.tga
+ rgbGen identity
+ }
+
+}
+
+//******************************************************//
+// models/powerups/armor subfolder //
+//******************************************************//
+
+models/powerups/armor/energy_grn1
+{
+ deformVertexes wave 100 sin 2 0 0 0
+ {
+ map textures/effects/envmaprail.tga
+ blendFunc GL_ONE GL_ONE
+ tcGen environment
+ tcmod rotate 30
+ tcMod scroll 1 1
+ rgbGen wave triangle -.3 1.3 0 .3
+ }
+
+}
+
+models/powerups/armor/energy_red1
+{
+
+ {
+ map models/powerups/armor/energy_red1.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 7.4 1.3
+ }
+
+}
+
+models/powerups/armor/energy_yel1
+{
+
+ {
+ map models/powerups/armor/energy_yel3.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 7.4 1.3
+ }
+
+}
+
+models/powerups/armor/newred
+{
+ {
+ map textures/sfx/specular.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/powerups/armor/newred.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+}
+
+models/powerups/armor/newyellow
+{
+ {
+ map textures/sfx/specular.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/powerups/armor/newyellow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+
+
+}
+
+models/powerups/armor/shard2
+{
+ {
+ map textures/effects/tinfx2c.tga
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/powerups/armor/shard2.tga
+ blendFunc blend
+ rgbGen lightingdiffuse
+ }
+}
+
+//******************************************************//
+// models/powerups/health subfolder //
+//******************************************************//
+
+models/powerups/health/blue
+{
+ {
+ map textures/effects/envmapbfg.tga
+ tcGen environment
+
+ }
+}
+
+models/powerups/health/blue_sphere
+{
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/powerups/health/green
+{
+
+ {
+ map textures/effects/envmaprail.tga
+ tcGen environment
+
+ }
+}
+
+models/powerups/health/green_sphere
+{
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/powerups/health/mega1
+{
+ {
+ map textures/effects/envmapblue2.tga
+ tcGen environment
+ tcmod rotate 33
+ tcmod scroll 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/powerups/health/mega2
+{
+
+ {
+ map textures/effects/envmapblue.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+
+ }
+ {
+ map textures/sfx/kenelectric.tga
+ tcmod scale 2 2
+ tcmod rotate 333
+ tcmod scroll 9 9
+ blendfunc GL_ONE GL_ONE
+
+ }
+}
+
+models/powerups/health/red
+{
+
+ {
+ map textures/effects/envmapgold.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+
+ }
+ {
+ map textures/sfx/kenelectric.tga
+ tcmod scale 2 2
+ tcmod rotate 333
+ tcmod scroll 9 9
+ blendfunc GL_ONE GL_ONE
+
+ }
+}
+
+models/powerups/health/red_sphere
+{
+ {
+ map textures/effects/envmapgold2.tga
+ tcGen environment
+ tcmod rotate 33
+ tcmod scroll 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/powerups/health/yellow
+{
+
+ {
+ map textures/effects/envmapyel.tga
+ tcGen environment
+ //blendfunc GL_ONE GL_ONE
+
+ }
+
+}
+
+models/powerups/health/yellow_sphere
+{
+ {
+ map textures/effects/tinfx2b.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/powerups/holdable subfolder //
+//******************************************************//
+
+models/powerups/holdable/medkit_base
+{
+ {
+ map textures/effects/envmap.tga
+ tcgen environment
+ }
+
+}
+
+models/powerups/holdable/medkit_fluid
+{
+ sort additive
+ cull back
+ {
+ map models/powerups/holdable/medkit_fluid.tga
+ tcMod scroll 0 2
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+models/powerups/holdable/medkit_sphere
+{
+ {
+ map textures/effects/envmapdim.tga
+ tcgen environment
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+models/powerups/holdable/teleport_base
+{
+ {
+ map textures/effects/envmap.tga
+ tcgen environment
+ }
+
+}
+
+models/powerups/holdable/teleport_fluid
+{
+ sort additive
+ cull back
+ {
+ map models/powerups/holdable/teleport_fluid.tga
+ tcMod scroll 0 2
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+models/powerups/holdable/teleport_sphere
+{
+ {
+ map textures/effects/envmapdim.tga
+ tcgen environment
+ blendfunc GL_ONE GL_ONE
+ }
+
+}
+
+//******************************************************//
+// models/powerups/instant subfolder //
+//******************************************************//
+
+models/powerups/instant/enviro
+{
+ //{
+ // map models/powerups/instant/enviro.tga
+ //}
+ {
+ map textures/effects/envmapgold.tga
+ blendfunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/flight
+{
+ {
+ map textures/effects/envmappurp.tga
+ blendfunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/haste
+{
+ {
+ map textures/effects/envmapyel.tga
+ blendfunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/invis
+{
+ {
+ map textures/effects/tinfx2c.tga
+ //map textures/sfx/specular.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ }
+}
+
+models/powerups/instant/quad
+{
+ //{
+ // map gfx/colors/darkblue.tga
+ //}
+ {
+ map textures/effects/envmapblue.tga
+ blendfunc GL_ONE GL_ZERO
+ tcGen environment
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/regen
+{
+ {
+ map textures/effects/envmapred.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+}
+
+models/powerups/instant/scan
+{
+ {
+ map models/powerups/instant/scan.tga
+ }
+ {
+ map textures/effects/envmapdim.tga
+ blendfunc GL_ONE GL_ONE
+ tcGen environment
+ }
+}
+
+
+//**************************************************************//
+// //
+// MODELS/WEAPONS2 //
+// //
+//**************************************************************//
+
+//******************************************************//
+// models/weapons2/bfg subfolder //
+//******************************************************//
+
+models/weapons2/bfg/bfg
+{
+ {
+ map textures/effects/tinfx2d.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scroll .01 .01
+ tcGen environment
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/weapons2/bfg/bfg.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/bfg/bfg_e
+{
+ {
+ //map models/weapons2/bfg/bfg_e2.tga
+ map textures/effects/envmapbfg.tga
+ blendfunc GL_ONE GL_ZERO
+ tcMod turb 0 .5 0 .1
+ tcmod scale .4 .4
+ tcMod scroll .2 -.2
+ rgbGen identity
+ }
+ {
+ //map models/weapons2/bfg/bfg_e2.tga
+ //map models/players/doom/phobos_fx.tga
+ map textures/effects/envmapbfg.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 .5 0 .1
+ tcmod scale .2 .2
+ tcMod scroll .3 .6
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+}
+
+models/weapons2/bfg/bfg_k
+{
+
+ {
+ map textures/effects/envmapbfg.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod rotate 30
+ tcmod scroll 1 1
+ tcGen environment
+ rgbGen identity
+ }
+ {
+ map models/weapons2/bfg/bfg_k.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/bfg/f_bfg
+{
+ sort additive
+ cull disable
+ {
+ clampmap models/weapons2/bfg/f_bfg.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod rotate 360
+ }
+ {
+ clampmap models/weapons2/bfg/f_bfg2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod rotate -129
+ //tcMod stretch sin .8 0.10 0 .7
+ }
+
+}
+
+//******************************************************//
+// models/weapons2/chainsaw subfolder //
+//******************************************************//
+
+//models/weapons2/chainsaw/f_chainsaw
+//{
+// sort nearest
+// cull back
+// {
+// map models/weapons2/chainsaw/f_chainsaw.tga
+// blendfunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+//
+// }
+//}
+
+//******************************************************//
+// models/weapons2/flamethrower subfolder //
+//******************************************************//
+
+models/weapons2/flamethrower/f_flamethrower
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/flamethrower/f_flamethrower.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/gauntlet subfolder //
+//******************************************************//
+
+models/weapons2/gauntlet/gauntlet2
+{
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ZERO
+ tcGen environment
+ //rgbGen lightingDiffuse
+ rgbGen identity
+ }
+ {
+ map models/weapons2/gauntlet/gauntlet2.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/gauntlet/gauntlet3
+{
+
+ cull disable
+ sort additive
+ {
+ // map models/weapons2/gauntlet/gauntlet3.tga
+ AnimMap 10 models/weapons2/gauntlet/gauntlet3.tga models/weapons2/gauntlet/gauntlet4.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/grapple subfolder //
+//******************************************************//
+
+models/weapons2/grapple/f_grapple
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/grapple/f_grapple.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/grapple/grapple
+{
+ {
+ map models/weapons2/grapple/grapple.tga
+ blendFunc GL_ONE GL_ZERO
+ rgbGen lightingDiffuse
+ }
+ {
+ map textures/sfx/specular.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll .1 .1
+ tcGen environment
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/weapons2/grapple/grapple.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/grapple/grapple_h
+{
+
+ cull disable
+
+ {
+ map models/weapons2/grapple/grapple_h.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen lightingDiffuse
+ }
+
+
+}
+
+models/weapons2/grapple/grapple_j
+{
+
+ cull disable
+
+ {
+ map models/weapons2/grapple/grapple_j.tga
+ blendFunc GL_ONE GL_ZERO
+ tcMod turb 0 .5 0 .7
+ tcMod scroll 1 -1
+ tcmod scale .5 .5
+ rgbGen identity
+ }
+ {
+ map textures/liquids/jello2.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scale .7 .7
+ tcMod turb 0 .4 0 .3
+ tcMod scroll .7 -.4
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+
+}
+
+//******************************************************//
+// models/weapons2/grenadel subfolder //
+//******************************************************//
+
+models/weapons2/grenadel/f_grenadel
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/grenadel/f_grenadel.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/grenadel/ring
+{
+
+ {
+ map models/weapons2/grenadel/ring.tga
+ }
+
+ {
+ map textures/effects/envmapdim.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ //rgbGen identity
+ }
+}
+
+//******************************************************//
+// models/weapons2/lightning subfolder //
+//******************************************************//
+
+models/weapons2/lightning/ball
+{
+ deformVertexes autoSprite
+ {
+ map models/weapons2/lightning/ball.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 2 0 7
+ tcMod rotate 360
+ }
+ {
+ map models/weapons2/lightning/ball.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 5 1 3
+ tcMod rotate -200
+ }
+
+}
+
+models/weapons2/lightning/ball1
+{
+ sort additive
+ cull disable
+
+ {
+ animMap 15 models/weapons2/lightning/ball1.tga models/weapons2/lightning/ball2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/weapons2/lightning/button
+{
+ {
+ map models/weapons2/lightning/button.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 1 1 0 1
+ }
+
+}
+
+models/weapons2/lightning/crackle1
+{
+ sort additive
+ cull disable
+
+ {
+ animMap 15 models/weapons2/lightning/crackle1.tga models/weapons2/lightning/crackle2.tga models/weapons2/lightning/crackle3.tga models/weapons2/lightning/crackle4.tga models/weapons2/lightning/crackle5.tga models/weapons2/lightning/crackle6.tga models/weapons2/lightning/crackle7.tga models/weapons2/lightning/crackle8.tga
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+models/weapons2/lightning/f_lightning
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/lightning/f_lightning.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/lightning/glass
+{
+ {
+ map models/weapons2/lightning/glass.tga
+ }
+ {
+ map textures/effects/envmapdim.tga
+ tcGen environment
+ blendfunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+}
+
+models/weapons2/lightning/trail
+{
+ {
+ map models/weapons2/lightning/trail.tga
+ tcMod scroll 3.1 1
+ rgbgen wave triangle 1 2 0 7
+ blendfunc GL_ONE GL_ONE
+ }
+ {
+ map models/weapons2/lightning/trail.tga
+ tcMod scroll -1.7 1
+ rgbgen wave triangle 1 1.1 0 5.1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/lightning/trail1
+{
+ sort additive
+ cull disable
+
+ {
+ animMap 15 models/weapons2/lightning/trail1.tga models/weapons2/lightning/trail2.tga models/weapons2/lightning/trail3.tga models/weapons2/lightning/trail4.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen vertex
+ }
+
+}
+
+models/weapons2/lightning/trail2
+{
+ {
+ map models/weapons2/lightning/trail2.tga
+ tcMod scroll 3.1 1
+ rgbgen wave triangle 1 2 0 7
+ blendfunc GL_ONE GL_ONE
+ }
+ {
+ map models/weapons2/lightning/trail2.tga
+ tcMod scroll -1.7 1
+ rgbgen wave triangle 1 1.1 0 5.1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/machinegun subfolder //
+//******************************************************//
+
+models/weapons2/machinegun/f_machinegun
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/machinegun/f_machinegun.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/plasma subfolder //
+//******************************************************//
+
+models/weapons2/plasma/f_plasma
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/plasma/f_plasma.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons2/plasma/plasma_glass
+{
+
+ {
+ map textures/effects/tinfxb.tga
+ tcGen environment
+ tcMod scroll .01 .02
+ blendfunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+}
+
+models/weapons2/plasma/plasma_glo
+{
+
+ {
+ map models/weapons2/plasma/plasma_glo.tga
+ tcmod rotate 33
+ tcMod scroll .7 1
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfxb.tga
+ tcGen environment
+ tcMod scroll .01 .02
+ blendfunc GL_ONE GL_ONE
+ rgbGen lightingDiffuse
+ }
+}
+
+//******************************************************//
+// models/weapons2/railgun subfolder //
+//******************************************************//
+
+models/weapons2/railgun/f_railgun2
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/railgun/f_railgun2.tga
+ blendfunc GL_ONE GL_ONE
+ rgbgen entity
+ }
+}
+
+models/weapons2/railgun/railgun2
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/railgun/railgun2.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen entity // identity
+ }
+}
+
+models/weapons2/railgun/railgun3
+{
+ {
+ map models/weapons2/railgun/railgun3.tga
+ rgbGen lightingDiffuse
+ }
+
+ {
+ map models/weapons2/railgun/railgun3.glow.tga
+ blendfunc GL_ONE GL_ONE
+ rgbGen entity // identity
+ }
+}
+
+models/weapons2/railgun/railgun4
+{
+ {
+ map models/weapons2/railgun/railgun4.tga
+ tcMod scroll 0 1
+ rgbGen entity // identity
+ }
+
+}
+
+//******************************************************//
+// models/weapons2/rocketl subfolder //
+//******************************************************//
+
+models/weapons2/rocketl/f_rocketl
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/rocketl/f_rocketl.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+// this one can go away eventually
+models/weapons2/rocketl/rocketl14
+{
+ cull disable
+ sort additive
+ {
+ map models/weapons2/rocketl/f_rocketl.tga
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+//******************************************************//
+// models/weapons2/shotgun subfolder //
+//******************************************************//
+
+models/weapons2/shotgun/f_shotgun
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons2/shotgun/f_shotgun.tga
+ blendfunc add
+ }
+}
+
+models/weapons2/shotgun/shotgun_laser
+{
+
+ {
+ map models/weapons2/shotgun/shotgun_laser.tga
+ blendfunc add
+ }
+}
+
+
+//**************************************************************//
+// //
+// MODELS/WEAPHITS //
+// //
+//**************************************************************//
+
+models/weaphits/bfg01
+{
+ deformVertexes autoSprite
+ cull none
+
+ {
+ clampmap models/weaphits/bfg01.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod rotate 333
+ rgbGen identity
+ }
+ {
+ clampmap models/weaphits/bfg01.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod rotate -100
+ rgbGen identity
+ }
+
+}
+
+models/weaphits/bfg02
+{
+ cull none
+ nomipmaps
+ {
+ map models/weaphits/bfg03.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 2 0
+ rgbGen identity
+ }
+ {
+ map models/weaphits/bfg02.tga
+ blendFunc GL_ONE GL_ONE
+ tcmod scroll 3 0
+ tcMod turb 0 .25 0 1.6
+ rgbGen identity
+ }
+}
+
+models/weaphits/electric
+{
+ cull none
+
+ {
+ clampmap models/weaphits/electric.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .8 2 0 9
+ tcMod rotate 360
+ }
+ {
+ clampmap models/weaphits/electric.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 9.5
+ tcMod rotate -202
+ }
+
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/museum.shader b/install/installs/Q3Pack/install/baseq3/scripts/museum.shader
new file mode 100644
index 0000000..0d65b92
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/museum.shader
@@ -0,0 +1,27 @@
+
+//////////////////////////////
+// Rainy Concrete floor //
+//////////////////////////////
+
+textures/base_floor/concfloor_rain
+{
+ tessSize 32
+ deformVertexes normal 1 15
+ {
+ map textures/base_floor/concfloor_rain.tga
+ rgbGen identity
+ }
+ {
+ map textures/liquids/pj_e3_reflection2b.tga
+ tcgen environment
+ rgbgen wave sin .3 0 0 0
+ tcmod scale 2 2
+ tcMod scroll .5 .5
+ }
+ {
+ map $lightmap
+ blendFunc filter
+ rgbGen identity
+ }
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/organics.shader b/install/installs/Q3Pack/install/baseq3/scripts/organics.shader
new file mode 100644
index 0000000..c4b23cf
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/organics.shader
@@ -0,0 +1,32 @@
+
+textures/organics/dirt_trans
+{
+ qer_editorimage textures/organics/dirt.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/organics/dirt.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/organics/wire02a_f
+{
+ q3map_surfacelight 200
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/organics/wire02a_f.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/sfx.shader b/install/installs/Q3Pack/install/baseq3/scripts/sfx.shader
new file mode 100644
index 0000000..5edf979
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/sfx.shader
@@ -0,0 +1,3253 @@
+textures/sfx/beam
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ cull none
+
+ {
+ map textures/sfx/beam.tga
+ tcMod Scroll .3 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/beam_blue
+ {
+ qer_editorimage textures/sfx/beam_blue4.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ qer_trans .6
+ cull none
+ {
+ map textures/sfx/beam_blue4.tga
+ tcMod Scroll .3 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/beam_dusty2
+{
+ qer_editorimage textures/sfx/beam_1.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ cull none
+ {
+ map textures/sfx/beam_1.tga
+ blendFunc add
+ }
+}
+
+textures/sfx/beam_red
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ qer_trans .5
+ cull none
+ {
+ map textures/sfx/beam_red.tga
+ tcMod Scroll .3 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/beam_waterlight2
+{
+ qer_editorimage textures/sfx/beam_waterlight.tga
+ q3map_globaltexture
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ q3map_surfacelight 50
+ qer_trans 0.6
+ cull none
+ {
+ map textures/sfx/beam_waterlight.tga
+ tcMod turb 0 0.015 0.5 0.07
+ tcMod Scroll .15 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/blackness
+{
+ surfaceparm nolightmap
+ surfaceparm noimpact
+ surfaceparm nomarks
+ {
+ map textures/sfx/blackness.tga
+ }
+}
+
+textures/sfx/blocks17final_pent
+{
+ qer_editorimage textures/sfx/blocks17final_pent.tga
+ {
+ map textures/sfx/blocks17final_pent.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/blocks17g_jumpad
+{
+ surfaceparm nodamage
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/blocks17g_jumpad.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/blocks18ccomputer
+{
+
+ surfaceparm nodamage
+ q3map_surfacelight 200
+
+
+ {
+ map textures/sfx/blocks18ccomputer.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+ {
+ animMap 2 textures/sfx/compscreen/letters1.tga textures/sfx/compscreen/letters2.tga textures/sfx/compscreen/letters3.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters4.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters5.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 2
+ }
+
+}
+
+textures/sfx/border11c
+{
+ q3map_surfacelight 300
+ q3map_lightimage textures/base_trim/border11c_pulse1.tga
+ qer_editorimage textures/base_trim/border11c.tga
+
+ {
+ map textures/base_trim/border11c.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/base_trim/border11c_light.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin 1 .1 0 5
+ }
+
+
+ {
+ map textures/base_trim/border11c_pulse1b.tga
+ blendfunc gl_one gl_one
+ tcmod scale .035 1
+ tcmod scroll -0.65 0
+
+
+ }
+
+
+}
+
+textures/sfx/bounce_concrete
+{
+
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_concrete.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc filter
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc add
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc add
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_dirt
+{
+
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_dirt.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc filter
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc add
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc add
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_largeblock3
+{
+
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_largeblock3.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_largeblock3b
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_largeblock3b.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_metalbridge04
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_metalbridge04.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bounce_xq1metalbig
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bounce_xq1metalbig.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad01_block17
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 1000
+
+
+ {
+ map textures/sfx/bouncepad01_block17.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad01_metalbridge06b
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bouncepad01_metalbridge06b.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad01_xarch
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/bouncepad01_xarch.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad01block18b
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 2000
+
+
+ {
+ map textures/sfx/bouncepad01block18b.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bouncepad1q1metal7_99
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 2000
+
+
+ {
+ map textures/sfx/bouncepad1q1metal7_99.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/bugmirror
+{
+ qer_editorimage textures/sfx/mirrorkc.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+ {
+ map textures/sfx/mirrorkc.tga
+ blendFunc add
+ depthfunc equal
+ }
+}
+
+textures/sfx/bullseye
+{
+ cull disable
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ deformVertexes autosprite
+
+ {
+ clampmap textures/sfx/bullseye.tga
+ tcMod stretch sin .8 0.2 0 .2
+ tcmod rotate 200
+ blendFunc add
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ tcMod stretch sin .8 0.2 0 .3
+ tcmod rotate 70
+ alphaFunc GE128
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ tcMod stretch sin .8 0.2 0 .2
+ tcmod rotate 50
+ alphaFunc GE128
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ tcMod stretch sin .8 0.2 0 .1
+ tcmod rotate 30
+ alphaFunc GE128
+ rgbGen identity
+ }
+
+}
+
+textures/sfx/clangdark_bounce
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/clangdark_bounce.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/computer_blocks17
+{
+ surfaceparm nodamage
+ q3map_surfacelight 200
+
+
+ {
+ map textures/sfx/computer_blocks17.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+ {
+ animMap 2 textures/sfx/compscreen/letters1.tga textures/sfx/compscreen/letters2.tga textures/sfx/compscreen/letters3.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters4.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters5.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 2
+ }
+
+}
+
+textures/sfx/computerblocks15
+{
+ surfaceparm nodamage
+ q3map_surfacelight 200
+
+
+ {
+ map textures/sfx/computerblocks15.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+ {
+ animMap 2 textures/sfx/compscreen/letters1.tga textures/sfx/compscreen/letters2.tga textures/sfx/compscreen/letters3.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters4.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters5.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 2
+ }
+}
+
+textures/sfx/computerpurptileb
+{
+ surfaceparm nodamage
+ q3map_surfacelight 200
+
+
+ {
+ map textures/sfx/computerpurptileb.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ blendfunc gl_dst_color gl_zero
+ rgbGen identity
+ }
+
+
+ {
+ animMap 2 textures/sfx/compscreen/letters1.tga textures/sfx/compscreen/letters2.tga textures/sfx/compscreen/letters3.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters4.tga textures/sfx/compscreen/letters5.tga textures/sfx/compscreen/letters5.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 2
+ }
+
+}
+
+textures/sfx/console01
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ qer_trans .5
+ q3map_surfacelight 150
+ q3map_lightimage textures/sfx/console01.tga
+ cull none
+ {
+ clampmap textures/sfx/console01.tga
+
+ tcMod rotate 20
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ clampmap textures/sfx/console02.tga
+
+ tcMod rotate -200
+ blendFunc GL_ONE GL_ONE
+ }
+
+}
+
+textures/sfx/console03
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_surfacelight 150
+ q3map_lightimage textures/sfx/console03.tga
+ cull none
+ {
+ clampmap textures/sfx/console01.tga
+
+ tcMod rotate 20
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ clampmap textures/sfx/console02.tga
+
+ tcMod rotate -400
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ clampmap textures/sfx/console03.tga
+
+ tcMod rotate 40
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/sfx/constfog
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ surfaceparm nodrop
+ q3map_surfacelight 100
+ fogparms ( .8 .8 .8 ) 100
+}
+
+textures/sfx/demonltblackfinal
+{
+ q3map_lightimage textures/sfx/demonltblackfinal_glow2.tga
+ q3map_surfacelight 100
+ surfaceparm nomarks
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/sfx/demonltblackfinal.tga
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+ {
+ map textures/sfx/demonltblackfinal_glow2.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin .9 .1 0 5
+ }
+
+}
+
+textures/sfx/diamond2cjumppad
+{
+ qer_editorimage textures/sfx/bouncepad01_diamond2cTGA.tga
+ //q3map_surfacelight 2000
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 500
+
+
+ {
+ map textures/sfx/bouncepad01_diamond2cTGA.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/dust_puppy2
+{
+
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+
+ {
+ map textures/sfx/dust_puppy2.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/sfx/fan
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ cull none
+ nopicmip
+ {
+ clampmap textures/sfx/fan.tga
+ tcMod rotate 256
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/sfx/fan3
+{
+ cull disable
+ surfaceparm alphashadow
+ sort 6
+ {
+ map textures/sfx/fan3.tga
+ blendFunc blend
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ }
+}
+
+textures/sfx/fan3bladeb
+{
+ cull disable
+ surfaceparm trans
+ surfaceparm nolightmap
+ sort 5
+ {
+ clampmap textures/sfx/fan3bladeb.tga
+ blendFunc blend
+ tcmod rotate 999
+ rgbGen identity
+ }
+
+}
+
+textures/sfx/fan_grate
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm metalsteps
+ cull none
+ nopicmip
+ {
+ map textures/sfx/fan_grate.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/sfx/fanfx
+{
+ qer_editorimage textures/sfx/fanfx.tga
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+ cull none
+ nopicmip
+
+ {
+ clampmap textures/sfx/fanfx.tga
+ tcMod rotate 256
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ depthWrite
+ }
+}
+
+textures/sfx/fishy
+{
+ tesssize 32
+ deformVertexes wave 10 sin 0 3 0 .5
+ cull disable
+ surfaceparm nolightmap
+ surfaceparm nomarks
+
+ {
+ clampmap textures/sfx/fishy.tga
+ alphaFunc GE128
+ tcMod stretch sin .8 0.10 0 .07
+ depthWrite
+
+ }
+
+
+}
+
+textures/sfx/flame1
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ surfaceparm trans
+ cull none
+ q3map_surfacelight 7500
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame1_hell
+{
+ qer_editorimage textures/sfx/flame1.tga
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ surfaceparm trans
+ cull none
+ q3map_surfacelight 600
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame1dark
+{
+ qer_editorimage textures/sfx/flame1.tga
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ surfaceparm trans
+ cull none
+ q3map_surfacelight 2000
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame1km
+{
+ qer_editorimage textures/sfx/flame1.tga
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ surfaceparm trans
+ cull none
+ q3map_surfacelight 4000
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame1side
+{
+ qer_editorimage textures/sfx/flame1side.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flame2
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 5500
+ qer_editorimage textures/sfx/flame2.tga
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_blue
+{
+ qer_editorimage textures/sfx/b_flame1.tga
+ q3map_lightimage textures/sfx/b_flame7.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 1800
+ {
+ animMap 10 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga textures/sfx/b_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/b_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_blue_nolight
+{
+ qer_editorimage textures/sfx/b_flame1.tga
+ q3map_lightimage textures/sfx/b_flame7.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ {
+ animMap 10 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga textures/sfx/b_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/b_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_blue_pj
+{
+ qer_editorimage textures/sfx/b_flame1.tga
+ q3map_lightimage textures/sfx/b_flame7.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 2500
+
+ {
+ animMap 10 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga textures/sfx/b_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/b_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_dimmer
+{
+ qer_editorimage textures/sfx/flame1.tga
+ q3map_lightimage textures/sfx/flame6.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 1500
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_green_pj
+{
+ qer_editorimage textures/sfx/g_flame1.tga
+ q3map_lightimage textures/sfx/g_flame6.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 2500
+ {
+ animMap 10 textures/sfx/g_flame1.tga textures/sfx/g_flame2.tga textures/sfx/g_flame3.tga textures/sfx/g_flame4.tga textures/sfx/g_flame5.tga textures/sfx/g_flame6.tga textures/sfx/g_flame7.tga textures/sfx/g_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+ }
+ {
+ animMap 10 textures/sfx/g_flame2.tga textures/sfx/g_flame3.tga textures/sfx/g_flame4.tga textures/sfx/g_flame5.tga textures/sfx/g_flame6.tga textures/sfx/g_flame7.tga textures/sfx/g_flame8.tga textures/sfx/g_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+ {
+ map textures/sfx/g_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+}
+
+textures/sfx/flameanim_red
+{
+ qer_editorimage textures/sfx/r_flame1.tga
+ q3map_lightimage textures/sfx/r_flame3.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 1800
+ {
+ animMap 10 textures/sfx/r_flame1.tga textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga textures/sfx/r_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/r_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_red_nolight
+{
+ qer_editorimage textures/sfx/r_flame1.tga
+ q3map_lightimage textures/sfx/r_flame3.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 10 textures/sfx/r_flame1.tga textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga textures/sfx/r_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/r_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/flameanim_red_pj
+{
+ qer_editorimage textures/sfx/r_flame1.tga
+ q3map_lightimage textures/sfx/r_flame3.tga
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 2500
+ {
+ animMap 10 textures/sfx/r_flame1.tga textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/r_flame2.tga textures/sfx/r_flame3.tga textures/sfx/r_flame4.tga textures/sfx/r_flame5.tga textures/sfx/r_flame6.tga textures/sfx/r_flame7.tga textures/sfx/r_flame8.tga textures/sfx/r_flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/r_flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/fog_intel
+{
+ qer_editorimage textures/sfx/fog_yel.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .75 .38 0 ) 800
+}
+
+textures/sfx/fog_mkcdm4
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .5 0 0 ) 96
+}
+
+textures/sfx/fog_pjdm1
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .733 .737 .620 ) 300
+
+}
+
+textures/sfx/fog_q3dm10
+{
+ qer_editorimage textures/sfx/fog_yel.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( 0.75 0.38 0 ) 128
+}
+
+textures/sfx/fog_timctf1
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .729 .729 .780 ) 464
+
+}
+
+textures/sfx/fog_timdm1
+{
+ qer_editorimage textures/sfx/fog_yel.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .615 .309 0 ) 616
+}
+
+textures/sfx/fog_timdm2
+{
+ qer_editorimage textures/sfx/fog_yel.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .615 .309 0 ) 356
+}
+
+textures/sfx/fog_timdm8
+{
+ qer_editorimage textures/sfx/fog_green.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms ( .211 .231 .094 ) 250
+}
+
+textures/sfx/healthfloor
+{
+
+ {
+ map textures/sfx/proto_zzztblu2.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 130
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 80
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ clampmap textures/sfx/healthfloor.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/sfx/hellfog
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 300
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/hellfog_1k
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 200
+ fogparms ( .5 .12 .1 ) 300
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ }
+}
+
+textures/sfx/hellfog_mini_dm10
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 50
+ fogparms ( .5 .12 .1 ) 16
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/hellfog_pj_dm10
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 50
+ fogparms ( .5 .12 .1 ) 392
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/hellfog_tim_dm14
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 50
+ fogparms ( .55 .11 .1 ) 128
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+
+}
+
+textures/sfx/hellfogdense
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 128
+
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/jacobs_x
+{
+ deformVertexes wave 100 sin 0 1 0 5
+ q3map_surfacelight 300
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map textures/sfx/jacobs_x.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 2 0 7
+ //tcMod rotate 103
+ }
+}
+
+textures/sfx/kc_hellfog_1k
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 300
+ q3map_lightsubdivide 32
+ fogparms ( .5 .12 .1 ) 225
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/kenelectric
+{
+ {
+ map textures/sfx/kenelectric.tga
+ blendFunc GL_ONE GL_ZERO
+ tcmod scale 7 7
+ tcMod scroll 5 -5
+ tcmod rotate 360
+ rgbGen identity
+ }
+ {
+ map textures/effects/tinfx2.tga
+ tcGen environment
+ blendFunc GL_ONE GL_ONE
+ }
+}
+
+textures/sfx/largerblock3b3_pent
+{
+ qer_editorimage textures/sfx/largerblock3b3_pent.tga
+ {
+ map textures/sfx/largerblock3b3_pent.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/largerblock3b3x128_pent
+{
+ q3map_lightimage textures/sfx/pentagramfloor_blue3glowtest.tga
+ q3map_surfacelight 100
+ surfaceparm nomarks
+
+ {
+ map $lightmap
+ rgbgen identity
+ }
+
+ {
+ map textures/sfx/largerblock3b3x128_pent.tga
+ blendfunc gl_dst_color gl_zero
+ rgbgen identity
+ }
+
+ {
+ map textures/sfx/pentagramfloor_blue3glowtest.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin .9 .1 0 5
+ }
+
+}
+
+textures/sfx/largerblock3b3x128_pentred
+{
+ qer_editorimage textures/sfx/largerblock3b3x128_pent.tga
+ q3map_lightimage textures/gothic_floor/pent_glow.tga
+ q3map_surfacelight 500
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/sfx/largerblock3b3x128_pent.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/pent_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 0.5
+ }
+}
+
+textures/sfx/launchpad_blocks17
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/launchpad_blocks17.tga
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/launchpad_dot.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 0 1
+ }
+
+ {
+ animmap 4 textures/sfx/launchpad_arrow.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga
+ blendfunc gl_one gl_one
+ tcmod scroll 0 2
+ }
+
+}
+
+textures/sfx/launchpad_blocks18d
+{
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/launchpad_blocks18d.tga
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/launchpad_dot.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 0 1
+ }
+
+ {
+ animmap 4 textures/sfx/launchpad_arrow.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga
+ blendfunc gl_one gl_one
+ tcmod scroll 0 2
+ }
+
+}
+
+textures/sfx/launchpad_diamond
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/launchpad_diamond.tga
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/launchpad_dot.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 0 1
+ }
+
+ {
+ animmap 4 textures/sfx/launchpad_arrow.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga
+ blendfunc gl_one gl_one
+ tcmod scroll 0 2
+ }
+
+}
+
+textures/sfx/launchpad_metalbridge04d
+{
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/sfx/launchpad_metalbridge04d.tga
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/launchpad_dot.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 0 1
+ }
+
+ {
+ animmap 4 textures/sfx/launchpad_arrow.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga textures/sfx/launchpad_arrow2.tga
+ blendfunc gl_one gl_one
+ tcmod scroll 0 2
+ }
+
+}
+
+textures/sfx/lavabeam
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ cull none
+ nomipmaps
+ {
+ map textures/sfx/lavabeam.tga
+ tcMod Scroll 999 0
+ blendFunc add
+ }
+
+}
+
+textures/sfx/lightmap
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nodrop
+ surfaceparm fog
+ fogparms ( .7 .1 .1 ) 64
+
+
+
+ {
+ map $lightmap
+ blendFunc GL_dst_color GL_one
+ tcmod scale 1 .01
+ tcMod scroll 1 -2
+ }
+
+
+}
+
+textures/sfx/metalbridge06_bounce
+{
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/metalbridge06_bounce.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/metaltech12final_bounce
+{
+
+ //q3map_surfacelight 2000
+ surfaceparm nodamage
+ q3map_lightimage textures/sfx/jumppadsmall.tga
+ q3map_surfacelight 400
+
+
+ {
+ map textures/sfx/metaltech12final_bounce.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/sfx/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin 1.2 .8 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+}
+
+textures/sfx/mkc_bigflame
+{
+
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ qer_editorimage textures/sfx/flame1.tga
+ q3map_surfacelight 500
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/mkc_fog_ctfblue
+{
+ qer_editorimage textures/sfx/fog_blue.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ fogparms ( 0.2 0.2 0.25 ) 320
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+}
+
+textures/sfx/mkc_fog_ctfblue2
+{
+ qer_editorimage textures/sfx/fog_blue.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ fogparms ( 0.1 0.1 0.3 ) 320
+
+ q3map_surfacelight 40
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+}
+
+textures/sfx/mkc_fog_ctfred
+{
+ qer_editorimage textures/sfx/fog_purp.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ fogparms ( 0.3 0.2 0.2 ) 320
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+}
+
+textures/sfx/mkc_fog_tdm3
+{
+ qer_editorimage textures/sfx/fog_purp.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ fogparms ( 0.3 0.2 0.2 ) 320
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+}
+
+textures/sfx/omm
+{
+
+ surfaceparm trans
+ surfaceparm alphashadow
+ surfaceparm nomarks
+ cull none
+
+ {
+ map textures/sfx/omm.tga
+ blendFunc GL_ONE GL_ZERO
+ alphaFunc GE128
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+}
+
+textures/sfx/pentagramfloor_red3test
+{
+ {
+ map textures/sfx/pentagramfloor_red3test.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red3glowtest.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/pentfloor_diamond2c
+{
+ qer_editorimage textures/sfx/pentfloor_diamond2c.tga
+ {
+ map textures/sfx/pentfloor_diamond2c.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/pj_a1_fog1
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ surfaceparm nodrop
+ q3map_surfacelight 30
+ fogparms ( .5 .5 .5 ) 512
+}
+
+textures/sfx/portal2_sfx
+{
+ qer_editorimage textures/sfx/portalfog.tga
+ portal
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .5
+
+
+ {
+ map textures/sfx/portal_sfx3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+
+
+ {
+ map textures/sfx/portal_sfx1.tga
+ blendfunc gl_dst_color gl_zero
+ tcMod rotate 360
+ }
+
+ {
+ map textures/sfx/portal_sfx.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 .5 .2 .5
+ }
+
+ {
+ map textures/sfx/portalfog.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ //alphagen portal 128
+ rgbGen identityLighting
+ tcmod rotate .1 //.1
+ tcmod scroll .01 .03
+ }
+}
+
+textures/sfx/portal_sfx
+{
+ portal
+ surfaceparm nolightmap
+ deformVertexes wave 100 sin 0 2 0 .5
+
+
+ {
+ map textures/sfx/portal_sfx3.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+
+
+ {
+ map textures/sfx/portal_sfx1.tga
+ blendfunc gl_dst_color gl_zero
+ tcMod rotate 360
+ }
+
+ {
+ map textures/sfx/portal_sfx.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 .5 .2 .5
+ }
+
+ {
+ map textures/sfx/portalfog.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ alphagen portal 256
+ rgbGen identityLighting
+ tcmod rotate .1 //.1
+ tcmod scroll .01 .03
+ }
+}
+
+textures/sfx/portal_sfx_ring
+{
+ deformVertexes wave 100 sin 0 2 0 .5
+ cull none
+
+ {
+ map textures/sfx/portal_sfx_ring_blue1.tga
+ blendfunc gl_src_alpha gl_one_minus_src_alpha
+ }
+
+
+ {
+ map textures/sfx/portal_sfx_ring_electric.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 1 .2 .5
+ tcmod scroll 0 .5
+
+ }
+
+ {
+ map textures/sfx/portal_sfx1.tga
+ blendfunc gl_dst_color gl_zero
+ tcMod rotate 360
+ }
+
+ {
+ map textures/sfx/portal_sfx_ring.tga
+ blendfunc gl_one gl_one
+ rgbgen wave inversesawtooth 0 .5 .2 .5
+ }
+
+}
+
+textures/sfx/proto_hellfog
+{
+qer_editorimage textures/sfx/fog_red.tga
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+
+fogparms ( .275 .012 0 ) 500
+}
+
+textures/sfx/proto_zzztblu3
+{
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ cull twosided
+ {
+ map textures/sfx/proto_zzztblu3.tga
+ tcGen environment
+ tcMod turb 0 0.25 0 0.5
+ tcmod scroll 1 1
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+textures/sfx/pureblack
+{
+ qer_editorimage textures/skies/blacksky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ {
+ map textures/skies/blacksky.tga
+ }
+}
+
+textures/sfx/q3dm14fog
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 256
+
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/q3dm9fog
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 256
+
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/q3tourney3fog
+{
+ qer_editorimage textures/sfx/fog_red.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nodrop
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_surfacelight 100
+ fogparms ( .55 .11 .1 ) 384
+
+
+
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale -.05 -.05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+ {
+ map textures/liquids/kc_fogcloud3.tga
+ blendfunc gl_dst_color gl_zero
+ tcmod scale .05 .05
+ tcmod scroll .01 -.01
+ rgbgen identity
+ }
+
+}
+
+textures/sfx/rain
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ qer_trans .5
+ deformVertexes move 3 1 0 sin 0 5 0 0.2
+ deformVertexes move .6 3.3 0 sin 0 5 0 0.4
+ deformVertexes wave 30 sin 0 10 0 .2
+ cull none
+
+ {
+ map textures/sfx/rain.tga
+ tcMod Scroll .5 -8
+ tcMod turb .1 .25 0 -.1
+ blendFunc GL_ONE GL_ONE
+ }
+ {
+ map textures/sfx/rain.tga
+ tcMod Scroll .01 -6.3
+
+ blendFunc GL_ONE GL_ONE
+ }
+
+
+}
+
+textures/sfx/smallerblock3b3dim_pent
+{
+ qer_editorimage textures/sfx/smallerblock3b3dim_pent.tga
+ {
+ map textures/sfx/smallerblock3b3dim_pent.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/pentagramfloor_red_glow.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .5
+ depthfunc equal
+ }
+}
+
+textures/sfx/spawn_floor
+{
+
+ {
+ map textures/sfx/firegorre2.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 1.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 130
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 80
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/sfx/spawn_floor.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/sfx/spawn_floord2c
+{
+
+ {
+ map textures/sfx/proto_zzztblu.tga
+ tcmod scroll 0 1
+ tcMod turb 0 .25 0 5.6
+ tcmod scale 2 2
+ blendFunc GL_ONE GL_ZERO
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 130
+ tcMod stretch sin .8 0.2 0 .2
+ rgbGen identity
+ }
+ {
+ clampmap textures/gothic_block/blocks18cgeomtrn2.tga
+ blendFunc blend
+ tcmod rotate 80
+ tcMod stretch sin .8 0.2 0 .1
+ rgbGen identity
+ }
+ {
+ map textures/sfx/spawn_floord2c.tga
+ blendFunc blend
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/sfx/teslacoil
+{
+ cull none
+ q3map_lightimage textures/sfx/tesla1.tga
+ qer_editorimage textures/sfx/tesla1.tga
+ q3map_surfacelight 100
+
+ {
+ map $lightmap
+ tcgen environment
+ blendfunc filter
+ }
+
+ {
+ map textures/sfx/tesla1.tga
+ blendfunc add
+ rgbgen wave sawtooth 0 1 0 5
+ tcmod scale 1 .5
+ tcmod turb 0 .1 0 1
+ tcMod scroll -1 -1
+ }
+
+
+
+ {
+ map textures/sfx/electricslime.tga
+ blendfunc add
+ rgbgen wave sin 0 .5 0 1
+ tcmod scale .5 .5
+ tcmod turb 0 .1 0 1
+ tcmod rotate 180
+ tcmod scroll -1 -1
+ }
+
+ {
+ map textures/sfx/cabletest2.tga
+ blendfunc blend
+ }
+
+
+}
+
+textures/sfx/teslacoil3
+{
+ cull none
+ q3map_lightimage textures/sfx/tesla1b.tga
+ q3map_surfacelight 100
+ qer_editorimage textures/sfx/cabletest2.tga
+ surfaceparm nolightmap
+
+
+
+ {
+ map textures/sfx/cabletest2.tga
+ blendfunc blend
+ }
+
+
+ {
+ map textures/sfx/electricslime2.tga
+ blendfunc add
+ rgbGen wave square .25 .25 0 2.5
+ tcmod scale 1 1
+ tcMod scroll 1 1
+ }
+
+
+
+ {
+ map textures/sfx/tesla1b.tga
+ blendfunc add
+ rgbgen wave square 0 1 0 3
+ tcmod scale 1 1
+ tcMod scroll -2 1
+ }
+
+}
+
+textures/sfx/testconstantfog
+{
+ qer_editorimage textures/sfx/fog_green.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ surfaceparm nodrop
+ q3map_surfacelight 100
+ fogparms ( 0 1 0 ) 300
+}
+
+textures/sfx/x_conduit
+{
+ q3map_lightimage textures/sfx/x_conduit.tga
+ surfaceparm nomarks
+ q3map_surfacelight 100
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/sfx/x_conduit.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+ { animMap 10 textures/sfx/x_conduit2.tga textures/sfx/x_conduit3.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+ }
+ {
+ map textures/sfx/x_conduit2.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 1
+ rgbGen wave sin .5 0.5 0 7
+ }
+ {
+ map textures/sfx/x_conduit3.tga
+ blendfunc GL_ONE GL_ONE
+ tcmod scale -1 1
+ rgbgen wave triangle .2 1 0 9
+ }
+}
+
+textures/sfx/xblackfog
+{
+qer_editorimage textures/sfx/fog_black.tga
+qer_nocarve
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+fogparms ( 0 0 0 ) 128
+
+}
+
+textures/sfx/xbluefog
+{
+ qer_editorimage textures/sfx/fog_blue.tga
+ q3map_surfacelight 300
+ q3map_lightsubdivide 64
+ q3map_lightimage textures/sfx/xbluelightimage.tga
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ qer_nocarve
+ fogparms ( 0.3 0.3 0.9 ) 128
+
+}
+
+textures/sfx/xbluefogx128
+{
+ qer_editorimage textures/sfx/fog_blue.tga
+ q3map_surfacelight 300
+ q3map_lightsubdivide 128
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ qer_nocarve
+ fogparms ( 0.3 0.3 0.9 ) 128
+
+}
+
+textures/sfx/xdensegreyfog
+{
+ qer_editorimage textures/sfx/fog_grey.tga
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ qer_nocarve
+
+ fogparms ( 0.7 0.7 0.7 ) 1700
+}
+
+textures/sfx/xfinalfog
+{
+qer_editorimage textures/sfx/fog_grey.tga
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+qer_nocarve
+fogparms ( 0.7 0.7 0.7 ) 3000
+
+}
+
+textures/sfx/xfinalfoginvert
+{
+qer_editorimage textures/sfx/fog_black.tga
+qer_nocarve
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+qer_nocarve
+fogparms ( 0 0 0 ) 256
+
+}
+
+textures/sfx/xflame1
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 7500
+ qer_editorimage textures/sfx/flame1.tga
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflame1side
+{
+ surfaceparm trans
+ surfaceparm nomarks
+ qer_editorimage textures/sfx/flame1.tga
+ surfaceparm nolightmap
+ cull none
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflame2
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 5500
+ qer_editorimage textures/sfx/flame1.tga
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflame2_1800
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 1800
+ qer_editorimage textures/sfx/flame1.tga
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflame2_2250
+{
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 2250
+ qer_editorimage textures/sfx/flame1.tga
+
+
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+
+
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+
+}
+
+textures/sfx/xflamebright
+{
+ deformVertexes autoSprite2
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+ q3map_surfacelight 3000
+ qer_editorimage textures/sfx/flame1.tga
+ {
+ animMap 10 textures/sfx/flame1.tga textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave inverseSawtooth 0 1 0 10
+ }
+ {
+ animMap 10 textures/sfx/flame2.tga textures/sfx/flame3.tga textures/sfx/flame4.tga textures/sfx/flame5.tga textures/sfx/flame6.tga textures/sfx/flame7.tga textures/sfx/flame8.tga textures/sfx/flame1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sawtooth 0 1 0 10
+ }
+ {
+ map textures/sfx/flameball.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .6 .2 0 .6
+ }
+}
+
+textures/sfx/xian_dm3padwall
+ {
+ q3map_surfacelight 100
+ q3map_lightimage textures/sfx/xian_dm3padwallglow.tga
+ qer_editorimage textures/sfx/xian_dm3padwall.tga
+
+ {
+ map textures/sfx/xian_dm3padwall.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+
+ {
+ map textures/sfx/xian_dm3padwallglow.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin 0 1 0 .5
+ tcmod scale 1 .05
+ tcmod scroll 0 1
+ }
+
+}
+
+textures/sfx/xlightgreyfog
+{
+qer_editorimage textures/sfx/fog_grey.tga
+surfaceparm trans
+surfaceparm nonsolid
+surfaceparm fog
+surfaceparm nolightmap
+qer_nocarve
+fogparms ( 0.7 0.7 0.7 ) 1400
+
+}
+
+textures/sfx/xmetalfloor_wall_14b
+{
+ qer_editorimage textures/sfx/metalfloor_wall_14b.tga
+ q3map_lightimage textures/sfx/metalfloor_wall_14bglow2.tga
+ q3map_surfacelight 50
+ {
+ map textures/sfx/metalfloor_wall_14b.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/metalfloor_wall_14bglow2.tga
+ blendfunc gl_one gl_one
+ }
+}
+
+textures/sfx/xmetalfloor_wall_5b
+{
+ qer_editorimage textures/sfx/metalfloor_wall_5b.tga
+
+ {
+ map textures/sfx/metalfloor_wall_7b.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/metalfloor_wall_5bglowblu.tga
+ blendfunc gl_one gl_one
+ rgbgen wave sin .5 .2 0 .1
+ }
+}
+
+textures/sfx/xmetalfloor_wall_9b
+{
+ qer_editorimage textures/sfx/metalfloor_wall_9b.tga
+
+ {
+ map textures/sfx/metalfloor_wall_9b.tga
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+ {
+ map textures/sfx/metalfloor_wall_9bglow.tga
+ blendfunc gl_one gl_one
+ }
+}
+
+textures/sfx/xq1metalbig_jumppad
+{
+ qer_editorimage textures/gothic_floor/q1metal7_98d_256x256.tga
+ surfaceparm nodamage
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/gothic_floor/q1metal7_98d_256x256.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+ {
+ clampmap textures/sfx/surface6jumppad.blend.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin 0.75 0.25 0 .2
+ tcMod stretch sin 0.80 0.20 0 1
+ }
+}
+
+textures/sfx/xredfog
+{
+ q3map_lightimage textures/sfx/xredlightimage.tga
+ qer_editorimage textures/sfx/fog_red.tga
+ q3map_surfacelight 300
+ q3map_lightsubdivide 64
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ qer_nocarve
+ fogparms ( 0.9 0.3 0.3 ) 128
+
+}
+
+textures/sfx/zap_scroll
+{
+ q3map_surfacelight 300
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ cull none
+
+ {
+ Map textures/sfx/zap_scroll.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .8 2 0 7
+ tcMod scroll 0 1
+ }
+ {
+ Map textures/sfx/zap_scroll.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 5
+ tcMod scale -1 1
+ tcMod scroll 0 1
+ }
+ {
+ Map textures/sfx/zap_scroll2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 6.3
+ tcMod scale -1 1
+ tcMod scroll 2 1
+ }
+ {
+ Map textures/sfx/zap_scroll2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 7.7
+ tcMod scroll -1.3 1
+ }
+}
+
+textures/sfx/zap_scroll1000
+{
+ q3map_surfacelight 1000
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_lightimage textures/sfx/zap_scroll.tga
+ qer_editorimage textures/sfx/zap_scroll2.tga
+ cull none
+
+ {
+ map textures/sfx/zap_scroll.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle .8 2 0 7
+ tcMod scroll 0 1
+ }
+ {
+ map textures/sfx/zap_scroll.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 5
+ tcMod scale -1 1
+ tcMod scroll 0 1
+ }
+ {
+ map textures/sfx/zap_scroll2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 6.3
+ tcMod scale -1 1
+ tcMod scroll 2 1
+ }
+ {
+ map textures/sfx/zap_scroll2.tga
+ blendFunc GL_ONE GL_ONE
+ rgbgen wave triangle 1 1.4 0 7.7
+ tcMod scroll -1.3 1
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/skies.shader b/install/installs/Q3Pack/install/baseq3/scripts/skies.shader
new file mode 100644
index 0000000..27c2797
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/skies.shader
@@ -0,0 +1,1073 @@
+textures/skies/blacksky
+{
+ qer_editorimage textures/skies/blacksky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 25
+ q3map_lightsubdivide 512
+ q3map_sun 1 1 1 32 90 90
+ {
+ map gfx/colors/black.tga
+ }
+}
+
+textures/skies/hellsky
+{
+ qer_editorimage textures/skies/dimclouds.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun 4 3 3 65 290 75
+ q3map_surfacelight 50
+ skyparms - 512 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.05 0
+ tcMod scale 2 2
+ depthWrite
+ }
+}
+
+textures/skies/hellsky2
+{
+ qer_editorimage textures/skies/dimclouds.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun .9 .9 1 70 65 78
+ q3map_surfacelight 60
+ skyparms - 512 -
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.02 0
+ tcMod scale 1 1
+ depthWrite
+ }
+ {
+ map textures/skies/dimclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.02 0.01
+ tcMod scale 3 3
+ }
+
+}
+
+textures/skies/hellsky2bright
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun 1 1 1 100 220 50
+ q3map_surfacelight 120
+
+ qer_editorimage textures/skies/inteldimredclouds.tga
+
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/kc_dm10sky
+{
+ q3map_lightimage textures/skies/pjbasesky.tga
+ q3map_lightsubdivide 512
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun .5 .6 .8 90 225 55
+ q3map_surfacelight 150
+
+ qer_editorimage textures/skies/bluetopclouds.tga
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+
+
+}
+
+textures/skies/kcbasesky_arena1_sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 256
+ q3map_sun 0.266383 0.274632 0.358662 150 60 85
+ q3map_surfacelight 500
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.01 0.01
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.01
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/killsky
+{
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun 3 2 2 70 315 65
+ q3map_surfacelight 75
+ skyparms - 512 -
+
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/mkc_sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun 0.266383 0.274632 0.358662 150 60 80
+ q3map_surfacelight 700
+
+ skyparms half 256 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.01 0.01
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.01
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/nightsky_xian_dm1
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 300
+ q3map_sun 1 1 1 100 -41 58
+
+ qer_editorimage textures/skies/xnight2_up.tga
+
+
+ skyparms env/xnight2 - -
+}
+
+textures/skies/nightsky_xian_dm15
+{
+ qer_editorimage textures/skies/xnight2_up.tga
+ surfaceparm nolightmap
+ surfaceparm noimpact
+
+ q3map_surfacelight 900
+ q3map_sun 1 1 1 100 -58 58
+ skyparms env/xnight2 - -
+
+
+}
+
+textures/skies/nightsky_xian_dm4
+{
+ qer_editorimage textures/skies/xnight2_up.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun 1 1 1 80 -41 58
+ q3map_surfacelight 50
+ skyparms env/xnight2 - -
+}
+
+textures/skies/pj_arena2sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+ q3map_sun 0.266383 0.274632 0.358662 100 350 55
+ q3map_surfacelight 100
+
+ skyparms full 200 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.015 0.016
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.012
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/pj_arena4_sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+ q3map_sun 0.266383 0.274632 0.358662 200 165 45
+ q3map_surfacelight 100
+
+ skyparms full 128 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.015 0.016
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.012
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/pj_ctf1sky
+{
+ qer_editorimage textures/skies/pjbasesky
+
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+ q3map_sun 0.266383 0.274632 0.358662 100 350 75
+ q3map_surfacelight 150
+
+ skyparms full 200 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.015 0.016
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.012
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/pj_ctf2_sky
+{
+ qer_editorimage textures/skies/bluetopclouds.tga
+ q3map_lightimage textures/skies/topclouds.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+ q3map_sun 0.266383 0.274632 0.358662 250 90 45
+ q3map_surfacelight 100
+
+ skyparms full 128 -
+
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scroll 0.015 0.016
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.012
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/pj_dm10sky
+{
+ q3map_lightimage textures/common/white.tga
+ q3map_lightsubdivide 512
+ q3map_globaltexture
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun .5 .6 .8 90 225 55
+ q3map_surfacelight 150
+
+ qer_editorimage textures/skies/bluetopclouds.tga
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+
+}
+
+textures/skies/pj_dm9sky
+{
+ qer_editorimage textures/skies/bluetopclouds.tga
+ q3map_lightimage textures/skies/topclouds.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 512
+
+ q3map_sun .5 .6 .8 140 165 60
+ q3map_surfacelight 80
+
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/pjbasesky_arena1_sky
+{
+ qer_editorimage textures/skies/pjbasesky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_globaltexture
+ q3map_lightsubdivide 256
+ q3map_sun 0.266383 0.274632 0.358662 150 60 85
+ q3map_surfacelight 100
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/dimclouds.tga
+ tcMod scroll 0.01 0.01
+ tcMod scale 3 3
+ depthWrite
+ }
+ {
+ map textures/skies/pjbasesky.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -0.01 -0.01
+ tcMod scale 5 5
+ }
+}
+
+textures/skies/q3dm0
+
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun .5 .6 .8 60 80 75
+ q3map_surfacelight 80
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/skybox
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/space1_bk.tga
+ q3map_sun 1 1 1 100 -58 58
+ q3map_surfacelight 400
+
+ skyparms env/space1 - -
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/stars_arena7
+{
+ qer_editorimage textures/skies/black_up.tga
+
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 10
+ q3map_sun .6 .6 .6 30 35 78
+
+ skyparms env/black - -
+}
+
+textures/skies/tim_dm14
+{
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_sun 3 2 2 90 314 60
+ q3map_surfacelight 80
+ skyparms - 512 -
+
+ //cloudparms 512 full
+ //lightning
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/tim_dm14red
+{
+ q3map_lightimage textures/skies/stars_red.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+ q3map_sun .5 .37 .19 70 314 60
+
+ q3map_surfacelight 80
+ skyparms - 512 -
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/tim_dm3_red
+{
+ q3map_lightimage textures/skies/stars_red.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun .5 .37 .19 70 30 70
+
+ q3map_surfacelight 80
+ skyparms - 512 -
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/tim_hell
+{
+ q3map_lightimage textures/skies/stars_red.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun 1 .77 .77 80 315 70
+ q3map_surfacelight 130
+ skyparms - 384 -
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/tim_km2
+{
+ q3map_lightimage textures/skies/stars_red.tga
+ qer_editorimage textures/skies/killsky_1.tga
+ surfaceparm noimpact
+ surfaceparm nomarks
+ surfaceparm nolightmap
+
+ q3map_sun .5 .37 .19 90 315 40
+ q3map_surfacelight 80
+ skyparms - 512 -
+
+ {
+ map textures/skies/killsky_1.tga
+ tcMod scroll 0.05 .1
+ tcMod scale 2 2
+ depthWrite
+ }
+ {
+ map textures/skies/killsky_2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.06
+ tcMod scale 3 2
+ }
+}
+
+textures/skies/toxicsky
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 80
+ q3map_sun 1 1 0.5 100 30 60
+
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/toxicskydim
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 100
+ q3map_sun 1 1 0.5 80 30 70
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/toxicskytim_blue
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun .5 .6 .8 100 70 60
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_ctf1
+//used in tim_ctf1
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun 1 1 0.5 90 70 40
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm2
+
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun .5 .6 .8 100 190 75
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm3
+
+{
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 80
+ q3map_sun 1 1 0.5 100 30 60
+
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/toxicskytim_dm4
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun 1 1 0.5 90 120 75
+ q3map_surfacelight 80
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm5
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_sun 1 .78 .48 90 225 55
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm7
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun .5 .6 .8 100 260 50
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm8
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun 1 1 0.5 85 220 40
+ q3map_surfacelight 120
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/toxicskytim_dm9
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_sun .980 .835 .3 100 25 65
+ q3map_surfacelight 80
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/xblacksky
+{
+ qer_editorimage textures/skies/blacksky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 300
+ q3map_lightsubdivide 512
+ q3map_sun 1 1 1 32 45 90
+ {
+ map gfx/colors/black.tga
+ }
+}
+
+textures/skies/xblacksky_dm7
+{
+ qer_editorimage textures/skies/blacksky.tga
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ {
+ map gfx/colors/black.tga
+ }
+}
+
+textures/skies/xtoxicsky_ctf
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 500
+ q3map_sun 1 1 0.5 150 30 60
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicsky_dm14
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 800
+ q3map_sun 1 1 0.85 100 90 90
+
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ skyparms - 512 -
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicsky_dm3
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 400
+ q3map_sun 1 1 0.5 150 30 60
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicsky_dm9
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 400
+ q3map_sun 1 1 0.5 150 30 60
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicsky_q3ctf3
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ q3map_surfacelight 500
+ q3map_sun 1 1 0.5 150 30 60
+ skyparms - 512 -
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
+
+textures/skies/xtoxicsky_tourney
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_lightimage textures/skies/toxicsky.tga
+ qer_editorimage textures/skies/inteldimredclouds.tga
+ q3map_surfacelight 495
+ q3map_sun 1 1 0.5 150 75 60
+ skyparms - 512 -
+
+ {
+ map textures/skies/inteldimclouds.tga
+ tcMod scroll 0.1 0.1
+ tcMod scale 3 2
+ depthWrite
+ }
+ {
+ map textures/skies/intelredclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 0.05 0.05
+ tcMod scale 3 3
+ }
+}
+
+textures/skies/xtoxicskytim_q3dm5
+
+{
+ surfaceparm noimpact
+ surfaceparm nolightmap
+
+ q3map_surfacelight 400
+ q3map_sun .5 .6 .8 150 30 60
+
+
+ q3map_lightimage textures/common/white.tga
+ qer_editorimage textures/skies/bluetopclouds.tga
+ skyparms - 512 -
+
+ {
+ map textures/skies/bluedimclouds.tga
+ tcMod scale 3 2
+ tcMod scroll 0.15 0.15
+ depthWrite
+ }
+ {
+ map textures/skies/topclouds.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scale 3 3
+ tcMod scroll 0.05 0.05
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/skin.shader b/install/installs/Q3Pack/install/baseq3/scripts/skin.shader
new file mode 100644
index 0000000..f7e248d
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/skin.shader
@@ -0,0 +1,161 @@
+
+textures/skin/chapthroat2
+{
+ qer_editorimage textures/skin/chapthroat2.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/chapthroat2.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/chapthroatooz
+{
+
+ surfaceparm nonsolid
+ {
+ map textures/liquids/proto_gruel3.tga
+ tcMod scroll 0 .2
+ tcMod scale 2 2
+ rgbGen vertex
+ }
+ {
+ map textures/skin/chapthroatooz.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ blendFunc GL_DST_COLOR GL_ONE_MINUS_DST_ALPHA
+ rgbGen identity
+ }
+}
+
+textures/skin/nibbles
+{
+ deformVertexes wave 10 sin 4 3 0 0.3
+ {
+ rgbGen identity
+ map $lightmap
+ }
+ {
+ map textures/skin/nibbles.tga
+ blendFunc GL_DST_COLOR GL_SRC_ALPHA
+ rgbGen identity
+ alphaGen lightingSpecular
+ }
+}
+
+textures/skin/skin1_trans
+{
+ qer_editorimage textures/skin/skin1.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/skin1.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/skin5_trans
+{
+ qer_editorimage textures/skin/skin5.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/skin5.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/skin6_trans
+{
+ qer_editorimage textures/skin/skin6.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/skin6.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/skin6move
+{
+ tessSize 128
+ deformVertexes wave 100 sin 4 3 0 0.3
+ {
+ map $lightmap
+ rgbGen identity
+ }
+ {
+ map textures/skin/skin6move.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+}
+
+textures/skin/surface8_trans
+{
+ qer_editorimage textures/skin/surface8.tga
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/surface8.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
+
+textures/skin/tongue_trans
+{
+ qer_editorimage textures/skin/tongue.tga
+ surfaceparm nomarks
+ surfaceparm nonsolid
+ {
+ map $lightmap
+ rgbGen identity
+
+ }
+ {
+ map textures/skin/tongue.tga
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+
+
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/terrademoQ3.shader b/install/installs/Q3Pack/install/baseq3/scripts/terrademoQ3.shader
new file mode 100644
index 0000000..0e185b0
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/terrademoQ3.shader
@@ -0,0 +1,623 @@
+// if you are using the tree models in any of your maps, make sure you redistribute those shaders
+
+models/mapobjects/tree/branch
+{
+ cull disable
+ deformVertexes wave 100 sin 0 .1 0 .2
+ surfaceparm trans
+ {
+ map models/mapobjects/tree/branch.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/tree2/branch2
+{
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+ cull none
+ sort 10
+ {
+ clampmap models/mapobjects/tree2/branch2.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+// following shaders are for terrain maps
+
+textures/common/terrain
+{
+ surfaceparm nodraw
+ surfaceparm nomarks
+ surfaceparm nolightmap
+}
+
+textures/common/terrain2
+{
+ qer_editorimage textures/common/terrain.tga
+ surfaceparm dust
+ surfaceparm nodraw
+ surfaceparm nomarks
+ surfaceparm nolightmap
+}
+
+// *************************************************
+// *
+// * Vertex Lighting Replacement Shaders
+// *
+// *************************************************
+
+textures/terrain/vxmpterra2
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+
+ {
+
+ map textures/stone/pjrock10b_2.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+
+}
+
+
+textures/terrain/vxmpterra1
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+
+ {
+
+ map textures/stone/pjrock12c.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+
+}
+
+
+// *********************************************************
+
+// *************************************************
+// *
+// * MPTerra2 terrain shaders (PaulJ)
+// *
+// *************************************************
+
+
+textures/terrain/mpterra2_0
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+
+ map textures/stone/pjrock9b_2.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+
+ {
+
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+
+ }
+
+
+}
+
+textures/terrain/mpterra2_1
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+
+ map textures/stone/pjrock12b_2.tga
+ rgbGen vertex
+ tcmod scale 0.1 0.1
+
+ }
+
+ {
+
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+
+ }
+
+
+}
+
+textures/terrain/mpterra2_2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+
+ map textures/stone/pjrock10b_2.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ }
+
+ {
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+
+ }
+
+}
+
+textures/terrain/mpterra2_0to1
+
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+ map textures/stone/pjrock9b_2.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+
+ {
+ map textures/stone/pjrock12b_2.tga
+ tcmod scale 0.1 0.1
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+ {
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+ }
+
+
+}
+
+textures/terrain/mpterra2_0to2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock9b_2.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/stone/pjrock10b_2.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.05 0.05
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+ {
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+
+ }
+
+
+}
+
+textures/terrain/mpterra2_1to2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+
+ {
+ map textures/stone/pjrock12b_2.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.1 0.1
+ }
+
+ {
+ map textures/stone/pjrock10b_2.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+ {
+ map textures/skies2/clouds.tga
+ blendfunc filter
+ detail
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.05 0.05
+ tcmod transform 1 0 1 1 1 1
+ }
+
+
+}
+
+//////////////////////////////////////////////
+// //
+// x_mpterra //
+// //
+//////////////////////////////////////////////
+
+textures/terrain/vxmpterra3
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px02.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+
+}
+
+
+
+textures/proto2/xproto_0to1
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+
+ {
+ map textures/proto2/px01.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+
+ }
+
+ {
+ map textures/proto2/px02.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale .1 .1
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+
+}
+
+textures/proto2/xproto_1to2
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px02.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ alphaGen vertex
+ }
+
+ {
+ map textures/proto2/px03.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale .1 .1
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+
+}
+
+textures/proto2/xproto_0to2
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+
+ {
+ map textures/proto2/px01.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+ {
+ map textures/proto2/px03.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale .1 .1
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+
+
+}
+
+
+
+textures/proto2/xproto_0
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px01.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+}
+
+textures/proto2/xproto_1
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px02.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+}
+
+textures/proto2/xproto_2
+
+{
+ surfaceparm nolightmap
+ surfaceparm dust
+ {
+ map textures/proto2/px03.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+
+}
+
+
+
+// *************************************************
+// *
+// * MPTerra1 terrain shaders (Tim)
+// *
+// *************************************************
+
+textures/terrain/mpterra1_0
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock9c.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_1
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock12c.tga
+ rgbGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock10c.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_0to1
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock9c.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/stone/pjrock12c.tga
+ tcmod scale 0.125 0.125
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_0to2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock9c.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/stone/pjrock10c.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+
+}
+
+textures/terrain/mpterra1_1to2
+{
+ surfaceparm nolightmap
+ q3map_novertexshadows
+ q3map_forcesunlight
+ {
+ map textures/stone/pjrock12c.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale 0.125 0.125
+ }
+ {
+ map textures/stone/pjrock10c.tga
+ tcmod scale 0.05 0.05
+ rgbGen vertex
+ alphaGen vertex
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+ {
+ map textures/skies2/clouds2.tga
+ blendfunc filter
+ tcmod scale 0.01 0.01
+ tcMod scroll -0.1 0.1
+
+ }
+}
+
+// *********************************************************
+// MP Terra 3 Textures (Xian)
+// *********************************************************
+
+textures/proto2/x_sandy01
+{
+ qer_editorimage textures/proto2/xsandy01.tga
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xsandy01.tga
+ tcmod scale .8 .8
+ rgbGen vertex
+ }
+}
+
+textures/proto2/x_rocky01
+{
+ qer_editorimage textures/proto2/xrocky01.tga
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xrocky01.tga
+ tcmod scale .8 .8
+ rgbGen vertex
+ }
+}
+
+
+textures/proto2/tproto_0to1
+{
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xsandy01.tga
+ tcmod scale .3 .3
+ rgbGen vertex
+ alphaGen vertex
+ }
+ {
+ map textures/proto2/xrocky01.tga
+ rgbGen vertex
+ alphaGen vertex
+ tcmod scale .1 .1
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+
+textures/proto2/tproto_0
+{
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xsandy01.tga
+ tcmod scale .2 .2
+ rgbGen vertex
+ }
+}
+
+textures/proto2/tproto_1
+{
+ surfaceparm nolightmap
+ {
+ map textures/proto2/xrocky01.tga
+ tcmod scale .1 .1
+ rgbGen vertex
+ }
+}
\ No newline at end of file
diff --git a/install/installs/Q3Pack/install/baseq3/scripts/test.shader b/install/installs/Q3Pack/install/baseq3/scripts/test.shader
new file mode 100644
index 0000000..8b40d0b
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/scripts/test.shader
@@ -0,0 +1,943 @@
+//**********************************************************************//
+// test.shader sorted and updated on Phase 2 //
+// by Eutectic - 12 May 2000 //
+// This file is irrelevant for Q3Radiant and the shaders //
+// in this file must NOT be used to make new maps. //
+// It was updated for the sake of completeness: //
+// some shaders that belonged in other files were moved to those //
+// shader files //
+// //
+// SHADERS THAT DIDN'T BELONG HERE AND MOVED TO PROPER FILE: 8 //
+// textures/base/bluemet1 //
+// textures/common/transwater //
+// textures/gothic_trim/hellodolly //
+// textures/sfx/kenelectric //
+// textures/sfx/mkc_fog_dm1 //
+// textures/sfx/mkc_fog_dm1a //
+// textures/sfx/mkc_fog_dm4 //
+// textures/skies/mkc_sky //
+// SHADERS THAT BELONGED HERE BUT WERE IN ANOTHER FILE: 0 //
+//**********************************************************************//
+
+// *************************************************
+// * TEST SHADERS *
+// * DO NOT USE IN PROJECT MAPS *
+// *************************************************
+
+textures/bwhtest/crackedearth
+{
+ {
+ map textures/bwhtest/crackedearth.tga
+ }
+}
+
+// Rogues sorting trimmed glass//
+
+textures/bwhtest/lightning
+{
+ cull disable
+ {
+ map textures/bwhtest/lightning.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb 0 0.1 0 1
+ }
+}
+
+textures/dont_use/flameshader
+{
+// *************************************************
+// * test flames *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ cull none
+ fogparms .3 .1 .1 0 32
+ tesssize 16
+ deformVertexes wave 100 sin 2.5 5 10 .1
+
+// END
+}
+
+textures/dont_use/foggentest_shader
+{
+// *************************************************
+// * Kevin's fogggen test *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ fogparms .2 .1 .3 0 0
+ foggen sin .1 .1 .1 .1
+
+ cull backsided
+
+
+
+// END
+}
+
+textures/dont_use/foglightshader
+{
+// *************************************************
+// * Kevin's simplified fog *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ cull backsided
+ {
+ map textures/dont_use/fogkc.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll 1 1
+ tcMod scale .25 .25
+ tcMod turb .1 .1 .1 .1
+ }
+
+
+// END
+}
+
+textures/dont_use/metal2_2kc
+{
+
+ surfaceparm nolightmap
+ cull none
+ {
+ map textures/dont_use/metal2_2kc.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/dont_use/nightsky_kc
+{
+
+// *************************************************
+// * Kevin's strange test sky *
+// *************************************************
+ surfaceparm sky
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 200
+
+ cloudparms 256 half
+
+
+ {
+ map textures/dont_use/strangesky3_kc.tga
+ tcMod scroll .03 .03
+ }
+
+
+ {
+ map textures/dont_use/strangesky.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scroll .05 .05
+ }
+
+
+ {
+ map textures/dont_use/strangesky2_kc.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod scroll 0.01 0.01
+ tcMod scale .5 .5
+ }
+
+//END
+}
+
+textures/dont_use/nightsky_kcold
+{
+
+// *************************************************
+// * Kevin's four layer storm sky *
+// *************************************************
+ surfaceparm sky
+ surfaceparm noimpact
+ surfaceparm nolightmap
+ q3map_surfacelight 200
+
+ cloudparms 256 full
+ lightning
+
+ {
+ map textures/dont_use/tileclouds3_kc.tga
+ tcMod scroll 0.01 0.01
+ tcMod scale 2 2
+ }
+
+
+ {
+ map textures/dont_use/tileclouds4_kc.tga
+ blendFunc GL_ONE GL_ONE
+ tcMod scroll .04 .05
+ }
+
+
+ {
+ map textures/dont_use/lightningsky8_kc.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod scroll .1 .1
+ tcMod scale 4 4
+ }
+
+ {
+ map textures/dont_use/tileclouds3b_kc.tga
+ blendFunc GL_DST_COLOR GL_ONE
+ tcMod scroll 0.01 .02
+ }
+
+//END
+}
+
+textures/dont_use/openwindow
+{
+
+ surfaceparm nolightmap
+ cull none
+
+ {
+ map textures/dont_use/openwindow.tga
+ alphaMap openwindow.tga
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/dont_use/rustysupport
+{
+
+ surfaceparm nolightmap
+ cull none
+ {
+ map textures/dont_use/rustysupport.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/dont_use/shader2
+{
+// *************************************************
+// * test shader2 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ {
+ map textures/dont_use/shader2.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod turb .2 .01 0 .1
+ tcMod scroll 0 0
+ }
+// END
+}
+
+textures/dont_use/shader3
+{
+// *************************************************
+// * test shader3 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+
+ tesssize 64
+ deformVertexes wave 100 sin 2 2 10 .01
+
+ {
+ map textures/dont_use/blood2.tga
+ tcMod turb .1 .1 0 0.02
+ tcMod scroll .1 .1
+ }
+
+
+// END
+}
+
+textures/dont_use/shader4
+{
+// *************************************************
+// * test shader4 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .1
+
+ q3map_surfacelight 100
+
+ {
+ map textures/dont_use/slimetest7c.tga
+ blendfunc GL_ONE_MINUS_DST_COLOR GL_ZERO
+ tcMod turb .01 .2 10 0.01
+ tcMod scroll .2 .1
+ }
+ {
+ map textures/dont_use/bubbleslimeelectricc.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .5 .5 10 0.01
+ tcMod scroll .2 .2
+ tcMod scale .1 .1
+ }
+
+
+
+
+// END
+}
+
+textures/dont_use/shader5
+{
+// *************************************************
+// * test shader5 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ tesssize 64
+
+ {
+ map textures/dont_use/firetestb.tga
+ blendfunc gl_one gl_one
+ tcMod scroll 5 15
+ tcMod scale .25 .25
+ tcMod turb .2 .2 .1 1
+ }
+
+ {
+ map textures/dont_use/firetest.tga
+ blendFunc GL_dst_color gl_src_alpha
+ tcMod scroll 0 10
+ tcMod scale .1 .1
+ tcMod turb .2 .1 .1 1
+ rgbGen wave SIN .5 .5 1 .1
+ }
+
+ {
+ map textures/dont_use/firetest2.tga
+ blendFunc GL_dst_color gl_one
+ tcMod scroll 10 50
+ tcMod turb .1 .1 .5 .5
+ rgbGen wave SIN .5 .5 1 .1
+ }
+
+
+// END
+}
+
+textures/dont_use/shader5old
+{
+// *************************************************
+// * test shader5 for test use *
+// *************************************************
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ tesssize 64
+
+
+ {
+ map textures/dont_use/firetestb.tga
+ blendfunc gl_one gl_one
+ tcMod scroll 5 15
+ tcMod scale .25 .25
+ tcMod turb .2 .2 .1 1
+ }
+
+ {
+ map textures/dont_use/firetest.tga
+ blendFunc GL_dst_color gl_src_alpha
+ tcMod scroll 0 10
+ tcMod scale .1 .1
+ tcMod turb .2 .1 .1 1
+ }
+
+ {
+ map textures/dont_use/firetest2.tga
+ blendFunc GL_dst_color gl_one
+ tcMod scroll 10 50
+ tcMod turb .1 .1 .5 .5
+ }
+
+// END
+}
+
+textures/dont_use/sign_test_glow
+{
+ surfaceparm trans
+ surfaceparm nolightmap
+ q3map_surfacelight 100
+
+ {
+ map textures/dont_use/sign_test.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE GL_ONE
+ }
+
+ {
+ map textures/dont_use/sign_test_glow.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 1 .1
+ }
+
+// END
+}
+
+textures/dont_use/sky_test
+{
+ surfaceparm sky
+ surfaceparm noimpact
+ q3map_surfacelight 100
+ surfaceparm nolightmap
+ sky textures/dont_use/sky_test
+}
+
+textures/dont_use/train1kc_shader
+{
+// *************************************************
+// * test shader wall *
+// *************************************************
+
+
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ {
+ map textures/common/pjrock5b.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR
+ rgbGen identity
+ detail
+ tcmod scale 9.1 9.2
+ }
+
+ {
+ map textures/common/pjrock5.tga
+ blendFunc GL_DST_COLOR GL_ZERO
+ rgbGen identity
+ }
+
+// END
+}
+
+textures/dont_use/web
+{
+
+ surfaceparm nolightmap
+ cull twosided
+ {
+ map textures/dont_use/web.tga
+ alphaMap $fromBlack
+ blendFunc GL_ONE_MINUS_SRC_ALPHA GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/test/blocks10pent
+{
+
+ // *************************************************
+ // * TEST BORDER WALL *
+ // * Feb 24 1999 *
+ // * Please Comment Changes *
+ // *************************************************
+
+ q3map_surfacelight 1000
+ surfaceparm nodamage
+ qer_lightimage textures/test/jumpadsmall.tga
+
+
+ {
+ map textures/sfx/bouncepad01block18b.tga
+ rgbGen identity
+ }
+
+ {
+ map $lightmap
+ rgbGen identity
+ blendfunc gl_dst_color gl_zero
+ }
+
+ {
+ map textures/sfx/bouncepad01b_layer1.tga
+ blendfunc gl_one gl_one
+ rgbGen wave sin .5 .5 0 1.5
+ }
+
+ {
+ clampmap textures/test/jumppadsmall.tga
+ blendfunc gl_one gl_one
+ tcMod stretch sin .6 .4 0 1.5
+ rgbGen wave square .5 .5 .25 1.5
+ }
+
+ // END
+}
+
+textures/test/electricity3
+{
+ // *************************************************
+ // * Ripply Water Feb 16 1999 *
+ // * IF YOU CHANGE THIS PLEASE COMMENT THE CHANGE *
+ // *************************************************
+
+ qer_trans .5
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 triangle 2 2 1 0.1
+
+
+
+ {
+ map textures/test/fub.tga
+ blendFunc GL_ZERO GL_ONE
+ alphafunc GT0
+ tcMod scale .1 .01
+ tcmod turb 0 .01 .3 .1
+ alphaGen wave sin .5 .5 0 .01
+ tcMod scroll .1 .1
+ depthWrite
+ }
+ {
+ map textures/liquids/pool2.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+
+
+
+ {
+ map textures/test/electricity9.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcmod turb 0 .01 .3 10
+ tcMod scale .5 .5
+ tcMod rotate 1
+ depthfunc equal
+ tcMod scroll -.01 -.05
+ }
+
+ {
+ map textures/test/electricity9.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcmod turb 0 .01 .3 10
+ tcMod scale .5 .5
+ tcMod rotate 1
+ depthfunc equal
+ tcMod scroll -.01 -.05
+ }
+
+ // END
+}
+
+textures/test/densewaterfog
+{
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+ backsided
+ fogparms 0.7 0.7 0.7 128 64
+}
+
+textures/test/fire2
+{
+
+ {
+ map textures/test/fire2.tga
+ }
+ {
+ map textures/test/fire3.tga
+ tcMod turb 0 .1 0 .7
+ tcMod scroll 0 10
+ rgbGen wave sin 1 2 0 1
+ }
+ {
+ map textures/test/fire3.blend.tga
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll 0 10
+ }
+}
+
+textures/test/fogtestshader
+{
+// *************************************************
+// * Kevin's simplified fog *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm fog
+ surfaceparm nolightmap
+
+ cull disable
+ fogparms .2 .225 .25 0 0
+ tesssize 64
+
+ {
+ map textures/test/cloud2.tga
+ blendFunc GL_DST_COLOR GL_ONE
+ tcGen environment
+ tcMod turb .5 .5 .5 0.03
+ tcMod scroll .25 .25
+ tcMod scale .5 .5
+ }
+
+// END
+}
+
+textures/test/lavacrustshader
+{
+// *************************************************
+// * Kevin's brown lava crust *
+// *************************************************
+
+ surfaceparm trans
+ //surfaceparm nonsolid
+ //surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+
+// light 1
+ q3map_surfacelight 100
+
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 0 .03
+ cull disable
+
+ {
+ map textures/test/lavatest.tga
+ tcMod turb .25 0.1 1 0.02
+ tcMod scroll .2 .2
+ }
+ {
+ map textures/test/lavacrust.tga
+ blendfunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .5 .5 5 0.01
+ tcMod scroll .1 .1
+ tcMod scale .1 .1
+ rgbGen wave triangle 1 1 2 1
+ }
+ {
+ map textures/test/lavacrust.tga
+ blendfunc GL_ONE GL_SRC_ALPHA
+ tcMod turb .2 .01 5 .01
+ tcMod scroll -.01 -.01
+ }
+
+
+// END
+}
+
+textures/test/lavatest
+{
+// *************************************************
+// * Kevin's simplified version of lava *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm noimpact
+ surfaceparm lava
+ surfaceparm nolightmap
+
+// light 1
+ q3map_surfacelight 100
+
+ tesssize 128
+ cull disable
+ deformVertexes wave 100 sin 5 5 .5 0.02
+
+ {
+ map textures/test/lavatest.tga
+ tcMod turb .25 0.2 1 0.02
+ tcMod scroll .25 .25
+ }
+
+// END
+}
+
+textures/test/river
+{
+// *************************************************
+// * Kevin's test river shader *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .05
+
+ {
+ map textures/test/watertest8c.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod turb .01 .01 0 0.1
+ tcMod scroll -5 0
+ tcMod scale .5 .5
+ }
+ {
+ map textures/test/watertest10f.tga
+ blendfunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod turb .01 .01 0 0.1
+ rgbGen wave sin .8 .01 1 1
+ tcMod scroll -6 0
+ tcMod scale .5 .5
+ }
+ {
+ map textures/test/watertest8e.tga
+ blendFunc GL_DST_COLOR GL_ONE
+ tcMod turb .01 .01 .1 .1
+ tcMod scroll -10 0
+ }
+
+// END
+}
+
+textures/test/rnd_ledm1
+{
+ surfaceparm nolightmap
+ surfaceparm trans
+ qer_trans 0.5
+ qer_editorimage textures/test/rnd_ledm1.tga
+
+ {
+ map textures/test/rnd_ledm1.tga
+ blendFunc GL_ONE GL_ONE
+ rgbGen identity
+ }
+ {
+ map textures/test/rnd_ledm2.tga
+ blendFunc GL_ZERO GL_SRC_COLOR
+ rgbGen identity
+ }
+}
+
+textures/test/slimeshader
+{
+// *************************************************
+// * Kevin's temp slime with electricity *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm slime
+ surfaceparm nolightmap
+
+ tesssize 64
+ cull disable
+ deformVertexes wave 100 sin .5 .5 1 .05
+
+ q3map_surfacelight 500
+
+ {
+ map textures/test/slimetest6.tga
+ tcMod turb .25 0.1 1 0.02
+ tcMod scroll .2 .2
+ }
+ {
+ map textures/test/slimecrust5d.tga
+ blendfunc GL_DST_COLOR GL_SRC_ALPHA
+ tcMod turb .5 .5 1 .02
+ tcMod scroll .1 .01
+ tcMod scale .1 .1
+ }
+ {
+ map textures/test/electricslime.tga
+ tcMod turb 1 1 1 .01
+ tcMod scroll 1 5
+ tcMod scale .5 .5
+ blendfunc GL_ONE GL_ONE
+ rgbGen wave sin .5 .5 0 .1
+ }
+ {
+ map textures/test/slimecrust5d.tga
+ blendfunc GL_ONE GL_SRC_ALPHA
+ tcMod turb .2 .1 5 .01
+ tcMod scroll -.01 -.01
+ }
+
+// FOG
+ surfaceparm fog
+ fogparms .2 1 .25 0 256
+
+// END
+}
+
+textures/test/waterfall
+{
+// *************************************************
+// * Kevin's test waterfall shader *
+// *************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 16
+ deformVertexes wave 100 sin 0 2 1 .1
+
+
+ {
+ map textures/test/watertest8e.tga
+ blendFunc GL_ONE GL_SRC_ALPHA
+ tcMod turb .01 .01 0 0.1
+ tcMod scroll 15 0
+ }
+ {
+ map textures/test/watertest10f.tga
+ blendfunc GL_DST_COLOR GL_SRC_COLOR
+ tcMod turb .01 .01 0 0.1
+ rgbGen wave sin .8 .01 1 1
+ tcMod scroll 20 0
+ }
+ {
+ map textures/test/watertest10c.tga
+ blendFunc GL_ONE GL_SRC_ALPHA
+ //tcMod turb .05 .05 .1 0.1
+ tcMod scroll 17 1
+ tcMod scale .5 .5
+ }
+
+
+// END
+}
+
+textures/test/watertile
+{
+// *************************************************
+// * Kevin's test water tile with shader *
+// *************************************************
+
+ cull disable
+
+ {
+ map textures/paulbase/tilefloor2.tga
+ }
+ //{
+ //map textures/test/watertest7f.tga
+ //blendFunc GL_ONE GL_SRC_COLOR
+ //tcMod turb .01 .02 0 0.05
+ //tcMod scroll .01 .01
+ //}
+ //{
+ //map textures/test/watertest7h.tga
+ //blendFunc GL_ONE GL_SRC_COLOR
+ //tcMod turb .01 .03 0 0.05
+ //tcMod scroll -.01 -.01
+ //}
+
+// END
+}
+
+textures/test/water_trans
+{
+// **************************************************
+// * Kevin's simplified version of translucent water*
+// * Should be used for small pools *
+// **************************************************
+
+ surfaceparm trans
+ surfaceparm nonsolid
+ surfaceparm water
+ surfaceparm nolightmap
+
+ cull disable
+ tesssize 64
+ deformVertexes wave 100 sin 1 1 1 .1
+
+
+ {
+ map textures/test/watertest8d.tga
+ blendfunc GL_ONE GL_SRC_COLOR
+ tcMod scale .03 .03
+ tcMod scroll .001 .001
+ }
+
+ {
+ map textures/test/watertest12e.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod scale .2 .2
+ tcMod stretch sin 1 .1 .02 .05
+ rgbGen wave sin .8 .2 .02 .05
+ tcMod scroll -.001 .001
+ }
+
+ {
+ map textures/test/watertest12e7.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod turb .1 .1 0 .01
+ tcMod scale .5 .5
+ tcMod scroll -.025 .02
+ }
+
+ {
+ map textures/test/watertest12e6.tga
+ blendfunc GL_DST_COLOR GL_ONE
+ tcMod scale .3 .3
+ tcMod turb .1 .01 .01 .01
+ tcMod stretch sin 1 .3 .015 .015
+ rgbGen wave sin .7 .3 .02 .02
+ tcMod scroll .001 -.001
+ }
+
+// END
+}
+
+textures/test/wispy
+{
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+
+ deformVertexes wave 100 sin 0 3 0 0.1
+ tesssize 64
+
+ {
+ map env/alphaclouds.tga
+ blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ tcMod scroll 1 0.8
+ tcMod scale 0.1 0.1
+ tcMod turb 0 0.3 0 0.1
+ }
+
+}
+
+textures/vector
+// testing tcgen vector
+{
+ nomipmaps
+ {
+ map textures/gothic_block/blocks10.tga
+ tcGen vector ( 0.0001 0.0001 0.0001 ) ( 0 0 0 )
+ tcMod scroll 0.01 0
+ rgbGen identity
+ }
+}
+
diff --git a/install/installs/Q3Pack/install/baseq3/textures/.svn/entries b/install/installs/Q3Pack/install/baseq3/textures/.svn/entries
new file mode 100644
index 0000000..5aa5ee3
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/textures/.svn/entries
@@ -0,0 +1,37 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/textures
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+skies2
+dir
+
+proto2
+dir
+
+stone
+dir
+
diff --git a/install/installs/Q3Pack/install/baseq3/textures/proto2/.svn/entries b/install/installs/Q3Pack/install/baseq3/textures/proto2/.svn/entries
new file mode 100644
index 0000000..c1aa9d9
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/textures/proto2/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/textures/proto2
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+pj_terralpha01.pcx
+file
+
+
+
+
+2012-04-01T16:52:06.755836Z
+be624795478ab29d2e5e1ec44a94a3a3
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2384
+
diff --git a/install/installs/Q3Pack/install/baseq3/textures/proto2/.svn/prop-base/pj_terralpha01.pcx.svn-base b/install/installs/Q3Pack/install/baseq3/textures/proto2/.svn/prop-base/pj_terralpha01.pcx.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/textures/proto2/.svn/prop-base/pj_terralpha01.pcx.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/textures/proto2/.svn/text-base/pj_terralpha01.pcx.svn-base b/install/installs/Q3Pack/install/baseq3/textures/proto2/.svn/text-base/pj_terralpha01.pcx.svn-base
new file mode 100644
index 0000000..f1b4b92
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/proto2/.svn/text-base/pj_terralpha01.pcx.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/textures/proto2/pj_terralpha01.pcx b/install/installs/Q3Pack/install/baseq3/textures/proto2/pj_terralpha01.pcx
new file mode 100644
index 0000000..f1b4b92
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/proto2/pj_terralpha01.pcx differ
diff --git a/install/installs/Q3Pack/install/baseq3/textures/skies2/.svn/entries b/install/installs/Q3Pack/install/baseq3/textures/skies2/.svn/entries
new file mode 100644
index 0000000..a5444e4
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/textures/skies2/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/textures/skies2
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+clouds.tga
+file
+
+
+
+
+2012-04-01T16:52:06.622829Z
+e156d84cec80d8e4e342b92bc433738c
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1068
+
diff --git a/install/installs/Q3Pack/install/baseq3/textures/skies2/.svn/prop-base/clouds.tga.svn-base b/install/installs/Q3Pack/install/baseq3/textures/skies2/.svn/prop-base/clouds.tga.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/textures/skies2/.svn/prop-base/clouds.tga.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/textures/skies2/.svn/text-base/clouds.tga.svn-base b/install/installs/Q3Pack/install/baseq3/textures/skies2/.svn/text-base/clouds.tga.svn-base
new file mode 100644
index 0000000..7122e4f
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/skies2/.svn/text-base/clouds.tga.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/textures/skies2/clouds.tga b/install/installs/Q3Pack/install/baseq3/textures/skies2/clouds.tga
new file mode 100644
index 0000000..7122e4f
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/skies2/clouds.tga differ
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/entries b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/entries
new file mode 100644
index 0000000..e0903d1
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/entries
@@ -0,0 +1,130 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/baseq3/textures/stone
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+pjrock10b_2.tga
+file
+
+
+
+
+2012-04-01T16:52:08.686947Z
+00dfb18bc6a66c9b8f8d6af17da763a0
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+197347
+
+pjrock12b_2.tga
+file
+
+
+
+
+2012-04-01T16:52:08.689947Z
+9c918f4ae14d36d3d06cb18375f15399
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+197178
+
+pjrock9b_2.tga
+file
+
+
+
+
+2012-04-01T16:52:08.703948Z
+59bd17e110e0e0ec321686cfd190ecfe
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+196633
+
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/prop-base/pjrock10b_2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/prop-base/pjrock10b_2.tga.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/prop-base/pjrock10b_2.tga.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/prop-base/pjrock12b_2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/prop-base/pjrock12b_2.tga.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/prop-base/pjrock12b_2.tga.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/prop-base/pjrock9b_2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/prop-base/pjrock9b_2.tga.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/prop-base/pjrock9b_2.tga.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/text-base/pjrock10b_2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/text-base/pjrock10b_2.tga.svn-base
new file mode 100644
index 0000000..3b41d52
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/text-base/pjrock10b_2.tga.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/text-base/pjrock12b_2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/text-base/pjrock12b_2.tga.svn-base
new file mode 100644
index 0000000..67a4b3f
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/text-base/pjrock12b_2.tga.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/text-base/pjrock9b_2.tga.svn-base b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/text-base/pjrock9b_2.tga.svn-base
new file mode 100644
index 0000000..df58064
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/stone/.svn/text-base/pjrock9b_2.tga.svn-base differ
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/pjrock10b_2.tga b/install/installs/Q3Pack/install/baseq3/textures/stone/pjrock10b_2.tga
new file mode 100644
index 0000000..3b41d52
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/stone/pjrock10b_2.tga differ
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/pjrock12b_2.tga b/install/installs/Q3Pack/install/baseq3/textures/stone/pjrock12b_2.tga
new file mode 100644
index 0000000..67a4b3f
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/stone/pjrock12b_2.tga differ
diff --git a/install/installs/Q3Pack/install/baseq3/textures/stone/pjrock9b_2.tga b/install/installs/Q3Pack/install/baseq3/textures/stone/pjrock9b_2.tga
new file mode 100644
index 0000000..df58064
Binary files /dev/null and b/install/installs/Q3Pack/install/baseq3/textures/stone/pjrock9b_2.tga differ
diff --git a/install/installs/Q3Pack/install/docs/.svn/entries b/install/installs/Q3Pack/install/docs/.svn/entries
new file mode 100644
index 0000000..081495d
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/.svn/entries
@@ -0,0 +1,46 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/docs
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2008-04-12T23:02:23.975576Z
+38
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+Team_Arena_Mapping_Help
+dir
+
+New_Teams_For_Q3TA
+dir
+
+Terrain_Manual
+dir
+
+Compile_Manual
+dir
+
+Q3AShader_Manual
+dir
+
+Model_Manual
+dir
+
diff --git a/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/entries b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/entries
new file mode 100644
index 0000000..52921c9
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/entries
@@ -0,0 +1,232 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/install/docs/Compile_Manual
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2006-02-09T00:07:34.157408Z
+1
+spog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+cfgq3.c
+file
+
+
+
+
+2012-04-01T16:51:52.123999Z
+e485c4968a3071fa9d196adf2f0c83bd
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2899
+
+q3map.html
+file
+
+
+
+
+2012-04-01T16:51:52.127000Z
+169a414d6278cdf4fb68517e879f590b
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+19655
+
+bspc.txt
+file
+
+
+
+
+2012-04-01T16:51:52.150001Z
+169fe629ad636bc05089640c08588721
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+24724
+
+modelskins.txt
+file
+
+
+
+
+2012-04-01T16:51:52.170002Z
+c6853fe837e5ef1407f155feaa026562
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2165
+
+headskins.txt
+file
+
+
+
+
+2012-04-01T16:51:52.172002Z
+239c66cae6f6c941fb1c4f7419cfec2b
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1997
+
+index.html
+file
+
+
+
+
+2012-04-01T16:51:52.175002Z
+f5e15cf6813f6d489fa54b565588c075
+2006-02-09T00:07:34.157408Z
+1
+spog
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1723
+
diff --git a/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/bspc.txt.svn-base b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/bspc.txt.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/bspc.txt.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/cfgq3.c.svn-base b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/cfgq3.c.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/cfgq3.c.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/headskins.txt.svn-base b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/headskins.txt.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/headskins.txt.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/index.html.svn-base b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/index.html.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/index.html.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/modelskins.txt.svn-base b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/modelskins.txt.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/modelskins.txt.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/q3map.html.svn-base b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/q3map.html.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/prop-base/q3map.html.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/text-base/bspc.txt.svn-base b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/text-base/bspc.txt.svn-base
new file mode 100644
index 0000000..0547b97
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Compile_Manual/.svn/text-base/bspc.txt.svn-base
@@ -0,0 +1,565 @@
+
+
+Title: BSP Converter
+Version: 2.1h
+Date: 2001-03-28
+Author: Mr. Elusive
+
+
+Description
+-----------
+
+The BSPC tool is used to create AAS files from BSP files.
+An AAS file is a file with areas used by the Quake III Arena bot in order
+to navigate and understand a map. The Quake III Arena maps are stored in
+BSP files.
+
+
+Usage
+-----
+
+bspc [- [- ...]]
+
+Example 1: bspc -bsp2aas d:\quake3\baseq3\maps\mymap?.bsp
+Example 2: bspc -bsp2aas d:\quake3\baseq3\pak0.pk3\maps/q3dm*.bsp
+
+Switches:
+ bsp2aas <[pakfilter/]filter.bsp> = convert BSP to AAS
+ reach = compute reachability & clusters
+ cluster = compute clusters
+ aasopt = optimize aas file
+ output
+
The material here is for use in conjunction with the Q3Radiant manual for the
+Quake 3 Engine and presumes familiarity with that tool and game engine. Although
+compiling switches and shader commands are included here, this is not intended
+to be a general update or revision to the Q3Radiant manual
Despite their massive size, terrain maps can support enjoyable bot play. The
+key is careful placement of cluster portals, which is true of any map. Study the
+bspc documentation for details. The documents accompanying the tools are more up
+to date than those in the Q3Radiant manual. Your goal should be to keep the
+number of areas in each cluster roughly equal and reasonably low (hundreds, not
+thousands).
This is really best addressed as a number of semi-related building tips:
+
+
Plan Ahead. If you know you want buildings
+in your map, plan their locations from the first. Very complicated buildings
+(lots of geometry and surface detail) should be isolated away from long views.
+One reason for this is to control in view polygon counts. The second (and really
+obscure one) is to reduce the amount of z-compression that will affect the
+structures.
+
+
Build to Support Game play. Each of the
+structures in the Q3:TA terrain maps was built to support a game play need.
+Quite often, less is better than more.
+
+
Build Simply. Simple, uncomplicated
+architecture may be best. The more complicated you make your buildings, the less
+complicated the terrain around them can be. Depends on what you want to play up.
+The busy look of many Q3A maps doesn’t translate well to large terrain.
+Details are lost at great distances and only add to the triangle complexity of
+maps containing them.
+
+
Detail Content. With few exceptions ALL
+the geometry inside the terrain map is detail content, not just the terrain
+entity. The walls forming the corridor in mpterra2 may be the only non-detail
+structures in that map. Making geometry into detail makes a map far easier and
+faster to compile. If you want to block vis inside your structures, create
+simple caulk structures … much the same way as described for vis blocking the
+terrain.
+
+
Z-Compression Problems. Review the the map
+in 16 bit mode during development. This brings out z-fighting issues that occur
+at long distances. This z-fighting is created by detail brushes being compressed
+into each other (The Q3A engine does a significant amount of “z compression”
+as geometry becomes farther away from the viewer). This z-compression is far
+less apparent in 32 bit modes, but we have to remember that many people turn
+down graphic features in order to simply play Q3A on their systems (not just to
+get ridiculously high frame rates).
+
+
Fit Structures to the Terrain. Don’t
+just set structures on terrain and expect them to look right. Make your
+buildings look like they belong where you put them. Accommodate the rise and
+fall of terrain in your floor plans … or “dig” into the terrain brushes to
+create basements, tunnels and whatever you need. You can also adjust the height
+map to better arrange the geometry around structures, or manually tweak the
+triangles once the structures are in place. History is full of examples of
+really interesting buildings that have been built to accommodate difficult
+terrain like hills, cliffs and mountains.
The creation of terrain maps requires that the mapmaker have, or have access
+to a computer art program. Both JASC’s Paint Shop Pro and
+ Adobe’s Photoshop
+were tested and will do the job. Any art program that can output an 8-bit BMP
+format file with indexed color should work also.
Terrain maps still have to follow the rules that apply to all Q3A engine
+maps. There’s only so much that you can allow to be seen at one time, or the
+game starts slowing down. The good news is that the engine will only draw the
+terrain triangles that are in the player’s PVS (potential visible set). It
+doesn’t have to draw all the triangles in the terrain entity just because part
+of the entity is in view.
+
At first, most of the usual bag of tricks that mappers use to create vis
+blocking structures in architectural maps don’t seem to apply to terrain. But
+that is not the case. If anything, you NEED to think of terrain in much the same
+way as you think of buildings. You are still dealing with open spaces that could
+be considered corridors and large rooms … even though they look like large
+valleys.
+
In fact, it would be best to plan out the layout of your terrain
+ BEFORE
+creating your height map. If you know you want to block vis, you can design your
+terrain to work with vis blocking techniques and avoid the agony of having to go
+all the way back to the start when you discover that your killer terrain map
+lets you see too much at once.
+
If you want the player, even in spectator mode, to be able to fly everywhere
+and see the whole world laid out below him … an unrestricted vista, so to
+speak, you’re going to be much more limited. Every single triangle in the map
+will essentially be viewable at any moment in time. However, if you’re willing
+to place restrictions on your players - limit how high they can fly or climb,
+you suddenly have more options for blocking player visibility.
+
First, the terrain entity is entirely detail content, so it doesn’t block
+vis. That’s a key part of how this whole process works. Otherwise, vis time
+would be measured in eras (not minutes or hours) and visdata size would be very,
+very large.
+
To block vis in the terrain, start by creating simple
+vis-blocking structures
+out of caulk texture inside the forms of the terrain (they are not part of the
+terrain entity). You can try to match the silhouette of the terrain, but in the
+end, you may only end up complicating the visdata without gaining any real
+benefit.
+
Next, and this is going to sound strange, build thin walls of caulk that
+follow the divide line (where the terrain falls away on both sides) of the
+highest mountains, buttes or hills. Only do this where you know that you will
+not allow the player to move over or see over
that
+part of the terrain (we’ll talk about clipping real soon).
+
+
+
Other Tips:
+
+
+
+
·
Sky Texture in Place of Caulk:
+You sometimes want to apply the sky texture to some of the surfaces of the thin
+walls used as vis blockers. This can remove some HOM effects. The caulk brushes
+that block the vis around the bases in mpterra2 have sky texture painted on the
+surfaces facing the base.
+
+
·
Hint Brushes:
+Use these extremely sparingly and only after trying to solve the problem in
+other ways. Hint brushes can add hours to vis compile times. Even so, they can
+make a difference. One trick you can try is to put a horizontal hint brush at a
+point about midway up the slopes of your terrain. It can add some additional vis
+break points.
+
+
·
Adjusting Terrain:
+Vis times totally depend on the placement of your vis blockers. Vis times are
+not affected by modifying the terrain surfaces (terrain entities are detail
+content, remember?). With that being said, you may want to modify the terrain to
+allow you to more effectively position the vis-blockers.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/.svn/text-base/boxing_in_the_world.html.svn-base b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/.svn/text-base/boxing_in_the_world.html.svn-base
new file mode 100644
index 0000000..24f1eca
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/.svn/text-base/boxing_in_the_world.html.svn-base
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+Boxing in the World
+
+
+
+
+
+
Boxing in the World
+
+
+
+
+
It may not need mentioning here, but … the terrain entity needs to be
+contained inside a sealed world. For the terrain maps in Q3:TA, we built huge
+boxes. Any portion of the box that could be seen while playing the game, or
+flying around in spectator mode was covered in sky texture. Any portion of the
+box that could not be seen was made out of common/caulk. If mountains or canyon
+walls surround your map, plan to bring the caulk portion of the wall up as high
+as you can. This can reduce the number of triangles seen in the map. Generally
+speaking, you will see ALL the sky triangles inside the map at all times.
+
Finally, and this is a part of vis blocking, but it should also be noted
+here. Don’t forget to place large caulk structures that rise up from the
+bottom of the world box to near the ground surfaces of terrain entity. If the
+ground level rises and falls substantially, these can be a part of the vis
+blocking process. Otherwise they serve to reduce the size of the map’s total
+volume (generally speaking … a good thing).
The terrain entity uses its triangle surfaces as clipping planes. No
+additional clipping is required to allow characters to run on the terrain’s
+surface. As the initial terrain maps developed in house, we discovered that to
+control and guide play flow, we needed to clip many of our mountain and canyon
+slopes with vertical walls. Done right (as the slopes start becoming too steep
+to climb), players don’t notice (as much).
+
Next, decide how far up in the sky you are willing to let your player’s
+fly. If the map is entirely open you might want to keep it that way. If you’ve
+placed caulk barriers as described above, then the low point on the ridgeline
+(or lower) will likely be your ceiling height.
+
+
Clipping Tips
+
+
+
+
·
Make sure your “ceiling” clip
+brushes extend all the way up the sky brush.
+
+
·
Keep your clip brushes simple.
+
+
·
Right angles are rarely found in
+nature. Use the clipper tool to take the corners off your vertical clips.
+
+
+
+
+
The alphamap referenced by the alphamap key/value pair is an art file created
+specifically for the map. For non-digital artists, it may be one of the more
+technically and conceptually challenging things that need to be created to make
+the terrain map work.
+
Simply put, the alpha map is the template that the compiler uses to assign
+textures to the terrain surface.
+
To make the alphamap, you must have, or have access to, an art program that
+can save a file as an 8-bit BMP file with indexed color. I’ll discuss other
+file types later on, but the BMP file is probably the simplest solution, both
+technically and conceptually.
+
+
+
Terms
+
+
First, you need to understand a couple vocabulary words … jargon, if you
+will:
+
+
Indexed Color: In essence, each color used in a piece of art is
+remembered by its location on the color table or palette (see below). There are
+256 colors available, numbered from 0 to 255. Each position on the palette has
+its own number. This number has nothing to do with the RGB values of a color in
+that position. If you change the actual color located at a particular location
+on the palette (say from red to blue), all the pixels that were formerly that
+shade of red (if painted using a color with that index number), will change to
+the new color of blue.
+
+
Color Table: This is what Photoshop calls the indexed color layout of 256
+colors. In Paint Shop Pro it’s a palette. This is a pop-up window that shows
+the colors in the palette and their arrangement. For making an alphamap for a
+terrain map, the colors you choose are not important, but their position on the
+palette is.
+
+
Palette: This is what Paint Shop Pro calls a Color Table.
+
+
+
Making the Palette
+
+
The best way to start is to make a set of colors to use when painting
+alphamaps. If you want, you can do this once and save it out. In PSP edit the
+palette (in Photoshop, open the Color Table). Make sure the colors are sorted by
+index number (there may be a pull down menu that allows this). In PSP, the
+colors are indexed from the upper left (color 0 in the upper leftmost position
+and increasing in value to the right). In Photoshop, the positions are reversed.
+The color with value 0 is in the lower rightmost position and the index numbers
+increase to the right.
+
Because there is a direct one-to-one relationship between colors in the
+palette and individual shaders that make of the metashader, you should select
+clearly distinct colors to represent each shader. You should have one color for
+each layer you intend to include in the map (see keys above), which means one
+color to represent each root shader. You may find it convenient to create more,
+so they are available for later use (if you save the palette).
+
This method worked for me to make a 16-color palette in Paint Shop Pro.
+First, I reduced my palette size to 16 colors. I clicked on each palette
+position and created a color for it (don’t use black). Then, I increased my
+palette size back up to 256 colors, filling the rest with black. In Photoshop,
+it’s easier to select all the colors you don’t intend to use and make them
+black. Then, I save the palette out as a file for later use.
+
Another thing you might try is to make a grayscale palette, then use only the
+first few positions for your color and leave the rest for grayscale (this allows
+you to import bmp height maps and use them as guidelines).
+
+
+
Alphamap File Data
+
+
File type: The alphamap is a BMP format file or a TGA file (see other
+file formats below). With BMP format, each color in your palette corresponds
+directly to a root shader used to create the smooth texture blends on the
+terrain.
+
+
File size: The size of the alphamap should be one-to-one with the number
+of vertexes in the map. If you have 64 divisions x 32 divisions in your terrain
+mesh (65x33 vertexes), you should use a 65 by 33 alphamap. You can use an
+alphamap with a size that is not a one-to-one map with the number of map
+vertexes, but you can then expect a less precise interpretation of your texture
+assignments.
+
+
Colors linked to Shaders: If an 8-bit texture is used (BMP), q3map links
+a color’s position on the palette to an identifying number in the name of a
+shader. The color in position 0 would reference a root shader named <metashadername>_0.
+The color in position 1 would reference a root shader named <metashadername>_1.
+<metashadername> refers to the value of the Shader key (see Key: Shader
+below). In theory, you could probably have 256 different root shaders assigned
+to the terrain entity. In practice, you’d probably want to bite your arm off
+at the elbow before doing something as complicated as that.
+
+
Other File Formats
+
+
It is possible to use a TGA file (a RGB color format) for an
+alphamap. TGA
+files are handled differently than indexed color files like BMP. Instead of
+looking for a position on the palette, q3map interprets the RGB value of actual
+color. With a 32-bit TGA file, only the color values in the red channel are
+used. The program assumes that a gray scale of equal values is being used. The
+program divides the colors by the number of levels into equal-sized ranges. When
+assigning textures, q3map looks at what range the color falls in and chooses the
+appropriate shader to place or blend.
+
+
Controlling Texture Blends
+
+
Each triangle on the mesh can only have two root shaders blending across it.
+Another way to say this is that there should be only two different colors on the
+three vertexes that form any given triangle in the mesh. Any more, and a sharp,
+unblended edge appears on the terrain surface. This can take some trial and
+error to correct. A bsp -switch command called -showseams can help the mapmaker
+find these errors. Create a new bsp command in your project file that includes
+this option. We recommend doing it with a novis only operation.
+
+
+
+
+
Figure 3
+
In figure 3, the blue and white image on the left is a scaled up (4X) version
+of the alphamap used on Distant Screams. It shows three different root shaders
+in use. Compare that to the gray scale height map on the right and you can see
+how the artist chose to assign textures to the various heights and depths of the
+map. As long as the guidelines for texture placement are followed, a mapmaker
+should be able to work with more different root shaders than shown here.
+
+
Alphamap Creation Tips:
+
+
+
+
·
The alphamaps for the team arena maps
+are included with this document, both as reference and as files that you can
+modify to work with your own maps. You may want to compare the alphamaps against
+the heightmaps for the same maps, just to see how id resolved mapping issues.
+
+
·
You can create a quick (though not
+necessarily good) alphamap by saving your height map as a new file. Then use the
+“posterize” filter that can be found in some art tools. Reduce the number of
+colors in the art to equal the layers (number of unique root shaders) in the
+terrain.
+
+
·
If you are creating a new alphamap
+from scratch, use colors that are easily distinguished from each other.
+
+
·
If you are making an alphamap for a
+team style map where both sides of the map are identical (mirrored or rotated),
+you only need to design the map for one side. Copy and position it as described
+above for the heightmap.
+
+
·
The id maps used simple color schemes
+that were homogenous throughout the maps. That is not the only way of doing
+things. It would be quite reasonable to use many more terrain textures
+(particularly if you weren’t going to build complicated, multi-texture
+architecture on top of them). Consider a map where one part of the terrain used
+red-themed textures and the other side blue themed textures. Have them blend
+into a few simple neutral colors near the map center.
+
+
·
Try doing terrain style texture
+mapping on non-terrain geometry. Results will definitely vary, but some could be
+interesting.
+
+
+
+
Samples: The last height map and the alphamap used to create each of the
+terrain maps in Team Arena is included in the Mapping Support folder. Note that
+the designers made vertex manipulations to the final terrain meshes that are not
+reflected in these height maps. Also, the alphamaps are in PCX format, not BMP
+format.
Although it’s not necessarily the only way to develop a piece of terrain,
+thinking of it and creating it as “mesh” of triangular brushes may be the
+easiest way to work initially. The terrain sections for Quake III: Team Arena
+were built in this manner, though each designer went about it in slightly
+different ways.
+
Our primary tool was a plugin for Q3Radiant , created by David Hyde, called
+GenSurf. The tool was originally created for Quake 2 (and may have been around
+longer) and has been adapted for use with many of the game engines using Quake,
+Quake2 and Quake3 technology. The basic concept behind GenSurf is that it can
+create and export a group of brushes (or curve patches) to Q3Radiant that have
+the look of “natural” terrain about them. Within the plug-in, the mapmaker
+has control over the horizontal dimensions of the terrain entity, the steepness
+of the slopes it creates, and the number of columns and rows of triangles that
+it subdivides into.
+
The terrain can be generated from within the tool by using simple waveforms,
+more complex mathematical expressions, fractal calculations, or height maps. The
+last item, height maps, is in our opinion, the route to take for creating
+complex, visually interesting terrain layouts. A height map is a piece of art
+(we rendered them in grayscale) that GenSurf uses as a template for establishing
+the height of vertexes (the points where the corners of the terrain triangles
+meet). GenSurf interprets the color of the pixel (or more correctly the
+numerical color value of the pixel) that corresponds to the location of the
+vertex. Generally, the darker the gray value, the lower in height the vertex
+(256 unique height values corresponding to 256 pixel colors). GenSurf then uses
+the vertexes to define the extents of triangles and suddenly, one has a terrain
+surface. Of course, there are a few details of construction between start and
+finish …
Once you’ve created the func_group that will become the terrain entity, you
+need to add the various keys and key values that make it a terrain entity.
+
+
+A word to the wise: WRITE YOUR KEYS AND VALUES ON SOMETHING YOU CAN
+EASILY REFER TO DURING DEVELOPMENT!! During the creation, testing and tweaking
+of the heightmap, you will have to reenter these key/value pairs for the terrain
+entity every time you recreate it. One thing that can make things easier is
+before replacing the terrain entity with a new mesh, open the entity window and
+click on the most complicated of the key/value pairs (usually the alphamap).
+When the new terrain func_group is in place, click on the value line and hit
+return. That’s one less thing to retype.
+
+
Key: Alphamap
+
+
Value:
The value should be the
+pathname to the art file use to assign textures to the terrain. Example:
+maps/alpha/pj_terra1.bmp. The pathname begins in the game (baseq3 or missionpack)
+directory, which includes the name of the art file.
+
The q3map compiler applies and blends the textures
+(shaders) on the terrain
+entity using a “metashader” (see Texturing the Terrain below) that
+references the art file named by the alphamap value. See the Creating the
+Alphamap section below for details.
+
+
Key: Layers
+
+
Value:
A positive integer, equal to
+the number of unique or root textures to be blended on the map. Each color on
+the alphamap’s palette corresponds to a “layer.” If you plan to blend 4
+textures, you need a layer value of 4.
+
+
Key: Shader
+
+
Value:
A pathname, beginning in the
+ missionpack/scripts directory, which includes the name of the filename and the
+name of the metashader. Example: The shader value for mpterra2 is “terrain/mpterra2”.
+“terrain” is the name of the script and mpterra2 is the name of the
+metashader used to apply texture to this terrain.
+
+
Key: Terrain
+
+
Value:
Set this to 1 to indicate that
+the func_group is a terrain entity. It’s essentially a yes/no flag.
+
+
Key: Min
+
+
Value:
Map coordinates of the minimum
+XY extents (lowest left extent) of a component piece of a multi-part terrain
+entity. This is optional, only used if you are texturing a subset of the total
+terrain area.
+
The Min and Max extents (both must be in the entity) establish where a
+subsection of terrain fits into the overall terrain map. It lets q3map assign a
+subset of the alphamap to the entity, instead of referencing the entire alphamap.
+It could also be used on a separate terrain entity to use the same alphamap, but
+reference a different shader.
+
+
Key: Max
+
+
Value:
Map coordinates of the maximum
+XY extents (uppermost right extent) of a component piece of a multi-part terrain
+entity. This is optional, only used if you are texturing a subset of the total
+terrain area.
+
The Min and Max extents (both must be in the entity) establish where a
+subsection of terrain fits into the overall terrain map. It lets q3map assign a
+subset of the alphamap to the entity, instead of referencing the entire alphamap.
+It could also be used on a separate terrain entity to use the same alphamap, but
+reference a different shader.
: a shader that is part of
+a family of related shaders used to texture a terrain entity. It represents a
+terrain texture in its unblended state. The naming convention for a root shader
+is <metashadername>_#.
+
+
Blend Shader: a shader that is part of a family of related shaders used
+to texture a terrain entity. It represents a terrain texture in its blended
+state, two textures that crossfade across each other. The naming convention for
+a blend shader is <metashadername>_#to#.
+
+
Metashader: the identifying name of a group of related shaders used to
+texture a terrain entity. By way of example, the metashader name used to texture
+mpterra2 was … mpterra2. Its root shaders had names like mpterra2_0,
+mpterra2_1, and mpterra2_2. Its blend shaders were named mpterra2_0to1,
+mpterra2_1to2, and mpterra2_0to2.
This is not intended to be a tutorial on using GenSurf, but it will include
+some pointers on getting the most out of the tool. You can download the
+standalone tool and find tutorials for GenSurf at this site
+
This page, in particular, contains tips for using GenSurf, most of which to
+apply to Q3A terrain creation.
+
When starting the GenSurf plug-in: You will probably want to “Select Ground
+Surface” as the option for making your terrain surface.
The terrain maps in Quake III: Team Arena began as grayscale bitmap art files
+imported into David Hyde’s “GenSurf” tool, a Q3Radiant plug-in. As
+mentioned before, the height map is a template that the utility uses to define
+the vertex heights of the triangles forming the terrain surface. We used Adobe
+Photoshop and JASC’s Paint Shop Pro to create and adjust our height maps …
+but any art program that can output a .bmp format file can be used to create the
+height map.
+
+
+
+
figure 1.
+
By way of example, the piece of artwork in figure 1 is a greatly scaled up
+(4X) version of the height map used to create the initial terrain geometry for
+mpterra2. The very dark, horizontal area near the center is the big “lake”
+near the center of the map. The dark curves to the upper right and lower left
+are the “fjord” water areas. The dark areas in the upper left and lower
+right are the locations of the bases. The white and very light gray areas
+represent the peaks of hills and mountains.
+
The key to understanding how the height map works is that the shades of gray
+in the art (call them “color values”) represent the height of mesh vertexes
+(triangle corners) and not the triangle quads (squares created by two
+triangles). When you work on a piece of art where each individual pixel
+corresponds to a vertex, it is easy to imagine the pixels (usually large square
+blocks) as squares of terrain. But that’s not how it works.
+
Start by giving some thought to the eventual size and proportions of the
+final terrain area in your map. How many rows and columns of triangles do you
+want in the map? The finer you subdivide the map (making more rows and columns),
+the more triangles will appear in any given view, but the terrain can be made
+less blocky by including more.
+
GenSurf can generate a terrain mesh of up to 64 triangles on a side (of the X
+and Y dimensions of the entire mesh). If you don’t decimate the GenSurf output
+(an option that optimizes and reduces the number of triangles used to create the
+mesh … and we really recommend that you don’t), it generates a mesh of
+triangles in arranged in quads in neat rows and columns. By way of reference,
+mpterra2 (the largest Team Arena map) is “only” 48x64 columns and rows of
+triangles. Since Q3Radiant and q3map tend to like things that end up in neat
+powers of 2 or units of 64 subdivisions, consider having your map extents (lower
+left and upper right map corners) fall onto neat units, power of 2 units. In
+mpterra2, the extents were set up to make the mesh triangles have sides of 256
+units.
+
+
+
+
Figure 2.
+
Figure 2 shows an example of a top view of a terrain mesh that is 8 x 8 rows
+and colums of triangles (on a side).
+
Just as you would plan out a game map, give thought to the layout and flow of
+your terrain map. Will it be all-open in one view? Can you use natural terrain
+features to block vis? How complicated will your buildings (if any) be? Do you
+want to include trees, water, weather effects or other items that could add to
+the visual cost of your map?
+
Begin the creation of your height map by making a new grayscale file. If your
+program doesn’t allow you to easily modify a .bmp format file, work in another
+format and then convert it when you save. You can make the dimensions of your
+height map art whatever you want. The extents you set in GenSurf for the map
+dimensions are what determine the final size of the terrain piece. Some may find
+it easier to work with a large file initially, using their favorite painting
+tools to lay in the shades of gray.
+
However, when you get down to making final and precise changes in your height
+map you should (and this is STRONGLY recommended), change the size of the art
+file such that the pixel dimensions of the map are 1 pixel larger than the
+number of divisions (rows and columns) in the terrain mesh you want to create.
+If you are making a 64 x 64 division map, then you want to create a 65 x 65
+pixel height map.
+
If there is not a one-to-one match between the number of vertexes in the mesh
+(one more than the number of divisions) and the number of pixels in the height
+map, then GenSurf interpolates the number values (0 to 255 range) of the pixels
+to get an averaged value instead of an exact value for the height of the vertex
+at that point.
+
When you save out the height map art file, you must save it in 8-bit .BMP
+format. Currently, this is the only the file format that GenSurf recognizes.
+
+
Tips and things to consider for making Height Maps
+
+
+
+
·
Read through the section on blocking
+vis later in the document. Plan your vis blocking terrain structures in advance
+instead of having to start over when you discover that too much of your world is
+in view.
+
+
·
Consider what type of geometry will
+form the edges of your map. The terrain maps in Q3:TA resolve the issue by
+creating canyon-like settings … valleys bordered by high canyon or mountain
+walls.
+
+
·
Start by filling your map with a
+neutral gray (value 127 or 128). Paint the high areas lighter and the low areas
+darker.
+
+
·
Keep your terrain shapes simple when
+you start. You can add greater complexity as your map develops.
+
+
·
You will probably want to keep the “playable”
+area of your map within a fairly close or “narrow” range of gray values
+close to the middle range of values. This allows you to use very dark shades of
+gray to create deep chasms and very light shades of gray to create high
+mountains, canyon walls or visual barriers.
+
+
·
Extreme jumps between the gray values
+in adjacent areas means steep slopes.
+
+
·
Avoid making vertical or near vertical
+terrain surfaces … unless you don’t mind the resulting textured surface
+looking like barcode. Q3Map planar projects the textures onto the terrain entity’s
+surface (Normal brushes are box mapped). The pixels will stretch and stretch to
+fill the space. The farther the surface is from horizontal, the greater the
+stretching.
+
+
·
Use the roughness feature of GenSurf
+to add a little, um … roughness to your map … so flat areas aren’t
+completely flat. If you are using a 1 to 1 scale height map, adding “noise”
+to the file will also accomplish this.
+
+
·
If you want an area, such as a path,
+to be flat, you need to make the gray value affecting two adjacent vertexes the
+same value.
+
+
·
You can create gentle slopes by
+changing the gray values between adjacent areas by very small amounts.
+
+
·
Slopes greater than 45 degrees are
+close to becoming unplayable barriers.
+
+
+
+
If you are building a symmetrical team style map, only create one side of the
+terrain. Create a new piece of art that has the dimensions of the final piece.
+Paste the map half into the new file and move it into position. If the map will
+have an even number of vertexes, paste the map again and then rotate or mirror
+(as you choose) the selection and move it into position. If the number of
+vertexes is odd, after you paste the first half of the map, select all but the
+row or column of pixels along which the two halves of the map will face and copy
+it. Paste it, rotate or mirror it, then position it. Now, select and copy half
+the row or column of pixels you didn’t copy in the last operation. Paste it,
+transform it as you did in the last operation, and then position it so that it
+is in the same row or column, but on the opposite side of the piece you copied.
+
When you make significant changes to a height map, consider saving it as
+version rather than over-writing the older file. Always nice to have a back up
+when you realize that you’ve messed up more than you’ve fixed.
Creating workable terrain style maps for the Q3A engine takes some
+reorganizing of thought, but in many ways is not substantially different from
+making a halls-and-rooms type of map. The designer still has to be concerned
+about how much can be seen at one time and give thought to map flow and play.
+The rules and restrictions that guide conventional map design are still there
+… it just occurs on a much grander scale. You still have to think about poly
+counts, that hasn’t changed; but generally speaking, the polys that you will
+use to make your game terrain are VERY large and less are likely to be seen all
+at once during a game.
+
+The “terrain” style maps in Quake III: Team Arena do not represent any
+changes to the Quake 3 Engine. The power to make them work has always been there,
+unrealized and untapped. What has changed is the way map files are created and
+processed. These construction techniques rely on changes in the Q3Radiant editor
+and the q3map program that processes the map files into game files.
+
+
+
+
diff --git a/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/.svn/text-base/key_changes.html.svn-base b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/.svn/text-base/key_changes.html.svn-base
new file mode 100644
index 0000000..bcc92b6
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/.svn/text-base/key_changes.html.svn-base
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+Key changes that have been made include
+
+
+
+
+
+
Key changes that have been made include:
+
+
+
+
+
+
+
+
+
+
·
A variant of the func_group entity
+ has been added to the game. When a func_group of brushes (only) is given a
+ terrain key and a numerical value (an ID number for that terrain) and several
+ other key attributes, it becomes a terrain entity and is treated differently
+ than other brushes during the compile.
+
+
·
The map area has been expanded to
+ 128,000 units in all extents (256,000 units on any edge of the map volume).
+ While this does not mean that a map that large could actually run on current
+ game hardware, it does give the designer room to explore what the actual
+ limits may be. As a point of reference, mpterra2.bsp is roughly 12K x 16K x 3K
+ units in size … the largest map in the game by far.
+
+
·
A terrain texture mapping system
+ plots textures across the terrain entity using a specially created .pcx or .tga
+ art file as a map for planar projecting and blending shaders on terrain
+ surfaces.
+
+
·
A “meta-shader” is used to
+ organize and calculate blends between the shaders that are mapped onto the
+ terrain.
+
+
·
Textures designed for use under
+ vertex lighting can be substituted at map load time for more complex shader-manipulated
+ textures that may not look correct in a vertex light only situation.
+
+
+
+
Terrain maps also require some rethinking about the way you light maps.
+
+
Vertex Only
+
+
If you are making a large terrain map, you should plan on making your terrain
+textures be lit by vertex lighting only. Lightmaps can quickly become far too
+large for the game to handle.
+
Make sure your large terrain textures contain the following parameters:
Q3map_novertexshadows //this is what keeps those caulk vis blockers from
+causing ugly shadows to form on your terrain.
+
If you are using q3map_sun in your sky …
+
+
Q3map_forcesunlight //this makes the light emitted by a q3map_sun
+parameter affect the vertex lit surface.
+
+
Light Sources
+
+
For outdoor maps, the obvious source of lighting ought to be the sky. The
+skies in the mpterra maps began with skies used in more conventional Team Arena
+maps, but were modified to better suit the needs of the terrain worlds.
+
+
+
+
·
Slow Down Those Clouds.
+ One thing to consider is slowing down the rate of cloud movement. What looks
+ OK in smaller maps looks wrong in vast panoramas.
+
+
·
Strong Sunlight is
+ Good. For team maps,
+ you want to try and keep the light relatively the same in both base areas, so
+ if you have mountains or large base structures, having the light come in at a
+ nearly vertical angle is good, but less dramatic.
+
+
+
·
Ambient Light is Not
+ So Bad. Since the
+ beginning of Q3A map development we’ve said things like “Ambient Lighting
+ is bad”. Well, the problems caused by ambient lighting are still there
+ (flattening of shadows and colors), but with the distance of the play areas
+ from the sky surface (in some maps), adding an ambient really helps bring up
+ the overall light value in the map. Start low, maybe around an ambient value
+ of 5 and creep upwards until the map looks right. It is VERY IMPORTANT that
+ you give your ambient light a color. If you leave it white, you get ugly pink
+ light instead of white. Even specifying white makes it look wrong. Best
+ suggestion is to sample the sky texture color and translate that into an rgb
+ formula for your ambient. One warning
+ though … if you include “interior spaces” in your maps, the ambient
+ light will affect those areas too. You will not get the deep dark shadows you
+ may want in there.
+
+
+
·
Sky Shader Trick #1: Lose the
+ Backsplash. The attributes of the sky
+ shader can have a significant effect on the amount of time it takes to perform
+ a light compile on a map. You have to think of the sky as a huge area light.
+ However, unlike light emitting textures (like your average light fixture), the
+ sky doesn’t need to be illuminated itself. Therefore, you can eliminate the
+ backsplash light feature which is the default status of the q3map_surfacelight
+ parameter. Your sky shader should have the parameter q3map_backsplash with a
+ value of -1. Removing backsplash light doesn’t affect the appearance of the
+ sky, but does remove a significant amount of compiling overhead when the
+ -light algorithm is used (the normal way you light things).
+
+
·
Sky Shader Trick#2: Big
+ Subdivisions. Q3Map automatically
+ subdivides the sky into triangle quads. The more triangle quads, the more
+ light emitting surfaces you have on your sky (if q3map_surfacelight is used).
+ The light compile calculates for every one of these light emitting surfaces.
+ Increase the size of the subdivision and you get less light emitters and a
+ faster compile.
+
+
·
Sky Shader Trick #3: -V-light.
+ This is a fast lighting algorithm. It’s especially fast for calculating sky
+ lighting. It loses a little precision, but it can greatly speed up the time it
+ takes to light a map. Even if you decide to use a normal light operation for
+ your final map, using -vlight for interim compiles can mean a lot less time
+ spent waiting on the compiler to see your results.
+
+
+
+
+
+
The Light Grid
+
+
This is discussed in detail under terrain-related Worldspawn features. One of
+the things that can add enough memory complexity to a large terrain map, enough
+to make it unplayable (read crash the game), is the light grid. Think of the
+light grid as a map for determining how to light entities in the world. It’s
+what makes player models appear to move in and out of shadows as they move
+through the world. It’s a nice effect, but costly in memory terms. For the
+largest maps in Q3:TA, we “traded down” to a less detailed light grid.
+Increasing the size of grid subdivisions from 32 units to 256 units did this. We
+experimented with smaller and larger grids and settled on 256 x 256 x 256 as the
+best size. Smaller and the grid became large and unwieldy. Larger (especially on
+the z dimension) and not enough light reached some of the entities.
+
The details of this feature are noted below under Terrain-Related WorldSpawn
+Features.
Once the terrain mesh has been generated, it’s very likely that you will
+want to fine-tune the triangles inside the editor. Do this by pulling vertexes
+up and down along the Z axis. Once you start fine-tuning in this manner, the
+height map no longer exactly represents the map.
+
+
WARNING: If you revise and convert the height map, your manipulations
+here are lost.
The key to making this stuff look good is the q3map routine that works with
+alphamap and the metashader (see below) to smoothly blends textures across the
+terrain entity.
+
+
Texturing Overview
+
+
As noted earlier, Q3Map assigns textures, or more correctly, shader
+manipulated textures, to each triangle used to create the terrain map. The
+shaders used are part of a group of shaders called a metashader. The metashader
+is the family name for the shader. Individidual shaders within it are identified
+by a suffix, either an underline character followed by a number, or an underline
+character followed by a string indicating a blend between two other shaders.
+
Within the body of the metashader, there are two types of shaders used. The
+first, is the root shader. A root shader represents a terrain texture in
+its unblended state. The naming convention for a root shader is <metashader>_#.
+The second type is the blended shader. The blended shader creates a
+crossfade between two root shaders across the face of a single geometry
+triangle. The naming convention for a blended shader is <metashader>_#to#.
+The map maker does not need to make a blend between each root shader, but for a
+blend to occur, there must be a blend shader for the two root shaders.
+
Q3map will map a shader (root or blended) once and only once across the face
+of the triangle. The shaders will not tile or repeat across the triangle face.
+
As noted earlier, the textures are planar mapped or projected on the surface
+of terrain texture. The angle of any individual triangle does not affect the
+angle or direction at which the texture lies on the brush surface. The angle,
+however, does affect the apparent stretching of the texture on the surface. The
+steeper the angle of the brush surface, the greater will be the stretch of the
+shader on that surface.
+
Q3map looks at the pixel on the alphamap that corresponds to a given vertex.
+It uses the color of that pixel (or more correctly the identification number of
+the position that color occupies in the palette) to determine which root shader
+will be applied. That root shader is applied to triangles that have one vertex
+located at the given vertex. It then examines the alphamap color of the vertexes
+adjacent to the given vertex. If an adjacent vertex has the same color as the
+given vertex, the root shader is applied to the surface. If an adjacent vertex
+has a different alphamap color, the blended shader that crossfades between the
+two.
+q3map
+-----
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-glview
+ Write a .gl file of the bsp tree for debugging.
+-v
+ Output verbose information.
+-draw
+ Enable realtime debug drawing output.
+-nowater
+ Water, slime and lava brushes are not compiled and won't show up when running the map in Quake.
+-noopt
+ unused.
+-nofill
+ unused.
+-nodetail
+ Detail brushes are not compiled and won't show up when running the map in Quake.
+-fulldetail
+ Detail brushes will be treated as normal brushes.
+-onlyents
+ Only change the entities in a .bsp using a .ent file.
+-onlytextures
+ Only change the textures in a .bsp file.
+-micro
+ unused.
+-nofog
+ Visible surfaces that cross fog boundaries will not be split along the bound.
+ This can cause visually incorrect fog in the map.
+-nosubdivide
+ Visible surfaces are not subdivided as required by shader tesselation.
+ The shader parameter "tesssize" sets the tesselation of a surface.
+-leaktest
+ Only test the map for leaks. If a leak is found the compilation is stopped.
+-verboseentities
+ Output verbose information about entity sub-models.
+-nocurves
+ Curves are not compiled and won't show up when running the map in Quake.
+-notjunc
+ T-junctions are not fixed. This can cause tiny slits where a surface meets halfway another surface.
+-expand
+ Expands all the brush planes and saves a new map out to allow visual inspection of the clipping bevels
+-tmpout
+ Output files to a folder called "tmp".
+-fakemap
+ Write out a fakemap.map This map will contain a worldspawn entity with all the world brushes.
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-custinfoparms
+ Will enable custom surface flags (see below)
+
+q3map -vis
+----------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-fast
+ Only calculate a very loose visiblity list. It doesn't take much time to
+ calculate but a lot more polygons will be drawn by the Q3 engine than necesary.
+-merge
+ Merge bsp leaves before calculating the visibility list. This will speed up
+ the vis calculations but mostly more polygons will be drawn by the Q3 engine
+ than necesary.
+-nopassage
+ Disable the passage visibility algorithm. The passage vis is faster and a bit more
+ tight than the old algorithm.
+-level
+ unused.
+-v
+ Output verbose information.
+-nosort
+ Don't sort the portals on complexity. Sorting mostly speeds up visibility calculations
+ because more complex portals can use information from less complex portals.
+-saveprt
+ Don't delete the .prt file after creating the visibility list.
+-tmpin
+ Input files will be read from a folder called "tmp".
+-tmpout
+ Output files will be written to a folder called "tmp".
+
+
+q3map -light
+------------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area
+ This scales the light intensity of area lights.
+-point
+ This scales the light intensity of point lights.
+-notrace
+ No light tracing is performed. As a result no shadows will be casted.
+-patchshadows
+ Enable patches casting shadows.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-extra
+ Take four samples per lightmap pixel and store the average light value of these
+ four samples for the actual lightmap pixel.
+ This super sampling is used for anti-aliasing.
+-extrawide
+ Just like -extra four samples per lightmap pixel are calculated. However the
+ average of 12 samples is stored per lightmap pixel.
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-border
+ Create a debugging border around the lightmap.
+-v
+ Output verbose information.
+-nosurf
+ unused.
+-dump
+ unused.
+
+
+q3map -vlight
+-------------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area
+ This scales the light intensity of area lights.
+-point
+ This scales the light intensity of point lights.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-nostitching
+ No polygon stitching before lighting.
+-noalphashading
+ Don't use alpha shading at all.
+-nocolorshading
+ Don't use colored alpha shading. The alpha channel will be used as if it were binary.
+ The light goes through or not and does not change color.
+-tracelight
+ Use the "-light" light algorithm for all surface unless a surface
+ uses a shader with the shader option "q3map_vlight".
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-v
+ Output verbose information.
+
+
The q3map options are a subset of the shader instructions that require
+recompiling of the map.
+
q3map_tracelight
+
[NEW] Surfaces using a shader with this option will always be lit with the
+original "-light" light algorithm. Patches will not cast shadows on
+this surface unless the shader option q3map_patchshadows is used.
+
q3map_patchshadows
+
[NEW] When this option is used in conjunction with the original (-light)
+lighting algorithm, surfaces with textures modified by this option will will
+show shadows cast by curve patches (under normal circumstances, curve patches do
+not cast shadows).
+
q3map_vertexshadows
+
[NEW] By default, no shadows are cast on vertex-only lit surfaces (see
+surfaceparm pointlight). Also when running Quake III Arena in vertex lighting
+mode, no shadows are cast upon any surfaces (shadows are part of the light map).
+When using this shader option shadows *will* be cast on the surface when vertex
+lit. However sharp shadow edges won't be seen on the surface because light
+values are only calculated at the vertexes.
+
q3map_novertexshadows
+
[NEW] Shaders used for misc_models and terrain can now use
+q3map_novertexshadows to disable shadows to be cast at the vertex lit surfaces.
+Shadows being cast at small misc_model objects often makes sense. However
+shadows on large vertex lit terrain surfaces often look bad. By default no
+shadows are cast at forced vertex list surfaces ( shaders with "pointlight"
+).
+
q3map_forcesunlight
+
[NEW] No sunlight is cast at vertex lit md3 models and terrain by default.
+Using this option sunlight (overbright bits created by q3map_sun option) will be
+cast on these surfaces.
+
q3map_vertexscale <scale>
+
[NEW] The light value at the vertexes of a surface using a shader with this
+option is multiplied by the scale value. This is a way to lighten or darken a
+vertex light only surface in comparison to other, light-map lit surfaces around
+it.
+
q3map_notjunc
+
[NEW] Surfaces modified by a shader with this option are not used for
+tjunction fixing.
+
q3map_vlight
+
[NEW] Surfaces modified by a shader with this option will always be lit with
+the "-vlight" algorithm when q3map is used with the options "-vlight
+-tracelight".
+
q3map_lightmapsamplesize <S>
+
[NEW] Surfaces using a shader with this shader option will use lightmaps with
+pixel size SxS. This option can be used to produce high resolution shadows on
+certain surfaces or can be used to reduce the size of lightmap data where high
+resolution shadows are not required.
+
q3map_lightimage <image>
+
Image to use for the light color of a surface light instead of the image(s)
+used by the shader. Color is averaged from the texture. Texture must be the same
+size as the base image map.
+
q3map_surfacelight <value>
+
Sets the amount of light this surface emits.
+
q3map_lightsubdivide <value>
+
A surface light is subdivided into a bunch of point lights for the actual
+lighting of the world. This parameter controls the space between those point
+lights. Default value is 120.
+
q3map_backsplash <percent> <distance>
+
A surface light is also lit by itself using back splash point lights with a
+lower intensity. The <percent> parameter specifies the intensity
+percentage they use from the q3map_surfacelight <value> parameter. The
+<distance> parameter controls the distance of these back splash lights
+from the surface. You can set the <percent> to zero or a negative value to
+disable the back splash lights.
+
q3map_globaltexture
+
When this option is set the texture is not aligned to the world.
+
q3map_backshader <shader>
+
<shader> is the path/name of the shader or texture to be used at the
+back side of the surface.
+
q3map_flare <shader>
+
Creates a flare using the specified <shader> at the center of the
+surface using a shader with this option.
+
light <value>
+
Old style flare specification always using the shader "flareshader".
+The <value> parameter is unused.
Color will be normalized, so it doesn't matter what range you use. The
+intensity falls off with angle but not distance. A value of 100 is a fairly
+bright sun.
+
degree of 0 = from the east, 90 = north, etc.
+
elevation of 0 = sunrise/set, 90 = noon
+
surfaceparm pointlight
+
Surfaces using a shader with this parameter will always be vertex lit
+
This option can be used to reduce the lightmap data. Often used on surfaces
+
that don't need any shadows.
+
Surfaceparm dust
+
If a player lands (jumps onto) on a surfaces using a shader with this
+parameter, a put of dust will appear at the player’s feet. Note that the
+worldspawn entity of that map must have an enableDust key set to a value of 1.
+
+
+
Custom surfaceparms
+
+
With the new q3map tool you can add custom surface parameters for mods
+without the need to recompile the q3map tool. These custom surfaceparms are
+stored in a file called ‘custinfoparms.txt’ in the folder scripts/. An
+example of this file with the new surfaceparm treacle and surfaceparm grass is
+shown below.
NOTE: For linux users, when using the -custinfoparms parameter q3map
+first looks in your homedir, and only if it doesn't find a custinfoparms.txt
+there, it uses the one stored in the
+
quake3 install dir (usually /usr/local/games).
+
+
+
Content Flags
+
+
Contents flags are flags similar to CONTENTS_FOG in the original Q3A. These
+flags define the contents of volumes inside the game (for instance lava, fog,
+water, etc.).
+
If you look in the source file game/surfaceflags.h, it has defines for all
+contents flags. The define is split into a name and a hexadecimal value, for
+instance CONTENTS_PLAYERCLIP 0x10000. These hexadecimal values are powers of 2
+and can be ored together (binary) to form a bit mask. Up to 32 contents flags
+can be ored together this way.
+
+
Example: creating a volume with treacle.
+
The following outlines how a custom contents flag can be added and used in a
+mod. First open the ‘custinfoparms.txt’ file and add ‘treacle 0x4000’
+to the Custom Contentsflags section as shown in the example file above (0x4000
+is one of the unused values available for custom use). Next write a shader
+script which uses ‘surfaceparm treacle’. Apply this new shader to all sides
+of a brush in a test map. When you compile the map, add the -custinfoparms
+parameter to the command line following q3map.
+
Next, add CONTENTS_TREACLE 0x4000 to the source file game/surfaceflags.h in
+your mod. Now you can call the point contents function. If the point is inside
+the brush with the shader using the ‘surfaceparm treacle’ then the point
+contents call will return a bit mask with CONTENTS_TREACLE set. This can for
+instance be used to slow down player movement when a player is inside such a
+brush.
+
+
+
Surface Flags
+
+
The surface flags are texture properties that often affect entities in
+contact with surfaces using such flags. The ‘surfaceparm metalsteps’
+parameter from Q3A is a good example.
+
If you look in the source file game/surfaceflags.h, it has defines for all
+surface flags. The define is split into a name and a hexadecimal value, for
+instance SURF_NODAMAGE 0x1. These hexadecimal values are powers of 2 and can be
+ored together (binary) to form a bit mask. Up to 32 surface flags can be ored
+together this way.
+
+
Example: Making ‘footsteps on grass’ sounds
+
The following outlines how a custom surface flag can be added and used in a
+mod. First open up the ‘custinfoparms.txt’ file and add 'grass 0x80000' to
+the Custom Surfaceflags section as shown in the example file above (0x80000 is
+the first available unused value in surfaceflags.h for surface flags). Next
+write a shader script which uses a grass image and has 'surfaceparm grass’.
+Create a test map with the grass shader covering the ground surface. When you
+compile the map, add the -custinfoparms parameter to the command line following
+q3map.
+
Next, add SURF_GRASS 0x80000 to the source file game/surfaceflags.h in your
+mod. Now you'll be able to execute a trace and the trace information will be
+returned in the trace_t structure. If the trace hits a surface with the grass
+surfaceparm then the SURF_GRASS flag will be set in trace_t->surfaceFlags.
+Such a trace can be used to trigger playing a sound of a person stepping on
+grass. For a reference example, see the existing metal steps in the game code.
There are even some editors for other (non-fps) games that can be used to
+manipulate a surface in 3D and then output a .bmp format file. It is worth
+noting that we found it particularly challenging to use them … possibly more
+challenging than the benefits of working in 3D.
+
+
SC3K Map Editor
+
+
The first of these programs was a terrain editor for SimCity3000 called the
+SC3K Map Editor from Tenermerx. It is a free download available here: sc3maped
+
+
Loathing
+
+
The other editor we tried was the “Loathing” terrain editor that comes
+with Bungie’s Myth II game. If you’ve a copy of Myth II, this is something
+you could play around with. Both of these programs could output a .bmp format
+file. If you’ve used it to make some Myth II maps you may have some idea of
+how it works already. It is my opinion that if you use an editor for either of
+these two games to create your height map, you may still want to or need to
+manipulate it in an art program. If you can visualize the relationship between
+shades of gray and relative heights and slopes, the art program is probably the
+easier way to go.
+
+
Pencils, paintbrushes and a scanner
+
+
You can also make your heightmap by painting it by traditional methods and
+then scanning in the file and saving it as a .bmp. Though at some point you’ll
+probably want to switch over to digital manipulation.
Select From Bitmap under Waveform. Of course, you may want to
+ play around with some of the other wave forms. But bitmaps give you the
+ greatest degree of control.
+
+
·
Orientation: as appropriate
+
+
·
If you don’t want GenSurf to add any “noise” or
+ randomization to the height of the mesh, set the Roughness to zero. The
+ preview window gives you a good representation of what roughness does to
+ your surface. The random seed changes the distribution of the noise. Adjust
+ both fields accordingly.
+
+
+
+
The Extents TAB:
+
Extents: The extents of a map are the points on a map that define its
+lowermost t and leftmost corner and its uppermost and rightmost corner. They are
+given in terms of X, Y coordinates.
+
+
+
+
·
Under Extents, you should chose number values that are even
+ multiples of your number of Divisions so that the grid rectangles are all
+ the same size (this produces better texturing results). It also makes extra
+ work for the compiler. Furthermore, use the Extents to position the terrain
+ entity on the map (XY only). You will want to make sure that the terrain
+ locates exactly where you want it each time you revise it. Repositioning a
+ terrain file can be time consuming.
+
+
·
Set your X and Y divisions to equal the number of rows and
+ columns of triangles you want. You may want to strongly consider playing
+ with the numbers so that your triangle sides end up be large powers of two
+ (64, 128, 256 units etc.).
+
+
·
Do not check Use Bezier Patches.
+
+
·
Do not Decimate (keep it set to 0%). The process that applies
+ textures to the surfaces and blends textures between vertexes works best if
+ the size of the triangles is consistent and constant.
+
+
+
+
The Bitmap TAB:
+
+
+
+
·
Filename should point to the .bmp file you are using as a height
+ map. Reload will bring in any changes you have made to the art file without
+ having to restart the program.
+
+
·
GenSurf assigns an integer value to each of 256 shades of gray.
+ The value is based on the position of the color in the palette. In a grayscale
+ palette, the values typically range from 0 (black) to 255 (white). Map Color 0
+ corresponds (usually) to the lowest point on the height map and Map Color 255
+ to the highest. If you set Map Color 0 to 0 and Map Color 255 to 2048, each
+ increase in color value adds 8 units to the height of the vertex. When you
+ increase the difference between to the two values, the height changes are
+ steeper. Decrease the difference and the height changes are more global. You
+ can control the “Z” location at which the terrain draws by adding any
+ extra height above (or below) zero to the height values for both numbers.
+
+
+
+
The Fix Points TAB:
+
+
The general recommendation for this TAB is to leave it alone. You should
+either modify the height map or directly manipulate vertexes inside the
+Q3Radiant editor.
+
+
Texture TAB:
+
+
+
+
·
Set the main texture to common/terrain. The “Steep” angle is
+ irrelevant for terrain texture mapping.
+
+
·
Make sure that the Use detail brushes setting is checked.
+
+
+
Once you’ve tweaked all your settings, do a Save as. If you make changes to
+the settings, consider saving again as a new file. It’s nice to have a back up
+if you screw things up.
+
+
GenSurf Tips
+
+
+
+
·
Setting extents to correspond exactly with the desired map
+ location is important. You want to be able to drop revised terrain into a map
+ without a lot of repositioning.
+
The process of building a piece of terrain focuses on a new thing called the
+“Terrain Entity.” Technically speaking, the terrain in Team Arena is nothing
+more than a func_group entity (brushes only) with a number of key/value pair
+combinations that are unique to it. These key/value pairs define it as terrain (terrain), establish the piece of art that will be used to locate textures on it
+the terrain (alphamap), define the group of shaders used to blend textures
+across its surface (shader), and tell how many different unique shaders will be
+used. The bsp-making utility, Q3Map compiles and textures the terrain entity
+based on the parameters specified in those key/value pairs.
+
It is possible to have multiple terrain entities in a map (see Terrain
+Entities below). Once you learn the method and the techniques, terrain is
+relatively easy to create. One warning though … easy to create does not mean
+easy to compile. Large maps take a much longer time to compile, and huge maps
+are likely to take what seems like forever. However, there are some
+construction, lighting, and shader options that can significantly cut down on
+compile time - as will be noted later.
GenSurf outputs its terrain as a func_group entity. If you create a terrain
+mesh by any other means, you need to group it as a func_group entity.
+
Make certain that all the non-visible surfaces of the func_group brushes are
+textured with common/caulk.
+
Texture the visible surfaces with common/terrain or common/terrain2.
+
Select the func_group and turn it to detail content (CTRL M) or use the
+Selection menu.
+
It is possible to map terrain onto something that is not a “terrain”
+mesh. Keep in mind that textures will be planar projected onto all surfaces in
+the terrain entity and that brush vertexes will be used to determine where
+blends start and end.
A number of worldspawn key/value pairs were created to deal with issues
+arising out of terrain creation.
+
+
Cold Breath and Hot Dust
+
+
+The following two features need not be directly related to terrain, although
+they first appear in the Q3:TA maps. Each key/value pair needs to be the
+worldspawn for that particular feature to work.
+
+
+Key/value pairs:
+
+Key:
+ enableBreath
+
+
+Value:
+ 1
+
+When written into the worldspawn, this enables the appearance of “frosty
+breath” in the air in front of players. The frosty break does not appear in a
+player’s first person view, but will be seen in front of other players and in
+3rd person view.
+
+
+Key/value pair:
+
+Key:
+ enableDust
+
+
+Value:
+ 1
+
+When written into the worldspawn, this enables the appearance of dust puffs
+at the player’s feet when he lands on or run on a “dusty” surface. Adding
+the surface parameter “surfaceparm dust” to the shader for that surface
+creates a dusty surface. The common/terrain2 texture already contains the
+enableDust parameter.
+
+
Texture Remapping: Shaders for vertex light mode in Q3A
+
+
+One thing we quickly discovered when mapping the metatexture onto the terrain
+world was that it didn’t work if a player chose to run in the game’s vertex
+lighting only mode. That mode compresses shaders into a single pass. Usually,
+the engine makes a reasonable choice for which pass is mapped, but with the
+metashaders, that wasn’t the case. The solution: allow the mapper to choose a
+substitute texture that only is used in the game’s vertex lighting mode.
+
+
+For each shader that will be remapped a key/value pair must be entered in the
+map’s worldspawn.
+
+
+
+Key: vertexremapshader
+
+
+Value:
+
+ normal_shader;vertexlighting_shader
+
+
+The normal_shader is the shader normally used on the terrain. The
+vertexlighting_shader is the shader to be used when people run the map in Q3 in
+vertex lit mode. The normal_shader and the vertexlighting_shader are seperated
+by a semi-colon ;
+
+
+As many shaders can be remapped as needed by using the key. However, if more
+than one shader is remapped in a map, each one must have a unique identifier …
+either a number or a letter after the Key word, as shown by “vertexremapshaderX”,
+where X is a number or any character set. Examples, vertexremapshader01,
+vertexremapshader02, vertexremapshaderA, vertexremapshaderB,
+vertexremapshadermpterra2_1, etc.
+
+
+In mpterra2, the key/value pair for one of the replaced shaders looked like
+this:
+
+The Light Grid Size (as noted earlier) is the map that the Q3A engine uses to
+light entities. It’s what gives the illusion of players moving in and out of
+shadowed areas on the game levels. We decided, that for large terrain maps, it
+should not be as detailed (and therefore nowhere near as large) as we had done
+for smaller, interior maps. After experimenting with placing controls for the
+grid size on the bsp command line, we finally settled on putting the command
+information in the map’s world spawn. In that way, the grid size could be
+easily tailored to the individual map.
+
+
+
+
+
+Key/value pair:
+
+
+Key:
+
+ gridsize
+
+
+
+Value:
+
+ X Y Z
+
+
+
+
+
+
+
+
+Note that the values are the dimensions of those coordinates. It’s best to
+keep them to power of 2 values. The default value for the gridsize (if left
+unchanged) is 64 64 128. Setting higher x y and z values reduces the size of the
+light grid data in both the .bsp file and in the Q3A game, but it also creates
+less accurate dynamic model lighting.
+
+
+Errors
+
+
+Definitely set the x y and z values higher if you get:
In Q3:TA, there are two “terrain” textures in the common shader script.
+One handles all the uses of terrain where the designer does not want “dust”
+to rise up as the player jumps onto the terrain (common/terrain). The second
+(common/terrain2) has an enable_dust surface parameter. The terrain texture
+should be applied to all visible (in game) surfaces of the terrain entity.
+
Q3map looks for the word “terrain” in the name of the shader when
+texturing terrain entities. If a shader is used without the word
+"terrain" in it, and it’s not marked as nodraw, q3map will still do
+a planar projection, but using that texture. It will not blend between textures,
+however. This can be used to create hard edge texture transitions, or in cases
+where you want to apply textures manually, and aren’t concerned about
+blending.
+
If the terrain texture is applied to a non-terrain entity brush, the surface
+will not draw. The projected terrain surface textures only work on surfaces that
+are a part of entities with the proper terrain entity keys and values.
The shader is the group or family of related shaders used to texture a
+terrain entity. The shader key/value pair in the entity identifies the
+metashader to be used. The suffix (either “_#” for a root shader or “#to#”
+for a blended shader.
+
For each root shader that you want to blend, you need a blend shader. Note
+that you only need to make the blend once. If you have mpterra2_0to2, you don’t
+need mpterra2_2to0.
+
+
+
Example Terrain Shader
+
+
This was the shader used to map textures on mpterra2 (hence the metashader
+name)
+
+
+
+
diff --git a/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image3.gif b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image3.gif
new file mode 100644
index 0000000..fdb98d2
Binary files /dev/null and b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image3.gif differ
diff --git a/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image4.gif b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image4.gif
new file mode 100644
index 0000000..46d39ab
Binary files /dev/null and b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image4.gif differ
diff --git a/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image5.gif b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image5.gif
new file mode 100644
index 0000000..f240add
Binary files /dev/null and b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image5.gif differ
diff --git a/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image6.gif b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image6.gif
new file mode 100644
index 0000000..fdb98d2
Binary files /dev/null and b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/Image6.gif differ
diff --git a/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/adding_bots.html b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/adding_bots.html
new file mode 100644
index 0000000..39808b8
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/adding_bots.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+Adding Bots
+
+
+
+
+
+
Adding Bots
+
+
+
+
+
Despite their massive size, terrain maps can support enjoyable bot play. The
+key is careful placement of cluster portals, which is true of any map. Study the
+bspc documentation for details. The documents accompanying the tools are more up
+to date than those in the Q3Radiant manual. Your goal should be to keep the
+number of areas in each cluster roughly equal and reasonably low (hundreds, not
+thousands).
This is really best addressed as a number of semi-related building tips:
+
+
Plan Ahead. If you know you want buildings
+in your map, plan their locations from the first. Very complicated buildings
+(lots of geometry and surface detail) should be isolated away from long views.
+One reason for this is to control in view polygon counts. The second (and really
+obscure one) is to reduce the amount of z-compression that will affect the
+structures.
+
+
Build to Support Game play. Each of the
+structures in the Q3:TA terrain maps was built to support a game play need.
+Quite often, less is better than more.
+
+
Build Simply. Simple, uncomplicated
+architecture may be best. The more complicated you make your buildings, the less
+complicated the terrain around them can be. Depends on what you want to play up.
+The busy look of many Q3A maps doesn’t translate well to large terrain.
+Details are lost at great distances and only add to the triangle complexity of
+maps containing them.
+
+
Detail Content. With few exceptions ALL
+the geometry inside the terrain map is detail content, not just the terrain
+entity. The walls forming the corridor in mpterra2 may be the only non-detail
+structures in that map. Making geometry into detail makes a map far easier and
+faster to compile. If you want to block vis inside your structures, create
+simple caulk structures … much the same way as described for vis blocking the
+terrain.
+
+
Z-Compression Problems. Review the the map
+in 16 bit mode during development. This brings out z-fighting issues that occur
+at long distances. This z-fighting is created by detail brushes being compressed
+into each other (The Q3A engine does a significant amount of “z compression”
+as geometry becomes farther away from the viewer). This z-compression is far
+less apparent in 32 bit modes, but we have to remember that many people turn
+down graphic features in order to simply play Q3A on their systems (not just to
+get ridiculously high frame rates).
+
+
Fit Structures to the Terrain. Don’t
+just set structures on terrain and expect them to look right. Make your
+buildings look like they belong where you put them. Accommodate the rise and
+fall of terrain in your floor plans … or “dig” into the terrain brushes to
+create basements, tunnels and whatever you need. You can also adjust the height
+map to better arrange the geometry around structures, or manually tweak the
+triangles once the structures are in place. History is full of examples of
+really interesting buildings that have been built to accommodate difficult
+terrain like hills, cliffs and mountains.
The creation of terrain maps requires that the mapmaker have, or have access
+to a computer art program. Both JASC’s Paint Shop Pro and
+ Adobe’s Photoshop
+were tested and will do the job. Any art program that can output an 8-bit BMP
+format file with indexed color should work also.
Terrain maps still have to follow the rules that apply to all Q3A engine
+maps. There’s only so much that you can allow to be seen at one time, or the
+game starts slowing down. The good news is that the engine will only draw the
+terrain triangles that are in the player’s PVS (potential visible set). It
+doesn’t have to draw all the triangles in the terrain entity just because part
+of the entity is in view.
+
At first, most of the usual bag of tricks that mappers use to create vis
+blocking structures in architectural maps don’t seem to apply to terrain. But
+that is not the case. If anything, you NEED to think of terrain in much the same
+way as you think of buildings. You are still dealing with open spaces that could
+be considered corridors and large rooms … even though they look like large
+valleys.
+
In fact, it would be best to plan out the layout of your terrain
+ BEFORE
+creating your height map. If you know you want to block vis, you can design your
+terrain to work with vis blocking techniques and avoid the agony of having to go
+all the way back to the start when you discover that your killer terrain map
+lets you see too much at once.
+
If you want the player, even in spectator mode, to be able to fly everywhere
+and see the whole world laid out below him … an unrestricted vista, so to
+speak, you’re going to be much more limited. Every single triangle in the map
+will essentially be viewable at any moment in time. However, if you’re willing
+to place restrictions on your players - limit how high they can fly or climb,
+you suddenly have more options for blocking player visibility.
+
First, the terrain entity is entirely detail content, so it doesn’t block
+vis. That’s a key part of how this whole process works. Otherwise, vis time
+would be measured in eras (not minutes or hours) and visdata size would be very,
+very large.
+
To block vis in the terrain, start by creating simple
+vis-blocking structures
+out of caulk texture inside the forms of the terrain (they are not part of the
+terrain entity). You can try to match the silhouette of the terrain, but in the
+end, you may only end up complicating the visdata without gaining any real
+benefit.
+
Next, and this is going to sound strange, build thin walls of caulk that
+follow the divide line (where the terrain falls away on both sides) of the
+highest mountains, buttes or hills. Only do this where you know that you will
+not allow the player to move over or see over
that
+part of the terrain (we’ll talk about clipping real soon).
+
+
+
Other Tips:
+
+
+
+
·
Sky Texture in Place of Caulk:
+You sometimes want to apply the sky texture to some of the surfaces of the thin
+walls used as vis blockers. This can remove some HOM effects. The caulk brushes
+that block the vis around the bases in mpterra2 have sky texture painted on the
+surfaces facing the base.
+
+
·
Hint Brushes:
+Use these extremely sparingly and only after trying to solve the problem in
+other ways. Hint brushes can add hours to vis compile times. Even so, they can
+make a difference. One trick you can try is to put a horizontal hint brush at a
+point about midway up the slopes of your terrain. It can add some additional vis
+break points.
+
+
·
Adjusting Terrain:
+Vis times totally depend on the placement of your vis blockers. Vis times are
+not affected by modifying the terrain surfaces (terrain entities are detail
+content, remember?). With that being said, you may want to modify the terrain to
+allow you to more effectively position the vis-blockers.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/boxing_in_the_world.html b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/boxing_in_the_world.html
new file mode 100644
index 0000000..24f1eca
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/boxing_in_the_world.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+Boxing in the World
+
+
+
+
+
+
Boxing in the World
+
+
+
+
+
It may not need mentioning here, but … the terrain entity needs to be
+contained inside a sealed world. For the terrain maps in Q3:TA, we built huge
+boxes. Any portion of the box that could be seen while playing the game, or
+flying around in spectator mode was covered in sky texture. Any portion of the
+box that could not be seen was made out of common/caulk. If mountains or canyon
+walls surround your map, plan to bring the caulk portion of the wall up as high
+as you can. This can reduce the number of triangles seen in the map. Generally
+speaking, you will see ALL the sky triangles inside the map at all times.
+
Finally, and this is a part of vis blocking, but it should also be noted
+here. Don’t forget to place large caulk structures that rise up from the
+bottom of the world box to near the ground surfaces of terrain entity. If the
+ground level rises and falls substantially, these can be a part of the vis
+blocking process. Otherwise they serve to reduce the size of the map’s total
+volume (generally speaking … a good thing).
The terrain entity uses its triangle surfaces as clipping planes. No
+additional clipping is required to allow characters to run on the terrain’s
+surface. As the initial terrain maps developed in house, we discovered that to
+control and guide play flow, we needed to clip many of our mountain and canyon
+slopes with vertical walls. Done right (as the slopes start becoming too steep
+to climb), players don’t notice (as much).
+
Next, decide how far up in the sky you are willing to let your player’s
+fly. If the map is entirely open you might want to keep it that way. If you’ve
+placed caulk barriers as described above, then the low point on the ridgeline
+(or lower) will likely be your ceiling height.
+
+
Clipping Tips
+
+
+
+
·
Make sure your “ceiling” clip
+brushes extend all the way up the sky brush.
+
+
·
Keep your clip brushes simple.
+
+
·
Right angles are rarely found in
+nature. Use the clipper tool to take the corners off your vertical clips.
+
+
+
+
+
The alphamap referenced by the alphamap key/value pair is an art file created
+specifically for the map. For non-digital artists, it may be one of the more
+technically and conceptually challenging things that need to be created to make
+the terrain map work.
+
Simply put, the alpha map is the template that the compiler uses to assign
+textures to the terrain surface.
+
To make the alphamap, you must have, or have access to, an art program that
+can save a file as an 8-bit BMP file with indexed color. I’ll discuss other
+file types later on, but the BMP file is probably the simplest solution, both
+technically and conceptually.
+
+
+
Terms
+
+
First, you need to understand a couple vocabulary words … jargon, if you
+will:
+
+
Indexed Color: In essence, each color used in a piece of art is
+remembered by its location on the color table or palette (see below). There are
+256 colors available, numbered from 0 to 255. Each position on the palette has
+its own number. This number has nothing to do with the RGB values of a color in
+that position. If you change the actual color located at a particular location
+on the palette (say from red to blue), all the pixels that were formerly that
+shade of red (if painted using a color with that index number), will change to
+the new color of blue.
+
+
Color Table: This is what Photoshop calls the indexed color layout of 256
+colors. In Paint Shop Pro it’s a palette. This is a pop-up window that shows
+the colors in the palette and their arrangement. For making an alphamap for a
+terrain map, the colors you choose are not important, but their position on the
+palette is.
+
+
Palette: This is what Paint Shop Pro calls a Color Table.
+
+
+
Making the Palette
+
+
The best way to start is to make a set of colors to use when painting
+alphamaps. If you want, you can do this once and save it out. In PSP edit the
+palette (in Photoshop, open the Color Table). Make sure the colors are sorted by
+index number (there may be a pull down menu that allows this). In PSP, the
+colors are indexed from the upper left (color 0 in the upper leftmost position
+and increasing in value to the right). In Photoshop, the positions are reversed.
+The color with value 0 is in the lower rightmost position and the index numbers
+increase to the right.
+
Because there is a direct one-to-one relationship between colors in the
+palette and individual shaders that make of the metashader, you should select
+clearly distinct colors to represent each shader. You should have one color for
+each layer you intend to include in the map (see keys above), which means one
+color to represent each root shader. You may find it convenient to create more,
+so they are available for later use (if you save the palette).
+
This method worked for me to make a 16-color palette in Paint Shop Pro.
+First, I reduced my palette size to 16 colors. I clicked on each palette
+position and created a color for it (don’t use black). Then, I increased my
+palette size back up to 256 colors, filling the rest with black. In Photoshop,
+it’s easier to select all the colors you don’t intend to use and make them
+black. Then, I save the palette out as a file for later use.
+
Another thing you might try is to make a grayscale palette, then use only the
+first few positions for your color and leave the rest for grayscale (this allows
+you to import bmp height maps and use them as guidelines).
+
+
+
Alphamap File Data
+
+
File type: The alphamap is a BMP format file or a TGA file (see other
+file formats below). With BMP format, each color in your palette corresponds
+directly to a root shader used to create the smooth texture blends on the
+terrain.
+
+
File size: The size of the alphamap should be one-to-one with the number
+of vertexes in the map. If you have 64 divisions x 32 divisions in your terrain
+mesh (65x33 vertexes), you should use a 65 by 33 alphamap. You can use an
+alphamap with a size that is not a one-to-one map with the number of map
+vertexes, but you can then expect a less precise interpretation of your texture
+assignments.
+
+
Colors linked to Shaders: If an 8-bit texture is used (BMP), q3map links
+a color’s position on the palette to an identifying number in the name of a
+shader. The color in position 0 would reference a root shader named <metashadername>_0.
+The color in position 1 would reference a root shader named <metashadername>_1.
+<metashadername> refers to the value of the Shader key (see Key: Shader
+below). In theory, you could probably have 256 different root shaders assigned
+to the terrain entity. In practice, you’d probably want to bite your arm off
+at the elbow before doing something as complicated as that.
+
+
Other File Formats
+
+
It is possible to use a TGA file (a RGB color format) for an
+alphamap. TGA
+files are handled differently than indexed color files like BMP. Instead of
+looking for a position on the palette, q3map interprets the RGB value of actual
+color. With a 32-bit TGA file, only the color values in the red channel are
+used. The program assumes that a gray scale of equal values is being used. The
+program divides the colors by the number of levels into equal-sized ranges. When
+assigning textures, q3map looks at what range the color falls in and chooses the
+appropriate shader to place or blend.
+
+
Controlling Texture Blends
+
+
Each triangle on the mesh can only have two root shaders blending across it.
+Another way to say this is that there should be only two different colors on the
+three vertexes that form any given triangle in the mesh. Any more, and a sharp,
+unblended edge appears on the terrain surface. This can take some trial and
+error to correct. A bsp -switch command called -showseams can help the mapmaker
+find these errors. Create a new bsp command in your project file that includes
+this option. We recommend doing it with a novis only operation.
+
+
+
+
+
Figure 3
+
In figure 3, the blue and white image on the left is a scaled up (4X) version
+of the alphamap used on Distant Screams. It shows three different root shaders
+in use. Compare that to the gray scale height map on the right and you can see
+how the artist chose to assign textures to the various heights and depths of the
+map. As long as the guidelines for texture placement are followed, a mapmaker
+should be able to work with more different root shaders than shown here.
+
+
Alphamap Creation Tips:
+
+
+
+
·
The alphamaps for the team arena maps
+are included with this document, both as reference and as files that you can
+modify to work with your own maps. You may want to compare the alphamaps against
+the heightmaps for the same maps, just to see how id resolved mapping issues.
+
+
·
You can create a quick (though not
+necessarily good) alphamap by saving your height map as a new file. Then use the
+“posterize” filter that can be found in some art tools. Reduce the number of
+colors in the art to equal the layers (number of unique root shaders) in the
+terrain.
+
+
·
If you are creating a new alphamap
+from scratch, use colors that are easily distinguished from each other.
+
+
·
If you are making an alphamap for a
+team style map where both sides of the map are identical (mirrored or rotated),
+you only need to design the map for one side. Copy and position it as described
+above for the heightmap.
+
+
·
The id maps used simple color schemes
+that were homogenous throughout the maps. That is not the only way of doing
+things. It would be quite reasonable to use many more terrain textures
+(particularly if you weren’t going to build complicated, multi-texture
+architecture on top of them). Consider a map where one part of the terrain used
+red-themed textures and the other side blue themed textures. Have them blend
+into a few simple neutral colors near the map center.
+
+
·
Try doing terrain style texture
+mapping on non-terrain geometry. Results will definitely vary, but some could be
+interesting.
+
+
+
+
Samples: The last height map and the alphamap used to create each of the
+terrain maps in Team Arena is included in the Mapping Support folder. Note that
+the designers made vertex manipulations to the final terrain meshes that are not
+reflected in these height maps. Also, the alphamaps are in PCX format, not BMP
+format.
Although it’s not necessarily the only way to develop a piece of terrain,
+thinking of it and creating it as “mesh” of triangular brushes may be the
+easiest way to work initially. The terrain sections for Quake III: Team Arena
+were built in this manner, though each designer went about it in slightly
+different ways.
+
Our primary tool was a plugin for Q3Radiant , created by David Hyde, called
+GenSurf. The tool was originally created for Quake 2 (and may have been around
+longer) and has been adapted for use with many of the game engines using Quake,
+Quake2 and Quake3 technology. The basic concept behind GenSurf is that it can
+create and export a group of brushes (or curve patches) to Q3Radiant that have
+the look of “natural” terrain about them. Within the plug-in, the mapmaker
+has control over the horizontal dimensions of the terrain entity, the steepness
+of the slopes it creates, and the number of columns and rows of triangles that
+it subdivides into.
+
The terrain can be generated from within the tool by using simple waveforms,
+more complex mathematical expressions, fractal calculations, or height maps. The
+last item, height maps, is in our opinion, the route to take for creating
+complex, visually interesting terrain layouts. A height map is a piece of art
+(we rendered them in grayscale) that GenSurf uses as a template for establishing
+the height of vertexes (the points where the corners of the terrain triangles
+meet). GenSurf interprets the color of the pixel (or more correctly the
+numerical color value of the pixel) that corresponds to the location of the
+vertex. Generally, the darker the gray value, the lower in height the vertex
+(256 unique height values corresponding to 256 pixel colors). GenSurf then uses
+the vertexes to define the extents of triangles and suddenly, one has a terrain
+surface. Of course, there are a few details of construction between start and
+finish …
Once you’ve created the func_group that will become the terrain entity, you
+need to add the various keys and key values that make it a terrain entity.
+
+
+A word to the wise: WRITE YOUR KEYS AND VALUES ON SOMETHING YOU CAN
+EASILY REFER TO DURING DEVELOPMENT!! During the creation, testing and tweaking
+of the heightmap, you will have to reenter these key/value pairs for the terrain
+entity every time you recreate it. One thing that can make things easier is
+before replacing the terrain entity with a new mesh, open the entity window and
+click on the most complicated of the key/value pairs (usually the alphamap).
+When the new terrain func_group is in place, click on the value line and hit
+return. That’s one less thing to retype.
+
+
Key: Alphamap
+
+
Value:
The value should be the
+pathname to the art file use to assign textures to the terrain. Example:
+maps/alpha/pj_terra1.bmp. The pathname begins in the game (baseq3 or missionpack)
+directory, which includes the name of the art file.
+
The q3map compiler applies and blends the textures
+(shaders) on the terrain
+entity using a “metashader” (see Texturing the Terrain below) that
+references the art file named by the alphamap value. See the Creating the
+Alphamap section below for details.
+
+
Key: Layers
+
+
Value:
A positive integer, equal to
+the number of unique or root textures to be blended on the map. Each color on
+the alphamap’s palette corresponds to a “layer.” If you plan to blend 4
+textures, you need a layer value of 4.
+
+
Key: Shader
+
+
Value:
A pathname, beginning in the
+ missionpack/scripts directory, which includes the name of the filename and the
+name of the metashader. Example: The shader value for mpterra2 is “terrain/mpterra2”.
+“terrain” is the name of the script and mpterra2 is the name of the
+metashader used to apply texture to this terrain.
+
+
Key: Terrain
+
+
Value:
Set this to 1 to indicate that
+the func_group is a terrain entity. It’s essentially a yes/no flag.
+
+
Key: Min
+
+
Value:
Map coordinates of the minimum
+XY extents (lowest left extent) of a component piece of a multi-part terrain
+entity. This is optional, only used if you are texturing a subset of the total
+terrain area.
+
The Min and Max extents (both must be in the entity) establish where a
+subsection of terrain fits into the overall terrain map. It lets q3map assign a
+subset of the alphamap to the entity, instead of referencing the entire alphamap.
+It could also be used on a separate terrain entity to use the same alphamap, but
+reference a different shader.
+
+
Key: Max
+
+
Value:
Map coordinates of the maximum
+XY extents (uppermost right extent) of a component piece of a multi-part terrain
+entity. This is optional, only used if you are texturing a subset of the total
+terrain area.
+
The Min and Max extents (both must be in the entity) establish where a
+subsection of terrain fits into the overall terrain map. It lets q3map assign a
+subset of the alphamap to the entity, instead of referencing the entire alphamap.
+It could also be used on a separate terrain entity to use the same alphamap, but
+reference a different shader.
: a shader that is part of
+a family of related shaders used to texture a terrain entity. It represents a
+terrain texture in its unblended state. The naming convention for a root shader
+is <metashadername>_#.
+
+
Blend Shader: a shader that is part of a family of related shaders used
+to texture a terrain entity. It represents a terrain texture in its blended
+state, two textures that crossfade across each other. The naming convention for
+a blend shader is <metashadername>_#to#.
+
+
Metashader: the identifying name of a group of related shaders used to
+texture a terrain entity. By way of example, the metashader name used to texture
+mpterra2 was … mpterra2. Its root shaders had names like mpterra2_0,
+mpterra2_1, and mpterra2_2. Its blend shaders were named mpterra2_0to1,
+mpterra2_1to2, and mpterra2_0to2.
This is not intended to be a tutorial on using GenSurf, but it will include
+some pointers on getting the most out of the tool. You can download the
+standalone tool and find tutorials for GenSurf at this site
+
This page, in particular, contains tips for using GenSurf, most of which to
+apply to Q3A terrain creation.
+
When starting the GenSurf plug-in: You will probably want to “Select Ground
+Surface” as the option for making your terrain surface.
The terrain maps in Quake III: Team Arena began as grayscale bitmap art files
+imported into David Hyde’s “GenSurf” tool, a Q3Radiant plug-in. As
+mentioned before, the height map is a template that the utility uses to define
+the vertex heights of the triangles forming the terrain surface. We used Adobe
+Photoshop and JASC’s Paint Shop Pro to create and adjust our height maps …
+but any art program that can output a .bmp format file can be used to create the
+height map.
+
+
+
+
figure 1.
+
By way of example, the piece of artwork in figure 1 is a greatly scaled up
+(4X) version of the height map used to create the initial terrain geometry for
+mpterra2. The very dark, horizontal area near the center is the big “lake”
+near the center of the map. The dark curves to the upper right and lower left
+are the “fjord” water areas. The dark areas in the upper left and lower
+right are the locations of the bases. The white and very light gray areas
+represent the peaks of hills and mountains.
+
The key to understanding how the height map works is that the shades of gray
+in the art (call them “color values”) represent the height of mesh vertexes
+(triangle corners) and not the triangle quads (squares created by two
+triangles). When you work on a piece of art where each individual pixel
+corresponds to a vertex, it is easy to imagine the pixels (usually large square
+blocks) as squares of terrain. But that’s not how it works.
+
Start by giving some thought to the eventual size and proportions of the
+final terrain area in your map. How many rows and columns of triangles do you
+want in the map? The finer you subdivide the map (making more rows and columns),
+the more triangles will appear in any given view, but the terrain can be made
+less blocky by including more.
+
GenSurf can generate a terrain mesh of up to 64 triangles on a side (of the X
+and Y dimensions of the entire mesh). If you don’t decimate the GenSurf output
+(an option that optimizes and reduces the number of triangles used to create the
+mesh … and we really recommend that you don’t), it generates a mesh of
+triangles in arranged in quads in neat rows and columns. By way of reference,
+mpterra2 (the largest Team Arena map) is “only” 48x64 columns and rows of
+triangles. Since Q3Radiant and q3map tend to like things that end up in neat
+powers of 2 or units of 64 subdivisions, consider having your map extents (lower
+left and upper right map corners) fall onto neat units, power of 2 units. In
+mpterra2, the extents were set up to make the mesh triangles have sides of 256
+units.
+
+
+
+
Figure 2.
+
Figure 2 shows an example of a top view of a terrain mesh that is 8 x 8 rows
+and colums of triangles (on a side).
+
Just as you would plan out a game map, give thought to the layout and flow of
+your terrain map. Will it be all-open in one view? Can you use natural terrain
+features to block vis? How complicated will your buildings (if any) be? Do you
+want to include trees, water, weather effects or other items that could add to
+the visual cost of your map?
+
Begin the creation of your height map by making a new grayscale file. If your
+program doesn’t allow you to easily modify a .bmp format file, work in another
+format and then convert it when you save. You can make the dimensions of your
+height map art whatever you want. The extents you set in GenSurf for the map
+dimensions are what determine the final size of the terrain piece. Some may find
+it easier to work with a large file initially, using their favorite painting
+tools to lay in the shades of gray.
+
However, when you get down to making final and precise changes in your height
+map you should (and this is STRONGLY recommended), change the size of the art
+file such that the pixel dimensions of the map are 1 pixel larger than the
+number of divisions (rows and columns) in the terrain mesh you want to create.
+If you are making a 64 x 64 division map, then you want to create a 65 x 65
+pixel height map.
+
If there is not a one-to-one match between the number of vertexes in the mesh
+(one more than the number of divisions) and the number of pixels in the height
+map, then GenSurf interpolates the number values (0 to 255 range) of the pixels
+to get an averaged value instead of an exact value for the height of the vertex
+at that point.
+
When you save out the height map art file, you must save it in 8-bit .BMP
+format. Currently, this is the only the file format that GenSurf recognizes.
+
+
Tips and things to consider for making Height Maps
+
+
+
+
·
Read through the section on blocking
+vis later in the document. Plan your vis blocking terrain structures in advance
+instead of having to start over when you discover that too much of your world is
+in view.
+
+
·
Consider what type of geometry will
+form the edges of your map. The terrain maps in Q3:TA resolve the issue by
+creating canyon-like settings … valleys bordered by high canyon or mountain
+walls.
+
+
·
Start by filling your map with a
+neutral gray (value 127 or 128). Paint the high areas lighter and the low areas
+darker.
+
+
·
Keep your terrain shapes simple when
+you start. You can add greater complexity as your map develops.
+
+
·
You will probably want to keep the “playable”
+area of your map within a fairly close or “narrow” range of gray values
+close to the middle range of values. This allows you to use very dark shades of
+gray to create deep chasms and very light shades of gray to create high
+mountains, canyon walls or visual barriers.
+
+
·
Extreme jumps between the gray values
+in adjacent areas means steep slopes.
+
+
·
Avoid making vertical or near vertical
+terrain surfaces … unless you don’t mind the resulting textured surface
+looking like barcode. Q3Map planar projects the textures onto the terrain entity’s
+surface (Normal brushes are box mapped). The pixels will stretch and stretch to
+fill the space. The farther the surface is from horizontal, the greater the
+stretching.
+
+
·
Use the roughness feature of GenSurf
+to add a little, um … roughness to your map … so flat areas aren’t
+completely flat. If you are using a 1 to 1 scale height map, adding “noise”
+to the file will also accomplish this.
+
+
·
If you want an area, such as a path,
+to be flat, you need to make the gray value affecting two adjacent vertexes the
+same value.
+
+
·
You can create gentle slopes by
+changing the gray values between adjacent areas by very small amounts.
+
+
·
Slopes greater than 45 degrees are
+close to becoming unplayable barriers.
+
+
+
+
If you are building a symmetrical team style map, only create one side of the
+terrain. Create a new piece of art that has the dimensions of the final piece.
+Paste the map half into the new file and move it into position. If the map will
+have an even number of vertexes, paste the map again and then rotate or mirror
+(as you choose) the selection and move it into position. If the number of
+vertexes is odd, after you paste the first half of the map, select all but the
+row or column of pixels along which the two halves of the map will face and copy
+it. Paste it, rotate or mirror it, then position it. Now, select and copy half
+the row or column of pixels you didn’t copy in the last operation. Paste it,
+transform it as you did in the last operation, and then position it so that it
+is in the same row or column, but on the opposite side of the piece you copied.
+
When you make significant changes to a height map, consider saving it as
+version rather than over-writing the older file. Always nice to have a back up
+when you realize that you’ve messed up more than you’ve fixed.
Creating workable terrain style maps for the Q3A engine takes some
+reorganizing of thought, but in many ways is not substantially different from
+making a halls-and-rooms type of map. The designer still has to be concerned
+about how much can be seen at one time and give thought to map flow and play.
+The rules and restrictions that guide conventional map design are still there
+… it just occurs on a much grander scale. You still have to think about poly
+counts, that hasn’t changed; but generally speaking, the polys that you will
+use to make your game terrain are VERY large and less are likely to be seen all
+at once during a game.
+
+The “terrain” style maps in Quake III: Team Arena do not represent any
+changes to the Quake 3 Engine. The power to make them work has always been there,
+unrealized and untapped. What has changed is the way map files are created and
+processed. These construction techniques rely on changes in the Q3Radiant editor
+and the q3map program that processes the map files into game files.
+
+
+
+
diff --git a/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/key_changes.html b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/key_changes.html
new file mode 100644
index 0000000..bcc92b6
--- /dev/null
+++ b/install/installs/Q3Pack/install/docs/Terrain_Manual/pages/key_changes.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+Key changes that have been made include
+
+
+
+
+
+
Key changes that have been made include:
+
+
+
+
+
+
+
+
+
+
·
A variant of the func_group entity
+ has been added to the game. When a func_group of brushes (only) is given a
+ terrain key and a numerical value (an ID number for that terrain) and several
+ other key attributes, it becomes a terrain entity and is treated differently
+ than other brushes during the compile.
+
+
·
The map area has been expanded to
+ 128,000 units in all extents (256,000 units on any edge of the map volume).
+ While this does not mean that a map that large could actually run on current
+ game hardware, it does give the designer room to explore what the actual
+ limits may be. As a point of reference, mpterra2.bsp is roughly 12K x 16K x 3K
+ units in size … the largest map in the game by far.
+
+
·
A terrain texture mapping system
+ plots textures across the terrain entity using a specially created .pcx or .tga
+ art file as a map for planar projecting and blending shaders on terrain
+ surfaces.
+
+
·
A “meta-shader” is used to
+ organize and calculate blends between the shaders that are mapped onto the
+ terrain.
+
+
·
Textures designed for use under
+ vertex lighting can be substituted at map load time for more complex shader-manipulated
+ textures that may not look correct in a vertex light only situation.
+
+
+
+
Terrain maps also require some rethinking about the way you light maps.
+
+
Vertex Only
+
+
If you are making a large terrain map, you should plan on making your terrain
+textures be lit by vertex lighting only. Lightmaps can quickly become far too
+large for the game to handle.
+
Make sure your large terrain textures contain the following parameters:
Q3map_novertexshadows //this is what keeps those caulk vis blockers from
+causing ugly shadows to form on your terrain.
+
If you are using q3map_sun in your sky …
+
+
Q3map_forcesunlight //this makes the light emitted by a q3map_sun
+parameter affect the vertex lit surface.
+
+
Light Sources
+
+
For outdoor maps, the obvious source of lighting ought to be the sky. The
+skies in the mpterra maps began with skies used in more conventional Team Arena
+maps, but were modified to better suit the needs of the terrain worlds.
+
+
+
+
·
Slow Down Those Clouds.
+ One thing to consider is slowing down the rate of cloud movement. What looks
+ OK in smaller maps looks wrong in vast panoramas.
+
+
·
Strong Sunlight is
+ Good. For team maps,
+ you want to try and keep the light relatively the same in both base areas, so
+ if you have mountains or large base structures, having the light come in at a
+ nearly vertical angle is good, but less dramatic.
+
+
+
·
Ambient Light is Not
+ So Bad. Since the
+ beginning of Q3A map development we’ve said things like “Ambient Lighting
+ is bad”. Well, the problems caused by ambient lighting are still there
+ (flattening of shadows and colors), but with the distance of the play areas
+ from the sky surface (in some maps), adding an ambient really helps bring up
+ the overall light value in the map. Start low, maybe around an ambient value
+ of 5 and creep upwards until the map looks right. It is VERY IMPORTANT that
+ you give your ambient light a color. If you leave it white, you get ugly pink
+ light instead of white. Even specifying white makes it look wrong. Best
+ suggestion is to sample the sky texture color and translate that into an rgb
+ formula for your ambient. One warning
+ though … if you include “interior spaces” in your maps, the ambient
+ light will affect those areas too. You will not get the deep dark shadows you
+ may want in there.
+
+
+
·
Sky Shader Trick #1: Lose the
+ Backsplash. The attributes of the sky
+ shader can have a significant effect on the amount of time it takes to perform
+ a light compile on a map. You have to think of the sky as a huge area light.
+ However, unlike light emitting textures (like your average light fixture), the
+ sky doesn’t need to be illuminated itself. Therefore, you can eliminate the
+ backsplash light feature which is the default status of the q3map_surfacelight
+ parameter. Your sky shader should have the parameter q3map_backsplash with a
+ value of -1. Removing backsplash light doesn’t affect the appearance of the
+ sky, but does remove a significant amount of compiling overhead when the
+ -light algorithm is used (the normal way you light things).
+
+
·
Sky Shader Trick#2: Big
+ Subdivisions. Q3Map automatically
+ subdivides the sky into triangle quads. The more triangle quads, the more
+ light emitting surfaces you have on your sky (if q3map_surfacelight is used).
+ The light compile calculates for every one of these light emitting surfaces.
+ Increase the size of the subdivision and you get less light emitters and a
+ faster compile.
+
+
·
Sky Shader Trick #3: -V-light.
+ This is a fast lighting algorithm. It’s especially fast for calculating sky
+ lighting. It loses a little precision, but it can greatly speed up the time it
+ takes to light a map. Even if you decide to use a normal light operation for
+ your final map, using -vlight for interim compiles can mean a lot less time
+ spent waiting on the compiler to see your results.
+
+
+
+
+
+
The Light Grid
+
+
This is discussed in detail under terrain-related Worldspawn features. One of
+the things that can add enough memory complexity to a large terrain map, enough
+to make it unplayable (read crash the game), is the light grid. Think of the
+light grid as a map for determining how to light entities in the world. It’s
+what makes player models appear to move in and out of shadows as they move
+through the world. It’s a nice effect, but costly in memory terms. For the
+largest maps in Q3:TA, we “traded down” to a less detailed light grid.
+Increasing the size of grid subdivisions from 32 units to 256 units did this. We
+experimented with smaller and larger grids and settled on 256 x 256 x 256 as the
+best size. Smaller and the grid became large and unwieldy. Larger (especially on
+the z dimension) and not enough light reached some of the entities.
+
The details of this feature are noted below under Terrain-Related WorldSpawn
+Features.
Once the terrain mesh has been generated, it’s very likely that you will
+want to fine-tune the triangles inside the editor. Do this by pulling vertexes
+up and down along the Z axis. Once you start fine-tuning in this manner, the
+height map no longer exactly represents the map.
+
+
WARNING: If you revise and convert the height map, your manipulations
+here are lost.
The key to making this stuff look good is the q3map routine that works with
+alphamap and the metashader (see below) to smoothly blends textures across the
+terrain entity.
+
+
Texturing Overview
+
+
As noted earlier, Q3Map assigns textures, or more correctly, shader
+manipulated textures, to each triangle used to create the terrain map. The
+shaders used are part of a group of shaders called a metashader. The metashader
+is the family name for the shader. Individidual shaders within it are identified
+by a suffix, either an underline character followed by a number, or an underline
+character followed by a string indicating a blend between two other shaders.
+
Within the body of the metashader, there are two types of shaders used. The
+first, is the root shader. A root shader represents a terrain texture in
+its unblended state. The naming convention for a root shader is <metashader>_#.
+The second type is the blended shader. The blended shader creates a
+crossfade between two root shaders across the face of a single geometry
+triangle. The naming convention for a blended shader is <metashader>_#to#.
+The map maker does not need to make a blend between each root shader, but for a
+blend to occur, there must be a blend shader for the two root shaders.
+
Q3map will map a shader (root or blended) once and only once across the face
+of the triangle. The shaders will not tile or repeat across the triangle face.
+
As noted earlier, the textures are planar mapped or projected on the surface
+of terrain texture. The angle of any individual triangle does not affect the
+angle or direction at which the texture lies on the brush surface. The angle,
+however, does affect the apparent stretching of the texture on the surface. The
+steeper the angle of the brush surface, the greater will be the stretch of the
+shader on that surface.
+
Q3map looks at the pixel on the alphamap that corresponds to a given vertex.
+It uses the color of that pixel (or more correctly the identification number of
+the position that color occupies in the palette) to determine which root shader
+will be applied. That root shader is applied to triangles that have one vertex
+located at the given vertex. It then examines the alphamap color of the vertexes
+adjacent to the given vertex. If an adjacent vertex has the same color as the
+given vertex, the root shader is applied to the surface. If an adjacent vertex
+has a different alphamap color, the blended shader that crossfades between the
+two.
+q3map
+-----
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-glview
+ Write a .gl file of the bsp tree for debugging.
+-v
+ Output verbose information.
+-draw
+ Enable realtime debug drawing output.
+-nowater
+ Water, slime and lava brushes are not compiled and won't show up when running the map in Quake.
+-noopt
+ unused.
+-nofill
+ unused.
+-nodetail
+ Detail brushes are not compiled and won't show up when running the map in Quake.
+-fulldetail
+ Detail brushes will be treated as normal brushes.
+-onlyents
+ Only change the entities in a .bsp using a .ent file.
+-onlytextures
+ Only change the textures in a .bsp file.
+-micro
+ unused.
+-nofog
+ Visible surfaces that cross fog boundaries will not be split along the bound.
+ This can cause visually incorrect fog in the map.
+-nosubdivide
+ Visible surfaces are not subdivided as required by shader tesselation.
+ The shader parameter "tesssize" sets the tesselation of a surface.
+-leaktest
+ Only test the map for leaks. If a leak is found the compilation is stopped.
+-verboseentities
+ Output verbose information about entity sub-models.
+-nocurves
+ Curves are not compiled and won't show up when running the map in Quake.
+-notjunc
+ T-junctions are not fixed. This can cause tiny slits where a surface meets halfway another surface.
+-expand
+ Expands all the brush planes and saves a new map out to allow visual inspection of the clipping bevels
+-tmpout
+ Output files to a folder called "tmp".
+-fakemap
+ Write out a fakemap.map This map will contain a worldspawn entity with all the world brushes.
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-custinfoparms
+ Will enable custom surface flags (see below)
+
+q3map -vis
+----------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-fast
+ Only calculate a very loose visiblity list. It doesn't take much time to
+ calculate but a lot more polygons will be drawn by the Q3 engine than necesary.
+-merge
+ Merge bsp leaves before calculating the visibility list. This will speed up
+ the vis calculations but mostly more polygons will be drawn by the Q3 engine
+ than necesary.
+-nopassage
+ Disable the passage visibility algorithm. The passage vis is faster and a bit more
+ tight than the old algorithm.
+-level
+ unused.
+-v
+ Output verbose information.
+-nosort
+ Don't sort the portals on complexity. Sorting mostly speeds up visibility calculations
+ because more complex portals can use information from less complex portals.
+-saveprt
+ Don't delete the .prt file after creating the visibility list.
+-tmpin
+ Input files will be read from a folder called "tmp".
+-tmpout
+ Output files will be written to a folder called "tmp".
+
+
+q3map -light
+------------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area
+ This scales the light intensity of area lights.
+-point
+ This scales the light intensity of point lights.
+-notrace
+ No light tracing is performed. As a result no shadows will be casted.
+-patchshadows
+ Enable patches casting shadows.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-extra
+ Take four samples per lightmap pixel and store the average light value of these
+ four samples for the actual lightmap pixel.
+ This super sampling is used for anti-aliasing.
+-extrawide
+ Just like -extra four samples per lightmap pixel are calculated. However the
+ average of 12 samples is stored per lightmap pixel.
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-border
+ Create a debugging border around the lightmap.
+-v
+ Output verbose information.
+-nosurf
+ unused.
+-dump
+ unused.
+
+
+q3map -vlight
+-------------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area
+ This scales the light intensity of area lights.
+-point
+ This scales the light intensity of point lights.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-nostitching
+ No polygon stitching before lighting.
+-noalphashading
+ Don't use alpha shading at all.
+-nocolorshading
+ Don't use colored alpha shading. The alpha channel will be used as if it were binary.
+ The light goes through or not and does not change color.
+-tracelight
+ Use the "-light" light algorithm for all surface unless a surface
+ uses a shader with the shader option "q3map_vlight".
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-v
+ Output verbose information.
+
+
The q3map options are a subset of the shader instructions that require
+recompiling of the map.
+
q3map_tracelight
+
[NEW] Surfaces using a shader with this option will always be lit with the
+original "-light" light algorithm. Patches will not cast shadows on
+this surface unless the shader option q3map_patchshadows is used.
+
q3map_patchshadows
+
[NEW] When this option is used in conjunction with the original (-light)
+lighting algorithm, surfaces with textures modified by this option will will
+show shadows cast by curve patches (under normal circumstances, curve patches do
+not cast shadows).
+
q3map_vertexshadows
+
[NEW] By default, no shadows are cast on vertex-only lit surfaces (see
+surfaceparm pointlight). Also when running Quake III Arena in vertex lighting
+mode, no shadows are cast upon any surfaces (shadows are part of the light map).
+When using this shader option shadows *will* be cast on the surface when vertex
+lit. However sharp shadow edges won't be seen on the surface because light
+values are only calculated at the vertexes.
+
q3map_novertexshadows
+
[NEW] Shaders used for misc_models and terrain can now use
+q3map_novertexshadows to disable shadows to be cast at the vertex lit surfaces.
+Shadows being cast at small misc_model objects often makes sense. However
+shadows on large vertex lit terrain surfaces often look bad. By default no
+shadows are cast at forced vertex list surfaces ( shaders with "pointlight"
+).
+
q3map_forcesunlight
+
[NEW] No sunlight is cast at vertex lit md3 models and terrain by default.
+Using this option sunlight (overbright bits created by q3map_sun option) will be
+cast on these surfaces.
+
q3map_vertexscale <scale>
+
[NEW] The light value at the vertexes of a surface using a shader with this
+option is multiplied by the scale value. This is a way to lighten or darken a
+vertex light only surface in comparison to other, light-map lit surfaces around
+it.
+
q3map_notjunc
+
[NEW] Surfaces modified by a shader with this option are not used for
+tjunction fixing.
+
q3map_vlight
+
[NEW] Surfaces modified by a shader with this option will always be lit with
+the "-vlight" algorithm when q3map is used with the options "-vlight
+-tracelight".
+
q3map_lightmapsamplesize <S>
+
[NEW] Surfaces using a shader with this shader option will use lightmaps with
+pixel size SxS. This option can be used to produce high resolution shadows on
+certain surfaces or can be used to reduce the size of lightmap data where high
+resolution shadows are not required.
+
q3map_lightimage <image>
+
Image to use for the light color of a surface light instead of the image(s)
+used by the shader. Color is averaged from the texture. Texture must be the same
+size as the base image map.
+
q3map_surfacelight <value>
+
Sets the amount of light this surface emits.
+
q3map_lightsubdivide <value>
+
A surface light is subdivided into a bunch of point lights for the actual
+lighting of the world. This parameter controls the space between those point
+lights. Default value is 120.
+
q3map_backsplash <percent> <distance>
+
A surface light is also lit by itself using back splash point lights with a
+lower intensity. The <percent> parameter specifies the intensity
+percentage they use from the q3map_surfacelight <value> parameter. The
+<distance> parameter controls the distance of these back splash lights
+from the surface. You can set the <percent> to zero or a negative value to
+disable the back splash lights.
+
q3map_globaltexture
+
When this option is set the texture is not aligned to the world.
+
q3map_backshader <shader>
+
<shader> is the path/name of the shader or texture to be used at the
+back side of the surface.
+
q3map_flare <shader>
+
Creates a flare using the specified <shader> at the center of the
+surface using a shader with this option.
+
light <value>
+
Old style flare specification always using the shader "flareshader".
+The <value> parameter is unused.
Color will be normalized, so it doesn't matter what range you use. The
+intensity falls off with angle but not distance. A value of 100 is a fairly
+bright sun.
+
degree of 0 = from the east, 90 = north, etc.
+
elevation of 0 = sunrise/set, 90 = noon
+
surfaceparm pointlight
+
Surfaces using a shader with this parameter will always be vertex lit
+
This option can be used to reduce the lightmap data. Often used on surfaces
+
that don't need any shadows.
+
Surfaceparm dust
+
If a player lands (jumps onto) on a surfaces using a shader with this
+parameter, a put of dust will appear at the player’s feet. Note that the
+worldspawn entity of that map must have an enableDust key set to a value of 1.
+
+
+
Custom surfaceparms
+
+
With the new q3map tool you can add custom surface parameters for mods
+without the need to recompile the q3map tool. These custom surfaceparms are
+stored in a file called ‘custinfoparms.txt’ in the folder scripts/. An
+example of this file with the new surfaceparm treacle and surfaceparm grass is
+shown below.
NOTE: For linux users, when using the -custinfoparms parameter q3map
+first looks in your homedir, and only if it doesn't find a custinfoparms.txt
+there, it uses the one stored in the
+
quake3 install dir (usually /usr/local/games).
+
+
+
Content Flags
+
+
Contents flags are flags similar to CONTENTS_FOG in the original Q3A. These
+flags define the contents of volumes inside the game (for instance lava, fog,
+water, etc.).
+
If you look in the source file game/surfaceflags.h, it has defines for all
+contents flags. The define is split into a name and a hexadecimal value, for
+instance CONTENTS_PLAYERCLIP 0x10000. These hexadecimal values are powers of 2
+and can be ored together (binary) to form a bit mask. Up to 32 contents flags
+can be ored together this way.
+
+
Example: creating a volume with treacle.
+
The following outlines how a custom contents flag can be added and used in a
+mod. First open the ‘custinfoparms.txt’ file and add ‘treacle 0x4000’
+to the Custom Contentsflags section as shown in the example file above (0x4000
+is one of the unused values available for custom use). Next write a shader
+script which uses ‘surfaceparm treacle’. Apply this new shader to all sides
+of a brush in a test map. When you compile the map, add the -custinfoparms
+parameter to the command line following q3map.
+
Next, add CONTENTS_TREACLE 0x4000 to the source file game/surfaceflags.h in
+your mod. Now you can call the point contents function. If the point is inside
+the brush with the shader using the ‘surfaceparm treacle’ then the point
+contents call will return a bit mask with CONTENTS_TREACLE set. This can for
+instance be used to slow down player movement when a player is inside such a
+brush.
+
+
+
Surface Flags
+
+
The surface flags are texture properties that often affect entities in
+contact with surfaces using such flags. The ‘surfaceparm metalsteps’
+parameter from Q3A is a good example.
+
If you look in the source file game/surfaceflags.h, it has defines for all
+surface flags. The define is split into a name and a hexadecimal value, for
+instance SURF_NODAMAGE 0x1. These hexadecimal values are powers of 2 and can be
+ored together (binary) to form a bit mask. Up to 32 surface flags can be ored
+together this way.
+
+
Example: Making ‘footsteps on grass’ sounds
+
The following outlines how a custom surface flag can be added and used in a
+mod. First open up the ‘custinfoparms.txt’ file and add 'grass 0x80000' to
+the Custom Surfaceflags section as shown in the example file above (0x80000 is
+the first available unused value in surfaceflags.h for surface flags). Next
+write a shader script which uses a grass image and has 'surfaceparm grass’.
+Create a test map with the grass shader covering the ground surface. When you
+compile the map, add the -custinfoparms parameter to the command line following
+q3map.
+
Next, add SURF_GRASS 0x80000 to the source file game/surfaceflags.h in your
+mod. Now you'll be able to execute a trace and the trace information will be
+returned in the trace_t structure. If the trace hits a surface with the grass
+surfaceparm then the SURF_GRASS flag will be set in trace_t->surfaceFlags.
+Such a trace can be used to trigger playing a sound of a person stepping on
+grass. For a reference example, see the existing metal steps in the game code.
There are even some editors for other (non-fps) games that can be used to
+manipulate a surface in 3D and then output a .bmp format file. It is worth
+noting that we found it particularly challenging to use them … possibly more
+challenging than the benefits of working in 3D.
+
+
SC3K Map Editor
+
+
The first of these programs was a terrain editor for SimCity3000 called the
+SC3K Map Editor from Tenermerx. It is a free download available here: sc3maped
+
+
Loathing
+
+
The other editor we tried was the “Loathing” terrain editor that comes
+with Bungie’s Myth II game. If you’ve a copy of Myth II, this is something
+you could play around with. Both of these programs could output a .bmp format
+file. If you’ve used it to make some Myth II maps you may have some idea of
+how it works already. It is my opinion that if you use an editor for either of
+these two games to create your height map, you may still want to or need to
+manipulate it in an art program. If you can visualize the relationship between
+shades of gray and relative heights and slopes, the art program is probably the
+easier way to go.
+
+
Pencils, paintbrushes and a scanner
+
+
You can also make your heightmap by painting it by traditional methods and
+then scanning in the file and saving it as a .bmp. Though at some point you’ll
+probably want to switch over to digital manipulation.
Select From Bitmap under Waveform. Of course, you may want to
+ play around with some of the other wave forms. But bitmaps give you the
+ greatest degree of control.
+
+
·
Orientation: as appropriate
+
+
·
If you don’t want GenSurf to add any “noise” or
+ randomization to the height of the mesh, set the Roughness to zero. The
+ preview window gives you a good representation of what roughness does to
+ your surface. The random seed changes the distribution of the noise. Adjust
+ both fields accordingly.
+
+
+
+
The Extents TAB:
+
Extents: The extents of a map are the points on a map that define its
+lowermost t and leftmost corner and its uppermost and rightmost corner. They are
+given in terms of X, Y coordinates.
+
+
+
+
·
Under Extents, you should chose number values that are even
+ multiples of your number of Divisions so that the grid rectangles are all
+ the same size (this produces better texturing results). It also makes extra
+ work for the compiler. Furthermore, use the Extents to position the terrain
+ entity on the map (XY only). You will want to make sure that the terrain
+ locates exactly where you want it each time you revise it. Repositioning a
+ terrain file can be time consuming.
+
+
·
Set your X and Y divisions to equal the number of rows and
+ columns of triangles you want. You may want to strongly consider playing
+ with the numbers so that your triangle sides end up be large powers of two
+ (64, 128, 256 units etc.).
+
+
·
Do not check Use Bezier Patches.
+
+
·
Do not Decimate (keep it set to 0%). The process that applies
+ textures to the surfaces and blends textures between vertexes works best if
+ the size of the triangles is consistent and constant.
+
+
+
+
The Bitmap TAB:
+
+
+
+
·
Filename should point to the .bmp file you are using as a height
+ map. Reload will bring in any changes you have made to the art file without
+ having to restart the program.
+
+
·
GenSurf assigns an integer value to each of 256 shades of gray.
+ The value is based on the position of the color in the palette. In a grayscale
+ palette, the values typically range from 0 (black) to 255 (white). Map Color 0
+ corresponds (usually) to the lowest point on the height map and Map Color 255
+ to the highest. If you set Map Color 0 to 0 and Map Color 255 to 2048, each
+ increase in color value adds 8 units to the height of the vertex. When you
+ increase the difference between to the two values, the height changes are
+ steeper. Decrease the difference and the height changes are more global. You
+ can control the “Z” location at which the terrain draws by adding any
+ extra height above (or below) zero to the height values for both numbers.
+
+
+
+
The Fix Points TAB:
+
+
The general recommendation for this TAB is to leave it alone. You should
+either modify the height map or directly manipulate vertexes inside the
+Q3Radiant editor.
+
+
Texture TAB:
+
+
+
+
·
Set the main texture to common/terrain. The “Steep” angle is
+ irrelevant for terrain texture mapping.
+
+
·
Make sure that the Use detail brushes setting is checked.
+
+
+
Once you’ve tweaked all your settings, do a Save as. If you make changes to
+the settings, consider saving again as a new file. It’s nice to have a back up
+if you screw things up.
+
+
GenSurf Tips
+
+
+
+
·
Setting extents to correspond exactly with the desired map
+ location is important. You want to be able to drop revised terrain into a map
+ without a lot of repositioning.
+
The process of building a piece of terrain focuses on a new thing called the
+“Terrain Entity.” Technically speaking, the terrain in Team Arena is nothing
+more than a func_group entity (brushes only) with a number of key/value pair
+combinations that are unique to it. These key/value pairs define it as terrain (terrain), establish the piece of art that will be used to locate textures on it
+the terrain (alphamap), define the group of shaders used to blend textures
+across its surface (shader), and tell how many different unique shaders will be
+used. The bsp-making utility, Q3Map compiles and textures the terrain entity
+based on the parameters specified in those key/value pairs.
+
It is possible to have multiple terrain entities in a map (see Terrain
+Entities below). Once you learn the method and the techniques, terrain is
+relatively easy to create. One warning though … easy to create does not mean
+easy to compile. Large maps take a much longer time to compile, and huge maps
+are likely to take what seems like forever. However, there are some
+construction, lighting, and shader options that can significantly cut down on
+compile time - as will be noted later.
GenSurf outputs its terrain as a func_group entity. If you create a terrain
+mesh by any other means, you need to group it as a func_group entity.
+
Make certain that all the non-visible surfaces of the func_group brushes are
+textured with common/caulk.
+
Texture the visible surfaces with common/terrain or common/terrain2.
+
Select the func_group and turn it to detail content (CTRL M) or use the
+Selection menu.
+
It is possible to map terrain onto something that is not a “terrain”
+mesh. Keep in mind that textures will be planar projected onto all surfaces in
+the terrain entity and that brush vertexes will be used to determine where
+blends start and end.
A number of worldspawn key/value pairs were created to deal with issues
+arising out of terrain creation.
+
+
Cold Breath and Hot Dust
+
+
+The following two features need not be directly related to terrain, although
+they first appear in the Q3:TA maps. Each key/value pair needs to be the
+worldspawn for that particular feature to work.
+
+
+Key/value pairs:
+
+Key:
+ enableBreath
+
+
+Value:
+ 1
+
+When written into the worldspawn, this enables the appearance of “frosty
+breath” in the air in front of players. The frosty break does not appear in a
+player’s first person view, but will be seen in front of other players and in
+3rd person view.
+
+
+Key/value pair:
+
+Key:
+ enableDust
+
+
+Value:
+ 1
+
+When written into the worldspawn, this enables the appearance of dust puffs
+at the player’s feet when he lands on or run on a “dusty” surface. Adding
+the surface parameter “surfaceparm dust” to the shader for that surface
+creates a dusty surface. The common/terrain2 texture already contains the
+enableDust parameter.
+
+
Texture Remapping: Shaders for vertex light mode in Q3A
+
+
+One thing we quickly discovered when mapping the metatexture onto the terrain
+world was that it didn’t work if a player chose to run in the game’s vertex
+lighting only mode. That mode compresses shaders into a single pass. Usually,
+the engine makes a reasonable choice for which pass is mapped, but with the
+metashaders, that wasn’t the case. The solution: allow the mapper to choose a
+substitute texture that only is used in the game’s vertex lighting mode.
+
+
+For each shader that will be remapped a key/value pair must be entered in the
+map’s worldspawn.
+
+
+
+Key: vertexremapshader
+
+
+Value:
+
+ normal_shader;vertexlighting_shader
+
+
+The normal_shader is the shader normally used on the terrain. The
+vertexlighting_shader is the shader to be used when people run the map in Q3 in
+vertex lit mode. The normal_shader and the vertexlighting_shader are seperated
+by a semi-colon ;
+
+
+As many shaders can be remapped as needed by using the key. However, if more
+than one shader is remapped in a map, each one must have a unique identifier …
+either a number or a letter after the Key word, as shown by “vertexremapshaderX”,
+where X is a number or any character set. Examples, vertexremapshader01,
+vertexremapshader02, vertexremapshaderA, vertexremapshaderB,
+vertexremapshadermpterra2_1, etc.
+
+
+In mpterra2, the key/value pair for one of the replaced shaders looked like
+this:
+
+The Light Grid Size (as noted earlier) is the map that the Q3A engine uses to
+light entities. It’s what gives the illusion of players moving in and out of
+shadowed areas on the game levels. We decided, that for large terrain maps, it
+should not be as detailed (and therefore nowhere near as large) as we had done
+for smaller, interior maps. After experimenting with placing controls for the
+grid size on the bsp command line, we finally settled on putting the command
+information in the map’s world spawn. In that way, the grid size could be
+easily tailored to the individual map.
+
+
+
+
+
+Key/value pair:
+
+
+Key:
+
+ gridsize
+
+
+
+Value:
+
+ X Y Z
+
+
+
+
+
+
+
+
+Note that the values are the dimensions of those coordinates. It’s best to
+keep them to power of 2 values. The default value for the gridsize (if left
+unchanged) is 64 64 128. Setting higher x y and z values reduces the size of the
+light grid data in both the .bsp file and in the Q3A game, but it also creates
+less accurate dynamic model lighting.
+
+
+Errors
+
+
+Definitely set the x y and z values higher if you get:
In Q3:TA, there are two “terrain” textures in the common shader script.
+One handles all the uses of terrain where the designer does not want “dust”
+to rise up as the player jumps onto the terrain (common/terrain). The second
+(common/terrain2) has an enable_dust surface parameter. The terrain texture
+should be applied to all visible (in game) surfaces of the terrain entity.
+
Q3map looks for the word “terrain” in the name of the shader when
+texturing terrain entities. If a shader is used without the word
+"terrain" in it, and it’s not marked as nodraw, q3map will still do
+a planar projection, but using that texture. It will not blend between textures,
+however. This can be used to create hard edge texture transitions, or in cases
+where you want to apply textures manually, and aren’t concerned about
+blending.
+
If the terrain texture is applied to a non-terrain entity brush, the surface
+will not draw. The projected terrain surface textures only work on surfaces that
+are a part of entities with the proper terrain entity keys and values.
The shader is the group or family of related shaders used to texture a
+terrain entity. The shader key/value pair in the entity identifies the
+metashader to be used. The suffix (either “_#” for a root shader or “#to#”
+for a blended shader.
+
For each root shader that you want to blend, you need a blend shader. Note
+that you only need to make the blend once. If you have mpterra2_0to2, you don’t
+need mpterra2_2to0.
+
+
+
Example Terrain Shader
+
+
This was the shader used to map textures on mpterra2 (hence the metashader
+name)
+Special Thanks to Jim Dosé and Jan Paul van Waveren
+for their assistance and review (and making this all work in the first place)
+and the same gratitude to Astrocreep for his review and suggestions for making
+it into something people could understand.
+
The material here is for use in conjunction with the Q3Radiant manual for the
+Quake 3 Engine and presumes familiarity with that tool and game engine. Although
+compiling switches and shader commands are included here, this is not intended
+to be a general update or revision to the Q3Radiant manual
+q3map
+-----
+
+-threads <number>
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-glview
+ Write a .gl file of the bsp tree for debugging.
+-v
+ Output verbose information.
+-draw
+ Enable realtime debug drawing output.
+-nowater
+ Water, slime and lava brushes are not compiled and won't show up when running the map in Quake.
+-noopt
+ unused.
+-nofill
+ unused.
+-nodetail
+ Detail brushes are not compiled and won't show up when running the map in Quake.
+-fulldetail
+ Detail brushes will be treated as normal brushes.
+-onlyents
+ Only change the entities in a .bsp using a .ent file.
+-onlytextures
+ Only change the textures in a .bsp file.
+-micro
+ unused.
+-nofog
+ Visible surfaces that cross fog boundaries will not be split along the bound.
+ This can cause visually incorrect fog in the map.
+-nosubdivide
+ Visible surfaces are not subdivided as required by shader tesselation.
+ The shader parameter "tesssize" sets the tesselation of a surface.
+-leaktest
+ Only test the map for leaks. If a leak is found the compilation is stopped.
+-verboseentities
+ Output verbose information about entity sub-models.
+-nocurves
+ Curves are not compiled and won't show up when running the map in Quake.
+-notjunc
+ T-junctions are not fixed. This can cause tiny slits where a surface meets halfway another surface.
+-expand
+ Expands all the brush planes and saves a new map out to allow visual inspection of the clipping bevels
+-tmpout
+ Output files to a folder called "tmp".
+-fakemap
+ Write out a fakemap.map This map will contain a worldspawn entity with all the world brushes.
+-samplesize <N>
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-custinfoparms
+ Will enable custom surface flags (see below)
+
+q3map -vis
+----------
+
+-threads <number>
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-fast
+ Only calculate a very loose visiblity list. It doesn't take much time to
+ calculate but a lot more polygons will be drawn by the Q3 engine than necesary.
+-merge
+ Merge bsp leaves before calculating the visibility list. This will speed up
+ the vis calculations but mostly more polygons will be drawn by the Q3 engine
+ than necesary.
+-nopassage
+ Disable the passage visibility algorithm. The passage vis is faster and a bit more
+ tight than the old algorithm.
+-level
+ unused.
+-v
+ Output verbose information.
+-nosort
+ Don't sort the portals on complexity. Sorting mostly speeds up visibility calculations
+ because more complex portals can use information from less complex portals.
+-saveprt
+ Don't delete the .prt file after creating the visibility list.
+-tmpin <path>
+ Input files will be read from a folder called "tmp".
+-tmpout <path>
+ Output files will be written to a folder called "tmp".
+
+
+q3map -light
+------------
+
+-threads <number>
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-bounce <N> [NEW]
+ Enable radiosity calculation. Rediffuses the light emitted onto surfaces N
+ times. Will write out the BSP after every pass, so it can be cancelled.
+ Light reflected is the lightmap/vertex * texture color, subsampled to a certain
+ granularity across every lit surface. Use q3map_lightimage in a shader
+ to override the reflected color.
+-bouncegrid [NEW]
+ Radiosity affects lightgrid (entity lighting).
+-fast [NEW]
+ Enables light envelopes for area lights, speeding light up by 50x or more on
+ some maps. Has the side effect of dimmer maps with large numbers of dim surface
+ lights.
+-fastgrid [NEW]
+ Same as fast, but only for lightgrid calculation.
+-fastbounce [NEW]
+ Enables fast for radiosity passes only.
+-cheap [NEW]
+ Stop calculating light at a sample when it exceeds (255, 255, 255). This may
+ produce odd artifacts on maps with lots of saturated colored lighting. Also,
+ do not use -cheap with radiosity if you wish to preserve all light emitted.
+-cheapgrid [NEW]
+ Same as cheap, but only for lightgrid calculation.
+-area <scale>
+ This scales the light intensity of area lights.
+-point <scale>
+ This scales the light intensity of point lights.
+-notrace
+ No light tracing is performed. As a result no shadows will be casted.
+-patchshadows
+ Enable patches casting shadows.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-smooth [NEW]
+ Smart version of -extra. Only subsamples lightmap pixels that are shadowed.
+ Produces results comparable to -extra in roughly 1/3 the time. Can also be
+ used with -extra or -extrawide for 16- or 48-tap sampling respectively
+ (smoother shadows).
+-extra
+ Take four samples per lightmap pixel and store the average light value of these
+ four samples for the actual lightmap pixel.
+ This super sampling is used for anti-aliasing.
+-extrawide
+ Just like -extra four samples per lightmap pixel are calculated. However the
+ average of 12 samples is stored per lightmap pixel.
+-samplesize <N>
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-border
+ Create a debugging border around the lightmap.
+-v
+ Output verbose information.
+-nosurf
+ Disables surface tracing (detail brushes and patches) for shadow calculation.
+-dump
+ Dumps prefab files when used with radiosity for each bounce.
+
+
+q3map -vlight
+-------------
+
+-threads <number>
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area <scale>
+ This scales the light intensity of area lights.
+-point <scale>
+ This scales the light intensity of point lights.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-nostitching
+ No polygon stitching before lighting.
+-noalphashading
+ Don't use alpha shading at all.
+-nocolorshading
+ Don't use colored alpha shading. The alpha channel will be used as if it were binary.
+ The light goes through or not and does not change color.
+-tracelight
+ Use the "-light" light algorithm for all surface unless a surface
+ uses a shader with the shader option "q3map_vlight".
+-samplesize <N>
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-v
+ Output verbose information.
+
+
+
+
+
The q3map options are a subset of the shader instructions that require
+recompiling of the map.
+
+
q3map_bounce <fraction>
+
[NEW]
+Specify a number between 0 and 1.0 (or higher) to scale the amount of light reflected in radiosity passes.
+Default: 1.0
+
+
q3map_nofast
+
[NEW]
+Surfaces that emit light with this shader parameter will disable -fast optimisation. Useful for
+large areas of dim sky where you want all the dim light to reach all surfaces.
+
+
q3map_tracelight
+
[NEW] Surfaces using a shader with this option will always be lit with the
+original "-light" light algorithm. Patches will not cast shadows on
+this surface unless the shader option q3map_patchshadows is used.
+
q3map_patchshadows
+
[NEW] When this option is used in conjunction with the original (-light)
+lighting algorithm, surfaces with textures modified by this option will will
+show shadows cast by curve patches (under normal circumstances, curve patches do
+not cast shadows).
+
q3map_vertexshadows
+
[NEW] By default, no shadows are cast on vertex-only lit surfaces (see
+surfaceparm pointlight). Also when running Quake III Arena in vertex lighting
+mode, no shadows are cast upon any surfaces (shadows are part of the light map).
+When using this shader option shadows *will* be cast on the surface when vertex
+lit. However sharp shadow edges won't be seen on the surface because light
+values are only calculated at the vertexes.
+
q3map_novertexshadows
+
[NEW] Shaders used for misc_models and terrain can now use
+q3map_novertexshadows to disable shadows to be cast at the vertex lit surfaces.
+Shadows being cast at small misc_model objects often makes sense. However
+shadows on large vertex lit terrain surfaces often look bad. By default no
+shadows are cast at forced vertex list surfaces ( shaders with "pointlight"
+).
+
q3map_forcesunlight
+
[NEW] No sunlight is cast at vertex lit md3 models and terrain by default.
+Using this option sunlight (overbright bits created by q3map_sun option) will be
+cast on these surfaces.
+
q3map_vertexscale <scale>
+
[NEW] The light value at the vertexes of a surface using a shader with this
+option is multiplied by the scale value. This is a way to lighten or darken a
+vertex light only surface in comparison to other, light-map lit surfaces around
+it.
+
q3map_notjunc
+
[NEW] Surfaces modified by a shader with this option are not used for
+tjunction fixing.
+
q3map_vlight
+
[NEW] Surfaces modified by a shader with this option will always be lit with
+the "-vlight" algorithm when q3map is used with the options "-vlight
+-tracelight".
+
q3map_lightmapsamplesize <S>
+
[NEW] Surfaces using a shader with this shader option will use lightmaps with
+pixel size SxS. This option can be used to produce high resolution shadows on
+certain surfaces or can be used to reduce the size of lightmap data where high
+resolution shadows are not required.
+
q3map_lightimage <image>
+
Image to use for the light color of a surface light instead of the image(s)
+used by the shader. Color is averaged from the texture. Texture must be the same
+size as the base image map.
+
q3map_surfacelight <value>
+
Sets the amount of light this surface emits.
+
q3map_lightsubdivide <value>
+
A surface light is subdivided into a bunch of point lights for the actual
+lighting of the world. This parameter controls the space between those point
+lights. Default value is 120.
+
q3map_backsplash <percent> <distance>
+
A surface light is also lit by itself using back splash point lights with a
+lower intensity. The <percent> parameter specifies the intensity
+percentage they use from the q3map_surfacelight <value> parameter. The
+<distance> parameter controls the distance of these back splash lights
+from the surface. You can set the <percent> to zero or a negative value to
+disable the back splash lights.
+
q3map_globaltexture
+
When this option is set the texture is not aligned to the world.
+
q3map_backshader <shader>
+
<shader> is the path/name of the shader or texture to be used at the
+back side of the surface.
+
q3map_flare <shader>
+
Creates a flare using the specified <shader> at the center of the
+surface using a shader with this option.
+
light <value>
+
Old style flare specification always using the shader "flareshader".
+The <value> parameter is unused.
Color will be normalized, so it doesn't matter what range you use. The
+intensity falls off with angle but not distance. A value of 100 is a fairly
+bright sun.
+
degree of 0 = from the east, 90 = north, etc.
+
elevation of 0 = sunrise/set, 90 = noon
+
surfaceparm pointlight
+
Surfaces using a shader with this parameter will always be vertex lit
+
This option can be used to reduce the lightmap data. Often used on surfaces
+
that don't need any shadows.
+
+
+
Surfaceparm dust
+
If a player lands (jumps onto) on a surfaces using a shader with this
+parameter, a put of dust will appear at the player’s feet. Note that the
+worldspawn entity of that map must have an enableDust key set to a value of 1.
+Note: This surfaceflag has been replaced by "surfaceparm woodsteps" in
+Return to Castle Wolfenstien.
+
+
+
Custom surfaceparms
+
+
With the new q3map tool you can add custom surface parameters for mods
+without the need to recompile the q3map tool. These custom surfaceparms are
+stored in a file called ‘custinfoparms.txt’ in the folder scripts/. An
+example of this file with the new surfaceparm treacle and surfaceparm grass is
+shown below.
NOTE: For linux users, when using the -custinfoparms parameter q3map
+first looks in your homedir, and only if it doesn't find a custinfoparms.txt
+there, it uses the one stored in the
+
quake3 install dir (usually /usr/local/games).
+
+
+
Content Flags
+
+
Contents flags are flags similar to CONTENTS_FOG in the original Q3A. These
+flags define the contents of volumes inside the game (for instance lava, fog,
+water, etc.).
+
If you look in the source file game/surfaceflags.h, it has defines for all
+contents flags. The define is split into a name and a hexadecimal value, for
+instance CONTENTS_PLAYERCLIP 0x10000. These hexadecimal values are powers of 2
+and can be ored together (binary) to form a bit mask. Up to 32 contents flags
+can be ored together this way.
+
+
Example: creating a volume with treacle.
+
The following outlines how a custom contents flag can be added and used in a
+mod. First open the ‘custinfoparms.txt’ file and add ‘treacle 0x4000’
+to the Custom Contentsflags section as shown in the example file above (0x4000
+is one of the unused values available for custom use). Next write a shader
+script which uses ‘surfaceparm treacle’. Apply this new shader to all sides
+of a brush in a test map. When you compile the map, add the -custinfoparms
+parameter to the command line following q3map.
+
Next, add CONTENTS_TREACLE 0x4000 to the source file game/surfaceflags.h in
+your mod. Now you can call the point contents function. If the point is inside
+the brush with the shader using the ‘surfaceparm treacle’ then the point
+contents call will return a bit mask with CONTENTS_TREACLE set. This can for
+instance be used to slow down player movement when a player is inside such a
+brush.
+
+
+
Surface Flags
+
+
The surface flags are texture properties that often affect entities in
+contact with surfaces using such flags. The ‘surfaceparm metalsteps’
+parameter from Q3A is a good example.
+
If you look in the source file game/surfaceflags.h, it has defines for all
+surface flags. The define is split into a name and a hexadecimal value, for
+instance SURF_NODAMAGE 0x1. These hexadecimal values are powers of 2 and can be
+ored together (binary) to form a bit mask. Up to 32 surface flags can be ored
+together this way.
+
+
Example: Making ‘footsteps on grass’ sounds
+
The following outlines how a custom surface flag can be added and used in a
+mod. First open up the ‘custinfoparms.txt’ file and add 'grass 0x80000' to
+the Custom Surfaceflags section as shown in the example file above (0x80000 is
+the first available unused value in surfaceflags.h for surface flags). Next
+write a shader script which uses a grass image and has 'surfaceparm grass’.
+Create a test map with the grass shader covering the ground surface. When you
+compile the map, add the -custinfoparms parameter to the command line following
+q3map.
+
Next, add SURF_GRASS 0x80000 to the source file game/surfaceflags.h in your
+mod. Now you'll be able to execute a trace and the trace information will be
+returned in the trace_t structure. If the trace hits a surface with the grass
+surfaceparm then the SURF_GRASS flag will be set in trace_t->surfaceFlags.
+Such a trace can be used to trigger playing a sound of a person stepping on
+grass. For a reference example, see the existing metal steps in the game code.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-27-
+
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Compile_Manual/bspc.txt b/install/installs/ReactionPack/install/docs/Compile_Manual/bspc.txt
new file mode 100644
index 0000000..0547b97
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Compile_Manual/bspc.txt
@@ -0,0 +1,565 @@
+
+
+Title: BSP Converter
+Version: 2.1h
+Date: 2001-03-28
+Author: Mr. Elusive
+
+
+Description
+-----------
+
+The BSPC tool is used to create AAS files from BSP files.
+An AAS file is a file with areas used by the Quake III Arena bot in order
+to navigate and understand a map. The Quake III Arena maps are stored in
+BSP files.
+
+
+Usage
+-----
+
+bspc [- [- ...]]
+
+Example 1: bspc -bsp2aas d:\quake3\baseq3\maps\mymap?.bsp
+Example 2: bspc -bsp2aas d:\quake3\baseq3\pak0.pk3\maps/q3dm*.bsp
+
+Switches:
+ bsp2aas <[pakfilter/]filter.bsp> = convert BSP to AAS
+ reach = compute reachability & clusters
+ cluster = compute clusters
+ aasopt = optimize aas file
+ output = set output path
+ threads = set number of threads to X
+ cfg = use this cfg file
+ optimize = enable optimization
+ noverbose = disable verbose output
+ breadthfirst = breadth first bsp building
+ nobrushmerge = don't merge brushes
+ freetree = free the bsp tree
+ nocsg = disables brush chopping
+ forcesidesvisible = force all sides to be visible
+ grapplereach = calculate grapple reachabilities
+
+
+Several metacharacter may be used in the filter and pakfilter.
+
+* match any string of zero or more characters
+? match any single character
+[abc...] match any of the enclosed characters; a hyphen can
+ be used to specify a range (e.g. a-z, A-Z, 0-9)
+
+.pk3 files are accessed as if they are normal folders. For instance
+use "d:\quake3\baseq3\pak0.pk3\maps/q3dm1.bsp" to access the
+map q3dm1.bsp from the pak0.pk3 file.
+
+Multiple files may be listed after the switches bsp2map, bsp2aas, reach,
+cluster and aasopt.
+
+If a BSP file is being converted to an AAS file and no output path
+is entered on the command-line then the AAS file will automatically
+be stored in the same folder as the BSP file. However if the BSP file
+was stored in a .pk3 file then the AAS file will be stored in a folder
+with the name 'maps' outside the .pk3 file.
+
+
+Updating entity lump
+--------------------
+
+If an AAS file is already available for a BSP file and you ONLY change
+the entities inside this BSP file then you only have to recalculate the
+reachabilities. This way you can move items, platforms etc. around
+without the need to recalculate the whole AAS file which can save quite
+some compile time. You can recalculate the reachabilities as follows:
+
+bspc -reach mymap.bsp
+
+Where mymap.bsp is the BSP file. The mymap.aas file has to be in the
+same folder as mymap.bsp or should be in the output folder specified
+with the -output option.
+
+Keep in mind that as soon as ANY geometry in the map changes the whole
+AAS file HAS to be recalculated in order to play with bots.
+
+NOTE: -reach does not work on optimized .AAS files!
+NOTE: don't use -reach when moving the position of doors.
+
+
+Leaks
+-----
+
+Just like there can be vis leaks in a map there can also be clipping
+leaks. Two things can be wrong when the BSPC tool outputs that a map
+leaks.
+
+1. There are no entities in the map at all, or all entities that are
+actually in the map are placed in solid. In this case the BSPC tool
+outputs "WARNING: no entities inside". (At least a player start entity
+is needed to load a map.)
+
+2. There is a spot in the map where players can go outside the map
+into the void. This is bad, players should never be able to fall out
+of a level. In this case the BSPC tool outputs "WARNING: entity
+reached from outside". The BSPC tool also writes a mymap.lin file
+that can be loaded in the Q3Radiant editor to show lines that go
+through the actual leak.
+
+Make sure the .lin file is stored in the same folder as where q3radiant
+stores the .bsp file. Load the map in q3radiant and use the
+menu -> File -> Pointfile... to load the .lin file. A thick red line
+will be shown in the map. Follow this line to find the leak.
+
+
+Map bounds
+----------
+
+Currently a map should be within the bounds (-65536, -65536, -65536) -
+(65536, 65536, 65536) for the bspc tool to compile. These are the same
+limits the q3map tool has.
+
+
+Physics
+-------
+
+The player bounding box is a 30 units by 30 units square with a height
+of 56 units. If we assume 1.75 meters being the average height of a human
+and a player in Quake III Arena being 56 units high we get 32 units = 1 meter.
+
+Maximum step height of a player is 18 units (just keep steps 16 units or
+lower).
+
+The maximum water jump height for bots has been set to 18 units. (height
+difference between water surface and the floor jumping onto). If the
+waterjump height is made higher human players will have a hard time getting
+out of the water.
+
+With normal gravity and without the quad the maximum rocket jump height is
+around 280 units (you can sometimes jump a few units higher but this is a
+safe value for reference).
+
+The maximum height for barriers the bots will jump on is 32 units.
+
+Some math to calculate some other values of interest:
+
+gravity = 800;
+jump velocity = 270;
+max vertical rocketjump velocity = 670;
+max run velocity = 320;
+max step height = 18;
+
+max jump height = 0.5 * gravity * (jumpvelocity/gravity)*(jumpvelocity/gravity);
+max jump height = 45 units;
+NOTE: even though this is the mathematical maximum jump height always keep
+the the 32 units maximum barrier height for bots in mind when building maps.
+
+maximum horizontal jump distance over a gap from one spot to another both
+at the same height:
+
+t = sqrt((maxjumpheight + maxstep) / (0.5 * gravity));
+t = 0.3986 seconds;
+dist = maxrunvelocity * (t + jumpvelocity / gravity);
+dist = 235 units;
+Because players use a bounding box we can jump a full bounding box width
+furter in the ideal case. (15 units at the jump start and 15 at the
+landing place).
+235 + 15 + 15 = 265 units.
+Again this is the mathematical maximum which players can only reach under
+ideal circumstances.
+
+
+Optimizing a map for bspc
+-------------------------
+
+Hint brushes have no effect on the bspc tool. Only solid, clip, liquid,
+cluster portal and do not enter brushes are used by the bspc tool.
+
+The bspc tool outputs how many areas are created for a map. Less areas
+is better. Often the number of areas can be reduced by adding additional
+clip brushes. By adding these additional clip brushes the complexity
+of the geometry used for collision can be reduced. Do not add clip
+brushes in front of the complex geometry but get the complex shaped
+geometry contained within these clip brushes. Things that should be
+contained within clip brushes are small or complex shaped (often detail)
+brushes and complex and twisted curves, but also more regular curves
+can be placed within a clip brush. When containing a curve within a
+clip brush it's preferred to place the whole curve within the clip
+brush (not just part of the curve).
+Note: you can make brushes or curves non-solid when they are contained
+within *full* clip or *weap* clip brushes to speed up bspc calculations.
+
+Always try to align your geometry to the grids. Always use the largest
+grid possible for alignment of your geometry. Also try to align the
+back sides of brushes which may not be visible. The more brush sides
+are aligned the better. This will also speed up bspc calculations.
+
+Align adjacent brushes as much as possible. Make sure no tiny faces are
+created due to badly aligned brushes.
+
+Quite often there are places in a map that are visible to players
+but that players can never get to. Players would be able to walk around there
+but since players can never reach such places they will never actually
+move around there. If players are never able to get to such places
+it's better to put a large clip brush which encloses that whole space.
+This will also speed up bspc calculations and reduce the number of areas
+created by the bspc tool.
+
+Note: the number of areas relative to the map size tells something about
+the navigation complexity for players in general (also human players).
+Reducing the collision complexity for bots also makes the map easier to
+navigate for human players
+
+
+func_plat and func_bobbing
+--------------------------
+
+When func_plat or func_bobbing entities are placed in a map the bots will
+use them if possible. The bots assume they can stand on top of the bounding
+box of the model used for the func_plat or func_bobbing entity. As a result
+creating complex shaped func_plat or func_bobbing models is mostly a bad
+idea. You have to make sure the bots (and players) can actually stand
+everywhere ontop of the bounding box of the model.
+
+
+Cluster Portals
+---------------
+
+A map is divided into areas. Several of these areas can be grouped together
+to create a cluster. The clusters are seperated by cluster portals which are
+areas themselves. One of the things the bot uses these clusters for is a
+multi-level routing algorithm. When a map is efficiently divided up into
+clusters bot calculations will be faster.
+
+several things to take into account:
+
+- The BSPC tool tries to create cluster portals automatically but additional
+ cluster portals can be created by placing "clusterportal" brushes.
+- Cluster portals are manually created by placing "clusterportal" brushes
+ inside the map.
+- Cluster portal brushes are a tool to optimize a map for CPU usage by the
+ bots. They are not needed for the bots to operate correctly.
+- The "clusterportal" brushes should not be used outside the world hull.
+- The cluster portals do not have any effect on vis.
+- If a door is already sealed with an areaportal brush, a clusterportal is
+ not necessary there. (area portals are also used as cluster portals).
+- Just like the area portals, the cluster portals must seal a space off
+ entirely from other areas.
+- The cluster portal areas should seal off a cluster in a way that the only
+ path towards another cluster is through a cluster portal area.
+- Only create cluster portals where people can walk or swim through.
+- Don't create cluster portals in gaps in the floor. (people would fall through)
+- If you have two sealed off clusters and you add a teleporter between them
+ then the two clusters will be merged again because of the teleporter.
+- Cluster portals must seperate no more and no less than two (2) clusters.
+- Try to create clusters with all the same number of 'reachability' areas.
+ for instance if the map has 5400 areas try to create 10 clusters with 540
+ areas each, or 12 clusters with 450 areas each, etc. The BSPC tool lists
+ the number of reachability areas in each cluster.
+ With Q3A version 1.25 and up you can use /set bot_testclusters 1 on the
+ console and the area number and cluster number you're in will be printed
+ on the screen. These cluster number correspond to the cluster numbers
+ the BSPC tool prints.
+- Minimize the number of clusters with only a few (less than 10) areas.
+- When adding "cluster portal" brushes try to place them in places with
+ minimal geometric complexity. For instance place them inside convex door
+ openings or small hallways (not infront of door openings). Ideally the shape
+ of the face through which a player walks or swims into the cluster portal
+ is the same as the shape of the face through which a player leaves the
+ cluster portal. Also ideally the open space inside the cluster portal
+ brush is convex.
+- Make cluster portals about 16 or 32 units thick or align them with
+ adjacent geometry. Don't make them too thick though.
+- Minimize the total number of cluster portal areas at all times. The more
+ cluster portal areas you have the more CPU the bots need.
+- Items have no effect at all on the creation of areas or clusters.
+ The same goes for item_botroam.
+
+
+Do Not Enter areas
+------------------
+
+When bot navigation problems show up or you want to make sure a bot never tries
+to go to a certain place "do not enter" brushes can be used.
+
+several things to take into account:
+
+- The "do not enter" brushes should not be used outside the world hull.
+- The "do not enter" brush is Not a clip brush for the bot.
+- The "do not enter" brush is a tool of last resort. Do not use it unless
+ there are serious navigation problems.
+- The number of "do not enter" brushes should be minimized because these
+ brushes create additional areas for the bots.
+- The "do not enter" brush will create a New area that the bot will try to
+ avoid. However if the bot somehow ends up in a "do not enter" area or there
+ is a valid goal inside the "do not enter" area then the bot is allowed to
+ go into and out of that area. So if the bot somehow gets in a "do not enter"
+ area the bot will be able to get out.
+
+
+Bot roaming
+-----------
+
+The item_botroam entity can be used when a bot does not roam the whole level
+or prefers to go to only specific areas. This (invisible) item can be placed
+in a map just like regular items. Nobody can actually pick up the item it's
+only used to attract bots to certain places of the map. The item_botroam has
+a key "origin". The value is set by Q3Radiant automatically. The item_botroam
+also has a key "weight". The value is the weight of the roam item and is
+relative to the weight of other items in the map. The bot character specific
+item weights are stored with the bot characters in the botfiles/bots/ sub-folder
+in the .pk3 file. The value of the weight is a non-zero floating point value,
+most often in the range 0 to 400. (Higher values are allowed but keep in mind
+that the bot should also still go for normal items, so don't make the
+item_botroam weight to high.)
+
+When a bot should never go for a specific item the key "notbot" with value "1"
+can be used for that item. This key with value can be used for every available
+item in Quake III Arena.
+
+The suspended flag can be used on all items (item_botroam included).
+However keep in mind that when a suspended item is not anywhere near the
+ground the bot will ONLY try to go for this suspended item using jump pads.
+
+
+Team based entities
+-------------------
+
+You can use the "bot_notteam" entity key with value "1" or "2" on teleporters
+(trigger_teleport or trigger_multiple pointing at a target_teleporter),
+elevators (func_plat), cyclic movers (func_bobbing), jumppads (trigger_push)
+and areas that hurt the player (trigger_hurt).
+When "notteam" is set to "1" only bots using the travel flag TFL_NOTTEAM1 will
+use the entity or move through the area. When "bot_notteam" is set to "2" only
+bots using the travel flag TFL_NOTTEAM2 will use the entity or move through the
+area. These travel flags can be used in the game source code. Using this entity
+key also only has effect if the mod the map is being made for supports team based
+navigation for bots.
+
+
+Testing AAS files
+-----------------
+
+One of the easiest ways to test the AAS file is to load the map in
+Quake3 in teamplay mode (type /set g_gametype 3 on the console before
+loading the map). Enter a team and add a bot to your team. Use the
+team order menu (by default bound to the key F3) to command the bot
+to follow you. Walk around the map and see if the bot is able to
+follow you everywhere.
+
+Map bugs can sometimes cause certain places in the map to show up
+'solid' in the AAS file. The bots cannot travel through these 'solid'
+areas. To test for these 'solid' places set the cvar bot_testsolid
+to 1 on the console. (type /set bot_testsolid 1) The map has to be
+started with devmap instead of map before the cvar bot_testsolid can
+be set. When the cvar is set to 1 then either "empty area" or
+"SOLID area" will be printed on the screen while traveling through a map.
+Several map bugs can cause these 'solid' places in the AAS file.
+- Sometimes microscopic brushes are left over after a brush CSG. Search
+ for such brushes in the problem area and delete them.
+- Tiny brush faces (not curves) can also cause problems. Due to vertex
+ snapping in the q3map tool those tiny brush faces can be snapped out
+ of existence. Such faces will not show up in Quake3 and you'll see
+ tiny peek holes or slits where you can view through the geometry.
+ Allign vertexes of and edges of adjacent brushes to remove and avoid
+ such tiny faces. Placing a clip brush in front of the face that is
+ snapped out of existence will also remove the 'solid' area but ofcourse
+ it's much better to remove the peek holes and slits.
+- Another cause could be a brush with a collapsed side. Check how many
+ sides a brush has and how many sides actually have a surface. Rebuild
+ brushes with collapsed sides.
+- All faces contained within liquid brushes using a shader without
+ "surfaceparm trans" set will be removed. Those contained surfaces will
+ not be visible and can cause the liquid to appear "solid" in the AAS file.
+
+If you insist creating an AAS file for a map with bugs then the option
+-forcesidesvisible can be used. This should fix all the problems with areas
+showing up solid in the AAS file. However creating an AAS file with this
+option takes a lot longer (often more than twice the normal compile time).
+
+Clusters can be tested with the cvar bot_testclusters.
+(type "/set bot_testclusters 1" on the console)
+
+Jumppads can also be tested. Type the following on the Quake3 console
+before loading your map:
+
+/set bot_maxdebugpolys 1024
+/set bot_visualizejumppads 1
+/set bot_forcereachability 1
+
+Now load the map. A counter will be shown and goes from 0% to 100%.
+When the counter has reached 100% type /set bot_debug 1 and
+/set r_debugSurface 2 on the console. For every jumppad the
+default arch of travel (without using air control) will be visualized.
+This only works if your .aas file is not optimized.
+
+
+Error messages
+--------------
+
+Level designers should not worry too much about the following messages and/or warnings. The things reported are non fatal and won't cause any major problems. Some of the messages are just debug left overs.
+
+"AAS_CheckArea: area %d face %d is flipped\n"
+"AAS_CheckArea: area %d center is %f %f %f\n"
+"AAS_CheckFaceWindingPlane: face %d winding plane unequal to face plane\r\n"
+"AAS_CheckFaceWindingPlane: face %d winding reversed\r\n"
+"area %d face %d flipped: front area %d, back area %d\n"
+"area %d face %d is tiny\r\n"
+"face %d and %d, same front and back area but flipped planes\r\n"
+"AAS_SplitFace: tiny back face\r\n"
+"AAS_SplitFace: tiny back face\r\n"
+"AAS_SplitArea: front area without faces\n"
+"AAS_SplitArea: back area without faces\n"
+"gsubdiv: area %d has a tiny winding\r\n"
+"AAS_TestSplitPlane: tried face plane as splitter\n"
+"found %d epsilon faces trying to split area %d\r\n"
+"AAS_SplitArea: front area without faces\n"
+"AAS_GetFace: face %d had degenerate edge %d-%d\r\n"
+"AAS_GetFace: face %d was tiny\r\n"
+"WARNING: huge winding\n"
+"bogus brush after clip"
+"split removed brush"
+"split not on both sides"
+"two tiny brushes\r\n"
+"possible portal: %d\r\n"
+"portal %d: area %d\r\n"
+"WARNING: CM_GridPlane unresolvable\n"
+"WARNING: CM_AddFacetBevels... invalid bevel\n"
+"WARNING: CM_SetBorderInward: mixed plane sides\n"
+"WARNING: bevel plane already used\n"
+"trigger_multiple model = \"%s\"\n"
+"trigger_teleport model = \"%s\"\n"
+"found a trigger_push with velocity %f %f %f\n"
+"AAS_TraceBoundingBox: stack overflow\n"
+"AAS_TraceAreas: stack overflow\n"
+"AAS_LinkEntity: stack overflow\n"
+"MergeWindings: degenerate edge on winding %f %f %f\n"
+"Warning: MergeWindings: front to back found twice\n"
+"FindPlaneSeperatingWindings: winding1 non-convex\r\n"
+"FindPlaneSeperatingWindings: winding2 non-convex\r\n"
+
+
+When one of the following messages, errors or warnings is found then there is often something to be fixed.
+
+"WARNING! HashVec: point %f %f %f outside valid range\n"
+"This should never happen!\n"
+ While storing the AAS file some vertex was found outside the valid map bounds. When this happens some part of the map is likely to have badly aligned brushes or weird shaped curves. Clipping off or rebuilding complex shapes often helps.
+"trigger_push start solid\n"
+ The trigger_push start point is in solid. Try making the trigger_push brush a bit larger or move it around a bit.
+"trigger_push without target entity %s\n"
+ Could not find the target entity of the trigger_push with the target field %s.
+"trigger_push without time\n"
+ trigger_push entity found without "time" field.
+"trigger_multiple not in any jump pad area\n"
+"trigger_push not in any jump pad area\n"
+ A trigger_push entity was found not to be in any valid jumppad area. (the message states trigger_multiple but it should have been trigger_push) Try making the trigger_push brush a bit larger or move it around a bit.
+"trigger_multiple at %1.0f %1.0f %1.0f without target\n"
+ A trigger multiple was found at the given coordinates without a "target" field.
+"target_teleporter without target\n"
+ A target_teleporter entity was found without target field.
+"trigger_teleport at %1.0f %1.0f %1.0f without target\n"
+ A trigger_teleport entity was found at the given coordinates without "target" field.
+"teleporter without misc_teleporter_dest (%s)\n"
+ The destination of a teleporter with target field %s could not be found.
+"teleporter destination (%s) without origin\n"
+ A teleporter destination with the target name %s was found without origin field.
+"teleporter destination (%s) in solid\n"
+ A teleporter destination with the targetname %s was found to be in solid.
+"teleported into slime or lava at dest %s\n"
+ A player would be pushed into slime or lave at the teleporter destination with the targetname %s.
+"trigger_multiple not in any area\n"
+ A teleporter trigger was found not to be in any valid area. Try moving the trigger around a bit.
+"func_plat without model\n"
+ A func_plat entity was found without model field.
+"func_plat with invalid model number\n"
+ A func_plat entity was found with the model field set to some invalid number.
+"func_bobbing without model\n"
+ A func_bobbing entity was found without model field.
+"func_bobbing with invalid model number\n"
+ A func_bobbing entity was found with the model field set to some invalid number.
+"%s in solid at (%1.1f %1.1f %1.1f)\n"
+ An item with classname %s was found to be in solid at the given coordinates.
+"empty aas link heap\n"
+ Some part of the map has some rather complex clipping. Reduce the geometric complexity or use clip brushes to reduce the clipping complexity.
+"too many entities in BSP file\n"
+ There are too many entities in the bsp file.
+"error opening %s\n"
+ Could not create a new AAS file. Hard disk might be full.
+"error writing lump %s\n"
+ Could not write an AAS lump to file. Hard disk might be full.
+
+
+
+Version Changes
+---------------
+
+2.1h (2001-03-28)
+
+- fixed crash bug
+
+2.1g (2001-02-18)
+
+- added bot_notteam support on trigger_hurt entities
+
+
+2.1f (2001-02-06)
+
+- added some AAS statistics
+- don't flood through faces when creating clusters
+
+
+2.1e (2001-01-10)
+
+- fix map size limitation
+
+
+2.1d (2000-12-17)
+
+- renamed "notteam" to "bot_notteam"
+
+
+2.1c (2000-11-02)
+
+- added fs_maxfallheight
+- compiled with larger map size bounds
+
+
+2.1b (2000-09-15)
+
+- fixed cfg file loading
+
+
+2.1 (2000-06-28)
+
+- added model numbers for AREACONTENTS_MOVER
+- added team based func_plat, func_bobbing, trigger_teleport and trigger_push reachabilities
+
+
+2.0 (2000-06-21)
+
+- fixed swim reachabilities
+- fixed some reachabilities through cluster portals
+- fixed jump reachabilities
+- changed some start travel times
+- added travel time settings to cfg
+
+
+1.9 (2000-03-27)
+
+- fixed func_bobbing entities with origin brush
+
+
+1.8 (2000-01-14)
+
+- fixed trigger_teleport bug.
+- increased max map bounds to (-8192, -8192, -8192)-(8192, 8192, 8192)
+- increased max points on winding
+- made "HashVec: point x y z outside valid range" non-fatal
+- fixed rocket jump reachabilities
+- added force sides visible option
+- increased simulated stack size for area traces
+
+
+1.7 (1999-12-22)
+
+- fixed ducked bounding box size
+- fixed sv_maxsteepness being zero in aas configuration
+- AAS files are now automatically stored in BSP file folder
+- fixed crash bug caused by overflow of a simulated stack
diff --git a/install/installs/ReactionPack/install/docs/Compile_Manual/cfgq3.c b/install/installs/ReactionPack/install/docs/Compile_Manual/cfgq3.c
new file mode 100644
index 0000000..47e43c8
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Compile_Manual/cfgq3.c
@@ -0,0 +1,78 @@
+//===========================================================================
+// BSPC configuration file
+// Quake3
+//===========================================================================
+
+#define PRESENCE_NONE 1
+#define PRESENCE_NORMAL 2
+#define PRESENCE_CROUCH 4
+
+// more bounding boxes can be added if required
+// always minimize the number of bounding boxes listed here to reduce AAS file size
+// for instance if players cannot crouch then it's good to remove the bbox definition for it
+
+//bounding box when running/walking
+bbox //30x30x56
+{
+ presencetype PRESENCE_NORMAL
+ flags 0x0000
+ mins {-15, -15, -24}
+ maxs {15, 15, 32}
+}
+
+// bounding box when crouched
+bbox //30x30x40
+{
+ presencetype PRESENCE_CROUCH
+ flags 0x0001
+ mins {-15, -15, -24}
+ maxs {15, 15, 16}
+}
+
+// do not forget settings as they might not be defaulted correctly when this cfg is used
+settings
+{
+ // physics settings
+ phys_gravitydirection {0, 0, -1} // direction of gravity
+ phys_friction 6 // friction
+ phys_stopspeed 100 // stop speed
+ phys_gravity 800 // gravity
+ phys_waterfriction 1 // friction in water
+ phys_watergravity 400 // gravity in water
+ phys_maxvelocity 320 // maximum run speed
+ phys_maxwalkvelocity 320 // maximum walk speed (set for running)
+ phys_maxcrouchvelocity 100 // maximum crouch speed
+ phys_maxswimvelocity 150 // maximum swim speed
+ phys_walkaccelerate 100 // acceleration for walking
+ phys_airaccelerate 0 // acceleration flying through the air
+ phys_swimaccelerate 0 // acceleration for swimming
+ phys_maxstep 18 // maximum step height
+ phys_maxsteepness 0.7 // maximum floor steepness a player can walk on
+ phys_maxwaterjump 19 // maximum height for an out of water jump
+ phys_maxbarrier 33 // maximum barrier a player can jump onto
+ phys_jumpvel 270 // jump velocity
+ phys_falldelta5 40 // falling delta for 5 damage ( see PM_CrashLand in game/bg_pmove.c )
+ phys_falldelta10 60 // falling delta for 5 damage ( see PM_CrashLand in game/bg_pmove.c )
+ // reachability settings
+ // the following are all additional travel times added
+ // for certain reachabilities in 1/100th of a second
+ rs_waterjump 400
+ rs_teleport 50
+ rs_barrierjump 100
+ rs_startcrouch 300
+ rs_startgrapple 500
+ rs_startwalkoffledge 70
+ rs_startjump 300
+ rs_rocketjump 500
+ rs_bfgjump 500
+ rs_jumppad 250
+ rs_aircontrolledjumppad 300
+ rs_funcbob 300
+ rs_startelevator 50
+ rs_falldamage5 300 // avoid getting 5 damage
+ rs_falldamage10 500 // avoid getting 10 damage
+ // if != 0 then this is the maximum fall height a reachability can be created for
+ rs_maxfallheight 0
+ // maximum height a bot may fall down when jumping to some location
+ rs_maxjumpfallheight 450
+}
diff --git a/install/installs/ReactionPack/install/docs/Compile_Manual/headskins.txt b/install/installs/ReactionPack/install/docs/Compile_Manual/headskins.txt
new file mode 100644
index 0000000..bf45f9f
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Compile_Manual/headskins.txt
@@ -0,0 +1,75 @@
+search orders with different settings
+
+
+=====================
+NON-TEAMPLAY
+=====================
+
+-------------------------------------------------
+headmodel = *callisto/lily
+
+models/players/heads/callisto/lily/head_default.skin
+models/players/heads/callisto/head_lily.skin
+
+
+-------------------------------------------------
+headmodel = callisto/lily
+
+models/players/callisto/lily/head_default.skin
+models/players/callisto/head_lily.skin
+models/players/heads/callisto/lily/head_default.skin
+models/players/heads/callisto/head_lily.skin
+
+
+
+=====================
+Q3 TEAMPLAY
+=====================
+
+-------------------------------------------------
+team_headmodel = *callisto/lily
+team = red
+
+models/players/heads/callisto/lily/head_red.skin
+models/players/heads/callisto/head_red.skin
+
+
+-------------------------------------------------
+team_headmodel = callisto/lily
+team = red
+
+models/players/callisto/lily/head_red.skin
+models/players/callisto/head_red.skin
+models/players/heads/callisto/lily/head_red.skin
+models/players/heads/callisto/head_red.skin
+
+
+
+=====================
+TA TEAMPLAY
+=====================
+
+-------------------------------------------------
+team_headmodel = *callisto/lily
+team = red
+teamName = Stroggs
+
+models/players/heads/callisto/lily/Stroggs/head_red.skin
+models/players/heads/callisto/Stroggs/head_red.skin
+models/players/heads/callisto/lily/head_red.skin
+models/players/heads/callisto/head_red.skin
+
+
+-------------------------------------------------
+team_headmodel = callisto/lily
+team = red
+teamName = Stroggs
+
+models/players/callisto/lily/Stroggs/head_red.skin
+models/players/callisto/Stroggs/head_red.skin
+models/players/callisto/lily/head_red.skin
+models/players/callisto/head_red.skin
+models/players/heads/callisto/lily/Stroggs/head_red.skin
+models/players/heads/callisto/Stroggs/head_red.skin
+models/players/heads/callisto/lily/head_red.skin
+models/players/heads/callisto/head_red.skin
diff --git a/install/installs/ReactionPack/install/docs/Compile_Manual/index.html b/install/installs/ReactionPack/install/docs/Compile_Manual/index.html
new file mode 100644
index 0000000..6b8d719
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Compile_Manual/index.html
@@ -0,0 +1,65 @@
+
+
+
+
+ Compiling Manual
+
+
+
+
+
+
+
+
+q3map
+-----
+
+-threads <number>
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-glview
+ Write a .gl file of the bsp tree for debugging.
+-v
+ Output verbose information.
+-draw
+ Enable realtime debug drawing output.
+-nowater
+ Water, slime and lava brushes are not compiled and won't show up when running the map in Quake.
+-noopt
+ unused.
+-nofill
+ unused.
+-nodetail
+ Detail brushes are not compiled and won't show up when running the map in Quake.
+-fulldetail
+ Detail brushes will be treated as normal brushes.
+-onlyents
+ Only change the entities in a .bsp using a .ent file.
+-onlytextures
+ Only change the textures in a .bsp file.
+-micro
+ unused.
+-nofog
+ Visible surfaces that cross fog boundaries will not be split along the bound.
+ This can cause visually incorrect fog in the map.
+-nosubdivide
+ Visible surfaces are not subdivided as required by shader tesselation.
+ The shader parameter "tesssize" sets the tesselation of a surface.
+-leaktest
+ Only test the map for leaks. If a leak is found the compilation is stopped.
+-verboseentities
+ Output verbose information about entity sub-models.
+-nocurves
+ Curves are not compiled and won't show up when running the map in Quake.
+-notjunc
+ T-junctions are not fixed. This can cause tiny slits where a surface meets halfway another surface.
+-expand
+ Expands all the brush planes and saves a new map out to allow visual inspection of the clipping bevels
+-tmpout
+ Output files to a folder called "tmp".
+-fakemap
+ Write out a fakemap.map This map will contain a worldspawn entity with all the world brushes.
+-samplesize <N>
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-custinfoparms
+ Will enable custom surface flags (see below)
+
+q3map -vis
+----------
+
+-threads <number>
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-fast
+ Only calculate a very loose visiblity list. It doesn't take much time to
+ calculate but a lot more polygons will be drawn by the Q3 engine than necesary.
+-merge
+ Merge bsp leaves before calculating the visibility list. This will speed up
+ the vis calculations but mostly more polygons will be drawn by the Q3 engine
+ than necesary.
+-nopassage
+ Disable the passage visibility algorithm. The passage vis is faster and a bit more
+ tight than the old algorithm.
+-level
+ unused.
+-v
+ Output verbose information.
+-nosort
+ Don't sort the portals on complexity. Sorting mostly speeds up visibility calculations
+ because more complex portals can use information from less complex portals.
+-saveprt
+ Don't delete the .prt file after creating the visibility list.
+-tmpin <path>
+ Input files will be read from a folder called "tmp".
+-tmpout <path>
+ Output files will be written to a folder called "tmp".
+
+
+q3map -light
+------------
+
+-threads <number>
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-bounce <N> [NEW]
+ Enable radiosity calculation. Rediffuses the light emitted onto surfaces N
+ times. Will write out the BSP after every pass, so it can be cancelled.
+ Light reflected is the lightmap/vertex * texture color, subsampled to a certain
+ granularity across every lit surface. Use q3map_lightimage in a shader
+ to override the reflected color.
+-bouncegrid [NEW]
+ Radiosity affects lightgrid (entity lighting).
+-fast [NEW]
+ Enables light envelopes for area lights, speeding light up by 50x or more on
+ some maps. Has the side effect of dimmer maps with large numbers of dim surface
+ lights.
+-fastgrid [NEW]
+ Same as fast, but only for lightgrid calculation.
+-fastbounce [NEW]
+ Enables fast for radiosity passes only.
+-cheap [NEW]
+ Stop calculating light at a sample when it exceeds (255, 255, 255). This may
+ produce odd artifacts on maps with lots of saturated colored lighting. Also,
+ do not use -cheap with radiosity if you wish to preserve all light emitted.
+-cheapgrid [NEW]
+ Same as cheap, but only for lightgrid calculation.
+-area <scale>
+ This scales the light intensity of area lights.
+-point <scale>
+ This scales the light intensity of point lights.
+-notrace
+ No light tracing is performed. As a result no shadows will be casted.
+-patchshadows
+ Enable patches casting shadows.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-smooth [NEW]
+ Smart version of -extra. Only subsamples lightmap pixels that are shadowed.
+ Produces results comparable to -extra in roughly 1/3 the time. Can also be
+ used with -extra or -extrawide for 16- or 48-tap sampling respectively
+ (smoother shadows).
+-extra
+ Take four samples per lightmap pixel and store the average light value of these
+ four samples for the actual lightmap pixel.
+ This super sampling is used for anti-aliasing.
+-extrawide
+ Just like -extra four samples per lightmap pixel are calculated. However the
+ average of 12 samples is stored per lightmap pixel.
+-samplesize <N>
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-border
+ Create a debugging border around the lightmap.
+-v
+ Output verbose information.
+-nosurf
+ Disables surface tracing (detail brushes and patches) for shadow calculation.
+-dump
+ Dumps prefab files when used with radiosity for each bounce.
+
+
+q3map -vlight
+-------------
+
+-threads <number>
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area <scale>
+ This scales the light intensity of area lights.
+-point <scale>
+ This scales the light intensity of point lights.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-nostitching
+ No polygon stitching before lighting.
+-noalphashading
+ Don't use alpha shading at all.
+-nocolorshading
+ Don't use colored alpha shading. The alpha channel will be used as if it were binary.
+ The light goes through or not and does not change color.
+-tracelight
+ Use the "-light" light algorithm for all surface unless a surface
+ uses a shader with the shader option "q3map_vlight".
+-samplesize <N>
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-v
+ Output verbose information.
+
+
+
+
+
The q3map options are a subset of the shader instructions that require
+recompiling of the map.
+
+
q3map_bounce <fraction>
+
[NEW]
+Specify a number between 0 and 1.0 (or higher) to scale the amount of light reflected in radiosity passes.
+Default: 1.0
+
+
q3map_nofast
+
[NEW]
+Surfaces that emit light with this shader parameter will disable -fast optimisation. Useful for
+large areas of dim sky where you want all the dim light to reach all surfaces.
+
+
q3map_tracelight
+
[NEW] Surfaces using a shader with this option will always be lit with the
+original "-light" light algorithm. Patches will not cast shadows on
+this surface unless the shader option q3map_patchshadows is used.
+
q3map_patchshadows
+
[NEW] When this option is used in conjunction with the original (-light)
+lighting algorithm, surfaces with textures modified by this option will will
+show shadows cast by curve patches (under normal circumstances, curve patches do
+not cast shadows).
+
q3map_vertexshadows
+
[NEW] By default, no shadows are cast on vertex-only lit surfaces (see
+surfaceparm pointlight). Also when running Quake III Arena in vertex lighting
+mode, no shadows are cast upon any surfaces (shadows are part of the light map).
+When using this shader option shadows *will* be cast on the surface when vertex
+lit. However sharp shadow edges won't be seen on the surface because light
+values are only calculated at the vertexes.
+
q3map_novertexshadows
+
[NEW] Shaders used for misc_models and terrain can now use
+q3map_novertexshadows to disable shadows to be cast at the vertex lit surfaces.
+Shadows being cast at small misc_model objects often makes sense. However
+shadows on large vertex lit terrain surfaces often look bad. By default no
+shadows are cast at forced vertex list surfaces ( shaders with "pointlight"
+).
+
q3map_forcesunlight
+
[NEW] No sunlight is cast at vertex lit md3 models and terrain by default.
+Using this option sunlight (overbright bits created by q3map_sun option) will be
+cast on these surfaces.
+
q3map_vertexscale <scale>
+
[NEW] The light value at the vertexes of a surface using a shader with this
+option is multiplied by the scale value. This is a way to lighten or darken a
+vertex light only surface in comparison to other, light-map lit surfaces around
+it.
+
q3map_notjunc
+
[NEW] Surfaces modified by a shader with this option are not used for
+tjunction fixing.
+
q3map_vlight
+
[NEW] Surfaces modified by a shader with this option will always be lit with
+the "-vlight" algorithm when q3map is used with the options "-vlight
+-tracelight".
+
q3map_lightmapsamplesize <S>
+
[NEW] Surfaces using a shader with this shader option will use lightmaps with
+pixel size SxS. This option can be used to produce high resolution shadows on
+certain surfaces or can be used to reduce the size of lightmap data where high
+resolution shadows are not required.
+
q3map_lightimage <image>
+
Image to use for the light color of a surface light instead of the image(s)
+used by the shader. Color is averaged from the texture. Texture must be the same
+size as the base image map.
+
q3map_surfacelight <value>
+
Sets the amount of light this surface emits.
+
q3map_lightsubdivide <value>
+
A surface light is subdivided into a bunch of point lights for the actual
+lighting of the world. This parameter controls the space between those point
+lights. Default value is 120.
+
q3map_backsplash <percent> <distance>
+
A surface light is also lit by itself using back splash point lights with a
+lower intensity. The <percent> parameter specifies the intensity
+percentage they use from the q3map_surfacelight <value> parameter. The
+<distance> parameter controls the distance of these back splash lights
+from the surface. You can set the <percent> to zero or a negative value to
+disable the back splash lights.
+
q3map_globaltexture
+
When this option is set the texture is not aligned to the world.
+
q3map_backshader <shader>
+
<shader> is the path/name of the shader or texture to be used at the
+back side of the surface.
+
q3map_flare <shader>
+
Creates a flare using the specified <shader> at the center of the
+surface using a shader with this option.
+
light <value>
+
Old style flare specification always using the shader "flareshader".
+The <value> parameter is unused.
Color will be normalized, so it doesn't matter what range you use. The
+intensity falls off with angle but not distance. A value of 100 is a fairly
+bright sun.
+
degree of 0 = from the east, 90 = north, etc.
+
elevation of 0 = sunrise/set, 90 = noon
+
surfaceparm pointlight
+
Surfaces using a shader with this parameter will always be vertex lit
+
This option can be used to reduce the lightmap data. Often used on surfaces
+
that don't need any shadows.
+
+
+
Surfaceparm dust
+
If a player lands (jumps onto) on a surfaces using a shader with this
+parameter, a put of dust will appear at the player’s feet. Note that the
+worldspawn entity of that map must have an enableDust key set to a value of 1.
+Note: This surfaceflag has been replaced by "surfaceparm woodsteps" in
+Return to Castle Wolfenstien.
+
+
+
Custom surfaceparms
+
+
With the new q3map tool you can add custom surface parameters for mods
+without the need to recompile the q3map tool. These custom surfaceparms are
+stored in a file called ‘custinfoparms.txt’ in the folder scripts/. An
+example of this file with the new surfaceparm treacle and surfaceparm grass is
+shown below.
NOTE: For linux users, when using the -custinfoparms parameter q3map
+first looks in your homedir, and only if it doesn't find a custinfoparms.txt
+there, it uses the one stored in the
+
quake3 install dir (usually /usr/local/games).
+
+
+
Content Flags
+
+
Contents flags are flags similar to CONTENTS_FOG in the original Q3A. These
+flags define the contents of volumes inside the game (for instance lava, fog,
+water, etc.).
+
If you look in the source file game/surfaceflags.h, it has defines for all
+contents flags. The define is split into a name and a hexadecimal value, for
+instance CONTENTS_PLAYERCLIP 0x10000. These hexadecimal values are powers of 2
+and can be ored together (binary) to form a bit mask. Up to 32 contents flags
+can be ored together this way.
+
+
Example: creating a volume with treacle.
+
The following outlines how a custom contents flag can be added and used in a
+mod. First open the ‘custinfoparms.txt’ file and add ‘treacle 0x4000’
+to the Custom Contentsflags section as shown in the example file above (0x4000
+is one of the unused values available for custom use). Next write a shader
+script which uses ‘surfaceparm treacle’. Apply this new shader to all sides
+of a brush in a test map. When you compile the map, add the -custinfoparms
+parameter to the command line following q3map.
+
Next, add CONTENTS_TREACLE 0x4000 to the source file game/surfaceflags.h in
+your mod. Now you can call the point contents function. If the point is inside
+the brush with the shader using the ‘surfaceparm treacle’ then the point
+contents call will return a bit mask with CONTENTS_TREACLE set. This can for
+instance be used to slow down player movement when a player is inside such a
+brush.
+
+
+
Surface Flags
+
+
The surface flags are texture properties that often affect entities in
+contact with surfaces using such flags. The ‘surfaceparm metalsteps’
+parameter from Q3A is a good example.
+
If you look in the source file game/surfaceflags.h, it has defines for all
+surface flags. The define is split into a name and a hexadecimal value, for
+instance SURF_NODAMAGE 0x1. These hexadecimal values are powers of 2 and can be
+ored together (binary) to form a bit mask. Up to 32 surface flags can be ored
+together this way.
+
+
Example: Making ‘footsteps on grass’ sounds
+
The following outlines how a custom surface flag can be added and used in a
+mod. First open up the ‘custinfoparms.txt’ file and add 'grass 0x80000' to
+the Custom Surfaceflags section as shown in the example file above (0x80000 is
+the first available unused value in surfaceflags.h for surface flags). Next
+write a shader script which uses a grass image and has 'surfaceparm grass’.
+Create a test map with the grass shader covering the ground surface. When you
+compile the map, add the -custinfoparms parameter to the command line following
+q3map.
+
Next, add SURF_GRASS 0x80000 to the source file game/surfaceflags.h in your
+mod. Now you'll be able to execute a trace and the trace information will be
+returned in the trace_t structure. If the trace hits a surface with the grass
+surfaceparm then the SURF_GRASS flag will be set in trace_t->surfaceFlags.
+Such a trace can be used to trigger playing a sound of a person stepping on
+grass. For a reference example, see the existing metal steps in the game code.
QERadiant.com thanks John Hutton for re-formating this manual into a more web friendly version
+
+
+The purpose of this document is to explain how to set up a model for Quake 3 Arena, create the necessary animation and conversion files, and then export it into the MD3 format required by the game. It is intended to be informative only and not a tutorial on building or animating models.
+
+
The player models for Quake III Arena were built using the commercial modeling software, 3D Studio Max R2.5 (3ds Max) by
+Kinetix. These models were then animated using Physique and Biped, components of a plugin for 3dsMax called Character Studio
+(also by Kinetix). The following instructions assume that you will model and animate with 3dsMax and Character Studio.
+
+
1. Setting up the Files
+Begin in your Quake3 directory. If you don't have one already, create a baseq3 directory. Inside the baseq3 directory, create a models directory. Inside the models directory, create a players directory. Inside the players directory, create a directory with the name of your model (we will use [character] in this document to represent information requiring the name of the model). It is generally a good idea to create a 'work' directory under [character] so that the [character] directory itself remains uncluttered. Place all versions of your model and temp textures here, saving the [character] directory purely for the finished model files.
+
+
2. Building and Naming the Mesh
+The mesh should be built keeping in mind the game engine needs three distinct body part grouping: the head, the upper body, and the lower body. These groupings can consist of different parts or sub-objects, but keep in mind too many sub-objects does impact performance and game play speed. A good rule of thumb is to consolidate your objects (i.e. attach them to each other) as long as they remain a part of a major group. For example, you decide to create a character that has its arms as separate objects for easier animation. Unless the arms or torso has different textures assigned to them go ahead and attach the arms to the torso. It may be more difficult to assign the vertices to the biped skeleton later on, but the efficiency of the model is much better. However, if you must keep the limbs detached for unique shader assignment then keep the following naming conventions in mind:
+
+
2.1 Head Geometry
+All head geometry needs to begin with lower case 'H_' (h_head, h_glasses, h_hat, etc...). Keep in mind that the head has no
+animations itself other than to respond to player mouse-look input.
+
+
2.2 Upper Body Geometry
+All upper body geometry needs to begin with lower case 'U_' (u_torso, u_arms, u_abdomen, etc.) This is your model's torso and arms. The individual animations for the upper body are listed below.
+
+
2.3 Lower Body Geometry
+All lower body geometry begins with lower case 'L_' (l_hips, l_legs, l_lfoot, l_rfoot, etc...). This is your model's buttocks, legs and feet. The individual animations for the upper body are listed below.
+
+
2.4 Tags
+Tags are connection points for other model parts and represent the limited hierarchical system of the game. They include links between the three character body parts and the weapons. Keep in mind that these tags are representations of geometry so they can be animated to represent that geometry. For example, tag_head represents the head, tag_torso represents the torso and tag_weapon represents the weapon. This is important to understand since for example, any time the character is performing a locomotive animation, the upper body can and will animate independently of the lower body, using the relative position of the tag as a base or 'home' position. The tags for the body parts and weapons are named tag_weapon, tag_torso and tag_head.
+
+
3. Texturing
+Once you finish building your character go ahead and attach it to your biped and do some basic test animations to make certain the mesh doesn't deform in weird ways. Turn edges, ad faces, whatever you need to do to make sure that while animating, the character retains its mesh integrity. Handing the mesh over to another artist to assign UVW's or assigning and texturing yourself without testing the animation integrity of the mesh is very risky. Major modifications after UV assignment can cost you valuable time resulting in re-assigning not just the UV's, but re-attaching the mesh to your biped as well. Once your model is ready, go ahead and apply the texture to it. Typically the textures used in Q3A consist of one 256 x 256 texture for the body and one 128 x 128 texture for the head. Keep in mind that it's best to consolidate your texture on a single page rather than break it up into smaller pages. Also some video cards cannot process a texture size larger than 256, so making a high-rez 1024 x 512 texture just won't be seen since the card will knock it down to
+256 x 128 to digest it.
+
+
4. Set Up for Animation
+Once the character is textured or skinned, bring the mesh back into 3dsMax (2.5) and attach it to an adjusted Biped using the Character Studio plug-in. As a rule of thumb, it's always better to just assign the mesh to the biped using the default
+settings and then manually assign vertices to appropriate skeletal 'limbs'.
+
+
5. Animation
+When animating the character, keep all animations in one file. It's crucial that the animations adhere to a specific order that pertains to the separate body parts as this supports our current tag system.
+
+
Basically the order of animations goes: full body (animations that combine both upper and lower), upper body, and lower body. Each character file has the following animations in them and for now that's all the modeler is allowed. The division is basically death (all body parts), extraneous upper body, and dedicated locomotive animations. That way all the upper body animations can be performed at any time, separate from whatever it is that that lower body animations may be doing. There is a set number of animation types which are (in order):
+
+
death1 (approx. 30 frames)
+
death2 (approx. 30 frames)
+
death3 (approx. 30 frames)
+
+
taunt (approx. 45 frames)
+
weapon attack (exactly 6 frames)
+
melee attack (exactly 6 frames)
+
change weapon (exactly 9 frames)
+
weapon idle (exactly 1 frame)
+
melee idle (exactly 1 frame)
+
+
crouched walk (approx. 10 frames)
+
walk (approx. 15 frames)
+
run (approx. 12 frames)
+
backpedal (approx. 10 frames)
+
swim (approx. 10 frames)
+
jump forward (approx. 10 frames)
+
jump forward-land (approx. 6 frames)
+
jump backward (approx. 10 frames)
+
jump backward-land (approx. 6 frames)
+
standing idle (approx. 10 frames)
+
crouched idle (approx. 10 frames)
+
turn in place (approx. 8 frames)
+
+
A good rule of thumb is to create an idle pose at the frame right after the final death frame. Keep this pose for the
+entire lower body and center of mass of the biped up through melee idle frame since any animation by the lower body during these frames will not register during the grab process. Similarly, once the animations for the lower body start, copy the pose for the upper body at the weapon idle frame to the first frame of the crouched walk animation and don't animate the upper body at all after that frame. This allows you to more closely approximate what happens during the game where the upper body is basically just along for the ride as the lower body carries it along via the tag_torso.
+
+
Keep in mind that an animation.cfg has to be generated for each character that is a direct reflection of your animation file above.
+
+
6. Setting up Tags
+After the modeler is satisfied with the animations for the character, it's time to bring in the tags that up until now, have
+kept in a separate file. This is milestone mark that lets the modeler know that the character is nearly complete. 'Merge'
+the tags into your scene. Turn off 'inherit scale' for the tags under the hierarchy/link command panel in Max. Then,
+assign a Physique modifier (Character Studio), linking them to specific areas in the biped:
+
+
tag_torso is linked to the Biped 'pelvis'
+ tag_head is linked to the Biped 'head'.
+ tag_weapon is linked to the right 'hand'.
+
+
6.1 Animate Body Tags
+Now, go in and actually animate the tag_torso so that it matches the default position (established previously at
+approximately the standing idle frame- from the top view it looks like a perfect 90 degree triangle with the base half as wide as the length, pointing forward) when appropriate. "Appropriate" means that as the character goes through the lower body animations, if the triangle is pointing anywhere else but forward, the upper body will point that way as well since to the code the upper body IS the tag. This works out to the modeler's advantage, though because even if the upper body LOOKS crazy in the animation you simply rely on the tag representation to compensate for it.
+
+
6.2 Handling Weapon Tags
+Tag_weapon is a bit different. Basically there is no difference between view model weapons (the weapon as seen by the player when it is in use by his or another player) and the world model weapons (weapons as they are found rotating in the maps) in Quake III Arena. However, for visually clarity and identification, they are doubled in scale when they become seen as world models. They are the same object. This reduces the number of models needed the game and creates an overall more efficient system. Unfortunately a drawback to the system is that there can be only one firing animation for the character. Thusly all weapons need to fit within the grip of the character regardless of size or geometry. This also makes it impossible to see hands on your weapons or otherwise perform vertex animation on the weapons other than barrel rotations vis the tag system (tag_barrel).
+
Since the placement is always the same for the character's hands on the weapons , create the animations to the point where it begins the weapon attack sequence. Then merge one of the weapon models into the character file as a guide. The weapons have a nested triangle of same dimensions as the tag_head and tag_torso triangles (each weapon in the game has this triangle saved with it. Move the weapon into a horizontal firing position (using the side view) to about where the character would be holding the weapon correctly. Then move the character's hands into the appropriate position and link the weapon to the character's right hand.
+
+
When you get to the point where you bring in the tags, make a snapshot of the weapon, hide the original and simply delete all the vertices and faces of the copy of the weapon object except for the nested triangle. Rename it tag_weapon, turn off the 'inherit scale' attributes (very important), and assign Physique to it (linking it to the 'right hand' of the biped) and voila. Ready to export.
+
+
Level of Detail
+Each of the Quake III Arena player characters have a base model and two lower polygon versions of the model (to help with speed issues). For use in the game, the three levels of detail are file formatted as follows:
+
+
+
+
[character].[file extension]
+
This is the highest detail model for close up viewing
+
+
+
[character]_1.[file extension]
+
This is a slightly lower polygon model for mid distance viewing
+
+
+
[character]_2.[file extension]
+
This is the lowest polygon model for long distance viewing.
+
+
+
+
Level of detail means you need to make three versions of your model to get the best performance during gameplay. Each
+version needs to have the same textures assigned and same animations assigned to them in order to work in the game. The
+numbers you need to shoot for are 800 faces for the highest level, 500 faces for next level and 300 for the lowest level. This works out roughly to be a 60% drop in each LOD, but your numbers will vary in order to maintain mesh integrity. Most LOD's created in Q3A were done with the plugin called MRM (multiple resolution mesh) by Intel. The stock Optimize modifier or manual optimization techniques can be applied.
+
+
8. Exporting
+Once the tags are in place (also with the Physique modifier attached to them) the model is ready to export to an ase(ascii)
+file. To make the models available for use in Quake III Arena, the model was exported to a native 3dsMax ASCII format
+file called an '.ase' file. This export option in Max has several check boxes to tweak and then just exports the character
+with its animation data (via Character Studio) to a huge ase/ascii file. Under 'Output Options' make sure the 'Mesh Definition', 'Materials', 'Transform Animation Keys', and 'Animated Mesh' boxes are checked. Under 'Mesh Options' and 'Object Types' make sure 'Mapping Coordinates' and 'Geometric' are the only boxes checked, respectively and let it run. Your 'Time Configuration' must reflect a '0' starting point up through the last frame of your animation. The native Max exporter will rely on the time configuration as a guide on which frames to actually grab during the conversion process. Of course there will be better exporters available in the future…this is just how it was done for the characters in Q3A.
+
+
9. Animation Config File
+The character's animations are controlled by an 'animation.cfg' file where the model maker specifies reference frames and frame rates. The animation.cfg file is a text file (originally created with MS Excel) which contains the frame and animation sequence data. Place this in the model's directory. Note, when the modeler is testing the model in Quake III Arena, changes to the animation.cfg can be made without having to re-grab the model…just do a 'vid_restart' at the cvar command line
+prompt.
+
+
Edit an animation.cfg file which matches the frame/animation sequences and place it in the character's directory. Each animation can have different frame rates that the modeler can tweak, save out in the animation.cfg, hit 'vid_restart' to see the change right away in the game (no need to re-grab the model). The file for visor is shown here below in it's entirety. You may clip this portion of the file out and use it as the basis for your own animation files.
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+// animation config file
+
+sex m
+
+headoffset 0 0 0
+footsteps normal
+
+// first frame, num frames, looping frames, frames per second
+
+0 30 0 25 // BOTH_DEATH1
+29 1 0 25 // BOTH_DEAD1
+30 30 0 25 // BOTH_DEATH2
+59 1 0 25 // BOTH_DEAD2
+60 30 0 25 // BOTH_DEATH3
+89 1 0 25 // BOTH_DEAD3
+90 40 0 20 // TORSO_GESTURE
+130 6 0 15 // TORSO_ATTACK (MUST NOT CHANGE -- hand animation is synced to this)
+136 6 0 15 // TORSO_ATTACK2 (MUST NOT CHANGE -- hand animation is synced to this)
+142 5 0 20 // TORSO_DROP (MUST NOT CHANGE -- hand animation is synced to this)
+147 4 0 20 // TORSO_RAISE (MUST NOT CHANGE -- hand animation is synced to this)
+151 1 0 15 // TORSO_STAND
+152 1 0 15 // TORSO_STAND2
+153 8 8 20 // LEGS_WALKCR
+161 12 12 20 // LEGS_WALK
+173 9 9 18 // LEGS_RUN
+182 10 10 20 // LEGS_BACK
+192 10 10 15 // LEGS_SWIM
+202 8 0 15 // LEGS_JUMP
+210 1 0 15 // LEGS_LAND
+211 8 0 15 // LEGS_JUMPB
+219 1 0 15 // LEGS_LANDB
+220 10 10 15 // LEGS_IDLE
+230 10 10 15 // LEGS_IDLECR
+240 7 7 15 // LEGS_TURN
+
+//////////////////////////////////////////////////////////////////
+
+
10. The Conversion Process
+
+The models need to be run through id's custom md3 conversion/'grabber' program. The program uses the information in the Quake Data text file ([filename].qdt) to grab and convert the 3dsMax files.
+
+
10.1 The Conversion File
+
+Create a "Quake Data" text file for the model with the extension ".qdt". The contents for our [character].qdt file would read something like:
+
+
+
+This is the path to the model's .ase file. The program looks for files starting in your Quake3\baseq3 directory.
+
+
10.1.3 "-lod 1" or "-lod 2"
+This tells the converter that this is the first level of reduced detail for the model. The value "-lod 2" is for the second,
+or lowest level of detail for the model.
+
+
10.1.4 "-playerparms 92 155"
+This tells the converter which frame the upper body anims only start (first value) and which frame the lower body only anims start (second value). The numbers here are only used as examples
+
+
10.2 Run the Conversion
+When the qdt file is set up correctly, run the grabber by opening MSDOS command prompt, going to the quake3 directory
+containing the model files and typing in 'q3data [character].qdt'
+
+
11. Review the Model
+Load up Quake 3 Arena. Go to map Q3DM0 (or any map containing a mirror). Bring down the console and type "\model
+[character name]". Hit your Show Score key (default is TAB). You should see your new model here. Tweak the frame rates in
+your animation.cfg file and save them. Type in "\vid_restart" on the console and hit enter to see the changes.
+
+
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Model_Manual/model_manual.htm b/install/installs/ReactionPack/install/docs/Model_Manual/model_manual.htm
new file mode 100644
index 0000000..6735fa7
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Model_Manual/model_manual.htm
@@ -0,0 +1,217 @@
+
+
+
+Q3A Player Characters: Putting them in the Game
+
+
+
+
+
Putting New Models in Quake III Arena
+
+Based on original notes by Paul Steed
+
+
Edited by Paul Jaquays
+
Edited 12/22/99 by ps
+
QERadiant.com thanks John Hutton for re-formating this manual into a more web friendly version
+
+
+The purpose of this document is to explain how to set up a model for Quake 3 Arena, create the necessary animation and conversion files, and then export it into the MD3 format required by the game. It is intended to be informative only and not a tutorial on building or animating models.
+
+
The player models for Quake III Arena were built using the commercial modeling software, 3D Studio Max R2.5 (3ds Max) by
+Kinetix. These models were then animated using Physique and Biped, components of a plugin for 3dsMax called Character Studio
+(also by Kinetix). The following instructions assume that you will model and animate with 3dsMax and Character Studio.
+
+
1. Setting up the Files
+Begin in your Quake3 directory. If you don't have one already, create a baseq3 directory. Inside the baseq3 directory, create a models directory. Inside the models directory, create a players directory. Inside the players directory, create a directory with the name of your model (we will use [character] in this document to represent information requiring the name of the model). It is generally a good idea to create a 'work' directory under [character] so that the [character] directory itself remains uncluttered. Place all versions of your model and temp textures here, saving the [character] directory purely for the finished model files.
+
+
2. Building and Naming the Mesh
+The mesh should be built keeping in mind the game engine needs three distinct body part grouping: the head, the upper body, and the lower body. These groupings can consist of different parts or sub-objects, but keep in mind too many sub-objects does impact performance and game play speed. A good rule of thumb is to consolidate your objects (i.e. attach them to each other) as long as they remain a part of a major group. For example, you decide to create a character that has its arms as separate objects for easier animation. Unless the arms or torso has different textures assigned to them go ahead and attach the arms to the torso. It may be more difficult to assign the vertices to the biped skeleton later on, but the efficiency of the model is much better. However, if you must keep the limbs detached for unique shader assignment then keep the following naming conventions in mind:
+
+
2.1 Head Geometry
+All head geometry needs to begin with lower case 'H_' (h_head, h_glasses, h_hat, etc...). Keep in mind that the head has no
+animations itself other than to respond to player mouse-look input.
+
+
2.2 Upper Body Geometry
+All upper body geometry needs to begin with lower case 'U_' (u_torso, u_arms, u_abdomen, etc.) This is your model's torso and arms. The individual animations for the upper body are listed below.
+
+
2.3 Lower Body Geometry
+All lower body geometry begins with lower case 'L_' (l_hips, l_legs, l_lfoot, l_rfoot, etc...). This is your model's buttocks, legs and feet. The individual animations for the upper body are listed below.
+
+
2.4 Tags
+Tags are connection points for other model parts and represent the limited hierarchical system of the game. They include links between the three character body parts and the weapons. Keep in mind that these tags are representations of geometry so they can be animated to represent that geometry. For example, tag_head represents the head, tag_torso represents the torso and tag_weapon represents the weapon. This is important to understand since for example, any time the character is performing a locomotive animation, the upper body can and will animate independently of the lower body, using the relative position of the tag as a base or 'home' position. The tags for the body parts and weapons are named tag_weapon, tag_torso and tag_head.
+
+
3. Texturing
+Once you finish building your character go ahead and attach it to your biped and do some basic test animations to make certain the mesh doesn't deform in weird ways. Turn edges, ad faces, whatever you need to do to make sure that while animating, the character retains its mesh integrity. Handing the mesh over to another artist to assign UVW's or assigning and texturing yourself without testing the animation integrity of the mesh is very risky. Major modifications after UV assignment can cost you valuable time resulting in re-assigning not just the UV's, but re-attaching the mesh to your biped as well. Once your model is ready, go ahead and apply the texture to it. Typically the textures used in Q3A consist of one 256 x 256 texture for the body and one 128 x 128 texture for the head. Keep in mind that it's best to consolidate your texture on a single page rather than break it up into smaller pages. Also some video cards cannot process a texture size larger than 256, so making a high-rez 1024 x 512 texture just won't be seen since the card will knock it down to
+256 x 128 to digest it.
+
+
4. Set Up for Animation
+Once the character is textured or skinned, bring the mesh back into 3dsMax (2.5) and attach it to an adjusted Biped using the Character Studio plug-in. As a rule of thumb, it's always better to just assign the mesh to the biped using the default
+settings and then manually assign vertices to appropriate skeletal 'limbs'.
+
+
5. Animation
+When animating the character, keep all animations in one file. It's crucial that the animations adhere to a specific order that pertains to the separate body parts as this supports our current tag system.
+
+
Basically the order of animations goes: full body (animations that combine both upper and lower), upper body, and lower body. Each character file has the following animations in them and for now that's all the modeler is allowed. The division is basically death (all body parts), extraneous upper body, and dedicated locomotive animations. That way all the upper body animations can be performed at any time, separate from whatever it is that that lower body animations may be doing. There is a set number of animation types which are (in order):
+
+
death1 (approx. 30 frames)
+
death2 (approx. 30 frames)
+
death3 (approx. 30 frames)
+
+
taunt (approx. 45 frames)
+
weapon attack (exactly 6 frames)
+
melee attack (exactly 6 frames)
+
change weapon (exactly 9 frames)
+
weapon idle (exactly 1 frame)
+
melee idle (exactly 1 frame)
+
+
crouched walk (approx. 10 frames)
+
walk (approx. 15 frames)
+
run (approx. 12 frames)
+
backpedal (approx. 10 frames)
+
swim (approx. 10 frames)
+
jump forward (approx. 10 frames)
+
jump forward-land (approx. 6 frames)
+
jump backward (approx. 10 frames)
+
jump backward-land (approx. 6 frames)
+
standing idle (approx. 10 frames)
+
crouched idle (approx. 10 frames)
+
turn in place (approx. 8 frames)
+
+
A good rule of thumb is to create an idle pose at the frame right after the final death frame. Keep this pose for the
+entire lower body and center of mass of the biped up through melee idle frame since any animation by the lower body during these frames will not register during the grab process. Similarly, once the animations for the lower body start, copy the pose for the upper body at the weapon idle frame to the first frame of the crouched walk animation and don't animate the upper body at all after that frame. This allows you to more closely approximate what happens during the game where the upper body is basically just along for the ride as the lower body carries it along via the tag_torso.
+
+
Keep in mind that an animation.cfg has to be generated for each character that is a direct reflection of your animation file above.
+
+
6. Setting up Tags
+After the modeler is satisfied with the animations for the character, it's time to bring in the tags that up until now, have
+kept in a separate file. This is milestone mark that lets the modeler know that the character is nearly complete. 'Merge'
+the tags into your scene. Turn off 'inherit scale' for the tags under the hierarchy/link command panel in Max. Then,
+assign a Physique modifier (Character Studio), linking them to specific areas in the biped:
+
+
tag_torso is linked to the Biped 'pelvis'
+ tag_head is linked to the Biped 'head'.
+ tag_weapon is linked to the right 'hand'.
+
+
6.1 Animate Body Tags
+Now, go in and actually animate the tag_torso so that it matches the default position (established previously at
+approximately the standing idle frame- from the top view it looks like a perfect 90 degree triangle with the base half as wide as the length, pointing forward) when appropriate. "Appropriate" means that as the character goes through the lower body animations, if the triangle is pointing anywhere else but forward, the upper body will point that way as well since to the code the upper body IS the tag. This works out to the modeler's advantage, though because even if the upper body LOOKS crazy in the animation you simply rely on the tag representation to compensate for it.
+
+
6.2 Handling Weapon Tags
+Tag_weapon is a bit different. Basically there is no difference between view model weapons (the weapon as seen by the player when it is in use by his or another player) and the world model weapons (weapons as they are found rotating in the maps) in Quake III Arena. However, for visually clarity and identification, they are doubled in scale when they become seen as world models. They are the same object. This reduces the number of models needed the game and creates an overall more efficient system. Unfortunately a drawback to the system is that there can be only one firing animation for the character. Thusly all weapons need to fit within the grip of the character regardless of size or geometry. This also makes it impossible to see hands on your weapons or otherwise perform vertex animation on the weapons other than barrel rotations vis the tag system (tag_barrel).
+
Since the placement is always the same for the character's hands on the weapons , create the animations to the point where it begins the weapon attack sequence. Then merge one of the weapon models into the character file as a guide. The weapons have a nested triangle of same dimensions as the tag_head and tag_torso triangles (each weapon in the game has this triangle saved with it. Move the weapon into a horizontal firing position (using the side view) to about where the character would be holding the weapon correctly. Then move the character's hands into the appropriate position and link the weapon to the character's right hand.
+
+
When you get to the point where you bring in the tags, make a snapshot of the weapon, hide the original and simply delete all the vertices and faces of the copy of the weapon object except for the nested triangle. Rename it tag_weapon, turn off the 'inherit scale' attributes (very important), and assign Physique to it (linking it to the 'right hand' of the biped) and voila. Ready to export.
+
+
Level of Detail
+Each of the Quake III Arena player characters have a base model and two lower polygon versions of the model (to help with speed issues). For use in the game, the three levels of detail are file formatted as follows:
+
+
+
+
[character].[file extension]
+
This is the highest detail model for close up viewing
+
+
+
[character]_1.[file extension]
+
This is a slightly lower polygon model for mid distance viewing
+
+
+
[character]_2.[file extension]
+
This is the lowest polygon model for long distance viewing.
+
+
+
+
Level of detail means you need to make three versions of your model to get the best performance during gameplay. Each
+version needs to have the same textures assigned and same animations assigned to them in order to work in the game. The
+numbers you need to shoot for are 800 faces for the highest level, 500 faces for next level and 300 for the lowest level. This works out roughly to be a 60% drop in each LOD, but your numbers will vary in order to maintain mesh integrity. Most LOD's created in Q3A were done with the plugin called MRM (multiple resolution mesh) by Intel. The stock Optimize modifier or manual optimization techniques can be applied.
+
+
8. Exporting
+Once the tags are in place (also with the Physique modifier attached to them) the model is ready to export to an ase(ascii)
+file. To make the models available for use in Quake III Arena, the model was exported to a native 3dsMax ASCII format
+file called an '.ase' file. This export option in Max has several check boxes to tweak and then just exports the character
+with its animation data (via Character Studio) to a huge ase/ascii file. Under 'Output Options' make sure the 'Mesh Definition', 'Materials', 'Transform Animation Keys', and 'Animated Mesh' boxes are checked. Under 'Mesh Options' and 'Object Types' make sure 'Mapping Coordinates' and 'Geometric' are the only boxes checked, respectively and let it run. Your 'Time Configuration' must reflect a '0' starting point up through the last frame of your animation. The native Max exporter will rely on the time configuration as a guide on which frames to actually grab during the conversion process. Of course there will be better exporters available in the future…this is just how it was done for the characters in Q3A.
+
+
9. Animation Config File
+The character's animations are controlled by an 'animation.cfg' file where the model maker specifies reference frames and frame rates. The animation.cfg file is a text file (originally created with MS Excel) which contains the frame and animation sequence data. Place this in the model's directory. Note, when the modeler is testing the model in Quake III Arena, changes to the animation.cfg can be made without having to re-grab the model…just do a 'vid_restart' at the cvar command line
+prompt.
+
+
Edit an animation.cfg file which matches the frame/animation sequences and place it in the character's directory. Each animation can have different frame rates that the modeler can tweak, save out in the animation.cfg, hit 'vid_restart' to see the change right away in the game (no need to re-grab the model). The file for visor is shown here below in it's entirety. You may clip this portion of the file out and use it as the basis for your own animation files.
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+// animation config file
+
+sex m
+
+headoffset 0 0 0
+footsteps normal
+
+// first frame, num frames, looping frames, frames per second
+
+0 30 0 25 // BOTH_DEATH1
+29 1 0 25 // BOTH_DEAD1
+30 30 0 25 // BOTH_DEATH2
+59 1 0 25 // BOTH_DEAD2
+60 30 0 25 // BOTH_DEATH3
+89 1 0 25 // BOTH_DEAD3
+90 40 0 20 // TORSO_GESTURE
+130 6 0 15 // TORSO_ATTACK (MUST NOT CHANGE -- hand animation is synced to this)
+136 6 0 15 // TORSO_ATTACK2 (MUST NOT CHANGE -- hand animation is synced to this)
+142 5 0 20 // TORSO_DROP (MUST NOT CHANGE -- hand animation is synced to this)
+147 4 0 20 // TORSO_RAISE (MUST NOT CHANGE -- hand animation is synced to this)
+151 1 0 15 // TORSO_STAND
+152 1 0 15 // TORSO_STAND2
+153 8 8 20 // LEGS_WALKCR
+161 12 12 20 // LEGS_WALK
+173 9 9 18 // LEGS_RUN
+182 10 10 20 // LEGS_BACK
+192 10 10 15 // LEGS_SWIM
+202 8 0 15 // LEGS_JUMP
+210 1 0 15 // LEGS_LAND
+211 8 0 15 // LEGS_JUMPB
+219 1 0 15 // LEGS_LANDB
+220 10 10 15 // LEGS_IDLE
+230 10 10 15 // LEGS_IDLECR
+240 7 7 15 // LEGS_TURN
+
+//////////////////////////////////////////////////////////////////
+
+
10. The Conversion Process
+
+The models need to be run through id's custom md3 conversion/'grabber' program. The program uses the information in the Quake Data text file ([filename].qdt) to grab and convert the 3dsMax files.
+
+
10.1 The Conversion File
+
+Create a "Quake Data" text file for the model with the extension ".qdt". The contents for our [character].qdt file would read something like:
+
+
+
+This is the path to the model's .ase file. The program looks for files starting in your Quake3\baseq3 directory.
+
+
10.1.3 "-lod 1" or "-lod 2"
+This tells the converter that this is the first level of reduced detail for the model. The value "-lod 2" is for the second,
+or lowest level of detail for the model.
+
+
10.1.4 "-playerparms 92 155"
+This tells the converter which frame the upper body anims only start (first value) and which frame the lower body only anims start (second value). The numbers here are only used as examples
+
+
10.2 Run the Conversion
+When the qdt file is set up correctly, run the grabber by opening MSDOS command prompt, going to the quake3 directory
+containing the model files and typing in 'q3data [character].qdt'
+
+
11. Review the Model
+Load up Quake 3 Arena. Go to map Q3DM0 (or any map containing a mirror). Bring down the console and type "\model
+[character name]". Hit your Show Score key (default is TAB). You should see your new model here. Tweak the frame rates in
+your animation.cfg file and save them. Type in "\vid_restart" on the console and hit enter to see the changes.
+
+
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Model_Manual/styles/.svn/entries b/install/installs/ReactionPack/install/docs/Model_Manual/styles/.svn/entries
new file mode 100644
index 0000000..6adefcb
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Model_Manual/styles/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/ReactionPack/trunk/install/docs/Model_Manual/styles
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2011-01-20T04:25:31.635016Z
+64
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+q3rad.css
+file
+
+
+
+
+2012-04-01T16:52:35.757495Z
+f65ac3e346f227bd9de19518dacd5ba1
+2011-01-20T04:25:31.635016Z
+64
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+760
+
diff --git a/install/installs/ReactionPack/install/docs/Model_Manual/styles/.svn/text-base/q3rad.css.svn-base b/install/installs/ReactionPack/install/docs/Model_Manual/styles/.svn/text-base/q3rad.css.svn-base
new file mode 100644
index 0000000..e98ae2b
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Model_Manual/styles/.svn/text-base/q3rad.css.svn-base
@@ -0,0 +1,23 @@
+body { font: 12pt "Times New Roman";
+ margin-left: 5mm;
+ margin-right: 5mm;
+ text-align: justify;
+ background: #ffffff;
+ color: #000000 }
+h1 { font: bold 24pt Arial, Helvetica }
+h2 { font: bold italic 18pt Arial, Helvetica }
+.subheading { font: bold 16pt Arial, Helvetica }
+:link {color: blue;
+ text-decoration: none; }
+:visited {color: purple;
+ text-decoration: none; }
+h6 { font: 10pt "Times New Roman" }
+.MsoToc2 { font: bold small-caps 12pt "Times New Roman" }
+.MsoTitle { text-align:center;
+ font: bold 24pt "BankGothic Md BT";
+ letter-spacing:2.5pt }
+.heading { font: italic 10pt "Times New Roman" }
+.subcontents { font: 10pt "Times New Roman" }
+.tip { font: 10pt "Comic Sans MS" }
+.type { font: 10pt "Courier New" }
+.menu { font: 10pt Arial, Helvetica }
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Model_Manual/styles/q3rad.css b/install/installs/ReactionPack/install/docs/Model_Manual/styles/q3rad.css
new file mode 100644
index 0000000..e98ae2b
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Model_Manual/styles/q3rad.css
@@ -0,0 +1,23 @@
+body { font: 12pt "Times New Roman";
+ margin-left: 5mm;
+ margin-right: 5mm;
+ text-align: justify;
+ background: #ffffff;
+ color: #000000 }
+h1 { font: bold 24pt Arial, Helvetica }
+h2 { font: bold italic 18pt Arial, Helvetica }
+.subheading { font: bold 16pt Arial, Helvetica }
+:link {color: blue;
+ text-decoration: none; }
+:visited {color: purple;
+ text-decoration: none; }
+h6 { font: 10pt "Times New Roman" }
+.MsoToc2 { font: bold small-caps 12pt "Times New Roman" }
+.MsoTitle { text-align:center;
+ font: bold 24pt "BankGothic Md BT";
+ letter-spacing:2.5pt }
+.heading { font: italic 10pt "Times New Roman" }
+.subcontents { font: 10pt "Times New Roman" }
+.tip { font: 10pt "Comic Sans MS" }
+.type { font: 10pt "Courier New" }
+.menu { font: 10pt Arial, Helvetica }
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/.svn/entries b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/.svn/entries
new file mode 100644
index 0000000..04dc4af
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/.svn/entries
@@ -0,0 +1,89 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/ReactionPack/trunk/install/docs/Q3AShader_Manual
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2011-01-20T04:25:31.635016Z
+64
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+ch05
+dir
+
+ch06
+dir
+
+styles
+dir
+
+appendix
+dir
+
+q3ashader_manual_files
+dir
+
+ch01
+dir
+
+ch02
+dir
+
+ch03
+dir
+
+ch04
+dir
+
+index.htm
+file
+
+
+
+
+2012-04-01T16:52:35.488480Z
+b1ede4bbd7fa3c9f9529937729cf1815
+2011-01-20T04:25:31.635016Z
+64
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4429
+
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/.svn/text-base/index.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/.svn/text-base/index.htm.svn-base
new file mode 100644
index 0000000..a7220ef
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/.svn/text-base/index.htm.svn-base
@@ -0,0 +1,76 @@
+
+
+Quake III Arena Shader Manual: Table of Contents
+
+
+
+
+
Q3Radiant Shader Manual
+
+
Revision #12
+
+
By Paul Jaquays and Brian Hook
+
+
(with additional material by John Carmack, Christian Antkow, Kevin Cloud, & Adrian Carmack)
+
QERadiant.com thanks John Hutton for re-formating this manual into a more web friendly version
Appendix A: usage of targetShaderName and targetShaderNewName
+
+
+The targetShaderName and targetShaderNewName keys can be used with any entity
+that supports the target key (the entity instance does not actually have to use
+the target key for these new keys to work). If both are defined, then when the
+entity decides to activate its targets, all shaders/textures in the map that
+were originally the same name as the targetShaderName value, will be changed to
+the targetShaderNewName value.
+
+
+
+For example this would make it look like the red light shader is "turning on":
+
+Note that the ORIGINAL shader name is used in both instances, not whatever it
+happens to be currently. Also, of course, this will happen globally. If the
+mapper wanted to affect only a certain set of red lights, he/she would need to
+make a unique shader name to be used with that set.
+
+
+
+The code that supports these keys is in G_UseTargets in g_utils.c.
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/appendix/appA.html b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/appendix/appA.html
new file mode 100644
index 0000000..a20c61a
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/appendix/appA.html
@@ -0,0 +1,60 @@
+
+
+Quake III Arena Shader Manual: Appendix A
+
+
+
+
Q3Radiant Shader Manual
+
+TTimo
+2001.31.08
+
+
+
Appendix A: usage of targetShaderName and targetShaderNewName
+
+
+The targetShaderName and targetShaderNewName keys can be used with any entity
+that supports the target key (the entity instance does not actually have to use
+the target key for these new keys to work). If both are defined, then when the
+entity decides to activate its targets, all shaders/textures in the map that
+were originally the same name as the targetShaderName value, will be changed to
+the targetShaderNewName value.
+
+
+
+For example this would make it look like the red light shader is "turning on":
+
+Note that the ORIGINAL shader name is used in both instances, not whatever it
+happens to be currently. Also, of course, this will happen globally. If the
+mapper wanted to affect only a certain set of red lights, he/she would need to
+make a unique shader name to be used with that set.
+
+
+
+The code that supports these keys is in G_UseTargets in g_utils.c.
+
+
+The Manual for the Q3Radiant editor program contains a section called Creating New Assets that has the necessary information for setting up the files to create your own custom Quake III Arena shaders. It is recommended that you study the scripts in this document and in the individual shader scripts. Pay careful attention to syntax and punctuation. This is where you are most likely to make mistakes.
+
+
+
+The graphic engine for QuakeIII Arena has taken a step forward by putting much more direct control over the surface
+qualities of textures into the hands of designers and artists. In writing this manual, we have tried to define the
+concepts and tools that are used to modify textures in a way that, it is hoped, will be graspable by users who already have basic knowledge ofcomputer graphics but are not necessarily computer programmers. It is not a tutorial, nor was it intended to be one.
+
+
+
+Shaders are short text scripts that define the properties of a surface as it appears and functions in a game world (or compatible editing tool). By convention, the documents that contain these scripts usually has the same name as the texture set which contains the textures being modified (e.g; base, hell, castle, etc,). Several specific script documents have also been created to handle special cases, like liquids, sky and special effects.
+
+
For Quake III Arena,Shader scripts are located in quake3/baseq3/scripts.
+
+
A Quake III Arena shader file consists of a series of surface attribute and rendering instructions formatted
+within braces ("{" and "}"). Below you can see a simple example of syntaxand format for a single process, including the
+Q3MAP keywords or "SurfaceParameters", which follow the first bracket and a single bracketed "stage":
+
+
+The first line is the shader name. Shader names can be up to 63 characters long. The names are often a mirror of
+a pathname to a .tga file without the extension or base dir (/quake3/baseq3 in ourcase), but they do not need to be.
+
+
Shaders that are only going to be referenced by the gamecode, not modeling tools, often are just a single world,
+like"projectionShadow" or "viewBlood".
+
+
Shaders that are used on characters or other polygon models need to mirror a .tga file, which allows the modelers to build with normal textures, then have the special effects show up when the model is loaded into the game.
+
+
Shaders that are placed on surfaces in the map editor commonly mirror a .tga file, but the "qer_editorimage" shader parameter canforce the editor to use an arbitrary image for display.
+
+
Shader pathnames have a case sensitivity issue - on windows, they aren't case sensitive, but on unix they are. Try to always use lowercase for filenames, and always use forward slashes "/" for directory separators.
+
+
+The keywords that affect shaders are divided into two classes. The first class of keywords are global parameters. Some global parameters ("surfaceparms." And all "q3map_" keywords) are processed by Q3MAP, and change physical attributes of the surface that uses the shader. These attributes can affect the player. To see changes in these
+parameters one must re-bsp the map.
+
+
The remaining global keywords, and all Stage Specific Keywords are processed by the renderer. They are appearance changes
+only and have no effect on game play or game mechanics. Changes to any of these attributes will take effect as soon as the game goes to another level or vid_restarts (type command vid_restart in the game console).
+
+
Shader keywords are notcase sensitive.
+
+
IMPORTANT NOTE: some of the shader commands may be order dependent, so it's good practice to place all global shader commands (keywords defined in this section) at the very beginning of the shader and to place shader stages at the end (see various examples).
+
+
+
+Ideally, a designer or artist who is manipulating textures with shader files has a basic understanding of wave forms and knows about mixing colored light (high school physics sort of stuff). If not, there are some concepts you need to have a
+grasp on to make shaders work for you.
+
+
2.4.1 Surface Effects vs. Content Effects vs. Deformation Effects
+Shaders not only modify the visible aspect of textures on a geometry brush, curve, patch or mesh model, but they can also have an effect on both the content, "shape," and apparent movement of those things. A surface effect does nothing to modify
+the shape or content of the brush. Surface effects include glows, transparencies and rgb (red, green, blue) value
+changes. Content shaders affect the way the brush operates in the game world. Examples include water, fog, nonsolid, and
+structural. Deformation effects change the actual shape of the affected brush or curve, and may make it appear to move.
+
+
2.4.2 Power Has a Price
+The shader script gives the designer, artist and programmer a great deal of easily accessible power over the appearance of
+and potential special effects that may be applied to surfaces in the gameworld. But it is power that comes with a price tag
+attached, and the cost is measured in performance speed. Each shader phase that affects the appearance of a texture causes the Q3:Aengine to make another processing pass and redraw the world. Think of it as if you were adding all
+the shader-affected triangles to the total r_speed count for each stage in the shader script. A shader-manipulated texture that is seen through another shader-manipulated texture (e.g. a light in fog) has the effect of adding the total number of passes together for the affected triangles. A light that required two passes seen through a fog that requires one pass will be treated as having to redraw that part of the world three times.
+
+
2.4.3 RGB Color
+
+RGB means "Red, Green, Blue."Mixing red, green and blue light in differing intensities creates the colors in computers and television monitors. This is called additive color (as opposed to the mixing of pigments in paint or colored ink in the printing process, which is subtractive color). In Quake III Arena and most higher-end computer art programs (and the color selector in Windows), the intensities ofthe individual Red, Green and Blue components are expressed as number values. When mixed together on a screen, number values of equal intensity in each component color create a completely neutral (gray) color. The lower the number value (towards 0), the darker the shade. The higher the value, the lighter the shade or the more saturated the color until it reaches a maximum value of 255 (in the art programs). All colors possible on the computer can be expressed as a formula of three numbers. The value for complete black is 0 0 0. The value for complete white is 255 255 255. However, the QuakeIII Arena graphics engine requires that the color range be "normalized" into a range between 0.0 and 1.0.
+
+
2.4.4 Normalization: a Scale of 0 to 1
+The mathematics in Quake III Arena use a scale of 0.0 to 1.0 instead of 0 to 255. Most computer art programs that can express RGB values as numbers use the 0 to 255 scale. To convert numbers, divide each of the artprogram's values for the component colors by 255. The resulting three values are your Quake III Arena formula for that color component. The same holds true for texture coordinates.
+
+
2.4.5 Texture Sizes
+TGA texture files are measured in pixels (picture elements). Textures are measured in powers of 2, with 16 x16 pixels being the smallest (typically) texture in use. Most will be larger. Textures need not be square, so long as both dimensions are powers of 2. Examples include: 32x256, 16x32, 128x16.
+
+
2.4.6 Color Math
+
+In Quake III Arena , colors are changed by mathematical equations worked on the textures by way ofthe scripts or
+"programlets" in the shader file. An equation that adds to or multiplies the number values in atexture causes it to become
+darker. Equations that subtract from or modulate number values in a texture cause it to become lighter. Either equation can change the hue and saturation of a color.
+
+
2.4.7 Measurements
+
+The measurements used in the shaders are in either game units, color units, or texture units.
+
+
· Game unit: A game unit is used by deformations to specify sizes relative to the world. Game units are the same scale we have had since way back in the Wolfensteindays - 8 units equals one foot. The default texture scale used by the Q3Radiant map editor results in two texels for each game unit, but that can be freely changed.
+
+
· Color units: Colors scale the values generated by the texture units to produce lighting effects. A value of 0.0 will be completely black, and a value of 1.0 will leave the texture unchanged. Colors are sometimes specified with a single value to be used across all red, green,and blue channels, or sometimes as separate values for each channel.
+
+
· Texture units: This is the normalized (see above) dimensions of the original texture image (or a previously modified texture at a given stage in the shader pipeline). A full texture, regardless of its original size in texels, has a normalized measurement of 1.0 x 1.0. For normal repeating textures, it is possible to have value greater than 1.0 or less than 0.0, resulting in repeating of the texture. The coordinates are usually assigned by the level editor or
+modeling tools, but you still need to be aware of this for scrolling or turbulent movement of the texture at runtime.
+
+
2.4.8 Waveform Functions
+Many of the shader functions use waveforms to modulate measurements over time. Where appropriate, additional information is provided with wave modulated keyword functions to describe the effect of a particular waveform on that process. Currently there are five waveforms in use in Q3A shaders:
+
+
Sin: Sin standsfor sine wave, a regular smoothly flowing wave ranging from -1 to 1.
+ Triangle: Triangle is a wave with a sharp ascent and a sharp decay, ranging from 0 to 1.It will make a choppy looking wave forms.
+ Square: A squarewave simply switches from -1 to 1 with no in-between.
+ Sawtooth: In the sawtooth wave, the ascent is like a triangle wave from 0 to 1, but the decay cuts off sharply back to 0.
+ Inversesawtooth: This is the reverse of the sawtooth… instant ascent to the peak value (1), then a triangle wave descent to the valley value (0). The phase on this goes from 1.0 to 0.0 instead of 0.0 to 1.0. This wave is particularly usefulfor additive cross-fades.
+
+
Waveforms all have thefollowing properties:
+ <base> Where the wave form begins. Amplitude is measured from this base value.
+ <amplitude> This is the height of the wave created, measured from the base. You will probably need to test and tweak this value to get it correct for each new shader stage. The greater the amplitude, the higher the wave peaks and the deeper the valleys.
+ <phase> This is a normalized value between 0.0 and 1.0. Changing phase to a non-zero value affects the point on the wave at which the wave form initially begins to be plotted. Example: In Sin or Triangle wave, a phase of 0.25 means it begins one fourth (25%) of the way along the curve, or more simply put, it begins at the peak of the wave. A phaseof 0.5 would begin at the point the wave re-crosses the base line. A phase of 0.75 would be at the lowest point of the valley. If only one wave form is being used in a shader, a phase shift will probably not be noticed and phase should have a value of zero (0). However, including two or more stages of the same process in a single shader, but with the phases shifted can be used to create interesting visual effects. Example: using rgbGen in two stages with different colors and a 0.5 difference in phase would cause the manipulated texture to modulate between two distinct colors. Phase changes can also be used when you have two uses of the same effect near each other, and you don't want them to be synchronized. You would write a separate shader for each, changing only the phase value.
+ <freq>Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of 1
+would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10
+seconds.
+
Back | Home | Next
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch01/pg1_1.htm b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch01/pg1_1.htm
new file mode 100644
index 0000000..9f0fd79
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch01/pg1_1.htm
@@ -0,0 +1,126 @@
+
+
+Quake III Arena Shader Manual: Introduction
+
+
+
+
Q3Radiant Shader Manual
+
+
1 Preface: Making Your Own Shaders
+
+The Manual for the Q3Radiant editor program contains a section called Creating New Assets that has the necessary information for setting up the files to create your own custom Quake III Arena shaders. It is recommended that you study the scripts in this document and in the individual shader scripts. Pay careful attention to syntax and punctuation. This is where you are most likely to make mistakes.
+
+
+
+The graphic engine for QuakeIII Arena has taken a step forward by putting much more direct control over the surface
+qualities of textures into the hands of designers and artists. In writing this manual, we have tried to define the
+concepts and tools that are used to modify textures in a way that, it is hoped, will be graspable by users who already have basic knowledge ofcomputer graphics but are not necessarily computer programmers. It is not a tutorial, nor was it intended to be one.
+
+
+
+Shaders are short text scripts that define the properties of a surface as it appears and functions in a game world (or compatible editing tool). By convention, the documents that contain these scripts usually has the same name as the texture set which contains the textures being modified (e.g; base, hell, castle, etc,). Several specific script documents have also been created to handle special cases, like liquids, sky and special effects.
+
+
For Quake III Arena,Shader scripts are located in quake3/baseq3/scripts.
+
+
A Quake III Arena shader file consists of a series of surface attribute and rendering instructions formatted
+within braces ("{" and "}"). Below you can see a simple example of syntaxand format for a single process, including the
+Q3MAP keywords or "SurfaceParameters", which follow the first bracket and a single bracketed "stage":
+
+
+The first line is the shader name. Shader names can be up to 63 characters long. The names are often a mirror of
+a pathname to a .tga file without the extension or base dir (/quake3/baseq3 in ourcase), but they do not need to be.
+
+
Shaders that are only going to be referenced by the gamecode, not modeling tools, often are just a single world,
+like"projectionShadow" or "viewBlood".
+
+
Shaders that are used on characters or other polygon models need to mirror a .tga file, which allows the modelers to build with normal textures, then have the special effects show up when the model is loaded into the game.
+
+
Shaders that are placed on surfaces in the map editor commonly mirror a .tga file, but the "qer_editorimage" shader parameter canforce the editor to use an arbitrary image for display.
+
+
Shader pathnames have a case sensitivity issue - on windows, they aren't case sensitive, but on unix they are. Try to always use lowercase for filenames, and always use forward slashes "/" for directory separators.
+
+
+The keywords that affect shaders are divided into two classes. The first class of keywords are global parameters. Some global parameters ("surfaceparms." And all "q3map_" keywords) are processed by Q3MAP, and change physical attributes of the surface that uses the shader. These attributes can affect the player. To see changes in these
+parameters one must re-bsp the map.
+
+
The remaining global keywords, and all Stage Specific Keywords are processed by the renderer. They are appearance changes
+only and have no effect on game play or game mechanics. Changes to any of these attributes will take effect as soon as the game goes to another level or vid_restarts (type command vid_restart in the game console).
+
+
Shader keywords are notcase sensitive.
+
+
IMPORTANT NOTE: some of the shader commands may be order dependent, so it's good practice to place all global shader commands (keywords defined in this section) at the very beginning of the shader and to place shader stages at the end (see various examples).
+
+
+
+Ideally, a designer or artist who is manipulating textures with shader files has a basic understanding of wave forms and knows about mixing colored light (high school physics sort of stuff). If not, there are some concepts you need to have a
+grasp on to make shaders work for you.
+
+
2.4.1 Surface Effects vs. Content Effects vs. Deformation Effects
+Shaders not only modify the visible aspect of textures on a geometry brush, curve, patch or mesh model, but they can also have an effect on both the content, "shape," and apparent movement of those things. A surface effect does nothing to modify
+the shape or content of the brush. Surface effects include glows, transparencies and rgb (red, green, blue) value
+changes. Content shaders affect the way the brush operates in the game world. Examples include water, fog, nonsolid, and
+structural. Deformation effects change the actual shape of the affected brush or curve, and may make it appear to move.
+
+
2.4.2 Power Has a Price
+The shader script gives the designer, artist and programmer a great deal of easily accessible power over the appearance of
+and potential special effects that may be applied to surfaces in the gameworld. But it is power that comes with a price tag
+attached, and the cost is measured in performance speed. Each shader phase that affects the appearance of a texture causes the Q3:Aengine to make another processing pass and redraw the world. Think of it as if you were adding all
+the shader-affected triangles to the total r_speed count for each stage in the shader script. A shader-manipulated texture that is seen through another shader-manipulated texture (e.g. a light in fog) has the effect of adding the total number of passes together for the affected triangles. A light that required two passes seen through a fog that requires one pass will be treated as having to redraw that part of the world three times.
+
+
2.4.3 RGB Color
+
+RGB means "Red, Green, Blue."Mixing red, green and blue light in differing intensities creates the colors in computers and television monitors. This is called additive color (as opposed to the mixing of pigments in paint or colored ink in the printing process, which is subtractive color). In Quake III Arena and most higher-end computer art programs (and the color selector in Windows), the intensities ofthe individual Red, Green and Blue components are expressed as number values. When mixed together on a screen, number values of equal intensity in each component color create a completely neutral (gray) color. The lower the number value (towards 0), the darker the shade. The higher the value, the lighter the shade or the more saturated the color until it reaches a maximum value of 255 (in the art programs). All colors possible on the computer can be expressed as a formula of three numbers. The value for complete black is 0 0 0. The value for complete white is 255 255 255. However, the QuakeIII Arena graphics engine requires that the color range be "normalized" into a range between 0.0 and 1.0.
+
+
2.4.4 Normalization: a Scale of 0 to 1
+The mathematics in Quake III Arena use a scale of 0.0 to 1.0 instead of 0 to 255. Most computer art programs that can express RGB values as numbers use the 0 to 255 scale. To convert numbers, divide each of the artprogram's values for the component colors by 255. The resulting three values are your Quake III Arena formula for that color component. The same holds true for texture coordinates.
+
+
2.4.5 Texture Sizes
+TGA texture files are measured in pixels (picture elements). Textures are measured in powers of 2, with 16 x16 pixels being the smallest (typically) texture in use. Most will be larger. Textures need not be square, so long as both dimensions are powers of 2. Examples include: 32x256, 16x32, 128x16.
+
+
2.4.6 Color Math
+
+In Quake III Arena , colors are changed by mathematical equations worked on the textures by way ofthe scripts or
+"programlets" in the shader file. An equation that adds to or multiplies the number values in atexture causes it to become
+darker. Equations that subtract from or modulate number values in a texture cause it to become lighter. Either equation can change the hue and saturation of a color.
+
+
2.4.7 Measurements
+
+The measurements used in the shaders are in either game units, color units, or texture units.
+
+
· Game unit: A game unit is used by deformations to specify sizes relative to the world. Game units are the same scale we have had since way back in the Wolfensteindays - 8 units equals one foot. The default texture scale used by the Q3Radiant map editor results in two texels for each game unit, but that can be freely changed.
+
+
· Color units: Colors scale the values generated by the texture units to produce lighting effects. A value of 0.0 will be completely black, and a value of 1.0 will leave the texture unchanged. Colors are sometimes specified with a single value to be used across all red, green,and blue channels, or sometimes as separate values for each channel.
+
+
· Texture units: This is the normalized (see above) dimensions of the original texture image (or a previously modified texture at a given stage in the shader pipeline). A full texture, regardless of its original size in texels, has a normalized measurement of 1.0 x 1.0. For normal repeating textures, it is possible to have value greater than 1.0 or less than 0.0, resulting in repeating of the texture. The coordinates are usually assigned by the level editor or
+modeling tools, but you still need to be aware of this for scrolling or turbulent movement of the texture at runtime.
+
+
2.4.8 Waveform Functions
+Many of the shader functions use waveforms to modulate measurements over time. Where appropriate, additional information is provided with wave modulated keyword functions to describe the effect of a particular waveform on that process. Currently there are five waveforms in use in Q3A shaders:
+
+
Sin: Sin standsfor sine wave, a regular smoothly flowing wave ranging from -1 to 1.
+ Triangle: Triangle is a wave with a sharp ascent and a sharp decay, ranging from 0 to 1.It will make a choppy looking wave forms.
+ Square: A squarewave simply switches from -1 to 1 with no in-between.
+ Sawtooth: In the sawtooth wave, the ascent is like a triangle wave from 0 to 1, but the decay cuts off sharply back to 0.
+ Inversesawtooth: This is the reverse of the sawtooth… instant ascent to the peak value (1), then a triangle wave descent to the valley value (0). The phase on this goes from 1.0 to 0.0 instead of 0.0 to 1.0. This wave is particularly usefulfor additive cross-fades.
+
+
Waveforms all have thefollowing properties:
+ <base> Where the wave form begins. Amplitude is measured from this base value.
+ <amplitude> This is the height of the wave created, measured from the base. You will probably need to test and tweak this value to get it correct for each new shader stage. The greater the amplitude, the higher the wave peaks and the deeper the valleys.
+ <phase> This is a normalized value between 0.0 and 1.0. Changing phase to a non-zero value affects the point on the wave at which the wave form initially begins to be plotted. Example: In Sin or Triangle wave, a phase of 0.25 means it begins one fourth (25%) of the way along the curve, or more simply put, it begins at the peak of the wave. A phaseof 0.5 would begin at the point the wave re-crosses the base line. A phase of 0.75 would be at the lowest point of the valley. If only one wave form is being used in a shader, a phase shift will probably not be noticed and phase should have a value of zero (0). However, including two or more stages of the same process in a single shader, but with the phases shifted can be used to create interesting visual effects. Example: using rgbGen in two stages with different colors and a 0.5 difference in phase would cause the manipulated texture to modulate between two distinct colors. Phase changes can also be used when you have two uses of the same effect near each other, and you don't want them to be synchronized. You would write a separate shader for each, changing only the phase value.
+ <freq>Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of 1
+would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10
+seconds.
+
+Quake III Arena Shader Manual: General Shader Keywords
+
+
+
+
Q3Radiant Shader Manual
+
+
3 General Shader Keywords
+IMPORTANT NOTE: Once again, be aware that some of the shader commands may be order dependent, so it's good practice to place all global shader commands (keywords defined inthis section) at the very beginning of the shader and to place shader stages at the end (see various examples).
+
+
These Keywords are global to a shader and affect all stages. They are also ignored by Q3MAP.
+
+
+
+Specifies how to use the surface as a sky, including an optional far box (stars, moon, etc), optional cloud layers with any shader attributes, and an optional near box (mountains in front of the clouds, etc).
+
+
<farbox> Specifies a set of files to use as an environment box behind all cloudlayers. Specify "-" for no
+farbox, or a file base name. A base name of "env/test" would look for files "env/test_rt.tga", "env/test_lf.tga",
+"env/test_ft.tga", "env/test_bk.tga", "env/test_up.tga", "env/test_dn.tga" to use as the right / left / front / back / up /
+down sides.
+
+ <cloudheight> controls apparent curvature of the cloud layers - lower numbers mean more curvature (and thus more distortion at the horizons). Higher height values create "flatter" skies with less horizon distortion. Think of height
+as the radius of a sphere on which the clouds are mapped. Good ranges are 64 to 256. The default value is 128.
+
+ <nearbox> Specified as farbox, to be alpha blended ontop of the clouds. This has not be tested in a long time, so it probably doesn't actually work. Set to "-" to ignore.
+
+
Design Notes:
+
+
If you are making a map where the sky is seen by looking up most of the time, use a lower cloudheight value. Under those circumstances the tighter curve looks more dynamic. If you are making a map where the sky is seen by looking out windows most of the time or has a map area that is open to the sky on one or more sides, use a higher height to make the clouds seem more natural.
+
+
It is possible to create a sky with up to 8 cloudlayers, but that also means 8 processing passes and a potentially large processing hit.
+
+
Be aware that the skybox does not wrap around the entire world. The "floor" or bottom face of the skybox is not drawn by the game. If a player in the game can see that face, they will see the "hall of mirrors" effect.
+Every surface of a polygon has two sides, a front and a back. Typically, we only see the front or "out" side. For
+example, a solid block you only show the front side. In many applications we see both. For example, in water, you can see both front and a back. The same is true for things like grates and screens.
+
+
To "cull" means to remove. The value parameter determines the type of face culling to apply. The default value is cull front if this keyword is not specified. However for items that should be inverted then the value back should be used. To disable culling, the value disable ornone should be used. Only one cull instruction can be set
+for the shader.
+
+
3.2.1 cull front
+
+The front or "outside" of the polygon is not drawn in the world. This is the default value. It is used if the keyword "cull " appears in the content instructions without a <side>value or if the keyword cull does not appear at all in the shader.
+
+
3.2.2 cull back
+
+Cull back removes the back or "inside" of a polygon from being drawn in the world.
+
+
3.2.3 cull disable, cull none
+Neither side of the polygon is removed. Both sides are drawn in the game. Very useful for making panels or barriers that
+have no depth, such as grates, screens, metal wire fences and so on and for liquid volumes that the player can see from within. Also used for energy fields, sprites, and weapon effects (e.g. plasma).
+
+
Design Notes: For things like grates and screens, put the texture with the cull none property on one face only. On the other faces, use a non-drawing texture.
+
+This function performs a general deformation on the surface's vertexes, changing the actual shape of the surface before drawing the shader passes. You can stack multiple deformVertexes commands to modify positions in more complex ways, making an object move in two dimensions, for instance.
+
+
+
+Designed for water surfaces, modifying the values differently at each point. It accepts the standard wave functions of the type sin,triangle, square, sawtooth orinversesawtooth . The "div" parameter is used to
+control the wave "spread" - a value equal to the tessSizeof the surface is a good default value (tessSize is subdivision size, in game units, used for the shader when seen in the game world).
+
+
3.3.2
+deformVertexes normal <div> <func>
+<base><amplitude ~0.1-~0.5> <frequency
+~1.0-~4.0>
+
+This deformation affects the normals of a vertex without actually moving it, which will effect later shader options like
+lighting and especially environment mapping. If the shader stages don't use normals in any of their calculations, there will
+be novisible effect.
+
+
Design Notes: Putting values of 0.1 to 0.5 in Amplitude and 1.0 to 4.0 in the Frequency can produce some satisfying results. Some things that have been done with it: A small fluttering bat, falling leaves, rain, flags.
+
+This forces a bulge to move along the given s and t directions. Designed for use on curved pipes.
+
+
Specific parameter definitions for deform keywords:
+
+ <div> This is roughly defined as the size of the waves that occur. It is measured in game units. Smaller
+values create agreater density of smaller wave forms occurring in a given area. Larger values create a lesser density of waves, or otherwise put, the appearance of larger waves. To look correct this value should closely correspond to the value (in pixels) set for tessSize (tessellation size) of the texture. A value of 100.0 is a good default value (which means your tessSize should be close to that for things tolook "wavelike").
+
+ <func> This is the type of wave form being created. Sin stands for sine wave, a regular smoothly flowing
+wave. Triangle is a wave with a sharp ascent and a sharp decay. It will make a choppy looking wave forms. A square
+wave is simply on or off for the period of the frequency with no in between. The sawtooth wave has the ascent of a triangle wave, but has the decay cut off sharply like a square wave. An inversesawtooth wave reverses this.
+
+ <base> This is the distance, in game units that the apparent surface of the texture is displaced from the
+actual surface of the brush as placed in the editor. Apositive value appears above the brush surface. A negative value appears below the brush surface. An example of thisis the Quad effect, which essentially is a shell with a positive base value to stand it away from the model surface and a 0 (zero) value for amplitude.
+
+ <amplitude> The distance that the deformation moves away from the base value. See Wave Forms in the introduction for a description of amplitude.
+
+ <phase> SeeWave Forms in the introduction for a description of phase)
+ <frequency> See Wave Forms in the introduction for a description of frequency)
+
+
Design Note: The div and amplitude parameters, when used in conjunction with liquid volumes like water should take into consideration how much the water will be moving. A large ocean area would have have massive swells (big div values) that rose and fell dramatically (big amplitude values). While a small, quiet pool may move very little.
+
+This keyword is used to make a brush, curve patch or md3model appear to move together as a unit. The <x> <y>
+and <z> values are the distance and direction in game units the object appears to move relative to it's point of origin in the map.
+
+
The <func> <base> <amplitude><phase> and <freq> values are the same as found in other wave
+form manipulations.
+
+
The product of the function modifies the values x, y, and z.Therefore, if you have an amplitude of 5 and an x value of 2, the object will travel 10 units from its point of origin along the x axis. This results in a total of 20 units of motion along the x axis, since the amplitude is the variation both above and below the base.
+
+
It must be noted that an object made with this shader does not actually change position, it only appears to.
+
+
Design Note: If an object is made up of surfaces with different shaders, all must have matching deformVertexes move values or the object will appear to tear itself apart.
+
+
3.3.5
+DeformVertexes autosprite
+
+This function can be used to make any given triangle quad (pair of triangles that form a square rectangle) automatically behave like a sprite without having to make it a separate entity. This means that the "sprite" on which the texture is placed will rotate to always appear at right angles to the player's view as a sprite would. Any four-sided brush side, flat patch, or pair of triangles in an .md3 model can have the autosprite effect on it. The brush face containing a texture with this shader keyword must besquare.
+
+
Design Note :This is best used on objects that would appear the same regardless of viewing angle. An example might be a glowing light flare.
+
+
3.3.6
+DeformVertexes autosprite2
+
+Is a slightly modified "sprite" that only rotates around the middle of its longest axis. This allows you to make a
+pillar of fire that you can walk around, or an energy beam stretched across the room.
+
+
Note: you must also specify "surfaceparm fog" to cause q3map to identify the surfaces inside the volume. Fogparms only
+describes how to render the fog on the surfaces.
+
+
<red value> <green value> <blue value> These are normalized values. A good computer art program should give you the RGB values for a color. To obtain the values that define fog color for Quake III Arena, divide the desired color's Red, Green and Blue values by 255 to obtain three normalized numbers within the 0.0 to 1.0 range.
+
+ <distance toopaque> This is the distance, in game units, until the fog becomes totally opaque, as measured from the point of view of the observer. By making the height of the fog brush shorter than the distance to opaque, the apparent density of the fog can be reduced (because it never reaches the depth at which full opacity occurs).
+
+
The fog volume can only have one surface visible (from outside the fog).
+
Fog must be made of one brush. It cannot be made of adjacent brushes.
+
Fog brushes must be axial. This means that only square or rectangular brushes may contain fog, and those must have their edges drawn along the axes of the map grid (all 90 degree angles).
+
+
+
Design Notes:
+
+
If a water texture contains a fog parameter, it must be treated as if it were a fog texture when in use.
+
If a room is to be filled completely with a fog volume,it can only be entered through one surface (and still have the fog function correctly).
+
Additional shader passes may be placed on a fog brush, as with other brushes.
+This causes the texture to ignore user-set values for the r_picmip cvar command. The image will always be high
+resolution. Example: Used to keep images and text in the heads up display from blurring when user optimizes the game graphics.
+
+
+This implies nopicmip, but also prevents the generation of any lower resolution mipmaps for use by the 3d card. This will
+cause the texture to alias when it gets smaller, but there are some cases where you would rather have this than a blurry image. Sometimes thin slivers of triangles force things to very low mipmap levels, which leave a few constant pixels on otherwise scrolling special effects.
+
+
+Surfaces rendered with the polygonOffset keyword are rendered slightly off the polygon's surface. This is typically
+used for wall markings and "decals." The distance between the offset and the polygon is fixed. It is not a variable in QuakeIII Arena.
+
+
+Specifies that this texture is the surface for a portal or mirror. In the game map, a portal entity must be placed directly in front of the texture (within 64 game units). All this does is set "sortportal", so it isn't needed if you specify
+that explicitly.
+
+
+Use this keyword to fine-tune the depth sorting of shaders as they are compared against other shaders in the game world. The
+basic concept is that if there is a question or a problem with shaders drawing in the wrong order against each other, this allows the designer to create a hierarchy ofwhich shader draws in what order.
+
+
The default behavior is to put all blended shaders in sort "additive" and all other shaders in sort "opaque", so you only
+need to specify this when you are trying to work around a sorting problem with multiple transparent surfaces in a scene.
+
+
The value here can be either a numerical value or one of the keywords in the following list (listed in order of ascending priority):
+
+
portal (1): This surface is a portal, it draws over every other shader seen inside the portal, but before anything in the main view.
+
+ Sky (2): Typically, the sky is the farthest surface in the game world. Drawing this after other opaque surfaces can be an optimization on some cards. This currently has the wrong value for this purpose, so it doesn't do much of anything.
+
+ Opaque (3):This surface is opaque (rarely needed since this is the default with noblendfunc)
+
+ Banner (6) :Transparent, but very close to walls.
+
+ Underwater (8): Draw behind normal transparent surfaces.
+
+ Additive (9): normal transparent surface (default for shaders with blendfuncs)
+ nearest (16):this shader should always sort closest to the viewer, e.g. muzzle flashes and blend blobs
+
Back | Home | Next
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch02/pg2_1.htm b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch02/pg2_1.htm
new file mode 100644
index 0000000..369f145
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch02/pg2_1.htm
@@ -0,0 +1,222 @@
+
+
+Quake III Arena Shader Manual: General Shader Keywords
+
+
+
+
Q3Radiant Shader Manual
+
+
3 General Shader Keywords
+IMPORTANT NOTE: Once again, be aware that some of the shader commands may be order dependent, so it's good practice to place all global shader commands (keywords defined inthis section) at the very beginning of the shader and to place shader stages at the end (see various examples).
+
+
These Keywords are global to a shader and affect all stages. They are also ignored by Q3MAP.
+
+
+
+Specifies how to use the surface as a sky, including an optional far box (stars, moon, etc), optional cloud layers with any shader attributes, and an optional near box (mountains in front of the clouds, etc).
+
+
<farbox> Specifies a set of files to use as an environment box behind all cloudlayers. Specify "-" for no
+farbox, or a file base name. A base name of "env/test" would look for files "env/test_rt.tga", "env/test_lf.tga",
+"env/test_ft.tga", "env/test_bk.tga", "env/test_up.tga", "env/test_dn.tga" to use as the right / left / front / back / up /
+down sides.
+
+ <cloudheight> controls apparent curvature of the cloud layers - lower numbers mean more curvature (and thus more distortion at the horizons). Higher height values create "flatter" skies with less horizon distortion. Think of height
+as the radius of a sphere on which the clouds are mapped. Good ranges are 64 to 256. The default value is 128.
+
+ <nearbox> Specified as farbox, to be alpha blended ontop of the clouds. This has not be tested in a long time, so it probably doesn't actually work. Set to "-" to ignore.
+
+
Design Notes:
+
+
If you are making a map where the sky is seen by looking up most of the time, use a lower cloudheight value. Under those circumstances the tighter curve looks more dynamic. If you are making a map where the sky is seen by looking out windows most of the time or has a map area that is open to the sky on one or more sides, use a higher height to make the clouds seem more natural.
+
+
It is possible to create a sky with up to 8 cloudlayers, but that also means 8 processing passes and a potentially large processing hit.
+
+
Be aware that the skybox does not wrap around the entire world. The "floor" or bottom face of the skybox is not drawn by the game. If a player in the game can see that face, they will see the "hall of mirrors" effect.
+Every surface of a polygon has two sides, a front and a back. Typically, we only see the front or "out" side. For
+example, a solid block you only show the front side. In many applications we see both. For example, in water, you can see both front and a back. The same is true for things like grates and screens.
+
+
To "cull" means to remove. The value parameter determines the type of face culling to apply. The default value is cull front if this keyword is not specified. However for items that should be inverted then the value back should be used. To disable culling, the value disable ornone should be used. Only one cull instruction can be set
+for the shader.
+
+
3.2.1 cull front
+
+The front or "outside" of the polygon is not drawn in the world. This is the default value. It is used if the keyword "cull " appears in the content instructions without a <side>value or if the keyword cull does not appear at all in the shader.
+
+
3.2.2 cull back
+
+Cull back removes the back or "inside" of a polygon from being drawn in the world.
+
+
3.2.3 cull disable, cull none
+Neither side of the polygon is removed. Both sides are drawn in the game. Very useful for making panels or barriers that
+have no depth, such as grates, screens, metal wire fences and so on and for liquid volumes that the player can see from within. Also used for energy fields, sprites, and weapon effects (e.g. plasma).
+
+
Design Notes: For things like grates and screens, put the texture with the cull none property on one face only. On the other faces, use a non-drawing texture.
+
+This function performs a general deformation on the surface's vertexes, changing the actual shape of the surface before drawing the shader passes. You can stack multiple deformVertexes commands to modify positions in more complex ways, making an object move in two dimensions, for instance.
+
+
+
+Designed for water surfaces, modifying the values differently at each point. It accepts the standard wave functions of the type sin,triangle, square, sawtooth orinversesawtooth . The "div" parameter is used to
+control the wave "spread" - a value equal to the tessSizeof the surface is a good default value (tessSize is subdivision size, in game units, used for the shader when seen in the game world).
+
+
3.3.2
+deformVertexes normal <div> <func>
+<base><amplitude ~0.1-~0.5> <frequency
+~1.0-~4.0>
+
+This deformation affects the normals of a vertex without actually moving it, which will effect later shader options like
+lighting and especially environment mapping. If the shader stages don't use normals in any of their calculations, there will
+be novisible effect.
+
+
Design Notes: Putting values of 0.1 to 0.5 in Amplitude and 1.0 to 4.0 in the Frequency can produce some satisfying results. Some things that have been done with it: A small fluttering bat, falling leaves, rain, flags.
+
+This forces a bulge to move along the given s and t directions. Designed for use on curved pipes.
+
+
Specific parameter definitions for deform keywords:
+
+ <div> This is roughly defined as the size of the waves that occur. It is measured in game units. Smaller
+values create agreater density of smaller wave forms occurring in a given area. Larger values create a lesser density of waves, or otherwise put, the appearance of larger waves. To look correct this value should closely correspond to the value (in pixels) set for tessSize (tessellation size) of the texture. A value of 100.0 is a good default value (which means your tessSize should be close to that for things tolook "wavelike").
+
+ <func> This is the type of wave form being created. Sin stands for sine wave, a regular smoothly flowing
+wave. Triangle is a wave with a sharp ascent and a sharp decay. It will make a choppy looking wave forms. A square
+wave is simply on or off for the period of the frequency with no in between. The sawtooth wave has the ascent of a triangle wave, but has the decay cut off sharply like a square wave. An inversesawtooth wave reverses this.
+
+ <base> This is the distance, in game units that the apparent surface of the texture is displaced from the
+actual surface of the brush as placed in the editor. Apositive value appears above the brush surface. A negative value appears below the brush surface. An example of thisis the Quad effect, which essentially is a shell with a positive base value to stand it away from the model surface and a 0 (zero) value for amplitude.
+
+ <amplitude> The distance that the deformation moves away from the base value. See Wave Forms in the introduction for a description of amplitude.
+
+ <phase> SeeWave Forms in the introduction for a description of phase)
+ <frequency> See Wave Forms in the introduction for a description of frequency)
+
+
Design Note: The div and amplitude parameters, when used in conjunction with liquid volumes like water should take into consideration how much the water will be moving. A large ocean area would have have massive swells (big div values) that rose and fell dramatically (big amplitude values). While a small, quiet pool may move very little.
+
+This keyword is used to make a brush, curve patch or md3model appear to move together as a unit. The <x> <y>
+and <z> values are the distance and direction in game units the object appears to move relative to it's point of origin in the map.
+
+
The <func> <base> <amplitude><phase> and <freq> values are the same as found in other wave
+form manipulations.
+
+
The product of the function modifies the values x, y, and z.Therefore, if you have an amplitude of 5 and an x value of 2, the object will travel 10 units from its point of origin along the x axis. This results in a total of 20 units of motion along the x axis, since the amplitude is the variation both above and below the base.
+
+
It must be noted that an object made with this shader does not actually change position, it only appears to.
+
+
Design Note: If an object is made up of surfaces with different shaders, all must have matching deformVertexes move values or the object will appear to tear itself apart.
+
+
3.3.5
+DeformVertexes autosprite
+
+This function can be used to make any given triangle quad (pair of triangles that form a square rectangle) automatically behave like a sprite without having to make it a separate entity. This means that the "sprite" on which the texture is placed will rotate to always appear at right angles to the player's view as a sprite would. Any four-sided brush side, flat patch, or pair of triangles in an .md3 model can have the autosprite effect on it. The brush face containing a texture with this shader keyword must besquare.
+
+
Design Note :This is best used on objects that would appear the same regardless of viewing angle. An example might be a glowing light flare.
+
+
3.3.6
+DeformVertexes autosprite2
+
+Is a slightly modified "sprite" that only rotates around the middle of its longest axis. This allows you to make a
+pillar of fire that you can walk around, or an energy beam stretched across the room.
+
+
Note: you must also specify "surfaceparm fog" to cause q3map to identify the surfaces inside the volume. Fogparms only
+describes how to render the fog on the surfaces.
+
+
<red value> <green value> <blue value> These are normalized values. A good computer art program should give you the RGB values for a color. To obtain the values that define fog color for Quake III Arena, divide the desired color's Red, Green and Blue values by 255 to obtain three normalized numbers within the 0.0 to 1.0 range.
+
+ <distance toopaque> This is the distance, in game units, until the fog becomes totally opaque, as measured from the point of view of the observer. By making the height of the fog brush shorter than the distance to opaque, the apparent density of the fog can be reduced (because it never reaches the depth at which full opacity occurs).
+
+
The fog volume can only have one surface visible (from outside the fog).
+
Fog must be made of one brush. It cannot be made of adjacent brushes.
+
Fog brushes must be axial. This means that only square or rectangular brushes may contain fog, and those must have their edges drawn along the axes of the map grid (all 90 degree angles).
+
+
+
Design Notes:
+
+
If a water texture contains a fog parameter, it must be treated as if it were a fog texture when in use.
+
If a room is to be filled completely with a fog volume,it can only be entered through one surface (and still have the fog function correctly).
+
Additional shader passes may be placed on a fog brush, as with other brushes.
+This causes the texture to ignore user-set values for the r_picmip cvar command. The image will always be high
+resolution. Example: Used to keep images and text in the heads up display from blurring when user optimizes the game graphics.
+
+
+This implies nopicmip, but also prevents the generation of any lower resolution mipmaps for use by the 3d card. This will
+cause the texture to alias when it gets smaller, but there are some cases where you would rather have this than a blurry image. Sometimes thin slivers of triangles force things to very low mipmap levels, which leave a few constant pixels on otherwise scrolling special effects.
+
+
+Surfaces rendered with the polygonOffset keyword are rendered slightly off the polygon's surface. This is typically
+used for wall markings and "decals." The distance between the offset and the polygon is fixed. It is not a variable in QuakeIII Arena.
+
+
+Specifies that this texture is the surface for a portal or mirror. In the game map, a portal entity must be placed directly in front of the texture (within 64 game units). All this does is set "sortportal", so it isn't needed if you specify
+that explicitly.
+
+
+Use this keyword to fine-tune the depth sorting of shaders as they are compared against other shaders in the game world. The
+basic concept is that if there is a question or a problem with shaders drawing in the wrong order against each other, this allows the designer to create a hierarchy ofwhich shader draws in what order.
+
+
The default behavior is to put all blended shaders in sort "additive" and all other shaders in sort "opaque", so you only
+need to specify this when you are trying to work around a sorting problem with multiple transparent surfaces in a scene.
+
+
The value here can be either a numerical value or one of the keywords in the following list (listed in order of ascending priority):
+
+
portal (1): This surface is a portal, it draws over every other shader seen inside the portal, but before anything in the main view.
+
+ Sky (2): Typically, the sky is the farthest surface in the game world. Drawing this after other opaque surfaces can be an optimization on some cards. This currently has the wrong value for this purpose, so it doesn't do much of anything.
+
+ Opaque (3):This surface is opaque (rarely needed since this is the default with noblendfunc)
+
+ Banner (6) :Transparent, but very close to walls.
+
+ Underwater (8): Draw behind normal transparent surfaces.
+
+ Additive (9): normal transparent surface (default for shaders with blendfuncs)
+ nearest (16):this shader should always sort closest to the viewer, e.g. muzzle flashes and blend blobs
+Quake III Arena Shader Manual: Specific Shader Keywords
+
+
+
+
Q3Radiant Shader Manual
+
+
4 Q3MAP Specific Shader Keywords
+These keywords change the physical nature of the textures and the brushes that are marked with them. Changing any of these values will require the map to be re-compiled. These are global and affect the entire shader.
+
+
+For consistency's sake, this really should have been called q3map_tessSize. But it wasn't. The tessSize shader controls
+the tessellation size (how finely a surface is chopped up in to triangles), in game units, of the surface. This is only
+applicable to solid brushes, not curves, and is generally only used on surfaces that are flagged with the deformVertexes keyword. Abuse of this can create a huge number of triangles. This happens during q3map processing, so maps must be reprocessed for changes to take effect.
+
+
Design Note: It can also be used on tesselating surfaces to make sure that tesselations arelarge, and thus, less costly in terms of triangles created.
+This allows a brush to use a different shader when you are inside it looking out. By way of example, this would allow a water brush (or other) surfaces to have a different sort order (see sort above) or appearance when seen from the inside.
+
+
+Use this shader in the global keyword commands whenever the tcMod scale function is used in one of the later render stages. Many problems with getting shader effects to work across multiple adjacent brushes are a result of the way q3map optimizes texture precision. This option resolves that, but at the expense of some precision of the textures when they are far away from the origin of the map.
+
+
+This keyword in a sky shader will create the illusion of light cast into a map by a single, infinitely distance light source (sun, moon, hellish fire, etc.). This is only processed during the lighting phase of q3map.
+
+
<red><green> <blue> Color is described by three normalized rgbvalues. Color will be normalized to a 0.0 to 1.0 range, so it doesn't matter what range you use.
+
+ <intensity> is the brightness of the generated light. A value of 100 is a fairly bright sun. The
+intensity of the light falls off with angle but not distance.
+
+ <degrees> is the angle relative to the directions on the map file. A setting of 0 degrees equals east. 90
+isnorth, 180 is west and 270 is south.
+
+ <elevation> is the distance, measured in degrees from the horizon (z value of zero in the map file). An
+elevation of 0 is sunrise/sunset. An elevation of 90 is noon.
+
+
DESIGN NOTE: Sky shaders should probably still have aq3map_surfacelight value. The "sun" gives a strong directional light, but doesn't necessarily give the fill light needed to soften and illuminate shadows. Skies with clouds should probably have a weaker q3map_sunvalue and a higher q3map_surfacelight value. Heavy clouds diffuse light and weaken shadows. The opposite is true of a cloudless or nearly cloudless sky. Insuch cases, the "sun" or "moon" will cast stronger, shadows that have a greater degree of contrast.
+
+
Design Trick: Not certain what color formula you want to use for the sun's light? Try this. Create a light entity. Use the Q3Radiant editor's color selection tools to pick a color. The light's _color key's value will be the normalized RGB formula. Copy it from the value line in the editor (CTRL+c) and paste it into your shader.
+
+The texture gives off light equal to the <light value> set for it. The relative surface area of the texture in the world affects the actual amount of light that appears to be radiated. To give off what appears to be the same amount
+of light, a smaller texture must be significantly brighter than a larger texture. Unless the qer_lightimage keyword is used to select a different source for the texture's light color information, the color of the light will be the averaged color of the texture.
+
+
+The keyword q3map_lightimage generates lighting from the average color of the TGA image specified by the
+q3map_lightimage.
+
+
The keyword sequence for generating light on a q3map_surfacelight should be ordered as follows:
+
+
q3map_lightimage ; (the texture providing the light and the color of the light)
+
qer_editorimage ; (the editor-only image used to select the source map for the texture)
+
the average color of the light emitted from the shader is calculated from the lightimage.)
+
+
The reason q3map_lightimageis specified for the light in the example below, is because the blend map is predominantly yellow, and the designer wanted more yellow light to be emitted from the light.
+
+
Example: Taking light from another source texture
+
+
+textures/eerie/ironcrosslt2_10000
+{
+q3map_lightimagetextures/gothic_light/ironcrosslt2.blend.tga
+// this TGA is the source for the color of the blended light
+
+qer_editorimagetextures/gothic_light/ironcrosslt2.tga
+//base TGA (used because the shader is used with several
+// different light values
+
+q3map_surfacelight 10000
+//emitted light value of10,000
+
+{
+map $lightmap
+//source texture is affected by the lightmap
+rgbGen identity
+// this command handles the overbright bits created by "sunlight"
+// in the game
+}
+{
+maptextures/gothic_light/ironcrosslt2.tga
+blendFunc filter
+rgbGen identity
+}
+{
+maptextures/gothic_light/ironcrosslt2.blend.tga
+blendFunc add
+}
+}
+
+This allows the user to define how large, or small to make the subdivisions (triangles) in a textured surface, particularly aimed at light-emitting textures like skies. It defaults to 120 game units, but can be made larger (256 or 512) for sky boxes or smaller for light surfaces at the bottoms of cracks. This can be a dominant factor in processing time for q3map lighting.
+
+
All surfaceparm keywords are preceded by the word surfaceparm as follows: surfaceparm fogor surfaceparm noimpact.
+
+
4.8.1 alphashadow
+This keyword applied to a texture on a brush, patch or model will cause the lighting phase of the q3map process to use the texture's alpha channel as a mask for casting static shadows in the game world.
+
+
Design Note: Alphashadow does not work well with fine line detail on a texture. Fine lines may not cast acceptable shadows. It appears to work best with well-defined silhouettes and wider lines within the texture. Most of our tattered banners use this to cast tattered shadows.
+
+
4.8.2 areaportal
+A brush marked with this keyword functions as an area portal, a break in the Q3MAP tree. It is typically placed on a very thin brush placed inside a door entity (but is not a part of that entity). The intent is to block the game from processing
+surface triangles located behind it when the door is closed. It is also used by the BSPC (bot area file creation compiler) in the same manner as a clusterportal. The brush must touch all the structural brushes surrounding the
+areaportal.
+
+
4.8.3 clusterportal
+A brush marked with this keyword function creates a subdivision of the area file (.aas) used by the bots for navigation. It
+is typically placed in locations that are natural breaks in a map, such a sentrances to halls, doors, tunnels, etc. The intent is keep the bot from having to process the entire map at once. As with the the areaportal parameter, the affected brush must touch all the structural brushes surrounding the areaportal.
+
+
4.8.4 donotenter
+Read as "do not enter." Like clusterportal, this is a bot-only property. A brush marked with donotenter will not affect
+non-bot players, but bots will not enter it. It should be used only when bots appear to have difficulty navigating around some map features.
+
+
4.8.5 flesh
+This will cue different sounds (in a similar manner to metalsteps) and cause blood to appear instead of bullet impact flashes.
+
+
4.8.6 fog
+Fog defines the brush as being a "fog" brush. This is a Q3MAP function that chops and identifies all geometry inside the
+brush. The General shader keyword fogparms must also be specified to tell how to draw the fog.
+
+
4.8.7 lava
+
+
Assigns to the texture the game properties set for lava. This affects both the surface and the content of a brush.
+
+
4.8.8 metalsteps
+The player sounds as if he is walking on clanging metal steps or gratings. Other than specifiying flesh, metalsteps, nosteps, or default (i.e. specify nothing) it is currently not possible for a designer to create or assign a specific sound routine to a texture. Note: If no sound is set for a texture, then the default footsteps sound routines are heard.
+
+
4.8.9 nodamage
+The player takes no damage if he falls onto a texture with this surfaceparm
+
+
4.8.10 nodlight
+Read as "No DeeLight". A texture containing this parameter will not be affected or lit by dynamic lights, such as
+weapon effects. And example in Quake III Arena would be solid lava.
+
+
4.8.11 nodraw
+A texture marked with nodraw will not visually appear in the game world. Most often used for triggers, clip brushes, origin
+brushes, and so on.
+
+
4.8.12 nodrop
+When a player dies inside a volume (brush) marked nodrop, no weapon is dropped. The intend use isfor "Pits of Death." Have a kill trigger inside a nodrop volume, and when the players die here, they won't drop their weapons. The intent is to prevent unnecessary polygon pileups on the floors of pits.
+
+
4.8.13 noimpact
+World entities will not impact on this texture. No explosions occur when projectiles strike this surface and no marks
+will be left on it. Sky textures are usually marked with this texture so those projectiles will not hit the sky and leave
+marks.
+
+
4.8.14 nomarks
+Projectiles will explode upon contact with this surface, but will not leave marks. Blood will also not mark this surface.
+This is useful to keep lights from being temporarily obscured by battle damage.
+
+
Design Note: Use this on any surface with a deformVertexes keyword. Otherwise, the marks will appear on the unmodified surface location of the texture with the surface wriggles and squirms through the marks.
+
+
4.8.15 nolightmap
+This texture does not have a lightmap phase. It is not affected by the ambient lighting of the world around it. It does not
+require the addition of an rgbGen identity keyword in that stage.
+
+
4.8.16 nosteps
+The player makes no sound when walking on this texture.
+
+
4.8.17 nonsolid
+This attribute indicates a brush, which does not block the movement of entities in the game world. It applied to
+triggers, hint brushes and similar brushes. This affects the content of a brush.
+
+
4.8.18 origin
+Used on the "origin" texture. Rotating entities need to contain an origin brush in their construction. The brush must be
+rectangular (or square). The origin point is the exact center of the origin brush.
+
+
4.8.19 playerclip
+Blocks player movement through a nonsolid texture. Other game world entities can pass through a brush marked
+playerclip. The intended use for this is to block the player but not block projectiles like rockets.
+
+
4.8.20 slick
+This surfaceparm included in a texture should give it significantly reduced friction.
+
+
4.8.21 slime
+Assigns to the texture the game properties for slime. This affects both the surface and the content of a brush.
+
+
4.8.22 structural
+This surface attribute causes a brush to be seen by the Q3MAP process as a possible break-point in a BSP tree. It is used
+as a part of the shader for the "hint" texture. Generally speaking, any opaque texture not marked as "detail" is, by
+default, structural, so you shouldn't need to specify this.
+
+
4.8.23 trans
+Tells q3map that pre-computed visibility should not be blocked by this surface. Generally, any shaders that have blendfuncs
+should be marked as surfaceparm trans.
+
+
4.8.24 water
+Assigns to the texture the game properties for water.
+
Back | Home | Next
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch03/pg3_1.htm b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch03/pg3_1.htm
new file mode 100644
index 0000000..57a8ea9
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch03/pg3_1.htm
@@ -0,0 +1,197 @@
+
+
+Quake III Arena Shader Manual: Specific Shader Keywords
+
+
+
+
Q3Radiant Shader Manual
+
+
4 Q3MAP Specific Shader Keywords
+These keywords change the physical nature of the textures and the brushes that are marked with them. Changing any of these values will require the map to be re-compiled. These are global and affect the entire shader.
+
+
+For consistency's sake, this really should have been called q3map_tessSize. But it wasn't. The tessSize shader controls
+the tessellation size (how finely a surface is chopped up in to triangles), in game units, of the surface. This is only
+applicable to solid brushes, not curves, and is generally only used on surfaces that are flagged with the deformVertexes keyword. Abuse of this can create a huge number of triangles. This happens during q3map processing, so maps must be reprocessed for changes to take effect.
+
+
Design Note: It can also be used on tesselating surfaces to make sure that tesselations arelarge, and thus, less costly in terms of triangles created.
+This allows a brush to use a different shader when you are inside it looking out. By way of example, this would allow a water brush (or other) surfaces to have a different sort order (see sort above) or appearance when seen from the inside.
+
+
+Use this shader in the global keyword commands whenever the tcMod scale function is used in one of the later render stages. Many problems with getting shader effects to work across multiple adjacent brushes are a result of the way q3map optimizes texture precision. This option resolves that, but at the expense of some precision of the textures when they are far away from the origin of the map.
+
+
+This keyword in a sky shader will create the illusion of light cast into a map by a single, infinitely distance light source (sun, moon, hellish fire, etc.). This is only processed during the lighting phase of q3map.
+
+
<red><green> <blue> Color is described by three normalized rgbvalues. Color will be normalized to a 0.0 to 1.0 range, so it doesn't matter what range you use.
+
+ <intensity> is the brightness of the generated light. A value of 100 is a fairly bright sun. The
+intensity of the light falls off with angle but not distance.
+
+ <degrees> is the angle relative to the directions on the map file. A setting of 0 degrees equals east. 90
+isnorth, 180 is west and 270 is south.
+
+ <elevation> is the distance, measured in degrees from the horizon (z value of zero in the map file). An
+elevation of 0 is sunrise/sunset. An elevation of 90 is noon.
+
+
DESIGN NOTE: Sky shaders should probably still have aq3map_surfacelight value. The "sun" gives a strong directional light, but doesn't necessarily give the fill light needed to soften and illuminate shadows. Skies with clouds should probably have a weaker q3map_sunvalue and a higher q3map_surfacelight value. Heavy clouds diffuse light and weaken shadows. The opposite is true of a cloudless or nearly cloudless sky. Insuch cases, the "sun" or "moon" will cast stronger, shadows that have a greater degree of contrast.
+
+
Design Trick: Not certain what color formula you want to use for the sun's light? Try this. Create a light entity. Use the Q3Radiant editor's color selection tools to pick a color. The light's _color key's value will be the normalized RGB formula. Copy it from the value line in the editor (CTRL+c) and paste it into your shader.
+
+The texture gives off light equal to the <light value> set for it. The relative surface area of the texture in the world affects the actual amount of light that appears to be radiated. To give off what appears to be the same amount
+of light, a smaller texture must be significantly brighter than a larger texture. Unless the qer_lightimage keyword is used to select a different source for the texture's light color information, the color of the light will be the averaged color of the texture.
+
+
+The keyword q3map_lightimage generates lighting from the average color of the TGA image specified by the
+q3map_lightimage.
+
+
The keyword sequence for generating light on a q3map_surfacelight should be ordered as follows:
+
+
q3map_lightimage ; (the texture providing the light and the color of the light)
+
qer_editorimage ; (the editor-only image used to select the source map for the texture)
+
the average color of the light emitted from the shader is calculated from the lightimage.)
+
+
The reason q3map_lightimageis specified for the light in the example below, is because the blend map is predominantly yellow, and the designer wanted more yellow light to be emitted from the light.
+
+
Example: Taking light from another source texture
+
+
+textures/eerie/ironcrosslt2_10000
+{
+q3map_lightimagetextures/gothic_light/ironcrosslt2.blend.tga
+// this TGA is the source for the color of the blended light
+
+qer_editorimagetextures/gothic_light/ironcrosslt2.tga
+//base TGA (used because the shader is used with several
+// different light values
+
+q3map_surfacelight 10000
+//emitted light value of10,000
+
+{
+map $lightmap
+//source texture is affected by the lightmap
+rgbGen identity
+// this command handles the overbright bits created by "sunlight"
+// in the game
+}
+{
+maptextures/gothic_light/ironcrosslt2.tga
+blendFunc filter
+rgbGen identity
+}
+{
+maptextures/gothic_light/ironcrosslt2.blend.tga
+blendFunc add
+}
+}
+
+This allows the user to define how large, or small to make the subdivisions (triangles) in a textured surface, particularly aimed at light-emitting textures like skies. It defaults to 120 game units, but can be made larger (256 or 512) for sky boxes or smaller for light surfaces at the bottoms of cracks. This can be a dominant factor in processing time for q3map lighting.
+
+
All surfaceparm keywords are preceded by the word surfaceparm as follows: surfaceparm fogor surfaceparm noimpact.
+
+
4.8.1 alphashadow
+This keyword applied to a texture on a brush, patch or model will cause the lighting phase of the q3map process to use the texture's alpha channel as a mask for casting static shadows in the game world.
+
+
Design Note: Alphashadow does not work well with fine line detail on a texture. Fine lines may not cast acceptable shadows. It appears to work best with well-defined silhouettes and wider lines within the texture. Most of our tattered banners use this to cast tattered shadows.
+
+
4.8.2 areaportal
+A brush marked with this keyword functions as an area portal, a break in the Q3MAP tree. It is typically placed on a very thin brush placed inside a door entity (but is not a part of that entity). The intent is to block the game from processing
+surface triangles located behind it when the door is closed. It is also used by the BSPC (bot area file creation compiler) in the same manner as a clusterportal. The brush must touch all the structural brushes surrounding the
+areaportal.
+
+
4.8.3 clusterportal
+A brush marked with this keyword function creates a subdivision of the area file (.aas) used by the bots for navigation. It
+is typically placed in locations that are natural breaks in a map, such a sentrances to halls, doors, tunnels, etc. The intent is keep the bot from having to process the entire map at once. As with the the areaportal parameter, the affected brush must touch all the structural brushes surrounding the areaportal.
+
+
4.8.4 donotenter
+Read as "do not enter." Like clusterportal, this is a bot-only property. A brush marked with donotenter will not affect
+non-bot players, but bots will not enter it. It should be used only when bots appear to have difficulty navigating around some map features.
+
+
4.8.5 flesh
+This will cue different sounds (in a similar manner to metalsteps) and cause blood to appear instead of bullet impact flashes.
+
+
4.8.6 fog
+Fog defines the brush as being a "fog" brush. This is a Q3MAP function that chops and identifies all geometry inside the
+brush. The General shader keyword fogparms must also be specified to tell how to draw the fog.
+
+
4.8.7 lava
+
+
Assigns to the texture the game properties set for lava. This affects both the surface and the content of a brush.
+
+
4.8.8 metalsteps
+The player sounds as if he is walking on clanging metal steps or gratings. Other than specifiying flesh, metalsteps, nosteps, or default (i.e. specify nothing) it is currently not possible for a designer to create or assign a specific sound routine to a texture. Note: If no sound is set for a texture, then the default footsteps sound routines are heard.
+
+
4.8.9 nodamage
+The player takes no damage if he falls onto a texture with this surfaceparm
+
+
4.8.10 nodlight
+Read as "No DeeLight". A texture containing this parameter will not be affected or lit by dynamic lights, such as
+weapon effects. And example in Quake III Arena would be solid lava.
+
+
4.8.11 nodraw
+A texture marked with nodraw will not visually appear in the game world. Most often used for triggers, clip brushes, origin
+brushes, and so on.
+
+
4.8.12 nodrop
+When a player dies inside a volume (brush) marked nodrop, no weapon is dropped. The intend use isfor "Pits of Death." Have a kill trigger inside a nodrop volume, and when the players die here, they won't drop their weapons. The intent is to prevent unnecessary polygon pileups on the floors of pits.
+
+
4.8.13 noimpact
+World entities will not impact on this texture. No explosions occur when projectiles strike this surface and no marks
+will be left on it. Sky textures are usually marked with this texture so those projectiles will not hit the sky and leave
+marks.
+
+
4.8.14 nomarks
+Projectiles will explode upon contact with this surface, but will not leave marks. Blood will also not mark this surface.
+This is useful to keep lights from being temporarily obscured by battle damage.
+
+
Design Note: Use this on any surface with a deformVertexes keyword. Otherwise, the marks will appear on the unmodified surface location of the texture with the surface wriggles and squirms through the marks.
+
+
4.8.15 nolightmap
+This texture does not have a lightmap phase. It is not affected by the ambient lighting of the world around it. It does not
+require the addition of an rgbGen identity keyword in that stage.
+
+
4.8.16 nosteps
+The player makes no sound when walking on this texture.
+
+
4.8.17 nonsolid
+This attribute indicates a brush, which does not block the movement of entities in the game world. It applied to
+triggers, hint brushes and similar brushes. This affects the content of a brush.
+
+
4.8.18 origin
+Used on the "origin" texture. Rotating entities need to contain an origin brush in their construction. The brush must be
+rectangular (or square). The origin point is the exact center of the origin brush.
+
+
4.8.19 playerclip
+Blocks player movement through a nonsolid texture. Other game world entities can pass through a brush marked
+playerclip. The intended use for this is to block the player but not block projectiles like rockets.
+
+
4.8.20 slick
+This surfaceparm included in a texture should give it significantly reduced friction.
+
+
4.8.21 slime
+Assigns to the texture the game properties for slime. This affects both the surface and the content of a brush.
+
+
4.8.22 structural
+This surface attribute causes a brush to be seen by the Q3MAP process as a possible break-point in a BSP tree. It is used
+as a part of the shader for the "hint" texture. Generally speaking, any opaque texture not marked as "detail" is, by
+default, structural, so you shouldn't need to specify this.
+
+
4.8.23 trans
+Tells q3map that pre-computed visibility should not be blocked by this surface. Generally, any shaders that have blendfuncs
+should be marked as surfaceparm trans.
+
+
4.8.24 water
+Assigns to the texture the game properties for water.
+
+Quake III Arena Shader Manual: Editor Specific Shader Instructions
+
+
+
+
Q3Radiant Shader Manual
+
+
5 Editor specific shader instructions
+These instructions only affect the texture when it is seen in the Q3Radiant editor. They should be grouped with the surface
+parameters but ahead of them in sequence.
+
+
+This keyword creates a shader name in memory, but in the editor, it displays the TGA art image specified in qer_editorimage (in the example below this is textures/eerie/lavahell.tga).
+
+
The editor maps a texture using the size attributes of the TGA file used for the editor image. When that editor image represents a shader, any texture used in any of the shader stages will be scaled up or down to the dimensions of the editor image. If a 128x128 pixel image is used to represent the shader in the editor, then a 256x256 image used in a later stage will be shrunk to fit. A 64x64 image would be stretched to fit. Be sure to check this on bouncy, acceleration, and power-uppads placed on surfaces other than 256 x 256. Use tcMod scale to change the size of the stretched
+texture. Rememberthat tcMod scale 0.5 0.5 will double your image, while tcMod scale 2 2will halve it.
+
+
Design Notes: The base_light and gothic_light shaders contain numerous uses of this. It can be very useful for making different light styles (mostly to change the light brightnesses) without having to create a new piece of TGA art for each new shader.
+
+
+
textures/liquids/lavahell2//path and name of new texture
+{
+qer_editorimagetextures/eerie/lavahell.tga
+//based on this
+qer_nocarve
+//cannot be cut by CSG subtract
+surfaceparm noimpact
+//projectiles do not hitit
+surfaceparm lava
+//has the game properties of lava
+surfaceparm nolightmap
+//environment lighting does not affect
+q3map_surfacelight 3000
+//light is emitted
+tessSize 256
+//relatively large triangles
+cull disable
+//no sides are removed
+deformVertexes wave 100sin 5 5 .5 0.02
+fogparms 0.85191420.309723 0.0 128 128
+{
+maptextures/eerie/lavahell.tga
+//base texture artwork
+tcMod turb .25 0.2 1 0.02
+//texture is subjected to turbulence
+tcMod scroll 0.1 0.1
+//the turbulence is scrolled
+}
+}
+
+This parameter defines the percentage of transparency that a brush will have when seen in the editor (no effect on game
+rendering a tall). It can have a positive value between 0 and 1. The higher the value, the less transparent the texture.
+Example: qer_trans 0.2 means the brush is 20% opaque and nearly invisible.
+
+
Back | Home | Next
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch04/pg4_1.htm b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch04/pg4_1.htm
new file mode 100644
index 0000000..52ce0ef
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch04/pg4_1.htm
@@ -0,0 +1,64 @@
+
+
+Quake III Arena Shader Manual: Editor Specific Shader Instructions
+
+
+
+
Q3Radiant Shader Manual
+
+
5 Editor specific shader instructions
+These instructions only affect the texture when it is seen in the Q3Radiant editor. They should be grouped with the surface
+parameters but ahead of them in sequence.
+
+
+This keyword creates a shader name in memory, but in the editor, it displays the TGA art image specified in qer_editorimage (in the example below this is textures/eerie/lavahell.tga).
+
+
The editor maps a texture using the size attributes of the TGA file used for the editor image. When that editor image represents a shader, any texture used in any of the shader stages will be scaled up or down to the dimensions of the editor image. If a 128x128 pixel image is used to represent the shader in the editor, then a 256x256 image used in a later stage will be shrunk to fit. A 64x64 image would be stretched to fit. Be sure to check this on bouncy, acceleration, and power-uppads placed on surfaces other than 256 x 256. Use tcMod scale to change the size of the stretched
+texture. Rememberthat tcMod scale 0.5 0.5 will double your image, while tcMod scale 2 2will halve it.
+
+
Design Notes: The base_light and gothic_light shaders contain numerous uses of this. It can be very useful for making different light styles (mostly to change the light brightnesses) without having to create a new piece of TGA art for each new shader.
+
+
+
textures/liquids/lavahell2//path and name of new texture
+{
+qer_editorimagetextures/eerie/lavahell.tga
+//based on this
+qer_nocarve
+//cannot be cut by CSG subtract
+surfaceparm noimpact
+//projectiles do not hitit
+surfaceparm lava
+//has the game properties of lava
+surfaceparm nolightmap
+//environment lighting does not affect
+q3map_surfacelight 3000
+//light is emitted
+tessSize 256
+//relatively large triangles
+cull disable
+//no sides are removed
+deformVertexes wave 100sin 5 5 .5 0.02
+fogparms 0.85191420.309723 0.0 128 128
+{
+maptextures/eerie/lavahell.tga
+//base texture artwork
+tcMod turb .25 0.2 1 0.02
+//texture is subjected to turbulence
+tcMod scroll 0.1 0.1
+//the turbulence is scrolled
+}
+}
+
+This parameter defines the percentage of transparency that a brush will have when seen in the editor (no effect on game
+rendering a tall). It can have a positive value between 0 and 1. The higher the value, the less transparent the texture.
+Example: qer_trans 0.2 means the brush is 20% opaque and nearly invisible.
+
+
+Quake III Arena Shader Manual: Stage Specific Keywords
+
+
+
+
Q3Radiant Shader Manual
+
+
6 Stage Specific Keywords
+Stage specifications only affect rendering. Changing any keywords or values within a stage will usually take effect as soon
+as a vid_restart is executed. Q3MAP ignores stage specific keywords entirely.
+
+
A stage can specify a texture map, a color function, an alpha function, a texture coordinate function, a blend function, and a few other rasterization options.
+
+
+Specifies the source texture map (a 24 or 32-bit TGA file) used for this stage. The texture may or may not contain alpha
+channel information. The special keywords $lightmap and $whiteimage may be substituted in lieu of an actual
+texture map name. In those cases, the texture named in the first line of the shader becomes the texture that supplies the light mapping data for the process.
+
+
$lightmap
+This is the overall lightmap for the game world. It is calculated during the Q3MAP process. It is the initial color
+data found in the framebuffer. Note: due to the use of overbright bits in light calculation, the keyword rgbGen
+identity must accompany all $lightmap instructions.
+
+
$whiteimage
+This is used for specular lighting on MD3 models. This is a white image generated internally by the game. This image can
+be used in lieu of $lightmap or an actual texture map if, for example, you wish for the vertex colors to come
+through unaltered.
+
+
6.1.2 Clampmap <texturepath>
+Dictates that this stage should clamp texture coordinates instead of wrapping them. During a stretch function, the area,
+which the texture must cover during a wave cycle, enlarges and decreases. Instead of repeating a texture multiple times
+during enlargement (or seeing only a portion of the texture during shrinking) the texture dimensions increase or contract accordingly. This is only relevant when using something like deformTexCoordParms to stretch/compress texture coordinates for a specific special effect. Remember that the Quake III Arena engine normalizes all texture coordinates (regardless of actual texture size) into a scale of 0.0 to1.0.
+
+
Proper Alignment: When using clampTexCoords make sure the texture is properly aligned on the brush. The
+clampTexCoords function keeps the image from tiling. However, the editor doesn't represent this properly and shows a tiled image. Therefore, what appears to be the correct position may be offset. This is very apparent onanything with a tcMod rotate and clampTexCoords function.
+
+
AvoidingDistortion: When seen at a given distance (which can vary, depending onhardware and the size of the texture), the compression phase of a stretchfunction will cause a "cross"-like visual artifact to form on the modified texture due to the way that textures are reduced. This occurs because the texture undergoing modification lacks sufficient "empty space" around the displayed (non-black) part of the texture (see figure 2a). To compensate for this, make the non-zero portion of the texture substantially smaller (50% of maximum stretched size -- see figure 2b)than the dimensions of the texture. Then, write a scaling function (tcScale) into the appropriate shader phase, to enlarge the image to the desired proportion.
+
+
The shaders for the bouncy pads (in the sfx.shader file) show the stretch function in use, including the scaling of the
+stretched texture:
+
+
Example: UsingclampTexCoords to control a stretching texture
+
+
+The surfaces in the game can be animated by displaying asequence of 1 to 8 frames (separate texture maps). These animations
+are affected by other keyword effects in the same and later shader stages.
+
+
<Frequency>: the number of times that the animation cycle will repeat within a one second time period. The
+larger the value, the more repeats within a second. Animations that should last for more than a second need to be expressed as decimal values.
+
+ <texture1> …<texture8>: the texture path/texture name for each animation frame must be
+explicitly listed. Up to eight frames (eight separate .tga files) can be used to make an animated sequence. Each frame is
+displayed for an equal subdivision of the frequency value.
+
+
Example:AnimMap 0.25 animMap 10textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tgatextures/sfx/b_flame4.tga would be a 4 frame animated sequence, calling each frame in sequence over a cycle length of 4 seconds. Each frame would be displayed for 1 second before the next one is displayed. The cycle repeats after the last frame in sequence is shown.
+
+
Design Notes: To make a texture image appear for an unequal (longer) amount of time (compared to other frames), repeat that frame more than once in the sequence.
+Blend functions are the keyword commands that tell the Quake III Arena graphic engine's renderer how graphic layers are to be mixed together.
+
+
6.2.1 Simplified blend functions:
+The most common blend functions are set up here as simple commands, and should be used unless you really know what you are
+doing.
+
+
6.2.1.1 blendfunc add
+ This is a shorthand command for blendfunc gl_one gl_one. Effects like fire and energy are additive.
+
+
6.2.1.2 blendfunc filter
+ This is a shorthand command that can be substituted for either blendfunc gl_dst_color gl_zero or blendfunc gl_zero gl_src_color. A filter will always result in darker pixels than what is behind it, but it can also remove color selectively. Lightmaps are filters.
+
+
6.2.1.3 blendfunc blend
+ Shorthand for blendfunc gl_src_alphagl_one_minus_src_alpha. This is conventional transparency, where part of the background is mixed with part of the texture.
+
+
6.2.2 Explicit blend functions:
+Getting a handle on this concept is absolutely key to understanding all shader manipulation of graphics.
+
+
BlendFunc or "Blend Function" is the equation at the core of processing shader graphics. The formula reads as follows:
+
+
Source is usually the RGB color data in a texture TGA file (remember it's all numbers) modified by any rgbgen and alphagen. In the shader, the source is generally identified by command MAP, followed by the name of the image.
+
+
Destination is the color data currently existing in the frame buffer.
+
+
Rather than think of the entire texture as a whole, it maybe easier to think of the number values that correspond to a single pixel, because that is essentially what the computer is processing … one pixel of the bit map at a time.
+
+
The process for calculating the final look of a texture in place in the game world begins with the precalculated lightmap for the area where the texture will be located. This data is in the frame buffer. That is to say, it is the initial data in the Destination. In an unmanipulated texture (i.e. one without a special shader script), color information from the texture is combined with the lightmap. In a shader-modified texture, the $lightmap stage must be present for the lightmap to be included in the calculation of the final texture appearance.
+
+
Each pass or "stage" of blending is combined (in a cumulative manner) with the color data passed onto it by the
+previous stage. How that data combines together depends on the values chosen for the Source Blends and Destination Blends at each stage. Remember it's numbers that are being mathematically combined together that are ultimately interpreted as colors.
+
+
A general rule is that any Source Blend other than GL_ONE (or GL_SRC_ALPHA where the alpha channel is entirely white) will cause the Source to become darker.
+
+
6.2.3 Source Blend <srcBlend>
+The following values are valid for the Source Blend part of the equation.
+
+
GL_ONE This is the value 1. When multiplied by the Source, the value stays the same the value of the color information does not change.
+
+ GL_ZERO This is the value 0. When multiplied by the Source, all RGB data in the Source becomes Zero (essentially black).
+
+ GL_DST_COLOR This is the value of color data currently in the Destination (frame buffer). The value of that information depends on the information supplied by previous stages.
+
+ GL_ONE_MINUS_DST_COLOR This is nearly the same as GL_DST_COLOR except that the value for each component color
+is inverted by subtracting it from one. (,i.e. R = 1.0 - DST.R, G = 1.0 - DST.G, B = 1.0 - DST.B, etc.)
+
+ GL_SRC_ALPHA The TGA file being used for the Source data must have an alpha channel in addition to its RGB channels (for a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the Source.
+
+ GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one.(i.e. A=1.0 - SRC.A)
+
+
6.2.4 Destination Blend <dstBlend>
+The following values are valid for the Destination Blend part of the equation.
+
+
GL_ONE This is the value 1. When multiplied by the Destination, the value stays the same the value of the color information does not change.
+
+ GL_ZERO This is the value 0. When multiplied by the Destination,all RGB data in the Destinationbecomes Zero (essentially black).
+
+ GL_SRC_COLOR This is the value of color data currently in the Source (which is the texture being manipulated here).
+
+ GL_ONE_MINUS_SRC_COLOR This is the value of color data currently in Source, but subtracted from one(i.e.
+inverted).
+
+ GL_SRC_ALPHA The TGA file being used for the Source data must have an alpha channel in addition to its RGB channels (four a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the Source.
+
+ GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one. (i.e. A=1.0 - SRC.A).
+
+
Doing the Math: The Final Result
+
+ The product of the Source side of the equation is added to the product of the Destination side of the equation. The sum is then placed into the frame buffer to become the Destination information for the next stage. Ultimately, the equation creates a modified color value that is used by other functions to define what happens in the texture when it is displayed in the game world.
+
+
6.2.5 Default Blend Function
+If no blendFunc is specified then no blending will take place. A warning is generated if any stage after the first stage does not have a blendFunc specified.
+
+
+There are two color sources for any given shader, the texture file and the vertex colors. Output at any given time will be equal to TEXTURE multiplied by VERTEXCOLOR. Most of the time VERTEXCOLORwill default to white (which is a normalized value of 1.0), so output will be TEXTURE (this usually lands in the Sourceside of the shader equation). Sometimes you do the opposite and use TEXTURE = WHITE, but this is only commonly used when doing specular lighting on entities (i.e. shaders that level designers will probably never create
+
+
The most common reason to use rgbGen is to pulsate something. This means that the VERTEXCOLOR will oscillate between two
+values, and that value will be multiplied (darkening) the texture.
+
+
If no rgbGen is specified, either "identityLighting" or"identity" will be selected, depending on which blend modes are
+used.
+
+
Valid <func> parameters are wave, identity, identityLighting, entity, oneMinusEntity, fromVertex, and
+lightingDiffuse.
+
+
6.3.1 RgbGen identityLighting
+Colors will be (1.0,1.0,1.0) if running without overbright bits (NT, linux, windowed modes), or (0.5, 0.5, 0.5) if running
+with overbright. Overbright allows a greater color range at the expense of a loss of precision. Additive and blended stages
+will get this by default.
+
+
6.3.2 rgbGen identity
+Colors are assumed to be all white (1.0,1.0,1.0). All filters stages (lightmaps, etc) will get this by default.
+
+
+Colors are generated using the specified waveform. An affected texture with become darker and lighter, but will not change
+hue. Hue stays constant. Note that the rgb values for color will not go below 0 (black) orabove 1 (white). Valid waveforms are sin, triangle, square, sawtooth and inversesawtooth.
+
+
<func> Waveforms and their effects:
+
+ Sin: color flows smoothly through changes.
+
+ Triangle: color changes at a constant rate and spends noappreciable time at peaks and valleys.
+
+ Square: color alternates instantly between its peak and valley values.
+
+ Sawtooth: With a positive frequency value, the color changes at aconstant rate to the peak then instantly drops to its valley value.
+
+ Inversesawtooth: An inverse sawtooth wave will reverse this, making the ascent immediate (like a square wave) and the decay fall off like a triangle wave.
+
+ <base> Baseline value. The initial RGB formula of a color (normalilzed).
+
+ <amp> Amplitude. This is the degree of change from the baseline value. In some cases you will want
+values outside the 0.0 to 1.0 range, but it will induce clamping (holding at the maximum or minimum value for a time period)
+instead of continuous change.
+
+ <phase> See the explanation for phase under the waveforms heading of Key Concepts.
+
+ <freq> Frequency. This is a value (NOT normalized) that indicates peaks per second.
+
+
6.3.4 RgbGen entity
+Colors are grabbed from the entity's modulate field. This isused for things like explosions.
+
+
Design Note: This keyword would probably not be used by a level designer.
+
+
6.3.5 rgbGen oneMinusEntity
+Colors are grabbed from 1.0 minus the entity's modulate field.
+
+
Design Note: This keyword would probably not be used by a level designer.
+
+
6.3.6 rgbGen Vertex
+Colors are filled in directly by the data from the map or model files.
+
+
Design Note: rgbGen vertex should be used when you want the RGB values to be computed for a static model (i.e. mapobject) in the world using precomputed static lighting from Q3BSP. This would be used on things like
+the gargoyles, the portal frame, skulls, and other decorative MD3s put into the Quake III Arena world.
+
+
6.3.7 rgbGen oneMinusVertex
+As rgbGen vertex, but inverted.
+
+
Design Note: This keyword would probably not be used by a level designer
+
+
6.3.8 rgbGen lightingDiffuse
+Colors are computed using a standard diffuse lighting equation. It uses the vertex normals to illuminate the object correctly.
+
+
Design Note: -rgbGen lightingDiffuse is used when you want the RGB values to be computed for a dynamic model (i.e. non-map object) in the world using regular in-game lighting. For example, you would specify on shaders for items, characters, weapons, etc.
+The alpha channel can be specified like the rgbchannels. If not specified, it defaults to 1.0.
+
+
6.4.1 AlphaGen portal
+This rendering stage keyword is used in conjunction with the surface parameter keyword portal. The function
+accomplishes the "fade" that causes the scene in the portal to fade from view. Specifically, it means "Generate alpha values
+based on the distance from the viewer to the portal." Use alphaGen portal on the last rendering pass.
+
+
+Specifies how texture coordinates are generated and where they come from. Valid functions are base,lightmap and environment.
+
+
<base> = base texture coordinates from the original art.
+ <lightmap> = lightmap texture coordinates
+ <environment> = Make this object environment mapped.
+
+
+Specifies how texture coordinates are modified after they are generated. The valid functions for tcMod are rotate,
+scale,scroll, stretch and transform.Transform is a function generally reserved for use by programmers who suggest that designers leave it alone. When using multiple tcMod functions during a stage, place the scroll command last in order, because it performs a mod operation to save precision, and that can disturb other operations. Texture coordinates are modified in the order in which tcMods are specified. In otherwords, if you see:
+
+
tcMod scale 0.5 0.5
+ tcMod scroll 1 1
+
+
Then the texture coordinates will be scaledthenscrolled.
+
+
6.6.1 tcMod rotate <degrees per per second>
+This keyword causes the texture coordinates to rotate. The value is expressed in degrees rotated each second. A positive value means clockwise rotation. A negative value means counterclockwise rotation. For example "tcMod rotate 5" would
+rotate texture coordinates 5 degrees each second in a clockwise direction. The texture rotates around the center
+point of the texture map, so you are rotating a texture with a single repetition, be careful to center it on the brush (unless off-center rotation is desired).
+
+
6.6.2 tcMod scale <sScale> <tScale>
+Resizes (enlarges or shrinks) the texture coordinates bymultiplying them against the given factors of <sScale>
+and <tScale). The values "s" and "t"conform to the "x" and "y" values (respectively) as they are found in the original texture TGA. The values for sScale and tScale are NOT normalized. This means that a value greater than 1.0 will increase the size of thetexture. A positive value less than one will reduce the texture to a fraction of its size and cause it to repeat within the same area as the original texture (Note: see clampTexCoords for ways to control this).;
+
+
Example:tcMod scale 0.5 2 would cause the texture to repeat twice along its width, but expand to twice its height (in which case half of the texture would be seen in the same area as the original)
+
+
6.6.3 tcMod scroll <sSpeed> <tSpeed>
+Scrolls the texture coordinates with the given speeds. The values "s" and "t" conform to the "x" and "y" values
+(respectively) as they are found in the original textureTGA. The scroll speed is measured in "textures" per second. A "texture" is the dimension of the texture being modified and includes any previous shader modifications to the original TGA). A negative s value would scroll the texture to the left. A negative t value would scroll the texture down.
+
+
Example: tcMod scroll 0.5 -0.5 moves the texture down and right (relative to the TGA files original coordinates) at the rate of a half texture each second of travel.
+
+
This should be the LAST tcMod in a stage. Otherwise there maybe popping or snapping visual effects in some shaders.
+
+
+
+Stretches the texture coordinates with the given function. Stretching is defined as stretching the texture coordinate away from the center of the polygon and then compressing it towards the center of the polygon.
+
+
<base>: A base value of one is the original dimension of the texture when it reaches the stretch stage.
+Inserting other values positive or negative in this variable will produce unknown effects.
+
+ <amplitude>: This is the measurement of distance the texture will stretch from the base size. It is
+measured, like scroll, in textures. A value of 1 here will double the size of the texture at its peak.
+
+ <phase>: See the explanation for phase under the deform vertexes keyword.
+
+ <frequency>: this is wave peaks per second.
+
+ Wave Functions <func>
+
+ Sin wave: the texture expands smoothly to its peak dimension and then shrinks smoothly to its valley dimension in a flowing manner.
+
+ Triangle wave: The textures stretch at a constant rate and spend no appreciable time at the peak or valley points.
+
+ Square wave: The texture is shown at its peak for the duration of the frequency and then at its valley for the
+duration of the frequency.
+
+ Sawtooth: the texture stretches like a triangle wave until it reaches a peak, then instantly drops to the valley, as in a square wave.
+
+ Inversesawtooth: this is the reverse of the sawtooth wave.
+
+
Applies turbulence to the texture coordinate. Turbulence is a back and forth churning and swirling effect on the texture.
+
+
The parameters for this shader are defined as follows:
+
+
+
<base> Currently undefined.
+
+ <amplitude> This is essentially the intensity of the disturbance or twisting and squiggling of the texture.
+
+ <phase> See the explanation for phase under the deformvertexes keyword.
+
+ <freq> Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of one
+would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10
+seconds.
+
+
+This controls the depth comparison function used while rendering. The default is "lequal" (Less than or equal to)
+where any surface that is at the same depth or closer of an existing surface is drawn. This is used for textures with
+transparency or translucency. Under some circumstances you may wish to use "equal", e.g. for light-mapped grates that are alpha tested (it is also used for mirrors).
+
+
+By default, writes to the depth buffer when depthFunc passes will happen for opaque surfaces and not for translucent surfaces. Blended surfaces can have the depth writes forced with this function.
+
+
+This feature was not used in Quake III Arena maps, but should still function.
+Designates this stage as a detail texture stage, which means that if the c_var, r_detailtextures, is set to 0 then this stage will be ignored (detail will not be displayed). This keyword, by itself, does not affect rendering at all. If you do put in a detail texture, it has to conform to very specific rules. Specifically, the blendFunc:
+
+
blendFuncGL_DST_COLOR GL_SRC_COLOR
+
+
This is also the simple blend function: blendfuncfilter
+
+
And the average intensity of the detail texture itself must be around 127.
+
+
Detail is used to blend fine pixel detail back into a base texture whose scale has been increased significantly. When detail iswritten into a set of stage instructions, it allows the stage to be disabled by the c_var console command setting "r_detailtextures 0".
+
+
A texture whose scale has been increased beyond a 1:1 ratio tends not to have very high frequency content. In other words, one texel can cover a lot of real estate. Frequency is also known as "detail." Lack of detail can appear acceptable if the player never has the opportunity to see the texture at close range. But seen close up, such textures look glaringly wrong within the sharp detail of the Quake III Arena environment. A detail texture solves this problem by taking a noisy "detail" pattern (a tiling texture that appears to have a great deal of surface roughness) and applying it to the base texture at a very densely packed scale (that is, reduced from its normal size). This is done programmatically in the
+shader, and does not require modification of the base texture. Note that if the detail texture is the same size and scale as the base texture that you may as well just add the detail directly to the base texture. The theory is that the detail texture's scale will be so high compared to the base texture (e.g.; 9 detail texels fitting into 1 base texel) that it is literally impossible to fit that detail into the base texture directly.
+
+
For this to work, the rules are as follows:
+
+
+
+
the lightmap must be rendered first. This is because the subsequent detail texture will be modifying the lightmap in the framebuffer directly;
+
the detail texture must be rendered next since it modifies the lightmap in the framebuffer;
+
the base texture must be rendered last;
+
the detail texture MUST have a mean intensity around 127-129. If it does not then it will modify the displayed texture's perceived brightness in the world;
+
the detail shader stage MUSThave the "detail" keyword or it will not be disabled if the user uses the "r_detailtextures 0" setting;
+
the detail stage MUST use "blendFunc GL_DST_COLOR GL_SRC_COLOR". Any other BlendFunc will cause mismatches in brightness between detail and non-detail views.;
+
the detail stage should scale its textures by some amount (usually between 3 and 12) using "tcMod" to control density. This roughly corresponds to coarseness. A very large number, such as 12, will give very fine detail, however that detail will disappear VERY quickly as the viewer moves away fromthe wall since it will be MIP mapped away. A very small number, e.g. 3, gives diminishing returns since not enough is brought in when the user gets very close. I'm currently using values between 6 and 9.5. You should use non-integral numbers as much as possible to avoid seeing repeating patterns.
+
detail textures add one pass of overdraw, so there is a definite performance hit .
+
detail textures can be shared, so designers may wish to define only a very small handful of detail textures for common surfaces such as rocks, etc.
+
+
An example (non-existent) detailshader is as follows:
+
Example: Texture with Detail
+
+
+textures/bwhtest/foo
+{
+// draw the lightmap first
+{
+map $lightmap
+rgbGen identity
+}
+// modify the lightmap in the framebuffer by
+// a highly compressed detail texture
+{
+map textures/details/detail01.tga
+blendFunc GL_DST_COLOR GL_SRC_COLOR
+// YOU MUST USE THIS!!
+detail
+// for the detail to be disabled, this must be present
+tcMod scale 9.1 9.2
+}
+// now slap on the base texture
+{
+map textures/castle/blocks11b.tga
+blendFunc filter
+}
+}
+
+Determines the alpha test function used when rendering this map. Valid values are GT0, LT128, and GE128. These
+correspond to "GREATER THAN 0", "LESS THAN 128", and "GREATER THAN OR EQUAL TO 128". This function is used when determining if a pixel should be written to the framebuffer. For example, if GT0 is specified, the only the portions of the texture map with corresponding alpha values greater than zero will be written to the framebuffer. By default alpha testing is disabled.
+
+
Both alpha testing and normal alpha blending can be used to get textures that have see-through parts. The difference is that alphaFunc is an all-or-nothing test, while blending smoothly blends between opaque and translucent at pixel edges. Alpha test can also be used with depthwrite, allowing other effects to be conditionally layered on top of just the opaque pixels by setting depthFunc to equal.
+
+
Back | Home | Next
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch05/pg5_1.htm b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch05/pg5_1.htm
new file mode 100644
index 0000000..c6748c1
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch05/pg5_1.htm
@@ -0,0 +1,483 @@
+
+
+Quake III Arena Shader Manual: Stage Specific Keywords
+
+
+
+
Q3Radiant Shader Manual
+
+
6 Stage Specific Keywords
+Stage specifications only affect rendering. Changing any keywords or values within a stage will usually take effect as soon
+as a vid_restart is executed. Q3MAP ignores stage specific keywords entirely.
+
+
A stage can specify a texture map, a color function, an alpha function, a texture coordinate function, a blend function, and a few other rasterization options.
+
+
+Specifies the source texture map (a 24 or 32-bit TGA file) used for this stage. The texture may or may not contain alpha
+channel information. The special keywords $lightmap and $whiteimage may be substituted in lieu of an actual
+texture map name. In those cases, the texture named in the first line of the shader becomes the texture that supplies the light mapping data for the process.
+
+
$lightmap
+This is the overall lightmap for the game world. It is calculated during the Q3MAP process. It is the initial color
+data found in the framebuffer. Note: due to the use of overbright bits in light calculation, the keyword rgbGen
+identity must accompany all $lightmap instructions.
+
+
$whiteimage
+This is used for specular lighting on MD3 models. This is a white image generated internally by the game. This image can
+be used in lieu of $lightmap or an actual texture map if, for example, you wish for the vertex colors to come
+through unaltered.
+
+
6.1.2 Clampmap <texturepath>
+Dictates that this stage should clamp texture coordinates instead of wrapping them. During a stretch function, the area,
+which the texture must cover during a wave cycle, enlarges and decreases. Instead of repeating a texture multiple times
+during enlargement (or seeing only a portion of the texture during shrinking) the texture dimensions increase or contract accordingly. This is only relevant when using something like deformTexCoordParms to stretch/compress texture coordinates for a specific special effect. Remember that the Quake III Arena engine normalizes all texture coordinates (regardless of actual texture size) into a scale of 0.0 to1.0.
+
+
Proper Alignment: When using clampTexCoords make sure the texture is properly aligned on the brush. The
+clampTexCoords function keeps the image from tiling. However, the editor doesn't represent this properly and shows a tiled image. Therefore, what appears to be the correct position may be offset. This is very apparent onanything with a tcMod rotate and clampTexCoords function.
+
+
AvoidingDistortion: When seen at a given distance (which can vary, depending onhardware and the size of the texture), the compression phase of a stretchfunction will cause a "cross"-like visual artifact to form on the modified texture due to the way that textures are reduced. This occurs because the texture undergoing modification lacks sufficient "empty space" around the displayed (non-black) part of the texture (see figure 2a). To compensate for this, make the non-zero portion of the texture substantially smaller (50% of maximum stretched size -- see figure 2b)than the dimensions of the texture. Then, write a scaling function (tcScale) into the appropriate shader phase, to enlarge the image to the desired proportion.
+
+
The shaders for the bouncy pads (in the sfx.shader file) show the stretch function in use, including the scaling of the
+stretched texture:
+
+
Example: UsingclampTexCoords to control a stretching texture
+
+
+The surfaces in the game can be animated by displaying asequence of 1 to 8 frames (separate texture maps). These animations
+are affected by other keyword effects in the same and later shader stages.
+
+
<Frequency>: the number of times that the animation cycle will repeat within a one second time period. The
+larger the value, the more repeats within a second. Animations that should last for more than a second need to be expressed as decimal values.
+
+ <texture1> …<texture8>: the texture path/texture name for each animation frame must be
+explicitly listed. Up to eight frames (eight separate .tga files) can be used to make an animated sequence. Each frame is
+displayed for an equal subdivision of the frequency value.
+
+
Example:AnimMap 0.25 animMap 10textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tgatextures/sfx/b_flame4.tga would be a 4 frame animated sequence, calling each frame in sequence over a cycle length of 4 seconds. Each frame would be displayed for 1 second before the next one is displayed. The cycle repeats after the last frame in sequence is shown.
+
+
Design Notes: To make a texture image appear for an unequal (longer) amount of time (compared to other frames), repeat that frame more than once in the sequence.
+Blend functions are the keyword commands that tell the Quake III Arena graphic engine's renderer how graphic layers are to be mixed together.
+
+
6.2.1 Simplified blend functions:
+The most common blend functions are set up here as simple commands, and should be used unless you really know what you are
+doing.
+
+
6.2.1.1 blendfunc add
+ This is a shorthand command for blendfunc gl_one gl_one. Effects like fire and energy are additive.
+
+
6.2.1.2 blendfunc filter
+ This is a shorthand command that can be substituted for either blendfunc gl_dst_color gl_zero or blendfunc gl_zero gl_src_color. A filter will always result in darker pixels than what is behind it, but it can also remove color selectively. Lightmaps are filters.
+
+
6.2.1.3 blendfunc blend
+ Shorthand for blendfunc gl_src_alphagl_one_minus_src_alpha. This is conventional transparency, where part of the background is mixed with part of the texture.
+
+
6.2.2 Explicit blend functions:
+Getting a handle on this concept is absolutely key to understanding all shader manipulation of graphics.
+
+
BlendFunc or "Blend Function" is the equation at the core of processing shader graphics. The formula reads as follows:
+
+
Source is usually the RGB color data in a texture TGA file (remember it's all numbers) modified by any rgbgen and alphagen. In the shader, the source is generally identified by command MAP, followed by the name of the image.
+
+
Destination is the color data currently existing in the frame buffer.
+
+
Rather than think of the entire texture as a whole, it maybe easier to think of the number values that correspond to a single pixel, because that is essentially what the computer is processing … one pixel of the bit map at a time.
+
+
The process for calculating the final look of a texture in place in the game world begins with the precalculated lightmap for the area where the texture will be located. This data is in the frame buffer. That is to say, it is the initial data in the Destination. In an unmanipulated texture (i.e. one without a special shader script), color information from the texture is combined with the lightmap. In a shader-modified texture, the $lightmap stage must be present for the lightmap to be included in the calculation of the final texture appearance.
+
+
Each pass or "stage" of blending is combined (in a cumulative manner) with the color data passed onto it by the
+previous stage. How that data combines together depends on the values chosen for the Source Blends and Destination Blends at each stage. Remember it's numbers that are being mathematically combined together that are ultimately interpreted as colors.
+
+
A general rule is that any Source Blend other than GL_ONE (or GL_SRC_ALPHA where the alpha channel is entirely white) will cause the Source to become darker.
+
+
6.2.3 Source Blend <srcBlend>
+The following values are valid for the Source Blend part of the equation.
+
+
GL_ONE This is the value 1. When multiplied by the Source, the value stays the same the value of the color information does not change.
+
+ GL_ZERO This is the value 0. When multiplied by the Source, all RGB data in the Source becomes Zero (essentially black).
+
+ GL_DST_COLOR This is the value of color data currently in the Destination (frame buffer). The value of that information depends on the information supplied by previous stages.
+
+ GL_ONE_MINUS_DST_COLOR This is nearly the same as GL_DST_COLOR except that the value for each component color
+is inverted by subtracting it from one. (,i.e. R = 1.0 - DST.R, G = 1.0 - DST.G, B = 1.0 - DST.B, etc.)
+
+ GL_SRC_ALPHA The TGA file being used for the Source data must have an alpha channel in addition to its RGB channels (for a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the Source.
+
+ GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one.(i.e. A=1.0 - SRC.A)
+
+
6.2.4 Destination Blend <dstBlend>
+The following values are valid for the Destination Blend part of the equation.
+
+
GL_ONE This is the value 1. When multiplied by the Destination, the value stays the same the value of the color information does not change.
+
+ GL_ZERO This is the value 0. When multiplied by the Destination,all RGB data in the Destinationbecomes Zero (essentially black).
+
+ GL_SRC_COLOR This is the value of color data currently in the Source (which is the texture being manipulated here).
+
+ GL_ONE_MINUS_SRC_COLOR This is the value of color data currently in Source, but subtracted from one(i.e.
+inverted).
+
+ GL_SRC_ALPHA The TGA file being used for the Source data must have an alpha channel in addition to its RGB channels (four a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the Source.
+
+ GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one. (i.e. A=1.0 - SRC.A).
+
+
Doing the Math: The Final Result
+
+ The product of the Source side of the equation is added to the product of the Destination side of the equation. The sum is then placed into the frame buffer to become the Destination information for the next stage. Ultimately, the equation creates a modified color value that is used by other functions to define what happens in the texture when it is displayed in the game world.
+
+
6.2.5 Default Blend Function
+If no blendFunc is specified then no blending will take place. A warning is generated if any stage after the first stage does not have a blendFunc specified.
+
+
+There are two color sources for any given shader, the texture file and the vertex colors. Output at any given time will be equal to TEXTURE multiplied by VERTEXCOLOR. Most of the time VERTEXCOLORwill default to white (which is a normalized value of 1.0), so output will be TEXTURE (this usually lands in the Sourceside of the shader equation). Sometimes you do the opposite and use TEXTURE = WHITE, but this is only commonly used when doing specular lighting on entities (i.e. shaders that level designers will probably never create
+
+
The most common reason to use rgbGen is to pulsate something. This means that the VERTEXCOLOR will oscillate between two
+values, and that value will be multiplied (darkening) the texture.
+
+
If no rgbGen is specified, either "identityLighting" or"identity" will be selected, depending on which blend modes are
+used.
+
+
Valid <func> parameters are wave, identity, identityLighting, entity, oneMinusEntity, fromVertex, and
+lightingDiffuse.
+
+
6.3.1 RgbGen identityLighting
+Colors will be (1.0,1.0,1.0) if running without overbright bits (NT, linux, windowed modes), or (0.5, 0.5, 0.5) if running
+with overbright. Overbright allows a greater color range at the expense of a loss of precision. Additive and blended stages
+will get this by default.
+
+
6.3.2 rgbGen identity
+Colors are assumed to be all white (1.0,1.0,1.0). All filters stages (lightmaps, etc) will get this by default.
+
+
+Colors are generated using the specified waveform. An affected texture with become darker and lighter, but will not change
+hue. Hue stays constant. Note that the rgb values for color will not go below 0 (black) orabove 1 (white). Valid waveforms are sin, triangle, square, sawtooth and inversesawtooth.
+
+
<func> Waveforms and their effects:
+
+ Sin: color flows smoothly through changes.
+
+ Triangle: color changes at a constant rate and spends noappreciable time at peaks and valleys.
+
+ Square: color alternates instantly between its peak and valley values.
+
+ Sawtooth: With a positive frequency value, the color changes at aconstant rate to the peak then instantly drops to its valley value.
+
+ Inversesawtooth: An inverse sawtooth wave will reverse this, making the ascent immediate (like a square wave) and the decay fall off like a triangle wave.
+
+ <base> Baseline value. The initial RGB formula of a color (normalilzed).
+
+ <amp> Amplitude. This is the degree of change from the baseline value. In some cases you will want
+values outside the 0.0 to 1.0 range, but it will induce clamping (holding at the maximum or minimum value for a time period)
+instead of continuous change.
+
+ <phase> See the explanation for phase under the waveforms heading of Key Concepts.
+
+ <freq> Frequency. This is a value (NOT normalized) that indicates peaks per second.
+
+
6.3.4 RgbGen entity
+Colors are grabbed from the entity's modulate field. This isused for things like explosions.
+
+
Design Note: This keyword would probably not be used by a level designer.
+
+
6.3.5 rgbGen oneMinusEntity
+Colors are grabbed from 1.0 minus the entity's modulate field.
+
+
Design Note: This keyword would probably not be used by a level designer.
+
+
6.3.6 rgbGen Vertex
+Colors are filled in directly by the data from the map or model files.
+
+
Design Note: rgbGen vertex should be used when you want the RGB values to be computed for a static model (i.e. mapobject) in the world using precomputed static lighting from Q3BSP. This would be used on things like
+the gargoyles, the portal frame, skulls, and other decorative MD3s put into the Quake III Arena world.
+
+
6.3.7 rgbGen oneMinusVertex
+As rgbGen vertex, but inverted.
+
+
Design Note: This keyword would probably not be used by a level designer
+
+
6.3.8 rgbGen lightingDiffuse
+Colors are computed using a standard diffuse lighting equation. It uses the vertex normals to illuminate the object correctly.
+
+
Design Note: -rgbGen lightingDiffuse is used when you want the RGB values to be computed for a dynamic model (i.e. non-map object) in the world using regular in-game lighting. For example, you would specify on shaders for items, characters, weapons, etc.
+The alpha channel can be specified like the rgbchannels. If not specified, it defaults to 1.0.
+
+
6.4.1 AlphaGen portal
+This rendering stage keyword is used in conjunction with the surface parameter keyword portal. The function
+accomplishes the "fade" that causes the scene in the portal to fade from view. Specifically, it means "Generate alpha values
+based on the distance from the viewer to the portal." Use alphaGen portal on the last rendering pass.
+
+
+Specifies how texture coordinates are generated and where they come from. Valid functions are base,lightmap and environment.
+
+
<base> = base texture coordinates from the original art.
+ <lightmap> = lightmap texture coordinates
+ <environment> = Make this object environment mapped.
+
+
+Specifies how texture coordinates are modified after they are generated. The valid functions for tcMod are rotate,
+scale,scroll, stretch and transform.Transform is a function generally reserved for use by programmers who suggest that designers leave it alone. When using multiple tcMod functions during a stage, place the scroll command last in order, because it performs a mod operation to save precision, and that can disturb other operations. Texture coordinates are modified in the order in which tcMods are specified. In otherwords, if you see:
+
+
tcMod scale 0.5 0.5
+ tcMod scroll 1 1
+
+
Then the texture coordinates will be scaledthenscrolled.
+
+
6.6.1 tcMod rotate <degrees per per second>
+This keyword causes the texture coordinates to rotate. The value is expressed in degrees rotated each second. A positive value means clockwise rotation. A negative value means counterclockwise rotation. For example "tcMod rotate 5" would
+rotate texture coordinates 5 degrees each second in a clockwise direction. The texture rotates around the center
+point of the texture map, so you are rotating a texture with a single repetition, be careful to center it on the brush (unless off-center rotation is desired).
+
+
6.6.2 tcMod scale <sScale> <tScale>
+Resizes (enlarges or shrinks) the texture coordinates bymultiplying them against the given factors of <sScale>
+and <tScale). The values "s" and "t"conform to the "x" and "y" values (respectively) as they are found in the original texture TGA. The values for sScale and tScale are NOT normalized. This means that a value greater than 1.0 will increase the size of thetexture. A positive value less than one will reduce the texture to a fraction of its size and cause it to repeat within the same area as the original texture (Note: see clampTexCoords for ways to control this).;
+
+
Example:tcMod scale 0.5 2 would cause the texture to repeat twice along its width, but expand to twice its height (in which case half of the texture would be seen in the same area as the original)
+
+
6.6.3 tcMod scroll <sSpeed> <tSpeed>
+Scrolls the texture coordinates with the given speeds. The values "s" and "t" conform to the "x" and "y" values
+(respectively) as they are found in the original textureTGA. The scroll speed is measured in "textures" per second. A "texture" is the dimension of the texture being modified and includes any previous shader modifications to the original TGA). A negative s value would scroll the texture to the left. A negative t value would scroll the texture down.
+
+
Example: tcMod scroll 0.5 -0.5 moves the texture down and right (relative to the TGA files original coordinates) at the rate of a half texture each second of travel.
+
+
This should be the LAST tcMod in a stage. Otherwise there maybe popping or snapping visual effects in some shaders.
+
+
+
+Stretches the texture coordinates with the given function. Stretching is defined as stretching the texture coordinate away from the center of the polygon and then compressing it towards the center of the polygon.
+
+
<base>: A base value of one is the original dimension of the texture when it reaches the stretch stage.
+Inserting other values positive or negative in this variable will produce unknown effects.
+
+ <amplitude>: This is the measurement of distance the texture will stretch from the base size. It is
+measured, like scroll, in textures. A value of 1 here will double the size of the texture at its peak.
+
+ <phase>: See the explanation for phase under the deform vertexes keyword.
+
+ <frequency>: this is wave peaks per second.
+
+ Wave Functions <func>
+
+ Sin wave: the texture expands smoothly to its peak dimension and then shrinks smoothly to its valley dimension in a flowing manner.
+
+ Triangle wave: The textures stretch at a constant rate and spend no appreciable time at the peak or valley points.
+
+ Square wave: The texture is shown at its peak for the duration of the frequency and then at its valley for the
+duration of the frequency.
+
+ Sawtooth: the texture stretches like a triangle wave until it reaches a peak, then instantly drops to the valley, as in a square wave.
+
+ Inversesawtooth: this is the reverse of the sawtooth wave.
+
+
Applies turbulence to the texture coordinate. Turbulence is a back and forth churning and swirling effect on the texture.
+
+
The parameters for this shader are defined as follows:
+
+
+
<base> Currently undefined.
+
+ <amplitude> This is essentially the intensity of the disturbance or twisting and squiggling of the texture.
+
+ <phase> See the explanation for phase under the deformvertexes keyword.
+
+ <freq> Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of one
+would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10
+seconds.
+
+
+This controls the depth comparison function used while rendering. The default is "lequal" (Less than or equal to)
+where any surface that is at the same depth or closer of an existing surface is drawn. This is used for textures with
+transparency or translucency. Under some circumstances you may wish to use "equal", e.g. for light-mapped grates that are alpha tested (it is also used for mirrors).
+
+
+By default, writes to the depth buffer when depthFunc passes will happen for opaque surfaces and not for translucent surfaces. Blended surfaces can have the depth writes forced with this function.
+
+
+This feature was not used in Quake III Arena maps, but should still function.
+Designates this stage as a detail texture stage, which means that if the c_var, r_detailtextures, is set to 0 then this stage will be ignored (detail will not be displayed). This keyword, by itself, does not affect rendering at all. If you do put in a detail texture, it has to conform to very specific rules. Specifically, the blendFunc:
+
+
blendFuncGL_DST_COLOR GL_SRC_COLOR
+
+
This is also the simple blend function: blendfuncfilter
+
+
And the average intensity of the detail texture itself must be around 127.
+
+
Detail is used to blend fine pixel detail back into a base texture whose scale has been increased significantly. When detail iswritten into a set of stage instructions, it allows the stage to be disabled by the c_var console command setting "r_detailtextures 0".
+
+
A texture whose scale has been increased beyond a 1:1 ratio tends not to have very high frequency content. In other words, one texel can cover a lot of real estate. Frequency is also known as "detail." Lack of detail can appear acceptable if the player never has the opportunity to see the texture at close range. But seen close up, such textures look glaringly wrong within the sharp detail of the Quake III Arena environment. A detail texture solves this problem by taking a noisy "detail" pattern (a tiling texture that appears to have a great deal of surface roughness) and applying it to the base texture at a very densely packed scale (that is, reduced from its normal size). This is done programmatically in the
+shader, and does not require modification of the base texture. Note that if the detail texture is the same size and scale as the base texture that you may as well just add the detail directly to the base texture. The theory is that the detail texture's scale will be so high compared to the base texture (e.g.; 9 detail texels fitting into 1 base texel) that it is literally impossible to fit that detail into the base texture directly.
+
+
For this to work, the rules are as follows:
+
+
+
+
the lightmap must be rendered first. This is because the subsequent detail texture will be modifying the lightmap in the framebuffer directly;
+
the detail texture must be rendered next since it modifies the lightmap in the framebuffer;
+
the base texture must be rendered last;
+
the detail texture MUST have a mean intensity around 127-129. If it does not then it will modify the displayed texture's perceived brightness in the world;
+
the detail shader stage MUSThave the "detail" keyword or it will not be disabled if the user uses the "r_detailtextures 0" setting;
+
the detail stage MUST use "blendFunc GL_DST_COLOR GL_SRC_COLOR". Any other BlendFunc will cause mismatches in brightness between detail and non-detail views.;
+
the detail stage should scale its textures by some amount (usually between 3 and 12) using "tcMod" to control density. This roughly corresponds to coarseness. A very large number, such as 12, will give very fine detail, however that detail will disappear VERY quickly as the viewer moves away fromthe wall since it will be MIP mapped away. A very small number, e.g. 3, gives diminishing returns since not enough is brought in when the user gets very close. I'm currently using values between 6 and 9.5. You should use non-integral numbers as much as possible to avoid seeing repeating patterns.
+
detail textures add one pass of overdraw, so there is a definite performance hit .
+
detail textures can be shared, so designers may wish to define only a very small handful of detail textures for common surfaces such as rocks, etc.
+
+
An example (non-existent) detailshader is as follows:
+
Example: Texture with Detail
+
+
+textures/bwhtest/foo
+{
+// draw the lightmap first
+{
+map $lightmap
+rgbGen identity
+}
+// modify the lightmap in the framebuffer by
+// a highly compressed detail texture
+{
+map textures/details/detail01.tga
+blendFunc GL_DST_COLOR GL_SRC_COLOR
+// YOU MUST USE THIS!!
+detail
+// for the detail to be disabled, this must be present
+tcMod scale 9.1 9.2
+}
+// now slap on the base texture
+{
+map textures/castle/blocks11b.tga
+blendFunc filter
+}
+}
+
+Determines the alpha test function used when rendering this map. Valid values are GT0, LT128, and GE128. These
+correspond to "GREATER THAN 0", "LESS THAN 128", and "GREATER THAN OR EQUAL TO 128". This function is used when determining if a pixel should be written to the framebuffer. For example, if GT0 is specified, the only the portions of the texture map with corresponding alpha values greater than zero will be written to the framebuffer. By default alpha testing is disabled.
+
+
Both alpha testing and normal alpha blending can be used to get textures that have see-through parts. The difference is that alphaFunc is an all-or-nothing test, while blending smoothly blends between opaque and translucent at pixel edges. Alpha test can also be used with depthwrite, allowing other effects to be conditionally layered on top of just the opaque pixels by setting depthFunc to equal.
+
+
+Quake III Arena Shader Manual: Notes on Alpha Channels
+
+
+
+
Q3Radiant Shader Manual
+
+
7 Notes on Alpha Channels
+To use some blend modes of alphaFunc, you must add an alpha channel to your texture files. Photoshop can do this.
+Paintshop Pro has the ability to make an alpha channel but cannot work directly in to it. In Photoshop you want to set the type to Mask. Black has a value of 255. White has a value of 0. The darkness of a pixel's alpha value determines the
+transparency of the corresponding RGB value in the game world. Darker = more transparent.
+
+
Care must be taken when reworking textures with alpha channels. Textures without alpha channels are saved as 24 bit images while textures with alpha channels are saved as 32 bit. If you save them out as 24 bit, the alpha channel is erased. Note: Adobe Photoshop will prompt you to save as 32, 24 or 16 bit. Choose wisely. If you save a texture as 32 bit and you don't actually have anything in the alpha channel, Quake III Arena may still be forced to use a lower quality texture format (when in 16 bit rendering) than if you had saved it as 24 bit.
+
+
To create a texture that has "open" areas, make those areas black in the alpha channel and make white the areas that are to be opaque. Using gray shades can create varying degrees of opacity/transparency.
+
+
Example: An opaque texture with see-through holes knocked in it.
+
+
+textures/base_floor/pjgrate1
+{
+ surfaceparm metalsteps
+ cull none
+
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/pjgrate1.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaFunc GT0
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+ }
+
+
+
The alpha channel can also be used to merge a texture (including one that contains black) into another image so that the merged art appears to be and opaque decal on a solid surface (unaffected by the surface it appears to sit on), without actually using an alpha function. The following is a very simple example:
+
+
+
+ Figure 1
+
+
Start with a TGA file image. In this case, a pentagram on a plain white field (figure 1A). The color of the field surrrounding the image to be merged is not relevant to this process (although having a hard-edged break between the image to be isolated and the field makes the mask making process easier). Make an alpha channel. The area of the image to be merged with another image is masked off in white. The area to be masked out (notused) is pure black (figure 1B). The image to be merged into is greenfloor.tga (figure 1C).
+
+
Make a qer_editorimage of greenfloor.tga. This is placed inthe frame buffer as the map image for the texture. By
+using GL_SRC_ALPHA as the source part of the blend equation, the shader adds in only the non-black parts of the pentagram.
+Using GL_MINUS_ONE_SRC_ALPHA, the shader inverts the pentagram's alpha channel and adds in only the non-black parts of the green floor.
+
+
In a like manner, the alpha channel can be used to blend the textures more evenly. A simple experiment involves using a
+linear gradiant in the alpha channel (white to black) and merging two textures so they appear to cross fade into each other.
+
+
A more complicated experiment would be to take the pentagram in the first example and give it an aliased edge so that the pentagram appeared to fade or blend into the floor.
+
+
+If a shader is not working, look first for syntax errors.
+
Are the brackets correctly set?
+
Do you have too many parameter values on a line?
+
Are you using a word in a parameter that wants a numerical value?
+
Are you using a numerical value in a parameter that wants a word?
+
Are the path names to your textures correct?
+
Are your texture names correct? There is a chance that the texture name is too long or too complex. Try renaming a
+texture with a shorter, simpler name.
+If you are familiar with the required tools, creating new assets for use in Quake III Arena is not particularly difficult. As a general rule, you should create new directories for each map with names different from the names used by id. If you are making a map that will be called "H4x0r_D00M", every directory containing new assets for that map should be titled H4x0r_D00M. This is to try and avoid asset directories overwriting each other as the editor and the gameload in assets.
+
+
+Any combination of graphic programs and plug-ins that canout put a 24 bit MS windows compatible Targa (.tga) or JPEG (.jpg) graphic file.If you plan to make textures that will have an alpha channel component (a 4th 8-bit greyscale channel that is used by the shaders to further manipulate the art), you must have a program that can create 32-bit art with that fourth channel.
+
+
Adobe Photoshop has the ability to easily create alpha channels. PaintShop Pro from JASC (v5.0+) can also make an
+alpha channel by creating a mask and naming it "alpha".
+
+
Generally speaking, regardless of the program used, we found it best to do most of the art manipulation of the alpha channel in a separate layer or file and then paste it into the alpha channel before saving.
+
+
+The editor and the game program look for assets to be located along the paths set up in your project file. Start by creating
+a directory for you new textures by creating file folders to make a directory path as follows:
+
+
quake3\baseq3\textures\[mymapname]
+
+
The installation of Q3Radiant will create a text document called "shaderlist.txt" in the following path:
+
+
quake3\baseq3\scripts\shaderlist.txt
+
+
Q3Radiant will use the contents of this script to grab your new textures for inclusion in the game. The contents of shaderlist.txt document will contain a listing of all the shader documents that were used by id Software to create Quake III Arena.
+
+
Since you will obviously want to create your own shaders, you need to put them in separate folders and create a new shader script for them.
+
+
If you plan to work on several maps at once and want to distinguish between textures used in each map, simply add additional map names here. For map and mod makers, we STRONGLY recommend that any new shader scripts created use the name of the map or mod in the shader file name. We know we can't avoid every incident of files overwriting each other, but we certainly can advise you how to try.
+
+
Now, in the scripts directory that you just created, create another text file and call it:
+
+
[mymapname].shader
+
+
This file will contain the shader scripts you write to modify a particular texture.
+
+
+Follow these rules when creating textures for the Quake III Arena engine:
+
+
Save your textures into your new [map name] directories.
+
Don't use the same names that id used for textures. It will cause problems.
+
For best quality, save textures without an alpha channel as 24 bit TARGA files. Using JPEG files can save memory space, but at the risk of losing detail and depth in the texture. JPEG files cannot be used for textures requiring an alpha channel.
+
Textures containing an alpha channel must be saved as32 bit TARGA files.
+
If a new texture requires no further manipulation, it does not need a shader script.
+
Size textures in powers of 2. Example: 8x8, 16x16,32x32, 64x64 pixels and so on.
+
Textures don't need to be square. A 32x256 pixel texture is perfectly acceptable.
+
+
9.3.2 Guidelines
+The following are some things the id designers learned about textures.
+
+
Create textures in "suites" built around one or two large textures with a number of much smaller supporting detail or accent textures.
+
Very large textures are possible, but some video cards compress textures larger than 256x256 pixels.
+
Textures are grouped alphabetically by name in the texture display window, so you may want to give suites of textures
+similar names.
+
Use the shader function qe3_editorimage to conserve memory when making multiple versions of a single texture (as in the case of a glowing texture with several light values).
+
Unless you are creating special effects or textures designed to draw the player's eye to a specific spot, muted, middle value colors work best with the game engine.
+
Extremely busy (a lot of fussy detail) textures can break up or form visually unpleasant patterns when seen at distances.
+When you go to distribute your creation to the gaming world, you need to put your newly created map, textures, bot area files, and shader documents into an archive format called a "pk3" file. You do not need to include the shaderlist.txt file, since that is only used by the editor. You will need to keep the paths to the various assets the same. So your paths should be something like this:
+
+
You need to use an archiving program call Winzip to make the pk3 file. Get Winzip from http://www.winzip.com/winzip/winzip.htm
+
+ Make a zip archive called mymapname.zip
+
+ Zip all the required assets into a zip archive file (Quake III Arena DOES support compressed pk3 files).
+
+ Rename the zip archive to mymapname.pk3
+
+ Put it where the Quake III Arena community can find it.
+
Back | Home | Next
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch06/pg6_1.htm b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch06/pg6_1.htm
new file mode 100644
index 0000000..f6b94f0
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/ch06/pg6_1.htm
@@ -0,0 +1,145 @@
+
+
+Quake III Arena Shader Manual: Notes on Alpha Channels
+
+
+
+
Q3Radiant Shader Manual
+
+
7 Notes on Alpha Channels
+To use some blend modes of alphaFunc, you must add an alpha channel to your texture files. Photoshop can do this.
+Paintshop Pro has the ability to make an alpha channel but cannot work directly in to it. In Photoshop you want to set the type to Mask. Black has a value of 255. White has a value of 0. The darkness of a pixel's alpha value determines the
+transparency of the corresponding RGB value in the game world. Darker = more transparent.
+
+
Care must be taken when reworking textures with alpha channels. Textures without alpha channels are saved as 24 bit images while textures with alpha channels are saved as 32 bit. If you save them out as 24 bit, the alpha channel is erased. Note: Adobe Photoshop will prompt you to save as 32, 24 or 16 bit. Choose wisely. If you save a texture as 32 bit and you don't actually have anything in the alpha channel, Quake III Arena may still be forced to use a lower quality texture format (when in 16 bit rendering) than if you had saved it as 24 bit.
+
+
To create a texture that has "open" areas, make those areas black in the alpha channel and make white the areas that are to be opaque. Using gray shades can create varying degrees of opacity/transparency.
+
+
Example: An opaque texture with see-through holes knocked in it.
+
+
+textures/base_floor/pjgrate1
+{
+ surfaceparm metalsteps
+ cull none
+
+ // A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES
+ {
+ map textures/base_floor/pjgrate1.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ alphaFunc GT0
+ depthWrite
+ rgbGen identity
+ }
+ {
+ map $lightmap
+ rgbGen identity
+ blendFunc GL_DST_COLOR GL_ZERO
+ depthFunc equal
+ }
+ }
+
+
+
The alpha channel can also be used to merge a texture (including one that contains black) into another image so that the merged art appears to be and opaque decal on a solid surface (unaffected by the surface it appears to sit on), without actually using an alpha function. The following is a very simple example:
+
+
+
+ Figure 1
+
+
Start with a TGA file image. In this case, a pentagram on a plain white field (figure 1A). The color of the field surrrounding the image to be merged is not relevant to this process (although having a hard-edged break between the image to be isolated and the field makes the mask making process easier). Make an alpha channel. The area of the image to be merged with another image is masked off in white. The area to be masked out (notused) is pure black (figure 1B). The image to be merged into is greenfloor.tga (figure 1C).
+
+
Make a qer_editorimage of greenfloor.tga. This is placed inthe frame buffer as the map image for the texture. By
+using GL_SRC_ALPHA as the source part of the blend equation, the shader adds in only the non-black parts of the pentagram.
+Using GL_MINUS_ONE_SRC_ALPHA, the shader inverts the pentagram's alpha channel and adds in only the non-black parts of the green floor.
+
+
In a like manner, the alpha channel can be used to blend the textures more evenly. A simple experiment involves using a
+linear gradiant in the alpha channel (white to black) and merging two textures so they appear to cross fade into each other.
+
+
A more complicated experiment would be to take the pentagram in the first example and give it an aliased edge so that the pentagram appeared to fade or blend into the floor.
+
+
+If a shader is not working, look first for syntax errors.
+
Are the brackets correctly set?
+
Do you have too many parameter values on a line?
+
Are you using a word in a parameter that wants a numerical value?
+
Are you using a numerical value in a parameter that wants a word?
+
Are the path names to your textures correct?
+
Are your texture names correct? There is a chance that the texture name is too long or too complex. Try renaming a
+texture with a shorter, simpler name.
+If you are familiar with the required tools, creating new assets for use in Quake III Arena is not particularly difficult. As a general rule, you should create new directories for each map with names different from the names used by id. If you are making a map that will be called "H4x0r_D00M", every directory containing new assets for that map should be titled H4x0r_D00M. This is to try and avoid asset directories overwriting each other as the editor and the gameload in assets.
+
+
+Any combination of graphic programs and plug-ins that canout put a 24 bit MS windows compatible Targa (.tga) or JPEG (.jpg) graphic file.If you plan to make textures that will have an alpha channel component (a 4th 8-bit greyscale channel that is used by the shaders to further manipulate the art), you must have a program that can create 32-bit art with that fourth channel.
+
+
Adobe Photoshop has the ability to easily create alpha channels. PaintShop Pro from JASC (v5.0+) can also make an
+alpha channel by creating a mask and naming it "alpha".
+
+
Generally speaking, regardless of the program used, we found it best to do most of the art manipulation of the alpha channel in a separate layer or file and then paste it into the alpha channel before saving.
+
+
+The editor and the game program look for assets to be located along the paths set up in your project file. Start by creating
+a directory for you new textures by creating file folders to make a directory path as follows:
+
+
quake3\baseq3\textures\[mymapname]
+
+
The installation of Q3Radiant will create a text document called "shaderlist.txt" in the following path:
+
+
quake3\baseq3\scripts\shaderlist.txt
+
+
Q3Radiant will use the contents of this script to grab your new textures for inclusion in the game. The contents of shaderlist.txt document will contain a listing of all the shader documents that were used by id Software to create Quake III Arena.
+
+
Since you will obviously want to create your own shaders, you need to put them in separate folders and create a new shader script for them.
+
+
If you plan to work on several maps at once and want to distinguish between textures used in each map, simply add additional map names here. For map and mod makers, we STRONGLY recommend that any new shader scripts created use the name of the map or mod in the shader file name. We know we can't avoid every incident of files overwriting each other, but we certainly can advise you how to try.
+
+
Now, in the scripts directory that you just created, create another text file and call it:
+
+
[mymapname].shader
+
+
This file will contain the shader scripts you write to modify a particular texture.
+
+
+Follow these rules when creating textures for the Quake III Arena engine:
+
+
Save your textures into your new [map name] directories.
+
Don't use the same names that id used for textures. It will cause problems.
+
For best quality, save textures without an alpha channel as 24 bit TARGA files. Using JPEG files can save memory space, but at the risk of losing detail and depth in the texture. JPEG files cannot be used for textures requiring an alpha channel.
+
Textures containing an alpha channel must be saved as32 bit TARGA files.
+
If a new texture requires no further manipulation, it does not need a shader script.
+
Size textures in powers of 2. Example: 8x8, 16x16,32x32, 64x64 pixels and so on.
+
Textures don't need to be square. A 32x256 pixel texture is perfectly acceptable.
+
+
9.3.2 Guidelines
+The following are some things the id designers learned about textures.
+
+
Create textures in "suites" built around one or two large textures with a number of much smaller supporting detail or accent textures.
+
Very large textures are possible, but some video cards compress textures larger than 256x256 pixels.
+
Textures are grouped alphabetically by name in the texture display window, so you may want to give suites of textures
+similar names.
+
Use the shader function qe3_editorimage to conserve memory when making multiple versions of a single texture (as in the case of a glowing texture with several light values).
+
Unless you are creating special effects or textures designed to draw the player's eye to a specific spot, muted, middle value colors work best with the game engine.
+
Extremely busy (a lot of fussy detail) textures can break up or form visually unpleasant patterns when seen at distances.
+When you go to distribute your creation to the gaming world, you need to put your newly created map, textures, bot area files, and shader documents into an archive format called a "pk3" file. You do not need to include the shaderlist.txt file, since that is only used by the editor. You will need to keep the paths to the various assets the same. So your paths should be something like this:
+
+
You need to use an archiving program call Winzip to make the pk3 file. Get Winzip from http://www.winzip.com/winzip/winzip.htm
+
+ Make a zip archive called mymapname.zip
+
+ Zip all the required assets into a zip archive file (Quake III Arena DOES support compressed pk3 files).
+
+ Rename the zip archive to mymapname.pk3
+
+ Put it where the Quake III Arena community can find it.
+
Back | Home | Next
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3AShader_Manual/index.htm b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/index.htm
new file mode 100644
index 0000000..a7220ef
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3AShader_Manual/index.htm
@@ -0,0 +1,76 @@
+
+
+Quake III Arena Shader Manual: Table of Contents
+
+
+
+
+
Q3Radiant Shader Manual
+
+
Revision #12
+
+
By Paul Jaquays and Brian Hook
+
+
(with additional material by John Carmack, Christian Antkow, Kevin Cloud, & Adrian Carmack)
+
QERadiant.com thanks John Hutton for re-formating this manual into a more web friendly version
+Appendix A - Triggerable Shader Entities
+
+Q3Map2 Shader Manual
+
+
+
+By TTimo, 31.08.01
+
+The targetShaderName and targetShaderNewName keys can be used with any entity that supports the target key (the entity instance does not actually have to use the target key for these new keys to work). If both are defined, then when the entity decides to activate its targets, all shaders/textures in the map that were originally the same name as the targetShaderName value, will be changed to the targetShaderNewName value.
+
+For example this would make it look like the red light shader is "turning on":
+
+
+
+Note that the ORIGINAL shader name is used in both instances, not whatever it happens to be currently. Also, of course, this will happen globally. If the mapper wanted to affect only a certain set of red lights, he/she would need to make a unique shader name to be used with that set.
+
+The code that supports these keys is in G_UseTargets in g_utils.c
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/apB.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/apB.htm.svn-base
new file mode 100644
index 0000000..7a90b54
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/apB.htm.svn-base
@@ -0,0 +1,131 @@
+
+
+Q3Map2 Shader Manual: Terrain
+
+
+
+
+
+
+
+
+
+
+
+
+
+Appendix B - Terrain
+
+Q3Map2 Shader Manual
+
+
+
+Q3Map2 terrain has changed radically since Quake III: Team Arena first hit the shelves. Alphamapped terrain shaders are difficult to set up, limiting and lacks the ability for the mapper to fine tune the effect. The new terrain improvements in Q3Map2 have removed these difficulties, allowing the mapper to fully exploit terrain shaders for breathtaking outdoor scenes. This section will assume that you are already familiar with the method of setting up a standard alphamapped terrain as described in the Terrain Construction for Quake 3 Engine Games manual by Paul Jaquays, and will focus on the new enhanced features of Q3Map2 terrain.
+
+
+
+
+
General Changes
+
+
+
+Q3Map2 terrain has changed dramatically in terms of not only visually, but also in terms of how it is processed by the compiler. To ensure compatibility, there needs to be a few changes. Foremost, make sure that all terrain shader files are listed in the shaderlist.txt file.
+
+Before using Q3Map2 alphamapped terrain, it must be noted that terrain is now handled completely different than before. Q3Map2 no longer looks for the word terrain in the shader name to determine whether or not it is an indexed shader. Instead it looks for q3map_indexed or q3map_terrain. For this reason, the alphamap terrain shaders have been slightly modified. If using Q3Map2 alphamaps, make sure that your "textures/common/terrain" and "textures/common/terrain2" shaders have been updated to the following:
+
+
+
+
+Base Shader
+To simplify the terrain shader writing process, a base shader can be used as a template with subclassed shaders referencing it. This makes use of the q3map_baseShader directive. The base shader can consist of all q3map_* directives and must be processed before all other terrain shaders referencing it. The use of a base shader is recommend for all terrain shaders.
+
+tcMod Functions
+q3map_tcMod can be used on terrain shaders to minimize any obvious texture tiling, particularly q3map_tcMod rotate. In some situations q3map_tcMod scale or the stage driven tcMod scale may be used to scale the textures - though typically tcGen texture projection functions are usually the preferred method.
+
+tcGen Functions
+In most situations, terrain textures will need to be projected onto the terrain mesh. This is achieved by using either q3map_tcGen function or the stage specific tcGen. Any tcGen functions will overwrite any tcMod scale functions.
+
+
+
+
+
Lightmapped Terrain
+
+
+
+The foremost improvement to Q3Map2 terrain is the ability to use lightmaps as a lighting system rather than basic vertex lighting. This allows terrain to not only cast detailed shadows onto itself, but also allows other map geometry to cast shadows onto the terrain as well. The additional rendering pass of the lightmap creates a slight performance hit as a price for the improved visuals. Several new q3map_* directives are typically used to tweak the terrain lightmap:
+
+q3map_nonPlanar
+Required on all terrain shaders, q3map_nonPlanar allows shadows to be cast across non-planar edges. This fixes a problem where lightmapped terrain would not light properly across uneven surfaces.
+
+q3map_lightmapAxis
+Optionally used, q3map_lightmapAxis can be used to specify the axis in which the lightmap is projected from. This is typically used on normal triangle-quad souped terrain and is set implicitly to "q3map_lightmapAxis z" with q3map_terrain. It is not recommended for terrain with caves or undersides.
+
+q3map_shadeAngle
+Most terrain artists will choose to enable triangle edge shadow smoothing to reduce the appearance of sharp shadow edges across the terrain mesh. q3map_shadeAngle specifies the triangle edge angle at which the light will be diffused. For best results, it is recommended that you start with low values and tweak the angle parameter in small increments until a satisfactory result is produced. Overly high values will wash out shadow details.
+
+q3map_lightmapMergable
+Setting q3map_lightmapMergable merges all terrain into one seamless lightmap, reducing the appearance of artifacts spanning across separate lightmap images.
+
+q3map_lightmapSampleSize
+Lightmapped terrain can be very memory intensive as Q3Map2 has to typically generate a large amount of lightmap data. q3map_lightmapSampleSize can be used to reduce the amount of lightmap memory used by limiting the resolution of the lightmap images. Similarly, it can also be used to increase the lightmap resolution at the cost of memory.
+
+q3map_lightmapSampleOffset
+If experiencing lightmap splotches over the surface of terrain lightmaps, q3map_lightmapSampleOffset can be used to fix this. For best results, start with small numbers (default 1.0) and slowly increase this value until the splotches disappear. Overly high values will cause unsatisfactory results.
+
+
+
+
+
AlphaMod Dotproduct Terrain
+
+
+
+AlphaMod dotproduct terrain is a revolutionary way in which Q3Map2 terrain is blended. It removes the need for an alphamap and metashader and automatically determines the blending of terrain depending on the vertex normals of the terrain mesh. Equally important, this new system removes the need of a triangle-quad grid, allowing the designer to create a terrain mesh using any triangle shape or size.
+
+
+
+
+
AlphaMod Volume Terrain
+
+
+
+Following the automatic generation of dotproduct blending, alphaMod volume terrain blending was developed to give direct control of the alpha blending back to the designer. Using this system the designer can modify the exact location and amount of blending to occur, directly from within the editor.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/apC.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/apC.htm.svn-base
new file mode 100644
index 0000000..51bf93b
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/apC.htm.svn-base
@@ -0,0 +1,117 @@
+
+
+Q3Map2 Shader Manual: Foghull
+
+
+
+
+
+
+
+
+
+
+
+
+
+Appendix C - Foghull
+
+Q3Map2 Shader Manual
+
+
+Most recent Quake III engine games are programmed with a feature known as distance clipping used to clip (cull) map geometry beyond a user set distance. At the time of Quake III Arena's release, distance clipping was not an available feature. The Q3Map2 foghull feature was designed to simulate true distance clipping for Quake III Arena and Team Arena games.
+
+
+
+
+
What is a Foghull?
+
+
+
+Farplane distance clipping is a feature used to cull (remove) the drawing of polygons beyond a certain distance from the player in an attempt to improve performance. It is typically used on large, open terrain maps with little vis-blocking structures. Through the use of distance clipping a maximum vis distance is set, which provides the culling of rendered polygons. Fog is used to hide the effect of polygons appearing and disappearing by obscuring the maximum distance that the player can see.
+
+Since distance clipping is not a feature natively built into Quake III Arena, using distance culling would result in a hall of mirrors (HOM) effect where the culled geometry begins, since nothing is being drawn in the frame buffer. To compensate for this, the foghull feature uses a series of six skybox images that are drawn in place of the absent culled geometry, thus preventing the HOM effect.
+
+
+
+
+
Skybox Images
+
+
+
+The skybox images used with the foghull feature should never be actually seen since the idea is to use the fog to obsure the maximum distance that the player can see. It only exists to prevent the HOM effect. To pull this off in a convincing manner, the skybox images should be six identical 8x8 pixel (to save on texture memory) textures each filled with a flat color matching the exact color of the fog. The six skybox images must be named in accordance to the skyParms farbox convention, using the _ft, _rt, _bk, _lf, _up, _dn suffixes.
+
+
+
+
+
Foghull Shaders
+
+
+
+Two shaders are required when using the foghull feature, a fog volume shader and a skybox shader, both of which are simple, standard shaders.
+
+The color of the fog used must match the color used in the skybox images. Any decent image editing software will give you the three RGB color values of your skybox images, which must be normalized by dividing by 255. As with any other fog shader, the fogParms and surfaceparm fog keywords must be present.
+
+
+
+
Script: Fog Volume Shader
+textures/env/fog1024
+{
+ fogParms ( 0.8 0.8 0.8 ) 1024 //Normalized RGB, distance to opaque
+
+ surfaceparm fog //Must be used
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+
+ qer_editorImage textures/sfx/fog_grey.tga
+ qer_trans 0.4
+}
+
+
+
+
+To activate the foghull feature, the _foghull and _farplanedist worldspawn entity key/value pairs must be set in the Entity Inspector (in Radiant, select any non-entity brush and press "N").
+
+The _foghull key's value works similar to that of terrain entities. It must point to the name of the skybox shader, minus the standard "textures/" prefix. For the skybox shader example above with the shader name "textures/skies/foghullsky", you would use a _foghull value of "skies/foghullsky".
+
+The _farplanedist value is simply the distance at which polygons will begin to get culled. One important note is that the _farplanedist value must be greater than the distance to opaque value set in the fog shader. In the above fog shader, the distance to opaque value was set to 1024 game units. The _farplanedist value must therefore be greater than 1024, otherwise the HOM effect will appear.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/apI.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/apI.htm.svn-base
new file mode 100644
index 0000000..77adb40
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/apI.htm.svn-base
@@ -0,0 +1,260 @@
+
+
+Q3Map2 Shader Manual: Light Emitting Shaders
+
+
+
+
+
+
+
+
+
+
+
+
+
+Appendix I - Light Emitting Shaders
+
+Q3Map2 Shader Manual
+
+
+
+Q3Map2 surface light and sky shaders are quite different than the original Quake III shaders. As new lighting algorithms were introduced, new shader keywords were created to accompany or replace the original keywords. This section will illustrate the differences between these shaders.
+
+
+
+
+
Surface Lights
+
+
+
+*nothing here yet*
+Mention:
+*q3map_lightRGB red green blue
+
+
+
+
+
Skies
+
+
+
+Originally, sky shaders were just very large surface lights that casted parallel directional lighting. With Q3Map2, there are a few differences that sets sky shaders apart from surface lights. First of all, we'll take a look at how the pre-Q3Map2 shaders were set up:
+
+
+
+Keep in mind that this is a generalized shader, and that there can be a lot of different variations to yield different effects. Take a look at some of the original Quake III Arena shaders for more examples. In this screenshot (compiled with LIGHT -fast, viewed with /r_lightmap 1), the effect isn't bad, but the shadows are a bit jagged.
+
+
+
+Q3Map2 sky shaders improves on the way lightmaps are calculated, improving both quality and compiler performance. This is essentially the same shader with some small changes:
+
+
+
+What we've done here is replace q3map_lightSubdivide and q3map_surfacelight with q3map_skylight which yields more uniform shadows at a fraction of the compile time. However, this also generates the "stadium light" effect - producing some unwanted shadows. We'll fix this later.
+
+
+
+To solve the problem with jagged shadow edges, we can smooth out the shadows by blurring the lightmap. Depending on the type of lighting that you want to achieve for the sun (a cloudy day, for example), you can create a penumbra (half-shadow) effect using q3map_sunExt. This simulates the way sunlight bounces in certain conditions, creating a slight "jittering" effect. This is the same shader again with q3map_sunExt.
+
+
+In the following screenshot, you can see that the jagged shadow edges are gone.
+
+
+
+As mentioned above, you may be faced with problems involving the "stadium lights" effect when using q3map_skyLight. We can eliminate this problem by using higher values for the q3map_sunExt samples and q3map_skyLight iterations parameter, but at the cost of a higher compile time. For example, q3map_sunExt 1 1 1 140 -35 25 3 32 and q3map_skylight 100 6.
+
+Note:
+Since the time that these screenshots were taken, the skylight subdivision code has been greatly improved (Q3Map2 2.5.14) for far more uniform lighting and faster compiles, so using higher iteration values can result in better quality, reducing the "stadium light" effect and without necessarily increasing compile times.
+
+
+
+A faster approximate alternative of getting rid of the "stadium lights" effect is to use q3map_lightmapFilterRadius.
+
+
+The self and other parameters are the amount of filtering applied on the lightmap in world units. The self value is always set to "0" on sky shaders since skies don't have lightmaps. The q3map_lightmapFilterRadius directive should always be placed before any light-related directives that you want it to affect. In our case, we placed it after q3map_sunExt and before q3map_skyLight so that it filters the stadium lights, but won't blur the sun shadows which are already jittered. This produces very similar results without the long compile times.
+
+
+Here are some additional features that you can use to create special lighting effects:
+*multiple suns by adding more than one q3map_sun or q3map_sunExt to shader
+*stuff about compiler switches
+*-skyfix
+*_skybox entity does not work with surfaceLight, must use skyLight
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch0.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch0.htm.svn-base
new file mode 100644
index 0000000..5898e5a
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch0.htm.svn-base
@@ -0,0 +1,103 @@
+
+
+Q3Map2 Shader Manual: Preface
+
+
+
+
+
+
+
+
+
+
+
+
+
+0 - Preface
+
+Q3Map2 Shader Manual
+
+
+
+The Q3Map2 Edition of the Shader Manual
+
+Q3Map2 is an updated version of the original Q3Map program used to compile .map files created in a level editor such as Radiant into .bsp files used by Quake III engine games. Since it's introduction, ydnar has added so many new features and improved efficiency to the degree where Q3Map2 has become the standard compiling program for the level editing community as well as for many commercial games.
+
+While still accurate, the original QeRadiant Shader Manual written by the staff at id Software did not contain shader keywords pertaining to the new Q3Map2, hence the need for this updated version of the manual including recent developments to the compiler.
+
+This manual is based on the original manual with some minor reformatting, edits and error corrections, but the main difference is the inclusion of Q3Map2 specific shader keywords. Additionally, this version also includes an expanded appendix with information on selected Q3Map2 features as well as a new chapter for shader keywords used specifically with third party Quake III engine games.
+
+Since Q3Map2 is being updated with additional features on a regular basis, this manual will also be updated to reflect any new shader keywords being introduced so check back for updates.
+
+-Obsidian
+
+
+
+
+
Credits
+
+
+
+Q3Map2 Shader Manual
+Written by Obsidian and ydnar
+
+The Q3Map2 Shader Manual is based on the QeRadiant Shader Manual - Revision #12. Other portions were adapted from the Q3Map2 Handbook (Beta Edition), the Q3Map2 Readme document, and from various discussions on the forums/IRC channels. All works were consulted with permission from the authors.
+
+QeRadiant Shader Manual, Revision #12
+
+
Written by Paul Jaquays and Brian Hook.
+
Additional material by John Carmack, Christian Antkow, Kevin Cloud and Adrian Carmack.
+
Converted into a web friendly version by John Hutton.
+
Appendix A by TTimo.
+
+
+Q3Map2 Handbook (Beta Edition)
+
+
Written by Jetscreamer, Shadowspawn and ydnar.
+
+
+Q3Map2 Readme
+
+
Written by ydnar
+
+
+Special Thanks:
+
+
Paul Jaquays for his support, feedback and for writing the original QeRadiant Shader Manual.
+
ydnar for Q3Map2, thereby making level editing 2x more fun at 1/10 the compile time. Thanks for his technical expertise and help in writing this manual.
+
+
+This is not an id Software product. Do not contact them for support.
+
+
+
+
+
Contact
+
+
+
+Shader Manual Development
+Feel free to e-mail me if you have any suggestions, comments or error corrections.
+meridanox@gmail.com
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch1.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch1.htm.svn-base
new file mode 100644
index 0000000..d099447
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch1.htm.svn-base
@@ -0,0 +1,249 @@
+
+
+Q3Map2 Shader Manual: Introduction
+
+
+
+
+
+
+
+
+
+
+
+
+
+1 - Introduction
+
+Q3Map2 Shader Manual
+
+
+
+The graphic engine for Quake III Arena has taken a step forward by putting much more direct control over the surface qualities of textures into the hands of designers and artists. In writing this manual, we have tried to define the concepts and tools that are used to modify textures in a way that, it is hoped, will be graspable by users who already have basic knowledge of computer graphics but are not necessarily computer programmers. It is not a tutorial, nor is it intended to be one.
+
+The Manual for the Q3Radiant editor program contains a section called Creating New Assets that has the necessary information for setting up the files to create your own custom Quake III Arena shaders. You should follow a similar convention when creating your custom shaders. It is reproduced here for your convenience:
+
+
+
+Quote: from Q3Radiant Editor Manual
+Creating New Assets
+If you are familiar with the required tools, creating new assets for use in Quake III Arena is not particularly difficult. As a rule, you should create new directories for each map with names different from the names used by id. If you are making a map that will be called "H4x0r_D00M", every directory containing new assets for that map should be titled H4x0r_D00M. This is to try and avoid asset directories overwriting each other as the editor and the game load in assets.
+
+
+
+
+It is recommended that you study the scripts in this document and in the individual shader scripts. Pay careful attention to syntax and punctuation. This is where you are most likely to make mistakes.
+
+
+
+
+
What is a Shader?
+
+
+
+Shaders are short text scripts that define the properties of a surface as it appears and functions in a game world (or compatible editing tool). By convention, the documents that contain these scripts usually has the same name as the texture set which contains the textures being modified (e.g; base, hell, castle, etc,). Several specific script documents have also been created to handle special cases, like liquids, sky and special effects.
+For Quake III Arena, shader scripts are located in [Quake3]/baseq3/scripts.
+
+A Quake III Arena shader file consists of a series of surface attribute and rendering instructions formatted within braces ("{" and "}"). Below you can see a simple example of syntax and format for a single process, including the Q3Map2 keywords and "Surface Parameters", which follow the first bracket and a single bracketed "stage":
+//Shader Name
+
+//General Shader Keywords
+//Q3Map2 Specific Shader Keywords
+//Q3Map2 Specific Surface Parameter Shader Keywords
+//Editor Specific Shader Keywords
+
+//Stage Specific Shader Keywords
+
+
+
+
+Shaders need to be referenced by the map editor, compiler (Q3Map2) and game engine - each of which uses a different part of the shader. In the above example shader, the different sections are listed on the right.
+
+
+
+
+
Shader Name & File Conventions
+
+
+
+The first line is the shader name. It is used by the map editor, compiler, game engine, and models to reference the script and art files associated with the shader. Shader names can be up to 63 characters long. The names are often a mirror of a pathname to the texture image without the file extension (.tga or .jpg) or base dir (/quake3/baseq3 in our case), but they do not need to be.
+
+Shaders that are only going to be referenced by the game code, not modeling tools, often are just a single word, like "projectionShadow" or "viewBlood".
+
+Shaders that are used on character or other polygon mesh models need to mirror the art files, which allows the modelers to build with normal textures, then have the special effects show up when the model is loaded into the game.
+
+Shaders that are placed on surfaces in the map editor commonly mirror an image file, but the "qer_editorimage" shader parameter can force the editor to use an arbitrary image for display.
+
+Shader path names have a case sensitivity issue - on Windows, they aren't case sensitive, but on Unix they are. Try to always use lowercase for filenames, and always use forward slashes "/" for directory separators.
+
+Following the shader name, is an opening bracket "{" designating the beginning of the shader contents, and a closing bracket "}" at the end of the shader. Notice that the contents of the above example shader are indented for better legibility.
+
+
+
+
+
:q3map Suffix
+
+
+
+The :q3map suffix can be added to the end of the shader name of "compile-time" shaders. This means that shaders with names marked with :q3map will be used by the compiler only and will be ignored by the game engine. This is especially useful if you want to add Q3Map2-relevant shader directives to basic lightmapped textures. This allows Quake 3 to generate the stages implicitly while Q3Map2 processes the Q3Map2-relevant sections of the shader. Consider the following shaders:
+
+
+Normally, we wouldn't need a shader for this texture to be displayed properly in game since the lightmap and texture stages are generated implicitly by Quake 3. The only reason why this shader exists is because we want Q3Map2 to process this surface as having metalsteps when the player walks on it. As a result, we end up writing out the entire shader.
+
+To save ourselves from needless work, we can mark this shader as being compiler-only and have Quake 3 generate the lightmap and texture stages for us as it usually does by default:
+
+
+
Script: With :q3map
+textures/q3map2_sm/floor:q3map
+{
+ surfaceparm metalsteps
+}
+
+
+
+
+
+
+
Keyword Types
+
+
+
+Only the shader name is case sensitive (use all lowercase). Shader keywords (aka. directives) are not, but by convention, you should use mixedCase (ie. q3map_alphaMod). Some of the shader keywords are order dependant, so it's good practice to keep all keyword of a similar type grouped together in the following order, from top-down:
+
+ General Shader Keywords
+A shader may contain general shader keywords, which affects the shader's appearance globally (affects the entire shader), and changes the physical attributes of the surface that uses the shader. These attributes can affect the player. These parameters are executed at runtime, that is, in order to see the changes one does not need to re-compile the map.
+
+ Q3Map2 Specific Shader Keywords
+The general shader keywords may be followed by Q3Map2 specific keywords. These keywords are used by the compiler to change the physical nature of the shader's surface and are also global.
+
+ Q3Map2 Specific Surface Parameter Shader Keywords
+These are actually part of the Q3Map2 specific shader keywords that are flags telling the compiler about the physical nature of the shader's surface. These are also global.
+
+ Editor Specific Shader Keywords
+Editor specific shader keywords change the appearance of the shader in the map editor only. It has no effect on the shader in game.
+
+ Stage Specific Shader Keywords
+The shader may contain one or more "stages". Each stage consists of an opening and closing bracket along with the contents of the stage (indented). The stage will contain a texture map specification which specifies the source image, and various other stages specific shader keywords that modifies the appearance of the source image. Stage specific keywords are processed by the renderer. They are appearance changes only and have no effect on game play or game mechanics. Changes to any of these attributes will take effect as soon as the game goes to another level or vid_restarts (type command "/vid_restart" in the game console).
+
+
+
+
+
Documenting With Comments
+
+
+
+It is often useful to document parts of shaders, especially for testing purposes or when working with a development team of other designers. Comments added to shaders are ignored completely, making it useful for adding notes, or for temporarily removing keywords for testing.
+
+Shaders use the same double forward slashes "//" convention common with many programming languages for commenting. All text after the "//" on the same line are ignored from the shader. See various shaders for examples.
+
+
+
+
+
Key Concepts
+
+
+
+Ideally, a designer or artist who is manipulating textures with shader files has a basic understanding of wave forms and knows about mixing colored light (high school physics sort of stuff). If not, there are some concepts you need to have a grasp on to make shaders work for you.
+
+ Surface Effects vs. Content Effects vs. Deformation Effects
+Shaders not only modify the visible aspect of textures on a geometry brush, curve, patch or mesh model, but they can also have an effect on both the content, "shape," and apparent movement of those things. A surface effect does nothing to modify the shape or content of the brush. Surface effects include glows, transparencies and rgb (red, green, blue) value changes. Content shaders affect the way the brush operates in the game world. Examples include water, fog, nonsolid, and structural. Deformation effects change the actual shape of the affected brush or curve, and may make it appear to move.
+
+ Power Has a Price
+The shader script gives the designer, artist and programmer a great deal of easily accessible power over the appearance of and potential special effects that may be applied to surfaces in the game world. But it is power that comes with a price tag attached, and the cost is measured in performance speed. Each shader phase that affects the appearance of a texture causes the Quake III engine to make another processing pass and redraw the world. Think of it as if you were adding all the shader-affected triangles to the total r_speed count for each stage in the shader script. A shader-manipulated texture that is seen through another shader-manipulated texture (e.g. a light in fog) has the effect of adding the total number of passes together for the affected triangles. A light that required two passes seen through a fog that requires one pass will be treated as having to redraw that part of the world three times.
+
+ RGB Color
+RGB means "Red, Green, Blue". Mixing red, green and blue light in differing intensities creates the colors in computers and television monitors. This is called additive color (as opposed to the mixing of pigments in paint or colored ink in the printing process, which is subtractive color). In Quake III Arena and most higher-end computer art programs (and the color selector in Windows), the intensities of the individual Red, Green and Blue components are expressed as number values. When mixed together on a screen, number values of equal intensity in each component color create a completely neutral (gray) color. The lower the number value (towards 0), the darker the shade. The higher the value, the lighter the shade or the more saturated the color until it reaches a maximum value of 255 (in the art programs). All colors possible on the computer can be expressed as a formula of three numbers. The value for complete black is 0 0 0. The value for complete white is 255 255 255. However, the Quake III Arena graphics engine requires that the color range be "normalized" into a range between 0.0 and 1.0.
+
+ Normalization: a Scale of 0 to 1
+The mathematics in Quake III Arena use a scale of 0.0 to 1.0 instead of 0 to 255. Most computer art programs that can express RGB values as numbers use the 0 to 255 scale. To convert numbers, divide each of the art program's values for the component colors by 255. The resulting three values are your Quake III Arena formula for that color component. The same holds true for texture coordinates.
+
+ Texture Sizes
+TGA texture files are measured in pixels (picture elements). Textures are measured in powers of 2, with 16 x16 pixels being the smallest (typically) texture in use. Most will be larger. Textures need not be square, so long as both dimensions are powers of 2. Examples include: 32x256, 16x32, 128x16.
+
+ Color Math
+In Quake III Arena, colors are changed by mathematical equations worked on the textures by way of the scripts or "programlets" in the shader file. An equation that adds to, or multiplies the number values in a texture causes it to become darker. Equations that subtract from or modulate number values in a texture cause it to become lighter. Either equation can change the hue and saturation of a color.
+
+ Measurements
+The measurements used in the shaders are in either game units, color units, or texture units.
+
+
+Game unit: A game unit is used by deformations to specify sizes relative to the world. Game units are the same scale we have had since way back in the Wolfenstein days - 8 units equals one foot. The default texture scale used by the Radiant map editor results in two texels for each game unit, but that can be freely changed.
+
+Color units: Colors scale the values generated by the texture units to produce lighting effects. A value of 0.0 will be completely black, and a value of 1.0 will leave the texture unchanged. Colors are sometimes specified with a single value to be used across all red, green, and blue channels, or sometimes as separate values for each channel.
+
+Texture units: This is the normalized (see above) dimensions of the original texture image (or a previously modified texture at a given stage in the shader pipeline). A full texture, regardless of its original size in texels, has a normalized measurement of 1.0 x 1.0. For normal repeating textures, it is possible to have value greater than 1.0 or less than 0.0, resulting in repeating of the texture. The coordinates are usually assigned by the level editor or modeling tools, but you still need to be aware of this for scrolling or turbulent movement of the texture at runtime.
+
+
+ Waveform Functions
+Many of the shader functions use waveforms to modulate measurements over time. Where appropriate, additional information is provided with wave modulated keyword functions to describe the effect of a particular waveform on that process. Currently there are five waveforms in use in Q3A shaders:
+
+
+Sin: Sin stands for sine wave, a regular smoothly flowing wave function ranging from -1 to 1.
+Triangle: Triangle is a wave with a sharp ascent and a sharp decay, ranging from 0 to 1. It will make choppy looking wave forms.
+Square: A squarewave simply switches from -1 to 1 with no in-between.
+Sawtooth: In the sawtooth wave, the ascent is like a triangle wave from 0 to 1, but the decay cuts off sharply back to 0.
+Inversesawtooth: This is the reverse of the sawtooth... instant ascent to the peak value (1), then a triangle wave descent to the valley value (0). The phase on this goes from 1.0 to 0.0 instead of 0.0 to 1.0. This wave is particularly useful for additive cross-fades.
+
+
+Waveforms all have the following properties:
+
+
+base: Where the wave form begins. Amplitude is measured from this base value.
+amplitude: This is the height of the wave created, measured from the base. You will probably need to test and tweak this value to get it correct for each new shader stage. The greater the amplitude, the higher the wave peaks and the deeper the valleys.
+phase: This is a normalized value between 0.0 and 1.0. Changing phase to a non-zero value affects the point on the wave at which the wave form initially begins to be plotted. Example: In Sin or Triangle wave, a phase of 0.25 means it begins one fourth (25%) of the way along the curve, or more simply put, it begins at the peak of the wave. A phaseof 0.5 would begin at the point the wave re-crosses the base line. A phase of 0.75 would be at the lowest point of the valley. If only one wave form is being used in a shader, a phase shift will probably not be noticed and phase should have a value of zero (0). However, including two or more stages of the same process in a single shader, but with the phases shifted can be used to create interesting visual effects. Example: using rgbGen in two stages with different colors and a 0.5 difference in phase would cause the manipulated texture to modulate between two distinct colors. Phase changes can also be used when you have two uses of the same effect near each other, and you don't want them to be synchronized. You would write a separate shader for each, changing only the phase value.
+freq: Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of 1 would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10 seconds.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch2.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch2.htm.svn-base
new file mode 100644
index 0000000..6f3311e
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch2.htm.svn-base
@@ -0,0 +1,246 @@
+
+
+Q3Map2 Shader Manual: General Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+2 - General Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+
+IMPORTANT NOTES: Once again, be aware that some of the shader commands may be order dependent, so it's good practice to place all global shader commands (keywords defined in this section) at the very beginning of the shader and to place shader stages at the end (see various examples).
+
+These Keywords are global to a shader and affect all stages. They are also ignored by Q3Map2.
+
+
+
+
+
skyParms farbox cloudheight nearbox
+
+
+
+Specifies how to use the surface as a sky, including an optional far box (stars, moon, etc), optional cloud layers with any shader attributes, and an optional near box (mountains in front of the clouds, etc).
+
+
+farbox : Specifies a set of files to use as an environment box behind all cloudlayers. Specify "-" for no farbox, or a file base name. A base name of "env/test" would look for files "env/test_rt.tga", "env/test_lf.tga", "env/test_ft.tga", "env/test_bk.tga", "env/test_up.tga", "env/test_dn.tga" to use as the right / left / front / back / up / down sides.
+cloudheight : Controls apparent curvature of the cloud layers - lower numbers mean more curvature (and thus more distortion at the horizons). Higher height values create "flatter" skies with less horizon distortion. Think of height as the radius of a sphere on which the clouds are mapped. Good ranges are 64 to 256. The default value is 128.
+nearbox : Specified as farbox, to be alpha blended ontop of the clouds. This has not be tested in a long time, so it probably doesn't actually work. Set to "-" to ignore.
+
+
+Design Notes:
+
+
If you are making a map where the sky is seen by looking up most of the time, use a lower cloudheight value. Under those circumstances the tighter curve looks more dynamic. If you are making a map where the sky is seen by looking out windows most of the time or has a map area that is open to the sky on one or more sides, use a higher height to make the clouds seem more natural.
+
It is possible to create a sky with up to 8 cloudlayers, but that also means 8 processing passes and a potentially large processing hit.
+
Be aware that the skybox does not wrap around the entire world. The "floor" or bottom face of the skybox is not drawn by the game. If a player in the game can see that face, they will see the "hall of mirrors" effect.
+
There's a bug in Quake 3 (but fixed in Enemy Territory) that causes a shader vertex overflow (SHADER_MAX_VERTEXES HIT IN FILLCLOUDSKYSIDE) if more than two cloud layers are used in maps with a lot of visible sky. To compensate, either reduce the amount of visible sky or limit the shader to two cloud layers.
+
+
+Q3Map2 sky shaders work differently from the original and contain a number of improvements in terms of efficiency and visually. The example given below is an original Quake III Arena sky shader. While it is still operational, it is a little outdated and is being kept here for legacy purposes only. It is recommended that you take advantage of the new features of Q3Map2 skies by consulting Appendix I: Light Emitting Shaders > Skies.
+
+
+
+Every surface of a polygon has two sides, a front and a back. Typically, we only see the front or "out" side. For example, a solid block you only show the front side. In many applications we see both. For example, in water, you can see both front and a back. The same is true for things like grates and screens.
+
+To "cull" means to remove. The value parameter determines the type of face culling to apply. The default value is cull back if this keyword is not specified. However for items that should be inverted then the value front should be used. To disable culling, the value disable or none should be used. Only one cull instruction can be set for the shader.
+
+
+front : The front or "outside" of the polygon is not drawn in the world. It is used if the keyword "cull" appears in the content instructions without a side value.
+back : Cull back removes the back or "inside" of a polygon from being drawn in the world.
+disable or none : Neither side of the polygon is removed. Both sides are drawn in the game. Very useful for making panels or barriers that have no depth, such as grates, screens, metal wire fences and so on and for liquid volumes that the player can see from within. Also used for energy fields, sprites, and weapon effects (e.g. plasma).
+
+
+Design Notes
+For things like grates and screens, put the texture with the cull none property on one face only. On the other faces, use a non-drawing texture.
+
+
+
+
+
deformVertexes type ---
+
+
+
+This function performs a general deformation on the surface's vertexes, changing the actual shape of the surface before drawing the shader passes. You can stack multiple deformVertexes commands to modify positions in more complex ways, making an object move in two dimensions, for instance. There are 6 possible values for the type parameter, each of which will be described in more detail: wave, normal, bulge, move, autosprite, autosprite2. Depending on which of the 6 type parameters are used, different additional parameters will need to be used, including the generalized waveform functions (see Chapter 1: Key Concepts)
+
+Design Notes:
+The div and amplitude parameters, when used in conjunction with liquid volumes like water should take into consideration how much the water will be moving. A large ocean area would have have massive swells (big div values) that rose and fell dramatically (big amplitude values). While a small, quiet pool may move very little.
+
+ deformVertexes wave div func base amplitude phase freq
+Designed for water surfaces, modifying the values differently at each point. The div parameter is used to control the wave "spread" - a value equal to the q3map_tessSize of the surface is a good default value. It accepts the standard wave functions sin, triangle, square, sawtooth or inversesawtooth.
+
+ deformVertexes normal div func base amplitude freq
+This deformation affects the normals of a vertex without actually moving it, which will effect later shader options like lighting and especially environment mapping. If the shader stages don't use normals in any of their calculations, there will be no visible effect. The div parameter is used to control the wave "spread" - a value equal to the q3map_tessSize of the surface is a good default value. Good values for amplitude ranges from 0.1 to 0.5 while values of 1.0 to 4.0 are good for frequency.
+
+Design Notes:
+Putting values of 0.1 to 0.5 in Amplitude and 1.0 to 4.0 in the Frequency can produce some satisfying results. Some things that have been done with it: A small fluttering bat, falling leaves, rain, flags.
+
+ deformVertexes bulge bulgeS bulgeT bulgeSpeed
+This forces a bulge to move along the given s and t directions. Designed for use on curved pipes. The bulgeS and bulgeT parameters is the amount of bulge displacement measured in game units. bulgeSpeed is the number of seconds it takes for the bulge to complete a single cycle.
+
+ deformVertexes move x y z func base amplitude phase freq
+The move parameter is used to make a brush, curve patch or model appear to move together as a unit. The x y z values are the distance and direction in game units the object appears to move relative to it's point of origin in the map.
+The func base amplitude phase freq values are the same as found in other waveform manipulations.
+
+The product of the function modifies the values x, y, and z. Therefore, if you have an amplitude of 5 and an x value of 2, the object will travel 10 units from its point of origin along the x axis. This results in a total of 20 units of motion along the x axis, since the amplitude is the variation both above and below the base.
+
+It must be noted that an object made with this shader does not actually change position, it only appears to.
+
+Design Notes:
+If an object is made up of surfaces with different shaders, all must have matching deformVertexes move values or the object will appear to tear itself apart.
+
+ deformVertexes autosprite
+This function can be used to make any given triangle quad (pair of triangles that form a square rectangle) automatically behave like a sprite without having to make it a separate entity. This means that the "sprite" on which the texture is placed will rotate to always appear at right angles to the player's view as a sprite would. Any four-sided brush side, flat patch, or pair of triangles in a model can have the autosprite effect on it. The brush face containing a texture with this shader keyword must be square.
+
+ deformVertexes autosprite2
+Is a slightly modified "sprite" that only rotates around the middle of its longest axis. This allows you to make a pillar of fire that you can walk around, or an energy beam stretched across the room.
+
+
+
+
+
fogParms ( r g b ) opacity
+
+
+
+Note: You must also specify "surfaceparm fog" to cause Q3Map2 to identify the surfaces inside the volume. Fogparms only describes how to render the fog on the surfaces.
+
+r g b : These are normalized values. A good computer art program should give you the RGB values for a color. To obtain the values that define fog color for Quake III Arena, divide the desired color's red, green and blue values by 255 to obtain three normalized numbers within the 0.0 to 1.0 range.
+opacity : This is the distance, in game units, until the fog becomes totally opaque, as measured from the point of view of the observer. By making the height of the fog brush shorter than the distance to opaque, the apparent density of the fog can be reduced (because it never reaches the depth at which full opacity occurs).
+
+
+
The fog volume can only have one surface visible (from outside the fog).
+
Fog must be made of one brush. It cannot be made of adjacent brushes.
+
Fog brushes must be axial. This means that only square or rectangular brushes may contain fog, and those must have their edges drawn along the axes of the map grid (all 90 degree angles).
+
+
+Design Notes:
+
+
If a water texture contains a fog parameter, it must be treated as if it were a fog texture when in use.
+
If a room is to be filled completely with a fog volume,it can only be entered through one surface (and still have the fog function correctly).
+
Additional shader passes may be placed on a fog brush, as with other brushes.
+
+
+
+
+
+
noPicMip
+
+
+
+This causes the texture to ignore user-set values for the r_picmip cvar command. The image will always be high resolution. Example: Used to keep images and text in the heads up display from blurring when user optimizes the game graphics.
+
+
+
+
+
noMipMaps
+
+
+
+This implies noPicMip, but also prevents the generation of any lower resolution mipmaps for use by the 3D card. This will cause the texture to alias when it gets smaller, but there are some cases where you would rather have this than a blurry image. Sometimes thin slivers of triangles force things to very low mipmap levels, which leave a few constant pixels on otherwise scrolling special effects.
+
+
+
+
+
polygonOffset
+
+
+
+Surfaces rendered with the polygonOffset keyword are rendered slightly off the polygon's surface. This is typically used for wall markings and "decals." The distance between the offset and the polygon is fixed. It is not a variable in Quake III Arena.
+
+Design Notes:
+
+
Use this for wall or floor markings, particularily for direction arrows for team games. Texture the brush with the decal shader on one face and the other faces with a nodraw shader. Then place the brush flush with the surface of the wall or floor.
+
When using a _decal entity for texture projection, polygonOffset must be used to prevent Z-fighting. If you experience problems with depth sorting, try using sort 6.
+
+
+
+
+
+
+
portal
+
+
+
+Specifies that this texture is the surface for a portal or mirror. In the game map, a portal entity must be placed directly in front of the texture (within 64 game units). All this does is set "sort portal", so it isn't needed if you specify that explicitly.
+
+
+
+
+
sort value
+
+
+
+Use this keyword to fine-tune the depth sorting of shaders as they are compared against other shaders in the game world. The basic concept is that if there is a question or a problem with shaders drawing in the wrong order against each other, this allows the designer to create a hierarchy of which shader draws in what order.
+
+The default behavior is to put all blended shaders in sort "additive" and all other shaders in sort "opaque", so you only need to specify this when you are trying to work around a sorting problem with multiple transparent surfaces in a scene.
+
+The value here can be either a numerical value or one of the keywords in the following list (listed in order of ascending priority):
+
+
+ portal (1): This surface is a portal, it draws over every other shader seen inside the portal, but before anything in the main view.
+ Sky (2): Typically, the sky is the farthest surface in the game world. Drawing this after other opaque surfaces can be an optimization on some cards. This currently has the wrong value for this purpose, so it doesn't do much of anything.
+ Opaque (3): This surface is opaque (rarely needed since this is the default with no blendfunc)
+ Banner (6): Transparent, but very close to walls.
+ Underwater (8): Draw behind normal transparent surfaces.
+ Additive (9): Normal transparent surface (default for shaders with blendfunc's)
+ Nearest (16): This shader should always sort closest to the viewer, e.g. muzzle flashes and blend blobs.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch3.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch3.htm.svn-base
new file mode 100644
index 0000000..4208e89
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch3.htm.svn-base
@@ -0,0 +1,799 @@
+
+
+Q3Map2 Shader Manual: Q3Map2 Specific Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+3 - Q3Map2 Specific Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+These keywords change the physical nature of the textures and the brushes that are marked with them. Changing any of these values will require the map to be re-compiled. These are global and affect the entire shader.
+
+
+
+
+
q3map_alphaGen func ---
+
+
+blah
+
+
+
+
+
q3map_alphaMod func ---
+
+
+
+This is used for special blending effects on shaders by altering the amount of blending falloff depending on specific surface properties such as the surfaces normal axis or the vertexes contained within its volume. alphaMod operations are applied to an object's vertexes so the rgbGen vertex directive is required for each affected stage.
+
+ q3map_alphaMod dotproduct ( X Y Z)
+It is used to blend textures using alphaFunc or blendFunc in the shader's second pass, with the falloff depending on the surface's normal axis. This is achieved by doing a vector dot product of the specified normalized vector value ( X Y Z ) and the vertex normal which yields the amount of blending. The dot product operation multiplies each element of one vector against the corresponding elements of a second vector, then adds them. Examples:
+
+
+ q3map_alphaMod dotproduct2 ( X Y Z )
+This works in a similar way to dotproduct except it exaggerates the differences in vertex normals by squaring the final dot product value. With the same values as the above example, dotproduct2 would give the following:
+
+
+Design Notes:
+Typical examples of use include snow covering the top faces of objects, or terrain with grass growing on horizontal planes blending into rocky cliffs on near vertical surfaces. It is an excellent way of automatically creating realistic alpha-blended terrain without the complicated steps in setting up an alpha map.
+
+
+ q3map_alphaMod scaleN.N
+Used in conjunction with q3map_alphaMod volume. Scales the vertex alpha by N.N.
+
+ q3map_alphaMod setN.N
+Used in conjunction with q3map_alphaMod volume. Sets the vertex alpha (regardless of any previous alpha values) to N.N * 255.
+
+ q3map_alphaMod volume
+This was created as a way to explicitly set the amount of vertex alpha-blending by altering the alpha values of vertexes contained within a brush volume marked with this shader directive. Applies all other q3map_alphaMod directives to each vertex inside a brush textured with this shader, allowing large faded scrolling fire shaders, waterfalls, marquees, explicit dotProduct terrain blending control, etc.
+
+Design Notes:
+This is usually used in special alphaMod volume "common" shaders for use within the editor only. A brush textured with the alphaMod volume shader is used to overlap the vertexes of another brush using an alpha-blended shader, altering the vertex alpha values. Worldspawn alphaMod volume brushes will affect all surfaces. You can func_group an alphaMod volume brush to affect only that entity.
+
+
+
+
+
q3map_backShader shadername
+
+
+
+This allows a brush to use a different shader when you are inside it looking out. By way of example, this would allow a water brush (or other) surfaces to have a different sort order or appearance when seen from the inside. q3map_backShader only works on brush faces. For this reason, it is deprecated in favor of using q3map_cloneShader where the target shader contains q3map_invert.
+
+
+
+
+
+
+
q3map_backSplash percentage distance
+
+
+
+A surface light is lit by itself, often causing areas of higher light intensity than other areas. q3map_backSplash moves the light source away from the surface of the shader, allowing it to create smoother lighting over the face. By default, all shaders are assigned backsplash values, 0.05 for the percentage, 23 units for the distance.
+
+
+percentage : Specifies the intensity percentage of the light generated by q3map_surfacelight to be redirected back at the surface. Use a value of 0 or a negative value to disable back splash lights.
+distance : Distance of the back splash lights from the surface.
+
+
+
+
+
+
q3map_baseShader shadername
+
+
+
+Allows shaders to be subclassed (Q3Map2 relevant portions only, such as surfaceparms, lighting, texture projection, etc). Subclassed shaders can reference the base shader by referring to the base shader's name. In order for q3map_baseShader to work correctly, the base shader must be specified before any shaders that subclass it. Some EasyGen terrain templates incorrectly specified the base shader after the terrain shaders that depended on it, resulting in some interesting errors.
+
+This is fundamentally the reverse of q3map_remapShader. Use q3map_baseShader when a single group of q3map_* directives is required for multiple base shaders. Use q3map_remapShader when similar shaders are used that require different groups of q3map_* directives.
+
+
+
+Use a number between 0 and 1.0 (or higher), to scale the amount of light reflected in radiosity passes. You can oversaturate it by using a number higher than 1.0, but this can lead to excessive compile times. Using 90 would probably make things positively glacial. 1.0 is a default, fudged number that looked OK with the maps that were tested. Tweaking it to 1.5 or 2.0 won't hurt anything, per se, but it does give you finer control over how each shader re-emits light. The poorly worded q3map_bounce has been renamed to q3map_bounceScale. While its use has been deprecated, q3map_bounce still works.
+
+
+
+
+
q3map_clipModel
+
+
+
+Automatically clips misc_model entities for player and weapon collision. This should only be used on large models such as terrain (not small decorative models - manually clip those). The shader's surfaceparms are inherited by the magic clip brush, so if you have surfaceparm nonsolid in your model's shader that uses q3map_clipModel, then the brush will also be non-solid. This can also be set on a per model basis with spawnflags 2.
+
+
+
+
+
q3map_cloneShader shadername
+
+
+
+A shader with this keyword will inherit the target shader's properties and appearance. Be careful, this can lead to an infinite loop if a cloning shader references another cloning shader or itself.
+
+
+
+
+
q3map_colorGen
+
+
+blah
+
+
+
+
+
q3map_colorMod
+
+
+blah
+
+
+
+
+
q3map_extraShader
+
+
+
+Does not exist!
+
+
+
+
+
q3map_fadeAlpha N
+
+
+
+Does not exist!
+
+
+
+
+
q3map_fogDir angle
+
+
+
+Specifies the direction a fog shader fades from transparent to opaque.
+
+
+
+
+
q3map_forceMeta
+
+
+
+Forces model (MD3, ASE, etc.) surfaces to be broken down into their component triangles like brush faces and passed through the meta code on a per shader basis. This is required for lightmapped models. Setting spawnflags 4 on a misc_model will set q3map_forceMeta on all its surfaces.
+
+
+
+
+
+
+
q3map_forceSunlight
+
+
+
+Obsolete!
+By default, no sunlight is cast on vertex-lit .md3 models or vertex-lit terrain. Using this option, sunlight (overbright bits created by the q3map_sun option) will be cast on these surfaces. q3map_forceSunlight is now obsolete since suns are now first class light sources.
+
+
+
+
+
q3map_fur layers offset fade
+
+
+
+This is used for generating fur over a surface. This is typically used in conjunction with q3map_cloneShader in the surface (parent) shader and references the fur shader as the clone. A possible application of this is to create grass on alphablended terrain. Keep in mind that the use of a fur shader may cause a large hit to performance but when used sparingly, it can produce some interesting effects. (See Appendix D: Fur)
+
+
+layers : This specifies the number of desired replicated fur layers generated.
+offset : The distance (in game units) between subsequent layers.
+fade : A normalized value indicating the fade falloff between subsequent layers.
+
+
+
+
+
+
q3map_globalTexture
+
+
+
+Use this shader in the global keyword commands whenever the tcMod scale function is used in one of the later render stages. Many problems with getting shader effects to work across multiple adjacent brushes are a result of the way Q3Map2 optimizes texture precision. This option resolves that, but at the expense of some precision of the textures when they are far away from the origin of the map.
+
+
+
+
+
q3map_indexed
+
+
+
+This is used for explicit terrain-style indexed mapping. It instructs Q3Map2 to look at the func_group terrain entity's _indexmap key for an image to pull index values from, and then to construct a shader name with the root based on the _shader key's value.
+
+
+
+
+
q3map_invert
+
+
+
+Inverts a surface normal. Works on brush faces, models and patches. Used in celshading to achieve the inverted backfacing hull.
+
+
+
+
+
q3map_lightImage texturename
+
+
+
+By default, surface lights use the average color of the source image to generate the color of the light. q3map_lightImage specifies an alternate image to be used for light color emission, radiosity color emission, light filtering and alpha shadows. You can even use a light image with a different alpha channel for blurrier alpha shadows. The light color is averaged from the referenced texture. The texture must be the same size as the base image map. q3map_lightImage should appear before qer_editorImage.
+
+The reason q3map_lightImage is specified for the light in the example below, is because the blend map is predominantly yellow, but the base image is not. The designer wanted the color of the light to be sampled from the blend map instead of the base image.
+
+
+
+
Script: Taking light from another source image
+textures/eerie/ironcrosslt2_10000
+{
+ q3map_lightImage textures/gothic_light/ironcrosslt2.blend.tga
+ // this TGA is the source for the color of the blended light
+
+ qer_editorImage textures/gothic_light/ironcrosslt2.tga
+ //editor TGA (used because the shader is used with several different light values)
+
+ q3map_surfacelight 10000
+ //emitted light value of 10,000
+
+ {
+ map $lightmap
+ //source texture is affected by the lightmap
+ rgbGen identity
+ // this command handles the overbright bits created by "sunlight" in the game
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc filter
+ rgbGen identity
+ }
+ {
+ maptextures/gothic_light/ironcrosslt2.blend.tga
+ blendFunc add
+ }
+}
+
+
+
+
+
+
+
q3map_lightmapAxis axis
+
+
+
+Takes a single argument: either x, y or z. The keyword q3map_terrain has an implicit (read default) q3map_lightmapAxis defined as z. This keyword is not recommended for things like caves or arches which have undersides.
+
+
+
+
+
q3map_lightmapBrightness N.N
+
+
+
+Lightmap brightness scaling. A value of 2.0 will be twice as bright (linearly) and a value of 0.5 will be half as bright.
+
+
+
+
+
q3map_lightmapFilterRadius self other
+
+
+
+This is usually used on light emitting shaders to approximate finer subdivided lighting. It adds a gaussian blur effect to the lightmaps of either the shader itself, or the surfaces affected by the shader, or both. The values for self and other are measured in world units of filtering (blurring) of lightmap data cast by any light sources. The self parameter can be set for surfacelights for finer subdivided lighting, but should be set to 0 for sky shaders since they don't have lightmaps. The other parameter should be set just high enough to eliminate the "stadium shadow" effect sometimes produced by q3map_skylight or to smooth out the lighting on surfacelights. If using a value higher than 4 for the iterations parameter on q3map_skylight, you don't need q3map_lightmapFilterRadius as much, but at the expense of higher compile times. q3map_lightmapFilterRadius should be placed before any light related shader directives that you want it to affect. (see Appendix I: Light Emitting Shaders)
+
+
+
+Allows terrain to be mapped onto a single lightmap page for seamless terrain shadows. It will specify that the shaders using it can merge nonplanars together onto a single lightmap, so you can have a single 512x512 lightmap across a terrain entity.
+
+
+
+
+
q3map_lightmapSampleOffset distance
+
+
+
+Takes a single parameter, defaulting to 1.0, which specifies how many units off a surface should Q3Map2 sample lighting from. Use larger values (2.0-8.0) if you're getting ugly splotches on lightmapped terrain.
+
+
+
+
+
q3map_lightmapSampleSize N
+
+
+
+Surfaces using a shader with this option will have the pixel size of the lightmaps set to (NxN). This option can be used to produce high-resolution shadows on certain surfaces. In addition, it can be used to reduce the size of lightmap data, where high-resolution shadows are not required. The default Quake III lightmap sample size is 16.
+
+
+
+
+
q3map_lightmapSize width height
+
+
+
+Specifies the size of the lightmap texture that surface lightmaps get packed on to. Used mainly in Enemy Territory for terrain lightmaps (512x512) in concert with the Q3Map2 switch -lightmapsize.
+
+
+
+
+
q3map_lightRGB red green blue
+
+
+
+This forces a specified color of light to be emitted from a surface or sky light, rather than sampling colors from a lightimage, editor image or the texture map. Three normalized color values of light are required for the red green blue parameters. This does not affect bounced light in radiosity or lightfilter.
+
+
+
+
+
q3map_lightStyle N
+
+
+
+Used to set light styles on surface lights for lightmap flickering/waveform effects. N takes the form of a number between 1 and 31, that references the corresponding style number set in the worldspawn entity. Equivalent to setting "style" "N" on a light entity (see Appendix G: Lightstyles).
+
+
+
+
+
q3map_lightSubdivide N
+
+
+
+Used on surface lights (see q3map_surfacelight). Chops up the surface into smaller polygons for more uniform lighting. It defaults to 120 game units, but can be made larger or smaller as needed (for light surfaces at the bottom of cracks, for example). This can be a dominant factor in processing time for Q3Map2 lighting. Can have an increasingly "darker" effect when used with -fast. Compensate by raising the surface light value. For sky shaders, use q3map_skylight instead (see Appendix I: Light Emitting Shaders).
+
+
+
+
+
q3map_noClip
+
+
+
+You might have noticed that terrain has been made to not clip or t-junction anymore. It was causing too many issues, so a new parameter was added: q3map_noClip. Normally, Q3Map2 clips all faces to the BSP, and then takes the minimum polygon that encompasses all visible fragments. q3map_noClip forces Q3Map2 to uses the original brush faces (This is implicit for autosprite(2) surfaces). Therefore, if you map tidy, you could theoretically use q3map_noClip on all your shaders. q3map_noClip and q3map_noTJunc, when used in combination, will preserve mesh geometry exactly as you make it.
+
+
+
+
+
q3map_noFast
+
+
+
+When used on surfaces that emit light, this will disable -fast optimizations. This is useful for large areas of dim sky, where you want the dim light to reach all surfaces. This shader keyword prevents fast from affecting dim sky surfaces. It is necessary, if you can't do a workaround with brighter skies or by using a larger q3map_lightSubdivide value.
+
+
+
+
+
q3map_noFog
+
+
+
+Volumes marked with a shader containing this keyword will not be affected by fog.
+
+
+
+
+
q3map_nonPlanar
+
+
+Instructs Q3Map2 to merge any adjacent triangles that don't lie in the same plane into a non-planar triangle soup. This allows shadows to be cast correctly across non-planar edges. It is typically used on lightmapped terrain shaders.
+
+
+
+
+
q3map_normalImage texturename
+
+
+
+Allow the use of a normal (height) map to simulate textured bumpmapping. This isn't real bumpmapping per se, but generates a static lightmap image that reflects the normal map and light source.
+
+
+
+
+
q3map_noTJunc
+
+
+
+Read as "no T-Junc". With this option, surfaces modified by a shader are not used for T-junction fixing. q3map_noClip and q3map_noTJunc, used in combination will preserve mesh geometry exactly as you make it.
+
+
+
+
+
q3map_noVertexLight
+
+
+blah
+
+
+
+
+
q3map_noVertexShadows
+
+
+
+Obsolete!
+Vertex lighting code was rewritten a couple of times, rendering this keyword irrelevant. Shaders that are used on misc_models or terrain were to use q3map_noVertexShadows to disable shadows being cast on the vertex lit surfaces. Casting shadows at small, misc_model objects often makes sense. However, having shadows on large, vertex lit terrain surfaces often looks bad. Shadows are not cast on forced_vertes_lit surfaces by default (shaders with pointlight).
+
+
+
+
+
q3map_offset N.N
+
+
+
+Offsets a surface along the vertex normals N.N units. Used in celshading.
+
+
+
+
+
q3map_patchShadows
+
+
+
+Obsolete!
+When this option is used in conjunction with the original lighting algorithm (-light), surfaces with textures modified with this option will show shadows that are cast by curve patches. Curve patches do not cast shadows by default.
+
+
+
+
+
q3map_remapShader shadername
+
+
+Allows shaders to be subclassed. Subclassed shaders can reference the remap shader by referencing the remap shader's name. In order for this to work, the remap shader must be specified before any shaders that references it. Subclassed shaders must contain Q3Map2 and editor relevant portions only (q3map_*, surfaceparm and qer_* directives).
+
+This is fundamentally the reverse of q3map_baseShader. Use q3map_baseShader when a single group of q3map_* directives is required for multiple base shaders. Use q3map_remapShader when similar shaders are used that require different groups of q3map_* directives.
+
+Design Notes:
+Since the subclassed shaders that are applied to geometry does not contain any texture stages, qer_editorImage is usually required in conjunction with q3map_remapShader.
+
+
+
+
+
q3map_replicate
+
+
+
+Does not exist!
+
+
+
+
+
q3map_rgbGen
+
+
+blah
+
+
+
+
+
q3map_rgbMod
+
+
+blah
+
+
+
+
+
q3map_shadeAngle angle
+
+
+Specifies the breaking angle for phong shading. This allows for smooth shadows between brush faces like patches. The angle parameter is the angle between adjacent faces at which smoothing will start to occur. Typical values are usually in the 120-179 range.
+
+
+
+
+
q3map_skylight amount iterations
+
+
+
+This replaces q3map_surfacelight and q3map_lightSubdivide on sky surfaces for much faster and more uniform sky illumination. Amount is a brightness value, similar to what you would use in q3map_sun. Good values are between 50 and 200. Iterations is an exponential factor. 3 is the best value that balances speed and quality. Values of 4 and 5 are higher quality at the expense of higher compile time. Values below 3 are not too useful
+
+
+
+
+
q3map_splotchFix
+
+
+
+This is used on lightmapped model shaders if splotched lighting artifacts appear. Any shadows at the ambient/dark level will be flooded from neighbouring luxels. This gets rid of shadow acne, but a surface must be more or less uniformly lit or this looks ugly. Try using q3map_lightmapSampleOffset first before using this as a last resort.
+
+
+
+
+
q3map_styleMarker
+
+
+
+For use on shaders that accompany style lights. For any shaders that may be hit by a styled light, add q3map_styleMarker after the lightmap stage and before the texture stages so Q3Map2 can properly create the fake lightmap stages (see Appendix G: Lightstyles).
+
+
+
+
+
q3map_styleMarker2
+
+
+
+Similar to q3map_styleMarker except it is used on masked textures where a depthFunc equal is required.
+
+
+
+
+
q3map_sun red green blue intensity degrees elevation
+
+
+
+This keyword in a sky shader will create the illusion of light cast into a map by a single, infinitely distance parallel light source (sun, moon, hellish fire, etc.). This is only processed during the lighting phase of Q3Map2. While still perfectly usable, q3map_sun is now deprecated in favour for q3map_sunExt (see below).
+
+
+red green blue : Color is described by three normalized RGB values. Color will be normalized to a 0.0 to 1.0 range, so it doesn't matter what range you use.
+intensity : The brightness of the generated light. A value of 100 is a fairly bright sun. The intensity of the light falls off with angle but not distance.
+degrees : The angle relative to the directions of the map file. A setting of 0 degrees equals east. 90 is north, 180 is west and 270 is south. In the original version of Q3Map, non-axial values had a tendency to produce jagged shadows. With Q3Map2, this problem is avoided with new options like lightmap filtering, raytracing and penumbra effects.
+elevation : The distance, measured in degrees from the horizon (z value of zero in the map file). An elevation of 0 is sunrise/sunset. An elevation of 90 is noon.
+
+
+Design Notes:
+Sky shaders should probably still have a q3map_surfacelight or preferred q3map_skylight value. The "sun" gives a strong directional light, but doesn't necessarily give the fill light needed to soften and illuminate shadows. Skies with clouds should probably have a weaker q3map_sun value and a higher q3map_surfacelight or q3map_skylight value. Heavy clouds diffuse light and weaken shadows. The opposite is true of a cloudless or nearly cloudless sky. In such cases, the "sun" or "moon" will cast stronger shadows that have a greater degree of contrast. This is also why q3map_sunExt is preferred. It gives the designer greater control over shadow contrast with a penumbra effect.
+
+Design Trick:
+Not certain what color formula you want to use for the sun's light? Try this. Create a light entity. Use the Radiant editor's color selection tools to pick a color. The light's _color key's value will be the normalized RGB formula. Copy it from the value line in the editor (CTRL+c) and paste it into your shader.
+
+
+
+
+
q3map_sunExt red green blue intensity degrees elevation deviance samples
+
+
+
+Works like q3map_sun with the addition of two new parameters to create "light jittering" for penumbra (half-shadow) effects. This gives you much more realistic shadows from the sun, especially when trying to simulate a cloudy day or a wide sun. The penumbra effect can also be applied to entity lights (point, spot or sun) with the _deviance N (distance in world units for point/spot lights and degrees for suns) and _samples N (number of samples) key/value pairs.
+
+
+deviance : The number of degrees for the half-shadow. General values up to 2 or 3 are acceptable. The real sun has a solid angle of about half a degree.
+samples : The number of random jitters distributed over the solid arc (~16).
+
+
+
+
+
+
q3map_sunlight
+
+
+
+Does not exist!
+
+
+
+
+
q3map_surfacelight value
+
+
+
+The texture gives off light equal to the value set for it. The relative surface area of the texture in the world affects the actual amount of light that appears to be radiated. To give off what appears to be the same amount of light, a smaller texture must be significantly brighter than a larger texture. Unless the q3map_lightImage keyword is used to select a different source for the texture's light color information, the color of the light will be the averaged color of the texture. For sky shaders, use q3map_skylight instead for faster and more uniform sky illumination.
+
+
+
+
+
q3map_surfaceModel modelpath density odds minscale maxscale minangle maxangle oriented
+
+
+
+A surface with q3map_surfaceModel in its shader will randomly place a specified model across it's face. This is designed to place grass or tree models over terrain.
+
+
+modelpath : The path to the model file (any supported format).
+density : The density of the models, in game units.
+odds : The odds of the model appearing (normalized?).
+minscale : The minimum scale of the model from its original size of 1.0.
+maxscale : The maximum scale of the model from its original size of 1.0.
+minangle : The model's minimum angle of rotation.
+maxangle : The model's maximum angle of rotation.
+oriented : This is a flag, either 0 or 1, and sets whether the model gets fitted to the orientation of the surface.
+
+
+
+
+
+
q3map_tcGen func ---
+
+
+
+This currently supports two functions, vector and ivector. Both functions are used for texture projection and do the exact same thing. The only difference is in the math, ivector was designed to be more intuitive.
+
+ q3map_tcGen vector sVector tVector
+Projects a texture Ns units by Nt units along a chosen axis. q3map_tcGen vector ( 1/256 0 0 ) ( 0 1/256 0 ) will project a texture every 256 units in x, and every 256 units in y, along the z-axis.
+
+ q3map_tcGen ivector 1.0/sVector 1.0/tVector
+Projects a texture Ns units by Nt units along a chosen axis. q3map_tcGen ivector ( 256 0 0 ) ( 0 256 0 ) will project a texture every 256 units in x, and every 256 units in y, along the z-axis. Ivector means inverse vector, and this means you won't have to do the divide with a calculator. Inverse = 1.0/n, unless the value is 0, then the matrix value is set to 0. A bit of dodgy math, but it works.
+
+
+
+
+
q3map_tcMod func ---
+
+
+
+This works in a similar manner to the stage specific tcMod keyword (see Chapter 6 tcMod), except in the compiler, so that modified texture coordinates are "baked" into the surface. This lets you set up less obvious texture tiling on natural and organic surfaces (especially terrain).
+
+ q3map_tcMod rotate degrees
+Rotates the texture (around origin, not center) a specified number of degrees.
+
+ q3map_tcMod scale s-scale t-scale
+Scales S (x) and T (y) texture co-ordinates. scale 2 2 would halve the size of the texture (doubling the texture co-ordinates).
+
+ q3map_tcMod translate or move or shift s-offset t-offset
+Shifts texture co-ordinates by S, T amount. translate 0.5 0 would shift it one-half in S, and none in T.
+
+
+
+
+
q3map_terrain
+
+
+
+Alphamap terrain shaders (typically textures/common/terrain and terrain2) must have the q3map_terrain keyword. Terrain is handled completely differently from previous versions. Q3Map2 no longer looks for the word terrain in the shader name to determine whether or not it is an indexed shader. It looks for q3map_indexed, or q3map_terrain, which then sets off a bunch of stuff shoehorned into it, like: the lightmap axis, texture projection, etc.
+
+By default, q3map_terrain sets the following:
+
+
+
+
+This controls the tessellation size (how finely a surface is chopped up in to triangles), in game units, of the surface. This is only applicable to solid brushes, not curves, and is generally only used on surfaces that are flagged with the deformVertexes keyword. Abuse of this can create a huge number of triangles. This happens during Q3Map2 processing, so maps must be reprocessed for changes to take effect. The poorly named tessSize keyword still works but has been deprecated in favour of q3map_tessSize for the sake of consistency.
+
+Design Notes:
+It can also be used on tessellating surfaces to make sure that tessellations are large and thus, less costly in terms of triangles created.
+
+
+
+
+
q3map_textureSize X Y
+
+
+
+Deprecated. Useful when you don't specify an editor or light image for a shader. Recent builds of Q3Map2 will find some referenced image in a shader and use that as a fallback. Historically, this was used for surface splitting for RTCW for PS2, to accommodate the hardware's limited texture range precision.
+
+
+
+
+
q3map_traceLight
+
+
+
+Obsolete!
+Surfaces using a shader with this option will always be lit with the original light algorithm. Patches will not cast shadows on this surface, unless the shader option q3map_patchShadows is also used.
+
+
+
+
+
q3map_vertexScale scale
+
+
+
+The light value, at the vertices of a surface using a shader with this option, is multiplied by the scale value. This is a way to lighten, or darken, a vertex_lit surface, in comparison to other lightmap_lit surfaces around it.
+
+
+
+
+
q3map_vertexShadows
+
+
+
+Obsolete! (See q3map_noVertexShadows)
+By default, no shadows are cast on vertex_lit_surfaces (see surfaceparm pointlight). In addition, when running Quake III Arena in vertex light, no shadows are cast upon any surface at all, since shadows are part of the lightmap. When using this shader keyword, shadows will be cast on surfaces that are vertex lit. However, sharp shadow edges won't be seen on the surfaces, since light values are only calculated at the vertices.
+
+
+
+All surfaceparm keywords are preceded by the word surfaceparm as follows: surfaceparm fog or surfaceparm noimpact.
+
+These keywords change the physical nature of the textures and the brushes that are marked with them. Changing any of these values will require the map to be re-compiled. These are global and affect the entire shader.
+
+It should be noted that some of these surface parameters will change both the surface as well as the content of an object (surfaceparm water, for example). Shaders containing content altering surface parameters should usually be used on all sides of the object.
+
+Many of these keywords are only used in "common" shaders (baseq3/scripts/common.shader), which are editor specific shaders used by the level designer. Such keywords are usually not used for the design of custom assets.
+
+Originally, surfaceparm's were part of the previous chapter since they are actually Q3Map2 specific keywords. I've moved them into their own chapter for the sake of being easier to reference, since both this and the previous chapter were getting too long.
+
+
+
+
+
surfaceparm alphashadow
+
+
+
+This keyword applied to a texture on a brush, patch or model will cause the lighting phase of the Q3Map2 process to use the texture's alpha channel as a mask for casting static shadows in the game world.
+
+Design Notes:
+Alphashadow does not work well with fine line detail on a texture. Fine lines may not cast acceptable shadows. It appears to work best with well-defined silhouettes and wider lines within the texture. Most of our tattered banners use this to cast tattered shadows. With Q3Map2, it is possible to increase the resolution of the lightmap receiving the shadows with a slight the cost of memory. This can be achieved with the q3map_lightmapSampleSize keyword on the shadow receiving shader or by creating a func_group of the shadow receiving brushes and adding the _lightmapScale key with a floating-point value for the scale of the lightmap.
+
+
+
+
+
surfaceparm antiportal
+
+
+
+Works like hint brushes in that it creates BSP nodes, but unlike hint, it blocks vis by not creating a portal at the split. This is designed to be used with large terrain maps to block visibility without having to resort to tricks like sky or caulk brushes penetrating the terrain and throwing ugly shadows.
+Players in part A of the map will not be able to see into part B and vice-versa. You can walk through the antiportal just fine. Note that this also blocks light. There are two caveats: They are opaque to light, and if aligned to another BSP cut (such as blocksize or the origin) they will not function correctly. Don't align it with anything else (like blocksize or another brush face) and it'll block vis. This keyword is found in "common/antiportal" so you shouldn't need to specify this. "common/antiportal" was added by ydnar, so if you're missing this shader, it is included with the latest version of Q3Map2.
+
+
+
+
+
surfaceparm areaportal
+
+
+
+A brush marked with this keyword functions as an areaportal, a break in the BSP tree. It is typically placed on a very thin brush placed inside a door entity (but is not a part of that entity). The intent is to block the game from processing surface triangles located behind it when the door is closed. It is also used by the BSPC (bot area file creation compiler) in the same manner as a clusterportal. The brush must touch all the structural brushes surrounding the areaportal. This keyword is found in "common/areaportal" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm botclip
+
+
+
+Blocks bot movement only. Other game world entities and human players can pass through a brush marked botclip. The intended use for this is to block the bot but not other players or projectiles. This keyword is found in "common/botclip" so you shouldn't need to specify this.
+
+Design Notes:
+Careful use of botclip in a map can greatly reduce the complexity of the .aas bot navigation file, resulting in "smarter", more efficient bots.
+
+
+
+
+
surfaceparm clusterportal
+
+
+
+A brush marked with this keyword function creates a subdivision of the area file (.aas) used by the bots for navigation. It is typically placed in locations that are natural breaks in a map, such as entrances to halls, doors, tunnels, etc. The intent is keep the bot from having to process the entire map at once. As with the the areaportal parameter, the affected brush must touch all the structural brushes surrounding the clusterportal. This keyword is found in "common/clusterportal" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm detail
+
+
+
+This surface attribute causes a brush to be ignored by the Q3Map2 process for generating possible break-points in the BSP tree. Generally speaking, detail brushes are usually set in the editor, so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm donotenter
+
+
+
+Read as "do not enter". Like clusterportal, this is a bot-only property. A brush marked with donotenter will not affect non-bot players, but bots will not enter it. It should be used only when bots appear to have difficulty navigating around some map features. This does not physically stop the bot from entering a region (as with botclip). Bots will not enter the area on their own but may, for example, be blasted into the region with a rocket launcher. This keyword is found in "common/donotenter" so you shouldn't need to specify this.
+
+Design Notes:
+donotenter can be (sparingly) used in space maps around the void or around lava/slime in certain places where bots have an overwhelming tendancy to commit suicide (lemming style).
+
+
+
+
+
surfaceparm dust
+
+
+
+If a player lands on a surface that uses a shader with this parameter, a puff of dust will appear at the player's feet. Note that the worldspawn entity must contain the "enabledust" key with a set value of "1".
+
+
+
+
+
surfaceparm flesh
+
+
+
+This will cue different sounds (in a similar manner to metalsteps) and cause blood to appear instead of bullet impact flashes. Actually, the code for this was never fully implemented by id Software. It remains half-finished so unfortunately it doesn't work.
+
+
+
+
+
surfaceparm fog
+
+
+
+fog defines the brush as being a "fog" brush. This is a Q3Map2 function that chops and identifies all geometry inside the brush. The general shader keyword fogparms must also be specified to tell how to draw the fog.
+
+
+
+
+
surfaceparm hint
+
+
+
+When Q3Map2 calculates the vis data, it tries to place portals in places in the map in an attempt to limit the potential viewable set (PVS). Brushes marked by a hint shader are used to manually place portals to force a break in the PVS. This keyword is found in "common/hint" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm ladder
+
+
+
+Supposedly used to allow the player to climb vertically. This is not functional in Quake III Arena.
+
+
+
+
+
surfaceparm lava
+
+
+
+Assigns to the texture the game properties set for lava. This affects both the surface and the content of a brush.
+
+
+
+
+
surfaceparm lightfilter
+
+
+
+Causes the Q3Map2 light stage to use the texture's RGB and alpha channels to generate colored alpha shadows in the lightmap. For example, this can be used to create the colored light effect cast by stained glass windows. This can be used with surfaceparm alphashadow.
+
+
+
+
+
surfaceparm lightgrid
+
+
+
+The min/max bounds of brushes with this shader in a map will define the bounds of the map's lightgrid (model lighting). Make it as small as possible around player space to minimize bsp size and compile time. This keyword is found in "common/lightgrid" so you shouldn't need to specify this. "common/lightgrid" was added by ydnar, so if you're missing this shader, it is included with the latest version of Q3Map2.
+
+
+
+
+
surfaceparm metalsteps
+
+
+
+The player sounds as if he is walking on clanging metal steps or gratings. Other than specifying flesh (doesn't work), metalsteps, nosteps, or default (i.e. specify nothing) it is currently not possible for a designer to create or assign a specific sound routine to a texture. Note: If no sound is set for a texture, then the default footsteps sound routines are heard.
+
+
+
+
+
surfaceparm monsterclip
+
+
+
+Blocks monster movement. Not functional in Quake III Arena.
+
+
+
+
+
surfaceparm nodamage
+
+
+
+The player takes no fall damage if he lands onto a texture with this surfaceparm. This keyword is found in "common/cushion" but you may want to specify this on certain shaders (jump pads, for example).
+
+
+
+
+
surfaceparm nodlight
+
+
+
+Read as "No Dee-Light". A texture containing this parameter will not be affected or lit by dynamic lights, such as weapon effects. An example in Quake III Arena would be solid lava.
+
+
+
+
+
surfaceparm nodraw
+
+
+
+A texture marked with nodraw will not visually appear in the game world. Most often used for triggers, clip brushes, origin brushes, shaders with cull none or cull disable and so on. This keyword is found in "common/nodraw" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm nodrop
+
+
+
+When a player dies inside a volume (brush) marked nodrop, no weapon is dropped. The intend use is for "Pits of Death." Have a kill trigger inside a nodrop volume, and when the players die here, they won't drop their weapons. The intent is to prevent unnecessary polygon pileups on the floors of pits. This keyword is found in "common/nodrop" but you may want to specify this on certain shaders (fog volumes in pits, for example).
+
+
+
+
+
surfaceparm noimpact
+
+
+
+World entities will not impact on this texture. No explosions occur when projectiles strike this surface and no marks will be left on it. Sky textures are usually marked with this texture so those projectiles will not hit the sky and leave marks.
+
+
+
+
+
surfaceparm nomarks
+
+
+
+Projectiles will explode upon contact with this surface, but will not leave marks. Blood will also not mark this surface. This is useful to keep lights from being temporarily obscured by battle damage.
+
+Design Notes:
+Use this on any surface with a deformVertexes keyword. Otherwise, the marks will appear on the unmodified surface location of the texture with the surface wriggles and squirms through the marks.
+
+
+
+
+
surfaceparm nolightmap
+
+
+
+This texture does not have a lightmap phase. It is not affected by the ambient lighting of the world around it. It does not require the addition of an rgbGen identity keyword in that stage.
+
+
+
+
+
surfaceparm nosteps
+
+
+
+The player makes no sound when walking on this texture.
+
+
+
+
+
surfaceparm nonsolid
+
+
+
+This attribute indicates a brush, which does not block the movement of entities in the game world. It applied to triggers, hint brushes and similar brushes. This affects the content of a brush.
+
+
+
+
+
surfaceparm origin
+
+
+
+Used on the "origin" texture. Rotating entities need to contain an origin brush in their construction. The brush must be rectangular (or square). The origin point is the exact center of the origin brush. This keyword is found in "common/origin" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm playerclip
+
+
+
+Blocks player movement through a nonsolid texture. Other game world entities can pass through a brush marked playerclip. The intended use for this is to block the player but not block projectiles like rockets. This keyword is found in "common/clip" so you shouldn't need to specify this.
+
+Design Notes:
+ playerclip is often useful for "smoothing" out the geometry of the map, preventing the player from snagging on objects. It is also used in open sky areas of maps, preventing the player from flying too high and seeing the "Hall of Mirrors" effect at the bottom of the cloud layer.
+
+
+
+
+
surfaceparm pointlight
+
+
+
+Sample lighting at vertices??? I'm not sure what this does at this point.
+
+
+
+
+
surfaceparm skip
+
+
+
+Works just like Quake II skip texture. Use on sides of hint and antiportal brushes where you don't want BSP splits. This keyword is found in "common/skip" so you shouldn't need to specify this. "common/skip" was added by ydnar, so if you're missing this shader, it is included with the latest version of Q3Map2.
+
+
+
+
+
surfaceparm sky
+
+
+
+This flags the compiler, telling it that this surface should be rendered as sky.
+
+
+
+
+
surfaceparm slick
+
+
+
+This surfaceparm included in a texture should give it significantly reduced friction. This keyword is found in "common/slick" but you may want to specify this on certain shaders (ice, for example).
+
+
+
+
+
surfaceparm slime
+
+
+
+Assigns to the texture the game properties for slime. This affects both the surface and the content of a brush.
+
+
+
+
+
surfaceparm structural
+
+
+
+This surface attribute causes a brush to be seen by the Q3Map2 process as a possible break-point in a BSP tree. It is used as a part of the shader for the "hint" texture. Generally speaking, any opaque texture not marked as "detail" is, by default, structural, so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm trans
+
+
+
+Tells Q3Map2 that pre-computed visibility should not be blocked by this surface. Generally, any shaders that have blendfunc's should be marked as surfaceparm trans.
+
+
+
+
+
surfaceparm water
+
+
+
+Assigns to the texture the game properties for water. This affects both the surface and the content of a brush.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch5.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch5.htm.svn-base
new file mode 100644
index 0000000..1928522
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch5.htm.svn-base
@@ -0,0 +1,102 @@
+
+
+Q3Map2 Shader Manual: Editor Specific Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+5 - Editor Specific Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+These instructions only affect the texture when it is seen in the Radiant editor. They should be grouped with the surface parameters but ahead of them in sequence.
+
+
+
+
+
qer_editorImage textureName
+
+
+
+This keyword creates a shader name in memory, but in the editor, it displays the TGA art image specified in qer_editorImage (in the example below this is textures/eerie/lavahell.tga).
+
+The editor maps a texture using the size attributes of the TGA file used for the editor image. When that editor image represents a shader, any texture used in any of the shader stages will be scaled up or down to the dimensions of the editor image. If a 128x128 pixel image is used to represent the shader in the editor, then a 256x256 image used in a later stage will be shrunk to fit. A 64x64 image would be stretched to fit. Be sure to check this on bouncy, acceleration, and power-up pads placed on surfaces other than 256 x 256. Use tcMod scale to change the size of the stretched texture. Remember that tcMod scale 0.5 0.5 will double your image, while tcMod scale 2 2 will halve it.
+
+Design Notes:
+The base_light and gothic_light shaders contain numerous uses of this. It can be very useful for making different light styles (mostly to change the light brightness) without having to create a new piece of TGA art for each new shader.
+
+
+
Script: Setting an editorImage
+textures/liquids/lavahell2 //path and name of new texture
+{
+ qer_editorImage textures/eerie/lavahell.tga //based on this
+ qer_nocarve //cannot be cut by CSG subtract
+ surfaceparm noimpact //projectiles do not hit it
+ surfaceparm lava //has the game properties of lava
+ surfaceparm nolightmap //environment lighting does not affect
+ q3map_surfacelight 3000 //light is emitted
+ tessSize 256 //relatively large triangles
+ cull disable //no sides are removed
+ deformVertexes wave 100 sin 5 5 .5 0.02
+ fogparms 0.8519142 0.309723 0.0 128 128
+ {
+ maptextures/eerie/lavahell.tga //base texture artwork
+ tcMod turb .25 0.2 1 0.02 //texture is subjected to turbulence
+ tcMod scroll 0.1 0.1 //the turbulence is scrolled
+ }
+}
+
+
+
+
+
+
+
qer_nocarve
+
+
+
+A brush marked with this instruction will not be affected by CSG subtract functions. It is especially useful for water and fog textures.
+
+
+
+
+
qer_trans N.N
+
+
+
+This keyword defines the percentage of transparency that a brush will have when seen in the editor (no effect on game rendering at all). It can have a positive value between 0 and 1. The higher the value, the less transparent the texture. Example: qer_trans 0.2 means the brush is 20% opaque and nearly invisible.
+
+Design Notes:
+If you use qer_trans on a shader whose qer_editorImage has an alpha channel, the transparent areas of the editorImage will also be transparent in the editor. To keep the solid areas of the editorImage opaque, use a qer_trans value of "1.0". Useful for grates, windows, fences, etc.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch6.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch6.htm.svn-base
new file mode 100644
index 0000000..b245dc6
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch6.htm.svn-base
@@ -0,0 +1,505 @@
+
+
+Q3Map2 Shader Manual: Stage Specific Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+6 - Stage Specific Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+Stage specifications only affect rendering. Changing any keywords or values within a stage will usually take effect as soon as a vid_restart is executed. Q3Map2 ignores stage specific keywords entirely.
+
+A stage can specify a texture map, a color function, an alpha function, a texture coordinate function, a blend function, and a few other rasterization options.
+
+
+
+
+
Texture Map Specification
+
+
+
+map texturename
+Specifies the source texture map (a 24 or 32-bit TGA file) used for this stage. The texture may or may not contain alpha channel information. The special keywords $lightmap and $whiteimage may be substituted in lieu of an actual texture map name. In those cases, the texture named in the first line of the shader becomes the texture that supplies the light mapping data for the process. The texture name should always end with the ".tga" suffix regardless of whether the source texture map is actually a .tga file or .jpg.
+
+ map $lightmap
+This is the overall lightmap for the game world. It is calculated during the Q3Map2 process. It is the initial color data found in the framebuffer. Note: due to the use of overbright bits in light calculation, the keyword rgbGen identity must accompany all $lightmap instructions.
+
+ map $whiteimage
+This is used for specular lighting on MD3 models. This is a white image generated internally by the game. This image can be used in lieu of $lightmap or an actual texture map if, for example, you wish for the vertex colors to come through unaltered.
+
+ clampMap texturename
+Dictates that this stage should clamp texture coordinates instead of wrapping them. During a stretch function, the area, which the texture must cover during a wave cycle, enlarges and decreases. Instead of repeating a texture multiple times during enlargement (or seeing only a portion of the texture during shrinking) the texture dimensions increase or contract accordingly. This is only relevant when using something like deformTexCoordParms to stretch/compress texture coordinates for a specific special effect. Remember that the Quake III Arena engine normalizes all texture coordinates (regardless of actual texture size) into a scale of 0.0 to 1.0.
+
+Proper Alignment: When using clampTexCoords make sure the texture is properly aligned on the brush. The clampTexCoords function keeps the image from tiling. However, the editor doesn't represent this properly and shows a tiled image. Therefore, what appears to be the correct position may be offset. This is very apparent on anything with a tcMod rotate and clampTexCoords function.
+
+Avoiding Distortion: When seen at a given distance (which can vary, depending on hardware and the size of the texture), the compression phase of a stretch function will cause a "cross"-like visual artifact to form on the modified texture due to the way that textures are reduced. This occurs because the texture undergoing modification lacks sufficient "empty space" around the displayed (non-black) part of the texture (see figure 2a). To compensate for this, make the non-zero portion of the texture substantially smaller (50% of maximum stretched size -- see figure 2b) than the dimensions of the texture. Then, write a scaling function (tcMod scale) into the appropriate shader phase, to enlarge the image to the desired proportion.
+
+The shaders for the bouncy pads (in the sfx.shader file) show the stretch function in use, including the scaling of the stretched texture:
+
+
+
+ animMap frequency texture1... texture8
+The surfaces in the game can be animated by displaying a sequence of 1 to 8 frames (separate texture maps). These animations are affected by other keyword effects in the same and later shader stages.
+
+
+frequency : The number of times that the animation cycle will repeat within a one second time period. The larger the value, the more repeats within a second. Animations that should last for more than a second need to be expressed as decimal values.
+texture1... texture8 : the texture path/texture name for each animation frame must be explicitly listed. Up to eight frames (eight separate .tga files) can be used to make an animated sequence. Each frame is displayed for an equal subdivision of the frequency value.
+
+
+Example:
+animMap 0.25 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga would be a 4 frame animated sequence, calling each frame in sequence over a cycle length of 4 seconds. Each frame would be displayed for 1 second before the next one is displayed. The cycle repeats after the last frame in sequence shown.
+
+Design Notes:
+To make a texture image appear for an unequal (longer) amount of time (compared to other frames), repeat that frame more than once in the sequence.
+
+
+ videoMap videoname
+Surfaces marked with a shader containing this directive in one of its stages will display an animated video playing in a continuous loop. The video clip must be in ROQ format and playing at 30 frames per second. The ROQ file is stored in the "video" directory within the main mod directory. A third-party program is required to convert other video formats to the ROQ format for use within Quake III engine games.
+
+
+ Historical Information:
+The ROQ format is a proprietary video format developed by Graeme Devine originally used for "The 7th Guest" for the purpose of being able to decompress quickly while maintaining high image quality. It was later adopted by Id Software for use in Quake III Arena.
+
+
+
+
+
blendFunc func
+
+
+
+Blend functions are the keyword commands that tell the Quake III Arena graphic engine's renderer how graphic layers are to be mixed together.
+
+ Simplified Blend Functions
+The most common blend functions are set up here as simple commands, and should be used unless you really know what you are doing.
+
+
+add : Shorthand command for blendFunc gl_one gl_one. Effects like fire and energy are additive.
+filter : Shorthand command that can be substituted for either blendFunc gl_dst_color gl_zero or blendFunc gl_zero gl_src_color. A filter will always result in darker pixels than what is behind it, but it can also remove color selectively. Lightmaps are filters.
+blend : Shorthand command for blendFunc gl_src_alpha gl_one_minus_src_alpha. This is conventional transparency, where part of the background is mixed with part of the texture.
+
+
+ Explicit Blend Functions
+Getting a handle on this concept is absolutely key to understanding all shader manipulation of graphics.
+
+blendFunc or "Blend Function" is the equation at the core of processing shader graphics. The formula reads as follows:
+
+Source is usually the RGB color data in a texture TGA file (remember it's all numbers) modified by any rgbGen and alphaGen. In the shader, the source is generally identified by command map, followed by the name of the image.
+
+Destination is the color data currently existing in the frame buffer.
+
+Rather than think of the entire texture as a whole, it maybe easier to think of the number values that correspond to a single pixel, because that is essentially what the computer is processing... one pixel of the bitmap at a time.
+
+The process for calculating the final look of a texture in place in the game world begins with the precalculated lightmap for the area where the texture will be located. This data is in the frame buffer. That is to say, it is the initial data in the destination. In an unmanipulated texture (i.e. one without a special shader script), color information from the texture is combined with the lightmap. In a shader-modified texture, the $lightmap stage must be present for the lightmap to be included in the calculation of the final texture appearance.
+
+Each pass or "stage" of blending is combined (in a cumulative manner) with the color data passed onto it by the previous stage. How that data combines together depends on the values chosen for the source blends and destination blends at each stage. Remember it's numbers that are being mathematically combined together that are ultimately interpreted as colors.
+
+A general rule is that any source blend other than GL_ONE (or GL_SRC_ALPHA where the alpha channel is entirely white) will cause the source to become darker.
+
+ Source Blend srcBlend
+The following values are valid for the source blend part of the equation.
+
+
+GL_ONE This is the value 1. When multiplied by the source, the value stays the same. The value of the color information does not change.
+GL_ZERO This is the value 0. When multiplied by the source, all RGB data in the source becomes zero (essentially black).
+GL_DST_COLOR This is the value of color data currently in the destination (frame buffer). The value of that information depends on the information supplied by previous stages.
+GL_ONE_MINUS_DST_COLOR This is nearly the same as GL_DST_COLOR except that the value for each component color is inverted by subtracting it from one. (i.e. R = 1.0 - DST.R, G = 1.0 - DST.G, B = 1.0 - DST.B, etc.)
+GL_SRC_ALPHA The TGA file being used for the source data must have an alpha channel in addition to its RGB channels (for a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the source.
+GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one. (i.e. A=1.0 - SRC.A)
+
+
+ Destination Blend dstBlend
+The following values are valid for the destination blend part of the equation.
+
+
+GL_ONE This is the value 1. When multiplied by the destination, the value stays the same the value of the color information does not change.
+GL_ZERO This is the value 0. When multiplied by the destination, all RGB data in the destination becomes zero (essentially black).
+GL_SRC_COLOR This is the value of color data currently in the source (which is the texture being manipulated here).
+GL_ONE_MINUS_SRC_COLOR This is the value of color data currently in source, but subtracted from one (i.e. inverted).
+GL_SRC_ALPHA The TGA file being used for the source data must have an alpha channel in addition to its RGB channels (four a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the source.v
+GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one. (i.e. A=1.0 - SRC.A).
+
+
+ Doing the Math: The Final Result
+The product of the source side of the equation is added to the product of the destination side of the equation. The sum is then placed into the frame buffer to become the destination information for the next stage. Ultimately, the equation creates a modified color value that is used by other functions to define what happens in the texture when it is displayed in the game world.
+
+ Default Blend Function
+If no blendFunc is specified then no blending will take place. A warning is generated if any stage after the first stage does not have a blendFunc specified.
+
+ Technical Information/Limitations Regarding Blend Modes:
+The Riva 128 graphics card supports ONLY the following blendmodes:
+
+Cards running in 16 bit color cannot use any GL_DST_ALPHA blends.
+
+
+
+
+
rgbGen func
+
+
+
+There are two color sources for any given shader, the texture file and the vertex colors. Output at any given time will be equal to TEXTURE multiplied by VERTEXCOLOR. Most of the time VERTEXCOLOR will default to white (which is a normalized value of 1.0), so output will be TEXTURE (this usually lands in the Source side of the shader equation). Sometimes you do the opposite and use TEXTURE = WHITE, but this is only commonly used when doing specular lighting on entities (i.e. shaders that level designers will probably never create.
+
+The most common reason to use rgbGen is to pulsate something. This means that the VERTEXCOLOR will oscillate between two values, and that value will be multiplied (darkening) the texture.
+
+If no rgbGen is specified, either "identityLighting" or "identity" will be selected, depending on which blend modes are used.
+
+Valid func parameters are identity, identityLighting, vertex, exactVertex, fromVertex (???)entity, oneMinusEntity, lightingDiffuse, noise (???), wave and const.
+
+
+ rgbGen identityLighting
+Colors will be (1.0, 1.0, 1.0) if running without overbright bits (NT, Linux, windowed modes), or (0.5, 0.5, 0.5) if running with overbright. Overbright allows a greater color range at the expense of a loss of precision. Additive and blended stages will get this by default.
+
+ rgbGen identity
+Colors are assumed to be all white (1.0, 1.0, 1.0). All filters stages (lightmaps, etc) will get this by default.
+
+ rgbGen wave func base amplitude phase freq
+Colors are generated using the specified waveform. An affected texture with become darker and lighter, but will not change hue. Hue stays constant. Note that the RGB values for color will not go below 0 (black) or above 1 (white). Valid waveforms are sin, triangle, square, sawtooth and inversesawtooth (see 1.4.8 Waveform Functions).
+
+ rgbGen entity
+Colors are grabbed from the entity's modulate field. This is used for things like explosions.
+
+Design Notes:
+This keyword would probably not be used by a level designer.
+
+ rgbGen oneMinusEntity
+Colors are grabbed from 1.0 minus the entity's modulate field.
+
+Design Note:
+This keyword would probably not be used by a level designer.
+
+ rgbGen vertex
+Colors are filled in directly by the data from the map or model files.
+
+Obsidian: exactVertex ignores overbrightbits. Generally brighter under default settings.
+rgbGen vertex + alphaGen const or rgbGen exactVertex to disable surfaces from being affected by alphaMod volumes.
+
+Design Note:
+rgbGen vertex should be used when you want the RGB values to be computed for a static model (i.e. mapobject) in the world using precomputed static lighting from Q3BSP. This would be used on things like the gargoyles, the portal frame, skulls, and other decorative models put into the Quake III Arena world.
+
+ rgbGen oneMinusVertex
+As rgbGen vertex, but inverted.
+
+Design Note:
+This keyword would probably not be used by a level designer.
+
+ rgbGen lightingDiffuse
+Colors are computed using a standard diffuse lighting equation. It uses the vertex normals to illuminate the object correctly.
+
+Design Notes:
+rgbGen lightingDiffuse is used when you want the RGB values to be computed for a dynamic model (i.e. non-map object) in the world using regular in-game lighting. For example, you would specify on shaders for items, characters, weapons, etc.
+
+ rgbGen const ( R G B )
+A constant vertex colour is assigned to the affected surface. This modifies the hue of the texture.
+
+
+
+
+
alphaGen func
+
+
+
+The alpha channel can be specified like the RGB channels. If not specified, it defaults to 1.0. Valid func values are lightingSpecular, wave, entity, oneMinusEntity, vertex, oneMinusVertex, portal.
+
+//Obsidian: Describe each in more detail... like rgbGen above.
+
+ alphaGen portal
+This rendering stage keyword is used in conjunction with the surface parameter keyword portal. The function accomplishes the "fade" that causes the scene in the portal to fade from view. Specifically, it means "Generate alpha values based on the distance from the viewer to the portal." Use alphaGen portal on the last rendering pass.
+
+//Obsidian: needs formatting???
+
+
+
+
+
tcGen coordinateSource
+
+
+
+Specifies how texture coordinates are generated and where they come from. Valid functions are base, lightmap, environment and vector.
+
+
+base : Base texture coordinates from the original art.
+lightmap : Lightmap texture coordinates.
+environment : Make this object environment mapped.
+vector : Projects a texture from a specified direction.
+
+
+tcGen vector ( sx sy sz ) ( tx ty tz )
+New texture coordinate generation by world projection. This allows you to project a texture onto a surface in a fixed way, regardless of its orientation.
+
+S coordinates correspond to the "x" coordinates on the texture itself.
+T coordinates correspond to the "y" coordinates on the texture itself.
+
+The measurements are in game units.
+
+Example: tcGen vector ( 0.01 0 0 ) ( 0 0.01 0 )
+This would project a texture with a repeat every 100 units across the X/Y plane. The value comes from dividing the game units from 1, in this case, 1/100.
+
+
+
+
+
tcMod func ---
+
+
+
+Specifies how texture coordinates are modified after they are generated. The valid functions for tcMod are rotate, scale, scroll, stretch, transform and turb. Transform is a function generally reserved for use by programmers who suggest that designers leave it alone. When using multiple tcMod functions during a stage, place the scroll command last in order, because it performs a mod operation to save precision, and that can disturb other operations. Texture coordinates are modified in the order in which tcMods are specified. In otherwords, if you see:
+
+tcMod scale 0.5 0.5
+tcMod scroll 1 1
+
+then the texture coordinates will be scaled then scrolled.
+
+ tcMod rotate degrees/sec
+This keyword causes the texture coordinates to rotate. The value is expressed in degrees rotated each second. A positive value means clockwise rotation. A negative value means counterclockwise rotation. For example "tcMod rotate 5" would rotate texture coordinates 5 degrees each second in a clockwise direction. The texture rotates around the center point of the texture map, so you are rotating a texture with a single repetition, be careful to center it on the brush (unless off-center rotation is desired).
+
+ tcMod scale sScale tScale
+Resizes (enlarges or shrinks) the texture coordinates by multiplying them against the given factors of sScale and tScale. The values "s" and "t"conform to the "x" and "y" values (respectively) as they are found in the original texture TGA. The values for sScale and tScale are NOT normalized. This means that a value greater than 1.0 will increase the size of the texture. A positive value less than one will reduce the texture to a fraction of its size and cause it to repeat within the same area as the original texture (Note: see clampTexCoords for ways to control this).
+
+Example:tcMod scale 0.5 2 would cause the texture to repeat twice along its width, but expand to twice its height (in which case half of the texture would be seen in the same area as the original)
+
+ tcMod scroll sSpeed tSpeed
+Scrolls the texture coordinates with the given speeds. The values "s" and "t" conform to the "x" and "y" values (respectively) as they are found in the original texture TGA. The scroll speed is measured in "textures" per second. A "texture" is the dimension of the texture being modified and includes any previous shader modifications to the original TGA). A negative s value would scroll the texture to the left. A negative t value would scroll the texture down.
+
+Example:tcMod scroll 0.5 -0.5 moves the texture down and right (relative to the TGA files original coordinates) at the rate of a half texture each second of travel.
+
+This should be the LAST tcMod in a stage. Otherwise there may be a popping or snapping visual effect in some shaders.
+
+ tcMod stretch func base amplitude phase frequency
+Stretches the texture coordinates with the given function. Stretching is defined as stretching the texture coordinate away from the center of the polygon and then compressing it towards the center of the polygon. (see Chapter 1: Key Concepts for waveform parameter definitions).
+
+ tcMod transform m00 m01 m10 m11 t0 t1
+Transforms each texture coordinate as follows:
+
+S' = s * m00 + t * m10 + t0
+T' = s * m01 + t * m11 + t1
+
+This is for use by programmers.
+
+
+ tcMod turb base amplitude phase freq
+Applies turbulence to the texture coordinate. Turbulence is a back and forth churning and swirling effect on the texture.
+
+base : Currently undefined.
+amplitude : This is essentially the intensity of the disturbance or twisting and squiggling of the texture.
+phase : See the explanation for phase under the deformVertexes keyword.
+freq : Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of one would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10 seconds.
+
+
+
+
+
depthFunc func
+
+
+
+This controls the depth comparison function used while rendering. The default is "lequal" (Less than or equal to) where any surface that is at the same depth or closer of an existing surface is drawn. This is used for textures with transparency or translucency. Under some circumstances you may wish to use "equal", e.g. for light-mapped grates that are alpha tested (it is also used for mirrors).
+
+
+
+
+
depthWrite
+
+
+
+By default, writes to the depth buffer when depthFunc passes will happen for opaque surfaces and not for translucent surfaces. Blended surfaces can have the depth writes forced with this function.
+
+
+
+
+
detail
+
+
+
+This feature was not used in Quake III Arena maps, but still functions. Designates this stage as a detail texture stage, which means that if the c_var, r_detailtextures, is set to 0 then this stage will be ignored (detail will not be displayed). This keyword, by itself, does not affect rendering at all. If you do put in a detail texture, it has to conform to very specific rules. Specifically, the blendFunc:
+
+
blendFunc GL_DST_COLOR GL_SRC_COLOR
+
+This is also the simple blend function: blendFunc filter
+
+And the average intensity of the detail texture itself must be around 127.
+
+Detail is used to blend fine pixel detail back into a base texture whose scale has been increased significantly. When detail is written into a set of stage instructions, it allows the stage to be disabled by the c_var console command setting "r_detailtextures 0".
+
+A texture whose scale has been increased beyond a 1:1 ratio tends not to have very high frequency content. In other words, one texel can cover a lot of real estate. Frequency is also known as "detail." Lack of detail can appear acceptable if the player never has the opportunity to see the texture at close range. But seen close up, such textures look glaringly wrong within the sharp detail of the Quake III Arena environment. A detail texture solves this problem by taking a noisy "detail" pattern (a tiling texture that appears to have a great deal of surface roughness) and applying it to the base texture at a very densely packed scale (that is, reduced from its normal size). This is done programmatically in the shader, and does not require modification of the base texture. Note that if the detail texture is the same size and scale as the base texture that you may as well just add the detail directly to the base texture. The theory is that the detail texture's scale will be so high compared to the base texture (e.g.; 9 detail texels fitting into 1 base texel) that it is literally impossible to fit that detail into the base texture directly.
+
+For this to work, the rules are as follows:
+
+
+
The lightmap must be rendered first. This is because the subsequent detail texture will be modifying the lightmap in the framebuffer directly.
+
The base texture must be rendered next.
+
The detail texture must be rendered last since it modifies the lightmap in the framebuffer. There is a bug in Quake III that disables all stages in a shader after a "detail" stage if r_detailTextures is set to 0.
+
The detail texture MUST have a mean intensity around 127-129. If it does not then it will modify the displayed texture's perceived brightness in the world.
+
The detail shader stage MUST have the "detail" keyword or it will not be disabled if the user uses the "r_detailtextures 0" setting.
+
The detail stage MUST use "blendFunc GL_DST_COLOR GL_SRC_COLOR". Any other BlendFunc will cause mismatches in brightness between detail and non-detail views.
+
The detail stage should scale its textures by some amount (usually between 3 and 12) using "tcMod scale" to control density. This roughly corresponds to coarseness. A very large number, such as 12, will give very fine detail, however that detail will disappear VERY quickly as the viewer moves away from the wall since it will be MIP mapped away. A very small number, e.g. 3, gives diminishing returns since not enough is brought in when the user gets very close. I'm currently using values between 6 and 9.5. You should use non-integral numbers as much as possible to avoid seeing repeating patterns.
+
Detail textures add one pass of overdraw, so there is a definite performance hit.
+
Detail textures can be shared, so designers may wish to define only a very small handful of detail textures for common surfaces such as rocks, etc.
+
+
+An example (non-existent) detail shader is as follows:
+
+
+
+
Script: Detail shaders
+textures/bwhtest/foo
+{
+ q3map_globalTexture //may be required when using tcMod scale in later stages
+
+ // draw the lightmap first
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ // draw the base texture
+ {
+ map textures/castle/blocks11b.tga
+ blendFunc filter
+ }
+
+ // highly compressed detail texture
+ {
+ map textures/details/detail01.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR //MUST BE USED
+ detail //allows detail shaders to be disabled
+ tcMod scale 9.1 9.2
+ }
+}
+
+
+
+
+
+
+
alphaFunc func
+
+
+
+Determines the alpha test function used when rendering this map. Valid values are GT0, LT128, and GE128. These correspond to "GREATER THAN 0", "LESS THAN 128", and "GREATER THAN OR EQUAL TO 128". This function is used when determining if a pixel should be written to the framebuffer. For example, if GT0 is specified, the only the portions of the texture map with corresponding alpha values greater than zero will be written to the framebuffer. By default alpha testing is disabled.
+
+Both alpha testing and normal alpha blending can be used to get textures that have see-through parts. The difference is that alphaFunc is an all-or-nothing test, while blending smoothly blends between opaque and translucent at pixel edges. Alpha test can also be used with depthWrite, allowing other effects to be conditionally layered on top of just the opaque pixels by setting depthFunc to equal.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch7.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch7.htm.svn-base
new file mode 100644
index 0000000..eb679fc
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch7.htm.svn-base
@@ -0,0 +1,110 @@
+
+
+Q3Map2 Shader Manual: Quake 3 Engine Game Specific Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+7 - Quake 3 Engine Game Specific Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+
+The Quake 3 Engine has been licensed to several different companies for the development of third party games. This chapter is a sub-manual documenting the Quake 3 Engine game specific shader keywords developed for third party games like Return to Castle Wolfenstein: Enemy Territory, Jedi Knights II, Soldier of Fortune II, Jedi Academy, Star Trek: Elite Force, as examples.
+
+Note: These are just keywords that have been submitted by people on the forums/irc channels. I have no idea about the accuracy of this chapter. Please use with caution. Please e-mail me (Obsidian) for any additions or error corrections to this list.
+
+All default Quake III Arena shader keywords *should* also work for the below list of games.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch8.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch8.htm.svn-base
new file mode 100644
index 0000000..bae97ea
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/ch8.htm.svn-base
@@ -0,0 +1,40 @@
+
+
+Q3Map2 Shader Manual: Shader Creation Tips
+
+
+
+
+
+
+
+
+
+
+
+
+
+8 - Shader Creation Tips
+
+Q3Map2 Shader Manual
+
+
+
+This chapter covers some miscellaneous shader and texture creating tips. Note: I've temporarily removed these for now, since I'm not sure how useful they are. A lot of this was covered or should be covered in the Radiant Manual. I'll come back to this chapter when I have time.
+
+Obsidian's Notes:
+Stage transparency using blendFunc blend vs. shader transparency.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/start.htm.svn-base b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/start.htm.svn-base
new file mode 100644
index 0000000..666f11d
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/.svn/text-base/start.htm.svn-base
@@ -0,0 +1,42 @@
+Q3Map2 Shader Manual
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ By Obsidian and ydnar | Version 2.5.15 (02.09.04)
+
+
+
+
+
+ Based on the original
+ Q3Radiant Shader Manual, Revision #12
+ By Paul Jaquays and Brian Hook
+ (with additional material by John Carmack, Christian Antkow, Kevin Cloud, & Adrian Carmack)
+ QERadiant.com thanks John Hutton for re-formating the original manual into a more web friendly version
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apA.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apA.htm
new file mode 100644
index 0000000..47e3843
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apA.htm
@@ -0,0 +1,58 @@
+
+
+Q3Map2 Shader Manual: Triggerable Shader Entities
+
+
+
+
+
+
+
+
+
+
+
+
+
+Appendix A - Triggerable Shader Entities
+
+Q3Map2 Shader Manual
+
+
+
+By TTimo, 31.08.01
+
+The targetShaderName and targetShaderNewName keys can be used with any entity that supports the target key (the entity instance does not actually have to use the target key for these new keys to work). If both are defined, then when the entity decides to activate its targets, all shaders/textures in the map that were originally the same name as the targetShaderName value, will be changed to the targetShaderNewName value.
+
+For example this would make it look like the red light shader is "turning on":
+
+
+
+Note that the ORIGINAL shader name is used in both instances, not whatever it happens to be currently. Also, of course, this will happen globally. If the mapper wanted to affect only a certain set of red lights, he/she would need to make a unique shader name to be used with that set.
+
+The code that supports these keys is in G_UseTargets in g_utils.c
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apB.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apB.htm
new file mode 100644
index 0000000..7a90b54
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apB.htm
@@ -0,0 +1,131 @@
+
+
+Q3Map2 Shader Manual: Terrain
+
+
+
+
+
+
+
+
+
+
+
+
+
+Appendix B - Terrain
+
+Q3Map2 Shader Manual
+
+
+
+Q3Map2 terrain has changed radically since Quake III: Team Arena first hit the shelves. Alphamapped terrain shaders are difficult to set up, limiting and lacks the ability for the mapper to fine tune the effect. The new terrain improvements in Q3Map2 have removed these difficulties, allowing the mapper to fully exploit terrain shaders for breathtaking outdoor scenes. This section will assume that you are already familiar with the method of setting up a standard alphamapped terrain as described in the Terrain Construction for Quake 3 Engine Games manual by Paul Jaquays, and will focus on the new enhanced features of Q3Map2 terrain.
+
+
+
+
+
General Changes
+
+
+
+Q3Map2 terrain has changed dramatically in terms of not only visually, but also in terms of how it is processed by the compiler. To ensure compatibility, there needs to be a few changes. Foremost, make sure that all terrain shader files are listed in the shaderlist.txt file.
+
+Before using Q3Map2 alphamapped terrain, it must be noted that terrain is now handled completely different than before. Q3Map2 no longer looks for the word terrain in the shader name to determine whether or not it is an indexed shader. Instead it looks for q3map_indexed or q3map_terrain. For this reason, the alphamap terrain shaders have been slightly modified. If using Q3Map2 alphamaps, make sure that your "textures/common/terrain" and "textures/common/terrain2" shaders have been updated to the following:
+
+
+
+
+Base Shader
+To simplify the terrain shader writing process, a base shader can be used as a template with subclassed shaders referencing it. This makes use of the q3map_baseShader directive. The base shader can consist of all q3map_* directives and must be processed before all other terrain shaders referencing it. The use of a base shader is recommend for all terrain shaders.
+
+tcMod Functions
+q3map_tcMod can be used on terrain shaders to minimize any obvious texture tiling, particularly q3map_tcMod rotate. In some situations q3map_tcMod scale or the stage driven tcMod scale may be used to scale the textures - though typically tcGen texture projection functions are usually the preferred method.
+
+tcGen Functions
+In most situations, terrain textures will need to be projected onto the terrain mesh. This is achieved by using either q3map_tcGen function or the stage specific tcGen. Any tcGen functions will overwrite any tcMod scale functions.
+
+
+
+
+
Lightmapped Terrain
+
+
+
+The foremost improvement to Q3Map2 terrain is the ability to use lightmaps as a lighting system rather than basic vertex lighting. This allows terrain to not only cast detailed shadows onto itself, but also allows other map geometry to cast shadows onto the terrain as well. The additional rendering pass of the lightmap creates a slight performance hit as a price for the improved visuals. Several new q3map_* directives are typically used to tweak the terrain lightmap:
+
+q3map_nonPlanar
+Required on all terrain shaders, q3map_nonPlanar allows shadows to be cast across non-planar edges. This fixes a problem where lightmapped terrain would not light properly across uneven surfaces.
+
+q3map_lightmapAxis
+Optionally used, q3map_lightmapAxis can be used to specify the axis in which the lightmap is projected from. This is typically used on normal triangle-quad souped terrain and is set implicitly to "q3map_lightmapAxis z" with q3map_terrain. It is not recommended for terrain with caves or undersides.
+
+q3map_shadeAngle
+Most terrain artists will choose to enable triangle edge shadow smoothing to reduce the appearance of sharp shadow edges across the terrain mesh. q3map_shadeAngle specifies the triangle edge angle at which the light will be diffused. For best results, it is recommended that you start with low values and tweak the angle parameter in small increments until a satisfactory result is produced. Overly high values will wash out shadow details.
+
+q3map_lightmapMergable
+Setting q3map_lightmapMergable merges all terrain into one seamless lightmap, reducing the appearance of artifacts spanning across separate lightmap images.
+
+q3map_lightmapSampleSize
+Lightmapped terrain can be very memory intensive as Q3Map2 has to typically generate a large amount of lightmap data. q3map_lightmapSampleSize can be used to reduce the amount of lightmap memory used by limiting the resolution of the lightmap images. Similarly, it can also be used to increase the lightmap resolution at the cost of memory.
+
+q3map_lightmapSampleOffset
+If experiencing lightmap splotches over the surface of terrain lightmaps, q3map_lightmapSampleOffset can be used to fix this. For best results, start with small numbers (default 1.0) and slowly increase this value until the splotches disappear. Overly high values will cause unsatisfactory results.
+
+
+
+
+
AlphaMod Dotproduct Terrain
+
+
+
+AlphaMod dotproduct terrain is a revolutionary way in which Q3Map2 terrain is blended. It removes the need for an alphamap and metashader and automatically determines the blending of terrain depending on the vertex normals of the terrain mesh. Equally important, this new system removes the need of a triangle-quad grid, allowing the designer to create a terrain mesh using any triangle shape or size.
+
+
+
+
+
AlphaMod Volume Terrain
+
+
+
+Following the automatic generation of dotproduct blending, alphaMod volume terrain blending was developed to give direct control of the alpha blending back to the designer. Using this system the designer can modify the exact location and amount of blending to occur, directly from within the editor.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apC.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apC.htm
new file mode 100644
index 0000000..51bf93b
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apC.htm
@@ -0,0 +1,117 @@
+
+
+Q3Map2 Shader Manual: Foghull
+
+
+
+
+
+
+
+
+
+
+
+
+
+Appendix C - Foghull
+
+Q3Map2 Shader Manual
+
+
+Most recent Quake III engine games are programmed with a feature known as distance clipping used to clip (cull) map geometry beyond a user set distance. At the time of Quake III Arena's release, distance clipping was not an available feature. The Q3Map2 foghull feature was designed to simulate true distance clipping for Quake III Arena and Team Arena games.
+
+
+
+
+
What is a Foghull?
+
+
+
+Farplane distance clipping is a feature used to cull (remove) the drawing of polygons beyond a certain distance from the player in an attempt to improve performance. It is typically used on large, open terrain maps with little vis-blocking structures. Through the use of distance clipping a maximum vis distance is set, which provides the culling of rendered polygons. Fog is used to hide the effect of polygons appearing and disappearing by obscuring the maximum distance that the player can see.
+
+Since distance clipping is not a feature natively built into Quake III Arena, using distance culling would result in a hall of mirrors (HOM) effect where the culled geometry begins, since nothing is being drawn in the frame buffer. To compensate for this, the foghull feature uses a series of six skybox images that are drawn in place of the absent culled geometry, thus preventing the HOM effect.
+
+
+
+
+
Skybox Images
+
+
+
+The skybox images used with the foghull feature should never be actually seen since the idea is to use the fog to obsure the maximum distance that the player can see. It only exists to prevent the HOM effect. To pull this off in a convincing manner, the skybox images should be six identical 8x8 pixel (to save on texture memory) textures each filled with a flat color matching the exact color of the fog. The six skybox images must be named in accordance to the skyParms farbox convention, using the _ft, _rt, _bk, _lf, _up, _dn suffixes.
+
+
+
+
+
Foghull Shaders
+
+
+
+Two shaders are required when using the foghull feature, a fog volume shader and a skybox shader, both of which are simple, standard shaders.
+
+The color of the fog used must match the color used in the skybox images. Any decent image editing software will give you the three RGB color values of your skybox images, which must be normalized by dividing by 255. As with any other fog shader, the fogParms and surfaceparm fog keywords must be present.
+
+
+
+
Script: Fog Volume Shader
+textures/env/fog1024
+{
+ fogParms ( 0.8 0.8 0.8 ) 1024 //Normalized RGB, distance to opaque
+
+ surfaceparm fog //Must be used
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+
+ qer_editorImage textures/sfx/fog_grey.tga
+ qer_trans 0.4
+}
+
+
+
+
+To activate the foghull feature, the _foghull and _farplanedist worldspawn entity key/value pairs must be set in the Entity Inspector (in Radiant, select any non-entity brush and press "N").
+
+The _foghull key's value works similar to that of terrain entities. It must point to the name of the skybox shader, minus the standard "textures/" prefix. For the skybox shader example above with the shader name "textures/skies/foghullsky", you would use a _foghull value of "skies/foghullsky".
+
+The _farplanedist value is simply the distance at which polygons will begin to get culled. One important note is that the _farplanedist value must be greater than the distance to opaque value set in the fog shader. In the above fog shader, the distance to opaque value was set to 1024 game units. The _farplanedist value must therefore be greater than 1024, otherwise the HOM effect will appear.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apI.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apI.htm
new file mode 100644
index 0000000..77adb40
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/apI.htm
@@ -0,0 +1,260 @@
+
+
+Q3Map2 Shader Manual: Light Emitting Shaders
+
+
+
+
+
+
+
+
+
+
+
+
+
+Appendix I - Light Emitting Shaders
+
+Q3Map2 Shader Manual
+
+
+
+Q3Map2 surface light and sky shaders are quite different than the original Quake III shaders. As new lighting algorithms were introduced, new shader keywords were created to accompany or replace the original keywords. This section will illustrate the differences between these shaders.
+
+
+
+
+
Surface Lights
+
+
+
+*nothing here yet*
+Mention:
+*q3map_lightRGB red green blue
+
+
+
+
+
Skies
+
+
+
+Originally, sky shaders were just very large surface lights that casted parallel directional lighting. With Q3Map2, there are a few differences that sets sky shaders apart from surface lights. First of all, we'll take a look at how the pre-Q3Map2 shaders were set up:
+
+
+
+Keep in mind that this is a generalized shader, and that there can be a lot of different variations to yield different effects. Take a look at some of the original Quake III Arena shaders for more examples. In this screenshot (compiled with LIGHT -fast, viewed with /r_lightmap 1), the effect isn't bad, but the shadows are a bit jagged.
+
+
+
+Q3Map2 sky shaders improves on the way lightmaps are calculated, improving both quality and compiler performance. This is essentially the same shader with some small changes:
+
+
+
+What we've done here is replace q3map_lightSubdivide and q3map_surfacelight with q3map_skylight which yields more uniform shadows at a fraction of the compile time. However, this also generates the "stadium light" effect - producing some unwanted shadows. We'll fix this later.
+
+
+
+To solve the problem with jagged shadow edges, we can smooth out the shadows by blurring the lightmap. Depending on the type of lighting that you want to achieve for the sun (a cloudy day, for example), you can create a penumbra (half-shadow) effect using q3map_sunExt. This simulates the way sunlight bounces in certain conditions, creating a slight "jittering" effect. This is the same shader again with q3map_sunExt.
+
+
+In the following screenshot, you can see that the jagged shadow edges are gone.
+
+
+
+As mentioned above, you may be faced with problems involving the "stadium lights" effect when using q3map_skyLight. We can eliminate this problem by using higher values for the q3map_sunExt samples and q3map_skyLight iterations parameter, but at the cost of a higher compile time. For example, q3map_sunExt 1 1 1 140 -35 25 3 32 and q3map_skylight 100 6.
+
+Note:
+Since the time that these screenshots were taken, the skylight subdivision code has been greatly improved (Q3Map2 2.5.14) for far more uniform lighting and faster compiles, so using higher iteration values can result in better quality, reducing the "stadium light" effect and without necessarily increasing compile times.
+
+
+
+A faster approximate alternative of getting rid of the "stadium lights" effect is to use q3map_lightmapFilterRadius.
+
+
+The self and other parameters are the amount of filtering applied on the lightmap in world units. The self value is always set to "0" on sky shaders since skies don't have lightmaps. The q3map_lightmapFilterRadius directive should always be placed before any light-related directives that you want it to affect. In our case, we placed it after q3map_sunExt and before q3map_skyLight so that it filters the stadium lights, but won't blur the sun shadows which are already jittered. This produces very similar results without the long compile times.
+
+
+Here are some additional features that you can use to create special lighting effects:
+*multiple suns by adding more than one q3map_sun or q3map_sunExt to shader
+*stuff about compiler switches
+*-skyfix
+*_skybox entity does not work with surfaceLight, must use skyLight
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch0.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch0.htm
new file mode 100644
index 0000000..5898e5a
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch0.htm
@@ -0,0 +1,103 @@
+
+
+Q3Map2 Shader Manual: Preface
+
+
+
+
+
+
+
+
+
+
+
+
+
+0 - Preface
+
+Q3Map2 Shader Manual
+
+
+
+The Q3Map2 Edition of the Shader Manual
+
+Q3Map2 is an updated version of the original Q3Map program used to compile .map files created in a level editor such as Radiant into .bsp files used by Quake III engine games. Since it's introduction, ydnar has added so many new features and improved efficiency to the degree where Q3Map2 has become the standard compiling program for the level editing community as well as for many commercial games.
+
+While still accurate, the original QeRadiant Shader Manual written by the staff at id Software did not contain shader keywords pertaining to the new Q3Map2, hence the need for this updated version of the manual including recent developments to the compiler.
+
+This manual is based on the original manual with some minor reformatting, edits and error corrections, but the main difference is the inclusion of Q3Map2 specific shader keywords. Additionally, this version also includes an expanded appendix with information on selected Q3Map2 features as well as a new chapter for shader keywords used specifically with third party Quake III engine games.
+
+Since Q3Map2 is being updated with additional features on a regular basis, this manual will also be updated to reflect any new shader keywords being introduced so check back for updates.
+
+-Obsidian
+
+
+
+
+
Credits
+
+
+
+Q3Map2 Shader Manual
+Written by Obsidian and ydnar
+
+The Q3Map2 Shader Manual is based on the QeRadiant Shader Manual - Revision #12. Other portions were adapted from the Q3Map2 Handbook (Beta Edition), the Q3Map2 Readme document, and from various discussions on the forums/IRC channels. All works were consulted with permission from the authors.
+
+QeRadiant Shader Manual, Revision #12
+
+
Written by Paul Jaquays and Brian Hook.
+
Additional material by John Carmack, Christian Antkow, Kevin Cloud and Adrian Carmack.
+
Converted into a web friendly version by John Hutton.
+
Appendix A by TTimo.
+
+
+Q3Map2 Handbook (Beta Edition)
+
+
Written by Jetscreamer, Shadowspawn and ydnar.
+
+
+Q3Map2 Readme
+
+
Written by ydnar
+
+
+Special Thanks:
+
+
Paul Jaquays for his support, feedback and for writing the original QeRadiant Shader Manual.
+
ydnar for Q3Map2, thereby making level editing 2x more fun at 1/10 the compile time. Thanks for his technical expertise and help in writing this manual.
+
+
+This is not an id Software product. Do not contact them for support.
+
+
+
+
+
Contact
+
+
+
+Shader Manual Development
+Feel free to e-mail me if you have any suggestions, comments or error corrections.
+meridanox@gmail.com
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch1.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch1.htm
new file mode 100644
index 0000000..d099447
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch1.htm
@@ -0,0 +1,249 @@
+
+
+Q3Map2 Shader Manual: Introduction
+
+
+
+
+
+
+
+
+
+
+
+
+
+1 - Introduction
+
+Q3Map2 Shader Manual
+
+
+
+The graphic engine for Quake III Arena has taken a step forward by putting much more direct control over the surface qualities of textures into the hands of designers and artists. In writing this manual, we have tried to define the concepts and tools that are used to modify textures in a way that, it is hoped, will be graspable by users who already have basic knowledge of computer graphics but are not necessarily computer programmers. It is not a tutorial, nor is it intended to be one.
+
+The Manual for the Q3Radiant editor program contains a section called Creating New Assets that has the necessary information for setting up the files to create your own custom Quake III Arena shaders. You should follow a similar convention when creating your custom shaders. It is reproduced here for your convenience:
+
+
+
+Quote: from Q3Radiant Editor Manual
+Creating New Assets
+If you are familiar with the required tools, creating new assets for use in Quake III Arena is not particularly difficult. As a rule, you should create new directories for each map with names different from the names used by id. If you are making a map that will be called "H4x0r_D00M", every directory containing new assets for that map should be titled H4x0r_D00M. This is to try and avoid asset directories overwriting each other as the editor and the game load in assets.
+
+
+
+
+It is recommended that you study the scripts in this document and in the individual shader scripts. Pay careful attention to syntax and punctuation. This is where you are most likely to make mistakes.
+
+
+
+
+
What is a Shader?
+
+
+
+Shaders are short text scripts that define the properties of a surface as it appears and functions in a game world (or compatible editing tool). By convention, the documents that contain these scripts usually has the same name as the texture set which contains the textures being modified (e.g; base, hell, castle, etc,). Several specific script documents have also been created to handle special cases, like liquids, sky and special effects.
+For Quake III Arena, shader scripts are located in [Quake3]/baseq3/scripts.
+
+A Quake III Arena shader file consists of a series of surface attribute and rendering instructions formatted within braces ("{" and "}"). Below you can see a simple example of syntax and format for a single process, including the Q3Map2 keywords and "Surface Parameters", which follow the first bracket and a single bracketed "stage":
+//Shader Name
+
+//General Shader Keywords
+//Q3Map2 Specific Shader Keywords
+//Q3Map2 Specific Surface Parameter Shader Keywords
+//Editor Specific Shader Keywords
+
+//Stage Specific Shader Keywords
+
+
+
+
+Shaders need to be referenced by the map editor, compiler (Q3Map2) and game engine - each of which uses a different part of the shader. In the above example shader, the different sections are listed on the right.
+
+
+
+
+
Shader Name & File Conventions
+
+
+
+The first line is the shader name. It is used by the map editor, compiler, game engine, and models to reference the script and art files associated with the shader. Shader names can be up to 63 characters long. The names are often a mirror of a pathname to the texture image without the file extension (.tga or .jpg) or base dir (/quake3/baseq3 in our case), but they do not need to be.
+
+Shaders that are only going to be referenced by the game code, not modeling tools, often are just a single word, like "projectionShadow" or "viewBlood".
+
+Shaders that are used on character or other polygon mesh models need to mirror the art files, which allows the modelers to build with normal textures, then have the special effects show up when the model is loaded into the game.
+
+Shaders that are placed on surfaces in the map editor commonly mirror an image file, but the "qer_editorimage" shader parameter can force the editor to use an arbitrary image for display.
+
+Shader path names have a case sensitivity issue - on Windows, they aren't case sensitive, but on Unix they are. Try to always use lowercase for filenames, and always use forward slashes "/" for directory separators.
+
+Following the shader name, is an opening bracket "{" designating the beginning of the shader contents, and a closing bracket "}" at the end of the shader. Notice that the contents of the above example shader are indented for better legibility.
+
+
+
+
+
:q3map Suffix
+
+
+
+The :q3map suffix can be added to the end of the shader name of "compile-time" shaders. This means that shaders with names marked with :q3map will be used by the compiler only and will be ignored by the game engine. This is especially useful if you want to add Q3Map2-relevant shader directives to basic lightmapped textures. This allows Quake 3 to generate the stages implicitly while Q3Map2 processes the Q3Map2-relevant sections of the shader. Consider the following shaders:
+
+
+Normally, we wouldn't need a shader for this texture to be displayed properly in game since the lightmap and texture stages are generated implicitly by Quake 3. The only reason why this shader exists is because we want Q3Map2 to process this surface as having metalsteps when the player walks on it. As a result, we end up writing out the entire shader.
+
+To save ourselves from needless work, we can mark this shader as being compiler-only and have Quake 3 generate the lightmap and texture stages for us as it usually does by default:
+
+
+
Script: With :q3map
+textures/q3map2_sm/floor:q3map
+{
+ surfaceparm metalsteps
+}
+
+
+
+
+
+
+
Keyword Types
+
+
+
+Only the shader name is case sensitive (use all lowercase). Shader keywords (aka. directives) are not, but by convention, you should use mixedCase (ie. q3map_alphaMod). Some of the shader keywords are order dependant, so it's good practice to keep all keyword of a similar type grouped together in the following order, from top-down:
+
+ General Shader Keywords
+A shader may contain general shader keywords, which affects the shader's appearance globally (affects the entire shader), and changes the physical attributes of the surface that uses the shader. These attributes can affect the player. These parameters are executed at runtime, that is, in order to see the changes one does not need to re-compile the map.
+
+ Q3Map2 Specific Shader Keywords
+The general shader keywords may be followed by Q3Map2 specific keywords. These keywords are used by the compiler to change the physical nature of the shader's surface and are also global.
+
+ Q3Map2 Specific Surface Parameter Shader Keywords
+These are actually part of the Q3Map2 specific shader keywords that are flags telling the compiler about the physical nature of the shader's surface. These are also global.
+
+ Editor Specific Shader Keywords
+Editor specific shader keywords change the appearance of the shader in the map editor only. It has no effect on the shader in game.
+
+ Stage Specific Shader Keywords
+The shader may contain one or more "stages". Each stage consists of an opening and closing bracket along with the contents of the stage (indented). The stage will contain a texture map specification which specifies the source image, and various other stages specific shader keywords that modifies the appearance of the source image. Stage specific keywords are processed by the renderer. They are appearance changes only and have no effect on game play or game mechanics. Changes to any of these attributes will take effect as soon as the game goes to another level or vid_restarts (type command "/vid_restart" in the game console).
+
+
+
+
+
Documenting With Comments
+
+
+
+It is often useful to document parts of shaders, especially for testing purposes or when working with a development team of other designers. Comments added to shaders are ignored completely, making it useful for adding notes, or for temporarily removing keywords for testing.
+
+Shaders use the same double forward slashes "//" convention common with many programming languages for commenting. All text after the "//" on the same line are ignored from the shader. See various shaders for examples.
+
+
+
+
+
Key Concepts
+
+
+
+Ideally, a designer or artist who is manipulating textures with shader files has a basic understanding of wave forms and knows about mixing colored light (high school physics sort of stuff). If not, there are some concepts you need to have a grasp on to make shaders work for you.
+
+ Surface Effects vs. Content Effects vs. Deformation Effects
+Shaders not only modify the visible aspect of textures on a geometry brush, curve, patch or mesh model, but they can also have an effect on both the content, "shape," and apparent movement of those things. A surface effect does nothing to modify the shape or content of the brush. Surface effects include glows, transparencies and rgb (red, green, blue) value changes. Content shaders affect the way the brush operates in the game world. Examples include water, fog, nonsolid, and structural. Deformation effects change the actual shape of the affected brush or curve, and may make it appear to move.
+
+ Power Has a Price
+The shader script gives the designer, artist and programmer a great deal of easily accessible power over the appearance of and potential special effects that may be applied to surfaces in the game world. But it is power that comes with a price tag attached, and the cost is measured in performance speed. Each shader phase that affects the appearance of a texture causes the Quake III engine to make another processing pass and redraw the world. Think of it as if you were adding all the shader-affected triangles to the total r_speed count for each stage in the shader script. A shader-manipulated texture that is seen through another shader-manipulated texture (e.g. a light in fog) has the effect of adding the total number of passes together for the affected triangles. A light that required two passes seen through a fog that requires one pass will be treated as having to redraw that part of the world three times.
+
+ RGB Color
+RGB means "Red, Green, Blue". Mixing red, green and blue light in differing intensities creates the colors in computers and television monitors. This is called additive color (as opposed to the mixing of pigments in paint or colored ink in the printing process, which is subtractive color). In Quake III Arena and most higher-end computer art programs (and the color selector in Windows), the intensities of the individual Red, Green and Blue components are expressed as number values. When mixed together on a screen, number values of equal intensity in each component color create a completely neutral (gray) color. The lower the number value (towards 0), the darker the shade. The higher the value, the lighter the shade or the more saturated the color until it reaches a maximum value of 255 (in the art programs). All colors possible on the computer can be expressed as a formula of three numbers. The value for complete black is 0 0 0. The value for complete white is 255 255 255. However, the Quake III Arena graphics engine requires that the color range be "normalized" into a range between 0.0 and 1.0.
+
+ Normalization: a Scale of 0 to 1
+The mathematics in Quake III Arena use a scale of 0.0 to 1.0 instead of 0 to 255. Most computer art programs that can express RGB values as numbers use the 0 to 255 scale. To convert numbers, divide each of the art program's values for the component colors by 255. The resulting three values are your Quake III Arena formula for that color component. The same holds true for texture coordinates.
+
+ Texture Sizes
+TGA texture files are measured in pixels (picture elements). Textures are measured in powers of 2, with 16 x16 pixels being the smallest (typically) texture in use. Most will be larger. Textures need not be square, so long as both dimensions are powers of 2. Examples include: 32x256, 16x32, 128x16.
+
+ Color Math
+In Quake III Arena, colors are changed by mathematical equations worked on the textures by way of the scripts or "programlets" in the shader file. An equation that adds to, or multiplies the number values in a texture causes it to become darker. Equations that subtract from or modulate number values in a texture cause it to become lighter. Either equation can change the hue and saturation of a color.
+
+ Measurements
+The measurements used in the shaders are in either game units, color units, or texture units.
+
+
+Game unit: A game unit is used by deformations to specify sizes relative to the world. Game units are the same scale we have had since way back in the Wolfenstein days - 8 units equals one foot. The default texture scale used by the Radiant map editor results in two texels for each game unit, but that can be freely changed.
+
+Color units: Colors scale the values generated by the texture units to produce lighting effects. A value of 0.0 will be completely black, and a value of 1.0 will leave the texture unchanged. Colors are sometimes specified with a single value to be used across all red, green, and blue channels, or sometimes as separate values for each channel.
+
+Texture units: This is the normalized (see above) dimensions of the original texture image (or a previously modified texture at a given stage in the shader pipeline). A full texture, regardless of its original size in texels, has a normalized measurement of 1.0 x 1.0. For normal repeating textures, it is possible to have value greater than 1.0 or less than 0.0, resulting in repeating of the texture. The coordinates are usually assigned by the level editor or modeling tools, but you still need to be aware of this for scrolling or turbulent movement of the texture at runtime.
+
+
+ Waveform Functions
+Many of the shader functions use waveforms to modulate measurements over time. Where appropriate, additional information is provided with wave modulated keyword functions to describe the effect of a particular waveform on that process. Currently there are five waveforms in use in Q3A shaders:
+
+
+Sin: Sin stands for sine wave, a regular smoothly flowing wave function ranging from -1 to 1.
+Triangle: Triangle is a wave with a sharp ascent and a sharp decay, ranging from 0 to 1. It will make choppy looking wave forms.
+Square: A squarewave simply switches from -1 to 1 with no in-between.
+Sawtooth: In the sawtooth wave, the ascent is like a triangle wave from 0 to 1, but the decay cuts off sharply back to 0.
+Inversesawtooth: This is the reverse of the sawtooth... instant ascent to the peak value (1), then a triangle wave descent to the valley value (0). The phase on this goes from 1.0 to 0.0 instead of 0.0 to 1.0. This wave is particularly useful for additive cross-fades.
+
+
+Waveforms all have the following properties:
+
+
+base: Where the wave form begins. Amplitude is measured from this base value.
+amplitude: This is the height of the wave created, measured from the base. You will probably need to test and tweak this value to get it correct for each new shader stage. The greater the amplitude, the higher the wave peaks and the deeper the valleys.
+phase: This is a normalized value between 0.0 and 1.0. Changing phase to a non-zero value affects the point on the wave at which the wave form initially begins to be plotted. Example: In Sin or Triangle wave, a phase of 0.25 means it begins one fourth (25%) of the way along the curve, or more simply put, it begins at the peak of the wave. A phaseof 0.5 would begin at the point the wave re-crosses the base line. A phase of 0.75 would be at the lowest point of the valley. If only one wave form is being used in a shader, a phase shift will probably not be noticed and phase should have a value of zero (0). However, including two or more stages of the same process in a single shader, but with the phases shifted can be used to create interesting visual effects. Example: using rgbGen in two stages with different colors and a 0.5 difference in phase would cause the manipulated texture to modulate between two distinct colors. Phase changes can also be used when you have two uses of the same effect near each other, and you don't want them to be synchronized. You would write a separate shader for each, changing only the phase value.
+freq: Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of 1 would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10 seconds.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch2.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch2.htm
new file mode 100644
index 0000000..6f3311e
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch2.htm
@@ -0,0 +1,246 @@
+
+
+Q3Map2 Shader Manual: General Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+2 - General Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+
+IMPORTANT NOTES: Once again, be aware that some of the shader commands may be order dependent, so it's good practice to place all global shader commands (keywords defined in this section) at the very beginning of the shader and to place shader stages at the end (see various examples).
+
+These Keywords are global to a shader and affect all stages. They are also ignored by Q3Map2.
+
+
+
+
+
skyParms farbox cloudheight nearbox
+
+
+
+Specifies how to use the surface as a sky, including an optional far box (stars, moon, etc), optional cloud layers with any shader attributes, and an optional near box (mountains in front of the clouds, etc).
+
+
+farbox : Specifies a set of files to use as an environment box behind all cloudlayers. Specify "-" for no farbox, or a file base name. A base name of "env/test" would look for files "env/test_rt.tga", "env/test_lf.tga", "env/test_ft.tga", "env/test_bk.tga", "env/test_up.tga", "env/test_dn.tga" to use as the right / left / front / back / up / down sides.
+cloudheight : Controls apparent curvature of the cloud layers - lower numbers mean more curvature (and thus more distortion at the horizons). Higher height values create "flatter" skies with less horizon distortion. Think of height as the radius of a sphere on which the clouds are mapped. Good ranges are 64 to 256. The default value is 128.
+nearbox : Specified as farbox, to be alpha blended ontop of the clouds. This has not be tested in a long time, so it probably doesn't actually work. Set to "-" to ignore.
+
+
+Design Notes:
+
+
If you are making a map where the sky is seen by looking up most of the time, use a lower cloudheight value. Under those circumstances the tighter curve looks more dynamic. If you are making a map where the sky is seen by looking out windows most of the time or has a map area that is open to the sky on one or more sides, use a higher height to make the clouds seem more natural.
+
It is possible to create a sky with up to 8 cloudlayers, but that also means 8 processing passes and a potentially large processing hit.
+
Be aware that the skybox does not wrap around the entire world. The "floor" or bottom face of the skybox is not drawn by the game. If a player in the game can see that face, they will see the "hall of mirrors" effect.
+
There's a bug in Quake 3 (but fixed in Enemy Territory) that causes a shader vertex overflow (SHADER_MAX_VERTEXES HIT IN FILLCLOUDSKYSIDE) if more than two cloud layers are used in maps with a lot of visible sky. To compensate, either reduce the amount of visible sky or limit the shader to two cloud layers.
+
+
+Q3Map2 sky shaders work differently from the original and contain a number of improvements in terms of efficiency and visually. The example given below is an original Quake III Arena sky shader. While it is still operational, it is a little outdated and is being kept here for legacy purposes only. It is recommended that you take advantage of the new features of Q3Map2 skies by consulting Appendix I: Light Emitting Shaders > Skies.
+
+
+
+Every surface of a polygon has two sides, a front and a back. Typically, we only see the front or "out" side. For example, a solid block you only show the front side. In many applications we see both. For example, in water, you can see both front and a back. The same is true for things like grates and screens.
+
+To "cull" means to remove. The value parameter determines the type of face culling to apply. The default value is cull back if this keyword is not specified. However for items that should be inverted then the value front should be used. To disable culling, the value disable or none should be used. Only one cull instruction can be set for the shader.
+
+
+front : The front or "outside" of the polygon is not drawn in the world. It is used if the keyword "cull" appears in the content instructions without a side value.
+back : Cull back removes the back or "inside" of a polygon from being drawn in the world.
+disable or none : Neither side of the polygon is removed. Both sides are drawn in the game. Very useful for making panels or barriers that have no depth, such as grates, screens, metal wire fences and so on and for liquid volumes that the player can see from within. Also used for energy fields, sprites, and weapon effects (e.g. plasma).
+
+
+Design Notes
+For things like grates and screens, put the texture with the cull none property on one face only. On the other faces, use a non-drawing texture.
+
+
+
+
+
deformVertexes type ---
+
+
+
+This function performs a general deformation on the surface's vertexes, changing the actual shape of the surface before drawing the shader passes. You can stack multiple deformVertexes commands to modify positions in more complex ways, making an object move in two dimensions, for instance. There are 6 possible values for the type parameter, each of which will be described in more detail: wave, normal, bulge, move, autosprite, autosprite2. Depending on which of the 6 type parameters are used, different additional parameters will need to be used, including the generalized waveform functions (see Chapter 1: Key Concepts)
+
+Design Notes:
+The div and amplitude parameters, when used in conjunction with liquid volumes like water should take into consideration how much the water will be moving. A large ocean area would have have massive swells (big div values) that rose and fell dramatically (big amplitude values). While a small, quiet pool may move very little.
+
+ deformVertexes wave div func base amplitude phase freq
+Designed for water surfaces, modifying the values differently at each point. The div parameter is used to control the wave "spread" - a value equal to the q3map_tessSize of the surface is a good default value. It accepts the standard wave functions sin, triangle, square, sawtooth or inversesawtooth.
+
+ deformVertexes normal div func base amplitude freq
+This deformation affects the normals of a vertex without actually moving it, which will effect later shader options like lighting and especially environment mapping. If the shader stages don't use normals in any of their calculations, there will be no visible effect. The div parameter is used to control the wave "spread" - a value equal to the q3map_tessSize of the surface is a good default value. Good values for amplitude ranges from 0.1 to 0.5 while values of 1.0 to 4.0 are good for frequency.
+
+Design Notes:
+Putting values of 0.1 to 0.5 in Amplitude and 1.0 to 4.0 in the Frequency can produce some satisfying results. Some things that have been done with it: A small fluttering bat, falling leaves, rain, flags.
+
+ deformVertexes bulge bulgeS bulgeT bulgeSpeed
+This forces a bulge to move along the given s and t directions. Designed for use on curved pipes. The bulgeS and bulgeT parameters is the amount of bulge displacement measured in game units. bulgeSpeed is the number of seconds it takes for the bulge to complete a single cycle.
+
+ deformVertexes move x y z func base amplitude phase freq
+The move parameter is used to make a brush, curve patch or model appear to move together as a unit. The x y z values are the distance and direction in game units the object appears to move relative to it's point of origin in the map.
+The func base amplitude phase freq values are the same as found in other waveform manipulations.
+
+The product of the function modifies the values x, y, and z. Therefore, if you have an amplitude of 5 and an x value of 2, the object will travel 10 units from its point of origin along the x axis. This results in a total of 20 units of motion along the x axis, since the amplitude is the variation both above and below the base.
+
+It must be noted that an object made with this shader does not actually change position, it only appears to.
+
+Design Notes:
+If an object is made up of surfaces with different shaders, all must have matching deformVertexes move values or the object will appear to tear itself apart.
+
+ deformVertexes autosprite
+This function can be used to make any given triangle quad (pair of triangles that form a square rectangle) automatically behave like a sprite without having to make it a separate entity. This means that the "sprite" on which the texture is placed will rotate to always appear at right angles to the player's view as a sprite would. Any four-sided brush side, flat patch, or pair of triangles in a model can have the autosprite effect on it. The brush face containing a texture with this shader keyword must be square.
+
+ deformVertexes autosprite2
+Is a slightly modified "sprite" that only rotates around the middle of its longest axis. This allows you to make a pillar of fire that you can walk around, or an energy beam stretched across the room.
+
+
+
+
+
fogParms ( r g b ) opacity
+
+
+
+Note: You must also specify "surfaceparm fog" to cause Q3Map2 to identify the surfaces inside the volume. Fogparms only describes how to render the fog on the surfaces.
+
+r g b : These are normalized values. A good computer art program should give you the RGB values for a color. To obtain the values that define fog color for Quake III Arena, divide the desired color's red, green and blue values by 255 to obtain three normalized numbers within the 0.0 to 1.0 range.
+opacity : This is the distance, in game units, until the fog becomes totally opaque, as measured from the point of view of the observer. By making the height of the fog brush shorter than the distance to opaque, the apparent density of the fog can be reduced (because it never reaches the depth at which full opacity occurs).
+
+
+
The fog volume can only have one surface visible (from outside the fog).
+
Fog must be made of one brush. It cannot be made of adjacent brushes.
+
Fog brushes must be axial. This means that only square or rectangular brushes may contain fog, and those must have their edges drawn along the axes of the map grid (all 90 degree angles).
+
+
+Design Notes:
+
+
If a water texture contains a fog parameter, it must be treated as if it were a fog texture when in use.
+
If a room is to be filled completely with a fog volume,it can only be entered through one surface (and still have the fog function correctly).
+
Additional shader passes may be placed on a fog brush, as with other brushes.
+
+
+
+
+
+
noPicMip
+
+
+
+This causes the texture to ignore user-set values for the r_picmip cvar command. The image will always be high resolution. Example: Used to keep images and text in the heads up display from blurring when user optimizes the game graphics.
+
+
+
+
+
noMipMaps
+
+
+
+This implies noPicMip, but also prevents the generation of any lower resolution mipmaps for use by the 3D card. This will cause the texture to alias when it gets smaller, but there are some cases where you would rather have this than a blurry image. Sometimes thin slivers of triangles force things to very low mipmap levels, which leave a few constant pixels on otherwise scrolling special effects.
+
+
+
+
+
polygonOffset
+
+
+
+Surfaces rendered with the polygonOffset keyword are rendered slightly off the polygon's surface. This is typically used for wall markings and "decals." The distance between the offset and the polygon is fixed. It is not a variable in Quake III Arena.
+
+Design Notes:
+
+
Use this for wall or floor markings, particularily for direction arrows for team games. Texture the brush with the decal shader on one face and the other faces with a nodraw shader. Then place the brush flush with the surface of the wall or floor.
+
When using a _decal entity for texture projection, polygonOffset must be used to prevent Z-fighting. If you experience problems with depth sorting, try using sort 6.
+
+
+
+
+
+
+
portal
+
+
+
+Specifies that this texture is the surface for a portal or mirror. In the game map, a portal entity must be placed directly in front of the texture (within 64 game units). All this does is set "sort portal", so it isn't needed if you specify that explicitly.
+
+
+
+
+
sort value
+
+
+
+Use this keyword to fine-tune the depth sorting of shaders as they are compared against other shaders in the game world. The basic concept is that if there is a question or a problem with shaders drawing in the wrong order against each other, this allows the designer to create a hierarchy of which shader draws in what order.
+
+The default behavior is to put all blended shaders in sort "additive" and all other shaders in sort "opaque", so you only need to specify this when you are trying to work around a sorting problem with multiple transparent surfaces in a scene.
+
+The value here can be either a numerical value or one of the keywords in the following list (listed in order of ascending priority):
+
+
+ portal (1): This surface is a portal, it draws over every other shader seen inside the portal, but before anything in the main view.
+ Sky (2): Typically, the sky is the farthest surface in the game world. Drawing this after other opaque surfaces can be an optimization on some cards. This currently has the wrong value for this purpose, so it doesn't do much of anything.
+ Opaque (3): This surface is opaque (rarely needed since this is the default with no blendfunc)
+ Banner (6): Transparent, but very close to walls.
+ Underwater (8): Draw behind normal transparent surfaces.
+ Additive (9): Normal transparent surface (default for shaders with blendfunc's)
+ Nearest (16): This shader should always sort closest to the viewer, e.g. muzzle flashes and blend blobs.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch3.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch3.htm
new file mode 100644
index 0000000..4208e89
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch3.htm
@@ -0,0 +1,799 @@
+
+
+Q3Map2 Shader Manual: Q3Map2 Specific Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+3 - Q3Map2 Specific Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+These keywords change the physical nature of the textures and the brushes that are marked with them. Changing any of these values will require the map to be re-compiled. These are global and affect the entire shader.
+
+
+
+
+
q3map_alphaGen func ---
+
+
+blah
+
+
+
+
+
q3map_alphaMod func ---
+
+
+
+This is used for special blending effects on shaders by altering the amount of blending falloff depending on specific surface properties such as the surfaces normal axis or the vertexes contained within its volume. alphaMod operations are applied to an object's vertexes so the rgbGen vertex directive is required for each affected stage.
+
+ q3map_alphaMod dotproduct ( X Y Z)
+It is used to blend textures using alphaFunc or blendFunc in the shader's second pass, with the falloff depending on the surface's normal axis. This is achieved by doing a vector dot product of the specified normalized vector value ( X Y Z ) and the vertex normal which yields the amount of blending. The dot product operation multiplies each element of one vector against the corresponding elements of a second vector, then adds them. Examples:
+
+
+ q3map_alphaMod dotproduct2 ( X Y Z )
+This works in a similar way to dotproduct except it exaggerates the differences in vertex normals by squaring the final dot product value. With the same values as the above example, dotproduct2 would give the following:
+
+
+Design Notes:
+Typical examples of use include snow covering the top faces of objects, or terrain with grass growing on horizontal planes blending into rocky cliffs on near vertical surfaces. It is an excellent way of automatically creating realistic alpha-blended terrain without the complicated steps in setting up an alpha map.
+
+
+ q3map_alphaMod scaleN.N
+Used in conjunction with q3map_alphaMod volume. Scales the vertex alpha by N.N.
+
+ q3map_alphaMod setN.N
+Used in conjunction with q3map_alphaMod volume. Sets the vertex alpha (regardless of any previous alpha values) to N.N * 255.
+
+ q3map_alphaMod volume
+This was created as a way to explicitly set the amount of vertex alpha-blending by altering the alpha values of vertexes contained within a brush volume marked with this shader directive. Applies all other q3map_alphaMod directives to each vertex inside a brush textured with this shader, allowing large faded scrolling fire shaders, waterfalls, marquees, explicit dotProduct terrain blending control, etc.
+
+Design Notes:
+This is usually used in special alphaMod volume "common" shaders for use within the editor only. A brush textured with the alphaMod volume shader is used to overlap the vertexes of another brush using an alpha-blended shader, altering the vertex alpha values. Worldspawn alphaMod volume brushes will affect all surfaces. You can func_group an alphaMod volume brush to affect only that entity.
+
+
+
+
+
q3map_backShader shadername
+
+
+
+This allows a brush to use a different shader when you are inside it looking out. By way of example, this would allow a water brush (or other) surfaces to have a different sort order or appearance when seen from the inside. q3map_backShader only works on brush faces. For this reason, it is deprecated in favor of using q3map_cloneShader where the target shader contains q3map_invert.
+
+
+
+
+
+
+
q3map_backSplash percentage distance
+
+
+
+A surface light is lit by itself, often causing areas of higher light intensity than other areas. q3map_backSplash moves the light source away from the surface of the shader, allowing it to create smoother lighting over the face. By default, all shaders are assigned backsplash values, 0.05 for the percentage, 23 units for the distance.
+
+
+percentage : Specifies the intensity percentage of the light generated by q3map_surfacelight to be redirected back at the surface. Use a value of 0 or a negative value to disable back splash lights.
+distance : Distance of the back splash lights from the surface.
+
+
+
+
+
+
q3map_baseShader shadername
+
+
+
+Allows shaders to be subclassed (Q3Map2 relevant portions only, such as surfaceparms, lighting, texture projection, etc). Subclassed shaders can reference the base shader by referring to the base shader's name. In order for q3map_baseShader to work correctly, the base shader must be specified before any shaders that subclass it. Some EasyGen terrain templates incorrectly specified the base shader after the terrain shaders that depended on it, resulting in some interesting errors.
+
+This is fundamentally the reverse of q3map_remapShader. Use q3map_baseShader when a single group of q3map_* directives is required for multiple base shaders. Use q3map_remapShader when similar shaders are used that require different groups of q3map_* directives.
+
+
+
+Use a number between 0 and 1.0 (or higher), to scale the amount of light reflected in radiosity passes. You can oversaturate it by using a number higher than 1.0, but this can lead to excessive compile times. Using 90 would probably make things positively glacial. 1.0 is a default, fudged number that looked OK with the maps that were tested. Tweaking it to 1.5 or 2.0 won't hurt anything, per se, but it does give you finer control over how each shader re-emits light. The poorly worded q3map_bounce has been renamed to q3map_bounceScale. While its use has been deprecated, q3map_bounce still works.
+
+
+
+
+
q3map_clipModel
+
+
+
+Automatically clips misc_model entities for player and weapon collision. This should only be used on large models such as terrain (not small decorative models - manually clip those). The shader's surfaceparms are inherited by the magic clip brush, so if you have surfaceparm nonsolid in your model's shader that uses q3map_clipModel, then the brush will also be non-solid. This can also be set on a per model basis with spawnflags 2.
+
+
+
+
+
q3map_cloneShader shadername
+
+
+
+A shader with this keyword will inherit the target shader's properties and appearance. Be careful, this can lead to an infinite loop if a cloning shader references another cloning shader or itself.
+
+
+
+
+
q3map_colorGen
+
+
+blah
+
+
+
+
+
q3map_colorMod
+
+
+blah
+
+
+
+
+
q3map_extraShader
+
+
+
+Does not exist!
+
+
+
+
+
q3map_fadeAlpha N
+
+
+
+Does not exist!
+
+
+
+
+
q3map_fogDir angle
+
+
+
+Specifies the direction a fog shader fades from transparent to opaque.
+
+
+
+
+
q3map_forceMeta
+
+
+
+Forces model (MD3, ASE, etc.) surfaces to be broken down into their component triangles like brush faces and passed through the meta code on a per shader basis. This is required for lightmapped models. Setting spawnflags 4 on a misc_model will set q3map_forceMeta on all its surfaces.
+
+
+
+
+
+
+
q3map_forceSunlight
+
+
+
+Obsolete!
+By default, no sunlight is cast on vertex-lit .md3 models or vertex-lit terrain. Using this option, sunlight (overbright bits created by the q3map_sun option) will be cast on these surfaces. q3map_forceSunlight is now obsolete since suns are now first class light sources.
+
+
+
+
+
q3map_fur layers offset fade
+
+
+
+This is used for generating fur over a surface. This is typically used in conjunction with q3map_cloneShader in the surface (parent) shader and references the fur shader as the clone. A possible application of this is to create grass on alphablended terrain. Keep in mind that the use of a fur shader may cause a large hit to performance but when used sparingly, it can produce some interesting effects. (See Appendix D: Fur)
+
+
+layers : This specifies the number of desired replicated fur layers generated.
+offset : The distance (in game units) between subsequent layers.
+fade : A normalized value indicating the fade falloff between subsequent layers.
+
+
+
+
+
+
q3map_globalTexture
+
+
+
+Use this shader in the global keyword commands whenever the tcMod scale function is used in one of the later render stages. Many problems with getting shader effects to work across multiple adjacent brushes are a result of the way Q3Map2 optimizes texture precision. This option resolves that, but at the expense of some precision of the textures when they are far away from the origin of the map.
+
+
+
+
+
q3map_indexed
+
+
+
+This is used for explicit terrain-style indexed mapping. It instructs Q3Map2 to look at the func_group terrain entity's _indexmap key for an image to pull index values from, and then to construct a shader name with the root based on the _shader key's value.
+
+
+
+
+
q3map_invert
+
+
+
+Inverts a surface normal. Works on brush faces, models and patches. Used in celshading to achieve the inverted backfacing hull.
+
+
+
+
+
q3map_lightImage texturename
+
+
+
+By default, surface lights use the average color of the source image to generate the color of the light. q3map_lightImage specifies an alternate image to be used for light color emission, radiosity color emission, light filtering and alpha shadows. You can even use a light image with a different alpha channel for blurrier alpha shadows. The light color is averaged from the referenced texture. The texture must be the same size as the base image map. q3map_lightImage should appear before qer_editorImage.
+
+The reason q3map_lightImage is specified for the light in the example below, is because the blend map is predominantly yellow, but the base image is not. The designer wanted the color of the light to be sampled from the blend map instead of the base image.
+
+
+
+
Script: Taking light from another source image
+textures/eerie/ironcrosslt2_10000
+{
+ q3map_lightImage textures/gothic_light/ironcrosslt2.blend.tga
+ // this TGA is the source for the color of the blended light
+
+ qer_editorImage textures/gothic_light/ironcrosslt2.tga
+ //editor TGA (used because the shader is used with several different light values)
+
+ q3map_surfacelight 10000
+ //emitted light value of 10,000
+
+ {
+ map $lightmap
+ //source texture is affected by the lightmap
+ rgbGen identity
+ // this command handles the overbright bits created by "sunlight" in the game
+ }
+ {
+ map textures/gothic_light/ironcrosslt2.tga
+ blendFunc filter
+ rgbGen identity
+ }
+ {
+ maptextures/gothic_light/ironcrosslt2.blend.tga
+ blendFunc add
+ }
+}
+
+
+
+
+
+
+
q3map_lightmapAxis axis
+
+
+
+Takes a single argument: either x, y or z. The keyword q3map_terrain has an implicit (read default) q3map_lightmapAxis defined as z. This keyword is not recommended for things like caves or arches which have undersides.
+
+
+
+
+
q3map_lightmapBrightness N.N
+
+
+
+Lightmap brightness scaling. A value of 2.0 will be twice as bright (linearly) and a value of 0.5 will be half as bright.
+
+
+
+
+
q3map_lightmapFilterRadius self other
+
+
+
+This is usually used on light emitting shaders to approximate finer subdivided lighting. It adds a gaussian blur effect to the lightmaps of either the shader itself, or the surfaces affected by the shader, or both. The values for self and other are measured in world units of filtering (blurring) of lightmap data cast by any light sources. The self parameter can be set for surfacelights for finer subdivided lighting, but should be set to 0 for sky shaders since they don't have lightmaps. The other parameter should be set just high enough to eliminate the "stadium shadow" effect sometimes produced by q3map_skylight or to smooth out the lighting on surfacelights. If using a value higher than 4 for the iterations parameter on q3map_skylight, you don't need q3map_lightmapFilterRadius as much, but at the expense of higher compile times. q3map_lightmapFilterRadius should be placed before any light related shader directives that you want it to affect. (see Appendix I: Light Emitting Shaders)
+
+
+
+Allows terrain to be mapped onto a single lightmap page for seamless terrain shadows. It will specify that the shaders using it can merge nonplanars together onto a single lightmap, so you can have a single 512x512 lightmap across a terrain entity.
+
+
+
+
+
q3map_lightmapSampleOffset distance
+
+
+
+Takes a single parameter, defaulting to 1.0, which specifies how many units off a surface should Q3Map2 sample lighting from. Use larger values (2.0-8.0) if you're getting ugly splotches on lightmapped terrain.
+
+
+
+
+
q3map_lightmapSampleSize N
+
+
+
+Surfaces using a shader with this option will have the pixel size of the lightmaps set to (NxN). This option can be used to produce high-resolution shadows on certain surfaces. In addition, it can be used to reduce the size of lightmap data, where high-resolution shadows are not required. The default Quake III lightmap sample size is 16.
+
+
+
+
+
q3map_lightmapSize width height
+
+
+
+Specifies the size of the lightmap texture that surface lightmaps get packed on to. Used mainly in Enemy Territory for terrain lightmaps (512x512) in concert with the Q3Map2 switch -lightmapsize.
+
+
+
+
+
q3map_lightRGB red green blue
+
+
+
+This forces a specified color of light to be emitted from a surface or sky light, rather than sampling colors from a lightimage, editor image or the texture map. Three normalized color values of light are required for the red green blue parameters. This does not affect bounced light in radiosity or lightfilter.
+
+
+
+
+
q3map_lightStyle N
+
+
+
+Used to set light styles on surface lights for lightmap flickering/waveform effects. N takes the form of a number between 1 and 31, that references the corresponding style number set in the worldspawn entity. Equivalent to setting "style" "N" on a light entity (see Appendix G: Lightstyles).
+
+
+
+
+
q3map_lightSubdivide N
+
+
+
+Used on surface lights (see q3map_surfacelight). Chops up the surface into smaller polygons for more uniform lighting. It defaults to 120 game units, but can be made larger or smaller as needed (for light surfaces at the bottom of cracks, for example). This can be a dominant factor in processing time for Q3Map2 lighting. Can have an increasingly "darker" effect when used with -fast. Compensate by raising the surface light value. For sky shaders, use q3map_skylight instead (see Appendix I: Light Emitting Shaders).
+
+
+
+
+
q3map_noClip
+
+
+
+You might have noticed that terrain has been made to not clip or t-junction anymore. It was causing too many issues, so a new parameter was added: q3map_noClip. Normally, Q3Map2 clips all faces to the BSP, and then takes the minimum polygon that encompasses all visible fragments. q3map_noClip forces Q3Map2 to uses the original brush faces (This is implicit for autosprite(2) surfaces). Therefore, if you map tidy, you could theoretically use q3map_noClip on all your shaders. q3map_noClip and q3map_noTJunc, when used in combination, will preserve mesh geometry exactly as you make it.
+
+
+
+
+
q3map_noFast
+
+
+
+When used on surfaces that emit light, this will disable -fast optimizations. This is useful for large areas of dim sky, where you want the dim light to reach all surfaces. This shader keyword prevents fast from affecting dim sky surfaces. It is necessary, if you can't do a workaround with brighter skies or by using a larger q3map_lightSubdivide value.
+
+
+
+
+
q3map_noFog
+
+
+
+Volumes marked with a shader containing this keyword will not be affected by fog.
+
+
+
+
+
q3map_nonPlanar
+
+
+Instructs Q3Map2 to merge any adjacent triangles that don't lie in the same plane into a non-planar triangle soup. This allows shadows to be cast correctly across non-planar edges. It is typically used on lightmapped terrain shaders.
+
+
+
+
+
q3map_normalImage texturename
+
+
+
+Allow the use of a normal (height) map to simulate textured bumpmapping. This isn't real bumpmapping per se, but generates a static lightmap image that reflects the normal map and light source.
+
+
+
+
+
q3map_noTJunc
+
+
+
+Read as "no T-Junc". With this option, surfaces modified by a shader are not used for T-junction fixing. q3map_noClip and q3map_noTJunc, used in combination will preserve mesh geometry exactly as you make it.
+
+
+
+
+
q3map_noVertexLight
+
+
+blah
+
+
+
+
+
q3map_noVertexShadows
+
+
+
+Obsolete!
+Vertex lighting code was rewritten a couple of times, rendering this keyword irrelevant. Shaders that are used on misc_models or terrain were to use q3map_noVertexShadows to disable shadows being cast on the vertex lit surfaces. Casting shadows at small, misc_model objects often makes sense. However, having shadows on large, vertex lit terrain surfaces often looks bad. Shadows are not cast on forced_vertes_lit surfaces by default (shaders with pointlight).
+
+
+
+
+
q3map_offset N.N
+
+
+
+Offsets a surface along the vertex normals N.N units. Used in celshading.
+
+
+
+
+
q3map_patchShadows
+
+
+
+Obsolete!
+When this option is used in conjunction with the original lighting algorithm (-light), surfaces with textures modified with this option will show shadows that are cast by curve patches. Curve patches do not cast shadows by default.
+
+
+
+
+
q3map_remapShader shadername
+
+
+Allows shaders to be subclassed. Subclassed shaders can reference the remap shader by referencing the remap shader's name. In order for this to work, the remap shader must be specified before any shaders that references it. Subclassed shaders must contain Q3Map2 and editor relevant portions only (q3map_*, surfaceparm and qer_* directives).
+
+This is fundamentally the reverse of q3map_baseShader. Use q3map_baseShader when a single group of q3map_* directives is required for multiple base shaders. Use q3map_remapShader when similar shaders are used that require different groups of q3map_* directives.
+
+Design Notes:
+Since the subclassed shaders that are applied to geometry does not contain any texture stages, qer_editorImage is usually required in conjunction with q3map_remapShader.
+
+
+
+
+
q3map_replicate
+
+
+
+Does not exist!
+
+
+
+
+
q3map_rgbGen
+
+
+blah
+
+
+
+
+
q3map_rgbMod
+
+
+blah
+
+
+
+
+
q3map_shadeAngle angle
+
+
+Specifies the breaking angle for phong shading. This allows for smooth shadows between brush faces like patches. The angle parameter is the angle between adjacent faces at which smoothing will start to occur. Typical values are usually in the 120-179 range.
+
+
+
+
+
q3map_skylight amount iterations
+
+
+
+This replaces q3map_surfacelight and q3map_lightSubdivide on sky surfaces for much faster and more uniform sky illumination. Amount is a brightness value, similar to what you would use in q3map_sun. Good values are between 50 and 200. Iterations is an exponential factor. 3 is the best value that balances speed and quality. Values of 4 and 5 are higher quality at the expense of higher compile time. Values below 3 are not too useful
+
+
+
+
+
q3map_splotchFix
+
+
+
+This is used on lightmapped model shaders if splotched lighting artifacts appear. Any shadows at the ambient/dark level will be flooded from neighbouring luxels. This gets rid of shadow acne, but a surface must be more or less uniformly lit or this looks ugly. Try using q3map_lightmapSampleOffset first before using this as a last resort.
+
+
+
+
+
q3map_styleMarker
+
+
+
+For use on shaders that accompany style lights. For any shaders that may be hit by a styled light, add q3map_styleMarker after the lightmap stage and before the texture stages so Q3Map2 can properly create the fake lightmap stages (see Appendix G: Lightstyles).
+
+
+
+
+
q3map_styleMarker2
+
+
+
+Similar to q3map_styleMarker except it is used on masked textures where a depthFunc equal is required.
+
+
+
+
+
q3map_sun red green blue intensity degrees elevation
+
+
+
+This keyword in a sky shader will create the illusion of light cast into a map by a single, infinitely distance parallel light source (sun, moon, hellish fire, etc.). This is only processed during the lighting phase of Q3Map2. While still perfectly usable, q3map_sun is now deprecated in favour for q3map_sunExt (see below).
+
+
+red green blue : Color is described by three normalized RGB values. Color will be normalized to a 0.0 to 1.0 range, so it doesn't matter what range you use.
+intensity : The brightness of the generated light. A value of 100 is a fairly bright sun. The intensity of the light falls off with angle but not distance.
+degrees : The angle relative to the directions of the map file. A setting of 0 degrees equals east. 90 is north, 180 is west and 270 is south. In the original version of Q3Map, non-axial values had a tendency to produce jagged shadows. With Q3Map2, this problem is avoided with new options like lightmap filtering, raytracing and penumbra effects.
+elevation : The distance, measured in degrees from the horizon (z value of zero in the map file). An elevation of 0 is sunrise/sunset. An elevation of 90 is noon.
+
+
+Design Notes:
+Sky shaders should probably still have a q3map_surfacelight or preferred q3map_skylight value. The "sun" gives a strong directional light, but doesn't necessarily give the fill light needed to soften and illuminate shadows. Skies with clouds should probably have a weaker q3map_sun value and a higher q3map_surfacelight or q3map_skylight value. Heavy clouds diffuse light and weaken shadows. The opposite is true of a cloudless or nearly cloudless sky. In such cases, the "sun" or "moon" will cast stronger shadows that have a greater degree of contrast. This is also why q3map_sunExt is preferred. It gives the designer greater control over shadow contrast with a penumbra effect.
+
+Design Trick:
+Not certain what color formula you want to use for the sun's light? Try this. Create a light entity. Use the Radiant editor's color selection tools to pick a color. The light's _color key's value will be the normalized RGB formula. Copy it from the value line in the editor (CTRL+c) and paste it into your shader.
+
+
+
+
+
q3map_sunExt red green blue intensity degrees elevation deviance samples
+
+
+
+Works like q3map_sun with the addition of two new parameters to create "light jittering" for penumbra (half-shadow) effects. This gives you much more realistic shadows from the sun, especially when trying to simulate a cloudy day or a wide sun. The penumbra effect can also be applied to entity lights (point, spot or sun) with the _deviance N (distance in world units for point/spot lights and degrees for suns) and _samples N (number of samples) key/value pairs.
+
+
+deviance : The number of degrees for the half-shadow. General values up to 2 or 3 are acceptable. The real sun has a solid angle of about half a degree.
+samples : The number of random jitters distributed over the solid arc (~16).
+
+
+
+
+
+
q3map_sunlight
+
+
+
+Does not exist!
+
+
+
+
+
q3map_surfacelight value
+
+
+
+The texture gives off light equal to the value set for it. The relative surface area of the texture in the world affects the actual amount of light that appears to be radiated. To give off what appears to be the same amount of light, a smaller texture must be significantly brighter than a larger texture. Unless the q3map_lightImage keyword is used to select a different source for the texture's light color information, the color of the light will be the averaged color of the texture. For sky shaders, use q3map_skylight instead for faster and more uniform sky illumination.
+
+
+
+
+
q3map_surfaceModel modelpath density odds minscale maxscale minangle maxangle oriented
+
+
+
+A surface with q3map_surfaceModel in its shader will randomly place a specified model across it's face. This is designed to place grass or tree models over terrain.
+
+
+modelpath : The path to the model file (any supported format).
+density : The density of the models, in game units.
+odds : The odds of the model appearing (normalized?).
+minscale : The minimum scale of the model from its original size of 1.0.
+maxscale : The maximum scale of the model from its original size of 1.0.
+minangle : The model's minimum angle of rotation.
+maxangle : The model's maximum angle of rotation.
+oriented : This is a flag, either 0 or 1, and sets whether the model gets fitted to the orientation of the surface.
+
+
+
+
+
+
q3map_tcGen func ---
+
+
+
+This currently supports two functions, vector and ivector. Both functions are used for texture projection and do the exact same thing. The only difference is in the math, ivector was designed to be more intuitive.
+
+ q3map_tcGen vector sVector tVector
+Projects a texture Ns units by Nt units along a chosen axis. q3map_tcGen vector ( 1/256 0 0 ) ( 0 1/256 0 ) will project a texture every 256 units in x, and every 256 units in y, along the z-axis.
+
+ q3map_tcGen ivector 1.0/sVector 1.0/tVector
+Projects a texture Ns units by Nt units along a chosen axis. q3map_tcGen ivector ( 256 0 0 ) ( 0 256 0 ) will project a texture every 256 units in x, and every 256 units in y, along the z-axis. Ivector means inverse vector, and this means you won't have to do the divide with a calculator. Inverse = 1.0/n, unless the value is 0, then the matrix value is set to 0. A bit of dodgy math, but it works.
+
+
+
+
+
q3map_tcMod func ---
+
+
+
+This works in a similar manner to the stage specific tcMod keyword (see Chapter 6 tcMod), except in the compiler, so that modified texture coordinates are "baked" into the surface. This lets you set up less obvious texture tiling on natural and organic surfaces (especially terrain).
+
+ q3map_tcMod rotate degrees
+Rotates the texture (around origin, not center) a specified number of degrees.
+
+ q3map_tcMod scale s-scale t-scale
+Scales S (x) and T (y) texture co-ordinates. scale 2 2 would halve the size of the texture (doubling the texture co-ordinates).
+
+ q3map_tcMod translate or move or shift s-offset t-offset
+Shifts texture co-ordinates by S, T amount. translate 0.5 0 would shift it one-half in S, and none in T.
+
+
+
+
+
q3map_terrain
+
+
+
+Alphamap terrain shaders (typically textures/common/terrain and terrain2) must have the q3map_terrain keyword. Terrain is handled completely differently from previous versions. Q3Map2 no longer looks for the word terrain in the shader name to determine whether or not it is an indexed shader. It looks for q3map_indexed, or q3map_terrain, which then sets off a bunch of stuff shoehorned into it, like: the lightmap axis, texture projection, etc.
+
+By default, q3map_terrain sets the following:
+
+
+
+
+This controls the tessellation size (how finely a surface is chopped up in to triangles), in game units, of the surface. This is only applicable to solid brushes, not curves, and is generally only used on surfaces that are flagged with the deformVertexes keyword. Abuse of this can create a huge number of triangles. This happens during Q3Map2 processing, so maps must be reprocessed for changes to take effect. The poorly named tessSize keyword still works but has been deprecated in favour of q3map_tessSize for the sake of consistency.
+
+Design Notes:
+It can also be used on tessellating surfaces to make sure that tessellations are large and thus, less costly in terms of triangles created.
+
+
+
+
+
q3map_textureSize X Y
+
+
+
+Deprecated. Useful when you don't specify an editor or light image for a shader. Recent builds of Q3Map2 will find some referenced image in a shader and use that as a fallback. Historically, this was used for surface splitting for RTCW for PS2, to accommodate the hardware's limited texture range precision.
+
+
+
+
+
q3map_traceLight
+
+
+
+Obsolete!
+Surfaces using a shader with this option will always be lit with the original light algorithm. Patches will not cast shadows on this surface, unless the shader option q3map_patchShadows is also used.
+
+
+
+
+
q3map_vertexScale scale
+
+
+
+The light value, at the vertices of a surface using a shader with this option, is multiplied by the scale value. This is a way to lighten, or darken, a vertex_lit surface, in comparison to other lightmap_lit surfaces around it.
+
+
+
+
+
q3map_vertexShadows
+
+
+
+Obsolete! (See q3map_noVertexShadows)
+By default, no shadows are cast on vertex_lit_surfaces (see surfaceparm pointlight). In addition, when running Quake III Arena in vertex light, no shadows are cast upon any surface at all, since shadows are part of the lightmap. When using this shader keyword, shadows will be cast on surfaces that are vertex lit. However, sharp shadow edges won't be seen on the surfaces, since light values are only calculated at the vertices.
+
+
+
+All surfaceparm keywords are preceded by the word surfaceparm as follows: surfaceparm fog or surfaceparm noimpact.
+
+These keywords change the physical nature of the textures and the brushes that are marked with them. Changing any of these values will require the map to be re-compiled. These are global and affect the entire shader.
+
+It should be noted that some of these surface parameters will change both the surface as well as the content of an object (surfaceparm water, for example). Shaders containing content altering surface parameters should usually be used on all sides of the object.
+
+Many of these keywords are only used in "common" shaders (baseq3/scripts/common.shader), which are editor specific shaders used by the level designer. Such keywords are usually not used for the design of custom assets.
+
+Originally, surfaceparm's were part of the previous chapter since they are actually Q3Map2 specific keywords. I've moved them into their own chapter for the sake of being easier to reference, since both this and the previous chapter were getting too long.
+
+
+
+
+
surfaceparm alphashadow
+
+
+
+This keyword applied to a texture on a brush, patch or model will cause the lighting phase of the Q3Map2 process to use the texture's alpha channel as a mask for casting static shadows in the game world.
+
+Design Notes:
+Alphashadow does not work well with fine line detail on a texture. Fine lines may not cast acceptable shadows. It appears to work best with well-defined silhouettes and wider lines within the texture. Most of our tattered banners use this to cast tattered shadows. With Q3Map2, it is possible to increase the resolution of the lightmap receiving the shadows with a slight the cost of memory. This can be achieved with the q3map_lightmapSampleSize keyword on the shadow receiving shader or by creating a func_group of the shadow receiving brushes and adding the _lightmapScale key with a floating-point value for the scale of the lightmap.
+
+
+
+
+
surfaceparm antiportal
+
+
+
+Works like hint brushes in that it creates BSP nodes, but unlike hint, it blocks vis by not creating a portal at the split. This is designed to be used with large terrain maps to block visibility without having to resort to tricks like sky or caulk brushes penetrating the terrain and throwing ugly shadows.
+Players in part A of the map will not be able to see into part B and vice-versa. You can walk through the antiportal just fine. Note that this also blocks light. There are two caveats: They are opaque to light, and if aligned to another BSP cut (such as blocksize or the origin) they will not function correctly. Don't align it with anything else (like blocksize or another brush face) and it'll block vis. This keyword is found in "common/antiportal" so you shouldn't need to specify this. "common/antiportal" was added by ydnar, so if you're missing this shader, it is included with the latest version of Q3Map2.
+
+
+
+
+
surfaceparm areaportal
+
+
+
+A brush marked with this keyword functions as an areaportal, a break in the BSP tree. It is typically placed on a very thin brush placed inside a door entity (but is not a part of that entity). The intent is to block the game from processing surface triangles located behind it when the door is closed. It is also used by the BSPC (bot area file creation compiler) in the same manner as a clusterportal. The brush must touch all the structural brushes surrounding the areaportal. This keyword is found in "common/areaportal" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm botclip
+
+
+
+Blocks bot movement only. Other game world entities and human players can pass through a brush marked botclip. The intended use for this is to block the bot but not other players or projectiles. This keyword is found in "common/botclip" so you shouldn't need to specify this.
+
+Design Notes:
+Careful use of botclip in a map can greatly reduce the complexity of the .aas bot navigation file, resulting in "smarter", more efficient bots.
+
+
+
+
+
surfaceparm clusterportal
+
+
+
+A brush marked with this keyword function creates a subdivision of the area file (.aas) used by the bots for navigation. It is typically placed in locations that are natural breaks in a map, such as entrances to halls, doors, tunnels, etc. The intent is keep the bot from having to process the entire map at once. As with the the areaportal parameter, the affected brush must touch all the structural brushes surrounding the clusterportal. This keyword is found in "common/clusterportal" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm detail
+
+
+
+This surface attribute causes a brush to be ignored by the Q3Map2 process for generating possible break-points in the BSP tree. Generally speaking, detail brushes are usually set in the editor, so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm donotenter
+
+
+
+Read as "do not enter". Like clusterportal, this is a bot-only property. A brush marked with donotenter will not affect non-bot players, but bots will not enter it. It should be used only when bots appear to have difficulty navigating around some map features. This does not physically stop the bot from entering a region (as with botclip). Bots will not enter the area on their own but may, for example, be blasted into the region with a rocket launcher. This keyword is found in "common/donotenter" so you shouldn't need to specify this.
+
+Design Notes:
+donotenter can be (sparingly) used in space maps around the void or around lava/slime in certain places where bots have an overwhelming tendancy to commit suicide (lemming style).
+
+
+
+
+
surfaceparm dust
+
+
+
+If a player lands on a surface that uses a shader with this parameter, a puff of dust will appear at the player's feet. Note that the worldspawn entity must contain the "enabledust" key with a set value of "1".
+
+
+
+
+
surfaceparm flesh
+
+
+
+This will cue different sounds (in a similar manner to metalsteps) and cause blood to appear instead of bullet impact flashes. Actually, the code for this was never fully implemented by id Software. It remains half-finished so unfortunately it doesn't work.
+
+
+
+
+
surfaceparm fog
+
+
+
+fog defines the brush as being a "fog" brush. This is a Q3Map2 function that chops and identifies all geometry inside the brush. The general shader keyword fogparms must also be specified to tell how to draw the fog.
+
+
+
+
+
surfaceparm hint
+
+
+
+When Q3Map2 calculates the vis data, it tries to place portals in places in the map in an attempt to limit the potential viewable set (PVS). Brushes marked by a hint shader are used to manually place portals to force a break in the PVS. This keyword is found in "common/hint" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm ladder
+
+
+
+Supposedly used to allow the player to climb vertically. This is not functional in Quake III Arena.
+
+
+
+
+
surfaceparm lava
+
+
+
+Assigns to the texture the game properties set for lava. This affects both the surface and the content of a brush.
+
+
+
+
+
surfaceparm lightfilter
+
+
+
+Causes the Q3Map2 light stage to use the texture's RGB and alpha channels to generate colored alpha shadows in the lightmap. For example, this can be used to create the colored light effect cast by stained glass windows. This can be used with surfaceparm alphashadow.
+
+
+
+
+
surfaceparm lightgrid
+
+
+
+The min/max bounds of brushes with this shader in a map will define the bounds of the map's lightgrid (model lighting). Make it as small as possible around player space to minimize bsp size and compile time. This keyword is found in "common/lightgrid" so you shouldn't need to specify this. "common/lightgrid" was added by ydnar, so if you're missing this shader, it is included with the latest version of Q3Map2.
+
+
+
+
+
surfaceparm metalsteps
+
+
+
+The player sounds as if he is walking on clanging metal steps or gratings. Other than specifying flesh (doesn't work), metalsteps, nosteps, or default (i.e. specify nothing) it is currently not possible for a designer to create or assign a specific sound routine to a texture. Note: If no sound is set for a texture, then the default footsteps sound routines are heard.
+
+
+
+
+
surfaceparm monsterclip
+
+
+
+Blocks monster movement. Not functional in Quake III Arena.
+
+
+
+
+
surfaceparm nodamage
+
+
+
+The player takes no fall damage if he lands onto a texture with this surfaceparm. This keyword is found in "common/cushion" but you may want to specify this on certain shaders (jump pads, for example).
+
+
+
+
+
surfaceparm nodlight
+
+
+
+Read as "No Dee-Light". A texture containing this parameter will not be affected or lit by dynamic lights, such as weapon effects. An example in Quake III Arena would be solid lava.
+
+
+
+
+
surfaceparm nodraw
+
+
+
+A texture marked with nodraw will not visually appear in the game world. Most often used for triggers, clip brushes, origin brushes, shaders with cull none or cull disable and so on. This keyword is found in "common/nodraw" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm nodrop
+
+
+
+When a player dies inside a volume (brush) marked nodrop, no weapon is dropped. The intend use is for "Pits of Death." Have a kill trigger inside a nodrop volume, and when the players die here, they won't drop their weapons. The intent is to prevent unnecessary polygon pileups on the floors of pits. This keyword is found in "common/nodrop" but you may want to specify this on certain shaders (fog volumes in pits, for example).
+
+
+
+
+
surfaceparm noimpact
+
+
+
+World entities will not impact on this texture. No explosions occur when projectiles strike this surface and no marks will be left on it. Sky textures are usually marked with this texture so those projectiles will not hit the sky and leave marks.
+
+
+
+
+
surfaceparm nomarks
+
+
+
+Projectiles will explode upon contact with this surface, but will not leave marks. Blood will also not mark this surface. This is useful to keep lights from being temporarily obscured by battle damage.
+
+Design Notes:
+Use this on any surface with a deformVertexes keyword. Otherwise, the marks will appear on the unmodified surface location of the texture with the surface wriggles and squirms through the marks.
+
+
+
+
+
surfaceparm nolightmap
+
+
+
+This texture does not have a lightmap phase. It is not affected by the ambient lighting of the world around it. It does not require the addition of an rgbGen identity keyword in that stage.
+
+
+
+
+
surfaceparm nosteps
+
+
+
+The player makes no sound when walking on this texture.
+
+
+
+
+
surfaceparm nonsolid
+
+
+
+This attribute indicates a brush, which does not block the movement of entities in the game world. It applied to triggers, hint brushes and similar brushes. This affects the content of a brush.
+
+
+
+
+
surfaceparm origin
+
+
+
+Used on the "origin" texture. Rotating entities need to contain an origin brush in their construction. The brush must be rectangular (or square). The origin point is the exact center of the origin brush. This keyword is found in "common/origin" so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm playerclip
+
+
+
+Blocks player movement through a nonsolid texture. Other game world entities can pass through a brush marked playerclip. The intended use for this is to block the player but not block projectiles like rockets. This keyword is found in "common/clip" so you shouldn't need to specify this.
+
+Design Notes:
+ playerclip is often useful for "smoothing" out the geometry of the map, preventing the player from snagging on objects. It is also used in open sky areas of maps, preventing the player from flying too high and seeing the "Hall of Mirrors" effect at the bottom of the cloud layer.
+
+
+
+
+
surfaceparm pointlight
+
+
+
+Sample lighting at vertices??? I'm not sure what this does at this point.
+
+
+
+
+
surfaceparm skip
+
+
+
+Works just like Quake II skip texture. Use on sides of hint and antiportal brushes where you don't want BSP splits. This keyword is found in "common/skip" so you shouldn't need to specify this. "common/skip" was added by ydnar, so if you're missing this shader, it is included with the latest version of Q3Map2.
+
+
+
+
+
surfaceparm sky
+
+
+
+This flags the compiler, telling it that this surface should be rendered as sky.
+
+
+
+
+
surfaceparm slick
+
+
+
+This surfaceparm included in a texture should give it significantly reduced friction. This keyword is found in "common/slick" but you may want to specify this on certain shaders (ice, for example).
+
+
+
+
+
surfaceparm slime
+
+
+
+Assigns to the texture the game properties for slime. This affects both the surface and the content of a brush.
+
+
+
+
+
surfaceparm structural
+
+
+
+This surface attribute causes a brush to be seen by the Q3Map2 process as a possible break-point in a BSP tree. It is used as a part of the shader for the "hint" texture. Generally speaking, any opaque texture not marked as "detail" is, by default, structural, so you shouldn't need to specify this.
+
+
+
+
+
surfaceparm trans
+
+
+
+Tells Q3Map2 that pre-computed visibility should not be blocked by this surface. Generally, any shaders that have blendfunc's should be marked as surfaceparm trans.
+
+
+
+
+
surfaceparm water
+
+
+
+Assigns to the texture the game properties for water. This affects both the surface and the content of a brush.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch5.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch5.htm
new file mode 100644
index 0000000..1928522
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch5.htm
@@ -0,0 +1,102 @@
+
+
+Q3Map2 Shader Manual: Editor Specific Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+5 - Editor Specific Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+These instructions only affect the texture when it is seen in the Radiant editor. They should be grouped with the surface parameters but ahead of them in sequence.
+
+
+
+
+
qer_editorImage textureName
+
+
+
+This keyword creates a shader name in memory, but in the editor, it displays the TGA art image specified in qer_editorImage (in the example below this is textures/eerie/lavahell.tga).
+
+The editor maps a texture using the size attributes of the TGA file used for the editor image. When that editor image represents a shader, any texture used in any of the shader stages will be scaled up or down to the dimensions of the editor image. If a 128x128 pixel image is used to represent the shader in the editor, then a 256x256 image used in a later stage will be shrunk to fit. A 64x64 image would be stretched to fit. Be sure to check this on bouncy, acceleration, and power-up pads placed on surfaces other than 256 x 256. Use tcMod scale to change the size of the stretched texture. Remember that tcMod scale 0.5 0.5 will double your image, while tcMod scale 2 2 will halve it.
+
+Design Notes:
+The base_light and gothic_light shaders contain numerous uses of this. It can be very useful for making different light styles (mostly to change the light brightness) without having to create a new piece of TGA art for each new shader.
+
+
+
Script: Setting an editorImage
+textures/liquids/lavahell2 //path and name of new texture
+{
+ qer_editorImage textures/eerie/lavahell.tga //based on this
+ qer_nocarve //cannot be cut by CSG subtract
+ surfaceparm noimpact //projectiles do not hit it
+ surfaceparm lava //has the game properties of lava
+ surfaceparm nolightmap //environment lighting does not affect
+ q3map_surfacelight 3000 //light is emitted
+ tessSize 256 //relatively large triangles
+ cull disable //no sides are removed
+ deformVertexes wave 100 sin 5 5 .5 0.02
+ fogparms 0.8519142 0.309723 0.0 128 128
+ {
+ maptextures/eerie/lavahell.tga //base texture artwork
+ tcMod turb .25 0.2 1 0.02 //texture is subjected to turbulence
+ tcMod scroll 0.1 0.1 //the turbulence is scrolled
+ }
+}
+
+
+
+
+
+
+
qer_nocarve
+
+
+
+A brush marked with this instruction will not be affected by CSG subtract functions. It is especially useful for water and fog textures.
+
+
+
+
+
qer_trans N.N
+
+
+
+This keyword defines the percentage of transparency that a brush will have when seen in the editor (no effect on game rendering at all). It can have a positive value between 0 and 1. The higher the value, the less transparent the texture. Example: qer_trans 0.2 means the brush is 20% opaque and nearly invisible.
+
+Design Notes:
+If you use qer_trans on a shader whose qer_editorImage has an alpha channel, the transparent areas of the editorImage will also be transparent in the editor. To keep the solid areas of the editorImage opaque, use a qer_trans value of "1.0". Useful for grates, windows, fences, etc.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch6.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch6.htm
new file mode 100644
index 0000000..b245dc6
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch6.htm
@@ -0,0 +1,505 @@
+
+
+Q3Map2 Shader Manual: Stage Specific Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+6 - Stage Specific Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+Stage specifications only affect rendering. Changing any keywords or values within a stage will usually take effect as soon as a vid_restart is executed. Q3Map2 ignores stage specific keywords entirely.
+
+A stage can specify a texture map, a color function, an alpha function, a texture coordinate function, a blend function, and a few other rasterization options.
+
+
+
+
+
Texture Map Specification
+
+
+
+map texturename
+Specifies the source texture map (a 24 or 32-bit TGA file) used for this stage. The texture may or may not contain alpha channel information. The special keywords $lightmap and $whiteimage may be substituted in lieu of an actual texture map name. In those cases, the texture named in the first line of the shader becomes the texture that supplies the light mapping data for the process. The texture name should always end with the ".tga" suffix regardless of whether the source texture map is actually a .tga file or .jpg.
+
+ map $lightmap
+This is the overall lightmap for the game world. It is calculated during the Q3Map2 process. It is the initial color data found in the framebuffer. Note: due to the use of overbright bits in light calculation, the keyword rgbGen identity must accompany all $lightmap instructions.
+
+ map $whiteimage
+This is used for specular lighting on MD3 models. This is a white image generated internally by the game. This image can be used in lieu of $lightmap or an actual texture map if, for example, you wish for the vertex colors to come through unaltered.
+
+ clampMap texturename
+Dictates that this stage should clamp texture coordinates instead of wrapping them. During a stretch function, the area, which the texture must cover during a wave cycle, enlarges and decreases. Instead of repeating a texture multiple times during enlargement (or seeing only a portion of the texture during shrinking) the texture dimensions increase or contract accordingly. This is only relevant when using something like deformTexCoordParms to stretch/compress texture coordinates for a specific special effect. Remember that the Quake III Arena engine normalizes all texture coordinates (regardless of actual texture size) into a scale of 0.0 to 1.0.
+
+Proper Alignment: When using clampTexCoords make sure the texture is properly aligned on the brush. The clampTexCoords function keeps the image from tiling. However, the editor doesn't represent this properly and shows a tiled image. Therefore, what appears to be the correct position may be offset. This is very apparent on anything with a tcMod rotate and clampTexCoords function.
+
+Avoiding Distortion: When seen at a given distance (which can vary, depending on hardware and the size of the texture), the compression phase of a stretch function will cause a "cross"-like visual artifact to form on the modified texture due to the way that textures are reduced. This occurs because the texture undergoing modification lacks sufficient "empty space" around the displayed (non-black) part of the texture (see figure 2a). To compensate for this, make the non-zero portion of the texture substantially smaller (50% of maximum stretched size -- see figure 2b) than the dimensions of the texture. Then, write a scaling function (tcMod scale) into the appropriate shader phase, to enlarge the image to the desired proportion.
+
+The shaders for the bouncy pads (in the sfx.shader file) show the stretch function in use, including the scaling of the stretched texture:
+
+
+
+ animMap frequency texture1... texture8
+The surfaces in the game can be animated by displaying a sequence of 1 to 8 frames (separate texture maps). These animations are affected by other keyword effects in the same and later shader stages.
+
+
+frequency : The number of times that the animation cycle will repeat within a one second time period. The larger the value, the more repeats within a second. Animations that should last for more than a second need to be expressed as decimal values.
+texture1... texture8 : the texture path/texture name for each animation frame must be explicitly listed. Up to eight frames (eight separate .tga files) can be used to make an animated sequence. Each frame is displayed for an equal subdivision of the frequency value.
+
+
+Example:
+animMap 0.25 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga would be a 4 frame animated sequence, calling each frame in sequence over a cycle length of 4 seconds. Each frame would be displayed for 1 second before the next one is displayed. The cycle repeats after the last frame in sequence shown.
+
+Design Notes:
+To make a texture image appear for an unequal (longer) amount of time (compared to other frames), repeat that frame more than once in the sequence.
+
+
+ videoMap videoname
+Surfaces marked with a shader containing this directive in one of its stages will display an animated video playing in a continuous loop. The video clip must be in ROQ format and playing at 30 frames per second. The ROQ file is stored in the "video" directory within the main mod directory. A third-party program is required to convert other video formats to the ROQ format for use within Quake III engine games.
+
+
+ Historical Information:
+The ROQ format is a proprietary video format developed by Graeme Devine originally used for "The 7th Guest" for the purpose of being able to decompress quickly while maintaining high image quality. It was later adopted by Id Software for use in Quake III Arena.
+
+
+
+
+
blendFunc func
+
+
+
+Blend functions are the keyword commands that tell the Quake III Arena graphic engine's renderer how graphic layers are to be mixed together.
+
+ Simplified Blend Functions
+The most common blend functions are set up here as simple commands, and should be used unless you really know what you are doing.
+
+
+add : Shorthand command for blendFunc gl_one gl_one. Effects like fire and energy are additive.
+filter : Shorthand command that can be substituted for either blendFunc gl_dst_color gl_zero or blendFunc gl_zero gl_src_color. A filter will always result in darker pixels than what is behind it, but it can also remove color selectively. Lightmaps are filters.
+blend : Shorthand command for blendFunc gl_src_alpha gl_one_minus_src_alpha. This is conventional transparency, where part of the background is mixed with part of the texture.
+
+
+ Explicit Blend Functions
+Getting a handle on this concept is absolutely key to understanding all shader manipulation of graphics.
+
+blendFunc or "Blend Function" is the equation at the core of processing shader graphics. The formula reads as follows:
+
+Source is usually the RGB color data in a texture TGA file (remember it's all numbers) modified by any rgbGen and alphaGen. In the shader, the source is generally identified by command map, followed by the name of the image.
+
+Destination is the color data currently existing in the frame buffer.
+
+Rather than think of the entire texture as a whole, it maybe easier to think of the number values that correspond to a single pixel, because that is essentially what the computer is processing... one pixel of the bitmap at a time.
+
+The process for calculating the final look of a texture in place in the game world begins with the precalculated lightmap for the area where the texture will be located. This data is in the frame buffer. That is to say, it is the initial data in the destination. In an unmanipulated texture (i.e. one without a special shader script), color information from the texture is combined with the lightmap. In a shader-modified texture, the $lightmap stage must be present for the lightmap to be included in the calculation of the final texture appearance.
+
+Each pass or "stage" of blending is combined (in a cumulative manner) with the color data passed onto it by the previous stage. How that data combines together depends on the values chosen for the source blends and destination blends at each stage. Remember it's numbers that are being mathematically combined together that are ultimately interpreted as colors.
+
+A general rule is that any source blend other than GL_ONE (or GL_SRC_ALPHA where the alpha channel is entirely white) will cause the source to become darker.
+
+ Source Blend srcBlend
+The following values are valid for the source blend part of the equation.
+
+
+GL_ONE This is the value 1. When multiplied by the source, the value stays the same. The value of the color information does not change.
+GL_ZERO This is the value 0. When multiplied by the source, all RGB data in the source becomes zero (essentially black).
+GL_DST_COLOR This is the value of color data currently in the destination (frame buffer). The value of that information depends on the information supplied by previous stages.
+GL_ONE_MINUS_DST_COLOR This is nearly the same as GL_DST_COLOR except that the value for each component color is inverted by subtracting it from one. (i.e. R = 1.0 - DST.R, G = 1.0 - DST.G, B = 1.0 - DST.B, etc.)
+GL_SRC_ALPHA The TGA file being used for the source data must have an alpha channel in addition to its RGB channels (for a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the source.
+GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one. (i.e. A=1.0 - SRC.A)
+
+
+ Destination Blend dstBlend
+The following values are valid for the destination blend part of the equation.
+
+
+GL_ONE This is the value 1. When multiplied by the destination, the value stays the same the value of the color information does not change.
+GL_ZERO This is the value 0. When multiplied by the destination, all RGB data in the destination becomes zero (essentially black).
+GL_SRC_COLOR This is the value of color data currently in the source (which is the texture being manipulated here).
+GL_ONE_MINUS_SRC_COLOR This is the value of color data currently in source, but subtracted from one (i.e. inverted).
+GL_SRC_ALPHA The TGA file being used for the source data must have an alpha channel in addition to its RGB channels (four a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the source.v
+GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one. (i.e. A=1.0 - SRC.A).
+
+
+ Doing the Math: The Final Result
+The product of the source side of the equation is added to the product of the destination side of the equation. The sum is then placed into the frame buffer to become the destination information for the next stage. Ultimately, the equation creates a modified color value that is used by other functions to define what happens in the texture when it is displayed in the game world.
+
+ Default Blend Function
+If no blendFunc is specified then no blending will take place. A warning is generated if any stage after the first stage does not have a blendFunc specified.
+
+ Technical Information/Limitations Regarding Blend Modes:
+The Riva 128 graphics card supports ONLY the following blendmodes:
+
+Cards running in 16 bit color cannot use any GL_DST_ALPHA blends.
+
+
+
+
+
rgbGen func
+
+
+
+There are two color sources for any given shader, the texture file and the vertex colors. Output at any given time will be equal to TEXTURE multiplied by VERTEXCOLOR. Most of the time VERTEXCOLOR will default to white (which is a normalized value of 1.0), so output will be TEXTURE (this usually lands in the Source side of the shader equation). Sometimes you do the opposite and use TEXTURE = WHITE, but this is only commonly used when doing specular lighting on entities (i.e. shaders that level designers will probably never create.
+
+The most common reason to use rgbGen is to pulsate something. This means that the VERTEXCOLOR will oscillate between two values, and that value will be multiplied (darkening) the texture.
+
+If no rgbGen is specified, either "identityLighting" or "identity" will be selected, depending on which blend modes are used.
+
+Valid func parameters are identity, identityLighting, vertex, exactVertex, fromVertex (???)entity, oneMinusEntity, lightingDiffuse, noise (???), wave and const.
+
+
+ rgbGen identityLighting
+Colors will be (1.0, 1.0, 1.0) if running without overbright bits (NT, Linux, windowed modes), or (0.5, 0.5, 0.5) if running with overbright. Overbright allows a greater color range at the expense of a loss of precision. Additive and blended stages will get this by default.
+
+ rgbGen identity
+Colors are assumed to be all white (1.0, 1.0, 1.0). All filters stages (lightmaps, etc) will get this by default.
+
+ rgbGen wave func base amplitude phase freq
+Colors are generated using the specified waveform. An affected texture with become darker and lighter, but will not change hue. Hue stays constant. Note that the RGB values for color will not go below 0 (black) or above 1 (white). Valid waveforms are sin, triangle, square, sawtooth and inversesawtooth (see 1.4.8 Waveform Functions).
+
+ rgbGen entity
+Colors are grabbed from the entity's modulate field. This is used for things like explosions.
+
+Design Notes:
+This keyword would probably not be used by a level designer.
+
+ rgbGen oneMinusEntity
+Colors are grabbed from 1.0 minus the entity's modulate field.
+
+Design Note:
+This keyword would probably not be used by a level designer.
+
+ rgbGen vertex
+Colors are filled in directly by the data from the map or model files.
+
+Obsidian: exactVertex ignores overbrightbits. Generally brighter under default settings.
+rgbGen vertex + alphaGen const or rgbGen exactVertex to disable surfaces from being affected by alphaMod volumes.
+
+Design Note:
+rgbGen vertex should be used when you want the RGB values to be computed for a static model (i.e. mapobject) in the world using precomputed static lighting from Q3BSP. This would be used on things like the gargoyles, the portal frame, skulls, and other decorative models put into the Quake III Arena world.
+
+ rgbGen oneMinusVertex
+As rgbGen vertex, but inverted.
+
+Design Note:
+This keyword would probably not be used by a level designer.
+
+ rgbGen lightingDiffuse
+Colors are computed using a standard diffuse lighting equation. It uses the vertex normals to illuminate the object correctly.
+
+Design Notes:
+rgbGen lightingDiffuse is used when you want the RGB values to be computed for a dynamic model (i.e. non-map object) in the world using regular in-game lighting. For example, you would specify on shaders for items, characters, weapons, etc.
+
+ rgbGen const ( R G B )
+A constant vertex colour is assigned to the affected surface. This modifies the hue of the texture.
+
+
+
+
+
alphaGen func
+
+
+
+The alpha channel can be specified like the RGB channels. If not specified, it defaults to 1.0. Valid func values are lightingSpecular, wave, entity, oneMinusEntity, vertex, oneMinusVertex, portal.
+
+//Obsidian: Describe each in more detail... like rgbGen above.
+
+ alphaGen portal
+This rendering stage keyword is used in conjunction with the surface parameter keyword portal. The function accomplishes the "fade" that causes the scene in the portal to fade from view. Specifically, it means "Generate alpha values based on the distance from the viewer to the portal." Use alphaGen portal on the last rendering pass.
+
+//Obsidian: needs formatting???
+
+
+
+
+
tcGen coordinateSource
+
+
+
+Specifies how texture coordinates are generated and where they come from. Valid functions are base, lightmap, environment and vector.
+
+
+base : Base texture coordinates from the original art.
+lightmap : Lightmap texture coordinates.
+environment : Make this object environment mapped.
+vector : Projects a texture from a specified direction.
+
+
+tcGen vector ( sx sy sz ) ( tx ty tz )
+New texture coordinate generation by world projection. This allows you to project a texture onto a surface in a fixed way, regardless of its orientation.
+
+S coordinates correspond to the "x" coordinates on the texture itself.
+T coordinates correspond to the "y" coordinates on the texture itself.
+
+The measurements are in game units.
+
+Example: tcGen vector ( 0.01 0 0 ) ( 0 0.01 0 )
+This would project a texture with a repeat every 100 units across the X/Y plane. The value comes from dividing the game units from 1, in this case, 1/100.
+
+
+
+
+
tcMod func ---
+
+
+
+Specifies how texture coordinates are modified after they are generated. The valid functions for tcMod are rotate, scale, scroll, stretch, transform and turb. Transform is a function generally reserved for use by programmers who suggest that designers leave it alone. When using multiple tcMod functions during a stage, place the scroll command last in order, because it performs a mod operation to save precision, and that can disturb other operations. Texture coordinates are modified in the order in which tcMods are specified. In otherwords, if you see:
+
+tcMod scale 0.5 0.5
+tcMod scroll 1 1
+
+then the texture coordinates will be scaled then scrolled.
+
+ tcMod rotate degrees/sec
+This keyword causes the texture coordinates to rotate. The value is expressed in degrees rotated each second. A positive value means clockwise rotation. A negative value means counterclockwise rotation. For example "tcMod rotate 5" would rotate texture coordinates 5 degrees each second in a clockwise direction. The texture rotates around the center point of the texture map, so you are rotating a texture with a single repetition, be careful to center it on the brush (unless off-center rotation is desired).
+
+ tcMod scale sScale tScale
+Resizes (enlarges or shrinks) the texture coordinates by multiplying them against the given factors of sScale and tScale. The values "s" and "t"conform to the "x" and "y" values (respectively) as they are found in the original texture TGA. The values for sScale and tScale are NOT normalized. This means that a value greater than 1.0 will increase the size of the texture. A positive value less than one will reduce the texture to a fraction of its size and cause it to repeat within the same area as the original texture (Note: see clampTexCoords for ways to control this).
+
+Example:tcMod scale 0.5 2 would cause the texture to repeat twice along its width, but expand to twice its height (in which case half of the texture would be seen in the same area as the original)
+
+ tcMod scroll sSpeed tSpeed
+Scrolls the texture coordinates with the given speeds. The values "s" and "t" conform to the "x" and "y" values (respectively) as they are found in the original texture TGA. The scroll speed is measured in "textures" per second. A "texture" is the dimension of the texture being modified and includes any previous shader modifications to the original TGA). A negative s value would scroll the texture to the left. A negative t value would scroll the texture down.
+
+Example:tcMod scroll 0.5 -0.5 moves the texture down and right (relative to the TGA files original coordinates) at the rate of a half texture each second of travel.
+
+This should be the LAST tcMod in a stage. Otherwise there may be a popping or snapping visual effect in some shaders.
+
+ tcMod stretch func base amplitude phase frequency
+Stretches the texture coordinates with the given function. Stretching is defined as stretching the texture coordinate away from the center of the polygon and then compressing it towards the center of the polygon. (see Chapter 1: Key Concepts for waveform parameter definitions).
+
+ tcMod transform m00 m01 m10 m11 t0 t1
+Transforms each texture coordinate as follows:
+
+S' = s * m00 + t * m10 + t0
+T' = s * m01 + t * m11 + t1
+
+This is for use by programmers.
+
+
+ tcMod turb base amplitude phase freq
+Applies turbulence to the texture coordinate. Turbulence is a back and forth churning and swirling effect on the texture.
+
+base : Currently undefined.
+amplitude : This is essentially the intensity of the disturbance or twisting and squiggling of the texture.
+phase : See the explanation for phase under the deformVertexes keyword.
+freq : Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of one would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10 seconds.
+
+
+
+
+
depthFunc func
+
+
+
+This controls the depth comparison function used while rendering. The default is "lequal" (Less than or equal to) where any surface that is at the same depth or closer of an existing surface is drawn. This is used for textures with transparency or translucency. Under some circumstances you may wish to use "equal", e.g. for light-mapped grates that are alpha tested (it is also used for mirrors).
+
+
+
+
+
depthWrite
+
+
+
+By default, writes to the depth buffer when depthFunc passes will happen for opaque surfaces and not for translucent surfaces. Blended surfaces can have the depth writes forced with this function.
+
+
+
+
+
detail
+
+
+
+This feature was not used in Quake III Arena maps, but still functions. Designates this stage as a detail texture stage, which means that if the c_var, r_detailtextures, is set to 0 then this stage will be ignored (detail will not be displayed). This keyword, by itself, does not affect rendering at all. If you do put in a detail texture, it has to conform to very specific rules. Specifically, the blendFunc:
+
+
blendFunc GL_DST_COLOR GL_SRC_COLOR
+
+This is also the simple blend function: blendFunc filter
+
+And the average intensity of the detail texture itself must be around 127.
+
+Detail is used to blend fine pixel detail back into a base texture whose scale has been increased significantly. When detail is written into a set of stage instructions, it allows the stage to be disabled by the c_var console command setting "r_detailtextures 0".
+
+A texture whose scale has been increased beyond a 1:1 ratio tends not to have very high frequency content. In other words, one texel can cover a lot of real estate. Frequency is also known as "detail." Lack of detail can appear acceptable if the player never has the opportunity to see the texture at close range. But seen close up, such textures look glaringly wrong within the sharp detail of the Quake III Arena environment. A detail texture solves this problem by taking a noisy "detail" pattern (a tiling texture that appears to have a great deal of surface roughness) and applying it to the base texture at a very densely packed scale (that is, reduced from its normal size). This is done programmatically in the shader, and does not require modification of the base texture. Note that if the detail texture is the same size and scale as the base texture that you may as well just add the detail directly to the base texture. The theory is that the detail texture's scale will be so high compared to the base texture (e.g.; 9 detail texels fitting into 1 base texel) that it is literally impossible to fit that detail into the base texture directly.
+
+For this to work, the rules are as follows:
+
+
+
The lightmap must be rendered first. This is because the subsequent detail texture will be modifying the lightmap in the framebuffer directly.
+
The base texture must be rendered next.
+
The detail texture must be rendered last since it modifies the lightmap in the framebuffer. There is a bug in Quake III that disables all stages in a shader after a "detail" stage if r_detailTextures is set to 0.
+
The detail texture MUST have a mean intensity around 127-129. If it does not then it will modify the displayed texture's perceived brightness in the world.
+
The detail shader stage MUST have the "detail" keyword or it will not be disabled if the user uses the "r_detailtextures 0" setting.
+
The detail stage MUST use "blendFunc GL_DST_COLOR GL_SRC_COLOR". Any other BlendFunc will cause mismatches in brightness between detail and non-detail views.
+
The detail stage should scale its textures by some amount (usually between 3 and 12) using "tcMod scale" to control density. This roughly corresponds to coarseness. A very large number, such as 12, will give very fine detail, however that detail will disappear VERY quickly as the viewer moves away from the wall since it will be MIP mapped away. A very small number, e.g. 3, gives diminishing returns since not enough is brought in when the user gets very close. I'm currently using values between 6 and 9.5. You should use non-integral numbers as much as possible to avoid seeing repeating patterns.
+
Detail textures add one pass of overdraw, so there is a definite performance hit.
+
Detail textures can be shared, so designers may wish to define only a very small handful of detail textures for common surfaces such as rocks, etc.
+
+
+An example (non-existent) detail shader is as follows:
+
+
+
+
Script: Detail shaders
+textures/bwhtest/foo
+{
+ q3map_globalTexture //may be required when using tcMod scale in later stages
+
+ // draw the lightmap first
+ {
+ map $lightmap
+ rgbGen identity
+ }
+
+ // draw the base texture
+ {
+ map textures/castle/blocks11b.tga
+ blendFunc filter
+ }
+
+ // highly compressed detail texture
+ {
+ map textures/details/detail01.tga
+ blendFunc GL_DST_COLOR GL_SRC_COLOR //MUST BE USED
+ detail //allows detail shaders to be disabled
+ tcMod scale 9.1 9.2
+ }
+}
+
+
+
+
+
+
+
alphaFunc func
+
+
+
+Determines the alpha test function used when rendering this map. Valid values are GT0, LT128, and GE128. These correspond to "GREATER THAN 0", "LESS THAN 128", and "GREATER THAN OR EQUAL TO 128". This function is used when determining if a pixel should be written to the framebuffer. For example, if GT0 is specified, the only the portions of the texture map with corresponding alpha values greater than zero will be written to the framebuffer. By default alpha testing is disabled.
+
+Both alpha testing and normal alpha blending can be used to get textures that have see-through parts. The difference is that alphaFunc is an all-or-nothing test, while blending smoothly blends between opaque and translucent at pixel edges. Alpha test can also be used with depthWrite, allowing other effects to be conditionally layered on top of just the opaque pixels by setting depthFunc to equal.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch7.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch7.htm
new file mode 100644
index 0000000..eb679fc
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch7.htm
@@ -0,0 +1,110 @@
+
+
+Q3Map2 Shader Manual: Quake 3 Engine Game Specific Shader Keywords
+
+
+
+
+
+
+
+
+
+
+
+
+
+7 - Quake 3 Engine Game Specific Shader Keywords
+
+Q3Map2 Shader Manual
+
+
+
+The Quake 3 Engine has been licensed to several different companies for the development of third party games. This chapter is a sub-manual documenting the Quake 3 Engine game specific shader keywords developed for third party games like Return to Castle Wolfenstein: Enemy Territory, Jedi Knights II, Soldier of Fortune II, Jedi Academy, Star Trek: Elite Force, as examples.
+
+Note: These are just keywords that have been submitted by people on the forums/irc channels. I have no idea about the accuracy of this chapter. Please use with caution. Please e-mail me (Obsidian) for any additions or error corrections to this list.
+
+All default Quake III Arena shader keywords *should* also work for the below list of games.
+
+
+
\ No newline at end of file
diff --git a/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch8.htm b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch8.htm
new file mode 100644
index 0000000..bae97ea
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Q3Map2Shader_Manual/ch8.htm
@@ -0,0 +1,40 @@
+
+
+Q3Map2 Shader Manual: Shader Creation Tips
+
+
+
+
+
+
+
+
+
+
+
+
+
+8 - Shader Creation Tips
+
+Q3Map2 Shader Manual
+
+
+
+This chapter covers some miscellaneous shader and texture creating tips. Note: I've temporarily removed these for now, since I'm not sure how useful they are. A lot of this was covered or should be covered in the Radiant Manual. I'll come back to this chapter when I have time.
+
+Obsidian's Notes:
+Stage transparency using blendFunc blend vs. shader transparency.
+
+
+
+
+
+
+
+ By Obsidian and ydnar | Version 2.5.15 (02.09.04)
+
+
+
+
+
+ Based on the original
+ Q3Radiant Shader Manual, Revision #12
+ By Paul Jaquays and Brian Hook
+ (with additional material by John Carmack, Christian Antkow, Kevin Cloud, & Adrian Carmack)
+ QERadiant.com thanks John Hutton for re-formating the original manual into a more web friendly version
+
+
+Special Thanks to Jim Dosé and Jan Paul van Waveren
+for their assistance and review (and making this all work in the first place)
+and the same gratitude to Astrocreep for his review and suggestions for making
+it into something people could understand.
+
The material here is for use in conjunction with the Q3Radiant manual for the
+Quake 3 Engine and presumes familiarity with that tool and game engine. Although
+compiling switches and shader commands are included here, this is not intended
+to be a general update or revision to the Q3Radiant manual
Despite their massive size, terrain maps can support enjoyable bot play. The
+key is careful placement of cluster portals, which is true of any map. Study the
+bspc documentation for details. The documents accompanying the tools are more up
+to date than those in the Q3Radiant manual. Your goal should be to keep the
+number of areas in each cluster roughly equal and reasonably low (hundreds, not
+thousands).
This is really best addressed as a number of semi-related building tips:
+
+
Plan Ahead. If you know you want buildings
+in your map, plan their locations from the first. Very complicated buildings
+(lots of geometry and surface detail) should be isolated away from long views.
+One reason for this is to control in view polygon counts. The second (and really
+obscure one) is to reduce the amount of z-compression that will affect the
+structures.
+
+
Build to Support Game play. Each of the
+structures in the Q3:TA terrain maps was built to support a game play need.
+Quite often, less is better than more.
+
+
Build Simply. Simple, uncomplicated
+architecture may be best. The more complicated you make your buildings, the less
+complicated the terrain around them can be. Depends on what you want to play up.
+The busy look of many Q3A maps doesn’t translate well to large terrain.
+Details are lost at great distances and only add to the triangle complexity of
+maps containing them.
+
+
Detail Content. With few exceptions ALL
+the geometry inside the terrain map is detail content, not just the terrain
+entity. The walls forming the corridor in mpterra2 may be the only non-detail
+structures in that map. Making geometry into detail makes a map far easier and
+faster to compile. If you want to block vis inside your structures, create
+simple caulk structures … much the same way as described for vis blocking the
+terrain.
+
+
Z-Compression Problems. Review the the map
+in 16 bit mode during development. This brings out z-fighting issues that occur
+at long distances. This z-fighting is created by detail brushes being compressed
+into each other (The Q3A engine does a significant amount of “z compression”
+as geometry becomes farther away from the viewer). This z-compression is far
+less apparent in 32 bit modes, but we have to remember that many people turn
+down graphic features in order to simply play Q3A on their systems (not just to
+get ridiculously high frame rates).
+
+
Fit Structures to the Terrain. Don’t
+just set structures on terrain and expect them to look right. Make your
+buildings look like they belong where you put them. Accommodate the rise and
+fall of terrain in your floor plans … or “dig” into the terrain brushes to
+create basements, tunnels and whatever you need. You can also adjust the height
+map to better arrange the geometry around structures, or manually tweak the
+triangles once the structures are in place. History is full of examples of
+really interesting buildings that have been built to accommodate difficult
+terrain like hills, cliffs and mountains.
The creation of terrain maps requires that the mapmaker have, or have access
+to a computer art program. Both JASC’s Paint Shop Pro and
+ Adobe’s Photoshop
+were tested and will do the job. Any art program that can output an 8-bit BMP
+format file with indexed color should work also.
Terrain maps still have to follow the rules that apply to all Q3A engine
+maps. There’s only so much that you can allow to be seen at one time, or the
+game starts slowing down. The good news is that the engine will only draw the
+terrain triangles that are in the player’s PVS (potential visible set). It
+doesn’t have to draw all the triangles in the terrain entity just because part
+of the entity is in view.
+
At first, most of the usual bag of tricks that mappers use to create vis
+blocking structures in architectural maps don’t seem to apply to terrain. But
+that is not the case. If anything, you NEED to think of terrain in much the same
+way as you think of buildings. You are still dealing with open spaces that could
+be considered corridors and large rooms … even though they look like large
+valleys.
+
In fact, it would be best to plan out the layout of your terrain
+ BEFORE
+creating your height map. If you know you want to block vis, you can design your
+terrain to work with vis blocking techniques and avoid the agony of having to go
+all the way back to the start when you discover that your killer terrain map
+lets you see too much at once.
+
If you want the player, even in spectator mode, to be able to fly everywhere
+and see the whole world laid out below him … an unrestricted vista, so to
+speak, you’re going to be much more limited. Every single triangle in the map
+will essentially be viewable at any moment in time. However, if you’re willing
+to place restrictions on your players - limit how high they can fly or climb,
+you suddenly have more options for blocking player visibility.
+
First, the terrain entity is entirely detail content, so it doesn’t block
+vis. That’s a key part of how this whole process works. Otherwise, vis time
+would be measured in eras (not minutes or hours) and visdata size would be very,
+very large.
+
To block vis in the terrain, start by creating simple
+vis-blocking structures
+out of caulk texture inside the forms of the terrain (they are not part of the
+terrain entity). You can try to match the silhouette of the terrain, but in the
+end, you may only end up complicating the visdata without gaining any real
+benefit.
+
Next, and this is going to sound strange, build thin walls of caulk that
+follow the divide line (where the terrain falls away on both sides) of the
+highest mountains, buttes or hills. Only do this where you know that you will
+not allow the player to move over or see over
that
+part of the terrain (we’ll talk about clipping real soon).
+
+
+
Other Tips:
+
+
+
+
·
Sky Texture in Place of Caulk:
+You sometimes want to apply the sky texture to some of the surfaces of the thin
+walls used as vis blockers. This can remove some HOM effects. The caulk brushes
+that block the vis around the bases in mpterra2 have sky texture painted on the
+surfaces facing the base.
+
+
·
Hint Brushes:
+Use these extremely sparingly and only after trying to solve the problem in
+other ways. Hint brushes can add hours to vis compile times. Even so, they can
+make a difference. One trick you can try is to put a horizontal hint brush at a
+point about midway up the slopes of your terrain. It can add some additional vis
+break points.
+
+
·
Adjusting Terrain:
+Vis times totally depend on the placement of your vis blockers. Vis times are
+not affected by modifying the terrain surfaces (terrain entities are detail
+content, remember?). With that being said, you may want to modify the terrain to
+allow you to more effectively position the vis-blockers.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/.svn/text-base/boxing_in_the_world.html.svn-base b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/.svn/text-base/boxing_in_the_world.html.svn-base
new file mode 100644
index 0000000..24f1eca
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/.svn/text-base/boxing_in_the_world.html.svn-base
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+Boxing in the World
+
+
+
+
+
+
Boxing in the World
+
+
+
+
+
It may not need mentioning here, but … the terrain entity needs to be
+contained inside a sealed world. For the terrain maps in Q3:TA, we built huge
+boxes. Any portion of the box that could be seen while playing the game, or
+flying around in spectator mode was covered in sky texture. Any portion of the
+box that could not be seen was made out of common/caulk. If mountains or canyon
+walls surround your map, plan to bring the caulk portion of the wall up as high
+as you can. This can reduce the number of triangles seen in the map. Generally
+speaking, you will see ALL the sky triangles inside the map at all times.
+
Finally, and this is a part of vis blocking, but it should also be noted
+here. Don’t forget to place large caulk structures that rise up from the
+bottom of the world box to near the ground surfaces of terrain entity. If the
+ground level rises and falls substantially, these can be a part of the vis
+blocking process. Otherwise they serve to reduce the size of the map’s total
+volume (generally speaking … a good thing).
The terrain entity uses its triangle surfaces as clipping planes. No
+additional clipping is required to allow characters to run on the terrain’s
+surface. As the initial terrain maps developed in house, we discovered that to
+control and guide play flow, we needed to clip many of our mountain and canyon
+slopes with vertical walls. Done right (as the slopes start becoming too steep
+to climb), players don’t notice (as much).
+
Next, decide how far up in the sky you are willing to let your player’s
+fly. If the map is entirely open you might want to keep it that way. If you’ve
+placed caulk barriers as described above, then the low point on the ridgeline
+(or lower) will likely be your ceiling height.
+
+
Clipping Tips
+
+
+
+
·
Make sure your “ceiling” clip
+brushes extend all the way up the sky brush.
+
+
·
Keep your clip brushes simple.
+
+
·
Right angles are rarely found in
+nature. Use the clipper tool to take the corners off your vertical clips.
+
+
+
+
+
The alphamap referenced by the alphamap key/value pair is an art file created
+specifically for the map. For non-digital artists, it may be one of the more
+technically and conceptually challenging things that need to be created to make
+the terrain map work.
+
Simply put, the alpha map is the template that the compiler uses to assign
+textures to the terrain surface.
+
To make the alphamap, you must have, or have access to, an art program that
+can save a file as an 8-bit BMP file with indexed color. I’ll discuss other
+file types later on, but the BMP file is probably the simplest solution, both
+technically and conceptually.
+
+
+
Terms
+
+
First, you need to understand a couple vocabulary words … jargon, if you
+will:
+
+
Indexed Color: In essence, each color used in a piece of art is
+remembered by its location on the color table or palette (see below). There are
+256 colors available, numbered from 0 to 255. Each position on the palette has
+its own number. This number has nothing to do with the RGB values of a color in
+that position. If you change the actual color located at a particular location
+on the palette (say from red to blue), all the pixels that were formerly that
+shade of red (if painted using a color with that index number), will change to
+the new color of blue.
+
+
Color Table: This is what Photoshop calls the indexed color layout of 256
+colors. In Paint Shop Pro it’s a palette. This is a pop-up window that shows
+the colors in the palette and their arrangement. For making an alphamap for a
+terrain map, the colors you choose are not important, but their position on the
+palette is.
+
+
Palette: This is what Paint Shop Pro calls a Color Table.
+
+
+
Making the Palette
+
+
The best way to start is to make a set of colors to use when painting
+alphamaps. If you want, you can do this once and save it out. In PSP edit the
+palette (in Photoshop, open the Color Table). Make sure the colors are sorted by
+index number (there may be a pull down menu that allows this). In PSP, the
+colors are indexed from the upper left (color 0 in the upper leftmost position
+and increasing in value to the right). In Photoshop, the positions are reversed.
+The color with value 0 is in the lower rightmost position and the index numbers
+increase to the right.
+
Because there is a direct one-to-one relationship between colors in the
+palette and individual shaders that make of the metashader, you should select
+clearly distinct colors to represent each shader. You should have one color for
+each layer you intend to include in the map (see keys above), which means one
+color to represent each root shader. You may find it convenient to create more,
+so they are available for later use (if you save the palette).
+
This method worked for me to make a 16-color palette in Paint Shop Pro.
+First, I reduced my palette size to 16 colors. I clicked on each palette
+position and created a color for it (don’t use black). Then, I increased my
+palette size back up to 256 colors, filling the rest with black. In Photoshop,
+it’s easier to select all the colors you don’t intend to use and make them
+black. Then, I save the palette out as a file for later use.
+
Another thing you might try is to make a grayscale palette, then use only the
+first few positions for your color and leave the rest for grayscale (this allows
+you to import bmp height maps and use them as guidelines).
+
+
+
Alphamap File Data
+
+
File type: The alphamap is a BMP format file or a TGA file (see other
+file formats below). With BMP format, each color in your palette corresponds
+directly to a root shader used to create the smooth texture blends on the
+terrain.
+
+
File size: The size of the alphamap should be one-to-one with the number
+of vertexes in the map. If you have 64 divisions x 32 divisions in your terrain
+mesh (65x33 vertexes), you should use a 65 by 33 alphamap. You can use an
+alphamap with a size that is not a one-to-one map with the number of map
+vertexes, but you can then expect a less precise interpretation of your texture
+assignments.
+
+
Colors linked to Shaders: If an 8-bit texture is used (BMP), q3map links
+a color’s position on the palette to an identifying number in the name of a
+shader. The color in position 0 would reference a root shader named <metashadername>_0.
+The color in position 1 would reference a root shader named <metashadername>_1.
+<metashadername> refers to the value of the Shader key (see Key: Shader
+below). In theory, you could probably have 256 different root shaders assigned
+to the terrain entity. In practice, you’d probably want to bite your arm off
+at the elbow before doing something as complicated as that.
+
+
Other File Formats
+
+
It is possible to use a TGA file (a RGB color format) for an
+alphamap. TGA
+files are handled differently than indexed color files like BMP. Instead of
+looking for a position on the palette, q3map interprets the RGB value of actual
+color. With a 32-bit TGA file, only the color values in the red channel are
+used. The program assumes that a gray scale of equal values is being used. The
+program divides the colors by the number of levels into equal-sized ranges. When
+assigning textures, q3map looks at what range the color falls in and chooses the
+appropriate shader to place or blend.
+
+
Controlling Texture Blends
+
+
Each triangle on the mesh can only have two root shaders blending across it.
+Another way to say this is that there should be only two different colors on the
+three vertexes that form any given triangle in the mesh. Any more, and a sharp,
+unblended edge appears on the terrain surface. This can take some trial and
+error to correct. A bsp -switch command called -showseams can help the mapmaker
+find these errors. Create a new bsp command in your project file that includes
+this option. We recommend doing it with a novis only operation.
+
+
+
+
+
Figure 3
+
In figure 3, the blue and white image on the left is a scaled up (4X) version
+of the alphamap used on Distant Screams. It shows three different root shaders
+in use. Compare that to the gray scale height map on the right and you can see
+how the artist chose to assign textures to the various heights and depths of the
+map. As long as the guidelines for texture placement are followed, a mapmaker
+should be able to work with more different root shaders than shown here.
+
+
Alphamap Creation Tips:
+
+
+
+
·
The alphamaps for the team arena maps
+are included with this document, both as reference and as files that you can
+modify to work with your own maps. You may want to compare the alphamaps against
+the heightmaps for the same maps, just to see how id resolved mapping issues.
+
+
·
You can create a quick (though not
+necessarily good) alphamap by saving your height map as a new file. Then use the
+“posterize” filter that can be found in some art tools. Reduce the number of
+colors in the art to equal the layers (number of unique root shaders) in the
+terrain.
+
+
·
If you are creating a new alphamap
+from scratch, use colors that are easily distinguished from each other.
+
+
·
If you are making an alphamap for a
+team style map where both sides of the map are identical (mirrored or rotated),
+you only need to design the map for one side. Copy and position it as described
+above for the heightmap.
+
+
·
The id maps used simple color schemes
+that were homogenous throughout the maps. That is not the only way of doing
+things. It would be quite reasonable to use many more terrain textures
+(particularly if you weren’t going to build complicated, multi-texture
+architecture on top of them). Consider a map where one part of the terrain used
+red-themed textures and the other side blue themed textures. Have them blend
+into a few simple neutral colors near the map center.
+
+
·
Try doing terrain style texture
+mapping on non-terrain geometry. Results will definitely vary, but some could be
+interesting.
+
+
+
+
Samples: The last height map and the alphamap used to create each of the
+terrain maps in Team Arena is included in the Mapping Support folder. Note that
+the designers made vertex manipulations to the final terrain meshes that are not
+reflected in these height maps. Also, the alphamaps are in PCX format, not BMP
+format.
Although it’s not necessarily the only way to develop a piece of terrain,
+thinking of it and creating it as “mesh” of triangular brushes may be the
+easiest way to work initially. The terrain sections for Quake III: Team Arena
+were built in this manner, though each designer went about it in slightly
+different ways.
+
Our primary tool was a plugin for Q3Radiant , created by David Hyde, called
+GenSurf. The tool was originally created for Quake 2 (and may have been around
+longer) and has been adapted for use with many of the game engines using Quake,
+Quake2 and Quake3 technology. The basic concept behind GenSurf is that it can
+create and export a group of brushes (or curve patches) to Q3Radiant that have
+the look of “natural” terrain about them. Within the plug-in, the mapmaker
+has control over the horizontal dimensions of the terrain entity, the steepness
+of the slopes it creates, and the number of columns and rows of triangles that
+it subdivides into.
+
The terrain can be generated from within the tool by using simple waveforms,
+more complex mathematical expressions, fractal calculations, or height maps. The
+last item, height maps, is in our opinion, the route to take for creating
+complex, visually interesting terrain layouts. A height map is a piece of art
+(we rendered them in grayscale) that GenSurf uses as a template for establishing
+the height of vertexes (the points where the corners of the terrain triangles
+meet). GenSurf interprets the color of the pixel (or more correctly the
+numerical color value of the pixel) that corresponds to the location of the
+vertex. Generally, the darker the gray value, the lower in height the vertex
+(256 unique height values corresponding to 256 pixel colors). GenSurf then uses
+the vertexes to define the extents of triangles and suddenly, one has a terrain
+surface. Of course, there are a few details of construction between start and
+finish …
Once you’ve created the func_group that will become the terrain entity, you
+need to add the various keys and key values that make it a terrain entity.
+
+
+A word to the wise: WRITE YOUR KEYS AND VALUES ON SOMETHING YOU CAN
+EASILY REFER TO DURING DEVELOPMENT!! During the creation, testing and tweaking
+of the heightmap, you will have to reenter these key/value pairs for the terrain
+entity every time you recreate it. One thing that can make things easier is
+before replacing the terrain entity with a new mesh, open the entity window and
+click on the most complicated of the key/value pairs (usually the alphamap).
+When the new terrain func_group is in place, click on the value line and hit
+return. That’s one less thing to retype.
+
+
Key: Alphamap
+
+
Value:
The value should be the
+pathname to the art file use to assign textures to the terrain. Example:
+maps/alpha/pj_terra1.bmp. The pathname begins in the game (baseq3 or missionpack)
+directory, which includes the name of the art file.
+
The q3map compiler applies and blends the textures
+(shaders) on the terrain
+entity using a “metashader” (see Texturing the Terrain below) that
+references the art file named by the alphamap value. See the Creating the
+Alphamap section below for details.
+
+
Key: Layers
+
+
Value:
A positive integer, equal to
+the number of unique or root textures to be blended on the map. Each color on
+the alphamap’s palette corresponds to a “layer.” If you plan to blend 4
+textures, you need a layer value of 4.
+
+
Key: Shader
+
+
Value:
A pathname, beginning in the
+ missionpack/scripts directory, which includes the name of the filename and the
+name of the metashader. Example: The shader value for mpterra2 is “terrain/mpterra2”.
+“terrain” is the name of the script and mpterra2 is the name of the
+metashader used to apply texture to this terrain.
+
+
Key: Terrain
+
+
Value:
Set this to 1 to indicate that
+the func_group is a terrain entity. It’s essentially a yes/no flag.
+
+
Key: Min
+
+
Value:
Map coordinates of the minimum
+XY extents (lowest left extent) of a component piece of a multi-part terrain
+entity. This is optional, only used if you are texturing a subset of the total
+terrain area.
+
The Min and Max extents (both must be in the entity) establish where a
+subsection of terrain fits into the overall terrain map. It lets q3map assign a
+subset of the alphamap to the entity, instead of referencing the entire alphamap.
+It could also be used on a separate terrain entity to use the same alphamap, but
+reference a different shader.
+
+
Key: Max
+
+
Value:
Map coordinates of the maximum
+XY extents (uppermost right extent) of a component piece of a multi-part terrain
+entity. This is optional, only used if you are texturing a subset of the total
+terrain area.
+
The Min and Max extents (both must be in the entity) establish where a
+subsection of terrain fits into the overall terrain map. It lets q3map assign a
+subset of the alphamap to the entity, instead of referencing the entire alphamap.
+It could also be used on a separate terrain entity to use the same alphamap, but
+reference a different shader.
: a shader that is part of
+a family of related shaders used to texture a terrain entity. It represents a
+terrain texture in its unblended state. The naming convention for a root shader
+is <metashadername>_#.
+
+
Blend Shader: a shader that is part of a family of related shaders used
+to texture a terrain entity. It represents a terrain texture in its blended
+state, two textures that crossfade across each other. The naming convention for
+a blend shader is <metashadername>_#to#.
+
+
Metashader: the identifying name of a group of related shaders used to
+texture a terrain entity. By way of example, the metashader name used to texture
+mpterra2 was … mpterra2. Its root shaders had names like mpterra2_0,
+mpterra2_1, and mpterra2_2. Its blend shaders were named mpterra2_0to1,
+mpterra2_1to2, and mpterra2_0to2.
This is not intended to be a tutorial on using GenSurf, but it will include
+some pointers on getting the most out of the tool. You can download the
+standalone tool and find tutorials for GenSurf at this site
+
This page, in particular, contains tips for using GenSurf, most of which to
+apply to Q3A terrain creation.
+
When starting the GenSurf plug-in: You will probably want to “Select Ground
+Surface” as the option for making your terrain surface.
The terrain maps in Quake III: Team Arena began as grayscale bitmap art files
+imported into David Hyde’s “GenSurf” tool, a Q3Radiant plug-in. As
+mentioned before, the height map is a template that the utility uses to define
+the vertex heights of the triangles forming the terrain surface. We used Adobe
+Photoshop and JASC’s Paint Shop Pro to create and adjust our height maps …
+but any art program that can output a .bmp format file can be used to create the
+height map.
+
+
+
+
figure 1.
+
By way of example, the piece of artwork in figure 1 is a greatly scaled up
+(4X) version of the height map used to create the initial terrain geometry for
+mpterra2. The very dark, horizontal area near the center is the big “lake”
+near the center of the map. The dark curves to the upper right and lower left
+are the “fjord” water areas. The dark areas in the upper left and lower
+right are the locations of the bases. The white and very light gray areas
+represent the peaks of hills and mountains.
+
The key to understanding how the height map works is that the shades of gray
+in the art (call them “color values”) represent the height of mesh vertexes
+(triangle corners) and not the triangle quads (squares created by two
+triangles). When you work on a piece of art where each individual pixel
+corresponds to a vertex, it is easy to imagine the pixels (usually large square
+blocks) as squares of terrain. But that’s not how it works.
+
Start by giving some thought to the eventual size and proportions of the
+final terrain area in your map. How many rows and columns of triangles do you
+want in the map? The finer you subdivide the map (making more rows and columns),
+the more triangles will appear in any given view, but the terrain can be made
+less blocky by including more.
+
GenSurf can generate a terrain mesh of up to 64 triangles on a side (of the X
+and Y dimensions of the entire mesh). If you don’t decimate the GenSurf output
+(an option that optimizes and reduces the number of triangles used to create the
+mesh … and we really recommend that you don’t), it generates a mesh of
+triangles in arranged in quads in neat rows and columns. By way of reference,
+mpterra2 (the largest Team Arena map) is “only” 48x64 columns and rows of
+triangles. Since Q3Radiant and q3map tend to like things that end up in neat
+powers of 2 or units of 64 subdivisions, consider having your map extents (lower
+left and upper right map corners) fall onto neat units, power of 2 units. In
+mpterra2, the extents were set up to make the mesh triangles have sides of 256
+units.
+
+
+
+
Figure 2.
+
Figure 2 shows an example of a top view of a terrain mesh that is 8 x 8 rows
+and colums of triangles (on a side).
+
Just as you would plan out a game map, give thought to the layout and flow of
+your terrain map. Will it be all-open in one view? Can you use natural terrain
+features to block vis? How complicated will your buildings (if any) be? Do you
+want to include trees, water, weather effects or other items that could add to
+the visual cost of your map?
+
Begin the creation of your height map by making a new grayscale file. If your
+program doesn’t allow you to easily modify a .bmp format file, work in another
+format and then convert it when you save. You can make the dimensions of your
+height map art whatever you want. The extents you set in GenSurf for the map
+dimensions are what determine the final size of the terrain piece. Some may find
+it easier to work with a large file initially, using their favorite painting
+tools to lay in the shades of gray.
+
However, when you get down to making final and precise changes in your height
+map you should (and this is STRONGLY recommended), change the size of the art
+file such that the pixel dimensions of the map are 1 pixel larger than the
+number of divisions (rows and columns) in the terrain mesh you want to create.
+If you are making a 64 x 64 division map, then you want to create a 65 x 65
+pixel height map.
+
If there is not a one-to-one match between the number of vertexes in the mesh
+(one more than the number of divisions) and the number of pixels in the height
+map, then GenSurf interpolates the number values (0 to 255 range) of the pixels
+to get an averaged value instead of an exact value for the height of the vertex
+at that point.
+
When you save out the height map art file, you must save it in 8-bit .BMP
+format. Currently, this is the only the file format that GenSurf recognizes.
+
+
Tips and things to consider for making Height Maps
+
+
+
+
·
Read through the section on blocking
+vis later in the document. Plan your vis blocking terrain structures in advance
+instead of having to start over when you discover that too much of your world is
+in view.
+
+
·
Consider what type of geometry will
+form the edges of your map. The terrain maps in Q3:TA resolve the issue by
+creating canyon-like settings … valleys bordered by high canyon or mountain
+walls.
+
+
·
Start by filling your map with a
+neutral gray (value 127 or 128). Paint the high areas lighter and the low areas
+darker.
+
+
·
Keep your terrain shapes simple when
+you start. You can add greater complexity as your map develops.
+
+
·
You will probably want to keep the “playable”
+area of your map within a fairly close or “narrow” range of gray values
+close to the middle range of values. This allows you to use very dark shades of
+gray to create deep chasms and very light shades of gray to create high
+mountains, canyon walls or visual barriers.
+
+
·
Extreme jumps between the gray values
+in adjacent areas means steep slopes.
+
+
·
Avoid making vertical or near vertical
+terrain surfaces … unless you don’t mind the resulting textured surface
+looking like barcode. Q3Map planar projects the textures onto the terrain entity’s
+surface (Normal brushes are box mapped). The pixels will stretch and stretch to
+fill the space. The farther the surface is from horizontal, the greater the
+stretching.
+
+
·
Use the roughness feature of GenSurf
+to add a little, um … roughness to your map … so flat areas aren’t
+completely flat. If you are using a 1 to 1 scale height map, adding “noise”
+to the file will also accomplish this.
+
+
·
If you want an area, such as a path,
+to be flat, you need to make the gray value affecting two adjacent vertexes the
+same value.
+
+
·
You can create gentle slopes by
+changing the gray values between adjacent areas by very small amounts.
+
+
·
Slopes greater than 45 degrees are
+close to becoming unplayable barriers.
+
+
+
+
If you are building a symmetrical team style map, only create one side of the
+terrain. Create a new piece of art that has the dimensions of the final piece.
+Paste the map half into the new file and move it into position. If the map will
+have an even number of vertexes, paste the map again and then rotate or mirror
+(as you choose) the selection and move it into position. If the number of
+vertexes is odd, after you paste the first half of the map, select all but the
+row or column of pixels along which the two halves of the map will face and copy
+it. Paste it, rotate or mirror it, then position it. Now, select and copy half
+the row or column of pixels you didn’t copy in the last operation. Paste it,
+transform it as you did in the last operation, and then position it so that it
+is in the same row or column, but on the opposite side of the piece you copied.
+
When you make significant changes to a height map, consider saving it as
+version rather than over-writing the older file. Always nice to have a back up
+when you realize that you’ve messed up more than you’ve fixed.
Creating workable terrain style maps for the Q3A engine takes some
+reorganizing of thought, but in many ways is not substantially different from
+making a halls-and-rooms type of map. The designer still has to be concerned
+about how much can be seen at one time and give thought to map flow and play.
+The rules and restrictions that guide conventional map design are still there
+… it just occurs on a much grander scale. You still have to think about poly
+counts, that hasn’t changed; but generally speaking, the polys that you will
+use to make your game terrain are VERY large and less are likely to be seen all
+at once during a game.
+
+The “terrain” style maps in Quake III: Team Arena do not represent any
+changes to the Quake 3 Engine. The power to make them work has always been there,
+unrealized and untapped. What has changed is the way map files are created and
+processed. These construction techniques rely on changes in the Q3Radiant editor
+and the q3map program that processes the map files into game files.
+
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/.svn/text-base/key_changes.html.svn-base b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/.svn/text-base/key_changes.html.svn-base
new file mode 100644
index 0000000..bcc92b6
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/.svn/text-base/key_changes.html.svn-base
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+Key changes that have been made include
+
+
+
+
+
+
Key changes that have been made include:
+
+
+
+
+
+
+
+
+
+
·
A variant of the func_group entity
+ has been added to the game. When a func_group of brushes (only) is given a
+ terrain key and a numerical value (an ID number for that terrain) and several
+ other key attributes, it becomes a terrain entity and is treated differently
+ than other brushes during the compile.
+
+
·
The map area has been expanded to
+ 128,000 units in all extents (256,000 units on any edge of the map volume).
+ While this does not mean that a map that large could actually run on current
+ game hardware, it does give the designer room to explore what the actual
+ limits may be. As a point of reference, mpterra2.bsp is roughly 12K x 16K x 3K
+ units in size … the largest map in the game by far.
+
+
·
A terrain texture mapping system
+ plots textures across the terrain entity using a specially created .pcx or .tga
+ art file as a map for planar projecting and blending shaders on terrain
+ surfaces.
+
+
·
A “meta-shader” is used to
+ organize and calculate blends between the shaders that are mapped onto the
+ terrain.
+
+
·
Textures designed for use under
+ vertex lighting can be substituted at map load time for more complex shader-manipulated
+ textures that may not look correct in a vertex light only situation.
+
+
+
+
Terrain maps also require some rethinking about the way you light maps.
+
+
Vertex Only
+
+
If you are making a large terrain map, you should plan on making your terrain
+textures be lit by vertex lighting only. Lightmaps can quickly become far too
+large for the game to handle.
+
Make sure your large terrain textures contain the following parameters:
Q3map_novertexshadows //this is what keeps those caulk vis blockers from
+causing ugly shadows to form on your terrain.
+
If you are using q3map_sun in your sky …
+
+
Q3map_forcesunlight //this makes the light emitted by a q3map_sun
+parameter affect the vertex lit surface.
+
+
Light Sources
+
+
For outdoor maps, the obvious source of lighting ought to be the sky. The
+skies in the mpterra maps began with skies used in more conventional Team Arena
+maps, but were modified to better suit the needs of the terrain worlds.
+
+
+
+
·
Slow Down Those Clouds.
+ One thing to consider is slowing down the rate of cloud movement. What looks
+ OK in smaller maps looks wrong in vast panoramas.
+
+
·
Strong Sunlight is
+ Good. For team maps,
+ you want to try and keep the light relatively the same in both base areas, so
+ if you have mountains or large base structures, having the light come in at a
+ nearly vertical angle is good, but less dramatic.
+
+
+
·
Ambient Light is Not
+ So Bad. Since the
+ beginning of Q3A map development we’ve said things like “Ambient Lighting
+ is bad”. Well, the problems caused by ambient lighting are still there
+ (flattening of shadows and colors), but with the distance of the play areas
+ from the sky surface (in some maps), adding an ambient really helps bring up
+ the overall light value in the map. Start low, maybe around an ambient value
+ of 5 and creep upwards until the map looks right. It is VERY IMPORTANT that
+ you give your ambient light a color. If you leave it white, you get ugly pink
+ light instead of white. Even specifying white makes it look wrong. Best
+ suggestion is to sample the sky texture color and translate that into an rgb
+ formula for your ambient. One warning
+ though … if you include “interior spaces” in your maps, the ambient
+ light will affect those areas too. You will not get the deep dark shadows you
+ may want in there.
+
+
+
·
Sky Shader Trick #1: Lose the
+ Backsplash. The attributes of the sky
+ shader can have a significant effect on the amount of time it takes to perform
+ a light compile on a map. You have to think of the sky as a huge area light.
+ However, unlike light emitting textures (like your average light fixture), the
+ sky doesn’t need to be illuminated itself. Therefore, you can eliminate the
+ backsplash light feature which is the default status of the q3map_surfacelight
+ parameter. Your sky shader should have the parameter q3map_backsplash with a
+ value of -1. Removing backsplash light doesn’t affect the appearance of the
+ sky, but does remove a significant amount of compiling overhead when the
+ -light algorithm is used (the normal way you light things).
+
+
·
Sky Shader Trick#2: Big
+ Subdivisions. Q3Map automatically
+ subdivides the sky into triangle quads. The more triangle quads, the more
+ light emitting surfaces you have on your sky (if q3map_surfacelight is used).
+ The light compile calculates for every one of these light emitting surfaces.
+ Increase the size of the subdivision and you get less light emitters and a
+ faster compile.
+
+
·
Sky Shader Trick #3: -V-light.
+ This is a fast lighting algorithm. It’s especially fast for calculating sky
+ lighting. It loses a little precision, but it can greatly speed up the time it
+ takes to light a map. Even if you decide to use a normal light operation for
+ your final map, using -vlight for interim compiles can mean a lot less time
+ spent waiting on the compiler to see your results.
+
+
+
+
+
+
The Light Grid
+
+
This is discussed in detail under terrain-related Worldspawn features. One of
+the things that can add enough memory complexity to a large terrain map, enough
+to make it unplayable (read crash the game), is the light grid. Think of the
+light grid as a map for determining how to light entities in the world. It’s
+what makes player models appear to move in and out of shadows as they move
+through the world. It’s a nice effect, but costly in memory terms. For the
+largest maps in Q3:TA, we “traded down” to a less detailed light grid.
+Increasing the size of grid subdivisions from 32 units to 256 units did this. We
+experimented with smaller and larger grids and settled on 256 x 256 x 256 as the
+best size. Smaller and the grid became large and unwieldy. Larger (especially on
+the z dimension) and not enough light reached some of the entities.
+
The details of this feature are noted below under Terrain-Related WorldSpawn
+Features.
Once the terrain mesh has been generated, it’s very likely that you will
+want to fine-tune the triangles inside the editor. Do this by pulling vertexes
+up and down along the Z axis. Once you start fine-tuning in this manner, the
+height map no longer exactly represents the map.
+
+
WARNING: If you revise and convert the height map, your manipulations
+here are lost.
The key to making this stuff look good is the q3map routine that works with
+alphamap and the metashader (see below) to smoothly blends textures across the
+terrain entity.
+
+
Texturing Overview
+
+
As noted earlier, Q3Map assigns textures, or more correctly, shader
+manipulated textures, to each triangle used to create the terrain map. The
+shaders used are part of a group of shaders called a metashader. The metashader
+is the family name for the shader. Individidual shaders within it are identified
+by a suffix, either an underline character followed by a number, or an underline
+character followed by a string indicating a blend between two other shaders.
+
Within the body of the metashader, there are two types of shaders used. The
+first, is the root shader. A root shader represents a terrain texture in
+its unblended state. The naming convention for a root shader is <metashader>_#.
+The second type is the blended shader. The blended shader creates a
+crossfade between two root shaders across the face of a single geometry
+triangle. The naming convention for a blended shader is <metashader>_#to#.
+The map maker does not need to make a blend between each root shader, but for a
+blend to occur, there must be a blend shader for the two root shaders.
+
Q3map will map a shader (root or blended) once and only once across the face
+of the triangle. The shaders will not tile or repeat across the triangle face.
+
As noted earlier, the textures are planar mapped or projected on the surface
+of terrain texture. The angle of any individual triangle does not affect the
+angle or direction at which the texture lies on the brush surface. The angle,
+however, does affect the apparent stretching of the texture on the surface. The
+steeper the angle of the brush surface, the greater will be the stretch of the
+shader on that surface.
+
Q3map looks at the pixel on the alphamap that corresponds to a given vertex.
+It uses the color of that pixel (or more correctly the identification number of
+the position that color occupies in the palette) to determine which root shader
+will be applied. That root shader is applied to triangles that have one vertex
+located at the given vertex. It then examines the alphamap color of the vertexes
+adjacent to the given vertex. If an adjacent vertex has the same color as the
+given vertex, the root shader is applied to the surface. If an adjacent vertex
+has a different alphamap color, the blended shader that crossfades between the
+two.
+q3map
+-----
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-glview
+ Write a .gl file of the bsp tree for debugging.
+-v
+ Output verbose information.
+-draw
+ Enable realtime debug drawing output.
+-nowater
+ Water, slime and lava brushes are not compiled and won't show up when running the map in Quake.
+-noopt
+ unused.
+-nofill
+ unused.
+-nodetail
+ Detail brushes are not compiled and won't show up when running the map in Quake.
+-fulldetail
+ Detail brushes will be treated as normal brushes.
+-onlyents
+ Only change the entities in a .bsp using a .ent file.
+-onlytextures
+ Only change the textures in a .bsp file.
+-micro
+ unused.
+-nofog
+ Visible surfaces that cross fog boundaries will not be split along the bound.
+ This can cause visually incorrect fog in the map.
+-nosubdivide
+ Visible surfaces are not subdivided as required by shader tesselation.
+ The shader parameter "tesssize" sets the tesselation of a surface.
+-leaktest
+ Only test the map for leaks. If a leak is found the compilation is stopped.
+-verboseentities
+ Output verbose information about entity sub-models.
+-nocurves
+ Curves are not compiled and won't show up when running the map in Quake.
+-notjunc
+ T-junctions are not fixed. This can cause tiny slits where a surface meets halfway another surface.
+-expand
+ Expands all the brush planes and saves a new map out to allow visual inspection of the clipping bevels
+-tmpout
+ Output files to a folder called "tmp".
+-fakemap
+ Write out a fakemap.map This map will contain a worldspawn entity with all the world brushes.
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-custinfoparms
+ Will enable custom surface flags (see below)
+
+q3map -vis
+----------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-fast
+ Only calculate a very loose visiblity list. It doesn't take much time to
+ calculate but a lot more polygons will be drawn by the Q3 engine than necesary.
+-merge
+ Merge bsp leaves before calculating the visibility list. This will speed up
+ the vis calculations but mostly more polygons will be drawn by the Q3 engine
+ than necesary.
+-nopassage
+ Disable the passage visibility algorithm. The passage vis is faster and a bit more
+ tight than the old algorithm.
+-level
+ unused.
+-v
+ Output verbose information.
+-nosort
+ Don't sort the portals on complexity. Sorting mostly speeds up visibility calculations
+ because more complex portals can use information from less complex portals.
+-saveprt
+ Don't delete the .prt file after creating the visibility list.
+-tmpin
+ Input files will be read from a folder called "tmp".
+-tmpout
+ Output files will be written to a folder called "tmp".
+
+
+q3map -light
+------------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area
+ This scales the light intensity of area lights.
+-point
+ This scales the light intensity of point lights.
+-notrace
+ No light tracing is performed. As a result no shadows will be casted.
+-patchshadows
+ Enable patches casting shadows.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-extra
+ Take four samples per lightmap pixel and store the average light value of these
+ four samples for the actual lightmap pixel.
+ This super sampling is used for anti-aliasing.
+-extrawide
+ Just like -extra four samples per lightmap pixel are calculated. However the
+ average of 12 samples is stored per lightmap pixel.
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-border
+ Create a debugging border around the lightmap.
+-v
+ Output verbose information.
+-nosurf
+ unused.
+-dump
+ unused.
+
+
+q3map -vlight
+-------------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area
+ This scales the light intensity of area lights.
+-point
+ This scales the light intensity of point lights.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-nostitching
+ No polygon stitching before lighting.
+-noalphashading
+ Don't use alpha shading at all.
+-nocolorshading
+ Don't use colored alpha shading. The alpha channel will be used as if it were binary.
+ The light goes through or not and does not change color.
+-tracelight
+ Use the "-light" light algorithm for all surface unless a surface
+ uses a shader with the shader option "q3map_vlight".
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-v
+ Output verbose information.
+
+
The q3map options are a subset of the shader instructions that require
+recompiling of the map.
+
q3map_tracelight
+
[NEW] Surfaces using a shader with this option will always be lit with the
+original "-light" light algorithm. Patches will not cast shadows on
+this surface unless the shader option q3map_patchshadows is used.
+
q3map_patchshadows
+
[NEW] When this option is used in conjunction with the original (-light)
+lighting algorithm, surfaces with textures modified by this option will will
+show shadows cast by curve patches (under normal circumstances, curve patches do
+not cast shadows).
+
q3map_vertexshadows
+
[NEW] By default, no shadows are cast on vertex-only lit surfaces (see
+surfaceparm pointlight). Also when running Quake III Arena in vertex lighting
+mode, no shadows are cast upon any surfaces (shadows are part of the light map).
+When using this shader option shadows *will* be cast on the surface when vertex
+lit. However sharp shadow edges won't be seen on the surface because light
+values are only calculated at the vertexes.
+
q3map_novertexshadows
+
[NEW] Shaders used for misc_models and terrain can now use
+q3map_novertexshadows to disable shadows to be cast at the vertex lit surfaces.
+Shadows being cast at small misc_model objects often makes sense. However
+shadows on large vertex lit terrain surfaces often look bad. By default no
+shadows are cast at forced vertex list surfaces ( shaders with "pointlight"
+).
+
q3map_forcesunlight
+
[NEW] No sunlight is cast at vertex lit md3 models and terrain by default.
+Using this option sunlight (overbright bits created by q3map_sun option) will be
+cast on these surfaces.
+
q3map_vertexscale <scale>
+
[NEW] The light value at the vertexes of a surface using a shader with this
+option is multiplied by the scale value. This is a way to lighten or darken a
+vertex light only surface in comparison to other, light-map lit surfaces around
+it.
+
q3map_notjunc
+
[NEW] Surfaces modified by a shader with this option are not used for
+tjunction fixing.
+
q3map_vlight
+
[NEW] Surfaces modified by a shader with this option will always be lit with
+the "-vlight" algorithm when q3map is used with the options "-vlight
+-tracelight".
+
q3map_lightmapsamplesize <S>
+
[NEW] Surfaces using a shader with this shader option will use lightmaps with
+pixel size SxS. This option can be used to produce high resolution shadows on
+certain surfaces or can be used to reduce the size of lightmap data where high
+resolution shadows are not required.
+
q3map_lightimage <image>
+
Image to use for the light color of a surface light instead of the image(s)
+used by the shader. Color is averaged from the texture. Texture must be the same
+size as the base image map.
+
q3map_surfacelight <value>
+
Sets the amount of light this surface emits.
+
q3map_lightsubdivide <value>
+
A surface light is subdivided into a bunch of point lights for the actual
+lighting of the world. This parameter controls the space between those point
+lights. Default value is 120.
+
q3map_backsplash <percent> <distance>
+
A surface light is also lit by itself using back splash point lights with a
+lower intensity. The <percent> parameter specifies the intensity
+percentage they use from the q3map_surfacelight <value> parameter. The
+<distance> parameter controls the distance of these back splash lights
+from the surface. You can set the <percent> to zero or a negative value to
+disable the back splash lights.
+
q3map_globaltexture
+
When this option is set the texture is not aligned to the world.
+
q3map_backshader <shader>
+
<shader> is the path/name of the shader or texture to be used at the
+back side of the surface.
+
q3map_flare <shader>
+
Creates a flare using the specified <shader> at the center of the
+surface using a shader with this option.
+
light <value>
+
Old style flare specification always using the shader "flareshader".
+The <value> parameter is unused.
Color will be normalized, so it doesn't matter what range you use. The
+intensity falls off with angle but not distance. A value of 100 is a fairly
+bright sun.
+
degree of 0 = from the east, 90 = north, etc.
+
elevation of 0 = sunrise/set, 90 = noon
+
surfaceparm pointlight
+
Surfaces using a shader with this parameter will always be vertex lit
+
This option can be used to reduce the lightmap data. Often used on surfaces
+
that don't need any shadows.
+
Surfaceparm dust
+
If a player lands (jumps onto) on a surfaces using a shader with this
+parameter, a put of dust will appear at the player’s feet. Note that the
+worldspawn entity of that map must have an enableDust key set to a value of 1.
+
+
+
Custom surfaceparms
+
+
With the new q3map tool you can add custom surface parameters for mods
+without the need to recompile the q3map tool. These custom surfaceparms are
+stored in a file called ‘custinfoparms.txt’ in the folder scripts/. An
+example of this file with the new surfaceparm treacle and surfaceparm grass is
+shown below.
NOTE: For linux users, when using the -custinfoparms parameter q3map
+first looks in your homedir, and only if it doesn't find a custinfoparms.txt
+there, it uses the one stored in the
+
quake3 install dir (usually /usr/local/games).
+
+
+
Content Flags
+
+
Contents flags are flags similar to CONTENTS_FOG in the original Q3A. These
+flags define the contents of volumes inside the game (for instance lava, fog,
+water, etc.).
+
If you look in the source file game/surfaceflags.h, it has defines for all
+contents flags. The define is split into a name and a hexadecimal value, for
+instance CONTENTS_PLAYERCLIP 0x10000. These hexadecimal values are powers of 2
+and can be ored together (binary) to form a bit mask. Up to 32 contents flags
+can be ored together this way.
+
+
Example: creating a volume with treacle.
+
The following outlines how a custom contents flag can be added and used in a
+mod. First open the ‘custinfoparms.txt’ file and add ‘treacle 0x4000’
+to the Custom Contentsflags section as shown in the example file above (0x4000
+is one of the unused values available for custom use). Next write a shader
+script which uses ‘surfaceparm treacle’. Apply this new shader to all sides
+of a brush in a test map. When you compile the map, add the -custinfoparms
+parameter to the command line following q3map.
+
Next, add CONTENTS_TREACLE 0x4000 to the source file game/surfaceflags.h in
+your mod. Now you can call the point contents function. If the point is inside
+the brush with the shader using the ‘surfaceparm treacle’ then the point
+contents call will return a bit mask with CONTENTS_TREACLE set. This can for
+instance be used to slow down player movement when a player is inside such a
+brush.
+
+
+
Surface Flags
+
+
The surface flags are texture properties that often affect entities in
+contact with surfaces using such flags. The ‘surfaceparm metalsteps’
+parameter from Q3A is a good example.
+
If you look in the source file game/surfaceflags.h, it has defines for all
+surface flags. The define is split into a name and a hexadecimal value, for
+instance SURF_NODAMAGE 0x1. These hexadecimal values are powers of 2 and can be
+ored together (binary) to form a bit mask. Up to 32 surface flags can be ored
+together this way.
+
+
Example: Making ‘footsteps on grass’ sounds
+
The following outlines how a custom surface flag can be added and used in a
+mod. First open up the ‘custinfoparms.txt’ file and add 'grass 0x80000' to
+the Custom Surfaceflags section as shown in the example file above (0x80000 is
+the first available unused value in surfaceflags.h for surface flags). Next
+write a shader script which uses a grass image and has 'surfaceparm grass’.
+Create a test map with the grass shader covering the ground surface. When you
+compile the map, add the -custinfoparms parameter to the command line following
+q3map.
+
Next, add SURF_GRASS 0x80000 to the source file game/surfaceflags.h in your
+mod. Now you'll be able to execute a trace and the trace information will be
+returned in the trace_t structure. If the trace hits a surface with the grass
+surfaceparm then the SURF_GRASS flag will be set in trace_t->surfaceFlags.
+Such a trace can be used to trigger playing a sound of a person stepping on
+grass. For a reference example, see the existing metal steps in the game code.
There are even some editors for other (non-fps) games that can be used to
+manipulate a surface in 3D and then output a .bmp format file. It is worth
+noting that we found it particularly challenging to use them … possibly more
+challenging than the benefits of working in 3D.
+
+
SC3K Map Editor
+
+
The first of these programs was a terrain editor for SimCity3000 called the
+SC3K Map Editor from Tenermerx. It is a free download available here: sc3maped
+
+
Loathing
+
+
The other editor we tried was the “Loathing” terrain editor that comes
+with Bungie’s Myth II game. If you’ve a copy of Myth II, this is something
+you could play around with. Both of these programs could output a .bmp format
+file. If you’ve used it to make some Myth II maps you may have some idea of
+how it works already. It is my opinion that if you use an editor for either of
+these two games to create your height map, you may still want to or need to
+manipulate it in an art program. If you can visualize the relationship between
+shades of gray and relative heights and slopes, the art program is probably the
+easier way to go.
+
+
Pencils, paintbrushes and a scanner
+
+
You can also make your heightmap by painting it by traditional methods and
+then scanning in the file and saving it as a .bmp. Though at some point you’ll
+probably want to switch over to digital manipulation.
Select From Bitmap under Waveform. Of course, you may want to
+ play around with some of the other wave forms. But bitmaps give you the
+ greatest degree of control.
+
+
·
Orientation: as appropriate
+
+
·
If you don’t want GenSurf to add any “noise” or
+ randomization to the height of the mesh, set the Roughness to zero. The
+ preview window gives you a good representation of what roughness does to
+ your surface. The random seed changes the distribution of the noise. Adjust
+ both fields accordingly.
+
+
+
+
The Extents TAB:
+
Extents: The extents of a map are the points on a map that define its
+lowermost t and leftmost corner and its uppermost and rightmost corner. They are
+given in terms of X, Y coordinates.
+
+
+
+
·
Under Extents, you should chose number values that are even
+ multiples of your number of Divisions so that the grid rectangles are all
+ the same size (this produces better texturing results). It also makes extra
+ work for the compiler. Furthermore, use the Extents to position the terrain
+ entity on the map (XY only). You will want to make sure that the terrain
+ locates exactly where you want it each time you revise it. Repositioning a
+ terrain file can be time consuming.
+
+
·
Set your X and Y divisions to equal the number of rows and
+ columns of triangles you want. You may want to strongly consider playing
+ with the numbers so that your triangle sides end up be large powers of two
+ (64, 128, 256 units etc.).
+
+
·
Do not check Use Bezier Patches.
+
+
·
Do not Decimate (keep it set to 0%). The process that applies
+ textures to the surfaces and blends textures between vertexes works best if
+ the size of the triangles is consistent and constant.
+
+
+
+
The Bitmap TAB:
+
+
+
+
·
Filename should point to the .bmp file you are using as a height
+ map. Reload will bring in any changes you have made to the art file without
+ having to restart the program.
+
+
·
GenSurf assigns an integer value to each of 256 shades of gray.
+ The value is based on the position of the color in the palette. In a grayscale
+ palette, the values typically range from 0 (black) to 255 (white). Map Color 0
+ corresponds (usually) to the lowest point on the height map and Map Color 255
+ to the highest. If you set Map Color 0 to 0 and Map Color 255 to 2048, each
+ increase in color value adds 8 units to the height of the vertex. When you
+ increase the difference between to the two values, the height changes are
+ steeper. Decrease the difference and the height changes are more global. You
+ can control the “Z” location at which the terrain draws by adding any
+ extra height above (or below) zero to the height values for both numbers.
+
+
+
+
The Fix Points TAB:
+
+
The general recommendation for this TAB is to leave it alone. You should
+either modify the height map or directly manipulate vertexes inside the
+Q3Radiant editor.
+
+
Texture TAB:
+
+
+
+
·
Set the main texture to common/terrain. The “Steep” angle is
+ irrelevant for terrain texture mapping.
+
+
·
Make sure that the Use detail brushes setting is checked.
+
+
+
Once you’ve tweaked all your settings, do a Save as. If you make changes to
+the settings, consider saving again as a new file. It’s nice to have a back up
+if you screw things up.
+
+
GenSurf Tips
+
+
+
+
·
Setting extents to correspond exactly with the desired map
+ location is important. You want to be able to drop revised terrain into a map
+ without a lot of repositioning.
+
The process of building a piece of terrain focuses on a new thing called the
+“Terrain Entity.” Technically speaking, the terrain in Team Arena is nothing
+more than a func_group entity (brushes only) with a number of key/value pair
+combinations that are unique to it. These key/value pairs define it as terrain (terrain), establish the piece of art that will be used to locate textures on it
+the terrain (alphamap), define the group of shaders used to blend textures
+across its surface (shader), and tell how many different unique shaders will be
+used. The bsp-making utility, Q3Map compiles and textures the terrain entity
+based on the parameters specified in those key/value pairs.
+
It is possible to have multiple terrain entities in a map (see Terrain
+Entities below). Once you learn the method and the techniques, terrain is
+relatively easy to create. One warning though … easy to create does not mean
+easy to compile. Large maps take a much longer time to compile, and huge maps
+are likely to take what seems like forever. However, there are some
+construction, lighting, and shader options that can significantly cut down on
+compile time - as will be noted later.
GenSurf outputs its terrain as a func_group entity. If you create a terrain
+mesh by any other means, you need to group it as a func_group entity.
+
Make certain that all the non-visible surfaces of the func_group brushes are
+textured with common/caulk.
+
Texture the visible surfaces with common/terrain or common/terrain2.
+
Select the func_group and turn it to detail content (CTRL M) or use the
+Selection menu.
+
It is possible to map terrain onto something that is not a “terrain”
+mesh. Keep in mind that textures will be planar projected onto all surfaces in
+the terrain entity and that brush vertexes will be used to determine where
+blends start and end.
A number of worldspawn key/value pairs were created to deal with issues
+arising out of terrain creation.
+
+
Cold Breath and Hot Dust
+
+
+The following two features need not be directly related to terrain, although
+they first appear in the Q3:TA maps. Each key/value pair needs to be the
+worldspawn for that particular feature to work.
+
+
+Key/value pairs:
+
+Key:
+ enableBreath
+
+
+Value:
+ 1
+
+When written into the worldspawn, this enables the appearance of “frosty
+breath” in the air in front of players. The frosty break does not appear in a
+player’s first person view, but will be seen in front of other players and in
+3rd person view.
+
+
+Key/value pair:
+
+Key:
+ enableDust
+
+
+Value:
+ 1
+
+When written into the worldspawn, this enables the appearance of dust puffs
+at the player’s feet when he lands on or run on a “dusty” surface. Adding
+the surface parameter “surfaceparm dust” to the shader for that surface
+creates a dusty surface. The common/terrain2 texture already contains the
+enableDust parameter.
+
+
Texture Remapping: Shaders for vertex light mode in Q3A
+
+
+One thing we quickly discovered when mapping the metatexture onto the terrain
+world was that it didn’t work if a player chose to run in the game’s vertex
+lighting only mode. That mode compresses shaders into a single pass. Usually,
+the engine makes a reasonable choice for which pass is mapped, but with the
+metashaders, that wasn’t the case. The solution: allow the mapper to choose a
+substitute texture that only is used in the game’s vertex lighting mode.
+
+
+For each shader that will be remapped a key/value pair must be entered in the
+map’s worldspawn.
+
+
+
+Key: vertexremapshader
+
+
+Value:
+
+ normal_shader;vertexlighting_shader
+
+
+The normal_shader is the shader normally used on the terrain. The
+vertexlighting_shader is the shader to be used when people run the map in Q3 in
+vertex lit mode. The normal_shader and the vertexlighting_shader are seperated
+by a semi-colon ;
+
+
+As many shaders can be remapped as needed by using the key. However, if more
+than one shader is remapped in a map, each one must have a unique identifier …
+either a number or a letter after the Key word, as shown by “vertexremapshaderX”,
+where X is a number or any character set. Examples, vertexremapshader01,
+vertexremapshader02, vertexremapshaderA, vertexremapshaderB,
+vertexremapshadermpterra2_1, etc.
+
+
+In mpterra2, the key/value pair for one of the replaced shaders looked like
+this:
+
+The Light Grid Size (as noted earlier) is the map that the Q3A engine uses to
+light entities. It’s what gives the illusion of players moving in and out of
+shadowed areas on the game levels. We decided, that for large terrain maps, it
+should not be as detailed (and therefore nowhere near as large) as we had done
+for smaller, interior maps. After experimenting with placing controls for the
+grid size on the bsp command line, we finally settled on putting the command
+information in the map’s world spawn. In that way, the grid size could be
+easily tailored to the individual map.
+
+
+
+
+
+Key/value pair:
+
+
+Key:
+
+ gridsize
+
+
+
+Value:
+
+ X Y Z
+
+
+
+
+
+
+
+
+Note that the values are the dimensions of those coordinates. It’s best to
+keep them to power of 2 values. The default value for the gridsize (if left
+unchanged) is 64 64 128. Setting higher x y and z values reduces the size of the
+light grid data in both the .bsp file and in the Q3A game, but it also creates
+less accurate dynamic model lighting.
+
+
+Errors
+
+
+Definitely set the x y and z values higher if you get:
In Q3:TA, there are two “terrain” textures in the common shader script.
+One handles all the uses of terrain where the designer does not want “dust”
+to rise up as the player jumps onto the terrain (common/terrain). The second
+(common/terrain2) has an enable_dust surface parameter. The terrain texture
+should be applied to all visible (in game) surfaces of the terrain entity.
+
Q3map looks for the word “terrain” in the name of the shader when
+texturing terrain entities. If a shader is used without the word
+"terrain" in it, and it’s not marked as nodraw, q3map will still do
+a planar projection, but using that texture. It will not blend between textures,
+however. This can be used to create hard edge texture transitions, or in cases
+where you want to apply textures manually, and aren’t concerned about
+blending.
+
If the terrain texture is applied to a non-terrain entity brush, the surface
+will not draw. The projected terrain surface textures only work on surfaces that
+are a part of entities with the proper terrain entity keys and values.
The shader is the group or family of related shaders used to texture a
+terrain entity. The shader key/value pair in the entity identifies the
+metashader to be used. The suffix (either “_#” for a root shader or “#to#”
+for a blended shader.
+
For each root shader that you want to blend, you need a blend shader. Note
+that you only need to make the blend once. If you have mpterra2_0to2, you don’t
+need mpterra2_2to0.
+
+
+
Example Terrain Shader
+
+
This was the shader used to map textures on mpterra2 (hence the metashader
+name)
+
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image3.gif b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image3.gif
new file mode 100644
index 0000000..fdb98d2
Binary files /dev/null and b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image3.gif differ
diff --git a/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image4.gif b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image4.gif
new file mode 100644
index 0000000..46d39ab
Binary files /dev/null and b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image4.gif differ
diff --git a/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image5.gif b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image5.gif
new file mode 100644
index 0000000..f240add
Binary files /dev/null and b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image5.gif differ
diff --git a/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image6.gif b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image6.gif
new file mode 100644
index 0000000..fdb98d2
Binary files /dev/null and b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/Image6.gif differ
diff --git a/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/adding_bots.html b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/adding_bots.html
new file mode 100644
index 0000000..39808b8
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/adding_bots.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+Adding Bots
+
+
+
+
+
+
Adding Bots
+
+
+
+
+
Despite their massive size, terrain maps can support enjoyable bot play. The
+key is careful placement of cluster portals, which is true of any map. Study the
+bspc documentation for details. The documents accompanying the tools are more up
+to date than those in the Q3Radiant manual. Your goal should be to keep the
+number of areas in each cluster roughly equal and reasonably low (hundreds, not
+thousands).
This is really best addressed as a number of semi-related building tips:
+
+
Plan Ahead. If you know you want buildings
+in your map, plan their locations from the first. Very complicated buildings
+(lots of geometry and surface detail) should be isolated away from long views.
+One reason for this is to control in view polygon counts. The second (and really
+obscure one) is to reduce the amount of z-compression that will affect the
+structures.
+
+
Build to Support Game play. Each of the
+structures in the Q3:TA terrain maps was built to support a game play need.
+Quite often, less is better than more.
+
+
Build Simply. Simple, uncomplicated
+architecture may be best. The more complicated you make your buildings, the less
+complicated the terrain around them can be. Depends on what you want to play up.
+The busy look of many Q3A maps doesn’t translate well to large terrain.
+Details are lost at great distances and only add to the triangle complexity of
+maps containing them.
+
+
Detail Content. With few exceptions ALL
+the geometry inside the terrain map is detail content, not just the terrain
+entity. The walls forming the corridor in mpterra2 may be the only non-detail
+structures in that map. Making geometry into detail makes a map far easier and
+faster to compile. If you want to block vis inside your structures, create
+simple caulk structures … much the same way as described for vis blocking the
+terrain.
+
+
Z-Compression Problems. Review the the map
+in 16 bit mode during development. This brings out z-fighting issues that occur
+at long distances. This z-fighting is created by detail brushes being compressed
+into each other (The Q3A engine does a significant amount of “z compression”
+as geometry becomes farther away from the viewer). This z-compression is far
+less apparent in 32 bit modes, but we have to remember that many people turn
+down graphic features in order to simply play Q3A on their systems (not just to
+get ridiculously high frame rates).
+
+
Fit Structures to the Terrain. Don’t
+just set structures on terrain and expect them to look right. Make your
+buildings look like they belong where you put them. Accommodate the rise and
+fall of terrain in your floor plans … or “dig” into the terrain brushes to
+create basements, tunnels and whatever you need. You can also adjust the height
+map to better arrange the geometry around structures, or manually tweak the
+triangles once the structures are in place. History is full of examples of
+really interesting buildings that have been built to accommodate difficult
+terrain like hills, cliffs and mountains.
The creation of terrain maps requires that the mapmaker have, or have access
+to a computer art program. Both JASC’s Paint Shop Pro and
+ Adobe’s Photoshop
+were tested and will do the job. Any art program that can output an 8-bit BMP
+format file with indexed color should work also.
Terrain maps still have to follow the rules that apply to all Q3A engine
+maps. There’s only so much that you can allow to be seen at one time, or the
+game starts slowing down. The good news is that the engine will only draw the
+terrain triangles that are in the player’s PVS (potential visible set). It
+doesn’t have to draw all the triangles in the terrain entity just because part
+of the entity is in view.
+
At first, most of the usual bag of tricks that mappers use to create vis
+blocking structures in architectural maps don’t seem to apply to terrain. But
+that is not the case. If anything, you NEED to think of terrain in much the same
+way as you think of buildings. You are still dealing with open spaces that could
+be considered corridors and large rooms … even though they look like large
+valleys.
+
In fact, it would be best to plan out the layout of your terrain
+ BEFORE
+creating your height map. If you know you want to block vis, you can design your
+terrain to work with vis blocking techniques and avoid the agony of having to go
+all the way back to the start when you discover that your killer terrain map
+lets you see too much at once.
+
If you want the player, even in spectator mode, to be able to fly everywhere
+and see the whole world laid out below him … an unrestricted vista, so to
+speak, you’re going to be much more limited. Every single triangle in the map
+will essentially be viewable at any moment in time. However, if you’re willing
+to place restrictions on your players - limit how high they can fly or climb,
+you suddenly have more options for blocking player visibility.
+
First, the terrain entity is entirely detail content, so it doesn’t block
+vis. That’s a key part of how this whole process works. Otherwise, vis time
+would be measured in eras (not minutes or hours) and visdata size would be very,
+very large.
+
To block vis in the terrain, start by creating simple
+vis-blocking structures
+out of caulk texture inside the forms of the terrain (they are not part of the
+terrain entity). You can try to match the silhouette of the terrain, but in the
+end, you may only end up complicating the visdata without gaining any real
+benefit.
+
Next, and this is going to sound strange, build thin walls of caulk that
+follow the divide line (where the terrain falls away on both sides) of the
+highest mountains, buttes or hills. Only do this where you know that you will
+not allow the player to move over or see over
that
+part of the terrain (we’ll talk about clipping real soon).
+
+
+
Other Tips:
+
+
+
+
·
Sky Texture in Place of Caulk:
+You sometimes want to apply the sky texture to some of the surfaces of the thin
+walls used as vis blockers. This can remove some HOM effects. The caulk brushes
+that block the vis around the bases in mpterra2 have sky texture painted on the
+surfaces facing the base.
+
+
·
Hint Brushes:
+Use these extremely sparingly and only after trying to solve the problem in
+other ways. Hint brushes can add hours to vis compile times. Even so, they can
+make a difference. One trick you can try is to put a horizontal hint brush at a
+point about midway up the slopes of your terrain. It can add some additional vis
+break points.
+
+
·
Adjusting Terrain:
+Vis times totally depend on the placement of your vis blockers. Vis times are
+not affected by modifying the terrain surfaces (terrain entities are detail
+content, remember?). With that being said, you may want to modify the terrain to
+allow you to more effectively position the vis-blockers.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/boxing_in_the_world.html b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/boxing_in_the_world.html
new file mode 100644
index 0000000..24f1eca
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/boxing_in_the_world.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+Boxing in the World
+
+
+
+
+
+
Boxing in the World
+
+
+
+
+
It may not need mentioning here, but … the terrain entity needs to be
+contained inside a sealed world. For the terrain maps in Q3:TA, we built huge
+boxes. Any portion of the box that could be seen while playing the game, or
+flying around in spectator mode was covered in sky texture. Any portion of the
+box that could not be seen was made out of common/caulk. If mountains or canyon
+walls surround your map, plan to bring the caulk portion of the wall up as high
+as you can. This can reduce the number of triangles seen in the map. Generally
+speaking, you will see ALL the sky triangles inside the map at all times.
+
Finally, and this is a part of vis blocking, but it should also be noted
+here. Don’t forget to place large caulk structures that rise up from the
+bottom of the world box to near the ground surfaces of terrain entity. If the
+ground level rises and falls substantially, these can be a part of the vis
+blocking process. Otherwise they serve to reduce the size of the map’s total
+volume (generally speaking … a good thing).
The terrain entity uses its triangle surfaces as clipping planes. No
+additional clipping is required to allow characters to run on the terrain’s
+surface. As the initial terrain maps developed in house, we discovered that to
+control and guide play flow, we needed to clip many of our mountain and canyon
+slopes with vertical walls. Done right (as the slopes start becoming too steep
+to climb), players don’t notice (as much).
+
Next, decide how far up in the sky you are willing to let your player’s
+fly. If the map is entirely open you might want to keep it that way. If you’ve
+placed caulk barriers as described above, then the low point on the ridgeline
+(or lower) will likely be your ceiling height.
+
+
Clipping Tips
+
+
+
+
·
Make sure your “ceiling” clip
+brushes extend all the way up the sky brush.
+
+
·
Keep your clip brushes simple.
+
+
·
Right angles are rarely found in
+nature. Use the clipper tool to take the corners off your vertical clips.
+
+
+
+
+
The alphamap referenced by the alphamap key/value pair is an art file created
+specifically for the map. For non-digital artists, it may be one of the more
+technically and conceptually challenging things that need to be created to make
+the terrain map work.
+
Simply put, the alpha map is the template that the compiler uses to assign
+textures to the terrain surface.
+
To make the alphamap, you must have, or have access to, an art program that
+can save a file as an 8-bit BMP file with indexed color. I’ll discuss other
+file types later on, but the BMP file is probably the simplest solution, both
+technically and conceptually.
+
+
+
Terms
+
+
First, you need to understand a couple vocabulary words … jargon, if you
+will:
+
+
Indexed Color: In essence, each color used in a piece of art is
+remembered by its location on the color table or palette (see below). There are
+256 colors available, numbered from 0 to 255. Each position on the palette has
+its own number. This number has nothing to do with the RGB values of a color in
+that position. If you change the actual color located at a particular location
+on the palette (say from red to blue), all the pixels that were formerly that
+shade of red (if painted using a color with that index number), will change to
+the new color of blue.
+
+
Color Table: This is what Photoshop calls the indexed color layout of 256
+colors. In Paint Shop Pro it’s a palette. This is a pop-up window that shows
+the colors in the palette and their arrangement. For making an alphamap for a
+terrain map, the colors you choose are not important, but their position on the
+palette is.
+
+
Palette: This is what Paint Shop Pro calls a Color Table.
+
+
+
Making the Palette
+
+
The best way to start is to make a set of colors to use when painting
+alphamaps. If you want, you can do this once and save it out. In PSP edit the
+palette (in Photoshop, open the Color Table). Make sure the colors are sorted by
+index number (there may be a pull down menu that allows this). In PSP, the
+colors are indexed from the upper left (color 0 in the upper leftmost position
+and increasing in value to the right). In Photoshop, the positions are reversed.
+The color with value 0 is in the lower rightmost position and the index numbers
+increase to the right.
+
Because there is a direct one-to-one relationship between colors in the
+palette and individual shaders that make of the metashader, you should select
+clearly distinct colors to represent each shader. You should have one color for
+each layer you intend to include in the map (see keys above), which means one
+color to represent each root shader. You may find it convenient to create more,
+so they are available for later use (if you save the palette).
+
This method worked for me to make a 16-color palette in Paint Shop Pro.
+First, I reduced my palette size to 16 colors. I clicked on each palette
+position and created a color for it (don’t use black). Then, I increased my
+palette size back up to 256 colors, filling the rest with black. In Photoshop,
+it’s easier to select all the colors you don’t intend to use and make them
+black. Then, I save the palette out as a file for later use.
+
Another thing you might try is to make a grayscale palette, then use only the
+first few positions for your color and leave the rest for grayscale (this allows
+you to import bmp height maps and use them as guidelines).
+
+
+
Alphamap File Data
+
+
File type: The alphamap is a BMP format file or a TGA file (see other
+file formats below). With BMP format, each color in your palette corresponds
+directly to a root shader used to create the smooth texture blends on the
+terrain.
+
+
File size: The size of the alphamap should be one-to-one with the number
+of vertexes in the map. If you have 64 divisions x 32 divisions in your terrain
+mesh (65x33 vertexes), you should use a 65 by 33 alphamap. You can use an
+alphamap with a size that is not a one-to-one map with the number of map
+vertexes, but you can then expect a less precise interpretation of your texture
+assignments.
+
+
Colors linked to Shaders: If an 8-bit texture is used (BMP), q3map links
+a color’s position on the palette to an identifying number in the name of a
+shader. The color in position 0 would reference a root shader named <metashadername>_0.
+The color in position 1 would reference a root shader named <metashadername>_1.
+<metashadername> refers to the value of the Shader key (see Key: Shader
+below). In theory, you could probably have 256 different root shaders assigned
+to the terrain entity. In practice, you’d probably want to bite your arm off
+at the elbow before doing something as complicated as that.
+
+
Other File Formats
+
+
It is possible to use a TGA file (a RGB color format) for an
+alphamap. TGA
+files are handled differently than indexed color files like BMP. Instead of
+looking for a position on the palette, q3map interprets the RGB value of actual
+color. With a 32-bit TGA file, only the color values in the red channel are
+used. The program assumes that a gray scale of equal values is being used. The
+program divides the colors by the number of levels into equal-sized ranges. When
+assigning textures, q3map looks at what range the color falls in and chooses the
+appropriate shader to place or blend.
+
+
Controlling Texture Blends
+
+
Each triangle on the mesh can only have two root shaders blending across it.
+Another way to say this is that there should be only two different colors on the
+three vertexes that form any given triangle in the mesh. Any more, and a sharp,
+unblended edge appears on the terrain surface. This can take some trial and
+error to correct. A bsp -switch command called -showseams can help the mapmaker
+find these errors. Create a new bsp command in your project file that includes
+this option. We recommend doing it with a novis only operation.
+
+
+
+
+
Figure 3
+
In figure 3, the blue and white image on the left is a scaled up (4X) version
+of the alphamap used on Distant Screams. It shows three different root shaders
+in use. Compare that to the gray scale height map on the right and you can see
+how the artist chose to assign textures to the various heights and depths of the
+map. As long as the guidelines for texture placement are followed, a mapmaker
+should be able to work with more different root shaders than shown here.
+
+
Alphamap Creation Tips:
+
+
+
+
·
The alphamaps for the team arena maps
+are included with this document, both as reference and as files that you can
+modify to work with your own maps. You may want to compare the alphamaps against
+the heightmaps for the same maps, just to see how id resolved mapping issues.
+
+
·
You can create a quick (though not
+necessarily good) alphamap by saving your height map as a new file. Then use the
+“posterize” filter that can be found in some art tools. Reduce the number of
+colors in the art to equal the layers (number of unique root shaders) in the
+terrain.
+
+
·
If you are creating a new alphamap
+from scratch, use colors that are easily distinguished from each other.
+
+
·
If you are making an alphamap for a
+team style map where both sides of the map are identical (mirrored or rotated),
+you only need to design the map for one side. Copy and position it as described
+above for the heightmap.
+
+
·
The id maps used simple color schemes
+that were homogenous throughout the maps. That is not the only way of doing
+things. It would be quite reasonable to use many more terrain textures
+(particularly if you weren’t going to build complicated, multi-texture
+architecture on top of them). Consider a map where one part of the terrain used
+red-themed textures and the other side blue themed textures. Have them blend
+into a few simple neutral colors near the map center.
+
+
·
Try doing terrain style texture
+mapping on non-terrain geometry. Results will definitely vary, but some could be
+interesting.
+
+
+
+
Samples: The last height map and the alphamap used to create each of the
+terrain maps in Team Arena is included in the Mapping Support folder. Note that
+the designers made vertex manipulations to the final terrain meshes that are not
+reflected in these height maps. Also, the alphamaps are in PCX format, not BMP
+format.
Although it’s not necessarily the only way to develop a piece of terrain,
+thinking of it and creating it as “mesh” of triangular brushes may be the
+easiest way to work initially. The terrain sections for Quake III: Team Arena
+were built in this manner, though each designer went about it in slightly
+different ways.
+
Our primary tool was a plugin for Q3Radiant , created by David Hyde, called
+GenSurf. The tool was originally created for Quake 2 (and may have been around
+longer) and has been adapted for use with many of the game engines using Quake,
+Quake2 and Quake3 technology. The basic concept behind GenSurf is that it can
+create and export a group of brushes (or curve patches) to Q3Radiant that have
+the look of “natural” terrain about them. Within the plug-in, the mapmaker
+has control over the horizontal dimensions of the terrain entity, the steepness
+of the slopes it creates, and the number of columns and rows of triangles that
+it subdivides into.
+
The terrain can be generated from within the tool by using simple waveforms,
+more complex mathematical expressions, fractal calculations, or height maps. The
+last item, height maps, is in our opinion, the route to take for creating
+complex, visually interesting terrain layouts. A height map is a piece of art
+(we rendered them in grayscale) that GenSurf uses as a template for establishing
+the height of vertexes (the points where the corners of the terrain triangles
+meet). GenSurf interprets the color of the pixel (or more correctly the
+numerical color value of the pixel) that corresponds to the location of the
+vertex. Generally, the darker the gray value, the lower in height the vertex
+(256 unique height values corresponding to 256 pixel colors). GenSurf then uses
+the vertexes to define the extents of triangles and suddenly, one has a terrain
+surface. Of course, there are a few details of construction between start and
+finish …
Once you’ve created the func_group that will become the terrain entity, you
+need to add the various keys and key values that make it a terrain entity.
+
+
+A word to the wise: WRITE YOUR KEYS AND VALUES ON SOMETHING YOU CAN
+EASILY REFER TO DURING DEVELOPMENT!! During the creation, testing and tweaking
+of the heightmap, you will have to reenter these key/value pairs for the terrain
+entity every time you recreate it. One thing that can make things easier is
+before replacing the terrain entity with a new mesh, open the entity window and
+click on the most complicated of the key/value pairs (usually the alphamap).
+When the new terrain func_group is in place, click on the value line and hit
+return. That’s one less thing to retype.
+
+
Key: Alphamap
+
+
Value:
The value should be the
+pathname to the art file use to assign textures to the terrain. Example:
+maps/alpha/pj_terra1.bmp. The pathname begins in the game (baseq3 or missionpack)
+directory, which includes the name of the art file.
+
The q3map compiler applies and blends the textures
+(shaders) on the terrain
+entity using a “metashader” (see Texturing the Terrain below) that
+references the art file named by the alphamap value. See the Creating the
+Alphamap section below for details.
+
+
Key: Layers
+
+
Value:
A positive integer, equal to
+the number of unique or root textures to be blended on the map. Each color on
+the alphamap’s palette corresponds to a “layer.” If you plan to blend 4
+textures, you need a layer value of 4.
+
+
Key: Shader
+
+
Value:
A pathname, beginning in the
+ missionpack/scripts directory, which includes the name of the filename and the
+name of the metashader. Example: The shader value for mpterra2 is “terrain/mpterra2”.
+“terrain” is the name of the script and mpterra2 is the name of the
+metashader used to apply texture to this terrain.
+
+
Key: Terrain
+
+
Value:
Set this to 1 to indicate that
+the func_group is a terrain entity. It’s essentially a yes/no flag.
+
+
Key: Min
+
+
Value:
Map coordinates of the minimum
+XY extents (lowest left extent) of a component piece of a multi-part terrain
+entity. This is optional, only used if you are texturing a subset of the total
+terrain area.
+
The Min and Max extents (both must be in the entity) establish where a
+subsection of terrain fits into the overall terrain map. It lets q3map assign a
+subset of the alphamap to the entity, instead of referencing the entire alphamap.
+It could also be used on a separate terrain entity to use the same alphamap, but
+reference a different shader.
+
+
Key: Max
+
+
Value:
Map coordinates of the maximum
+XY extents (uppermost right extent) of a component piece of a multi-part terrain
+entity. This is optional, only used if you are texturing a subset of the total
+terrain area.
+
The Min and Max extents (both must be in the entity) establish where a
+subsection of terrain fits into the overall terrain map. It lets q3map assign a
+subset of the alphamap to the entity, instead of referencing the entire alphamap.
+It could also be used on a separate terrain entity to use the same alphamap, but
+reference a different shader.
: a shader that is part of
+a family of related shaders used to texture a terrain entity. It represents a
+terrain texture in its unblended state. The naming convention for a root shader
+is <metashadername>_#.
+
+
Blend Shader: a shader that is part of a family of related shaders used
+to texture a terrain entity. It represents a terrain texture in its blended
+state, two textures that crossfade across each other. The naming convention for
+a blend shader is <metashadername>_#to#.
+
+
Metashader: the identifying name of a group of related shaders used to
+texture a terrain entity. By way of example, the metashader name used to texture
+mpterra2 was … mpterra2. Its root shaders had names like mpterra2_0,
+mpterra2_1, and mpterra2_2. Its blend shaders were named mpterra2_0to1,
+mpterra2_1to2, and mpterra2_0to2.
This is not intended to be a tutorial on using GenSurf, but it will include
+some pointers on getting the most out of the tool. You can download the
+standalone tool and find tutorials for GenSurf at this site
+
This page, in particular, contains tips for using GenSurf, most of which to
+apply to Q3A terrain creation.
+
When starting the GenSurf plug-in: You will probably want to “Select Ground
+Surface” as the option for making your terrain surface.
The terrain maps in Quake III: Team Arena began as grayscale bitmap art files
+imported into David Hyde’s “GenSurf” tool, a Q3Radiant plug-in. As
+mentioned before, the height map is a template that the utility uses to define
+the vertex heights of the triangles forming the terrain surface. We used Adobe
+Photoshop and JASC’s Paint Shop Pro to create and adjust our height maps …
+but any art program that can output a .bmp format file can be used to create the
+height map.
+
+
+
+
figure 1.
+
By way of example, the piece of artwork in figure 1 is a greatly scaled up
+(4X) version of the height map used to create the initial terrain geometry for
+mpterra2. The very dark, horizontal area near the center is the big “lake”
+near the center of the map. The dark curves to the upper right and lower left
+are the “fjord” water areas. The dark areas in the upper left and lower
+right are the locations of the bases. The white and very light gray areas
+represent the peaks of hills and mountains.
+
The key to understanding how the height map works is that the shades of gray
+in the art (call them “color values”) represent the height of mesh vertexes
+(triangle corners) and not the triangle quads (squares created by two
+triangles). When you work on a piece of art where each individual pixel
+corresponds to a vertex, it is easy to imagine the pixels (usually large square
+blocks) as squares of terrain. But that’s not how it works.
+
Start by giving some thought to the eventual size and proportions of the
+final terrain area in your map. How many rows and columns of triangles do you
+want in the map? The finer you subdivide the map (making more rows and columns),
+the more triangles will appear in any given view, but the terrain can be made
+less blocky by including more.
+
GenSurf can generate a terrain mesh of up to 64 triangles on a side (of the X
+and Y dimensions of the entire mesh). If you don’t decimate the GenSurf output
+(an option that optimizes and reduces the number of triangles used to create the
+mesh … and we really recommend that you don’t), it generates a mesh of
+triangles in arranged in quads in neat rows and columns. By way of reference,
+mpterra2 (the largest Team Arena map) is “only” 48x64 columns and rows of
+triangles. Since Q3Radiant and q3map tend to like things that end up in neat
+powers of 2 or units of 64 subdivisions, consider having your map extents (lower
+left and upper right map corners) fall onto neat units, power of 2 units. In
+mpterra2, the extents were set up to make the mesh triangles have sides of 256
+units.
+
+
+
+
Figure 2.
+
Figure 2 shows an example of a top view of a terrain mesh that is 8 x 8 rows
+and colums of triangles (on a side).
+
Just as you would plan out a game map, give thought to the layout and flow of
+your terrain map. Will it be all-open in one view? Can you use natural terrain
+features to block vis? How complicated will your buildings (if any) be? Do you
+want to include trees, water, weather effects or other items that could add to
+the visual cost of your map?
+
Begin the creation of your height map by making a new grayscale file. If your
+program doesn’t allow you to easily modify a .bmp format file, work in another
+format and then convert it when you save. You can make the dimensions of your
+height map art whatever you want. The extents you set in GenSurf for the map
+dimensions are what determine the final size of the terrain piece. Some may find
+it easier to work with a large file initially, using their favorite painting
+tools to lay in the shades of gray.
+
However, when you get down to making final and precise changes in your height
+map you should (and this is STRONGLY recommended), change the size of the art
+file such that the pixel dimensions of the map are 1 pixel larger than the
+number of divisions (rows and columns) in the terrain mesh you want to create.
+If you are making a 64 x 64 division map, then you want to create a 65 x 65
+pixel height map.
+
If there is not a one-to-one match between the number of vertexes in the mesh
+(one more than the number of divisions) and the number of pixels in the height
+map, then GenSurf interpolates the number values (0 to 255 range) of the pixels
+to get an averaged value instead of an exact value for the height of the vertex
+at that point.
+
When you save out the height map art file, you must save it in 8-bit .BMP
+format. Currently, this is the only the file format that GenSurf recognizes.
+
+
Tips and things to consider for making Height Maps
+
+
+
+
·
Read through the section on blocking
+vis later in the document. Plan your vis blocking terrain structures in advance
+instead of having to start over when you discover that too much of your world is
+in view.
+
+
·
Consider what type of geometry will
+form the edges of your map. The terrain maps in Q3:TA resolve the issue by
+creating canyon-like settings … valleys bordered by high canyon or mountain
+walls.
+
+
·
Start by filling your map with a
+neutral gray (value 127 or 128). Paint the high areas lighter and the low areas
+darker.
+
+
·
Keep your terrain shapes simple when
+you start. You can add greater complexity as your map develops.
+
+
·
You will probably want to keep the “playable”
+area of your map within a fairly close or “narrow” range of gray values
+close to the middle range of values. This allows you to use very dark shades of
+gray to create deep chasms and very light shades of gray to create high
+mountains, canyon walls or visual barriers.
+
+
·
Extreme jumps between the gray values
+in adjacent areas means steep slopes.
+
+
·
Avoid making vertical or near vertical
+terrain surfaces … unless you don’t mind the resulting textured surface
+looking like barcode. Q3Map planar projects the textures onto the terrain entity’s
+surface (Normal brushes are box mapped). The pixels will stretch and stretch to
+fill the space. The farther the surface is from horizontal, the greater the
+stretching.
+
+
·
Use the roughness feature of GenSurf
+to add a little, um … roughness to your map … so flat areas aren’t
+completely flat. If you are using a 1 to 1 scale height map, adding “noise”
+to the file will also accomplish this.
+
+
·
If you want an area, such as a path,
+to be flat, you need to make the gray value affecting two adjacent vertexes the
+same value.
+
+
·
You can create gentle slopes by
+changing the gray values between adjacent areas by very small amounts.
+
+
·
Slopes greater than 45 degrees are
+close to becoming unplayable barriers.
+
+
+
+
If you are building a symmetrical team style map, only create one side of the
+terrain. Create a new piece of art that has the dimensions of the final piece.
+Paste the map half into the new file and move it into position. If the map will
+have an even number of vertexes, paste the map again and then rotate or mirror
+(as you choose) the selection and move it into position. If the number of
+vertexes is odd, after you paste the first half of the map, select all but the
+row or column of pixels along which the two halves of the map will face and copy
+it. Paste it, rotate or mirror it, then position it. Now, select and copy half
+the row or column of pixels you didn’t copy in the last operation. Paste it,
+transform it as you did in the last operation, and then position it so that it
+is in the same row or column, but on the opposite side of the piece you copied.
+
When you make significant changes to a height map, consider saving it as
+version rather than over-writing the older file. Always nice to have a back up
+when you realize that you’ve messed up more than you’ve fixed.
Creating workable terrain style maps for the Q3A engine takes some
+reorganizing of thought, but in many ways is not substantially different from
+making a halls-and-rooms type of map. The designer still has to be concerned
+about how much can be seen at one time and give thought to map flow and play.
+The rules and restrictions that guide conventional map design are still there
+… it just occurs on a much grander scale. You still have to think about poly
+counts, that hasn’t changed; but generally speaking, the polys that you will
+use to make your game terrain are VERY large and less are likely to be seen all
+at once during a game.
+
+The “terrain” style maps in Quake III: Team Arena do not represent any
+changes to the Quake 3 Engine. The power to make them work has always been there,
+unrealized and untapped. What has changed is the way map files are created and
+processed. These construction techniques rely on changes in the Q3Radiant editor
+and the q3map program that processes the map files into game files.
+
+
+
+
diff --git a/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/key_changes.html b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/key_changes.html
new file mode 100644
index 0000000..bcc92b6
--- /dev/null
+++ b/install/installs/ReactionPack/install/docs/Terrain_Manual/pages/key_changes.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+Key changes that have been made include
+
+
+
+
+
+
Key changes that have been made include:
+
+
+
+
+
+
+
+
+
+
·
A variant of the func_group entity
+ has been added to the game. When a func_group of brushes (only) is given a
+ terrain key and a numerical value (an ID number for that terrain) and several
+ other key attributes, it becomes a terrain entity and is treated differently
+ than other brushes during the compile.
+
+
·
The map area has been expanded to
+ 128,000 units in all extents (256,000 units on any edge of the map volume).
+ While this does not mean that a map that large could actually run on current
+ game hardware, it does give the designer room to explore what the actual
+ limits may be. As a point of reference, mpterra2.bsp is roughly 12K x 16K x 3K
+ units in size … the largest map in the game by far.
+
+
·
A terrain texture mapping system
+ plots textures across the terrain entity using a specially created .pcx or .tga
+ art file as a map for planar projecting and blending shaders on terrain
+ surfaces.
+
+
·
A “meta-shader” is used to
+ organize and calculate blends between the shaders that are mapped onto the
+ terrain.
+
+
·
Textures designed for use under
+ vertex lighting can be substituted at map load time for more complex shader-manipulated
+ textures that may not look correct in a vertex light only situation.
+
+
+
+
Terrain maps also require some rethinking about the way you light maps.
+
+
Vertex Only
+
+
If you are making a large terrain map, you should plan on making your terrain
+textures be lit by vertex lighting only. Lightmaps can quickly become far too
+large for the game to handle.
+
Make sure your large terrain textures contain the following parameters:
Q3map_novertexshadows //this is what keeps those caulk vis blockers from
+causing ugly shadows to form on your terrain.
+
If you are using q3map_sun in your sky …
+
+
Q3map_forcesunlight //this makes the light emitted by a q3map_sun
+parameter affect the vertex lit surface.
+
+
Light Sources
+
+
For outdoor maps, the obvious source of lighting ought to be the sky. The
+skies in the mpterra maps began with skies used in more conventional Team Arena
+maps, but were modified to better suit the needs of the terrain worlds.
+
+
+
+
·
Slow Down Those Clouds.
+ One thing to consider is slowing down the rate of cloud movement. What looks
+ OK in smaller maps looks wrong in vast panoramas.
+
+
·
Strong Sunlight is
+ Good. For team maps,
+ you want to try and keep the light relatively the same in both base areas, so
+ if you have mountains or large base structures, having the light come in at a
+ nearly vertical angle is good, but less dramatic.
+
+
+
·
Ambient Light is Not
+ So Bad. Since the
+ beginning of Q3A map development we’ve said things like “Ambient Lighting
+ is bad”. Well, the problems caused by ambient lighting are still there
+ (flattening of shadows and colors), but with the distance of the play areas
+ from the sky surface (in some maps), adding an ambient really helps bring up
+ the overall light value in the map. Start low, maybe around an ambient value
+ of 5 and creep upwards until the map looks right. It is VERY IMPORTANT that
+ you give your ambient light a color. If you leave it white, you get ugly pink
+ light instead of white. Even specifying white makes it look wrong. Best
+ suggestion is to sample the sky texture color and translate that into an rgb
+ formula for your ambient. One warning
+ though … if you include “interior spaces” in your maps, the ambient
+ light will affect those areas too. You will not get the deep dark shadows you
+ may want in there.
+
+
+
·
Sky Shader Trick #1: Lose the
+ Backsplash. The attributes of the sky
+ shader can have a significant effect on the amount of time it takes to perform
+ a light compile on a map. You have to think of the sky as a huge area light.
+ However, unlike light emitting textures (like your average light fixture), the
+ sky doesn’t need to be illuminated itself. Therefore, you can eliminate the
+ backsplash light feature which is the default status of the q3map_surfacelight
+ parameter. Your sky shader should have the parameter q3map_backsplash with a
+ value of -1. Removing backsplash light doesn’t affect the appearance of the
+ sky, but does remove a significant amount of compiling overhead when the
+ -light algorithm is used (the normal way you light things).
+
+
·
Sky Shader Trick#2: Big
+ Subdivisions. Q3Map automatically
+ subdivides the sky into triangle quads. The more triangle quads, the more
+ light emitting surfaces you have on your sky (if q3map_surfacelight is used).
+ The light compile calculates for every one of these light emitting surfaces.
+ Increase the size of the subdivision and you get less light emitters and a
+ faster compile.
+
+
·
Sky Shader Trick #3: -V-light.
+ This is a fast lighting algorithm. It’s especially fast for calculating sky
+ lighting. It loses a little precision, but it can greatly speed up the time it
+ takes to light a map. Even if you decide to use a normal light operation for
+ your final map, using -vlight for interim compiles can mean a lot less time
+ spent waiting on the compiler to see your results.
+
+
+
+
+
+
The Light Grid
+
+
This is discussed in detail under terrain-related Worldspawn features. One of
+the things that can add enough memory complexity to a large terrain map, enough
+to make it unplayable (read crash the game), is the light grid. Think of the
+light grid as a map for determining how to light entities in the world. It’s
+what makes player models appear to move in and out of shadows as they move
+through the world. It’s a nice effect, but costly in memory terms. For the
+largest maps in Q3:TA, we “traded down” to a less detailed light grid.
+Increasing the size of grid subdivisions from 32 units to 256 units did this. We
+experimented with smaller and larger grids and settled on 256 x 256 x 256 as the
+best size. Smaller and the grid became large and unwieldy. Larger (especially on
+the z dimension) and not enough light reached some of the entities.
+
The details of this feature are noted below under Terrain-Related WorldSpawn
+Features.
Once the terrain mesh has been generated, it’s very likely that you will
+want to fine-tune the triangles inside the editor. Do this by pulling vertexes
+up and down along the Z axis. Once you start fine-tuning in this manner, the
+height map no longer exactly represents the map.
+
+
WARNING: If you revise and convert the height map, your manipulations
+here are lost.
The key to making this stuff look good is the q3map routine that works with
+alphamap and the metashader (see below) to smoothly blends textures across the
+terrain entity.
+
+
Texturing Overview
+
+
As noted earlier, Q3Map assigns textures, or more correctly, shader
+manipulated textures, to each triangle used to create the terrain map. The
+shaders used are part of a group of shaders called a metashader. The metashader
+is the family name for the shader. Individidual shaders within it are identified
+by a suffix, either an underline character followed by a number, or an underline
+character followed by a string indicating a blend between two other shaders.
+
Within the body of the metashader, there are two types of shaders used. The
+first, is the root shader. A root shader represents a terrain texture in
+its unblended state. The naming convention for a root shader is <metashader>_#.
+The second type is the blended shader. The blended shader creates a
+crossfade between two root shaders across the face of a single geometry
+triangle. The naming convention for a blended shader is <metashader>_#to#.
+The map maker does not need to make a blend between each root shader, but for a
+blend to occur, there must be a blend shader for the two root shaders.
+
Q3map will map a shader (root or blended) once and only once across the face
+of the triangle. The shaders will not tile or repeat across the triangle face.
+
As noted earlier, the textures are planar mapped or projected on the surface
+of terrain texture. The angle of any individual triangle does not affect the
+angle or direction at which the texture lies on the brush surface. The angle,
+however, does affect the apparent stretching of the texture on the surface. The
+steeper the angle of the brush surface, the greater will be the stretch of the
+shader on that surface.
+
Q3map looks at the pixel on the alphamap that corresponds to a given vertex.
+It uses the color of that pixel (or more correctly the identification number of
+the position that color occupies in the palette) to determine which root shader
+will be applied. That root shader is applied to triangles that have one vertex
+located at the given vertex. It then examines the alphamap color of the vertexes
+adjacent to the given vertex. If an adjacent vertex has the same color as the
+given vertex, the root shader is applied to the surface. If an adjacent vertex
+has a different alphamap color, the blended shader that crossfades between the
+two.
+q3map
+-----
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-glview
+ Write a .gl file of the bsp tree for debugging.
+-v
+ Output verbose information.
+-draw
+ Enable realtime debug drawing output.
+-nowater
+ Water, slime and lava brushes are not compiled and won't show up when running the map in Quake.
+-noopt
+ unused.
+-nofill
+ unused.
+-nodetail
+ Detail brushes are not compiled and won't show up when running the map in Quake.
+-fulldetail
+ Detail brushes will be treated as normal brushes.
+-onlyents
+ Only change the entities in a .bsp using a .ent file.
+-onlytextures
+ Only change the textures in a .bsp file.
+-micro
+ unused.
+-nofog
+ Visible surfaces that cross fog boundaries will not be split along the bound.
+ This can cause visually incorrect fog in the map.
+-nosubdivide
+ Visible surfaces are not subdivided as required by shader tesselation.
+ The shader parameter "tesssize" sets the tesselation of a surface.
+-leaktest
+ Only test the map for leaks. If a leak is found the compilation is stopped.
+-verboseentities
+ Output verbose information about entity sub-models.
+-nocurves
+ Curves are not compiled and won't show up when running the map in Quake.
+-notjunc
+ T-junctions are not fixed. This can cause tiny slits where a surface meets halfway another surface.
+-expand
+ Expands all the brush planes and saves a new map out to allow visual inspection of the clipping bevels
+-tmpout
+ Output files to a folder called "tmp".
+-fakemap
+ Write out a fakemap.map This map will contain a worldspawn entity with all the world brushes.
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-custinfoparms
+ Will enable custom surface flags (see below)
+
+q3map -vis
+----------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-fast
+ Only calculate a very loose visiblity list. It doesn't take much time to
+ calculate but a lot more polygons will be drawn by the Q3 engine than necesary.
+-merge
+ Merge bsp leaves before calculating the visibility list. This will speed up
+ the vis calculations but mostly more polygons will be drawn by the Q3 engine
+ than necesary.
+-nopassage
+ Disable the passage visibility algorithm. The passage vis is faster and a bit more
+ tight than the old algorithm.
+-level
+ unused.
+-v
+ Output verbose information.
+-nosort
+ Don't sort the portals on complexity. Sorting mostly speeds up visibility calculations
+ because more complex portals can use information from less complex portals.
+-saveprt
+ Don't delete the .prt file after creating the visibility list.
+-tmpin
+ Input files will be read from a folder called "tmp".
+-tmpout
+ Output files will be written to a folder called "tmp".
+
+
+q3map -light
+------------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area
+ This scales the light intensity of area lights.
+-point
+ This scales the light intensity of point lights.
+-notrace
+ No light tracing is performed. As a result no shadows will be casted.
+-patchshadows
+ Enable patches casting shadows.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-extra
+ Take four samples per lightmap pixel and store the average light value of these
+ four samples for the actual lightmap pixel.
+ This super sampling is used for anti-aliasing.
+-extrawide
+ Just like -extra four samples per lightmap pixel are calculated. However the
+ average of 12 samples is stored per lightmap pixel.
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-border
+ Create a debugging border around the lightmap.
+-v
+ Output verbose information.
+-nosurf
+ unused.
+-dump
+ unused.
+
+
+q3map -vlight
+-------------
+
+-threads
+ Number of threads used to compile the map. For the fastest compile
+ times the number of threads is set to the number of system processors.
+-area
+ This scales the light intensity of area lights.
+-point
+ This scales the light intensity of point lights.
+-novertex
+ Don't calculate vertex lighting.
+-nogrid
+ Don't calculate light grid for dynamic model lighting.
+-nostitching
+ No polygon stitching before lighting.
+-noalphashading
+ Don't use alpha shading at all.
+-nocolorshading
+ Don't use colored alpha shading. The alpha channel will be used as if it were binary.
+ The light goes through or not and does not change color.
+-tracelight
+ Use the "-light" light algorithm for all surface unless a surface
+ uses a shader with the shader option "q3map_vlight".
+-samplesize
+ Set the lightmap pixel size to NxN units. Default 16x16.
+-v
+ Output verbose information.
+
+
The q3map options are a subset of the shader instructions that require
+recompiling of the map.
+
q3map_tracelight
+
[NEW] Surfaces using a shader with this option will always be lit with the
+original "-light" light algorithm. Patches will not cast shadows on
+this surface unless the shader option q3map_patchshadows is used.
+
q3map_patchshadows
+
[NEW] When this option is used in conjunction with the original (-light)
+lighting algorithm, surfaces with textures modified by this option will will
+show shadows cast by curve patches (under normal circumstances, curve patches do
+not cast shadows).
+
q3map_vertexshadows
+
[NEW] By default, no shadows are cast on vertex-only lit surfaces (see
+surfaceparm pointlight). Also when running Quake III Arena in vertex lighting
+mode, no shadows are cast upon any surfaces (shadows are part of the light map).
+When using this shader option shadows *will* be cast on the surface when vertex
+lit. However sharp shadow edges won't be seen on the surface because light
+values are only calculated at the vertexes.
+
q3map_novertexshadows
+
[NEW] Shaders used for misc_models and terrain can now use
+q3map_novertexshadows to disable shadows to be cast at the vertex lit surfaces.
+Shadows being cast at small misc_model objects often makes sense. However
+shadows on large vertex lit terrain surfaces often look bad. By default no
+shadows are cast at forced vertex list surfaces ( shaders with "pointlight"
+).
+
q3map_forcesunlight
+
[NEW] No sunlight is cast at vertex lit md3 models and terrain by default.
+Using this option sunlight (overbright bits created by q3map_sun option) will be
+cast on these surfaces.
+
q3map_vertexscale <scale>
+
[NEW] The light value at the vertexes of a surface using a shader with this
+option is multiplied by the scale value. This is a way to lighten or darken a
+vertex light only surface in comparison to other, light-map lit surfaces around
+it.
+
q3map_notjunc
+
[NEW] Surfaces modified by a shader with this option are not used for
+tjunction fixing.
+
q3map_vlight
+
[NEW] Surfaces modified by a shader with this option will always be lit with
+the "-vlight" algorithm when q3map is used with the options "-vlight
+-tracelight".
+
q3map_lightmapsamplesize <S>
+
[NEW] Surfaces using a shader with this shader option will use lightmaps with
+pixel size SxS. This option can be used to produce high resolution shadows on
+certain surfaces or can be used to reduce the size of lightmap data where high
+resolution shadows are not required.
+
q3map_lightimage <image>
+
Image to use for the light color of a surface light instead of the image(s)
+used by the shader. Color is averaged from the texture. Texture must be the same
+size as the base image map.
+
q3map_surfacelight <value>
+
Sets the amount of light this surface emits.
+
q3map_lightsubdivide <value>
+
A surface light is subdivided into a bunch of point lights for the actual
+lighting of the world. This parameter controls the space between those point
+lights. Default value is 120.
+
q3map_backsplash <percent> <distance>
+
A surface light is also lit by itself using back splash point lights with a
+lower intensity. The <percent> parameter specifies the intensity
+percentage they use from the q3map_surfacelight <value> parameter. The
+<distance> parameter controls the distance of these back splash lights
+from the surface. You can set the <percent> to zero or a negative value to
+disable the back splash lights.
+
q3map_globaltexture
+
When this option is set the texture is not aligned to the world.
+
q3map_backshader <shader>
+
<shader> is the path/name of the shader or texture to be used at the
+back side of the surface.
+
q3map_flare <shader>
+
Creates a flare using the specified <shader> at the center of the
+surface using a shader with this option.
+
light <value>
+
Old style flare specification always using the shader "flareshader".
+The <value> parameter is unused.
Color will be normalized, so it doesn't matter what range you use. The
+intensity falls off with angle but not distance. A value of 100 is a fairly
+bright sun.
+
degree of 0 = from the east, 90 = north, etc.
+
elevation of 0 = sunrise/set, 90 = noon
+
surfaceparm pointlight
+
Surfaces using a shader with this parameter will always be vertex lit
+
This option can be used to reduce the lightmap data. Often used on surfaces
+
that don't need any shadows.
+
Surfaceparm dust
+
If a player lands (jumps onto) on a surfaces using a shader with this
+parameter, a put of dust will appear at the player’s feet. Note that the
+worldspawn entity of that map must have an enableDust key set to a value of 1.
+
+
+
Custom surfaceparms
+
+
With the new q3map tool you can add custom surface parameters for mods
+without the need to recompile the q3map tool. These custom surfaceparms are
+stored in a file called ‘custinfoparms.txt’ in the folder scripts/. An
+example of this file with the new surfaceparm treacle and surfaceparm grass is
+shown below.
NOTE: For linux users, when using the -custinfoparms parameter q3map
+first looks in your homedir, and only if it doesn't find a custinfoparms.txt
+there, it uses the one stored in the
+
quake3 install dir (usually /usr/local/games).
+
+
+
Content Flags
+
+
Contents flags are flags similar to CONTENTS_FOG in the original Q3A. These
+flags define the contents of volumes inside the game (for instance lava, fog,
+water, etc.).
+
If you look in the source file game/surfaceflags.h, it has defines for all
+contents flags. The define is split into a name and a hexadecimal value, for
+instance CONTENTS_PLAYERCLIP 0x10000. These hexadecimal values are powers of 2
+and can be ored together (binary) to form a bit mask. Up to 32 contents flags
+can be ored together this way.
+
+
Example: creating a volume with treacle.
+
The following outlines how a custom contents flag can be added and used in a
+mod. First open the ‘custinfoparms.txt’ file and add ‘treacle 0x4000’
+to the Custom Contentsflags section as shown in the example file above (0x4000
+is one of the unused values available for custom use). Next write a shader
+script which uses ‘surfaceparm treacle’. Apply this new shader to all sides
+of a brush in a test map. When you compile the map, add the -custinfoparms
+parameter to the command line following q3map.
+
Next, add CONTENTS_TREACLE 0x4000 to the source file game/surfaceflags.h in
+your mod. Now you can call the point contents function. If the point is inside
+the brush with the shader using the ‘surfaceparm treacle’ then the point
+contents call will return a bit mask with CONTENTS_TREACLE set. This can for
+instance be used to slow down player movement when a player is inside such a
+brush.
+
+
+
Surface Flags
+
+
The surface flags are texture properties that often affect entities in
+contact with surfaces using such flags. The ‘surfaceparm metalsteps’
+parameter from Q3A is a good example.
+
If you look in the source file game/surfaceflags.h, it has defines for all
+surface flags. The define is split into a name and a hexadecimal value, for
+instance SURF_NODAMAGE 0x1. These hexadecimal values are powers of 2 and can be
+ored together (binary) to form a bit mask. Up to 32 surface flags can be ored
+together this way.
+
+
Example: Making ‘footsteps on grass’ sounds
+
The following outlines how a custom surface flag can be added and used in a
+mod. First open up the ‘custinfoparms.txt’ file and add 'grass 0x80000' to
+the Custom Surfaceflags section as shown in the example file above (0x80000 is
+the first available unused value in surfaceflags.h for surface flags). Next
+write a shader script which uses a grass image and has 'surfaceparm grass’.
+Create a test map with the grass shader covering the ground surface. When you
+compile the map, add the -custinfoparms parameter to the command line following
+q3map.
+
Next, add SURF_GRASS 0x80000 to the source file game/surfaceflags.h in your
+mod. Now you'll be able to execute a trace and the trace information will be
+returned in the trace_t structure. If the trace hits a surface with the grass
+surfaceparm then the SURF_GRASS flag will be set in trace_t->surfaceFlags.
+Such a trace can be used to trigger playing a sound of a person stepping on
+grass. For a reference example, see the existing metal steps in the game code.
There are even some editors for other (non-fps) games that can be used to
+manipulate a surface in 3D and then output a .bmp format file. It is worth
+noting that we found it particularly challenging to use them … possibly more
+challenging than the benefits of working in 3D.
+
+
SC3K Map Editor
+
+
The first of these programs was a terrain editor for SimCity3000 called the
+SC3K Map Editor from Tenermerx. It is a free download available here: sc3maped
+
+
Loathing
+
+
The other editor we tried was the “Loathing” terrain editor that comes
+with Bungie’s Myth II game. If you’ve a copy of Myth II, this is something
+you could play around with. Both of these programs could output a .bmp format
+file. If you’ve used it to make some Myth II maps you may have some idea of
+how it works already. It is my opinion that if you use an editor for either of
+these two games to create your height map, you may still want to or need to
+manipulate it in an art program. If you can visualize the relationship between
+shades of gray and relative heights and slopes, the art program is probably the
+easier way to go.
+
+
Pencils, paintbrushes and a scanner
+
+
You can also make your heightmap by painting it by traditional methods and
+then scanning in the file and saving it as a .bmp. Though at some point you’ll
+probably want to switch over to digital manipulation.
Select From Bitmap under Waveform. Of course, you may want to
+ play around with some of the other wave forms. But bitmaps give you the
+ greatest degree of control.
+
+
·
Orientation: as appropriate
+
+
·
If you don’t want GenSurf to add any “noise” or
+ randomization to the height of the mesh, set the Roughness to zero. The
+ preview window gives you a good representation of what roughness does to
+ your surface. The random seed changes the distribution of the noise. Adjust
+ both fields accordingly.
+
+
+
+
The Extents TAB:
+
Extents: The extents of a map are the points on a map that define its
+lowermost t and leftmost corner and its uppermost and rightmost corner. They are
+given in terms of X, Y coordinates.
+
+
+
+
·
Under Extents, you should chose number values that are even
+ multiples of your number of Divisions so that the grid rectangles are all
+ the same size (this produces better texturing results). It also makes extra
+ work for the compiler. Furthermore, use the Extents to position the terrain
+ entity on the map (XY only). You will want to make sure that the terrain
+ locates exactly where you want it each time you revise it. Repositioning a
+ terrain file can be time consuming.
+
+
·
Set your X and Y divisions to equal the number of rows and
+ columns of triangles you want. You may want to strongly consider playing
+ with the numbers so that your triangle sides end up be large powers of two
+ (64, 128, 256 units etc.).
+
+
·
Do not check Use Bezier Patches.
+
+
·
Do not Decimate (keep it set to 0%). The process that applies
+ textures to the surfaces and blends textures between vertexes works best if
+ the size of the triangles is consistent and constant.
+
+
+
+
The Bitmap TAB:
+
+
+
+
·
Filename should point to the .bmp file you are using as a height
+ map. Reload will bring in any changes you have made to the art file without
+ having to restart the program.
+
+
·
GenSurf assigns an integer value to each of 256 shades of gray.
+ The value is based on the position of the color in the palette. In a grayscale
+ palette, the values typically range from 0 (black) to 255 (white). Map Color 0
+ corresponds (usually) to the lowest point on the height map and Map Color 255
+ to the highest. If you set Map Color 0 to 0 and Map Color 255 to 2048, each
+ increase in color value adds 8 units to the height of the vertex. When you
+ increase the difference between to the two values, the height changes are
+ steeper. Decrease the difference and the height changes are more global. You
+ can control the “Z” location at which the terrain draws by adding any
+ extra height above (or below) zero to the height values for both numbers.
+
+
+
+
The Fix Points TAB:
+
+
The general recommendation for this TAB is to leave it alone. You should
+either modify the height map or directly manipulate vertexes inside the
+Q3Radiant editor.
+
+
Texture TAB:
+
+
+
+
·
Set the main texture to common/terrain. The “Steep” angle is
+ irrelevant for terrain texture mapping.
+
+
·
Make sure that the Use detail brushes setting is checked.
+
+
+
Once you’ve tweaked all your settings, do a Save as. If you make changes to
+the settings, consider saving again as a new file. It’s nice to have a back up
+if you screw things up.
+
+
GenSurf Tips
+
+
+
+
·
Setting extents to correspond exactly with the desired map
+ location is important. You want to be able to drop revised terrain into a map
+ without a lot of repositioning.
+
The process of building a piece of terrain focuses on a new thing called the
+“Terrain Entity.” Technically speaking, the terrain in Team Arena is nothing
+more than a func_group entity (brushes only) with a number of key/value pair
+combinations that are unique to it. These key/value pairs define it as terrain (terrain), establish the piece of art that will be used to locate textures on it
+the terrain (alphamap), define the group of shaders used to blend textures
+across its surface (shader), and tell how many different unique shaders will be
+used. The bsp-making utility, Q3Map compiles and textures the terrain entity
+based on the parameters specified in those key/value pairs.
+
It is possible to have multiple terrain entities in a map (see Terrain
+Entities below). Once you learn the method and the techniques, terrain is
+relatively easy to create. One warning though … easy to create does not mean
+easy to compile. Large maps take a much longer time to compile, and huge maps
+are likely to take what seems like forever. However, there are some
+construction, lighting, and shader options that can significantly cut down on
+compile time - as will be noted later.
GenSurf outputs its terrain as a func_group entity. If you create a terrain
+mesh by any other means, you need to group it as a func_group entity.
+
Make certain that all the non-visible surfaces of the func_group brushes are
+textured with common/caulk.
+
Texture the visible surfaces with common/terrain or common/terrain2.
+
Select the func_group and turn it to detail content (CTRL M) or use the
+Selection menu.
+
It is possible to map terrain onto something that is not a “terrain”
+mesh. Keep in mind that textures will be planar projected onto all surfaces in
+the terrain entity and that brush vertexes will be used to determine where
+blends start and end.
A number of worldspawn key/value pairs were created to deal with issues
+arising out of terrain creation.
+
+
Cold Breath and Hot Dust
+
+
+The following two features need not be directly related to terrain, although
+they first appear in the Q3:TA maps. Each key/value pair needs to be the
+worldspawn for that particular feature to work.
+
+
+Key/value pairs:
+
+Key:
+ enableBreath
+
+
+Value:
+ 1
+
+When written into the worldspawn, this enables the appearance of “frosty
+breath” in the air in front of players. The frosty break does not appear in a
+player’s first person view, but will be seen in front of other players and in
+3rd person view.
+
+
+Key/value pair:
+
+Key:
+ enableDust
+
+
+Value:
+ 1
+
+When written into the worldspawn, this enables the appearance of dust puffs
+at the player’s feet when he lands on or run on a “dusty” surface. Adding
+the surface parameter “surfaceparm dust” to the shader for that surface
+creates a dusty surface. The common/terrain2 texture already contains the
+enableDust parameter.
+
+
Texture Remapping: Shaders for vertex light mode in Q3A
+
+
+One thing we quickly discovered when mapping the metatexture onto the terrain
+world was that it didn’t work if a player chose to run in the game’s vertex
+lighting only mode. That mode compresses shaders into a single pass. Usually,
+the engine makes a reasonable choice for which pass is mapped, but with the
+metashaders, that wasn’t the case. The solution: allow the mapper to choose a
+substitute texture that only is used in the game’s vertex lighting mode.
+
+
+For each shader that will be remapped a key/value pair must be entered in the
+map’s worldspawn.
+
+
+
+Key: vertexremapshader
+
+
+Value:
+
+ normal_shader;vertexlighting_shader
+
+
+The normal_shader is the shader normally used on the terrain. The
+vertexlighting_shader is the shader to be used when people run the map in Q3 in
+vertex lit mode. The normal_shader and the vertexlighting_shader are seperated
+by a semi-colon ;
+
+
+As many shaders can be remapped as needed by using the key. However, if more
+than one shader is remapped in a map, each one must have a unique identifier …
+either a number or a letter after the Key word, as shown by “vertexremapshaderX”,
+where X is a number or any character set. Examples, vertexremapshader01,
+vertexremapshader02, vertexremapshaderA, vertexremapshaderB,
+vertexremapshadermpterra2_1, etc.
+
+
+In mpterra2, the key/value pair for one of the replaced shaders looked like
+this:
+
+The Light Grid Size (as noted earlier) is the map that the Q3A engine uses to
+light entities. It’s what gives the illusion of players moving in and out of
+shadowed areas on the game levels. We decided, that for large terrain maps, it
+should not be as detailed (and therefore nowhere near as large) as we had done
+for smaller, interior maps. After experimenting with placing controls for the
+grid size on the bsp command line, we finally settled on putting the command
+information in the map’s world spawn. In that way, the grid size could be
+easily tailored to the individual map.
+
+
+
+
+
+Key/value pair:
+
+
+Key:
+
+ gridsize
+
+
+
+Value:
+
+ X Y Z
+
+
+
+
+
+
+
+
+Note that the values are the dimensions of those coordinates. It’s best to
+keep them to power of 2 values. The default value for the gridsize (if left
+unchanged) is 64 64 128. Setting higher x y and z values reduces the size of the
+light grid data in both the .bsp file and in the Q3A game, but it also creates
+less accurate dynamic model lighting.
+
+
+Errors
+
+
+Definitely set the x y and z values higher if you get:
In Q3:TA, there are two “terrain” textures in the common shader script.
+One handles all the uses of terrain where the designer does not want “dust”
+to rise up as the player jumps onto the terrain (common/terrain). The second
+(common/terrain2) has an enable_dust surface parameter. The terrain texture
+should be applied to all visible (in game) surfaces of the terrain entity.
+
Q3map looks for the word “terrain” in the name of the shader when
+texturing terrain entities. If a shader is used without the word
+"terrain" in it, and it’s not marked as nodraw, q3map will still do
+a planar projection, but using that texture. It will not blend between textures,
+however. This can be used to create hard edge texture transitions, or in cases
+where you want to apply textures manually, and aren’t concerned about
+blending.
+
If the terrain texture is applied to a non-terrain entity brush, the surface
+will not draw. The projected terrain surface textures only work on surfaces that
+are a part of entities with the proper terrain entity keys and values.
The shader is the group or family of related shaders used to texture a
+terrain entity. The shader key/value pair in the entity identifies the
+metashader to be used. The suffix (either “_#” for a root shader or “#to#”
+for a blended shader.
+
For each root shader that you want to blend, you need a blend shader. Note
+that you only need to make the blend once. If you have mpterra2_0to2, you don’t
+need mpterra2_2to0.
+
+
+
Example Terrain Shader
+
+
This was the shader used to map textures on mpterra2 (hence the metashader
+name)
+Special Thanks to Jim Dosé and Jan Paul van Waveren
+for their assistance and review (and making this all work in the first place)
+and the same gratitude to Astrocreep for his review and suggestions for making
+it into something people could understand.
+
The material here is for use in conjunction with the Q3Radiant manual for the
+Quake 3 Engine and presumes familiarity with that tool and game engine. Although
+compiling switches and shader commands are included here, this is not intended
+to be a general update or revision to the Q3Radiant manual
+
+
+
+
diff --git a/install/installs/UFOAIPack/.svn/entries b/install/installs/UFOAIPack/.svn/entries
new file mode 100644
index 0000000..84ce31e
--- /dev/null
+++ b/install/installs/UFOAIPack/.svn/entries
@@ -0,0 +1,34 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/trunk
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2008-06-27T14:38:18.221954Z
+47
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+install
+dir
+
+game
+dir
+
diff --git a/install/installs/UFOAIPack/game/.svn/entries b/install/installs/UFOAIPack/game/.svn/entries
new file mode 100644
index 0000000..c5faa49
--- /dev/null
+++ b/install/installs/UFOAIPack/game/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/trunk/game
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2008-04-12T23:02:26.857012Z
+39
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+synapse.config
+file
+
+
+
+
+2012-04-01T16:52:24.090828Z
+a0fd6cd0b00ef1d140ca72beebc39af0
+2008-04-12T23:02:26.857012Z
+39
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1024
+
+game.xlink
+file
+
+
+
+
+2012-04-01T16:52:24.092828Z
+2d2cb08623164f3cf84410048c126038
+2008-04-12T23:02:26.857012Z
+39
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+511
+
diff --git a/install/installs/UFOAIPack/game/.svn/text-base/game.xlink.svn-base b/install/installs/UFOAIPack/game/.svn/text-base/game.xlink.svn-base
new file mode 100644
index 0000000..963598c
--- /dev/null
+++ b/install/installs/UFOAIPack/game/.svn/text-base/game.xlink.svn-base
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/install/installs/UFOAIPack/game/.svn/text-base/synapse.config.svn-base b/install/installs/UFOAIPack/game/.svn/text-base/synapse.config.svn-base
new file mode 100644
index 0000000..814e51c
--- /dev/null
+++ b/install/installs/UFOAIPack/game/.svn/text-base/synapse.config.svn-base
@@ -0,0 +1,59 @@
+
+
+
+
+
+ tga jpg
+
+
+ pk3
+
+
+ ufoai
+
+
+ mapq2
+
+
+ def
+
+
+ ufoai
+
+
+ md2
+
+
+
+
+ pk3
+
+
+
+
+
+ ufoai
+
+
+ pk3
+
+
+
+
+ ufoai
+
+
+
+
+ ufoai
+
+
+
+
+ ufoai
+
+
+ pk3
+
+
+
diff --git a/install/installs/UFOAIPack/game/game.xlink b/install/installs/UFOAIPack/game/game.xlink
new file mode 100644
index 0000000..963598c
--- /dev/null
+++ b/install/installs/UFOAIPack/game/game.xlink
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/install/installs/UFOAIPack/game/synapse.config b/install/installs/UFOAIPack/game/synapse.config
new file mode 100644
index 0000000..814e51c
--- /dev/null
+++ b/install/installs/UFOAIPack/game/synapse.config
@@ -0,0 +1,59 @@
+
+
+
+
+
+ tga jpg
+
+
+ pk3
+
+
+ ufoai
+
+
+ mapq2
+
+
+ def
+
+
+ ufoai
+
+
+ md2
+
+
+
+
+ pk3
+
+
+
+
+
+ ufoai
+
+
+ pk3
+
+
+
+
+ ufoai
+
+
+
+
+ ufoai
+
+
+
+
+ ufoai
+
+
+ pk3
+
+
+
diff --git a/install/installs/UFOAIPack/install/.svn/entries b/install/installs/UFOAIPack/install/.svn/entries
new file mode 100644
index 0000000..d6257e5
--- /dev/null
+++ b/install/installs/UFOAIPack/install/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/trunk/install
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2008-06-27T14:38:18.221954Z
+47
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+base
+dir
+
diff --git a/install/installs/UFOAIPack/install/base/.svn/entries b/install/installs/UFOAIPack/install/base/.svn/entries
new file mode 100644
index 0000000..341b39f
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/.svn/entries
@@ -0,0 +1,34 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/trunk/install/base
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2008-06-27T14:38:18.221954Z
+47
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+textures
+dir
+
+scripts
+dir
+
diff --git a/install/installs/UFOAIPack/install/base/scripts/.svn/entries b/install/installs/UFOAIPack/install/base/scripts/.svn/entries
new file mode 100644
index 0000000..04408b3
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/.svn/entries
@@ -0,0 +1,198 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/trunk/install/base/scripts
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2008-06-27T14:38:18.221954Z
+47
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+shaderlist.txt
+file
+
+
+
+
+2012-04-01T16:52:23.792811Z
+69aedd81000f50d74a7a4e9b6ba83cfa
+2008-04-08T16:56:07.761640Z
+36
+mattn
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+18
+
+entities.def
+file
+
+
+
+
+2012-04-01T16:52:23.794811Z
+2f9fd9c650eaafd6b1b07001aa8fec7c
+2008-06-27T14:38:18.221954Z
+47
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6476
+
+default_project.proj
+file
+
+
+
+
+2012-04-01T16:52:23.795811Z
+f293fa44e01e65bffeaeaf019e78b52d
+2008-04-08T16:56:07.761640Z
+36
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4378
+
+textures.shader
+file
+
+
+
+
+2012-04-01T16:52:23.923818Z
+d5c32d68f98aba9f48449b178df8d473
+2008-06-27T14:38:18.221954Z
+47
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+514
+
+common.shader
+file
+
+
+
+
+2012-04-01T16:52:23.925818Z
+4320e9cffe3e665c096e02c72df5238d
+2008-04-08T16:56:07.761640Z
+36
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+500
+
diff --git a/install/installs/UFOAIPack/install/base/scripts/.svn/prop-base/shaderlist.txt.svn-base b/install/installs/UFOAIPack/install/base/scripts/.svn/prop-base/shaderlist.txt.svn-base
new file mode 100644
index 0000000..bdbd305
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/.svn/prop-base/shaderlist.txt.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
diff --git a/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/common.shader.svn-base b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/common.shader.svn-base
new file mode 100644
index 0000000..eeb9946
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/common.shader.svn-base
@@ -0,0 +1,47 @@
+textures/tex_common/actorclip
+{
+ qer_trans 0.40
+ surfaceparm playerclip
+}
+
+textures/tex_common/caulk
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/hint
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/nodraw
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+}
+
+textures/tex_common/origin
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/slick
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/stepon
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/trigger
+{
+ qer_trans 0.50
+}
+
+textures/tex_common/weaponclip
+{
+ qer_trans 0.40
+ surfaceparm botclip
+}
diff --git a/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/default_project.proj.svn-base b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/default_project.proj.svn-base
new file mode 100644
index 0000000..8fdbae9
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/default_project.proj.svn-base
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/entities.def.svn-base b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/entities.def.svn-base
new file mode 100644
index 0000000..6f6353f
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/entities.def.svn-base
@@ -0,0 +1,164 @@
+/*QUAKED info_player_start (1 0 0) (-16 -16 -24) (16 16 32)
+Starting point for a player. Only for multiplayer teams.
+"team" the number of the team for this player starting point. 0 is reserved for civilians and critters (use info_civilian_start instead)
+*/
+
+
+/*QUAKED info_human_start (0 1 0) (-16 -16 -24) (16 16 32)
+Starting point for a single player human.
+*/
+
+
+/*QUAKED info_alien_start (0 0 1) (-16 -16 -24) (16 16 32)
+Starting point for a single player alien.
+*/
+
+
+/*QUAKED info_2x2_start (1 1 0) (-32 -32 -24) (32 32 32)
+Starting point for a ugv 2x2 units.
+"team" the number of the team for this player starting point. Only for multiplayer teams.
+*/
+
+
+/*QUAKED info_civilian_start (0 1 1) (-16 -16 -24) (16 16 32)
+Starting point for a civilian.
+*/
+
+
+/*QUAKED misc_model (1 1 0) (-16 -16 -16) (16 16 16) level1 level2 level3 level4 level5 level6 level7 level8 server_solid glow
+Displays a model.
+Set the level flags correctly!
+Use angles [pitch yaw roll] to rotate the model. pitch (up/down [-90 up to 90]), yaw (left/right [0 up to 360]) and roll (fall over)
+"model" arbitrary .md2 file to display
+"angles" direction of the model [pitch yaw roll]
+"angle" direction of the model [yaw]
+"skin" skin number (default 0)
+"frame" frame number (default 0) - use frame or anim - but not both
+"anim" is this an animated model (default empty otherwise fill the animname)
+*/
+
+
+/*QUAKED misc_particle (0 0 1) (-16 -16 -16) (16 16 16) level1 level2 level3 level4 level5 level6 level7 level8 noday
+Creates a particle. Particle properties can be set here with a preceding '-' or '+'.
+'-' property is set before calling the particle init function
+'+' do it afterwards
+noday means that the particle is not shown at the day version of the map. E.g. useful for flare particles around streetlight.
+Wait times are of the format "a b". It spawns particles in random intervals ranging from (a) to (a+b) seconds. If no wait time is specified one particle is created at map start.
+"particle" name of the particle definition
+"wait" wait time
+*/
+
+
+/*QUAKED light (0 1 0) (-8 -8 -8) (8 8 8) day
+Non-displayed light. All lights are for the night version. If you want them to show up in the day version, too - mark the day flag
+"_color" Color for the light RGB
+"light" intensity 0-255
+"target" entity target name (info_null)
+"_cone"
+"origin"
+"angle" Special values: UP -1; DOWN -2;
+*/
+
+/*QUAKED light_spot (0 1 0) (-8 -8 -8) (8 8 8) day
+Non-displayed light. All lights are for the night version. If you want them to show up in the day version, too - mark the day flag
+"_color" Color for the light RGB
+"light" intensity 0-255
+"_cone"
+"origin"
+"angle" Special values: UP -1; DOWN -2;
+*/
+
+/*QUAKED worldspawn (0 0 0) ?
+Only used for the world.
+pitch (up/down [-90 up to 90]), yaw (left/right [0 up to 360])
+"maxteams" max. teams for multiplayer
+"maxlevel" highest selectable level [1-8]
+"light_night" light intensity [e.g. 10 or 100]
+"angles_night" light angle [pitch yaw 0]
+"color_night" light color (RGB) [0.0-1.0]
+"ambient_night" ambient color (RGB) [0.0-1.0]
+"light_day" light intensity [e.g. 10 or 100]
+"angles_day" light angle [pitch yaw 0]
+"color_day" light color (RGB) [0.0-1.0]
+"ambient_day" ambient color (RGB) [0.0-1.0]
+*/
+
+/*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4)
+Used as a positional target for spotlights, etc.
+"targetname" target name
+*/
+
+/*QUAKED info_civilian_target (0.5 0.8 0.1) (-16 -16 -24) (16 16 32)
+Used as a target where civilians try to get in a mission
+"count" The priority of this waypoint - the lower the number, the nearer the end-target
+*/
+
+/*QUAKED misc_sound (0.5 1 0.5) (-8 -8 -8) (8 8 8) level1 level2 level3 level4 level5 level6 level7 level8
+Used to play ambient sounds (looped sounds)
+"noise" sound file name relative to sound/ambience
+"volume" 0 - 128
+*/
+
+/*QUAKED misc_mission (0.1 0.6 0.3) (-16 -16 -16) (16 16 16) level1 level2 level3 level4 level5 level6 level7 level8
+Defines a mission target
+"particle" display a particle
+"time" if set the entity has to be occupied x rounds to win the mission
+"radius" if the entity has to be occupied this defines the radius that is needed
+"health" if set the entity has to be destroyed to win the mission - otherwise is has just to be reached (see time)
+"group" allows you to group mission entities - e.g. you have to occupy them all for x rounds to win the match
+"target" the target that is triggered once the round time was hit
+"message" a message that is show when the mission is completed
+*/
+
+/*QUAKED misc_mission_alien (0.1 0.6 0.3) (-16 -16 -16) (16 16 16) level1 level2 level3 level4 level5 level6 level7 level8
+Defines the alien mission target
+"particle" display a particle
+"time" if set the entity has to be occupied x rounds to win the mission
+"radius" if the entity has to be occupied this defines the radius that is needed
+"health" if set the entity has to be destroyed to win the mission - otherwise is has just to be reached (see time)
+*/
+
+/*QUAKED func_door (0 .5 .8) ? level1 level2 level3 level4 level5 level6 level7 level8 opened
+"angle" determines the opening direction
+"health" if set, door must be shot open
+"group" multipart doors can be grouped to open together
+"speed" movement speed (100 default)
+"wait" wait before returning (3 default, -1 = never return)
+"lip" lip remaining at end of move (8 default)
+*/
+
+/*QUAKED func_group (0 0 0) ?
+Only for editor and terrain convenience.
+"terrain"
+"gensurf"
+"phongshading"
+*/
+
+/*QUAKED func_breakable (0 0 0) ? level1 level2 level3 level4 level5 level6 level7 level8
+"health" damage until destroyed
+"particle" particle id
+"material" material id MAT_GLASS = 0 (default), MAT_METAL = 1, MAT_ELECTRICAL = 2, MAT_WOOD = 3
+*/
+
+/*QUAKED func_rotating (0 0 0) ? level1 level2 level3 level4 level5 level6 level7 level8
+"health" damage until destroyed
+"particle" particle id
+"speed" rotation speed
+"angle" rotate around this angle - pitch = 0, yaw = 1, roll = 2
+*/
+
+/*QUAKED trigger_hurt (0 0 0) ? KILL STUN DAZE
+Any entity that touches this will be hurt. It does dmg points of damage each server frame
+"dmg" default 5 (whole numbers only)
+*/
+
+/*QUAKED trigger_touch (0 0 0) ?
+Any entity that touches this will trigger the use function of the target entity.
+"target" target entity (must have its targetname set to the value given here)
+*/
+
+/*QUAKED misc_item (.3 .3 1) (-16 -16 -16) (16 16 16)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons/assault/assault.md2"
+"item" the item to spawn
+*/
diff --git a/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/shaderlist.txt.svn-base b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/shaderlist.txt.svn-base
new file mode 100644
index 0000000..c3b933b
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/shaderlist.txt.svn-base
@@ -0,0 +1,2 @@
+common
+textures
diff --git a/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/textures.shader.svn-base b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/textures.shader.svn-base
new file mode 100644
index 0000000..5d03d1a
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/.svn/text-base/textures.shader.svn-base
@@ -0,0 +1,44 @@
+textures/tex_mattn/fence
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/grate
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/grate2
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/grate3
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/grate4
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/gully
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/tire
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/tire2
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_material/circle_gray
+{
+ qer_alphafunc gequal 0.5
+}
diff --git a/install/installs/UFOAIPack/install/base/scripts/common.shader b/install/installs/UFOAIPack/install/base/scripts/common.shader
new file mode 100644
index 0000000..eeb9946
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/common.shader
@@ -0,0 +1,47 @@
+textures/tex_common/actorclip
+{
+ qer_trans 0.40
+ surfaceparm playerclip
+}
+
+textures/tex_common/caulk
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/hint
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/nodraw
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+}
+
+textures/tex_common/origin
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/slick
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/stepon
+{
+ qer_trans 0.40
+}
+
+textures/tex_common/trigger
+{
+ qer_trans 0.50
+}
+
+textures/tex_common/weaponclip
+{
+ qer_trans 0.40
+ surfaceparm botclip
+}
diff --git a/install/installs/UFOAIPack/install/base/scripts/default_project.proj b/install/installs/UFOAIPack/install/base/scripts/default_project.proj
new file mode 100644
index 0000000..8fdbae9
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/default_project.proj
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/UFOAIPack/install/base/scripts/entities.def b/install/installs/UFOAIPack/install/base/scripts/entities.def
new file mode 100644
index 0000000..6f6353f
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/entities.def
@@ -0,0 +1,164 @@
+/*QUAKED info_player_start (1 0 0) (-16 -16 -24) (16 16 32)
+Starting point for a player. Only for multiplayer teams.
+"team" the number of the team for this player starting point. 0 is reserved for civilians and critters (use info_civilian_start instead)
+*/
+
+
+/*QUAKED info_human_start (0 1 0) (-16 -16 -24) (16 16 32)
+Starting point for a single player human.
+*/
+
+
+/*QUAKED info_alien_start (0 0 1) (-16 -16 -24) (16 16 32)
+Starting point for a single player alien.
+*/
+
+
+/*QUAKED info_2x2_start (1 1 0) (-32 -32 -24) (32 32 32)
+Starting point for a ugv 2x2 units.
+"team" the number of the team for this player starting point. Only for multiplayer teams.
+*/
+
+
+/*QUAKED info_civilian_start (0 1 1) (-16 -16 -24) (16 16 32)
+Starting point for a civilian.
+*/
+
+
+/*QUAKED misc_model (1 1 0) (-16 -16 -16) (16 16 16) level1 level2 level3 level4 level5 level6 level7 level8 server_solid glow
+Displays a model.
+Set the level flags correctly!
+Use angles [pitch yaw roll] to rotate the model. pitch (up/down [-90 up to 90]), yaw (left/right [0 up to 360]) and roll (fall over)
+"model" arbitrary .md2 file to display
+"angles" direction of the model [pitch yaw roll]
+"angle" direction of the model [yaw]
+"skin" skin number (default 0)
+"frame" frame number (default 0) - use frame or anim - but not both
+"anim" is this an animated model (default empty otherwise fill the animname)
+*/
+
+
+/*QUAKED misc_particle (0 0 1) (-16 -16 -16) (16 16 16) level1 level2 level3 level4 level5 level6 level7 level8 noday
+Creates a particle. Particle properties can be set here with a preceding '-' or '+'.
+'-' property is set before calling the particle init function
+'+' do it afterwards
+noday means that the particle is not shown at the day version of the map. E.g. useful for flare particles around streetlight.
+Wait times are of the format "a b". It spawns particles in random intervals ranging from (a) to (a+b) seconds. If no wait time is specified one particle is created at map start.
+"particle" name of the particle definition
+"wait" wait time
+*/
+
+
+/*QUAKED light (0 1 0) (-8 -8 -8) (8 8 8) day
+Non-displayed light. All lights are for the night version. If you want them to show up in the day version, too - mark the day flag
+"_color" Color for the light RGB
+"light" intensity 0-255
+"target" entity target name (info_null)
+"_cone"
+"origin"
+"angle" Special values: UP -1; DOWN -2;
+*/
+
+/*QUAKED light_spot (0 1 0) (-8 -8 -8) (8 8 8) day
+Non-displayed light. All lights are for the night version. If you want them to show up in the day version, too - mark the day flag
+"_color" Color for the light RGB
+"light" intensity 0-255
+"_cone"
+"origin"
+"angle" Special values: UP -1; DOWN -2;
+*/
+
+/*QUAKED worldspawn (0 0 0) ?
+Only used for the world.
+pitch (up/down [-90 up to 90]), yaw (left/right [0 up to 360])
+"maxteams" max. teams for multiplayer
+"maxlevel" highest selectable level [1-8]
+"light_night" light intensity [e.g. 10 or 100]
+"angles_night" light angle [pitch yaw 0]
+"color_night" light color (RGB) [0.0-1.0]
+"ambient_night" ambient color (RGB) [0.0-1.0]
+"light_day" light intensity [e.g. 10 or 100]
+"angles_day" light angle [pitch yaw 0]
+"color_day" light color (RGB) [0.0-1.0]
+"ambient_day" ambient color (RGB) [0.0-1.0]
+*/
+
+/*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4)
+Used as a positional target for spotlights, etc.
+"targetname" target name
+*/
+
+/*QUAKED info_civilian_target (0.5 0.8 0.1) (-16 -16 -24) (16 16 32)
+Used as a target where civilians try to get in a mission
+"count" The priority of this waypoint - the lower the number, the nearer the end-target
+*/
+
+/*QUAKED misc_sound (0.5 1 0.5) (-8 -8 -8) (8 8 8) level1 level2 level3 level4 level5 level6 level7 level8
+Used to play ambient sounds (looped sounds)
+"noise" sound file name relative to sound/ambience
+"volume" 0 - 128
+*/
+
+/*QUAKED misc_mission (0.1 0.6 0.3) (-16 -16 -16) (16 16 16) level1 level2 level3 level4 level5 level6 level7 level8
+Defines a mission target
+"particle" display a particle
+"time" if set the entity has to be occupied x rounds to win the mission
+"radius" if the entity has to be occupied this defines the radius that is needed
+"health" if set the entity has to be destroyed to win the mission - otherwise is has just to be reached (see time)
+"group" allows you to group mission entities - e.g. you have to occupy them all for x rounds to win the match
+"target" the target that is triggered once the round time was hit
+"message" a message that is show when the mission is completed
+*/
+
+/*QUAKED misc_mission_alien (0.1 0.6 0.3) (-16 -16 -16) (16 16 16) level1 level2 level3 level4 level5 level6 level7 level8
+Defines the alien mission target
+"particle" display a particle
+"time" if set the entity has to be occupied x rounds to win the mission
+"radius" if the entity has to be occupied this defines the radius that is needed
+"health" if set the entity has to be destroyed to win the mission - otherwise is has just to be reached (see time)
+*/
+
+/*QUAKED func_door (0 .5 .8) ? level1 level2 level3 level4 level5 level6 level7 level8 opened
+"angle" determines the opening direction
+"health" if set, door must be shot open
+"group" multipart doors can be grouped to open together
+"speed" movement speed (100 default)
+"wait" wait before returning (3 default, -1 = never return)
+"lip" lip remaining at end of move (8 default)
+*/
+
+/*QUAKED func_group (0 0 0) ?
+Only for editor and terrain convenience.
+"terrain"
+"gensurf"
+"phongshading"
+*/
+
+/*QUAKED func_breakable (0 0 0) ? level1 level2 level3 level4 level5 level6 level7 level8
+"health" damage until destroyed
+"particle" particle id
+"material" material id MAT_GLASS = 0 (default), MAT_METAL = 1, MAT_ELECTRICAL = 2, MAT_WOOD = 3
+*/
+
+/*QUAKED func_rotating (0 0 0) ? level1 level2 level3 level4 level5 level6 level7 level8
+"health" damage until destroyed
+"particle" particle id
+"speed" rotation speed
+"angle" rotate around this angle - pitch = 0, yaw = 1, roll = 2
+*/
+
+/*QUAKED trigger_hurt (0 0 0) ? KILL STUN DAZE
+Any entity that touches this will be hurt. It does dmg points of damage each server frame
+"dmg" default 5 (whole numbers only)
+*/
+
+/*QUAKED trigger_touch (0 0 0) ?
+Any entity that touches this will trigger the use function of the target entity.
+"target" target entity (must have its targetname set to the value given here)
+*/
+
+/*QUAKED misc_item (.3 .3 1) (-16 -16 -16) (16 16 16)
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons/assault/assault.md2"
+"item" the item to spawn
+*/
diff --git a/install/installs/UFOAIPack/install/base/scripts/shaderlist.txt b/install/installs/UFOAIPack/install/base/scripts/shaderlist.txt
new file mode 100644
index 0000000..c3b933b
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/shaderlist.txt
@@ -0,0 +1,2 @@
+common
+textures
diff --git a/install/installs/UFOAIPack/install/base/scripts/textures.shader b/install/installs/UFOAIPack/install/base/scripts/textures.shader
new file mode 100644
index 0000000..5d03d1a
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/scripts/textures.shader
@@ -0,0 +1,44 @@
+textures/tex_mattn/fence
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/grate
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/grate2
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/grate3
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/grate4
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/gully
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/tire
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_mattn/tire2
+{
+ qer_alphafunc gequal 0.5
+}
+
+textures/tex_material/circle_gray
+{
+ qer_alphafunc gequal 0.5
+}
diff --git a/install/installs/UFOAIPack/install/base/textures/.svn/entries b/install/installs/UFOAIPack/install/base/textures/.svn/entries
new file mode 100644
index 0000000..ca4a305
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/textures/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/trunk/install/base/textures
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2008-04-08T16:56:07.761640Z
+36
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+radiant
+dir
+
diff --git a/install/installs/UFOAIPack/install/base/textures/radiant/.svn/entries b/install/installs/UFOAIPack/install/base/textures/radiant/.svn/entries
new file mode 100644
index 0000000..41b7485
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/textures/radiant/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/trunk/install/base/textures/radiant
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2008-04-08T16:56:07.761640Z
+36
+mattn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+notex.tga
+file
+
+
+
+
+2012-04-01T16:52:23.446791Z
+16de2fa54c8e431e8b3e58bbea0b98ca
+2008-04-08T16:56:07.761640Z
+36
+mattn
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1583
+
diff --git a/install/installs/UFOAIPack/install/base/textures/radiant/.svn/prop-base/notex.tga.svn-base b/install/installs/UFOAIPack/install/base/textures/radiant/.svn/prop-base/notex.tga.svn-base
new file mode 100644
index 0000000..c7caa91
--- /dev/null
+++ b/install/installs/UFOAIPack/install/base/textures/radiant/.svn/prop-base/notex.tga.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 11
+image/x-tga
+END
diff --git a/install/installs/UFOAIPack/install/base/textures/radiant/.svn/text-base/notex.tga.svn-base b/install/installs/UFOAIPack/install/base/textures/radiant/.svn/text-base/notex.tga.svn-base
new file mode 100644
index 0000000..07f1a23
Binary files /dev/null and b/install/installs/UFOAIPack/install/base/textures/radiant/.svn/text-base/notex.tga.svn-base differ
diff --git a/install/installs/UFOAIPack/install/base/textures/radiant/notex.tga b/install/installs/UFOAIPack/install/base/textures/radiant/notex.tga
new file mode 100644
index 0000000..07f1a23
Binary files /dev/null and b/install/installs/UFOAIPack/install/base/textures/radiant/notex.tga differ
diff --git a/install/installs/UrTPack/.svn/entries b/install/installs/UrTPack/.svn/entries
new file mode 100644
index 0000000..67858ea
--- /dev/null
+++ b/install/installs/UrTPack/.svn/entries
@@ -0,0 +1,34 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UrTPack/trunk
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2010-12-13T04:56:16.711566Z
+63
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+install
+dir
+
+game
+dir
+
diff --git a/install/installs/UrTPack/game/.svn/entries b/install/installs/UrTPack/game/.svn/entries
new file mode 100644
index 0000000..08d5b8a
--- /dev/null
+++ b/install/installs/UrTPack/game/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UrTPack/trunk/game
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2010-12-13T04:56:16.711566Z
+63
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+synapse.config
+file
+
+
+
+
+2012-04-01T16:52:22.111715Z
+cc185a69f20bf460ab5618d80825f503
+2008-04-12T23:02:29.801275Z
+40
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1045
+
+game.xlink
+file
+
+
+
+
+2012-04-01T16:52:22.113715Z
+f652ac05b73be959e321c1953b186698
+2010-12-13T04:56:16.711566Z
+63
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+212
+
diff --git a/install/installs/UrTPack/game/.svn/text-base/game.xlink.svn-base b/install/installs/UrTPack/game/.svn/text-base/game.xlink.svn-base
new file mode 100644
index 0000000..cdfb154
--- /dev/null
+++ b/install/installs/UrTPack/game/.svn/text-base/game.xlink.svn-base
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/install/installs/UrTPack/game/.svn/text-base/synapse.config.svn-base b/install/installs/UrTPack/game/.svn/text-base/synapse.config.svn-base
new file mode 100644
index 0000000..ff1199e
--- /dev/null
+++ b/install/installs/UrTPack/game/.svn/text-base/synapse.config.svn-base
@@ -0,0 +1,56 @@
+
+
+
+
+
+ tga jpg
+
+
+ pk3
+
+
+ quake3
+
+
+ mapq3
+
+
+ def
+
+
+ quake3
+
+
+
+
+ pk3
+
+
+
+
+
+ quake3
+
+
+ pk3
+
+
+
+
+ quake3
+
+
+
+
+ quake3
+
+
+
+
+ quake3
+
+
+ pk3
+
+
+
diff --git a/install/installs/UrTPack/game/game.xlink b/install/installs/UrTPack/game/game.xlink
new file mode 100644
index 0000000..cdfb154
--- /dev/null
+++ b/install/installs/UrTPack/game/game.xlink
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/install/installs/UrTPack/game/synapse.config b/install/installs/UrTPack/game/synapse.config
new file mode 100644
index 0000000..ff1199e
--- /dev/null
+++ b/install/installs/UrTPack/game/synapse.config
@@ -0,0 +1,56 @@
+
+
+
+
+
+ tga jpg
+
+
+ pk3
+
+
+ quake3
+
+
+ mapq3
+
+
+ def
+
+
+ quake3
+
+
+
+
+ pk3
+
+
+
+
+
+ quake3
+
+
+ pk3
+
+
+
+
+ quake3
+
+
+
+
+ quake3
+
+
+
+
+ quake3
+
+
+ pk3
+
+
+
diff --git a/install/installs/UrTPack/install/.svn/entries b/install/installs/UrTPack/install/.svn/entries
new file mode 100644
index 0000000..ee0d74a
--- /dev/null
+++ b/install/installs/UrTPack/install/.svn/entries
@@ -0,0 +1,31 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UrTPack/trunk/install
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2010-11-13T23:04:13.354040Z
+62
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+q3ut4
+dir
+
diff --git a/install/installs/UrTPack/install/q3ut4/.svn/entries b/install/installs/UrTPack/install/q3ut4/.svn/entries
new file mode 100644
index 0000000..3a9460e
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/.svn/entries
@@ -0,0 +1,65 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UrTPack/trunk/install/q3ut4
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2010-11-13T23:04:13.354040Z
+62
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+scripts
+dir
+
+common-spog.pk3
+file
+
+
+
+
+2012-04-01T16:52:21.983707Z
+701fbd19e1e21c7ed16813bd873ddd80
+2008-02-25T04:16:05.872914Z
+29
+timo
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+28724
+
diff --git a/install/installs/UrTPack/install/q3ut4/.svn/prop-base/common-spog.pk3.svn-base b/install/installs/UrTPack/install/q3ut4/.svn/prop-base/common-spog.pk3.svn-base
new file mode 100644
index 0000000..5e9587e
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/.svn/prop-base/common-spog.pk3.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
diff --git a/install/installs/UrTPack/install/q3ut4/.svn/text-base/common-spog.pk3.svn-base b/install/installs/UrTPack/install/q3ut4/.svn/text-base/common-spog.pk3.svn-base
new file mode 100644
index 0000000..3696bbb
Binary files /dev/null and b/install/installs/UrTPack/install/q3ut4/.svn/text-base/common-spog.pk3.svn-base differ
diff --git a/install/installs/UrTPack/install/q3ut4/common-spog.pk3 b/install/installs/UrTPack/install/q3ut4/common-spog.pk3
new file mode 100644
index 0000000..3696bbb
Binary files /dev/null and b/install/installs/UrTPack/install/q3ut4/common-spog.pk3 differ
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/.svn/entries b/install/installs/UrTPack/install/q3ut4/scripts/.svn/entries
new file mode 100644
index 0000000..d4c2ca9
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/.svn/entries
@@ -0,0 +1,198 @@
+10
+
+dir
+66
+svn://svn.icculus.org/gtkradiant-gamepacks/UrTPack/trunk/install/q3ut4/scripts
+svn://svn.icculus.org/gtkradiant-gamepacks
+
+
+
+2010-11-13T23:04:13.354040Z
+62
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8a3a26a2-13c4-0310-b231-cf6edde360e5
+
+shaderlist.txt
+file
+
+
+
+
+2012-04-01T16:52:21.300668Z
+bcd31508b9bb05f51bb22b367e05548a
+2010-11-13T23:04:13.354040Z
+62
+rambetter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1382
+
+entities.def
+file
+
+
+
+
+2012-04-01T16:52:21.303668Z
+b86083ec3cc3c2510eee738b0b8ed5e0
+2008-02-28T02:41:10.414863Z
+31
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+139167
+
+urbanterror.def
+file
+
+
+
+
+2012-04-01T16:52:21.304668Z
+cd2ed0b20a912aac0ad3377689a5789d
+2008-02-28T02:41:10.414863Z
+31
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+26331
+
+default_project.proj
+file
+
+
+
+
+2012-04-01T16:52:21.948705Z
+41ffbae04c2afc49a0717704c8f64c95
+2008-03-02T21:36:00.138753Z
+33
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6452
+
+common.shader
+file
+
+
+
+
+2012-04-01T16:52:21.949705Z
+59dee7ed6e9c6fe07f8e1770c5141d3a
+2008-04-20T19:24:12.107896Z
+42
+timo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5299
+
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/common.shader.svn-base b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/common.shader.svn-base
new file mode 100644
index 0000000..1cd1fe4
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/common.shader.svn-base
@@ -0,0 +1,321 @@
+
+textures/common/areaportal
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm structural
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm areaportal
+}
+
+textures/common/caulk
+{
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+}
+
+textures/common/clip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm playerclip
+}
+
+textures/common/clusterportal
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm clusterportal
+}
+
+textures/common/cushion
+{
+ qer_nocarve
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nodamage
+}
+
+textures/common/donotenter
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm donotenter
+}
+
+
+// never used
+//
+//textures/common/energypad
+//{
+// qer_editorimage textures/sfx/bluegoal.tga
+// surfaceparm nolightmap
+// cull twosided
+// {
+// map textures//bluegoal.tga
+// blendFunc GL_ONE GL_SRC_ALPHA
+// tcGen environment
+// tcMod turb 0 0.25 0 0.05
+// }
+//}
+
+textures/common/full_clip // silly shader, use weapclip instead
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm playerclip
+}
+
+textures/common/hint // should NOT use surfaceparm hint.. strange but true
+{
+ qer_nocarve
+ qer_trans 0.30
+ surfaceparm nodraw
+ surfaceparm nonsolid
+ surfaceparm structural
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm hint // ydnar: yes it should.
+}
+
+textures/common/invisible // solid, transparent polygons, casts shadows
+{
+ surfaceparm nolightmap
+ {
+ map textures/common/invisible.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+textures/common/mirror1
+{
+ qer_editorimage textures/common/mirror1.tga
+ surfaceparm nolightmap
+ portal
+
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+
+
+
+}
+
+textures/common/mirror2
+{
+ qer_editorimage textures/common/qer_mirror.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+ {
+ map textures/sfx/mirror.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ }
+
+}
+
+textures/common/missileclip
+{
+ qer_trans 0.40
+ surfaceparm nodamage
+ surfaceparm nomarks
+ surfaceparm nodraw
+ //surfaceparm nonsolid
+ surfaceparm playerclip
+ surfaceparm trans
+}
+
+textures/common/nodraw
+{
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+}
+
+textures/common/nodrawnonsolid
+{
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ surfaceparm nodraw
+}
+
+textures/common/nodrop
+{
+ qer_nocarve
+ qer_trans 0.5
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nodrop
+}
+
+
+textures/common/noimpact
+{
+ qer_editorimage textures/common/nolightmap.tga
+ surfaceparm noimpact
+}
+
+textures/common/nolightmap
+{
+ surfaceparm nolightmap
+}
+
+textures/common/origin
+{
+ qer_nocarve
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm origin
+}
+
+textures/common/portal
+{
+ qer_editorimage textures/common/qer_portal.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ tcMod turb 0 0.25 0 0.05
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+
+ }
+}
+
+textures/common/slick
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+ surfaceparm trans
+ surfaceparm slick
+}
+
+textures/common/terrain
+{
+ q3map_terrain
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+}
+
+textures/common/terrain2
+{
+ q3map_terrain
+ qer_editorimage textures/common/terrain.tga
+ surfaceparm dust
+ surfaceparm nodraw
+ surfaceparm nomarks
+ surfaceparm nolightmap
+}
+
+textures/common/timportal
+{
+ qer_editorimage textures/common/qer_portal.tga
+ portal
+ surfaceparm nolightmap
+ {
+ map textures/common/portal.tga
+ tcMod turb 0 0.25 0 0.05
+ blendFunc GL_ONE GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/common/trigger
+{
+ qer_trans 0.50
+ qer_nocarve
+ surfaceparm nodraw
+}
+
+textures/common/weapclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+}
+
+textures/common/metalclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm playerclip
+ surfaceparm metalsteps
+}
+
+textures/common/botclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm botclip
+}
+
+//
+// ydnar q3map lightgrid bounds
+//
+// the min/max bounds of brushes with this shader in a map
+// will define the bounds of the map's lightgrid (model lighting)
+// note: make it as small as possible around player space
+// to minimize bsp size and compile time
+//
+
+textures/common/lightgrid
+{
+ qer_trans 0.5
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm detail
+ surfaceparm nomarks
+ surfaceparm trans
+ surfaceparm lightgrid
+}
+
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/default_project.proj.svn-base b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/default_project.proj.svn-base
new file mode 100644
index 0000000..d43aa7a
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/default_project.proj.svn-base
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/entities.def.svn-base b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/entities.def.svn-base
new file mode 100644
index 0000000..ed7260c
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/entities.def.svn-base
@@ -0,0 +1,1747 @@
+// Quake3 Arena entity definition file for Q3Radiant
+// Based on draft by Suicide 20 7.30.99 and inolen 9-3-99
+// Upgraded by Eutectic: eutectic@ritualistic.com
+// (visible models added by raYGunn - paths provided by Suicide 20)
+// (terrain information added to func_group entity by Paul Jaquays)
+// Q3Map2 entitys/keys added by ydnar
+// Version: 1.6
+// Last updated: 2003-11-28
+
+//=============================================================================
+
+// Q3Map2 entities
+
+//=============================================================================
+
+/*QUAKED _decal (0 1.0 0) ?
+-------- KEYS --------
+"target" : the name of the entity targetted at for projection
+-------- SPAWNFLAGS --------
+(none)
+-------- NOTES --------
+Compiler-only entity that specifies a decal to be projected. Should contain 1 or more patch meshes (curves) and target an info_null entity. The distance between the center of the _decal entity and the target is the axis and distance of projection.
+*/
+
+/*QUAKED _skybox (0.77 0.88 1.0) (-4 -4 -4) (4 4 4)
+-------- KEYS --------
+"angle" : rotation angle of the sky surfaces.
+"angles" : Individual control of PITCH, YAW, and ROLL (default 0 0 0).
+"_scale" : scaling factor (default 64), good values are between 50 and 300, depending on the map.
+-------- SPAWNFLAGS --------
+(none)
+-------- NOTES --------
+Compiler-only entity that specifies a the origin of a skybox (a wholly contained, seperate area of the map), similar to some games' portal skies. When compiled with Q3Map2, the skybox surfaces will be visible from any place where sky is normally visible. It will cast shadows on the normal parts of the map, and can be used with cloud layers and other effects.
+*/
+
+
+//=============================================================================
+
+AMMO_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED ammo_bfg (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+BFG ammo. Gives the player 15 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 15).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/bfgam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_bullets (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Machine Gun ammo. Gives the player 50 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/machinegunam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_cells (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Plasma Gun ammo. Gives the player 30 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/plasmaam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_grenades (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Grenade Launcher ammo. Gives the player 5 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/grenadeam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_lightning (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Lightning Gun ammo. Gives the player 60 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 60).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/lightningam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_rockets (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Rocket Launcher ammo. Gives the player 5 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/rocketam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_shells (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Shotgun ammo. Gives the player 10 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/shotgunam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_slugs (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Railgun ammo. Gives the player 10 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/railgunam.md3"*/
+
+//=============================================================================
+
+FUNC_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED func_bobbing (0 .5 .8) ? X_AXIS Y_AXIS
+Solid entity that oscillates back and forth in a linear motion. By default, it will have an amount of displacement in either direction equal to the dimension of the brush in the axis in which it's bobbing. Entity bobs on the Z axis (up-down) by default. It can also emit sound if the "noise" key is set. Will crush the player when blocked.
+-------- KEYS --------
+speed : amount of time in seconds for one complete oscillation cycle (default 4).
+height : sets the amount of travel of the oscillation movement (default 32).
+phase : sets the start offset of the oscillation cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav - See Notes).
+model2 : path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
+origin : alternate method of setting XYZ origin of sound and .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+X_AXIS : entity will bob along the X axis.
+Y_AXIS : entity will bob along the Y axis.
+-------- NOTES --------
+In order for the sound to be emitted from the entity, it is recommended to include a brush with an origin shader at its center, otherwise the sound will not follow the entity as it moves. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_button (0 .5 .8) ?
+When a button is touched by a player, it moves in the direction set by the "angle" key, triggers all its targets, stays pressed by an amount of time set by the "wait" key, then returns to it's original position where it can be operated again.
+-------- KEYS --------
+angle : determines the direction in which the button will move (up = -1, down = -2).
+target : all entities with a matching targetname will be triggered.
+speed : speed of button's displacement (default 40).
+wait : number of seconds button stays pressed (default 1, -1 = return immediately).
+lip : lip remaining at end of move (default 4 units).
+health : (default 0) if set to any non-zero value, the button must take damage (any amount) to activate.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_door (0 .5 .8) ? START_OPEN - CRUSHER
+Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted to it.
+-------- KEYS --------
+angle : determines the opening direction of door (up = -1, down = -2).
+speed : determines how fast the door moves (default 100).
+wait : number of seconds before door returns (default 2, -1 = return immediately)
+lip : lip remaining at end of move (default 8)
+targetname : if set, a func_button or trigger is required to activate the door.
+health : (default 0) if set to any non-zero value, the button must take damage (any amount) to activate.
+dmg : damage to inflict on player when he blocks operation of door (default 4). Door will reverse direction when blocked unless CRUSHER spawnflag is set.
+team: assign the same team name to multiple doors that should operate together (see Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+START_OPEN : the door will spawn in the open state and operate in reverse.
+CRUSHER : door will not reverse direction when blocked and will keep damaging player until he dies or gets out of the way.
+-------- NOTES --------
+Unlike in Quake 2, doors that touch are NOT automatically teamed. If you want doors to operate together, you have to team them manually by assigning the same team name to all of them. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_group (0 .5 .8) ?
+This is not an entity as such. It is strictly an editor utility to group world brushes and patches together for convenience (selecting, moving, copying, etc). You cannot group entities with this.
+-------- OLD TERRAIN KEYS (note: obsolete with Q3Map2) --------
+alphamap : this is the path/name for the art file used to guide the mapping of textures on the terrain surface.
+layers : this integer value is the number unique root shaders that will be use on the terrain.
+shader : this is the path to the metashader used to assign textures to the terrain entity.
+terrain : this is an on/off flag. When set to 1, the entity becomes a terrain entity. Note: unecessary when compiling with Q3Map2. See Q3Map2 keys.
+-------- Q3MAP2 KEYS --------
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+The TAB key can be used to flip through the component pieces of a selected func_group entity, isolating individual components. To make a func_group into a terrain entity, refer to the Terrain Construction documentation.*/
+
+//=============================================================================
+
+/*QUAKED func_pendulum (0 .5 .8) ?
+Solid entity that describes a pendulum back and forth rotation movement. Rotates on the X axis by default. Pendulum frequency is a physical constant based on the length of the beam and gravity. Blocking the pendulum instantly kills a player.
+-------- KEYS --------
+angle : angle offset of axis of rotation from default X axis (default 0).
+speed : angle of swing arc in either direction from initial position (default 30).
+phase : sets the start offset of the swinging cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
+model2 : path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
+origin : alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. Pendulum will rotate along the X axis by default. Very crude operation: pendulum cannot rotate along Z axis, the speed of swing (frequency) is not adjustable. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_plat (0 .5 .8) ?
+Rising platform the player can ride to reach higher places. Plats must always be drawn in the raised position, so they will operate and be lighted correctly but they spawn in the lowered position. The plat will stay in the raised position until the player steps off. There are no proper sounds for this entity, only beep noises. It will spawn in the game and work properly but it sounds silly (see Notes).
+-------- KEYS --------
+speed : determines how fast the plat moves (default 150).
+lip : lip remaining at end of move (default 16). Has no effect if "height" is set.
+height : if set, this will determine the total amount of vertical travel of the plat.
+dmg : damage to inflict on player when he blocks operation of plat (default 4). Plat will reverse direction when blocked.
+targetname : if set, the trigger that points to this will raise the plat each time it fires. The plat raises and comes back down a second later if no player is on it.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+By default, the total amount of vertical travel of a platform is implicitly determined by the overall vertical size of the brushes of which it's made minus the lip value. But if the "height" key is used, then the total amount of vertical travel of the plat will be exactly that value regardless of the shape and size of the plat and regardless of the value of the "lip" key. Using the "height" key is the best method for any kind of platforms and the only possible one for thin plats which need to travel vertical distances many times their own thickness. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+There is a way to make plats play proper sounds. Just create a sound\movers\plats folder under baseq3 and put 2 sounds named pt1_strt.wav and pt1_end.wav in it. Those can be the renamed sounds from the Q2 plats or renamed copies of the sound\movers\doors sounds you can extract from your pak0.pk3 file or new custom sounds if you're up to it. Thanks to Fragzilla for the tip.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_rotating (0 .5 .8) ? - - X_AXIS Y_AXIS
+Solid entity that rotates continuously. Rotates on the Z axis by default and requires an origin brush. It will always start on in the game and is not targetable.
+-------- KEYS --------
+speed : determines how fast entity rotates (default 100).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
+model2 : path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
+origin : alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+X_AXIS : entity will rotate along the X axis.
+Y_AXIS : entity will rotate along the Y axis.
+-------- NOTES --------
+You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. It will rotate along the Z axis by default. You can check either the X_AXIS or Y_AXIS box to change that. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_static (0 .5 .8) ?
+Static non-solid bspmodel. Can be used for conditional walls and models.
+-------- KEYS --------
+model2 : path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+targetname : NOT SUPPORTED BY RENDERER - if set, a func_button or trigger can make entity disappear from the game (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. If a model is included with a targeted func_static, the brush(es) of the entity will be removed from the game but the .md3 model won't: it will automatically be moved to the (0 0 0) world origin so you should NOT include an .md3 model to a targeted func_static.
+
+Because the map has only a single bot navigation file, func_static's cannot be used to make significant changes in game play flow between differing game types.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_timer (0 .5 .8) (-8 -8 -8) (8 8 8) START_ON
+Time delay trigger that will continuously fire its targets after a preset time delay. The time delay can also be randomized. When triggered, the timer will toggle on/off.
+-------- KEYS --------
+wait : delay in seconds between each triggering of its targets (default 1).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+target : this points to the entities to trigger.
+targetname : a func_button or trigger that points to this will toggle the timer on/off when activated.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+START_ON : timer will start on in the game and continuously fire its targets.
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED func_train (0 .5 .8) ?
+Trains are moving solids that follow a string of path_corner entities. Trains in Q3A are very basic, they also require an origin brush (see Notes).
+-------- KEYS --------
+speed : speed of displacement of train (default 100 or overridden by speed value of path).
+target : this points to the first path_corner of the path which is also the spawn location of the train's origin.
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of the train's brush(es) and .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+1. Trains always start on in the game.
+2. Trains do not damage the played when blocked.
+3. Trains cannot emit sound.
+4. Trains are not triggerable or toggle-able.
+5. Trains cannot be block-stopped just by getting in their way, the player must be wedged between the train and another obstacle to block it.
+
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+HOLDABLE_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED holdable_medkit (.7 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Medkit that can be picked up and used later. Brings the player's health back to 100 when used. Player can only carry one holdable item at a time.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/holdable/medkit.md3"*/
+
+//=============================================================================
+
+/*QUAKED holdable_teleporter (.7 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Teleporter item that can be picked up and used later. Teleports the player to a random player spawn point when used. Player can only carry one holdable item at a time.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/holdable/teleporter.md3"*/
+
+//=============================================================================
+
+INFO_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED info_camp (0 .5 0) (-8 -8 -8) (8 8 8)
+This atttracts bots which have a camping preference in their AI characteristics. It should be placed at least 32 units away from any brush surface.
+-------- KEYS --------
+range : number of units that the bot can move away from camp entity while camping on it.
+weight : number that is compared against the weight assigned to all the other camp spots in the map to determine if a bot chooses to camp there. The value is normalized against all other weight values.
+-------- NOTES --------
+Examples of bots which have a high camping preference are: Razor, Tank Jr., Grunt, Patriot and Doom. Examples of bots which have a low camping preference are: Klesk, Mynx, Sarge, Keel and Xaero.*/
+
+//=============================================================================
+
+/*QUAKED info_notnull (0 .5 0) (-8 -8 -8) (8 8 8)
+Used as a positional target for entities that can use directional pointing. A target_position can be used instead of this but was kept in Q3A for legacy purposes.
+-------- KEYS --------
+targetname : must match the target key of entity that uses this for pointing.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED info_null (0 .5 0) (-8 -8 -8) (8 8 8)
+Used as a positional target for light entities to create a spotlight effect. A target_position can be used instead of this but was kept in Q3A for legacy purposes.
+-------- KEYS --------
+targetname : must match the target key of entity that uses this for pointing.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED info_player_deathmatch (1 0 1) (-16 -16 -24) (16 16 32) INITIAL
+Normal player spawning location for Q3A levels.
+-------- KEYS --------
+angle : direction in which player will look when spawning in the game. Does not apply to bots.
+target : this can point at a target_give entity for respawn freebies.
+nobots : when set to 1, bots will never use this spawn point to respawn in the game.
+nohumans : when set to 1, human players will never use this spawn point to respawn in the game.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+INITIAL : makes the spawnpoint the initial place for the player to spawn at the beginning of the game.*/
+
+//=============================================================================
+
+/*QUAKED info_player_intermission (1 0 1) (-16 -16 -16) (16 16 16)
+Camera for intermission screen between matches. This also automatically generates the podium for bot arena matches (see Notes). Can be aimed by setting the "angles" key or targeting an pointing to an aiming entity. Use only one per level.
+-------- KEYS --------
+angles: alternate "pitch, yaw, roll" angles method of aiming intermission camera (default 0 0 0).
+target : point this to an info_notnull or target_position entity to set the camera's pointing angles.
+-------- NOTES --------
+In genuine bot arena matches, the podium for the 1st, 2nd and 3rd place players at the end of the match is generated by this entity. The podium's origin will automatically be located 128 units in the direction of the camera's view and 84 units down from the y height of the view line at that point. It will also always be generated on a level plane regardless of the pointing angle of the camera so if that angle is too steep, part of the podium model might not be visible. Make sure you leave at least 106 units of free space in front of where the camera points to otherwise the podium model won't be visible at all.*/
+
+//=============================================================================
+
+/*QUAKED info_player_start (1 0 0) (-16 -16 -24) (16 16 32)
+Player spawn location. It works in Quake III Arena, but it is not used in the Id maps. Use info_player_deathmatch instead.
+-------- KEYS --------
+angle : direction in which player will look when spawning in the game.
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+//QUAKED info_spectator_start (1 0 0) (-16 -16 -24) (16 16 32)
+//Spectator spawn location. Doesn't appear to work in game. Commented out.
+//-------- KEYS --------
+//notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+//notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+//notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+
+//=============================================================================
+
+ITEM_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED item_armor_body (.6 0 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Red Armor - 100 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/armor_red.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_armor_combat (1 .75 .3) (-16 -16 -16) (16 16 16) SUSPENDED
+Yellow Armor - 50 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/armor_yel.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_armor_shard (0 .7 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Green Armor Shard - 5 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/shard.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_botroam (1 0.5 0) (-8 -8 -8) (8 8 8) SUSPENDED
+Game Function: An invisible entity which attracts a bot to it. Use to move bots to parts of a map that might otherwise not be used (NEW ENTITY).
+-------- KEYS --------
+weight: non-zero floating point value, most often in the range 0 to 400. (Higher values are allowed but keep in mind that the bot should also be attracted to normal items. Don't make the weight value too high.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The item_botroam entity can be used when a bot does not roam the whole level or prefers to go to only specific areas. This (invisible) item can be placed in a map just like regular items. Nobody can actually pick up the item it's only used to attract bots to certain places of the map. The value is the weight of the roam_item is relative to the weight assigned other items in the map (each bot has its own weights). The bot character specific item weights are stored with the bot characters AI files ("botname"_i.c for items and "botname"_w.c for weapons) in the botfiles/bots/ sub-folder in the .pk3 file.*/
+
+//=============================================================================
+
+/*QUAKED item_enviro (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Battle Suit power-up - Gives protection against slime, lava and weapon splash damage. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/enviro.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_flight (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Flight power-up. Lasts 60 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 60).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/flight.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_haste (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Speed power-up. Makes player run at double speed for 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/haste.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health (.8 .8 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Yellow cross bubble - 25 Health. Cannot be picked up over 100 health.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 25).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/medium_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_large (1 0 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Gold cross bubble - 50 Health. Cannot be picked up over 100 health.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/large_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_mega (0 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Blue M bubble - 100 Health. Adds 100 health points to current health up to a maximum of 200.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/mega_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_small (0 1 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Green cross bubble - 5 Health. Can be picked up over 100 health but slowly wears out to 100 afterwards.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/small_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_invis (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Invisibility power-up. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/invis.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_quad (.4 .6 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Quad Damage power-up. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+model="models/powerups/instant/quad.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_regen (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Health Regeneration power-up. This will boost your current health by 5 points every second for a period of up to 30 seconds or up to 200 points whichever comes first. Afterwards, any health points over 100 slowly wears out to 100.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/regen.md3"*/
+
+//=============================================================================
+
+LIGHT ENTITY
+
+//=============================================================================
+
+
+/*QUAKED light (.65 .65 1) (-8 -8 -8) (8 8 8) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT
+Non-displayed point light source. The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights.
+-------- KEYS --------
+_light OR light: overrides the default 300 intensity.
+_color : weighted RGB value of light color (default white - 1.0 1.0 1.0).
+target : Lights pointed at a target will be spotlights.
+radius: overrides the default 64 unit radius of a spotlight at the target point.
+-------- Q3MAP2 KEYS --------
+_sun : Set this key to 1 on a spotlight to make an infinite sun light.
+fade : Fades light attenuation. Only affects linear lights.
+scale : Scales light attentation, from SOF2/JK2. Scales the "light" value.
+-------- SPAWNFLAGS --------
+LINEAR : Use a linear falloff. Default is inverse distance squared (more realistic).
+NOANGLE : Ignore angle attenuation.
+NOGRIDLIGHT : Do not affect the lightgrid (dynamic entity lighting).*/
+
+/*QUAKED lightJunior (0 0.7 0.3) (-6 -6 -6) (6 6 6) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT
+Non-displayed point light source THAT ONLY AFFECTS ENTITIES (lightgrid). The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights.
+-------- KEYS --------
+_light OR light: overrides the default 300 intensity.
+_color : weighted RGB value of light color (default white - 1.0 1.0 1.0).
+target : Lights pointed at a target will be spotlights.
+radius: overrides the default 64 unit radius of a spotlight at the target point.
+-------- Q3MAP2 KEYS --------
+_sun : Set this key to 1 on a spotlight to make an infinite sun light.
+fade : Fades light attenuation. Only affects linear lights.
+scale : Scales light attentation, from SOF2/JK2. Scales the "light" value.
+-------- SPAWNFLAGS --------
+LINEAR : Use a linear falloff. Default is inverse distance squared (more realistic).
+NOANGLE : Ignore angle attenuation.
+NOGRIDLIGHT : Do not affect the lightgrid (dynamic entity lighting). Setting this spawnflag will disable this light entirely.*/
+
+//=============================================================================
+
+MISC_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED misc_model (1 .5 .25) (-16 -16 -16) (16 16 16)
+Generic placeholder for inserting MD3 models in game. Requires compilation of map geometry to be added to level. If the map is compiled with Q3Map2, then ASE, 3DS, OBJ and other model formats are supported.
+-------- KEYS --------
+angle: direction in which model will be oriented.
+model : path/name of model to use (eg: models/mapobjects/teleporter/teleporter.md3).
+-------- Q3MAP2 KEYS --------
+angles : Individual control of PITCH, YAW, and ROLL (default 0 0 0).
+modelscale : Floating-point value used to scale a model up or down (default 1.0).
+modelscale_vec : Floating-point vector used to scale a model's axes individually (default 1.0 1.0 1.0).
+_remap : Used to remap textures/shaders in the model. To remap all shaders to a given shader, use "*;models/mymodel/mytexture". To remap a specific shader, use "models/mymodel/old;models/mymodel/new".
+target : Used to attach the misc_model to a brush entity, where its "targetname" key is the same value.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on this model (if model is using lightmapped shaders) (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+*/
+
+//=============================================================================
+
+/*QUAKED misc_portal_camera (1 .5 .25) (-8 -8 -8) (8 8 8) SLOWROTATE FASTROTATE
+Portal camera. This camera is used to project its view onto a portal surface in the level through the intermediary of a misc_portal_surface entity. Use the "angles" key or target a target_position or info_notnull entity to set the camera's pointing direction.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of the portal camera (default 0 0). Use "roll" key to set roll angle.
+target : point this to a target_position entity to set the camera's pointing direction.
+targetname : a misc_portal_surface portal surface indicator must point to this.
+roll: roll angle of camera. A value of 0 is upside down and 180 is the same as the player's view.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+SLOWROTATE : makes the portal camera rotate slowly along the roll axis.
+FASTROTATE : makes the portal camera rotate faster along the roll axis.
+-------- NOTES --------
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the camera. However, the target_position method is simpler. In both cases, the "roll" key must be used to set the roll angle. If either the SLOWROTATE or FASTROTATE spawnflag is set, then the "roll" value is irrelevant.*/
+
+//=============================================================================
+
+/*QUAKED misc_portal_surface (1 .5 .25) (-8 -8 -8) (8 8 8)
+Portal surface indicator. This will "lock on" the brush face closest to it and identify as a portal. The view displayed on the portal surface is the view of the misc_portal_camera that this entity targets. Also used for mirrors (see Notes).
+-------- KEYS --------
+target : point this to a misc_portal_camera that "sees" the view you want to display on the portal.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+The entity must be no farther than 64 units away from the portal surface to lock onto it. To make a mirror, apply the common/mirror shader to the surface, place this entity near it but don't target a misc_portal_camera.*/
+
+//=============================================================================
+
+/*QUAKED misc_teleporter_dest (1 .5 .25) (-32 -32 -24) (32 32 -16)
+Teleport destination location point for trigger_teleporter entities.
+-------- KEYS --------
+angle : direction in which player will look when teleported.
+targetname : make the trigger_teleporter point to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+PATH_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED path_corner (.5 .3 0) (-8 -8 -8) (8 8 8)
+Path corner entity that func_trains can be made to follow.
+-------- KEYS --------
+target : point to next path_corner in the path.
+targetname : the train following the path or the previous path_corner in the path points to this.
+speed : speed of func_train while moving to the next path corner. This will override the speed value of the train.
+wait : number of seconds func_train will pause on path corner before moving to next path corner (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+Setting the wait key to -1 will not make the train stop on the path corner, it will simply default to 0.*/
+
+//=============================================================================
+
+SHOOTER_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED shooter_grenade (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a grenade each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the grenades.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+/*QUAKED shooter_plasma (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a plasma ball each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the plasma balls.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+/*QUAKED shooter_rocket (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a rocket each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the rockets.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+TARGET_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED target_delay (0 .7 .7) (-8 -8 -8) (8 8 8)
+Time delay trigger intermediary. Like a target_relay, this can only be fired by other triggers which will cause it in turn to fire its own targets.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this points to entities to activate when this entity is triggered.
+wait : delay in seconds from when this gets triggered to when it fires its own targets (default approx. 1).
+delay : same as wait? replaces it? WTF?...I'm confused now.
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED target_give (0 .5 0) (-8 -8 -8) (8 8 8)
+This is used to give ammo, weapons, health or items to the player who activates it.
+-------- KEYS --------
+target : this points to the item(s) to give when activated.
+targetname : activating trigger or spawn entity points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+There are 2 ways to use this entity.
+a) automatically give items to players when they spawn in the game: make a spawn location entity like info_player_deathmatch or CTF respawn points target this entity, then make it target the item(s) to give to the player upon respawn.
+b) give items to players during the game: make a trigger_multiple target this entity, then make it target the item(s) to give to the player when the trigger is touched.*/
+
+//=============================================================================
+
+/*QUAKED target_kill (0 .5 0) (-8 -8 -8) (8 8 8)
+This will kill the player who activates the trigger that fires this target.
+-------- KEYS --------
+targetname : the activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+//QUAKED target_laser (0 .5 0) (-8 -8 -8) (8 8 8) START_ON
+//Generates a red laser beam. I think this can somehow spawn in the game, I saw it once but it's too inconsistent to be usable. Commented out.
+//-------- KEYS --------
+//angles: alternate "pitch, yaw, roll" angles method of aiming laser (default 0 0 0).
+//target : point this to a target_position entity to set the laser's aiming direction.
+//targetname : the activating trigger points to this.
+//notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+//notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+//notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+//-------- SPAWNFLAGS --------
+//START_ON : when set, the laser will start on in the game.
+
+//=============================================================================
+
+/*QUAKED target_location (0 .5 0) (-8 -8 -8) (8 8 8)
+Location marker used by bots and players for team orders and team chat in the course of Teamplay games. The closest target_location in sight is used for the location. If none is in sight, the closest in distance is used.
+-------- KEYS --------
+message : name of the location (text string). Displayed in parentheses in front of all team chat and order messages.
+count : color of the location text displayed in parentheses during team chat. Set to 0-7 for color.
+ 0 : white (default)
+ 1 : red
+ 2 : green
+ 3 : yellow
+ 4 : blue
+ 5 : cyan
+ 6 : magenta
+ 7 : white
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_position (0 .5 0) (-8 -8 -8) (8 8 8)
+Aiming target for entities like light, misc_portal_camera and trigger_push (jump pads) in particular.
+-------- KEYS --------
+targetname : the entity that requires an aiming direction points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+To make a jump pad, place this entity at the highest point of the jump and target it with a trigger_push entity.*/
+
+//=============================================================================
+
+/*QUAKED target_print (0 .5 0) (-8 -8 -8) (8 8 8) REDTEAM BLUETEAM PRIVATE
+This will print a message on the center of the screen when triggered. By default, all the clients will see the message.
+-------- KEYS --------
+message : text string to print on screen.
+targetname : the activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+REDTEAM : only the red team players will see the message.
+BLUETEAM : only the blue team players will see the message.
+PRIVATE : only the player that activates the target will see the message.*/
+
+//=============================================================================
+
+/*QUAKED target_push (.5 .5 .5) (-8 -8 -8) (8 8 8) BOUNCEPAD
+This can be used to create jump pads and launch ramps. The direction of push can be set by the "angles" key or pointing to a target_position or info_notnull entity. Unlike trigger_push, this is NOT client side predicted and must be activated by a trigger.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of push entity (default 0 0). The roll angle does not apply.
+speed : speed of push (default 1000). Has no effect if entity targets an aiming entity.
+targetname : the activating trigger points to this. Push originates from the location of the trigger.
+target : this points to the aiming entity to which the player will jump.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+BOUNCEPAD : if set, trigger will play bounce noise instead of beep noise when activated (recommended).
+-------- NOTES --------
+To make a jump pad or launch ramp, create a trigger_multiple where the jump must originate. Place the target_push directly above the trigger_multiple and place the target_position entity at the highest point of the jump. Target the trigger_multiple to the target_push and target the target_push to the target_position/info_notnull (or set the target_push's "angles" key). Note that the "angle" key also works.*/
+
+//=============================================================================
+
+/*QUAKED target_relay (0 .7 .7) (-8 -8 -8) (8 8 8) RED_ONLY BLUE_ONLY RANDOM
+This can only be activated by other triggers which will cause it in turn to activate its own targets.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this points to entities to activate when this entity is triggered.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+RED_ONLY : only red team players can activate trigger.
+BLUE_ONLY : only red team players can activate trigger.
+RANDOM : one one of the targeted entities will be triggered at random.*/
+
+//=============================================================================
+
+/*QUAKED target_remove_powerups (0 .7 .7) (-8 -8 -8) (8 8 8)
+This takes away any and all item_* type powerups from player except health and armor (holdable_* items are not taken away either). Must be activated by a button or trigger_multiple entity. The player that activates the trigger will lose any powerup(s) currently in his possession.
+-------- KEYS --------
+targetname : activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_score (0 .5 0) (-8 -8 -8) (8 8 8)
+This is used to automatically give frag points to the player who activates this. A spawn location entity like info_player_* or CTF respawn points can target this entity to give points to the player when he spawns in the game. Or a trigger can also be used to activate this. The activator of the trigger will get the points.
+-------- KEYS --------
+targetname : ativating entity points to this.
+count: number of frag points to give to player (default 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_speaker (0 .7 .7) (-8 -8 -8) (8 8 8) LOOPED_ON LOOPED_OFF GLOBAL ACTIVATOR
+Sound generating entity that plays .wav files. Normal non-looping sounds play each time the target_speaker is triggered. Looping sounds can be set to play by themselves (no activating trigger) or be toggled on/off by a trigger.
+-------- KEYS --------
+noise : path/name of .wav file to play (eg. sound/world/growl1.wav - see Notes).
+wait : delay in seconds between each time the sound is played ("random" key must be set - see Notes).
+random : random time variance in seconds added or subtracted from "wait" delay ("wait" key must be set - see Notes).
+targetname : the activating button or trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+LOOPED_ON : sound will loop and initially start on in level (will toggle on/off when triggered).
+LOOPED_OFF : sound will loop and initially start off in level (will toggle on/off when triggered).
+GLOBAL : sound will play full volume throughout the level.
+ACTIVATOR : sound will play only for the player that activated the target.
+-------- NOTES --------
+The path portion value of the "noise" key can be replaced by the implicit folder character "*" for triggered sounds that belong to a particular player model. For example, if you want to create a "bottomless pit" in which the player screams and dies when he falls into, you would place a trigger_multiple over the floor of the pit and target a target_speaker with it. Then, you would set the "noise" key to "*falling1.wav". The * character means the current player model's sound folder. So if your current player model is Visor, * = sound/player/visor, if your current player model is Sarge, * = sound/player/sarge, etc. This cool feature provides an excellent way to create "player-specific" triggered sounds in your levels.
+
+The combination of the "wait" and "random" keys can be used to play non-looping sounds without requiring an activating trigger but both keys must be used together. The value of the "random" key is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED target_teleporter (0 .5 0) (-8 -8 -8) (8 8 8)
+Activating this will teleport players to the location of the targeted misc_teleporter_dest entity. Unlike trigger_teleport, this entity must be activated by a trigger and does NOT allow client prediction of events.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this must point to a misc_teleporter_dest entity.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+TEAM_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED team_CTF_blueflag (0 .2 1) (-16 -16 -16) (16 16 16)
+Blue team flag for CTF games.
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/flags/b_flag.md3"*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_blueplayer (0 .2 1) (-16 -16 -24) (16 16 32)
+Initial Blue team spawning position for CTF games. This is where players spawn when they join the Blue team.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_bluespawn (0 .2 1) (-16 -16 -24) (16 16 32)
+Blue team respawning position for CTF games. This is where Blue team players respawn after they get fragged.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redflag (1 .2 0) (-16 -16 -16) (16 16 16)
+Red team flag for CTF games.
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/flags/r_flag.md3"*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redplayer (1 .2 0) (-16 -16 -24) (16 16 32)
+Initial Red team spawning position for CTF games. This is where players spawn when they join the Red team.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redspawn (0 .2 1) (-16 -16 -24) (16 16 32)
+Red team respawning position for CTF games. This is where Red team players respawn after they get fragged.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+TRIGGER_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED trigger_always (.5 .5 .5) (-8 -8 -8) (8 8 8)
+Automatic trigger. It will fire the entities it targets as soon as it spawns in the game.
+-------- KEYS --------
+target : this points to the entity to activate.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED trigger_hurt (.5 .5 .5) ? START_OFF - SILENT NO_PROTECTION SLOW
+Any player that touches this will be hurt by "dmg" points of damage once per server frame (very fast). A sizzling sound is also played while the player is being hurt.
+-------- KEYS --------
+dmg : number of points of damage inflicted to player per server frame (default 5 - integer values only).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+START_OFF needs to be triggered (toggle) for damage
+SILENT : supresses the sizzling sound while player is being hurt.
+NO_PROTECTION : player will be hurt regardless of protection (see Notes).
+SLOW : changes the damage rate to once per second.
+-------- NOTES --------
+The invulnerability power-up (item_enviro) does not protect the player from damage caused by this entity regardless of whether the NO_PROTECTION spawnflag is set or not. Triggering a trigger_hurt will have no effect if the START_OFF spawnflag is not set. A trigger_hurt always starts on in the game.*/
+
+//=============================================================================
+
+/*QUAKED trigger_multiple (.5 .5 .5) ?
+Variable size repeatable trigger. It will fire the entities it targets when touched by player. Can be made to operate like a trigger_once entity by setting the "wait" key to -1. It can also be activated by another trigger that targets it.
+-------- KEYS --------
+target : this points to the entity to activate.
+targetname : activating trigger points to this.
+wait : time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED trigger_push (.5 .5 .5) ?
+This is used to create jump pads and launch ramps. It MUST point to a target_position or info_notnull entity to work. Unlike target_push, this is client side predicted.
+-------- KEYS --------
+target : this points to the target_position to which the player will jump.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+To make a jump pad or launch ramp, place the target_position/info_notnull entity at the highest point of the jump and target it with this entity.*/
+
+//=============================================================================
+
+/*QUAKED trigger_teleport (.5 .5 .5) ?
+Touching this will teleport players to the location of the targeted misc_teleporter_dest entity. This entity allows client prediction of events.
+-------- KEYS --------
+target : this must point to a misc_teleporter_dest entity.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+WEAPON_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED weapon_bfg (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Big Freaking Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 20).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/bfg/bfg.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_gauntlet (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Gauntlet.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/gauntlet/gauntlet.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_grapplinghook (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Grappling Hook. Spawns in the game and works but is unskinned.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/grapple/grapple.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_grenadelauncher (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Grenade Launcher.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/grenadel/grenadel.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_lightning (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Lightning Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models\weapons2\lightning\lightning.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_machinegun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Machine Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models\weapons2\machinegun\machinegun.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_plasmagun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Plasma gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/plasma/plasma.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_railgun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Railgun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/railgun/railgun.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_rocketlauncher (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Rocket Launcher.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/rocketl/rocketl.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_shotgun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Shotgun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/shotgun/shotgun.md3"*/
+
+//=============================================================================
+
+WORLDSPAWN ENTITY
+
+//=============================================================================
+
+/*QUAKED worldspawn (0 0 0) ?
+Only used for the world.
+-------- KEYS --------
+message : text to print at user logon. Used for name of level.
+music : path/name of looping .wav file used for level's music (eg. music/sonic5.wav).
+_ambient OR ambient : Adds a constant value to overall lighting. Use is not recommended. Ambient light will have a tendency to flatten out variations in light and shade.
+_color : RGB value for ambient light color (default is 0 0 0).
+gravity : gravity of level (default is normal gravity: 800).
+gridsize : granularity of the lightgrid created by q3map. Value is three integers separated by spaces, representing number of units between grid points in X Y Z. Default gridsize value is 128 128 256. Use larger powers of 2 to reduce BSP size and compile time on very large maps.
+_blocksize : q3map always splits the BSP tree along the planes X=_blocksize*n and Y=_blocksize*n. Default _blocksize value is 1024. Increase the blocksize using larger powers of 2 to reduce compile times on very large maps with a low structural brush density.
+-------- Q3MAP2 KEYS --------
+_minlight : Minimum light value, levelwide. Uses the _color key to set color. Does not add unlike ambient.
+_minvertexlight : Minimum vertex lighting, levelwide.
+_mingridlight : Minimum lightgrid (dynamic entity lighting) levelwide.
+_keeplights : Keep light entities in the BSP. Normally stripped out by the BSP process and read from the .map file by the lighting phase.
+_noshadersun : Ignore q3map_sun/sun directives in sky shaders and ONLY use entity sun lights.
+_farplanedist : Limit on how many units the vis phase of compilation can see. Used in combination with level-wide fog, it can help reduce r_speeds on large, open maps.
+_foghull : Shader to use for "fog hull." Foghull shader should be a sky shader. Omit the "textures/" prefix.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in the world. Can be overridden in func_group (or other entities) (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. Overridable in entities.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.*/
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/shaderlist.txt.svn-base b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/shaderlist.txt.svn-base
new file mode 100644
index 0000000..96437de
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/shaderlist.txt.svn-base
@@ -0,0 +1,150 @@
+common
+27s
+abbey
+abbey2
+abbey2ctf
+algiers
+allbsps
+ammo
+austria
+autoclip
+backhoe
+base_floor
+base_light
+base_support
+bbq
+bbq2
+bbq7
+bbqshaders
+bk
+blood
+bloodnew
+bombexp
+box15
+box293
+box337
+br_flowers
+br_flowers_tub
+br_trees
+casa_lamp
+cave
+cel
+codey1
+coinbird01
+cow
+cow2
+crenshaw_vehicles
+crossing
+crystal
+damage
+decal
+defcon_tree
+density
+eagle
+eaglesky
+eagle_water
+egypt
+engine_internal
+flame
+fogcaulk
+foliage
+foliage2
+funstuff
+gfx
+glass
+goggleglass
+gothic_light
+GRtrees
+hair
+harbortown
+jeffladderclip
+kingdom2
+landscapelighting
+LGPT-Models
+lightgrid
+liquid
+liquids
+masheen
+masheen_sky
+mayac
+mayaorganicc
+mayaterc
+mc-uptown
+metals
+mirror
+miscb3
+models
+mrsentry
+newnvg
+nrgizer
+null_beach
+numbers
+oldtruck
+palms
+palmtree
+patio
+prop_bubbles
+qura
+rc_glass
+realworld_light
+riches
+riches_alpha
+riches_alpha_bk
+riches_light
+riches_skies
+riva
+riyadh_lamp
+roman_armor
+sarah
+scopering
+scopes
+sfx
+sggatec
+shminkylights
+sinnifunstuff
+sky
+sky_thingley
+sn_smoke
+streetlamp
+sweetnutz
+sweetnutz3
+swim
+tom
+toxic2sky
+toxiclight
+toxicscripts
+toxicsky
+toxic_water
+true_fence
+tunis
+tunis_sky
+turnpike
+urbanq3_misc2
+urban_terror
+urban_terror_light
+ut4_firingrange
+ut4_suburbs
+utfx
+utplayers
+ut_elgin
+ut_prague
+ut_riyadh
+ut_riyadh_lm
+ut_subway
+ut_subway2
+ut_swim
+ut_trees1
+vdocks
+village2
+watercaulk
+weapon
+weapondecals
+wuxut1
+xguns
+zmultiplant
+zzzzlaberinto2
+zzzzut_casadd
+zzzzz_sanc
+zzz_sanc
+z_newbh
+z_nvg
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/urbanterror.def.svn-base b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/urbanterror.def.svn-base
new file mode 100644
index 0000000..d78faf6
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/.svn/text-base/urbanterror.def.svn-base
@@ -0,0 +1,437 @@
+//=================================================================================
+// Urban Terror beta3.2 entities.def for QERadiant
+//=================================================================================
+
+// This file contains the entities for use in Urban Terror maps. They will only work
+// with the Urban Terror mod.
+
+
+
+//=================================================================================
+// Structural entities (doors, breakables, etc.)
+//=================================================================================
+
+// * * * * * * * *
+
+/*QUAKED func_button (0 .5 .8) ?
+When a button is touched by a player, it moves in the direction set by the "angle" key, triggers all its targets, stays pressed by an amount of time set by the "wait" key, then returns to it's original position where it can be operated again.
+
+-------- KEYS --------
+angle : determines the direction in which the button will move (up = -1, down = -2).
+target : all entities with a matching targetname will be triggered.
+speed : speed of button's displacement (default 40).
+wait : number of seconds button stays pressed (default 1, -1 = return immediately).
+lip : lip remaining at end of move (default 4 units).
+health : if set to a non-zero value, the button must be damaged by "health" amount of points to operate.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+push_sound : sound that gets played when button gets pushed ("none" for nothing, defaults to a elevator Q3 sound)
+
+-------- NOTES --------
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.*/
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_door (0 .5 .8) ? START_OPEN - CRUSHER
+Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted to it.
+
+-------- KEYS --------
+angle : determines the opening direction of door (up = -1, down = -2).
+speed : determines how fast the door moves (default 100).
+wait : number of seconds before door returns (default 2, -1 = return immediately)
+lip : lip remaining at end of move (default 8)
+targetname : if set, a func_button or trigger is required to activate the door.
+health : if set to a non-zero value, the door must be damaged by "health" amount of points to activate (default 0).
+dmg : damage to inflict on player when he blocks operation of door (default 4). Door will reverse direction when blocked unless CRUSHER spawnflag is set.
+team: assign the same team name to multiple doors that should operate together (see Notes).
+only : set to allow only one team to use this entity, used for CTF or other respawn type modes to create spawn rooms. Values: blue or red - Default: anyone
+CloseWhenIdle: when set to 1, the door will close as soon as there are no players in the triggering brush (For CTF Spawn Room doors, SEE NOTES!)
+trigger_only : set to 1 if the door can only be opened by a switch or trigger (ie: prevents a player from opening it manually)
+pos1 : sound to play when door starts moving ("none" for nothing, defaults to a creak)
+pos2 : sound to play when door stops moving ("none" for nothing, defaults to a creak)
+noise : looping sound as door is moving
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+
+-------- SPAWNFLAGS --------
+START_OPEN : the door will spawn in the open state and operate in reverse.
+CRUSHER : door will not reverse direction when blocked and will keep damaging player until he dies or gets out of the way.
+
+-------- NOTES --------
+- To use the CloseWhenIdle setting for CTF Spawn Room doors, you must also set trigger_only, and use a trigger_multiple to open the door. This will cause the door to remain open only as long as a player is in the triggering brush. Set the 'wait' key on the trigger_multiple to a very low value( < 1 like .25 )
+- Unlike in Quake 2, doors that touch are NOT automatically teamed. If you want doors to operate together, you have to team them manually by assigning the same team name to all of them. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.*/
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_rotating_door (1 0 0) ?
+
+-------- KEYS --------
+pos1 : sound to play when door starts moving ("none" for nothing, defaults to a creak)
+pos2 : sound to play when door stops moving ("none" for nothing, defaults to a creak)
+noise : looping sound to play as door is moving (defaults to no sound)
+targetname : name of a target to trigger when door opens
+color : constantLight color
+light : constantLight radius
+direction : force door to open in a set direction: -1 is clockwise, 1 is ccw
+speed : defaults to 100, speed at which door opens
+wait : how long to wait until door auto-closes (default is 0, which means stay open)
+trigger_only : set to 1 if the door can only be opened by a switch or trigger(ie: prevents a player from opening it manually)
+axis : door rotation axis, values: 0 (for x-axis), 1(for y-axis), 2(for z-axis) (if not given, default is 2 for z-axis)
+damage : damage door does to a player if they block it (leave out in most cases)
+gamemode_open : gametypes to have the door locked in the open position
+gamemode_shut : gametypes to have the door locked in the closed position
+only : set to allow only one team to use this entity, used for CTF or other respawn type modes to create spawn rooms. Values: blue or red - Default: anyone
+
+-------- NOTES --------
+Rotating doors cannot be shot open, and will only close or open if activated
+by a player. They will not automatically close after a period either. In
+game modes not listed under either gamemode_open or gamemode_shut, the doors
+will open and close normally.
+
+You construct a rotating door just like a FUNC_ROTATING: it needs an origin
+brush to act as the hinge.
+
+Urban Terror gametype mappings are:
+Free For All 0
+Single Player 1
+Team Deathmatch 3
+Team Survivor 4
+Assasins 5
+Capture And Hold 6
+Capture The Flag 7
+Bomb 8
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_breakable (0 .5 .8) ?
+A breakable thing just sits there, doing nothing,
+but will break if damaged or collided with.
+
+-------- KEYS --------
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+color : constantLight color
+light : constantLight radius
+type : 0: glass 1: wood 2: ceramic 3: plastic 4: metal-normal 5: metal-explosives 6: metal-hk69 7: stone-explosives 8: stone-hk69 9: wood-explosives 10: wood-hk69(SEE NOTES)
+axis : 1 - x, 2 - y, 4 - z
+health : health of object
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+shards : number of shards object should shatter into (0-255)
+bombable : allows the entity to be destroyed by the bomb in bomb mode. The size of blast shown when the entity breaks is determined by this value (Values : 1 none - 255 huge blast).
+
+-------- NOTES --------
+ - For glass windows that break easily, set health to 1.
+ - Any func_breakable with a health of less than 10 will slowly weaken if a player is in contact with it. You can make a roof that collapses in after a period of time by setting the health to a value like 5. This will mean that a player standing on such a surface for around 5 seconds will fall thru. The effect is cumulative: if you stand there for 3 seconds and then come back you can only stand on it for another 2 seconds.
+ - The type parameter selects the shader that is used for fragments and sets the sound the object makes when it breaks.
+ - If the brush you are making is on an angle (for example, a skylight in a sloping roof) then you will need to set the break axis to "4" if you want it to break when people stand on it.
+ - You can build anything to break using the breakables. Use the model2 key to create things like breakable pots -- see Wetwired's map "ricochet" for an example.
+ - Set shards as high as you want (it maxes out at 32 anyway) - players can reduce the number of shards they see using cg_maxFragments
+ - Bombable key is to be used for things that can only be broken by the Bomb Mode bomb explosion. For example a large propane tank near a bomb target. The key's value will determine the size of the explosion graphics from this entity when broken, with a value of 1 being no explosion and a value of 255 being a large secondary blast.
+ - Type values info for 1,2,3,4 - The game will attenuate the damage caused by each hit to a value of 1-3. Health values above 10 will choose a random health between 6 and 10. Specifics are as follows: 0: is for glass/windows 1: is for all woods 2: is for ceramics and pottery 3: is for various plastics 4: is for metal that can be broken by normal means
+ - Type values info for 5,6,7,8,9,10 - The game will use the literal health value compared to the weapon damages. They should be set quite high (metals and stone at 50+). Specifics are as follows: 5: is for metal that requires explosives to break (HE grenade or hk69) 6: is for metal that requires the hk69 to break 7: is for stone that requires explosives to break (HE grenade or hk69) 8: is for stone that requires the hk69 to break 9: is for wood that requires explosives to break (HE grenade or hk69) 10: is for wood that requires the hk69 to break
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_wall (0 .5 .8) ?
+
+-------- KEYS --------
+gametype : gametypes to have the wall appear in, list types in this format: 01234 (default none)
+
+-------- NOTES --------
+This entity is any brush or combination of brushes that you wish to have appear in gametypes specified.
+Common uses are to cut of map sections to streamline gameplay for TS, or to expand the map for CTF or Bomb.
+You cannot use a model as a func_wall.
+
+Create your brush(es), select it (or them), then make them a func_wall and set gametype keys.
+
+Urban Terror gametype mappings are:
+Free For All 0
+Single Player 1
+Team Deathmatch 3
+Team Survivor 4
+Assasins 5
+Capture And Hold 6
+Capture The Flag 7
+Bomb 8
+*/
+
+// * * * * * * * *
+
+//=================================================================================
+// Train entities (Anything that has anything to do with the func_ut_train)
+//=================================================================================
+
+// * * * * * * * *
+
+/*QUAKED func_ut_train (.6 .1 .8) ? START_ON TOGGLE BLOCK_STOPS CRUSHER
+A train is a mover that moves between path_ut_stop target points.
+
+-------- KEYS --------
+model2 : .md3 model to also draw
+name : to associate with a set of control buttons
+noise : looping sound to play when the train is in motion
+color : constantLight color
+light : constantLight radius
+speed : default 350
+dmg : default 0
+target : first path_ut_stop, train spawns here
+interface : the targetname of the func_keyboard_interface that belongs to this train
+id : to uniquely associate it with a set of control buttons
+startSound : sound to play when train begins moving to a new destination
+stopSound : sound to play when train arrives at a final stop
+noise : constant looping sound to always be playing where the train is
+
+-------- NOTES --------
+- Trains MUST HAVE AN ORIGIN BRUSH.
+- The train spawns at the first target it is pointing at.
+- The train will move to any stop from any stop. See the description for the func_keyboard_interface for more info.
+
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_keyboard_interface (.5 .6 .5) ?
+keyboard menu interface
+
+-------- KEYS --------
+display : if 0, menu is not dispayed, if 1, menu is displayed, default 1
+id : id of the func_ut_train that this interface associates with
+targetname : id for the func_ut_train key "interface" to associate it with the right func_ut_train
+option1 : text message to describe the first destination
+option2 : text message to describe the second destination
+option3 : text message to describe the third destination
+option4 : text message to describe the fourth destination
+option5 : text message to describe the five destination
+stop1 : targetname of first destination
+stop2 : targetname of second destination
+stop3 : targetname of third destination
+stop4 : targetname of fourth destination
+stop5 : targetname of fifth destination
+stop2from1 : beginning of path from 1 to 2
+stop3from1 : beginning of path from 1 to 3
+stop4from1 : beginning of path from 1 to 4
+stop5from1 : beginning of path from 1 to 5
+stop1from2 : beginning of path from 2 to 1
+stop3from2 : beginning of path from 2 to 3
+stop4from2 : beginning of path from 2 to 4
+stop5from2 : beginning of path from 2 to 5
+stop1from3 : beginning of path from 3 to 1
+stop2from3 : beginning of path from 3 to 2
+stop4from3 : beginning of path from 3 to 4
+stop5from3 : beginning of path from 3 to 5
+stop1from4 : beginning of path from 4 to 1
+stop2from4 : beginning of path from 4 to 2
+stop3from4 : beginning of path from 4 to 3
+stop5from4 : beginning of path from 4 to 5
+stop1from5 : beginning of path from 5 to 1
+stop2from5 : beginning of path from 5 to 2
+stop3from5 : beginning of path from 5 to 3
+stop4from5 : beginning of path from 5 to 4
+
+-------- NOTES --------
+- All the stopXfromY (where X and Y are numbers) should target a path_ut_stop
+- The stopX keys (where X is a number) should target the ending path_ut_stop, i.e. the last stop at location X.
+- The optionX keys (where X is a number) corresponds to the stopX keys. So if you set the name "top floor" for option1, make sure that stop1 actually is at the "top floor"
+*/
+
+// * * * * * * * *
+
+/*QUAKED path_ut_stop (.5 .3 0) (-8 -8 -8) (8 8 8)
+Train path stops.
+
+-------- KEYS --------
+target : next path stop and other targets to fire
+trainID : the id of the train that this stop is for
+wait : the amount of time train should wait at this stop, default is 0
+rotationTime : the amount of time (in milleseconds) that the train should rotate for at this stop according to yawSpeed, pitchSpeed, and rollSpeed
+yawSpeed : the speed of yaw rotation that the train will do once at this stop for rotationTime amound of milleseconds
+pitchSpeed : the speed of pitch rotation that the train will do once at this stop for rotationTime amound of milleseconds
+rollSpeed : the speed of roll rotation that the train will do once at this stop for rotationTime amound of milleseconds
+
+-------- NOTES --------
+- Pitch and roll doesn't work very well right now because of the collision handling of Q3. This makes it hard to make things that the player is supposed to ride work properly. Trial and error would probably be the best method to find out what works and what doesn't.
+- You can have the path_ut_stop trigger almost anything. For example, you could use it to open a door or to trigger a func_button.
+*/
+
+// * * * * * * * *
+
+//=============================================================================
+// Active entities (Non-structural, trigger type entities)
+//=============================================================================
+
+// * * * * * * * *
+
+/*QUAKED trigger_multiple (.5 .5 .5) ?
+Variable size repeatable trigger. It will fire the entities it targets when touched by player. Can be made to operate like a trigger_once entity by setting the "wait" key to -1. It can also be activated by another trigger that targets it.
+-------- KEYS --------
+target : this points to the entity to activate.
+targetname : activating trigger points to this.
+wait : time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once SEE NOTES).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+only : set to allow only one team to use this entity, used for CTF or other respawn type modes to create spawn rooms. Values: blue or red - Default: anyone
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+- Set the 'wait' key to .25 if using the CloseWhenIdle key when triggering a door
+- When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+*/
+
+// * * * * * * * *
+
+//=================================================================================
+// Gametype entities (Special UT gametype entities)
+//=================================================================================
+
+// * * * * * * * *
+
+/*QUAKED info_ut_spawn (1 .5 0) (-16 -16 -24) (16 16 32) initial
+potential spawning position for Urban Terror.
+
+-------- KEYS --------
+team : team that this spawn belongs to ("red" or "blue")
+group : this spawn groups with others of same groupID. A team chooses spawns from a certain group.
+g_gametype : a list of gametypes on which to use this spawn eg: "4, 5, 6"
+
+-------- NOTES --------
+Urban Terror gametype mappings are:
+Free For All 0
+Single Player 1
+Team Deathmatch 3
+Team Survivor 4
+Assasins 5
+Capture And Hold 6
+Capture The Flag 7
+Bomb 8
+
+You'd use the groups key in maps if you wanted to make sure a team will spawn together in a certain location,
+so you might take 8 spawn points, give them all gametypes of "3,4,5,6,7" (all teamplays) and then assign all
+the eight a group id of "1" then you might do another eight and make their group id all "2". UT will choose a
+"group" at the begining of a round and spawn all members of "team" there. Normally you'd have at few groups
+of spawns so you could have lots of potential team starting positions.
+*/
+
+// * * * * * * * *
+
+/*QUAKED team_CAH_capturepoint (0 .2 1) (-32 -32 -16) (32 32 76)
+zone that can be captured in the Capture and Hold gametype (CAH)
+
+-------- NOTES --------
+The capture point will be represented with a flag and a player must touch the flag to capture it.
+The name of the location of the capturepoint will be retrieved from either the trigger_location or the nearest target_location.
+*/
+
+//---------------------------------------------------------------------------------
+// Bomb Mode!
+//---------------------------------------------------------------------------------
+
+/*QUAKED info_ut_bombsite (0 .2 1) (-16 -16 -24) (16 16 32)
+
+-------- NOTES --------
+This entity cannot hover, it must be placed directly on the surface that you wish the bomb to be placed on.
+NEW in 3.2: Bomb plant range is locked to 64 units. Once the bomb is planted, it will snap to the center of the entity
+for easier diffusing.
+WARNING: You MUST have 2 bomb sites per map or the map will crash upon loading into bomb mode.
+*/
+
+// * * * * * * * *
+
+//=================================================================================
+// Misc entities (Everything that didn't fit in anywhere else)
+//=================================================================================
+
+// * * * * * * * *
+
+/*QUAKED worldspawn (0 0 0) ?
+Only used for the world.
+
+-------- KEYS --------
+message : text to print at user logon. Used for name of level.
+music : path/name of looping .wav file used for level's music (eg. music/sonic5.wav).
+ambient : Adds a constant value to overall lighting. Use is not recommended. Ambient light will have a tendency to flatten out variations in light and shade.
+_color : RGB value for ambient light color.
+gravity : gravity of level (default is normal gravity: 800).
+enablePrecip : 0 - (default) none, 1 - rain, 2 - snow
+precipAmount : up to 1024, number of drops/flakes (256 is good)
+*/
+
+// * * * * * * * *
+
+/*QUAKED trigger_location (1 1 0) ? - -
+Speicifes the name of a location when the player is within this trigger.
+
+-------- KEYS --------
+message : name of the location (text string). Displayed in parentheses in front of all team chat and order messages.
+count : color of the location text displayed in parentheses during team chat. Set to 0-7 for color.
+Attacking_Team : For Bomb Mode ONLY - when set to 1, the BLUE team will be the attacker, set to 0 if you want the RED team to attack. Default 0 (RED is Attacker)
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+
+-------- NOTES --------
+The values for the colors that can be set in the count key are as follows:
+
+0 : white (default)
+1 : red
+2 : green
+3 : yellow
+4 : blue
+5 : cyan
+6 : magenta
+7 : white
+*/
+
+// * * * * * * * *
+
+/*QUAKED ut_mrsentry (1 .5 0) (-16 -16 -24) (16 16 32)
+Spawn location for the CTF Spawn Room Sentry Cannon.
+
+-------- KEYS --------
+team : Team that Mr. Sentry belongs to. Will eliminate opposing team members within range (SEE NOTES). ("red" or "blue")
+angle : Inital and idle angle for the turret. Generally point this at or near the Spawn Room doors for highest effectiveness.
+gametype : gametypes to have Mr. Sentry appear in, list types in this format: 01234
+
+-------- NOTES --------
+Mr. Sentry is designed to be used in conjunction with CTF Spawn Rooms (see the Notes on the func_door entity) to prevent enemy team players from surviving if they enter the opposing team's spawn room. Even though the properly set up doors will generally prevent this, Mr. Sentry also has one other function. It will kill any Flag Carrier that enters it's range no matter what team that player is on. This will prevent players from grabbing the flag and retreating the the complete safety of their Spawn Room and waiting out the rest of the map time with the flag.
+
+For the anti-flag-camp feature to work properly, the entire spawn room must be enclosed with a 'nodrop' (a brush with the 'nodrop' texture on all sides). If this brush (or group of brushes) isn't placed, then Mr. Sentry will kill the Flag Carrier, and the flag will remain at that location, which is bad.
+*/
+
+// * * * * * * * *
+
+/*QUAKED target_speaker (0 .7 .7) (-8 -8 -8) (8 8 8) LOOPED_ON LOOPED_OFF GLOBAL ACTIVATOR
+Sound generating entity that plays .wav files. Normal non-looping sounds play each time the target_speaker is triggered. Looping sounds can be set to play by themselves (no activating trigger) or be toggled on/off by a trigger.
+-------- KEYS --------
+noise : path/name of .wav file to play (eg. sound/world/growl1.wav - see Notes).
+gametype : Specifies gametypes to play the sound in. If this key is not used, sound will play in all gametypes. List types in this format: 01234
+wait : delay in seconds between each time the sound is played ("random" key must be set - see Notes).
+random : random time variance in seconds added or subtracted from "wait" delay ("wait" key must be set - see Notes).
+targetname : the activating button or trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+LOOPED_ON : sound will loop and initially start on in level (will toggle on/off when triggered).
+LOOPED_OFF : sound will loop and initially start off in level (will toggle on/off when triggered).
+GLOBAL : sound will play full volume throughout the level.
+ACTIVATOR : sound will play only for the player that activated the target.
+-------- NOTES --------
+The path portion value of the "noise" key can be replaced by the implicit folder character "*" for triggered sounds that belong to a particular player model. For example, if you want to create a "bottomless pit" in which the player screams and dies when he falls into, you would place a trigger_multiple over the floor of the pit and target a target_speaker with it. Then, you would set the "noise" key to "*falling1.wav". The * character means the current player model's sound folder. So if your current player model is Visor, * = sound/player/visor, if your current player model is Sarge, * = sound/player/sarge, etc. This cool feature provides an excellent way to create "player-specific" triggered sounds in your levels.
+
+The combination of the "wait" and "random" keys can be used to play non-looping sounds without requiring an activating trigger but both keys must be used together. The value of the "random" key is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+*/
+
+// * * * * * * * *
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/common.shader b/install/installs/UrTPack/install/q3ut4/scripts/common.shader
new file mode 100644
index 0000000..1cd1fe4
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/common.shader
@@ -0,0 +1,321 @@
+
+textures/common/areaportal
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm structural
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm areaportal
+}
+
+textures/common/caulk
+{
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+}
+
+textures/common/clip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm playerclip
+}
+
+textures/common/clusterportal
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm clusterportal
+}
+
+textures/common/cushion
+{
+ qer_nocarve
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nodamage
+}
+
+textures/common/donotenter
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm donotenter
+}
+
+
+// never used
+//
+//textures/common/energypad
+//{
+// qer_editorimage textures/sfx/bluegoal.tga
+// surfaceparm nolightmap
+// cull twosided
+// {
+// map textures//bluegoal.tga
+// blendFunc GL_ONE GL_SRC_ALPHA
+// tcGen environment
+// tcMod turb 0 0.25 0 0.05
+// }
+//}
+
+textures/common/full_clip // silly shader, use weapclip instead
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm playerclip
+}
+
+textures/common/hint // should NOT use surfaceparm hint.. strange but true
+{
+ qer_nocarve
+ qer_trans 0.30
+ surfaceparm nodraw
+ surfaceparm nonsolid
+ surfaceparm structural
+ surfaceparm trans
+ surfaceparm noimpact
+ surfaceparm hint // ydnar: yes it should.
+}
+
+textures/common/invisible // solid, transparent polygons, casts shadows
+{
+ surfaceparm nolightmap
+ {
+ map textures/common/invisible.tga
+ alphaFunc GE128
+ depthWrite
+ rgbGen vertex
+ }
+}
+
+textures/common/mirror1
+{
+ qer_editorimage textures/common/mirror1.tga
+ surfaceparm nolightmap
+ portal
+
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+
+
+
+}
+
+textures/common/mirror2
+{
+ qer_editorimage textures/common/qer_mirror.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+ }
+ {
+ map textures/sfx/mirror.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ }
+
+}
+
+textures/common/missileclip
+{
+ qer_trans 0.40
+ surfaceparm nodamage
+ surfaceparm nomarks
+ surfaceparm nodraw
+ //surfaceparm nonsolid
+ surfaceparm playerclip
+ surfaceparm trans
+}
+
+textures/common/nodraw
+{
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+}
+
+textures/common/nodrawnonsolid
+{
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ surfaceparm nodraw
+}
+
+textures/common/nodrop
+{
+ qer_nocarve
+ qer_trans 0.5
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm nodrop
+}
+
+
+textures/common/noimpact
+{
+ qer_editorimage textures/common/nolightmap.tga
+ surfaceparm noimpact
+}
+
+textures/common/nolightmap
+{
+ surfaceparm nolightmap
+}
+
+textures/common/origin
+{
+ qer_nocarve
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm origin
+}
+
+textures/common/portal
+{
+ qer_editorimage textures/common/qer_portal.tga
+ surfaceparm nolightmap
+ portal
+ {
+ map textures/common/mirror1.tga
+ tcMod turb 0 0.25 0 0.05
+ blendfunc GL_ONE GL_ONE_MINUS_SRC_ALPHA
+ depthWrite
+
+ }
+}
+
+textures/common/slick
+{
+ qer_trans 0.50
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+ surfaceparm trans
+ surfaceparm slick
+}
+
+textures/common/terrain
+{
+ q3map_terrain
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nomarks
+}
+
+textures/common/terrain2
+{
+ q3map_terrain
+ qer_editorimage textures/common/terrain.tga
+ surfaceparm dust
+ surfaceparm nodraw
+ surfaceparm nomarks
+ surfaceparm nolightmap
+}
+
+textures/common/timportal
+{
+ qer_editorimage textures/common/qer_portal.tga
+ portal
+ surfaceparm nolightmap
+ {
+ map textures/common/portal.tga
+ tcMod turb 0 0.25 0 0.05
+ blendFunc GL_ONE GL_SRC_ALPHA
+ depthWrite
+ }
+}
+
+textures/common/trigger
+{
+ qer_trans 0.50
+ qer_nocarve
+ surfaceparm nodraw
+}
+
+textures/common/weapclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm trans
+ surfaceparm nomarks
+}
+
+textures/common/metalclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm playerclip
+ surfaceparm metalsteps
+}
+
+textures/common/botclip
+{
+ qer_trans 0.40
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm nomarks
+ surfaceparm noimpact
+ surfaceparm botclip
+}
+
+//
+// ydnar q3map lightgrid bounds
+//
+// the min/max bounds of brushes with this shader in a map
+// will define the bounds of the map's lightgrid (model lighting)
+// note: make it as small as possible around player space
+// to minimize bsp size and compile time
+//
+
+textures/common/lightgrid
+{
+ qer_trans 0.5
+ surfaceparm nodraw
+ surfaceparm nolightmap
+ surfaceparm nonsolid
+ surfaceparm detail
+ surfaceparm nomarks
+ surfaceparm trans
+ surfaceparm lightgrid
+}
+
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/default_project.proj b/install/installs/UrTPack/install/q3ut4/scripts/default_project.proj
new file mode 100644
index 0000000..d43aa7a
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/default_project.proj
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/entities.def b/install/installs/UrTPack/install/q3ut4/scripts/entities.def
new file mode 100644
index 0000000..ed7260c
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/entities.def
@@ -0,0 +1,1747 @@
+// Quake3 Arena entity definition file for Q3Radiant
+// Based on draft by Suicide 20 7.30.99 and inolen 9-3-99
+// Upgraded by Eutectic: eutectic@ritualistic.com
+// (visible models added by raYGunn - paths provided by Suicide 20)
+// (terrain information added to func_group entity by Paul Jaquays)
+// Q3Map2 entitys/keys added by ydnar
+// Version: 1.6
+// Last updated: 2003-11-28
+
+//=============================================================================
+
+// Q3Map2 entities
+
+//=============================================================================
+
+/*QUAKED _decal (0 1.0 0) ?
+-------- KEYS --------
+"target" : the name of the entity targetted at for projection
+-------- SPAWNFLAGS --------
+(none)
+-------- NOTES --------
+Compiler-only entity that specifies a decal to be projected. Should contain 1 or more patch meshes (curves) and target an info_null entity. The distance between the center of the _decal entity and the target is the axis and distance of projection.
+*/
+
+/*QUAKED _skybox (0.77 0.88 1.0) (-4 -4 -4) (4 4 4)
+-------- KEYS --------
+"angle" : rotation angle of the sky surfaces.
+"angles" : Individual control of PITCH, YAW, and ROLL (default 0 0 0).
+"_scale" : scaling factor (default 64), good values are between 50 and 300, depending on the map.
+-------- SPAWNFLAGS --------
+(none)
+-------- NOTES --------
+Compiler-only entity that specifies a the origin of a skybox (a wholly contained, seperate area of the map), similar to some games' portal skies. When compiled with Q3Map2, the skybox surfaces will be visible from any place where sky is normally visible. It will cast shadows on the normal parts of the map, and can be used with cloud layers and other effects.
+*/
+
+
+//=============================================================================
+
+AMMO_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED ammo_bfg (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+BFG ammo. Gives the player 15 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 15).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/bfgam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_bullets (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Machine Gun ammo. Gives the player 50 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/machinegunam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_cells (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Plasma Gun ammo. Gives the player 30 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/plasmaam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_grenades (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Grenade Launcher ammo. Gives the player 5 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/grenadeam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_lightning (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Lightning Gun ammo. Gives the player 60 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 60).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/lightningam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_rockets (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Rocket Launcher ammo. Gives the player 5 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/rocketam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_shells (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Shotgun ammo. Gives the player 10 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/shotgunam.md3"*/
+
+//=============================================================================
+
+/*QUAKED ammo_slugs (.3 .3 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Railgun ammo. Gives the player 10 by default.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/ammo/railgunam.md3"*/
+
+//=============================================================================
+
+FUNC_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED func_bobbing (0 .5 .8) ? X_AXIS Y_AXIS
+Solid entity that oscillates back and forth in a linear motion. By default, it will have an amount of displacement in either direction equal to the dimension of the brush in the axis in which it's bobbing. Entity bobs on the Z axis (up-down) by default. It can also emit sound if the "noise" key is set. Will crush the player when blocked.
+-------- KEYS --------
+speed : amount of time in seconds for one complete oscillation cycle (default 4).
+height : sets the amount of travel of the oscillation movement (default 32).
+phase : sets the start offset of the oscillation cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav - See Notes).
+model2 : path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
+origin : alternate method of setting XYZ origin of sound and .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+X_AXIS : entity will bob along the X axis.
+Y_AXIS : entity will bob along the Y axis.
+-------- NOTES --------
+In order for the sound to be emitted from the entity, it is recommended to include a brush with an origin shader at its center, otherwise the sound will not follow the entity as it moves. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_button (0 .5 .8) ?
+When a button is touched by a player, it moves in the direction set by the "angle" key, triggers all its targets, stays pressed by an amount of time set by the "wait" key, then returns to it's original position where it can be operated again.
+-------- KEYS --------
+angle : determines the direction in which the button will move (up = -1, down = -2).
+target : all entities with a matching targetname will be triggered.
+speed : speed of button's displacement (default 40).
+wait : number of seconds button stays pressed (default 1, -1 = return immediately).
+lip : lip remaining at end of move (default 4 units).
+health : (default 0) if set to any non-zero value, the button must take damage (any amount) to activate.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_door (0 .5 .8) ? START_OPEN - CRUSHER
+Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted to it.
+-------- KEYS --------
+angle : determines the opening direction of door (up = -1, down = -2).
+speed : determines how fast the door moves (default 100).
+wait : number of seconds before door returns (default 2, -1 = return immediately)
+lip : lip remaining at end of move (default 8)
+targetname : if set, a func_button or trigger is required to activate the door.
+health : (default 0) if set to any non-zero value, the button must take damage (any amount) to activate.
+dmg : damage to inflict on player when he blocks operation of door (default 4). Door will reverse direction when blocked unless CRUSHER spawnflag is set.
+team: assign the same team name to multiple doors that should operate together (see Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+START_OPEN : the door will spawn in the open state and operate in reverse.
+CRUSHER : door will not reverse direction when blocked and will keep damaging player until he dies or gets out of the way.
+-------- NOTES --------
+Unlike in Quake 2, doors that touch are NOT automatically teamed. If you want doors to operate together, you have to team them manually by assigning the same team name to all of them. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_group (0 .5 .8) ?
+This is not an entity as such. It is strictly an editor utility to group world brushes and patches together for convenience (selecting, moving, copying, etc). You cannot group entities with this.
+-------- OLD TERRAIN KEYS (note: obsolete with Q3Map2) --------
+alphamap : this is the path/name for the art file used to guide the mapping of textures on the terrain surface.
+layers : this integer value is the number unique root shaders that will be use on the terrain.
+shader : this is the path to the metashader used to assign textures to the terrain entity.
+terrain : this is an on/off flag. When set to 1, the entity becomes a terrain entity. Note: unecessary when compiling with Q3Map2. See Q3Map2 keys.
+-------- Q3MAP2 KEYS --------
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+The TAB key can be used to flip through the component pieces of a selected func_group entity, isolating individual components. To make a func_group into a terrain entity, refer to the Terrain Construction documentation.*/
+
+//=============================================================================
+
+/*QUAKED func_pendulum (0 .5 .8) ?
+Solid entity that describes a pendulum back and forth rotation movement. Rotates on the X axis by default. Pendulum frequency is a physical constant based on the length of the beam and gravity. Blocking the pendulum instantly kills a player.
+-------- KEYS --------
+angle : angle offset of axis of rotation from default X axis (default 0).
+speed : angle of swing arc in either direction from initial position (default 30).
+phase : sets the start offset of the swinging cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
+model2 : path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
+origin : alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. Pendulum will rotate along the X axis by default. Very crude operation: pendulum cannot rotate along Z axis, the speed of swing (frequency) is not adjustable. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_plat (0 .5 .8) ?
+Rising platform the player can ride to reach higher places. Plats must always be drawn in the raised position, so they will operate and be lighted correctly but they spawn in the lowered position. The plat will stay in the raised position until the player steps off. There are no proper sounds for this entity, only beep noises. It will spawn in the game and work properly but it sounds silly (see Notes).
+-------- KEYS --------
+speed : determines how fast the plat moves (default 150).
+lip : lip remaining at end of move (default 16). Has no effect if "height" is set.
+height : if set, this will determine the total amount of vertical travel of the plat.
+dmg : damage to inflict on player when he blocks operation of plat (default 4). Plat will reverse direction when blocked.
+targetname : if set, the trigger that points to this will raise the plat each time it fires. The plat raises and comes back down a second later if no player is on it.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+By default, the total amount of vertical travel of a platform is implicitly determined by the overall vertical size of the brushes of which it's made minus the lip value. But if the "height" key is used, then the total amount of vertical travel of the plat will be exactly that value regardless of the shape and size of the plat and regardless of the value of the "lip" key. Using the "height" key is the best method for any kind of platforms and the only possible one for thin plats which need to travel vertical distances many times their own thickness. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+There is a way to make plats play proper sounds. Just create a sound\movers\plats folder under baseq3 and put 2 sounds named pt1_strt.wav and pt1_end.wav in it. Those can be the renamed sounds from the Q2 plats or renamed copies of the sound\movers\doors sounds you can extract from your pak0.pk3 file or new custom sounds if you're up to it. Thanks to Fragzilla for the tip.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_rotating (0 .5 .8) ? - - X_AXIS Y_AXIS
+Solid entity that rotates continuously. Rotates on the Z axis by default and requires an origin brush. It will always start on in the game and is not targetable.
+-------- KEYS --------
+speed : determines how fast entity rotates (default 100).
+noise : path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
+model2 : path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
+origin : alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- SPAWNFLAGS --------
+X_AXIS : entity will rotate along the X axis.
+Y_AXIS : entity will rotate along the Y axis.
+-------- NOTES --------
+You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. It will rotate along the Z axis by default. You can check either the X_AXIS or Y_AXIS box to change that. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_static (0 .5 .8) ?
+Static non-solid bspmodel. Can be used for conditional walls and models.
+-------- KEYS --------
+model2 : path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+targetname : NOT SUPPORTED BY RENDERER - if set, a func_button or trigger can make entity disappear from the game (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. If a model is included with a targeted func_static, the brush(es) of the entity will be removed from the game but the .md3 model won't: it will automatically be moved to the (0 0 0) world origin so you should NOT include an .md3 model to a targeted func_static.
+
+Because the map has only a single bot navigation file, func_static's cannot be used to make significant changes in game play flow between differing game types.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+/*QUAKED func_timer (0 .5 .8) (-8 -8 -8) (8 8 8) START_ON
+Time delay trigger that will continuously fire its targets after a preset time delay. The time delay can also be randomized. When triggered, the timer will toggle on/off.
+-------- KEYS --------
+wait : delay in seconds between each triggering of its targets (default 1).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+target : this points to the entities to trigger.
+targetname : a func_button or trigger that points to this will toggle the timer on/off when activated.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+START_ON : timer will start on in the game and continuously fire its targets.
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED func_train (0 .5 .8) ?
+Trains are moving solids that follow a string of path_corner entities. Trains in Q3A are very basic, they also require an origin brush (see Notes).
+-------- KEYS --------
+speed : speed of displacement of train (default 100 or overridden by speed value of path).
+target : this points to the first path_corner of the path which is also the spawn location of the train's origin.
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of the train's brush(es) and .md3 model included with entity (See Notes).
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- Q3MAP2 KEYS --------
+_targetname : Used to attach a misc_model entity to this entity.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in this entity (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.
+-------- NOTES --------
+1. Trains always start on in the game.
+2. Trains do not damage the played when blocked.
+3. Trains cannot emit sound.
+4. Trains are not triggerable or toggle-able.
+5. Trains cannot be block-stopped just by getting in their way, the player must be wedged between the train and another obstacle to block it.
+
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.
+
+Target this entity with a misc_model to have the model attached to the entity (set the model's "target" key to the same value as this entity's "targetname").*/
+
+//=============================================================================
+
+HOLDABLE_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED holdable_medkit (.7 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Medkit that can be picked up and used later. Brings the player's health back to 100 when used. Player can only carry one holdable item at a time.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/holdable/medkit.md3"*/
+
+//=============================================================================
+
+/*QUAKED holdable_teleporter (.7 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Teleporter item that can be picked up and used later. Teleports the player to a random player spawn point when used. Player can only carry one holdable item at a time.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/holdable/teleporter.md3"*/
+
+//=============================================================================
+
+INFO_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED info_camp (0 .5 0) (-8 -8 -8) (8 8 8)
+This atttracts bots which have a camping preference in their AI characteristics. It should be placed at least 32 units away from any brush surface.
+-------- KEYS --------
+range : number of units that the bot can move away from camp entity while camping on it.
+weight : number that is compared against the weight assigned to all the other camp spots in the map to determine if a bot chooses to camp there. The value is normalized against all other weight values.
+-------- NOTES --------
+Examples of bots which have a high camping preference are: Razor, Tank Jr., Grunt, Patriot and Doom. Examples of bots which have a low camping preference are: Klesk, Mynx, Sarge, Keel and Xaero.*/
+
+//=============================================================================
+
+/*QUAKED info_notnull (0 .5 0) (-8 -8 -8) (8 8 8)
+Used as a positional target for entities that can use directional pointing. A target_position can be used instead of this but was kept in Q3A for legacy purposes.
+-------- KEYS --------
+targetname : must match the target key of entity that uses this for pointing.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED info_null (0 .5 0) (-8 -8 -8) (8 8 8)
+Used as a positional target for light entities to create a spotlight effect. A target_position can be used instead of this but was kept in Q3A for legacy purposes.
+-------- KEYS --------
+targetname : must match the target key of entity that uses this for pointing.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED info_player_deathmatch (1 0 1) (-16 -16 -24) (16 16 32) INITIAL
+Normal player spawning location for Q3A levels.
+-------- KEYS --------
+angle : direction in which player will look when spawning in the game. Does not apply to bots.
+target : this can point at a target_give entity for respawn freebies.
+nobots : when set to 1, bots will never use this spawn point to respawn in the game.
+nohumans : when set to 1, human players will never use this spawn point to respawn in the game.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+INITIAL : makes the spawnpoint the initial place for the player to spawn at the beginning of the game.*/
+
+//=============================================================================
+
+/*QUAKED info_player_intermission (1 0 1) (-16 -16 -16) (16 16 16)
+Camera for intermission screen between matches. This also automatically generates the podium for bot arena matches (see Notes). Can be aimed by setting the "angles" key or targeting an pointing to an aiming entity. Use only one per level.
+-------- KEYS --------
+angles: alternate "pitch, yaw, roll" angles method of aiming intermission camera (default 0 0 0).
+target : point this to an info_notnull or target_position entity to set the camera's pointing angles.
+-------- NOTES --------
+In genuine bot arena matches, the podium for the 1st, 2nd and 3rd place players at the end of the match is generated by this entity. The podium's origin will automatically be located 128 units in the direction of the camera's view and 84 units down from the y height of the view line at that point. It will also always be generated on a level plane regardless of the pointing angle of the camera so if that angle is too steep, part of the podium model might not be visible. Make sure you leave at least 106 units of free space in front of where the camera points to otherwise the podium model won't be visible at all.*/
+
+//=============================================================================
+
+/*QUAKED info_player_start (1 0 0) (-16 -16 -24) (16 16 32)
+Player spawn location. It works in Quake III Arena, but it is not used in the Id maps. Use info_player_deathmatch instead.
+-------- KEYS --------
+angle : direction in which player will look when spawning in the game.
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+//QUAKED info_spectator_start (1 0 0) (-16 -16 -24) (16 16 32)
+//Spectator spawn location. Doesn't appear to work in game. Commented out.
+//-------- KEYS --------
+//notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+//notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+//notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+
+//=============================================================================
+
+ITEM_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED item_armor_body (.6 0 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Red Armor - 100 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/armor_red.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_armor_combat (1 .75 .3) (-16 -16 -16) (16 16 16) SUSPENDED
+Yellow Armor - 50 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/armor_yel.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_armor_shard (0 .7 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Green Armor Shard - 5 points. All armor can be cumulated up to a maximum of 200 points and slowly wears out to 100 points.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 25, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/armor/shard.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_botroam (1 0.5 0) (-8 -8 -8) (8 8 8) SUSPENDED
+Game Function: An invisible entity which attracts a bot to it. Use to move bots to parts of a map that might otherwise not be used (NEW ENTITY).
+-------- KEYS --------
+weight: non-zero floating point value, most often in the range 0 to 400. (Higher values are allowed but keep in mind that the bot should also be attracted to normal items. Don't make the weight value too high.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The item_botroam entity can be used when a bot does not roam the whole level or prefers to go to only specific areas. This (invisible) item can be placed in a map just like regular items. Nobody can actually pick up the item it's only used to attract bots to certain places of the map. The value is the weight of the roam_item is relative to the weight assigned other items in the map (each bot has its own weights). The bot character specific item weights are stored with the bot characters AI files ("botname"_i.c for items and "botname"_w.c for weapons) in the botfiles/bots/ sub-folder in the .pk3 file.*/
+
+//=============================================================================
+
+/*QUAKED item_enviro (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Battle Suit power-up - Gives protection against slime, lava and weapon splash damage. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/enviro.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_flight (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Flight power-up. Lasts 60 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 60).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/flight.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_haste (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Speed power-up. Makes player run at double speed for 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/haste.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health (.8 .8 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Yellow cross bubble - 25 Health. Cannot be picked up over 100 health.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 25).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/medium_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_large (1 0 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Gold cross bubble - 50 Health. Cannot be picked up over 100 health.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/large_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_mega (0 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Blue M bubble - 100 Health. Adds 100 health points to current health up to a maximum of 200.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/mega_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_health_small (0 1 0) (-16 -16 -16) (16 16 16) SUSPENDED
+Green cross bubble - 5 Health. Can be picked up over 100 health but slowly wears out to 100 afterwards.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of health points given to the player when item is picked up (default 5).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/health/small_cross.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_invis (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Invisibility power-up. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/invis.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_quad (.4 .6 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Quad Damage power-up. Lasts 30 seconds.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+model="models/powerups/instant/quad.md3"*/
+
+//=============================================================================
+
+/*QUAKED item_regen (.5 0 1) (-16 -16 -16) (16 16 16) SUSPENDED
+Health Regeneration power-up. This will boost your current health by 5 points every second for a period of up to 30 seconds or up to 200 points whichever comes first. Afterwards, any health points over 100 slowly wears out to 100.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count : time in seconds power-up will last when picked up (default 30).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/powerups/instant/regen.md3"*/
+
+//=============================================================================
+
+LIGHT ENTITY
+
+//=============================================================================
+
+
+/*QUAKED light (.65 .65 1) (-8 -8 -8) (8 8 8) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT
+Non-displayed point light source. The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights.
+-------- KEYS --------
+_light OR light: overrides the default 300 intensity.
+_color : weighted RGB value of light color (default white - 1.0 1.0 1.0).
+target : Lights pointed at a target will be spotlights.
+radius: overrides the default 64 unit radius of a spotlight at the target point.
+-------- Q3MAP2 KEYS --------
+_sun : Set this key to 1 on a spotlight to make an infinite sun light.
+fade : Fades light attenuation. Only affects linear lights.
+scale : Scales light attentation, from SOF2/JK2. Scales the "light" value.
+-------- SPAWNFLAGS --------
+LINEAR : Use a linear falloff. Default is inverse distance squared (more realistic).
+NOANGLE : Ignore angle attenuation.
+NOGRIDLIGHT : Do not affect the lightgrid (dynamic entity lighting).*/
+
+/*QUAKED lightJunior (0 0.7 0.3) (-6 -6 -6) (6 6 6) LINEAR NOANGLE UNUSED1 UNUSED2 NOGRIDLIGHT
+Non-displayed point light source THAT ONLY AFFECTS ENTITIES (lightgrid). The -pointscale and -scale arguments to Q3Map2 affect the brightness of these lights. The -skyscale argument affects brightness of entity sun lights.
+-------- KEYS --------
+_light OR light: overrides the default 300 intensity.
+_color : weighted RGB value of light color (default white - 1.0 1.0 1.0).
+target : Lights pointed at a target will be spotlights.
+radius: overrides the default 64 unit radius of a spotlight at the target point.
+-------- Q3MAP2 KEYS --------
+_sun : Set this key to 1 on a spotlight to make an infinite sun light.
+fade : Fades light attenuation. Only affects linear lights.
+scale : Scales light attentation, from SOF2/JK2. Scales the "light" value.
+-------- SPAWNFLAGS --------
+LINEAR : Use a linear falloff. Default is inverse distance squared (more realistic).
+NOANGLE : Ignore angle attenuation.
+NOGRIDLIGHT : Do not affect the lightgrid (dynamic entity lighting). Setting this spawnflag will disable this light entirely.*/
+
+//=============================================================================
+
+MISC_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED misc_model (1 .5 .25) (-16 -16 -16) (16 16 16)
+Generic placeholder for inserting MD3 models in game. Requires compilation of map geometry to be added to level. If the map is compiled with Q3Map2, then ASE, 3DS, OBJ and other model formats are supported.
+-------- KEYS --------
+angle: direction in which model will be oriented.
+model : path/name of model to use (eg: models/mapobjects/teleporter/teleporter.md3).
+-------- Q3MAP2 KEYS --------
+angles : Individual control of PITCH, YAW, and ROLL (default 0 0 0).
+modelscale : Floating-point value used to scale a model up or down (default 1.0).
+modelscale_vec : Floating-point vector used to scale a model's axes individually (default 1.0 1.0 1.0).
+_remap : Used to remap textures/shaders in the model. To remap all shaders to a given shader, use "*;models/mymodel/mytexture". To remap a specific shader, use "models/mymodel/old;models/mymodel/new".
+target : Used to attach the misc_model to a brush entity, where its "targetname" key is the same value.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on this model (if model is using lightmapped shaders) (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+*/
+
+//=============================================================================
+
+/*QUAKED misc_portal_camera (1 .5 .25) (-8 -8 -8) (8 8 8) SLOWROTATE FASTROTATE
+Portal camera. This camera is used to project its view onto a portal surface in the level through the intermediary of a misc_portal_surface entity. Use the "angles" key or target a target_position or info_notnull entity to set the camera's pointing direction.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of the portal camera (default 0 0). Use "roll" key to set roll angle.
+target : point this to a target_position entity to set the camera's pointing direction.
+targetname : a misc_portal_surface portal surface indicator must point to this.
+roll: roll angle of camera. A value of 0 is upside down and 180 is the same as the player's view.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+SLOWROTATE : makes the portal camera rotate slowly along the roll axis.
+FASTROTATE : makes the portal camera rotate faster along the roll axis.
+-------- NOTES --------
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the camera. However, the target_position method is simpler. In both cases, the "roll" key must be used to set the roll angle. If either the SLOWROTATE or FASTROTATE spawnflag is set, then the "roll" value is irrelevant.*/
+
+//=============================================================================
+
+/*QUAKED misc_portal_surface (1 .5 .25) (-8 -8 -8) (8 8 8)
+Portal surface indicator. This will "lock on" the brush face closest to it and identify as a portal. The view displayed on the portal surface is the view of the misc_portal_camera that this entity targets. Also used for mirrors (see Notes).
+-------- KEYS --------
+target : point this to a misc_portal_camera that "sees" the view you want to display on the portal.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+The entity must be no farther than 64 units away from the portal surface to lock onto it. To make a mirror, apply the common/mirror shader to the surface, place this entity near it but don't target a misc_portal_camera.*/
+
+//=============================================================================
+
+/*QUAKED misc_teleporter_dest (1 .5 .25) (-32 -32 -24) (32 32 -16)
+Teleport destination location point for trigger_teleporter entities.
+-------- KEYS --------
+angle : direction in which player will look when teleported.
+targetname : make the trigger_teleporter point to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+PATH_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED path_corner (.5 .3 0) (-8 -8 -8) (8 8 8)
+Path corner entity that func_trains can be made to follow.
+-------- KEYS --------
+target : point to next path_corner in the path.
+targetname : the train following the path or the previous path_corner in the path points to this.
+speed : speed of func_train while moving to the next path corner. This will override the speed value of the train.
+wait : number of seconds func_train will pause on path corner before moving to next path corner (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+Setting the wait key to -1 will not make the train stop on the path corner, it will simply default to 0.*/
+
+//=============================================================================
+
+SHOOTER_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED shooter_grenade (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a grenade each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the grenades.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+/*QUAKED shooter_plasma (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a plasma ball each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the plasma balls.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+/*QUAKED shooter_rocket (1 0 .5) (-8 -8 -8) (8 8 8)
+This will shoot a rocket each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
+targetname : activating trigger points to this.
+target : this points to a target_position entity for aiming the rockets.
+random : random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
+
+Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/
+
+//=============================================================================
+
+TARGET_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED target_delay (0 .7 .7) (-8 -8 -8) (8 8 8)
+Time delay trigger intermediary. Like a target_relay, this can only be fired by other triggers which will cause it in turn to fire its own targets.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this points to entities to activate when this entity is triggered.
+wait : delay in seconds from when this gets triggered to when it fires its own targets (default approx. 1).
+delay : same as wait? replaces it? WTF?...I'm confused now.
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED target_give (0 .5 0) (-8 -8 -8) (8 8 8)
+This is used to give ammo, weapons, health or items to the player who activates it.
+-------- KEYS --------
+target : this points to the item(s) to give when activated.
+targetname : activating trigger or spawn entity points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+There are 2 ways to use this entity.
+a) automatically give items to players when they spawn in the game: make a spawn location entity like info_player_deathmatch or CTF respawn points target this entity, then make it target the item(s) to give to the player upon respawn.
+b) give items to players during the game: make a trigger_multiple target this entity, then make it target the item(s) to give to the player when the trigger is touched.*/
+
+//=============================================================================
+
+/*QUAKED target_kill (0 .5 0) (-8 -8 -8) (8 8 8)
+This will kill the player who activates the trigger that fires this target.
+-------- KEYS --------
+targetname : the activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+//QUAKED target_laser (0 .5 0) (-8 -8 -8) (8 8 8) START_ON
+//Generates a red laser beam. I think this can somehow spawn in the game, I saw it once but it's too inconsistent to be usable. Commented out.
+//-------- KEYS --------
+//angles: alternate "pitch, yaw, roll" angles method of aiming laser (default 0 0 0).
+//target : point this to a target_position entity to set the laser's aiming direction.
+//targetname : the activating trigger points to this.
+//notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+//notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+//notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+//-------- SPAWNFLAGS --------
+//START_ON : when set, the laser will start on in the game.
+
+//=============================================================================
+
+/*QUAKED target_location (0 .5 0) (-8 -8 -8) (8 8 8)
+Location marker used by bots and players for team orders and team chat in the course of Teamplay games. The closest target_location in sight is used for the location. If none is in sight, the closest in distance is used.
+-------- KEYS --------
+message : name of the location (text string). Displayed in parentheses in front of all team chat and order messages.
+count : color of the location text displayed in parentheses during team chat. Set to 0-7 for color.
+ 0 : white (default)
+ 1 : red
+ 2 : green
+ 3 : yellow
+ 4 : blue
+ 5 : cyan
+ 6 : magenta
+ 7 : white
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_position (0 .5 0) (-8 -8 -8) (8 8 8)
+Aiming target for entities like light, misc_portal_camera and trigger_push (jump pads) in particular.
+-------- KEYS --------
+targetname : the entity that requires an aiming direction points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+To make a jump pad, place this entity at the highest point of the jump and target it with a trigger_push entity.*/
+
+//=============================================================================
+
+/*QUAKED target_print (0 .5 0) (-8 -8 -8) (8 8 8) REDTEAM BLUETEAM PRIVATE
+This will print a message on the center of the screen when triggered. By default, all the clients will see the message.
+-------- KEYS --------
+message : text string to print on screen.
+targetname : the activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+REDTEAM : only the red team players will see the message.
+BLUETEAM : only the blue team players will see the message.
+PRIVATE : only the player that activates the target will see the message.*/
+
+//=============================================================================
+
+/*QUAKED target_push (.5 .5 .5) (-8 -8 -8) (8 8 8) BOUNCEPAD
+This can be used to create jump pads and launch ramps. The direction of push can be set by the "angles" key or pointing to a target_position or info_notnull entity. Unlike trigger_push, this is NOT client side predicted and must be activated by a trigger.
+-------- KEYS --------
+angles: this sets the pitch and yaw aiming angles of push entity (default 0 0). The roll angle does not apply.
+speed : speed of push (default 1000). Has no effect if entity targets an aiming entity.
+targetname : the activating trigger points to this. Push originates from the location of the trigger.
+target : this points to the aiming entity to which the player will jump.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+BOUNCEPAD : if set, trigger will play bounce noise instead of beep noise when activated (recommended).
+-------- NOTES --------
+To make a jump pad or launch ramp, create a trigger_multiple where the jump must originate. Place the target_push directly above the trigger_multiple and place the target_position entity at the highest point of the jump. Target the trigger_multiple to the target_push and target the target_push to the target_position/info_notnull (or set the target_push's "angles" key). Note that the "angle" key also works.*/
+
+//=============================================================================
+
+/*QUAKED target_relay (0 .7 .7) (-8 -8 -8) (8 8 8) RED_ONLY BLUE_ONLY RANDOM
+This can only be activated by other triggers which will cause it in turn to activate its own targets.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this points to entities to activate when this entity is triggered.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+RED_ONLY : only red team players can activate trigger.
+BLUE_ONLY : only red team players can activate trigger.
+RANDOM : one one of the targeted entities will be triggered at random.*/
+
+//=============================================================================
+
+/*QUAKED target_remove_powerups (0 .7 .7) (-8 -8 -8) (8 8 8)
+This takes away any and all item_* type powerups from player except health and armor (holdable_* items are not taken away either). Must be activated by a button or trigger_multiple entity. The player that activates the trigger will lose any powerup(s) currently in his possession.
+-------- KEYS --------
+targetname : activating trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_score (0 .5 0) (-8 -8 -8) (8 8 8)
+This is used to automatically give frag points to the player who activates this. A spawn location entity like info_player_* or CTF respawn points can target this entity to give points to the player when he spawns in the game. Or a trigger can also be used to activate this. The activator of the trigger will get the points.
+-------- KEYS --------
+targetname : ativating entity points to this.
+count: number of frag points to give to player (default 1).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED target_speaker (0 .7 .7) (-8 -8 -8) (8 8 8) LOOPED_ON LOOPED_OFF GLOBAL ACTIVATOR
+Sound generating entity that plays .wav files. Normal non-looping sounds play each time the target_speaker is triggered. Looping sounds can be set to play by themselves (no activating trigger) or be toggled on/off by a trigger.
+-------- KEYS --------
+noise : path/name of .wav file to play (eg. sound/world/growl1.wav - see Notes).
+wait : delay in seconds between each time the sound is played ("random" key must be set - see Notes).
+random : random time variance in seconds added or subtracted from "wait" delay ("wait" key must be set - see Notes).
+targetname : the activating button or trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+LOOPED_ON : sound will loop and initially start on in level (will toggle on/off when triggered).
+LOOPED_OFF : sound will loop and initially start off in level (will toggle on/off when triggered).
+GLOBAL : sound will play full volume throughout the level.
+ACTIVATOR : sound will play only for the player that activated the target.
+-------- NOTES --------
+The path portion value of the "noise" key can be replaced by the implicit folder character "*" for triggered sounds that belong to a particular player model. For example, if you want to create a "bottomless pit" in which the player screams and dies when he falls into, you would place a trigger_multiple over the floor of the pit and target a target_speaker with it. Then, you would set the "noise" key to "*falling1.wav". The * character means the current player model's sound folder. So if your current player model is Visor, * = sound/player/visor, if your current player model is Sarge, * = sound/player/sarge, etc. This cool feature provides an excellent way to create "player-specific" triggered sounds in your levels.
+
+The combination of the "wait" and "random" keys can be used to play non-looping sounds without requiring an activating trigger but both keys must be used together. The value of the "random" key is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED target_teleporter (0 .5 0) (-8 -8 -8) (8 8 8)
+Activating this will teleport players to the location of the targeted misc_teleporter_dest entity. Unlike trigger_teleport, this entity must be activated by a trigger and does NOT allow client prediction of events.
+-------- KEYS --------
+targetname : activating trigger points to this.
+target : this must point to a misc_teleporter_dest entity.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+TEAM_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED team_CTF_blueflag (0 .2 1) (-16 -16 -16) (16 16 16)
+Blue team flag for CTF games.
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/flags/b_flag.md3"*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_blueplayer (0 .2 1) (-16 -16 -24) (16 16 32)
+Initial Blue team spawning position for CTF games. This is where players spawn when they join the Blue team.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_bluespawn (0 .2 1) (-16 -16 -24) (16 16 32)
+Blue team respawning position for CTF games. This is where Blue team players respawn after they get fragged.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redflag (1 .2 0) (-16 -16 -16) (16 16 16)
+Red team flag for CTF games.
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/flags/r_flag.md3"*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redplayer (1 .2 0) (-16 -16 -24) (16 16 32)
+Initial Red team spawning position for CTF games. This is where players spawn when they join the Red team.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+/*QUAKED team_CTF_redspawn (0 .2 1) (-16 -16 -24) (16 16 32)
+Red team respawning position for CTF games. This is where Red team players respawn after they get fragged.
+-------- KEYS --------
+target : this can point at a target_give entity for respawn freebies.*/
+
+//=============================================================================
+
+TRIGGER_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED trigger_always (.5 .5 .5) (-8 -8 -8) (8 8 8)
+Automatic trigger. It will fire the entities it targets as soon as it spawns in the game.
+-------- KEYS --------
+target : this points to the entity to activate.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+/*QUAKED trigger_hurt (.5 .5 .5) ? START_OFF - SILENT NO_PROTECTION SLOW
+Any player that touches this will be hurt by "dmg" points of damage once per server frame (very fast). A sizzling sound is also played while the player is being hurt.
+-------- KEYS --------
+dmg : number of points of damage inflicted to player per server frame (default 5 - integer values only).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+START_OFF needs to be triggered (toggle) for damage
+SILENT : supresses the sizzling sound while player is being hurt.
+NO_PROTECTION : player will be hurt regardless of protection (see Notes).
+SLOW : changes the damage rate to once per second.
+-------- NOTES --------
+The invulnerability power-up (item_enviro) does not protect the player from damage caused by this entity regardless of whether the NO_PROTECTION spawnflag is set or not. Triggering a trigger_hurt will have no effect if the START_OFF spawnflag is not set. A trigger_hurt always starts on in the game.*/
+
+//=============================================================================
+
+/*QUAKED trigger_multiple (.5 .5 .5) ?
+Variable size repeatable trigger. It will fire the entities it targets when touched by player. Can be made to operate like a trigger_once entity by setting the "wait" key to -1. It can also be activated by another trigger that targets it.
+-------- KEYS --------
+target : this points to the entity to activate.
+targetname : activating trigger points to this.
+wait : time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/
+
+//=============================================================================
+
+/*QUAKED trigger_push (.5 .5 .5) ?
+This is used to create jump pads and launch ramps. It MUST point to a target_position or info_notnull entity to work. Unlike target_push, this is client side predicted.
+-------- KEYS --------
+target : this points to the target_position to which the player will jump.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+To make a jump pad or launch ramp, place the target_position/info_notnull entity at the highest point of the jump and target it with this entity.*/
+
+//=============================================================================
+
+/*QUAKED trigger_teleport (.5 .5 .5) ?
+Touching this will teleport players to the location of the targeted misc_teleporter_dest entity. This entity allows client prediction of events.
+-------- KEYS --------
+target : this must point to a misc_teleporter_dest entity.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).*/
+
+//=============================================================================
+
+WEAPON_* ENTITIES
+
+//=============================================================================
+
+/*QUAKED weapon_bfg (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Big Freaking Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 20).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/bfg/bfg.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_gauntlet (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Gauntlet.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/gauntlet/gauntlet.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_grapplinghook (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Grappling Hook. Spawns in the game and works but is unskinned.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/grapple/grapple.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_grenadelauncher (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Grenade Launcher.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/grenadel/grenadel.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_lightning (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Lightning Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models\weapons2\lightning\lightning.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_machinegun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Machine Gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 100).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models\weapons2\machinegun\machinegun.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_plasmagun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Plasma gun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 50).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/plasma/plasma.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_railgun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Railgun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/railgun/railgun.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_rocketlauncher (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Rocket Launcher.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/rocketl/rocketl.md3"*/
+
+//=============================================================================
+
+/*QUAKED weapon_shotgun (1 0 .5) (-16 -16 -16) (16 16 16) SUSPENDED
+Shotgun.
+-------- KEYS --------
+wait : time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+count: sets the amount of ammo given to the player when weapon is picked up (default 10).
+team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
+target : picking up the item will trigger the entity this points to.
+targetname : a target_give entity can point to this for respawn freebies.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+notbot : used to make an item invisible for bot attraction.
+-------- SPAWNFLAGS --------
+SUSPENDED : item will spawn where it was placed in map and won't drop to the floor.
+-------- NOTES --------
+The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.
+
+When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/weapons2/shotgun/shotgun.md3"*/
+
+//=============================================================================
+
+WORLDSPAWN ENTITY
+
+//=============================================================================
+
+/*QUAKED worldspawn (0 0 0) ?
+Only used for the world.
+-------- KEYS --------
+message : text to print at user logon. Used for name of level.
+music : path/name of looping .wav file used for level's music (eg. music/sonic5.wav).
+_ambient OR ambient : Adds a constant value to overall lighting. Use is not recommended. Ambient light will have a tendency to flatten out variations in light and shade.
+_color : RGB value for ambient light color (default is 0 0 0).
+gravity : gravity of level (default is normal gravity: 800).
+gridsize : granularity of the lightgrid created by q3map. Value is three integers separated by spaces, representing number of units between grid points in X Y Z. Default gridsize value is 128 128 256. Use larger powers of 2 to reduce BSP size and compile time on very large maps.
+_blocksize : q3map always splits the BSP tree along the planes X=_blocksize*n and Y=_blocksize*n. Default _blocksize value is 1024. Increase the blocksize using larger powers of 2 to reduce compile times on very large maps with a low structural brush density.
+-------- Q3MAP2 KEYS --------
+_minlight : Minimum light value, levelwide. Uses the _color key to set color. Does not add unlike ambient.
+_minvertexlight : Minimum vertex lighting, levelwide.
+_mingridlight : Minimum lightgrid (dynamic entity lighting) levelwide.
+_keeplights : Keep light entities in the BSP. Normally stripped out by the BSP process and read from the .map file by the lighting phase.
+_noshadersun : Ignore q3map_sun/sun directives in sky shaders and ONLY use entity sun lights.
+_farplanedist : Limit on how many units the vis phase of compilation can see. Used in combination with level-wide fog, it can help reduce r_speeds on large, open maps.
+_foghull : Shader to use for "fog hull." Foghull shader should be a sky shader. Omit the "textures/" prefix.
+_lightmapscale : Floating point value scaling the resolution of lightmaps on brushes/patches in the world. Can be overridden in func_group (or other entities) (default 1.0).
+_cs OR _castshadows : Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_rs OR _receiveshadows : Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_celshader : Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. Overridable in entities.
+-------- Q3MAP2 TERRAIN KEYS --------
+_indexmap OR alphamap : Path/name for the art file used to guide the mapping of textures on the terrain surface.
+_layers OR layers : Integer value is the number unique root shaders that will be use on the terrain.
+_shader OR shader : Path to the metashader used to assign textures to the terrain entity. Note: Omit the "textures/" prefix.*/
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/shaderlist.txt b/install/installs/UrTPack/install/q3ut4/scripts/shaderlist.txt
new file mode 100644
index 0000000..96437de
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/shaderlist.txt
@@ -0,0 +1,150 @@
+common
+27s
+abbey
+abbey2
+abbey2ctf
+algiers
+allbsps
+ammo
+austria
+autoclip
+backhoe
+base_floor
+base_light
+base_support
+bbq
+bbq2
+bbq7
+bbqshaders
+bk
+blood
+bloodnew
+bombexp
+box15
+box293
+box337
+br_flowers
+br_flowers_tub
+br_trees
+casa_lamp
+cave
+cel
+codey1
+coinbird01
+cow
+cow2
+crenshaw_vehicles
+crossing
+crystal
+damage
+decal
+defcon_tree
+density
+eagle
+eaglesky
+eagle_water
+egypt
+engine_internal
+flame
+fogcaulk
+foliage
+foliage2
+funstuff
+gfx
+glass
+goggleglass
+gothic_light
+GRtrees
+hair
+harbortown
+jeffladderclip
+kingdom2
+landscapelighting
+LGPT-Models
+lightgrid
+liquid
+liquids
+masheen
+masheen_sky
+mayac
+mayaorganicc
+mayaterc
+mc-uptown
+metals
+mirror
+miscb3
+models
+mrsentry
+newnvg
+nrgizer
+null_beach
+numbers
+oldtruck
+palms
+palmtree
+patio
+prop_bubbles
+qura
+rc_glass
+realworld_light
+riches
+riches_alpha
+riches_alpha_bk
+riches_light
+riches_skies
+riva
+riyadh_lamp
+roman_armor
+sarah
+scopering
+scopes
+sfx
+sggatec
+shminkylights
+sinnifunstuff
+sky
+sky_thingley
+sn_smoke
+streetlamp
+sweetnutz
+sweetnutz3
+swim
+tom
+toxic2sky
+toxiclight
+toxicscripts
+toxicsky
+toxic_water
+true_fence
+tunis
+tunis_sky
+turnpike
+urbanq3_misc2
+urban_terror
+urban_terror_light
+ut4_firingrange
+ut4_suburbs
+utfx
+utplayers
+ut_elgin
+ut_prague
+ut_riyadh
+ut_riyadh_lm
+ut_subway
+ut_subway2
+ut_swim
+ut_trees1
+vdocks
+village2
+watercaulk
+weapon
+weapondecals
+wuxut1
+xguns
+zmultiplant
+zzzzlaberinto2
+zzzzut_casadd
+zzzzz_sanc
+zzz_sanc
+z_newbh
+z_nvg
diff --git a/install/installs/UrTPack/install/q3ut4/scripts/urbanterror.def b/install/installs/UrTPack/install/q3ut4/scripts/urbanterror.def
new file mode 100644
index 0000000..d78faf6
--- /dev/null
+++ b/install/installs/UrTPack/install/q3ut4/scripts/urbanterror.def
@@ -0,0 +1,437 @@
+//=================================================================================
+// Urban Terror beta3.2 entities.def for QERadiant
+//=================================================================================
+
+// This file contains the entities for use in Urban Terror maps. They will only work
+// with the Urban Terror mod.
+
+
+
+//=================================================================================
+// Structural entities (doors, breakables, etc.)
+//=================================================================================
+
+// * * * * * * * *
+
+/*QUAKED func_button (0 .5 .8) ?
+When a button is touched by a player, it moves in the direction set by the "angle" key, triggers all its targets, stays pressed by an amount of time set by the "wait" key, then returns to it's original position where it can be operated again.
+
+-------- KEYS --------
+angle : determines the direction in which the button will move (up = -1, down = -2).
+target : all entities with a matching targetname will be triggered.
+speed : speed of button's displacement (default 40).
+wait : number of seconds button stays pressed (default 1, -1 = return immediately).
+lip : lip remaining at end of move (default 4 units).
+health : if set to a non-zero value, the button must be damaged by "health" amount of points to operate.
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+push_sound : sound that gets played when button gets pushed ("none" for nothing, defaults to a elevator Q3 sound)
+
+-------- NOTES --------
+Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.*/
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_door (0 .5 .8) ? START_OPEN - CRUSHER
+Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted to it.
+
+-------- KEYS --------
+angle : determines the opening direction of door (up = -1, down = -2).
+speed : determines how fast the door moves (default 100).
+wait : number of seconds before door returns (default 2, -1 = return immediately)
+lip : lip remaining at end of move (default 8)
+targetname : if set, a func_button or trigger is required to activate the door.
+health : if set to a non-zero value, the door must be damaged by "health" amount of points to activate (default 0).
+dmg : damage to inflict on player when he blocks operation of door (default 4). Door will reverse direction when blocked unless CRUSHER spawnflag is set.
+team: assign the same team name to multiple doors that should operate together (see Notes).
+only : set to allow only one team to use this entity, used for CTF or other respawn type modes to create spawn rooms. Values: blue or red - Default: anyone
+CloseWhenIdle: when set to 1, the door will close as soon as there are no players in the triggering brush (For CTF Spawn Room doors, SEE NOTES!)
+trigger_only : set to 1 if the door can only be opened by a switch or trigger (ie: prevents a player from opening it manually)
+pos1 : sound to play when door starts moving ("none" for nothing, defaults to a creak)
+pos2 : sound to play when door stops moving ("none" for nothing, defaults to a creak)
+noise : looping sound as door is moving
+light : constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
+color : constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+origin : alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+
+-------- SPAWNFLAGS --------
+START_OPEN : the door will spawn in the open state and operate in reverse.
+CRUSHER : door will not reverse direction when blocked and will keep damaging player until he dies or gets out of the way.
+
+-------- NOTES --------
+- To use the CloseWhenIdle setting for CTF Spawn Room doors, you must also set trigger_only, and use a trigger_multiple to open the door. This will cause the door to remain open only as long as a player is in the triggering brush. Set the 'wait' key on the trigger_multiple to a very low value( < 1 like .25 )
+- Unlike in Quake 2, doors that touch are NOT automatically teamed. If you want doors to operate together, you have to team them manually by assigning the same team name to all of them. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.*/
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_rotating_door (1 0 0) ?
+
+-------- KEYS --------
+pos1 : sound to play when door starts moving ("none" for nothing, defaults to a creak)
+pos2 : sound to play when door stops moving ("none" for nothing, defaults to a creak)
+noise : looping sound to play as door is moving (defaults to no sound)
+targetname : name of a target to trigger when door opens
+color : constantLight color
+light : constantLight radius
+direction : force door to open in a set direction: -1 is clockwise, 1 is ccw
+speed : defaults to 100, speed at which door opens
+wait : how long to wait until door auto-closes (default is 0, which means stay open)
+trigger_only : set to 1 if the door can only be opened by a switch or trigger(ie: prevents a player from opening it manually)
+axis : door rotation axis, values: 0 (for x-axis), 1(for y-axis), 2(for z-axis) (if not given, default is 2 for z-axis)
+damage : damage door does to a player if they block it (leave out in most cases)
+gamemode_open : gametypes to have the door locked in the open position
+gamemode_shut : gametypes to have the door locked in the closed position
+only : set to allow only one team to use this entity, used for CTF or other respawn type modes to create spawn rooms. Values: blue or red - Default: anyone
+
+-------- NOTES --------
+Rotating doors cannot be shot open, and will only close or open if activated
+by a player. They will not automatically close after a period either. In
+game modes not listed under either gamemode_open or gamemode_shut, the doors
+will open and close normally.
+
+You construct a rotating door just like a FUNC_ROTATING: it needs an origin
+brush to act as the hinge.
+
+Urban Terror gametype mappings are:
+Free For All 0
+Single Player 1
+Team Deathmatch 3
+Team Survivor 4
+Assasins 5
+Capture And Hold 6
+Capture The Flag 7
+Bomb 8
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_breakable (0 .5 .8) ?
+A breakable thing just sits there, doing nothing,
+but will break if damaged or collided with.
+
+-------- KEYS --------
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+color : constantLight color
+light : constantLight radius
+type : 0: glass 1: wood 2: ceramic 3: plastic 4: metal-normal 5: metal-explosives 6: metal-hk69 7: stone-explosives 8: stone-hk69 9: wood-explosives 10: wood-hk69(SEE NOTES)
+axis : 1 - x, 2 - y, 4 - z
+health : health of object
+model2 : path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
+shards : number of shards object should shatter into (0-255)
+bombable : allows the entity to be destroyed by the bomb in bomb mode. The size of blast shown when the entity breaks is determined by this value (Values : 1 none - 255 huge blast).
+
+-------- NOTES --------
+ - For glass windows that break easily, set health to 1.
+ - Any func_breakable with a health of less than 10 will slowly weaken if a player is in contact with it. You can make a roof that collapses in after a period of time by setting the health to a value like 5. This will mean that a player standing on such a surface for around 5 seconds will fall thru. The effect is cumulative: if you stand there for 3 seconds and then come back you can only stand on it for another 2 seconds.
+ - The type parameter selects the shader that is used for fragments and sets the sound the object makes when it breaks.
+ - If the brush you are making is on an angle (for example, a skylight in a sloping roof) then you will need to set the break axis to "4" if you want it to break when people stand on it.
+ - You can build anything to break using the breakables. Use the model2 key to create things like breakable pots -- see Wetwired's map "ricochet" for an example.
+ - Set shards as high as you want (it maxes out at 32 anyway) - players can reduce the number of shards they see using cg_maxFragments
+ - Bombable key is to be used for things that can only be broken by the Bomb Mode bomb explosion. For example a large propane tank near a bomb target. The key's value will determine the size of the explosion graphics from this entity when broken, with a value of 1 being no explosion and a value of 255 being a large secondary blast.
+ - Type values info for 1,2,3,4 - The game will attenuate the damage caused by each hit to a value of 1-3. Health values above 10 will choose a random health between 6 and 10. Specifics are as follows: 0: is for glass/windows 1: is for all woods 2: is for ceramics and pottery 3: is for various plastics 4: is for metal that can be broken by normal means
+ - Type values info for 5,6,7,8,9,10 - The game will use the literal health value compared to the weapon damages. They should be set quite high (metals and stone at 50+). Specifics are as follows: 5: is for metal that requires explosives to break (HE grenade or hk69) 6: is for metal that requires the hk69 to break 7: is for stone that requires explosives to break (HE grenade or hk69) 8: is for stone that requires the hk69 to break 9: is for wood that requires explosives to break (HE grenade or hk69) 10: is for wood that requires the hk69 to break
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_wall (0 .5 .8) ?
+
+-------- KEYS --------
+gametype : gametypes to have the wall appear in, list types in this format: 01234 (default none)
+
+-------- NOTES --------
+This entity is any brush or combination of brushes that you wish to have appear in gametypes specified.
+Common uses are to cut of map sections to streamline gameplay for TS, or to expand the map for CTF or Bomb.
+You cannot use a model as a func_wall.
+
+Create your brush(es), select it (or them), then make them a func_wall and set gametype keys.
+
+Urban Terror gametype mappings are:
+Free For All 0
+Single Player 1
+Team Deathmatch 3
+Team Survivor 4
+Assasins 5
+Capture And Hold 6
+Capture The Flag 7
+Bomb 8
+*/
+
+// * * * * * * * *
+
+//=================================================================================
+// Train entities (Anything that has anything to do with the func_ut_train)
+//=================================================================================
+
+// * * * * * * * *
+
+/*QUAKED func_ut_train (.6 .1 .8) ? START_ON TOGGLE BLOCK_STOPS CRUSHER
+A train is a mover that moves between path_ut_stop target points.
+
+-------- KEYS --------
+model2 : .md3 model to also draw
+name : to associate with a set of control buttons
+noise : looping sound to play when the train is in motion
+color : constantLight color
+light : constantLight radius
+speed : default 350
+dmg : default 0
+target : first path_ut_stop, train spawns here
+interface : the targetname of the func_keyboard_interface that belongs to this train
+id : to uniquely associate it with a set of control buttons
+startSound : sound to play when train begins moving to a new destination
+stopSound : sound to play when train arrives at a final stop
+noise : constant looping sound to always be playing where the train is
+
+-------- NOTES --------
+- Trains MUST HAVE AN ORIGIN BRUSH.
+- The train spawns at the first target it is pointing at.
+- The train will move to any stop from any stop. See the description for the func_keyboard_interface for more info.
+
+*/
+
+// * * * * * * * *
+
+/*QUAKED func_keyboard_interface (.5 .6 .5) ?
+keyboard menu interface
+
+-------- KEYS --------
+display : if 0, menu is not dispayed, if 1, menu is displayed, default 1
+id : id of the func_ut_train that this interface associates with
+targetname : id for the func_ut_train key "interface" to associate it with the right func_ut_train
+option1 : text message to describe the first destination
+option2 : text message to describe the second destination
+option3 : text message to describe the third destination
+option4 : text message to describe the fourth destination
+option5 : text message to describe the five destination
+stop1 : targetname of first destination
+stop2 : targetname of second destination
+stop3 : targetname of third destination
+stop4 : targetname of fourth destination
+stop5 : targetname of fifth destination
+stop2from1 : beginning of path from 1 to 2
+stop3from1 : beginning of path from 1 to 3
+stop4from1 : beginning of path from 1 to 4
+stop5from1 : beginning of path from 1 to 5
+stop1from2 : beginning of path from 2 to 1
+stop3from2 : beginning of path from 2 to 3
+stop4from2 : beginning of path from 2 to 4
+stop5from2 : beginning of path from 2 to 5
+stop1from3 : beginning of path from 3 to 1
+stop2from3 : beginning of path from 3 to 2
+stop4from3 : beginning of path from 3 to 4
+stop5from3 : beginning of path from 3 to 5
+stop1from4 : beginning of path from 4 to 1
+stop2from4 : beginning of path from 4 to 2
+stop3from4 : beginning of path from 4 to 3
+stop5from4 : beginning of path from 4 to 5
+stop1from5 : beginning of path from 5 to 1
+stop2from5 : beginning of path from 5 to 2
+stop3from5 : beginning of path from 5 to 3
+stop4from5 : beginning of path from 5 to 4
+
+-------- NOTES --------
+- All the stopXfromY (where X and Y are numbers) should target a path_ut_stop
+- The stopX keys (where X is a number) should target the ending path_ut_stop, i.e. the last stop at location X.
+- The optionX keys (where X is a number) corresponds to the stopX keys. So if you set the name "top floor" for option1, make sure that stop1 actually is at the "top floor"
+*/
+
+// * * * * * * * *
+
+/*QUAKED path_ut_stop (.5 .3 0) (-8 -8 -8) (8 8 8)
+Train path stops.
+
+-------- KEYS --------
+target : next path stop and other targets to fire
+trainID : the id of the train that this stop is for
+wait : the amount of time train should wait at this stop, default is 0
+rotationTime : the amount of time (in milleseconds) that the train should rotate for at this stop according to yawSpeed, pitchSpeed, and rollSpeed
+yawSpeed : the speed of yaw rotation that the train will do once at this stop for rotationTime amound of milleseconds
+pitchSpeed : the speed of pitch rotation that the train will do once at this stop for rotationTime amound of milleseconds
+rollSpeed : the speed of roll rotation that the train will do once at this stop for rotationTime amound of milleseconds
+
+-------- NOTES --------
+- Pitch and roll doesn't work very well right now because of the collision handling of Q3. This makes it hard to make things that the player is supposed to ride work properly. Trial and error would probably be the best method to find out what works and what doesn't.
+- You can have the path_ut_stop trigger almost anything. For example, you could use it to open a door or to trigger a func_button.
+*/
+
+// * * * * * * * *
+
+//=============================================================================
+// Active entities (Non-structural, trigger type entities)
+//=============================================================================
+
+// * * * * * * * *
+
+/*QUAKED trigger_multiple (.5 .5 .5) ?
+Variable size repeatable trigger. It will fire the entities it targets when touched by player. Can be made to operate like a trigger_once entity by setting the "wait" key to -1. It can also be activated by another trigger that targets it.
+-------- KEYS --------
+target : this points to the entity to activate.
+targetname : activating trigger points to this.
+wait : time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once SEE NOTES).
+random : random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
+only : set to allow only one team to use this entity, used for CTF or other respawn type modes to create spawn rooms. Values: blue or red - Default: anyone
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- NOTES --------
+- Set the 'wait' key to .25 if using the CloseWhenIdle key when triggering a door
+- When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+*/
+
+// * * * * * * * *
+
+//=================================================================================
+// Gametype entities (Special UT gametype entities)
+//=================================================================================
+
+// * * * * * * * *
+
+/*QUAKED info_ut_spawn (1 .5 0) (-16 -16 -24) (16 16 32) initial
+potential spawning position for Urban Terror.
+
+-------- KEYS --------
+team : team that this spawn belongs to ("red" or "blue")
+group : this spawn groups with others of same groupID. A team chooses spawns from a certain group.
+g_gametype : a list of gametypes on which to use this spawn eg: "4, 5, 6"
+
+-------- NOTES --------
+Urban Terror gametype mappings are:
+Free For All 0
+Single Player 1
+Team Deathmatch 3
+Team Survivor 4
+Assasins 5
+Capture And Hold 6
+Capture The Flag 7
+Bomb 8
+
+You'd use the groups key in maps if you wanted to make sure a team will spawn together in a certain location,
+so you might take 8 spawn points, give them all gametypes of "3,4,5,6,7" (all teamplays) and then assign all
+the eight a group id of "1" then you might do another eight and make their group id all "2". UT will choose a
+"group" at the begining of a round and spawn all members of "team" there. Normally you'd have at few groups
+of spawns so you could have lots of potential team starting positions.
+*/
+
+// * * * * * * * *
+
+/*QUAKED team_CAH_capturepoint (0 .2 1) (-32 -32 -16) (32 32 76)
+zone that can be captured in the Capture and Hold gametype (CAH)
+
+-------- NOTES --------
+The capture point will be represented with a flag and a player must touch the flag to capture it.
+The name of the location of the capturepoint will be retrieved from either the trigger_location or the nearest target_location.
+*/
+
+//---------------------------------------------------------------------------------
+// Bomb Mode!
+//---------------------------------------------------------------------------------
+
+/*QUAKED info_ut_bombsite (0 .2 1) (-16 -16 -24) (16 16 32)
+
+-------- NOTES --------
+This entity cannot hover, it must be placed directly on the surface that you wish the bomb to be placed on.
+NEW in 3.2: Bomb plant range is locked to 64 units. Once the bomb is planted, it will snap to the center of the entity
+for easier diffusing.
+WARNING: You MUST have 2 bomb sites per map or the map will crash upon loading into bomb mode.
+*/
+
+// * * * * * * * *
+
+//=================================================================================
+// Misc entities (Everything that didn't fit in anywhere else)
+//=================================================================================
+
+// * * * * * * * *
+
+/*QUAKED worldspawn (0 0 0) ?
+Only used for the world.
+
+-------- KEYS --------
+message : text to print at user logon. Used for name of level.
+music : path/name of looping .wav file used for level's music (eg. music/sonic5.wav).
+ambient : Adds a constant value to overall lighting. Use is not recommended. Ambient light will have a tendency to flatten out variations in light and shade.
+_color : RGB value for ambient light color.
+gravity : gravity of level (default is normal gravity: 800).
+enablePrecip : 0 - (default) none, 1 - rain, 2 - snow
+precipAmount : up to 1024, number of drops/flakes (256 is good)
+*/
+
+// * * * * * * * *
+
+/*QUAKED trigger_location (1 1 0) ? - -
+Speicifes the name of a location when the player is within this trigger.
+
+-------- KEYS --------
+message : name of the location (text string). Displayed in parentheses in front of all team chat and order messages.
+count : color of the location text displayed in parentheses during team chat. Set to 0-7 for color.
+Attacking_Team : For Bomb Mode ONLY - when set to 1, the BLUE team will be the attacker, set to 0 if you want the RED team to attack. Default 0 (RED is Attacker)
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+
+-------- NOTES --------
+The values for the colors that can be set in the count key are as follows:
+
+0 : white (default)
+1 : red
+2 : green
+3 : yellow
+4 : blue
+5 : cyan
+6 : magenta
+7 : white
+*/
+
+// * * * * * * * *
+
+/*QUAKED ut_mrsentry (1 .5 0) (-16 -16 -24) (16 16 32)
+Spawn location for the CTF Spawn Room Sentry Cannon.
+
+-------- KEYS --------
+team : Team that Mr. Sentry belongs to. Will eliminate opposing team members within range (SEE NOTES). ("red" or "blue")
+angle : Inital and idle angle for the turret. Generally point this at or near the Spawn Room doors for highest effectiveness.
+gametype : gametypes to have Mr. Sentry appear in, list types in this format: 01234
+
+-------- NOTES --------
+Mr. Sentry is designed to be used in conjunction with CTF Spawn Rooms (see the Notes on the func_door entity) to prevent enemy team players from surviving if they enter the opposing team's spawn room. Even though the properly set up doors will generally prevent this, Mr. Sentry also has one other function. It will kill any Flag Carrier that enters it's range no matter what team that player is on. This will prevent players from grabbing the flag and retreating the the complete safety of their Spawn Room and waiting out the rest of the map time with the flag.
+
+For the anti-flag-camp feature to work properly, the entire spawn room must be enclosed with a 'nodrop' (a brush with the 'nodrop' texture on all sides). If this brush (or group of brushes) isn't placed, then Mr. Sentry will kill the Flag Carrier, and the flag will remain at that location, which is bad.
+*/
+
+// * * * * * * * *
+
+/*QUAKED target_speaker (0 .7 .7) (-8 -8 -8) (8 8 8) LOOPED_ON LOOPED_OFF GLOBAL ACTIVATOR
+Sound generating entity that plays .wav files. Normal non-looping sounds play each time the target_speaker is triggered. Looping sounds can be set to play by themselves (no activating trigger) or be toggled on/off by a trigger.
+-------- KEYS --------
+noise : path/name of .wav file to play (eg. sound/world/growl1.wav - see Notes).
+gametype : Specifies gametypes to play the sound in. If this key is not used, sound will play in all gametypes. List types in this format: 01234
+wait : delay in seconds between each time the sound is played ("random" key must be set - see Notes).
+random : random time variance in seconds added or subtracted from "wait" delay ("wait" key must be set - see Notes).
+targetname : the activating button or trigger points to this.
+notfree : when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
+notteam : when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
+notsingle : when set to 1, entity will not spawn in Single Player mode (bot play mode).
+-------- SPAWNFLAGS --------
+LOOPED_ON : sound will loop and initially start on in level (will toggle on/off when triggered).
+LOOPED_OFF : sound will loop and initially start off in level (will toggle on/off when triggered).
+GLOBAL : sound will play full volume throughout the level.
+ACTIVATOR : sound will play only for the player that activated the target.
+-------- NOTES --------
+The path portion value of the "noise" key can be replaced by the implicit folder character "*" for triggered sounds that belong to a particular player model. For example, if you want to create a "bottomless pit" in which the player screams and dies when he falls into, you would place a trigger_multiple over the floor of the pit and target a target_speaker with it. Then, you would set the "noise" key to "*falling1.wav". The * character means the current player model's sound folder. So if your current player model is Visor, * = sound/player/visor, if your current player model is Sarge, * = sound/player/sarge, etc. This cool feature provides an excellent way to create "player-specific" triggered sounds in your levels.
+
+The combination of the "wait" and "random" keys can be used to play non-looping sounds without requiring an activating trigger but both keys must be used together. The value of the "random" key is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
+*/
+
+// * * * * * * * *
diff --git a/install/share/locale/fa/LC_MESSAGES/atk10.mo b/install/share/locale/fa/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..77597ff
Binary files /dev/null and b/install/share/locale/fa/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/fa/LC_MESSAGES/glib20.mo b/install/share/locale/fa/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..fb3341e
Binary files /dev/null and b/install/share/locale/fa/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/fa/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/fa/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..8e2a18b
Binary files /dev/null and b/install/share/locale/fa/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/fa/LC_MESSAGES/gtk20.mo b/install/share/locale/fa/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..e71f231
Binary files /dev/null and b/install/share/locale/fa/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/fi/LC_MESSAGES/atk10.mo b/install/share/locale/fi/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..30790df
Binary files /dev/null and b/install/share/locale/fi/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/fi/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/fi/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..7563b17
Binary files /dev/null and b/install/share/locale/fi/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/fi/LC_MESSAGES/glib20.mo b/install/share/locale/fi/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..605f072
Binary files /dev/null and b/install/share/locale/fi/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/fi/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/fi/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..41a78fb
Binary files /dev/null and b/install/share/locale/fi/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/fi/LC_MESSAGES/gtk20.mo b/install/share/locale/fi/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..a01ffe7
Binary files /dev/null and b/install/share/locale/fi/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/fr/LC_MESSAGES/atk10.mo b/install/share/locale/fr/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..45efdab
Binary files /dev/null and b/install/share/locale/fr/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/fr/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/fr/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..3c8e653
Binary files /dev/null and b/install/share/locale/fr/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/fr/LC_MESSAGES/glib20.mo b/install/share/locale/fr/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..da10ca2
Binary files /dev/null and b/install/share/locale/fr/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/fr/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/fr/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..40dfca2
Binary files /dev/null and b/install/share/locale/fr/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/fr/LC_MESSAGES/gtk20.mo b/install/share/locale/fr/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..ce6539a
Binary files /dev/null and b/install/share/locale/fr/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ga/LC_MESSAGES/atk10.mo b/install/share/locale/ga/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..5184653
Binary files /dev/null and b/install/share/locale/ga/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ga/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/ga/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..7643c1a
Binary files /dev/null and b/install/share/locale/ga/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/ga/LC_MESSAGES/glib20.mo b/install/share/locale/ga/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..1b46539
Binary files /dev/null and b/install/share/locale/ga/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ga/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ga/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..28e9561
Binary files /dev/null and b/install/share/locale/ga/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ga/LC_MESSAGES/gtk20.mo b/install/share/locale/ga/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..3a3e907
Binary files /dev/null and b/install/share/locale/ga/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/gl/LC_MESSAGES/atk10.mo b/install/share/locale/gl/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..e3b3266
Binary files /dev/null and b/install/share/locale/gl/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/gl/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/gl/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..d63c0a9
Binary files /dev/null and b/install/share/locale/gl/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/gl/LC_MESSAGES/glib20.mo b/install/share/locale/gl/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..9080329
Binary files /dev/null and b/install/share/locale/gl/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/gl/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/gl/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..81473be
Binary files /dev/null and b/install/share/locale/gl/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/gl/LC_MESSAGES/gtk20.mo b/install/share/locale/gl/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..b46e8ad
Binary files /dev/null and b/install/share/locale/gl/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/gu/LC_MESSAGES/atk10.mo b/install/share/locale/gu/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..356fe62
Binary files /dev/null and b/install/share/locale/gu/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/gu/LC_MESSAGES/glib20.mo b/install/share/locale/gu/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..605dde8
Binary files /dev/null and b/install/share/locale/gu/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/gu/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/gu/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..e723202
Binary files /dev/null and b/install/share/locale/gu/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/gu/LC_MESSAGES/gtk20.mo b/install/share/locale/gu/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..4a952bb
Binary files /dev/null and b/install/share/locale/gu/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/he/LC_MESSAGES/atk10.mo b/install/share/locale/he/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..56b0be2
Binary files /dev/null and b/install/share/locale/he/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/he/LC_MESSAGES/glib20.mo b/install/share/locale/he/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..544a160
Binary files /dev/null and b/install/share/locale/he/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/he/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/he/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..be8e002
Binary files /dev/null and b/install/share/locale/he/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/he/LC_MESSAGES/gtk20.mo b/install/share/locale/he/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..a070d74
Binary files /dev/null and b/install/share/locale/he/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/hi/LC_MESSAGES/atk10.mo b/install/share/locale/hi/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..cb9ef43
Binary files /dev/null and b/install/share/locale/hi/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/hi/LC_MESSAGES/glib20.mo b/install/share/locale/hi/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..9dbf4cd
Binary files /dev/null and b/install/share/locale/hi/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/hi/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/hi/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..c11ff84
Binary files /dev/null and b/install/share/locale/hi/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/hi/LC_MESSAGES/gtk20.mo b/install/share/locale/hi/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..da4a1a1
Binary files /dev/null and b/install/share/locale/hi/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/hr/LC_MESSAGES/atk10.mo b/install/share/locale/hr/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..002cc8e
Binary files /dev/null and b/install/share/locale/hr/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/hr/LC_MESSAGES/glib20.mo b/install/share/locale/hr/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..5f35824
Binary files /dev/null and b/install/share/locale/hr/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/hr/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/hr/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..d3ef7a1
Binary files /dev/null and b/install/share/locale/hr/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/hr/LC_MESSAGES/gtk20.mo b/install/share/locale/hr/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..d0f12dd
Binary files /dev/null and b/install/share/locale/hr/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/hu/LC_MESSAGES/atk10.mo b/install/share/locale/hu/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..e56f566
Binary files /dev/null and b/install/share/locale/hu/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/hu/LC_MESSAGES/glib20.mo b/install/share/locale/hu/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..10285c9
Binary files /dev/null and b/install/share/locale/hu/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/hu/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/hu/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..d52d1ed
Binary files /dev/null and b/install/share/locale/hu/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/hu/LC_MESSAGES/gtk20.mo b/install/share/locale/hu/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..66acf81
Binary files /dev/null and b/install/share/locale/hu/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/hy/LC_MESSAGES/glib20.mo b/install/share/locale/hy/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..534563d
Binary files /dev/null and b/install/share/locale/hy/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/hy/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/hy/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..5685413
Binary files /dev/null and b/install/share/locale/hy/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/hy/LC_MESSAGES/gtk20.mo b/install/share/locale/hy/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..b0e0c28
Binary files /dev/null and b/install/share/locale/hy/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ia/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ia/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..30b2f40
Binary files /dev/null and b/install/share/locale/ia/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ia/LC_MESSAGES/gtk20.mo b/install/share/locale/ia/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..850f2a5
Binary files /dev/null and b/install/share/locale/ia/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/id/LC_MESSAGES/atk10.mo b/install/share/locale/id/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..adf271a
Binary files /dev/null and b/install/share/locale/id/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/id/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/id/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..0acd1d9
Binary files /dev/null and b/install/share/locale/id/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/id/LC_MESSAGES/glib20.mo b/install/share/locale/id/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..08414c0
Binary files /dev/null and b/install/share/locale/id/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/id/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/id/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..59569c3
Binary files /dev/null and b/install/share/locale/id/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/id/LC_MESSAGES/gtk20.mo b/install/share/locale/id/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..993e8c6
Binary files /dev/null and b/install/share/locale/id/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/io/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/io/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..3c78dc9
Binary files /dev/null and b/install/share/locale/io/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/io/LC_MESSAGES/gtk20.mo b/install/share/locale/io/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..ec9d030
Binary files /dev/null and b/install/share/locale/io/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/is/LC_MESSAGES/atk10.mo b/install/share/locale/is/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..cda2ccc
Binary files /dev/null and b/install/share/locale/is/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/is/LC_MESSAGES/glib20.mo b/install/share/locale/is/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..d904b19
Binary files /dev/null and b/install/share/locale/is/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/is/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/is/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..3654864
Binary files /dev/null and b/install/share/locale/is/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/is/LC_MESSAGES/gtk20.mo b/install/share/locale/is/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..f1632a4
Binary files /dev/null and b/install/share/locale/is/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/it/LC_MESSAGES/atk10.mo b/install/share/locale/it/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..16d4113
Binary files /dev/null and b/install/share/locale/it/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/it/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/it/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..5d6a6a4
Binary files /dev/null and b/install/share/locale/it/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/it/LC_MESSAGES/glib20.mo b/install/share/locale/it/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..ca357d3
Binary files /dev/null and b/install/share/locale/it/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/it/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/it/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..8bbcca7
Binary files /dev/null and b/install/share/locale/it/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/it/LC_MESSAGES/gtk20.mo b/install/share/locale/it/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..4fa8bdd
Binary files /dev/null and b/install/share/locale/it/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ja/LC_MESSAGES/atk10.mo b/install/share/locale/ja/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..c98014d
Binary files /dev/null and b/install/share/locale/ja/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ja/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/ja/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..c9c4ccb
Binary files /dev/null and b/install/share/locale/ja/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/ja/LC_MESSAGES/glib20.mo b/install/share/locale/ja/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..9d59e91
Binary files /dev/null and b/install/share/locale/ja/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ja/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ja/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..b862604
Binary files /dev/null and b/install/share/locale/ja/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ja/LC_MESSAGES/gtk20.mo b/install/share/locale/ja/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..967eead
Binary files /dev/null and b/install/share/locale/ja/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ka/LC_MESSAGES/atk10.mo b/install/share/locale/ka/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..5f54a09
Binary files /dev/null and b/install/share/locale/ka/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ka/LC_MESSAGES/glib20.mo b/install/share/locale/ka/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..80cbd0f
Binary files /dev/null and b/install/share/locale/ka/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ka/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ka/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..e4d23d4
Binary files /dev/null and b/install/share/locale/ka/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ka/LC_MESSAGES/gtk20.mo b/install/share/locale/ka/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..ccd0d99
Binary files /dev/null and b/install/share/locale/ka/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/kn/LC_MESSAGES/atk10.mo b/install/share/locale/kn/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..a155c2f
Binary files /dev/null and b/install/share/locale/kn/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/kn/LC_MESSAGES/glib20.mo b/install/share/locale/kn/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..7e6d1fc
Binary files /dev/null and b/install/share/locale/kn/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/kn/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/kn/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..11d91dc
Binary files /dev/null and b/install/share/locale/kn/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/kn/LC_MESSAGES/gtk20.mo b/install/share/locale/kn/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..572b6ed
Binary files /dev/null and b/install/share/locale/kn/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ko/LC_MESSAGES/atk10.mo b/install/share/locale/ko/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..ab10bba
Binary files /dev/null and b/install/share/locale/ko/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ko/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/ko/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..9323cac
Binary files /dev/null and b/install/share/locale/ko/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/ko/LC_MESSAGES/glib20.mo b/install/share/locale/ko/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..161e74f
Binary files /dev/null and b/install/share/locale/ko/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ko/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ko/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..4b642ba
Binary files /dev/null and b/install/share/locale/ko/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ko/LC_MESSAGES/gtk20.mo b/install/share/locale/ko/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..5695317
Binary files /dev/null and b/install/share/locale/ko/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ku/LC_MESSAGES/atk10.mo b/install/share/locale/ku/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..3d83338
Binary files /dev/null and b/install/share/locale/ku/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ku/LC_MESSAGES/glib20.mo b/install/share/locale/ku/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..5e68a98
Binary files /dev/null and b/install/share/locale/ku/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ku/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ku/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..687f8c6
Binary files /dev/null and b/install/share/locale/ku/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ku/LC_MESSAGES/gtk20.mo b/install/share/locale/ku/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..75b2470
Binary files /dev/null and b/install/share/locale/ku/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/li/LC_MESSAGES/atk10.mo b/install/share/locale/li/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..3ea670a
Binary files /dev/null and b/install/share/locale/li/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/li/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/li/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..6619d5d
Binary files /dev/null and b/install/share/locale/li/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/li/LC_MESSAGES/gtk20.mo b/install/share/locale/li/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..c4a826c
Binary files /dev/null and b/install/share/locale/li/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/locale.alias b/install/share/locale/locale.alias
new file mode 100644
index 0000000..3170ff9
--- /dev/null
+++ b/install/share/locale/locale.alias
@@ -0,0 +1,77 @@
+# Locale name alias data base.
+# Copyright (C) 1996-2001,2003,2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+# The format of this file is the same as for the corresponding file of
+# the X Window System, which normally can be found in
+# /usr/lib/X11/locale/locale.alias
+# A single line contains two fields: an alias and a substitution value.
+# All entries are case independent.
+
+# Note: This file is obsolete and is kept around for the time being for
+# backward compatibility. Nobody should rely on the names defined here.
+# Locales should always be specified by their full name.
+
+# Packages using this file: gettext-runtime gettext-tools
+
+bokmal nb_NO.ISO-8859-1
+bokmål nb_NO.ISO-8859-1
+catalan ca_ES.ISO-8859-1
+croatian hr_HR.ISO-8859-2
+czech cs_CZ.ISO-8859-2
+danish da_DK.ISO-8859-1
+dansk da_DK.ISO-8859-1
+deutsch de_DE.ISO-8859-1
+dutch nl_NL.ISO-8859-1
+eesti et_EE.ISO-8859-1
+estonian et_EE.ISO-8859-1
+finnish fi_FI.ISO-8859-1
+français fr_FR.ISO-8859-1
+french fr_FR.ISO-8859-1
+galego gl_ES.ISO-8859-1
+galician gl_ES.ISO-8859-1
+german de_DE.ISO-8859-1
+greek el_GR.ISO-8859-7
+hebrew he_IL.ISO-8859-8
+hrvatski hr_HR.ISO-8859-2
+hungarian hu_HU.ISO-8859-2
+icelandic is_IS.ISO-8859-1
+italian it_IT.ISO-8859-1
+japanese ja_JP.eucJP
+japanese.euc ja_JP.eucJP
+ja_JP ja_JP.eucJP
+ja_JP.ujis ja_JP.eucJP
+japanese.sjis ja_JP.SJIS
+korean ko_KR.eucKR
+korean.euc ko_KR.eucKR
+ko_KR ko_KR.eucKR
+lithuanian lt_LT.ISO-8859-13
+no_NO nb_NO.ISO-8859-1
+no_NO.ISO-8859-1 nb_NO.ISO-8859-1
+norwegian nb_NO.ISO-8859-1
+nynorsk nn_NO.ISO-8859-1
+polish pl_PL.ISO-8859-2
+portuguese pt_PT.ISO-8859-1
+romanian ro_RO.ISO-8859-2
+russian ru_RU.ISO-8859-5
+slovak sk_SK.ISO-8859-2
+slovene sl_SI.ISO-8859-2
+slovenian sl_SI.ISO-8859-2
+spanish es_ES.ISO-8859-1
+swedish sv_SE.ISO-8859-1
+thai th_TH.TIS-620
+turkish tr_TR.ISO-8859-9
diff --git a/install/share/locale/lt/LC_MESSAGES/atk10.mo b/install/share/locale/lt/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..97523f0
Binary files /dev/null and b/install/share/locale/lt/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/lt/LC_MESSAGES/glib20.mo b/install/share/locale/lt/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..541c365
Binary files /dev/null and b/install/share/locale/lt/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/lt/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/lt/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..a6b045e
Binary files /dev/null and b/install/share/locale/lt/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/lt/LC_MESSAGES/gtk20.mo b/install/share/locale/lt/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..b4bda76
Binary files /dev/null and b/install/share/locale/lt/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/lv/LC_MESSAGES/atk10.mo b/install/share/locale/lv/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..156673a
Binary files /dev/null and b/install/share/locale/lv/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/lv/LC_MESSAGES/glib20.mo b/install/share/locale/lv/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..b0687c6
Binary files /dev/null and b/install/share/locale/lv/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/lv/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/lv/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..2d947a1
Binary files /dev/null and b/install/share/locale/lv/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/lv/LC_MESSAGES/gtk20.mo b/install/share/locale/lv/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..24998e6
Binary files /dev/null and b/install/share/locale/lv/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/mai/LC_MESSAGES/atk10.mo b/install/share/locale/mai/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..4ad2a7d
Binary files /dev/null and b/install/share/locale/mai/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/mai/LC_MESSAGES/glib20.mo b/install/share/locale/mai/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..43894a2
Binary files /dev/null and b/install/share/locale/mai/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/mai/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/mai/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..523fd48
Binary files /dev/null and b/install/share/locale/mai/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/mai/LC_MESSAGES/gtk20.mo b/install/share/locale/mai/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..e56c311
Binary files /dev/null and b/install/share/locale/mai/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/mg/LC_MESSAGES/glib20.mo b/install/share/locale/mg/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..16bca0c
Binary files /dev/null and b/install/share/locale/mg/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/mi/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/mi/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..8553129
Binary files /dev/null and b/install/share/locale/mi/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/mi/LC_MESSAGES/gtk20.mo b/install/share/locale/mi/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..2bfd097
Binary files /dev/null and b/install/share/locale/mi/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/mk/LC_MESSAGES/atk10.mo b/install/share/locale/mk/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..58d44c1
Binary files /dev/null and b/install/share/locale/mk/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/mk/LC_MESSAGES/glib20.mo b/install/share/locale/mk/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..529a674
Binary files /dev/null and b/install/share/locale/mk/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/mk/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/mk/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..7fd2925
Binary files /dev/null and b/install/share/locale/mk/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/mk/LC_MESSAGES/gtk20.mo b/install/share/locale/mk/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..c7e8252
Binary files /dev/null and b/install/share/locale/mk/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ml/LC_MESSAGES/atk10.mo b/install/share/locale/ml/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..ecb45a1
Binary files /dev/null and b/install/share/locale/ml/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ml/LC_MESSAGES/glib20.mo b/install/share/locale/ml/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..bcf9fec
Binary files /dev/null and b/install/share/locale/ml/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ml/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ml/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..54acd5f
Binary files /dev/null and b/install/share/locale/ml/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ml/LC_MESSAGES/gtk20.mo b/install/share/locale/ml/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..c6aa360
Binary files /dev/null and b/install/share/locale/ml/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/mn/LC_MESSAGES/atk10.mo b/install/share/locale/mn/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..3ae2902
Binary files /dev/null and b/install/share/locale/mn/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/mn/LC_MESSAGES/glib20.mo b/install/share/locale/mn/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..3c60d07
Binary files /dev/null and b/install/share/locale/mn/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/mn/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/mn/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..851a033
Binary files /dev/null and b/install/share/locale/mn/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/mn/LC_MESSAGES/gtk20.mo b/install/share/locale/mn/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..f7facfe
Binary files /dev/null and b/install/share/locale/mn/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/mr/LC_MESSAGES/atk10.mo b/install/share/locale/mr/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..cf847a2
Binary files /dev/null and b/install/share/locale/mr/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/mr/LC_MESSAGES/glib20.mo b/install/share/locale/mr/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..16cc23c
Binary files /dev/null and b/install/share/locale/mr/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/mr/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/mr/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..13c029e
Binary files /dev/null and b/install/share/locale/mr/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/mr/LC_MESSAGES/gtk20.mo b/install/share/locale/mr/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..0c7794c
Binary files /dev/null and b/install/share/locale/mr/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ms/LC_MESSAGES/atk10.mo b/install/share/locale/ms/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..eb611d1
Binary files /dev/null and b/install/share/locale/ms/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ms/LC_MESSAGES/glib20.mo b/install/share/locale/ms/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..803d580
Binary files /dev/null and b/install/share/locale/ms/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ms/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ms/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..ef9e605
Binary files /dev/null and b/install/share/locale/ms/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ms/LC_MESSAGES/gtk20.mo b/install/share/locale/ms/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..94b1d26
Binary files /dev/null and b/install/share/locale/ms/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/nb/LC_MESSAGES/atk10.mo b/install/share/locale/nb/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..4c199d0
Binary files /dev/null and b/install/share/locale/nb/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/nb/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/nb/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..19d5bb4
Binary files /dev/null and b/install/share/locale/nb/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/nb/LC_MESSAGES/glib20.mo b/install/share/locale/nb/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..b34184d
Binary files /dev/null and b/install/share/locale/nb/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/nb/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/nb/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..901cb5e
Binary files /dev/null and b/install/share/locale/nb/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/nb/LC_MESSAGES/gtk20.mo b/install/share/locale/nb/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..2a8aca2
Binary files /dev/null and b/install/share/locale/nb/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/nds/LC_MESSAGES/glib20.mo b/install/share/locale/nds/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..e77a155
Binary files /dev/null and b/install/share/locale/nds/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ne/LC_MESSAGES/atk10.mo b/install/share/locale/ne/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..7eec6be
Binary files /dev/null and b/install/share/locale/ne/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ne/LC_MESSAGES/glib20.mo b/install/share/locale/ne/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..3c59e18
Binary files /dev/null and b/install/share/locale/ne/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ne/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ne/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..44a2981
Binary files /dev/null and b/install/share/locale/ne/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ne/LC_MESSAGES/gtk20.mo b/install/share/locale/ne/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..dc45e14
Binary files /dev/null and b/install/share/locale/ne/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/nl/LC_MESSAGES/atk10.mo b/install/share/locale/nl/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..70f025b
Binary files /dev/null and b/install/share/locale/nl/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/nl/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/nl/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..678ad0d
Binary files /dev/null and b/install/share/locale/nl/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/nl/LC_MESSAGES/glib20.mo b/install/share/locale/nl/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..5441787
Binary files /dev/null and b/install/share/locale/nl/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/nl/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/nl/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..17fb88f
Binary files /dev/null and b/install/share/locale/nl/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/nl/LC_MESSAGES/gtk20.mo b/install/share/locale/nl/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..2ec6d8e
Binary files /dev/null and b/install/share/locale/nl/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/nn/LC_MESSAGES/atk10.mo b/install/share/locale/nn/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..1ae4d25
Binary files /dev/null and b/install/share/locale/nn/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/nn/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/nn/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..3c8538f
Binary files /dev/null and b/install/share/locale/nn/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/nn/LC_MESSAGES/glib20.mo b/install/share/locale/nn/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..0efd363
Binary files /dev/null and b/install/share/locale/nn/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/nn/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/nn/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..a5c0ff9
Binary files /dev/null and b/install/share/locale/nn/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/nn/LC_MESSAGES/gtk20.mo b/install/share/locale/nn/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..9e51452
Binary files /dev/null and b/install/share/locale/nn/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/nso/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/nso/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..94ce1d9
Binary files /dev/null and b/install/share/locale/nso/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/nso/LC_MESSAGES/gtk20.mo b/install/share/locale/nso/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..2ddbe7f
Binary files /dev/null and b/install/share/locale/nso/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/oc/LC_MESSAGES/atk10.mo b/install/share/locale/oc/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..9f96f9a
Binary files /dev/null and b/install/share/locale/oc/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/oc/LC_MESSAGES/glib20.mo b/install/share/locale/oc/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..3766c16
Binary files /dev/null and b/install/share/locale/oc/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/oc/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/oc/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..6c89d97
Binary files /dev/null and b/install/share/locale/oc/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/oc/LC_MESSAGES/gtk20.mo b/install/share/locale/oc/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..73c057d
Binary files /dev/null and b/install/share/locale/oc/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/or/LC_MESSAGES/atk10.mo b/install/share/locale/or/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..946aeda
Binary files /dev/null and b/install/share/locale/or/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/or/LC_MESSAGES/glib20.mo b/install/share/locale/or/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..1af7d10
Binary files /dev/null and b/install/share/locale/or/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/or/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/or/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..e3c82c7
Binary files /dev/null and b/install/share/locale/or/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/or/LC_MESSAGES/gtk20.mo b/install/share/locale/or/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..ec46760
Binary files /dev/null and b/install/share/locale/or/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/pa/LC_MESSAGES/atk10.mo b/install/share/locale/pa/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..9078ea9
Binary files /dev/null and b/install/share/locale/pa/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/pa/LC_MESSAGES/glib20.mo b/install/share/locale/pa/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..b39fc86
Binary files /dev/null and b/install/share/locale/pa/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/pa/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/pa/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..3f503a9
Binary files /dev/null and b/install/share/locale/pa/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/pa/LC_MESSAGES/gtk20.mo b/install/share/locale/pa/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..1646041
Binary files /dev/null and b/install/share/locale/pa/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/pl/LC_MESSAGES/atk10.mo b/install/share/locale/pl/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..4391243
Binary files /dev/null and b/install/share/locale/pl/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/pl/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/pl/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..4e7ddff
Binary files /dev/null and b/install/share/locale/pl/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/pl/LC_MESSAGES/glib20.mo b/install/share/locale/pl/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..9813b6e
Binary files /dev/null and b/install/share/locale/pl/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/pl/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/pl/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..a084e75
Binary files /dev/null and b/install/share/locale/pl/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/pl/LC_MESSAGES/gtk20.mo b/install/share/locale/pl/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..6a85379
Binary files /dev/null and b/install/share/locale/pl/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ps/LC_MESSAGES/atk10.mo b/install/share/locale/ps/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..0069985
Binary files /dev/null and b/install/share/locale/ps/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ps/LC_MESSAGES/glib20.mo b/install/share/locale/ps/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..67bb4cb
Binary files /dev/null and b/install/share/locale/ps/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ps/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ps/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..544a258
Binary files /dev/null and b/install/share/locale/ps/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ps/LC_MESSAGES/gtk20.mo b/install/share/locale/ps/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..20be84d
Binary files /dev/null and b/install/share/locale/ps/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/pt/LC_MESSAGES/atk10.mo b/install/share/locale/pt/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..793ca77
Binary files /dev/null and b/install/share/locale/pt/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/pt/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/pt/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..a1cb3cd
Binary files /dev/null and b/install/share/locale/pt/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/pt/LC_MESSAGES/glib20.mo b/install/share/locale/pt/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..f8c1f8b
Binary files /dev/null and b/install/share/locale/pt/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/pt/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/pt/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..5111e37
Binary files /dev/null and b/install/share/locale/pt/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/pt/LC_MESSAGES/gtk20.mo b/install/share/locale/pt/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..7c8b474
Binary files /dev/null and b/install/share/locale/pt/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/pt_BR/LC_MESSAGES/atk10.mo b/install/share/locale/pt_BR/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..f5ca83e
Binary files /dev/null and b/install/share/locale/pt_BR/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/pt_BR/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/pt_BR/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..2c284c0
Binary files /dev/null and b/install/share/locale/pt_BR/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/pt_BR/LC_MESSAGES/glib20.mo b/install/share/locale/pt_BR/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..77cad57
Binary files /dev/null and b/install/share/locale/pt_BR/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/pt_BR/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/pt_BR/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..e176a13
Binary files /dev/null and b/install/share/locale/pt_BR/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/pt_BR/LC_MESSAGES/gtk20.mo b/install/share/locale/pt_BR/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..46dc3e5
Binary files /dev/null and b/install/share/locale/pt_BR/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ro/LC_MESSAGES/atk10.mo b/install/share/locale/ro/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..282b733
Binary files /dev/null and b/install/share/locale/ro/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ro/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/ro/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..1982aae
Binary files /dev/null and b/install/share/locale/ro/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/ro/LC_MESSAGES/glib20.mo b/install/share/locale/ro/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..e151241
Binary files /dev/null and b/install/share/locale/ro/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ro/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ro/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..8d7f92e
Binary files /dev/null and b/install/share/locale/ro/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ro/LC_MESSAGES/gtk20.mo b/install/share/locale/ro/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..5f79519
Binary files /dev/null and b/install/share/locale/ro/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ru/LC_MESSAGES/atk10.mo b/install/share/locale/ru/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..d530842
Binary files /dev/null and b/install/share/locale/ru/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ru/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/ru/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..e54088c
Binary files /dev/null and b/install/share/locale/ru/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/ru/LC_MESSAGES/glib20.mo b/install/share/locale/ru/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..9b2b081
Binary files /dev/null and b/install/share/locale/ru/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ru/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ru/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..c111f25
Binary files /dev/null and b/install/share/locale/ru/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ru/LC_MESSAGES/gtk20.mo b/install/share/locale/ru/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..79ff159
Binary files /dev/null and b/install/share/locale/ru/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/rw/LC_MESSAGES/atk10.mo b/install/share/locale/rw/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..fa7084a
Binary files /dev/null and b/install/share/locale/rw/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/rw/LC_MESSAGES/glib20.mo b/install/share/locale/rw/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..cb04d53
Binary files /dev/null and b/install/share/locale/rw/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/rw/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/rw/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..24f313d
Binary files /dev/null and b/install/share/locale/rw/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/rw/LC_MESSAGES/gtk20.mo b/install/share/locale/rw/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..a8fc2f7
Binary files /dev/null and b/install/share/locale/rw/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/si/LC_MESSAGES/atk10.mo b/install/share/locale/si/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..b1af039
Binary files /dev/null and b/install/share/locale/si/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/si/LC_MESSAGES/glib20.mo b/install/share/locale/si/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..7633834
Binary files /dev/null and b/install/share/locale/si/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/si/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/si/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..2e96c58
Binary files /dev/null and b/install/share/locale/si/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/si/LC_MESSAGES/gtk20.mo b/install/share/locale/si/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..0b6e1d4
Binary files /dev/null and b/install/share/locale/si/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/sk/LC_MESSAGES/atk10.mo b/install/share/locale/sk/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..f0a418f
Binary files /dev/null and b/install/share/locale/sk/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/sk/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/sk/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..53fc95f
Binary files /dev/null and b/install/share/locale/sk/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/sk/LC_MESSAGES/glib20.mo b/install/share/locale/sk/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..96a2897
Binary files /dev/null and b/install/share/locale/sk/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/sk/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/sk/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..d1f64a4
Binary files /dev/null and b/install/share/locale/sk/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/sk/LC_MESSAGES/gtk20.mo b/install/share/locale/sk/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..b3c045d
Binary files /dev/null and b/install/share/locale/sk/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/sl/LC_MESSAGES/atk10.mo b/install/share/locale/sl/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..ff658e3
Binary files /dev/null and b/install/share/locale/sl/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/sl/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/sl/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..4793553
Binary files /dev/null and b/install/share/locale/sl/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/sl/LC_MESSAGES/glib20.mo b/install/share/locale/sl/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..86bf95c
Binary files /dev/null and b/install/share/locale/sl/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/sl/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/sl/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..e3be9c0
Binary files /dev/null and b/install/share/locale/sl/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/sl/LC_MESSAGES/gtk20.mo b/install/share/locale/sl/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..dcdcca2
Binary files /dev/null and b/install/share/locale/sl/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/sq/LC_MESSAGES/atk10.mo b/install/share/locale/sq/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..47fde7c
Binary files /dev/null and b/install/share/locale/sq/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/sq/LC_MESSAGES/glib20.mo b/install/share/locale/sq/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..bd9c76b
Binary files /dev/null and b/install/share/locale/sq/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/sq/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/sq/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..8358b91
Binary files /dev/null and b/install/share/locale/sq/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/sq/LC_MESSAGES/gtk20.mo b/install/share/locale/sq/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..03ecf9b
Binary files /dev/null and b/install/share/locale/sq/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/sr/LC_MESSAGES/atk10.mo b/install/share/locale/sr/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..5cbd919
Binary files /dev/null and b/install/share/locale/sr/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/sr/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/sr/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..06fab1a
Binary files /dev/null and b/install/share/locale/sr/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/sr/LC_MESSAGES/glib20.mo b/install/share/locale/sr/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..21f1e9a
Binary files /dev/null and b/install/share/locale/sr/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/sr/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/sr/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..a7e4cac
Binary files /dev/null and b/install/share/locale/sr/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/sr/LC_MESSAGES/gtk20.mo b/install/share/locale/sr/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..2048946
Binary files /dev/null and b/install/share/locale/sr/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/sr@ije/LC_MESSAGES/atk10.mo b/install/share/locale/sr@ije/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..08f72e4
Binary files /dev/null and b/install/share/locale/sr@ije/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/sr@ije/LC_MESSAGES/glib20.mo b/install/share/locale/sr@ije/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..6ca7ac0
Binary files /dev/null and b/install/share/locale/sr@ije/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/sr@ije/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/sr@ije/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..9ea3030
Binary files /dev/null and b/install/share/locale/sr@ije/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/sr@ije/LC_MESSAGES/gtk20.mo b/install/share/locale/sr@ije/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..c1101bd
Binary files /dev/null and b/install/share/locale/sr@ije/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/sr@latin/LC_MESSAGES/atk10.mo b/install/share/locale/sr@latin/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..51df952
Binary files /dev/null and b/install/share/locale/sr@latin/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/sr@latin/LC_MESSAGES/glib20.mo b/install/share/locale/sr@latin/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..3ce32c1
Binary files /dev/null and b/install/share/locale/sr@latin/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/sr@latin/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/sr@latin/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..fa3528f
Binary files /dev/null and b/install/share/locale/sr@latin/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/sr@latin/LC_MESSAGES/gtk20.mo b/install/share/locale/sr@latin/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..3f9799f
Binary files /dev/null and b/install/share/locale/sr@latin/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/sv/LC_MESSAGES/atk10.mo b/install/share/locale/sv/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..9c8cdeb
Binary files /dev/null and b/install/share/locale/sv/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/sv/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/sv/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..88ba684
Binary files /dev/null and b/install/share/locale/sv/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/sv/LC_MESSAGES/glib20.mo b/install/share/locale/sv/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..331c3d6
Binary files /dev/null and b/install/share/locale/sv/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/sv/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/sv/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..580a34e
Binary files /dev/null and b/install/share/locale/sv/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/sv/LC_MESSAGES/gtk20.mo b/install/share/locale/sv/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..965dbec
Binary files /dev/null and b/install/share/locale/sv/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ta/LC_MESSAGES/atk10.mo b/install/share/locale/ta/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..c8dd1b1
Binary files /dev/null and b/install/share/locale/ta/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/ta/LC_MESSAGES/glib20.mo b/install/share/locale/ta/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..f223e27
Binary files /dev/null and b/install/share/locale/ta/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/ta/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ta/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..af42cd5
Binary files /dev/null and b/install/share/locale/ta/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ta/LC_MESSAGES/gtk20.mo b/install/share/locale/ta/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..8b31c9f
Binary files /dev/null and b/install/share/locale/ta/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/te/LC_MESSAGES/atk10.mo b/install/share/locale/te/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..8cecbfb
Binary files /dev/null and b/install/share/locale/te/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/te/LC_MESSAGES/glib20.mo b/install/share/locale/te/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..40ed374
Binary files /dev/null and b/install/share/locale/te/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/te/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/te/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..1463f4b
Binary files /dev/null and b/install/share/locale/te/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/te/LC_MESSAGES/gtk20.mo b/install/share/locale/te/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..1dda7f7
Binary files /dev/null and b/install/share/locale/te/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/th/LC_MESSAGES/atk10.mo b/install/share/locale/th/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..5813fe8
Binary files /dev/null and b/install/share/locale/th/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/th/LC_MESSAGES/glib20.mo b/install/share/locale/th/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..3715f66
Binary files /dev/null and b/install/share/locale/th/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/th/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/th/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..fcb04ac
Binary files /dev/null and b/install/share/locale/th/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/th/LC_MESSAGES/gtk20.mo b/install/share/locale/th/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..34c6f43
Binary files /dev/null and b/install/share/locale/th/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/tk/LC_MESSAGES/atk10.mo b/install/share/locale/tk/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..e6ecbcd
Binary files /dev/null and b/install/share/locale/tk/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/tk/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/tk/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..3ea68d4
Binary files /dev/null and b/install/share/locale/tk/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/tk/LC_MESSAGES/gtk20.mo b/install/share/locale/tk/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..1ec3419
Binary files /dev/null and b/install/share/locale/tk/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/tl/LC_MESSAGES/glib20.mo b/install/share/locale/tl/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..c160018
Binary files /dev/null and b/install/share/locale/tl/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/tr/LC_MESSAGES/atk10.mo b/install/share/locale/tr/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..d7280ee
Binary files /dev/null and b/install/share/locale/tr/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/tr/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/tr/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..54b91f3
Binary files /dev/null and b/install/share/locale/tr/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/tr/LC_MESSAGES/glib20.mo b/install/share/locale/tr/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..6c11dfc
Binary files /dev/null and b/install/share/locale/tr/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/tr/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/tr/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..5a3fabf
Binary files /dev/null and b/install/share/locale/tr/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/tr/LC_MESSAGES/gtk20.mo b/install/share/locale/tr/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..4ac12b5
Binary files /dev/null and b/install/share/locale/tr/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/tt/LC_MESSAGES/atk10.mo b/install/share/locale/tt/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..7d6854d
Binary files /dev/null and b/install/share/locale/tt/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/tt/LC_MESSAGES/glib20.mo b/install/share/locale/tt/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..350ec5d
Binary files /dev/null and b/install/share/locale/tt/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/tt/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/tt/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..ddd930d
Binary files /dev/null and b/install/share/locale/tt/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/tt/LC_MESSAGES/gtk20.mo b/install/share/locale/tt/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..9b0e4c1
Binary files /dev/null and b/install/share/locale/tt/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ug/LC_MESSAGES/atk10.mo b/install/share/locale/ug/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..e08607c
Binary files /dev/null and b/install/share/locale/ug/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/uk/LC_MESSAGES/atk10.mo b/install/share/locale/uk/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..7baf99f
Binary files /dev/null and b/install/share/locale/uk/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/uk/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/uk/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..c799030
Binary files /dev/null and b/install/share/locale/uk/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/uk/LC_MESSAGES/glib20.mo b/install/share/locale/uk/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..f4aa472
Binary files /dev/null and b/install/share/locale/uk/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/uk/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/uk/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..7bf33b6
Binary files /dev/null and b/install/share/locale/uk/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/uk/LC_MESSAGES/gtk20.mo b/install/share/locale/uk/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..f661f72
Binary files /dev/null and b/install/share/locale/uk/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/ur/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/ur/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..6212fcc
Binary files /dev/null and b/install/share/locale/ur/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/ur/LC_MESSAGES/gtk20.mo b/install/share/locale/ur/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..6637df4
Binary files /dev/null and b/install/share/locale/ur/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/uz/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/uz/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..b4a01f6
Binary files /dev/null and b/install/share/locale/uz/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/uz/LC_MESSAGES/gtk20.mo b/install/share/locale/uz/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..f203b3a
Binary files /dev/null and b/install/share/locale/uz/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/uz@cyrillic/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/uz@cyrillic/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..00ddd12
Binary files /dev/null and b/install/share/locale/uz@cyrillic/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/uz@cyrillic/LC_MESSAGES/gtk20.mo b/install/share/locale/uz@cyrillic/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..69d19e7
Binary files /dev/null and b/install/share/locale/uz@cyrillic/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/vi/LC_MESSAGES/atk10.mo b/install/share/locale/vi/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..61f4ff4
Binary files /dev/null and b/install/share/locale/vi/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/vi/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/vi/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..54c1c79
Binary files /dev/null and b/install/share/locale/vi/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/vi/LC_MESSAGES/glib20.mo b/install/share/locale/vi/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..1846270
Binary files /dev/null and b/install/share/locale/vi/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/vi/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/vi/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..c9ae88f
Binary files /dev/null and b/install/share/locale/vi/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/vi/LC_MESSAGES/gtk20.mo b/install/share/locale/vi/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..cc91fe9
Binary files /dev/null and b/install/share/locale/vi/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/wa/LC_MESSAGES/atk10.mo b/install/share/locale/wa/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..d1097dc
Binary files /dev/null and b/install/share/locale/wa/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/wa/LC_MESSAGES/glib20.mo b/install/share/locale/wa/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..bbcc4ca
Binary files /dev/null and b/install/share/locale/wa/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/wa/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/wa/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..1a3231f
Binary files /dev/null and b/install/share/locale/wa/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/wa/LC_MESSAGES/gtk20.mo b/install/share/locale/wa/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..d8f82eb
Binary files /dev/null and b/install/share/locale/wa/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/xh/LC_MESSAGES/atk10.mo b/install/share/locale/xh/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..e1b9874
Binary files /dev/null and b/install/share/locale/xh/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/xh/LC_MESSAGES/glib20.mo b/install/share/locale/xh/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..953204d
Binary files /dev/null and b/install/share/locale/xh/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/xh/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/xh/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..1aed708
Binary files /dev/null and b/install/share/locale/xh/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/xh/LC_MESSAGES/gtk20.mo b/install/share/locale/xh/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..840c5b8
Binary files /dev/null and b/install/share/locale/xh/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/yi/LC_MESSAGES/atk10.mo b/install/share/locale/yi/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..06e24ea
Binary files /dev/null and b/install/share/locale/yi/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/yi/LC_MESSAGES/glib20.mo b/install/share/locale/yi/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..c3457a4
Binary files /dev/null and b/install/share/locale/yi/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/yi/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/yi/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..0c611fe
Binary files /dev/null and b/install/share/locale/yi/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/yi/LC_MESSAGES/gtk20.mo b/install/share/locale/yi/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..b44bd19
Binary files /dev/null and b/install/share/locale/yi/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/zh_CN/LC_MESSAGES/atk10.mo b/install/share/locale/zh_CN/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..a6e3613
Binary files /dev/null and b/install/share/locale/zh_CN/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/zh_CN/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/zh_CN/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..7ad6d7b
Binary files /dev/null and b/install/share/locale/zh_CN/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/zh_CN/LC_MESSAGES/glib20.mo b/install/share/locale/zh_CN/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..102c645
Binary files /dev/null and b/install/share/locale/zh_CN/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/zh_CN/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/zh_CN/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..08c7246
Binary files /dev/null and b/install/share/locale/zh_CN/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/zh_CN/LC_MESSAGES/gtk20.mo b/install/share/locale/zh_CN/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..a8c6085
Binary files /dev/null and b/install/share/locale/zh_CN/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/zh_HK/LC_MESSAGES/atk10.mo b/install/share/locale/zh_HK/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..f36ffa6
Binary files /dev/null and b/install/share/locale/zh_HK/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/zh_HK/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/zh_HK/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..2eea2f8
Binary files /dev/null and b/install/share/locale/zh_HK/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/zh_HK/LC_MESSAGES/glib20.mo b/install/share/locale/zh_HK/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..d21fc54
Binary files /dev/null and b/install/share/locale/zh_HK/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/zh_HK/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/zh_HK/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..c795e47
Binary files /dev/null and b/install/share/locale/zh_HK/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/zh_HK/LC_MESSAGES/gtk20.mo b/install/share/locale/zh_HK/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..3778d61
Binary files /dev/null and b/install/share/locale/zh_HK/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/locale/zh_TW/LC_MESSAGES/atk10.mo b/install/share/locale/zh_TW/LC_MESSAGES/atk10.mo
new file mode 100644
index 0000000..d7e4247
Binary files /dev/null and b/install/share/locale/zh_TW/LC_MESSAGES/atk10.mo differ
diff --git a/install/share/locale/zh_TW/LC_MESSAGES/gettext-runtime.mo b/install/share/locale/zh_TW/LC_MESSAGES/gettext-runtime.mo
new file mode 100644
index 0000000..744a688
Binary files /dev/null and b/install/share/locale/zh_TW/LC_MESSAGES/gettext-runtime.mo differ
diff --git a/install/share/locale/zh_TW/LC_MESSAGES/glib20.mo b/install/share/locale/zh_TW/LC_MESSAGES/glib20.mo
new file mode 100644
index 0000000..139460d
Binary files /dev/null and b/install/share/locale/zh_TW/LC_MESSAGES/glib20.mo differ
diff --git a/install/share/locale/zh_TW/LC_MESSAGES/gtk20-properties.mo b/install/share/locale/zh_TW/LC_MESSAGES/gtk20-properties.mo
new file mode 100644
index 0000000..d753348
Binary files /dev/null and b/install/share/locale/zh_TW/LC_MESSAGES/gtk20-properties.mo differ
diff --git a/install/share/locale/zh_TW/LC_MESSAGES/gtk20.mo b/install/share/locale/zh_TW/LC_MESSAGES/gtk20.mo
new file mode 100644
index 0000000..c93c3b5
Binary files /dev/null and b/install/share/locale/zh_TW/LC_MESSAGES/gtk20.mo differ
diff --git a/install/share/man/man1/envsubst.1 b/install/share/man/man1/envsubst.1
new file mode 100644
index 0000000..4c8938c
--- /dev/null
+++ b/install/share/man/man1/envsubst.1
@@ -0,0 +1,54 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.24.
+.TH ENVSUBST "1" "June 2010" "GNU gettext-runtime 0.18.1" GNU
+.SH NAME
+envsubst \- substitutes environment variables in shell format strings
+.SH SYNOPSIS
+.B envsubst
+[\fIOPTION\fR] [\fISHELL-FORMAT\fR]
+.SH DESCRIPTION
+.\" Add any additional description here
+.PP
+Substitutes the values of environment variables.
+.SS "Operation mode:"
+.TP
+\fB\-v\fR, \fB\-\-variables\fR
+output the variables occurring in SHELL-FORMAT
+.SS "Informative output:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+output version information and exit
+.PP
+In normal operation mode, standard input is copied to standard output,
+with references to environment variables of the form $VARIABLE or ${VARIABLE}
+being replaced with the corresponding values. If a SHELL-FORMAT is given,
+only those environment variables that are referenced in SHELL-FORMAT are
+substituted; otherwise all environment variables references occurring in
+standard input are substituted.
+.PP
+When \fB\-\-variables\fR is used, standard input is ignored, and the output consists
+of the environment variables that are referenced in SHELL-FORMAT, one per line.
+.SH AUTHOR
+Written by Bruno Haible.
+.SH "REPORTING BUGS"
+Report bugs to .
+.SH COPYRIGHT
+Copyright \(co 2003-2007 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B envsubst
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B envsubst
+programs are properly installed at your site, the command
+.IP
+.B info envsubst
+.PP
+should give you access to the complete manual.
diff --git a/install/share/man/man1/fc-cache.1 b/install/share/man/man1/fc-cache.1
new file mode 100644
index 0000000..c76c4e7
--- /dev/null
+++ b/install/share/man/man1/fc-cache.1
@@ -0,0 +1,70 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FC-CACHE" "1" "Aug 13, 2008" "" ""
+.SH NAME
+fc-cache \- build font information cache files
+.SH SYNOPSIS
+.sp
+\fBfc-cache\fR [ \fB-fsvVh\fR ] [ \fB--force\fR ] [ \fB--system-only\fR ] [ \fB--verbose\fR ] [ \fB--version\fR ] [ \fB--help\fR ] [ \fB\fIdir\fB\fR\fI...\fR ]
+.SH "DESCRIPTION"
+.PP
+\fBfc-cache\fR scans the font directories on
+the system and builds font information cache files for
+applications using fontconfig for their font handling.
+.PP
+If directory arguments are not given,
+\fBfc-cache\fR uses each directory in the
+current font configuration. Each directory is scanned for
+font files readable by FreeType. A cache is created which
+contains properties of each font and the associated filename.
+This cache is used to speed up application startup when using
+the fontconfig library.
+.PP
+Note that \fBfc-cache\fR must be executed
+once per architecture to generate font information customized
+for that architecture.
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-f\fR
+Force re-generation of apparently up-to-date cache files,
+overriding the timestamp checking.
+.TP
+\fB-s\fR
+Only scan system-wide directories, omitting the places
+located in the user's home directory.
+.TP
+\fB-v\fR
+Display status information while busy.
+.TP
+\fB-h\fR
+Show summary of options.
+.TP
+\fB-V\fR
+Show version of the program and exit.
+.TP
+\fB\fIdir\fB\fR
+Directory to scan for fonts.
+.SH "FILES"
+.TP
+\fB\fI%cachdir%/*-%arch%\&.cache-2\fB\fR
+These files are generated by \fBfc-cache\fR
+and contain maps from file names to font properties. They are
+read by the fontconfig library at application startup to locate
+appropriate fonts.
+.SH "SEE ALSO"
+.PP
+\fBfc-cat\fR(1)
+\fBfc-list\fR(1)
+\fBfc-match\fR(1)
+\fBfc-query\fR(1)
+\fBfc-scan\fR(1)
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was written by Keith Packard
+ and Josselin Mouette \&.
diff --git a/install/share/man/man1/fc-cat.1 b/install/share/man/man1/fc-cat.1
new file mode 100644
index 0000000..0b02149
--- /dev/null
+++ b/install/share/man/man1/fc-cat.1
@@ -0,0 +1,44 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FC-CAT" "1" "Aug 13, 2008" "" ""
+.SH NAME
+fc-cat \- read font information cache files
+.SH SYNOPSIS
+.sp
+\fBfc-cat\fR [ \fB-rvVh\fR ] [ \fB--recurse\fR ] [ \fB--verbose\fR ] [ \fB--version\fR ] [ \fB--help\fR ]
+
+ [ \fB [ \fIfonts-cache-2-files\fB ] [ \fIdirs\fB ] \fR\fI...\fR ]
+.SH "DESCRIPTION"
+.PP
+\fBfc-cat\fR reads the font information from
+cache files or related to font directories
+and emits it in ASCII form.
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-r\fR
+Recurse into subdirectories.
+.TP
+\fB-v\fR
+Be verbose.
+.TP
+\fB-h\fR
+Show summary of options.
+.TP
+\fB-V\fR
+Show version of the program and exit.
+.SH "SEE ALSO"
+.PP
+\fBfc-cache\fR(1)
+\fBfc-list\fR(1)
+\fBfc-match\fR(1)
+\fBfc-query\fR(1)
+\fBfc-scan\fR(1)
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was written by Patrick Lam \&.
diff --git a/install/share/man/man1/fc-list.1 b/install/share/man/man1/fc-list.1
new file mode 100644
index 0000000..002bb83
--- /dev/null
+++ b/install/share/man/man1/fc-list.1
@@ -0,0 +1,72 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FC-LIST" "1" "Aug 13, 2008" "" ""
+.SH NAME
+fc-list \- list available fonts
+.SH SYNOPSIS
+.sp
+\fBfc-list\fR [ \fB-vVh\fR ] [ \fB--verbose\fR ] [ \fB [ -f \fIformat\fB ] [ --format \fIformat\fB ] \fR ] [ \fB--version\fR ] [ \fB--help\fR ]
+
+ [ \fB\fIpattern\fB [ \fIelement\fB\fI...\fB ] \fR ]
+.SH "DESCRIPTION"
+.PP
+\fBfc-list\fR lists fonts and styles
+available on the system for applications using fontconfig.
+If any elements are specified, only those are printed.
+Otherwise family and style are printed, unless verbose
+output is requested.
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-v\fR
+Print verbose output of the whole font pattern for each match,
+or \fIelement\fRs if any is
+provided.
+.TP
+\fB-f\fR
+Format output according to the format specifier
+\fIformat\fR\&.
+.TP
+\fB-V\fR
+Show version of the program and exit.
+.TP
+\fB-h\fR
+Show summary of options.
+.TP
+\fB\fIpattern\fB\fR
+If this argument is set, only fonts matching
+\fIpattern\fR are displayed.
+.TP
+\fB\fIelement\fB\fR
+If set, the \fIelement\fR property
+is displayed for matching fonts.
+.SH "EXAMPLES"
+.TP
+\fBfc-list\fR
+Lists all font faces.
+.TP
+\fBfc-list :lang=hi\fR
+Lists font faces that cover Hindi.
+.TP
+\fBfc-list : family style file spacing\fR
+Lists the filename and spacing value for each font
+face. ``:'' is an empty pattern that matches all
+fonts.
+.SH "SEE ALSO"
+.PP
+\fBfc-match\fR(1)
+\fBFcFontList\fR(3)
+\fBFcPatternFormat\fR(3)
+\fBfc-cat\fR(1)
+\fBfc-cache\fR(1)
+\fBfc-query\fR(1)
+\fBfc-scan\fR(1)
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was written by Keith Packard
+ and Josselin Mouette \&.
diff --git a/install/share/man/man1/fc-match.1 b/install/share/man/man1/fc-match.1
new file mode 100644
index 0000000..adf8e8a
--- /dev/null
+++ b/install/share/man/man1/fc-match.1
@@ -0,0 +1,73 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FC-MATCH" "1" "Aug 13, 2008" "" ""
+.SH NAME
+fc-match \- match available fonts
+.SH SYNOPSIS
+.sp
+\fBfc-match\fR [ \fB-asvVh\fR ] [ \fB--all\fR ] [ \fB--sort\fR ] [ \fB--verbose\fR ] [ \fB [ -f \fIformat\fB ] [ --format \fIformat\fB ] \fR ] [ \fB--version\fR ] [ \fB--help\fR ]
+
+ [ \fB\fIpattern\fB [ \fIelement\fB\fI...\fB ] \fR ]
+.SH "DESCRIPTION"
+.PP
+\fBfc-match\fR matches
+\fIpattern\fR (empty
+pattern by default) using the normal fontconfig matching rules to find
+the best font available. If \fB--sort\fR is given, the sorted list of best
+matching fonts is displayed.
+The \fB--all\fR option works like
+\fB--sort\fR except that no pruning is done on the list of fonts.
+.PP
+If any elements are specified, only those are printed.
+Otherwise short file name, family, and style are printed, unless verbose
+output is requested.
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-a\fR
+Displays sorted list of best matching fonts, but do not do any
+pruning on the list.
+.TP
+\fB-s\fR
+Displays sorted list of best matching fonts.
+.TP
+\fB-v\fR
+Print verbose output of the whole font pattern for each match,
+or \fIelement\fRs if any is
+provided.
+.TP
+\fB-f\fR
+Format output according to the format specifier
+\fIformat\fR\&.
+.TP
+\fB-V\fR
+Show version of the program and exit.
+.TP
+\fB-h\fR
+Show summary of options.
+.TP
+\fB\fIpattern\fB\fR
+Displays fonts matching
+\fIpattern\fR (uses empty pattern by default).
+.TP
+\fB\fIelement\fB\fR
+If set, the \fIelement\fR property
+is displayed for matching fonts.
+.SH "SEE ALSO"
+.PP
+\fBfc-list\fR(1)
+\fBFcFontMatch\fR(3)
+\fBFcFontSort\fR(3)
+\fBFcPatternFormat\fR(3)
+\fBfc-cat\fR(1)
+\fBfc-cache\fR(1)
+\fBfc-query\fR(1)
+\fBfc-scal\fR(1)
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was updated by Patrick Lam \&.
diff --git a/install/share/man/man1/fc-query.1 b/install/share/man/man1/fc-query.1
new file mode 100644
index 0000000..f2beda1
--- /dev/null
+++ b/install/share/man/man1/fc-query.1
@@ -0,0 +1,57 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FC-QUERY" "1" "Aug 13, 2008" "" ""
+.SH NAME
+fc-query \- query font files
+.SH SYNOPSIS
+.sp
+\fBfc-query\fR [ \fB-Vh\fR ]
+
+ [ \fB [ -i \fIindex\fB ] [ --index \fIindex\fB ] \fR ] [ \fB [ -f \fIformat\fB ] [ --format \fIformat\fB ] \fR ] [ \fB--version\fR ] [ \fB--help\fR ] \fB\fIfont-file\fB\fR\fI...\fR
+.SH "DESCRIPTION"
+.PP
+\fBfc-query\fR queries
+\fIfont-file\fR(s) using the normal fontconfig
+rules and prints out font pattern for each face found.
+If \fB--index\fR is given, only one face of each file is
+queried, otherwise all faces are queried.
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-i\fR
+Only query face indexed \fIindex\fR of
+each file.
+.TP
+\fB-f\fR
+Format output according to the format specifier
+\fIformat\fR\&.
+.TP
+\fB-V\fR
+Show version of the program and exit.
+.TP
+\fB-h\fR
+Show summary of options.
+.TP
+\fB\fIfont-file\fB\fR
+Query \fIfont-file\fR for font faces.
+.SH "RETURN CODES"
+.PP
+\fBfc-query\fR returns error code 0 for successful parsing,
+or 1 if any errors occured or if at least one font face could not be opened.
+.SH "SEE ALSO"
+.PP
+\fBfc-scan\fR(1)
+\fBFcFreeTypeQuery\fR(3)
+\fBFcPatternFormat\fR(3)
+\fBfc-cat\fR(1)
+\fBfc-cache\fR(1)
+\fBfc-list\fR(1)
+\fBfc-match\fR(1)
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was updated by Behdad Esfahbod \&.
diff --git a/install/share/man/man1/fc-scan.1 b/install/share/man/man1/fc-scan.1
new file mode 100644
index 0000000..336f05d
--- /dev/null
+++ b/install/share/man/man1/fc-scan.1
@@ -0,0 +1,52 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FC-SCAN" "1" "Jan 15, 2009" "" ""
+.SH NAME
+fc-scan \- scan font files or directories
+.SH SYNOPSIS
+.sp
+\fBfc-scan\fR [ \fB-Vh\fR ]
+
+ [ \fB [ -f \fIformat\fB ] [ --format \fIformat\fB ] \fR ] [ \fB--version\fR ] [ \fB--help\fR ] \fB\fIfile\fB\fR\fI...\fR
+.SH "DESCRIPTION"
+.PP
+\fBfc-scan\fR scans
+\fIfile\fR(s) recursively
+and prints out font pattern for each face found.
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-f\fR
+Format output according to the format specifier
+\fIformat\fR\&.
+.TP
+\fB-V\fR
+Show version of the program and exit.
+.TP
+\fB-h\fR
+Show summary of options.
+.TP
+\fB\fIfile\fB\fR
+Scan \fIfile\fR recursively for font faces.
+.SH "RETURN CODES"
+.PP
+\fBfc-scan\fR returns error code 0 if at least one font
+was found or 1 otherwise.
+.SH "SEE ALSO"
+.PP
+\fBfc-query\fR(1)
+\fBFcFileScan\fR(3)
+\fBFcDirScan\fR(3)
+\fBFcPatternFormat\fR(3)
+\fBfc-cat\fR(1)
+\fBfc-cache\fR(1)
+\fBfc-list\fR(1)
+\fBfc-match\fR(1)
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was updated by Behdad Esfahbod \&.
diff --git a/install/share/man/man1/gettext.1 b/install/share/man/man1/gettext.1
new file mode 100644
index 0000000..18a6662
--- /dev/null
+++ b/install/share/man/man1/gettext.1
@@ -0,0 +1,69 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.24.
+.TH GETTEXT "1" "June 2010" "GNU gettext-runtime 0.18.1" GNU
+.SH NAME
+gettext \- translate message
+.SH SYNOPSIS
+.B gettext
+[\fIOPTION\fR] [[\fITEXTDOMAIN\fR] \fIMSGID\fR]
+.br
+.B gettext
+[\fIOPTION\fR] \fI-s \fR[\fIMSGID\fR]...
+.SH DESCRIPTION
+.\" Add any additional description here
+The \fBgettext\fP program translates a natural language message into the
+user's language, by looking up the translation in a message catalog.
+.PP
+Display native language translation of a textual message.
+.TP
+\fB\-d\fR, \fB\-\-domain\fR=\fITEXTDOMAIN\fR
+retrieve translated messages from TEXTDOMAIN
+.TP
+\fB\-e\fR
+enable expansion of some escape sequences
+.TP
+\fB\-E\fR
+(ignored for compatibility)
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit
+.TP
+\fB\-n\fR
+suppress trailing newline
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+display version information and exit
+.TP
+[TEXTDOMAIN] MSGID
+retrieve translated message corresponding
+to MSGID from TEXTDOMAIN
+.PP
+If the TEXTDOMAIN parameter is not given, the domain is determined from the
+environment variable TEXTDOMAIN. If the message catalog is not found in the
+regular directory, another location can be specified with the environment
+variable TEXTDOMAINDIR.
+When used with the \fB\-s\fR option the program behaves like the `echo' command.
+But it does not simply copy its arguments to stdout. Instead those messages
+found in the selected catalog are translated.
+Standard search directory: c:/devel/target/33bc8ddfeabcf34f6317ef7b2e85485f/share/locale
+.SH AUTHOR
+Written by Ulrich Drepper.
+.SH "REPORTING BUGS"
+Report bugs to .
+.SH COPYRIGHT
+Copyright \(co 1995-1997, 2000-2007 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B gettext
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B gettext
+programs are properly installed at your site, the command
+.IP
+.B info gettext
+.PP
+should give you access to the complete manual.
diff --git a/install/share/man/man1/glib-genmarshal.1 b/install/share/man/man1/glib-genmarshal.1
new file mode 100644
index 0000000..3ea1dd8
--- /dev/null
+++ b/install/share/man/man1/glib-genmarshal.1
@@ -0,0 +1,307 @@
+'\" t
+.\" Title: glib-genmarshal
+.\" Author: [see the "Author" section]
+.\" Generator: DocBook XSL Stylesheets v1.75.2
+.\" Date: 05/02/2010
+.\" Manual: [FIXME: manual]
+.\" Source: [FIXME: source]
+.\" Language: English
+.\"
+.TH "GLIB\-GENMARSHAL" "1" "05/02/2010" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+glib-genmarshal \- C code marshaller generation utility for GLib closures
+.SH "SYNOPSIS"
+.HP \w'\fBglib\-genmarshal\fR\ 'u
+\fBglib\-genmarshal\fR [options...] [files...]
+.SH "DESCRIPTION"
+.PP
+\fBglib\-genmarshal\fR
+is a small utility that generates C code marshallers for callback functions of the GClosure mechanism in the GObject sublibrary of GLib\&. The marshaller functions have a standard signature, they get passed in the invoking closure, an array of value structures holding the callback function parameters and a value structure for the return value of the callback\&. The marshaller is then responsible to call the respective C code function of the closure with all the parameters on the stack and to collect its return value\&.
+.SH "INVOCATION"
+.PP
+\fBglib\-genmarshal\fR
+takes a list of marshallers to generate as input\&. The marshaller list is either read from standard input or from files passed as additional arguments on the command line\&.
+.SS "Options"
+.PP
+\fB\-\-header\fR
+.RS 4
+Generate header file contents of the marshallers\&.
+.RE
+.PP
+\fB\-\-body\fR
+.RS 4
+Generate C code file contents of the marshallers\&.
+.RE
+.PP
+\fB\-\-prefix=string\fR, \fB\-\-prefix string\fR
+.RS 4
+Specify marshaller prefix\&. The default prefix is
+`g_cclosure_marshal\'\&.
+.RE
+.PP
+\fB\-\-skip\-source\fR
+.RS 4
+Skip source location remarks in generated comments\&.
+.RE
+.PP
+\fB\-\-nostdinc\fR
+.RS 4
+Do not use the standard marshallers of the GObject library, and skip
+gmarshal\&.h
+include directive in generated header files\&.
+.RE
+.PP
+\fB\-\-g\-fatal\-warnings\fR
+.RS 4
+Make warnings fatal, that is, exit immediately once a warning occurs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Print brief help and exit\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-version\fR
+.RS 4
+Print version and exit\&.
+.RE
+.SS "Marshaller list format"
+.PP
+The marshaller lists are processed line by line, a line can contain a comment in the form of
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# this is a comment
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+or a marshaller specification of the form
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIRTYPE\fR:\fIPTYPE\fR
+\fIRTYPE\fR:\fIPTYPE\fR,\fIPTYPE\fR
+\fIRTYPE\fR:\fIPTYPE\fR,\fIPTYPE\fR,\fIPTYPE\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+(up to 16
+\fIPTYPE\fRs may be present)\&.
+.PP
+The
+\fIRTYPE\fR
+part specifies the callback\'s return type and the
+\fIPTYPE\fRs right to the colon specify the callback\'s parameter list, except for the first and the last arguments which are always pointers\&.
+.SS "Parameter types"
+.PP
+Currently, the following types are supported:
+.PP
+\fIVOID\fR
+.RS 4
+indicates no return type, or no extra parameters\&. If
+\fIVOID\fR
+is used as the parameter list, no additional parameters may be present\&.
+.RE
+.PP
+\fIBOOLEAN\fR
+.RS 4
+for boolean types (gboolean)
+.RE
+.PP
+\fICHAR\fR
+.RS 4
+for signed char types (gchar)
+.RE
+.PP
+\fIUCHAR\fR
+.RS 4
+for unsigned char types (guchar)
+.RE
+.PP
+\fIINT\fR
+.RS 4
+for signed integer types (gint)
+.RE
+.PP
+\fIUINT\fR
+.RS 4
+for unsigned integer types (guint)
+.RE
+.PP
+\fILONG\fR
+.RS 4
+for signed long integer types (glong)
+.RE
+.PP
+\fIULONG\fR
+.RS 4
+for unsigned long integer types (gulong)
+.RE
+.PP
+\fIINT64\fR
+.RS 4
+for signed 64bit integer types (gint64)
+.RE
+.PP
+\fIUINT64\fR
+.RS 4
+for unsigned 64bit integer types (guint64)
+.RE
+.PP
+\fIENUM\fR
+.RS 4
+for enumeration types (gint)
+.RE
+.PP
+\fIFLAGS\fR
+.RS 4
+for flag enumeration types (guint)
+.RE
+.PP
+\fIFLOAT\fR
+.RS 4
+for single\-precision float types (gfloat)
+.RE
+.PP
+\fIDOUBLE\fR
+.RS 4
+for double\-precision float types (gdouble)
+.RE
+.PP
+\fISTRING\fR
+.RS 4
+for string types (gchar*)
+.RE
+.PP
+\fIBOXED\fR
+.RS 4
+for boxed (anonymous but reference counted) types (GBoxed*)
+.RE
+.PP
+\fIPARAM\fR
+.RS 4
+for GParamSpec or derived types (GParamSpec*)
+.RE
+.PP
+\fIPOINTER\fR
+.RS 4
+for anonymous pointer types (gpointer)
+.RE
+.PP
+\fIOBJECT\fR
+.RS 4
+for GObject or derived types (GObject*)
+.RE
+.PP
+\fINONE\fR
+.RS 4
+deprecated alias for
+\fIVOID\fR
+.RE
+.PP
+\fIBOOL\fR
+.RS 4
+deprecated alias for
+\fIBOOLEAN\fR
+.RE
+.SH "EXAMPLE"
+.PP
+To generate marshallers for the following callback functions:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+void foo (gpointer data1,
+ gpointer data2);
+void bar (gpointer data1,
+ gint param1,
+ gpointer data2);
+gfloat baz (gpointer data1,
+ gboolean param1,
+ guchar param2,
+ gpointer data2);
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The marshaller list has to look like this:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+VOID:VOID
+VOID:INT
+FLOAT:BOOLEAN,UCHAR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The generated marshallers have the arguments encoded in their function name\&. For this particular list, they are
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+g_cclosure_marshal_VOID__VOID(),
+g_cclosure_marshal_VOID__INT(),
+g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR()\&.
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+They can be used directly for GClosures or be passed in as the GSignalCMarshaller c_marshaller; argument upon creation of signals:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+GClosure *cc_foo, *cc_bar, *cc_baz;
+
+cc_foo = g_cclosure_new (NULL, foo, NULL);
+g_closure_set_marshal (cc_foo, g_cclosure_marshal_VOID__VOID);
+cc_bar = g_cclosure_new (NULL, bar, NULL);
+g_closure_set_marshal (cc_bar, g_cclosure_marshal_VOID__INT);
+cc_baz = g_cclosure_new (NULL, baz, NULL);
+g_closure_set_marshal (cc_baz, g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR);
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+
+\fBglib\-mkenums\fR(1)
+.SH "BUGS"
+.PP
+None known yet\&.
+.SH "AUTHOR"
+.PP
+\fBglib\-genmarshal\fR
+has been written by Tim Janik
+timj@gtk\&.org\&.
+.PP
+This manual page was provided by Tim Janik
+timj@gtk\&.org\&.
diff --git a/install/share/man/man1/glib-mkenums.1 b/install/share/man/man1/glib-mkenums.1
new file mode 100644
index 0000000..d0463ab
--- /dev/null
+++ b/install/share/man/man1/glib-mkenums.1
@@ -0,0 +1,234 @@
+'\" t
+.\" Title: glib-mkenums
+.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.2
+.\" Date: 05/02/2010
+.\" Manual: [FIXME: manual]
+.\" Source: [FIXME: source]
+.\" Language: English
+.\"
+.TH "GLIB\-MKENUMS" "1" "05/02/2010" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+glib-mkenums \- C language enum description generation utility
+.SH "SYNOPSIS"
+.HP \w'\fBglib\-mkenums\fR\ 'u
+\fBglib\-mkenums\fR [options...] [files...]
+.SH "DESCRIPTION"
+.PP
+\fBglib\-mkenums\fR
+is a small perl\-script utility that parses C code to extract enum definitions and produces enum descriptions based on text templates specified by the user\&. Most frequently this script is used to produce C code that contains enum values as strings so programs can provide value name strings for introspection\&.
+.SH "INVOCATION"
+.PP
+\fBglib\-mkenums\fR
+takes a list of valid C code files as input\&. The options specified control the text that is output, certain substitutions are performed on the text templates for keywords enclosed in @ characters\&.
+.SS "Options"
+.PP
+\fB\-\-fhead\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+prior to processing input files\&.
+.RE
+.PP
+\fB\-\-fprod\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+everytime a new input file is being processed\&.
+.RE
+.PP
+\fB\-\-ftail\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+after all input files have been processed\&.
+.RE
+.PP
+\fB\-\-eprod\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+everytime an enum is encountered in the input files\&.
+.RE
+.PP
+\fB\-\-vhead\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+before iterating over the set of values of an enum\&.
+.RE
+.PP
+\fB\-\-vprod\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+for every value of an enum\&.
+.RE
+.PP
+\fB\-\-vtail\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+after iterating over all values of an enum\&.
+.RE
+.PP
+\fB\-\-comments\fR \fItext\fR
+.RS 4
+Template for auto\-generated comments, the default (for C code generations) is
+"/* @comment@ */"\&.
+.RE
+.PP
+\fB\-\-template\fR \fIfile\fR
+.RS 4
+Read templates from the given file\&. The templates are enclosed in specially\-formatted C comments
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+/*** BEGIN section ***/
+/*** END section ***/
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+where section may be
+file\-header,
+file\-production,
+file\-tail,
+enumeration\-production,
+value\-header,
+value\-production,
+value\-tail
+or
+comment\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Print brief help and exit\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Print version and exit\&.
+.RE
+.SS "Production text substitutions"
+.PP
+Certain keywords enclosed in @ characters will be substituted in the emitted text\&. For the substitution examples of the keywords below, the following example enum definition is assumed:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+typedef enum
+{
+ PREFIX_THE_XVALUE = 1 << 3,
+ PREFIX_ANOTHER_VALUE = 1 << 4
+} PrefixTheXEnum;
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+@EnumName@
+.RS 4
+The name of the enum currently being processed, enum names are assumed to be properly namespaced and to use mixed capitalization to separate words (e\&.g\&. PrefixTheXEnum)\&.
+.RE
+.PP
+@enum_name@
+.RS 4
+The enum name with words lowercase and word\-separated by underscores (e\&.g\&. prefix_the_xenum)\&.
+.RE
+.PP
+@ENUMNAME@
+.RS 4
+The enum name with words uppercase and word\-separated by underscores (e\&.g\&. PREFIX_THE_XENUM)\&.
+.RE
+.PP
+@ENUMSHORT@
+.RS 4
+The enum name with words uppercase and word\-separated by underscores, prefix stripped (e\&.g\&. THE_XENUM)\&.
+.RE
+.PP
+@VALUENAME@
+.RS 4
+The enum value name currently being processed with words uppercase and word\-separated by underscores, this is the assumed literal notation of enum values in the C sources (e\&.g\&. PREFIX_THE_XVALUE)\&.
+.RE
+.PP
+@valuenick@
+.RS 4
+A nick name for the enum value currently being processed, this is usually generated by stripping common prefix words of all the enum values of the current enum, the words are lowercase and underscores are substituted by a minus (e\&.g\&. the\-xvalue)\&.
+.RE
+.PP
+@type@
+.RS 4
+This is substituted either by "enum" or "flags", depending on whether the enum value definitions contained bit\-shift operators or not (e\&.g\&. flags)\&.
+.RE
+.PP
+@Type@
+.RS 4
+The same as
+@type@
+with the first letter capitalized (e\&.g\&. Flags)\&.
+.RE
+.PP
+@TYPE@
+.RS 4
+The same as
+@type@
+with all letters uppercased (e\&.g\&. FLAGS)\&.
+.RE
+.PP
+@filename@
+.RS 4
+The name of the input file currently being processed (e\&.g\&. foo\&.h)\&.
+.RE
+.PP
+@basename@
+.RS 4
+The base name of the input file currently being processed (e\&.g\&. foo\&.h)\&. (Since: 2\&.22)
+.RE
+.SS "Trigraph extensions"
+.PP
+Some C comments are treated specially in the parsed enum definitions, such comments start out with the trigraph sequence
+/*<
+and end with the trigraph sequence
+>*/\&. Per enum definition, the options "skip" and "flags" can be specified, to indicate this enum definition to be skipped, or for it to be treated as a flags definition, or to specify the common prefix to be stripped from all values to generate value nicknames, respectively\&. The "lowercase_name" option can be used to specify the word separation used in the *_get_type() function\&. For instance, /*< lowercase_name=gnome_vfs_uri_hide_options >*/\&.
+.PP
+Per value definition, the options "skip" and "nick" are supported\&. The former causes the value to be skipped, and the latter can be used to specify the otherwise auto\-generated nickname\&. Examples:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+typedef enum /*< skip >*/
+{
+ PREFIX_FOO
+} PrefixThisEnumWillBeSkipped;
+typedef enum /*< flags,prefix=PREFIX >*/
+{
+ PREFIX_THE_ZEROTH_VALUE, /*< skip >*/
+ PREFIX_THE_FIRST_VALUE,
+ PREFIX_THE_SECOND_VALUE,
+ PREFIX_THE_THIRD_VALUE, /*< nick=the\-last\-value >*/
+} PrefixTheFlagsEnum;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.SH "SEE ALSO"
+.PP
+\fBglib\-genmarshal\fR(1)
diff --git a/install/share/man/man1/gobject-query.1 b/install/share/man/man1/gobject-query.1
new file mode 100644
index 0000000..02f4464
--- /dev/null
+++ b/install/share/man/man1/gobject-query.1
@@ -0,0 +1,83 @@
+'\" t
+.\" Title: gobject-query
+.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.2
+.\" Date: 08/08/2010
+.\" Manual: [FIXME: manual]
+.\" Source: [FIXME: source]
+.\" Language: English
+.\"
+.TH "GOBJECT\-QUERY" "1" "08/08/2010" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gobject-query \- display a tree of types
+.SH "SYNOPSIS"
+.HP \w'\fBgobject\-query\fR\ 'u
+\fBgobject\-query\fR froots [options...]
+.HP \w'\fBgobject\-query\fR\ 'u
+\fBgobject\-query\fR tree [options...]
+.SH "DESCRIPTION"
+.PP
+
+\fBgobject\-query\fR
+is a small utility that draws a tree of types\&.
+.SH "INVOCATION"
+.PP
+
+\fBgobject\-query\fR
+takes a mandatory argument that specifies whether it should iterate over the fundamental types or print a type tree\&.
+.SS "Options"
+.PP
+\fBfroots\fR
+.RS 4
+iterate over fundamental roots
+.RE
+.PP
+\fBtree\fR
+.RS 4
+print type tree
+.RE
+.PP
+\fB\-r\fR \fItype\fR
+.RS 4
+specify the root type
+.RE
+.PP
+\fB\-n\fR
+.RS 4
+don\'t descend type tree
+.RE
+.PP
+\fB\-b\fR \fIstring\fR
+.RS 4
+specify indent string
+.RE
+.PP
+\fB\-i\fR \fIstring\fR
+.RS 4
+specify incremental indent string
+.RE
+.PP
+\fB\-s\fR \fInumber\fR
+.RS 4
+specify line spacing
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Print brief help and exit\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-version\fR
+.RS 4
+Print version and exit\&.
+.RE
diff --git a/install/share/man/man1/ngettext.1 b/install/share/man/man1/ngettext.1
new file mode 100644
index 0000000..9442f10
--- /dev/null
+++ b/install/share/man/man1/ngettext.1
@@ -0,0 +1,68 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.24.
+.TH NGETTEXT "1" "June 2010" "GNU gettext-runtime 0.18.1" GNU
+.SH NAME
+ngettext \- translate message and choose plural form
+.SH SYNOPSIS
+.B ngettext
+[\fIOPTION\fR] [\fITEXTDOMAIN\fR] \fIMSGID MSGID-PLURAL COUNT\fR
+.SH DESCRIPTION
+.\" Add any additional description here
+The \fBngettext\fP program translates a natural language message into the
+user's language, by looking up the translation in a message catalog, and
+chooses the appropriate plural form, which depends on the number \fICOUNT\fP
+and the language of the message catalog where the translation was found.
+.PP
+Display native language translation of a textual message whose grammatical
+form depends on a number.
+.TP
+\fB\-d\fR, \fB\-\-domain\fR=\fITEXTDOMAIN\fR
+retrieve translated message from TEXTDOMAIN
+.TP
+\fB\-e\fR
+enable expansion of some escape sequences
+.TP
+\fB\-E\fR
+(ignored for compatibility)
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+display this help and exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+display version information and exit
+.TP
+[TEXTDOMAIN]
+retrieve translated message from TEXTDOMAIN
+.TP
+MSGID MSGID-PLURAL
+translate MSGID (singular) / MSGID-PLURAL (plural)
+.TP
+COUNT
+choose singular/plural form based on this value
+.PP
+If the TEXTDOMAIN parameter is not given, the domain is determined from the
+environment variable TEXTDOMAIN. If the message catalog is not found in the
+regular directory, another location can be specified with the environment
+variable TEXTDOMAINDIR.
+Standard search directory: c:/devel/target/33bc8ddfeabcf34f6317ef7b2e85485f/share/locale
+.SH AUTHOR
+Written by Ulrich Drepper.
+.SH "REPORTING BUGS"
+Report bugs to .
+.SH COPYRIGHT
+Copyright \(co 1995-1997, 2000-2007 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+The full documentation for
+.B ngettext
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B ngettext
+programs are properly installed at your site, the command
+.IP
+.B info ngettext
+.PP
+should give you access to the complete manual.
diff --git a/install/share/man/man1/pango-querymodules.1 b/install/share/man/man1/pango-querymodules.1
new file mode 100644
index 0000000..14a75ae
--- /dev/null
+++ b/install/share/man/man1/pango-querymodules.1
@@ -0,0 +1,47 @@
+'\" t
+.\" Title: pango-querymodules
+.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.2
+.\" Date: 12/14/2009
+.\" Manual: [FIXME: manual]
+.\" Source: [FIXME: source]
+.\" Language: English
+.\"
+.TH "PANGO\-QUERYMODULES" "1" "12/14/2009" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pango-querymodules \- Module registration utility
+.SH "SYNOPSIS"
+.HP \w'\fBpango\-querymodules\fR\ 'u
+\fBpango\-querymodules\fR [module...]
+.SH "DESCRIPTION"
+.PP
+
+\fBpango\-querymodules\fR
+collects information about loadable modules for Pango and writes it to
+stdout\&.
+.PP
+If called without arguments, it looks for modules in the Pango module path\&.
+.PP
+If called with arguments, it looks for the specified modules\&. The arguments may be absolute or relative paths\&.
+.SH "ENVIRONMENT"
+.PP
+The Pango module path is specified by the key
+Pango/ModulesPath
+in the Pango config database, which is read from
+\fIsysconfdir\fR/pango/pangorc,
+~/\&.pangorc
+and the file specified in the environment variable
+\fBPANGO_RC_FILE\fR\&.
+.SH "BUGS"
+.PP
+None known yet\&.
diff --git a/install/share/man/man1/pango-view.1 b/install/share/man/man1/pango-view.1
new file mode 100644
index 0000000..57a36e2
--- /dev/null
+++ b/install/share/man/man1/pango-view.1
@@ -0,0 +1,118 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
+.TH PANGO-VIEW "1" "June 2010" "pango-view (pango) 1.28.1" "User Commands"
+.SH NAME
+pango-view \- Pango text viewer
+.SH DESCRIPTION
+.SS "Usage:"
+.IP
+pango\-view [OPTION...] \- FILE
+.SS "Help Options:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Show help options
+.TP
+\fB\-\-help\-all\fR
+Show all help options
+.TP
+\fB\-\-help\-cairo\fR
+Options understood by the cairo backend
+.SS "Cairo backend options:"
+.TP
+\fB\-\-annotate\fR=\fI1\fR or 2
+Annotate the output
+.SS "Application Options:"
+.TP
+\fB\-\-no\-auto\-dir\fR
+No layout direction according to contents
+.TP
+\fB\-\-backend\fR=\fIcairo\fR/xft/ft2/x
+Pango backend to use for rendering (default: cairo)
+.TP
+\fB\-\-background\fR=\fIred\fR/#rrggbb/#rrggbbaa/transparent
+Set the background color
+.TP
+\fB\-q\fR, \fB\-\-no\-display\fR
+Do not display (just write to file or whatever)
+.TP
+\fB\-\-dpi\fR=\fInumber\fR
+Set the resolution
+.TP
+\fB\-\-align\fR=\fIleft\fR/center/right
+Text alignment
+.TP
+\fB\-\-ellipsize\fR=\fIstart\fR/middle/end
+Ellipsization mode
+.TP
+\fB\-\-font\fR=\fIdescription\fR
+Set the font description
+.TP
+\fB\-\-foreground\fR=\fIred\fR/#rrggbb/#rrggbbaa
+Set the text color
+.TP
+\fB\-\-gravity\fR=\fIsouth\fR/east/north/west/auto
+Base gravity: glyph rotation
+.TP
+\fB\-\-gravity\-hint\fR=\fInatural\fR/strong/line
+Gravity hint
+.TP
+\fB\-\-header\fR
+Display the options in the output
+.TP
+\fB\-\-height=\fR+points/\-numlines
+Height in points (positive) or number of lines (negative) for ellipsizing
+.TP
+\fB\-\-hinting\fR=\fInone\fR/auto/full
+Hinting style
+.TP
+\fB\-\-indent\fR=\fIpoints\fR
+Width in points to indent paragraphs
+.TP
+\fB\-\-justify\fR
+Align paragraph lines to be justified
+.TP
+\fB\-\-language\fR=\fIen_US\fR/etc
+Language to use for font selection
+.TP
+\fB\-\-margin\fR=\fICSS\-style\fR numbers in pixels
+Set the margin on the output in pixels
+.TP
+\fB\-\-markup\fR
+Interpret text as Pango markup
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIfile\fR
+Save rendered image to output file
+.TP
+\fB\-\-pangorc\fR=\fIfile\fR
+pangorc file to use (default is ./pangorc)
+.TP
+\fB\-\-pixels\fR
+Use pixel units instead of points (sets dpi to 72)
+.TP
+\fB\-\-rtl\fR
+Set base direction to right\-to\-left
+.TP
+\fB\-\-rotate\fR=\fIdegrees\fR
+Angle at which to rotate results
+.TP
+\fB\-n\fR, \fB\-\-runs\fR=\fIinteger\fR
+Run Pango layout engine this many times
+.TP
+\fB\-\-single\-par\fR
+Enable single\-paragraph mode
+.TP
+\fB\-t\fR, \fB\-\-text\fR=\fIstring\fR
+Text to display (instead of a file)
+.TP
+\fB\-\-version\fR
+Show version numbers
+.TP
+\fB\-\-waterfall\fR
+Create a waterfall display
+.TP
+\fB\-w\fR, \fB\-\-width\fR=\fIpoints\fR
+Width in points to which to wrap lines or ellipsize
+.TP
+\fB\-\-wrap\fR=\fIword\fR/char/word\-char
+Text wrapping mode (needs a width to be set)
+.PP
+Pango module interface version: 1.6.0
diff --git a/install/share/man/man1/xml2-config.1 b/install/share/man/man1/xml2-config.1
new file mode 100644
index 0000000..8a25962
--- /dev/null
+++ b/install/share/man/man1/xml2-config.1
@@ -0,0 +1,31 @@
+.TH GNOME-XML 1 "3 July 1999" Version 1.1.0
+.SH NAME
+xml-config - script to get information about the installed version of GNOME-XML
+.SH SYNOPSIS
+.B xml-config
+[\-\-prefix\fI[=DIR]\fP] [\-\-libs] [\-\-cflags] [\-\-version] [\-\-help]
+.SH DESCRIPTION
+\fIxml-config\fP is a tool that is used to determine the compile and
+linker flags that should be used to compile and link programs that use
+\fIGNOME-XML\fP.
+.SH OPTIONS
+.l
+\fIxml-config\fP accepts the following options:
+.TP 8
+.B \-\-version
+Print the currently installed version of \fIGNOME-XML\fP on the standard output.
+.TP 8
+.B \-\-libs
+Print the linker flags that are necessary to link a \fIGNOME-XML\fP program.
+.TP 8
+.B \-\-cflags
+Print the compiler flags that are necessary to compile a \fIGNOME-XML\fP program.
+.TP 8
+.B \-\-prefix=PREFIX
+If specified, use PREFIX instead of the installation prefix that
+\fIGNOME-XML\fP was built with when computing the output for the
+\-\-cflags and \-\-libs options. This option must be specified before
+any \-\-libs or \-\-cflags options.
+.SH AUTHOR
+This manual page was written by Fredrik Hallenberg ,
+for the Debian GNU/linux system (but may be used by others).
diff --git a/install/share/man/man1/xmlcatalog.1 b/install/share/man/man1/xmlcatalog.1
new file mode 100644
index 0000000..1a3173d
--- /dev/null
+++ b/install/share/man/man1/xmlcatalog.1
@@ -0,0 +1,229 @@
+.\" ** You probably do not want to edit this file directly **
+.\" It was generated using the DocBook XSL Stylesheets (version 1.69.1).
+.\" Instead of manually editing it, you probably should edit the DocBook XML
+.\" source for it and then use the DocBook XSL Stylesheets to regenerate it.
+.TH "XMLCATALOG" "1" "$Date: 2006/08/21 08:34:11 $" "libxml2" ""
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+xmlcatalog \- Command line tool to parse and manipulate XML or SGML catalog files.
+.SH "SYNOPSIS"
+.HP 11
+\fBxmlcatalog\fR [\fB\-\-sgml\fR \fB\-\-shell\fR \fB\-\-create\fR \fB\-\-del\ \fR\fB\fIVALUE(S)\fR\fR [\ \fB\-\-add\ \fR\fB\fITYPE\fR\fR\fB\ \fR\fB\fIORIG\fR\fR\fB\ \fR\fB\fIREPLACE\fR\fR\fB\ \fR\ \fB\-\-add\ \fR\fB\fIFILENAME\fR\fR] \fB\-\-noout\fR \fB\-\-no\-super\-update\fR [\fB\-v\fR\ \fB\-\-verbose\fR]] {\fICATALOGFILE\fR} {\fIENTITIES\fR...}
+.SH "DESCRIPTION"
+.PP
+\fBxmlcatalog\fR
+is a command line application allowing users to monitor and manipulate
+XML
+and
+SGML
+catalogs. It is included in
+\fBlibxml\fR(3).
+.PP
+Its functions can be invoked from a single command from the command line, or it can perform multiple functions in interactive mode. It can operate on both
+XML
+and
+SGML
+files.
+.SH "OPTIONS"
+.PP
+\fBxmlcatalog\fR
+accepts the following options (in alphabetical order):
+.TP
+\fB\-\-add \fR\fB\fITYPE\fR\fR\fB \fR\fB\fIORIG\fR\fR\fB \fR\fB\fIREPLACE\fR\fR\fB \fR
+Add an entry to
+\fICATALOGFILE\fR.
+\fITYPE\fR
+indicates the type of entry. Possible types are:
+\fIpublic\fR, \fIsystem\fR, \fIrewriteSystem\fR, \fIrewriteURI\fR, \fIdelegatePublic\fR, \fIdelegateSystem\fR, \fInextCatalog\fR.
+\fIORIG\fR
+is the original reference to be replaced, and
+\fIREPLACE\fR
+is the
+URI
+of the replacement entity to be used. The
+\fB\-\-add\fR
+option will not overwrite
+\fICATALOGFILE\fR, outputting to
+\fIstdout\fR, unless
+\fB\-\-noout\fR
+is used. The
+\fB\-\-add\fR
+will always take three parameters even if some of the
+XML
+catalog constructs will have only a single argument.
+.TP
+\fB\-\-add \fR\fB\fIFILENAME\fR\fR
+If the
+\fB\-\-add\fR
+option is used following the
+\fB\-\-sgml\fR
+option, only a single argument, a
+\fIFILENAME\fR, is used. This is used to add the name of a catalog file to an
+SGML
+supercatalog, a file that contains references to other included
+SGML
+catalog files.
+.TP
+\fB\-\-create\fR
+Create a new
+XML
+catalog. Outputs to
+\fIstdout\fR, ignoring
+\fIfilename\fR
+unless
+\fB\-\-noout\fR
+is used, in which case it creates a new catalog file
+\fIfilename\fR.
+.TP
+\fB\-\-del \fR\fB\fIVALUE(S)\fR\fR
+Remove entries from
+\fICATALOGFILE\fR
+matching
+\fIVALUE(S)\fR. The
+\fB\-\-del\fR
+option will not overwrite
+\fICATALOGFILE\fR, outputting to
+\fIstdout\fR, unless
+\fB\-\-noout\fR
+is used.
+.TP
+\fB\-\-noout\fR
+Save output to the named file rather than outputting to
+\fIstdout\fR.
+.TP
+\fB\-\-no\-super\-update\fR
+Do not update the
+SGML
+super catalog.
+.TP
+\fB\-\-shell\fR
+Run a shell allowing interactive queries on catalog file
+\fICATALOGFILE\fR. For the set of available commands see
+the section called \(lqSHELL COMMANDS\(rq.
+.TP
+\fB\-\-sgml\fR
+Uses
+SGML
+super catalogs for
+\fB\-\-add\fR
+and
+\fB\-\-del\fR
+options.
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Output debugging information.
+.SH "SHELL COMMANDS"
+.PP
+Invoking
+\fBxmlcatalog\fR
+with the
+\fB\-\-shell \fR\fB\fICATALOGFILE\fR\fR
+option opens a command line shell allowing interactive access to the catalog file identified by
+\fICATALOGFILE\fR. Invoking the shell provides a command line prompt after which the following commands (described in alphabetical order) can be entered.
+.TP
+\fBadd \fR\fB\fITYPE\fR\fR\fB \fR\fB\fIORIG\fR\fR\fB \fR\fB\fIREPLACE\fR\fR\fB \fR
+Add an entry to the catalog file.
+\fITYPE\fR
+indicates the type of entry. Possible types are:
+\fIpublic\fR, \fIsystem\fR, \fIrewriteSystem\fR, \fIrewriteURI\fR, \fIdelegatePublic\fR, \fIdelegateSystem\fR, \fInextCatalog\fR.
+\fIORIG\fR
+is the original reference to be replaced, and
+\fIREPLACE\fR
+is the
+URI
+of the replacement entity to be used. The
+\fB\-\-add\fR
+option will not overwrite
+\fICATALOGFILE\fR, outputting to
+\fIstdout\fR, unless
+\fB\-\-noout\fR
+is used. The
+\fB\-\-add\fR
+will always take three parameters even if some of the
+XML
+catalog constructs will have only a single argument.
+.TP
+\fBdebug\fR
+Print debugging statements showing the steps
+\fBxmlcatalog\fR
+is executing.
+.TP
+\fBdel \fR\fB\fIVALUE(S)\fR\fR
+Remove the catalog entry corresponding to
+\fIVALUE(S)\fR.
+.TP
+\fBdump\fR
+Print the current catalog.
+.TP
+\fBexit\fR
+Quit the shell.
+.TP
+\fBpublic \fR\fB\fIPUBLIC\-ID\fR\fR
+Execute a Formal Public Identifier look\-up of the catalog entry for
+\fIPUBLIC\-ID\fR. The corresponding entry will be output to the command line.
+.TP
+\fBquiet\fR
+Stop printing debugging statements.
+.TP
+\fBsystem \fR\fB\fISYSTEM\-ID\fR\fR
+Execute a Formal Public Identifier look\-up of the catalog entry for
+\fISYSTEM\-ID\fR. The corresponding entry will be output to the command line.
+.SH "ENVIRONMENT"
+.TP
+\fBXML_CATALOG_FILES\fR
+XML
+catalog behavior can be changed by redirecting queries to the user's own set of catalogs. This can be done by setting the
+\fBXML_CATALOG_FILES\fR
+environment variable to a list of catalogs. An empty one should deactivate loading the default
+\fI/etc/xml/catalog\fR
+catalog.
+.SH "DIAGNOSTICS"
+.PP
+\fBxmlcatalog\fR
+return codes provide information that can be used when calling it from scripts.
+.TP
+\fB0\fR
+No error
+.TP
+\fB1\fR
+Failed to remove an entry from the catalog
+.TP
+\fB2\fR
+Failed to save to the catalog, check file permissions
+.TP
+\fB3\fR
+Failed to add an entry to the catalog
+.TP
+\fB4\fR
+Failed to look up an entry in the catalog
+.SH "SEE ALSO"
+.PP
+\fBlibxml\fR(3)
+.PP
+More information can be found at
+.TP 3
+\(bu
+\fBlibxml\fR(3)
+web page
+\fI\%http://www.xmlsoft.org/\fR
+.TP
+\(bu
+\fBlibxml\fR(3)
+catalog support web page at
+\fI\%http://www.xmlsoft.org/catalog.html\fR
+.TP
+\(bu
+James Clark's
+SGML
+catalog page
+\fI\%http://www.jclark.com/sp/catalog.htm\fR
+.TP
+\(bu
+OASISXML
+catalog specification
+\fI\%http://www.oasis\-open.org/committees/entity/spec.html\fR
+.SH "AUTHOR"
+John Fleck .
diff --git a/install/share/man/man1/xmllint.1 b/install/share/man/man1/xmllint.1
new file mode 100644
index 0000000..18ef917
--- /dev/null
+++ b/install/share/man/man1/xmllint.1
@@ -0,0 +1,427 @@
+.\" ** You probably do not want to edit this file directly **
+.\" It was generated using the DocBook XSL Stylesheets (version 1.69.1).
+.\" Instead of manually editing it, you probably should edit the DocBook XML
+.\" source for it and then use the DocBook XSL Stylesheets to regenerate it.
+.TH "XMLLINT" "1" "$Date: 2006/08/21 08:34:11 $" "libxml2" ""
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+xmllint \- command line XML tool
+.SH "SYNOPSIS"
+.HP 8
+\fBxmllint\fR [\fB\-\-version\fR \fB\-\-debug\fR \fB\-\-shell\fR \fB\-\-debugent\fR \fB\-\-copy\fR \fB\-\-recover\fR \fB\-\-noent\fR \fB\-\-noout\fR \fB\-\-nonet\fR \fB\-\-path\ "\fR\fB\fIPATH(S)\fR\fR\fB"\fR \fB\-\-load\-trace\fR \fB\-\-htmlout\fR \fB\-\-nowrap\fR \fB\-\-valid\fR \fB\-\-postvalid\fR \fB\-\-dtdvalid\ \fR\fB\fIURL\fR\fR \fB\-\-dtdvalidfpi\ \fR\fB\fIFPI\fR\fR \fB\-\-timing\fR \fB\-\-output\ \fR\fB\fIFILE\fR\fR \fB\-\-repeat\fR \fB\-\-insert\fR \fB\-\-compress\fR \fB\-\-html\fR \fB\-\-xmlout\fR \fB\-\-push\fR \fB\-\-memory\fR \fB\-\-maxmem\ \fR\fB\fINBBYTES\fR\fR \fB\-\-nowarning\fR \fB\-\-noblanks\fR \fB\-\-nocdata\fR \fB\-\-format\fR \fB\-\-encode\ \fR\fB\fIENCODING\fR\fR \fB\-\-dropdtd\fR \fB\-\-nsclean\fR \fB\-\-testIO\fR \fB\-\-catalogs\fR \fB\-\-nocatalogs\fR \fB\-\-auto\fR \fB\-\-xinclude\fR \fB\-\-noxincludenode\fR \fB\-\-loaddtd\fR \fB\-\-dtdattr\fR \fB\-\-stream\fR \fB\-\-walker\fR \fB\-\-pattern\ \fR\fB\fIPATTERNVALUE\fR\fR \fB\-\-chkregister\fR \fB\-\-relaxng\ \fR\fB\fISCHEMA\fR\fR \fB\-\-schema\ \fR\fB\fISCHEMA\fR\fR \fB\-\-c14n\fR] {\fIXML\-FILE(S)\fR... \-}
+.HP 8
+\fBxmllint\fR \fB\-\-help\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBxmllint\fR
+program parses one or more
+XML
+files, specified on the command line as
+\fIXML\-FILE\fR
+(or the standard input if the filename provided is
+\fB\-\fR
+). It prints various types of output, depending upon the options selected. It is useful for detecting errors both in
+XML
+code and in the
+XML
+parser itself.
+.PP
+\fBxmllint\fR
+is included in
+\fBlibxml\fR(3).
+.SH "OPTIONS"
+.PP
+\fBxmllint\fR
+accepts the following options (in alphabetical order):
+.TP
+\fB\-\-auto\fR
+Generate a small document for testing purposes.
+.TP
+\fB\-\-catalogs\fR
+Use the
+SGML
+catalog(s) from
+\fBSGML_CATALOG_FILES\fR. Otherwise
+XML
+catalogs starting from
+\fI/etc/xml/catalog\fR
+are used by default.
+.TP
+\fB\-\-chkregister\fR
+Turn on node registration. Useful for developers testing
+\fBlibxml\fR(3)
+node tracking code.
+.TP
+\fB\-\-compress\fR
+Turn on
+\fBgzip\fR(1)
+compression of output.
+.TP
+\fB\-\-copy\fR
+Test the internal copy implementation.
+.TP
+\fB\-\-c14n\fR
+Use the W3C
+XML
+Canonicalisation (C14N) to serialize the result of parsing to
+\fIstdout\fR. It keeps comments in the result.
+.TP
+\fB\-\-dtdvalid \fR\fB\fIURL\fR\fR
+Use the
+DTD
+specified by an
+\fIURL\fR
+for validation.
+.TP
+\fB\-\-dtdvalidfpi \fR\fB\fIFPI\fR\fR
+Use the
+DTD
+specified by a Formal Public Identifier
+\fIFPI\fR
+for validation, note that this will require a catalog exporting that Formal Public Identifier to work.
+.TP
+\fB\-\-debug\fR
+Parse a file and output an annotated tree of the in\-memory version of the document.
+.TP
+\fB\-\-debugent\fR
+Debug the entities defined in the document.
+.TP
+\fB\-\-dropdtd\fR
+Remove
+DTD
+from output.
+.TP
+\fB\-\-dtdattr\fR
+Fetch external
+DTD
+and populate the tree with inherited attributes.
+.TP
+\fB\-\-encode \fR\fB\fIENCODING\fR\fR
+Output in the given encoding.
+.TP
+\fB\-\-format\fR
+Reformat and reindent the output. The
+\fBXMLLINT_INDENT\fR
+environment variable controls the indentation. The default value is two spaces " ").
+.TP
+\fB\-\-help\fR
+Print out a short usage summary for
+\fBxmllint\fR.
+.TP
+\fB\-\-html\fR
+Use the
+HTML
+parser.
+.TP
+\fB\-\-htmlout\fR
+Output results as an
+HTML
+file. This causes
+\fBxmllint\fR
+to output the necessary
+HTML
+tags surrounding the result tree output so the results can be displayed/viewed in a browser.
+.TP
+\fB\-\-insert\fR
+Test for valid insertions.
+.TP
+\fB\-\-loaddtd\fR
+Fetch an external
+DTD.
+.TP
+\fB\-\-load\-trace\fR
+Display all the documents loaded during the processing to
+\fIstderr\fR.
+.TP
+\fB\-\-maxmem \fR\fB\fINNBYTES\fR\fR
+Test the parser memory support.
+\fINNBYTES\fR
+is the maximum number of bytes the library is allowed to allocate. This can also be used to make sure batch processing of
+XML
+files will not exhaust the virtual memory of the server running them.
+.TP
+\fB\-\-memory\fR
+Parse from memory.
+.TP
+\fB\-\-noblanks\fR
+Drop ignorable blank spaces.
+.TP
+\fB\-\-nocatalogs\fR
+Do not use any catalogs.
+.TP
+\fB\-\-nocdata\fR
+Substitute CDATA section by equivalent text nodes.
+.TP
+\fB\-\-noent\fR
+Substitute entity values for entity references. By default,
+\fBxmllint\fR
+leaves entity references in place.
+.TP
+\fB\-\-nonet\fR
+Do not use the Internet to fetch
+DTDs or entities.
+.TP
+\fB\-\-noout\fR
+Suppress output. By default,
+\fBxmllint\fR
+outputs the result tree.
+.TP
+\fB\-\-nowarning\fR
+Do not emit warnings from the parser and/or validator.
+.TP
+\fB\-\-nowrap\fR
+Do not output
+HTML
+doc wrapper.
+.TP
+\fB\-\-noxincludenode\fR
+Do XInclude processing but do not generate XInclude start and end nodes.
+.TP
+\fB\-\-nsclean\fR
+Remove redundant namespace declarations.
+.TP
+\fB\-\-output \fR\fB\fIFILE\fR\fR
+Define a file path where
+\fBxmllint\fR
+will save the result of parsing. Usually the programs build a tree and save it on
+\fIstdout\fR, with this option the result
+XML
+instance will be saved onto a file.
+.TP
+\fB\-\-path "\fR\fB\fIPATH(S)\fR\fR\fB"\fR
+Use the (space\- or colon\-separated) list of filesystem paths specified by
+\fIPATHS\fR
+to load
+DTDs or entities. Enclose space\-separated lists by quotation marks.
+.TP
+\fB\-\-pattern \fR\fB\fIPATTERNVALUE\fR\fR
+Used to exercise the pattern recognition engine, which can be used with the reader interface to the parser. It allows to select some nodes in the document based on an XPath (subset) expression. Used for debugging.
+.TP
+\fB\-\-postvalid\fR
+Validate after parsing has completed.
+.TP
+\fB\-\-push\fR
+Use the push mode of the parser.
+.TP
+\fB\-\-recover\fR
+Output any parsable portions of an invalid document.
+.TP
+\fB\-\-relaxng \fR\fB\fISCHEMA\fR\fR
+Use RelaxNG file named
+\fISCHEMA\fR
+for validation.
+.TP
+\fB\-\-repeat\fR
+Repeat 100 times, for timing or profiling.
+.TP
+\fB\-\-schema \fR\fB\fISCHEMA\fR\fR
+Use a W3C
+XML
+Schema file named
+\fISCHEMA\fR
+for validation.
+.TP
+\fB\-\-shell\fR
+Run a navigating shell. Details on available commands in shell mode are below (see
+the section called \(lqSHELL COMMANDS\(rq).
+.TP
+\fB\-\-stream\fR
+Use streaming
+API
+\- useful when used in combination with
+\fB\-\-relaxng\fR
+or
+\fB\-\-valid\fR
+options for validation of files that are too large to be held in memory.
+.TP
+\fB\-\-testIO\fR
+Test user input/output support.
+.TP
+\fB\-\-timing\fR
+Output information about the time it takes
+\fBxmllint\fR
+to perform the various steps.
+.TP
+\fB\-\-valid\fR
+Determine if the document is a valid instance of the included Document Type Definition (DTD). A
+DTD
+to be validated against also can be specified at the command line using the
+\fB\-\-dtdvalid\fR
+option. By default,
+\fBxmllint\fR
+also checks to determine if the document is well\-formed.
+.TP
+\fB\-\-version\fR
+Display the version of
+\fBlibxml\fR(3)
+used.
+.TP
+\fB\-\-walker\fR
+Test the walker module, which is a reader interface but for a document tree, instead of using the reader
+API
+on an unparsed document it works on an existing in\-memory tree. Used for debugging.
+.TP
+\fB\-\-xinclude\fR
+Do XInclude processing.
+.TP
+\fB\-\-xmlout\fR
+Used in conjunction with
+\fB\-\-html\fR. Usually when
+HTML
+is parsed the document is saved with the
+HTML
+serializer. But with this option the resulting document is saved with the
+XML
+serializer. This is primarily used to generate
+XHTML
+from
+HTML
+input.
+.SH "SHELL COMMANDS"
+.PP
+\fBxmllint\fR
+offers an interactive shell mode invoked with the
+\fB\-\-shell\fR
+command. Available commands in shell mode include (in alphabetical order):
+.TP
+\fBbase\fR
+Display
+XML
+base of the node.
+.TP
+\fBbye\fR
+Leave the shell.
+.TP
+\fBcat \fR\fB\fINODE\fR\fR
+Display the given node or the current one.
+.TP
+\fBcd \fR\fB\fIPATH\fR\fR
+Change the current node to the given path (if unique) or root if no argument is given.
+.TP
+\fBdir \fR\fB\fIPATH\fR\fR
+Dumps information about the node (namespace, attributes, content).
+.TP
+\fBdu \fR\fB\fIPATH\fR\fR
+Show the structure of the subtree under the given path or the current node.
+.TP
+\fBexit\fR
+Leave the shell.
+.TP
+\fBhelp\fR
+Show this help.
+.TP
+\fBfree\fR
+Display memory usage.
+.TP
+\fBload \fR\fB\fIFILENAME\fR\fR
+Load a new document with the given filename.
+.TP
+\fBls \fR\fB\fIPATH\fR\fR
+List contents of the given path or the current directory.
+.TP
+\fBpwd\fR
+Display the path to the current node.
+.TP
+\fBquit\fR
+Leave the shell.
+.TP
+\fBsave \fR\fB\fIFILENAME\fR\fR
+Save the current document to the given filename or to the original name.
+.TP
+\fBvalidate\fR
+Check the document for errors.
+.TP
+\fBwrite \fR\fB\fIFILENAME\fR\fR
+Write the current node to the given filename.
+.SH "ENVIRONMENT"
+.TP
+\fBSGML_CATALOG_FILES\fR
+SGML
+catalog behavior can be changed by redirecting queries to the user's own set of catalogs. This can be done by setting the
+\fBSGML_CATALOG_FILES\fR
+environment variable to a list of catalogs. An empty one should deactivate loading the default
+\fI/etc/sgml/catalog\fR
+catalog.
+.TP
+\fBXML_CATALOG_FILES\fR
+XML
+catalog behavior can be changed by redirecting queries to the user's own set of catalogs. This can be done by setting the
+\fBXML_CATALOG_FILES\fR
+environment variable to a list of catalogs. An empty one should deactivate loading the default
+\fI/etc/xml/catalog\fR
+catalog.
+.TP
+\fBXML_DEBUG_CATALOG\fR
+Setting the environment variable
+\fBXML_DEBUG_CATALOG\fR
+to
+\fInon\-zero\fR
+using the
+\fBexport\fR
+command outputs debugging information related to catalog operations.
+.TP
+\fBXMLLINT_INDENT\fR
+Setting the environment variable
+\fBXMLLINT_INDENT\fR
+controls the indentation. The default value is two spaces " ".
+.SH "DIAGNOSTICS"
+.PP
+\fBxmllint\fR
+return codes provide information that can be used when calling it from scripts.
+.TP
+\fB0\fR
+No error
+.TP
+\fB1\fR
+Unclassified
+.TP
+\fB2\fR
+Error in
+DTD
+.TP
+\fB3\fR
+Validation error
+.TP
+\fB4\fR
+Validation error
+.TP
+\fB5\fR
+Error in schema compilation
+.TP
+\fB6\fR
+Error writing output
+.TP
+\fB7\fR
+Error in pattern (generated when
+\fB\-\-pattern\fR
+option is used)
+.TP
+\fB8\fR
+Error in Reader registration (generated when
+\fB\-\-chkregister\fR
+option is used)
+.TP
+\fB9\fR
+Out of memory error
+.SH "SEE ALSO"
+.PP
+\fBlibxml\fR(3)
+.PP
+More information can be found at
+.TP 3
+\(bu
+\fBlibxml\fR(3)
+web page
+\fI\%http://www.xmlsoft.org/\fR
+.TP
+\(bu
+W3C
+XSLT
+page
+\fI\%http://www.w3.org/TR/xslt\fR
+.SH "AUTHOR"
+John Fleck , Ziying Sherwin , Heiko Rupp .
diff --git a/install/share/man/man3/FcAtomicCreate.3 b/install/share/man/man3/FcAtomicCreate.3
new file mode 100644
index 0000000..7692b58
--- /dev/null
+++ b/install/share/man/man3/FcAtomicCreate.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcAtomicCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcAtomicCreate \- create an FcAtomic object
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcAtomic * FcAtomicCreate(const FcChar8 *\fIfile\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Creates a data structure containing data needed to control access to \fIfile\fR\&.
+Writing is done to a separate file. Once that file is complete, the original
+configuration file is atomically replaced so that reading process always see
+a consistent and complete file without the need to lock for reading.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcAtomicDeleteNew.3 b/install/share/man/man3/FcAtomicDeleteNew.3
new file mode 100644
index 0000000..81041b9
--- /dev/null
+++ b/install/share/man/man3/FcAtomicDeleteNew.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcAtomicDeleteNew" "3" "18 November 2009" "" ""
+.SH NAME
+FcAtomicDeleteNew \- delete new file
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcAtomicDeleteNew(FcAtomic *\fIatomic\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Deletes the new file. Used in error recovery to back out changes.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcAtomicDestroy.3 b/install/share/man/man3/FcAtomicDestroy.3
new file mode 100644
index 0000000..e5dc820
--- /dev/null
+++ b/install/share/man/man3/FcAtomicDestroy.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcAtomicDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcAtomicDestroy \- destroy an FcAtomic object
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcAtomicDestroy(FcAtomic *\fIatomic\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Destroys \fIatomic\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcAtomicLock.3 b/install/share/man/man3/FcAtomicLock.3
new file mode 100644
index 0000000..6517a0c
--- /dev/null
+++ b/install/share/man/man3/FcAtomicLock.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcAtomicLock" "3" "18 November 2009" "" ""
+.SH NAME
+FcAtomicLock \- lock a file
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcAtomicLock(FcAtomic *\fIatomic\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Attempts to lock the file referenced by \fIatomic\fR\&.
+Returns FcFalse if the file is already locked, else returns FcTrue and
+leaves the file locked.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcAtomicNewFile.3 b/install/share/man/man3/FcAtomicNewFile.3
new file mode 100644
index 0000000..cd13c16
--- /dev/null
+++ b/install/share/man/man3/FcAtomicNewFile.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcAtomicNewFile" "3" "18 November 2009" "" ""
+.SH NAME
+FcAtomicNewFile \- return new temporary file name
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcAtomicNewFile(FcAtomic *\fIatomic\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the filename for writing a new version of the file referenced
+by \fIatomic\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcAtomicOrigFile.3 b/install/share/man/man3/FcAtomicOrigFile.3
new file mode 100644
index 0000000..8b8f940
--- /dev/null
+++ b/install/share/man/man3/FcAtomicOrigFile.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcAtomicOrigFile" "3" "18 November 2009" "" ""
+.SH NAME
+FcAtomicOrigFile \- return original file name
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcAtomicOrigFile(FcAtomic *\fIatomic\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the file refernced by \fIatomic\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcAtomicReplaceOrig.3 b/install/share/man/man3/FcAtomicReplaceOrig.3
new file mode 100644
index 0000000..fcf1874
--- /dev/null
+++ b/install/share/man/man3/FcAtomicReplaceOrig.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcAtomicReplaceOrig" "3" "18 November 2009" "" ""
+.SH NAME
+FcAtomicReplaceOrig \- replace original with new
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcAtomicReplaceOrig(FcAtomic *\fIatomic\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Replaces the original file referenced by \fIatomic\fR with
+the new file. Returns FcFalse if the file cannot be replaced due to
+permission issues in the filesystem. Otherwise returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcAtomicUnlock.3 b/install/share/man/man3/FcAtomicUnlock.3
new file mode 100644
index 0000000..3f4bdfd
--- /dev/null
+++ b/install/share/man/man3/FcAtomicUnlock.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcAtomicUnlock" "3" "18 November 2009" "" ""
+.SH NAME
+FcAtomicUnlock \- unlock a file
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcAtomicUnlock(FcAtomic *\fIatomic\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Unlocks the file.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcBlanksAdd.3 b/install/share/man/man3/FcBlanksAdd.3
new file mode 100644
index 0000000..e108dcc
--- /dev/null
+++ b/install/share/man/man3/FcBlanksAdd.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcBlanksAdd" "3" "18 November 2009" "" ""
+.SH NAME
+FcBlanksAdd \- Add a character to an FcBlanks
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcBlanksAdd(FcBlanks *\fIb\fB);
+(FcChar32 \fIucs4\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Adds a single character to an FcBlanks object, returning FcFalse
+if this process ran out of memory.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcBlanksCreate.3 b/install/share/man/man3/FcBlanksCreate.3
new file mode 100644
index 0000000..6027e0f
--- /dev/null
+++ b/install/share/man/man3/FcBlanksCreate.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcBlanksCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcBlanksCreate \- Create an FcBlanks
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBlanks * FcBlanksCreate(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Creates an empty FcBlanks object.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcBlanksDestroy.3 b/install/share/man/man3/FcBlanksDestroy.3
new file mode 100644
index 0000000..17145a4
--- /dev/null
+++ b/install/share/man/man3/FcBlanksDestroy.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcBlanksDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcBlanksDestroy \- Destroy and FcBlanks
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcBlanksDestroy(FcBlanks *\fIb\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Destroys an FcBlanks object, freeing any associated memory.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcBlanksIsMember.3 b/install/share/man/man3/FcBlanksIsMember.3
new file mode 100644
index 0000000..d9aae11
--- /dev/null
+++ b/install/share/man/man3/FcBlanksIsMember.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcBlanksIsMember" "3" "18 November 2009" "" ""
+.SH NAME
+FcBlanksIsMember \- Query membership in an FcBlanks
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcBlanksIsMember(FcBlanks *\fIb\fB);
+(FcChar32 \fIucs4\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns whether the specified FcBlanks object contains the indicated Unicode
+value.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCacheCopySet.3 b/install/share/man/man3/FcCacheCopySet.3
new file mode 100644
index 0000000..d148514
--- /dev/null
+++ b/install/share/man/man3/FcCacheCopySet.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCacheCopySet" "3" "18 November 2009" "" ""
+.SH NAME
+FcCacheCopySet \- Returns a copy of the fontset from cache
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcFontSet * FcCacheCopySet(const FcCache *\fIcache\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+The returned fontset contains each of the font patterns from
+\fIcache\fR\&. This fontset may be modified, but the patterns
+from the cache are read-only.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCacheDir.3 b/install/share/man/man3/FcCacheDir.3
new file mode 100644
index 0000000..10d01f4
--- /dev/null
+++ b/install/share/man/man3/FcCacheDir.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCacheDir" "3" "18 November 2009" "" ""
+.SH NAME
+FcCacheDir \- Return directory of cache
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+const FcChar8 * FcCacheDir(const FcCache *\fIcache\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This function returns the directory from which the cache was constructed.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCacheNumFont.3 b/install/share/man/man3/FcCacheNumFont.3
new file mode 100644
index 0000000..48023a3
--- /dev/null
+++ b/install/share/man/man3/FcCacheNumFont.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCacheNumFont" "3" "18 November 2009" "" ""
+.SH NAME
+FcCacheNumFont \- Returns the number of fonts in cache.
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+int FcCacheNumFont(const FcCache *\fIcache\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This returns the number of fonts which would be included in the return from
+FcCacheCopySet.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCacheNumSubdir.3 b/install/share/man/man3/FcCacheNumSubdir.3
new file mode 100644
index 0000000..4c8863b
--- /dev/null
+++ b/install/share/man/man3/FcCacheNumSubdir.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCacheNumSubdir" "3" "18 November 2009" "" ""
+.SH NAME
+FcCacheNumSubdir \- Return the number of subdirectories in cache.
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+int FcCacheNumSubdir(const FcCache *\fIcache\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This returns the total number of subdirectories in the cache.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCacheSubdir.3 b/install/share/man/man3/FcCacheSubdir.3
new file mode 100644
index 0000000..88195ef
--- /dev/null
+++ b/install/share/man/man3/FcCacheSubdir.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCacheSubdir" "3" "18 November 2009" "" ""
+.SH NAME
+FcCacheSubdir \- Return the i'th subdirectory.
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+const FcChar8 * FcCacheSubdir(const FcCache *\fIcache\fB);
+(int\fIi\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+The set of subdirectories stored in a cache file are indexed by this
+function, \fIi\fR should range from 0 to
+\fIn\fR-1, where \fIn\fR is the return
+value from FcCacheNumSubdir.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetAddChar.3 b/install/share/man/man3/FcCharSetAddChar.3
new file mode 100644
index 0000000..903ed0c
--- /dev/null
+++ b/install/share/man/man3/FcCharSetAddChar.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetAddChar" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetAddChar \- Add a character to a charset
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcCharSetAddChar(FcCharSet *\fIfcs\fB);
+(FcChar32 \fIucs4\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcCharSetAddChar\fR adds a single unicode char to the set,
+returning FcFalse on failure, either as a result of a constant set or from
+running out of memory.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetCopy.3 b/install/share/man/man3/FcCharSetCopy.3
new file mode 100644
index 0000000..e688bc5
--- /dev/null
+++ b/install/share/man/man3/FcCharSetCopy.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetCopy" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetCopy \- Copy a charset
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcCharSet * FcCharSetCopy(FcCharSet *\fIsrc\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Makes a copy of \fIsrc\fR; note that this may not actually do anything more
+than increment the reference count on \fIsrc\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetCount.3 b/install/share/man/man3/FcCharSetCount.3
new file mode 100644
index 0000000..a1b8dad
--- /dev/null
+++ b/install/share/man/man3/FcCharSetCount.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetCount" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetCount \- Count entries in a charset
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar32 FcCharSetCount(const FcCharSet *\fIa\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the total number of unicode chars in \fIa\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetCoverage.3 b/install/share/man/man3/FcCharSetCoverage.3
new file mode 100644
index 0000000..28201ae
--- /dev/null
+++ b/install/share/man/man3/FcCharSetCoverage.3
@@ -0,0 +1,23 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetCoverage" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetCoverage \- DEPRECATED return coverage for a Unicode page
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar32 FcCharSetCoverage(const FcCharSet *\fIa\fB);
+(FcChar32\fIpage\fB);
+(FcChar32[8]\fIresult\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+DEPRECATED
+This function returns a bitmask in \fIresult\fR which
+indicates which code points in
+\fIpage\fR are included in \fIa\fR\&.
+\fBFcCharSetCoverage\fR returns the next page in the charset which has any
+coverage.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetCreate.3 b/install/share/man/man3/FcCharSetCreate.3
new file mode 100644
index 0000000..791307f
--- /dev/null
+++ b/install/share/man/man3/FcCharSetCreate.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetCreate \- Create an empty character set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcCharSet * FcCharSetCreate(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcCharSetCreate\fR allocates and initializes a new empty
+character set object.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetDestroy.3 b/install/share/man/man3/FcCharSetDestroy.3
new file mode 100644
index 0000000..ecd4ff1
--- /dev/null
+++ b/install/share/man/man3/FcCharSetDestroy.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetDestroy \- Destroy a character set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcCharSetDestroy(FcCharSet *\fIfcs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcCharSetDestroy\fR decrements the reference count
+\fIfcs\fR\&. If the reference count becomes zero, all
+memory referenced is freed.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetEqual.3 b/install/share/man/man3/FcCharSetEqual.3
new file mode 100644
index 0000000..ef07b4f
--- /dev/null
+++ b/install/share/man/man3/FcCharSetEqual.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetEqual" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetEqual \- Compare two charsets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcCharSetEqual(const FcCharSet *\fIa\fB);
+(const FcCharSet *\fIb\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns whether \fIa\fR and \fIb\fR
+contain the same set of unicode chars.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetFirstPage.3 b/install/share/man/man3/FcCharSetFirstPage.3
new file mode 100644
index 0000000..5e903a5
--- /dev/null
+++ b/install/share/man/man3/FcCharSetFirstPage.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetFirstPage" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetFirstPage \- Start enumerating charset contents
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar32 FcCharSetFirstPage(const FcCharSet *\fIa\fB);
+(FcChar32[FC_CHARSET_MAP_SIZE] \fImap\fB);
+(FcChar32 *\fInext\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Builds an array of bits marking the first page of Unicode coverage of
+\fIa\fR\&. Returns the base of the array. \fInext\fR contains the next page in the
+font.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetHasChar.3 b/install/share/man/man3/FcCharSetHasChar.3
new file mode 100644
index 0000000..d992247
--- /dev/null
+++ b/install/share/man/man3/FcCharSetHasChar.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetHasChar" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetHasChar \- Check a charset for a char
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcCharSetHasChar(const FcCharSet *\fIfcs\fB);
+(FcChar32 \fIucs4\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns whether \fIfcs\fR contains the char \fIucs4\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetIntersect.3 b/install/share/man/man3/FcCharSetIntersect.3
new file mode 100644
index 0000000..0d1fb39
--- /dev/null
+++ b/install/share/man/man3/FcCharSetIntersect.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetIntersect" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetIntersect \- Intersect charsets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcCharSet * FcCharSetIntersect(const FcCharSet *\fIa\fB);
+(const FcCharSet *\fIb\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns a set including only those chars found in both
+\fIa\fR and \fIb\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetIntersectCount.3 b/install/share/man/man3/FcCharSetIntersectCount.3
new file mode 100644
index 0000000..1af83ce
--- /dev/null
+++ b/install/share/man/man3/FcCharSetIntersectCount.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetIntersectCount" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetIntersectCount \- Intersect and count charsets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar32 FcCharSetIntersectCount(const FcCharSet *\fIa\fB);
+(const FcCharSet *\fIb\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the number of chars that are in both \fIa\fR and \fIb\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetIsSubset.3 b/install/share/man/man3/FcCharSetIsSubset.3
new file mode 100644
index 0000000..25a8f76
--- /dev/null
+++ b/install/share/man/man3/FcCharSetIsSubset.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetIsSubset" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetIsSubset \- Test for charset inclusion
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcCharSetIsSubset(const FcCharSet *\fIa\fB);
+(const FcCharSet *\fIb\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns whether \fIa\fR is a subset of \fIb\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetMerge.3 b/install/share/man/man3/FcCharSetMerge.3
new file mode 100644
index 0000000..bab32a6
--- /dev/null
+++ b/install/share/man/man3/FcCharSetMerge.3
@@ -0,0 +1,23 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetMerge" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetMerge \- Merge charsets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcCharSetMerge(FcCharSet *\fIa\fB);
+(const FcCharSet *\fIb\fB);
+(FcBool *\fIchanged\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Adds all chars in \fIb\fR to \fIa\fR\&.
+In other words, this is an in-place version of FcCharSetUnion.
+If \fIchanged\fR is not NULL, then it returns whether any new
+chars from \fIb\fR were added to \fIa\fR\&.
+Returns FcFalse on failure, either when \fIa\fR is a constant
+set or from running out of memory.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetNew.3 b/install/share/man/man3/FcCharSetNew.3
new file mode 100644
index 0000000..a6212fb
--- /dev/null
+++ b/install/share/man/man3/FcCharSetNew.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetNew" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetNew \- DEPRECATED alias for FcCharSetCreate
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcCharSet * FcCharSetNew(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcCharSetNew\fR is a DEPRECATED alias for FcCharSetCreate.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetNextPage.3 b/install/share/man/man3/FcCharSetNextPage.3
new file mode 100644
index 0000000..6183d59
--- /dev/null
+++ b/install/share/man/man3/FcCharSetNextPage.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetNextPage" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetNextPage \- Continue enumerating charset contents
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar32 FcCharSetNextPage(const FcCharSet *\fIa\fB);
+(FcChar32[FC_CHARSET_MAP_SIZE] \fImap\fB);
+(FcChar32 *\fInext\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Builds an array of bits marking the Unicode coverage of \fIa\fR for page
+\fI*next\fR\&. Returns the base of the array. \fInext\fR contains the next page in
+the font.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetSubtract.3 b/install/share/man/man3/FcCharSetSubtract.3
new file mode 100644
index 0000000..fc410c3
--- /dev/null
+++ b/install/share/man/man3/FcCharSetSubtract.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetSubtract" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetSubtract \- Subtract charsets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcCharSet * FcCharSetSubtract(const FcCharSet *\fIa\fB);
+(const FcCharSet *\fIb\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns a set including only those chars found in \fIa\fR but not \fIb\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetSubtractCount.3 b/install/share/man/man3/FcCharSetSubtractCount.3
new file mode 100644
index 0000000..9a076f3
--- /dev/null
+++ b/install/share/man/man3/FcCharSetSubtractCount.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetSubtractCount" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetSubtractCount \- Subtract and count charsets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar32 FcCharSetSubtractCount(const FcCharSet *\fIa\fB);
+(const FcCharSet *\fIb\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the number of chars that are in \fIa\fR but not in \fIb\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcCharSetUnion.3 b/install/share/man/man3/FcCharSetUnion.3
new file mode 100644
index 0000000..b0099fb
--- /dev/null
+++ b/install/share/man/man3/FcCharSetUnion.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcCharSetUnion" "3" "18 November 2009" "" ""
+.SH NAME
+FcCharSetUnion \- Add charsets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcCharSet * FcCharSetUnion(const FcCharSet *\fIa\fB);
+(const FcCharSet *\fIb\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns a set including only those chars found in either \fIa\fR or \fIb\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigAppFontAddDir.3 b/install/share/man/man3/FcConfigAppFontAddDir.3
new file mode 100644
index 0000000..7cecdb7
--- /dev/null
+++ b/install/share/man/man3/FcConfigAppFontAddDir.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigAppFontAddDir" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigAppFontAddDir \- Add fonts from directory to font database
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcConfigAppFontAddDir(FcConfig *\fIconfig\fB);
+(const FcChar8 *\fIdir\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Scans the specified directory for fonts, adding each one found to the
+application-specific set of fonts. Returns FcFalse
+if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigAppFontAddFile.3 b/install/share/man/man3/FcConfigAppFontAddFile.3
new file mode 100644
index 0000000..2f2e15a
--- /dev/null
+++ b/install/share/man/man3/FcConfigAppFontAddFile.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigAppFontAddFile" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigAppFontAddFile \- Add font file to font database
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcConfigAppFontAddFile(FcConfig *\fIconfig\fB);
+(const FcChar8 *\fIfile\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Adds an application-specific font to the configuration. Returns FcFalse
+if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigAppFontClear.3 b/install/share/man/man3/FcConfigAppFontClear.3
new file mode 100644
index 0000000..404f7b0
--- /dev/null
+++ b/install/share/man/man3/FcConfigAppFontClear.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigAppFontClear" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigAppFontClear \- Remove all app fonts from font database
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcConfigAppFontClear(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Clears the set of application-specific fonts.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigBuildFonts.3 b/install/share/man/man3/FcConfigBuildFonts.3
new file mode 100644
index 0000000..cb94270
--- /dev/null
+++ b/install/share/man/man3/FcConfigBuildFonts.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigBuildFonts" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigBuildFonts \- Build font database
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcConfigBuildFonts(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Builds the set of available fonts for the given configuration. Note that
+any changes to the configuration after this call have indeterminate effects.
+Returns FcFalse if this operation runs out of memory.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigCreate.3 b/install/share/man/man3/FcConfigCreate.3
new file mode 100644
index 0000000..4a8ca1f
--- /dev/null
+++ b/install/share/man/man3/FcConfigCreate.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigCreate \- Create a configuration
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcConfig * FcConfigCreate(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Creates an empty configuration.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigDestroy.3 b/install/share/man/man3/FcConfigDestroy.3
new file mode 100644
index 0000000..ee426b2
--- /dev/null
+++ b/install/share/man/man3/FcConfigDestroy.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigDestroy \- Destroy a configuration
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcConfigDestroy(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Decrements the config reference count. If all references are gone, destroys
+the configuration and any data associated with it.
+Note that calling this function with the return from FcConfigGetCurrent will
+cause a new configuration to be created for use as current configuration.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigEnableHome.3 b/install/share/man/man3/FcConfigEnableHome.3
new file mode 100644
index 0000000..8c1870f
--- /dev/null
+++ b/install/share/man/man3/FcConfigEnableHome.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigEnableHome" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigEnableHome \- controls use of the home directory.
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBol FcConfigEnableHome(FcBool \fIenable\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+If \fIenable\fR is FcTrue, then Fontconfig will use various
+files which are specified relative to the user's home directory (using the ~
+notation in the configuration). When \fIenable\fR is
+FcFalse, then all use of the home directory in these contexts will be
+disabled. The previous setting of the value is returned.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigFilename.3 b/install/share/man/man3/FcConfigFilename.3
new file mode 100644
index 0000000..d65290c
--- /dev/null
+++ b/install/share/man/man3/FcConfigFilename.3
@@ -0,0 +1,26 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigFilename" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigFilename \- Find a config file
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcConfigFilename(const FcChar8 *\fIname\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Given the specified external entity name, return the associated filename.
+This provides applications a way to convert various configuration file
+references into filename form.
+.PP
+A null or empty \fIname\fR indicates that the default configuration file should
+be used; which file this references can be overridden with the
+FC_CONFIG_FILE environment variable. Next, if the name starts with \fI~\fR, it
+refers to a file in the current users home directory. Otherwise if the name
+doesn't start with '/', it refers to a file in the default configuration
+directory; the built-in default directory can be overridden with the
+FC_CONFIG_DIR environment variable.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigGetBlanks.3 b/install/share/man/man3/FcConfigGetBlanks.3
new file mode 100644
index 0000000..eaa8274
--- /dev/null
+++ b/install/share/man/man3/FcConfigGetBlanks.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigGetBlanks" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigGetBlanks \- Get config blanks
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBlanks * FcConfigGetBlanks(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the FcBlanks object associated with the given configuration, if no
+blanks were present in the configuration, this function will return 0.
+The returned FcBlanks object if not NULL, is valid as long as the owning
+FcConfig is alive.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigGetCache.3 b/install/share/man/man3/FcConfigGetCache.3
new file mode 100644
index 0000000..50763b2
--- /dev/null
+++ b/install/share/man/man3/FcConfigGetCache.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigGetCache" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigGetCache \- DEPRECATED used to return per-user cache filename
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcConfigGetCache(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+With fontconfig no longer using per-user cache files, this function now
+simply returns NULL to indicate that no per-user file exists.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigGetCacheDirs.3 b/install/share/man/man3/FcConfigGetCacheDirs.3
new file mode 100644
index 0000000..638e6b6
--- /dev/null
+++ b/install/share/man/man3/FcConfigGetCacheDirs.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigGetCacheDirs" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigGetCacheDirs \- return the list of directories searched for cache files
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcStrList * FcConfigGetCacheDirs(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcConfigGetCacheDirs\fR returns a string list containing
+all of the directories that fontconfig will search when attempting to load a
+cache file for a font directory.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigGetConfigDirs.3 b/install/share/man/man3/FcConfigGetConfigDirs.3
new file mode 100644
index 0000000..bac539b
--- /dev/null
+++ b/install/share/man/man3/FcConfigGetConfigDirs.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigGetConfigDirs" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigGetConfigDirs \- Get config directories
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcStrList * FcConfigGetConfigDirs(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the list of font directories specified in the configuration files
+for \fIconfig\fR\&. Does not include any subdirectories.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigGetConfigFiles.3 b/install/share/man/man3/FcConfigGetConfigFiles.3
new file mode 100644
index 0000000..7036f0e
--- /dev/null
+++ b/install/share/man/man3/FcConfigGetConfigFiles.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigGetConfigFiles" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigGetConfigFiles \- Get config files
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcStrList * FcConfigGetConfigFiles(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the list of known configuration files used to generate \fIconfig\fR\&.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigGetCurrent.3 b/install/share/man/man3/FcConfigGetCurrent.3
new file mode 100644
index 0000000..f1675f1
--- /dev/null
+++ b/install/share/man/man3/FcConfigGetCurrent.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigGetCurrent" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigGetCurrent \- Return current configuration
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcConfig * FcConfigGetCurrent(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the current default configuration.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigGetFontDirs.3 b/install/share/man/man3/FcConfigGetFontDirs.3
new file mode 100644
index 0000000..e280483
--- /dev/null
+++ b/install/share/man/man3/FcConfigGetFontDirs.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigGetFontDirs" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigGetFontDirs \- Get font directories
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcStrList * FcConfigGetFontDirs(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the list of font directories in \fIconfig\fR\&. This includes the
+configured font directories along with any directories below those in the
+filesystem.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigGetFonts.3 b/install/share/man/man3/FcConfigGetFonts.3
new file mode 100644
index 0000000..a017252
--- /dev/null
+++ b/install/share/man/man3/FcConfigGetFonts.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigGetFonts" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigGetFonts \- Get config font set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcFontSet * FcConfigGetFonts(FcConfig *\fIconfig\fB);
+(FcSetName \fIset\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns one of the two sets of fonts from the configuration as specified
+by \fIset\fR\&. This font set is owned by the library and must
+not be modified or freed.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigGetRescanInterval.3 b/install/share/man/man3/FcConfigGetRescanInterval.3
new file mode 100644
index 0000000..79ee37d
--- /dev/null
+++ b/install/share/man/man3/FcConfigGetRescanInterval.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigGetRescanInterval" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigGetRescanInterval \- Get config rescan interval
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+int FcConfigGetRescanInterval(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the interval between automatic checks of the configuration (in
+seconds) specified in \fIconfig\fR\&. The configuration is checked during
+a call to FcFontList when this interval has passed since the last check.
+An interval setting of zero disables automatic checks.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigHome.3 b/install/share/man/man3/FcConfigHome.3
new file mode 100644
index 0000000..c50fa08
--- /dev/null
+++ b/install/share/man/man3/FcConfigHome.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigHome" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigHome \- return the current home directory.
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcConfigHome(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Return the current user's home directory, if it is available, and if using it
+is enabled, and NULL otherwise.
+See also \fBFcConfigEnableHome\fR).
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigParseAndLoad.3 b/install/share/man/man3/FcConfigParseAndLoad.3
new file mode 100644
index 0000000..b9ace24
--- /dev/null
+++ b/install/share/man/man3/FcConfigParseAndLoad.3
@@ -0,0 +1,23 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigParseAndLoad" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigParseAndLoad \- load a configuration file
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcConfigParseAndLoad(FcConfig *\fIconfig\fB);
+(const FcChar8 *\fIfile\fB);
+(FcBool \fIcomplain\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Walks the configuration in 'file' and constructs the internal representation
+in 'config'. Any include files referenced from within 'file' will be loaded
+and parsed. If 'complain' is FcFalse, no warning will be displayed if
+\&'file' does not exist. Error and warning messages will be output to stderr.
+Returns FcFalse if some error occurred while loading the file, either a
+parse error, semantic error or allocation failure. Otherwise returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigReference.3 b/install/share/man/man3/FcConfigReference.3
new file mode 100644
index 0000000..7663fd2
--- /dev/null
+++ b/install/share/man/man3/FcConfigReference.3
@@ -0,0 +1,21 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigReference" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigReference \- Increment config reference count
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcConfig * FcConfigReference(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Add another reference to \fIconfig\fR\&. Configs are freed only
+when the reference count reaches zero.
+If \fIconfig\fR is NULL, the current configuration is used.
+In that case this function will be similar to FcConfigGetCurrent() except that
+it increments the reference count before returning and the user is responsible
+for destroying the configuration when not needed anymore.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigSetCurrent.3 b/install/share/man/man3/FcConfigSetCurrent.3
new file mode 100644
index 0000000..a9acdb0
--- /dev/null
+++ b/install/share/man/man3/FcConfigSetCurrent.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigSetCurrent" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigSetCurrent \- Set configuration as default
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcConfigSetCurrent(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Sets the current default configuration to \fIconfig\fR\&. Implicitly calls
+FcConfigBuildFonts if necessary, returning FcFalse if that call fails.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigSetRescanInterval.3 b/install/share/man/man3/FcConfigSetRescanInterval.3
new file mode 100644
index 0000000..57573ee
--- /dev/null
+++ b/install/share/man/man3/FcConfigSetRescanInterval.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigSetRescanInterval" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigSetRescanInterval \- Set config rescan interval
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcConfigSetRescanInterval(FcConfig *\fIconfig\fB);
+(int \fIrescanInterval\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Sets the rescan interval. Returns FcFalse if the interval cannot be set (due
+to allocation failure). Otherwise returns FcTrue.
+An interval setting of zero disables automatic checks.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigSubstitute.3 b/install/share/man/man3/FcConfigSubstitute.3
new file mode 100644
index 0000000..804cfdd
--- /dev/null
+++ b/install/share/man/man3/FcConfigSubstitute.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigSubstitute" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigSubstitute \- Execute substitutions
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcConfigSubstitute(FcConfig *\fIconfig\fB);
+(FcPattern *\fIp\fB);
+(FcMatchKind \fIkind\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Calls FcConfigSubstituteWithPat setting p_pat to NULL. Returns FcFalse
+if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigSubstituteWithPat.3 b/install/share/man/man3/FcConfigSubstituteWithPat.3
new file mode 100644
index 0000000..30db72b
--- /dev/null
+++ b/install/share/man/man3/FcConfigSubstituteWithPat.3
@@ -0,0 +1,24 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigSubstituteWithPat" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigSubstituteWithPat \- Execute substitutions
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcConfigSubstituteWithPat(FcConfig *\fIconfig\fB);
+(FcPattern *\fIp\fB);
+(FcPattern *\fIp_pat\fB);
+(FcMatchKind \fIkind\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Performs the sequence of pattern modification operations, if \fIkind\fR is
+FcMatchPattern, then those tagged as pattern operations are applied, else
+if \fIkind\fR is FcMatchFont, those tagged as font operations are applied and
+p_pat is used for elements with target=pattern. Returns FcFalse
+if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcConfigUptoDate.3 b/install/share/man/man3/FcConfigUptoDate.3
new file mode 100644
index 0000000..d911b90
--- /dev/null
+++ b/install/share/man/man3/FcConfigUptoDate.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcConfigUptoDate" "3" "18 November 2009" "" ""
+.SH NAME
+FcConfigUptoDate \- Check timestamps on config files
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcConfigUptoDate(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Checks all of the files related to \fIconfig\fR and returns
+whether any of them has been modified since the configuration was created.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcDefaultSubstitute.3 b/install/share/man/man3/FcDefaultSubstitute.3
new file mode 100644
index 0000000..17f1185
--- /dev/null
+++ b/install/share/man/man3/FcDefaultSubstitute.3
@@ -0,0 +1,27 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcDefaultSubstitute" "3" "18 November 2009" "" ""
+.SH NAME
+FcDefaultSubstitute \- Perform default substitutions in a pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcDefaultSubstitute(FcPattern *\fIpattern\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Supplies default values for underspecified font patterns:
+.TP 0.2i
+\(bu
+Patterns without a specified style or weight are set to Medium
+.TP 0.2i
+\(bu
+Patterns without a specified style or slant are set to Roman
+.TP 0.2i
+\(bu
+Patterns without a specified pixel size are given one computed from any
+specified point size (default 12), dpi (default 75) and scale (default 1).
+.PP
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcDirCacheLoad.3 b/install/share/man/man3/FcDirCacheLoad.3
new file mode 100644
index 0000000..ae7b0ff
--- /dev/null
+++ b/install/share/man/man3/FcDirCacheLoad.3
@@ -0,0 +1,21 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcDirCacheLoad" "3" "18 November 2009" "" ""
+.SH NAME
+FcDirCacheLoad \- load a directory cache
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcCache * FcDirCacheLoad(const FcChar8 *\fIdir\fB);
+(FcConfig *\fIconfig\fB);
+(FcChar8 **\fIcache_file\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Loads the cache related to \fIdir\fR\&. If no cache file
+exists, returns NULL. The name of the cache file is returned in
+\fIcache_file\fR, unless that is NULL. See also
+FcDirCacheRead.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcDirCacheLoadFile.3 b/install/share/man/man3/FcDirCacheLoadFile.3
new file mode 100644
index 0000000..3ceae9c
--- /dev/null
+++ b/install/share/man/man3/FcDirCacheLoadFile.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcDirCacheLoadFile" "3" "18 November 2009" "" ""
+.SH NAME
+FcDirCacheLoadFile \- load a cache file
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcCache * FcDirCacheLoadFile(const FcChar8 *\fIcache_file\fB);
+(struct stat *\fIfile_stat\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This function loads a directory cache from
+\fIcache_file\fR\&. If \fIfile_stat\fR is
+non-NULL, it will be filled with the results of stat(2) on the cache file.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcDirCacheRead.3 b/install/share/man/man3/FcDirCacheRead.3
new file mode 100644
index 0000000..88a6801
--- /dev/null
+++ b/install/share/man/man3/FcDirCacheRead.3
@@ -0,0 +1,21 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcDirCacheRead" "3" "18 November 2009" "" ""
+.SH NAME
+FcDirCacheRead \- read or construct a directory cache
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcCache * FcDirCacheRead(const FcChar8 *\fIdir\fB);
+(FcBool \fIforce\fB);
+(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This returns a cache for \fIdir\fR\&. If
+\fIforce\fR is FcFalse, then an existing, valid cache file
+will be used. Otherwise, a new cache will be created by scanning the
+directory and that returned.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcDirCacheUnlink.3 b/install/share/man/man3/FcDirCacheUnlink.3
new file mode 100644
index 0000000..6071662
--- /dev/null
+++ b/install/share/man/man3/FcDirCacheUnlink.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcDirCacheUnlink" "3" "18 November 2009" "" ""
+.SH NAME
+FcDirCacheUnlink \- Remove all caches related to dir
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcDirCacheUnlink(const FcChar8 *\fIdir\fB);
+(FcConfig *\fIconfig\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Scans the cache directories in \fIconfig\fR, removing any
+instances of the cache file for \fIdir\fR\&. Returns FcFalse
+when some internal error occurs (out of memory, etc). Errors actually
+unlinking any files are ignored.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcDirCacheUnload.3 b/install/share/man/man3/FcDirCacheUnload.3
new file mode 100644
index 0000000..110704e
--- /dev/null
+++ b/install/share/man/man3/FcDirCacheUnload.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcDirCacheUnload" "3" "18 November 2009" "" ""
+.SH NAME
+FcDirCacheUnload \- unload a cache file
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcDirCacheUnload(FcCache *\fIcache\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This function dereferences \fIcache\fR\&. When no other
+references to it remain, all memory associated with the cache will be freed.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcDirCacheValid.3 b/install/share/man/man3/FcDirCacheValid.3
new file mode 100644
index 0000000..a21c4e6
--- /dev/null
+++ b/install/share/man/man3/FcDirCacheValid.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcDirCacheValid" "3" "18 November 2009" "" ""
+.SH NAME
+FcDirCacheValid \- check directory cache
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcDirCacheValid(const FcChar8 *\fIdir\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns FcTrue if \fIdir\fR has an associated valid cache
+file, else returns FcFalse
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcDirSave.3 b/install/share/man/man3/FcDirSave.3
new file mode 100644
index 0000000..e44d721
--- /dev/null
+++ b/install/share/man/man3/FcDirSave.3
@@ -0,0 +1,22 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcDirSave" "3" "18 November 2009" "" ""
+.SH NAME
+FcDirSave \- DEPRECATED: formerly used to save a directory cache
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcDirSave(FcFontSet *\fIset\fB);
+(FcStrSet *\fIdirs\fB);
+(const FcChar8 *\fIdir\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This function now does nothing aside from returning FcFalse. It used to creates the
+per-directory cache file for \fIdir\fR and populates it
+with the fonts in \fIset\fR and subdirectories in
+\fIdirs\fR\&. All of this functionality is now automatically
+managed by FcDirCacheLoad and FcDirCacheRead.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcDirScan.3 b/install/share/man/man3/FcDirScan.3
new file mode 100644
index 0000000..718dfdd
--- /dev/null
+++ b/install/share/man/man3/FcDirScan.3
@@ -0,0 +1,26 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcDirScan" "3" "18 November 2009" "" ""
+.SH NAME
+FcDirScan \- scan a font directory without caching it
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcDirScan(FcFontSet *\fIset\fB);
+(FcStrSet *\fIdirs\fB);
+(FcFileCache *\fIcache\fB);
+(FcBlanks *\fIblanks\fB);
+(const FcChar8 *\fIdir\fB);
+(FcBool \fIforce\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+If \fIcache\fR is not zero or if \fIforce\fR
+is FcFalse, this function currently returns FcFalse. Otherwise, it scans an
+entire directory and adds all fonts found to \fIset\fR\&.
+Any subdirectories found are added to \fIdirs\fR\&. Calling
+this function does not create any cache files. Use FcDirCacheRead() if
+caching is desired.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFileIsDir.3 b/install/share/man/man3/FcFileIsDir.3
new file mode 100644
index 0000000..b960448
--- /dev/null
+++ b/install/share/man/man3/FcFileIsDir.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFileIsDir" "3" "18 November 2009" "" ""
+.SH NAME
+FcFileIsDir \- check whether a file is a directory
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcFileIsDir(const FcChar8 *\fIfile\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns FcTrue if \fIfile\fR is a directory, otherwise
+returns FcFalse.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFileScan.3 b/install/share/man/man3/FcFileScan.3
new file mode 100644
index 0000000..ad66cb9
--- /dev/null
+++ b/install/share/man/man3/FcFileScan.3
@@ -0,0 +1,31 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFileScan" "3" "18 November 2009" "" ""
+.SH NAME
+FcFileScan \- scan a font file
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcFileScan(FcFontSet *\fIset\fB);
+(FcStrSet *\fIdirs\fB);
+(FcFileCache *\fIcache\fB);
+(FcBlanks *\fIblanks\fB);
+(const FcChar8 *\fIfile\fB);
+(FcBool \fIforce\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Scans a single file and adds all fonts found to \fIset\fR\&.
+If \fIforce\fR is FcTrue, then the file is scanned even if
+associated information is found in \fIcache\fR\&. If
+\fIfile\fR is a directory, it is added to
+\fIdirs\fR\&. Whether fonts are found depends on fontconfig
+policy as well as the current configuration. Internally, fontconfig will
+ignore BDF and PCF fonts which are not in Unicode (or the effectively
+equivalent ISO Latin-1) encoding as those are not usable by Unicode-based
+applications. The configuration can ignore fonts based on filename or
+contents of the font file itself. Returns FcFalse if any of the fonts cannot be
+added (due to allocation failure). Otherwise returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFini.3 b/install/share/man/man3/FcFini.3
new file mode 100644
index 0000000..c33ce10
--- /dev/null
+++ b/install/share/man/man3/FcFini.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFini" "3" "18 November 2009" "" ""
+.SH NAME
+FcFini \- finalize fonconfig library
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcFini(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Frees all data structures allocated by previous calls to fontconfig
+functions. Fontconfig returns to an uninitialized state, requiring a
+new call to one of the FcInit functions before any other fontconfig
+function may be called.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontList.3 b/install/share/man/man3/FcFontList.3
new file mode 100644
index 0000000..57eed4d
--- /dev/null
+++ b/install/share/man/man3/FcFontList.3
@@ -0,0 +1,21 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontList" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontList \- List fonts
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcFontSet * FcFontList(FcConfig *\fIconfig\fB);
+(FcPattern *\fIp\fB);
+(FcObjectSet *\fIos\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Selects fonts matching \fIp\fR, creates patterns from those fonts containing
+only the objects in \fIos\fR and returns the set of unique such patterns.
+If \fIconfig\fR is NULL, the default configuration is checked
+to be up to date, and used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontMatch.3 b/install/share/man/man3/FcFontMatch.3
new file mode 100644
index 0000000..dd5bc99
--- /dev/null
+++ b/install/share/man/man3/FcFontMatch.3
@@ -0,0 +1,25 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontMatch" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontMatch \- Return best font
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcPattern * FcFontMatch(FcConfig *\fIconfig\fB);
+(FcPattern *\fIp\fB);
+(FcResult *\fIresult\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Finds the font in \fIsets\fR most closely matching
+\fIpattern\fR and returns the result of
+\fBFcFontRenderPrepare\fR for that font and the provided
+pattern. This function should be called only after
+\fBFcConfigSubstitute\fR and
+\fBFcDefaultSubstitute\fR have been called for
+\fIp\fR; otherwise the results will not be correct.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontRenderPrepare.3 b/install/share/man/man3/FcFontRenderPrepare.3
new file mode 100644
index 0000000..e3c1fde
--- /dev/null
+++ b/install/share/man/man3/FcFontRenderPrepare.3
@@ -0,0 +1,21 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontRenderPrepare" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontRenderPrepare \- Prepare pattern for loading font file
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcPattern * FcFontRenderPrepare(FcConfig *\fIconfig\fB);
+(FcPattern *\fIpat\fB);
+(FcPattern *\fIfont\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Creates a new pattern consisting of elements of \fIfont\fR not appearing
+in \fIpat\fR, elements of \fIpat\fR not appearing in \fIfont\fR and the best matching
+value from \fIpat\fR for elements appearing in both. The result is passed to
+FcConfigSubstituteWithPat with \fIkind\fR FcMatchFont and then returned.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontSetAdd.3 b/install/share/man/man3/FcFontSetAdd.3
new file mode 100644
index 0000000..e77816d
--- /dev/null
+++ b/install/share/man/man3/FcFontSetAdd.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontSetAdd" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontSetAdd \- Add to a font set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcFontSetAdd(FcFontSet *\fIs\fB);
+(FcPattern *\fIfont\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Adds a pattern to a font set. Note that the pattern is not copied before
+being inserted into the set. Returns FcFalse if the pattern cannot be
+inserted into the set (due to allocation failure). Otherwise returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontSetCreate.3 b/install/share/man/man3/FcFontSetCreate.3
new file mode 100644
index 0000000..83c948c
--- /dev/null
+++ b/install/share/man/man3/FcFontSetCreate.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontSetCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontSetCreate \- Create a font set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcFontSet * FcFontSetCreate(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Creates an empty font set.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontSetDestroy.3 b/install/share/man/man3/FcFontSetDestroy.3
new file mode 100644
index 0000000..0e0e84f
--- /dev/null
+++ b/install/share/man/man3/FcFontSetDestroy.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontSetDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontSetDestroy \- Destroy a font set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcFontSetDestroy(FcFontSet *\fIs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Destroys a font set. Note that this destroys any referenced patterns as
+well.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontSetList.3 b/install/share/man/man3/FcFontSetList.3
new file mode 100644
index 0000000..7511fe4
--- /dev/null
+++ b/install/share/man/man3/FcFontSetList.3
@@ -0,0 +1,25 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontSetList" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontSetList \- List fonts from a set of font sets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcFontSet * FcFontSetList(FcConfig *\fIconfig\fB);
+(FcFontSet **\fIsets\fB);
+(int\fInsets\fB);
+(FcPattern *\fIpattern\fB);
+(FcObjectSet *\fIobject_set\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Selects fonts matching \fIpattern\fR from
+\fIsets\fR, creates patterns from those
+fonts containing only the objects in \fIobject_set\fR and returns
+the set of unique such patterns.
+If \fIconfig\fR is NULL, the default configuration is checked
+to be up to date, and used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontSetMatch.3 b/install/share/man/man3/FcFontSetMatch.3
new file mode 100644
index 0000000..d52e09c
--- /dev/null
+++ b/install/share/man/man3/FcFontSetMatch.3
@@ -0,0 +1,28 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontSetMatch" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontSetMatch \- Return the best font from a set of font sets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcPattern * FcFontSetMatch(FcConfig *\fIconfig\fB);
+(FcFontSet **\fIsets\fB);
+(int\fInsets\fB);
+(FcPattern *\fIpattern\fB);
+(FcResult *\fIresult\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Finds the font in \fIsets\fR most closely matching
+\fIpattern\fR and returns the result of
+\fBFcFontRenderPrepare\fR for that font and the provided
+pattern. This function should be called only after
+\fBFcConfigSubstitute\fR and
+\fBFcDefaultSubstitute\fR have been called for
+\fIpattern\fR; otherwise the results will not be correct.
+If \fIconfig\fR is NULL, the current configuration is used.
+Returns NULL if an error occurs during this process.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontSetPrint.3 b/install/share/man/man3/FcFontSetPrint.3
new file mode 100644
index 0000000..f989da1
--- /dev/null
+++ b/install/share/man/man3/FcFontSetPrint.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontSetPrint" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontSetPrint \- Print a set of patterns to stdout
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcFontSetPrint(FcFontSet *\fIset\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This function is useful for diagnosing font related issues, printing the
+complete contents of every pattern in \fIset\fR\&. The format
+of the output is designed to be of help to users and developers, and may
+change at any time.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontSetSort.3 b/install/share/man/man3/FcFontSetSort.3
new file mode 100644
index 0000000..6d2577b
--- /dev/null
+++ b/install/share/man/man3/FcFontSetSort.3
@@ -0,0 +1,39 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontSetSort" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontSetSort \- Add to a font set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcFontSetSort(FcConfig *\fIconfig\fB);
+(FcFontSet **\fIsets\fB);
+(int\fInsets\fB);
+(FcPattern *\fIpattern\fB);
+(FcBool \fItrim\fB);
+(FcCharSet **\fIcsp\fB);
+(FcResult *\fIresult\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the list of fonts from \fIsets\fR
+sorted by closeness to \fIpattern\fR\&.
+If \fItrim\fR is FcTrue,
+elements in the list which don't include Unicode coverage not provided by
+earlier elements in the list are elided. The union of Unicode coverage of
+all of the fonts is returned in \fIcsp\fR,
+if \fIcsp\fR is not NULL. This function
+should be called only after FcConfigSubstitute and FcDefaultSubstitute have
+been called for \fIp\fR;
+otherwise the results will not be correct.
+.PP
+The returned FcFontSet references FcPattern structures which may be shared
+by the return value from multiple FcFontSort calls, applications cannot
+modify these patterns. Instead, they should be passed, along with
+\fIpattern\fR to
+\fBFcFontRenderPrepare\fR which combines them into a complete pattern.
+.PP
+The FcFontSet returned by FcFontSetSort is destroyed by caling FcFontSetDestroy.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontSetSortDestroy.3 b/install/share/man/man3/FcFontSetSortDestroy.3
new file mode 100644
index 0000000..3c24c4c
--- /dev/null
+++ b/install/share/man/man3/FcFontSetSortDestroy.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontSetSortDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontSetSortDestroy \- DEPRECATED destroy a font set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcFontSetSortDestroy(FcFontSet *\fIset\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This function is DEPRECATED. \fBFcFontSetSortDestroy\fR
+destroys \fIset\fR by calling
+\fBFcFontSetDestroy\fR\&. Applications should use
+\fBFcFontSetDestroy\fR directly instead.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFontSort.3 b/install/share/man/man3/FcFontSort.3
new file mode 100644
index 0000000..3e6eefc
--- /dev/null
+++ b/install/share/man/man3/FcFontSort.3
@@ -0,0 +1,33 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFontSort" "3" "18 November 2009" "" ""
+.SH NAME
+FcFontSort \- Return list of matching fonts
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcFontSet * FcFontSort(FcConfig *\fIconfig\fB);
+(FcPattern *\fIp\fB);
+(FcBool \fItrim\fB);
+(FcCharSet **\fIcsp\fB);
+(FcResult *\fIresult\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the list of fonts sorted by closeness to \fIp\fR\&. If \fItrim\fR is FcTrue,
+elements in the list which don't include Unicode coverage not provided by
+earlier elements in the list are elided. The union of Unicode coverage of
+all of the fonts is returned in \fIcsp\fR, if \fIcsp\fR is not NULL. This function
+should be called only after FcConfigSubstitute and FcDefaultSubstitute have
+been called for \fIp\fR; otherwise the results will not be correct.
+.PP
+The returned FcFontSet references FcPattern structures which may be shared
+by the return value from multiple FcFontSort calls, applications must not
+modify these patterns. Instead, they should be passed, along with \fIp\fR to
+\fBFcFontRenderPrepare\fR which combines them into a complete pattern.
+.PP
+The FcFontSet returned by FcFontSort is destroyed by caling FcFontSetDestroy.
+If \fIconfig\fR is NULL, the current configuration is used.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFreeTypeCharIndex.3 b/install/share/man/man3/FcFreeTypeCharIndex.3
new file mode 100644
index 0000000..e8968ad
--- /dev/null
+++ b/install/share/man/man3/FcFreeTypeCharIndex.3
@@ -0,0 +1,22 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFreeTypeCharIndex" "3" "18 November 2009" "" ""
+.SH NAME
+FcFreeTypeCharIndex \- map Unicode to glyph id
+.SH SYNOPSIS
+.nf
+\fB#include
+#include
+.sp
+FT_UInt FcFreeTypeCharIndex(FT_Face \fIface\fB);
+(FcChar32 \fIucs4\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Maps a Unicode char to a glyph index. This function uses information from
+several possible underlying encoding tables to work around broken fonts.
+As a result, this function isn't designed to be used in performance
+sensitive areas; results from this function are intended to be cached by
+higher level functions.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFreeTypeCharSet.3 b/install/share/man/man3/FcFreeTypeCharSet.3
new file mode 100644
index 0000000..b86cb9a
--- /dev/null
+++ b/install/share/man/man3/FcFreeTypeCharSet.3
@@ -0,0 +1,21 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFreeTypeCharSet" "3" "18 November 2009" "" ""
+.SH NAME
+FcFreeTypeCharSet \- compute unicode coverage
+.SH SYNOPSIS
+.nf
+\fB#include
+#include
+.sp
+FcCharSet * FcFreeTypeCharSet(FT_Face \fIface\fB);
+(FcBlanks *\fIblanks\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Scans a FreeType face and returns the set of encoded Unicode chars. This scans
+several encoding tables to build as complete a list as possible.
+If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs
+not in 'blanks' are not placed in the returned FcCharSet.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFreeTypeCharSetAndSpacing.3 b/install/share/man/man3/FcFreeTypeCharSetAndSpacing.3
new file mode 100644
index 0000000..95f74a3
--- /dev/null
+++ b/install/share/man/man3/FcFreeTypeCharSetAndSpacing.3
@@ -0,0 +1,28 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFreeTypeCharSetAndSpacing" "3" "18 November 2009" "" ""
+.SH NAME
+FcFreeTypeCharSetAndSpacing \- compute unicode coverage and spacing type
+.SH SYNOPSIS
+.nf
+\fB#include
+#include
+.sp
+FcCharSet * FcFreeTypeCharSetAndSpacing(FT_Face \fIface\fB);
+(FcBlanks *\fIblanks\fB);
+(int *\fIspacing\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Scans a FreeType face and returns the set of encoded Unicode chars.
+This scans
+several encoding tables to build as complete a list as possible.
+If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs
+not in 'blanks' are not placed in the returned FcCharSet.
+\fIspacing\fR receives the computed spacing type of the
+font, one of FC_MONO for a font where all glyphs have the same width,
+FC_DUAL, where the font has glyphs in precisely two widths, one twice as
+wide as the other, or FC_PROPORTIONAL where the font has glyphs of many
+widths.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFreeTypeQuery.3 b/install/share/man/man3/FcFreeTypeQuery.3
new file mode 100644
index 0000000..d001ea9
--- /dev/null
+++ b/install/share/man/man3/FcFreeTypeQuery.3
@@ -0,0 +1,21 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFreeTypeQuery" "3" "18 November 2009" "" ""
+.SH NAME
+FcFreeTypeQuery \- compute pattern from font file (and index)
+.SH SYNOPSIS
+.nf
+\fB#include
+#include
+.sp
+FcPattern * FcFreeTypeQuery(const FcChar8 *\fIfile\fB);
+(int \fIid\fB);
+(FcBlanks *\fIblanks\fB);
+(int *\fIcount\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Constructs a pattern representing the 'id'th font in 'file'. The number
+of fonts in 'file' is returned in 'count'.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcFreeTypeQueryFace.3 b/install/share/man/man3/FcFreeTypeQueryFace.3
new file mode 100644
index 0000000..a4cd8c7
--- /dev/null
+++ b/install/share/man/man3/FcFreeTypeQueryFace.3
@@ -0,0 +1,21 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcFreeTypeQueryFace" "3" "18 November 2009" "" ""
+.SH NAME
+FcFreeTypeQueryFace \- compute pattern from FT_Face
+.SH SYNOPSIS
+.nf
+\fB#include
+#include
+.sp
+FcPattern * FcFreeTypeQueryFace(const FT_Face \fIface\fB);
+(const FcChar8 *\fIfile\fB);
+(int \fIid\fB);
+(FcBlanks *\fIblanks\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Constructs a pattern representing 'face'. 'file' and 'id' are used solely as
+data for pattern elements (FC_FILE, FC_INDEX and sometimes FC_FAMILY).
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcGetLangs.3 b/install/share/man/man3/FcGetLangs.3
new file mode 100644
index 0000000..a99c6a6
--- /dev/null
+++ b/install/share/man/man3/FcGetLangs.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcGetLangs" "3" "18 November 2009" "" ""
+.SH NAME
+FcGetLangs \- Get list of languages
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcStrSet * FcGetLangs(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns a string set of all known languages.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcGetVersion.3 b/install/share/man/man3/FcGetVersion.3
new file mode 100644
index 0000000..98b8905
--- /dev/null
+++ b/install/share/man/man3/FcGetVersion.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcGetVersion" "3" "18 November 2009" "" ""
+.SH NAME
+FcGetVersion \- library version number
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+int FcGetVersion(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the version number of the library.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcInit.3 b/install/share/man/man3/FcInit.3
new file mode 100644
index 0000000..3b89e9c
--- /dev/null
+++ b/install/share/man/man3/FcInit.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcInit" "3" "18 November 2009" "" ""
+.SH NAME
+FcInit \- initialize fontconfig library
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcInit(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Loads the default configuration file and the fonts referenced therein and
+sets the default configuration to that result. Returns whether this
+process succeeded or not. If the default configuration has already
+been loaded, this routine does nothing and returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcInitBringUptoDate.3 b/install/share/man/man3/FcInitBringUptoDate.3
new file mode 100644
index 0000000..d90f528
--- /dev/null
+++ b/install/share/man/man3/FcInitBringUptoDate.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcInitBringUptoDate" "3" "18 November 2009" "" ""
+.SH NAME
+FcInitBringUptoDate \- reload configuration files if needed
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcInitBringUptoDate(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Checks the rescan interval in the default configuration, checking the
+configuration if the interval has passed and reloading the configuration if
+when any changes are detected. Returns FcFalse if the configuration cannot
+be reloaded (see FcInitReinitialize). Otherwise returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcInitLoadConfig.3 b/install/share/man/man3/FcInitLoadConfig.3
new file mode 100644
index 0000000..8c41ffb
--- /dev/null
+++ b/install/share/man/man3/FcInitLoadConfig.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcInitLoadConfig" "3" "18 November 2009" "" ""
+.SH NAME
+FcInitLoadConfig \- load configuration
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcConfig * FcInitLoadConfig(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Loads the default configuration file and returns the resulting configuration.
+Does not load any font information.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcInitLoadConfigAndFonts.3 b/install/share/man/man3/FcInitLoadConfigAndFonts.3
new file mode 100644
index 0000000..e524db6
--- /dev/null
+++ b/install/share/man/man3/FcInitLoadConfigAndFonts.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcInitLoadConfigAndFonts" "3" "18 November 2009" "" ""
+.SH NAME
+FcInitLoadConfigAndFonts \- load configuration and font data
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcConfig * FcInitLoadConfigAndFonts(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Loads the default configuration file and builds information about the
+available fonts. Returns the resulting configuration.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcInitReinitialize.3 b/install/share/man/man3/FcInitReinitialize.3
new file mode 100644
index 0000000..5ba8f92
--- /dev/null
+++ b/install/share/man/man3/FcInitReinitialize.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcInitReinitialize" "3" "18 November 2009" "" ""
+.SH NAME
+FcInitReinitialize \- re-initialize library
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcInitReinitialize(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Forces the default configuration file to be reloaded and resets the default
+configuration. Returns FcFalse if the configuration cannot be reloaded (due
+to config file errors, allocation failures or other issues) and leaves the
+existing configuration unchanged. Otherwise returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcIsLower.3 b/install/share/man/man3/FcIsLower.3
new file mode 100644
index 0000000..fc83657
--- /dev/null
+++ b/install/share/man/man3/FcIsLower.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcIsLower" "3" "18 November 2009" "" ""
+.SH NAME
+FcIsLower \- check for lower case ASCII character
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcIsLower(FcChar8\fIc\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This macro checks whether \fIc\fR is an lower case ASCII
+letter.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcIsUpper.3 b/install/share/man/man3/FcIsUpper.3
new file mode 100644
index 0000000..f5e664e
--- /dev/null
+++ b/install/share/man/man3/FcIsUpper.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcIsUpper" "3" "18 November 2009" "" ""
+.SH NAME
+FcIsUpper \- check for upper case ASCII character
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcIsUpper(FcChar8\fIc\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This macro checks whether \fIc\fR is a upper case ASCII
+letter.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangGetCharSet.3 b/install/share/man/man3/FcLangGetCharSet.3
new file mode 100644
index 0000000..a07979e
--- /dev/null
+++ b/install/share/man/man3/FcLangGetCharSet.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangGetCharSet" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangGetCharSet \- Get character map for a language
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+const FcCharSet * FcLangGetCharSet(const FcChar8 *\fIlang\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the FcCharMap for a language.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetAdd.3 b/install/share/man/man3/FcLangSetAdd.3
new file mode 100644
index 0000000..3a430f2
--- /dev/null
+++ b/install/share/man/man3/FcLangSetAdd.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetAdd" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetAdd \- add a language to a langset
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcLangSetAdd(FcLangSet *\fIls\fB);
+(const FcChar8 *\fIlang\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fIlang\fR is added to \fIls\fR\&.
+\fIlang\fR should be of the form Ll-Tt where Ll is a
+two or three letter language from ISO 639 and Tt is a territory from ISO
+3166.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetCompare.3 b/install/share/man/man3/FcLangSetCompare.3
new file mode 100644
index 0000000..3dbfb61
--- /dev/null
+++ b/install/share/man/man3/FcLangSetCompare.3
@@ -0,0 +1,22 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetCompare" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetCompare \- compare language sets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcLangResult FcLangSetCompare(const FcLangSet *\fIls_a\fB);
+(const FcLangSet *\fIls_b\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcLangSetCompare\fR compares language coverage for
+\fIls_a\fR and \fIls_b\fR\&. If they share
+any language and territory pair, this function returns FcLangEqual. If they
+share a language but differ in which territory that language is for, this
+function returns FcLangDiffentTerritory. If they share no languages in
+common, this function returns FcLangDifferentLang.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetContains.3 b/install/share/man/man3/FcLangSetContains.3
new file mode 100644
index 0000000..aa6f3cf
--- /dev/null
+++ b/install/share/man/man3/FcLangSetContains.3
@@ -0,0 +1,22 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetContains" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetContains \- check langset subset relation
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcLangSetContains(const FcLangSet *\fIls_a\fB);
+(const FcLangSet *\fIls_b\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcLangSetContains\fR returns FcTrue if
+\fIls_a\fR contains every language in
+\fIls_b\fR\&. \fIls_a\fR will 'contain' a
+language from \fIls_b\fR if \fIls_a\fR
+has exactly the language, or either the language or
+\fIls_a\fR has no territory.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetCopy.3 b/install/share/man/man3/FcLangSetCopy.3
new file mode 100644
index 0000000..a8bf8b7
--- /dev/null
+++ b/install/share/man/man3/FcLangSetCopy.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetCopy" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetCopy \- copy a langset object
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcLangSet * FcLangSetCopy(const FcLangSet *\fIls\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcLangSetCopy\fR creates a new FcLangSet object and
+populates it with the contents of \fIls\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetCreate.3 b/install/share/man/man3/FcLangSetCreate.3
new file mode 100644
index 0000000..d25fe68
--- /dev/null
+++ b/install/share/man/man3/FcLangSetCreate.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetCreate \- create a langset object
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcLangSet * FcLangSetCreate(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcLangSetCreate\fR creates a new FcLangSet object.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetDestroy.3 b/install/share/man/man3/FcLangSetDestroy.3
new file mode 100644
index 0000000..1978585
--- /dev/null
+++ b/install/share/man/man3/FcLangSetDestroy.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetDestroy \- destroy a langset object
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcLangSetDestroy(FcLangSet *\fIls\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcLangSetDestroy\fR destroys a FcLangSet object, freeing
+all memory associated with it.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetEqual.3 b/install/share/man/man3/FcLangSetEqual.3
new file mode 100644
index 0000000..cfeee68
--- /dev/null
+++ b/install/share/man/man3/FcLangSetEqual.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetEqual" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetEqual \- test for matching langsets
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcLangSetEqual(const FcLangSet *\fIls_a\fB);
+(const FcLangSet *\fIls_b\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns FcTrue if and only if \fIls_a\fR supports precisely
+the same language and territory combinations as \fIls_b\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetGetLangs.3 b/install/share/man/man3/FcLangSetGetLangs.3
new file mode 100644
index 0000000..d366185
--- /dev/null
+++ b/install/share/man/man3/FcLangSetGetLangs.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetGetLangs" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetGetLangs \- get the list of languages in the langset
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcStrSet * FcLangSetGetLangs(const FcLangSet *\fIls\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns a string set of all languages in \fIlangset\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetHasLang.3 b/install/share/man/man3/FcLangSetHasLang.3
new file mode 100644
index 0000000..cf7017e
--- /dev/null
+++ b/install/share/man/man3/FcLangSetHasLang.3
@@ -0,0 +1,23 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetHasLang" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetHasLang \- test langset for language support
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcLangResult FcLangSetHasLang(const FcLangSet *\fIls\fB);
+(const FcChar8 *\fIlang\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcLangSetHasLang\fR checks whether
+\fIls\fR supports \fIlang\fR\&. If
+\fIls\fR has a matching language and territory pair,
+this function returns FcLangEqual. If \fIls\fR has
+a matching language but differs in which territory that language is for, this
+function returns FcLangDiffentTerritory. If \fIls\fR
+has no matching language, this function returns FcLangDifferentLang.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcLangSetHash.3 b/install/share/man/man3/FcLangSetHash.3
new file mode 100644
index 0000000..145868c
--- /dev/null
+++ b/install/share/man/man3/FcLangSetHash.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcLangSetHash" "3" "18 November 2009" "" ""
+.SH NAME
+FcLangSetHash \- return a hash value for a langset
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar32 FcLangSetHash(const FcLangSet *\fIls\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This function returns a value which depends solely on the languages
+supported by \fIls\fR\&. Any language which equals
+\fIls\fR will have the same result from
+\fBFcLangSetHash\fR\&. However, two langsets with the same hash
+value may not be equal.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcMatrixCopy.3 b/install/share/man/man3/FcMatrixCopy.3
new file mode 100644
index 0000000..93f354a
--- /dev/null
+++ b/install/share/man/man3/FcMatrixCopy.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcMatrixCopy" "3" "18 November 2009" "" ""
+.SH NAME
+FcMatrixCopy \- Copy a matrix
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcMatrixCopy(const FcMatrix *\fImatrix\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcMatrixCopy\fR allocates a new FcMatrix
+and copies \fImat\fR into it.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcMatrixEqual.3 b/install/share/man/man3/FcMatrixEqual.3
new file mode 100644
index 0000000..8eb7a8c
--- /dev/null
+++ b/install/share/man/man3/FcMatrixEqual.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcMatrixEqual" "3" "18 November 2009" "" ""
+.SH NAME
+FcMatrixEqual \- Compare two matrices
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcMatrixEqual(const FcMatrix *\fImatrix1\fB);
+(const FcMatrix *\fImatrix2\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcMatrixEqual\fR compares \fImatrix1\fR
+and \fImatrix2\fR returning FcTrue when they are equal and
+FcFalse when they are not.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcMatrixInit.3 b/install/share/man/man3/FcMatrixInit.3
new file mode 100644
index 0000000..80db7a6
--- /dev/null
+++ b/install/share/man/man3/FcMatrixInit.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcMatrixInit" "3" "18 November 2009" "" ""
+.SH NAME
+FcMatrixInit \- initialize an FcMatrix structure
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcMatrixInit(FcMatrix *\fImatrix\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcMatrixInit\fR initializes \fImatrix\fR
+to the identity matrix.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcMatrixMultiply.3 b/install/share/man/man3/FcMatrixMultiply.3
new file mode 100644
index 0000000..ea7c311
--- /dev/null
+++ b/install/share/man/man3/FcMatrixMultiply.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcMatrixMultiply" "3" "18 November 2009" "" ""
+.SH NAME
+FcMatrixMultiply \- Multiply matrices
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcMatrixMultiply(FcMatrix *\fIresult\fB);
+(const FcMatrix *\fImatrix1\fB);
+(const FcMatrix *\fImatrix2\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcMatrixMultiply\fR multiplies
+\fImatrix1\fR and \fImatrix2\fR storing
+the result in \fIresult\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcMatrixRotate.3 b/install/share/man/man3/FcMatrixRotate.3
new file mode 100644
index 0000000..7172957
--- /dev/null
+++ b/install/share/man/man3/FcMatrixRotate.3
@@ -0,0 +1,27 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcMatrixRotate" "3" "18 November 2009" "" ""
+.SH NAME
+FcMatrixRotate \- Rotate a matrix
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcMatrixRotate(FcMatrix *\fImatrix\fB);
+(double \fIcos\fB);
+(double \fIsin\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcMatrixRotate\fR rotates \fImatrix\fR
+by the angle who's sine is \fIsin\fR and cosine is
+\fIcos\fR\&. This is done by multiplying by the
+matrix:
+.sp
+.nf
+ cos -sin
+ sin cos
+.sp
+.fi
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcMatrixScale.3 b/install/share/man/man3/FcMatrixScale.3
new file mode 100644
index 0000000..04a42af
--- /dev/null
+++ b/install/share/man/man3/FcMatrixScale.3
@@ -0,0 +1,27 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcMatrixScale" "3" "18 November 2009" "" ""
+.SH NAME
+FcMatrixScale \- Scale a matrix
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcMatrixScale(FcMatrix *\fImatrix\fB);
+(double \fIsx\fB);
+(double \fIdy\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcMatrixScale\fR multiplies \fImatrix\fR
+x values by \fIsx\fR and y values by
+\fIsy\fR\&. This is done by multiplying by
+the matrix:
+.sp
+.nf
+ sx 0
+ 0 sy
+.sp
+.fi
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcMatrixShear.3 b/install/share/man/man3/FcMatrixShear.3
new file mode 100644
index 0000000..126b4ba
--- /dev/null
+++ b/install/share/man/man3/FcMatrixShear.3
@@ -0,0 +1,27 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcMatrixShear" "3" "18 November 2009" "" ""
+.SH NAME
+FcMatrixShear \- Shear a matrix
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcMatrixShear(FcMatrix *\fImatrix\fB);
+(double \fIsh\fB);
+(double \fIsv\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcMatrixShare\fR shears \fImatrix\fR
+horizontally by \fIsh\fR and vertically by
+\fIsv\fR\&. This is done by multiplying by
+the matrix:
+.sp
+.nf
+ 1 sh
+ sv 1
+.sp
+.fi
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcNameConstant.3 b/install/share/man/man3/FcNameConstant.3
new file mode 100644
index 0000000..9a3abc8
--- /dev/null
+++ b/install/share/man/man3/FcNameConstant.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcNameConstant" "3" "18 November 2009" "" ""
+.SH NAME
+FcNameConstant \- Get the value for a symbolic constant
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcNameConstant(FcChar8 *\fIstring\fB);
+(int *\fIresult\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns whether a symbolic constant with name \fIstring\fR is registered,
+placing the value of the constant in \fIresult\fR if present.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcNameGetConstant.3 b/install/share/man/man3/FcNameGetConstant.3
new file mode 100644
index 0000000..7ec4786
--- /dev/null
+++ b/install/share/man/man3/FcNameGetConstant.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcNameGetConstant" "3" "18 November 2009" "" ""
+.SH NAME
+FcNameGetConstant \- Lookup symbolic constant
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+const FcConstant * FcNameGetConstant(FcChar8 *\fIstring\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Return the FcConstant structure related to symbolic constant \fIstring\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcNameGetObjectType.3 b/install/share/man/man3/FcNameGetObjectType.3
new file mode 100644
index 0000000..fbb7962
--- /dev/null
+++ b/install/share/man/man3/FcNameGetObjectType.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcNameGetObjectType" "3" "18 November 2009" "" ""
+.SH NAME
+FcNameGetObjectType \- Lookup an object type
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+const FcObjectType * FcNameGetObjectType(const char *\fIobject\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Return the object type for the pattern element named \fIobject\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcNameParse.3 b/install/share/man/man3/FcNameParse.3
new file mode 100644
index 0000000..262dcd0
--- /dev/null
+++ b/install/share/man/man3/FcNameParse.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcNameParse" "3" "18 November 2009" "" ""
+.SH NAME
+FcNameParse \- Parse a pattern string
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcPattern * FcNameParse(const FcChar8 *\fIname\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Converts \fIname\fR from the standard text format described above into a pattern.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcNameRegisterConstants.3 b/install/share/man/man3/FcNameRegisterConstants.3
new file mode 100644
index 0000000..e3df651
--- /dev/null
+++ b/install/share/man/man3/FcNameRegisterConstants.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcNameRegisterConstants" "3" "18 November 2009" "" ""
+.SH NAME
+FcNameRegisterConstants \- Register symbolic constants
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcNameRegisterConstants(const FcConstant *\fIconsts\fB);
+(int \fInconsts\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Register \fInconsts\fR new symbolic constants. Returns
+FcFalse if the constants cannot be registered (due to allocation failure).
+Otherwise returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcNameRegisterObjectTypes.3 b/install/share/man/man3/FcNameRegisterObjectTypes.3
new file mode 100644
index 0000000..f6449cc
--- /dev/null
+++ b/install/share/man/man3/FcNameRegisterObjectTypes.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcNameRegisterObjectTypes" "3" "18 November 2009" "" ""
+.SH NAME
+FcNameRegisterObjectTypes \- Register object types
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcNameRegisterObjectTypes(const FcObjectType *\fItypes\fB);
+(int \fIntype\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Register \fIntype\fR new object types. Returns FcFalse if
+some of the names cannot be
+registered (due to allocation failure). Otherwise returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcNameUnparse.3 b/install/share/man/man3/FcNameUnparse.3
new file mode 100644
index 0000000..41b0a79
--- /dev/null
+++ b/install/share/man/man3/FcNameUnparse.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcNameUnparse" "3" "18 November 2009" "" ""
+.SH NAME
+FcNameUnparse \- Convert a pattern back into a string that can be parsed
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcNameUnparse(FcPattern *\fIpat\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Converts the given pattern into the standard text format described above.
+The return value is not static, but instead refers to newly allocated memory
+which should be freed by the caller using free().
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcNameUnregisterConstants.3 b/install/share/man/man3/FcNameUnregisterConstants.3
new file mode 100644
index 0000000..167eead
--- /dev/null
+++ b/install/share/man/man3/FcNameUnregisterConstants.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcNameUnregisterConstants" "3" "18 November 2009" "" ""
+.SH NAME
+FcNameUnregisterConstants \- Unregister symbolic constants
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcNameUnregisterConstants(const FcConstant *\fIconsts\fB);
+(int \fInconsts\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Unregister \fInconsts\fR symbolic constants. Returns
+FcFalse if the specified constants were not registered. Otherwise returns
+FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcNameUnregisterObjectTypes.3 b/install/share/man/man3/FcNameUnregisterObjectTypes.3
new file mode 100644
index 0000000..93a29e1
--- /dev/null
+++ b/install/share/man/man3/FcNameUnregisterObjectTypes.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcNameUnregisterObjectTypes" "3" "18 November 2009" "" ""
+.SH NAME
+FcNameUnregisterObjectTypes \- Unregister object types
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcNameUnregisterObjectTypes(const FcObjectType *\fItypes\fB);
+(int \fIntype\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Unregister \fIntype\fR object types. Returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcObjectSetAdd.3 b/install/share/man/man3/FcObjectSetAdd.3
new file mode 100644
index 0000000..603c74a
--- /dev/null
+++ b/install/share/man/man3/FcObjectSetAdd.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcObjectSetAdd" "3" "18 November 2009" "" ""
+.SH NAME
+FcObjectSetAdd \- Add to an object set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcObjectSetAdd(FcObjectSet *\fIos\fB);
+(const char *\fIobject\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Adds a proprety name to the set. Returns FcFalse if the property name cannot be
+inserted into the set (due to allocation failure). Otherwise returns FcTrue.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcObjectSetBuild.3 b/install/share/man/man3/FcObjectSetBuild.3
new file mode 100644
index 0000000..f63009b
--- /dev/null
+++ b/install/share/man/man3/FcObjectSetBuild.3
@@ -0,0 +1,26 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcObjectSetBuild" "3" "18 November 2009" "" ""
+.SH NAME
+FcObjectSetBuild, FcObjectSetVaBuild, FcObjectSetVapBuild \- Build object set from args
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcObjectSet * FcObjectSetBuild(const char *\fIfirst\fB);
+(\&...\fI\fB);
+.sp
+FcObjectSet * FcObjectSetVaBuild(const char *\fIfirst\fB);
+(va_list \fIva\fB);
+.sp
+void FcObjectSetVapBuild(FcObjectSet *\fIresult\fB);
+(const char *\fIfirst\fB);
+(va_list \fIva\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+These build an object set from a null-terminated list of property names.
+FcObjectSetVapBuild is a macro version of FcObjectSetVaBuild which returns
+the result in the \fIresult\fR variable directly.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcObjectSetCreate.3 b/install/share/man/man3/FcObjectSetCreate.3
new file mode 100644
index 0000000..c1acf58
--- /dev/null
+++ b/install/share/man/man3/FcObjectSetCreate.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcObjectSetCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcObjectSetCreate \- Create an object set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcObjectSet * FcObjectSetCreate(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Creates an empty set.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcObjectSetDestroy.3 b/install/share/man/man3/FcObjectSetDestroy.3
new file mode 100644
index 0000000..b1cec0b
--- /dev/null
+++ b/install/share/man/man3/FcObjectSetDestroy.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcObjectSetDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcObjectSetDestroy \- Destroy an object set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcObjectSetDestroy(FcObjectSet *\fIos\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Destroys an object set.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternAdd-Type.3 b/install/share/man/man3/FcPatternAdd-Type.3
new file mode 100644
index 0000000..d349c99
--- /dev/null
+++ b/install/share/man/man3/FcPatternAdd-Type.3
@@ -0,0 +1,49 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternAdd-Type" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternAddInteger, FcPatternAddDouble, FcPatternAddString, FcPatternAddMatrix, FcPatternAddCharSet, FcPatternAddBool, FcPatternAddFTFace, FcPatternAddLangSet \- Add a typed value to a pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcPatternAddInteger(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIi\fB);
+.sp
+FcBool FcPatternAddDouble(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(double \fId\fB);
+.sp
+FcBool FcPatternAddString(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(const FcChar8 *\fIs\fB);
+.sp
+FcBool FcPatternAddMatrix(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(const FcMatrix *\fIm\fB);
+.sp
+FcBool FcPatternAddCharSet(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(const FcCharSet *\fIc\fB);
+.sp
+FcBool FcPatternAddBool(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(FcBool \fIb\fB);
+.sp
+FcBool FcPatternAddFTFace(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(const FT_Face\fIf\fB);
+.sp
+FcBool FcPatternAddLangSet(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(const FcLangSet *\fIl\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+These are all convenience functions that insert objects of the specified
+type into the pattern. Use these in preference to FcPatternAdd as they
+will provide compile-time typechecking. These all append values to
+any existing list of values.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternAdd.3 b/install/share/man/man3/FcPatternAdd.3
new file mode 100644
index 0000000..e8983e8
--- /dev/null
+++ b/install/share/man/man3/FcPatternAdd.3
@@ -0,0 +1,23 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternAdd" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternAdd \- Add a value to a pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcPatternAdd(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(FcValue \fIvalue\fB);
+(FcBool \fIappend\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Adds a single value to the list of values associated with the property named
+`object\fI\&. If `append\fR is FcTrue, the value is added at the end of any
+existing list, otherwise it is inserted at the begining. `value' is saved
+(with FcValueSave) when inserted into the pattern so that the library
+retains no reference to any application-supplied data structure.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternAddWeak.3 b/install/share/man/man3/FcPatternAddWeak.3
new file mode 100644
index 0000000..0e13ec2
--- /dev/null
+++ b/install/share/man/man3/FcPatternAddWeak.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternAddWeak" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternAddWeak \- Add a value to a pattern with weak binding
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcPatternAddWeak(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(FcValue \fIvalue\fB);
+(FcBool \fIappend\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+FcPatternAddWeak is essentially the same as FcPatternAdd except that any
+values added to the list have binding \fIweak\fR instead of \fIstrong\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternBuild.3 b/install/share/man/man3/FcPatternBuild.3
new file mode 100644
index 0000000..229d964
--- /dev/null
+++ b/install/share/man/man3/FcPatternBuild.3
@@ -0,0 +1,50 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternBuild" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternBuild, FcPatternVaBuild, FcPatternVapBuild \- Create patterns from arguments
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcPattern * FcPatternBuild(FcPattern *\fIpattern\fB);
+(\&...\fI\fB);
+.sp
+FcPattern * FcPatternVaBuild(FcPattern *\fIpattern\fB);
+(va_list \fIva\fB);
+.sp
+void FcPatternVapBuild(FcPattern *\fIresult\fB);
+(FcPattern *\fIpattern\fB);
+(va_list \fIva\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Builds a pattern using a list of objects, types and values. Each
+value to be entered in the pattern is specified with three arguments:
+.IP 1.
+Object name, a string describing the property to be added.
+.IP 2.
+Object type, one of the FcType enumerated values
+.IP 3.
+Value, not an FcValue, but the raw type as passed to any of the
+FcPatternAdd functions. Must match the type of the second
+argument.
+.PP
+The argument list is terminated by a null object name, no object type nor
+value need be passed for this. The values are added to `pattern', if
+`pattern' is null, a new pattern is created. In either case, the pattern is
+returned. Example
+.PP
+.sp
+.nf
+pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) 0);
+.sp
+.fi
+.PP
+FcPatternVaBuild is used when the arguments are already in the form of a
+varargs value. FcPatternVapBuild is a macro version of FcPatternVaBuild
+which returns its result directly in the \fIresult\fR
+variable.
+.PP
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternCreate.3 b/install/share/man/man3/FcPatternCreate.3
new file mode 100644
index 0000000..ba7953a
--- /dev/null
+++ b/install/share/man/man3/FcPatternCreate.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternCreate \- Create a pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcPattern * FcPatternCreate(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Creates a pattern with no properties; used to build patterns from scratch.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternDel.3 b/install/share/man/man3/FcPatternDel.3
new file mode 100644
index 0000000..db6c0b2
--- /dev/null
+++ b/install/share/man/man3/FcPatternDel.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternDel" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternDel \- Delete a property from a pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcPatternDel(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Deletes all values associated with the property `object', returning
+whether the property existed or not.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternDestroy.3 b/install/share/man/man3/FcPatternDestroy.3
new file mode 100644
index 0000000..281599f
--- /dev/null
+++ b/install/share/man/man3/FcPatternDestroy.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternDestroy \- Destroy a pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcPatternDestroy(FcPattern *\fIp\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Decrement the pattern reference count. If all references are gone, destroys
+the pattern, in the process destroying all related values.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternDuplicate.3 b/install/share/man/man3/FcPatternDuplicate.3
new file mode 100644
index 0000000..b0c5d55
--- /dev/null
+++ b/install/share/man/man3/FcPatternDuplicate.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternDuplicate" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternDuplicate \- Copy a pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcPattern * FcPatternDuplicate(const FcPattern *\fIp\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Copy a pattern, returning a new pattern that matches
+\fIp\fR\&. Each pattern may be modified without affecting the
+other.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternEqual.3 b/install/share/man/man3/FcPatternEqual.3
new file mode 100644
index 0000000..75f44d7
--- /dev/null
+++ b/install/share/man/man3/FcPatternEqual.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternEqual" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternEqual \- Compare patterns
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcPatternEqual(const FcPattern *\fIpa\fB);
+(const FcPattern *\fIpb\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns whether \fIpa\fR and \fIpb\fR are exactly alike.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternEqualSubset.3 b/install/share/man/man3/FcPatternEqualSubset.3
new file mode 100644
index 0000000..d9d46c7
--- /dev/null
+++ b/install/share/man/man3/FcPatternEqualSubset.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternEqualSubset" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternEqualSubset \- Compare portions of patterns
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcPatternEqualSubset(const FcPattern *\fIpa\fB);
+(const FcPattern *\fIpb\fB);
+(const FcObjectSet *\fIos\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns whether \fIpa\fR and \fIpb\fR have exactly the same values for all of the
+objects in \fIos\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternFilter.3 b/install/share/man/man3/FcPatternFilter.3
new file mode 100644
index 0000000..924c631
--- /dev/null
+++ b/install/share/man/man3/FcPatternFilter.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternFilter" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternFilter \- Filter the objects of pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcPattern * FcPatternFilter(FcPattern *\fIp\fB);
+(const FcObjectSet *\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns a new pattern that only has those objects from
+\fIp\fR that are in \fIos\fR\&.
+If \fIos\fR is NULL, a duplicate of
+\fIp\fR is returned.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternFormat.3 b/install/share/man/man3/FcPatternFormat.3
new file mode 100644
index 0000000..4ecee7d
--- /dev/null
+++ b/install/share/man/man3/FcPatternFormat.3
@@ -0,0 +1,205 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternFormat" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternFormat \- Format a pattern into a string according to a format specifier
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcPatternFormat(FcPattern *\fIpat\fB);
+(const FcChar8 *\fIformat\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Converts given pattern \fIpat\fR into text described by
+the format specifier \fIformat\fR\&.
+The return value refers to newly allocated memory which should be freed by the
+caller using free(), or NULL if \fIformat\fR is invalid.
+.PP
+The format is loosely modelled after printf-style format string.
+The format string is composed of zero or more directives: ordinary
+characters (not "%"), which are copied unchanged to the output stream;
+and tags which are interpreted to construct text from the pattern in a
+variety of ways (explained below).
+Special characters can be escaped
+using backslash. C-string style special characters like \\n and \\r are
+also supported (this is useful when the format string is not a C string
+literal).
+It is advisable to always escape curly braces that
+are meant to be copied to the output as ordinary characters.
+.PP
+Each tags is introduced by the character "%",
+followed by an optional minimum field width,
+followed by tag contents in curly braces ({}).
+If the minimum field width value is provided the tag
+will be expanded and the result padded to achieve the minimum width.
+If the minimum field width is positive, the padding will right-align
+the text. Negative field width will left-align.
+The rest of this section describes various supported tag contents
+and their expansion.
+.PP
+A \fIsimple\fR tag
+is one where the content is an identifier. When simple
+tags are expanded, the named identifier will be looked up in
+\fIpattern\fR and the resulting list of values returned,
+joined together using comma. For example, to print the family name and style the
+pattern, use the format "%{family} %{style}\\n". To extend the family column
+to forty characters use "%-40{family}%{style}\\n".
+.PP
+Simple tags expand to list of all values for an element. To only choose
+one of the values, one can index using the syntax "%{elt[idx]}". For example,
+to get the first family name only, use "%{family[0]}".
+.PP
+If a simple tag ends with "=" and the element is found in the pattern, the
+name of the element followed by "=" will be output before the list of values.
+For example, "%{weight=}" may expand to the string "weight=80". Or to the empty
+string if \fIpattern\fR does not have weight set.
+.PP
+If a simple tag starts with ":" and the element is found in the pattern, ":"
+will be printed first. For example, combining this with the =, the format
+"%{:weight=}" may expand to ":weight=80" or to the empty string
+if \fIpattern\fR does not have weight set.
+.PP
+If a simple tag contains the string ":-", the rest of the the tag contents
+will be used as a default string. The default string is output if the element
+is not found in the pattern. For example, the format
+"%{:weight=:-123}" may expand to ":weight=80" or to the string
+":weight=123" if \fIpattern\fR does not have weight set.
+.PP
+A \fIcount\fR tag
+is one that starts with the character "#" followed by an element
+name, and expands to the number of values for the element in the pattern.
+For example, "%{#family}" expands to the number of family names
+\fIpattern\fR has set, which may be zero.
+.PP
+A \fIsub-expression\fR tag
+is one that expands a sub-expression. The tag contents
+are the sub-expression to expand placed inside another set of curly braces.
+Sub-expression tags are useful for aligning an entire sub-expression, or to
+apply converters (explained later) on an entire sub-expression.
+For example, the format "%40{{%{family} %{style}}}" expands the sub-expression
+to construct the family name followed by the style, then takes the entire
+string and pads it on the left to be at least forty characters.
+.PP
+A \fIfilter-out\fR tag
+is one starting with the character "-" followed by a
+comma-separated list of element names, followed by a sub-expression enclosed
+in curly braces. The sub-expression will be expanded but with a pattern that
+has the listed elements removed from it.
+For example, the format "%{-size,pixelsize{sub-expr}}" will expand "sub-expr"
+with \fIpattern\fR sans the size and pixelsize elements.
+.PP
+A \fIfilter-in\fR tag
+is one starting with the character "+" followed by a
+comma-separated list of element names, followed by a sub-expression enclosed
+in curly braces. The sub-expression will be expanded but with a pattern that
+only has the listed elements from the surrounding pattern.
+For example, the format "%{+family,familylang{sub-expr}}" will expand "sub-expr"
+with a sub-pattern consisting only the family and family lang elements of
+\fIpattern\fR\&.
+.PP
+A \fIconditional\fR tag
+is one starting with the character "?" followed by a
+comma-separated list of element conditions, followed by two sub-expression
+enclosed in curly braces. An element condition can be an element name,
+in which case it tests whether the element is defined in pattern, or
+the character "!" followed by an element name, in which case the test
+is negated. The conditional passes if all the element conditions pass.
+The tag expands the first sub-expression if the conditional passes, and
+expands the second sub-expression otherwise.
+For example, the format "%{?size,dpi,!pixelsize{pass}{fail}}" will expand
+to "pass" if \fIpattern\fR has size and dpi elements but
+no pixelsize element, and to "fail" otherwise.
+.PP
+An \fIenumerate\fR tag
+is one starting with the string "[]" followed by a
+comma-separated list of element names, followed by a sub-expression enclosed
+in curly braces. The list of values for the named elements are walked in
+parallel and the sub-expression expanded each time with a pattern just having
+a single value for those elements, starting from the first value and
+continuing as long as any of those elements has a value.
+For example, the format "%{[]family,familylang{%{family} (%{familylang})\\n}}"
+will expand the pattern "%{family} (%{familylang})\\n" with a pattern
+having only the first value of the family and familylang elemtns, then expands
+it with the second values, then the third, etc.
+.PP
+As a special case, if an enumerate tag has only one element, and that element
+has only one value in the pattern, and that value is of type FcLangSet, the
+individual languages in the language set are enumerated.
+.PP
+A \fIbuiltin\fR tag
+is one starting with the character "=" followed by a builtin
+name. The following builtins are defined:
+.TP
+\fBunparse\fR
+Expands to the result of calling FcNameUnparse() on the pattern.
+.TP
+\fBfcmatch\fR
+Expands to the output of the default output format of the fc-match
+command on the pattern, without the final newline.
+.TP
+\fBfclist\fR
+Expands to the output of the default output format of the fc-list
+command on the pattern, without the final newline.
+.TP
+\fBpkgkit\fR
+Expands to the list of PackageKit font() tags for the pattern.
+Currently this includes tags for each family name, and each language
+from the pattern, enumerated and sanitized into a set of tags terminated
+by newline. Package management systems can use these tags to tag their
+packages accordingly.
+.PP
+For example, the format "%{+family,style{%{=unparse}}}\\n" will expand
+to an unparsed name containing only the family and style element values
+from \fIpattern\fR\&.
+.PP
+The contents of any tag can be followed by a set of zero or more
+\fIconverter\fRs. A converter is specified by the
+character "|" followed by the converter name and arguments. The
+following converters are defined:
+.TP
+\fBbasename\fR
+Replaces text with the results of calling FcStrBasename() on it.
+.TP
+\fBdirname\fR
+Replaces text with the results of calling FcStrDirname() on it.
+.TP
+\fBdowncase\fR
+Replaces text with the results of calling FcStrDowncase() on it.
+.TP
+\fBshescape\fR
+Escapes text for one level of shell expansion.
+(Escapes single-quotes, also encloses text in single-quotes.)
+.TP
+\fBcescape\fR
+Escapes text such that it can be used as part of a C string literal.
+(Escapes backslash and double-quotes.)
+.TP
+\fBxmlescape\fR
+Escapes text such that it can be used in XML and HTML.
+(Escapes less-than, greater-than, and ampersand.)
+.TP
+\fBdelete(\fIchars\fB)\fR
+Deletes all occurrences of each of the characters in \fIchars\fR
+from the text.
+FIXME: This converter is not UTF-8 aware yet.
+.TP
+\fBescape(\fIchars\fB)\fR
+Escapes all occurrences of each of the characters in \fIchars\fR
+by prepending it by the first character in \fIchars\fR\&.
+FIXME: This converter is not UTF-8 aware yet.
+.TP
+\fBtranslate(\fIfrom\fB,\fIto\fB)\fR
+Translates all occurrences of each of the characters in \fIfrom\fR
+by replacing them with their corresponding character in \fIto\fR\&.
+If \fIto\fR has fewer characters than
+\fIfrom\fR, it will be extended by repeating its last
+character.
+FIXME: This converter is not UTF-8 aware yet.
+.PP
+For example, the format "%{family|downcase|delete( )}\\n" will expand
+to the values of the family element in \fIpattern\fR,
+lower-cased and with spaces removed.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternGet-Type.3 b/install/share/man/man3/FcPatternGet-Type.3
new file mode 100644
index 0000000..9d086a9
--- /dev/null
+++ b/install/share/man/man3/FcPatternGet-Type.3
@@ -0,0 +1,56 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternGet-Type" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternGetInteger, FcPatternGetDouble, FcPatternGetString, FcPatternGetMatrix, FcPatternGetCharSet, FcPatternGetBool, FcPatternGetFTFace, FcPatternGetLangSet \- Return a typed value from a pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcResult FcPatternGetInteger(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIn\fB);
+(int *\fIi\fB);
+.sp
+FcResult FcPatternGetDouble(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIn\fB);
+(double *\fId\fB);
+.sp
+FcResult FcPatternGetString(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIn\fB);
+(FcChar8 **\fIs\fB);
+.sp
+FcResult FcPatternGetMatrix(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIn\fB);
+(FcMatrix **\fIs\fB);
+.sp
+FcResult FcPatternGetCharSet(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIn\fB);
+(FcCharSet **\fIc\fB);
+.sp
+FcResult FcPatternGetBool(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIn\fB);
+(FcBool *\fIb\fB);
+.sp
+FcResult FcPatternGetFTFace(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIn\fB);
+.sp
+FcResult FcPatternGetLangSet(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(FT_Face *\fIf\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+These are convenience functions that call FcPatternGet and verify that the
+returned data is of the expected type. They return FcResultTypeMismatch if
+this is not the case. Note that these (like FcPatternGet) do not make a
+copy of any data structure referenced by the return value. Use these
+in preference to FcPatternGet to provide compile-time typechecking.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternGet.3 b/install/share/man/man3/FcPatternGet.3
new file mode 100644
index 0000000..544348b
--- /dev/null
+++ b/install/share/man/man3/FcPatternGet.3
@@ -0,0 +1,22 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternGet" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternGet \- Return a value from a pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcResult FcPatternGet(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIid\fB);
+(FcValue *\fIv\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns in \fIv\fR the \fIid\fR\&'th value
+associated with the property \fIobject\fR\&.
+The value returned is not a copy, but rather refers to the data stored
+within the pattern directly. Applications must not free this value.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternHash.3 b/install/share/man/man3/FcPatternHash.3
new file mode 100644
index 0000000..554ef6f
--- /dev/null
+++ b/install/share/man/man3/FcPatternHash.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternHash" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternHash \- Compute a pattern hash value
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar32 FcPatternHash(const FcPattern *\fIp\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns a 32-bit number which is the same for any two patterns which are
+equal.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternPrint.3 b/install/share/man/man3/FcPatternPrint.3
new file mode 100644
index 0000000..43844e0
--- /dev/null
+++ b/install/share/man/man3/FcPatternPrint.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternPrint" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternPrint \- Print a pattern for debugging
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcPatternPrint(const FcPattern *\fIp\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Prints an easily readable version of the pattern to stdout. There is
+no provision for reparsing data in this format, it's just for diagnostics
+and debugging.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternReference.3 b/install/share/man/man3/FcPatternReference.3
new file mode 100644
index 0000000..6857084
--- /dev/null
+++ b/install/share/man/man3/FcPatternReference.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternReference" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternReference \- Increment pattern reference count
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcPatternReference(FcPattern *\fIp\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Add another reference to \fIp\fR\&. Patterns are freed only
+when the reference count reaches zero.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcPatternRemove.3 b/install/share/man/man3/FcPatternRemove.3
new file mode 100644
index 0000000..b58d068
--- /dev/null
+++ b/install/share/man/man3/FcPatternRemove.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcPatternRemove" "3" "18 November 2009" "" ""
+.SH NAME
+FcPatternRemove \- Remove one object of the specified type from the pattern
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcPatternRemove(FcPattern *\fIp\fB);
+(const char *\fIobject\fB);
+(int \fIid\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Removes the value associated with the property `object' at position `id', returning
+whether the property existed and had a value at that position or not.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrBasename.3 b/install/share/man/man3/FcStrBasename.3
new file mode 100644
index 0000000..7cb70ef
--- /dev/null
+++ b/install/share/man/man3/FcStrBasename.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrBasename" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrBasename \- last component of filename
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcStrBasename(const FcChar8 *\fIfile\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the filename of \fIfile\fR stripped of any leading
+directory names. This is returned in newly allocated storage which should
+be freed when no longer needed.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrCmp.3 b/install/share/man/man3/FcStrCmp.3
new file mode 100644
index 0000000..4ed6888
--- /dev/null
+++ b/install/share/man/man3/FcStrCmp.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrCmp" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrCmp \- compare UTF-8 strings
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+int FcStrCmp(const FcChar8 *\fIs1\fB);
+(const FcChar8 *\fIs2\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the usual <0, 0, >0 result of comparing
+\fIs1\fR and \fIs2\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrCmpIgnoreCase.3 b/install/share/man/man3/FcStrCmpIgnoreCase.3
new file mode 100644
index 0000000..a87673e
--- /dev/null
+++ b/install/share/man/man3/FcStrCmpIgnoreCase.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrCmpIgnoreCase" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrCmpIgnoreCase \- compare UTF-8 strings ignoring case
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+int FcStrCmpIgnoreCase(const FcChar8 *\fIs1\fB);
+(const FcChar8 *\fIs2\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the usual <0, 0, >0 result of comparing
+\fIs1\fR and \fIs2\fR\&. This test is
+case-insensitive for all proper UTF-8 encoded strings.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrCopy.3 b/install/share/man/man3/FcStrCopy.3
new file mode 100644
index 0000000..08a3dc7
--- /dev/null
+++ b/install/share/man/man3/FcStrCopy.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrCopy" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrCopy \- duplicate a string
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcStrCopy(const FcChar8 *\fIs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Allocates memory, copies \fIs\fR and returns the resulting
+buffer. Yes, this is \fBstrdup\fR, but that function isn't
+available on every platform.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrCopyFilename.3 b/install/share/man/man3/FcStrCopyFilename.3
new file mode 100644
index 0000000..fd7e0fa
--- /dev/null
+++ b/install/share/man/man3/FcStrCopyFilename.3
@@ -0,0 +1,23 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrCopyFilename" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrCopyFilename \- create a complete path from a filename
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcStrCopyFilename(const FcChar8 *\fIs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+\fBFcStrCopyFilename\fR constructs an absolute pathname from
+\fIs\fR\&. It converts any leading '~' characters in
+to the value of the HOME environment variable, and any relative paths are
+converted to absolute paths using the current working directory. Sequences
+of '/' characters are converted to a single '/', and names containing the
+current directory '.' or parent directory '..' are correctly reconstructed.
+Returns NULL if '~' is the leading character and HOME is unset or disabled
+(see \fBFcConfigEnableHome\fR).
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrDirname.3 b/install/share/man/man3/FcStrDirname.3
new file mode 100644
index 0000000..ad4969b
--- /dev/null
+++ b/install/share/man/man3/FcStrDirname.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrDirname" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrDirname \- directory part of filename
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcStrDirname(const FcChar8 *\fIfile\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the directory containing \fIfile\fR\&. This
+is returned in newly allocated storage which should be freed when no longer
+needed.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrDowncase.3 b/install/share/man/man3/FcStrDowncase.3
new file mode 100644
index 0000000..2fd141f
--- /dev/null
+++ b/install/share/man/man3/FcStrDowncase.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrDowncase" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrDowncase \- create a lower case translation of a string
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcStrDowncase(const FcChar8 *\fIs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Allocates memory, copies \fIs\fR, converting upper case
+letters to lower case and returns the allocated buffer.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrFree.3 b/install/share/man/man3/FcStrFree.3
new file mode 100644
index 0000000..aab34db
--- /dev/null
+++ b/install/share/man/man3/FcStrFree.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrFree" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrFree \- free a string
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcStrFree(FcChar8 *\fIs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This is just a wrapper around free(3) which helps track memory usage of
+strings within the fontconfig library.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrListCreate.3 b/install/share/man/man3/FcStrListCreate.3
new file mode 100644
index 0000000..87b1df7
--- /dev/null
+++ b/install/share/man/man3/FcStrListCreate.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrListCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrListCreate \- create a string iterator
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcStrList * FcStrListCreate(FcStrSet *\fIset\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Creates an iterator to list the strings in \fIset\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrListDone.3 b/install/share/man/man3/FcStrListDone.3
new file mode 100644
index 0000000..e139d65
--- /dev/null
+++ b/install/share/man/man3/FcStrListDone.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrListDone" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrListDone \- destroy a string iterator
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcStrListDone(FcStrList *\fIlist\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Destroys the enumerator \fIlist\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrListNext.3 b/install/share/man/man3/FcStrListNext.3
new file mode 100644
index 0000000..1bd8ccd
--- /dev/null
+++ b/install/share/man/man3/FcStrListNext.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrListNext" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrListNext \- get next string in iteration
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcStrListNext(FcStrList *\fIlist\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the next string in \fIset\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrPlus.3 b/install/share/man/man3/FcStrPlus.3
new file mode 100644
index 0000000..5c93176
--- /dev/null
+++ b/install/share/man/man3/FcStrPlus.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrPlus" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrPlus \- concatenate two strings
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcStrPlus(const FcChar8 *\fIs1\fB);
+(const FcChar8 *\fIs2\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This function allocates new storage and places the concatenation of
+\fIs1\fR and \fIs2\fR there, returning the
+new string.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrSetAdd.3 b/install/share/man/man3/FcStrSetAdd.3
new file mode 100644
index 0000000..b15c74c
--- /dev/null
+++ b/install/share/man/man3/FcStrSetAdd.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrSetAdd" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrSetAdd \- add to a string set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcStrSetAdd(FcStrSet *\fIset\fB);
+(const FcChar8 *\fIs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Adds a copy of \fIs\fR to \fIset\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrSetAddFilename.3 b/install/share/man/man3/FcStrSetAddFilename.3
new file mode 100644
index 0000000..666a3a2
--- /dev/null
+++ b/install/share/man/man3/FcStrSetAddFilename.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrSetAddFilename" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrSetAddFilename \- add a filename to a string set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcStrSetAddFilename(FcStrSet *\fIset\fB);
+(const FcChar8 *\fIs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Adds a copy \fIs\fR to \fIset\fR, The copy
+is created with FcStrCopyFilename so that leading '~' values are replaced
+with the value of the HOME environment variable.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrSetCreate.3 b/install/share/man/man3/FcStrSetCreate.3
new file mode 100644
index 0000000..afdd9ee
--- /dev/null
+++ b/install/share/man/man3/FcStrSetCreate.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrSetCreate" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrSetCreate \- create a string set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcStrSet * FcStrSetCreate(void\fI\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Create an empty set.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrSetDel.3 b/install/share/man/man3/FcStrSetDel.3
new file mode 100644
index 0000000..2140d17
--- /dev/null
+++ b/install/share/man/man3/FcStrSetDel.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrSetDel" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrSetDel \- delete from a string set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcStrSetDel(FcStrSet *\fIset\fB);
+(const FcChar8 *\fIs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Removes \fIs\fR from \fIset\fR, returning
+FcTrue if \fIs\fR was a member else FcFalse.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrSetDestroy.3 b/install/share/man/man3/FcStrSetDestroy.3
new file mode 100644
index 0000000..182e5f3
--- /dev/null
+++ b/install/share/man/man3/FcStrSetDestroy.3
@@ -0,0 +1,16 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrSetDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrSetDestroy \- destroy a string set
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcStrSetDestroy(FcStrSet *\fIset\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Destroys \fIset\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrSetEqual.3 b/install/share/man/man3/FcStrSetEqual.3
new file mode 100644
index 0000000..2328136
--- /dev/null
+++ b/install/share/man/man3/FcStrSetEqual.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrSetEqual" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrSetEqual \- check sets for equality
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcStrSetEqual(FcStrSet *\fIset_a\fB);
+(FcStrSet *\fIset_b\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns whether \fIset_a\fR contains precisely the same
+strings as \fIset_b\fR\&. Ordering of strings within the two
+sets is not considered.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrSetMember.3 b/install/share/man/man3/FcStrSetMember.3
new file mode 100644
index 0000000..6f7bf70
--- /dev/null
+++ b/install/share/man/man3/FcStrSetMember.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrSetMember" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrSetMember \- check set for membership
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcStrSetMember(FcStrSet *\fIset\fB);
+(const FcChar8 *\fIs\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns whether \fIs\fR is a member of
+\fIset\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrStr.3 b/install/share/man/man3/FcStrStr.3
new file mode 100644
index 0000000..1a68cc9
--- /dev/null
+++ b/install/share/man/man3/FcStrStr.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrStr" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrStr \- locate UTF-8 substring
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcStrStr(const FcChar8 *\fIs1\fB);
+(const FcChar8 *\fIs2\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the location of \fIs2\fR in
+\fIs1\fR\&. Returns NULL if \fIs2\fR
+is not present in \fIs1\fR\&. This test will operate properly
+with UTF8 encoded strings.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcStrStrIgnoreCase.3 b/install/share/man/man3/FcStrStrIgnoreCase.3
new file mode 100644
index 0000000..c75fcc1
--- /dev/null
+++ b/install/share/man/man3/FcStrStrIgnoreCase.3
@@ -0,0 +1,20 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcStrStrIgnoreCase" "3" "18 November 2009" "" ""
+.SH NAME
+FcStrStrIgnoreCase \- locate UTF-8 substring ignoring ASCII case
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 * FcStrStrIgnoreCase(const FcChar8 *\fIs1\fB);
+(const FcChar8 *\fIs2\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns the location of \fIs2\fR in
+\fIs1\fR, ignoring case. Returns NULL if
+\fIs2\fR is not present in \fIs1\fR\&.
+This test is case-insensitive for all proper UTF-8 encoded strings.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcToLower.3 b/install/share/man/man3/FcToLower.3
new file mode 100644
index 0000000..75e4aa2
--- /dev/null
+++ b/install/share/man/man3/FcToLower.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcToLower" "3" "18 November 2009" "" ""
+.SH NAME
+FcToLower \- convert upper case ASCII to lower case
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcChar8 FcToLower(FcChar8\fIc\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+This macro converts upper case ASCII \fIc\fR to the
+equivalent lower case letter.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcUcs4ToUtf8.3 b/install/share/man/man3/FcUcs4ToUtf8.3
new file mode 100644
index 0000000..cba41a8
--- /dev/null
+++ b/install/share/man/man3/FcUcs4ToUtf8.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcUcs4ToUtf8" "3" "18 November 2009" "" ""
+.SH NAME
+FcUcs4ToUtf8 \- convert UCS4 to UTF-8
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+int FcUcs4ToUtf8(FcChar32 \fIsrc\fB);
+(FcChar8 \fIdst[FC_UTF8_MAX_LEN]\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Converts the Unicode char from \fIsrc\fR into
+\fIdst\fR and returns the number of bytes needed to encode
+the char.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcUtf16Len.3 b/install/share/man/man3/FcUtf16Len.3
new file mode 100644
index 0000000..9da6d9a
--- /dev/null
+++ b/install/share/man/man3/FcUtf16Len.3
@@ -0,0 +1,27 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcUtf16Len" "3" "18 November 2009" "" ""
+.SH NAME
+FcUtf16Len \- count UTF-16 encoded chars
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcUtf16Len(FcChar8 *\fIsrc\fB);
+(FcEndian \fIendian\fB);
+(int \fIlen\fB);
+(int *\fInchar\fB);
+(int *\fIwchar\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Counts the number of Unicode chars in \fIlen\fR bytes of
+\fIsrc\fR\&. Bytes of \fIsrc\fR are
+combined into 16-bit units according to \fIendian\fR\&.
+Places that count in \fInchar\fR\&.
+\fIwchar\fR contains 1, 2 or 4 depending on the number of
+bytes needed to hold the largest unicode char counted. The return value
+indicates whether \fIstring\fR is a well-formed UTF16
+string.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcUtf16ToUcs4.3 b/install/share/man/man3/FcUtf16ToUcs4.3
new file mode 100644
index 0000000..2ed32e4
--- /dev/null
+++ b/install/share/man/man3/FcUtf16ToUcs4.3
@@ -0,0 +1,23 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcUtf16ToUcs4" "3" "18 November 2009" "" ""
+.SH NAME
+FcUtf16ToUcs4 \- convert UTF-16 to UCS4
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+int FcUtf16ToUcs4(FcChar8 *\fIsrc\fB);
+(FcEndian \fIendian\fB);
+(FcChar32 *\fIdst\fB);
+(int \fIlen\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Converts the next Unicode char from \fIsrc\fR into
+\fIdst\fR and returns the number of bytes containing the
+char. \fIsrc\fR must be at least \fIlen\fR
+bytes long. Bytes of \fIsrc\fR are combined into 16-bit
+units according to \fIendian\fR\&.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcUtf8Len.3 b/install/share/man/man3/FcUtf8Len.3
new file mode 100644
index 0000000..d16cb13
--- /dev/null
+++ b/install/share/man/man3/FcUtf8Len.3
@@ -0,0 +1,24 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcUtf8Len" "3" "18 November 2009" "" ""
+.SH NAME
+FcUtf8Len \- count UTF-8 encoded chars
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcUtf8Len(FcChar8 *\fIsrc\fB);
+(int \fIlen\fB);
+(int *\fInchar\fB);
+(int *\fIwchar\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Counts the number of Unicode chars in \fIlen\fR bytes of
+\fIsrc\fR\&. Places that count in
+\fInchar\fR\&. \fIwchar\fR contains 1, 2 or
+4 depending on the number of bytes needed to hold the largest unicode char
+counted. The return value indicates whether \fIsrc\fR is a
+well-formed UTF8 string.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcUtf8ToUcs4.3 b/install/share/man/man3/FcUtf8ToUcs4.3
new file mode 100644
index 0000000..68c7758
--- /dev/null
+++ b/install/share/man/man3/FcUtf8ToUcs4.3
@@ -0,0 +1,21 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcUtf8ToUcs4" "3" "18 November 2009" "" ""
+.SH NAME
+FcUtf8ToUcs4 \- convert UTF-8 to UCS4
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+int FcUtf8ToUcs4(FcChar8 *\fIsrc\fB);
+(FcChar32 *\fIdst\fB);
+(int \fIlen\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Converts the next Unicode char from \fIsrc\fR into
+\fIdst\fR and returns the number of bytes containing the
+char. \fIsrc\fR must be at least
+\fIlen\fR bytes long.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcValueDestroy.3 b/install/share/man/man3/FcValueDestroy.3
new file mode 100644
index 0000000..0b72aad
--- /dev/null
+++ b/install/share/man/man3/FcValueDestroy.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcValueDestroy" "3" "18 November 2009" "" ""
+.SH NAME
+FcValueDestroy \- Free a value
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcValueDestroy(FcValue \fIv\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Frees any memory referenced by \fIv\fR\&. Values of type FcTypeString,
+FcTypeMatrix and FcTypeCharSet reference memory, the other types do not.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcValueEqual.3 b/install/share/man/man3/FcValueEqual.3
new file mode 100644
index 0000000..e272b1d
--- /dev/null
+++ b/install/share/man/man3/FcValueEqual.3
@@ -0,0 +1,19 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcValueEqual" "3" "18 November 2009" "" ""
+.SH NAME
+FcValueEqual \- Test two values for equality
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcBool FcValueEqual(FcValue \fIv_a\fB);
+(FcValue \fIv_b\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Compares two values. Integers and Doubles are compared as numbers; otherwise
+the two values have to be the same type to be considered equal. Strings are
+compared ignoring case.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcValuePrint.3 b/install/share/man/man3/FcValuePrint.3
new file mode 100644
index 0000000..d6362c7
--- /dev/null
+++ b/install/share/man/man3/FcValuePrint.3
@@ -0,0 +1,18 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcValuePrint" "3" "18 November 2009" "" ""
+.SH NAME
+FcValuePrint \- Print a value to stdout
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+void FcValuePrint(FcValue \fIv\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Prints a human-readable representation of \fIv\fR to
+stdout. The format should not be considered part of the library
+specification as it may change in the future.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/FcValueSave.3 b/install/share/man/man3/FcValueSave.3
new file mode 100644
index 0000000..59e1cb7
--- /dev/null
+++ b/install/share/man/man3/FcValueSave.3
@@ -0,0 +1,17 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FcValueSave" "3" "18 November 2009" "" ""
+.SH NAME
+FcValueSave \- Copy a value
+.SH SYNOPSIS
+.nf
+\fB#include
+.sp
+FcValue FcValueSave(FcValue \fIv\fB);
+\fR.fi
+.SH "DESCRIPTION"
+.PP
+Returns a copy of \fIv\fR duplicating any object referenced by it so that \fIv\fR
+may be safely destroyed without harming the new value.
+.SH "VERSION"
+.PP
+Fontconfig version 2.8.0
diff --git a/install/share/man/man3/bind_textdomain_codeset.3 b/install/share/man/man3/bind_textdomain_codeset.3
new file mode 100644
index 0000000..141509b
--- /dev/null
+++ b/install/share/man/man3/bind_textdomain_codeset.3
@@ -0,0 +1,72 @@
+.\" Copyright (c) Bruno Haible
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" References consulted:
+.\" GNU glibc-2 source code and manual
+.\" GNU gettext source code and manual
+.\" LI18NUX 2000 Globalization Specification
+.\"
+.TH BIND_TEXTDOMAIN_CODESET 3 "May 2001" "GNU gettext 0.18.1"
+.SH NAME
+bind_textdomain_codeset \- set encoding of message translations
+.SH SYNOPSIS
+.nf
+.B #include
+.sp
+.BI "char * bind_textdomain_codeset (const char * " domainname ,
+.BI " const char * " codeset );
+.fi
+.SH DESCRIPTION
+The \fBbind_textdomain_codeset\fP function sets the output codeset for message
+catalogs for domain \fIdomainname\fP.
+.PP
+A message domain is a set of translatable \fImsgid\fP messages. Usually,
+every software package has its own message domain.
+.PP
+By default, the \fBgettext\fP family of functions returns translated messages
+in the locale's character encoding, which can be retrieved as
+\fBnl_langinfo(CODESET)\fP. The need for calling \fBbind_textdomain_codeset\fP
+arises for programs which store strings in a locale independent way (e.g.
+UTF-8) and want to avoid an extra character set conversion on the returned
+translated messages.
+.PP
+\fIdomainname\fP must be a non-empty string.
+.PP
+If \fIcodeset\fP is not NULL, it must be a valid encoding name which can be
+used for the \fBiconv_open\fP function. The \fBbind_textdomain_codeset\fP
+function sets the output codeset for message catalogs belonging to domain
+\fIdomainname\fP to \fIcodeset\fP. The function makes copies of the argument
+strings as needed.
+.PP
+If \fIcodeset\fP is NULL, the function returns the previously set codeset for
+domain \fIdomainname\fP. The default is NULL, denoting the locale's character
+encoding.
+.SH "RETURN VALUE"
+If successful, the \fBbind_textdomain_codeset\fP function returns the current
+codeset for domain \fIdomainname\fP, after possibly changing it. The resulting
+string is valid until the next \fBbind_textdomain_codeset\fP call for the same
+\fIdomainname\fP and must not be modified or freed. If a memory allocation
+failure occurs, it sets \fBerrno\fP to \fBENOMEM\fP and returns NULL. If no
+codeset has been set for domain \fIdomainname\fP, it returns NULL.
+.SH ERRORS
+The following error can occur, among others:
+.TP
+.B ENOMEM
+Not enough memory available.
+.SH BUGS
+The return type ought to be \fBconst char *\fP, but is \fBchar *\fP to avoid
+warnings in C code predating ANSI C.
+.SH "SEE ALSO"
+.BR gettext (3),
+.BR dgettext (3),
+.BR dcgettext (3),
+.BR ngettext (3),
+.BR dngettext (3),
+.BR dcngettext (3),
+.BR textdomain (3),
+.BR nl_langinfo (3),
+.BR iconv_open (3)
diff --git a/install/share/man/man3/bindtextdomain.3 b/install/share/man/man3/bindtextdomain.3
new file mode 100644
index 0000000..742f78c
--- /dev/null
+++ b/install/share/man/man3/bindtextdomain.3
@@ -0,0 +1,69 @@
+.\" Copyright (c) Bruno Haible
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" References consulted:
+.\" GNU glibc-2 source code and manual
+.\" GNU gettext source code and manual
+.\" LI18NUX 2000 Globalization Specification
+.\"
+.TH BINDTEXTDOMAIN 3 "May 2001" "GNU gettext 0.18.1"
+.SH NAME
+bindtextdomain \- set directory containing message catalogs
+.SH SYNOPSIS
+.nf
+.B #include
+.sp
+.BI "char * bindtextdomain (const char * " domainname ", const char * " dirname );
+.fi
+.SH DESCRIPTION
+The \fBbindtextdomain\fP function sets the base directory of the hierarchy
+containing message catalogs for a given message domain.
+.PP
+A message domain is a set of translatable \fImsgid\fP messages. Usually,
+every software package has its own message domain. The need for calling
+\fBbindtextdomain\fP arises because packages are not always installed with
+the same prefix as the header and the libc/libintl libraries.
+.PP
+Message catalogs will be expected at the pathnames
+\fIdirname\fP/\fIlocale\fP/\fIcategory\fP/\fIdomainname\fP.mo,
+where \fIlocale\fP is a locale name and \fIcategory\fP is a locale facet such
+as \fBLC_MESSAGES\fP.
+.PP
+\fIdomainname\fP must be a non-empty string.
+.PP
+If \fIdirname\fP is not NULL, the base directory for message catalogs belonging
+to domain \fIdomainname\fP is set to \fIdirname\fP. The function makes copies
+of the argument strings as needed. If the program wishes to call the
+\fBchdir\fP function, it is important that \fIdirname\fP be an absolute
+pathname; otherwise it cannot be guaranteed that the message catalogs will
+be found.
+.PP
+If \fIdirname\fP is NULL, the function returns the previously set base
+directory for domain \fIdomainname\fP.
+.SH "RETURN VALUE"
+If successful, the \fBbindtextdomain\fP function returns the current base
+directory for domain \fIdomainname\fP, after possibly changing it. The
+resulting string is valid until the next \fBbindtextdomain\fP call for the
+same \fIdomainname\fP and must not be modified or freed. If a memory allocation
+failure occurs, it sets \fBerrno\fP to \fBENOMEM\fP and returns NULL.
+.SH ERRORS
+The following error can occur, among others:
+.TP
+.B ENOMEM
+Not enough memory available.
+.SH BUGS
+The return type ought to be \fBconst char *\fP, but is \fBchar *\fP to avoid
+warnings in C code predating ANSI C.
+.SH "SEE ALSO"
+.BR gettext (3),
+.BR dgettext (3),
+.BR dcgettext (3),
+.BR ngettext (3),
+.BR dngettext (3),
+.BR dcngettext (3),
+.BR textdomain (3),
+.BR realpath (3)
diff --git a/install/share/man/man3/dcgettext.3 b/install/share/man/man3/dcgettext.3
new file mode 100644
index 0000000..9082c86
--- /dev/null
+++ b/install/share/man/man3/dcgettext.3
@@ -0,0 +1 @@
+.so man3/gettext.3
diff --git a/install/share/man/man3/dcngettext.3 b/install/share/man/man3/dcngettext.3
new file mode 100644
index 0000000..5fcf629
--- /dev/null
+++ b/install/share/man/man3/dcngettext.3
@@ -0,0 +1 @@
+.so man3/ngettext.3
diff --git a/install/share/man/man3/dgettext.3 b/install/share/man/man3/dgettext.3
new file mode 100644
index 0000000..9082c86
--- /dev/null
+++ b/install/share/man/man3/dgettext.3
@@ -0,0 +1 @@
+.so man3/gettext.3
diff --git a/install/share/man/man3/dngettext.3 b/install/share/man/man3/dngettext.3
new file mode 100644
index 0000000..5fcf629
--- /dev/null
+++ b/install/share/man/man3/dngettext.3
@@ -0,0 +1 @@
+.so man3/ngettext.3
diff --git a/install/share/man/man3/gettext.3 b/install/share/man/man3/gettext.3
new file mode 100644
index 0000000..de1400b
--- /dev/null
+++ b/install/share/man/man3/gettext.3
@@ -0,0 +1,99 @@
+.\" Copyright (c) Bruno Haible
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" References consulted:
+.\" GNU glibc-2 source code and manual
+.\" GNU gettext source code and manual
+.\" LI18NUX 2000 Globalization Specification
+.\"
+.TH GETTEXT 3 "May 2001" "GNU gettext 0.18.1"
+.SH NAME
+gettext, dgettext, dcgettext \- translate message
+.SH SYNOPSIS
+.nf
+.B #include
+.sp
+.BI "char * gettext (const char * " msgid );
+.BI "char * dgettext (const char * " domainname ", const char * " msgid );
+.BI "char * dcgettext (const char * " domainname ", const char * " msgid ,
+.BI " int " category );
+.fi
+.SH DESCRIPTION
+The \fBgettext\fP, \fBdgettext\fP and \fBdcgettext\fP functions attempt to
+translate a text string into the user's native language, by looking up the
+translation in a message catalog.
+.PP
+The \fImsgid\fP argument identifies the message to be translated. By
+convention, it is the English version of the message, with non-ASCII
+characters replaced by ASCII approximations. This choice allows the
+translators to work with message catalogs, called PO files, that contain
+both the English and the translated versions of each message, and can be
+installed using the \fBmsgfmt\fP utility.
+.PP
+A message domain is a set of translatable \fImsgid\fP messages. Usually,
+every software package has its own message domain. The domain name is used
+to determine the message catalog where the translation is looked up; it must
+be a non-empty string. For the \fBgettext\fP function, it is specified through
+a preceding \fBtextdomain\fP call. For the \fBdgettext\fP and \fBdcgettext\fP
+functions, it is passed as the \fIdomainname\fP argument; if this argument is
+NULL, the domain name specified through a preceding \fBtextdomain\fP call is
+used instead.
+.PP
+Translation lookup operates in the context of the current locale. For the
+\fBgettext\fP and \fBdgettext\fP functions, the \fBLC_MESSAGES\fP locale
+facet is used. It is determined by a preceding call to the \fBsetlocale\fP
+function. \fBsetlocale(LC_ALL,"")\fP initializes the \fBLC_MESSAGES\fP locale
+based on the first nonempty value of the three environment variables
+\fBLC_ALL\fP, \fBLC_MESSAGES\fP, \fBLANG\fP; see \fBsetlocale\fP(3). For the
+\fBdcgettext\fP function, the locale facet is determined by the \fIcategory\fP
+argument, which should be one of the \fBLC_xxx\fP constants defined in the
+ header, excluding \fBLC_ALL\fP. In both cases, the functions also
+use the \fBLC_CTYPE\fP locale facet in order to convert the translated message
+from the translator's codeset to the current locale's codeset, unless
+overridden by a prior call to the \fBbind_textdomain_codeset\fP function.
+.PP
+The message catalog used by the functions is at the pathname
+\fIdirname\fP/\fIlocale\fP/\fIcategory\fP/\fIdomainname\fP.mo. Here
+\fIdirname\fP is the directory specified through \fBbindtextdomain\fP. Its
+default is system and configuration dependent; typically it is
+\fIprefix\fP/share/locale, where \fIprefix\fP is the installation prefix of the
+package. \fIlocale\fP is the name of the current locale facet; the GNU
+implementation also tries generalizations, such as the language name without
+the territory name. \fIcategory\fP is \fBLC_MESSAGES\fP for the \fBgettext\fP
+and \fBdgettext\fP functions, or the argument passed to the \fBdcgettext\fP
+function.
+.PP
+If the \fBLANGUAGE\fP environment variable is set to a nonempty value, and the
+locale is not the "C" locale, the value of \fBLANGUAGE\fP is assumed to contain
+a colon separated list of locale names. The functions will attempt to look up
+a translation of \fImsgid\fP in each of the locales in turn. This is a GNU
+extension.
+.PP
+In the "C" locale, or if none of the used catalogs contain a translation for
+\fImsgid\fP, the \fBgettext\fP, \fBdgettext\fP and \fBdcgettext\fP functions
+return \fImsgid\fP.
+.SH "RETURN VALUE"
+If a translation was found in one of the specified catalogs, it is converted
+to the locale's codeset and returned. The resulting string is statically
+allocated and must not be modified or freed. Otherwise \fImsgid\fP is returned.
+.SH ERRORS
+\fBerrno\fP is not modified.
+.SH BUGS
+The return type ought to be \fBconst char *\fP, but is \fBchar *\fP to avoid
+warnings in C code predating ANSI C.
+.PP
+When an empty string is used for \fImsgid\fP, the functions may return a
+nonempty string.
+.SH "SEE ALSO"
+.BR ngettext (3),
+.BR dngettext (3),
+.BR dcngettext (3),
+.BR setlocale (3),
+.BR textdomain (3),
+.BR bindtextdomain (3),
+.BR bind_textdomain_codeset (3),
+.BR msgfmt (1)
diff --git a/install/share/man/man3/libpng.3 b/install/share/man/man3/libpng.3
new file mode 100644
index 0000000..b82557c
--- /dev/null
+++ b/install/share/man/man3/libpng.3
@@ -0,0 +1,4455 @@
+.TH LIBPNG 3 "June 26, 2010"
+.SH NAME
+libpng \- Portable Network Graphics (PNG) Reference Library 1.4.3
+.SH SYNOPSIS
+\fI\fB
+
+\fB#include \fP
+
+\fI\fB
+
+\fBpng_uint_32 png_access_version_number \fI(void\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_benign_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_chunk_benign_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_chunk_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_chunk_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_convert_from_struct_tm (png_timep \fP\fIptime\fP\fB, struct tm FAR * \fIttime\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_convert_from_time_t (png_timep \fP\fIptime\fP\fB, time_t \fIttime\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_charp png_convert_to_rfc1123 (png_structp \fP\fIpng_ptr\fP\fB, png_timep \fIptime\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_infop png_create_info_struct (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_structp png_create_read_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_structp png_create_read_struct_2(png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_structp png_create_write_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_structp png_create_write_struct_2(png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_destroy_info_struct (png_structp \fP\fIpng_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_destroy_read_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fP\fIinfo_ptr_ptr\fP\fB, png_infopp \fIend_info_ptr_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_destroy_write_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_free (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_free_chunk_list (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_free_default(png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_free_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fInum\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_bit_depth (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fI*background\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_channels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fI*white_x\fP\fB, double \fP\fI*white_y\fP\fB, double \fP\fI*red_x\fP\fB, double \fP\fI*red_y\fP\fB, double \fP\fI*green_x\fP\fB, double \fP\fI*green_y\fP\fB, double \fP\fI*blue_x\fP\fB, double \fI*blue_y\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*white_x\fP\fB, png_uint_32 \fP\fI*white_y\fP\fB, png_uint_32 \fP\fI*red_x\fP\fB, png_uint_32 \fP\fI*red_y\fP\fB, png_uint_32 \fP\fI*green_x\fP\fB, png_uint_32 \fP\fI*green_y\fP\fB, png_uint_32 \fP\fI*blue_x\fP\fB, png_uint_32 \fI*blue_y\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_chunk_cache_max (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_color_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_compression_buffer_size (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_compression_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_copyright (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_voidp png_get_error_ptr (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_filter_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fI*file_gamma\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fI*int_file_gamma\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_header_ver (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_header_version (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fI*hist\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charpp \fP\fIname\fP\fB, int \fP\fI*compression_type\fP\fB, png_charpp \fP\fIprofile\fP\fB, png_uint_32 \fI*proflen\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*width\fP\fB, png_uint_32 \fP\fI*height\fP\fB, int \fP\fI*bit_depth\fP\fB, int \fP\fI*color_type\fP\fB, int \fP\fI*interlace_type\fP\fB, int \fP\fI*compression_type\fP\fB, int \fI*filter_type\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_image_height (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_image_width (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_int_32 png_get_int_32 (png_bytep \fIbuf\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_interlace_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_voidp png_get_io_ptr (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_libpng_ver (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_alloc_size_t png_get_chunk_malloc_max (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_voidp png_get_mem_ptr(png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*offset_x\fP\fB, png_uint_32 \fP\fI*offset_y\fP\fB, int \fI*unit_type\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fI*purpose\fP\fB, png_int_32 \fP\fI*X0\fP\fB, png_int_32 \fP\fI*X1\fP\fB, int \fP\fI*type\fP\fB, int \fP\fI*nparams\fP\fB, png_charp \fP\fI*units\fP\fB, png_charpp \fI*params\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*res_x\fP\fB, png_uint_32 \fP\fI*res_y\fP\fB, int \fI*unit_type\fP\fB);\fP
+
+\fI\fB
+
+\fBfloat png_get_pixel_aspect_ratio (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_voidp png_get_progressive_ptr (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fI*palette\fP\fB, int \fI*num_palette\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_byte png_get_rgb_to_gray_status (png_structp \fIpng_ptr)
+
+\fBpng_uint_32 png_get_rowbytes (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_bytepp png_get_rows (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fI*sig_bit\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_bytep png_get_signature (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fI*splt_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fI*intent\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_text (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fI*text_ptr\fP\fB, int \fI*num_text\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fI*mod_time\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fI*trans\fP\fB, int \fP\fI*num_trans\fP\fB, png_color_16p \fI*trans_color\fP\fB);\fP
+
+\fI\fB
+
+\fB/* This function is really an inline macro. \fI*/
+
+\fBpng_uint_16 png_get_uint_16 (png_bytep \fIbuf\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_uint_31 (png_bytep \fIbuf\fP\fB);\fP
+
+\fI\fB
+
+\fB/* This function is really an inline macro. \fI*/
+
+\fBpng_uint_32 png_get_uint_32 (png_bytep \fIbuf\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkpp \fIunknowns\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_voidp png_get_user_chunk_ptr (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_user_height_max( png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_voidp png_get_user_transform_ptr (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_user_width_max (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_valid (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIflag\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_int_32 png_get_x_offset_microns (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_int_32 png_get_x_offset_pixels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_x_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_int_32 png_get_y_offset_microns (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_int_32 png_get_y_offset_pixels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_get_y_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBint png_handle_as_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIchunk_name\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_init_io (png_structp \fP\fIpng_ptr\fP\fB, FILE \fI*fp\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_voidp png_malloc (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_voidp png_malloc_default(png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
+
+\fI\fB
+
+\fBvoidp png_memcpy (png_voidp \fP\fIs1\fP\fB, png_voidp \fP\fIs2\fP\fB, png_size_t \fIsize\fP\fB);\fP
+
+\fI\fB
+
+\fBvoidp png_memset (png_voidp \fP\fIs1\fP\fB, int \fP\fIvalue\fP\fB, png_size_t \fIsize\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_process_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_size\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_progressive_combine_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIold_row\fP\fB, png_bytep \fInew_row\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_read_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_read_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_read_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_read_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_read_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fIdisplay_row\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_read_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_bytepp \fP\fIdisplay_row\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_read_update_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_save_int_32 (png_bytep \fP\fIbuf\fP\fB, png_int_32 \fIi\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_save_uint_16 (png_bytep \fP\fIbuf\fP\fB, unsigned int \fIi\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_save_uint_32 (png_bytep \fP\fIbuf\fP\fB, png_uint_32 \fIi\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_add_alpha (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_background (png_structp \fP\fIpng_ptr\fP\fB, png_color_16p \fP\fIbackground_color\fP\fB, int \fP\fIbackground_gamma_code\fP\fB, int \fP\fIneed_expand\fP\fB, double \fIbackground_gamma\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_bgr (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fIbackground\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fIwhite_x\fP\fB, double \fP\fIwhite_y\fP\fB, double \fP\fIred_x\fP\fB, double \fP\fIred_y\fP\fB, double \fP\fIgreen_x\fP\fB, double \fP\fIgreen_y\fP\fB, double \fP\fIblue_x\fP\fB, double \fIblue_y\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwhite_x\fP\fB, png_uint_32 \fP\fIwhite_y\fP\fB, png_uint_32 \fP\fIred_x\fP\fB, png_uint_32 \fP\fIred_y\fP\fB, png_uint_32 \fP\fIgreen_x\fP\fB, png_uint_32 \fP\fIgreen_y\fP\fB, png_uint_32 \fP\fIblue_x\fP\fB, png_uint_32 \fIblue_y\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_chunk_cache_max (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIuser_chunk_cache_max\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_compression_level (png_structp \fP\fIpng_ptr\fP\fB, int \fIlevel\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_compression_mem_level (png_structp \fP\fIpng_ptr\fP\fB, int \fImem_level\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_compression_method (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_compression_strategy (png_structp \fP\fIpng_ptr\fP\fB, int \fIstrategy\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_compression_window_bits (png_structp \fP\fIpng_ptr\fP\fB, int \fIwindow_bits\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_crc_action (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcrit_action\fP\fB, int \fIancil_action\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_error_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarning_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_expand (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_expand_gray_1_2_4_to_8(png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_filler (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_filter (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImethod\fP\fB, int \fIfilters\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_filter_heuristics (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIheuristic_method\fP\fB, int \fP\fInum_weights\fP\fB, png_doublep \fP\fIfilter_weights\fP\fB, png_doublep \fIfilter_costs\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_flush (png_structp \fP\fIpng_ptr\fP\fB, int \fInrows\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_gamma (png_structp \fP\fIpng_ptr\fP\fB, double \fP\fIscreen_gamma\fP\fB, double \fIdefault_file_gamma\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fIfile_gamma\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIfile_gamma\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_gray_1_2_4_to_8(png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_gray_to_rgb (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fIhist\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIname\fP\fB, int \fP\fIcompression_type\fP\fB, png_charp \fP\fIprofile\fP\fB, png_uint_32 \fIproflen\fP\fB);\fP
+
+\fI\fB
+
+\fBint png_set_interlace_handling (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_invalid (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fImask\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_invert_alpha (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_invert_mono (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwidth\fP\fB, png_uint_32 \fP\fIheight\fP\fB, int \fP\fIbit_depth\fP\fB, int \fP\fIcolor_type\fP\fB, int \fP\fIinterlace_type\fP\fB, int \fP\fIcompression_type\fP\fB, int \fIfilter_type\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_keep_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIkeep\fP\fB, png_bytep \fP\fIchunk_list\fP\fB, int \fInum_chunks\fP\fB);\fP
+
+\fI\fB
+
+\fBjmp_buf* png_set_longjmp_fn (png_structp \fP\fIpng_ptr\fP\fB, png_longjmp_ptr \fP\fIlongjmp_fn\fP\fB, size_t \fIjmp_buf_size\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_chunk_malloc_max (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIuser_chunk_cache_max\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_mem_fn(png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIoffset_x\fP\fB, png_uint_32 \fP\fIoffset_y\fP\fB, int \fIunit_type\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_packing (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_packswap (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_palette_to_rgb(png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIpurpose\fP\fB, png_int_32 \fP\fIX0\fP\fB, png_int_32 \fP\fIX1\fP\fB, int \fP\fItype\fP\fB, int \fP\fInparams\fP\fB, png_charp \fP\fIunits\fP\fB, png_charpp \fIparams\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIres_x\fP\fB, png_uint_32 \fP\fIres_y\fP\fB, int \fIunit_type\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_progressive_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIprogressive_ptr\fP\fB, png_progressive_info_ptr \fP\fIinfo_fn\fP\fB, png_progressive_row_ptr \fP\fIrow_fn\fP\fB, png_progressive_end_ptr \fIend_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fInum_palette\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_quantize (png_structp \fP\fIpng_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fP\fInum_palette\fP\fB, int \fP\fImaximum_colors\fP\fB, png_uint_16p \fP\fIhistogram\fP\fB, int \fIfull_quantize\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fIread_data_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_read_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_read_status_ptr \fIread_row_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_read_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIread_user_transform_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_rgb_to_gray (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIerror_action\fP\fB, double \fP\fIred\fP\fB, double \fIgreen\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_rgb_to_gray_fixed (png_structp \fP\fIpng_ptr\fP\fB, int error_action png_fixed_point \fP\fIred\fP\fB, png_fixed_point \fIgreen\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_rows (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytepp \fIrow_pointers\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fIsig_bit\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_sCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIunit\fP\fB, double \fP\fIwidth\fP\fB, double \fIheight\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_shift (png_structp \fP\fIpng_ptr\fP\fB, png_color_8p \fItrue_bits\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_sig_bytes (png_structp \fP\fIpng_ptr\fP\fB, int \fInum_bytes\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fP\fIsplt_ptr\fP\fB, int \fInum_spalettes\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIintent\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_sRGB_gAMA_and_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIintent\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_strip_16 (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_strip_alpha (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_swap (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_swap_alpha (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_text (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fItext_ptr\fP\fB, int \fInum_text\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fImod_time\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fItrans\fP\fB, int \fP\fInum_trans\fP\fB, png_color_16p \fItrans_color\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_tRNS_to_alpha(png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBpng_uint_32 png_set_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkp \fP\fIunknowns\fP\fB, int \fP\fInum\fP\fB, int \fIlocation\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_unknown_chunk_location(png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIchunk\fP\fB, int \fIlocation\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_read_user_chunk_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_chunk_ptr\fP\fB, png_user_chunk_ptr \fIread_user_chunk_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_user_limits (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIuser_width_max\fP\fB, png_uint_32 \fIuser_height_max\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_user_transform_info (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_transform_ptr\fP\fB, int \fP\fIuser_transform_depth\fP\fB, int \fIuser_transform_channels\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_write_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fP\fIwrite_data_fn\fP\fB, png_flush_ptr \fIoutput_flush_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_write_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_write_status_ptr \fIwrite_row_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_write_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIwrite_user_transform_fn\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_set_compression_buffer_size(png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIsize\fP\fB);\fP
+
+\fI\fB
+
+\fBint png_sig_cmp (png_bytep \fP\fIsig\fP\fB, png_size_t \fP\fIstart\fP\fB, png_size_t \fInum_to_check\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_start_read_image (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_chunk (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_chunk_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_chunk_end (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_chunk_start (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_flush (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_info_before_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_sig (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoidpf png_zalloc (voidpf \fP\fIpng_ptr\fP\fB, uInt \fP\fIitems\fP\fB, uInt \fIsize\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_zfree (voidpf \fP\fIpng_ptr\fP\fB, voidpf \fIptr\fP\fB);\fP
+
+\fI\fB
+
+.SH DESCRIPTION
+The
+.I libpng
+library supports encoding, decoding, and various manipulations of
+the Portable Network Graphics (PNG) format image files. It uses the
+.IR zlib(3)
+compression library.
+Following is a copy of the libpng.txt file that accompanies libpng.
+.SH LIBPNG.TXT
+libpng.txt - A description on how to use and modify libpng
+
+ libpng version 1.4.3 - June 26, 2010
+ Updated and distributed by Glenn Randers-Pehrson
+
+ Copyright (c) 1998-2009 Glenn Randers-Pehrson
+
+ This document is released under the libpng license.
+ For conditions of distribution and use, see the disclaimer
+ and license in png.h
+
+ Based on:
+
+ libpng versions 0.97, January 1998, through 1.4.3 - June 26, 2010
+ Updated and distributed by Glenn Randers-Pehrson
+ Copyright (c) 1998-2009 Glenn Randers-Pehrson
+
+ libpng 1.0 beta 6 version 0.96 May 28, 1997
+ Updated and distributed by Andreas Dilger
+ Copyright (c) 1996, 1997 Andreas Dilger
+
+ libpng 1.0 beta 2 - version 0.88 January 26, 1996
+ For conditions of distribution and use, see copyright
+ notice in png.h. Copyright (c) 1995, 1996 Guy Eric
+ Schalnat, Group 42, Inc.
+
+ Updated/rewritten per request in the libpng FAQ
+ Copyright (c) 1995, 1996 Frank J. T. Wojcik
+ December 18, 1995 & January 20, 1996
+
+.SH I. Introduction
+
+This file describes how to use and modify the PNG reference library
+(known as libpng) for your own use. There are five sections to this
+file: introduction, structures, reading, writing, and modification and
+configuration notes for various special platforms. In addition to this
+file, example.c is a good starting point for using the library, as
+it is heavily commented and should include everything most people
+will need. We assume that libpng is already installed; see the
+INSTALL file for instructions on how to install libpng.
+
+For examples of libpng usage, see the files "example.c", "pngtest.c",
+and the files in the "contrib" directory, all of which are included in
+the libpng distribution.
+
+Libpng was written as a companion to the PNG specification, as a way
+of reducing the amount of time and effort it takes to support the PNG
+file format in application programs.
+
+The PNG specification (second edition), November 2003, is available as
+a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2003 (E)) at
+. It is technically equivalent
+to the PNG specification (second edition) but has some additional material.
+
+The PNG-1.0 specification is available
+as RFC 2083 and as a
+W3C Recommendation .
+
+Some additional chunks are described in the special-purpose public chunks
+documents at .
+
+Other information
+about PNG, and the latest version of libpng, can be found at the PNG home
+page, .
+
+Most users will not have to modify the library significantly; advanced
+users may want to modify it more. All attempts were made to make it as
+complete as possible, while keeping the code easy to understand.
+Currently, this library only supports C. Support for other languages
+is being considered.
+
+Libpng has been designed to handle multiple sessions at one time,
+to be easily modifiable, to be portable to the vast majority of
+machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy
+to use. The ultimate goal of libpng is to promote the acceptance of
+the PNG file format in whatever way possible. While there is still
+work to be done (see the TODO file), libpng should cover the
+majority of the needs of its users.
+
+Libpng uses zlib for its compression and decompression of PNG files.
+Further information about zlib, and the latest version of zlib, can
+be found at the zlib home page, .
+The zlib compression utility is a general purpose utility that is
+useful for more than PNG files, and can be used without libpng.
+See the documentation delivered with zlib for more details.
+You can usually find the source files for the zlib utility wherever you
+find the libpng source files.
+
+Libpng is thread safe, provided the threads are using different
+instances of the structures. Each thread should have its own
+png_struct and png_info instances, and thus its own image.
+Libpng does not protect itself against two threads using the
+same instance of a structure.
+
+.SH II. Structures
+
+There are two main structures that are important to libpng, png_struct
+and png_info. The first, png_struct, is an internal structure that
+will not, for the most part, be used by a user except as the first
+variable passed to every libpng function call.
+
+The png_info structure is designed to provide information about the
+PNG file. At one time, the fields of png_info were intended to be
+directly accessible to the user. However, this tended to cause problems
+with applications using dynamically loaded libraries, and as a result
+a set of interface functions for png_info (the png_get_*() and png_set_*()
+functions) was developed. The fields of png_info are still available for
+older applications, but it is suggested that applications use the new
+interfaces if at all possible.
+
+Applications that do make direct access to the members of png_struct (except
+for png_ptr->jmpbuf) must be recompiled whenever the library is updated,
+and applications that make direct access to the members of png_info must
+be recompiled if they were compiled or loaded with libpng version 1.0.6,
+in which the members were in a different order. In version 1.0.7, the
+members of the png_info structure reverted to the old order, as they were
+in versions 0.97c through 1.0.5. Starting with version 2.0.0, both
+structures are going to be hidden, and the contents of the structures will
+only be accessible through the png_get/png_set functions.
+
+The png.h header file is an invaluable reference for programming with libpng.
+And while I'm on the topic, make sure you include the libpng header file:
+
+#include
+
+.SH III. Reading
+
+We'll now walk you through the possible functions to call when reading
+in a PNG file sequentially, briefly explaining the syntax and purpose
+of each one. See example.c and png.h for more detail. While
+progressive reading is covered in the next section, you will still
+need some of the functions discussed in this section to read a PNG
+file.
+
+.SS Setup
+
+You will want to do the I/O initialization(*) before you get into libpng,
+so if it doesn't work, you don't have much to undo. Of course, you
+will also want to insure that you are, in fact, dealing with a PNG
+file. Libpng provides a simple check to see if a file is a PNG file.
+To use it, pass in the first 1 to 8 bytes of the file to the function
+png_sig_cmp(), and it will return 0 (false) if the bytes match the
+corresponding bytes of the PNG signature, or nonzero (true) otherwise.
+Of course, the more bytes you pass in, the greater the accuracy of the
+prediction.
+
+If you are intending to keep the file pointer open for use in libpng,
+you must ensure you don't read more than 8 bytes from the beginning
+of the file, and you also have to make a call to png_set_sig_bytes_read()
+with the number of bytes you read from the beginning. Libpng will
+then only check the bytes (if any) that your program didn't read.
+
+(*): If you are not using the standard I/O functions, you will need
+to replace them with custom functions. See the discussion under
+Customizing libpng.
+
+
+ FILE *fp = fopen(file_name, "rb");
+ if (!fp)
+ {
+ return (ERROR);
+ }
+ fread(header, 1, number, fp);
+ is_png = !png_sig_cmp(header, 0, number);
+ if (!is_png)
+ {
+ return (NOT_PNG);
+ }
+
+
+Next, png_struct and png_info need to be allocated and initialized. In
+order to ensure that the size of these structures is correct even with a
+dynamically linked libpng, there are functions to initialize and
+allocate the structures. We also pass the library version, optional
+pointers to error handling functions, and a pointer to a data struct for
+use by the error functions, if necessary (the pointer and functions can
+be NULL if the default error handlers are to be used). See the section
+on Changes to Libpng below regarding the old initialization functions.
+The structure allocation functions quietly return NULL if they fail to
+create the structure, so your application should check for that.
+
+ png_structp png_ptr = png_create_read_struct
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
+ user_error_fn, user_warning_fn);
+ if (!png_ptr)
+ return (ERROR);
+
+ png_infop info_ptr = png_create_info_struct(png_ptr);
+ if (!info_ptr)
+ {
+ png_destroy_read_struct(&png_ptr,
+ (png_infopp)NULL, (png_infopp)NULL);
+ return (ERROR);
+ }
+
+ png_infop end_info = png_create_info_struct(png_ptr);
+ if (!end_info)
+ {
+ png_destroy_read_struct(&png_ptr, &info_ptr,
+ (png_infopp)NULL);
+ return (ERROR);
+ }
+
+If you want to use your own memory allocation routines,
+define PNG_USER_MEM_SUPPORTED and use
+png_create_read_struct_2() instead of png_create_read_struct():
+
+ png_structp png_ptr = png_create_read_struct_2
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
+ user_error_fn, user_warning_fn, (png_voidp)
+ user_mem_ptr, user_malloc_fn, user_free_fn);
+
+The error handling routines passed to png_create_read_struct()
+and the memory alloc/free routines passed to png_create_struct_2()
+are only necessary if you are not using the libpng supplied error
+handling and memory alloc/free functions.
+
+When libpng encounters an error, it expects to longjmp back
+to your routine. Therefore, you will need to call setjmp and pass
+your png_jmpbuf(png_ptr). If you read the file from different
+routines, you will need to update the jmpbuf field every time you enter
+a new routine that will call a png_*() function.
+
+See your documentation of setjmp/longjmp for your compiler for more
+information on setjmp/longjmp. See the discussion on libpng error
+handling in the Customizing Libpng section below for more information
+on the libpng error handling. If an error occurs, and libpng longjmp's
+back to your setjmp, you will want to call png_destroy_read_struct() to
+free any memory.
+
+ if (setjmp(png_jmpbuf(png_ptr)))
+ {
+ png_destroy_read_struct(&png_ptr, &info_ptr,
+ &end_info);
+ fclose(fp);
+ return (ERROR);
+ }
+
+If you would rather avoid the complexity of setjmp/longjmp issues,
+you can compile libpng with PNG_NO_SETJMP, in which case
+errors will result in a call to PNG_ABORT() which defaults to abort().
+
+You can #define PNG_ABORT() to a function that does something
+more useful than abort(), as long as your function does not
+return.
+
+Now you need to set up the input code. The default for libpng is to
+use the C function fread(). If you use this, you will need to pass a
+valid FILE * in the function png_init_io(). Be sure that the file is
+opened in binary mode. If you wish to handle reading data in another
+way, you need not call the png_init_io() function, but you must then
+implement the libpng I/O methods discussed in the Customizing Libpng
+section below.
+
+ png_init_io(png_ptr, fp);
+
+If you had previously opened the file and read any of the signature from
+the beginning in order to see if this was a PNG file, you need to let
+libpng know that there are some bytes missing from the start of the file.
+
+ png_set_sig_bytes(png_ptr, number);
+
+You can change the zlib compression buffer size to be used while
+reading compressed data with
+
+ png_set_compression_buffer_size(png_ptr, buffer_size);
+
+where the default size is 8192 bytes. Note that the buffer size
+is changed immediately and the buffer is reallocated immediately,
+instead of setting a flag to be acted upon later.
+
+.SS Setting up callback code
+
+You can set up a callback function to handle any unknown chunks in the
+input stream. You must supply the function
+
+ read_chunk_callback(png_ptr ptr,
+ png_unknown_chunkp chunk);
+ {
+ /* The unknown chunk structure contains your
+ chunk data, along with similar data for any other
+ unknown chunks: */
+
+ png_byte name[5];
+ png_byte *data;
+ png_size_t size;
+
+ /* Note that libpng has already taken care of
+ the CRC handling */
+
+ /* put your code here. Search for your chunk in the
+ unknown chunk structure, process it, and return one
+ of the following: */
+
+ return (-n); /* chunk had an error */
+ return (0); /* did not recognize */
+ return (n); /* success */
+ }
+
+(You can give your function another name that you like instead of
+"read_chunk_callback")
+
+To inform libpng about your function, use
+
+ png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr,
+ read_chunk_callback);
+
+This names not only the callback function, but also a user pointer that
+you can retrieve with
+
+ png_get_user_chunk_ptr(png_ptr);
+
+If you call the png_set_read_user_chunk_fn() function, then all unknown
+chunks will be saved when read, in case your callback function will need
+one or more of them. This behavior can be changed with the
+png_set_keep_unknown_chunks() function, described below.
+
+At this point, you can set up a callback function that will be
+called after each row has been read, which you can use to control
+a progress meter or the like. It's demonstrated in pngtest.c.
+You must supply a function
+
+ void read_row_callback(png_ptr ptr, png_uint_32 row,
+ int pass);
+ {
+ /* put your code here */
+ }
+
+(You can give it another name that you like instead of "read_row_callback")
+
+To inform libpng about your function, use
+
+ png_set_read_status_fn(png_ptr, read_row_callback);
+
+.SS Unknown-chunk handling
+
+Now you get to set the way the library processes unknown chunks in the
+input PNG stream. Both known and unknown chunks will be read. Normal
+behavior is that known chunks will be parsed into information in
+various info_ptr members while unknown chunks will be discarded. This
+behavior can be wasteful if your application will never use some known
+chunk types. To change this, you can call:
+
+ png_set_keep_unknown_chunks(png_ptr, keep,
+ chunk_list, num_chunks);
+ keep - 0: default unknown chunk handling
+ 1: ignore; do not keep
+ 2: keep only if safe-to-copy
+ 3: keep even if unsafe-to-copy
+ You can use these definitions:
+ PNG_HANDLE_CHUNK_AS_DEFAULT 0
+ PNG_HANDLE_CHUNK_NEVER 1
+ PNG_HANDLE_CHUNK_IF_SAFE 2
+ PNG_HANDLE_CHUNK_ALWAYS 3
+ chunk_list - list of chunks affected (a byte string,
+ five bytes per chunk, NULL or '\0' if
+ num_chunks is 0)
+ num_chunks - number of chunks affected; if 0, all
+ unknown chunks are affected. If nonzero,
+ only the chunks in the list are affected
+
+Unknown chunks declared in this way will be saved as raw data onto a
+list of png_unknown_chunk structures. If a chunk that is normally
+known to libpng is named in the list, it will be handled as unknown,
+according to the "keep" directive. If a chunk is named in successive
+instances of png_set_keep_unknown_chunks(), the final instance will
+take precedence. The IHDR and IEND chunks should not be named in
+chunk_list; if they are, libpng will process them normally anyway.
+
+Here is an example of the usage of png_set_keep_unknown_chunks(),
+where the private "vpAg" chunk will later be processed by a user chunk
+callback function:
+
+ png_byte vpAg[5]={118, 112, 65, 103, (png_byte) '\0'};
+
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ png_byte unused_chunks[]=
+ {
+ 104, 73, 83, 84, (png_byte) '\0', /* hIST */
+ 105, 84, 88, 116, (png_byte) '\0', /* iTXt */
+ 112, 67, 65, 76, (png_byte) '\0', /* pCAL */
+ 115, 67, 65, 76, (png_byte) '\0', /* sCAL */
+ 115, 80, 76, 84, (png_byte) '\0', /* sPLT */
+ 116, 73, 77, 69, (png_byte) '\0', /* tIME */
+ };
+ #endif
+
+ ...
+
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* ignore all unknown chunks: */
+ png_set_keep_unknown_chunks(read_ptr, 1, NULL, 0);
+ /* except for vpAg: */
+ png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
+ /* also ignore unused known chunks: */
+ png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
+ (int)sizeof(unused_chunks)/5);
+ #endif
+
+.SS User limits
+
+The PNG specification allows the width and height of an image to be as
+large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
+Since very few applications really need to process such large images,
+we have imposed an arbitrary 1-million limit on rows and columns.
+Larger images will be rejected immediately with a png_error() call. If
+you wish to override this limit, you can use
+
+ png_set_user_limits(png_ptr, width_max, height_max);
+
+to set your own limits, or use width_max = height_max = 0x7fffffffL
+to allow all valid dimensions (libpng may reject some very large images
+anyway because of potential buffer overflow conditions).
+
+You should put this statement after you create the PNG structure and
+before calling png_read_info(), png_read_png(), or png_process_data().
+If you need to retrieve the limits that are being applied, use
+
+ width_max = png_get_user_width_max(png_ptr);
+ height_max = png_get_user_height_max(png_ptr);
+
+The PNG specification sets no limit on the number of ancillary chunks
+allowed in a PNG datastream. You can impose a limit on the total number
+of sPLT, tEXt, iTXt, zTXt, and unknown chunks that will be stored, with
+
+ png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);
+
+where 0x7fffffffL means unlimited. You can retrieve this limit with
+
+ chunk_cache_max = png_get_chunk_cache_max(png_ptr);
+
+This limit also applies to the number of buffers that can be allocated
+by png_decompress_chunk() while decompressing iTXt, zTXt, and iCCP chunks.
+
+You can also set a limit on the amount of memory that a compressed chunk
+other than IDAT can occupy, with
+
+ png_set_chunk_malloc_max(png_ptr, user_chunk_malloc_max);
+
+and you can retrieve the limit with
+
+ chunk_malloc_max = png_get_chunk_malloc_max(png_ptr);
+
+Any chunks that would cause either of these limits to be exceeded will
+be ignored.
+
+.SS The high-level read interface
+
+At this point there are two ways to proceed; through the high-level
+read interface, or through a sequence of low-level read operations.
+You can use the high-level interface if (a) you are willing to read
+the entire image into memory, and (b) the input transformations
+you want to do are limited to the following set:
+
+ PNG_TRANSFORM_IDENTITY No transformation
+ PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to
+ 8 bits
+ PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel
+ PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit
+ samples to bytes
+ PNG_TRANSFORM_PACKSWAP Change order of packed
+ pixels to LSB first
+ PNG_TRANSFORM_EXPAND Perform set_expand()
+ PNG_TRANSFORM_INVERT_MONO Invert monochrome images
+ PNG_TRANSFORM_SHIFT Normalize pixels to the
+ sBIT depth
+ PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
+ to BGRA
+ PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
+ to AG
+ PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
+ to transparency
+ PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
+ PNG_TRANSFORM_GRAY_TO_RGB Expand grayscale samples
+ to RGB (or GA to RGBA)
+
+(This excludes setting a background color, doing gamma transformation,
+quantizing, and setting filler.) If this is the case, simply do this:
+
+ png_read_png(png_ptr, info_ptr, png_transforms, NULL)
+
+where png_transforms is an integer containing the bitwise OR of some
+set of transformation flags. This call is equivalent to png_read_info(),
+followed the set of transformations indicated by the transform mask,
+then png_read_image(), and finally png_read_end().
+
+(The final parameter of this call is not yet used. Someday it might point
+to transformation parameters required by some future input transform.)
+
+You must use png_transforms and not call any png_set_transform() functions
+when you use png_read_png().
+
+After you have called png_read_png(), you can retrieve the image data
+with
+
+ row_pointers = png_get_rows(png_ptr, info_ptr);
+
+where row_pointers is an array of pointers to the pixel data for each row:
+
+ png_bytep row_pointers[height];
+
+If you know your image size and pixel size ahead of time, you can allocate
+row_pointers prior to calling png_read_png() with
+
+ if (height > PNG_UINT_32_MAX/png_sizeof(png_byte))
+ png_error (png_ptr,
+ "Image is too tall to process in memory");
+ if (width > PNG_UINT_32_MAX/pixel_size)
+ png_error (png_ptr,
+ "Image is too wide to process in memory");
+ row_pointers = png_malloc(png_ptr,
+ height*png_sizeof(png_bytep));
+ for (int i=0; i) and
+png_get_(png_ptr, info_ptr, ...) functions return non-zero if the
+data has been read, or zero if it is missing. The parameters to the
+png_get_ are set directly if they are simple data types, or a
+pointer into the info_ptr is returned for any complex types.
+
+ png_get_PLTE(png_ptr, info_ptr, &palette,
+ &num_palette);
+ palette - the palette for the file
+ (array of png_color)
+ num_palette - number of entries in the palette
+
+ png_get_gAMA(png_ptr, info_ptr, &gamma);
+ gamma - the gamma the file is written
+ at (PNG_INFO_gAMA)
+
+ png_get_sRGB(png_ptr, info_ptr, &srgb_intent);
+ srgb_intent - the rendering intent (PNG_INFO_sRGB)
+ The presence of the sRGB chunk
+ means that the pixel data is in the
+ sRGB color space. This chunk also
+ implies specific values of gAMA and
+ cHRM.
+
+ png_get_iCCP(png_ptr, info_ptr, &name,
+ &compression_type, &profile, &proflen);
+ name - The profile name.
+ compression - The compression type; always
+ PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
+ You may give NULL to this argument to
+ ignore it.
+ profile - International Color Consortium color
+ profile data. May contain NULs.
+ proflen - length of profile data in bytes.
+
+ png_get_sBIT(png_ptr, info_ptr, &sig_bit);
+ sig_bit - the number of significant bits for
+ (PNG_INFO_sBIT) each of the gray,
+ red, green, and blue channels,
+ whichever are appropriate for the
+ given color type (png_color_16)
+
+ png_get_tRNS(png_ptr, info_ptr, &trans_alpha,
+ &num_trans, &trans_color);
+ trans_alpha - array of alpha (transparency)
+ entries for palette (PNG_INFO_tRNS)
+ trans_color - graylevel or color sample values of
+ the single transparent color for
+ non-paletted images (PNG_INFO_tRNS)
+ num_trans - number of transparent entries
+ (PNG_INFO_tRNS)
+
+ png_get_hIST(png_ptr, info_ptr, &hist);
+ (PNG_INFO_hIST)
+ hist - histogram of palette (array of
+ png_uint_16)
+
+ png_get_tIME(png_ptr, info_ptr, &mod_time);
+ mod_time - time image was last modified
+ (PNG_VALID_tIME)
+
+ png_get_bKGD(png_ptr, info_ptr, &background);
+ background - background color (PNG_VALID_bKGD)
+ valid 16-bit red, green and blue
+ values, regardless of color_type
+
+ num_comments = png_get_text(png_ptr, info_ptr,
+ &text_ptr, &num_text);
+ num_comments - number of comments
+ text_ptr - array of png_text holding image
+ comments
+ text_ptr[i].compression - type of compression used
+ on "text" PNG_TEXT_COMPRESSION_NONE
+ PNG_TEXT_COMPRESSION_zTXt
+ PNG_ITXT_COMPRESSION_NONE
+ PNG_ITXT_COMPRESSION_zTXt
+ text_ptr[i].key - keyword for comment. Must contain
+ 1-79 characters.
+ text_ptr[i].text - text comments for current
+ keyword. Can be empty.
+ text_ptr[i].text_length - length of text string,
+ after decompression, 0 for iTXt
+ text_ptr[i].itxt_length - length of itxt string,
+ after decompression, 0 for tEXt/zTXt
+ text_ptr[i].lang - language of comment (empty
+ string for unknown).
+ text_ptr[i].lang_key - keyword in UTF-8
+ (empty string for unknown).
+ Note that the itxt_length, lang, and lang_key
+ members of the text_ptr structure only exist
+ when the library is built with iTXt chunk support.
+
+ num_text - number of comments (same as
+ num_comments; you can put NULL here
+ to avoid the duplication)
+ Note while png_set_text() will accept text, language,
+ and translated keywords that can be NULL pointers, the
+ structure returned by png_get_text will always contain
+ regular zero-terminated C strings. They might be
+ empty strings but they will never be NULL pointers.
+
+ num_spalettes = png_get_sPLT(png_ptr, info_ptr,
+ &palette_ptr);
+ palette_ptr - array of palette structures holding
+ contents of one or more sPLT chunks
+ read.
+ num_spalettes - number of sPLT chunks read.
+
+ png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
+ &unit_type);
+ offset_x - positive offset from the left edge
+ of the screen
+ offset_y - positive offset from the top edge
+ of the screen
+ unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
+
+ png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
+ &unit_type);
+ res_x - pixels/unit physical resolution in
+ x direction
+ res_y - pixels/unit physical resolution in
+ x direction
+ unit_type - PNG_RESOLUTION_UNKNOWN,
+ PNG_RESOLUTION_METER
+
+ png_get_sCAL(png_ptr, info_ptr, &unit, &width,
+ &height)
+ unit - physical scale units (an integer)
+ width - width of a pixel in physical scale units
+ height - height of a pixel in physical scale units
+ (width and height are doubles)
+
+ png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
+ &height)
+ unit - physical scale units (an integer)
+ width - width of a pixel in physical scale units
+ height - height of a pixel in physical scale units
+ (width and height are strings like "2.54")
+
+ num_unknown_chunks = png_get_unknown_chunks(png_ptr,
+ info_ptr, &unknowns)
+ unknowns - array of png_unknown_chunk
+ structures holding unknown chunks
+ unknowns[i].name - name of unknown chunk
+ unknowns[i].data - data of unknown chunk
+ unknowns[i].size - size of unknown chunk's data
+ unknowns[i].location - position of chunk in file
+
+ The value of "i" corresponds to the order in which the
+ chunks were read from the PNG file or inserted with the
+ png_set_unknown_chunks() function.
+
+The data from the pHYs chunk can be retrieved in several convenient
+forms:
+
+ res_x = png_get_x_pixels_per_meter(png_ptr,
+ info_ptr)
+ res_y = png_get_y_pixels_per_meter(png_ptr,
+ info_ptr)
+ res_x_and_y = png_get_pixels_per_meter(png_ptr,
+ info_ptr)
+ res_x = png_get_x_pixels_per_inch(png_ptr,
+ info_ptr)
+ res_y = png_get_y_pixels_per_inch(png_ptr,
+ info_ptr)
+ res_x_and_y = png_get_pixels_per_inch(png_ptr,
+ info_ptr)
+ aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
+ info_ptr)
+
+ (Each of these returns 0 [signifying "unknown"] if
+ the data is not present or if res_x is 0;
+ res_x_and_y is 0 if res_x != res_y)
+
+The data from the oFFs chunk can be retrieved in several convenient
+forms:
+
+ x_offset = png_get_x_offset_microns(png_ptr, info_ptr);
+ y_offset = png_get_y_offset_microns(png_ptr, info_ptr);
+ x_offset = png_get_x_offset_inches(png_ptr, info_ptr);
+ y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
+
+ (Each of these returns 0 [signifying "unknown" if both
+ x and y are 0] if the data is not present or if the
+ chunk is present but the unit is the pixel)
+
+For more information, see the png_info definition in png.h and the
+PNG specification for chunk contents. Be careful with trusting
+rowbytes, as some of the transformations could increase the space
+needed to hold a row (expand, filler, gray_to_rgb, etc.).
+See png_read_update_info(), below.
+
+A quick word about text_ptr and num_text. PNG stores comments in
+keyword/text pairs, one pair per chunk, with no limit on the number
+of text chunks, and a 2^31 byte limit on their size. While there are
+suggested keywords, there is no requirement to restrict the use to these
+strings. It is strongly suggested that keywords and text be sensible
+to humans (that's the point), so don't use abbreviations. Non-printing
+symbols are not allowed. See the PNG specification for more details.
+There is also no requirement to have text after the keyword.
+
+Keywords should be limited to 79 Latin-1 characters without leading or
+trailing spaces, but non-consecutive spaces are allowed within the
+keyword. It is possible to have the same keyword any number of times.
+The text_ptr is an array of png_text structures, each holding a
+pointer to a language string, a pointer to a keyword and a pointer to
+a text string. The text string, language code, and translated
+keyword may be empty or NULL pointers. The keyword/text
+pairs are put into the array in the order that they are received.
+However, some or all of the text chunks may be after the image, so, to
+make sure you have read all the text chunks, don't mess with these
+until after you read the stuff after the image. This will be
+mentioned again below in the discussion that goes with png_read_end().
+
+.SS Input transformations
+
+After you've read the header information, you can set up the library
+to handle any special transformations of the image data. The various
+ways to transform the data will be described in the order that they
+should occur. This is important, as some of these change the color
+type and/or bit depth of the data, and some others only work on
+certain color types and bit depths. Even though each transformation
+checks to see if it has data that it can do something with, you should
+make sure to only enable a transformation if it will be valid for the
+data. For example, don't swap red and blue on grayscale data.
+
+The colors used for the background and transparency values should be
+supplied in the same format/depth as the current image data. They
+are stored in the same format/depth as the image data in a bKGD or tRNS
+chunk, so this is what libpng expects for this data. The colors are
+transformed to keep in sync with the image data when an application
+calls the png_read_update_info() routine (see below).
+
+Data will be decoded into the supplied row buffers packed into bytes
+unless the library has been told to transform it into another format.
+For example, 4 bit/pixel paletted or grayscale data will be returned
+2 pixels/byte with the leftmost pixel in the high-order bits of the
+byte, unless png_set_packing() is called. 8-bit RGB data will be stored
+in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
+is called to insert filler bytes, either before or after each RGB triplet.
+16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
+byte of the color value first, unless png_set_strip_16() is called to
+transform it to regular RGB RGB triplets, or png_set_filler() or
+png_set_add alpha() is called to insert filler bytes, either before or
+after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
+be modified with
+png_set_filler(), png_set_add_alpha(), or png_set_strip_16().
+
+The following code transforms grayscale images of less than 8 to 8 bits,
+changes paletted images to RGB, and adds a full alpha channel if there is
+transparency information in a tRNS chunk. This is most useful on
+grayscale images with bit depths of 2 or 4 or if there is a multiple-image
+viewing application that wishes to treat all images in the same way.
+
+ if (color_type == PNG_COLOR_TYPE_PALETTE)
+ png_set_palette_to_rgb(png_ptr);
+
+ if (color_type == PNG_COLOR_TYPE_GRAY &&
+ bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr);
+
+ if (png_get_valid(png_ptr, info_ptr,
+ PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr);
+
+These three functions are actually aliases for png_set_expand(), added
+in libpng version 1.0.4, with the function names expanded to improve code
+readability. In some future version they may actually do different
+things.
+
+As of libpng version 1.2.9, png_set_expand_gray_1_2_4_to_8() was
+added. It expands the sample depth without changing tRNS to alpha.
+
+As of libpng version 1.4.3, not all possible expansions are supported.
+
+In the following table, the 01 means grayscale with depth<8, 31 means
+indexed with depth<8, other numerals represent the color type, "T" means
+the tRNS chunk is present, A means an alpha channel is present, and O
+means tRNS or alpha is present but all pixels in the image are opaque.
+
+ FROM 01 31 0 0T 0O 2 2T 2O 3 3T 3O 4A 4O 6A 6O
+ TO
+ 01 -
+ 31 -
+ 0 1 -
+ 0T -
+ 0O -
+ 2 GX -
+ 2T -
+ 2O -
+ 3 1 -
+ 3T -
+ 3O -
+ 4A T -
+ 4O -
+ 6A GX TX TX -
+ 6O GX TX -
+
+Within the matrix,
+ "-" means the transformation is not supported.
+ "X" means the transformation is obtained by png_set_expand().
+ "1" means the transformation is obtained by
+ png_set_expand_gray_1_2_4_to_8
+ "G" means the transformation is obtained by
+ png_set_gray_to_rgb().
+ "P" means the transformation is obtained by
+ png_set_expand_palette_to_rgb().
+ "T" means the transformation is obtained by
+ png_set_tRNS_to_alpha().
+
+PNG can have files with 16 bits per channel. If you only can handle
+8 bits per channel, this will strip the pixels down to 8 bit.
+
+ if (bit_depth == 16)
+ png_set_strip_16(png_ptr);
+
+If, for some reason, you don't need the alpha channel on an image,
+and you want to remove it rather than combining it with the background
+(but the image author certainly had in mind that you *would* combine
+it with the background, so that's what you should probably do):
+
+ if (color_type & PNG_COLOR_MASK_ALPHA)
+ png_set_strip_alpha(png_ptr);
+
+In PNG files, the alpha channel in an image
+is the level of opacity. If you need the alpha channel in an image to
+be the level of transparency instead of opacity, you can invert the
+alpha channel (or the tRNS chunk data) after it's read, so that 0 is
+fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit
+images) is fully transparent, with
+
+ png_set_invert_alpha(png_ptr);
+
+PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
+they can, resulting in, for example, 8 pixels per byte for 1 bit
+files. This code expands to 1 pixel per byte without changing the
+values of the pixels:
+
+ if (bit_depth < 8)
+ png_set_packing(png_ptr);
+
+PNG files have possible bit depths of 1, 2, 4, 8, and 16. All pixels
+stored in a PNG image have been "scaled" or "shifted" up to the next
+higher possible bit depth (e.g. from 5 bits/sample in the range [0,31]
+to 8 bits/sample in the range [0, 255]). However, it is also possible
+to convert the PNG pixel data back to the original bit depth of the
+image. This call reduces the pixels back down to the original bit depth:
+
+ png_color_8p sig_bit;
+
+ if (png_get_sBIT(png_ptr, info_ptr, &sig_bit))
+ png_set_shift(png_ptr, sig_bit);
+
+PNG files store 3-color pixels in red, green, blue order. This code
+changes the storage of the pixels to blue, green, red:
+
+ if (color_type == PNG_COLOR_TYPE_RGB ||
+ color_type == PNG_COLOR_TYPE_RGB_ALPHA)
+ png_set_bgr(png_ptr);
+
+PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
+into 4 or 8 bytes for windowing systems that need them in this format:
+
+ if (color_type == PNG_COLOR_TYPE_RGB)
+ png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
+
+where "filler" is the 8 or 16-bit number to fill with, and the location is
+either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
+you want the filler before the RGB or after. This transformation
+does not affect images that already have full alpha channels. To add an
+opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
+will generate RGBA pixels.
+
+Note that png_set_filler() does not change the color type. If you want
+to do that, you can add a true alpha channel with
+
+ if (color_type == PNG_COLOR_TYPE_RGB ||
+ color_type == PNG_COLOR_TYPE_GRAY)
+ png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
+
+where "filler" contains the alpha value to assign to each pixel.
+This function was added in libpng-1.2.7.
+
+If you are reading an image with an alpha channel, and you need the
+data as ARGB instead of the normal PNG format RGBA:
+
+ if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
+ png_set_swap_alpha(png_ptr);
+
+For some uses, you may want a grayscale image to be represented as
+RGB. This code will do that conversion:
+
+ if (color_type == PNG_COLOR_TYPE_GRAY ||
+ color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+ png_set_gray_to_rgb(png_ptr);
+
+Conversely, you can convert an RGB or RGBA image to grayscale or grayscale
+with alpha.
+
+ if (color_type == PNG_COLOR_TYPE_RGB ||
+ color_type == PNG_COLOR_TYPE_RGB_ALPHA)
+ png_set_rgb_to_gray_fixed(png_ptr, error_action,
+ int red_weight, int green_weight);
+
+ error_action = 1: silently do the conversion
+ error_action = 2: issue a warning if the original
+ image has any pixel where
+ red != green or red != blue
+ error_action = 3: issue an error and abort the
+ conversion if the original
+ image has any pixel where
+ red != green or red != blue
+
+ red_weight: weight of red component times 100000
+ green_weight: weight of green component times 100000
+ If either weight is negative, default
+ weights (21268, 71514) are used.
+
+If you have set error_action = 1 or 2, you can
+later check whether the image really was gray, after processing
+the image rows, with the png_get_rgb_to_gray_status(png_ptr) function.
+It will return a png_byte that is zero if the image was gray or
+1 if there were any non-gray pixels. bKGD and sBIT data
+will be silently converted to grayscale, using the green channel
+data, regardless of the error_action setting.
+
+With red_weight+green_weight<=100000,
+the normalized graylevel is computed:
+
+ int rw = red_weight * 65536;
+ int gw = green_weight * 65536;
+ int bw = 65536 - (rw + gw);
+ gray = (rw*red + gw*green + bw*blue)/65536;
+
+The default values approximate those recommended in the Charles
+Poynton's Color FAQ,
+Copyright (c) 1998-01-04 Charles Poynton
+
+ Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
+
+Libpng approximates this with
+
+ Y = 0.21268 * R + 0.7151 * G + 0.07217 * B
+
+which can be expressed with integers as
+
+ Y = (6969 * R + 23434 * G + 2365 * B)/32768
+
+The calculation is done in a linear colorspace, if the image gamma
+is known.
+
+If you have a grayscale and you are using png_set_expand_depth(),
+png_set_expand(), or png_set_gray_to_rgb to change to truecolor or to
+a higher bit-depth, you must either supply the background color as a gray
+value at the original file bit-depth (need_expand = 1) or else supply the
+background color as an RGB triplet at the final, expanded bit depth
+(need_expand = 0). Similarly, if you are reading a paletted image, you
+must either supply the background color as a palette index (need_expand = 1)
+or as an RGB triplet that may or may not be in the palette (need_expand = 0).
+
+ png_color_16 my_background;
+ png_color_16p image_background;
+
+ if (png_get_bKGD(png_ptr, info_ptr, &image_background))
+ png_set_background(png_ptr, image_background,
+ PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
+ else
+ png_set_background(png_ptr, &my_background,
+ PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
+
+The png_set_background() function tells libpng to composite images
+with alpha or simple transparency against the supplied background
+color. If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid),
+you may use this color, or supply another color more suitable for
+the current display (e.g., the background color from a web page). You
+need to tell libpng whether the color is in the gamma space of the
+display (PNG_BACKGROUND_GAMMA_SCREEN for colors you supply), the file
+(PNG_BACKGROUND_GAMMA_FILE for colors from the bKGD chunk), or one
+that is neither of these gammas (PNG_BACKGROUND_GAMMA_UNIQUE - I don't
+know why anyone would use this, but it's here).
+
+To properly display PNG images on any kind of system, the application needs
+to know what the display gamma is. Ideally, the user will know this, and
+the application will allow them to set it. One method of allowing the user
+to set the display gamma separately for each system is to check for a
+SCREEN_GAMMA or DISPLAY_GAMMA environment variable, which will hopefully be
+correctly set.
+
+Note that display_gamma is the overall gamma correction required to produce
+pleasing results, which depends on the lighting conditions in the surrounding
+environment. In a dim or brightly lit room, no compensation other than
+the physical gamma exponent of the monitor is needed, while in a dark room
+a slightly smaller exponent is better.
+
+ double gamma, screen_gamma;
+
+ if (/* We have a user-defined screen
+ gamma value */)
+ {
+ screen_gamma = user_defined_screen_gamma;
+ }
+ /* One way that applications can share the same
+ screen gamma value */
+ else if ((gamma_str = getenv("SCREEN_GAMMA"))
+ != NULL)
+ {
+ screen_gamma = (double)atof(gamma_str);
+ }
+ /* If we don't have another value */
+ else
+ {
+ screen_gamma = 2.2; /* A good guess for a
+ PC monitor in a bright office or a dim room */
+ screen_gamma = 2.0; /* A good guess for a
+ PC monitor in a dark room */
+ screen_gamma = 1.7 or 1.0; /* A good
+ guess for Mac systems */
+ }
+
+The png_set_gamma() function handles gamma transformations of the data.
+Pass both the file gamma and the current screen_gamma. If the file does
+not have a gamma value, you can pass one anyway if you have an idea what
+it is (usually 0.45455 is a good guess for GIF images on PCs). Note
+that file gammas are inverted from screen gammas. See the discussions
+on gamma in the PNG specification for an excellent description of what
+gamma is, and why all applications should support it. It is strongly
+recommended that PNG viewers support gamma correction.
+
+ if (png_get_gAMA(png_ptr, info_ptr, &gamma))
+ png_set_gamma(png_ptr, screen_gamma, gamma);
+ else
+ png_set_gamma(png_ptr, screen_gamma, 0.45455);
+
+If you need to reduce an RGB file to a paletted file, or if a paletted
+file has more entries then will fit on your screen, png_set_quantize()
+will do that. Note that this is a simple match dither that merely
+finds the closest color available. This should work fairly well with
+optimized palettes, and fairly badly with linear color cubes. If you
+pass a palette that is larger then maximum_colors, the file will
+reduce the number of colors in the palette so it will fit into
+maximum_colors. If there is a histogram, it will use it to make
+more intelligent choices when reducing the palette. If there is no
+histogram, it may not do as good a job.
+
+ if (color_type & PNG_COLOR_MASK_COLOR)
+ {
+ if (png_get_valid(png_ptr, info_ptr,
+ PNG_INFO_PLTE))
+ {
+ png_uint_16p histogram = NULL;
+
+ png_get_hIST(png_ptr, info_ptr,
+ &histogram);
+ png_set_quantize(png_ptr, palette, num_palette,
+ max_screen_colors, histogram, 1);
+ }
+ else
+ {
+ png_color std_color_cube[MAX_SCREEN_COLORS] =
+ { ... colors ... };
+
+ png_set_quantize(png_ptr, std_color_cube,
+ MAX_SCREEN_COLORS, MAX_SCREEN_COLORS,
+ NULL,0);
+ }
+ }
+
+PNG files describe monochrome as black being zero and white being one.
+The following code will reverse this (make black be one and white be
+zero):
+
+ if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY)
+ png_set_invert_mono(png_ptr);
+
+This function can also be used to invert grayscale and gray-alpha images:
+
+ if (color_type == PNG_COLOR_TYPE_GRAY ||
+ color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+ png_set_invert_mono(png_ptr);
+
+PNG files store 16 bit pixels in network byte order (big-endian,
+ie. most significant bits first). This code changes the storage to the
+other way (little-endian, i.e. least significant bits first, the
+way PCs store them):
+
+ if (bit_depth == 16)
+ png_set_swap(png_ptr);
+
+If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
+need to change the order the pixels are packed into bytes, you can use:
+
+ if (bit_depth < 8)
+ png_set_packswap(png_ptr);
+
+Finally, you can write your own transformation function if none of
+the existing ones meets your needs. This is done by setting a callback
+with
+
+ png_set_read_user_transform_fn(png_ptr,
+ read_transform_fn);
+
+You must supply the function
+
+ void read_transform_fn(png_ptr ptr, row_info_ptr
+ row_info, png_bytep data)
+
+See pngtest.c for a working example. Your function will be called
+after all of the other transformations have been processed.
+
+You can also set up a pointer to a user structure for use by your
+callback function, and you can inform libpng that your transform
+function will change the number of channels or bit depth with the
+function
+
+ png_set_user_transform_info(png_ptr, user_ptr,
+ user_depth, user_channels);
+
+The user's application, not libpng, is responsible for allocating and
+freeing any memory required for the user structure.
+
+You can retrieve the pointer via the function
+png_get_user_transform_ptr(). For example:
+
+ voidp read_user_transform_ptr =
+ png_get_user_transform_ptr(png_ptr);
+
+The last thing to handle is interlacing; this is covered in detail below,
+but you must call the function here if you want libpng to handle expansion
+of the interlaced image.
+
+ number_of_passes = png_set_interlace_handling(png_ptr);
+
+After setting the transformations, libpng can update your png_info
+structure to reflect any transformations you've requested with this
+call. This is most useful to update the info structure's rowbytes
+field so you can use it to allocate your image memory. This function
+will also update your palette with the correct screen_gamma and
+background if these have been given with the calls above.
+
+ png_read_update_info(png_ptr, info_ptr);
+
+After you call png_read_update_info(), you can allocate any
+memory you need to hold the image. The row data is simply
+raw byte data for all forms of images. As the actual allocation
+varies among applications, no example will be given. If you
+are allocating one large chunk, you will need to build an
+array of pointers to each row, as it will be needed for some
+of the functions below.
+
+.SS Reading image data
+
+After you've allocated memory, you can read the image data.
+The simplest way to do this is in one function call. If you are
+allocating enough memory to hold the whole image, you can just
+call png_read_image() and libpng will read in all the image data
+and put it in the memory area supplied. You will need to pass in
+an array of pointers to each row.
+
+This function automatically handles interlacing, so you don't need
+to call png_set_interlace_handling() or call this function multiple
+times, or any of that other stuff necessary with png_read_rows().
+
+ png_read_image(png_ptr, row_pointers);
+
+where row_pointers is:
+
+ png_bytep row_pointers[height];
+
+You can point to void or char or whatever you use for pixels.
+
+If you don't want to read in the whole image at once, you can
+use png_read_rows() instead. If there is no interlacing (check
+interlace_type == PNG_INTERLACE_NONE), this is simple:
+
+ png_read_rows(png_ptr, row_pointers, NULL,
+ number_of_rows);
+
+where row_pointers is the same as in the png_read_image() call.
+
+If you are doing this just one row at a time, you can do this with
+a single row_pointer instead of an array of row_pointers:
+
+ png_bytep row_pointer = row;
+ png_read_row(png_ptr, row_pointer, NULL);
+
+If the file is interlaced (interlace_type != 0 in the IHDR chunk), things
+get somewhat harder. The only current (PNG Specification version 1.2)
+interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7)
+is a somewhat complicated 2D interlace scheme, known as Adam7, that
+breaks down an image into seven smaller images of varying size, based
+on an 8x8 grid.
+
+libpng can fill out those images or it can give them to you "as is".
+If you want them filled out, there are two ways to do that. The one
+mentioned in the PNG specification is to expand each pixel to cover
+those pixels that have not been read yet (the "rectangle" method).
+This results in a blocky image for the first pass, which gradually
+smooths out as more pixels are read. The other method is the "sparkle"
+method, where pixels are drawn only in their final locations, with the
+rest of the image remaining whatever colors they were initialized to
+before the start of the read. The first method usually looks better,
+but tends to be slower, as there are more pixels to put in the rows.
+
+If you don't want libpng to handle the interlacing details, just call
+png_read_rows() seven times to read in all seven images. Each of the
+images is a valid image by itself, or they can all be combined on an
+8x8 grid to form a single image (although if you intend to combine them
+you would be far better off using the libpng interlace handling).
+
+The first pass will return an image 1/8 as wide as the entire image
+(every 8th column starting in column 0) and 1/8 as high as the original
+(every 8th row starting in row 0), the second will be 1/8 as wide
+(starting in column 4) and 1/8 as high (also starting in row 0). The
+third pass will be 1/4 as wide (every 4th pixel starting in column 0) and
+1/8 as high (every 8th row starting in row 4), and the fourth pass will
+be 1/4 as wide and 1/4 as high (every 4th column starting in column 2,
+and every 4th row starting in row 0). The fifth pass will return an
+image 1/2 as wide, and 1/4 as high (starting at column 0 and row 2),
+while the sixth pass will be 1/2 as wide and 1/2 as high as the original
+(starting in column 1 and row 0). The seventh and final pass will be as
+wide as the original, and 1/2 as high, containing all of the odd
+numbered scanlines. Phew!
+
+If you want libpng to expand the images, call this before calling
+png_start_read_image() or png_read_update_info():
+
+ if (interlace_type == PNG_INTERLACE_ADAM7)
+ number_of_passes
+ = png_set_interlace_handling(png_ptr);
+
+This will return the number of passes needed. Currently, this
+is seven, but may change if another interlace type is added.
+This function can be called even if the file is not interlaced,
+where it will return one pass.
+
+If you are not going to display the image after each pass, but are
+going to wait until the entire image is read in, use the sparkle
+effect. This effect is faster and the end result of either method
+is exactly the same. If you are planning on displaying the image
+after each pass, the "rectangle" effect is generally considered the
+better looking one.
+
+If you only want the "sparkle" effect, just call png_read_rows() as
+normal, with the third parameter NULL. Make sure you make pass over
+the image number_of_passes times, and you don't change the data in the
+rows between calls. You can change the locations of the data, just
+not the data. Each pass only writes the pixels appropriate for that
+pass, and assumes the data from previous passes is still valid.
+
+ png_read_rows(png_ptr, row_pointers, NULL,
+ number_of_rows);
+
+If you only want the first effect (the rectangles), do the same as
+before except pass the row buffer in the third parameter, and leave
+the second parameter NULL.
+
+ png_read_rows(png_ptr, NULL, row_pointers,
+ number_of_rows);
+
+.SS Finishing a sequential read
+
+After you are finished reading the image through the
+low-level interface, you can finish reading the file. If you are
+interested in comments or time, which may be stored either before or
+after the image data, you should pass the separate png_info struct if
+you want to keep the comments from before and after the image
+separate. If you are not interested, you can pass NULL.
+
+ png_read_end(png_ptr, end_info);
+
+When you are done, you can free all memory allocated by libpng like this:
+
+ png_destroy_read_struct(&png_ptr, &info_ptr,
+ &end_info);
+
+It is also possible to individually free the info_ptr members that
+point to libpng-allocated storage with the following function:
+
+ png_free_data(png_ptr, info_ptr, mask, seq)
+ mask - identifies data to be freed, a mask
+ containing the bitwise OR of one or
+ more of
+ PNG_FREE_PLTE, PNG_FREE_TRNS,
+ PNG_FREE_HIST, PNG_FREE_ICCP,
+ PNG_FREE_PCAL, PNG_FREE_ROWS,
+ PNG_FREE_SCAL, PNG_FREE_SPLT,
+ PNG_FREE_TEXT, PNG_FREE_UNKN,
+ or simply PNG_FREE_ALL
+ seq - sequence number of item to be freed
+ (-1 for all items)
+
+This function may be safely called when the relevant storage has
+already been freed, or has not yet been allocated, or was allocated
+by the user and not by libpng, and will in those cases do nothing.
+The "seq" parameter is ignored if only one item of the selected data
+type, such as PLTE, is allowed. If "seq" is not -1, and multiple items
+are allowed for the data type identified in the mask, such as text or
+sPLT, only the n'th item in the structure is freed, where n is "seq".
+
+The default behavior is only to free data that was allocated internally
+by libpng. This can be changed, so that libpng will not free the data,
+or so that it will free data that was allocated by the user with png_malloc()
+or png_zalloc() and passed in via a png_set_*() function, with
+
+ png_data_freer(png_ptr, info_ptr, freer, mask)
+ mask - which data elements are affected
+ same choices as in png_free_data()
+ freer - one of
+ PNG_DESTROY_WILL_FREE_DATA
+ PNG_SET_WILL_FREE_DATA
+ PNG_USER_WILL_FREE_DATA
+
+This function only affects data that has already been allocated.
+You can call this function after reading the PNG data but before calling
+any png_set_*() functions, to control whether the user or the png_set_*()
+function is responsible for freeing any existing data that might be present,
+and again after the png_set_*() functions to control whether the user
+or png_destroy_*() is supposed to free the data. When the user assumes
+responsibility for libpng-allocated data, the application must use
+png_free() to free it, and when the user transfers responsibility to libpng
+for data that the user has allocated, the user must have used png_malloc()
+or png_zalloc() to allocate it.
+
+If you allocated your row_pointers in a single block, as suggested above in
+the description of the high level read interface, you must not transfer
+responsibility for freeing it to the png_set_rows or png_read_destroy function,
+because they would also try to free the individual row_pointers[i].
+
+If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
+separately, do not transfer responsibility for freeing text_ptr to libpng,
+because when libpng fills a png_text structure it combines these members with
+the key member, and png_free_data() will free only text_ptr.key. Similarly,
+if you transfer responsibility for free'ing text_ptr from libpng to your
+application, your application must not separately free those members.
+
+The png_free_data() function will turn off the "valid" flag for anything
+it frees. If you need to turn the flag off for a chunk that was freed by
+your application instead of by libpng, you can use
+
+ png_set_invalid(png_ptr, info_ptr, mask);
+ mask - identifies the chunks to be made invalid,
+ containing the bitwise OR of one or
+ more of
+ PNG_INFO_gAMA, PNG_INFO_sBIT,
+ PNG_INFO_cHRM, PNG_INFO_PLTE,
+ PNG_INFO_tRNS, PNG_INFO_bKGD,
+ PNG_INFO_hIST, PNG_INFO_pHYs,
+ PNG_INFO_oFFs, PNG_INFO_tIME,
+ PNG_INFO_pCAL, PNG_INFO_sRGB,
+ PNG_INFO_iCCP, PNG_INFO_sPLT,
+ PNG_INFO_sCAL, PNG_INFO_IDAT
+
+For a more compact example of reading a PNG image, see the file example.c.
+
+.SS Reading PNG files progressively
+
+The progressive reader is slightly different then the non-progressive
+reader. Instead of calling png_read_info(), png_read_rows(), and
+png_read_end(), you make one call to png_process_data(), which calls
+callbacks when it has the info, a row, or the end of the image. You
+set up these callbacks with png_set_progressive_read_fn(). You don't
+have to worry about the input/output functions of libpng, as you are
+giving the library the data directly in png_process_data(). I will
+assume that you have read the section on reading PNG files above,
+so I will only highlight the differences (although I will show
+all of the code).
+
+png_structp png_ptr;
+png_infop info_ptr;
+
+ /* An example code fragment of how you would
+ initialize the progressive reader in your
+ application. */
+ int
+ initialize_png_reader()
+ {
+ png_ptr = png_create_read_struct
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
+ user_error_fn, user_warning_fn);
+ if (!png_ptr)
+ return (ERROR);
+ info_ptr = png_create_info_struct(png_ptr);
+ if (!info_ptr)
+ {
+ png_destroy_read_struct(&png_ptr, (png_infopp)NULL,
+ (png_infopp)NULL);
+ return (ERROR);
+ }
+
+ if (setjmp(png_jmpbuf(png_ptr)))
+ {
+ png_destroy_read_struct(&png_ptr, &info_ptr,
+ (png_infopp)NULL);
+ return (ERROR);
+ }
+
+ /* This one's new. You can provide functions
+ to be called when the header info is valid,
+ when each row is completed, and when the image
+ is finished. If you aren't using all functions,
+ you can specify NULL parameters. Even when all
+ three functions are NULL, you need to call
+ png_set_progressive_read_fn(). You can use
+ any struct as the user_ptr (cast to a void pointer
+ for the function call), and retrieve the pointer
+ from inside the callbacks using the function
+
+ png_get_progressive_ptr(png_ptr);
+
+ which will return a void pointer, which you have
+ to cast appropriately.
+ */
+ png_set_progressive_read_fn(png_ptr, (void *)user_ptr,
+ info_callback, row_callback, end_callback);
+
+ return 0;
+ }
+
+ /* A code fragment that you call as you receive blocks
+ of data */
+ int
+ process_data(png_bytep buffer, png_uint_32 length)
+ {
+ if (setjmp(png_jmpbuf(png_ptr)))
+ {
+ png_destroy_read_struct(&png_ptr, &info_ptr,
+ (png_infopp)NULL);
+ return (ERROR);
+ }
+
+ /* This one's new also. Simply give it a chunk
+ of data from the file stream (in order, of
+ course). On machines with segmented memory
+ models machines, don't give it any more than
+ 64K. The library seems to run fine with sizes
+ of 4K. Although you can give it much less if
+ necessary (I assume you can give it chunks of
+ 1 byte, I haven't tried less then 256 bytes
+ yet). When this function returns, you may
+ want to display any rows that were generated
+ in the row callback if you don't already do
+ so there.
+ */
+ png_process_data(png_ptr, info_ptr, buffer, length);
+ return 0;
+ }
+
+ /* This function is called (as set by
+ png_set_progressive_read_fn() above) when enough data
+ has been supplied so all of the header has been
+ read.
+ */
+ void
+ info_callback(png_structp png_ptr, png_infop info)
+ {
+ /* Do any setup here, including setting any of
+ the transformations mentioned in the Reading
+ PNG files section. For now, you _must_ call
+ either png_start_read_image() or
+ png_read_update_info() after all the
+ transformations are set (even if you don't set
+ any). You may start getting rows before
+ png_process_data() returns, so this is your
+ last chance to prepare for that.
+ */
+ }
+
+ /* This function is called when each row of image
+ data is complete */
+ void
+ row_callback(png_structp png_ptr, png_bytep new_row,
+ png_uint_32 row_num, int pass)
+ {
+ /* If the image is interlaced, and you turned
+ on the interlace handler, this function will
+ be called for every row in every pass. Some
+ of these rows will not be changed from the
+ previous pass. When the row is not changed,
+ the new_row variable will be NULL. The rows
+ and passes are called in order, so you don't
+ really need the row_num and pass, but I'm
+ supplying them because it may make your life
+ easier.
+
+ For the non-NULL rows of interlaced images,
+ you must call png_progressive_combine_row()
+ passing in the row and the old row. You can
+ call this function for NULL rows (it will just
+ return) and for non-interlaced images (it just
+ does the memcpy for you) if it will make the
+ code easier. Thus, you can just do this for
+ all cases:
+ */
+
+ png_progressive_combine_row(png_ptr, old_row,
+ new_row);
+
+ /* where old_row is what was displayed for
+ previously for the row. Note that the first
+ pass (pass == 0, really) will completely cover
+ the old row, so the rows do not have to be
+ initialized. After the first pass (and only
+ for interlaced images), you will have to pass
+ the current row, and the function will combine
+ the old row and the new row.
+ */
+ }
+
+ void
+ end_callback(png_structp png_ptr, png_infop info)
+ {
+ /* This function is called after the whole image
+ has been read, including any chunks after the
+ image (up to and including the IEND). You
+ will usually have the same info chunk as you
+ had in the header, although some data may have
+ been added to the comments and time fields.
+
+ Most people won't do much here, perhaps setting
+ a flag that marks the image as finished.
+ */
+ }
+
+
+
+.SH IV. Writing
+
+Much of this is very similar to reading. However, everything of
+importance is repeated here, so you won't have to constantly look
+back up in the reading section to understand writing.
+
+.SS Setup
+
+You will want to do the I/O initialization before you get into libpng,
+so if it doesn't work, you don't have anything to undo. If you are not
+using the standard I/O functions, you will need to replace them with
+custom writing functions. See the discussion under Customizing libpng.
+
+ FILE *fp = fopen(file_name, "wb");
+ if (!fp)
+ {
+ return (ERROR);
+ }
+
+Next, png_struct and png_info need to be allocated and initialized.
+As these can be both relatively large, you may not want to store these
+on the stack, unless you have stack space to spare. Of course, you
+will want to check if they return NULL. If you are also reading,
+you won't want to name your read structure and your write structure
+both "png_ptr"; you can call them anything you like, such as
+"read_ptr" and "write_ptr". Look at pngtest.c, for example.
+
+ png_structp png_ptr = png_create_write_struct
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
+ user_error_fn, user_warning_fn);
+ if (!png_ptr)
+ return (ERROR);
+
+ png_infop info_ptr = png_create_info_struct(png_ptr);
+ if (!info_ptr)
+ {
+ png_destroy_write_struct(&png_ptr,
+ (png_infopp)NULL);
+ return (ERROR);
+ }
+
+If you want to use your own memory allocation routines,
+define PNG_USER_MEM_SUPPORTED and use
+png_create_write_struct_2() instead of png_create_write_struct():
+
+ png_structp png_ptr = png_create_write_struct_2
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
+ user_error_fn, user_warning_fn, (png_voidp)
+ user_mem_ptr, user_malloc_fn, user_free_fn);
+
+After you have these structures, you will need to set up the
+error handling. When libpng encounters an error, it expects to
+longjmp() back to your routine. Therefore, you will need to call
+setjmp() and pass the png_jmpbuf(png_ptr). If you
+write the file from different routines, you will need to update
+the png_jmpbuf(png_ptr) every time you enter a new routine that will
+call a png_*() function. See your documentation of setjmp/longjmp
+for your compiler for more information on setjmp/longjmp. See
+the discussion on libpng error handling in the Customizing Libpng
+section below for more information on the libpng error handling.
+
+ if (setjmp(png_jmpbuf(png_ptr)))
+ {
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+ fclose(fp);
+ return (ERROR);
+ }
+ ...
+ return;
+
+If you would rather avoid the complexity of setjmp/longjmp issues,
+you can compile libpng with PNG_NO_SETJMP, in which case
+errors will result in a call to PNG_ABORT() which defaults to abort().
+
+You can #define PNG_ABORT() to a function that does something
+more useful than abort(), as long as your function does not
+return.
+
+Now you need to set up the output code. The default for libpng is to
+use the C function fwrite(). If you use this, you will need to pass a
+valid FILE * in the function png_init_io(). Be sure that the file is
+opened in binary mode. Again, if you wish to handle writing data in
+another way, see the discussion on libpng I/O handling in the Customizing
+Libpng section below.
+
+ png_init_io(png_ptr, fp);
+
+If you are embedding your PNG into a datastream such as MNG, and don't
+want libpng to write the 8-byte signature, or if you have already
+written the signature in your application, use
+
+ png_set_sig_bytes(png_ptr, 8);
+
+to inform libpng that it should not write a signature.
+
+.SS Write callbacks
+
+At this point, you can set up a callback function that will be
+called after each row has been written, which you can use to control
+a progress meter or the like. It's demonstrated in pngtest.c.
+You must supply a function
+
+ void write_row_callback(png_ptr, png_uint_32 row,
+ int pass);
+ {
+ /* put your code here */
+ }
+
+(You can give it another name that you like instead of "write_row_callback")
+
+To inform libpng about your function, use
+
+ png_set_write_status_fn(png_ptr, write_row_callback);
+
+You now have the option of modifying how the compression library will
+run. The following functions are mainly for testing, but may be useful
+in some cases, like if you need to write PNG files extremely fast and
+are willing to give up some compression, or if you want to get the
+maximum possible compression at the expense of slower writing. If you
+have no special needs in this area, let the library do what it wants by
+not calling this function at all, as it has been tuned to deliver a good
+speed/compression ratio. The second parameter to png_set_filter() is
+the filter method, for which the only valid values are 0 (as of the
+July 1999 PNG specification, version 1.2) or 64 (if you are writing
+a PNG datastream that is to be embedded in a MNG datastream). The third
+parameter is a flag that indicates which filter type(s) are to be tested
+for each scanline. See the PNG specification for details on the specific
+filter types.
+
+
+ /* turn on or off filtering, and/or choose
+ specific filters. You can use either a single
+ PNG_FILTER_VALUE_NAME or the bitwise OR of one
+ or more PNG_FILTER_NAME masks. */
+ png_set_filter(png_ptr, 0,
+ PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE |
+ PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB |
+ PNG_FILTER_UP | PNG_FILTER_VALUE_UP |
+ PNG_FILTER_AVG | PNG_FILTER_VALUE_AVG |
+ PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH|
+ PNG_ALL_FILTERS);
+
+If an application
+wants to start and stop using particular filters during compression,
+it should start out with all of the filters (to ensure that the previous
+row of pixels will be stored in case it's needed later), and then add
+and remove them after the start of compression.
+
+If you are writing a PNG datastream that is to be embedded in a MNG
+datastream, the second parameter can be either 0 or 64.
+
+The png_set_compression_*() functions interface to the zlib compression
+library, and should mostly be ignored unless you really know what you are
+doing. The only generally useful call is png_set_compression_level()
+which changes how much time zlib spends on trying to compress the image
+data. See the Compression Library (zlib.h and algorithm.txt, distributed
+with zlib) for details on the compression levels.
+
+ /* set the zlib compression level */
+ png_set_compression_level(png_ptr,
+ Z_BEST_COMPRESSION);
+
+ /* set other zlib parameters */
+ png_set_compression_mem_level(png_ptr, 8);
+ png_set_compression_strategy(png_ptr,
+ Z_DEFAULT_STRATEGY);
+ png_set_compression_window_bits(png_ptr, 15);
+ png_set_compression_method(png_ptr, 8);
+ png_set_compression_buffer_size(png_ptr, 8192)
+
+extern PNG_EXPORT(void,png_set_zbuf_size)
+
+.SS Setting the contents of info for output
+
+You now need to fill in the png_info structure with all the data you
+wish to write before the actual image. Note that the only thing you
+are allowed to write after the image is the text chunks and the time
+chunk (as of PNG Specification 1.2, anyway). See png_write_end() and
+the latest PNG specification for more information on that. If you
+wish to write them before the image, fill them in now, and flag that
+data as being valid. If you want to wait until after the data, don't
+fill them until png_write_end(). For all the fields in png_info and
+their data types, see png.h. For explanations of what the fields
+contain, see the PNG specification.
+
+Some of the more important parts of the png_info are:
+
+ png_set_IHDR(png_ptr, info_ptr, width, height,
+ bit_depth, color_type, interlace_type,
+ compression_type, filter_method)
+ width - holds the width of the image
+ in pixels (up to 2^31).
+ height - holds the height of the image
+ in pixels (up to 2^31).
+ bit_depth - holds the bit depth of one of the
+ image channels.
+ (valid values are 1, 2, 4, 8, 16
+ and depend also on the
+ color_type. See also significant
+ bits (sBIT) below).
+ color_type - describes which color/alpha
+ channels are present.
+ PNG_COLOR_TYPE_GRAY
+ (bit depths 1, 2, 4, 8, 16)
+ PNG_COLOR_TYPE_GRAY_ALPHA
+ (bit depths 8, 16)
+ PNG_COLOR_TYPE_PALETTE
+ (bit depths 1, 2, 4, 8)
+ PNG_COLOR_TYPE_RGB
+ (bit_depths 8, 16)
+ PNG_COLOR_TYPE_RGB_ALPHA
+ (bit_depths 8, 16)
+
+ PNG_COLOR_MASK_PALETTE
+ PNG_COLOR_MASK_COLOR
+ PNG_COLOR_MASK_ALPHA
+
+ interlace_type - PNG_INTERLACE_NONE or
+ PNG_INTERLACE_ADAM7
+ compression_type - (must be
+ PNG_COMPRESSION_TYPE_DEFAULT)
+ filter_method - (must be PNG_FILTER_TYPE_DEFAULT
+ or, if you are writing a PNG to
+ be embedded in a MNG datastream,
+ can also be
+ PNG_INTRAPIXEL_DIFFERENCING)
+
+If you call png_set_IHDR(), the call must appear before any of the
+other png_set_*() functions, because they might require access to some of
+the IHDR settings. The remaining png_set_*() functions can be called
+in any order.
+
+If you wish, you can reset the compression_type, interlace_type, or
+filter_method later by calling png_set_IHDR() again; if you do this, the
+width, height, bit_depth, and color_type must be the same in each call.
+
+ png_set_PLTE(png_ptr, info_ptr, palette,
+ num_palette);
+ palette - the palette for the file
+ (array of png_color)
+ num_palette - number of entries in the palette
+
+ png_set_gAMA(png_ptr, info_ptr, gamma);
+ gamma - the gamma the image was created
+ at (PNG_INFO_gAMA)
+
+ png_set_sRGB(png_ptr, info_ptr, srgb_intent);
+ srgb_intent - the rendering intent
+ (PNG_INFO_sRGB) The presence of
+ the sRGB chunk means that the pixel
+ data is in the sRGB color space.
+ This chunk also implies specific
+ values of gAMA and cHRM. Rendering
+ intent is the CSS-1 property that
+ has been defined by the International
+ Color Consortium
+ (http://www.color.org).
+ It can be one of
+ PNG_sRGB_INTENT_SATURATION,
+ PNG_sRGB_INTENT_PERCEPTUAL,
+ PNG_sRGB_INTENT_ABSOLUTE, or
+ PNG_sRGB_INTENT_RELATIVE.
+
+
+ png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr,
+ srgb_intent);
+ srgb_intent - the rendering intent
+ (PNG_INFO_sRGB) The presence of the
+ sRGB chunk means that the pixel
+ data is in the sRGB color space.
+ This function also causes gAMA and
+ cHRM chunks with the specific values
+ that are consistent with sRGB to be
+ written.
+
+ png_set_iCCP(png_ptr, info_ptr, name, compression_type,
+ profile, proflen);
+ name - The profile name.
+ compression - The compression type; always
+ PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
+ You may give NULL to this argument to
+ ignore it.
+ profile - International Color Consortium color
+ profile data. May contain NULs.
+ proflen - length of profile data in bytes.
+
+ png_set_sBIT(png_ptr, info_ptr, sig_bit);
+ sig_bit - the number of significant bits for
+ (PNG_INFO_sBIT) each of the gray, red,
+ green, and blue channels, whichever are
+ appropriate for the given color type
+ (png_color_16)
+
+ png_set_tRNS(png_ptr, info_ptr, trans_alpha,
+ num_trans, trans_color);
+ trans_alpha - array of alpha (transparency)
+ entries for palette (PNG_INFO_tRNS)
+ trans_color - graylevel or color sample values
+ (in order red, green, blue) of the
+ single transparent color for
+ non-paletted images (PNG_INFO_tRNS)
+ num_trans - number of transparent entries
+ (PNG_INFO_tRNS)
+
+ png_set_hIST(png_ptr, info_ptr, hist);
+ (PNG_INFO_hIST)
+ hist - histogram of palette (array of
+ png_uint_16)
+
+ png_set_tIME(png_ptr, info_ptr, mod_time);
+ mod_time - time image was last modified
+ (PNG_VALID_tIME)
+
+ png_set_bKGD(png_ptr, info_ptr, background);
+ background - background color (PNG_VALID_bKGD)
+
+ png_set_text(png_ptr, info_ptr, text_ptr, num_text);
+ text_ptr - array of png_text holding image
+ comments
+ text_ptr[i].compression - type of compression used
+ on "text" PNG_TEXT_COMPRESSION_NONE
+ PNG_TEXT_COMPRESSION_zTXt
+ PNG_ITXT_COMPRESSION_NONE
+ PNG_ITXT_COMPRESSION_zTXt
+ text_ptr[i].key - keyword for comment. Must contain
+ 1-79 characters.
+ text_ptr[i].text - text comments for current
+ keyword. Can be NULL or empty.
+ text_ptr[i].text_length - length of text string,
+ after decompression, 0 for iTXt
+ text_ptr[i].itxt_length - length of itxt string,
+ after decompression, 0 for tEXt/zTXt
+ text_ptr[i].lang - language of comment (NULL or
+ empty for unknown).
+ text_ptr[i].translated_keyword - keyword in UTF-8 (NULL
+ or empty for unknown).
+ Note that the itxt_length, lang, and lang_key
+ members of the text_ptr structure only exist
+ when the library is built with iTXt chunk support.
+
+ num_text - number of comments
+
+ png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
+ num_spalettes);
+ palette_ptr - array of png_sPLT_struct structures
+ to be added to the list of palettes
+ in the info structure.
+ num_spalettes - number of palette structures to be
+ added.
+
+ png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
+ unit_type);
+ offset_x - positive offset from the left
+ edge of the screen
+ offset_y - positive offset from the top
+ edge of the screen
+ unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
+
+ png_set_pHYs(png_ptr, info_ptr, res_x, res_y,
+ unit_type);
+ res_x - pixels/unit physical resolution
+ in x direction
+ res_y - pixels/unit physical resolution
+ in y direction
+ unit_type - PNG_RESOLUTION_UNKNOWN,
+ PNG_RESOLUTION_METER
+
+ png_set_sCAL(png_ptr, info_ptr, unit, width, height)
+ unit - physical scale units (an integer)
+ width - width of a pixel in physical scale units
+ height - height of a pixel in physical scale units
+ (width and height are doubles)
+
+ png_set_sCAL_s(png_ptr, info_ptr, unit, width, height)
+ unit - physical scale units (an integer)
+ width - width of a pixel in physical scale units
+ height - height of a pixel in physical scale units
+ (width and height are strings like "2.54")
+
+ png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
+ num_unknowns)
+ unknowns - array of png_unknown_chunk
+ structures holding unknown chunks
+ unknowns[i].name - name of unknown chunk
+ unknowns[i].data - data of unknown chunk
+ unknowns[i].size - size of unknown chunk's data
+ unknowns[i].location - position to write chunk in file
+ 0: do not write chunk
+ PNG_HAVE_IHDR: before PLTE
+ PNG_HAVE_PLTE: before IDAT
+ PNG_AFTER_IDAT: after IDAT
+
+The "location" member is set automatically according to
+what part of the output file has already been written.
+You can change its value after calling png_set_unknown_chunks()
+as demonstrated in pngtest.c. Within each of the "locations",
+the chunks are sequenced according to their position in the
+structure (that is, the value of "i", which is the order in which
+the chunk was either read from the input file or defined with
+png_set_unknown_chunks).
+
+A quick word about text and num_text. text is an array of png_text
+structures. num_text is the number of valid structures in the array.
+Each png_text structure holds a language code, a keyword, a text value,
+and a compression type.
+
+The compression types have the same valid numbers as the compression
+types of the image data. Currently, the only valid number is zero.
+However, you can store text either compressed or uncompressed, unlike
+images, which always have to be compressed. So if you don't want the
+text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE.
+Because tEXt and zTXt chunks don't have a language field, if you
+specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt
+any language code or translated keyword will not be written out.
+
+Until text gets around 1000 bytes, it is not worth compressing it.
+After the text has been written out to the file, the compression type
+is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR,
+so that it isn't written out again at the end (in case you are calling
+png_write_end() with the same struct.
+
+The keywords that are given in the PNG Specification are:
+
+ Title Short (one line) title or
+ caption for image
+ Author Name of image's creator
+ Description Description of image (possibly long)
+ Copyright Copyright notice
+ Creation Time Time of original image creation
+ (usually RFC 1123 format, see below)
+ Software Software used to create the image
+ Disclaimer Legal disclaimer
+ Warning Warning of nature of content
+ Source Device used to create the image
+ Comment Miscellaneous comment; conversion
+ from other image format
+
+The keyword-text pairs work like this. Keywords should be short
+simple descriptions of what the comment is about. Some typical
+keywords are found in the PNG specification, as is some recommendations
+on keywords. You can repeat keywords in a file. You can even write
+some text before the image and some after. For example, you may want
+to put a description of the image before the image, but leave the
+disclaimer until after, so viewers working over modem connections
+don't have to wait for the disclaimer to go over the modem before
+they start seeing the image. Finally, keywords should be full
+words, not abbreviations. Keywords and text are in the ISO 8859-1
+(Latin-1) character set (a superset of regular ASCII) and can not
+contain NUL characters, and should not contain control or other
+unprintable characters. To make the comments widely readable, stick
+with basic ASCII, and avoid machine specific character set extensions
+like the IBM-PC character set. The keyword must be present, but
+you can leave off the text string on non-compressed pairs.
+Compressed pairs must have a text string, as only the text string
+is compressed anyway, so the compression would be meaningless.
+
+PNG supports modification time via the png_time structure. Two
+conversion routines are provided, png_convert_from_time_t() for
+time_t and png_convert_from_struct_tm() for struct tm. The
+time_t routine uses gmtime(). You don't have to use either of
+these, but if you wish to fill in the png_time structure directly,
+you should provide the time in universal time (GMT) if possible
+instead of your local time. Note that the year number is the full
+year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and
+that months start with 1.
+
+If you want to store the time of the original image creation, you should
+use a plain tEXt chunk with the "Creation Time" keyword. This is
+necessary because the "creation time" of a PNG image is somewhat vague,
+depending on whether you mean the PNG file, the time the image was
+created in a non-PNG format, a still photo from which the image was
+scanned, or possibly the subject matter itself. In order to facilitate
+machine-readable dates, it is recommended that the "Creation Time"
+tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
+although this isn't a requirement. Unlike the tIME chunk, the
+"Creation Time" tEXt chunk is not expected to be automatically changed
+by the software. To facilitate the use of RFC 1123 dates, a function
+png_convert_to_rfc1123(png_timep) is provided to convert from PNG
+time to an RFC 1123 format string.
+
+.SS Writing unknown chunks
+
+You can use the png_set_unknown_chunks function to queue up chunks
+for writing. You give it a chunk name, raw data, and a size; that's
+all there is to it. The chunks will be written by the next following
+png_write_info_before_PLTE, png_write_info, or png_write_end function.
+Any chunks previously read into the info structure's unknown-chunk
+list will also be written out in a sequence that satisfies the PNG
+specification's ordering rules.
+
+.SS The high-level write interface
+
+At this point there are two ways to proceed; through the high-level
+write interface, or through a sequence of low-level write operations.
+You can use the high-level interface if your image data is present
+in the info structure. All defined output
+transformations are permitted, enabled by the following masks.
+
+ PNG_TRANSFORM_IDENTITY No transformation
+ PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples
+ PNG_TRANSFORM_PACKSWAP Change order of packed
+ pixels to LSB first
+ PNG_TRANSFORM_INVERT_MONO Invert monochrome images
+ PNG_TRANSFORM_SHIFT Normalize pixels to the
+ sBIT depth
+ PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
+ to BGRA
+ PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
+ to AG
+ PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
+ to transparency
+ PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
+ PNG_TRANSFORM_STRIP_FILLER Strip out filler
+ bytes (deprecated).
+ PNG_TRANSFORM_STRIP_FILLER_BEFORE Strip out leading
+ filler bytes
+ PNG_TRANSFORM_STRIP_FILLER_AFTER Strip out trailing
+ filler bytes
+
+If you have valid image data in the info structure (you can use
+png_set_rows() to put image data in the info structure), simply do this:
+
+ png_write_png(png_ptr, info_ptr, png_transforms, NULL)
+
+where png_transforms is an integer containing the bitwise OR of some set of
+transformation flags. This call is equivalent to png_write_info(),
+followed the set of transformations indicated by the transform mask,
+then png_write_image(), and finally png_write_end().
+
+(The final parameter of this call is not yet used. Someday it might point
+to transformation parameters required by some future output transform.)
+
+You must use png_transforms and not call any png_set_transform() functions
+when you use png_write_png().
+
+.SS The low-level write interface
+
+If you are going the low-level route instead, you are now ready to
+write all the file information up to the actual image data. You do
+this with a call to png_write_info().
+
+ png_write_info(png_ptr, info_ptr);
+
+Note that there is one transformation you may need to do before
+png_write_info(). In PNG files, the alpha channel in an image is the
+level of opacity. If your data is supplied as a level of transparency,
+you can invert the alpha channel before you write it, so that 0 is
+fully transparent and 255 (in 8-bit or paletted images) or 65535
+(in 16-bit images) is fully opaque, with
+
+ png_set_invert_alpha(png_ptr);
+
+This must appear before png_write_info() instead of later with the
+other transformations because in the case of paletted images the tRNS
+chunk data has to be inverted before the tRNS chunk is written. If
+your image is not a paletted image, the tRNS data (which in such cases
+represents a single color to be rendered as transparent) won't need to
+be changed, and you can safely do this transformation after your
+png_write_info() call.
+
+If you need to write a private chunk that you want to appear before
+the PLTE chunk when PLTE is present, you can write the PNG info in
+two steps, and insert code to write your own chunk between them:
+
+ png_write_info_before_PLTE(png_ptr, info_ptr);
+ png_set_unknown_chunks(png_ptr, info_ptr, ...);
+ png_write_info(png_ptr, info_ptr);
+
+After you've written the file information, you can set up the library
+to handle any special transformations of the image data. The various
+ways to transform the data will be described in the order that they
+should occur. This is important, as some of these change the color
+type and/or bit depth of the data, and some others only work on
+certain color types and bit depths. Even though each transformation
+checks to see if it has data that it can do something with, you should
+make sure to only enable a transformation if it will be valid for the
+data. For example, don't swap red and blue on grayscale data.
+
+PNG files store RGB pixels packed into 3 or 6 bytes. This code tells
+the library to strip input data that has 4 or 8 bytes per pixel down
+to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2
+bytes per pixel).
+
+ png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
+
+where the 0 is unused, and the location is either PNG_FILLER_BEFORE or
+PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel
+is stored XRGB or RGBX.
+
+PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
+they can, resulting in, for example, 8 pixels per byte for 1 bit files.
+If the data is supplied at 1 pixel per byte, use this code, which will
+correctly pack the pixels into a single byte:
+
+ png_set_packing(png_ptr);
+
+PNG files reduce possible bit depths to 1, 2, 4, 8, and 16. If your
+data is of another bit depth, you can write an sBIT chunk into the
+file so that decoders can recover the original data if desired.
+
+ /* Set the true bit depth of the image data */
+ if (color_type & PNG_COLOR_MASK_COLOR)
+ {
+ sig_bit.red = true_bit_depth;
+ sig_bit.green = true_bit_depth;
+ sig_bit.blue = true_bit_depth;
+ }
+ else
+ {
+ sig_bit.gray = true_bit_depth;
+ }
+ if (color_type & PNG_COLOR_MASK_ALPHA)
+ {
+ sig_bit.alpha = true_bit_depth;
+ }
+
+ png_set_sBIT(png_ptr, info_ptr, &sig_bit);
+
+If the data is stored in the row buffer in a bit depth other than
+one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG),
+this will scale the values to appear to be the correct bit depth as
+is required by PNG.
+
+ png_set_shift(png_ptr, &sig_bit);
+
+PNG files store 16 bit pixels in network byte order (big-endian,
+ie. most significant bits first). This code would be used if they are
+supplied the other way (little-endian, i.e. least significant bits
+first, the way PCs store them):
+
+ if (bit_depth > 8)
+ png_set_swap(png_ptr);
+
+If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
+need to change the order the pixels are packed into bytes, you can use:
+
+ if (bit_depth < 8)
+ png_set_packswap(png_ptr);
+
+PNG files store 3 color pixels in red, green, blue order. This code
+would be used if they are supplied as blue, green, red:
+
+ png_set_bgr(png_ptr);
+
+PNG files describe monochrome as black being zero and white being
+one. This code would be used if the pixels are supplied with this reversed
+(black being one and white being zero):
+
+ png_set_invert_mono(png_ptr);
+
+Finally, you can write your own transformation function if none of
+the existing ones meets your needs. This is done by setting a callback
+with
+
+ png_set_write_user_transform_fn(png_ptr,
+ write_transform_fn);
+
+You must supply the function
+
+ void write_transform_fn(png_ptr ptr, row_info_ptr
+ row_info, png_bytep data)
+
+See pngtest.c for a working example. Your function will be called
+before any of the other transformations are processed.
+
+You can also set up a pointer to a user structure for use by your
+callback function.
+
+ png_set_user_transform_info(png_ptr, user_ptr, 0, 0);
+
+The user_channels and user_depth parameters of this function are ignored
+when writing; you can set them to zero as shown.
+
+You can retrieve the pointer via the function png_get_user_transform_ptr().
+For example:
+
+ voidp write_user_transform_ptr =
+ png_get_user_transform_ptr(png_ptr);
+
+It is possible to have libpng flush any pending output, either manually,
+or automatically after a certain number of lines have been written. To
+flush the output stream a single time call:
+
+ png_write_flush(png_ptr);
+
+and to have libpng flush the output stream periodically after a certain
+number of scanlines have been written, call:
+
+ png_set_flush(png_ptr, nrows);
+
+Note that the distance between rows is from the last time png_write_flush()
+was called, or the first row of the image if it has never been called.
+So if you write 50 lines, and then png_set_flush 25, it will flush the
+output on the next scanline, and every 25 lines thereafter, unless
+png_write_flush() is called before 25 more lines have been written.
+If nrows is too small (less than about 10 lines for a 640 pixel wide
+RGB image) the image compression may decrease noticeably (although this
+may be acceptable for real-time applications). Infrequent flushing will
+only degrade the compression performance by a few percent over images
+that do not use flushing.
+
+.SS Writing the image data
+
+That's it for the transformations. Now you can write the image data.
+The simplest way to do this is in one function call. If you have the
+whole image in memory, you can just call png_write_image() and libpng
+will write the image. You will need to pass in an array of pointers to
+each row. This function automatically handles interlacing, so you don't
+need to call png_set_interlace_handling() or call this function multiple
+times, or any of that other stuff necessary with png_write_rows().
+
+ png_write_image(png_ptr, row_pointers);
+
+where row_pointers is:
+
+ png_byte *row_pointers[height];
+
+You can point to void or char or whatever you use for pixels.
+
+If you don't want to write the whole image at once, you can
+use png_write_rows() instead. If the file is not interlaced,
+this is simple:
+
+ png_write_rows(png_ptr, row_pointers,
+ number_of_rows);
+
+row_pointers is the same as in the png_write_image() call.
+
+If you are just writing one row at a time, you can do this with
+a single row_pointer instead of an array of row_pointers:
+
+ png_bytep row_pointer = row;
+
+ png_write_row(png_ptr, row_pointer);
+
+When the file is interlaced, things can get a good deal more complicated.
+The only currently (as of the PNG Specification version 1.2, dated July
+1999) defined interlacing scheme for PNG files is the "Adam7" interlace
+scheme, that breaks down an image into seven smaller images of varying
+size. libpng will build these images for you, or you can do them
+yourself. If you want to build them yourself, see the PNG specification
+for details of which pixels to write when.
+
+If you don't want libpng to handle the interlacing details, just
+use png_set_interlace_handling() and call png_write_rows() the
+correct number of times to write all seven sub-images.
+
+If you want libpng to build the sub-images, call this before you start
+writing any rows:
+
+ number_of_passes =
+ png_set_interlace_handling(png_ptr);
+
+This will return the number of passes needed. Currently, this is seven,
+but may change if another interlace type is added.
+
+Then write the complete image number_of_passes times.
+
+ png_write_rows(png_ptr, row_pointers,
+ number_of_rows);
+
+As some of these rows are not used, and thus return immediately, you may
+want to read about interlacing in the PNG specification, and only update
+the rows that are actually used.
+
+.SS Finishing a sequential write
+
+After you are finished writing the image, you should finish writing
+the file. If you are interested in writing comments or time, you should
+pass an appropriately filled png_info pointer. If you are not interested,
+you can pass NULL.
+
+ png_write_end(png_ptr, info_ptr);
+
+When you are done, you can free all memory used by libpng like this:
+
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+
+It is also possible to individually free the info_ptr members that
+point to libpng-allocated storage with the following function:
+
+ png_free_data(png_ptr, info_ptr, mask, seq)
+ mask - identifies data to be freed, a mask
+ containing the bitwise OR of one or
+ more of
+ PNG_FREE_PLTE, PNG_FREE_TRNS,
+ PNG_FREE_HIST, PNG_FREE_ICCP,
+ PNG_FREE_PCAL, PNG_FREE_ROWS,
+ PNG_FREE_SCAL, PNG_FREE_SPLT,
+ PNG_FREE_TEXT, PNG_FREE_UNKN,
+ or simply PNG_FREE_ALL
+ seq - sequence number of item to be freed
+ (-1 for all items)
+
+This function may be safely called when the relevant storage has
+already been freed, or has not yet been allocated, or was allocated
+by the user and not by libpng, and will in those cases do nothing.
+The "seq" parameter is ignored if only one item of the selected data
+type, such as PLTE, is allowed. If "seq" is not -1, and multiple items
+are allowed for the data type identified in the mask, such as text or
+sPLT, only the n'th item in the structure is freed, where n is "seq".
+
+If you allocated data such as a palette that you passed in to libpng
+with png_set_*, you must not free it until just before the call to
+png_destroy_write_struct().
+
+The default behavior is only to free data that was allocated internally
+by libpng. This can be changed, so that libpng will not free the data,
+or so that it will free data that was allocated by the user with png_malloc()
+or png_zalloc() and passed in via a png_set_*() function, with
+
+ png_data_freer(png_ptr, info_ptr, freer, mask)
+ mask - which data elements are affected
+ same choices as in png_free_data()
+ freer - one of
+ PNG_DESTROY_WILL_FREE_DATA
+ PNG_SET_WILL_FREE_DATA
+ PNG_USER_WILL_FREE_DATA
+
+For example, to transfer responsibility for some data from a read structure
+to a write structure, you could use
+
+ png_data_freer(read_ptr, read_info_ptr,
+ PNG_USER_WILL_FREE_DATA,
+ PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
+ png_data_freer(write_ptr, write_info_ptr,
+ PNG_DESTROY_WILL_FREE_DATA,
+ PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
+
+thereby briefly reassigning responsibility for freeing to the user but
+immediately afterwards reassigning it once more to the write_destroy
+function. Having done this, it would then be safe to destroy the read
+structure and continue to use the PLTE, tRNS, and hIST data in the write
+structure.
+
+This function only affects data that has already been allocated.
+You can call this function before calling after the png_set_*() functions
+to control whether the user or png_destroy_*() is supposed to free the data.
+When the user assumes responsibility for libpng-allocated data, the
+application must use
+png_free() to free it, and when the user transfers responsibility to libpng
+for data that the user has allocated, the user must have used png_malloc()
+or png_zalloc() to allocate it.
+
+If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
+separately, do not transfer responsibility for freeing text_ptr to libpng,
+because when libpng fills a png_text structure it combines these members with
+the key member, and png_free_data() will free only text_ptr.key. Similarly,
+if you transfer responsibility for free'ing text_ptr from libpng to your
+application, your application must not separately free those members.
+For a more compact example of writing a PNG image, see the file example.c.
+
+.SH V. Modifying/Customizing libpng:
+
+There are two issues here. The first is changing how libpng does
+standard things like memory allocation, input/output, and error handling.
+The second deals with more complicated things like adding new chunks,
+adding new transformations, and generally changing how libpng works.
+Both of those are compile-time issues; that is, they are generally
+determined at the time the code is written, and there is rarely a need
+to provide the user with a means of changing them.
+
+Memory allocation, input/output, and error handling
+
+All of the memory allocation, input/output, and error handling in libpng
+goes through callbacks that are user-settable. The default routines are
+in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change
+these functions, call the appropriate png_set_*_fn() function.
+
+Memory allocation is done through the functions png_malloc(), png_calloc(),
+and png_free(). These currently just call the standard C functions.
+png_calloc() calls png_malloc() and then png_memset() to clear the newly
+allocated memory to zero. If your pointers can't access more then 64K
+at a time, you will want to set MAXSEG_64K in zlib.h. Since it is
+unlikely that the method of handling memory allocation on a platform
+will change between applications, these functions must be modified in
+the library at compile time. If you prefer to use a different method
+of allocating and freeing data, you can use png_create_read_struct_2() or
+png_create_write_struct_2() to register your own functions as described
+above. These functions also provide a void pointer that can be retrieved
+via
+
+ mem_ptr=png_get_mem_ptr(png_ptr);
+
+Your replacement memory functions must have prototypes as follows:
+
+ png_voidp malloc_fn(png_structp png_ptr,
+ png_alloc_size_t size);
+ void free_fn(png_structp png_ptr, png_voidp ptr);
+
+Your malloc_fn() must return NULL in case of failure. The png_malloc()
+function will normally call png_error() if it receives a NULL from the
+system memory allocator or from your replacement malloc_fn().
+
+Your free_fn() will never be called with a NULL ptr, since libpng's
+png_free() checks for NULL before calling free_fn().
+
+Input/Output in libpng is done through png_read() and png_write(),
+which currently just call fread() and fwrite(). The FILE * is stored in
+png_struct and is initialized via png_init_io(). If you wish to change
+the method of I/O, the library supplies callbacks that you can set
+through the function png_set_read_fn() and png_set_write_fn() at run
+time, instead of calling the png_init_io() function. These functions
+also provide a void pointer that can be retrieved via the function
+png_get_io_ptr(). For example:
+
+ png_set_read_fn(png_structp read_ptr,
+ voidp read_io_ptr, png_rw_ptr read_data_fn)
+
+ png_set_write_fn(png_structp write_ptr,
+ voidp write_io_ptr, png_rw_ptr write_data_fn,
+ png_flush_ptr output_flush_fn);
+
+ voidp read_io_ptr = png_get_io_ptr(read_ptr);
+ voidp write_io_ptr = png_get_io_ptr(write_ptr);
+
+The replacement I/O functions must have prototypes as follows:
+
+ void user_read_data(png_structp png_ptr,
+ png_bytep data, png_size_t length);
+ void user_write_data(png_structp png_ptr,
+ png_bytep data, png_size_t length);
+ void user_flush_data(png_structp png_ptr);
+
+The user_read_data() function is responsible for detecting and
+handling end-of-data errors.
+
+Supplying NULL for the read, write, or flush functions sets them back
+to using the default C stream functions, which expect the io_ptr to
+point to a standard *FILE structure. It is probably a mistake
+to use NULL for one of write_data_fn and output_flush_fn but not both
+of them, unless you have built libpng with PNG_NO_WRITE_FLUSH defined.
+It is an error to read from a write stream, and vice versa.
+
+Error handling in libpng is done through png_error() and png_warning().
+Errors handled through png_error() are fatal, meaning that png_error()
+should never return to its caller. Currently, this is handled via
+setjmp() and longjmp() (unless you have compiled libpng with
+PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()),
+but you could change this to do things like exit() if you should wish,
+as long as your function does not return.
+
+On non-fatal errors, png_warning() is called
+to print a warning message, and then control returns to the calling code.
+By default png_error() and png_warning() print a message on stderr via
+fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined
+(because you don't want the messages) or PNG_NO_STDIO defined (because
+fprintf() isn't available). If you wish to change the behavior of the error
+functions, you will need to set up your own message callbacks. These
+functions are normally supplied at the time that the png_struct is created.
+It is also possible to redirect errors and warnings to your own replacement
+functions after png_create_*_struct() has been called by calling:
+
+ png_set_error_fn(png_structp png_ptr,
+ png_voidp error_ptr, png_error_ptr error_fn,
+ png_error_ptr warning_fn);
+
+ png_voidp error_ptr = png_get_error_ptr(png_ptr);
+
+If NULL is supplied for either error_fn or warning_fn, then the libpng
+default function will be used, calling fprintf() and/or longjmp() if a
+problem is encountered. The replacement error functions should have
+parameters as follows:
+
+ void user_error_fn(png_structp png_ptr,
+ png_const_charp error_msg);
+ void user_warning_fn(png_structp png_ptr,
+ png_const_charp warning_msg);
+
+The motivation behind using setjmp() and longjmp() is the C++ throw and
+catch exception handling methods. This makes the code much easier to write,
+as there is no need to check every return code of every function call.
+However, there are some uncertainties about the status of local variables
+after a longjmp, so the user may want to be careful about doing anything
+after setjmp returns non-zero besides returning itself. Consult your
+compiler documentation for more details. For an alternative approach, you
+may wish to use the "cexcept" facility (see http://cexcept.sourceforge.net).
+
+.SS Custom chunks
+
+If you need to read or write custom chunks, you may need to get deeper
+into the libpng code. The library now has mechanisms for storing
+and writing chunks of unknown type; you can even declare callbacks
+for custom chunks. However, this may not be good enough if the
+library code itself needs to know about interactions between your
+chunk and existing `intrinsic' chunks.
+
+If you need to write a new intrinsic chunk, first read the PNG
+specification. Acquire a first level of understanding of how it works.
+Pay particular attention to the sections that describe chunk names,
+and look at how other chunks were designed, so you can do things
+similarly. Second, check out the sections of libpng that read and
+write chunks. Try to find a chunk that is similar to yours and use
+it as a template. More details can be found in the comments inside
+the code. It is best to handle unknown chunks in a generic method,
+via callback functions, instead of by modifying libpng functions.
+
+If you wish to write your own transformation for the data, look through
+the part of the code that does the transformations, and check out some of
+the simpler ones to get an idea of how they work. Try to find a similar
+transformation to the one you want to add and copy off of it. More details
+can be found in the comments inside the code itself.
+
+.SS Configuring for 16 bit platforms
+
+You will want to look into zconf.h to tell zlib (and thus libpng) that
+it cannot allocate more then 64K at a time. Even if you can, the memory
+won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K.
+
+.SS Configuring for DOS
+
+For DOS users who only have access to the lower 640K, you will
+have to limit zlib's memory usage via a png_set_compression_mem_level()
+call. See zlib.h or zconf.h in the zlib library for more information.
+
+.SS Configuring for Medium Model
+
+Libpng's support for medium model has been tested on most of the popular
+compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
+defined, and FAR gets defined to far in pngconf.h, and you should be
+all set. Everything in the library (except for zlib's structure) is
+expecting far data. You must use the typedefs with the p or pp on
+the end for pointers (or at least look at them and be careful). Make
+note that the rows of data are defined as png_bytepp, which is an
+unsigned char far * far *.
+
+.SS Configuring for gui/windowing platforms:
+
+You will need to write new error and warning functions that use the GUI
+interface, as described previously, and set them to be the error and
+warning functions at the time that png_create_*_struct() is called,
+in order to have them available during the structure initialization.
+They can be changed later via png_set_error_fn(). On some compilers,
+you may also have to change the memory allocators (png_malloc, etc.).
+
+.SS Configuring for compiler xxx:
+
+All includes for libpng are in pngconf.h. If you need to add, change
+or delete an include, this is the place to do it.
+The includes that are not needed outside libpng are placed in pngpriv.h,
+which is only used by the routines inside libpng itself.
+The files in libpng proper only include pngpriv.h and png.h, which
+in turn includes pngconf.h.
+
+.SS Configuring zlib:
+
+There are special functions to configure the compression. Perhaps the
+most useful one changes the compression level, which currently uses
+input compression values in the range 0 - 9. The library normally
+uses the default compression level (Z_DEFAULT_COMPRESSION = 6). Tests
+have shown that for a large majority of images, compression values in
+the range 3-6 compress nearly as well as higher levels, and do so much
+faster. For online applications it may be desirable to have maximum speed
+(Z_BEST_SPEED = 1). With versions of zlib after v0.99, you can also
+specify no compression (Z_NO_COMPRESSION = 0), but this would create
+files larger than just storing the raw bitmap. You can specify the
+compression level by calling:
+
+ png_set_compression_level(png_ptr, level);
+
+Another useful one is to reduce the memory level used by the library.
+The memory level defaults to 8, but it can be lowered if you are
+short on memory (running DOS, for example, where you only have 640K).
+Note that the memory level does have an effect on compression; among
+other things, lower levels will result in sections of incompressible
+data being emitted in smaller stored blocks, with a correspondingly
+larger relative overhead of up to 15% in the worst case.
+
+ png_set_compression_mem_level(png_ptr, level);
+
+The other functions are for configuring zlib. They are not recommended
+for normal use and may result in writing an invalid PNG file. See
+zlib.h for more information on what these mean.
+
+ png_set_compression_strategy(png_ptr,
+ strategy);
+ png_set_compression_window_bits(png_ptr,
+ window_bits);
+ png_set_compression_method(png_ptr, method);
+ png_set_compression_buffer_size(png_ptr, size);
+
+.SS Controlling row filtering
+
+If you want to control whether libpng uses filtering or not, which
+filters are used, and how it goes about picking row filters, you
+can call one of these functions. The selection and configuration
+of row filters can have a significant impact on the size and
+encoding speed and a somewhat lesser impact on the decoding speed
+of an image. Filtering is enabled by default for RGB and grayscale
+images (with and without alpha), but not for paletted images nor
+for any images with bit depths less than 8 bits/pixel.
+
+The 'method' parameter sets the main filtering method, which is
+currently only '0' in the PNG 1.2 specification. The 'filters'
+parameter sets which filter(s), if any, should be used for each
+scanline. Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS
+to turn filtering on and off, respectively.
+
+Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB,
+PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise
+ORed together with '|' to specify one or more filters to use.
+These filters are described in more detail in the PNG specification.
+If you intend to change the filter type during the course of writing
+the image, you should start with flags set for all of the filters
+you intend to use so that libpng can initialize its internal
+structures appropriately for all of the filter types. (Note that this
+means the first row must always be adaptively filtered, because libpng
+currently does not allocate the filter buffers until png_write_row()
+is called for the first time.)
+
+ filters = PNG_FILTER_NONE | PNG_FILTER_SUB
+ PNG_FILTER_UP | PNG_FILTER_AVG |
+ PNG_FILTER_PAETH | PNG_ALL_FILTERS;
+
+ png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
+ filters);
+ The second parameter can also be
+ PNG_INTRAPIXEL_DIFFERENCING if you are
+ writing a PNG to be embedded in a MNG
+ datastream. This parameter must be the
+ same as the value of filter_method used
+ in png_set_IHDR().
+
+It is also possible to influence how libpng chooses from among the
+available filters. This is done in one or both of two ways - by
+telling it how important it is to keep the same filter for successive
+rows, and by telling it the relative computational costs of the filters.
+
+ double weights[3] = {1.5, 1.3, 1.1},
+ costs[PNG_FILTER_VALUE_LAST] =
+ {1.0, 1.3, 1.3, 1.5, 1.7};
+
+ png_set_filter_heuristics(png_ptr,
+ PNG_FILTER_HEURISTIC_WEIGHTED, 3,
+ weights, costs);
+
+The weights are multiplying factors that indicate to libpng that the
+row filter should be the same for successive rows unless another row filter
+is that many times better than the previous filter. In the above example,
+if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a
+"sum of absolute differences" 1.5 x 1.3 times higher than other filters
+and still be chosen, while the NONE filter could have a sum 1.1 times
+higher than other filters and still be chosen. Unspecified weights are
+taken to be 1.0, and the specified weights should probably be declining
+like those above in order to emphasize recent filters over older filters.
+
+The filter costs specify for each filter type a relative decoding cost
+to be considered when selecting row filters. This means that filters
+with higher costs are less likely to be chosen over filters with lower
+costs, unless their "sum of absolute differences" is that much smaller.
+The costs do not necessarily reflect the exact computational speeds of
+the various filters, since this would unduly influence the final image
+size.
+
+Note that the numbers above were invented purely for this example and
+are given only to help explain the function usage. Little testing has
+been done to find optimum values for either the costs or the weights.
+
+.SS Removing unwanted object code
+
+There are a bunch of #define's in pngconf.h that control what parts of
+libpng are compiled. All the defines end in _SUPPORTED. If you are
+never going to use a capability, you can change the #define to #undef
+before recompiling libpng and save yourself code and data space, or
+you can turn off individual capabilities with defines that begin with
+PNG_NO_.
+
+You can also turn all of the transforms and ancillary chunk capabilities
+off en masse with compiler directives that define
+PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
+or all four,
+along with directives to turn on any of the capabilities that you do
+want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the extra
+transformations but still leave the library fully capable of reading
+and writing PNG files with all known public chunks. Use of the
+PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive produces a library
+that is incapable of reading or writing ancillary chunks. If you are
+not using the progressive reading capability, you can turn that off
+with PNG_NO_PROGRESSIVE_READ (don't confuse this with the INTERLACING
+capability, which you'll still have).
+
+All the reading and writing specific code are in separate files, so the
+linker should only grab the files it needs. However, if you want to
+make sure, or if you are building a stand alone library, all the
+reading files start with pngr and all the writing files start with
+pngw. The files that don't match either (like png.c, pngtrans.c, etc.)
+are used for both reading and writing, and always need to be included.
+The progressive reader is in pngpread.c
+
+If you are creating or distributing a dynamically linked library (a .so
+or DLL file), you should not remove or disable any parts of the library,
+as this will cause applications linked with different versions of the
+library to fail if they call functions not available in your library.
+The size of the library itself should not be an issue, because only
+those sections that are actually used will be loaded into memory.
+
+.SS Requesting debug printout
+
+The macro definition PNG_DEBUG can be used to request debugging
+printout. Set it to an integer value in the range 0 to 3. Higher
+numbers result in increasing amounts of debugging information. The
+information is printed to the "stderr" file, unless another file
+name is specified in the PNG_DEBUG_FILE macro definition.
+
+When PNG_DEBUG > 0, the following functions (macros) become available:
+
+ png_debug(level, message)
+ png_debug1(level, message, p1)
+ png_debug2(level, message, p1, p2)
+
+in which "level" is compared to PNG_DEBUG to decide whether to print
+the message, "message" is the formatted string to be printed,
+and p1 and p2 are parameters that are to be embedded in the string
+according to printf-style formatting directives. For example,
+
+ png_debug1(2, "foo=%d\n", foo);
+
+is expanded to
+
+ if(PNG_DEBUG > 2)
+ fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo);
+
+When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
+can still use PNG_DEBUG to control your own debugging:
+
+ #ifdef PNG_DEBUG
+ fprintf(stderr, ...
+ #endif
+
+When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
+having level = 0 will be printed. There aren't any such statements in
+this version of libpng, but if you insert some they will be printed.
+
+.SH VI. MNG support
+
+The MNG specification (available at http://www.libpng.org/pub/mng) allows
+certain extensions to PNG for PNG images that are embedded in MNG datastreams.
+Libpng can support some of these extensions. To enable them, use the
+png_permit_mng_features() function:
+
+ feature_set = png_permit_mng_features(png_ptr, mask)
+ mask is a png_uint_32 containing the bitwise OR of the
+ features you want to enable. These include
+ PNG_FLAG_MNG_EMPTY_PLTE
+ PNG_FLAG_MNG_FILTER_64
+ PNG_ALL_MNG_FEATURES
+ feature_set is a png_uint_32 that is the bitwise AND of
+ your mask with the set of MNG features that is
+ supported by the version of libpng that you are using.
+
+It is an error to use this function when reading or writing a standalone
+PNG file with the PNG 8-byte signature. The PNG datastream must be wrapped
+in a MNG datastream. As a minimum, it must have the MNG 8-byte signature
+and the MHDR and MEND chunks. Libpng does not provide support for these
+or any other MNG chunks; your application must provide its own support for
+them. You may wish to consider using libmng (available at
+http://www.libmng.com) instead.
+
+.SH VII. Changes to Libpng from version 0.88
+
+It should be noted that versions of libpng later than 0.96 are not
+distributed by the original libpng author, Guy Schalnat, nor by
+Andreas Dilger, who had taken over from Guy during 1996 and 1997, and
+distributed versions 0.89 through 0.96, but rather by another member
+of the original PNG Group, Glenn Randers-Pehrson. Guy and Andreas are
+still alive and well, but they have moved on to other things.
+
+The old libpng functions png_read_init(), png_write_init(),
+png_info_init(), png_read_destroy(), and png_write_destroy() have been
+moved to PNG_INTERNAL in version 0.95 to discourage their use. These
+functions will be removed from libpng version 2.0.0.
+
+The preferred method of creating and initializing the libpng structures is
+via the png_create_read_struct(), png_create_write_struct(), and
+png_create_info_struct() because they isolate the size of the structures
+from the application, allow version error checking, and also allow the
+use of custom error handling routines during the initialization, which
+the old functions do not. The functions png_read_destroy() and
+png_write_destroy() do not actually free the memory that libpng
+allocated for these structs, but just reset the data structures, so they
+can be used instead of png_destroy_read_struct() and
+png_destroy_write_struct() if you feel there is too much system overhead
+allocating and freeing the png_struct for each image read.
+
+Setting the error callbacks via png_set_message_fn() before
+png_read_init() as was suggested in libpng-0.88 is no longer supported
+because this caused applications that do not use custom error functions
+to fail if the png_ptr was not initialized to zero. It is still possible
+to set the error callbacks AFTER png_read_init(), or to change them with
+png_set_error_fn(), which is essentially the same function, but with a new
+name to force compilation errors with applications that try to use the old
+method.
+
+Starting with version 1.0.7, you can find out which version of the library
+you are using at run-time:
+
+ png_uint_32 libpng_vn = png_access_version_number();
+
+The number libpng_vn is constructed from the major version, minor
+version with leading zero, and release number with leading zero,
+(e.g., libpng_vn for version 1.0.7 is 10007).
+
+You can also check which version of png.h you used when compiling your
+application:
+
+ png_uint_32 application_vn = PNG_LIBPNG_VER;
+
+.SH VIII. Changes to Libpng from version 1.0.x to 1.2.x
+
+Support for user memory management was enabled by default. To
+accomplish this, the functions png_create_read_struct_2(),
+png_create_write_struct_2(), png_set_mem_fn(), png_get_mem_ptr(),
+png_malloc_default(), and png_free_default() were added.
+
+Support for the iTXt chunk has been enabled by default as of
+version 1.2.41.
+
+Support for certain MNG features was enabled.
+
+Support for numbered error messages was added. However, we never got
+around to actually numbering the error messages. The function
+png_set_strip_error_numbers() was added (Note: the prototype for this
+function was inadvertently removed from png.h in PNG_NO_ASSEMBLER_CODE
+builds of libpng-1.2.15. It was restored in libpng-1.2.36).
+
+The png_malloc_warn() function was added at libpng-1.2.3. This issues
+a png_warning and returns NULL instead of aborting when it fails to
+acquire the requested memory allocation.
+
+Support for setting user limits on image width and height was enabled
+by default. The functions png_set_user_limits(), png_get_user_width_max(),
+and png_get_user_height_max() were added at libpng-1.2.6.
+
+The png_set_add_alpha() function was added at libpng-1.2.7.
+
+The function png_set_expand_gray_1_2_4_to_8() was added at libpng-1.2.9.
+Unlike png_set_gray_1_2_4_to_8(), the new function does not expand the
+tRNS chunk to alpha. The png_set_gray_1_2_4_to_8() function is
+deprecated.
+
+A number of macro definitions in support of runtime selection of
+assembler code features (especially Intel MMX code support) were
+added at libpng-1.2.0:
+
+ PNG_ASM_FLAG_MMX_SUPPORT_COMPILED
+ PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU
+ PNG_ASM_FLAG_MMX_READ_COMBINE_ROW
+ PNG_ASM_FLAG_MMX_READ_INTERLACE
+ PNG_ASM_FLAG_MMX_READ_FILTER_SUB
+ PNG_ASM_FLAG_MMX_READ_FILTER_UP
+ PNG_ASM_FLAG_MMX_READ_FILTER_AVG
+ PNG_ASM_FLAG_MMX_READ_FILTER_PAETH
+ PNG_ASM_FLAGS_INITIALIZED
+ PNG_MMX_READ_FLAGS
+ PNG_MMX_FLAGS
+ PNG_MMX_WRITE_FLAGS
+ PNG_MMX_FLAGS
+
+We added the following functions in support of runtime
+selection of assembler code features:
+
+ png_get_mmx_flagmask()
+ png_set_mmx_thresholds()
+ png_get_asm_flags()
+ png_get_mmx_bitdepth_threshold()
+ png_get_mmx_rowbytes_threshold()
+ png_set_asm_flags()
+
+We replaced all of these functions with simple stubs in libpng-1.2.20,
+when the Intel assembler code was removed due to a licensing issue.
+
+These macros are deprecated:
+
+ PNG_READ_TRANSFORMS_NOT_SUPPORTED
+ PNG_PROGRESSIVE_READ_NOT_SUPPORTED
+ PNG_NO_SEQUENTIAL_READ_SUPPORTED
+ PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
+ PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED
+ PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED
+
+They have been replaced, respectively, by:
+
+ PNG_NO_READ_TRANSFORMS
+ PNG_NO_PROGRESSIVE_READ
+ PNG_NO_SEQUENTIAL_READ
+ PNG_NO_WRITE_TRANSFORMS
+ PNG_NO_READ_ANCILLARY_CHUNKS
+ PNG_NO_WRITE_ANCILLARY_CHUNKS
+
+PNG_MAX_UINT was replaced with PNG_UINT_31_MAX. It has been
+deprecated since libpng-1.0.16 and libpng-1.2.6.
+
+The function
+ png_check_sig(sig, num)
+was replaced with
+ !png_sig_cmp(sig, 0, num)
+It has been deprecated since libpng-0.90.
+
+The function
+ png_set_gray_1_2_4_to_8()
+which also expands tRNS to alpha was replaced with
+ png_set_expand_gray_1_2_4_to_8()
+which does not. It has been deprecated since libpng-1.0.18 and 1.2.9.
+
+.SH IX. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
+
+Private libpng prototypes and macro definitions were moved from
+png.h and pngconf.h into a new pngpriv.h header file.
+
+Functions png_set_benign_errors(), png_benign_error(), and
+png_chunk_benign_error() were added.
+
+Support for setting the maximum amount of memory that the application
+will allocate for reading chunks was added, as a security measure.
+The functions png_set_chunk_cache_max() and png_get_chunk_cache_max()
+were added to the library.
+
+We implemented support for I/O states by adding png_ptr member io_state
+and functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
+
+We added PNG_TRANSFORM_GRAY_TO_RGB to the available high-level
+input transforms.
+
+Checking for and reporting of errors in the IHDR chunk is more thorough.
+
+Support for global arrays was removed, to improve thread safety.
+
+Some obsolete/deprecated macros and functions have been removed.
+
+Typecasted NULL definitions such as
+ #define png_voidp_NULL (png_voidp)NULL
+were eliminated. If you used these in your application, just use
+NULL instead.
+
+The png_struct and info_struct members "trans" and "trans_values" were
+changed to "trans_alpha" and "trans_color", respectively.
+
+The obsolete, unused pnggccrd.c and pngvcrd.c files and related makefiles
+were removed.
+
+The PNG_1_0_X and PNG_1_2_X macros were eliminated.
+
+The PNG_LEGACY_SUPPORTED macro was eliminated.
+
+Many WIN32_WCE #ifdefs were removed.
+
+The functions png_read_init(info_ptr), png_write_init(info_ptr),
+png_info_init(info_ptr), png_read_destroy(), and png_write_destroy()
+have been removed. They have been deprecated since libpng-0.95.
+
+The png_permit_empty_plte() was removed. It has been deprecated
+since libpng-1.0.9. Use png_permit_mng_features() instead.
+
+We removed the obsolete stub functions png_get_mmx_flagmask(),
+png_set_mmx_thresholds(), png_get_asm_flags(),
+png_get_mmx_bitdepth_threshold(), png_get_mmx_rowbytes_threshold(),
+png_set_asm_flags(), and png_mmx_supported()
+
+We removed the obsolete png_check_sig(), png_memcpy_check(), and
+png_memset_check() functions. Instead use !png_sig_cmp(), png_memcpy(),
+and png_memset(), respectively.
+
+The function png_set_gray_1_2_4_to_8() was removed. It has been
+deprecated since libpng-1.0.18 and 1.2.9, when it was replaced with
+png_set_expand_gray_1_2_4_to_8() because the former function also
+expanded palette images.
+
+We changed the prototype for png_malloc() from
+ png_malloc(png_structp png_ptr, png_uint_32 size)
+to
+ png_malloc(png_structp png_ptr, png_alloc_size_t size)
+
+This also applies to the prototype for the user replacement malloc_fn().
+
+The png_calloc() function was added and is used in place of
+of "png_malloc(); png_memset();" except in the case in png_read_png()
+where the array consists of pointers; in this case a "for" loop is used
+after the png_malloc() to set the pointers to NULL, to give robust.
+behavior in case the application runs out of memory part-way through
+the process.
+
+We changed the prototypes of png_get_compression_buffer_size() and
+png_set_compression_buffer_size() to work with png_size_t instead of
+png_uint_32.
+
+Support for numbered error messages was removed by default, since we
+never got around to actually numbering the error messages. The function
+png_set_strip_error_numbers() was removed from the library by default.
+
+The png_zalloc() and png_zfree() functions are no longer exported.
+The png_zalloc() function no longer zeroes out the memory that it
+allocates.
+
+Support for dithering was disabled by default in libpng-1.4.0, because
+been well tested and doesn't actually "dither". The code was not
+removed, however, and could be enabled by building libpng with
+PNG_READ_DITHER_SUPPORTED defined. In libpng-1.4.2, this support
+was reenabled, but the function was renamed png_set_quantize() to
+reflect more accurately what it actually does. At the same time,
+the PNG_DITHER_[RED,GREEN_BLUE]_BITS macros were also renamed to
+PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS.
+
+We removed the trailing '.' from the warning and error messages.
+
+.SH X. Detecting libpng
+
+The png_get_io_ptr() function has been present since libpng-0.88, has never
+changed, and is unaffected by conditional compilation macros. It is the
+best choice for use in configure scripts for detecting the presence of any
+libpng version since 0.88. In an autoconf "configure.in" you could use
+
+ AC_CHECK_LIB(png, png_get_io_ptr, ...
+
+.SH XI. Source code repository
+
+Since about February 2009, version 1.2.34, libpng has been under "git" source
+control. The git repository was built from old libpng-x.y.z.tar.gz files
+going back to version 0.70. You can access the git repository (read only)
+at
+
+ git://libpng.git.sourceforge.net/gitroot/libpng
+
+or you can browse it via "gitweb" at
+
+ http://libpng.git.sourceforge.net/git/gitweb.cgi?p=libpng
+
+Patches can be sent to glennrp at users.sourceforge.net or to
+png-mng-implement at lists.sourceforge.net or you can upload them to
+the libpng bug tracker at
+
+ http://libpng.sourceforge.net
+
+.SH XII. Coding style
+
+Our coding style is similar to the "Allman" style, with curly
+braces on separate lines:
+
+ if (condition)
+ {
+ action;
+ }
+
+ else if (another condition)
+ {
+ another action;
+ }
+
+The braces can be omitted from simple one-line actions:
+
+ if (condition)
+ return (0);
+
+We use 3-space indentation, except for continued statements which
+are usually indented the same as the first line of the statement
+plus four more spaces.
+
+For macro definitions we use 2-space indentation, always leaving the "#"
+in the first column.
+
+ #ifndef PNG_NO_FEATURE
+ # ifndef PNG_FEATURE_SUPPORTED
+ # define PNG_FEATURE_SUPPORTED
+ # endif
+ #endif
+
+Comments appear with the leading "/*" at the same indentation as
+the statement that follows the comment:
+
+ /* Single-line comment */
+ statement;
+
+ /* This is a multiple-line
+ * comment.
+ */
+ statement;
+
+Very short comments can be placed after the end of the statement
+to which they pertain:
+
+ statement; /* comment */
+
+We don't use C++ style ("//") comments. We have, however,
+used them in the past in some now-abandoned MMX assembler
+code.
+
+Functions and their curly braces are not indented, and
+exported functions are marked with PNGAPI:
+
+ /* This is a public function that is visible to
+ * application programers. It does thus-and-so.
+ */
+ void PNGAPI
+ png_exported_function(png_ptr, png_info, foo)
+ {
+ body;
+ }
+
+The prototypes for all exported functions appear in png.h,
+above the comment that says
+
+ /* Maintainer: Put new public prototypes here ... */
+
+We mark all non-exported functions with "/* PRIVATE */"":
+
+ void /* PRIVATE */
+ png_non_exported_function(png_ptr, png_info, foo)
+ {
+ body;
+ }
+
+The prototypes for non-exported functions (except for those in
+pngtest) appear in
+pngpriv.h
+above the comment that says
+
+ /* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */
+
+The names of all exported functions and variables begin
+with "png_", and all publicly visible C preprocessor
+macros begin with "PNG_".
+
+We put a space after each comma and after each semicolon
+in "for" statments, and we put spaces before and after each
+C binary operator and after "for" or "while", and before
+"?". We don't put a space between a typecast and the expression
+being cast, nor do we put one between a function name and the
+left parenthesis that follows it:
+
+ for (i = 2; i > 0; --i)
+ y[i] = a(x) + (int)b;
+
+We prefer #ifdef and #ifndef to #if defined() and if !defined()
+when there is only one macro being tested.
+
+We do not use the TAB character for indentation in the C sources.
+
+Lines do not exceed 80 characters.
+
+Other rules can be inferred by inspecting the libpng source.
+
+.SH XIII. Y2K Compliance in libpng
+
+June 26, 2010
+
+Since the PNG Development group is an ad-hoc body, we can't make
+an official declaration.
+
+This is your unofficial assurance that libpng from version 0.71 and
+upward through 1.4.3 are Y2K compliant. It is my belief that earlier
+versions were also Y2K compliant.
+
+Libpng only has three year fields. One is a 2-byte unsigned integer that
+will hold years up to 65535. The other two hold the date in text
+format, and will hold years up to 9999.
+
+The integer is
+ "png_uint_16 year" in png_time_struct.
+
+The strings are
+ "png_charp time_buffer" in png_struct and
+ "near_time_buffer", which is a local character string in png.c.
+
+There are seven time-related functions:
+
+ png_convert_to_rfc_1123() in png.c
+ (formerly png_convert_to_rfc_1152() in error)
+ png_convert_from_struct_tm() in pngwrite.c, called
+ in pngwrite.c
+ png_convert_from_time_t() in pngwrite.c
+ png_get_tIME() in pngget.c
+ png_handle_tIME() in pngrutil.c, called in pngread.c
+ png_set_tIME() in pngset.c
+ png_write_tIME() in pngwutil.c, called in pngwrite.c
+
+All appear to handle dates properly in a Y2K environment. The
+png_convert_from_time_t() function calls gmtime() to convert from system
+clock time, which returns (year - 1900), which we properly convert to
+the full 4-digit year. There is a possibility that applications using
+libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
+function, or that they are incorrectly passing only a 2-digit year
+instead of "year - 1900" into the png_convert_from_struct_tm() function,
+but this is not under our control. The libpng documentation has always
+stated that it works with 4-digit years, and the APIs have been
+documented as such.
+
+The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
+integer to hold the year, and can hold years as large as 65535.
+
+zlib, upon which libpng depends, is also Y2K compliant. It contains
+no date-related code.
+
+
+ Glenn Randers-Pehrson
+ libpng maintainer
+ PNG Development Group
+
+.SH NOTE
+
+Note about libpng version numbers:
+
+Due to various miscommunications, unforeseen code incompatibilities
+and occasional factors outside the authors' control, version numbering
+on the library has not always been consistent and straightforward.
+The following table summarizes matters since version 0.89c, which was
+the first widely used release:
+
+ source png.h png.h shared-lib
+ version string int version
+ ------- ------ ----- ----------
+ 0.89c ("beta 3") 0.89 89 1.0.89
+ 0.90 ("beta 4") 0.90 90 0.90
+ 0.95 ("beta 5") 0.95 95 0.95
+ 0.96 ("beta 6") 0.96 96 0.96
+ 0.97b ("beta 7") 1.00.97 97 1.0.1
+ 0.97c 0.97 97 2.0.97
+ 0.98 0.98 98 2.0.98
+ 0.99 0.99 98 2.0.99
+ 0.99a-m 0.99 99 2.0.99
+ 1.00 1.00 100 2.1.0
+ 1.0.0 1.0.0 100 2.1.0
+ 1.0.0 (from here on, the 100 2.1.0
+ 1.0.1 png.h string is 10001 2.1.0
+ 1.0.1a-e identical to the 10002 from here on, the
+ 1.0.2 source version) 10002 shared library is 2.V
+ 1.0.2a-b 10003 where V is the source
+ 1.0.1 10001 code version except as
+ 1.0.1a-e 10002 2.1.0.1a-e noted.
+ 1.0.2 10002 2.1.0.2
+ 1.0.2a-b 10003 2.1.0.2a-b
+ 1.0.3 10003 2.1.0.3
+ 1.0.3a-d 10004 2.1.0.3a-d
+ 1.0.4 10004 2.1.0.4
+ 1.0.4a-f 10005 2.1.0.4a-f
+ 1.0.5 (+ 2 patches) 10005 2.1.0.5
+ 1.0.5a-d 10006 2.1.0.5a-d
+ 1.0.5e-r 10100 2.1.0.5e-r
+ 1.0.5s-v 10006 2.1.0.5s-v
+ 1.0.6 (+ 3 patches) 10006 2.1.0.6
+ 1.0.6d-g 10007 2.1.0.6d-g
+ 1.0.6h 10007 10.6h
+ 1.0.6i 10007 10.6i
+ 1.0.6j 10007 2.1.0.6j
+ 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14
+ 1.0.7beta15-18 1 10007 2.1.0.7beta15-18
+ 1.0.7rc1-2 1 10007 2.1.0.7rc1-2
+ 1.0.7 1 10007 2.1.0.7
+ 1.0.8beta1-4 1 10008 2.1.0.8beta1-4
+ 1.0.8rc1 1 10008 2.1.0.8rc1
+ 1.0.8 1 10008 2.1.0.8
+ 1.0.9beta1-6 1 10009 2.1.0.9beta1-6
+ 1.0.9rc1 1 10009 2.1.0.9rc1
+ 1.0.9beta7-10 1 10009 2.1.0.9beta7-10
+ 1.0.9rc2 1 10009 2.1.0.9rc2
+ 1.0.9 1 10009 2.1.0.9
+ 1.0.10beta1 1 10010 2.1.0.10beta1
+ 1.0.10rc1 1 10010 2.1.0.10rc1
+ 1.0.10 1 10010 2.1.0.10
+ 1.0.11beta1-3 1 10011 2.1.0.11beta1-3
+ 1.0.11rc1 1 10011 2.1.0.11rc1
+ 1.0.11 1 10011 2.1.0.11
+ 1.0.12beta1-2 2 10012 2.1.0.12beta1-2
+ 1.0.12rc1 2 10012 2.1.0.12rc1
+ 1.0.12 2 10012 2.1.0.12
+ 1.1.0a-f - 10100 2.1.1.0a-f abandoned
+ 1.2.0beta1-2 2 10200 2.1.2.0beta1-2
+ 1.2.0beta3-5 3 10200 3.1.2.0beta3-5
+ 1.2.0rc1 3 10200 3.1.2.0rc1
+ 1.2.0 3 10200 3.1.2.0
+ 1.2.1beta-4 3 10201 3.1.2.1beta1-4
+ 1.2.1rc1-2 3 10201 3.1.2.1rc1-2
+ 1.2.1 3 10201 3.1.2.1
+ 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6
+ 1.0.13beta1 10 10013 10.so.0.1.0.13beta1
+ 1.0.13rc1 10 10013 10.so.0.1.0.13rc1
+ 1.2.2rc1 12 10202 12.so.0.1.2.2rc1
+ 1.0.13 10 10013 10.so.0.1.0.13
+ 1.2.2 12 10202 12.so.0.1.2.2
+ 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6
+ 1.2.3 12 10203 12.so.0.1.2.3
+ 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3
+ 1.2.4rc1 13 10204 12.so.0.1.2.4rc1
+ 1.0.14 10 10014 10.so.0.1.0.14
+ 1.2.4 13 10204 12.so.0.1.2.4
+ 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2
+ 1.0.15rc1 10 10015 10.so.0.1.0.15rc1
+ 1.0.15 10 10015 10.so.0.1.0.15
+ 1.2.5 13 10205 12.so.0.1.2.5
+ 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4
+ 1.2.6rc1-5 13 10206 12.so.0.1.2.6rc1-5
+ 1.0.16 10 10016 10.so.0.1.0.16
+ 1.2.6 13 10206 12.so.0.1.2.6
+ 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2
+ 1.0.17rc1 10 10017 12.so.0.1.0.17rc1
+ 1.2.7rc1 13 10207 12.so.0.1.2.7rc1
+ 1.0.17 10 10017 12.so.0.1.0.17
+ 1.2.7 13 10207 12.so.0.1.2.7
+ 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5
+ 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5
+ 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5
+ 1.0.18 10 10018 12.so.0.1.0.18
+ 1.2.8 13 10208 12.so.0.1.2.8
+ 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3
+ 1.2.9beta4-11 13 10209 12.so.0.9[.0]
+ 1.2.9rc1 13 10209 12.so.0.9[.0]
+ 1.2.9 13 10209 12.so.0.9[.0]
+ 1.2.10beta1-7 13 10210 12.so.0.10[.0]
+ 1.2.10rc1-2 13 10210 12.so.0.10[.0]
+ 1.2.10 13 10210 12.so.0.10[.0]
+ 1.4.0beta1-6 14 10400 14.so.0.0[.0]
+ 1.2.11beta1-4 13 10210 12.so.0.11[.0]
+ 1.4.0beta7-8 14 10400 14.so.0.0[.0]
+ 1.2.11 13 10211 12.so.0.11[.0]
+ 1.2.12 13 10212 12.so.0.12[.0]
+ 1.4.0beta9-14 14 10400 14.so.0.0[.0]
+ 1.2.13 13 10213 12.so.0.13[.0]
+ 1.4.0beta15-36 14 10400 14.so.0.0[.0]
+ 1.4.0beta37-87 14 10400 14.so.14.0[.0]
+ 1.4.0rc01 14 10400 14.so.14.0[.0]
+ 1.4.0beta88-109 14 10400 14.so.14.0[.0]
+ 1.4.0rc02-08 14 10400 14.so.14.0[.0]
+ 1.4.0 14 10400 14.so.14.0[.0]
+ 1.4.1beta01-03 14 10401 14.so.14.1[.0]
+ 1.4.1rc01 14 10401 14.so.14.1[.0]
+ 1.4.1beta04-12 14 10401 14.so.14.1[.0]
+ 1.4.1rc02-04 14 10401 14.so.14.1[.0]
+ 1.4.1 14 10401 14.so.14.1[.0]
+ 1.4.2beta01 14 10402 14.so.14.2[.0]
+ 1.4.2rc02-06 14 10402 14.so.14.2[.0]
+ 1.4.2 14 10402 14.so.14.2[.0]
+ 1.4.3beta01-05 14 10403 14.so.14.3[.0]
+ 1.4.3rc01-03 14 10403 14.so.14.3[.0]
+ 1.4.3 14 10403 14.so.14.3[.0]
+
+Henceforth the source version will match the shared-library minor
+and patch numbers; the shared-library major version number will be
+used for changes in backward compatibility, as it is intended. The
+PNG_PNGLIB_VER macro, which is not used within libpng but is available
+for applications, is an unsigned integer of the form xyyzz corresponding
+to the source version x.y.z (leading zeros in y and z). Beta versions
+were given the previous public release number plus a letter, until
+version 1.0.6j; from then on they were given the upcoming public
+release number plus "betaNN" or "rcN".
+
+.SH "SEE ALSO"
+libpngpf(3), png(5)
+.LP
+.IR libpng :
+.IP
+http://libpng.sourceforge.net (follow the [DOWNLOAD] link)
+http://www.libpng.org/pub/png
+
+.LP
+.IR zlib :
+.IP
+(generally) at the same location as
+.I libpng
+or at
+.br
+ftp://ftp.info-zip.org/pub/infozip/zlib
+
+.LP
+.IR PNG specification: RFC 2083
+.IP
+(generally) at the same location as
+.I libpng
+or at
+.br
+ftp://ds.internic.net/rfc/rfc2083.txt
+.br
+or (as a W3C Recommendation) at
+.br
+http://www.w3.org/TR/REC-png.html
+
+.LP
+In the case of any inconsistency between the PNG specification
+and this library, the specification takes precedence.
+
+.SH AUTHORS
+This man page: Glenn Randers-Pehrson
+
+
+The contributing authors would like to thank all those who helped
+with testing, bug fixes, and patience. This wouldn't have been
+possible without all of you.
+
+Thanks to Frank J. T. Wojcik for helping with the documentation.
+
+Libpng version 1.4.3 - June 26, 2010:
+Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
+Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
+
+Supported by the PNG development group
+.br
+png-mng-implement at lists.sf.net
+(subscription required; visit
+png-mng-implement at lists.sourceforge.net (subscription required; visit
+https://lists.sourceforge.net/lists/listinfo/png-mng-implement
+to subscribe).
+
+.SH COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
+
+(This copy of the libpng notices is provided for your convenience. In case of
+any discrepancy between this copy and the notices in the file png.h that is
+included in the libpng distribution, the latter shall prevail.)
+
+If you modify libpng you may insert additional notices immediately following
+this sentence.
+
+This code is released under the libpng license.
+
+libpng versions 1.2.6, August 15, 2004, through 1.4.3, June 26, 2010, are
+Copyright (c) 2004,2006-2007 Glenn Randers-Pehrson, and are
+distributed according to the same disclaimer and license as libpng-1.2.5
+with the following individual added to the list of Contributing Authors
+
+ Cosmin Truta
+
+libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
+Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
+distributed according to the same disclaimer and license as libpng-1.0.6
+with the following individuals added to the list of Contributing Authors
+
+ Simon-Pierre Cadieux
+ Eric S. Raymond
+ Gilles Vollant
+
+and with the following additions to the disclaimer:
+
+ There is no warranty against interference with your
+ enjoyment of the library or against infringement.
+ There is no warranty that our efforts or the library
+ will fulfill any of your particular purposes or needs.
+ This library is provided with all faults, and the entire
+ risk of satisfactory quality, performance, accuracy, and
+ effort is with the user.
+
+libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
+Copyright (c) 1998, 1999 Glenn Randers-Pehrson
+Distributed according to the same disclaimer and license as libpng-0.96,
+with the following individuals added to the list of Contributing Authors:
+
+ Tom Lane
+ Glenn Randers-Pehrson
+ Willem van Schaik
+
+libpng versions 0.89, June 1996, through 0.96, May 1997, are
+Copyright (c) 1996, 1997 Andreas Dilger
+Distributed according to the same disclaimer and license as libpng-0.88,
+with the following individuals added to the list of Contributing Authors:
+
+ John Bowler
+ Kevin Bracey
+ Sam Bushell
+ Magnus Holmgren
+ Greg Roelofs
+ Tom Tanner
+
+libpng versions 0.5, May 1995, through 0.88, January 1996, are
+Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
+
+For the purposes of this copyright and license, "Contributing Authors"
+is defined as the following set of individuals:
+
+ Andreas Dilger
+ Dave Martindale
+ Guy Eric Schalnat
+ Paul Schmidt
+ Tim Wegner
+
+The PNG Reference Library is supplied "AS IS". The Contributing Authors
+and Group 42, Inc. disclaim all warranties, expressed or implied,
+including, without limitation, the warranties of merchantability and of
+fitness for any purpose. The Contributing Authors and Group 42, Inc.
+assume no liability for direct, indirect, incidental, special, exemplary,
+or consequential damages, which may result from the use of the PNG
+Reference Library, even if advised of the possibility of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+source code, or portions hereof, for any purpose, without fee, subject
+to the following restrictions:
+
+1. The origin of this source code must not be misrepresented.
+
+2. Altered versions must be plainly marked as such and
+ must not be misrepresented as being the original source.
+
+3. This Copyright notice may not be removed or altered from
+ any source or altered source distribution.
+
+The Contributing Authors and Group 42, Inc. specifically permit, without
+fee, and encourage the use of this source code as a component to
+supporting the PNG file format in commercial products. If you use this
+source code in a product, acknowledgment is not required but would be
+appreciated.
+
+
+A "png_get_copyright" function is available, for convenient use in "about"
+boxes and the like:
+
+ printf("%s",png_get_copyright(NULL));
+
+Also, the PNG logo (in PNG format, of course) is supplied in the
+files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
+
+Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a
+certification mark of the Open Source Initiative.
+
+Glenn Randers-Pehrson
+glennrp at users.sourceforge.net
+June 26, 2010
+
+.\" end of man page
+
diff --git a/install/share/man/man3/libpngpf.3 b/install/share/man/man3/libpngpf.3
new file mode 100644
index 0000000..a05b267
--- /dev/null
+++ b/install/share/man/man3/libpngpf.3
@@ -0,0 +1,808 @@
+.TH LIBPNGPF 3 "June 26, 2010"
+.SH NAME
+libpng \- Portable Network Graphics (PNG) Reference Library 1.4.3
+(private functions)
+.SH SYNOPSIS
+\fB#include \fP
+
+\fB#include \fI"pngpriv.h"
+
+\fI\fB
+
+\fBvoid png_64bit_product (long \fP\fIv1\fP\fB, long \fP\fIv2\fP\fB, unsigned long \fI*hi_product,
+
+\fBunsigned long \fI*lo_product\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_build_gamma_table (png_structp \fP\fIpng_ptr\fP\fB, png_byte \fIbit_depth\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_build_grayscale_palette (int \fP\fIbit_depth\fP\fB, png_colorp \fIpalette\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_calculate_crc (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIptr\fP\fB, png_size_t \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBint png_check_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_fixed_point \fP\fIint_white_x\fP\fB, png_fixed_point \fP\fIint_white_y\fP\fB, png_fixed_point \fP\fIint_red_x\fP\fB, png_fixed_point \fP\fIint_red_y\fP\fB, png_fixed_point \fP\fIint_green_x\fP\fB, png_fixed_point \fP\fIint_green_y\fP\fB, png_fixed_point \fP\fIint_blue_x\fP\fB, png_fixed_point \fIint_blue_y\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_check_chunk_name (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIchunk_name\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBpng_size_t png_check_keyword (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIkey\fP\fB, png_charpp \fInew_key\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_check_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIwidth\fP\fB, png_uint_32 \fP\fIheight\fP\fB, int \fP\fIbit_depth\fP\fB, int \fP\fIcolor_type\fP\fB, int \fP\fIinterlace_type\fP\fB, int \fP\fIcompression_type\fP\fB, int \fIfilter_type\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_combine_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIrow\fP\fB, int \fImask\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_correct_palette (png_structp \fP\fIpng_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fInum_palette\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBint png_crc_error (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBint png_crc_finish (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIskip\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_crc_read (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIbuf\fP\fB, png_size_t \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBpng_voidp png_create_struct (int \fItype\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBpng_voidp png_create_struct_2 (int \fP\fItype\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_voidp \fImem_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBint png_debug(int \fP\fIlevel\fP\fB, png_const_charp \fImessage\fP\fB);\fP
+
+\fI\fB
+
+\fBint png_debug1(int \fP\fIlevel\fP\fB, png_const_charp \fP\fImessage\fP\fB, \fIp1\fP\fB);\fP
+
+\fI\fB
+
+\fBint png_debug2(int \fP\fIlevel\fP\fB, png_const_charp \fP\fImessage\fP\fB, \fP\fIp1\fP\fB, \fIp2\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_decompress_chunk (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcomp_type\fP\fB, png_size_t \fP\fIchunklength\fP\fB, png_size_t \fP\fIprefix_length\fP\fB, png_size_t \fI*data_length\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_destroy_struct (png_voidp \fIstruct_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_destroy_struct_2 (png_voidp \fP\fIstruct_ptr\fP\fB, png_free_ptr \fP\fIfree_fn\fP\fB, png_voidp \fImem_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_background (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_color_16p \fP\fItrans_color\fP\fB, png_color_16p \fP\fIbackground\fP\fB, png_color_16p \fP\fIbackground_1\fP\fB, png_bytep \fP\fIgamma_table\fP\fB, png_bytep \fP\fIgamma_from_1\fP\fB, png_bytep \fP\fIgamma_to_1\fP\fB, png_uint_16pp \fP\fIgamma_16\fP\fB, png_uint_16pp \fP\fIgamma_16_from_1\fP\fB, png_uint_16pp \fP\fIgamma_16_to_1\fP\fB, int \fIgamma_shift\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_bgr (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_chop (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_do_expand (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_color_16p \fItrans_value\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_expand_palette (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_colorp \fP\fIpalette\fP\fB, png_bytep \fP\fItrans\fP\fB, int \fInum_trans\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_gamma (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fP\fIgamma_table\fP\fB, png_uint_16pp \fP\fIgamma_16_table\fP\fB, int \fIgamma_shift\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_gray_to_rgb (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_invert (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_pack (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_uint_32 \fIbit_depth\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_packswap (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_quantize (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fP\fIpalette_lookup\fP\fB, png_bytep \fIquantize_lookup\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_read_filler (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, png_uint_32 \fIflags\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_read_interlace (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, int \fP\fIpass\fP\fB, png_uint_32 \fItransformations\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_read_invert_alpha (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_do_read_swap_alpha (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_read_transformations (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBint png_do_rgb_to_gray (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_shift (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_color_8p \fIbit_depth\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_strip_filler (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_uint_32 \fIflags\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_swap (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_unpack (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_unshift (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_color_8p \fIsig_bits\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_write_interlace (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, int \fIpass\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_write_invert_alpha (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_write_swap_alpha (png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_do_write_transformations (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid *png_far_to_near (png_structp png_ptr,png_voidp \fP\fIptr\fP\fB, int \fIcheck\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_flush (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_IEND (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_iTXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_sCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_tEXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_handle_zTXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_info_destroy (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_init_mmx_flags (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_init_read_transformations (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_process_IDAT_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_length\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_process_some_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_check_crc (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_crc_finish (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_crc_skip (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_fill_buffer (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_handle_tEXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_handle_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_handle_zTXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_have_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_have_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_have_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIrow\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_process_row (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_read_chunk (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_read_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_read_IDAT (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_read_sig (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_read_tEXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_read_zTXt (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_restore_buffer (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_length\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_push_save_buffer (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_read_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_read_destroy (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_infop \fIend_info_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_read_filter_row (png_structp \fP\fIpng_ptr\fP\fB, png_row_infop \fP\fIrow_info\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fP\fIprev_row\fP\fB, int \fIfilter\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_read_finish_row (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_read_push_finish_row (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_read_start_row (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_read_transform_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_reset_crc (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBint png_set_text_2 (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fItext_ptr\fP\fB, int \fInum_text\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_cHRM (png_structp \fP\fIpng_ptr\fP\fB, double \fP\fIwhite_x\fP\fB, double \fP\fIwhite_y\fP\fB, double \fP\fIred_x\fP\fB, double \fP\fIred_y\fP\fB, double \fP\fIgreen_x\fP\fB, double \fP\fIgreen_y\fP\fB, double \fP\fIblue_x\fP\fB, double \fIblue_y\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIwhite_x\fP\fB, png_uint_32 \fP\fIwhite_y\fP\fB, png_uint_32 \fP\fIred_x\fP\fB, png_uint_32 \fP\fIred_y\fP\fB, png_uint_32 \fP\fIgreen_x\fP\fB, png_uint_32 \fP\fIgreen_y\fP\fB, png_uint_32 \fP\fIblue_x\fP\fB, png_uint_32 \fIblue_y\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_destroy (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fBvoid png_write_filtered_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIfiltered_row\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_find_filter (png_structp \fP\fIpng_ptr\fP\fB, png_row_infop \fIrow_info\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_finish_row (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_gAMA (png_structp \fP\fIpng_ptr\fP\fB, double \fIfile_gamma\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIint_file_gamma\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_uint_16p \fP\fIhist\fP\fB, int \fInum_hist\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIname\fP\fB, int \fP\fIcompression_type\fP\fB, png_charp \fP\fIprofile\fP\fB, int \fIproflen\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_IDAT (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_IEND (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIwidth\fP\fB, png_uint_32 \fP\fIheight\fP\fB, int \fP\fIbit_depth\fP\fB, int \fP\fIcolor_type\fP\fB, int \fP\fIcompression_type\fP\fB, int \fP\fIfilter_type\fP\fB, int \fIinterlace_type\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_iTXt (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcompression\fP\fB, png_charp \fP\fIkey\fP\fB, png_charp \fP\fIlang\fP\fB, png_charp \fP\fItranslated_key\fP\fB, png_charp \fItext\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIx_offset\fP\fB, png_uint_32 \fP\fIy_offset\fP\fB, int \fIunit_type\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIpurpose\fP\fB, png_int_32 \fP\fIX0\fP\fB, png_int_32 \fP\fIX1\fP\fB, int \fP\fItype\fP\fB, int \fP\fInparams\fP\fB, png_charp \fP\fIunits\fP\fB, png_charpp \fIparams\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIx_pixels_per_unit\fP\fB, png_uint_32 \fP\fIy_pixels_per_unit\fP\fB, int \fIunit_type\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, png_uint_32 \fInum_pal\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_color_8p \fP\fIsbit\fP\fB, int \fIcolor_type\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_sCAL (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIunit\fP\fB, double \fP\fIwidth\fP\fB, double \fIheight\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_sCAL_s (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIunit\fP\fB, png_charp \fP\fIwidth\fP\fB, png_charp \fIheight\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_sRGB (png_structp \fP\fIpng_ptr\fP\fB, int \fIintent\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_spalette_p \fIpalette\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_start_row (png_structp \fIpng_ptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_tEXt (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIkey\fP\fB, png_charp \fP\fItext\fP\fB, png_size_t \fItext_len\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_timep \fImod_time\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fItrans\fP\fB, png_color_16p \fP\fIvalues\fP\fB, int \fP\fInumber\fP\fB, int \fIcolor_type\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_write_zTXt (png_structp \fP\fIpng_ptr\fP\fB, png_charp \fP\fIkey\fP\fB, png_charp \fP\fItext\fP\fB, png_size_t \fP\fItext_len\fP\fB, int \fIcompression\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoidpf png_zalloc (voidpf \fP\fIpng_ptr\fP\fB, uInt \fP\fIitems\fP\fB, uInt \fIsize\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+\fBvoid png_zfree (voidpf \fP\fIpng_ptr\fP\fB, voidpf \fIptr\fP\fB);\fP
+
+\fI\fB
+
+\fI\fB
+
+.SH DESCRIPTION
+The functions listed above are used privately by libpng
+and are not recommended for use by applications. They are
+not "exported" to applications using shared libraries. They
+are listed alphabetically here as an aid to libpng maintainers.
+See png.h for more information on these functions.
+
+.SH SEE ALSO
+libpng(3), png(5)
+.SH AUTHOR
+Glenn Randers-Pehrson
diff --git a/install/share/man/man3/libxml.3 b/install/share/man/man3/libxml.3
new file mode 100644
index 0000000..88d3eee
--- /dev/null
+++ b/install/share/man/man3/libxml.3
@@ -0,0 +1,71 @@
+.TH libxml 3 "12 April 2000"
+.SH NAME
+libxml \- library used to parse XML files
+.SH DESCRIPTION
+The
+.I libxml
+library is used to parse XML files.
+Its internal document repesentation is as close as possible to the
+.I DOM
+(Document Object Model) interface,
+an API for accessing XML or HTML structured documents.
+.LP
+The
+.I libxml
+library also has a
+.IR SAX -like
+interface,
+which is designed to be compatible with
+.IR expat (1).
+NOTE:
+.IR SAX ,
+the Simple API for XML,
+is a standard interface for event-based XML parsing,
+developed collaboratively by the members of the XML-DEV mailing list,
+currently hosted by OASIS.
+The
+.I expat
+library is a XML 1.0 parser written in C,
+which aims to be fully conforming.
+It is currently not a validating XML processor.
+.LP
+The
+.I libxml
+library now includes a nearly complete
+.I XPath
+implementation.
+The
+.I XPath
+(XML Path Language) is a language for addressing parts of an
+XML document,
+designed to be used by both
+.I XSLT
+and
+.IR XPointer .
+.LP
+The
+.I libxml
+library exports Push and Pull type parser interfaces for both XML and
+.IR html .
+.SH FILES
+.TP 2.2i
+.B /depot/lib/libxml_2.0.0/libxml.a
+static library
+.TP
+.B /depot/lib/libxml_2.0.0/libxml.so
+shared library
+.TP
+.B /depot/package/libxml_2.0.0/bin/xmllint
+binary application for parsing XML files
+.SH AUTHORS
+Daniel Veillard (daniel@veillard.com).
+Red Hat Inc.
+Manual page by Ziying Sherwin (sherwin@nlm.nih.gov),
+Lister Hill National Center for Biomedical Communications,
+U.S. National Library of Medicine.
+.SH SEE ALSO
+.IR xmllint (1),
+.IR libxslt (3),
+.IR libexslt (3),
+.IR xsltproc (1)
+.\" end of manual page
diff --git a/install/share/man/man3/ngettext.3 b/install/share/man/man3/ngettext.3
new file mode 100644
index 0000000..ebff89b
--- /dev/null
+++ b/install/share/man/man3/ngettext.3
@@ -0,0 +1,60 @@
+.\" Copyright (c) Bruno Haible
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" References consulted:
+.\" GNU glibc-2 source code and manual
+.\" GNU gettext source code and manual
+.\" LI18NUX 2000 Globalization Specification
+.\"
+.TH NGETTEXT 3 "May 2001" "GNU gettext 0.18.1"
+.SH NAME
+ngettext, dngettext, dcngettext \- translate message and choose plural form
+.SH SYNOPSIS
+.nf
+.B #include
+.sp
+.BI "char * ngettext (const char * " msgid ", const char * " msgid_plural ,
+.BI " unsigned long int " n );
+.BI "char * dngettext (const char * " domainname ,
+.BI " const char * " msgid ", const char * " msgid_plural ,
+.BI " unsigned long int " n );
+.BI "char * dcngettext (const char * " domainname ,
+.BI " const char * " msgid ", const char * " msgid_plural ,
+.BI " unsigned long int " n ", int " category );
+.fi
+.SH DESCRIPTION
+The \fBngettext\fP, \fBdngettext\fP and \fBdcngettext\fP functions attempt to
+translate a text string into the user's native language, by looking up the
+appropriate plural form of the translation in a message catalog.
+.PP
+Plural forms are grammatical variants depending on the a number. Some languages
+have two forms, called singular and plural. Other languages have three forms,
+called singular, dual and plural. There are also languages with four forms.
+.PP
+The \fBngettext\fP, \fBdngettext\fP and \fBdcngettext\fP functions work like
+the \fBgettext\fP, \fBdgettext\fP and \fBdcgettext\fP functions, respectively.
+Additionally, they choose the appropriate plural form, which depends on the
+number \fIn\fP and the language of the message catalog where the translation
+was found.
+.PP
+In the "C" locale, or if none of the used catalogs contain a translation for
+\fImsgid\fP, the \fBngettext\fP, \fBdngettext\fP and \fBdcngettext\fP functions
+return \fImsgid\fP if \fIn\fP == 1, or \fImsgid_plural\fP if \fIn\fP != 1.
+.SH "RETURN VALUE"
+If a translation was found in one of the specified catalogs, the appropriate
+plural form is converted to the locale's codeset and returned. The resulting
+string is statically allocated and must not be modified or freed. Otherwise
+\fImsgid\fP or \fImsgid_plural\fP is returned, as described above.
+.SH ERRORS
+\fBerrno\fP is not modified.
+.SH BUGS
+The return type ought to be \fBconst char *\fP, but is \fBchar *\fP to avoid
+warnings in C code predating ANSI C.
+.SH "SEE ALSO"
+.BR gettext (3),
+.BR dgettext (3),
+.BR dcgettext (3)
diff --git a/install/share/man/man3/textdomain.3 b/install/share/man/man3/textdomain.3
new file mode 100644
index 0000000..a3568cd
--- /dev/null
+++ b/install/share/man/man3/textdomain.3
@@ -0,0 +1,57 @@
+.\" Copyright (c) Bruno Haible
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" References consulted:
+.\" GNU glibc-2 source code and manual
+.\" GNU gettext source code and manual
+.\" LI18NUX 2000 Globalization Specification
+.\"
+.TH TEXTDOMAIN 3 "May 2001" "GNU gettext 0.18.1"
+.SH NAME
+textdomain \- set domain for future gettext() calls
+.SH SYNOPSIS
+.nf
+.B #include
+.sp
+.BI "char * textdomain (const char * " domainname );
+.fi
+.SH DESCRIPTION
+The \fBtextdomain\fP function sets or retrieves the current message domain.
+.PP
+A message domain is a set of translatable \fImsgid\fP messages. Usually,
+every software package has its own message domain. The domain name is used
+to determine the message catalog where a translation is looked up; it must
+be a non-empty string.
+.PP
+The current message domain is used by the \fBgettext\fP, \fBngettext\fP
+functions, and by the \fBdgettext\fP, \fBdcgettext\fP, \fBdngettext\fP and
+\fBdcngettext\fP functions when called with a NULL domainname argument.
+.PP
+If \fIdomainname\fP is not NULL, the current message domain is set to
+\fIdomainname\fP. The string the function stores internally is a copy of the
+\fIdomainname\fP argument.
+.PP
+If \fIdomainname\fP is NULL, the function returns the current message domain.
+.SH "RETURN VALUE"
+If successful, the \fBtextdomain\fP function returns the current message
+domain, after possibly changing it. The resulting string is valid until the
+next \fBtextdomain\fP call and must not be modified or freed. If a memory
+allocation failure occurs, it sets \fBerrno\fP to \fBENOMEM\fP and returns
+NULL.
+.SH ERRORS
+The following error can occur, among others:
+.TP
+.B ENOMEM
+Not enough memory available.
+.SH BUGS
+The return type ought to be \fBconst char *\fP, but is \fBchar *\fP to avoid
+warnings in C code predating ANSI C.
+.SH "SEE ALSO"
+.BR gettext (3),
+.BR ngettext (3),
+.BR bindtextdomain (3),
+.BR bind_textdomain_codeset (3)
diff --git a/install/share/man/man5/fonts-conf.5 b/install/share/man/man5/fonts-conf.5
new file mode 100644
index 0000000..0fd5e3f
--- /dev/null
+++ b/install/share/man/man5/fonts-conf.5
@@ -0,0 +1,644 @@
+.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
+.TH "FONTS-CONF" "5" "18 November 2009" "" ""
+.SH NAME
+fonts.conf \- Font configuration files
+.SH SYNOPSIS
+.sp
+.nf
+ /etc/fonts/fonts.conf
+ /etc/fonts/fonts.dtd
+ /etc/fonts/conf.d
+ ~/.fonts.conf.d
+ ~/.fonts.conf
+.sp
+.fi
+.SH "DESCRIPTION"
+.PP
+Fontconfig is a library designed to provide system-wide font configuration,
+customization and application access.
+.SH "FUNCTIONAL OVERVIEW"
+.PP
+Fontconfig contains two essential modules, the configuration module which
+builds an internal configuration from XML files and the matching module
+which accepts font patterns and returns the nearest matching font.
+.SS "FONT CONFIGURATION"
+.PP
+The configuration module consists of the FcConfig datatype, libexpat and
+FcConfigParse which walks over an XML tree and amends a configuration with
+data found within. From an external perspective, configuration of the
+library consists of generating a valid XML tree and feeding that to
+FcConfigParse. The only other mechanism provided to applications for
+changing the running configuration is to add fonts and directories to the
+list of application-provided font files.
+.PP
+The intent is to make font configurations relatively static, and shared by
+as many applications as possible. It is hoped that this will lead to more
+stable font selection when passing names from one application to another.
+XML was chosen as a configuration file format because it provides a format
+which is easy for external agents to edit while retaining the correct
+structure and syntax.
+.PP
+Font configuration is separate from font matching; applications needing to
+do their own matching can access the available fonts from the library and
+perform private matching. The intent is to permit applications to pick and
+choose appropriate functionality from the library instead of forcing them to
+choose between this library and a private configuration mechanism. The hope
+is that this will ensure that configuration of fonts for all applications
+can be centralized in one place. Centralizing font configuration will
+simplify and regularize font installation and customization.
+.SS "FONT PROPERTIES"
+.PP
+While font patterns may contain essentially any properties, there are some
+well known properties with associated types. Fontconfig uses some of these
+properties for font matching and font completion. Others are provided as a
+convenience for the applications' rendering mechanism.
+.sp
+.nf
+ Property Type Description
+ --------------------------------------------------------------
+ family String Font family names
+ familylang String Languages corresponding to each family
+ style String Font style. Overrides weight and slant
+ stylelang String Languages corresponding to each style
+ fullname String Font full names (often includes style)
+ fullnamelang String Languages corresponding to each fullname
+ slant Int Italic, oblique or roman
+ weight Int Light, medium, demibold, bold or black
+ size Double Point size
+ width Int Condensed, normal or expanded
+ aspect Double Stretches glyphs horizontally before hinting
+ pixelsize Double Pixel size
+ spacing Int Proportional, dual-width, monospace or charcell
+ foundry String Font foundry name
+ antialias Bool Whether glyphs can be antialiased
+ hinting Bool Whether the rasterizer should use hinting
+ hintstyle Int Automatic hinting style
+ verticallayout Bool Use vertical layout
+ autohint Bool Use autohinter instead of normal hinter
+ globaladvance Bool Use font global advance data
+ file String The filename holding the font
+ index Int The index of the font within the file
+ ftface FT_Face Use the specified FreeType face object
+ rasterizer String Which rasterizer is in use
+ outline Bool Whether the glyphs are outlines
+ scalable Bool Whether glyphs can be scaled
+ scale Double Scale factor for point->pixel conversions
+ dpi Double Target dots per inch
+ rgba Int unknown, rgb, bgr, vrgb, vbgr,
+ none - subpixel geometry
+ lcdfilter Int Type of LCD filter
+ minspace Bool Eliminate leading from line spacing
+ charset CharSet Unicode chars encoded by the font
+ lang String List of RFC-3066-style languages this
+ font supports
+ fontversion Int Version number of the font
+ capability String List of layout capabilities in the font
+ embolden Bool Rasterizer should synthetically embolden the font
+
+.sp
+.fi
+.SS "FONT MATCHING"
+.PP
+Fontconfig performs matching by measuring the distance from a provided
+pattern to all of the available fonts in the system. The closest matching
+font is selected. This ensures that a font will always be returned, but
+doesn't ensure that it is anything like the requested pattern.
+.PP
+Font matching starts with an application constructed pattern. The desired
+attributes of the resulting font are collected together in a pattern. Each
+property of the pattern can contain one or more values; these are listed in
+priority order; matches earlier in the list are considered "closer" than
+matches later in the list.
+.PP
+The initial pattern is modified by applying the list of editing instructions
+specific to patterns found in the configuration; each consists of a match
+predicate and a set of editing operations. They are executed in the order
+they appeared in the configuration. Each match causes the associated
+sequence of editing operations to be applied.
+.PP
+After the pattern has been edited, a sequence of default substitutions are
+performed to canonicalize the set of available properties; this avoids the
+need for the lower layers to constantly provide default values for various
+font properties during rendering.
+.PP
+The canonical font pattern is finally matched against all available fonts.
+The distance from the pattern to the font is measured for each of several
+properties: foundry, charset, family, lang, spacing, pixelsize, style,
+slant, weight, antialias, rasterizer and outline. This list is in priority
+order -- results of comparing earlier elements of this list weigh more
+heavily than later elements.
+.PP
+There is one special case to this rule; family names are split into two
+bindings; strong and weak. Strong family names are given greater precedence
+in the match than lang elements while weak family names are given lower
+precedence than lang elements. This permits the document language to drive
+font selection when any document specified font is unavailable.
+.PP
+The pattern representing that font is augmented to include any properties
+found in the pattern but not found in the font itself; this permits the
+application to pass rendering instructions or any other data through the
+matching system. Finally, the list of editing instructions specific to
+fonts found in the configuration are applied to the pattern. This modified
+pattern is returned to the application.
+.PP
+The return value contains sufficient information to locate and rasterize the
+font, including the file name, pixel size and other rendering data. As
+none of the information involved pertains to the FreeType library,
+applications are free to use any rasterization engine or even to take
+the identified font file and access it directly.
+.PP
+The match/edit sequences in the configuration are performed in two passes
+because there are essentially two different operations necessary -- the
+first is to modify how fonts are selected; aliasing families and adding
+suitable defaults. The second is to modify how the selected fonts are
+rasterized. Those must apply to the selected font, not the original pattern
+as false matches will often occur.
+.SS "FONT NAMES"
+.PP
+Fontconfig provides a textual representation for patterns that the library
+can both accept and generate. The representation is in three parts, first a
+list of family names, second a list of point sizes and finally a list of
+additional properties:
+.sp
+.nf
+ -:=:=\&...
+
+.sp
+.fi
+.PP
+Values in a list are separated with commas. The name needn't include either
+families or point sizes; they can be elided. In addition, there are
+symbolic constants that simultaneously indicate both a name and a value.
+Here are some examples:
+.sp
+.nf
+ Name Meaning
+ ----------------------------------------------------------
+ Times-12 12 point Times Roman
+ Times-12:bold 12 point Times Bold
+ Courier:italic Courier Italic in the default size
+ Monospace:matrix=1 .1 0 1 The users preferred monospace font
+ with artificial obliquing
+
+.sp
+.fi
+.PP
+The '\\', '-', ':' and ',' characters in family names must be preceeded by a
+\&'\\' character to avoid having them misinterpreted. Similarly, values
+containing '\\', '=', '_', ':' and ',' must also have them preceeded by a
+\&'\\' character. The '\\' characters are stripped out of the family name and
+values as the font name is read.
+.SH "DEBUGGING APPLICATIONS"
+.PP
+To help diagnose font and applications problems, fontconfig is built with a
+large amount of internal debugging left enabled. It is controlled by means
+of the FC_DEBUG environment variable. The value of this variable is
+interpreted as a number, and each bit within that value controls different
+debugging messages.
+.sp
+.nf
+ Name Value Meaning
+ ---------------------------------------------------------
+ MATCH 1 Brief information about font matching
+ MATCHV 2 Extensive font matching information
+ EDIT 4 Monitor match/test/edit execution
+ FONTSET 8 Track loading of font information at startup
+ CACHE 16 Watch cache files being written
+ CACHEV 32 Extensive cache file writing information
+ PARSE 64 (no longer in use)
+ SCAN 128 Watch font files being scanned to build caches
+ SCANV 256 Verbose font file scanning information
+ MEMORY 512 Monitor fontconfig memory usage
+ CONFIG 1024 Monitor which config files are loaded
+ LANGSET 2048 Dump char sets used to construct lang values
+ OBJTYPES 4096 Display message when value typechecks fail
+
+.sp
+.fi
+.PP
+Add the value of the desired debug levels together and assign that (in
+base 10) to the FC_DEBUG environment variable before running the
+application. Output from these statements is sent to stdout.
+.SH "LANG TAGS"
+.PP
+Each font in the database contains a list of languages it supports. This is
+computed by comparing the Unicode coverage of the font with the orthography
+of each language. Languages are tagged using an RFC-3066 compatible naming
+and occur in two parts -- the ISO 639 language tag followed a hyphen and then
+by the ISO 3166 country code. The hyphen and country code may be elided.
+.PP
+Fontconfig has orthographies for several languages built into the library.
+No provision has been made for adding new ones aside from rebuilding the
+library. It currently supports 122 of the 139 languages named in ISO 639-1,
+141 of the languages with two-letter codes from ISO 639-2 and another 30
+languages with only three-letter codes. Languages with both two and three
+letter codes are provided with only the two letter code.
+.PP
+For languages used in multiple territories with radically different
+character sets, fontconfig includes per-territory orthographies. This
+includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese.
+.SH "CONFIGURATION FILE FORMAT"
+.PP
+Configuration files for fontconfig are stored in XML format; this
+format makes external configuration tools easier to write and ensures that
+they will generate syntactically correct configuration files. As XML
+files are plain text, they can also be manipulated by the expert user using
+a text editor.
+.PP
+The fontconfig document type definition resides in the external entity
+"fonts.dtd"; this is normally stored in the default font configuration
+directory (/etc/fonts). Each configuration file should contain the
+following structure:
+.sp
+.nf
+
+
+
+\&...
+
+
+.sp
+.fi
+.SS ""
+.PP
+This is the top level element for a font configuration and can contain
+, , , and