diff --git a/.gitattributes b/.gitattributes index 581a5c3ee..176a458f9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1 @@ -* text eol=lf -README.md eol=crlf \ No newline at end of file +* text=auto diff --git a/assets/configs/buildables/acid_tube.cfg b/assets/configs/buildables/acid_tube.cfg index e44ed48fd..f4fee3fb3 100644 --- a/assets/configs/buildables/acid_tube.cfg +++ b/assets/configs/buildables/acid_tube.cfg @@ -2,4 +2,4 @@ model 0 models/buildables/acid_tube/acid_tube.md3 modelScale 0.6 mins -15 -15 -15 maxs 15 15 15 -zOffset -8.5 +zOffset -10 diff --git a/assets/configs/buildables/dcc.cfg b/assets/configs/buildables/dcc.cfg index 932e30239..bdae47c92 100644 --- a/assets/configs/buildables/dcc.cfg +++ b/assets/configs/buildables/dcc.cfg @@ -2,4 +2,4 @@ model 0 models/buildables/dcc/dcc.md3 modelScale 1.0 mins -35 -35 -13 maxs 35 35 47 -zOffset 0 +zOffset -1 diff --git a/assets/configs/buildables/eggpod.cfg b/assets/configs/buildables/eggpod.cfg index 71cb6c707..82ffed26d 100644 --- a/assets/configs/buildables/eggpod.cfg +++ b/assets/configs/buildables/eggpod.cfg @@ -2,4 +2,4 @@ model 0 models/buildables/eggpod/eggpod.md3 modelScale 1.0 mins -15 -15 -15 maxs 15 15 15 -zOffset 0 +zOffset -2.5 diff --git a/assets/configs/buildables/overmind.cfg b/assets/configs/buildables/overmind.cfg index f9baca5dc..9354acb9d 100644 --- a/assets/configs/buildables/overmind.cfg +++ b/assets/configs/buildables/overmind.cfg @@ -2,4 +2,4 @@ model 0 models/buildables/overmind/overmind.md3 modelScale 1.0 mins -45 -45 -15 maxs 45 45 95 -zOffset 0 +zOffset -1 diff --git a/assets/configs/buildables/repeater.cfg b/assets/configs/buildables/repeater.cfg index eec28243b..9b98ad07d 100644 --- a/assets/configs/buildables/repeater.cfg +++ b/assets/configs/buildables/repeater.cfg @@ -2,4 +2,4 @@ model 0 models/buildables/repeater/repeater.md3 modelScale 1.0 mins -15 -15 -15 maxs 15 15 25 -zOffset 0 +zOffset -3.2 diff --git a/assets/default.cfg b/assets/default.cfg new file mode 100644 index 000000000..c4572ac28 --- /dev/null +++ b/assets/default.cfg @@ -0,0 +1,99 @@ +// +// KEY BINDINGS +// + +unbindall + +bind - sizedown +bind _ sizedown +bind = sizeup +bind + sizeup + +// +// WEAPONS/UPGRADES +// +bind MOUSE1 +attack +bind MOUSE2 +button5 + +bind [ weapprev +bind ] weapnext +bind mwheelup weapprev +bind mwheeldown weapnext +bind ENTER +button2 +bind MOUSE3 +button2 + + +// +// CHARACTER CONTROLS +// + +bind CTRL +attack + +bind ALT +strafe +bind SHIFT +speed + +bind DEL +lookdown +bind PGDN +lookup +bind END centerview + +bind c +movedown +bind SPACE +moveup + + +bind UPARROW +forward +bind DOWNARROW +back +bind LEFTARROW +left +bind RIGHTARROW +right +bind w +forward +bind a +moveleft +bind s +back +bind d +moveright + +bind x +button8 +bind v +button6 + +bind \ +mlook + +// +// MISC +// + +bind t messagemode +bind y messagemode2 +bind u messagemode3 +bind i messagemode4 + +bind r reload +bind b "buy ammo" +bind m "itemact medkit" +bind g "itemact gren" +bind j "itemtoggle jetpack" +bind z "itemtoggle blaster" +bind q +button7 +bind e deconstruct +bind , rotatebuildleft +bind . rotatebuildright +bind / rotatebuild +bind f +button3 +bind h scoresUp +bind n scoresDown + +// +// CLIENT ENVIRONMENT COMMANDS +// + +bind PAUSE pause +bind ESCAPE togglemenu + +bind TAB +scores + +bind F1 "vote yes" +bind F2 "vote no" +bind F3 "teamvote yes" +bind F4 "teamvote no" + + +// +// DEVELOPER KEYS +// +bind F11 screenshotJPEG diff --git a/assets/emoticons/!_1x1.tga b/assets/emoticons/!_1x1.tga new file mode 100644 index 000000000..72daa8c81 Binary files /dev/null and b/assets/emoticons/!_1x1.tga differ diff --git a/assets/emoticons/locked_1x1.tga b/assets/emoticons/locked_1x1.tga new file mode 100644 index 000000000..1928bb7a0 Binary files /dev/null and b/assets/emoticons/locked_1x1.tga differ diff --git a/assets/emoticons/upgrade_1x1.tga b/assets/emoticons/upgrade_1x1.tga new file mode 100644 index 000000000..1ad5e7d2f Binary files /dev/null and b/assets/emoticons/upgrade_1x1.tga differ diff --git a/assets/gfx/2d/load_screen.jpg b/assets/gfx/2d/load_screen.jpg new file mode 100644 index 000000000..d12e1bfb9 Binary files /dev/null and b/assets/gfx/2d/load_screen.jpg differ diff --git a/assets/gfx/misc/creep/creep0.tga b/assets/gfx/misc/creep/creep0.tga new file mode 100644 index 000000000..07c5ab7de Binary files /dev/null and b/assets/gfx/misc/creep/creep0.tga differ diff --git a/assets/gfx/misc/creep/creep1.tga b/assets/gfx/misc/creep/creep1.tga new file mode 100644 index 000000000..bf5e502ec Binary files /dev/null and b/assets/gfx/misc/creep/creep1.tga differ diff --git a/assets/gfx/misc/creep/creep10.tga b/assets/gfx/misc/creep/creep10.tga new file mode 100644 index 000000000..d41f49dfe Binary files /dev/null and b/assets/gfx/misc/creep/creep10.tga differ diff --git a/assets/gfx/misc/creep/creep100.tga b/assets/gfx/misc/creep/creep100.tga new file mode 100644 index 000000000..dc38c5add Binary files /dev/null and b/assets/gfx/misc/creep/creep100.tga differ diff --git a/assets/gfx/misc/creep/creep101.tga b/assets/gfx/misc/creep/creep101.tga new file mode 100644 index 000000000..021845538 Binary files /dev/null and b/assets/gfx/misc/creep/creep101.tga differ diff --git a/assets/gfx/misc/creep/creep102.tga b/assets/gfx/misc/creep/creep102.tga new file mode 100644 index 000000000..51775e7b4 Binary files /dev/null and b/assets/gfx/misc/creep/creep102.tga differ diff --git a/assets/gfx/misc/creep/creep103.tga b/assets/gfx/misc/creep/creep103.tga new file mode 100644 index 000000000..6fd52db05 Binary files /dev/null and b/assets/gfx/misc/creep/creep103.tga differ diff --git a/assets/gfx/misc/creep/creep104.tga b/assets/gfx/misc/creep/creep104.tga new file mode 100644 index 000000000..e6d0c7abc Binary files /dev/null and b/assets/gfx/misc/creep/creep104.tga differ diff --git a/assets/gfx/misc/creep/creep105.tga b/assets/gfx/misc/creep/creep105.tga new file mode 100644 index 000000000..58c4c303e Binary files /dev/null and b/assets/gfx/misc/creep/creep105.tga differ diff --git a/assets/gfx/misc/creep/creep106.tga b/assets/gfx/misc/creep/creep106.tga new file mode 100644 index 000000000..77614af10 Binary files /dev/null and b/assets/gfx/misc/creep/creep106.tga differ diff --git a/assets/gfx/misc/creep/creep107.tga b/assets/gfx/misc/creep/creep107.tga new file mode 100644 index 000000000..8a1d02afb Binary files /dev/null and b/assets/gfx/misc/creep/creep107.tga differ diff --git a/assets/gfx/misc/creep/creep108.tga b/assets/gfx/misc/creep/creep108.tga new file mode 100644 index 000000000..3721bb1a2 Binary files /dev/null and b/assets/gfx/misc/creep/creep108.tga differ diff --git a/assets/gfx/misc/creep/creep109.tga b/assets/gfx/misc/creep/creep109.tga new file mode 100644 index 000000000..e6a60d21d Binary files /dev/null and b/assets/gfx/misc/creep/creep109.tga differ diff --git a/assets/gfx/misc/creep/creep11.tga b/assets/gfx/misc/creep/creep11.tga new file mode 100644 index 000000000..380a3d418 Binary files /dev/null and b/assets/gfx/misc/creep/creep11.tga differ diff --git a/assets/gfx/misc/creep/creep110.tga b/assets/gfx/misc/creep/creep110.tga new file mode 100644 index 000000000..b5ada58d2 Binary files /dev/null and b/assets/gfx/misc/creep/creep110.tga differ diff --git a/assets/gfx/misc/creep/creep111.tga b/assets/gfx/misc/creep/creep111.tga new file mode 100644 index 000000000..9f2893106 Binary files /dev/null and b/assets/gfx/misc/creep/creep111.tga differ diff --git a/assets/gfx/misc/creep/creep112.tga b/assets/gfx/misc/creep/creep112.tga new file mode 100644 index 000000000..900cfbd9e Binary files /dev/null and b/assets/gfx/misc/creep/creep112.tga differ diff --git a/assets/gfx/misc/creep/creep113.tga b/assets/gfx/misc/creep/creep113.tga new file mode 100644 index 000000000..ee2b6ef6d Binary files /dev/null and b/assets/gfx/misc/creep/creep113.tga differ diff --git a/assets/gfx/misc/creep/creep114.tga b/assets/gfx/misc/creep/creep114.tga new file mode 100644 index 000000000..3cc4beac1 Binary files /dev/null and b/assets/gfx/misc/creep/creep114.tga differ diff --git a/assets/gfx/misc/creep/creep115.tga b/assets/gfx/misc/creep/creep115.tga new file mode 100644 index 000000000..3c147e908 Binary files /dev/null and b/assets/gfx/misc/creep/creep115.tga differ diff --git a/assets/gfx/misc/creep/creep116.tga b/assets/gfx/misc/creep/creep116.tga new file mode 100644 index 000000000..8c0d361d8 Binary files /dev/null and b/assets/gfx/misc/creep/creep116.tga differ diff --git a/assets/gfx/misc/creep/creep117.tga b/assets/gfx/misc/creep/creep117.tga new file mode 100644 index 000000000..ecd44ba39 Binary files /dev/null and b/assets/gfx/misc/creep/creep117.tga differ diff --git a/assets/gfx/misc/creep/creep118.tga b/assets/gfx/misc/creep/creep118.tga new file mode 100644 index 000000000..2e2b0d808 Binary files /dev/null and b/assets/gfx/misc/creep/creep118.tga differ diff --git a/assets/gfx/misc/creep/creep119.tga b/assets/gfx/misc/creep/creep119.tga new file mode 100644 index 000000000..308e8631f Binary files /dev/null and b/assets/gfx/misc/creep/creep119.tga differ diff --git a/assets/gfx/misc/creep/creep12.tga b/assets/gfx/misc/creep/creep12.tga new file mode 100644 index 000000000..092e8d4f1 Binary files /dev/null and b/assets/gfx/misc/creep/creep12.tga differ diff --git a/assets/gfx/misc/creep/creep120.tga b/assets/gfx/misc/creep/creep120.tga new file mode 100644 index 000000000..2215d7a87 Binary files /dev/null and b/assets/gfx/misc/creep/creep120.tga differ diff --git a/assets/gfx/misc/creep/creep121.tga b/assets/gfx/misc/creep/creep121.tga new file mode 100644 index 000000000..7857413af Binary files /dev/null and b/assets/gfx/misc/creep/creep121.tga differ diff --git a/assets/gfx/misc/creep/creep122.tga b/assets/gfx/misc/creep/creep122.tga new file mode 100644 index 000000000..e2ebd7c45 Binary files /dev/null and b/assets/gfx/misc/creep/creep122.tga differ diff --git a/assets/gfx/misc/creep/creep123.tga b/assets/gfx/misc/creep/creep123.tga new file mode 100644 index 000000000..90bad1218 Binary files /dev/null and b/assets/gfx/misc/creep/creep123.tga differ diff --git a/assets/gfx/misc/creep/creep124.tga b/assets/gfx/misc/creep/creep124.tga new file mode 100644 index 000000000..64f0b6244 Binary files /dev/null and b/assets/gfx/misc/creep/creep124.tga differ diff --git a/assets/gfx/misc/creep/creep125.tga b/assets/gfx/misc/creep/creep125.tga new file mode 100644 index 000000000..5092b8644 Binary files /dev/null and b/assets/gfx/misc/creep/creep125.tga differ diff --git a/assets/gfx/misc/creep/creep126.tga b/assets/gfx/misc/creep/creep126.tga new file mode 100644 index 000000000..ca5342b2b Binary files /dev/null and b/assets/gfx/misc/creep/creep126.tga differ diff --git a/assets/gfx/misc/creep/creep127.tga b/assets/gfx/misc/creep/creep127.tga new file mode 100644 index 000000000..31c807d9c Binary files /dev/null and b/assets/gfx/misc/creep/creep127.tga differ diff --git a/assets/gfx/misc/creep/creep128.tga b/assets/gfx/misc/creep/creep128.tga new file mode 100644 index 000000000..10fe0a122 Binary files /dev/null and b/assets/gfx/misc/creep/creep128.tga differ diff --git a/assets/gfx/misc/creep/creep129.tga b/assets/gfx/misc/creep/creep129.tga new file mode 100644 index 000000000..cc8e14f17 Binary files /dev/null and b/assets/gfx/misc/creep/creep129.tga differ diff --git a/assets/gfx/misc/creep/creep13.tga b/assets/gfx/misc/creep/creep13.tga new file mode 100644 index 000000000..8d76ffe46 Binary files /dev/null and b/assets/gfx/misc/creep/creep13.tga differ diff --git a/assets/gfx/misc/creep/creep130.tga b/assets/gfx/misc/creep/creep130.tga new file mode 100644 index 000000000..47c36cd1c Binary files /dev/null and b/assets/gfx/misc/creep/creep130.tga differ diff --git a/assets/gfx/misc/creep/creep131.tga b/assets/gfx/misc/creep/creep131.tga new file mode 100644 index 000000000..c3896b79d Binary files /dev/null and b/assets/gfx/misc/creep/creep131.tga differ diff --git a/assets/gfx/misc/creep/creep132.tga b/assets/gfx/misc/creep/creep132.tga new file mode 100644 index 000000000..665b42fd6 Binary files /dev/null and b/assets/gfx/misc/creep/creep132.tga differ diff --git a/assets/gfx/misc/creep/creep133.tga b/assets/gfx/misc/creep/creep133.tga new file mode 100644 index 000000000..bc82b47fb Binary files /dev/null and b/assets/gfx/misc/creep/creep133.tga differ diff --git a/assets/gfx/misc/creep/creep134.tga b/assets/gfx/misc/creep/creep134.tga new file mode 100644 index 000000000..4d7ca7fd9 Binary files /dev/null and b/assets/gfx/misc/creep/creep134.tga differ diff --git a/assets/gfx/misc/creep/creep135.tga b/assets/gfx/misc/creep/creep135.tga new file mode 100644 index 000000000..7ae02c95c Binary files /dev/null and b/assets/gfx/misc/creep/creep135.tga differ diff --git a/assets/gfx/misc/creep/creep136.tga b/assets/gfx/misc/creep/creep136.tga new file mode 100644 index 000000000..ea5e2f670 Binary files /dev/null and b/assets/gfx/misc/creep/creep136.tga differ diff --git a/assets/gfx/misc/creep/creep137.tga b/assets/gfx/misc/creep/creep137.tga new file mode 100644 index 000000000..04d6b7aeb Binary files /dev/null and b/assets/gfx/misc/creep/creep137.tga differ diff --git a/assets/gfx/misc/creep/creep138.tga b/assets/gfx/misc/creep/creep138.tga new file mode 100644 index 000000000..3f6197075 Binary files /dev/null and b/assets/gfx/misc/creep/creep138.tga differ diff --git a/assets/gfx/misc/creep/creep139.tga b/assets/gfx/misc/creep/creep139.tga new file mode 100644 index 000000000..7888a3e6f Binary files /dev/null and b/assets/gfx/misc/creep/creep139.tga differ diff --git a/assets/gfx/misc/creep/creep14.tga b/assets/gfx/misc/creep/creep14.tga new file mode 100644 index 000000000..d2114d368 Binary files /dev/null and b/assets/gfx/misc/creep/creep14.tga differ diff --git a/assets/gfx/misc/creep/creep140.tga b/assets/gfx/misc/creep/creep140.tga new file mode 100644 index 000000000..3e1df1f11 Binary files /dev/null and b/assets/gfx/misc/creep/creep140.tga differ diff --git a/assets/gfx/misc/creep/creep141.tga b/assets/gfx/misc/creep/creep141.tga new file mode 100644 index 000000000..f276272c8 Binary files /dev/null and b/assets/gfx/misc/creep/creep141.tga differ diff --git a/assets/gfx/misc/creep/creep142.tga b/assets/gfx/misc/creep/creep142.tga new file mode 100644 index 000000000..6d6261955 Binary files /dev/null and b/assets/gfx/misc/creep/creep142.tga differ diff --git a/assets/gfx/misc/creep/creep143.tga b/assets/gfx/misc/creep/creep143.tga new file mode 100644 index 000000000..6eac9f1e3 Binary files /dev/null and b/assets/gfx/misc/creep/creep143.tga differ diff --git a/assets/gfx/misc/creep/creep144.tga b/assets/gfx/misc/creep/creep144.tga new file mode 100644 index 000000000..c97b5e76c Binary files /dev/null and b/assets/gfx/misc/creep/creep144.tga differ diff --git a/assets/gfx/misc/creep/creep145.tga b/assets/gfx/misc/creep/creep145.tga new file mode 100644 index 000000000..02e2d909c Binary files /dev/null and b/assets/gfx/misc/creep/creep145.tga differ diff --git a/assets/gfx/misc/creep/creep146.tga b/assets/gfx/misc/creep/creep146.tga new file mode 100644 index 000000000..aa6a1ab97 Binary files /dev/null and b/assets/gfx/misc/creep/creep146.tga differ diff --git a/assets/gfx/misc/creep/creep147.tga b/assets/gfx/misc/creep/creep147.tga new file mode 100644 index 000000000..30fe461c8 Binary files /dev/null and b/assets/gfx/misc/creep/creep147.tga differ diff --git a/assets/gfx/misc/creep/creep148.tga b/assets/gfx/misc/creep/creep148.tga new file mode 100644 index 000000000..3b558fb85 Binary files /dev/null and b/assets/gfx/misc/creep/creep148.tga differ diff --git a/assets/gfx/misc/creep/creep149.tga b/assets/gfx/misc/creep/creep149.tga new file mode 100644 index 000000000..842fb3cf3 Binary files /dev/null and b/assets/gfx/misc/creep/creep149.tga differ diff --git a/assets/gfx/misc/creep/creep15.tga b/assets/gfx/misc/creep/creep15.tga new file mode 100644 index 000000000..c7b02cfb7 Binary files /dev/null and b/assets/gfx/misc/creep/creep15.tga differ diff --git a/assets/gfx/misc/creep/creep150.tga b/assets/gfx/misc/creep/creep150.tga new file mode 100644 index 000000000..e17f8c7aa Binary files /dev/null and b/assets/gfx/misc/creep/creep150.tga differ diff --git a/assets/gfx/misc/creep/creep151.tga b/assets/gfx/misc/creep/creep151.tga new file mode 100644 index 000000000..5d8f11e57 Binary files /dev/null and b/assets/gfx/misc/creep/creep151.tga differ diff --git a/assets/gfx/misc/creep/creep152.tga b/assets/gfx/misc/creep/creep152.tga new file mode 100644 index 000000000..791270447 Binary files /dev/null and b/assets/gfx/misc/creep/creep152.tga differ diff --git a/assets/gfx/misc/creep/creep153.tga b/assets/gfx/misc/creep/creep153.tga new file mode 100644 index 000000000..10b68aff2 Binary files /dev/null and b/assets/gfx/misc/creep/creep153.tga differ diff --git a/assets/gfx/misc/creep/creep154.tga b/assets/gfx/misc/creep/creep154.tga new file mode 100644 index 000000000..8700f4cd4 Binary files /dev/null and b/assets/gfx/misc/creep/creep154.tga differ diff --git a/assets/gfx/misc/creep/creep155.tga b/assets/gfx/misc/creep/creep155.tga new file mode 100644 index 000000000..d04decc6f Binary files /dev/null and b/assets/gfx/misc/creep/creep155.tga differ diff --git a/assets/gfx/misc/creep/creep156.tga b/assets/gfx/misc/creep/creep156.tga new file mode 100644 index 000000000..ea7f4df3e Binary files /dev/null and b/assets/gfx/misc/creep/creep156.tga differ diff --git a/assets/gfx/misc/creep/creep157.tga b/assets/gfx/misc/creep/creep157.tga new file mode 100644 index 000000000..10a995a56 Binary files /dev/null and b/assets/gfx/misc/creep/creep157.tga differ diff --git a/assets/gfx/misc/creep/creep158.tga b/assets/gfx/misc/creep/creep158.tga new file mode 100644 index 000000000..c15f6c614 Binary files /dev/null and b/assets/gfx/misc/creep/creep158.tga differ diff --git a/assets/gfx/misc/creep/creep159.tga b/assets/gfx/misc/creep/creep159.tga new file mode 100644 index 000000000..7f5ee2df6 Binary files /dev/null and b/assets/gfx/misc/creep/creep159.tga differ diff --git a/assets/gfx/misc/creep/creep16.tga b/assets/gfx/misc/creep/creep16.tga new file mode 100644 index 000000000..a13b35dc2 Binary files /dev/null and b/assets/gfx/misc/creep/creep16.tga differ diff --git a/assets/gfx/misc/creep/creep160.tga b/assets/gfx/misc/creep/creep160.tga new file mode 100644 index 000000000..6b881250a Binary files /dev/null and b/assets/gfx/misc/creep/creep160.tga differ diff --git a/assets/gfx/misc/creep/creep161.tga b/assets/gfx/misc/creep/creep161.tga new file mode 100644 index 000000000..79f96838a Binary files /dev/null and b/assets/gfx/misc/creep/creep161.tga differ diff --git a/assets/gfx/misc/creep/creep162.tga b/assets/gfx/misc/creep/creep162.tga new file mode 100644 index 000000000..45040aa5c Binary files /dev/null and b/assets/gfx/misc/creep/creep162.tga differ diff --git a/assets/gfx/misc/creep/creep163.tga b/assets/gfx/misc/creep/creep163.tga new file mode 100644 index 000000000..574bf66be Binary files /dev/null and b/assets/gfx/misc/creep/creep163.tga differ diff --git a/assets/gfx/misc/creep/creep164.tga b/assets/gfx/misc/creep/creep164.tga new file mode 100644 index 000000000..4e77db0d3 Binary files /dev/null and b/assets/gfx/misc/creep/creep164.tga differ diff --git a/assets/gfx/misc/creep/creep165.tga b/assets/gfx/misc/creep/creep165.tga new file mode 100644 index 000000000..4dc727f2d Binary files /dev/null and b/assets/gfx/misc/creep/creep165.tga differ diff --git a/assets/gfx/misc/creep/creep166.tga b/assets/gfx/misc/creep/creep166.tga new file mode 100644 index 000000000..a5e1d8aa2 Binary files /dev/null and b/assets/gfx/misc/creep/creep166.tga differ diff --git a/assets/gfx/misc/creep/creep167.tga b/assets/gfx/misc/creep/creep167.tga new file mode 100644 index 000000000..8468a3a51 Binary files /dev/null and b/assets/gfx/misc/creep/creep167.tga differ diff --git a/assets/gfx/misc/creep/creep168.tga b/assets/gfx/misc/creep/creep168.tga new file mode 100644 index 000000000..3c7f41bb4 Binary files /dev/null and b/assets/gfx/misc/creep/creep168.tga differ diff --git a/assets/gfx/misc/creep/creep169.tga b/assets/gfx/misc/creep/creep169.tga new file mode 100644 index 000000000..7b02e9cb6 Binary files /dev/null and b/assets/gfx/misc/creep/creep169.tga differ diff --git a/assets/gfx/misc/creep/creep17.tga b/assets/gfx/misc/creep/creep17.tga new file mode 100644 index 000000000..aaf9671ef Binary files /dev/null and b/assets/gfx/misc/creep/creep17.tga differ diff --git a/assets/gfx/misc/creep/creep170.tga b/assets/gfx/misc/creep/creep170.tga new file mode 100644 index 000000000..78c96e622 Binary files /dev/null and b/assets/gfx/misc/creep/creep170.tga differ diff --git a/assets/gfx/misc/creep/creep171.tga b/assets/gfx/misc/creep/creep171.tga new file mode 100644 index 000000000..cf44c0e25 Binary files /dev/null and b/assets/gfx/misc/creep/creep171.tga differ diff --git a/assets/gfx/misc/creep/creep172.tga b/assets/gfx/misc/creep/creep172.tga new file mode 100644 index 000000000..200047d02 Binary files /dev/null and b/assets/gfx/misc/creep/creep172.tga differ diff --git a/assets/gfx/misc/creep/creep173.tga b/assets/gfx/misc/creep/creep173.tga new file mode 100644 index 000000000..595c3b23e Binary files /dev/null and b/assets/gfx/misc/creep/creep173.tga differ diff --git a/assets/gfx/misc/creep/creep174.tga b/assets/gfx/misc/creep/creep174.tga new file mode 100644 index 000000000..ae37195a1 Binary files /dev/null and b/assets/gfx/misc/creep/creep174.tga differ diff --git a/assets/gfx/misc/creep/creep175.tga b/assets/gfx/misc/creep/creep175.tga new file mode 100644 index 000000000..747766223 Binary files /dev/null and b/assets/gfx/misc/creep/creep175.tga differ diff --git a/assets/gfx/misc/creep/creep176.tga b/assets/gfx/misc/creep/creep176.tga new file mode 100644 index 000000000..79dbdbbe4 Binary files /dev/null and b/assets/gfx/misc/creep/creep176.tga differ diff --git a/assets/gfx/misc/creep/creep177.tga b/assets/gfx/misc/creep/creep177.tga new file mode 100644 index 000000000..c7673aed9 Binary files /dev/null and b/assets/gfx/misc/creep/creep177.tga differ diff --git a/assets/gfx/misc/creep/creep178.tga b/assets/gfx/misc/creep/creep178.tga new file mode 100644 index 000000000..1742eda3d Binary files /dev/null and b/assets/gfx/misc/creep/creep178.tga differ diff --git a/assets/gfx/misc/creep/creep179.tga b/assets/gfx/misc/creep/creep179.tga new file mode 100644 index 000000000..26e8c59a2 Binary files /dev/null and b/assets/gfx/misc/creep/creep179.tga differ diff --git a/assets/gfx/misc/creep/creep18.tga b/assets/gfx/misc/creep/creep18.tga new file mode 100644 index 000000000..a73d80272 Binary files /dev/null and b/assets/gfx/misc/creep/creep18.tga differ diff --git a/assets/gfx/misc/creep/creep180.tga b/assets/gfx/misc/creep/creep180.tga new file mode 100644 index 000000000..db33deac9 Binary files /dev/null and b/assets/gfx/misc/creep/creep180.tga differ diff --git a/assets/gfx/misc/creep/creep181.tga b/assets/gfx/misc/creep/creep181.tga new file mode 100644 index 000000000..7925ca346 Binary files /dev/null and b/assets/gfx/misc/creep/creep181.tga differ diff --git a/assets/gfx/misc/creep/creep182.tga b/assets/gfx/misc/creep/creep182.tga new file mode 100644 index 000000000..9ec6be2c2 Binary files /dev/null and b/assets/gfx/misc/creep/creep182.tga differ diff --git a/assets/gfx/misc/creep/creep183.tga b/assets/gfx/misc/creep/creep183.tga new file mode 100644 index 000000000..c1105fe74 Binary files /dev/null and b/assets/gfx/misc/creep/creep183.tga differ diff --git a/assets/gfx/misc/creep/creep184.tga b/assets/gfx/misc/creep/creep184.tga new file mode 100644 index 000000000..3444a8255 Binary files /dev/null and b/assets/gfx/misc/creep/creep184.tga differ diff --git a/assets/gfx/misc/creep/creep185.tga b/assets/gfx/misc/creep/creep185.tga new file mode 100644 index 000000000..dd17c4d19 Binary files /dev/null and b/assets/gfx/misc/creep/creep185.tga differ diff --git a/assets/gfx/misc/creep/creep186.tga b/assets/gfx/misc/creep/creep186.tga new file mode 100644 index 000000000..8bf528847 Binary files /dev/null and b/assets/gfx/misc/creep/creep186.tga differ diff --git a/assets/gfx/misc/creep/creep187.tga b/assets/gfx/misc/creep/creep187.tga new file mode 100644 index 000000000..1f926aa78 Binary files /dev/null and b/assets/gfx/misc/creep/creep187.tga differ diff --git a/assets/gfx/misc/creep/creep188.tga b/assets/gfx/misc/creep/creep188.tga new file mode 100644 index 000000000..0f38d4edc Binary files /dev/null and b/assets/gfx/misc/creep/creep188.tga differ diff --git a/assets/gfx/misc/creep/creep189.tga b/assets/gfx/misc/creep/creep189.tga new file mode 100644 index 000000000..9ea931576 Binary files /dev/null and b/assets/gfx/misc/creep/creep189.tga differ diff --git a/assets/gfx/misc/creep/creep19.tga b/assets/gfx/misc/creep/creep19.tga new file mode 100644 index 000000000..114bfbeb8 Binary files /dev/null and b/assets/gfx/misc/creep/creep19.tga differ diff --git a/assets/gfx/misc/creep/creep190.tga b/assets/gfx/misc/creep/creep190.tga new file mode 100644 index 000000000..ad8c11490 Binary files /dev/null and b/assets/gfx/misc/creep/creep190.tga differ diff --git a/assets/gfx/misc/creep/creep191.tga b/assets/gfx/misc/creep/creep191.tga new file mode 100644 index 000000000..4586d7330 Binary files /dev/null and b/assets/gfx/misc/creep/creep191.tga differ diff --git a/assets/gfx/misc/creep/creep192.tga b/assets/gfx/misc/creep/creep192.tga new file mode 100644 index 000000000..4cc6c238c Binary files /dev/null and b/assets/gfx/misc/creep/creep192.tga differ diff --git a/assets/gfx/misc/creep/creep193.tga b/assets/gfx/misc/creep/creep193.tga new file mode 100644 index 000000000..75e94dcf4 Binary files /dev/null and b/assets/gfx/misc/creep/creep193.tga differ diff --git a/assets/gfx/misc/creep/creep194.tga b/assets/gfx/misc/creep/creep194.tga new file mode 100644 index 000000000..14eb0cef8 Binary files /dev/null and b/assets/gfx/misc/creep/creep194.tga differ diff --git a/assets/gfx/misc/creep/creep195.tga b/assets/gfx/misc/creep/creep195.tga new file mode 100644 index 000000000..8e2b23ed6 Binary files /dev/null and b/assets/gfx/misc/creep/creep195.tga differ diff --git a/assets/gfx/misc/creep/creep196.tga b/assets/gfx/misc/creep/creep196.tga new file mode 100644 index 000000000..deae5af8e Binary files /dev/null and b/assets/gfx/misc/creep/creep196.tga differ diff --git a/assets/gfx/misc/creep/creep197.tga b/assets/gfx/misc/creep/creep197.tga new file mode 100644 index 000000000..862222419 Binary files /dev/null and b/assets/gfx/misc/creep/creep197.tga differ diff --git a/assets/gfx/misc/creep/creep198.tga b/assets/gfx/misc/creep/creep198.tga new file mode 100644 index 000000000..017259349 Binary files /dev/null and b/assets/gfx/misc/creep/creep198.tga differ diff --git a/assets/gfx/misc/creep/creep199.tga b/assets/gfx/misc/creep/creep199.tga new file mode 100644 index 000000000..02f6ed784 Binary files /dev/null and b/assets/gfx/misc/creep/creep199.tga differ diff --git a/assets/gfx/misc/creep/creep2.tga b/assets/gfx/misc/creep/creep2.tga new file mode 100644 index 000000000..f48efd058 Binary files /dev/null and b/assets/gfx/misc/creep/creep2.tga differ diff --git a/assets/gfx/misc/creep/creep20.tga b/assets/gfx/misc/creep/creep20.tga new file mode 100644 index 000000000..8b8bcc5d1 Binary files /dev/null and b/assets/gfx/misc/creep/creep20.tga differ diff --git a/assets/gfx/misc/creep/creep200.tga b/assets/gfx/misc/creep/creep200.tga new file mode 100644 index 000000000..2b421b91a Binary files /dev/null and b/assets/gfx/misc/creep/creep200.tga differ diff --git a/assets/gfx/misc/creep/creep201.tga b/assets/gfx/misc/creep/creep201.tga new file mode 100644 index 000000000..a70b72e9e Binary files /dev/null and b/assets/gfx/misc/creep/creep201.tga differ diff --git a/assets/gfx/misc/creep/creep202.tga b/assets/gfx/misc/creep/creep202.tga new file mode 100644 index 000000000..a05a3c416 Binary files /dev/null and b/assets/gfx/misc/creep/creep202.tga differ diff --git a/assets/gfx/misc/creep/creep203.tga b/assets/gfx/misc/creep/creep203.tga new file mode 100644 index 000000000..c6345d3f9 Binary files /dev/null and b/assets/gfx/misc/creep/creep203.tga differ diff --git a/assets/gfx/misc/creep/creep204.tga b/assets/gfx/misc/creep/creep204.tga new file mode 100644 index 000000000..2d7f86658 Binary files /dev/null and b/assets/gfx/misc/creep/creep204.tga differ diff --git a/assets/gfx/misc/creep/creep205.tga b/assets/gfx/misc/creep/creep205.tga new file mode 100644 index 000000000..a67e698e8 Binary files /dev/null and b/assets/gfx/misc/creep/creep205.tga differ diff --git a/assets/gfx/misc/creep/creep206.tga b/assets/gfx/misc/creep/creep206.tga new file mode 100644 index 000000000..f8994cd4e Binary files /dev/null and b/assets/gfx/misc/creep/creep206.tga differ diff --git a/assets/gfx/misc/creep/creep207.tga b/assets/gfx/misc/creep/creep207.tga new file mode 100644 index 000000000..b4f2af1ec Binary files /dev/null and b/assets/gfx/misc/creep/creep207.tga differ diff --git a/assets/gfx/misc/creep/creep208.tga b/assets/gfx/misc/creep/creep208.tga new file mode 100644 index 000000000..ed37b5d79 Binary files /dev/null and b/assets/gfx/misc/creep/creep208.tga differ diff --git a/assets/gfx/misc/creep/creep209.tga b/assets/gfx/misc/creep/creep209.tga new file mode 100644 index 000000000..385678c2b Binary files /dev/null and b/assets/gfx/misc/creep/creep209.tga differ diff --git a/assets/gfx/misc/creep/creep21.tga b/assets/gfx/misc/creep/creep21.tga new file mode 100644 index 000000000..3e02eaf60 Binary files /dev/null and b/assets/gfx/misc/creep/creep21.tga differ diff --git a/assets/gfx/misc/creep/creep210.tga b/assets/gfx/misc/creep/creep210.tga new file mode 100644 index 000000000..ccd8052de Binary files /dev/null and b/assets/gfx/misc/creep/creep210.tga differ diff --git a/assets/gfx/misc/creep/creep211.tga b/assets/gfx/misc/creep/creep211.tga new file mode 100644 index 000000000..e031182df Binary files /dev/null and b/assets/gfx/misc/creep/creep211.tga differ diff --git a/assets/gfx/misc/creep/creep212.tga b/assets/gfx/misc/creep/creep212.tga new file mode 100644 index 000000000..09c6c656c Binary files /dev/null and b/assets/gfx/misc/creep/creep212.tga differ diff --git a/assets/gfx/misc/creep/creep213.tga b/assets/gfx/misc/creep/creep213.tga new file mode 100644 index 000000000..d964b53f2 Binary files /dev/null and b/assets/gfx/misc/creep/creep213.tga differ diff --git a/assets/gfx/misc/creep/creep214.tga b/assets/gfx/misc/creep/creep214.tga new file mode 100644 index 000000000..4769429b1 Binary files /dev/null and b/assets/gfx/misc/creep/creep214.tga differ diff --git a/assets/gfx/misc/creep/creep215.tga b/assets/gfx/misc/creep/creep215.tga new file mode 100644 index 000000000..34999806f Binary files /dev/null and b/assets/gfx/misc/creep/creep215.tga differ diff --git a/assets/gfx/misc/creep/creep216.tga b/assets/gfx/misc/creep/creep216.tga new file mode 100644 index 000000000..deff37bb9 Binary files /dev/null and b/assets/gfx/misc/creep/creep216.tga differ diff --git a/assets/gfx/misc/creep/creep217.tga b/assets/gfx/misc/creep/creep217.tga new file mode 100644 index 000000000..8c7953fff Binary files /dev/null and b/assets/gfx/misc/creep/creep217.tga differ diff --git a/assets/gfx/misc/creep/creep218.tga b/assets/gfx/misc/creep/creep218.tga new file mode 100644 index 000000000..f6fb60a53 Binary files /dev/null and b/assets/gfx/misc/creep/creep218.tga differ diff --git a/assets/gfx/misc/creep/creep219.tga b/assets/gfx/misc/creep/creep219.tga new file mode 100644 index 000000000..ca1d5e8bf Binary files /dev/null and b/assets/gfx/misc/creep/creep219.tga differ diff --git a/assets/gfx/misc/creep/creep22.tga b/assets/gfx/misc/creep/creep22.tga new file mode 100644 index 000000000..64328666c Binary files /dev/null and b/assets/gfx/misc/creep/creep22.tga differ diff --git a/assets/gfx/misc/creep/creep220.tga b/assets/gfx/misc/creep/creep220.tga new file mode 100644 index 000000000..e5a345333 Binary files /dev/null and b/assets/gfx/misc/creep/creep220.tga differ diff --git a/assets/gfx/misc/creep/creep221.tga b/assets/gfx/misc/creep/creep221.tga new file mode 100644 index 000000000..cc4797c3d Binary files /dev/null and b/assets/gfx/misc/creep/creep221.tga differ diff --git a/assets/gfx/misc/creep/creep222.tga b/assets/gfx/misc/creep/creep222.tga new file mode 100644 index 000000000..270ae37f6 Binary files /dev/null and b/assets/gfx/misc/creep/creep222.tga differ diff --git a/assets/gfx/misc/creep/creep223.tga b/assets/gfx/misc/creep/creep223.tga new file mode 100644 index 000000000..9595be0db Binary files /dev/null and b/assets/gfx/misc/creep/creep223.tga differ diff --git a/assets/gfx/misc/creep/creep224.tga b/assets/gfx/misc/creep/creep224.tga new file mode 100644 index 000000000..19b102f07 Binary files /dev/null and b/assets/gfx/misc/creep/creep224.tga differ diff --git a/assets/gfx/misc/creep/creep225.tga b/assets/gfx/misc/creep/creep225.tga new file mode 100644 index 000000000..cf2427219 Binary files /dev/null and b/assets/gfx/misc/creep/creep225.tga differ diff --git a/assets/gfx/misc/creep/creep226.tga b/assets/gfx/misc/creep/creep226.tga new file mode 100644 index 000000000..8405fd4a9 Binary files /dev/null and b/assets/gfx/misc/creep/creep226.tga differ diff --git a/assets/gfx/misc/creep/creep227.tga b/assets/gfx/misc/creep/creep227.tga new file mode 100644 index 000000000..8dda347fc Binary files /dev/null and b/assets/gfx/misc/creep/creep227.tga differ diff --git a/assets/gfx/misc/creep/creep228.tga b/assets/gfx/misc/creep/creep228.tga new file mode 100644 index 000000000..0486205e0 Binary files /dev/null and b/assets/gfx/misc/creep/creep228.tga differ diff --git a/assets/gfx/misc/creep/creep229.tga b/assets/gfx/misc/creep/creep229.tga new file mode 100644 index 000000000..badabcbdf Binary files /dev/null and b/assets/gfx/misc/creep/creep229.tga differ diff --git a/assets/gfx/misc/creep/creep23.tga b/assets/gfx/misc/creep/creep23.tga new file mode 100644 index 000000000..5166ec660 Binary files /dev/null and b/assets/gfx/misc/creep/creep23.tga differ diff --git a/assets/gfx/misc/creep/creep230.tga b/assets/gfx/misc/creep/creep230.tga new file mode 100644 index 000000000..ca06de19c Binary files /dev/null and b/assets/gfx/misc/creep/creep230.tga differ diff --git a/assets/gfx/misc/creep/creep231.tga b/assets/gfx/misc/creep/creep231.tga new file mode 100644 index 000000000..7baaa266c Binary files /dev/null and b/assets/gfx/misc/creep/creep231.tga differ diff --git a/assets/gfx/misc/creep/creep232.tga b/assets/gfx/misc/creep/creep232.tga new file mode 100644 index 000000000..29c21a58b Binary files /dev/null and b/assets/gfx/misc/creep/creep232.tga differ diff --git a/assets/gfx/misc/creep/creep233.tga b/assets/gfx/misc/creep/creep233.tga new file mode 100644 index 000000000..0b7d90315 Binary files /dev/null and b/assets/gfx/misc/creep/creep233.tga differ diff --git a/assets/gfx/misc/creep/creep234.tga b/assets/gfx/misc/creep/creep234.tga new file mode 100644 index 000000000..6f483edc9 Binary files /dev/null and b/assets/gfx/misc/creep/creep234.tga differ diff --git a/assets/gfx/misc/creep/creep235.tga b/assets/gfx/misc/creep/creep235.tga new file mode 100644 index 000000000..2d2f4ea7e Binary files /dev/null and b/assets/gfx/misc/creep/creep235.tga differ diff --git a/assets/gfx/misc/creep/creep236.tga b/assets/gfx/misc/creep/creep236.tga new file mode 100644 index 000000000..b39956f81 Binary files /dev/null and b/assets/gfx/misc/creep/creep236.tga differ diff --git a/assets/gfx/misc/creep/creep237.tga b/assets/gfx/misc/creep/creep237.tga new file mode 100644 index 000000000..194c19357 Binary files /dev/null and b/assets/gfx/misc/creep/creep237.tga differ diff --git a/assets/gfx/misc/creep/creep238.tga b/assets/gfx/misc/creep/creep238.tga new file mode 100644 index 000000000..4437d7e84 Binary files /dev/null and b/assets/gfx/misc/creep/creep238.tga differ diff --git a/assets/gfx/misc/creep/creep239.tga b/assets/gfx/misc/creep/creep239.tga new file mode 100644 index 000000000..54de150b8 Binary files /dev/null and b/assets/gfx/misc/creep/creep239.tga differ diff --git a/assets/gfx/misc/creep/creep24.tga b/assets/gfx/misc/creep/creep24.tga new file mode 100644 index 000000000..a6ccc4841 Binary files /dev/null and b/assets/gfx/misc/creep/creep24.tga differ diff --git a/assets/gfx/misc/creep/creep240.tga b/assets/gfx/misc/creep/creep240.tga new file mode 100644 index 000000000..8ef527e3c Binary files /dev/null and b/assets/gfx/misc/creep/creep240.tga differ diff --git a/assets/gfx/misc/creep/creep241.tga b/assets/gfx/misc/creep/creep241.tga new file mode 100644 index 000000000..0c139af35 Binary files /dev/null and b/assets/gfx/misc/creep/creep241.tga differ diff --git a/assets/gfx/misc/creep/creep242.tga b/assets/gfx/misc/creep/creep242.tga new file mode 100644 index 000000000..7fdfe48c1 Binary files /dev/null and b/assets/gfx/misc/creep/creep242.tga differ diff --git a/assets/gfx/misc/creep/creep243.tga b/assets/gfx/misc/creep/creep243.tga new file mode 100644 index 000000000..fc9591723 Binary files /dev/null and b/assets/gfx/misc/creep/creep243.tga differ diff --git a/assets/gfx/misc/creep/creep244.tga b/assets/gfx/misc/creep/creep244.tga new file mode 100644 index 000000000..db37fe18c Binary files /dev/null and b/assets/gfx/misc/creep/creep244.tga differ diff --git a/assets/gfx/misc/creep/creep245.tga b/assets/gfx/misc/creep/creep245.tga new file mode 100644 index 000000000..2ee8d4326 Binary files /dev/null and b/assets/gfx/misc/creep/creep245.tga differ diff --git a/assets/gfx/misc/creep/creep246.tga b/assets/gfx/misc/creep/creep246.tga new file mode 100644 index 000000000..8ed0acc6c Binary files /dev/null and b/assets/gfx/misc/creep/creep246.tga differ diff --git a/assets/gfx/misc/creep/creep247.tga b/assets/gfx/misc/creep/creep247.tga new file mode 100644 index 000000000..210a123db Binary files /dev/null and b/assets/gfx/misc/creep/creep247.tga differ diff --git a/assets/gfx/misc/creep/creep248.tga b/assets/gfx/misc/creep/creep248.tga new file mode 100644 index 000000000..f40d9e780 Binary files /dev/null and b/assets/gfx/misc/creep/creep248.tga differ diff --git a/assets/gfx/misc/creep/creep249.tga b/assets/gfx/misc/creep/creep249.tga new file mode 100644 index 000000000..b39fa514c Binary files /dev/null and b/assets/gfx/misc/creep/creep249.tga differ diff --git a/assets/gfx/misc/creep/creep25.tga b/assets/gfx/misc/creep/creep25.tga new file mode 100644 index 000000000..578c36640 Binary files /dev/null and b/assets/gfx/misc/creep/creep25.tga differ diff --git a/assets/gfx/misc/creep/creep250.tga b/assets/gfx/misc/creep/creep250.tga new file mode 100644 index 000000000..7444bae14 Binary files /dev/null and b/assets/gfx/misc/creep/creep250.tga differ diff --git a/assets/gfx/misc/creep/creep251.tga b/assets/gfx/misc/creep/creep251.tga new file mode 100644 index 000000000..0211ae2a7 Binary files /dev/null and b/assets/gfx/misc/creep/creep251.tga differ diff --git a/assets/gfx/misc/creep/creep252.tga b/assets/gfx/misc/creep/creep252.tga new file mode 100644 index 000000000..5a4550a92 Binary files /dev/null and b/assets/gfx/misc/creep/creep252.tga differ diff --git a/assets/gfx/misc/creep/creep253.tga b/assets/gfx/misc/creep/creep253.tga new file mode 100644 index 000000000..3b53474ca Binary files /dev/null and b/assets/gfx/misc/creep/creep253.tga differ diff --git a/assets/gfx/misc/creep/creep254.tga b/assets/gfx/misc/creep/creep254.tga new file mode 100644 index 000000000..6ef5cc963 Binary files /dev/null and b/assets/gfx/misc/creep/creep254.tga differ diff --git a/assets/gfx/misc/creep/creep255.tga b/assets/gfx/misc/creep/creep255.tga new file mode 100644 index 000000000..5ef099846 Binary files /dev/null and b/assets/gfx/misc/creep/creep255.tga differ diff --git a/assets/gfx/misc/creep/creep256.tga b/assets/gfx/misc/creep/creep256.tga new file mode 100644 index 000000000..967869aac Binary files /dev/null and b/assets/gfx/misc/creep/creep256.tga differ diff --git a/assets/gfx/misc/creep/creep257.tga b/assets/gfx/misc/creep/creep257.tga new file mode 100644 index 000000000..501a29497 Binary files /dev/null and b/assets/gfx/misc/creep/creep257.tga differ diff --git a/assets/gfx/misc/creep/creep258.tga b/assets/gfx/misc/creep/creep258.tga new file mode 100644 index 000000000..289a359fc Binary files /dev/null and b/assets/gfx/misc/creep/creep258.tga differ diff --git a/assets/gfx/misc/creep/creep259.tga b/assets/gfx/misc/creep/creep259.tga new file mode 100644 index 000000000..239c98181 Binary files /dev/null and b/assets/gfx/misc/creep/creep259.tga differ diff --git a/assets/gfx/misc/creep/creep26.tga b/assets/gfx/misc/creep/creep26.tga new file mode 100644 index 000000000..13be353a2 Binary files /dev/null and b/assets/gfx/misc/creep/creep26.tga differ diff --git a/assets/gfx/misc/creep/creep260.tga b/assets/gfx/misc/creep/creep260.tga new file mode 100644 index 000000000..fd7b5e1a1 Binary files /dev/null and b/assets/gfx/misc/creep/creep260.tga differ diff --git a/assets/gfx/misc/creep/creep261.tga b/assets/gfx/misc/creep/creep261.tga new file mode 100644 index 000000000..d3332f59d Binary files /dev/null and b/assets/gfx/misc/creep/creep261.tga differ diff --git a/assets/gfx/misc/creep/creep262.tga b/assets/gfx/misc/creep/creep262.tga new file mode 100644 index 000000000..6f1293ba9 Binary files /dev/null and b/assets/gfx/misc/creep/creep262.tga differ diff --git a/assets/gfx/misc/creep/creep263.tga b/assets/gfx/misc/creep/creep263.tga new file mode 100644 index 000000000..7ef1a2296 Binary files /dev/null and b/assets/gfx/misc/creep/creep263.tga differ diff --git a/assets/gfx/misc/creep/creep264.tga b/assets/gfx/misc/creep/creep264.tga new file mode 100644 index 000000000..6f3568c4a Binary files /dev/null and b/assets/gfx/misc/creep/creep264.tga differ diff --git a/assets/gfx/misc/creep/creep265.tga b/assets/gfx/misc/creep/creep265.tga new file mode 100644 index 000000000..f7cfadb10 Binary files /dev/null and b/assets/gfx/misc/creep/creep265.tga differ diff --git a/assets/gfx/misc/creep/creep266.tga b/assets/gfx/misc/creep/creep266.tga new file mode 100644 index 000000000..efec66c37 Binary files /dev/null and b/assets/gfx/misc/creep/creep266.tga differ diff --git a/assets/gfx/misc/creep/creep267.tga b/assets/gfx/misc/creep/creep267.tga new file mode 100644 index 000000000..c5e6eac00 Binary files /dev/null and b/assets/gfx/misc/creep/creep267.tga differ diff --git a/assets/gfx/misc/creep/creep268.tga b/assets/gfx/misc/creep/creep268.tga new file mode 100644 index 000000000..d9579faea Binary files /dev/null and b/assets/gfx/misc/creep/creep268.tga differ diff --git a/assets/gfx/misc/creep/creep269.tga b/assets/gfx/misc/creep/creep269.tga new file mode 100644 index 000000000..11d7dcea8 Binary files /dev/null and b/assets/gfx/misc/creep/creep269.tga differ diff --git a/assets/gfx/misc/creep/creep27.tga b/assets/gfx/misc/creep/creep27.tga new file mode 100644 index 000000000..07f66b918 Binary files /dev/null and b/assets/gfx/misc/creep/creep27.tga differ diff --git a/assets/gfx/misc/creep/creep270.tga b/assets/gfx/misc/creep/creep270.tga new file mode 100644 index 000000000..857a7d3cc Binary files /dev/null and b/assets/gfx/misc/creep/creep270.tga differ diff --git a/assets/gfx/misc/creep/creep271.tga b/assets/gfx/misc/creep/creep271.tga new file mode 100644 index 000000000..f94bb220c Binary files /dev/null and b/assets/gfx/misc/creep/creep271.tga differ diff --git a/assets/gfx/misc/creep/creep272.tga b/assets/gfx/misc/creep/creep272.tga new file mode 100644 index 000000000..7941e555f Binary files /dev/null and b/assets/gfx/misc/creep/creep272.tga differ diff --git a/assets/gfx/misc/creep/creep273.tga b/assets/gfx/misc/creep/creep273.tga new file mode 100644 index 000000000..6266a7b05 Binary files /dev/null and b/assets/gfx/misc/creep/creep273.tga differ diff --git a/assets/gfx/misc/creep/creep274.tga b/assets/gfx/misc/creep/creep274.tga new file mode 100644 index 000000000..1216ecb7f Binary files /dev/null and b/assets/gfx/misc/creep/creep274.tga differ diff --git a/assets/gfx/misc/creep/creep275.tga b/assets/gfx/misc/creep/creep275.tga new file mode 100644 index 000000000..1e7afb1cd Binary files /dev/null and b/assets/gfx/misc/creep/creep275.tga differ diff --git a/assets/gfx/misc/creep/creep276.tga b/assets/gfx/misc/creep/creep276.tga new file mode 100644 index 000000000..200ddae37 Binary files /dev/null and b/assets/gfx/misc/creep/creep276.tga differ diff --git a/assets/gfx/misc/creep/creep277.tga b/assets/gfx/misc/creep/creep277.tga new file mode 100644 index 000000000..c0a8e790e Binary files /dev/null and b/assets/gfx/misc/creep/creep277.tga differ diff --git a/assets/gfx/misc/creep/creep278.tga b/assets/gfx/misc/creep/creep278.tga new file mode 100644 index 000000000..ac84d0a4c Binary files /dev/null and b/assets/gfx/misc/creep/creep278.tga differ diff --git a/assets/gfx/misc/creep/creep279.tga b/assets/gfx/misc/creep/creep279.tga new file mode 100644 index 000000000..3136c2d6e Binary files /dev/null and b/assets/gfx/misc/creep/creep279.tga differ diff --git a/assets/gfx/misc/creep/creep28.tga b/assets/gfx/misc/creep/creep28.tga new file mode 100644 index 000000000..1e23a7ba5 Binary files /dev/null and b/assets/gfx/misc/creep/creep28.tga differ diff --git a/assets/gfx/misc/creep/creep280.tga b/assets/gfx/misc/creep/creep280.tga new file mode 100644 index 000000000..91af39381 Binary files /dev/null and b/assets/gfx/misc/creep/creep280.tga differ diff --git a/assets/gfx/misc/creep/creep281.tga b/assets/gfx/misc/creep/creep281.tga new file mode 100644 index 000000000..b0ca23834 Binary files /dev/null and b/assets/gfx/misc/creep/creep281.tga differ diff --git a/assets/gfx/misc/creep/creep282.tga b/assets/gfx/misc/creep/creep282.tga new file mode 100644 index 000000000..07854dadf Binary files /dev/null and b/assets/gfx/misc/creep/creep282.tga differ diff --git a/assets/gfx/misc/creep/creep283.tga b/assets/gfx/misc/creep/creep283.tga new file mode 100644 index 000000000..b7b322eb1 Binary files /dev/null and b/assets/gfx/misc/creep/creep283.tga differ diff --git a/assets/gfx/misc/creep/creep284.tga b/assets/gfx/misc/creep/creep284.tga new file mode 100644 index 000000000..29ef2b7a6 Binary files /dev/null and b/assets/gfx/misc/creep/creep284.tga differ diff --git a/assets/gfx/misc/creep/creep285.tga b/assets/gfx/misc/creep/creep285.tga new file mode 100644 index 000000000..932161114 Binary files /dev/null and b/assets/gfx/misc/creep/creep285.tga differ diff --git a/assets/gfx/misc/creep/creep286.tga b/assets/gfx/misc/creep/creep286.tga new file mode 100644 index 000000000..1f35da245 Binary files /dev/null and b/assets/gfx/misc/creep/creep286.tga differ diff --git a/assets/gfx/misc/creep/creep287.tga b/assets/gfx/misc/creep/creep287.tga new file mode 100644 index 000000000..f21497854 Binary files /dev/null and b/assets/gfx/misc/creep/creep287.tga differ diff --git a/assets/gfx/misc/creep/creep288.tga b/assets/gfx/misc/creep/creep288.tga new file mode 100644 index 000000000..131bdda1f Binary files /dev/null and b/assets/gfx/misc/creep/creep288.tga differ diff --git a/assets/gfx/misc/creep/creep289.tga b/assets/gfx/misc/creep/creep289.tga new file mode 100644 index 000000000..6e8eabf24 Binary files /dev/null and b/assets/gfx/misc/creep/creep289.tga differ diff --git a/assets/gfx/misc/creep/creep29.tga b/assets/gfx/misc/creep/creep29.tga new file mode 100644 index 000000000..251cb87f3 Binary files /dev/null and b/assets/gfx/misc/creep/creep29.tga differ diff --git a/assets/gfx/misc/creep/creep290.tga b/assets/gfx/misc/creep/creep290.tga new file mode 100644 index 000000000..48677545b Binary files /dev/null and b/assets/gfx/misc/creep/creep290.tga differ diff --git a/assets/gfx/misc/creep/creep291.tga b/assets/gfx/misc/creep/creep291.tga new file mode 100644 index 000000000..4de530aa9 Binary files /dev/null and b/assets/gfx/misc/creep/creep291.tga differ diff --git a/assets/gfx/misc/creep/creep292.tga b/assets/gfx/misc/creep/creep292.tga new file mode 100644 index 000000000..71e938895 Binary files /dev/null and b/assets/gfx/misc/creep/creep292.tga differ diff --git a/assets/gfx/misc/creep/creep293.tga b/assets/gfx/misc/creep/creep293.tga new file mode 100644 index 000000000..bf71099db Binary files /dev/null and b/assets/gfx/misc/creep/creep293.tga differ diff --git a/assets/gfx/misc/creep/creep294.tga b/assets/gfx/misc/creep/creep294.tga new file mode 100644 index 000000000..d2e332513 Binary files /dev/null and b/assets/gfx/misc/creep/creep294.tga differ diff --git a/assets/gfx/misc/creep/creep295.tga b/assets/gfx/misc/creep/creep295.tga new file mode 100644 index 000000000..f37494b9b Binary files /dev/null and b/assets/gfx/misc/creep/creep295.tga differ diff --git a/assets/gfx/misc/creep/creep296.tga b/assets/gfx/misc/creep/creep296.tga new file mode 100644 index 000000000..ca5e0cede Binary files /dev/null and b/assets/gfx/misc/creep/creep296.tga differ diff --git a/assets/gfx/misc/creep/creep297.tga b/assets/gfx/misc/creep/creep297.tga new file mode 100644 index 000000000..98d92ba3c Binary files /dev/null and b/assets/gfx/misc/creep/creep297.tga differ diff --git a/assets/gfx/misc/creep/creep298.tga b/assets/gfx/misc/creep/creep298.tga new file mode 100644 index 000000000..9b89f7649 Binary files /dev/null and b/assets/gfx/misc/creep/creep298.tga differ diff --git a/assets/gfx/misc/creep/creep299.tga b/assets/gfx/misc/creep/creep299.tga new file mode 100644 index 000000000..243b189bf Binary files /dev/null and b/assets/gfx/misc/creep/creep299.tga differ diff --git a/assets/gfx/misc/creep/creep3.tga b/assets/gfx/misc/creep/creep3.tga new file mode 100644 index 000000000..5533b0e0e Binary files /dev/null and b/assets/gfx/misc/creep/creep3.tga differ diff --git a/assets/gfx/misc/creep/creep30.tga b/assets/gfx/misc/creep/creep30.tga new file mode 100644 index 000000000..4d7682e75 Binary files /dev/null and b/assets/gfx/misc/creep/creep30.tga differ diff --git a/assets/gfx/misc/creep/creep300.tga b/assets/gfx/misc/creep/creep300.tga new file mode 100644 index 000000000..a3cebd639 Binary files /dev/null and b/assets/gfx/misc/creep/creep300.tga differ diff --git a/assets/gfx/misc/creep/creep301.tga b/assets/gfx/misc/creep/creep301.tga new file mode 100644 index 000000000..bd1bfd283 Binary files /dev/null and b/assets/gfx/misc/creep/creep301.tga differ diff --git a/assets/gfx/misc/creep/creep302.tga b/assets/gfx/misc/creep/creep302.tga new file mode 100644 index 000000000..b20ae621e Binary files /dev/null and b/assets/gfx/misc/creep/creep302.tga differ diff --git a/assets/gfx/misc/creep/creep303.tga b/assets/gfx/misc/creep/creep303.tga new file mode 100644 index 000000000..655dcde8e Binary files /dev/null and b/assets/gfx/misc/creep/creep303.tga differ diff --git a/assets/gfx/misc/creep/creep304.tga b/assets/gfx/misc/creep/creep304.tga new file mode 100644 index 000000000..2a6bd5719 Binary files /dev/null and b/assets/gfx/misc/creep/creep304.tga differ diff --git a/assets/gfx/misc/creep/creep305.tga b/assets/gfx/misc/creep/creep305.tga new file mode 100644 index 000000000..6d8092d5e Binary files /dev/null and b/assets/gfx/misc/creep/creep305.tga differ diff --git a/assets/gfx/misc/creep/creep306.tga b/assets/gfx/misc/creep/creep306.tga new file mode 100644 index 000000000..3be259f89 Binary files /dev/null and b/assets/gfx/misc/creep/creep306.tga differ diff --git a/assets/gfx/misc/creep/creep307.tga b/assets/gfx/misc/creep/creep307.tga new file mode 100644 index 000000000..4553eb689 Binary files /dev/null and b/assets/gfx/misc/creep/creep307.tga differ diff --git a/assets/gfx/misc/creep/creep308.tga b/assets/gfx/misc/creep/creep308.tga new file mode 100644 index 000000000..bed6b170e Binary files /dev/null and b/assets/gfx/misc/creep/creep308.tga differ diff --git a/assets/gfx/misc/creep/creep309.tga b/assets/gfx/misc/creep/creep309.tga new file mode 100644 index 000000000..28179c804 Binary files /dev/null and b/assets/gfx/misc/creep/creep309.tga differ diff --git a/assets/gfx/misc/creep/creep31.tga b/assets/gfx/misc/creep/creep31.tga new file mode 100644 index 000000000..319fbe44a Binary files /dev/null and b/assets/gfx/misc/creep/creep31.tga differ diff --git a/assets/gfx/misc/creep/creep310.tga b/assets/gfx/misc/creep/creep310.tga new file mode 100644 index 000000000..5a9d094ba Binary files /dev/null and b/assets/gfx/misc/creep/creep310.tga differ diff --git a/assets/gfx/misc/creep/creep311.tga b/assets/gfx/misc/creep/creep311.tga new file mode 100644 index 000000000..eb473080a Binary files /dev/null and b/assets/gfx/misc/creep/creep311.tga differ diff --git a/assets/gfx/misc/creep/creep312.tga b/assets/gfx/misc/creep/creep312.tga new file mode 100644 index 000000000..6163f3b69 Binary files /dev/null and b/assets/gfx/misc/creep/creep312.tga differ diff --git a/assets/gfx/misc/creep/creep313.tga b/assets/gfx/misc/creep/creep313.tga new file mode 100644 index 000000000..db2581e46 Binary files /dev/null and b/assets/gfx/misc/creep/creep313.tga differ diff --git a/assets/gfx/misc/creep/creep314.tga b/assets/gfx/misc/creep/creep314.tga new file mode 100644 index 000000000..b39020140 Binary files /dev/null and b/assets/gfx/misc/creep/creep314.tga differ diff --git a/assets/gfx/misc/creep/creep315.tga b/assets/gfx/misc/creep/creep315.tga new file mode 100644 index 000000000..dcaf1add4 Binary files /dev/null and b/assets/gfx/misc/creep/creep315.tga differ diff --git a/assets/gfx/misc/creep/creep316.tga b/assets/gfx/misc/creep/creep316.tga new file mode 100644 index 000000000..f688b6e5d Binary files /dev/null and b/assets/gfx/misc/creep/creep316.tga differ diff --git a/assets/gfx/misc/creep/creep317.tga b/assets/gfx/misc/creep/creep317.tga new file mode 100644 index 000000000..7bce31faf Binary files /dev/null and b/assets/gfx/misc/creep/creep317.tga differ diff --git a/assets/gfx/misc/creep/creep318.tga b/assets/gfx/misc/creep/creep318.tga new file mode 100644 index 000000000..4d648eebe Binary files /dev/null and b/assets/gfx/misc/creep/creep318.tga differ diff --git a/assets/gfx/misc/creep/creep319.tga b/assets/gfx/misc/creep/creep319.tga new file mode 100644 index 000000000..e6989134e Binary files /dev/null and b/assets/gfx/misc/creep/creep319.tga differ diff --git a/assets/gfx/misc/creep/creep32.tga b/assets/gfx/misc/creep/creep32.tga new file mode 100644 index 000000000..463b354bb Binary files /dev/null and b/assets/gfx/misc/creep/creep32.tga differ diff --git a/assets/gfx/misc/creep/creep320.tga b/assets/gfx/misc/creep/creep320.tga new file mode 100644 index 000000000..060d36da5 Binary files /dev/null and b/assets/gfx/misc/creep/creep320.tga differ diff --git a/assets/gfx/misc/creep/creep321.tga b/assets/gfx/misc/creep/creep321.tga new file mode 100644 index 000000000..e6c30ae3f Binary files /dev/null and b/assets/gfx/misc/creep/creep321.tga differ diff --git a/assets/gfx/misc/creep/creep322.tga b/assets/gfx/misc/creep/creep322.tga new file mode 100644 index 000000000..69e13b240 Binary files /dev/null and b/assets/gfx/misc/creep/creep322.tga differ diff --git a/assets/gfx/misc/creep/creep323.tga b/assets/gfx/misc/creep/creep323.tga new file mode 100644 index 000000000..e389b135e Binary files /dev/null and b/assets/gfx/misc/creep/creep323.tga differ diff --git a/assets/gfx/misc/creep/creep324.tga b/assets/gfx/misc/creep/creep324.tga new file mode 100644 index 000000000..3ba1a0cf6 Binary files /dev/null and b/assets/gfx/misc/creep/creep324.tga differ diff --git a/assets/gfx/misc/creep/creep325.tga b/assets/gfx/misc/creep/creep325.tga new file mode 100644 index 000000000..4f460dc08 Binary files /dev/null and b/assets/gfx/misc/creep/creep325.tga differ diff --git a/assets/gfx/misc/creep/creep326.tga b/assets/gfx/misc/creep/creep326.tga new file mode 100644 index 000000000..132340fd5 Binary files /dev/null and b/assets/gfx/misc/creep/creep326.tga differ diff --git a/assets/gfx/misc/creep/creep327.tga b/assets/gfx/misc/creep/creep327.tga new file mode 100644 index 000000000..5c2515719 Binary files /dev/null and b/assets/gfx/misc/creep/creep327.tga differ diff --git a/assets/gfx/misc/creep/creep328.tga b/assets/gfx/misc/creep/creep328.tga new file mode 100644 index 000000000..aa2fa10d6 Binary files /dev/null and b/assets/gfx/misc/creep/creep328.tga differ diff --git a/assets/gfx/misc/creep/creep329.tga b/assets/gfx/misc/creep/creep329.tga new file mode 100644 index 000000000..698e37091 Binary files /dev/null and b/assets/gfx/misc/creep/creep329.tga differ diff --git a/assets/gfx/misc/creep/creep33.tga b/assets/gfx/misc/creep/creep33.tga new file mode 100644 index 000000000..2e4b6a964 Binary files /dev/null and b/assets/gfx/misc/creep/creep33.tga differ diff --git a/assets/gfx/misc/creep/creep330.tga b/assets/gfx/misc/creep/creep330.tga new file mode 100644 index 000000000..8e7cb81fe Binary files /dev/null and b/assets/gfx/misc/creep/creep330.tga differ diff --git a/assets/gfx/misc/creep/creep331.tga b/assets/gfx/misc/creep/creep331.tga new file mode 100644 index 000000000..8029830e3 Binary files /dev/null and b/assets/gfx/misc/creep/creep331.tga differ diff --git a/assets/gfx/misc/creep/creep332.tga b/assets/gfx/misc/creep/creep332.tga new file mode 100644 index 000000000..48f46ae41 Binary files /dev/null and b/assets/gfx/misc/creep/creep332.tga differ diff --git a/assets/gfx/misc/creep/creep333.tga b/assets/gfx/misc/creep/creep333.tga new file mode 100644 index 000000000..b283dee9f Binary files /dev/null and b/assets/gfx/misc/creep/creep333.tga differ diff --git a/assets/gfx/misc/creep/creep334.tga b/assets/gfx/misc/creep/creep334.tga new file mode 100644 index 000000000..48f46ae41 Binary files /dev/null and b/assets/gfx/misc/creep/creep334.tga differ diff --git a/assets/gfx/misc/creep/creep335.tga b/assets/gfx/misc/creep/creep335.tga new file mode 100644 index 000000000..e765fa61c Binary files /dev/null and b/assets/gfx/misc/creep/creep335.tga differ diff --git a/assets/gfx/misc/creep/creep336.tga b/assets/gfx/misc/creep/creep336.tga new file mode 100644 index 000000000..f4530e8ce Binary files /dev/null and b/assets/gfx/misc/creep/creep336.tga differ diff --git a/assets/gfx/misc/creep/creep337.tga b/assets/gfx/misc/creep/creep337.tga new file mode 100644 index 000000000..c92e40e56 Binary files /dev/null and b/assets/gfx/misc/creep/creep337.tga differ diff --git a/assets/gfx/misc/creep/creep338.tga b/assets/gfx/misc/creep/creep338.tga new file mode 100644 index 000000000..e672813d1 Binary files /dev/null and b/assets/gfx/misc/creep/creep338.tga differ diff --git a/assets/gfx/misc/creep/creep339.tga b/assets/gfx/misc/creep/creep339.tga new file mode 100644 index 000000000..32c71558b Binary files /dev/null and b/assets/gfx/misc/creep/creep339.tga differ diff --git a/assets/gfx/misc/creep/creep34.tga b/assets/gfx/misc/creep/creep34.tga new file mode 100644 index 000000000..7d7ddaa1b Binary files /dev/null and b/assets/gfx/misc/creep/creep34.tga differ diff --git a/assets/gfx/misc/creep/creep340.tga b/assets/gfx/misc/creep/creep340.tga new file mode 100644 index 000000000..862376f6e Binary files /dev/null and b/assets/gfx/misc/creep/creep340.tga differ diff --git a/assets/gfx/misc/creep/creep341.tga b/assets/gfx/misc/creep/creep341.tga new file mode 100644 index 000000000..00da69b55 Binary files /dev/null and b/assets/gfx/misc/creep/creep341.tga differ diff --git a/assets/gfx/misc/creep/creep342.tga b/assets/gfx/misc/creep/creep342.tga new file mode 100644 index 000000000..7aeafce02 Binary files /dev/null and b/assets/gfx/misc/creep/creep342.tga differ diff --git a/assets/gfx/misc/creep/creep343.tga b/assets/gfx/misc/creep/creep343.tga new file mode 100644 index 000000000..ece8b4ec7 Binary files /dev/null and b/assets/gfx/misc/creep/creep343.tga differ diff --git a/assets/gfx/misc/creep/creep344.tga b/assets/gfx/misc/creep/creep344.tga new file mode 100644 index 000000000..de207ef5b Binary files /dev/null and b/assets/gfx/misc/creep/creep344.tga differ diff --git a/assets/gfx/misc/creep/creep345.tga b/assets/gfx/misc/creep/creep345.tga new file mode 100644 index 000000000..01d073f7a Binary files /dev/null and b/assets/gfx/misc/creep/creep345.tga differ diff --git a/assets/gfx/misc/creep/creep346.tga b/assets/gfx/misc/creep/creep346.tga new file mode 100644 index 000000000..d4d375877 Binary files /dev/null and b/assets/gfx/misc/creep/creep346.tga differ diff --git a/assets/gfx/misc/creep/creep347.tga b/assets/gfx/misc/creep/creep347.tga new file mode 100644 index 000000000..59cb49450 Binary files /dev/null and b/assets/gfx/misc/creep/creep347.tga differ diff --git a/assets/gfx/misc/creep/creep348.tga b/assets/gfx/misc/creep/creep348.tga new file mode 100644 index 000000000..af7e4c2dc Binary files /dev/null and b/assets/gfx/misc/creep/creep348.tga differ diff --git a/assets/gfx/misc/creep/creep349.tga b/assets/gfx/misc/creep/creep349.tga new file mode 100644 index 000000000..b9372ae03 Binary files /dev/null and b/assets/gfx/misc/creep/creep349.tga differ diff --git a/assets/gfx/misc/creep/creep35.tga b/assets/gfx/misc/creep/creep35.tga new file mode 100644 index 000000000..c68cf6f9c Binary files /dev/null and b/assets/gfx/misc/creep/creep35.tga differ diff --git a/assets/gfx/misc/creep/creep350.tga b/assets/gfx/misc/creep/creep350.tga new file mode 100644 index 000000000..d9cc744aa Binary files /dev/null and b/assets/gfx/misc/creep/creep350.tga differ diff --git a/assets/gfx/misc/creep/creep351.tga b/assets/gfx/misc/creep/creep351.tga new file mode 100644 index 000000000..bc748661b Binary files /dev/null and b/assets/gfx/misc/creep/creep351.tga differ diff --git a/assets/gfx/misc/creep/creep352.tga b/assets/gfx/misc/creep/creep352.tga new file mode 100644 index 000000000..63e09d6db Binary files /dev/null and b/assets/gfx/misc/creep/creep352.tga differ diff --git a/assets/gfx/misc/creep/creep353.tga b/assets/gfx/misc/creep/creep353.tga new file mode 100644 index 000000000..9bf7c3d35 Binary files /dev/null and b/assets/gfx/misc/creep/creep353.tga differ diff --git a/assets/gfx/misc/creep/creep354.tga b/assets/gfx/misc/creep/creep354.tga new file mode 100644 index 000000000..162f0dc09 Binary files /dev/null and b/assets/gfx/misc/creep/creep354.tga differ diff --git a/assets/gfx/misc/creep/creep355.tga b/assets/gfx/misc/creep/creep355.tga new file mode 100644 index 000000000..586380d81 Binary files /dev/null and b/assets/gfx/misc/creep/creep355.tga differ diff --git a/assets/gfx/misc/creep/creep356.tga b/assets/gfx/misc/creep/creep356.tga new file mode 100644 index 000000000..8f9279065 Binary files /dev/null and b/assets/gfx/misc/creep/creep356.tga differ diff --git a/assets/gfx/misc/creep/creep357.tga b/assets/gfx/misc/creep/creep357.tga new file mode 100644 index 000000000..ee76318bb Binary files /dev/null and b/assets/gfx/misc/creep/creep357.tga differ diff --git a/assets/gfx/misc/creep/creep358.tga b/assets/gfx/misc/creep/creep358.tga new file mode 100644 index 000000000..8c79320be Binary files /dev/null and b/assets/gfx/misc/creep/creep358.tga differ diff --git a/assets/gfx/misc/creep/creep359.tga b/assets/gfx/misc/creep/creep359.tga new file mode 100644 index 000000000..b93511400 Binary files /dev/null and b/assets/gfx/misc/creep/creep359.tga differ diff --git a/assets/gfx/misc/creep/creep36.tga b/assets/gfx/misc/creep/creep36.tga new file mode 100644 index 000000000..0b97a1087 Binary files /dev/null and b/assets/gfx/misc/creep/creep36.tga differ diff --git a/assets/gfx/misc/creep/creep360.tga b/assets/gfx/misc/creep/creep360.tga new file mode 100644 index 000000000..61b704010 Binary files /dev/null and b/assets/gfx/misc/creep/creep360.tga differ diff --git a/assets/gfx/misc/creep/creep361.tga b/assets/gfx/misc/creep/creep361.tga new file mode 100644 index 000000000..698e5dab5 Binary files /dev/null and b/assets/gfx/misc/creep/creep361.tga differ diff --git a/assets/gfx/misc/creep/creep362.tga b/assets/gfx/misc/creep/creep362.tga new file mode 100644 index 000000000..e290d0e54 Binary files /dev/null and b/assets/gfx/misc/creep/creep362.tga differ diff --git a/assets/gfx/misc/creep/creep363.tga b/assets/gfx/misc/creep/creep363.tga new file mode 100644 index 000000000..7178649f3 Binary files /dev/null and b/assets/gfx/misc/creep/creep363.tga differ diff --git a/assets/gfx/misc/creep/creep364.tga b/assets/gfx/misc/creep/creep364.tga new file mode 100644 index 000000000..b0ff28b8f Binary files /dev/null and b/assets/gfx/misc/creep/creep364.tga differ diff --git a/assets/gfx/misc/creep/creep365.tga b/assets/gfx/misc/creep/creep365.tga new file mode 100644 index 000000000..e04da415d Binary files /dev/null and b/assets/gfx/misc/creep/creep365.tga differ diff --git a/assets/gfx/misc/creep/creep366.tga b/assets/gfx/misc/creep/creep366.tga new file mode 100644 index 000000000..fbab00c70 Binary files /dev/null and b/assets/gfx/misc/creep/creep366.tga differ diff --git a/assets/gfx/misc/creep/creep367.tga b/assets/gfx/misc/creep/creep367.tga new file mode 100644 index 000000000..4e9218d79 Binary files /dev/null and b/assets/gfx/misc/creep/creep367.tga differ diff --git a/assets/gfx/misc/creep/creep368.tga b/assets/gfx/misc/creep/creep368.tga new file mode 100644 index 000000000..101e04141 Binary files /dev/null and b/assets/gfx/misc/creep/creep368.tga differ diff --git a/assets/gfx/misc/creep/creep369.tga b/assets/gfx/misc/creep/creep369.tga new file mode 100644 index 000000000..efd679be4 Binary files /dev/null and b/assets/gfx/misc/creep/creep369.tga differ diff --git a/assets/gfx/misc/creep/creep37.tga b/assets/gfx/misc/creep/creep37.tga new file mode 100644 index 000000000..03a94f1f8 Binary files /dev/null and b/assets/gfx/misc/creep/creep37.tga differ diff --git a/assets/gfx/misc/creep/creep370.tga b/assets/gfx/misc/creep/creep370.tga new file mode 100644 index 000000000..792cb5bf3 Binary files /dev/null and b/assets/gfx/misc/creep/creep370.tga differ diff --git a/assets/gfx/misc/creep/creep371.tga b/assets/gfx/misc/creep/creep371.tga new file mode 100644 index 000000000..144e30ea9 Binary files /dev/null and b/assets/gfx/misc/creep/creep371.tga differ diff --git a/assets/gfx/misc/creep/creep372.tga b/assets/gfx/misc/creep/creep372.tga new file mode 100644 index 000000000..69c6d1ac9 Binary files /dev/null and b/assets/gfx/misc/creep/creep372.tga differ diff --git a/assets/gfx/misc/creep/creep373.tga b/assets/gfx/misc/creep/creep373.tga new file mode 100644 index 000000000..4de3d1179 Binary files /dev/null and b/assets/gfx/misc/creep/creep373.tga differ diff --git a/assets/gfx/misc/creep/creep374.tga b/assets/gfx/misc/creep/creep374.tga new file mode 100644 index 000000000..7342e530c Binary files /dev/null and b/assets/gfx/misc/creep/creep374.tga differ diff --git a/assets/gfx/misc/creep/creep375.tga b/assets/gfx/misc/creep/creep375.tga new file mode 100644 index 000000000..5a14def3a Binary files /dev/null and b/assets/gfx/misc/creep/creep375.tga differ diff --git a/assets/gfx/misc/creep/creep376.tga b/assets/gfx/misc/creep/creep376.tga new file mode 100644 index 000000000..e5569d511 Binary files /dev/null and b/assets/gfx/misc/creep/creep376.tga differ diff --git a/assets/gfx/misc/creep/creep377.tga b/assets/gfx/misc/creep/creep377.tga new file mode 100644 index 000000000..40cdf5165 Binary files /dev/null and b/assets/gfx/misc/creep/creep377.tga differ diff --git a/assets/gfx/misc/creep/creep378.tga b/assets/gfx/misc/creep/creep378.tga new file mode 100644 index 000000000..3aa3b1964 Binary files /dev/null and b/assets/gfx/misc/creep/creep378.tga differ diff --git a/assets/gfx/misc/creep/creep379.tga b/assets/gfx/misc/creep/creep379.tga new file mode 100644 index 000000000..bea054375 Binary files /dev/null and b/assets/gfx/misc/creep/creep379.tga differ diff --git a/assets/gfx/misc/creep/creep38.tga b/assets/gfx/misc/creep/creep38.tga new file mode 100644 index 000000000..c2d17fae1 Binary files /dev/null and b/assets/gfx/misc/creep/creep38.tga differ diff --git a/assets/gfx/misc/creep/creep380.tga b/assets/gfx/misc/creep/creep380.tga new file mode 100644 index 000000000..c223eb50f Binary files /dev/null and b/assets/gfx/misc/creep/creep380.tga differ diff --git a/assets/gfx/misc/creep/creep381.tga b/assets/gfx/misc/creep/creep381.tga new file mode 100644 index 000000000..2066940e0 Binary files /dev/null and b/assets/gfx/misc/creep/creep381.tga differ diff --git a/assets/gfx/misc/creep/creep382.tga b/assets/gfx/misc/creep/creep382.tga new file mode 100644 index 000000000..d15f93f36 Binary files /dev/null and b/assets/gfx/misc/creep/creep382.tga differ diff --git a/assets/gfx/misc/creep/creep383.tga b/assets/gfx/misc/creep/creep383.tga new file mode 100644 index 000000000..b1622d145 Binary files /dev/null and b/assets/gfx/misc/creep/creep383.tga differ diff --git a/assets/gfx/misc/creep/creep384.tga b/assets/gfx/misc/creep/creep384.tga new file mode 100644 index 000000000..6208ed078 Binary files /dev/null and b/assets/gfx/misc/creep/creep384.tga differ diff --git a/assets/gfx/misc/creep/creep385.tga b/assets/gfx/misc/creep/creep385.tga new file mode 100644 index 000000000..adf24ca54 Binary files /dev/null and b/assets/gfx/misc/creep/creep385.tga differ diff --git a/assets/gfx/misc/creep/creep386.tga b/assets/gfx/misc/creep/creep386.tga new file mode 100644 index 000000000..ee6fbceef Binary files /dev/null and b/assets/gfx/misc/creep/creep386.tga differ diff --git a/assets/gfx/misc/creep/creep387.tga b/assets/gfx/misc/creep/creep387.tga new file mode 100644 index 000000000..27c7099d4 Binary files /dev/null and b/assets/gfx/misc/creep/creep387.tga differ diff --git a/assets/gfx/misc/creep/creep388.tga b/assets/gfx/misc/creep/creep388.tga new file mode 100644 index 000000000..27c7099d4 Binary files /dev/null and b/assets/gfx/misc/creep/creep388.tga differ diff --git a/assets/gfx/misc/creep/creep389.tga b/assets/gfx/misc/creep/creep389.tga new file mode 100644 index 000000000..27c7099d4 Binary files /dev/null and b/assets/gfx/misc/creep/creep389.tga differ diff --git a/assets/gfx/misc/creep/creep39.tga b/assets/gfx/misc/creep/creep39.tga new file mode 100644 index 000000000..c31ecd041 Binary files /dev/null and b/assets/gfx/misc/creep/creep39.tga differ diff --git a/assets/gfx/misc/creep/creep390.tga b/assets/gfx/misc/creep/creep390.tga new file mode 100644 index 000000000..50a4c6c12 Binary files /dev/null and b/assets/gfx/misc/creep/creep390.tga differ diff --git a/assets/gfx/misc/creep/creep391.tga b/assets/gfx/misc/creep/creep391.tga new file mode 100644 index 000000000..21285145c Binary files /dev/null and b/assets/gfx/misc/creep/creep391.tga differ diff --git a/assets/gfx/misc/creep/creep392.tga b/assets/gfx/misc/creep/creep392.tga new file mode 100644 index 000000000..ff69242e5 Binary files /dev/null and b/assets/gfx/misc/creep/creep392.tga differ diff --git a/assets/gfx/misc/creep/creep393.tga b/assets/gfx/misc/creep/creep393.tga new file mode 100644 index 000000000..d51c38a64 Binary files /dev/null and b/assets/gfx/misc/creep/creep393.tga differ diff --git a/assets/gfx/misc/creep/creep394.tga b/assets/gfx/misc/creep/creep394.tga new file mode 100644 index 000000000..073b2eaae Binary files /dev/null and b/assets/gfx/misc/creep/creep394.tga differ diff --git a/assets/gfx/misc/creep/creep395.tga b/assets/gfx/misc/creep/creep395.tga new file mode 100644 index 000000000..449b8d41d Binary files /dev/null and b/assets/gfx/misc/creep/creep395.tga differ diff --git a/assets/gfx/misc/creep/creep396.tga b/assets/gfx/misc/creep/creep396.tga new file mode 100644 index 000000000..b6626e3fb Binary files /dev/null and b/assets/gfx/misc/creep/creep396.tga differ diff --git a/assets/gfx/misc/creep/creep397.tga b/assets/gfx/misc/creep/creep397.tga new file mode 100644 index 000000000..2175a4230 Binary files /dev/null and b/assets/gfx/misc/creep/creep397.tga differ diff --git a/assets/gfx/misc/creep/creep398.tga b/assets/gfx/misc/creep/creep398.tga new file mode 100644 index 000000000..87aa28cb5 Binary files /dev/null and b/assets/gfx/misc/creep/creep398.tga differ diff --git a/assets/gfx/misc/creep/creep399.tga b/assets/gfx/misc/creep/creep399.tga new file mode 100644 index 000000000..05d83088b Binary files /dev/null and b/assets/gfx/misc/creep/creep399.tga differ diff --git a/assets/gfx/misc/creep/creep4.tga b/assets/gfx/misc/creep/creep4.tga new file mode 100644 index 000000000..80bf14d95 Binary files /dev/null and b/assets/gfx/misc/creep/creep4.tga differ diff --git a/assets/gfx/misc/creep/creep40.tga b/assets/gfx/misc/creep/creep40.tga new file mode 100644 index 000000000..b2e53865e Binary files /dev/null and b/assets/gfx/misc/creep/creep40.tga differ diff --git a/assets/gfx/misc/creep/creep400.tga b/assets/gfx/misc/creep/creep400.tga new file mode 100644 index 000000000..916685141 Binary files /dev/null and b/assets/gfx/misc/creep/creep400.tga differ diff --git a/assets/gfx/misc/creep/creep401.tga b/assets/gfx/misc/creep/creep401.tga new file mode 100644 index 000000000..967b7368b Binary files /dev/null and b/assets/gfx/misc/creep/creep401.tga differ diff --git a/assets/gfx/misc/creep/creep402.tga b/assets/gfx/misc/creep/creep402.tga new file mode 100644 index 000000000..dc61e2f65 Binary files /dev/null and b/assets/gfx/misc/creep/creep402.tga differ diff --git a/assets/gfx/misc/creep/creep403.tga b/assets/gfx/misc/creep/creep403.tga new file mode 100644 index 000000000..7c7b59c38 Binary files /dev/null and b/assets/gfx/misc/creep/creep403.tga differ diff --git a/assets/gfx/misc/creep/creep404.tga b/assets/gfx/misc/creep/creep404.tga new file mode 100644 index 000000000..1290e848f Binary files /dev/null and b/assets/gfx/misc/creep/creep404.tga differ diff --git a/assets/gfx/misc/creep/creep405.tga b/assets/gfx/misc/creep/creep405.tga new file mode 100644 index 000000000..92e7121b2 Binary files /dev/null and b/assets/gfx/misc/creep/creep405.tga differ diff --git a/assets/gfx/misc/creep/creep406.tga b/assets/gfx/misc/creep/creep406.tga new file mode 100644 index 000000000..c14090ad4 Binary files /dev/null and b/assets/gfx/misc/creep/creep406.tga differ diff --git a/assets/gfx/misc/creep/creep407.tga b/assets/gfx/misc/creep/creep407.tga new file mode 100644 index 000000000..f24a72bb1 Binary files /dev/null and b/assets/gfx/misc/creep/creep407.tga differ diff --git a/assets/gfx/misc/creep/creep408.tga b/assets/gfx/misc/creep/creep408.tga new file mode 100644 index 000000000..92b49c4d8 Binary files /dev/null and b/assets/gfx/misc/creep/creep408.tga differ diff --git a/assets/gfx/misc/creep/creep409.tga b/assets/gfx/misc/creep/creep409.tga new file mode 100644 index 000000000..96e99702e Binary files /dev/null and b/assets/gfx/misc/creep/creep409.tga differ diff --git a/assets/gfx/misc/creep/creep41.tga b/assets/gfx/misc/creep/creep41.tga new file mode 100644 index 000000000..b418c5a81 Binary files /dev/null and b/assets/gfx/misc/creep/creep41.tga differ diff --git a/assets/gfx/misc/creep/creep410.tga b/assets/gfx/misc/creep/creep410.tga new file mode 100644 index 000000000..d2683b3f2 Binary files /dev/null and b/assets/gfx/misc/creep/creep410.tga differ diff --git a/assets/gfx/misc/creep/creep411.tga b/assets/gfx/misc/creep/creep411.tga new file mode 100644 index 000000000..0eb2ac66d Binary files /dev/null and b/assets/gfx/misc/creep/creep411.tga differ diff --git a/assets/gfx/misc/creep/creep412.tga b/assets/gfx/misc/creep/creep412.tga new file mode 100644 index 000000000..c9401e85a Binary files /dev/null and b/assets/gfx/misc/creep/creep412.tga differ diff --git a/assets/gfx/misc/creep/creep413.tga b/assets/gfx/misc/creep/creep413.tga new file mode 100644 index 000000000..5b9a963de Binary files /dev/null and b/assets/gfx/misc/creep/creep413.tga differ diff --git a/assets/gfx/misc/creep/creep414.tga b/assets/gfx/misc/creep/creep414.tga new file mode 100644 index 000000000..233b850af Binary files /dev/null and b/assets/gfx/misc/creep/creep414.tga differ diff --git a/assets/gfx/misc/creep/creep415.tga b/assets/gfx/misc/creep/creep415.tga new file mode 100644 index 000000000..e2509ad9d Binary files /dev/null and b/assets/gfx/misc/creep/creep415.tga differ diff --git a/assets/gfx/misc/creep/creep416.tga b/assets/gfx/misc/creep/creep416.tga new file mode 100644 index 000000000..af92c0ff3 Binary files /dev/null and b/assets/gfx/misc/creep/creep416.tga differ diff --git a/assets/gfx/misc/creep/creep417.tga b/assets/gfx/misc/creep/creep417.tga new file mode 100644 index 000000000..046273ccb Binary files /dev/null and b/assets/gfx/misc/creep/creep417.tga differ diff --git a/assets/gfx/misc/creep/creep418.tga b/assets/gfx/misc/creep/creep418.tga new file mode 100644 index 000000000..30d4efd0f Binary files /dev/null and b/assets/gfx/misc/creep/creep418.tga differ diff --git a/assets/gfx/misc/creep/creep419.tga b/assets/gfx/misc/creep/creep419.tga new file mode 100644 index 000000000..f7b828b18 Binary files /dev/null and b/assets/gfx/misc/creep/creep419.tga differ diff --git a/assets/gfx/misc/creep/creep42.tga b/assets/gfx/misc/creep/creep42.tga new file mode 100644 index 000000000..b08db8062 Binary files /dev/null and b/assets/gfx/misc/creep/creep42.tga differ diff --git a/assets/gfx/misc/creep/creep420.tga b/assets/gfx/misc/creep/creep420.tga new file mode 100644 index 000000000..26ff1b725 Binary files /dev/null and b/assets/gfx/misc/creep/creep420.tga differ diff --git a/assets/gfx/misc/creep/creep421.tga b/assets/gfx/misc/creep/creep421.tga new file mode 100644 index 000000000..f59204bae Binary files /dev/null and b/assets/gfx/misc/creep/creep421.tga differ diff --git a/assets/gfx/misc/creep/creep422.tga b/assets/gfx/misc/creep/creep422.tga new file mode 100644 index 000000000..54b952975 Binary files /dev/null and b/assets/gfx/misc/creep/creep422.tga differ diff --git a/assets/gfx/misc/creep/creep423.tga b/assets/gfx/misc/creep/creep423.tga new file mode 100644 index 000000000..48ce585a6 Binary files /dev/null and b/assets/gfx/misc/creep/creep423.tga differ diff --git a/assets/gfx/misc/creep/creep424.tga b/assets/gfx/misc/creep/creep424.tga new file mode 100644 index 000000000..48ce585a6 Binary files /dev/null and b/assets/gfx/misc/creep/creep424.tga differ diff --git a/assets/gfx/misc/creep/creep425.tga b/assets/gfx/misc/creep/creep425.tga new file mode 100644 index 000000000..d08ae76a9 Binary files /dev/null and b/assets/gfx/misc/creep/creep425.tga differ diff --git a/assets/gfx/misc/creep/creep426.tga b/assets/gfx/misc/creep/creep426.tga new file mode 100644 index 000000000..d08ae76a9 Binary files /dev/null and b/assets/gfx/misc/creep/creep426.tga differ diff --git a/assets/gfx/misc/creep/creep427.tga b/assets/gfx/misc/creep/creep427.tga new file mode 100644 index 000000000..d08ae76a9 Binary files /dev/null and b/assets/gfx/misc/creep/creep427.tga differ diff --git a/assets/gfx/misc/creep/creep428.tga b/assets/gfx/misc/creep/creep428.tga new file mode 100644 index 000000000..ad1a91070 Binary files /dev/null and b/assets/gfx/misc/creep/creep428.tga differ diff --git a/assets/gfx/misc/creep/creep429.tga b/assets/gfx/misc/creep/creep429.tga new file mode 100644 index 000000000..70d8889fc Binary files /dev/null and b/assets/gfx/misc/creep/creep429.tga differ diff --git a/assets/gfx/misc/creep/creep43.tga b/assets/gfx/misc/creep/creep43.tga new file mode 100644 index 000000000..19529512a Binary files /dev/null and b/assets/gfx/misc/creep/creep43.tga differ diff --git a/assets/gfx/misc/creep/creep430.tga b/assets/gfx/misc/creep/creep430.tga new file mode 100644 index 000000000..fbeec5579 Binary files /dev/null and b/assets/gfx/misc/creep/creep430.tga differ diff --git a/assets/gfx/misc/creep/creep431.tga b/assets/gfx/misc/creep/creep431.tga new file mode 100644 index 000000000..35eaa173f Binary files /dev/null and b/assets/gfx/misc/creep/creep431.tga differ diff --git a/assets/gfx/misc/creep/creep432.tga b/assets/gfx/misc/creep/creep432.tga new file mode 100644 index 000000000..96ff0736e Binary files /dev/null and b/assets/gfx/misc/creep/creep432.tga differ diff --git a/assets/gfx/misc/creep/creep433.tga b/assets/gfx/misc/creep/creep433.tga new file mode 100644 index 000000000..fe12c5f2b Binary files /dev/null and b/assets/gfx/misc/creep/creep433.tga differ diff --git a/assets/gfx/misc/creep/creep434.tga b/assets/gfx/misc/creep/creep434.tga new file mode 100644 index 000000000..496358e35 Binary files /dev/null and b/assets/gfx/misc/creep/creep434.tga differ diff --git a/assets/gfx/misc/creep/creep435.tga b/assets/gfx/misc/creep/creep435.tga new file mode 100644 index 000000000..7b838e5e2 Binary files /dev/null and b/assets/gfx/misc/creep/creep435.tga differ diff --git a/assets/gfx/misc/creep/creep436.tga b/assets/gfx/misc/creep/creep436.tga new file mode 100644 index 000000000..4ce48c49c Binary files /dev/null and b/assets/gfx/misc/creep/creep436.tga differ diff --git a/assets/gfx/misc/creep/creep437.tga b/assets/gfx/misc/creep/creep437.tga new file mode 100644 index 000000000..767af6ed9 Binary files /dev/null and b/assets/gfx/misc/creep/creep437.tga differ diff --git a/assets/gfx/misc/creep/creep438.tga b/assets/gfx/misc/creep/creep438.tga new file mode 100644 index 000000000..f5dcb224f Binary files /dev/null and b/assets/gfx/misc/creep/creep438.tga differ diff --git a/assets/gfx/misc/creep/creep439.tga b/assets/gfx/misc/creep/creep439.tga new file mode 100644 index 000000000..4e7c14352 Binary files /dev/null and b/assets/gfx/misc/creep/creep439.tga differ diff --git a/assets/gfx/misc/creep/creep44.tga b/assets/gfx/misc/creep/creep44.tga new file mode 100644 index 000000000..1dad36f9f Binary files /dev/null and b/assets/gfx/misc/creep/creep44.tga differ diff --git a/assets/gfx/misc/creep/creep440.tga b/assets/gfx/misc/creep/creep440.tga new file mode 100644 index 000000000..2d1ca5372 Binary files /dev/null and b/assets/gfx/misc/creep/creep440.tga differ diff --git a/assets/gfx/misc/creep/creep441.tga b/assets/gfx/misc/creep/creep441.tga new file mode 100644 index 000000000..cec61c228 Binary files /dev/null and b/assets/gfx/misc/creep/creep441.tga differ diff --git a/assets/gfx/misc/creep/creep442.tga b/assets/gfx/misc/creep/creep442.tga new file mode 100644 index 000000000..298b29490 Binary files /dev/null and b/assets/gfx/misc/creep/creep442.tga differ diff --git a/assets/gfx/misc/creep/creep443.tga b/assets/gfx/misc/creep/creep443.tga new file mode 100644 index 000000000..c77654acc Binary files /dev/null and b/assets/gfx/misc/creep/creep443.tga differ diff --git a/assets/gfx/misc/creep/creep444.tga b/assets/gfx/misc/creep/creep444.tga new file mode 100644 index 000000000..5feb9b942 Binary files /dev/null and b/assets/gfx/misc/creep/creep444.tga differ diff --git a/assets/gfx/misc/creep/creep445.tga b/assets/gfx/misc/creep/creep445.tga new file mode 100644 index 000000000..2e92d03cf Binary files /dev/null and b/assets/gfx/misc/creep/creep445.tga differ diff --git a/assets/gfx/misc/creep/creep446.tga b/assets/gfx/misc/creep/creep446.tga new file mode 100644 index 000000000..edaa7f47b Binary files /dev/null and b/assets/gfx/misc/creep/creep446.tga differ diff --git a/assets/gfx/misc/creep/creep447.tga b/assets/gfx/misc/creep/creep447.tga new file mode 100644 index 000000000..81d4c1c9a Binary files /dev/null and b/assets/gfx/misc/creep/creep447.tga differ diff --git a/assets/gfx/misc/creep/creep448.tga b/assets/gfx/misc/creep/creep448.tga new file mode 100644 index 000000000..8a627dff0 Binary files /dev/null and b/assets/gfx/misc/creep/creep448.tga differ diff --git a/assets/gfx/misc/creep/creep449.tga b/assets/gfx/misc/creep/creep449.tga new file mode 100644 index 000000000..8e5cb15c0 Binary files /dev/null and b/assets/gfx/misc/creep/creep449.tga differ diff --git a/assets/gfx/misc/creep/creep45.tga b/assets/gfx/misc/creep/creep45.tga new file mode 100644 index 000000000..53af844f0 Binary files /dev/null and b/assets/gfx/misc/creep/creep45.tga differ diff --git a/assets/gfx/misc/creep/creep450.tga b/assets/gfx/misc/creep/creep450.tga new file mode 100644 index 000000000..40f95aba4 Binary files /dev/null and b/assets/gfx/misc/creep/creep450.tga differ diff --git a/assets/gfx/misc/creep/creep451.tga b/assets/gfx/misc/creep/creep451.tga new file mode 100644 index 000000000..b29ace3a5 Binary files /dev/null and b/assets/gfx/misc/creep/creep451.tga differ diff --git a/assets/gfx/misc/creep/creep452.tga b/assets/gfx/misc/creep/creep452.tga new file mode 100644 index 000000000..045689e18 Binary files /dev/null and b/assets/gfx/misc/creep/creep452.tga differ diff --git a/assets/gfx/misc/creep/creep453.tga b/assets/gfx/misc/creep/creep453.tga new file mode 100644 index 000000000..6dd15e519 Binary files /dev/null and b/assets/gfx/misc/creep/creep453.tga differ diff --git a/assets/gfx/misc/creep/creep454.tga b/assets/gfx/misc/creep/creep454.tga new file mode 100644 index 000000000..4fb59635e Binary files /dev/null and b/assets/gfx/misc/creep/creep454.tga differ diff --git a/assets/gfx/misc/creep/creep455.tga b/assets/gfx/misc/creep/creep455.tga new file mode 100644 index 000000000..fabadf053 Binary files /dev/null and b/assets/gfx/misc/creep/creep455.tga differ diff --git a/assets/gfx/misc/creep/creep456.tga b/assets/gfx/misc/creep/creep456.tga new file mode 100644 index 000000000..35e0f72da Binary files /dev/null and b/assets/gfx/misc/creep/creep456.tga differ diff --git a/assets/gfx/misc/creep/creep457.tga b/assets/gfx/misc/creep/creep457.tga new file mode 100644 index 000000000..656bb606f Binary files /dev/null and b/assets/gfx/misc/creep/creep457.tga differ diff --git a/assets/gfx/misc/creep/creep458.tga b/assets/gfx/misc/creep/creep458.tga new file mode 100644 index 000000000..7c86233cd Binary files /dev/null and b/assets/gfx/misc/creep/creep458.tga differ diff --git a/assets/gfx/misc/creep/creep459.tga b/assets/gfx/misc/creep/creep459.tga new file mode 100644 index 000000000..6594acf12 Binary files /dev/null and b/assets/gfx/misc/creep/creep459.tga differ diff --git a/assets/gfx/misc/creep/creep46.tga b/assets/gfx/misc/creep/creep46.tga new file mode 100644 index 000000000..cc8bfa63b Binary files /dev/null and b/assets/gfx/misc/creep/creep46.tga differ diff --git a/assets/gfx/misc/creep/creep460.tga b/assets/gfx/misc/creep/creep460.tga new file mode 100644 index 000000000..9c359c6f3 Binary files /dev/null and b/assets/gfx/misc/creep/creep460.tga differ diff --git a/assets/gfx/misc/creep/creep461.tga b/assets/gfx/misc/creep/creep461.tga new file mode 100644 index 000000000..a54faefeb Binary files /dev/null and b/assets/gfx/misc/creep/creep461.tga differ diff --git a/assets/gfx/misc/creep/creep462.tga b/assets/gfx/misc/creep/creep462.tga new file mode 100644 index 000000000..4eccc1999 Binary files /dev/null and b/assets/gfx/misc/creep/creep462.tga differ diff --git a/assets/gfx/misc/creep/creep463.tga b/assets/gfx/misc/creep/creep463.tga new file mode 100644 index 000000000..d2025132f Binary files /dev/null and b/assets/gfx/misc/creep/creep463.tga differ diff --git a/assets/gfx/misc/creep/creep464.tga b/assets/gfx/misc/creep/creep464.tga new file mode 100644 index 000000000..f2f3acd5b Binary files /dev/null and b/assets/gfx/misc/creep/creep464.tga differ diff --git a/assets/gfx/misc/creep/creep465.tga b/assets/gfx/misc/creep/creep465.tga new file mode 100644 index 000000000..0ed6826aa Binary files /dev/null and b/assets/gfx/misc/creep/creep465.tga differ diff --git a/assets/gfx/misc/creep/creep466.tga b/assets/gfx/misc/creep/creep466.tga new file mode 100644 index 000000000..0ed6826aa Binary files /dev/null and b/assets/gfx/misc/creep/creep466.tga differ diff --git a/assets/gfx/misc/creep/creep467.tga b/assets/gfx/misc/creep/creep467.tga new file mode 100644 index 000000000..0ed6826aa Binary files /dev/null and b/assets/gfx/misc/creep/creep467.tga differ diff --git a/assets/gfx/misc/creep/creep468.tga b/assets/gfx/misc/creep/creep468.tga new file mode 100644 index 000000000..7308538d2 Binary files /dev/null and b/assets/gfx/misc/creep/creep468.tga differ diff --git a/assets/gfx/misc/creep/creep469.tga b/assets/gfx/misc/creep/creep469.tga new file mode 100644 index 000000000..02a827263 Binary files /dev/null and b/assets/gfx/misc/creep/creep469.tga differ diff --git a/assets/gfx/misc/creep/creep47.tga b/assets/gfx/misc/creep/creep47.tga new file mode 100644 index 000000000..28b1da137 Binary files /dev/null and b/assets/gfx/misc/creep/creep47.tga differ diff --git a/assets/gfx/misc/creep/creep470.tga b/assets/gfx/misc/creep/creep470.tga new file mode 100644 index 000000000..ffa21bf9d Binary files /dev/null and b/assets/gfx/misc/creep/creep470.tga differ diff --git a/assets/gfx/misc/creep/creep471.tga b/assets/gfx/misc/creep/creep471.tga new file mode 100644 index 000000000..ffa21bf9d Binary files /dev/null and b/assets/gfx/misc/creep/creep471.tga differ diff --git a/assets/gfx/misc/creep/creep472.tga b/assets/gfx/misc/creep/creep472.tga new file mode 100644 index 000000000..9b0bb114a Binary files /dev/null and b/assets/gfx/misc/creep/creep472.tga differ diff --git a/assets/gfx/misc/creep/creep473.tga b/assets/gfx/misc/creep/creep473.tga new file mode 100644 index 000000000..ffa21bf9d Binary files /dev/null and b/assets/gfx/misc/creep/creep473.tga differ diff --git a/assets/gfx/misc/creep/creep474.tga b/assets/gfx/misc/creep/creep474.tga new file mode 100644 index 000000000..ffa21bf9d Binary files /dev/null and b/assets/gfx/misc/creep/creep474.tga differ diff --git a/assets/gfx/misc/creep/creep475.tga b/assets/gfx/misc/creep/creep475.tga new file mode 100644 index 000000000..682c7b3db Binary files /dev/null and b/assets/gfx/misc/creep/creep475.tga differ diff --git a/assets/gfx/misc/creep/creep476.tga b/assets/gfx/misc/creep/creep476.tga new file mode 100644 index 000000000..87f1a9199 Binary files /dev/null and b/assets/gfx/misc/creep/creep476.tga differ diff --git a/assets/gfx/misc/creep/creep477.tga b/assets/gfx/misc/creep/creep477.tga new file mode 100644 index 000000000..363451c89 Binary files /dev/null and b/assets/gfx/misc/creep/creep477.tga differ diff --git a/assets/gfx/misc/creep/creep478.tga b/assets/gfx/misc/creep/creep478.tga new file mode 100644 index 000000000..17b3a3b2a Binary files /dev/null and b/assets/gfx/misc/creep/creep478.tga differ diff --git a/assets/gfx/misc/creep/creep479.tga b/assets/gfx/misc/creep/creep479.tga new file mode 100644 index 000000000..ff44873df Binary files /dev/null and b/assets/gfx/misc/creep/creep479.tga differ diff --git a/assets/gfx/misc/creep/creep48.tga b/assets/gfx/misc/creep/creep48.tga new file mode 100644 index 000000000..8a9377f18 Binary files /dev/null and b/assets/gfx/misc/creep/creep48.tga differ diff --git a/assets/gfx/misc/creep/creep480.tga b/assets/gfx/misc/creep/creep480.tga new file mode 100644 index 000000000..971685dfe Binary files /dev/null and b/assets/gfx/misc/creep/creep480.tga differ diff --git a/assets/gfx/misc/creep/creep481.tga b/assets/gfx/misc/creep/creep481.tga new file mode 100644 index 000000000..826317a32 Binary files /dev/null and b/assets/gfx/misc/creep/creep481.tga differ diff --git a/assets/gfx/misc/creep/creep482.tga b/assets/gfx/misc/creep/creep482.tga new file mode 100644 index 000000000..d4306d71c Binary files /dev/null and b/assets/gfx/misc/creep/creep482.tga differ diff --git a/assets/gfx/misc/creep/creep483.tga b/assets/gfx/misc/creep/creep483.tga new file mode 100644 index 000000000..58fea2710 Binary files /dev/null and b/assets/gfx/misc/creep/creep483.tga differ diff --git a/assets/gfx/misc/creep/creep484.tga b/assets/gfx/misc/creep/creep484.tga new file mode 100644 index 000000000..a5f4d5c17 Binary files /dev/null and b/assets/gfx/misc/creep/creep484.tga differ diff --git a/assets/gfx/misc/creep/creep485.tga b/assets/gfx/misc/creep/creep485.tga new file mode 100644 index 000000000..b214faca4 Binary files /dev/null and b/assets/gfx/misc/creep/creep485.tga differ diff --git a/assets/gfx/misc/creep/creep486.tga b/assets/gfx/misc/creep/creep486.tga new file mode 100644 index 000000000..5bfa4b0d5 Binary files /dev/null and b/assets/gfx/misc/creep/creep486.tga differ diff --git a/assets/gfx/misc/creep/creep487.tga b/assets/gfx/misc/creep/creep487.tga new file mode 100644 index 000000000..295a0340c Binary files /dev/null and b/assets/gfx/misc/creep/creep487.tga differ diff --git a/assets/gfx/misc/creep/creep488.tga b/assets/gfx/misc/creep/creep488.tga new file mode 100644 index 000000000..291a0b4a3 Binary files /dev/null and b/assets/gfx/misc/creep/creep488.tga differ diff --git a/assets/gfx/misc/creep/creep489.tga b/assets/gfx/misc/creep/creep489.tga new file mode 100644 index 000000000..bc0199604 Binary files /dev/null and b/assets/gfx/misc/creep/creep489.tga differ diff --git a/assets/gfx/misc/creep/creep49.tga b/assets/gfx/misc/creep/creep49.tga new file mode 100644 index 000000000..35b4377fc Binary files /dev/null and b/assets/gfx/misc/creep/creep49.tga differ diff --git a/assets/gfx/misc/creep/creep490.tga b/assets/gfx/misc/creep/creep490.tga new file mode 100644 index 000000000..c6d1ae246 Binary files /dev/null and b/assets/gfx/misc/creep/creep490.tga differ diff --git a/assets/gfx/misc/creep/creep491.tga b/assets/gfx/misc/creep/creep491.tga new file mode 100644 index 000000000..7c5be58d2 Binary files /dev/null and b/assets/gfx/misc/creep/creep491.tga differ diff --git a/assets/gfx/misc/creep/creep492.tga b/assets/gfx/misc/creep/creep492.tga new file mode 100644 index 000000000..ec23a77eb Binary files /dev/null and b/assets/gfx/misc/creep/creep492.tga differ diff --git a/assets/gfx/misc/creep/creep493.tga b/assets/gfx/misc/creep/creep493.tga new file mode 100644 index 000000000..2abe25c8e Binary files /dev/null and b/assets/gfx/misc/creep/creep493.tga differ diff --git a/assets/gfx/misc/creep/creep494.tga b/assets/gfx/misc/creep/creep494.tga new file mode 100644 index 000000000..c7302db38 Binary files /dev/null and b/assets/gfx/misc/creep/creep494.tga differ diff --git a/assets/gfx/misc/creep/creep495.tga b/assets/gfx/misc/creep/creep495.tga new file mode 100644 index 000000000..94c95fcbe Binary files /dev/null and b/assets/gfx/misc/creep/creep495.tga differ diff --git a/assets/gfx/misc/creep/creep496.tga b/assets/gfx/misc/creep/creep496.tga new file mode 100644 index 000000000..d6502733c Binary files /dev/null and b/assets/gfx/misc/creep/creep496.tga differ diff --git a/assets/gfx/misc/creep/creep497.tga b/assets/gfx/misc/creep/creep497.tga new file mode 100644 index 000000000..3f2a116c3 Binary files /dev/null and b/assets/gfx/misc/creep/creep497.tga differ diff --git a/assets/gfx/misc/creep/creep498.tga b/assets/gfx/misc/creep/creep498.tga new file mode 100644 index 000000000..3f2a116c3 Binary files /dev/null and b/assets/gfx/misc/creep/creep498.tga differ diff --git a/assets/gfx/misc/creep/creep499.tga b/assets/gfx/misc/creep/creep499.tga new file mode 100644 index 000000000..3f2a116c3 Binary files /dev/null and b/assets/gfx/misc/creep/creep499.tga differ diff --git a/assets/gfx/misc/creep/creep5.tga b/assets/gfx/misc/creep/creep5.tga new file mode 100644 index 000000000..9dc2a62ea Binary files /dev/null and b/assets/gfx/misc/creep/creep5.tga differ diff --git a/assets/gfx/misc/creep/creep50.tga b/assets/gfx/misc/creep/creep50.tga new file mode 100644 index 000000000..7151350b7 Binary files /dev/null and b/assets/gfx/misc/creep/creep50.tga differ diff --git a/assets/gfx/misc/creep/creep500.tga b/assets/gfx/misc/creep/creep500.tga new file mode 100644 index 000000000..3f2a116c3 Binary files /dev/null and b/assets/gfx/misc/creep/creep500.tga differ diff --git a/assets/gfx/misc/creep/creep501.tga b/assets/gfx/misc/creep/creep501.tga new file mode 100644 index 000000000..3f2a116c3 Binary files /dev/null and b/assets/gfx/misc/creep/creep501.tga differ diff --git a/assets/gfx/misc/creep/creep502.tga b/assets/gfx/misc/creep/creep502.tga new file mode 100644 index 000000000..3f2a116c3 Binary files /dev/null and b/assets/gfx/misc/creep/creep502.tga differ diff --git a/assets/gfx/misc/creep/creep503.tga b/assets/gfx/misc/creep/creep503.tga new file mode 100644 index 000000000..3f2a116c3 Binary files /dev/null and b/assets/gfx/misc/creep/creep503.tga differ diff --git a/assets/gfx/misc/creep/creep504.tga b/assets/gfx/misc/creep/creep504.tga new file mode 100644 index 000000000..4f2d27d52 Binary files /dev/null and b/assets/gfx/misc/creep/creep504.tga differ diff --git a/assets/gfx/misc/creep/creep505.tga b/assets/gfx/misc/creep/creep505.tga new file mode 100644 index 000000000..7d858ea21 Binary files /dev/null and b/assets/gfx/misc/creep/creep505.tga differ diff --git a/assets/gfx/misc/creep/creep506.tga b/assets/gfx/misc/creep/creep506.tga new file mode 100644 index 000000000..15a1d3a6b Binary files /dev/null and b/assets/gfx/misc/creep/creep506.tga differ diff --git a/assets/gfx/misc/creep/creep507.tga b/assets/gfx/misc/creep/creep507.tga new file mode 100644 index 000000000..e2b1b9644 Binary files /dev/null and b/assets/gfx/misc/creep/creep507.tga differ diff --git a/assets/gfx/misc/creep/creep508.tga b/assets/gfx/misc/creep/creep508.tga new file mode 100644 index 000000000..33fa73753 Binary files /dev/null and b/assets/gfx/misc/creep/creep508.tga differ diff --git a/assets/gfx/misc/creep/creep509.tga b/assets/gfx/misc/creep/creep509.tga new file mode 100644 index 000000000..c812a8a29 Binary files /dev/null and b/assets/gfx/misc/creep/creep509.tga differ diff --git a/assets/gfx/misc/creep/creep51.tga b/assets/gfx/misc/creep/creep51.tga new file mode 100644 index 000000000..3d2daea5d Binary files /dev/null and b/assets/gfx/misc/creep/creep51.tga differ diff --git a/assets/gfx/misc/creep/creep510.tga b/assets/gfx/misc/creep/creep510.tga new file mode 100644 index 000000000..9f035a6dc Binary files /dev/null and b/assets/gfx/misc/creep/creep510.tga differ diff --git a/assets/gfx/misc/creep/creep511.tga b/assets/gfx/misc/creep/creep511.tga new file mode 100644 index 000000000..9f035a6dc Binary files /dev/null and b/assets/gfx/misc/creep/creep511.tga differ diff --git a/assets/gfx/misc/creep/creep512.tga b/assets/gfx/misc/creep/creep512.tga new file mode 100644 index 000000000..68b84fa6c Binary files /dev/null and b/assets/gfx/misc/creep/creep512.tga differ diff --git a/assets/gfx/misc/creep/creep513.tga b/assets/gfx/misc/creep/creep513.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep513.tga differ diff --git a/assets/gfx/misc/creep/creep514.tga b/assets/gfx/misc/creep/creep514.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep514.tga differ diff --git a/assets/gfx/misc/creep/creep515.tga b/assets/gfx/misc/creep/creep515.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep515.tga differ diff --git a/assets/gfx/misc/creep/creep516.tga b/assets/gfx/misc/creep/creep516.tga new file mode 100644 index 000000000..4bd081efa Binary files /dev/null and b/assets/gfx/misc/creep/creep516.tga differ diff --git a/assets/gfx/misc/creep/creep517.tga b/assets/gfx/misc/creep/creep517.tga new file mode 100644 index 000000000..4bd081efa Binary files /dev/null and b/assets/gfx/misc/creep/creep517.tga differ diff --git a/assets/gfx/misc/creep/creep518.tga b/assets/gfx/misc/creep/creep518.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep518.tga differ diff --git a/assets/gfx/misc/creep/creep519.tga b/assets/gfx/misc/creep/creep519.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep519.tga differ diff --git a/assets/gfx/misc/creep/creep52.tga b/assets/gfx/misc/creep/creep52.tga new file mode 100644 index 000000000..620460d25 Binary files /dev/null and b/assets/gfx/misc/creep/creep52.tga differ diff --git a/assets/gfx/misc/creep/creep520.tga b/assets/gfx/misc/creep/creep520.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep520.tga differ diff --git a/assets/gfx/misc/creep/creep521.tga b/assets/gfx/misc/creep/creep521.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep521.tga differ diff --git a/assets/gfx/misc/creep/creep522.tga b/assets/gfx/misc/creep/creep522.tga new file mode 100644 index 000000000..41247ef5c Binary files /dev/null and b/assets/gfx/misc/creep/creep522.tga differ diff --git a/assets/gfx/misc/creep/creep523.tga b/assets/gfx/misc/creep/creep523.tga new file mode 100644 index 000000000..9eab07c9d Binary files /dev/null and b/assets/gfx/misc/creep/creep523.tga differ diff --git a/assets/gfx/misc/creep/creep524.tga b/assets/gfx/misc/creep/creep524.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep524.tga differ diff --git a/assets/gfx/misc/creep/creep525.tga b/assets/gfx/misc/creep/creep525.tga new file mode 100644 index 000000000..0869c8a7c Binary files /dev/null and b/assets/gfx/misc/creep/creep525.tga differ diff --git a/assets/gfx/misc/creep/creep526.tga b/assets/gfx/misc/creep/creep526.tga new file mode 100644 index 000000000..d106665da Binary files /dev/null and b/assets/gfx/misc/creep/creep526.tga differ diff --git a/assets/gfx/misc/creep/creep527.tga b/assets/gfx/misc/creep/creep527.tga new file mode 100644 index 000000000..0869c8a7c Binary files /dev/null and b/assets/gfx/misc/creep/creep527.tga differ diff --git a/assets/gfx/misc/creep/creep528.tga b/assets/gfx/misc/creep/creep528.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep528.tga differ diff --git a/assets/gfx/misc/creep/creep529.tga b/assets/gfx/misc/creep/creep529.tga new file mode 100644 index 000000000..4a98a89e5 Binary files /dev/null and b/assets/gfx/misc/creep/creep529.tga differ diff --git a/assets/gfx/misc/creep/creep53.tga b/assets/gfx/misc/creep/creep53.tga new file mode 100644 index 000000000..debc15cba Binary files /dev/null and b/assets/gfx/misc/creep/creep53.tga differ diff --git a/assets/gfx/misc/creep/creep530.tga b/assets/gfx/misc/creep/creep530.tga new file mode 100644 index 000000000..28d5f1176 Binary files /dev/null and b/assets/gfx/misc/creep/creep530.tga differ diff --git a/assets/gfx/misc/creep/creep531.tga b/assets/gfx/misc/creep/creep531.tga new file mode 100644 index 000000000..b95d2eb89 Binary files /dev/null and b/assets/gfx/misc/creep/creep531.tga differ diff --git a/assets/gfx/misc/creep/creep532.tga b/assets/gfx/misc/creep/creep532.tga new file mode 100644 index 000000000..b31b5f0b6 Binary files /dev/null and b/assets/gfx/misc/creep/creep532.tga differ diff --git a/assets/gfx/misc/creep/creep533.tga b/assets/gfx/misc/creep/creep533.tga new file mode 100644 index 000000000..731b47ed3 Binary files /dev/null and b/assets/gfx/misc/creep/creep533.tga differ diff --git a/assets/gfx/misc/creep/creep534.tga b/assets/gfx/misc/creep/creep534.tga new file mode 100644 index 000000000..a966219c8 Binary files /dev/null and b/assets/gfx/misc/creep/creep534.tga differ diff --git a/assets/gfx/misc/creep/creep535.tga b/assets/gfx/misc/creep/creep535.tga new file mode 100644 index 000000000..eadb19d18 Binary files /dev/null and b/assets/gfx/misc/creep/creep535.tga differ diff --git a/assets/gfx/misc/creep/creep536.tga b/assets/gfx/misc/creep/creep536.tga new file mode 100644 index 000000000..0e706d46c Binary files /dev/null and b/assets/gfx/misc/creep/creep536.tga differ diff --git a/assets/gfx/misc/creep/creep537.tga b/assets/gfx/misc/creep/creep537.tga new file mode 100644 index 000000000..ade53e307 Binary files /dev/null and b/assets/gfx/misc/creep/creep537.tga differ diff --git a/assets/gfx/misc/creep/creep538.tga b/assets/gfx/misc/creep/creep538.tga new file mode 100644 index 000000000..ba576bd39 Binary files /dev/null and b/assets/gfx/misc/creep/creep538.tga differ diff --git a/assets/gfx/misc/creep/creep539.tga b/assets/gfx/misc/creep/creep539.tga new file mode 100644 index 000000000..97614d30a Binary files /dev/null and b/assets/gfx/misc/creep/creep539.tga differ diff --git a/assets/gfx/misc/creep/creep54.tga b/assets/gfx/misc/creep/creep54.tga new file mode 100644 index 000000000..4121804e0 Binary files /dev/null and b/assets/gfx/misc/creep/creep54.tga differ diff --git a/assets/gfx/misc/creep/creep540.tga b/assets/gfx/misc/creep/creep540.tga new file mode 100644 index 000000000..22fb855bb Binary files /dev/null and b/assets/gfx/misc/creep/creep540.tga differ diff --git a/assets/gfx/misc/creep/creep541.tga b/assets/gfx/misc/creep/creep541.tga new file mode 100644 index 000000000..2e0e08f4f Binary files /dev/null and b/assets/gfx/misc/creep/creep541.tga differ diff --git a/assets/gfx/misc/creep/creep542.tga b/assets/gfx/misc/creep/creep542.tga new file mode 100644 index 000000000..2e0e08f4f Binary files /dev/null and b/assets/gfx/misc/creep/creep542.tga differ diff --git a/assets/gfx/misc/creep/creep543.tga b/assets/gfx/misc/creep/creep543.tga new file mode 100644 index 000000000..2e0e08f4f Binary files /dev/null and b/assets/gfx/misc/creep/creep543.tga differ diff --git a/assets/gfx/misc/creep/creep544.tga b/assets/gfx/misc/creep/creep544.tga new file mode 100644 index 000000000..2e0e08f4f Binary files /dev/null and b/assets/gfx/misc/creep/creep544.tga differ diff --git a/assets/gfx/misc/creep/creep545.tga b/assets/gfx/misc/creep/creep545.tga new file mode 100644 index 000000000..2e0e08f4f Binary files /dev/null and b/assets/gfx/misc/creep/creep545.tga differ diff --git a/assets/gfx/misc/creep/creep546.tga b/assets/gfx/misc/creep/creep546.tga new file mode 100644 index 000000000..2e0e08f4f Binary files /dev/null and b/assets/gfx/misc/creep/creep546.tga differ diff --git a/assets/gfx/misc/creep/creep547.tga b/assets/gfx/misc/creep/creep547.tga new file mode 100644 index 000000000..fea77f8a7 Binary files /dev/null and b/assets/gfx/misc/creep/creep547.tga differ diff --git a/assets/gfx/misc/creep/creep548.tga b/assets/gfx/misc/creep/creep548.tga new file mode 100644 index 000000000..7a3964817 Binary files /dev/null and b/assets/gfx/misc/creep/creep548.tga differ diff --git a/assets/gfx/misc/creep/creep549.tga b/assets/gfx/misc/creep/creep549.tga new file mode 100644 index 000000000..bd3d13a17 Binary files /dev/null and b/assets/gfx/misc/creep/creep549.tga differ diff --git a/assets/gfx/misc/creep/creep55.tga b/assets/gfx/misc/creep/creep55.tga new file mode 100644 index 000000000..12f7fdef1 Binary files /dev/null and b/assets/gfx/misc/creep/creep55.tga differ diff --git a/assets/gfx/misc/creep/creep56.tga b/assets/gfx/misc/creep/creep56.tga new file mode 100644 index 000000000..3863a9a66 Binary files /dev/null and b/assets/gfx/misc/creep/creep56.tga differ diff --git a/assets/gfx/misc/creep/creep57.tga b/assets/gfx/misc/creep/creep57.tga new file mode 100644 index 000000000..d6aa91a53 Binary files /dev/null and b/assets/gfx/misc/creep/creep57.tga differ diff --git a/assets/gfx/misc/creep/creep58.tga b/assets/gfx/misc/creep/creep58.tga new file mode 100644 index 000000000..ebb4b95b9 Binary files /dev/null and b/assets/gfx/misc/creep/creep58.tga differ diff --git a/assets/gfx/misc/creep/creep59.tga b/assets/gfx/misc/creep/creep59.tga new file mode 100644 index 000000000..fa7ba3c24 Binary files /dev/null and b/assets/gfx/misc/creep/creep59.tga differ diff --git a/assets/gfx/misc/creep/creep6.tga b/assets/gfx/misc/creep/creep6.tga new file mode 100644 index 000000000..055fb7ec0 Binary files /dev/null and b/assets/gfx/misc/creep/creep6.tga differ diff --git a/assets/gfx/misc/creep/creep60.tga b/assets/gfx/misc/creep/creep60.tga new file mode 100644 index 000000000..d4892b991 Binary files /dev/null and b/assets/gfx/misc/creep/creep60.tga differ diff --git a/assets/gfx/misc/creep/creep61.tga b/assets/gfx/misc/creep/creep61.tga new file mode 100644 index 000000000..0c92bc5d1 Binary files /dev/null and b/assets/gfx/misc/creep/creep61.tga differ diff --git a/assets/gfx/misc/creep/creep62.tga b/assets/gfx/misc/creep/creep62.tga new file mode 100644 index 000000000..cff853269 Binary files /dev/null and b/assets/gfx/misc/creep/creep62.tga differ diff --git a/assets/gfx/misc/creep/creep63.tga b/assets/gfx/misc/creep/creep63.tga new file mode 100644 index 000000000..ef6f9e7a9 Binary files /dev/null and b/assets/gfx/misc/creep/creep63.tga differ diff --git a/assets/gfx/misc/creep/creep64.tga b/assets/gfx/misc/creep/creep64.tga new file mode 100644 index 000000000..67481ae69 Binary files /dev/null and b/assets/gfx/misc/creep/creep64.tga differ diff --git a/assets/gfx/misc/creep/creep65.tga b/assets/gfx/misc/creep/creep65.tga new file mode 100644 index 000000000..27f6891e1 Binary files /dev/null and b/assets/gfx/misc/creep/creep65.tga differ diff --git a/assets/gfx/misc/creep/creep66.tga b/assets/gfx/misc/creep/creep66.tga new file mode 100644 index 000000000..74e0bc15c Binary files /dev/null and b/assets/gfx/misc/creep/creep66.tga differ diff --git a/assets/gfx/misc/creep/creep67.tga b/assets/gfx/misc/creep/creep67.tga new file mode 100644 index 000000000..808508422 Binary files /dev/null and b/assets/gfx/misc/creep/creep67.tga differ diff --git a/assets/gfx/misc/creep/creep68.tga b/assets/gfx/misc/creep/creep68.tga new file mode 100644 index 000000000..14a9db8fe Binary files /dev/null and b/assets/gfx/misc/creep/creep68.tga differ diff --git a/assets/gfx/misc/creep/creep69.tga b/assets/gfx/misc/creep/creep69.tga new file mode 100644 index 000000000..09dc7d0b5 Binary files /dev/null and b/assets/gfx/misc/creep/creep69.tga differ diff --git a/assets/gfx/misc/creep/creep7.tga b/assets/gfx/misc/creep/creep7.tga new file mode 100644 index 000000000..8df16a5f5 Binary files /dev/null and b/assets/gfx/misc/creep/creep7.tga differ diff --git a/assets/gfx/misc/creep/creep70.tga b/assets/gfx/misc/creep/creep70.tga new file mode 100644 index 000000000..95796fdd4 Binary files /dev/null and b/assets/gfx/misc/creep/creep70.tga differ diff --git a/assets/gfx/misc/creep/creep71.tga b/assets/gfx/misc/creep/creep71.tga new file mode 100644 index 000000000..3a9ad4826 Binary files /dev/null and b/assets/gfx/misc/creep/creep71.tga differ diff --git a/assets/gfx/misc/creep/creep72.tga b/assets/gfx/misc/creep/creep72.tga new file mode 100644 index 000000000..c8a097acd Binary files /dev/null and b/assets/gfx/misc/creep/creep72.tga differ diff --git a/assets/gfx/misc/creep/creep73.tga b/assets/gfx/misc/creep/creep73.tga new file mode 100644 index 000000000..49bb670f1 Binary files /dev/null and b/assets/gfx/misc/creep/creep73.tga differ diff --git a/assets/gfx/misc/creep/creep74.tga b/assets/gfx/misc/creep/creep74.tga new file mode 100644 index 000000000..c0acd77dc Binary files /dev/null and b/assets/gfx/misc/creep/creep74.tga differ diff --git a/assets/gfx/misc/creep/creep75.tga b/assets/gfx/misc/creep/creep75.tga new file mode 100644 index 000000000..b180f5770 Binary files /dev/null and b/assets/gfx/misc/creep/creep75.tga differ diff --git a/assets/gfx/misc/creep/creep76.tga b/assets/gfx/misc/creep/creep76.tga new file mode 100644 index 000000000..1946c3e32 Binary files /dev/null and b/assets/gfx/misc/creep/creep76.tga differ diff --git a/assets/gfx/misc/creep/creep77.tga b/assets/gfx/misc/creep/creep77.tga new file mode 100644 index 000000000..fa85e4cea Binary files /dev/null and b/assets/gfx/misc/creep/creep77.tga differ diff --git a/assets/gfx/misc/creep/creep78.tga b/assets/gfx/misc/creep/creep78.tga new file mode 100644 index 000000000..68154041a Binary files /dev/null and b/assets/gfx/misc/creep/creep78.tga differ diff --git a/assets/gfx/misc/creep/creep79.tga b/assets/gfx/misc/creep/creep79.tga new file mode 100644 index 000000000..c3e436716 Binary files /dev/null and b/assets/gfx/misc/creep/creep79.tga differ diff --git a/assets/gfx/misc/creep/creep8.tga b/assets/gfx/misc/creep/creep8.tga new file mode 100644 index 000000000..7298ba467 Binary files /dev/null and b/assets/gfx/misc/creep/creep8.tga differ diff --git a/assets/gfx/misc/creep/creep80.tga b/assets/gfx/misc/creep/creep80.tga new file mode 100644 index 000000000..2f37f9555 Binary files /dev/null and b/assets/gfx/misc/creep/creep80.tga differ diff --git a/assets/gfx/misc/creep/creep81.tga b/assets/gfx/misc/creep/creep81.tga new file mode 100644 index 000000000..2abf76547 Binary files /dev/null and b/assets/gfx/misc/creep/creep81.tga differ diff --git a/assets/gfx/misc/creep/creep82.tga b/assets/gfx/misc/creep/creep82.tga new file mode 100644 index 000000000..2dbc7559a Binary files /dev/null and b/assets/gfx/misc/creep/creep82.tga differ diff --git a/assets/gfx/misc/creep/creep83.tga b/assets/gfx/misc/creep/creep83.tga new file mode 100644 index 000000000..7b059a523 Binary files /dev/null and b/assets/gfx/misc/creep/creep83.tga differ diff --git a/assets/gfx/misc/creep/creep84.tga b/assets/gfx/misc/creep/creep84.tga new file mode 100644 index 000000000..ecc700f6a Binary files /dev/null and b/assets/gfx/misc/creep/creep84.tga differ diff --git a/assets/gfx/misc/creep/creep85.tga b/assets/gfx/misc/creep/creep85.tga new file mode 100644 index 000000000..f58169967 Binary files /dev/null and b/assets/gfx/misc/creep/creep85.tga differ diff --git a/assets/gfx/misc/creep/creep86.tga b/assets/gfx/misc/creep/creep86.tga new file mode 100644 index 000000000..69ff3f729 Binary files /dev/null and b/assets/gfx/misc/creep/creep86.tga differ diff --git a/assets/gfx/misc/creep/creep87.tga b/assets/gfx/misc/creep/creep87.tga new file mode 100644 index 000000000..a9949a4cb Binary files /dev/null and b/assets/gfx/misc/creep/creep87.tga differ diff --git a/assets/gfx/misc/creep/creep88.tga b/assets/gfx/misc/creep/creep88.tga new file mode 100644 index 000000000..3c549c239 Binary files /dev/null and b/assets/gfx/misc/creep/creep88.tga differ diff --git a/assets/gfx/misc/creep/creep89.tga b/assets/gfx/misc/creep/creep89.tga new file mode 100644 index 000000000..16e5f8342 Binary files /dev/null and b/assets/gfx/misc/creep/creep89.tga differ diff --git a/assets/gfx/misc/creep/creep9.tga b/assets/gfx/misc/creep/creep9.tga new file mode 100644 index 000000000..2a1205024 Binary files /dev/null and b/assets/gfx/misc/creep/creep9.tga differ diff --git a/assets/gfx/misc/creep/creep90.tga b/assets/gfx/misc/creep/creep90.tga new file mode 100644 index 000000000..6ee9b365f Binary files /dev/null and b/assets/gfx/misc/creep/creep90.tga differ diff --git a/assets/gfx/misc/creep/creep91.tga b/assets/gfx/misc/creep/creep91.tga new file mode 100644 index 000000000..feadf2023 Binary files /dev/null and b/assets/gfx/misc/creep/creep91.tga differ diff --git a/assets/gfx/misc/creep/creep92.tga b/assets/gfx/misc/creep/creep92.tga new file mode 100644 index 000000000..9b854e0e6 Binary files /dev/null and b/assets/gfx/misc/creep/creep92.tga differ diff --git a/assets/gfx/misc/creep/creep93.tga b/assets/gfx/misc/creep/creep93.tga new file mode 100644 index 000000000..69073b8dc Binary files /dev/null and b/assets/gfx/misc/creep/creep93.tga differ diff --git a/assets/gfx/misc/creep/creep94.tga b/assets/gfx/misc/creep/creep94.tga new file mode 100644 index 000000000..0734b2f46 Binary files /dev/null and b/assets/gfx/misc/creep/creep94.tga differ diff --git a/assets/gfx/misc/creep/creep95.tga b/assets/gfx/misc/creep/creep95.tga new file mode 100644 index 000000000..3f8c0fba4 Binary files /dev/null and b/assets/gfx/misc/creep/creep95.tga differ diff --git a/assets/gfx/misc/creep/creep96.tga b/assets/gfx/misc/creep/creep96.tga new file mode 100644 index 000000000..cd15260d7 Binary files /dev/null and b/assets/gfx/misc/creep/creep96.tga differ diff --git a/assets/gfx/misc/creep/creep97.tga b/assets/gfx/misc/creep/creep97.tga new file mode 100644 index 000000000..7a9522df4 Binary files /dev/null and b/assets/gfx/misc/creep/creep97.tga differ diff --git a/assets/gfx/misc/creep/creep98.tga b/assets/gfx/misc/creep/creep98.tga new file mode 100644 index 000000000..f7b9244b0 Binary files /dev/null and b/assets/gfx/misc/creep/creep98.tga differ diff --git a/assets/gfx/misc/creep/creep99.tga b/assets/gfx/misc/creep/creep99.tga new file mode 100644 index 000000000..ca253696b Binary files /dev/null and b/assets/gfx/misc/creep/creep99.tga differ diff --git a/assets/gfx/sprites/aliens_chatballoon.png b/assets/gfx/sprites/aliens_chatballoon.png new file mode 100644 index 000000000..fdd66f9de Binary files /dev/null and b/assets/gfx/sprites/aliens_chatballoon.png differ diff --git a/assets/gfx/sprites/humans_chatballoon.png b/assets/gfx/sprites/humans_chatballoon.png new file mode 100644 index 000000000..8d30fe8c7 Binary files /dev/null and b/assets/gfx/sprites/humans_chatballoon.png differ diff --git a/assets/models/buildables/booster/booster.md3000 b/assets/models/buildables/booster/booster.md3000 new file mode 100644 index 000000000..66d1e860c Binary files /dev/null and b/assets/models/buildables/booster/booster.md3000 differ diff --git a/assets/models/buildables/hive/hive.md3000 b/assets/models/buildables/hive/hive.md3000 new file mode 100644 index 000000000..63d0984c1 Binary files /dev/null and b/assets/models/buildables/hive/hive.md3000 differ diff --git a/assets/models/buildables/overmind/animation.cfg b/assets/models/buildables/overmind/animation.cfg new file mode 100644 index 000000000..61071a9d6 --- /dev/null +++ b/assets/models/buildables/overmind/animation.cfg @@ -0,0 +1,15 @@ +//hivemind +72 13 0 12 // CONSTRUCT1 +72 13 0 12 // CONSTRUCT2 +0 33 33 12 // IDLE1 +0 0 0 0 // IDLE2 +0 0 0 0 // IDLE3 +43 13 0 24 // ATTACK1 +0 0 0 0 // ATTACK2 +0 0 0 0 // SPAWN1 +0 0 0 0 // SPAWN2 +34 9 0 18 // PAIN1 +0 0 0 0 // PAIN2 +56 13 0 12 // DESTROY1 +0 0 0 0 // DESTROY2 +69 1 1 1 // DESTROYED diff --git a/assets/models/buildables/overmind/over_body.jpg b/assets/models/buildables/overmind/over_body.jpg new file mode 100644 index 000000000..da90a5718 Binary files /dev/null and b/assets/models/buildables/overmind/over_body.jpg differ diff --git a/assets/models/buildables/overmind/overmind.md3000 b/assets/models/buildables/overmind/overmind.md3000 new file mode 100644 index 000000000..2bbee8040 Binary files /dev/null and b/assets/models/buildables/overmind/overmind.md3000 differ diff --git a/assets/models/players/builder/nonseg.md3000 b/assets/models/players/builder/nonseg.md3000 new file mode 100644 index 000000000..c6604e19e Binary files /dev/null and b/assets/models/players/builder/nonseg.md3000 differ diff --git a/assets/models/players/level0/nonseg.md3000 b/assets/models/players/level0/nonseg.md3000 new file mode 100644 index 000000000..9f712bc24 Binary files /dev/null and b/assets/models/players/level0/nonseg.md3000 differ diff --git a/assets/models/players/level1/nonseg.md3000 b/assets/models/players/level1/nonseg.md3000 new file mode 100644 index 000000000..09d4d4b2f Binary files /dev/null and b/assets/models/players/level1/nonseg.md3000 differ diff --git a/assets/models/players/level2/nonseg.md3000 b/assets/models/players/level2/nonseg.md3000 new file mode 100644 index 000000000..2eb981bf1 Binary files /dev/null and b/assets/models/players/level2/nonseg.md3000 differ diff --git a/assets/models/players/level3/nonseg.md3000 b/assets/models/players/level3/nonseg.md3000 new file mode 100644 index 000000000..c53b0d602 Binary files /dev/null and b/assets/models/players/level3/nonseg.md3000 differ diff --git a/assets/models/players/level4/nonseg.md3000 b/assets/models/players/level4/nonseg.md3000 new file mode 100644 index 000000000..241a25f5a Binary files /dev/null and b/assets/models/players/level4/nonseg.md3000 differ diff --git a/assets/models/splash/bright_star.jpg b/assets/models/splash/bright_star.jpg new file mode 100644 index 000000000..05d203614 Binary files /dev/null and b/assets/models/splash/bright_star.jpg differ diff --git a/assets/models/splash/bright_star_2.jpg b/assets/models/splash/bright_star_2.jpg new file mode 100644 index 000000000..db7444498 Binary files /dev/null and b/assets/models/splash/bright_star_2.jpg differ diff --git a/assets/models/splash/circles.png b/assets/models/splash/circles.png new file mode 100644 index 000000000..87c849a4c Binary files /dev/null and b/assets/models/splash/circles.png differ diff --git a/assets/models/splash/loading_screen.md3 b/assets/models/splash/loading_screen.md3 new file mode 100644 index 000000000..a113873f3 Binary files /dev/null and b/assets/models/splash/loading_screen.md3 differ diff --git a/assets/models/splash/nebula.jpg b/assets/models/splash/nebula.jpg new file mode 100644 index 000000000..1ae08b94e Binary files /dev/null and b/assets/models/splash/nebula.jpg differ diff --git a/assets/models/splash/nebula_2.jpg b/assets/models/splash/nebula_2.jpg new file mode 100644 index 000000000..bbf4f829a Binary files /dev/null and b/assets/models/splash/nebula_2.jpg differ diff --git a/assets/models/splash/splash_screen.md3 b/assets/models/splash/splash_screen.md3 new file mode 100644 index 000000000..0ed7312d2 Binary files /dev/null and b/assets/models/splash/splash_screen.md3 differ diff --git a/assets/models/weapons/abuildupg/weapon.cfg b/assets/models/weapons/abuildupg/weapon.cfg index 0646359b6..d532aafa9 100644 --- a/assets/models/weapons/abuildupg/weapon.cfg +++ b/assets/models/weapons/abuildupg/weapon.cfg @@ -14,6 +14,7 @@ tertiary { missileModel models/weapons/level3upg/missile.md3 + impactParticleSystem models/weapons/builderupg/impactPS impactMark 64 creep impactSound 0 sound/misc/organic_bounce.wav } diff --git a/assets/scripts/acidtube.shader b/assets/scripts/acidtube.shader new file mode 100644 index 000000000..51f6df844 --- /dev/null +++ b/assets/scripts/acidtube.shader @@ -0,0 +1,53 @@ +models/buildables/acid_tube/acid_tube +{ + { + map models/buildables/acid_tube/acid_tube.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/acid_tube/acid_tube.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/buildables/acid_tube/acid_tube_inside +{ + { + map models/buildables/acid_tube/acid_tube_inside.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/acid_tube/acid_tube_inside.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/buildables/acid_tube/pod_strands +{ + cull disable + { + map models/buildables/eggpod/pod_strands.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/buildables/eggpod/pod_strands.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} diff --git a/assets/scripts/armory.shader b/assets/scripts/armory.shader new file mode 100644 index 000000000..83978862d --- /dev/null +++ b/assets/scripts/armory.shader @@ -0,0 +1,41 @@ +models/buildables/arm/arm_body +{ + { + map models/buildables/arm/arm_body.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/arm/arm_body.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/arm/arm_parts +{ + { + map models/buildables/arm/arm_parts.jpg + rgbGen lightingDiffuse + } + { + map $whiteimage + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/atcs.mtr b/assets/scripts/atcs.mtr new file mode 100644 index 000000000..ce12f0ecd --- /dev/null +++ b/assets/scripts/atcs.mtr @@ -0,0 +1,433 @@ +textures/atcs/skybox_s +{ + qer_editorimage textures/atcs/mars.jpg + surfaceparm noimpact + surfaceparm nolightmap + surfaceparm sky + q3map_lightimage textures/atcs/skylight.tga +// q3map_sun 0.95 0.95 1.0 150 120 25 //lilacisles +// q3map_sun 1.00 1.00 0.965 75 90 30 //siege +// q3map_sun 1.00 0.90 0.80 110 180 35 //orangecream +// q3map_sun 1.00 0.80 0.70 100 0 20 //cottoncandy +// q3map_sun 0.934 0.835 1.00 75 230 35 //desertsky +// q3map_sun 1.00 1.00 1.00 50 90 90 //comablack +// q3map_sun 4 3 3 150 135 50 //mars +// q3map_sun 1.00 0.949 0.977 100 200 45 //desert + q3map_sun 1.00 0.949 0.977 150 135 45 + q3map_skylight 250 3 + q3map_globaltexture + skyparms env/atcs/mars - - +} + +textures/atcs/burst_red_s +{ + entityMergable + cull none + { + map textures/atcs/sparkle_red.tga + blendFunc add + alphaGen vertex + } +} + +textures/atcs/burst_blue_s +{ + entityMergable + cull none + { + map textures/atcs/sparkle_blue.tga + blendFunc add + alphaGen vertex + } +} + +textures/atcs/force_field_s + { + qer_editorimage textures/atcs/force_field_gtk.tga + surfaceparm trans + surfaceparm nomarks + surfaceparm nolightmap + cull none + { + map textures/atcs/force_field.tga + tcMod Scroll .1 0 + blendFunc add + } + { + map textures/atcs/force_grid.tga + tcMod Scroll -.01 0 + blendFunc add + rgbgen wave sin .2 .2 0 .4 + } +} + +textures/atcs/bulb_red_s +{ + qer_editorimage textures/atcs/bulb_red.tga + surfaceparm trans + cull disable + qer_trans 0.5 + { + map textures/atcs/bulb_red.tga + blendfunc gl_dst_color gl_src_alpha + } + { + map textures/atcs/bulb_red.tga + blendfunc gl_dst_color gl_src_alpha + } +} + +textures/atcs/eq2_bounce +{ + qer_editorimage textures/atcs/eq2_bounce.tga + + { + map textures/atcs/eq2_bounce.tga + rgbGen identity + } + { + clampmap textures/atcs/eq2_bouncefan.tga + tcMod rotate 512 + blendFunc blend + depthWrite + rgbGen identity + + } + { + map textures/atcs/eq2_bounce.tga + blendfunc blend + rgbGen identity + } + { + map $lightmap + rgbGen identity + blendFunc GL_DST_COLOR GL_ZERO + depthFunc equal + } + +} + +textures/atcs/cubelight_32_blue_invis_s_15k +{ + surfaceparm nodraw + surfaceparm nolightmap + surfaceparm nonsolid + surfaceparm trans + surfaceparm noimpact + q3map_surfacelight 15000 + q3map_lightimage textures/atcs/cubelight_32_blue.blend.tga + qer_editorimage textures/atcs/cubelight_32_blue.blend.tga +} + +textures/atcs/cubelight_32_red_invis_s_15k +{ + surfaceparm nodraw + surfaceparm nolightmap + surfaceparm nonsolid + surfaceparm trans + surfaceparm noimpact + q3map_surfacelight 15000 + q3map_lightimage textures/atcs/cubelight_32_red.blend.tga + qer_editorimage textures/atcs/cubelight_32_red.blend.tga +} + +textures/atcs/cubelight_32_white_s_20k +{ + q3map_surfacelight 20000 + q3map_lightimage textures/atcs/cubelight_32_white.blend.tga + qer_editorimage textures/atcs/cubelight_32_white.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/cubelight_32_white.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/cubelight_32_white.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/cubelight_32_blue_s_20k +{ + q3map_surfacelight 20000 + q3map_lightimage textures/atcs/cubelight_32_blue.blend.tga + qer_editorimage textures/atcs/cubelight_32_blue.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/cubelight_32_blue.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/cubelight_32_blue.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/cubelight_32_blue_s_15k +{ + q3map_surfacelight 15000 + q3map_lightimage textures/atcs/cubelight_32_blue.blend.tga + qer_editorimage textures/atcs/cubelight_32_blue.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/cubelight_32_blue.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/cubelight_32_blue.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/cubelight_32_blue_s_10k +{ + q3map_surfacelight 10000 + q3map_lightimage textures/atcs/cubelight_32_blue.blend.tga + qer_editorimage textures/atcs/cubelight_32_blue.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/cubelight_32_blue.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/cubelight_32_blue.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/cubelight_32_red_s_20k +{ + q3map_surfacelight 20000 + q3map_lightimage textures/atcs/cubelight_32_red.blend.tga + qer_editorimage textures/atcs/cubelight_32_red.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/cubelight_32_red.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/cubelight_32_red.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/cubelight_32_red_s_15k +{ + q3map_surfacelight 15000 + q3map_lightimage textures/atcs/cubelight_32_red.blend.tga + qer_editorimage textures/atcs/cubelight_32_red.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/cubelight_32_red.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/cubelight_32_red.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/cubelight_32_red_s_10k +{ + q3map_surfacelight 10000 + q3map_lightimage textures/atcs/cubelight_32_red.blend.tga + qer_editorimage textures/atcs/cubelight_32_red.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/cubelight_32_red.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/cubelight_32_red.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/eq2lt_baselt03b_blue_s_3000 +{ + q3map_surfacelight 3000 + q3map_lightimage textures/atcs/eq2_baselt03b_blue.blend.tga + qer_editorimage textures/atcs/eq2_baselt03b_blue.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b_blue.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b_blue.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/eq2lt_baselt03b_blue_s_2000 +{ + q3map_surfacelight 2000 + q3map_lightimage textures/atcs/eq2_baselt03b_blue.blend.tga + qer_editorimage textures/atcs/eq2_baselt03b_blue.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b_blue.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b_blue.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/eq2lt_baselt03b_blue_s_1500 +{ + q3map_surfacelight 1500 + q3map_lightimage textures/atcs/eq2_baselt03b_blue.blend.tga + qer_editorimage textures/atcs/eq2_baselt03b_blue.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b_blue.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b_blue.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/eq2lt_baselt03b_s_2000 +{ + q3map_surfacelight 2000 + q3map_lightimage textures/atcs/eq2_baselt03b.blend.tga + qer_editorimage textures/atcs/eq2_baselt03b.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/eq2lt_baselt03b_s_1500 +{ + q3map_surfacelight 1500 + q3map_lightimage textures/atcs/eq2_baselt03b.blend.tga + qer_editorimage textures/atcs/eq2_baselt03b.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/eq2_baselt03b.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/eq2_baselt03_blue_s_5000 +{ + q3map_surfacelight 5000 + q3map_lightimage textures/atcs/eq2_baselt03_blue.blend.tga + qer_editorimage textures/atcs/eq2_baselt03_blue.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/eq2_baselt03_blue.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/eq2_baselt03_blue.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/eq2_baselt03_blue_s_3000 +{ + q3map_surfacelight 3000 + q3map_lightimage textures/atcs/eq2_baselt03_blue.blend.tga + qer_editorimage textures/atcs/eq2_baselt03_blue.tga + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/eq2_baselt03_blue.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/eq2_baselt03_blue.blend.tga + blendfunc GL_ONE GL_ONE + } +} + +textures/atcs/eq2lt_bmtl03light_300 +{ + q3map_surfacelight 300 + qer_editorimage textures/atcs/eq2_bmtl_03_light.tga + q3map_lightimage textures/atcs/eq2_bmtl_03_light.blend.tga + + { + map $lightmap + rgbGen identity + } + { + map textures/atcs/eq2_bmtl_03_light.tga + blendFunc GL_DST_COLOR GL_ZERO + rgbGen identity + } + { + map textures/atcs/eq2_bmtl_03_light.blend.tga + blendfunc GL_ONE GL_ONE + } +} diff --git a/assets/scripts/barricade.shader b/assets/scripts/barricade.shader new file mode 100644 index 000000000..2aa9d9e35 --- /dev/null +++ b/assets/scripts/barricade.shader @@ -0,0 +1,45 @@ +models/buildables/barricade/pod_strands +{ + cull disable + { + map models/buildables/barricade/pod_strands.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/buildables/barricade/pod_strands.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} +models/buildables/barricade/alien_spike +{ + { + map models/buildables/barricade/alien_spike.tga + rgbGen lightingDiffuse + } + { + map models/buildables/barricade/alien_spike.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/blaster.shader b/assets/scripts/blaster.shader new file mode 100644 index 000000000..715ec5659 --- /dev/null +++ b/assets/scripts/blaster.shader @@ -0,0 +1,21 @@ +models/weapons/blaster/blaster +{ + cull disable + { + map models/weapons/blaster/blaster.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/blaster/blaster.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/booster.shader b/assets/scripts/booster.shader new file mode 100644 index 000000000..0d8dee62f --- /dev/null +++ b/assets/scripts/booster.shader @@ -0,0 +1,65 @@ +models/buildables/booster/booster_head +{ + { + map models/buildables/booster/booster_head.tga + rgbGen lightingDiffuse + } + { + map models/buildables/booster/booster_head.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/booster/ref_map.tga + blendfunc filter + rgbGen identity + tcMod rotate 5 + tcGen environment + } +} + +models/buildables/booster/booster_sac +{ + { + map models/buildables/booster/booster_sac.tga + rgbGen lightingDiffuse + } + { + map models/buildables/booster/poison.tga + blendfunc add + rgbGen wave sin 0 1 0 0.1 + tcMod scroll -0.05 -0.05 + } + { + map models/buildables/booster/booster_sac.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} +models/buildables/booster/pod_strands +{ + cull disable + { + map models/buildables/barricade/pod_strands.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/buildables/barricade/pod_strands.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} diff --git a/assets/scripts/buildables.particle b/assets/scripts/buildables.particle new file mode 100644 index 000000000..cfc37e366 --- /dev/null +++ b/assets/scripts/buildables.particle @@ -0,0 +1,445 @@ +humanBuildableDamagedPS +{ + ejector + { + particle + { + shader sync gfx/sprites/smoke + + displacement ~8 ~8 3~5 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 50 + velocity 0 0 1 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 50 + acceleration 0 0 1 0 + + radius 0 6.0 30.0 + alpha 0 0.125 0.0 + rotation 0 ~360 - + bounce 0.5 + + lifeTime 1500~50% + } + + count infinite + delay 0 + period 10 - ~0% + } + + ejector + { + particle + { + shader sync gfx/sprites/spark + + displacement 0 0 11 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 200 + velocity 0 0 1 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 4.0 2.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.6 + + lifeTime 1500~50% + } + + count infinite + delay 0 + period 700 - ~0% + } +} + +humanBuildableDestroyedTrailPS +{ + ejector + { + particle + { + shader sync flame1 flame2 flame3 flame4 flame5 flame6 flame7 flame8 flame9 flame10 flame11 flame12 flame13 flame14 flame15 flame16 flame17 flame18 flame19 flame20 flame21 flame22 flame23 flame24 flame25 + + displacement 0 0 40 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 30 + velocity 0 0 -1 ~60 + + radius 0 20.0 15.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.2 + + lifeTime 1000 + } + + count 10 + delay 0 + period 80 - ~0% + } +} + +humanBuildableDestroyedPS +{ + ejector + { + particle + { + shader sync gfx/sprites/spark + + displacement 0 0 8 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 350~75% + velocity 0 0 1 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 4.0 2.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.4~100% + + lifeTime 5000~100% + } + + count 80 + delay 0 + period 0 - ~0% + } + + ejector + { + particle + { + shader sync flame1 flame2 flame3 flame4 flame5 flame6 flame7 flame8 flame9 flame10 flame11 flame12 flame13 flame14 flame15 flame16 flame17 flame18 flame19 flame20 flame21 flame22 flame23 flame24 flame25 + + displacement 0 0 40 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 1 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 20.0 30.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.2 + + lifeTime 1000 + + childSystem humanBuildableDestroyedTrailPS + } + + count 10 + delay 0 + period 10 - ~0% + } + + ejector + { + particle + { + model models/fx/metal_gibs/m_gib1.md3 models/fx/metal_gibs/m_gib2.md3 models/fx/metal_gibs/m_gib3.md3 models/fx/metal_gibs/m_gib4.md3 models/fx/metal_gibs/m_gib5.md3 models/fx/metal_gibs/m_gib6.md3 models/fx/metal_gibs/m_gib7.md3 models/fx/metal_gibs/m_gib8.md3 + + displacement 0 0 40 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 1 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 1.0 - + bounce 0.2 + bounceMark 1~1 16 gfx/marks/burn_mrk + bounceSound ~1 sound/buildables/human/fragmentbounce.wav + + lifeTime 7000~1000 + } + + count 8 + delay 0 + period 10 - ~0% + } + + ejector + { + particle + { + dynamicLight 0 300 0 { 1.0 0.75 0.0 } + + lifeTime 600~100 + } + + count 1 + delay 0 + period 0 - ~0% + } +} + +alienBuildableDamagedPS +{ + ejector + { + particle + { + shader sync gfx/sprites/green_acid + + velocityType normal + velocityDir linear + velocityMagnitude 100 + velocity 0 0 0 ~40 + + accelerationType static + accelerationDir linear + accelerationMagnitude 200 + acceleration 0 0 -1 0 + + radius 0 4.0 20.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.1 + bounceMark 3 16 gfx/sprites/green_acid_mark + + lifeTime 1000~50% + } + + count infinite + delay 0 + period 750 - ~0% + } +} + +alienBuildableDestroyedPS +{ + ejector + { + particle + { + shader sync gfx/sprites/green_acid + + displacement 0 0 0 ~70 + normalDisplacement 80 + + velocityType static + velocityDir linear + velocityMagnitude 30 + velocity 0 0 -1 ~0 + + radius 0 20.0 15.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.0 + bounceMark 3 16 gfx/sprites/green_acid_mark + + lifeTime 1000~50% + } + + count 16 + delay 0 + period 0 - ~0% + } + + ejector + { + particle + { + shader sync gfx/sprites/green_acid + + displacement 0 0 40 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 1 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 20.0 30.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.2 + bounceMark 3 16 gfx/sprites/green_acid_mark + + lifeTime 1000 + } + + count 10 + delay 0 + period 10 - ~0% + } + + ejector + { + particle + { + model models/fx/alien_gibs/a_gib1.md3 models/fx/alien_gibs/a_gib2.md3 models/fx/alien_gibs/a_gib3.md3 models/fx/alien_gibs/a_gib4.md3 + + displacement 0 0 40 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 1 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 1.0 - + bounce 0.2 + bounceMark 1~1 16 creep + bounceSound ~1 sound/misc/organic_bounce.wav + + lifeTime 5000~1000 + } + + count 8 + delay 0 + period 10 - ~0% + } + ejector + { + particle + { + dynamicLight 0 300 0 { 0.5 1.0 0.156 } + + lifeTime 600~100 + } + + count 1 + delay 0 + period 0 - ~0% + } +} + +alienAcideTubeAcidTrailPS +{ + ejector + { + particle + { + shader sync gfx/sprites/green_acid + + displacement -4 -4 -4 ~8 + + velocityType static + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 0 ~1 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 ~30 + + radius 0 10 5 + alpha 500~50% 0.4 0 + rotation 0 360~200% 360~200% + bounce 0.2 + + lifeTime 1000~100% + } + + count 1 + delay 350~100% + } +} + +alienAcidTubePS +{ + ejector + { + particle + { + shader sync gfx/sprites/green_acid + + displacement 0 0 -5 ~2 + normalDisplacement 20 + + velocityType normal + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 1 ~10 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 ~30 + + radius 0 8.0 20.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.2 + bounceMark 1 16 gfx/sprites/green_acid_mark + // should add child particle system to get better "acid" effect with sound + // Marks limit is reached easily with only one acid tube + + lifeTime 1000~100% + + childSystem alienAcideTubeAcidTrailPS + } + + count 35 + delay 120 + period 17 17 ~0% + } + ejector + { + particle + { + dynamicLight 0 400 0 { 0.16 0.32 0.05 } + + displacement 0 0 -5 0 + normalDisplacement 20 + + velocityType normal + velocityDir linear + velocityMagnitude 113 + velocity 0 0 1 5 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 15 + + bounce 0.2 + + lifeTime 4500~20% + } + + count 1 + delay 200 + } +} diff --git a/assets/scripts/builder.shader b/assets/scripts/builder.shader new file mode 100644 index 000000000..db5d62995 --- /dev/null +++ b/assets/scripts/builder.shader @@ -0,0 +1,13 @@ +models/players/builder/builder +{ + { + map models/players/builder/builder.jpg + rgbGen lightingDiffuse + } + { + map models/players/builder/builder.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/chaingun.shader b/assets/scripts/chaingun.shader new file mode 100644 index 000000000..1523dc118 --- /dev/null +++ b/assets/scripts/chaingun.shader @@ -0,0 +1,43 @@ +models/weapons/chaingun/chaingun +{ + cull disable + { + map models/weapons/chaingun/chaingun.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/chaingun/chaingun.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/weapons/chaingun/barrels +{ + cull disable + { + map models/weapons/chaingun/barrels.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/chaingun/barrels.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/conkit.shader b/assets/scripts/conkit.shader new file mode 100644 index 000000000..b4ff15e00 --- /dev/null +++ b/assets/scripts/conkit.shader @@ -0,0 +1,93 @@ +models/weapons/ckit/ckit +{ + cull disable + { + map models/weapons/ckit/ckit.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/ckit/ckit.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/weapons/ckit/rep_cyl +{ + cull disable + { + map models/weapons/ckit/rep_cyl.jpg + blendfunc add + rgbGen lightingDiffuse + tcMod scroll 0.2 0 + } + { + map models/weapons/ckit/lines2.jpg + blendfunc add + rgbGen identity + tcMod scroll 0 -0.2 + } +} + +models/weapons/ckit/screen +{ + noPicMip + { + map models/weapons/ckit/screen.jpg + } + { + map models/weapons/ckit/scroll.jpg + blendfunc add + tcMod scroll 10 -0.4 + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + } +} + +models/weapons/ackit/rep_cyl +{ + cull disable + { + map models/weapons/ackit/rep_cyl.jpg + blendfunc add + rgbGen lightingDiffuse + tcMod scroll 0.2 0 + } + { + map models/weapons/ackit/lines2.jpg + blendfunc add + rgbGen identity + tcMod scroll 0 -0.2 + } +} + +models/weapons/ackit/advscreen +{ + noPicMip + { + map models/weapons/ackit/advscreen.jpg + } + { + map models/weapons/ackit/scroll.jpg + blendfunc add + tcMod scroll 10 -0.4 + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + } +} diff --git a/assets/scripts/core.shader b/assets/scripts/core.shader index a640d9b33..d5be848df 100644 --- a/assets/scripts/core.shader +++ b/assets/scripts/core.shader @@ -1,209 +1,200 @@ -// 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 -} - -white -{ - { - map $whiteimage - blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA - rgbgen vertex - } -} - -outline -{ - cull none - nopicmip - nomipmaps - { - map gfx/2d/outline.tga - blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA - rgbgen vertex - } -} - -console -{ - nopicmip - nomipmaps - { - map ui/assets/console1.tga - blendFunc GL_ONE GL_ZERO - tcMod scroll .02 0 - tcmod scale 4 1 - } - { - map ui/assets/console2.jpg - blendFunc add - tcMod turb 0 .1 0 .1 - tcMod scale 4 1 - tcmod scroll 0.2 .1 - } -} - -gfx/misc/detail -{ - nopicmip - { - map gfx/misc/detail.jpg - blendFunc GL_DST_COLOR GL_SRC_COLOR - rgbgen identity - } -} - -// The console font -gfx/2d/bigchars -{ - nopicmip - nomipmaps - { - map gfx/2d/bigchars.tga - blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA - rgbgen vertex - } -} - -gfx/2d/cursor -{ - nopicmip - nomipmaps - { - map gfx/2d/cursor.tga - } -} - -// projectionShadow is used for cheap squashed model shadows -projectionShadow -{ - polygonOffset - deformVertexes projectionShadow - { - map $whiteimage - blendFunc GL_ONE GL_ZERO - rgbGen wave square 0 0 0 0 - } -} - -// blinked on top of lagometer when connection is interrupted -gfx/2d/net -{ - nopicmip - { - map gfx/2d/net.jpg - } -} - -//=============================================================== - -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 - } -} -gfx/2d/numbers/infinity_32b -{ - nopicmip - { - map gfx/2d/numbers/infinity_32b.tga - blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA - rgbgen vertex - } -} +// 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 +} + +white +{ + { + map $whiteimage + blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbgen vertex + } +} + +outline +{ + cull none + nopicmip + nomipmaps + { + map gfx/2d/outline.tga + blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbgen vertex + } +} + +console +{ + nopicmip + nomipmaps + { + map ui/assets/console1.tga + blendFunc GL_ONE GL_ZERO + tcMod scroll .02 0 + tcmod scale 4 1 + } + { + map ui/assets/console2.jpg + blendFunc add + tcMod turb 0 .1 0 .1 + tcMod scale 4 1 + tcmod scroll 0.2 .1 + } +} + +gfx/misc/detail +{ + nopicmip + { + map gfx/misc/detail.jpg + blendFunc GL_DST_COLOR GL_SRC_COLOR + rgbgen identity + } +} + +// The console font +gfx/2d/bigchars +{ + nopicmip + nomipmaps + { + map gfx/2d/bigchars.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbgen vertex + } +} + +// projectionShadow is used for cheap squashed model shadows +projectionShadow +{ + polygonOffset + deformVertexes projectionShadow + { + map $whiteimage + blendFunc GL_ONE GL_ZERO + rgbGen wave square 0 0 0 0 + } +} + +// blinked on top of lagometer when connection is interrupted +gfx/2d/net +{ + nopicmip + { + map gfx/2d/net.jpg + } +} + +//=============================================================== + +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 + } +} +gfx/2d/numbers/infinity_32b +{ + nopicmip + { + map gfx/2d/numbers/infinity_32b.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbgen vertex + } +} diff --git a/assets/scripts/creep.shader b/assets/scripts/creep.shader new file mode 100644 index 000000000..07339d31e --- /dev/null +++ b/assets/scripts/creep.shader @@ -0,0 +1,10469 @@ +creep +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep549.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep549.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep0 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep0.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep0.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep1 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep1.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep1.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep2 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep2.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep2.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep3 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep3.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep3.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep4 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep4.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep4.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep5 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep5.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep5.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep6 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep6.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep6.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep7 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep7.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep7.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep8 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep8.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep8.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep9 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep9.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep9.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep10 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep10.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep10.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep11 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep11.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep11.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep12 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep12.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep12.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep13 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep13.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep13.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep14 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep14.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep14.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep15 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep15.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep15.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep16 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep16.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep16.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep17 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep17.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep17.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep18 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep18.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep18.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep19 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep19.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep19.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep20 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep20.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep20.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep21 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep21.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep21.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep22 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep22.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep22.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep23 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep23.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep23.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep24 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep24.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep24.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep25 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep25.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep25.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep26 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep26.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep26.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep27 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep27.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep27.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep28 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep28.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep28.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep29 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep29.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep29.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep30 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep30.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep30.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep31 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep31.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep31.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep32 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep32.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep32.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep33 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep33.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep33.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep34 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep34.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep34.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep35 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep35.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep35.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep36 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep36.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep36.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep37 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep37.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep37.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep38 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep38.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep38.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep39 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep39.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep39.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep40 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep40.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep40.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep41 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep41.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep41.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep42 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep42.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep42.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep43 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep43.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep43.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep44 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep44.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep44.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep45 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep45.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep45.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep46 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep46.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep46.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep47 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep47.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep47.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep48 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep48.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep48.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep49 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep49.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep49.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep50 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep50.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep50.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep51 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep51.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep51.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep52 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep52.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep52.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep53 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep53.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep53.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep54 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep54.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep54.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep55 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep55.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep55.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep56 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep56.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep56.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep57 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep57.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep57.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep58 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep58.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep58.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep59 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep59.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep59.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep60 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep60.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep60.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep61 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep61.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep61.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep62 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep62.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep62.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep63 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep63.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep63.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep64 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep64.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep64.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep65 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep65.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep65.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep66 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep66.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep66.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep67 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep67.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep67.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep68 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep68.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep68.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep69 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep69.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep69.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep70 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep70.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep70.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep71 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep71.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep71.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep72 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep72.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep72.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep73 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep73.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep73.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep74 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep74.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep74.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep75 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep75.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep75.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep76 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep76.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep76.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep77 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep77.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep77.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep78 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep78.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep78.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep79 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep79.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep79.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep80 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep80.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep80.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep81 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep81.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep81.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep82 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep82.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep82.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep83 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep83.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep83.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep84 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep84.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep84.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep85 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep85.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep85.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep86 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep86.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep86.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep87 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep87.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep87.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep88 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep88.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep88.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep89 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep89.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep89.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep90 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep90.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep90.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep91 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep91.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep91.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep92 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep92.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep92.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep93 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep93.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep93.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep94 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep94.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep94.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep95 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep95.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep95.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep96 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep96.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep96.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep97 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep97.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep97.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep98 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep98.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep98.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep99 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep99.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep99.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep100 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep100.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep100.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep101 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep101.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep101.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep102 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep102.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep102.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep103 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep103.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep103.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep104 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep104.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep104.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep105 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep105.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep105.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep106 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep106.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep106.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep107 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep107.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep107.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep108 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep108.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep108.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep109 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep109.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep109.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep110 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep110.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep110.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep111 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep111.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep111.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep112 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep112.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep112.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep113 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep113.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep113.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep114 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep114.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep114.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep115 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep115.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep115.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep116 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep116.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep116.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep117 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep117.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep117.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep118 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep118.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep118.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep119 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep119.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep119.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep120 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep120.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep120.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep121 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep121.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep121.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep122 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep122.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep122.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep123 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep123.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep123.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep124 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep124.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep124.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep125 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep125.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep125.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep126 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep126.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep126.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep127 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep127.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep127.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep128 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep128.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep128.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep129 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep129.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep129.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep130 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep130.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep130.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep131 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep131.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep131.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep132 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep132.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep132.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep133 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep133.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep133.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep134 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep134.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep134.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep135 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep135.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep135.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep136 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep136.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep136.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep137 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep137.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep137.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep138 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep138.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep138.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep139 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep139.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep139.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep140 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep140.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep140.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep141 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep141.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep141.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep142 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep142.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep142.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep143 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep143.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep143.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep144 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep144.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep144.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep145 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep145.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep145.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep146 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep146.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep146.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep147 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep147.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep147.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep148 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep148.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep148.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep149 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep149.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep149.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep150 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep150.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep150.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep151 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep151.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep151.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep152 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep152.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep152.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep153 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep153.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep153.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep154 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep154.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep154.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep155 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep155.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep155.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep156 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep156.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep156.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep157 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep157.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep157.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep158 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep158.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep158.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep159 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep159.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep159.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep160 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep160.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep160.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep161 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep161.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep161.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep162 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep162.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep162.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep163 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep163.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep163.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep164 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep164.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep164.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep165 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep165.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep165.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep166 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep166.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep166.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep167 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep167.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep167.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep168 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep168.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep168.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep169 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep169.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep169.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep170 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep170.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep170.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep171 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep171.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep171.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep172 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep172.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep172.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep173 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep173.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep173.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep174 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep174.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep174.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep175 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep175.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep175.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep176 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep176.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep176.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep177 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep177.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep177.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep178 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep178.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep178.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep179 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep179.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep179.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep180 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep180.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep180.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep181 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep181.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep181.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep182 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep182.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep182.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep183 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep183.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep183.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep184 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep184.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep184.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep185 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep185.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep185.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep186 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep186.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep186.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep187 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep187.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep187.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep188 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep188.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep188.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep189 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep189.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep189.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep190 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep190.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep190.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep191 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep191.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep191.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep192 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep192.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep192.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep193 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep193.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep193.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep194 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep194.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep194.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep195 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep195.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep195.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep196 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep196.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep196.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep197 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep197.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep197.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep198 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep198.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep198.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep199 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep199.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep199.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep200 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep200.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep200.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep201 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep201.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep201.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep202 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep202.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep202.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep203 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep203.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep203.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep204 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep204.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep204.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep205 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep205.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep205.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep206 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep206.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep206.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep207 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep207.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep207.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep208 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep208.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep208.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep209 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep209.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep209.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep210 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep210.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep210.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep211 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep211.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep211.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep212 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep212.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep212.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep213 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep213.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep213.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep214 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep214.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep214.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep215 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep215.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep215.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep216 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep216.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep216.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep217 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep217.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep217.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep218 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep218.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep218.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep219 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep219.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep219.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep220 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep220.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep220.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep221 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep221.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep221.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep222 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep222.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep222.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep223 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep223.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep223.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep224 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep224.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep224.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep225 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep225.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep225.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep226 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep226.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep226.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep227 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep227.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep227.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep228 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep228.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep228.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep229 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep229.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep229.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep230 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep230.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep230.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep231 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep231.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep231.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep232 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep232.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep232.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep233 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep233.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep233.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep234 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep234.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep234.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep235 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep235.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep235.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep236 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep236.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep236.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep237 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep237.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep237.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep238 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep238.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep238.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep239 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep239.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep239.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep240 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep240.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep240.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep241 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep241.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep241.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep242 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep242.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep242.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep243 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep243.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep243.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep244 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep244.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep244.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep245 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep245.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep245.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep246 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep246.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep246.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep247 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep247.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep247.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep248 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep248.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep248.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep249 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep249.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep249.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep250 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep250.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep250.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep251 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep251.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep251.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep252 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep252.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep252.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep253 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep253.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep253.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep254 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep254.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep254.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep255 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep255.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep255.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep256 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep256.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep256.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep257 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep257.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep257.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep258 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep258.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep258.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep259 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep259.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep259.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep260 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep260.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep260.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep261 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep261.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep261.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep262 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep262.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep262.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep263 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep263.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep263.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep264 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep264.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep264.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep265 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep265.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep265.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep266 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep266.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep266.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep267 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep267.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep267.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep268 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep268.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep268.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep269 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep269.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep269.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep270 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep270.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep270.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep271 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep271.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep271.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep272 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep272.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep272.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep273 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep273.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep273.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep274 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep274.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep274.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep275 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep275.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep275.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep276 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep276.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep276.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep277 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep277.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep277.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep278 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep278.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep278.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep279 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep279.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep279.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep280 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep280.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep280.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep281 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep281.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep281.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep282 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep282.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep282.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep283 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep283.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep283.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep284 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep284.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep284.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep285 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep285.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep285.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep286 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep286.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep286.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep287 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep287.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep287.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep288 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep288.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep288.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep289 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep289.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep289.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep290 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep290.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep290.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep291 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep291.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep291.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep292 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep292.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep292.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep293 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep293.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep293.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep294 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep294.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep294.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep295 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep295.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep295.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep296 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep296.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep296.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep297 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep297.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep297.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep298 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep298.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep298.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep299 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep299.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep299.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep300 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep300.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep300.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep301 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep301.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep301.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep302 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep302.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep302.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep303 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep303.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep303.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep304 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep304.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep304.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep305 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep305.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep305.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep306 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep306.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep306.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep307 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep307.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep307.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep308 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep308.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep308.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep309 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep309.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep309.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep310 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep310.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep310.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep311 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep311.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep311.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep312 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep312.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep312.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep313 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep313.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep313.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep314 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep314.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep314.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep315 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep315.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep315.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep316 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep316.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep316.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep317 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep317.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep317.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep318 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep318.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep318.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep319 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep319.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep319.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep320 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep320.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep320.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep321 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep321.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep321.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep322 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep322.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep322.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep323 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep323.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep323.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep324 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep324.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep324.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep325 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep325.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep325.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep326 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep326.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep326.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep327 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep327.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep327.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep328 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep328.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep328.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep329 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep329.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep329.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep330 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep330.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep330.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep331 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep331.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep331.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep332 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep332.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep332.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep333 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep333.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep333.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep334 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep334.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep334.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep335 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep335.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep335.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep336 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep336.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep336.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep337 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep337.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep337.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep338 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep338.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep338.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep339 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep339.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep339.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep340 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep340.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep340.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep341 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep341.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep341.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep342 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep342.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep342.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep343 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep343.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep343.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep344 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep344.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep344.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep345 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep345.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep345.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep346 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep346.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep346.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep347 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep347.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep347.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep348 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep348.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep348.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep349 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep349.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep349.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep350 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep350.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep350.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep351 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep351.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep351.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep352 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep352.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep352.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep353 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep353.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep353.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep354 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep354.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep354.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep355 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep355.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep355.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep356 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep356.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep356.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep357 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep357.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep357.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep358 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep358.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep358.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep359 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep359.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep359.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep360 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep360.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep360.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep361 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep361.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep361.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep362 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep362.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep362.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep363 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep363.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep363.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep364 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep364.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep364.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep365 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep365.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep365.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep366 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep366.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep366.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep367 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep367.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep367.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep368 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep368.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep368.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep369 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep369.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep369.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep370 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep370.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep370.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep371 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep371.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep371.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep372 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep372.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep372.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep373 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep373.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep373.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep374 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep374.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep374.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep375 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep375.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep375.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep376 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep376.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep376.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep377 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep377.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep377.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep378 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep378.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep378.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep379 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep379.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep379.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep380 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep380.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep380.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep381 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep381.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep381.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep382 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep382.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep382.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep383 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep383.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep383.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep384 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep384.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep384.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep385 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep385.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep385.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep386 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep386.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep386.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep387 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep387.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep387.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep388 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep388.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep388.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep389 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep389.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep389.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep390 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep390.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep390.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep391 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep391.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep391.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep392 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep392.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep392.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep393 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep393.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep393.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep394 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep394.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep394.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep395 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep395.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep395.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep396 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep396.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep396.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep397 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep397.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep397.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep398 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep398.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep398.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep399 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep399.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep399.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep400 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep400.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep400.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep401 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep401.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep401.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep402 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep402.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep402.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep403 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep403.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep403.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep404 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep404.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep404.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep405 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep405.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep405.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep406 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep406.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep406.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep407 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep407.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep407.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep408 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep408.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep408.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep409 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep409.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep409.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep410 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep410.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep410.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep411 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep411.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep411.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep412 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep412.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep412.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep413 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep413.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep413.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep414 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep414.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep414.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep415 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep415.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep415.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep416 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep416.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep416.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep417 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep417.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep417.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep418 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep418.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep418.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep419 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep419.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep419.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep420 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep420.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep420.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep421 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep421.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep421.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep422 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep422.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep422.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep423 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep423.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep423.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep424 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep424.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep424.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep425 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep425.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep425.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep426 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep426.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep426.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep427 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep427.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep427.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep428 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep428.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep428.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep429 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep429.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep429.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep430 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep430.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep430.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep431 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep431.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep431.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep432 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep432.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep432.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep433 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep433.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep433.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep434 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep434.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep434.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep435 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep435.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep435.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep436 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep436.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep436.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep437 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep437.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep437.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep438 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep438.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep438.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep439 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep439.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep439.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep440 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep440.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep440.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep441 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep441.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep441.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep442 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep442.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep442.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep443 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep443.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep443.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep444 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep444.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep444.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep445 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep445.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep445.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep446 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep446.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep446.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep447 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep447.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep447.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep448 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep448.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep448.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep449 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep449.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep449.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep450 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep450.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep450.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep451 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep451.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep451.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep452 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep452.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep452.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep453 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep453.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep453.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep454 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep454.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep454.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep455 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep455.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep455.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep456 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep456.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep456.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep457 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep457.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep457.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep458 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep458.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep458.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep459 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep459.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep459.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep460 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep460.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep460.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep461 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep461.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep461.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep462 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep462.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep462.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep463 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep463.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep463.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep464 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep464.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep464.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep465 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep465.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep465.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep466 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep466.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep466.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep467 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep467.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep467.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep468 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep468.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep468.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep469 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep469.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep469.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep470 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep470.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep470.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep471 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep471.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep471.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep472 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep472.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep472.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep473 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep473.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep473.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep474 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep474.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep474.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep475 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep475.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep475.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep476 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep476.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep476.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep477 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep477.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep477.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep478 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep478.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep478.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep479 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep479.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep479.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep480 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep480.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep480.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep481 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep481.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep481.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep482 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep482.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep482.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep483 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep483.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep483.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep484 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep484.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep484.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep485 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep485.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep485.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep486 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep486.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep486.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep487 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep487.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep487.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep488 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep488.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep488.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep489 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep489.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep489.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep490 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep490.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep490.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep491 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep491.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep491.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep492 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep492.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep492.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep493 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep493.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep493.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep494 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep494.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep494.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep495 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep495.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep495.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep496 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep496.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep496.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep497 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep497.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep497.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep498 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep498.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep498.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep499 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep499.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep499.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep500 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep500.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep500.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep501 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep501.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep501.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep502 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep502.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep502.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep503 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep503.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep503.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep504 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep504.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep504.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep505 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep505.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep505.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep506 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep506.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep506.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep507 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep507.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep507.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep508 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep508.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep508.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep509 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep509.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep509.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep510 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep510.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep510.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep511 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep511.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep511.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep512 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep512.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep512.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep513 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep513.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep513.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep514 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep514.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep514.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep515 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep515.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep515.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep516 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep516.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep516.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep517 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep517.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep517.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep518 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep518.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep518.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep519 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep519.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep519.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep520 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep520.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep520.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep521 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep521.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep521.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep522 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep522.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep522.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep523 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep523.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep523.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep524 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep524.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep524.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep525 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep525.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep525.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep526 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep526.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep526.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep527 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep527.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep527.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep528 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep528.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep528.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep529 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep529.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep529.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep530 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep530.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep530.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep531 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep531.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep531.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep532 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep532.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep532.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep533 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep533.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep533.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep534 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep534.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep534.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep535 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep535.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep535.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep536 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep536.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep536.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep537 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep537.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep537.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep538 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep538.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep538.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep539 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep539.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep539.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep540 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep540.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep540.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep541 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep541.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep541.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep542 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep542.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep542.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep543 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep543.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep543.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep544 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep544.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep544.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep545 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep545.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep545.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep546 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep546.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep546.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep547 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep547.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep547.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep548 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep548.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep548.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + +creep549 +{ + nopicmip + polygonOffset + { + map gfx/misc/creep/creep549.tga + blendfunc blend + rgbGen lightingDiffuse + alphaGen vertex + } + { + map gfx/misc/creep/creep549.tga + blendfunc blend + rgbGen identityLighting + detail + alphaGen lightingSpecular + } +} + diff --git a/assets/scripts/dcc.shader b/assets/scripts/dcc.shader new file mode 100644 index 000000000..1ce58060e --- /dev/null +++ b/assets/scripts/dcc.shader @@ -0,0 +1,123 @@ +models/buildables/dcc/comp_pipes +{ + { + map models/buildables/dcc/comp_pipes.tga + tcGen environment + rgbGen lightingDiffuse + } + { + map $whiteimage + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/dcc/comp_front +{ + { + map models/buildables/dcc/comp_front.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/dcc/comp_front.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/dcc/comp_key +{ + { + map models/buildables/dcc/comp_key.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/dcc/comp_key.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/dcc/comp_parts +{ + { + map models/buildables/dcc/comp_parts.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/dcc/comp_parts.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/dcc/comp_top +{ + { + map models/buildables/dcc/comp_top.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/dcc/comp_top.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/dcc/comp_display +{ + { + map models/buildables/dcc/comp_grad.tga + tcMod scroll 0 1 + } + { + map models/buildables/dcc/comp_display.tga + blendfunc gl_one gl_src_alpha + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + } +} diff --git a/assets/scripts/eggpod.shader b/assets/scripts/eggpod.shader new file mode 100644 index 000000000..9bd87828e --- /dev/null +++ b/assets/scripts/eggpod.shader @@ -0,0 +1,88 @@ +models/buildables/eggpod/pod_body +{ + cull disable + { + map models/buildables/eggpod/pod_body.tga + rgbGen lightingDiffuse + } + { + map models/buildables/eggpod/pod_body.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/eggpod/pod_tip +{ + cull disable + { + map models/buildables/eggpod/pod_tip.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/buildables/eggpod/pod_tip.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} + +models/buildables/eggpod/pod_tendrils +{ + cull disable + { + map models/buildables/eggpod/pod_tendrils.tga + rgbGen lightingDiffuse + } + { + map models/buildables/eggpod/pod_tendrils.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/buildables/eggpod/pod_strands +{ + cull disable + { + map models/buildables/eggpod/pod_strands.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/buildables/eggpod/pod_strands.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} diff --git a/assets/scripts/flamer.shader b/assets/scripts/flamer.shader new file mode 100644 index 000000000..aa186edf1 --- /dev/null +++ b/assets/scripts/flamer.shader @@ -0,0 +1,50 @@ +models/weapons/flamer/pilot +{ + sort additive + cull disable + { + map models/weapons/flamer/pilot.jpg + blendfunc GL_ONE GL_ONE + tcMod scroll 9.0 0 + } +} + +models/weapons/flamer/gas +{ + sort additive + cull disable + { + map models/weapons/flamer/gas.jpg + blendfunc GL_ONE GL_ONE + tcMod scroll 0.04 0.02 + } +} + +models/weapons/flamer/flamer +{ + sort additive +// cull disable + surfaceparm trans + { + map models/weapons/flamer/flamer.tga + depthWrite + alphaFunc GE128 + rgbGen lightingDiffuse + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + } + { + map models/weapons/flamer/flamer.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} diff --git a/assets/scripts/generic.shader b/assets/scripts/generic.shader new file mode 100644 index 000000000..654987662 --- /dev/null +++ b/assets/scripts/generic.shader @@ -0,0 +1,44 @@ +models/generic/sphere +{ + cull disable + { + map $whiteimage + rgbGen const ( 0.5 0.5 0.5 ) + alphaGen const 0.3 + blendFunc blend + } +} + +models/generic/sphericalCone64 +{ + cull disable + { + map $whiteimage + rgbGen const ( 0.5 0.5 0.5 ) + alphaGen const 0.3 + blendFunc blend + } +} + +models/generic/sphericalCone240 +{ + cull disable + { + map $whiteimage + rgbGen const ( 0.5 0.5 0.5 ) + alphaGen const 0.3 + blendFunc blend + } +} + +gfx/plainColor +{ + cull disable + { + map $whiteimage + rgbGen entity + alphaGen entity + blendFunc GL_SRC_ALPHA GL_ONE + } +} + diff --git a/assets/scripts/grenade.shader b/assets/scripts/grenade.shader new file mode 100644 index 000000000..39e50a41c --- /dev/null +++ b/assets/scripts/grenade.shader @@ -0,0 +1,39 @@ +models/weapons/grenade/grenade +{ + cull disable + { + map models/weapons/grenade/grenade.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/grenade/grenade.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/weapons/grenade/grenade_s +{ + { + map models/weapons/grenade/energy.jpg + rgbGen wave sawtooth 0.3 1 0 0.5 + tcMod scale 2 1 + tcMod scroll 0 1 + } +} + +gfx/grenade/flare_01 +{ + { + map gfx/grenade/flare_01.tga + blendfunc add + } +} diff --git a/assets/scripts/hive.shader b/assets/scripts/hive.shader new file mode 100644 index 000000000..e6f95478a --- /dev/null +++ b/assets/scripts/hive.shader @@ -0,0 +1,39 @@ +models/buildables/hive/hive +{ + { + map models/buildables/hive/hive.tga + rgbGen lightingDiffuse + } + { + map models/buildables/hive/hive.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/buildables/hive/hive_strands_s +{ + cull disable + { + map models/buildables/hive/hive_strands.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/buildables/hive/hive_strands.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} diff --git a/assets/scripts/hovel.shader b/assets/scripts/hovel.shader new file mode 100644 index 000000000..53831473b --- /dev/null +++ b/assets/scripts/hovel.shader @@ -0,0 +1,53 @@ +models/buildables/hovel/hovel +{ + { + map models/buildables/hovel/hovel.tga + rgbGen lightingDiffuse + } + { + map models/buildables/hovel/hovel.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/buildables/hovel/hovel_front +{ + { + map models/buildables/hovel/hovel_front.tga + rgbGen lightingDiffuse + } + { + map models/buildables/hovel/hovel_front.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/buildables/hovel/pod_strands +{ + cull disable + { + map models/buildables/barricade/pod_strands.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/buildables/barricade/pod_strands.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} diff --git a/assets/scripts/human.shader b/assets/scripts/human.shader new file mode 100644 index 000000000..037fd1fb0 --- /dev/null +++ b/assets/scripts/human.shader @@ -0,0 +1,198 @@ +models/players/human_base/h_base +{ + cull disable + { + map models/players/human_base/h_base.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/players/human_base/h_base.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } +} + +models/players/human_base/h_helmet +{ + cull disable + { + map models/players/human_base/h_helmet.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/players/human_base/h_helmet.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { // TODO: Should separate metalics parts + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} +models/players/human_base/battpack +{ + cull disable + { + map models/players/human_base/battpack.jpg + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + models/players/human_base/battpack.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} + +models/players/human_base/base +{ + cull disable + { + map models/players/human_base/base.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/players/human_base/base.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + // { // TODO: Should separate metalics parts + // map models/buildables/mgturret/ref_map.jpg + // blendFunc GL_DST_COLOR GL_ONE + // detail + // tcGen environment + // alphaGen lightingSpecular + // depthFunc equal + // } +} + +models/players/human_base/light +{ + cull disable + { + map models/players/human_base/light.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/players/human_base/light.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + // { // TODO: Should separate metalics parts + // map models/buildables/mgturret/ref_map.jpg + // blendFunc GL_DST_COLOR GL_ONE + // detail + // tcGen environment + // alphaGen lightingSpecular + // depthFunc equal + // } +} + +models/players/human_base/armour +{ + cull disable + { + map models/players/human_base/armour.jpg + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/players/human_base/armour.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} + +models/players/human_base/shoulderpads +{ + cull disable + { + map models/players/human_base/shoulderpads.jpg + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/players/human_base/shoulderpads.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} + +models/players/human_bsuit/human_bsuit +{ + cull disable + { + map models/players/human_bsuit/human_bsuit.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/players/human_bsuit/human_bsuit.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} diff --git a/assets/scripts/jetpack.shader b/assets/scripts/jetpack.shader new file mode 100644 index 000000000..cc9b8f271 --- /dev/null +++ b/assets/scripts/jetpack.shader @@ -0,0 +1,35 @@ +models/players/human_base/jetpack +{ + cull disable + { + map models/players/human_base/jetpack.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/players/human_base/jetpack.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} + +models/players/human_base/jetpack_flash +{ + sort additive + { + map models/players/human_base/jetpack_flash.jpg + blendfunc GL_ONE GL_ONE + tcMod scroll 10.0 0.0 + } +} diff --git a/assets/scripts/lcannon.shader b/assets/scripts/lcannon.shader new file mode 100644 index 000000000..b587ae15b --- /dev/null +++ b/assets/scripts/lcannon.shader @@ -0,0 +1,21 @@ +models/weapons/lcannon/lcannon +{ + cull disable + { + map models/weapons/lcannon/lcannon.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/lcannon/lcannon.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/level0.shader b/assets/scripts/level0.shader new file mode 100644 index 000000000..140e7d857 --- /dev/null +++ b/assets/scripts/level0.shader @@ -0,0 +1,13 @@ +models/players/level0/level0 +{ + { + map models/players/level0/level0.jpg + rgbGen lightingDiffuse + } + { + map models/players/level0/level0.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/level1.shader b/assets/scripts/level1.shader new file mode 100644 index 000000000..bb5375be0 --- /dev/null +++ b/assets/scripts/level1.shader @@ -0,0 +1,27 @@ +models/players/level1/level1 +{ + { + map models/players/level1/level1.jpg + rgbGen lightingDiffuse + } + { + map models/players/level1/level1.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/players/level1/level1upg +{ + { + map models/players/level1/level1upg.jpg + rgbGen lightingDiffuse + } + { + map models/players/level1/level1upg.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/level2.shader b/assets/scripts/level2.shader new file mode 100644 index 000000000..87ef8f94f --- /dev/null +++ b/assets/scripts/level2.shader @@ -0,0 +1,46 @@ +models/players/level2/default +{ + { + map models/players/level2/default.tga + rgbGen lightingDiffuse + } + { + map models/players/level2/default.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/players/level2/level2adv +{ + { + map models/players/level2/lvl2_fx.tga + blendFunc GL_ONE GL_ZERO + tcmod scale 7 7 + tcMod scroll 5 -5 + tcmod rotate 360 + rgbGen identity + } + + { + map models/players/level2/adv.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen lightingDiffuse + } + { + map models/players/level2/adv.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/players/level2/electric_s +{ + { + map models/players/level2/electric.jpg + blendfunc add + tcMod scroll 10.0 0.5 + } +} diff --git a/assets/scripts/level3.shader b/assets/scripts/level3.shader new file mode 100644 index 000000000..65b09e9bc --- /dev/null +++ b/assets/scripts/level3.shader @@ -0,0 +1,27 @@ +models/players/level3/level3 +{ + { + map models/players/level3/level3.tga + rgbGen lightingDiffuse + } + { + map models/players/level3/level3.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} + +models/players/level3/level3adv +{ + { + map models/players/level3/level3adv.tga + rgbGen lightingDiffuse + } + { + map models/players/level3/level3adv.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/level4.shader b/assets/scripts/level4.shader new file mode 100644 index 000000000..d38789a49 --- /dev/null +++ b/assets/scripts/level4.shader @@ -0,0 +1,13 @@ +models/players/level4/level4 +{ + { + map models/players/level4/level4.jpg + rgbGen lightingDiffuse + } + { + map models/players/level4/level4.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/lgun.shader b/assets/scripts/lgun.shader new file mode 100644 index 000000000..e113c47e2 --- /dev/null +++ b/assets/scripts/lgun.shader @@ -0,0 +1,21 @@ +models/weapons/lgun/lgun +{ + cull disable + { + map models/weapons/lgun/lgun.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/lgun/lgun.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/marks.shader b/assets/scripts/marks.shader new file mode 100644 index 000000000..6db2f1b94 --- /dev/null +++ b/assets/scripts/marks.shader @@ -0,0 +1,75 @@ +// markShadow is the very cheap blurry blob underneath the player +gfx/marks/shadow +{ + polygonOffset + { + map gfx/marks/shadow.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + } +} + +// wake is the mark on water surfaces for paddling players +gfx/marks/wake +{ + polygonOffset + { + clampmap gfx/marks/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 gfx/marks/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 + } +} + +gfx/marks/bullet_mrk +{ + polygonOffset + { + map gfx/marks/bullet_mrk.tga + blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR + rgbGen exactVertex + } +} + +gfx/marks/burn_mrk +{ + polygonOffset + { + map gfx/marks/burn_mrk.tga + blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR + rgbGen exactVertex + } +} + +gfx/marks/plasma_mrk +{ + polygonOffset + { + map gfx/marks/plasma_mrk.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + } +} + +gfx/sprites/green_acid_mark +{ + polygonOffset + { + map gfx/sprites/green_acid + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + } +} diff --git a/assets/scripts/mdriver.shader b/assets/scripts/mdriver.shader new file mode 100644 index 000000000..bbd68edb6 --- /dev/null +++ b/assets/scripts/mdriver.shader @@ -0,0 +1,31 @@ +models/weapons/mdriver/mdriver +{ + cull disable + { + map models/weapons/mdriver/mdriver.tga + rgbGen lightingDiffuse + } + { + map models/weapons/mdriver/mdriver.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/weapons/mdriver/glow +{ + cull disable + { + map models/weapons/mdriver/glow.jpg + blendfunc GL_ONE GL_ONE + tcMod scroll -9.0 9.0 + } +} diff --git a/assets/scripts/medistat.shader b/assets/scripts/medistat.shader new file mode 100644 index 000000000..cd4822e9e --- /dev/null +++ b/assets/scripts/medistat.shader @@ -0,0 +1,48 @@ +models/buildables/medistat/medi_base +{ + { + map models/buildables/medistat/medi_base.tga + rgbGen lightingDiffuse + } + { + map models/buildables/medistat/medi_base.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/medistat/red_cross +{ + { + map models/buildables/medistat/red_cross.tga + blendfunc gl_one_minus_dst_color gl_one + } +} + +models/buildables/medistat/medi_cone +{ + cull none + + { + clampMap models/buildables/medistat/medi_cone.jpg + blendfunc add + rgbGen lightingDiffuse + tcMod scroll 1 0 + } + { + clampMap models/buildables/telenode/sparkles.tga + blendfunc add + rgbGen identity + rgbGen wave noise 0 1 35 1 + tcMod scale 2 2 + tcMod scroll 1 0.5 + } +} diff --git a/assets/scripts/mgturret.shader b/assets/scripts/mgturret.shader new file mode 100644 index 000000000..a4bf63125 --- /dev/null +++ b/assets/scripts/mgturret.shader @@ -0,0 +1,117 @@ +models/buildables/mgturret/t_flash +{ + cull disable + { + map models/buildables/mgturret/t_flash.tga + blendfunc add + rgbGen wave square 0 1 0 10 + } +} + +models/buildables/mgturret/turret_coil +{ + cull disable + { + map models/buildables/mgturret/turret_coil.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/buildables/mgturret/turret_coil.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} + +models/buildables/mgturret/turret_shiny +{ + { + map models/buildables/mgturret/turret_shiny.tga + rgbGen lightingDiffuse + } + { + map models/buildables/mgturret/turret_shiny.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + } +} + models/buildables/mgturret/turret_barrel +{ + { + map models/buildables/mgturret/turret_barrel.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/mgturret/turret_barrel.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/mgturret/turret_base +{ + { + map models/buildables/mgturret/turret_base.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/mgturret/turret_base.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/mgturret/turret_top +{ + { + map models/buildables/mgturret/turret_top.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/mgturret/turret_top.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/misc.particle b/assets/scripts/misc.particle index 40f3cc04d..364be66fa 100644 --- a/assets/scripts/misc.particle +++ b/assets/scripts/misc.particle @@ -86,6 +86,7 @@ alienEvolvePS alpha 0 1.0 0.0 rotation 0 ~360 - bounce 0.2 + bounceMark 1 16 gfx/sprites/green_acid_mark lifeTime 1000 } @@ -94,6 +95,19 @@ alienEvolvePS delay 0 period 5 - ~0% } + ejector + { + particle + { + dynamicLight 0 300 0 { 0.16 0.32 0.05 } + + lifeTime 1000~100 + } + + count 1 + delay 0 + period 0 - ~0% + } } alienBleedPS diff --git a/assets/scripts/overmind.shader b/assets/scripts/overmind.shader new file mode 100644 index 000000000..fcdd74fec --- /dev/null +++ b/assets/scripts/overmind.shader @@ -0,0 +1,66 @@ +models/buildables/overmind/pod_strands +{ + cull disable + { + map models/buildables/eggpod/pod_strands.tga + rgbGen lightingDiffuse + alphaFunc GE128 + depthWrite + } + { + map models/buildables/eggpod/pod_strands.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + depthFunc equal + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + depthFunc equal + } +} + +models/buildables/overmind/over_spike +{ + { + map models/buildables/overmind/over_spike.tga + rgbGen lightingDiffuse + } + { + map models/buildables/overmind/over_spike.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/overmind/ref2.tga + blendfunc filter + rgbGen identity + tcGen environment + } +} + +models/buildables/overmind/over_body +{ + { + map models/buildables/overmind/over_body.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/overmind/over_body.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/prifle.shader b/assets/scripts/prifle.shader new file mode 100644 index 000000000..0a926ef81 --- /dev/null +++ b/assets/scripts/prifle.shader @@ -0,0 +1,21 @@ +models/weapons/prifle/prifle +{ + cull disable + { + map models/weapons/prifle/prifle.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/prifle/prifle.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/psaw.shader b/assets/scripts/psaw.shader new file mode 100644 index 000000000..24257066c --- /dev/null +++ b/assets/scripts/psaw.shader @@ -0,0 +1,53 @@ +models/weapons/psaw/psaw +{ + cull disable + { + map models/weapons/psaw/psaw.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/psaw/psaw.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/weapons/psaw/chain +{ + sort additive + cull disable + { + map models/weapons/psaw/chain.jpg + blendfunc GL_ONE GL_ONE + tcMod scroll 1.0 -4.0 + } +} + +models/weapons/psaw/battery +{ + sort additive + cull disable + { + map models/weapons/psaw/chain.jpg + blendfunc GL_ONE GL_ONE + tcMod scroll 0.04 -0.02 + } +} + +models/weapons/psaw/glow +{ + cull disable + { + map models/weapons/psaw/glow.jpg + blendfunc GL_ONE GL_ONE + tcMod scroll -9.0 9.0 + } +} diff --git a/assets/scripts/reactor.shader b/assets/scripts/reactor.shader new file mode 100644 index 000000000..bf93aff18 --- /dev/null +++ b/assets/scripts/reactor.shader @@ -0,0 +1,150 @@ +models/buildables/reactor/reactor_main +{ + { + map models/buildables/reactor/reactor_main.tga + rgbGen lightingDiffuse + } + { + map models/buildables/reactor/reactor_glow.tga + blendfunc add + rgbGen wave sin 0 1 0 0.5 + } + { + map models/buildables/reactor/reactor_main.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} +models/buildables/reactor/reactor_body +{ + { + map models/buildables/reactor/reactor_body.tga + rgbGen lightingDiffuse + } + { + map models/buildables/reactor/reactor_body.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} +models/buildables/reactor/reactor_parts +{ + { + map models/buildables/reactor/reactor_parts.tga + rgbGen lightingDiffuse + } + { + map models/buildables/reactor/reactor_parts.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} +models/buildables/reactor/reactor_top +{ + { + map models/buildables/reactor/reactor_top.tga + rgbGen lightingDiffuse + } + { + map models/buildables/reactor/reactor_top.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} +models/buildables/reactor/reactor_control +{ + { + map models/buildables/reactor/reactor_control.tga + rgbGen lightingDiffuse + } + { + map models/buildables/reactor/reactor_control.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/reactor/reactor_meter +{ + { + map models/buildables/reactor/reactor_meter.tga + rgbGen lightingDiffuse + } + { + map models/buildables/reactor/reactor_meter.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/reactor/reactor_display +{ + { + map models/buildables/reactor/reactor_display.tga + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + } +} + +models/buildables/reactor/reactor_bolt +{ + cull disable + { + map models/buildables/reactor/reactor_bolt.tga + blendfunc add + rgbGen identity + tcMod scroll 2 0 + } +} diff --git a/assets/scripts/repeater.shader b/assets/scripts/repeater.shader new file mode 100644 index 000000000..108fb4f67 --- /dev/null +++ b/assets/scripts/repeater.shader @@ -0,0 +1,37 @@ +models/buildables/repeater/repeator_body +{ + { + map models/buildables/repeater/repeator_body.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/repeater/repeator_body.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} +models/buildables/repeater/energy +{ + { + map models/buildables/repeater/energy.tga + rgbGen wave sawtooth 0.3 1 0 0.5 + tcMod scale 2 1 + tcMod scroll 0 1 + } +} + +models/buildables/repeater/repeator_panel +{ + { + map models/buildables/repeater/repeator_panel.tga + rgbGen identity + } +} diff --git a/assets/scripts/rifle.shader b/assets/scripts/rifle.shader new file mode 100644 index 000000000..6d8d59533 --- /dev/null +++ b/assets/scripts/rifle.shader @@ -0,0 +1,21 @@ +models/weapons/rifle/rifle +{ + cull disable + { + map models/weapons/rifle/rifle.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/rifle/rifle.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/shells.shader b/assets/scripts/shells.shader new file mode 100644 index 000000000..14e351449 --- /dev/null +++ b/assets/scripts/shells.shader @@ -0,0 +1,21 @@ +models/weapons/shells/rifle-shell +{ + cull disable + { + map models/weapons/shells/rifle-shell.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/shells/rifle-shell.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/shotgun.shader b/assets/scripts/shotgun.shader new file mode 100644 index 000000000..ef19f6c0b --- /dev/null +++ b/assets/scripts/shotgun.shader @@ -0,0 +1,21 @@ +models/weapons/shotgun/shotgun +{ + cull disable + { + map models/weapons/shotgun/shotgun.jpg + rgbGen lightingDiffuse + } + { + map models/weapons/shotgun/shotgun.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/splash.shader b/assets/scripts/splash.shader new file mode 100644 index 000000000..6e7616d3a --- /dev/null +++ b/assets/scripts/splash.shader @@ -0,0 +1,58 @@ +models/splash/bright_star +{ + nopicmip + { + map models/splash/bright_star.tga + blendfunc add + rgbGen identity + } + { + map models/splash/bright_star_2.tga + blendfunc add + rgbGen wave sin 0 0.5 0 0.09 + } +} + +models/splash/nebula +{ + nopicmip + { + map models/splash/nebula.tga + blendfunc add + rgbGen wave sin 0.5 1 5 0.05 + tcMod scale -1 1 + } + { + map models/splash/nebula_2.tga + blendfunc add + rgbGen wave sin 0.3 1 2.5 0.05 + tcMod scale -1 1 + } +} + +models/splash/circles +{ + nopicmip + { + map models/splash/circles.png + blendfunc blend + } +} + +models/splash/trem_black +{ + nopicmip +// { +// map models/splash/highlights.tga +// blendfunc add +// rgbGen wave sin 0 0.2 0 0.2 +// tcMod scroll -0.2 0 +// } + + { + map ui/assets/title.tga + blendfunc blend + //alphaFunc GE128 + rgbGen identity + } +} diff --git a/assets/scripts/sprites.shader b/assets/scripts/sprites.shader new file mode 100644 index 000000000..dd66f1123 --- /dev/null +++ b/assets/scripts/sprites.shader @@ -0,0 +1,82 @@ +gfx/sprites/smoke +{ + cull none + entityMergable + { + map gfx/sprites/smoke.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + } +} + +gfx/sprites/green_acid +{ + nopicmip + { + clampmap gfx/sprites/green_acid.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + } +} + +gfx/sprites/spark +{ + cull none + { + map gfx/sprites/spark.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + } +} + +gfx/sprites/bubble +{ + sort underwater + cull none + entityMergable + { + map gfx/sprites/bubble.jpg + blendFunc GL_ONE GL_ONE + rgbGen vertex + alphaGen vertex + } +} + +gfx/sprites/poisoncloud +{ + cull none + entityMergable + { + map gfx/sprites/poisoncloud.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + } +} + +gfx/sprites/chatballoon +{ + { + map gfx/sprites/chatballoon.tga + blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + } +} + +gfx/sprites/aliens_chatballoon +{ + { + map gfx/sprites/aliens_chatballoon.png + blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + } +} + +gfx/sprites/humans_chatballoon +{ + { + map gfx/sprites/humans_chatballoon.png + blendfunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + } +} diff --git a/assets/scripts/telenode.shader b/assets/scripts/telenode.shader new file mode 100644 index 000000000..aa9642698 --- /dev/null +++ b/assets/scripts/telenode.shader @@ -0,0 +1,67 @@ +models/buildables/telenode/telenode_top +{ + { + map models/buildables/telenode/telenode_top.tga + rgbGen lightingDiffuse + } + { + map models/buildables/telenode/telenode_top.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/telenode/energy +{ + { + map models/buildables/telenode/energy.tga + rgbGen wave inversesawtooth 0.2 0.4 0 1 + tcMod rotate 10 + } +} + +models/buildables/telenode/rep_cyl +{ + cull disable + { + map models/buildables/telenode/rep_cyl.jpg + blendfunc add + rgbGen lightingDiffuse + tcMod scroll 0.2 0 + } + { + map models/buildables/telenode/lines2.tga + blendfunc add + rgbGen identity + tcMod scroll 0 0.2 + } +} + +models/buildables/telenode/telenode_parts +{ + { + map models/buildables/telenode/telenode_parts.tga + rgbGen lightingDiffuse + } + { + map models/buildables/telenode/telenode_parts.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/tesla.shader b/assets/scripts/tesla.shader new file mode 100644 index 000000000..57bdfdb70 --- /dev/null +++ b/assets/scripts/tesla.shader @@ -0,0 +1,80 @@ +models/buildables/tesla/tesla_main +{ + { + map models/buildables/tesla/tesla_main.tga + rgbGen lightingDiffuse + } + { + map models/buildables/tesla/tesla_main.tga + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + +models/buildables/tesla/tesla_ball +{ + { + map models/buildables/tesla/tesla_ball.tga + rgbGen lightingDiffuse + tcMod scroll -0.2 0.2 + } + { + map models/buildables/tesla/tesla_ball.tga + rgbGen lightingDiffuse + blendfunc add + detail + tcMod scroll 0.35 -0.45 + tcMod scale -1 1 + } + { + map models/buildables/tesla/tesla_ball.tga + tcGen environment + blendFunc GL_SRC_ALPHA GL_ONE + alphaGen lightingSpecular + } +} + +models/buildables/tesla/tesla_grill +{ + { + map models/buildables/tesla/tesla_grill.tga + rgbGen wave sin 0 1 0 0.4 + } +} + +models/buildables/tesla/tesla_spark +{ + cull disable + { + map models/buildables/tesla/tesla_spark.tga + blendfunc add + rgbGen identity + } +} + + +models/ammo/tesla/tesla_bolt +{ + cull disable + { + map models/ammo/tesla/tesla_bolt.tga + blendfunc add + rgbGen vertex + tcMod scroll 0.2 0 + } + { + map models/ammo/tesla/tesla_bolt.tga + blendfunc add + rgbGen wave sin 0 1 0 5 + tcMod scroll 0.5 0 + tcMod scale -1 1 + } +} diff --git a/assets/scripts/trapper.shader b/assets/scripts/trapper.shader new file mode 100644 index 000000000..f1f228e53 --- /dev/null +++ b/assets/scripts/trapper.shader @@ -0,0 +1,59 @@ +models/buildables/trapper/trapper_gills +{ +cull disable + { + map models/buildables/trapper/trapper_gills.tga + rgbGen lightingDiffuse + alphaFunc GE128 + } + { + map models/buildables/trapper/trapper_gills.tga + rgbGen lightingDiffuse + tcMod scroll -0.01 0 + tcMod scale -1 1 + alphaFunc GE128 + } +} + +models/buildables/trapper/trapper_body +{ + { + map models/buildables/trapper/trapper_body.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/trapper/trapper_body.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} + + +models/buildables/trapper/trapper_tent +{ + { + map models/buildables/trapper/trapper_tent.jpg + rgbGen lightingDiffuse + } + { + map models/buildables/trapper/trapper_tent.jpg + blendFunc GL_SRC_ALPHA GL_ONE + detail + alphaGen lightingSpecular + } + { + map models/buildables/mgturret/ref_map.jpg + blendFunc GL_DST_COLOR GL_ONE + detail + tcGen environment + alphaGen lightingSpecular + } +} diff --git a/assets/scripts/ui.shader b/assets/scripts/ui.shader index a99d4f72d..d9a2cfa10 100644 --- a/assets/scripts/ui.shader +++ b/assets/scripts/ui.shader @@ -17,3 +17,63 @@ ui/assets/neutral/squad_v rgbgen vertex } } + +ui/assets/cornerOut_square +{ + nomipmaps + { + map ui/assets/corner_square.tga + blendfunc blend + rgbgen vertex + } +} + +ui/assets/cornerIn_square +{ + nomipmaps + { + map ui/assets/cornerinv_square.tga + blendfunc blend + rgbgen vertex + } +} + +ui/assets/cornerOut_rounded +{ + nopicmip + { + map ui/assets/corner_rounded.tga + blendfunc blend + rgbgen vertex + } +} + +ui/assets/cornerIn_rounded +{ + nopicmip + { + map ui/assets/cornerinv_rounded.tga + blendfunc blend + rgbgen vertex + } +} + +ui/assets/cornerOut_fold +{ + nopicmip + { + map ui/assets/corner_fold.tga + blendfunc blend + rgbgen vertex + } +} + +ui/assets/cornerIn_fold +{ + nopicmip + { + map ui/assets/cornerinv_fold.tga + blendfunc blend + rgbgen vertex + } +} diff --git a/assets/scripts/weapons.particle b/assets/scripts/weapons.particle index 5851fc656..8f3b86980 100644 --- a/assets/scripts/weapons.particle +++ b/assets/scripts/weapons.particle @@ -392,7 +392,7 @@ models/weapons/prifle/impactPS particle { shader sync gfx/prifle/red_blob - + radius 0 3.0 6.0 alpha 70 1.0 0.0 rotation 0 ~360 - @@ -526,11 +526,11 @@ models/weapons/lcannon/impactPS particle { shader sync gfx/blaster/orange_particle - + radius 0 8.0 16.0 alpha 0 1.0 0.0 rotation 0 ~360 - - + scaleWithCharge 0.10 lifeTime 250 @@ -598,7 +598,7 @@ models/weapons/lcannon/impactPS alpha 0 1.0 0.0 rotation 0 ~360 - bounce 1.0 - + scaleWithCharge 0.10 lifeTime 1000~1000 @@ -617,7 +617,7 @@ models/weapons/lcannon/secondaryImpactPS particle { shader sync gfx/blaster/orange_particle - + radius 0 8.0 16.0 alpha 0 1.0 0.0 rotation 0 ~360 - @@ -855,6 +855,40 @@ models/weapons/grenade/impactPS } } +models/weapons/builderupg/impactPS +{ + ejector + { + particle + { + shader sync gfx/sprites/green_acid + + displacement 0 0 0 ~6 + + velocityType normal + velocityDir linear + velocityMagnitude 300 + velocity 0 0 1 ~80 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 5.0~2.0 0.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.4~100% + + lifeTime 275 + } + + count 4 + delay 0 + period 0 - ~0% + } +} + models/weapons/level3upg/impactPS { ejector @@ -887,4 +921,35 @@ models/weapons/level3upg/impactPS delay 0 period 0 - ~0% } + + ejector + { + particle + { + shader sync gfx/sprites/green_acid + + displacement 0 0 0 ~6 + + velocityType normal + velocityDir linear + velocityMagnitude 300 + velocity 0 0 1 ~80 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 5.0~2.0 0.0 + alpha 0 1.0 0.0 + rotation 0 ~360 - + bounce 0.4~100% + + lifeTime 275 + } + + count 8 + delay 0 + period 0 - ~0% + } } diff --git a/assets/ui/assets/alien/buildstat.cfg b/assets/ui/assets/alien/buildstat.cfg index 318d401d6..97642059e 100644 --- a/assets/ui/assets/alien/buildstat.cfg +++ b/assets/ui/assets/alien/buildstat.cfg @@ -9,6 +9,8 @@ frameWidth 150 frameHeight 30 healthPadding 2 + +// Homeworld Security Advisory System healthSevereColor 0.24 0.02 0.02 1 healthHighColor 0.32 0.04 0.04 1 healthElevatedColor 0.40 0.06 0.06 1 @@ -17,8 +19,8 @@ healthLowColor 0.56 0.10 0.10 1 // this gets drawn over frame and health, but numbers and icons go on top of it overlayShader "ui/assets/alien/buildstat/overlay" -overlayWidth 156 -overlayHeight 36 +overlayWidth 164 +overlayHeight 40 // PERCENT of frameHeight to use for top/bottom margin of icons/text // value is for total of top and bottom margins diff --git a/assets/ui/assets/alien/buildstat/overlay.tga b/assets/ui/assets/alien/buildstat/overlay.tga new file mode 100644 index 000000000..90f27e0aa Binary files /dev/null and b/assets/ui/assets/alien/buildstat/overlay.tga differ diff --git a/assets/ui/assets/backarrow.png b/assets/ui/assets/backarrow.png new file mode 100644 index 000000000..13fdb5b76 Binary files /dev/null and b/assets/ui/assets/backarrow.png differ diff --git a/assets/ui/assets/backarrow_alt.png b/assets/ui/assets/backarrow_alt.png new file mode 100644 index 000000000..de0b8e82a Binary files /dev/null and b/assets/ui/assets/backarrow_alt.png differ diff --git a/assets/ui/assets/corner_fold.tga b/assets/ui/assets/corner_fold.tga new file mode 100644 index 000000000..f8175549e Binary files /dev/null and b/assets/ui/assets/corner_fold.tga differ diff --git a/assets/ui/assets/corner_rounded.tga b/assets/ui/assets/corner_rounded.tga new file mode 100644 index 000000000..00b5cf516 Binary files /dev/null and b/assets/ui/assets/corner_rounded.tga differ diff --git a/assets/ui/assets/corner_square.tga b/assets/ui/assets/corner_square.tga new file mode 100644 index 000000000..e1c384200 Binary files /dev/null and b/assets/ui/assets/corner_square.tga differ diff --git a/assets/ui/assets/cornerinv_fold.tga b/assets/ui/assets/cornerinv_fold.tga new file mode 100644 index 000000000..d01131859 Binary files /dev/null and b/assets/ui/assets/cornerinv_fold.tga differ diff --git a/assets/ui/assets/cornerinv_rounded.tga b/assets/ui/assets/cornerinv_rounded.tga new file mode 100644 index 000000000..4e12b208c Binary files /dev/null and b/assets/ui/assets/cornerinv_rounded.tga differ diff --git a/assets/ui/assets/cornerinv_square.tga b/assets/ui/assets/cornerinv_square.tga new file mode 100644 index 000000000..4a7330c6b Binary files /dev/null and b/assets/ui/assets/cornerinv_square.tga differ diff --git a/assets/ui/assets/credits_splash.jpg b/assets/ui/assets/credits_splash.jpg new file mode 100644 index 000000000..6f28391ab Binary files /dev/null and b/assets/ui/assets/credits_splash.jpg differ diff --git a/assets/ui/assets/cursor.png b/assets/ui/assets/cursor.png new file mode 100644 index 000000000..809b5a1f2 Binary files /dev/null and b/assets/ui/assets/cursor.png differ diff --git a/assets/ui/assets/forwardarrow.png b/assets/ui/assets/forwardarrow.png new file mode 100644 index 000000000..e9074cc88 Binary files /dev/null and b/assets/ui/assets/forwardarrow.png differ diff --git a/assets/ui/assets/forwardarrow_alt.png b/assets/ui/assets/forwardarrow_alt.png new file mode 100644 index 000000000..58ab157b5 Binary files /dev/null and b/assets/ui/assets/forwardarrow_alt.png differ diff --git a/assets/ui/assets/human/buildstat.cfg b/assets/ui/assets/human/buildstat.cfg index c66b618d2..c001a3ebf 100644 --- a/assets/ui/assets/human/buildstat.cfg +++ b/assets/ui/assets/human/buildstat.cfg @@ -18,8 +18,8 @@ healthGuardedColor 0.19 0.65 0.00 1 healthLowColor 0.27 0.49 0.55 1 // this gets drawn over frame and health, but numbers and icons go on top of it -overlayShader "" -overlayWidth 160 +overlayShader "ui/assets/human/buildstat/overlay" +overlayWidth 164 overlayHeight 40 // PERCENT of frameHeight to use for top/bottom margin of icons/text diff --git a/assets/ui/assets/human/buildstat/frame.tga b/assets/ui/assets/human/buildstat/frame.tga new file mode 100644 index 000000000..88d1e2d98 Binary files /dev/null and b/assets/ui/assets/human/buildstat/frame.tga differ diff --git a/assets/ui/assets/human/buildstat/overlay.tga b/assets/ui/assets/human/buildstat/overlay.tga new file mode 100644 index 000000000..c478be112 Binary files /dev/null and b/assets/ui/assets/human/buildstat/overlay.tga differ diff --git a/assets/ui/assets/mainmenu.jpg b/assets/ui/assets/mainmenu.jpg new file mode 100644 index 000000000..17f779f23 Binary files /dev/null and b/assets/ui/assets/mainmenu.jpg differ diff --git a/assets/ui/assets/scrollbar.tga b/assets/ui/assets/scrollbar.tga new file mode 100644 index 000000000..a3fbfd7e4 Binary files /dev/null and b/assets/ui/assets/scrollbar.tga differ diff --git a/assets/ui/assets/scrollbar_arrow_dwn_a.tga b/assets/ui/assets/scrollbar_arrow_dwn_a.tga new file mode 100644 index 000000000..7b94c6fef Binary files /dev/null and b/assets/ui/assets/scrollbar_arrow_dwn_a.tga differ diff --git a/assets/ui/assets/scrollbar_arrow_left.tga b/assets/ui/assets/scrollbar_arrow_left.tga new file mode 100644 index 000000000..303cefb7f Binary files /dev/null and b/assets/ui/assets/scrollbar_arrow_left.tga differ diff --git a/assets/ui/assets/scrollbar_arrow_right.tga b/assets/ui/assets/scrollbar_arrow_right.tga new file mode 100644 index 000000000..6a7d2094c Binary files /dev/null and b/assets/ui/assets/scrollbar_arrow_right.tga differ diff --git a/assets/ui/assets/scrollbar_arrow_up_a.tga b/assets/ui/assets/scrollbar_arrow_up_a.tga new file mode 100644 index 000000000..c9c30fc2b Binary files /dev/null and b/assets/ui/assets/scrollbar_arrow_up_a.tga differ diff --git a/assets/ui/assets/scrollbar_thumb.tga b/assets/ui/assets/scrollbar_thumb.tga new file mode 100644 index 000000000..2a05c6426 Binary files /dev/null and b/assets/ui/assets/scrollbar_thumb.tga differ diff --git a/assets/ui/assets/showmore_arrow.tga b/assets/ui/assets/showmore_arrow.tga new file mode 100644 index 000000000..532831635 Binary files /dev/null and b/assets/ui/assets/showmore_arrow.tga differ diff --git a/assets/ui/assets/slider.png b/assets/ui/assets/slider.png new file mode 100644 index 000000000..986c678ae Binary files /dev/null and b/assets/ui/assets/slider.png differ diff --git a/assets/ui/assets/sliderbutt.png b/assets/ui/assets/sliderbutt.png new file mode 100644 index 000000000..2438453d1 Binary files /dev/null and b/assets/ui/assets/sliderbutt.png differ diff --git a/assets/ui/connect.menu b/assets/ui/connect.menu index 108e33c84..e6032f217 100644 --- a/assets/ui/connect.menu +++ b/assets/ui/connect.menu @@ -1,14 +1,54 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" + +#define W 640 +#define H 480 +#define BORDER 10 + +#define BAR_H ((H-((6*BORDER)+(H/2)))/4) +#define BAR_W (W-(2*BORDER)) +#define BAR_X BORDER +#define OVER_Y (H-(BORDER+BAR_H)) { menuDef { name "Connect" - background "gfx/2d/load_screen" rect 0 0 640 480 fullScreen MENU_FALSE visible MENU_FALSE style WINDOW_STYLE_SHADER - aspectBias ASPECT_NONE + background "ui/assets/mainmenu.jpg" + aspectbias ASPECT_NONE + + itemDef + { + name splashmodel + rect -320 0 1280 480 + type ITEM_TYPE_MODEL + style WINDOW_STYLE_EMPTY + aspectBias ALIGN_CENTER // Allow our HD model to be "responsive" + asset_model "models/splash/loading_screen.md3" + model_fovx 60.0 + model_fovy 24.0 + model_angle 180 + visible MENU_TRUE + decoration + } + + itemDef + { + name "overall" + rect BAR_X OVER_Y BAR_W BAR_H + visible MENU_TRUE + decoration + forecolor 0.0 0.8 1 1 + backcolor 0.0 0.8 1 0.5 + ownerdraw UI_DOWNLOAD_OVERALL + textalign ALIGN_CENTER + textstyle ITEM_TEXTSTYLE_NEON + textscale 0.5 + borderSize 1.0 + } } } diff --git a/assets/ui/createfavorite.menu b/assets/ui/createfavorite.menu index c66ecff46..d1d30a950 100644 --- a/assets/ui/createfavorite.menu +++ b/assets/ui/createfavorite.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ CREATE FAVORITE POPUP MENU \\ @@ -16,7 +17,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -30,13 +31,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } // ENTER NAME AND ADDRESS // diff --git a/assets/ui/createserver.menu b/assets/ui/createserver.menu index f64ba1d5b..82d9f2b4d 100644 --- a/assets/ui/createserver.menu +++ b/assets/ui/createserver.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ Server Creation \\ @@ -38,9 +39,10 @@ visible MENU_FALSE fullscreen MENU_TRUE rect 0 0 W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR outOfBoundsClick - style WINDOW_STYLE_EMPTY + style WINDOW_STYLE_SHADER + background "ui/assets/mainmenu.jpg" aspectBias ASPECT_NONE onOpen @@ -57,15 +59,6 @@ close createserver } - itemDef - { - name background - rect 0 0 W H - style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 - visible MENU_TRUE - decoration - } // map selection @@ -85,16 +78,17 @@ name maplist rect MAPS_X MAPS_Y MAPS_W MAPS_H type ITEM_TYPE_LISTBOX - style WINDOW_STYLE_EMPTY + style WINDOW_STYLE_FILLED elementwidth 120 elementheight 20 textscale .33 elementtype LISTBOX_TEXT feeder FEEDER_MAPS - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 1 + borderStyle BORDER_SQUARE BORDER_SQUARE BORDER_SQUARE BORDER_STYLE forecolor 1 1 1 1 - backcolor 0.2 0.2 0.2 1 + backcolor 0 0 0 0.5 outlinecolor 0.1 0.1 0.1 0.5 visible MENU_TRUE columns 1 @@ -109,13 +103,14 @@ name window rect OPTIONS_X OPTIONS_Y OPTIONS_W OPTIONS_H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor 0 0 0 0.5 visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 borderColor 0.5 0.5 0.5 1 + borderStyle BORDER_SQUARE BORDER_STYLE BORDER_STYLE BORDER_SQUARE } itemDef @@ -391,7 +386,7 @@ { name back style WINDOW_STYLE_SHADER - background "ui/assets/backarrow.tga" + background "ui/assets/backarrow.png" rect BC_X BC_Y ARROW_H ARROW_W aspectBias ALIGN_LEFT visible MENU_TRUE @@ -412,7 +407,7 @@ { name back_alt style WINDOW_STYLE_SHADER - background "ui/assets/backarrow_alt.tga" + background "ui/assets/backarrow_alt.png" rect BC_X BC_Y ARROW_H ARROW_W aspectBias ALIGN_LEFT backcolor 0 0 0 0 @@ -448,7 +443,7 @@ style WINDOW_STYLE_SHADER rect ((BC_X+BC_W)-ARROW_W) BC_Y ARROW_H ARROW_W aspectBias ALIGN_RIGHT - background "ui/assets/forwardarrow.tga" + background "ui/assets/forwardarrow.png" backcolor 0 0 0 0 forecolor 1 1 1 1 visible MENU_TRUE @@ -471,7 +466,7 @@ style WINDOW_STYLE_SHADER rect ((BC_X+BC_W)-ARROW_W) BC_Y ARROW_H ARROW_W aspectBias ALIGN_RIGHT - background "ui/assets/forwardarrow_alt.tga" + background "ui/assets/forwardarrow_alt.png" backcolor 0 0 0 0 type ITEM_TYPE_BUTTON forecolor 1 1 1 1 diff --git a/assets/ui/demo.menu b/assets/ui/demo.menu index bec3a057f..428dded17 100644 --- a/assets/ui/demo.menu +++ b/assets/ui/demo.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ DEMO \\ @@ -15,7 +16,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -33,13 +34,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef @@ -55,8 +57,9 @@ feeder FEEDER_DEMOS textalign 3 textaligny 14 - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle BORDER_STYLE BORDER_STYLE BORDER_SQUARE BORDER_SQUARE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 diff --git a/assets/ui/demo_error.menu b/assets/ui/demo_error.menu index 1427a280f..4744baee0 100644 --- a/assets/ui/demo_error.menu +++ b/assets/ui/demo_error.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -20,7 +21,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -42,9 +43,10 @@ visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 borderColor 0.5 0.5 0.5 1 + borderStyle WINDOW_BORDER_STYLE } itemDef diff --git a/assets/ui/download.menu b/assets/ui/download.menu index dc8247f47..d094360f1 100644 --- a/assets/ui/download.menu +++ b/assets/ui/download.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ DOWNLOAD \\ @@ -9,7 +10,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect 158 80 320 320 - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -30,13 +31,14 @@ name window rect 10 15 300 320 style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef diff --git a/assets/ui/drop.menu b/assets/ui/drop.menu index 162a01923..3e47313f2 100644 --- a/assets/ui/drop.menu +++ b/assets/ui/drop.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -20,7 +21,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -38,13 +39,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef @@ -118,5 +120,3 @@ } } } - - diff --git a/assets/ui/error.menu b/assets/ui/error.menu index 2c54d2da3..68c579c0b 100644 --- a/assets/ui/error.menu +++ b/assets/ui/error.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -20,7 +21,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -38,13 +39,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef @@ -98,5 +100,3 @@ } } } - - diff --git a/assets/ui/findplayer.menu b/assets/ui/findplayer.menu index 09d715a49..ecb76b1a6 100644 --- a/assets/ui/findplayer.menu +++ b/assets/ui/findplayer.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ FIND PLAYER POPUP MENU \\ @@ -21,7 +22,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -41,13 +42,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef @@ -169,5 +171,3 @@ } } } - - diff --git a/assets/ui/folders.menu b/assets/ui/folders.menu index 176f3d6de..bda693618 100644 --- a/assets/ui/folders.menu +++ b/assets/ui/folders.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ FOR OPENING FOLDERS IN A DEFAULT FILE MANAGER \\ @@ -21,7 +22,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -36,13 +37,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } diff --git a/assets/ui/ingame.menu b/assets/ui/ingame.menu index 808287ea0..722d5b7f2 100644 --- a/assets/ui/ingame.menu +++ b/assets/ui/ingame.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { #define BUTT_BAR_X 25 @@ -14,7 +15,7 @@ font "fonts/font" 26 // font smallFont "fonts/smallfont" 20 // font bigFont "fonts/bigfont" 34 // font - cursor "ui/assets/3_cursor3" // cursor + cursor "ui/assets/cursor" // cursor gradientBar "ui/assets/gradientbar2.tga" // gradient bar itemFocusSound "sound/misc/menu2.wav" // sound for item getting focus (via keyboard or mouse ) @@ -36,7 +37,7 @@ fullScreen 0 outOfBoundsClick // this closes the window if it gets a click out of the rectangle rect 0 0 1280 56 - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR disableColor .5 .5 .5 1 backColor 0 0 0 1 aspectBias ALIGN_LEFT @@ -49,11 +50,11 @@ itemDef { name splashmodel - rect 0 -10 640 66 + rect -340 -10 1280 66 // Readjust model pos type ITEM_TYPE_MODEL style WINDOW_STYLE_FILLED asset_model "models/splash/splash_screen.md3" - model_fovx 32.0 + model_fovx 64.0 // Enlarge view model_fovy 3.8 model_angle 180 visible MENU_TRUE diff --git a/assets/ui/ingame_game.menu b/assets/ui/ingame_game.menu index d7d7dd6a9..e08189276 100644 --- a/assets/ui/ingame_game.menu +++ b/assets/ui/ingame_game.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ INGAME GAME BOX \\ @@ -64,7 +65,7 @@ fullscreen MENU_FALSE outOfBoundsClick // this closes the window if it gets a click out of the rectangle rect X Y W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR aspectBias ALIGN_LEFT onopen { @@ -85,13 +86,13 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor 0 0 0 .925 visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_KCGRADIENT borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER } //Section menus diff --git a/assets/ui/ingame_help.menu b/assets/ui/ingame_help.menu index 4c8065bd0..8e957f69d 100644 --- a/assets/ui/ingame_help.menu +++ b/assets/ui/ingame_help.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -26,7 +27,7 @@ fullscreen MENU_FALSE outOfBoundsClick // this closes the window if it gets a click out of the rectangle rect X Y W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR aspectBias ALIGN_LEFT onOpen { setFocus list; @@ -37,13 +38,13 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor 0 0 0 .925 visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_KCGRADIENT borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER } itemDef diff --git a/assets/ui/ingame_leave.menu b/assets/ui/ingame_leave.menu index d07e3ce42..765b956b1 100644 --- a/assets/ui/ingame_leave.menu +++ b/assets/ui/ingame_leave.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ INGAME_LEAVE MENU \\ @@ -24,7 +25,7 @@ fullScreen 0 outOfBoundsClick // this closes the window if it gets a click out of the rectangle rect X Y W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR aspectBias ALIGN_LEFT onOpen { @@ -37,13 +38,13 @@ name leave style WINDOW_STYLE_FILLED rect 0 0 W H - backcolor 0 0 0 1 + backcolor 0 0 0 .925 visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_KCGRADIENT borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER } itemDef diff --git a/assets/ui/ingame_options.menu b/assets/ui/ingame_options.menu index d3e788044..2b4a2e2e2 100644 --- a/assets/ui/ingame_options.menu +++ b/assets/ui/ingame_options.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ INGAME OPTIONS BOX \\ @@ -35,7 +36,7 @@ fullscreen MENU_FALSE outOfBoundsClick // this closes the window if it gets a click out of the rectangle rect X Y W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR aspectBias ALIGN_LEFT onopen { @@ -53,13 +54,13 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor 0 0 0 .925 visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_KCGRADIENT borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER } //Section menus @@ -832,7 +833,7 @@ type ITEM_TYPE_MULTI text "Wallwalking Speed:" cvar "cg_wwSmoothTime" - cvarFloatList { "Medium" 300 "Fast" 150 "Instant" 0 "Slow" 600 } + cvarFloatList { "Slower" 450 "Slow" 300 "Medium" 225 "Fast" 150 "Faster" 75 "Instant" 0} rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER @@ -1272,6 +1273,66 @@ } } + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Rotate build left:" + cvar "rotatebuildleft" + rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Rotate build right:" + cvar "rotatebuildright" + rect SCONTENT_X (SCONTENT_Y+(9*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name upgrades + group optionsGrp + type ITEM_TYPE_BIND + text "Reset build rotation:" + cvar "rotatebuild" + rect SCONTENT_X (SCONTENT_Y+(10*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + //////// MISC itemDef @@ -1641,7 +1702,7 @@ action { play "sound/misc/menu1.wav"; - uiScript glCuston + uiScript glCustom } } @@ -1900,6 +1961,386 @@ } } + //////// OpenGL2 Options + + itemDef + { + name system + text "OpenGL2" + group optionsGrp + style WINDOW_STYLE_EMPTY + rect 0 ((2*BORDER)+TOPBUTT_H+(1*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + type ITEM_TYPE_BUTTON + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + hide optionsGrp; + show system; + show gl2options + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_MULTI + text "Enabled Renderer:" + cvar "cl_renderer" + cvarStrList { "OpenGL2 (new)", "opengl2", + "OpenGL1 (old)", "opengl1" } + rect SCONTENT_X (SCONTENT_Y+(0*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_YESNO + text "Post Processing:" + cvar "r_postProcess" + rect SCONTENT_X (SCONTENT_Y+(1*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_YESNO + text "Screen Tone Mapping:" + cvar "r_toneMap" + rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_MULTI + text "Multisample Anti-aliasing:" + cvar "r_ext_framebuffer_multisample" + cvarStrList { "No", "", + "x2", "2", + "x4", "4", + "x8", "8", + "x16", "16" } + rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_YESNO + text "Physically Based Rendering:" + cvar "r_pbr" + rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_YESNO + text "Normal (Bump) Maps:" + cvar "r_normalMapping" + rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + // itemDef // No utility + // { + // name gl2options + // group optionsGrp + // type ITEM_TYPE_YESNO + // text "Naively Generate Normal Maps:" + // cvar "r_genNormalMaps" + // rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + // textalign ALIGN_RIGHT + // textvalign VALIGN_CENTER + // textalignx SCONTENT_OFF + // textscale .25 + // forecolor 1 1 1 1 + // visible MENU_TRUE + // action + // { + // play "sound/misc/menu1.wav"; + // } + // } + // + // itemDef // Not ready + // { + // name gl2options + // group optionsGrp + // type ITEM_TYPE_YESNO + // text "Ambient Occlusion (SSAO):" + // cvar "r_ssao" + // rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + // textalign ALIGN_RIGHT + // textvalign VALIGN_CENTER + // textalignx SCONTENT_OFF + // textscale .25 + // forecolor 1 1 1 1 + // visible MENU_TRUE + // action + // { + // play "sound/misc/menu1.wav"; + // } + // } + + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_YESNO + text "Specular Surface Lighting:" + cvar "r_specularMapping" + rect SCONTENT_X (SCONTENT_Y+(6*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_MULTI + text "Parallax Height Maps:" + cvar "r_parallaxMapping" + + cvarFloatList { "No" 0 "Use Parallax Occlusion" 1 "Use Relief (Slower)" 2 } + rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + // itemDef // Drain FPS + // { + // name gl2options + // group optionsGrp + // type ITEM_TYPE_YESNO + // text "Cube mapped environments:" + // cvar "r_cubeMapping" + // rect SCONTENT_X (SCONTENT_Y+(9*ELEM_H)) SCONTENT_W ELEM_H + // textalign ALIGN_RIGHT + // textvalign VALIGN_CENTER + // textalignx SCONTENT_OFF + // textscale .25 + // forecolor 1 1 1 1 + // visible MENU_TRUE + // action + // { + // play "sound/misc/menu1.wav"; + // } + // } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_YESNO + text "Draw Sun Rays:" + cvar "r_drawSunRays" + rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_YESNO + text "Draw Sun:" + cvar "r_drawSun" + rect SCONTENT_X (SCONTENT_Y+(9*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_YESNO + text "Sun Shadows:" + cvar "r_sunShadows" + rect SCONTENT_X (SCONTENT_Y+(10*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_MULTI + text "Sunlight Mode:" + cvar "r_sunlightMode" + + cvarFloatList { "None" 0 "Multiply (Good Quality)" 1 "Add (Best Quality)" 2 } + rect SCONTENT_X (SCONTENT_Y+(11*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_MULTI + text "Dynamic Lights Mode:" + cvar "r_dlightMode" + + cvarFloatList { "Off" 0 "Lighting, No Shadows" 1 "Light & Shadows" 2 } + rect SCONTENT_X (SCONTENT_Y+(12*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gl2options + group optionsGrp + type ITEM_TYPE_BUTTON + text "APPLY" + textscale .25 + style WINDOW_STYLE_EMPTY + rect SCONTENT_X (SCONTENT_Y+(13*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + exec "vid_restart" + } + } + //////// GFX SOFTWARE itemDef @@ -1908,7 +2349,7 @@ text "GFX Software" group optionsGrp style WINDOW_STYLE_EMPTY - rect 0 ((2*BORDER)+TOPBUTT_H+(1*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + rect 0 ((2*BORDER)+TOPBUTT_H+(2*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H type ITEM_TYPE_BUTTON textalign ALIGN_RIGHT textvalign VALIGN_CENTER @@ -1956,6 +2397,24 @@ visible MENU_FALSE } + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_EDITFIELD + style WINDOW_STYLE_EMPTY + text "FOV offset:" + cvar "cg_fovOffset" + maxchars 3 + rect CONTENT_X (CONTENT_Y+(2*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + } + itemDef { name gsoftware @@ -1963,7 +2422,28 @@ type ITEM_TYPE_YESNO text "Marks On Walls:" cvar "cg_marks" - rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H + rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx SCONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + } + } + + itemDef + { + name gsoftware + group optionsGrp + type ITEM_TYPE_MULTI + text "Animated creep tag:" + cvar "cg_animatedCreep" + cvarFloatList { "No" 0 "Full frame ^0(Need reload)" 1 "Half frame ^0(Need reload)" 2 "1/4 frame ^0(Need reload)" 4} + rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER textalignx SCONTENT_OFF @@ -1983,7 +2463,7 @@ type ITEM_TYPE_YESNO text "Dynamic Lights:" cvar "r_dynamiclight" - rect SCONTENT_X (SCONTENT_Y+(3*ELEM_H)) SCONTENT_W ELEM_H + rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER textalignx SCONTENT_OFF @@ -2003,7 +2483,7 @@ type ITEM_TYPE_YESNO text "Draw Gun:" cvar "cg_drawGun" - rect SCONTENT_X (SCONTENT_Y+(4*ELEM_H)) SCONTENT_W ELEM_H + rect SCONTENT_X (SCONTENT_Y+(6*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER textalignx SCONTENT_OFF @@ -2023,7 +2503,7 @@ type ITEM_TYPE_YESNO text "Low Quality Sky:" cvar "r_fastsky" - rect SCONTENT_X (SCONTENT_Y+(5*ELEM_H)) SCONTENT_W ELEM_H + rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER textalignx SCONTENT_OFF @@ -2043,7 +2523,7 @@ type ITEM_TYPE_YESNO text "Sync Every Frame:" cvar "r_finish" - rect SCONTENT_X (SCONTENT_Y+(6*ELEM_H)) SCONTENT_W ELEM_H + rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER textalignx SCONTENT_OFF @@ -2063,7 +2543,7 @@ type ITEM_TYPE_YESNO text "In Game Videos:" cvar "r_inGameVideo" - rect SCONTENT_X (SCONTENT_Y+(7*ELEM_H)) SCONTENT_W ELEM_H + rect SCONTENT_X (SCONTENT_Y+(9*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER textalignx SCONTENT_OFF @@ -2083,7 +2563,7 @@ type ITEM_TYPE_YESNO text "Depth Sort Particles:" cvar "cg_depthSortParticles" - rect SCONTENT_X (SCONTENT_Y+(8*ELEM_H)) SCONTENT_W ELEM_H + rect SCONTENT_X (SCONTENT_Y+(10*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER textalignx SCONTENT_OFF @@ -2104,7 +2584,7 @@ text "Particle Physics:" cvar "cg_bounceParticles" cvarFloatList { "Low Quality" 0 "High Quality" 1 } - rect SCONTENT_X (SCONTENT_Y+(9*ELEM_H)) SCONTENT_W ELEM_H + rect SCONTENT_X (SCONTENT_Y+(11*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER textalignx SCONTENT_OFF @@ -2125,7 +2605,7 @@ text "Light Flares:" cvar "cg_lightFlare" cvarFloatList { "Off" 0 "No Fade" 1 "Timed Fade" 2 "Real Fade" 3 } - rect SCONTENT_X (SCONTENT_Y+(10*ELEM_H)) SCONTENT_W ELEM_H + rect SCONTENT_X (SCONTENT_Y+(12*ELEM_H)) SCONTENT_W ELEM_H textalign ALIGN_RIGHT textvalign VALIGN_CENTER textalignx SCONTENT_OFF @@ -2137,7 +2617,6 @@ play "sound/misc/menu1.wav"; } } - //////// GL INFO itemDef @@ -2146,7 +2625,7 @@ text "OpenGL Info" group optionsGrp style WINDOW_STYLE_EMPTY - rect 0 ((2*BORDER)+TOPBUTT_H+(2*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + rect 0 ((2*BORDER)+TOPBUTT_H+(3*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H type ITEM_TYPE_BUTTON textalign ALIGN_RIGHT textvalign VALIGN_CENTER @@ -2186,7 +2665,7 @@ text "Net & Sound" group optionsGrp style WINDOW_STYLE_EMPTY - rect 0 ((2*BORDER)+TOPBUTT_H+(3*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + rect 0 ((2*BORDER)+TOPBUTT_H+(4*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H type ITEM_TYPE_BUTTON textalign ALIGN_RIGHT textvalign VALIGN_CENTER @@ -2384,7 +2863,7 @@ text "Range Markers" group optionsGrp style WINDOW_STYLE_EMPTY - rect 0 ((2*BORDER)+TOPBUTT_H+(4*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H + rect 0 ((2*BORDER)+TOPBUTT_H+(5*SIDEBUTT_H)) SIDEBUTT_W SIDEBUTT_H type ITEM_TYPE_BUTTON textalign ALIGN_RIGHT textvalign VALIGN_CENTER @@ -2573,5 +3052,5 @@ forecolor 1 1 1 1 visible MENU_FALSE } - } + } diff --git a/assets/ui/install_update.menu b/assets/ui/install_update.menu index 8c811336f..e8a404659 100644 --- a/assets/ui/install_update.menu +++ b/assets/ui/install_update.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -31,7 +32,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED popup onOpen @@ -49,12 +50,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 .75 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_KCGRADIENT + + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } @@ -95,7 +98,7 @@ // { // play "sound/misc/menu1.wav"; // uiScript DownloadUpdate; -// close install_update +// close install_update // } // } // @@ -118,7 +121,7 @@ // { // play "sound/misc/menu1.wav"; // uiScript InstallUpdate; -// close install_update +// close install_update // } // } diff --git a/assets/ui/joinserver.menu b/assets/ui/joinserver.menu index ad3e04d70..c76010bab 100644 --- a/assets/ui/joinserver.menu +++ b/assets/ui/joinserver.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -51,9 +52,10 @@ visible MENU_FALSE fullscreen MENU_TRUE rect 0 0 W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR outOfBoundsClick - style WINDOW_STYLE_EMPTY + style WINDOW_STYLE_SHADER + background "ui/assets/mainmenu.jpg" aspectBias ASPECT_NONE onOpen { @@ -67,16 +69,6 @@ onEsc { uiScript closeJoin } - itemDef - { - name background - rect 0 0 W H - style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 - visible MENU_TRUE - decoration - } - // VIEW OPTIONS // @@ -244,7 +236,7 @@ border WINDOW_BORDER_FULL bordercolor 0.5 0.5 0.5 1 forecolor 1 1 1 1 - backcolor 0 0 0 0 + backcolor 0 0 0 0.5 outlinecolor 0.1 0.1 0.1 0.5 visible MENU_TRUE action @@ -252,10 +244,10 @@ play "sound/misc/menu1.wav"; uiScript ServerSort 0; - setitemcolor grpColumn backcolor 0 0 0 0; - setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor grpColumn backcolor 0 0 0 0.5; + setitemcolor grpTabs backcolor 0 0 0 0.5; setitemcolor server backcolor 0.3 1 1 0.3; - setitemcolor serverColumn backcolor 0.2 0.6 0.6 0.1; + setitemcolor serverColumn backcolor 0.2 0.6 0.6 0.2; } } @@ -266,7 +258,7 @@ rect LIST_X (LIST_Y+HEADFOOT_H) (SERVER_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL - backcolor 0 0 0 0 + backcolor 0 0 0 0.5 bordersize 1 bordercolor .5 .5 .5 1 visible MENU_TRUE @@ -288,7 +280,7 @@ border WINDOW_BORDER_FULL bordercolor 0.5 0.5 0.5 1 forecolor 1 1 1 1 - backcolor 0 0 0 0 + backcolor 0 0 0 0.5 outlinecolor 0.1 0.1 0.1 0.5 visible MENU_TRUE action @@ -296,10 +288,10 @@ play "sound/misc/menu1.wav"; uiScript ServerSort 1; - setitemcolor grpColumn backcolor 0 0 0 0; - setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor grpColumn backcolor 0 0 0 0.5; + setitemcolor grpTabs backcolor 0 0 0 0.5; setitemcolor game backcolor 0.3 1 1 0.3; - setitemcolor gameColumn backcolor 0.2 0.6 0.6 0.1; + setitemcolor gameColumn backcolor 0.2 0.6 0.6 0.2; } } @@ -310,7 +302,7 @@ rect (LIST_X+(SERVER_C*LIST_W)) (LIST_Y+HEADFOOT_H) (GAME_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL - backcolor 0 0 0 0 + backcolor 0 0 0 0.5 bordersize 1 bordercolor .5 .5 .5 1 visible MENU_TRUE @@ -332,7 +324,7 @@ border WINDOW_BORDER_FULL bordercolor 0.5 0.5 0.5 1 forecolor 1 1 1 1 - backcolor 0 0 0 0 + backcolor 0 0 0 0.5 outlinecolor 0.1 0.1 0.1 0.5 visible MENU_TRUE action @@ -340,10 +332,10 @@ play "sound/misc/menu1.wav"; uiScript ServerSort 2; - setitemcolor grpColumn backcolor 0 0 0 0; - setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor grpColumn backcolor 0 0 0 0.5; + setitemcolor grpTabs backcolor 0 0 0 0.5; setitemcolor map backcolor 0.3 1 1 0.3; - setitemcolor mapColumn backcolor 0.2 0.6 0.6 0.1; + setitemcolor mapColumn backcolor 0.2 0.6 0.6 0.2; } } @@ -354,7 +346,7 @@ rect (LIST_X+((SERVER_C+GAME_C)*LIST_W)) (LIST_Y+HEADFOOT_H) (MAP_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL - backcolor 0 0 0 0 + backcolor 0 0 0 0.5 bordersize 1 bordercolor .5 .5 .5 1 visible MENU_TRUE @@ -376,7 +368,7 @@ border WINDOW_BORDER_FULL bordercolor 0.5 0.5 0.5 1 forecolor 1 1 1 1 - backcolor 0 0 0 0 + backcolor 0 0 0 0.5 outlinecolor 0.1 0.1 0.1 0.5 visible MENU_TRUE action @@ -384,10 +376,10 @@ play "sound/misc/menu1.wav"; uiScript ServerSort 3; - setitemcolor grpColumn backcolor 0 0 0 0; - setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor grpColumn backcolor 0 0 0 0.5; + setitemcolor grpTabs backcolor 0 0 0 0.5; setitemcolor players backcolor 0.3 1 1 0.3; - setitemcolor playerColumn backcolor 0.2 0.6 0.6 0.1; + setitemcolor playerColumn backcolor 0.2 0.6 0.6 0.2; } } @@ -398,7 +390,7 @@ rect (LIST_X+((SERVER_C+GAME_C+MAP_C)*LIST_W)) (LIST_Y+HEADFOOT_H) (PLAYERS_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL - backcolor 0 0 0 0 + backcolor 0 0 0 0.5 bordersize 1 bordercolor .5 .5 .5 1 visible MENU_TRUE @@ -428,10 +420,10 @@ play "sound/misc/menu1.wav"; uiScript ServerSort 4; - setitemcolor grpColumn backcolor 0 0 0 0; - setitemcolor grpTabs backcolor 0 0 0 0; + setitemcolor grpColumn backcolor 0 0 0 0.5; + setitemcolor grpTabs backcolor 0 0 0 0.5; setitemcolor ping backcolor 0.3 1 1 0.3; - setitemcolor pingColumn backcolor 0.2 0.6 0.6 0.1; + setitemcolor pingColumn backcolor 0.2 0.6 0.6 0.2; } } @@ -442,7 +434,7 @@ rect (LIST_X+((SERVER_C+GAME_C+MAP_C+PLAYERS_C)*LIST_W)) (LIST_Y+HEADFOOT_H) (PING_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL - backcolor 0.2 0.6 0.6 0.1 + backcolor 0.2 0.6 0.6 0.2 bordersize 1 bordercolor .5 .5 .5 1 visible MENU_TRUE @@ -487,12 +479,14 @@ ownerdraw UI_SERVERREFRESHDATE textscale .33 rect LIST_X (LIST_Y+(LIST_H-HEADFOOT_H)) (LIST_W/2) HEADFOOT_H + style WINDOW_STYLE_FILLED textalign ALIGN_LEFT textvalign VALIGN_CENTER textalignx LIST_TOFF forecolor 1 1 1 1 border WINDOW_BORDER_FULL bordercolor .5 .5 .5 1 + backcolor 0 0 0 .5 visible MENU_TRUE decoration } @@ -503,12 +497,14 @@ ownerdraw UI_SERVERMOTD textscale .33 rect (LIST_X+(LIST_W/2)) (LIST_Y+(LIST_H-HEADFOOT_H)) (LIST_W/2) HEADFOOT_H + style WINDOW_STYLE_FILLED textalign ALIGN_LEFT textvalign VALIGN_CENTER textalignx LIST_TOFF forecolor 1 1 1 1 border WINDOW_BORDER_FULL bordercolor .5 .5 .5 1 + backcolor 0 0 0 .5 visible MENU_TRUE decoration } @@ -661,7 +657,7 @@ { name back style WINDOW_STYLE_SHADER - background "ui/assets/backarrow.tga" + background "ui/assets/backarrow.png" rect BCJ_X BCJ_Y ARROW_H ARROW_W aspectBias ALIGN_LEFT visible MENU_TRUE @@ -682,7 +678,7 @@ { name back_alt style WINDOW_STYLE_SHADER - background "ui/assets/backarrow_alt.tga" + background "ui/assets/backarrow_alt.png" rect BCJ_X BCJ_Y ARROW_H ARROW_W aspectBias ALIGN_LEFT backcolor 0 0 0 0 @@ -718,7 +714,7 @@ style WINDOW_STYLE_SHADER rect ((BCJ_X+BCJ_W)-ARROW_W) BCJ_Y ARROW_H ARROW_W aspectBias ALIGN_RIGHT - background "ui/assets/forwardarrow.tga" + background "ui/assets/forwardarrow.png" backcolor 0 0 0 0 forecolor 1 1 1 1 visible MENU_TRUE @@ -741,7 +737,7 @@ style WINDOW_STYLE_SHADER rect ((BCJ_X+BCJ_W)-ARROW_W) BCJ_Y ARROW_H ARROW_W aspectBias ALIGN_RIGHT - background "ui/assets/forwardarrow_alt.tga" + background "ui/assets/forwardarrow_alt.png" backcolor 0 0 0 0 type ITEM_TYPE_BUTTON forecolor 1 1 1 1 diff --git a/assets/ui/loading.menu b/assets/ui/loading.menu index b877ce9ce..1c7140932 100644 --- a/assets/ui/loading.menu +++ b/assets/ui/loading.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -33,7 +34,7 @@ assetGlobalDef { - cursor "ui/assets/3_cursor3" // cursor + cursor "ui/assets/cursor" // cursor gradientBar "ui/assets/gradientbar2.tga" // gradient bar fadeClamp 1.0 // sets the fadeup alpha fadeCycle 1 // how often fade happens in milliseconds @@ -54,16 +55,8 @@ rect 0 0 W H fullScreen MENU_TRUE aspectBias ASPECT_NONE - - itemDef - { - name background - rect 0 0 W H - style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 - visible MENU_TRUE - decoration - } + style WINDOW_STYLE_SHADER + background "ui/assets/mainmenu.jpg" itemDef { @@ -128,6 +121,7 @@ visible MENU_TRUE decoration forecolor 0.0 0.8 1 1 + backcolor 0.0 0.8 1 0.5 ownerdraw CG_LOAD_MEDIA textalign ALIGN_CENTER textstyle ITEM_TEXTSTYLE_NEON @@ -157,6 +151,7 @@ visible MENU_TRUE decoration forecolor 0.0 0.8 1 1 + backcolor 0.0 0.8 1 0.5 ownerdraw CG_LOAD_BUILDABLES textalign ALIGN_CENTER textstyle ITEM_TEXTSTYLE_NEON @@ -185,6 +180,7 @@ visible MENU_TRUE decoration forecolor 0.0 0.8 1 1 + backcolor 0.0 0.8 1 0.5 ownerdraw CG_LOAD_CHARMODEL textalign ALIGN_CENTER textstyle ITEM_TEXTSTYLE_NEON @@ -213,6 +209,7 @@ visible MENU_TRUE decoration forecolor 0.0 0.8 1 1 + backcolor 0.0 0.8 1 0.5 ownerdraw CG_LOAD_OVERALL textalign ALIGN_CENTER textstyle ITEM_TEXTSTYLE_NEON diff --git a/assets/ui/main.menu b/assets/ui/main.menu index fddc0d91e..38e812cdc 100644 --- a/assets/ui/main.menu +++ b/assets/ui/main.menu @@ -1,5 +1,6 @@ -// vim:ft=menu +focusColor WINDOW_FOCUSCOLOR// vim:ft=menu #include "ui/menudef.h" +#include "ui/menustyle.h" #include "ui/menu_bool.h" { @@ -8,7 +9,7 @@ font "fonts/font" 26// font smallFont "fonts/smallfont" 20// font bigFont "fonts/bigfont" 34// font - cursor "ui/assets/3_cursor3" // cursor + cursor "ui/assets/cursor" // cursor gradientBar "ui/assets/gradientbar2.tga" // gradient bar itemFocusSound "sound/misc/menu2.wav" // sound for item getting focus (via keyboard or mouse ) @@ -26,7 +27,7 @@ fullscreen true rect 0 0 640 480// Size and position of the menu visible true // Visible on open - focuscolor 1 .75 0 1// Menu focus color for text and items + focusColor WINDOW_FOCUSCOLOR// Menu focus color for text and items background "ui/assets/mainmenu.jpg" aspectbias ASPECT_NONE @@ -44,11 +45,12 @@ itemDef { name splashmodel - rect 0 0 640 480 + rect -320 0 1280 480 type ITEM_TYPE_MODEL style WINDOW_STYLE_EMPTY + aspectBias ALIGN_CENTER // Allow our HD model to be "responsive" asset_model "models/splash/splash_screen.md3" - model_fovx 32.0 + model_fovx 60.0 model_fovy 24.0 model_angle 180 visible MENU_TRUE diff --git a/assets/ui/menudef.h b/assets/ui/menudef.h index f83ba536e..0a6ef5c93 100644 --- a/assets/ui/menudef.h +++ b/assets/ui/menudef.h @@ -51,11 +51,19 @@ enum enum { - WINDOW_BORDER_NONE, // no border - WINDOW_BORDER_FULL, // full border based on border color (single pixel) - WINDOW_BORDER_HORZ, // horizontal borders only - WINDOW_BORDER_VERT, // vertical borders only - WINDOW_BORDER_KCGRADIENT // horizontal border using the gradient bars + WINDOW_BORDER_NONE, // no border + WINDOW_BORDER_FULL, // full border based on border color (single pixel) + WINDOW_BORDER_HORZ, // horizontal borders only + WINDOW_BORDER_VERT, // vertical borders only + WINDOW_BORDER_KCGRADIENT, // horizontal border using the gradient bars + WINDOW_BORDER_ROUNDED // full rounded +}; + +enum +{ + BORDER_SQUARE, // as WINDOW_BORDER_FULL + BORDER_ROUNDED, // rounded + BORDER_FOLD // fold paper }; enum @@ -112,7 +120,7 @@ enum FEEDER_HELP_LIST, // help topics FEEDER_RESOLUTIONS, // display resolutions FEEDER_TREMVOICECMD, // voice commands - FEEDER_GITHUB_RELEASE // latest update info + FEEDER_GITHUB_RELEASE // latest update info }; // display flags @@ -187,6 +195,7 @@ enum CG_LAGOMETER, CG_SPEEDOMETER, CG_PLAYER_CROSSHAIRNAMES, + CG_TEAM_STATUS, CG_STAGE_REPORT_TEXT, CG_ALIENS_SCORE_LABEL, CG_HUMANS_SCORE_LABEL, @@ -199,6 +208,8 @@ enum CG_KILLFEED, CG_PLAYER_THZ_SCANNER, + UI_DOWNLOAD_OVERALL, + UI_NETSOURCE, UI_NETMAPPREVIEW, UI_NETMAPCINEMATIC, @@ -210,13 +221,20 @@ enum UI_SELECTEDMAPNAME, UI_TEAMINFOPANE, + UI_TEAMINFOPANEMODEL, UI_ACLASSINFOPANE, + UI_ACLASSINFOPANEMODEL, UI_AUPGRADEINFOPANE, + UI_AUPGRADEINFOPANEMODEL, UI_HITEMINFOPANE, + UI_HITEMINFOPANEMODEL, UI_HBUYINFOPANE, + UI_HBUYINFOPANEMODEL, UI_HSELLINFOPANE, UI_ABUILDINFOPANE, + UI_ABUILDINFOPANEMODEL, UI_HBUILDINFOPANE, + UI_HBUILDINFOPANEMODEL, UI_HELPINFOPANE, UI_VOICECMDINFOPANE diff --git a/assets/ui/menustyle.h b/assets/ui/menustyle.h new file mode 100644 index 000000000..eceac9942 --- /dev/null +++ b/assets/ui/menustyle.h @@ -0,0 +1,33 @@ +#ifndef MENUSTYLE_H +# define MENUSTYLE_H + +# define BORDER_STYLE_FULL_ROUNDED BORDER_ROUNDED BORDER_ROUNDED BORDER_ROUNDED BORDER_ROUNDED +# define BORDER_STYLE_FULL_FOLD BORDER_FOLD BORDER_FOLD BORDER_FOLD BORDER_FOLD +# define WINDOW_OPACITY .85 +# define WINDOW_BACKCOLOR 0 0 0 WINDOW_OPACITY +# define WINDOW_FOCUSCOLOR 1 .75 0 1 +# define WINDOW_BORDER 0.5 0.5 0.5 (WINDOW_OPACITY/2) +# define WINDOW_BORDER_STYLE BORDER_STYLE_FULL_ROUNDED +# define BORDER_STYLE BORDER_ROUNDED + +# define ALIENS_WINDOW_BACKCOLOR .05 0 0 WINDOW_OPACITY +# define ALIENS_WINDOW_FOCUSCOLOR 1 .25 .25 1 +# define ALIENS_WINDOW_BORDER 0.6 0.5 0.5 (WINDOW_OPACITY/2) +# define ALIENS_WINDOW_BORDER_STYLE BORDER_STYLE_FULL_ROUNDED +# define ALIENS_BORDER_STYLE BORDER_ROUNDED +# define ALIENS_TEXT_COLOR 1 .2 .2 1 +# define ALIENS_TEXT_SECONDARY_COLOR .8 .3 .3 .8 +# define ALIENS_BACKGROUND_COLOR .1 0 0 +# define ALIENS_BORDER_COLOR .6 .45 .45 + +# define HUMANS_WINDOW_BACKCOLOR 0 .025 .05 WINDOW_OPACITY +# define HUMANS_WINDOW_FOCUSCOLOR 0.4 .7 1 1 +# define HUMANS_WINDOW_BORDER 0.5 0.55 0.6 (WINDOW_OPACITY/2) +# define HUMANS_WINDOW_BORDER_STYLE BORDER_STYLE_FULL_FOLD +# define HUMANS_BORDER_STYLE BORDER_FOLD +# define HUMANS_TEXT_COLOR .2 .6 1 1 +# define HUMANS_TEXT_SECONDARY_COLOR .3 .55 .8 .8 +# define HUMANS_BACKGROUND_COLOR 0 .05 .1 +# define HUMANS_BORDER_COLOR .45 .525 .6 + +#endif diff --git a/assets/ui/mod.menu b/assets/ui/mod.menu index 38bee621c..b028f92de 100644 --- a/assets/ui/mod.menu +++ b/assets/ui/mod.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ MOD \\ @@ -15,7 +16,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -33,13 +34,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef diff --git a/assets/ui/news.menu b/assets/ui/news.menu index 99d8d68fb..b9e40b72a 100644 --- a/assets/ui/news.menu +++ b/assets/ui/news.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ NEWS POPUP MENU \\ @@ -17,7 +18,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -33,13 +34,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef @@ -98,5 +100,3 @@ } } } - - diff --git a/assets/ui/options.menu b/assets/ui/options.menu index 6427f6c9b..6ced50df9 100644 --- a/assets/ui/options.menu +++ b/assets/ui/options.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ FRONT END OPTIONS BOX \\ @@ -21,7 +22,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -36,13 +37,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } diff --git a/assets/ui/password.menu b/assets/ui/password.menu index d6ac4cd43..10adcaea8 100644 --- a/assets/ui/password.menu +++ b/assets/ui/password.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ PASSWORD POPUP MENU \\ @@ -16,7 +17,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -36,13 +37,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } // PASSWORD // diff --git a/assets/ui/quit.menu b/assets/ui/quit.menu index 0bd2e903f..ef67b3506 100644 --- a/assets/ui/quit.menu +++ b/assets/ui/quit.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ QUIT POPUP MENU \\ @@ -12,7 +13,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -28,13 +29,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } @@ -95,5 +97,3 @@ } } } - - diff --git a/assets/ui/quitcredit.menu b/assets/ui/quitcredit.menu index 14a8f4fcf..0f4e46527 100644 --- a/assets/ui/quitcredit.menu +++ b/assets/ui/quitcredit.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ QUIT CREDIT \\ @@ -9,7 +10,7 @@ visible MENU_FALSE fullscreen MENU_TRUE rect 0 0 640 480 - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_NONE aspectBias ASPECT_NONE diff --git a/assets/ui/say.menu b/assets/ui/say.menu index 2bd3015f4..50cf9cf31 100644 --- a/assets/ui/say.menu +++ b/assets/ui/say.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" #include "ui/menu_bool.h" { diff --git a/assets/ui/serverinfo.menu b/assets/ui/serverinfo.menu index 596712c71..983ad5486 100644 --- a/assets/ui/serverinfo.menu +++ b/assets/ui/serverinfo.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ SERVER INFO POPUP MENU \\ @@ -19,7 +20,7 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED border WINDOW_BORDER_FULL popup @@ -35,13 +36,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef @@ -53,9 +55,10 @@ elementwidth 120 elementheight 16 textscale .25 - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordersize 1 bordercolor .5 .5 .5 1 + borderStyle BORDER_STYLE BORDER_STYLE BORDER_SQUARE BORDER_SQUARE elementtype LISTBOX_TEXT feeder FEEDER_SERVERSTATUS notselectable @@ -108,5 +111,3 @@ } } } - - diff --git a/assets/ui/teamscore.menu b/assets/ui/teamscore.menu index 65893a049..ff253e680 100644 --- a/assets/ui/teamscore.menu +++ b/assets/ui/teamscore.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { \\ score_menu \\ @@ -6,6 +7,7 @@ #define W 500 #define H 338 #define BORDER 10 +#define SPACE 1 #define TOFF 10 #define SPEC_W 75 @@ -22,9 +24,26 @@ visible MENU_FALSE fullscreen MENU_FALSE rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor .75 .75 .75 1 // Avoid focus style WINDOW_STYLE_EMPTY + + // TEAM STATUS // + + itemDef + { + name teamStatus + textalign ALIGN_CENTER + textvalign VALIGN_CENTER + textscale 0.38 + rect 0 (-BAR_H - SPACE) W BAR_H + forecolor 1 1 1 1 + decoration + visible MENU_TRUE + textstyle ITEM_TEXTSTYLE_SHADOWED + ownerdraw CG_TEAM_STATUS + } + // TEAM NAME // itemDef @@ -32,7 +51,7 @@ name teamNameWindow rect 0 0 W BAR_H style WINDOW_STYLE_FILLED - border WINDOW_BORDER_FULL + border WINDOW_BORDER_KCGRADIENT borderSize 1.0 bordercolor .5 .5 .5 1 forecolor 1 1 1 1 @@ -49,7 +68,7 @@ textalignx TOFF textscale 0.4 rect 0 0 (W/3) BAR_H - forecolor 1 1 1 1 + forecolor ALIENS_TEXT_COLOR decoration visible MENU_TRUE ownerdraw CG_ALIENS_SCORE_LABEL @@ -76,7 +95,7 @@ textalignx -TOFF textscale 0.4 rect ((2*W)/3) 0 (W/3) BAR_H - forecolor 1 1 1 1 + forecolor HUMANS_TEXT_COLOR decoration visible MENU_TRUE ownerdraw CG_HUMANS_SCORE_LABEL @@ -86,26 +105,12 @@ itemDef { - name leftteambar - rect 0 (BAR_H+BORDER) (W/2) BAR_H + name teambar + rect 0 (BAR_H+BORDER) W BAR_H style WINDOW_STYLE_FILLED - border WINDOW_BORDER_FULL + border WINDOW_BORDER_KCGRADIENT borderSize 1.0 - bordercolor .5 .5 .5 1 - forecolor 1 1 1 1 - backcolor 0 0 0 .8 - visible MENU_TRUE - decoration - } - - itemDef - { - name rightteambar - rect (W/2) (BAR_H+BORDER) (W/2) BAR_H - style WINDOW_STYLE_FILLED - border WINDOW_BORDER_FULL - borderSize 1.0 - bordercolor .5 .5 .5 1 + bordercolor .5 .5 .5 .5 forecolor 1 1 1 1 backcolor 0 0 0 .8 visible MENU_TRUE @@ -125,7 +130,7 @@ textalign ALIGN_LEFT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor ALIENS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -140,7 +145,7 @@ textalign ALIGN_LEFT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor ALIENS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -155,7 +160,7 @@ textalign ALIGN_RIGHT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor ALIENS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -170,7 +175,7 @@ textalign ALIGN_RIGHT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor ALIENS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -185,7 +190,7 @@ textalign ALIGN_RIGHT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor ALIENS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -200,7 +205,7 @@ textalign ALIGN_LEFT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor HUMANS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -215,7 +220,7 @@ textalign ALIGN_LEFT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor HUMANS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -230,7 +235,7 @@ textalign ALIGN_RIGHT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor HUMANS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -245,7 +250,7 @@ textalign ALIGN_RIGHT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor HUMANS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -260,7 +265,7 @@ textalign ALIGN_RIGHT textvalign VALIGN_CENTER backcolor 0 0 0 0 - forecolor 1 .75 0 1 + forecolor HUMANS_TEXT_SECONDARY_COLOR decoration visible MENU_TRUE } @@ -268,12 +273,13 @@ itemDef { name leftlist - rect 0 ((2*BAR_H)+BORDER) (W/2) (H-((3*BAR_H)+(2*BORDER))) + rect 0 ((2*BAR_H)+BORDER+SPACE) (W/2) (H-((3*BAR_H)+(2*BORDER)+SPACE)) style WINDOW_STYLE_FILLED - backcolor 0 0 0 .6 - border WINDOW_BORDER_FULL + backcolor ALIENS_BACKGROUND_COLOR .6 + border WINDOW_BORDER_ROUNDED borderSize 1.0 - bordercolor .5 .5 .5 1 + bordercolor ALIENS_BORDER_COLOR 0 + borderStyle BORDER_SQUARE BORDER_SQUARE BORDER_SQUARE ALIENS_BORDER_STYLE forecolor .75 .75 .75 1 visible MENU_TRUE type ITEM_TYPE_LISTBOX @@ -297,12 +303,13 @@ itemDef { name rightlist - rect (W/2) ((2*BAR_H)+BORDER) (W/2) (H-((3*BAR_H)+(2*BORDER))) + rect (W/2) ((2*BAR_H)+BORDER+SPACE) (W/2) (H-((3*BAR_H)+(2*BORDER)+SPACE)) style WINDOW_STYLE_FILLED - backcolor 0 0 0 .6 - border WINDOW_BORDER_FULL + backcolor HUMANS_BACKGROUND_COLOR .6 + border WINDOW_BORDER_ROUNDED borderSize 1.0 - bordercolor .5 .5 .5 1 + bordercolor HUMANS_BORDER_COLOR 0 + borderStyle BORDER_SQUARE BORDER_SQUARE HUMANS_BORDER_STYLE BORDER_SQUARE forecolor .75 .75 .75 1 visible MENU_TRUE type ITEM_TYPE_LISTBOX @@ -330,7 +337,7 @@ name window rect 0 (H-BAR_H) W BAR_H style WINDOW_STYLE_FILLED - border WINDOW_BORDER_FULL + border WINDOW_BORDER_KCGRADIENT borderSize 1.0 bordercolor .5 .5 .5 1 backcolor 0 0 0 .8 diff --git a/assets/ui/tremulous_alien_builder_hud.menu b/assets/ui/tremulous_alien_builder_hud.menu index b5322646a..2ef8fe894 100644 --- a/assets/ui/tremulous_alien_builder_hud.menu +++ b/assets/ui/tremulous_alien_builder_hud.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { diff --git a/assets/ui/tremulous_alien_general_hud.menu b/assets/ui/tremulous_alien_general_hud.menu index df1352d1e..87c64501b 100644 --- a/assets/ui/tremulous_alien_general_hud.menu +++ b/assets/ui/tremulous_alien_general_hud.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { diff --git a/assets/ui/tremulous_alienbuild.menu b/assets/ui/tremulous_alienbuild.menu index 127b769d9..9c41da3d3 100644 --- a/assets/ui/tremulous_alienbuild.menu +++ b/assets/ui/tremulous_alienbuild.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -20,6 +21,9 @@ #define INFO_Y BORDER #define INFO_TOFF 6 +#define MODEL_W (32*4+2*BORDER) +#define MODEL_H (24*4) + menuDef { name "tremulous_alienbuild" @@ -27,7 +31,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor ALIENS_WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED popup onOpen { uiScript LoadAlienBuilds; setFocus list } @@ -38,12 +42,14 @@ rect 0 0 W H style WINDOW_STYLE_FILLED backcolor 0 0 0 1 + backcolor ALIENS_WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor ALIENS_WINDOW_BORDER + borderStyle ALIENS_WINDOW_BORDER_STYLE } itemDef @@ -57,8 +63,9 @@ textscale .33 elementtype LISTBOX_TEXT feeder FEEDER_TREMALIENBUILD - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle ALIENS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE ALIENS_BORDER_STYLE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 @@ -71,6 +78,17 @@ } } + itemDef + { + name infopane_model + ownerdraw UI_ABUILDINFOPANEMODEL + rect (INFO_X+INFO_W-MODEL_W+1) (INFO_Y+INFO_H-MODEL_H+1) MODEL_W MODEL_H + style WINDOW_STYLE_EMPTY + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + } + itemDef { name infopane @@ -83,8 +101,9 @@ textvalign VALIGN_TOP textalignx INFO_TOFF textaligny INFO_TOFF - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle BORDER_SQUARE ALIENS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 diff --git a/assets/ui/tremulous_alienclass.menu b/assets/ui/tremulous_alienclass.menu index 441e27fd8..6a10e6c61 100644 --- a/assets/ui/tremulous_alienclass.menu +++ b/assets/ui/tremulous_alienclass.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -20,6 +21,9 @@ #define INFO_Y BORDER #define INFO_TOFF 6 +#define MODEL_W (32*4+2*BORDER) +#define MODEL_H (24*4) + menuDef { name "tremulous_alienclass" @@ -27,7 +31,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor ALIENS_WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED popup onOpen { uiScript LoadAlienClasses; setFocus list } @@ -37,13 +41,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor ALIENS_WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor ALIENS_WINDOW_BORDER + borderStyle ALIENS_WINDOW_BORDER_STYLE } itemDef @@ -57,8 +62,9 @@ textscale .33 elementtype LISTBOX_TEXT feeder FEEDER_TREMALIENCLASSES - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle ALIENS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE ALIENS_BORDER_STYLE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 @@ -71,6 +77,17 @@ } } + itemDef + { + name infopane_model + ownerdraw UI_ACLASSINFOPANEMODEL + rect (INFO_X+INFO_W-MODEL_W+1) (INFO_Y+INFO_H-MODEL_H+1) MODEL_W MODEL_H + style WINDOW_STYLE_EMPTY + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + } + itemDef { name infopane @@ -83,8 +100,9 @@ textvalign VALIGN_TOP textalignx INFO_TOFF textaligny INFO_TOFF - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle BORDER_SQUARE ALIENS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 diff --git a/assets/ui/tremulous_aliendialogs.menu b/assets/ui/tremulous_aliendialogs.menu index 921d2c850..b3e25dd8d 100644 --- a/assets/ui/tremulous_aliendialogs.menu +++ b/assets/ui/tremulous_aliendialogs.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -21,7 +22,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor ALIENS_WINDOW_FOCUSCOLOR style WINDOW_STYLE_EMPTY popup @@ -30,13 +31,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor ALIENS_WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor ALIENS_WINDOW_BORDER + borderStyle ALIENS_WINDOW_BORDER_STYLE } itemDef diff --git a/assets/ui/tremulous_alienupgrade.menu b/assets/ui/tremulous_alienupgrade.menu index 2ef7bcb2d..10d664766 100644 --- a/assets/ui/tremulous_alienupgrade.menu +++ b/assets/ui/tremulous_alienupgrade.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -20,6 +21,9 @@ #define INFO_Y BORDER #define INFO_TOFF 6 +#define MODEL_W (32*4+2*BORDER) +#define MODEL_H (24*4) + menuDef { name "tremulous_alienupgrade" @@ -27,7 +31,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor ALIENS_WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED popup onOpen { uiScript LoadAlienUpgrades; setFocus list } @@ -37,13 +41,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor ALIENS_WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor ALIENS_WINDOW_BORDER + borderStyle ALIENS_WINDOW_BORDER_STYLE } itemDef @@ -57,8 +62,9 @@ textscale .33 elementtype LISTBOX_TEXT feeder FEEDER_TREMALIENUPGRADE - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle ALIENS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE ALIENS_BORDER_STYLE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 @@ -71,6 +77,17 @@ } } + itemDef + { + name infopane_model + ownerdraw UI_AUPGRADEINFOPANEMODEL + rect (INFO_X+INFO_W-MODEL_W+1) (INFO_Y+INFO_H-MODEL_H+1) MODEL_W MODEL_H + style WINDOW_STYLE_EMPTY + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + } + itemDef { name infopane @@ -83,8 +100,9 @@ textvalign VALIGN_TOP textalignx INFO_TOFF textaligny INFO_TOFF - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle BORDER_SQUARE ALIENS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 diff --git a/assets/ui/tremulous_common_hud.h b/assets/ui/tremulous_common_hud.h index 4fb857b02..6fb32aec0 100644 --- a/assets/ui/tremulous_common_hud.h +++ b/assets/ui/tremulous_common_hud.h @@ -168,7 +168,7 @@ itemDef forecolor 1 1 1 1 textscale 0.3 ownerdraw CG_DEMO_PLAYBACK - background "ui/assets/forwardarrow.tga" + background "ui/assets/forwardarrow.png" } //SNAPSHOT diff --git a/assets/ui/tremulous_default_hud.menu b/assets/ui/tremulous_default_hud.menu index 8d1034b0f..61bafd56c 100644 --- a/assets/ui/tremulous_default_hud.menu +++ b/assets/ui/tremulous_default_hud.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { diff --git a/assets/ui/tremulous_dialogs.menu b/assets/ui/tremulous_dialogs.menu index 63109dc0e..b744e5436 100644 --- a/assets/ui/tremulous_dialogs.menu +++ b/assets/ui/tremulous_dialogs.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -22,7 +23,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_EMPTY popup @@ -31,13 +32,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef diff --git a/assets/ui/tremulous_human_hud.menu b/assets/ui/tremulous_human_hud.menu index f2b4ca991..7c58494d8 100644 --- a/assets/ui/tremulous_human_hud.menu +++ b/assets/ui/tremulous_human_hud.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { diff --git a/assets/ui/tremulous_humanarmoury.menu b/assets/ui/tremulous_humanarmoury.menu index 2df829fe6..df13efcda 100644 --- a/assets/ui/tremulous_humanarmoury.menu +++ b/assets/ui/tremulous_humanarmoury.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -21,6 +22,9 @@ #define INFO_Y BORDER #define INFO_TOFF 6 +#define MODEL_W (32*4+2*BORDER) +#define MODEL_H (24*4) + #define BUTT_X INFO_X #define BUTT_W (INFO_W/3) @@ -31,7 +35,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor HUMANS_WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED popup onOpen @@ -46,13 +50,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor HUMANS_WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor HUMANS_WINDOW_BORDER + borderStyle HUMANS_WINDOW_BORDER_STYLE } itemDef @@ -66,8 +71,9 @@ textscale .33 elementtype LISTBOX_TEXT feeder FEEDER_TREMHUMANARMOURYBUY - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle HUMANS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE HUMANS_BORDER_STYLE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 @@ -91,8 +97,9 @@ textscale .33 elementtype LISTBOX_TEXT feeder FEEDER_TREMHUMANARMOURYSELL - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle BORDER_SQUARE HUMANS_BORDER_STYLE HUMANS_BORDER_STYLE BORDER_SQUARE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 @@ -105,6 +112,17 @@ } } + itemDef + { + name infopane_model + ownerdraw UI_HBUYINFOPANEMODEL + rect (INFO_X+INFO_W-MODEL_W+1) (INFO_Y+INFO_H-MODEL_H+1) MODEL_W MODEL_H + style WINDOW_STYLE_EMPTY + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + } + itemDef { name infopane diff --git a/assets/ui/tremulous_humanbuild.menu b/assets/ui/tremulous_humanbuild.menu index 572957bbf..031841040 100644 --- a/assets/ui/tremulous_humanbuild.menu +++ b/assets/ui/tremulous_humanbuild.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -20,6 +21,9 @@ #define INFO_Y BORDER #define INFO_TOFF 6 +#define MODEL_W (32*4+2*BORDER) +#define MODEL_H (24*4) + menuDef { name "tremulous_humanbuild" @@ -27,7 +31,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor HUMANS_WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED popup onOpen { uiScript LoadHumanBuilds; setFocus list } @@ -37,13 +41,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor HUMANS_WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor HUMANS_WINDOW_BORDER + borderStyle HUMANS_WINDOW_BORDER_STYLE } itemDef @@ -57,8 +62,9 @@ textscale .33 elementtype LISTBOX_TEXT feeder FEEDER_TREMHUMANBUILD - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle HUMANS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE HUMANS_BORDER_STYLE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 @@ -71,6 +77,17 @@ } } + itemDef + { + name infopane_model + ownerdraw UI_HBUILDINFOPANEMODEL + rect (INFO_X+INFO_W-MODEL_W+1) (INFO_Y+INFO_H-MODEL_H+1) MODEL_W MODEL_H + style WINDOW_STYLE_EMPTY + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + } + itemDef { name infopane @@ -83,8 +100,9 @@ textvalign VALIGN_TOP textalignx INFO_TOFF textaligny INFO_TOFF - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle BORDER_SQUARE HUMANS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 visible MENU_TRUE diff --git a/assets/ui/tremulous_humandialogs.menu b/assets/ui/tremulous_humandialogs.menu index 96ba08a80..228b867da 100644 --- a/assets/ui/tremulous_humandialogs.menu +++ b/assets/ui/tremulous_humandialogs.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -22,7 +23,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor HUMANS_WINDOW_FOCUSCOLOR style WINDOW_STYLE_EMPTY popup @@ -31,13 +32,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor HUMANS_WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor HUMANS_WINDOW_BORDER + borderStyle HUMANS_WINDOW_BORDER_STYLE } itemDef diff --git a/assets/ui/tremulous_humanitem.menu b/assets/ui/tremulous_humanitem.menu index 551334beb..885b95d67 100644 --- a/assets/ui/tremulous_humanitem.menu +++ b/assets/ui/tremulous_humanitem.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -20,6 +21,9 @@ #define INFO_Y BORDER #define INFO_TOFF 6 +#define MODEL_W (32*4+2*BORDER) +#define MODEL_H (24*4) + menuDef { name "tremulous_humanitem" @@ -27,7 +31,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor HUMANS_WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED popup onOpen { uiScript LoadHumanItems; setFocus list } @@ -37,13 +41,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor HUMANS_WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor HUMANS_WINDOW_BORDER + borderStyle HUMANS_WINDOW_BORDER_STYLE } itemDef @@ -57,8 +62,9 @@ textscale .33 elementtype LISTBOX_TEXT feeder FEEDER_TREMHUMANITEMS - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle HUMANS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE HUMANS_BORDER_STYLE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 @@ -71,6 +77,17 @@ } } + itemDef + { + name infopane_model + ownerdraw UI_HITEMINFOPANEMODEL + rect (INFO_X+INFO_W-MODEL_W+1) (INFO_Y+INFO_H-MODEL_H+1) MODEL_W MODEL_H + style WINDOW_STYLE_EMPTY + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + } + itemDef { name infopane @@ -83,8 +100,9 @@ textvalign VALIGN_TOP textalignx INFO_TOFF textaligny INFO_TOFF - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle BORDER_SQUARE HUMANS_BORDER_STYLE BORDER_SQUARE BORDER_SQUARE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 diff --git a/assets/ui/tremulous_spectator_hud.menu b/assets/ui/tremulous_spectator_hud.menu index b4a5ff1af..c085233c3 100644 --- a/assets/ui/tremulous_spectator_hud.menu +++ b/assets/ui/tremulous_spectator_hud.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { diff --git a/assets/ui/tremulous_teamselect.menu b/assets/ui/tremulous_teamselect.menu index 70512748c..bf511a451 100644 --- a/assets/ui/tremulous_teamselect.menu +++ b/assets/ui/tremulous_teamselect.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -20,6 +21,9 @@ #define INFO_Y BORDER #define INFO_TOFF 6 +#define MODEL_W (32*4+2*BORDER) +#define MODEL_H (24*4) + menuDef { name "tremulous_teamselect" @@ -27,7 +31,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED popup onOpen { uiScript LoadTeams; setFocus list } @@ -37,13 +41,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 1 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef @@ -57,8 +62,9 @@ textscale .33 elementtype LISTBOX_TEXT feeder FEEDER_TREMTEAMS - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle BORDER_STYLE BORDER_SQUARE BORDER_SQUARE BORDER_STYLE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 @@ -71,6 +77,17 @@ } } + itemDef + { + name infopane_model + ownerdraw UI_TEAMINFOPANEMODEL + rect (INFO_X+INFO_W-MODEL_W+1) (INFO_Y+INFO_H-MODEL_H+1) MODEL_W MODEL_H + style WINDOW_STYLE_EMPTY + aspectBias ALIGN_CENTER + visible MENU_TRUE + decoration + } + itemDef { name infopane @@ -83,8 +100,9 @@ textvalign VALIGN_TOP textalignx INFO_TOFF textaligny INFO_TOFF - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED bordercolor 0.5 0.5 0.5 0.5 + borderStyle BORDER_SQUARE BORDER_STYLE BORDER_SQUARE BORDER_SQUARE forecolor 1 1 1 1 backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 diff --git a/assets/ui/tremulous_voicecmd.menu b/assets/ui/tremulous_voicecmd.menu index 1b5ac8b80..bd771ee67 100644 --- a/assets/ui/tremulous_voicecmd.menu +++ b/assets/ui/tremulous_voicecmd.menu @@ -1,4 +1,5 @@ #include "ui/menudef.h" +#include "ui/menustyle.h" { @@ -27,7 +28,7 @@ fullscreen MENU_FALSE outOfBoundsClick rect (320-(W/2)) (240-(H/2)) W H - focusColor 1 .75 0 1 + focusColor WINDOW_FOCUSCOLOR style WINDOW_STYLE_FILLED popup onOpen @@ -41,13 +42,14 @@ name window rect 0 0 W H style WINDOW_STYLE_FILLED - backcolor 0 0 0 .75 + backcolor WINDOW_BACKCOLOR visible MENU_TRUE decoration - border WINDOW_BORDER_FULL + border WINDOW_BORDER_ROUNDED borderSize 1.0 - borderColor 0.5 0.5 0.5 1 + borderColor WINDOW_BORDER + borderStyle WINDOW_BORDER_STYLE } itemDef diff --git a/misc/tremulous.ico b/misc/tremulous.ico index c1c847a6c..1ff7b41a4 100644 Binary files a/misc/tremulous.ico and b/misc/tremulous.ico differ diff --git a/src/cgame/cg_buildable.c b/src/cgame/cg_buildable.c index 7d7596b6d..9fb76a74c 100644 --- a/src/cgame/cg_buildable.c +++ b/src/cgame/cg_buildable.c @@ -96,6 +96,7 @@ void CG_HumanBuildableExplosion( vec3_t origin, vec3_t dir ) #define CREEP_SIZE 64.0f #define CREEP_DISTANCE 64.0f +#define CREEP_FRAMES 550 /* ================== @@ -109,7 +110,8 @@ static void CG_Creep( centity_t *cent ) trace_t tr; vec3_t temp, origin; int scaleUpTime = BG_Buildable( cent->currentState.modelindex )->buildTime; - int time; + int time, frame; + int animatedCreep = cg_animatedCreep.integer; time = cent->currentState.time; @@ -139,11 +141,24 @@ static void CG_Creep( centity_t *cent ) VectorCopy( tr.endpos, origin ); - size = CREEP_SIZE * frac; - if( size > 0.0f && tr.fraction < 1.0f ) - CG_ImpactMark( cgs.media.creepShader, origin, cent->currentState.origin2, - 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, qfalse, size, qtrue ); + if (animatedCreep > 0) + { + frame = (int)((float)(CREEP_FRAMES - 1) * frac); + + if( frac > 0.0f && tr.fraction < 1.0f ) + CG_ImpactMark( cgs.media.creepAnimationShader[ frame ], origin, cent->currentState.origin2, + 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, qfalse, CREEP_SIZE, qtrue ); + } + else + { + size = CREEP_SIZE * frac; + + if( size > 0.0f && tr.fraction < 1.0f ) + CG_ImpactMark( cgs.media.creepShader, origin, cent->currentState.origin2, + 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, qfalse, size, qtrue ); + } + } /* @@ -596,56 +611,73 @@ CG_GhostBuildable */ void CG_GhostBuildable( buildable_t buildable ) { - refEntity_t ent; + refEntity_t ent[MAX_BUILDABLE_MODELS]; playerState_t *ps; vec3_t angles, entity_origin; vec3_t mins, maxs; trace_t tr; float scale; + int i; ps = &cg.predictedPlayerState; - - memset( &ent, 0, sizeof( ent ) ); + for( i = 0; i < MAX_BUILDABLE_MODELS; i++ ) + { + memset( &(ent[i]), 0, sizeof( ent[i] ) ); + } BG_BuildableBoundingBox( buildable, mins, maxs ); BG_PositionBuildableRelativeToPlayer( ps, mins, maxs, CG_Trace, entity_origin, angles, &tr ); if( cg_rangeMarkerForBlueprint.integer && tr.entityNum != ENTITYNUM_NONE ) - CG_GhostBuildableRangeMarker( buildable, entity_origin, tr.plane.normal ); + CG_GhostBuildableRangeMarker( buildable, entity_origin, tr.plane.normal, 0.7f ); - CG_PositionAndOrientateBuildable( ps->viewangles, entity_origin, tr.plane.normal, ps->clientNum, - mins, maxs, ent.axis, ent.origin ); + CG_PositionAndOrientateBuildable( angles, entity_origin, tr.plane.normal, ps->clientNum, + mins, maxs, ent[0].axis, ent[0].origin ); //offset on the Z axis if required - VectorMA( ent.origin, BG_BuildableConfig( buildable )->zOffset, tr.plane.normal, ent.origin ); - - VectorCopy( ent.origin, ent.lightingOrigin ); - VectorCopy( ent.origin, ent.oldorigin ); // don't positionally lerp at all + VectorMA( ent[0].origin, BG_BuildableConfig( buildable )->zOffset, tr.plane.normal, ent[0].origin ); - ent.hModel = cg_buildables[ buildable ].models[ 0 ]; - if( ps->stats[ STAT_BUILDABLE ] & SB_VALID_TOGGLEBIT ) - ent.customShader = cgs.media.greenBuildShader; - else - ent.customShader = cgs.media.redBuildShader; - - //rescale the model scale = BG_BuildableConfig( buildable )->modelScale; - if( scale != 1.0f ) + for( i = 0; i < MAX_BUILDABLE_MODELS; i++ ) { - VectorScale( ent.axis[ 0 ], scale, ent.axis[ 0 ] ); - VectorScale( ent.axis[ 1 ], scale, ent.axis[ 1 ] ); - VectorScale( ent.axis[ 2 ], scale, ent.axis[ 2 ] ); + if( cg_buildables[ buildable ].models[ i ] ) + { + if (i != 0) + { + VectorCopy( ent[0].origin, ent[i].origin ); + AxisCopy( ent[0].axis, ent[i].axis ); + } - ent.nonNormalizedAxes = qtrue; - } - else - ent.nonNormalizedAxes = qfalse; + VectorCopy( ent[i].origin, ent[i].lightingOrigin ); + VectorCopy( ent[i].origin, ent[i].oldorigin ); // don't positionally lerp at all - // add to refresh list - trap_R_AddRefEntityToScene( &ent ); + ent[i].hModel = cg_buildables[ buildable ].models[ i ]; + ent[i].frame = cg_buildables[ buildable ].animations[ BANIM_CONSTRUCT1 ].firstFrame; + + if( ps->stats[ STAT_BUILDABLE ] & SB_VALID_TOGGLEBIT ) + ent[i].customShader = cgs.media.greenBuildShader; + else + ent[i].customShader = cgs.media.redBuildShader; + + //rescale the model + if( scale != 1.0f ) + { + VectorScale( ent[i].axis[ 0 ], scale, ent[i].axis[ 0 ] ); + VectorScale( ent[i].axis[ 1 ], scale, ent[i].axis[ 1 ] ); + VectorScale( ent[i].axis[ 2 ], scale, ent[i].axis[ 2 ] ); + + ent[i].nonNormalizedAxes = qtrue; + } + else + ent[i].nonNormalizedAxes = qfalse; + + // add to refresh list + trap_R_AddRefEntityToScene( &ent[i] ); + } + } } /* @@ -1474,6 +1506,7 @@ void CG_Buildable( centity_t *cent ) { // only light up the powered buildables. if ( es->eFlags & EF_B_POWERED ) - CG_GhostBuildableRangeMarker( es->modelindex, ent.origin, surfNormal ); + CG_GhostBuildableRangeMarker( es->modelindex, ent.origin, surfNormal, + CG_RangeMarkerAnimation( cent ) ); } } diff --git a/src/cgame/cg_consolecmds.c b/src/cgame/cg_consolecmds.c index 90e2e2d66..7a75c1980 100644 --- a/src/cgame/cg_consolecmds.c +++ b/src/cgame/cg_consolecmds.c @@ -133,13 +133,13 @@ void CG_ClientList_f( void ) int i; int count = 0; - for( i = 0; i < MAX_CLIENTS; i++ ) + for( i = 0; i < MAX_CLIENTS; i++ ) { ci = &cgs.clientinfo[ i ]; - if( !ci->infoValid ) + if( !ci->infoValid ) continue; - switch( ci->team ) + switch( ci->team ) { case TEAM_ALIENS: Com_Printf( "%2d " S_COLOR_RED "A " S_COLOR_WHITE "%s\n", i, @@ -193,7 +193,7 @@ static void CG_UIMenu_f( void ) static void CG_KillMessage_f( void ) { - char msg1[ 33 * 3 + 1]; + char msg1[ 33 * 3 + 1]; char msg2[ 33 * 3 + 1 ]; trap_Argv( 1, msg1, sizeof(msg1) ); trap_Argv( 2, msg2, sizeof(msg2) ); @@ -316,7 +316,7 @@ qboolean CG_Console_CompleteArgument( int argNum ) return qtrue; } #endif - + /* ================= CG_InitConsoleCommands @@ -361,6 +361,9 @@ void CG_InitConsoleCommands( void ) trap_AddCommand( "teamvote" ); trap_AddCommand( "class" ); trap_AddCommand( "build" ); + trap_AddCommand( "rotatebuild" ); + trap_AddCommand( "rotatebuildleft" ); + trap_AddCommand( "rotatebuildright" ); trap_AddCommand( "buy" ); trap_AddCommand( "sell" ); trap_AddCommand( "reload" ); diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c index 38c957877..8a857231e 100644 --- a/src/cgame/cg_draw.c +++ b/src/cgame/cg_draw.c @@ -240,6 +240,58 @@ void CG_DrawField( float x, float y, int width, float cw, float ch, int value ) } } +static void CG_DrawNewProgressBar( rectDef_t *rect, vec4_t color, + vec4_t backColor, float scale, int align, + int textalign, int textStyle, float borderSize, + float progress ) +{ + float rimWidth; + float doneWidth, leftWidth; + float tx, ty; + char textBuffer[ 8 ]; + float borderStyle[ 4 ]; + + borderStyle[0] = BORDER_FOLD; + borderStyle[1] = BORDER_FOLD; + borderStyle[2] = BORDER_FOLD; + borderStyle[3] = BORDER_FOLD; + + if( borderSize >= 0.0f ) + rimWidth = borderSize; + else + { + rimWidth = rect->h / 20.0f; + if( rimWidth < 0.6f ) + rimWidth = 0.6f; + } + + if( progress < 0.0f ) + progress = 0.0f; + else if( progress > 1.0f ) + progress = 1.0f; + + doneWidth = ( rect->w - (8 + 6) * rimWidth ) * progress + 6 * rimWidth; + + //draw rim and bar + CG_DrawRoundedRect(rect->x, rect->y, rect->w, rect->h, rimWidth, borderStyle, color); + CG_FillRoundedRect( + rect->x + rimWidth * 4, + rect->y + rimWidth * 4, + doneWidth, + rect->h - rimWidth * 8, + rimWidth, borderStyle, backColor); + + + //draw text + if( scale > 0.0 ) + { + Com_sprintf( textBuffer, sizeof( textBuffer ), "%d%%", (int)( progress * 100 ) ); + CG_AlignText( rect, textBuffer, scale, 0.0f, 0.0f, textalign, VALIGN_CENTER, &tx, &ty ); + + UI_Text_Paint( tx, ty, scale, color, textBuffer, 0, 0, textStyle ); + } +} + static void CG_DrawProgressBar( rectDef_t *rect, vec4_t color, float scale, int align, int textalign, int textStyle, float borderSize, float progress ) @@ -686,8 +738,8 @@ static void CG_DrawPlayerAmmoValue( rectDef_t *rect, vec4_t color ) scale = 0.50; else if( len <= 6 ) scale = 0.43; - else if( len == 7 ) - scale = 0.36; + else if( len == 7 ) + scale = 0.36; else if( len == 8 ) scale = 0.33; else @@ -1087,11 +1139,11 @@ static void CG_DrawProgressLabel( rectDef_t *rect, float text_x, float text_y, v s, 0, 0, ITEM_TEXTSTYLE_NEON ); } -static void CG_DrawMediaProgress( rectDef_t *rect, vec4_t color, float scale, +static void CG_DrawMediaProgress( rectDef_t *rect, vec4_t color, vec4_t backColor, float scale, int align, int textalign, int textStyle, float borderSize ) { - CG_DrawProgressBar( rect, color, scale, align, textalign, textStyle, + CG_DrawNewProgressBar( rect, color, backColor, scale, align, textalign, textStyle, borderSize, cg.mediaFraction ); } @@ -1102,11 +1154,11 @@ static void CG_DrawMediaProgressLabel( rectDef_t *rect, float text_x, float text "Map and Textures", cg.mediaFraction ); } -static void CG_DrawBuildablesProgress( rectDef_t *rect, vec4_t color, +static void CG_DrawBuildablesProgress( rectDef_t *rect, vec4_t color, vec4_t backColor, float scale, int align, int textalign, int textStyle, float borderSize ) { - CG_DrawProgressBar( rect, color, scale, align, textalign, textStyle, + CG_DrawNewProgressBar( rect, color, backColor, scale, align, textalign, textStyle, borderSize, cg.buildablesFraction ); } @@ -1117,11 +1169,11 @@ static void CG_DrawBuildablesProgressLabel( rectDef_t *rect, float text_x, float "Buildable Models", cg.buildablesFraction ); } -static void CG_DrawCharModelProgress( rectDef_t *rect, vec4_t color, +static void CG_DrawCharModelProgress( rectDef_t *rect, vec4_t color, vec4_t backColor, float scale, int align, int textalign, int textStyle, float borderSize ) { - CG_DrawProgressBar( rect, color, scale, align, textalign, textStyle, + CG_DrawNewProgressBar( rect, color, backColor, scale, align, textalign, textStyle, borderSize, cg.charModelFraction ); } @@ -1132,7 +1184,7 @@ static void CG_DrawCharModelProgressLabel( rectDef_t *rect, float text_x, float "Character Models", cg.charModelFraction ); } -static void CG_DrawOverallProgress( rectDef_t *rect, vec4_t color, float scale, +static void CG_DrawOverallProgress( rectDef_t *rect, vec4_t color, vec4_t backColor, float scale, int align, int textalign, int textStyle, float borderSize ) { @@ -1141,7 +1193,7 @@ static void CG_DrawOverallProgress( rectDef_t *rect, vec4_t color, float scale, total = cg.charModelFraction + cg.buildablesFraction + cg.mediaFraction; total /= 3.0f; - CG_DrawProgressBar( rect, color, scale, align, textalign, textStyle, + CG_DrawNewProgressBar( rect, color, backColor, scale, align, textalign, textStyle, borderSize, total ); } @@ -1443,6 +1495,68 @@ static void CG_DrawTeamLabel( rectDef_t *rect, team_t team, float text_x, float UI_Text_Paint( text_x + tx, text_y + ty, scale, color, s, 0, 0, textStyle ); } +/* +================== +CG_DrawTeamStatus +================== +*/ +static void CG_DrawTeamStatus( rectDef_t *rect, float text_x, float text_y, + vec4_t color, float scale, int textalign, int textvalign, int textStyle ) +{ + char s[ MAX_TOKEN_CHARS ]; + float tx, ty; + + if( cg.intermissionStarted ) + return; + + if( cg.snap->ps.stats[ STAT_TEAM ] == TEAM_NONE ) + return; + + if( cg.snap->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) + { + alienStates_t *alienStates = &cgs.alienStates; + int fullHealth = BG_Buildable(BA_A_OVERMIND)->health; + Com_sprintf( s, MAX_TOKEN_CHARS, "^7%s[overmind](%s%i/%i^7) [egg](%s%i^7) [granger](%s%i^7) [booster](%s%i^7)", + alienStates->omBuilding ? "[upgrade]" : (alienStates->omHealth ? "" : "[!]"), + ((alienStates->omHealth > fullHealth / 2) ? "^2" : ((alienStates->omHealth > fullHealth / 4) ? "^3" : "^1" )), + alienStates->omHealth, + fullHealth, + !alienStates->spawns ? "^1" : "^2", + alienStates->spawns, + !alienStates->builders ? ((!alienStates->spawns || !alienStates->omHealth) ? "^1" : "^0") : "^2", + alienStates->builders, + !alienStates->boosters ? (BG_BuildableAllowedInStage(BA_A_BOOSTER, cgs.alienStage) ? "^1" : "^0") : "^2", + alienStates->boosters + ); + } + else if( cg.snap->ps.stats[ STAT_TEAM ] == TEAM_HUMANS ) + { + humanStates_t *humanStates = &cgs.humanStates; + int fullHealth = BG_Buildable(BA_H_REACTOR)->health; + Com_sprintf( s, MAX_TOKEN_CHARS, "^7%s[reactor](%s%i/%i^7) [telenode](%s%i^7) [ckit](%s%i^7) [armoury](%s%i^7) [medstat](%s%i^7) [defcomp](%s%i^7)", + (humanStates->rcBuilding ? "[upgrade]" : (humanStates->rcHealth ? "" : "[!]")), + ((humanStates->rcHealth > fullHealth / 2) ? "^2" : ((humanStates->rcHealth > fullHealth / 4) ? "^3" : "^1" )), + humanStates->rcHealth, + fullHealth, + !humanStates->spawns ? "^1" : "^2", + humanStates->spawns, + !humanStates->builders ? ((!humanStates->spawns || !humanStates->rcHealth) ? "^1" : "^0") : "^2", + humanStates->builders, + !humanStates->armourys ? "^1" : "^2", + humanStates->armourys, + !humanStates->medicals ? "^1" : "^2", + humanStates->medicals, + !humanStates->computers ? (BG_BuildableAllowedInStage(BA_H_DCC, cgs.humanStage) ? "^1" : "^0") : "^2", + humanStates->computers + ); + } + + CG_AlignText( rect, s, scale, 0.0f, 0.0f, textalign, textvalign, &tx, &ty ); + + UI_Text_Paint( text_x + tx, text_y + ty, scale, color, s, 0, 0, textStyle ); +} + + /* ================== CG_DrawStageReport @@ -1713,9 +1827,9 @@ static int QDECL SortWeaponClass( const void *a, const void *b ) // We want grangers on top. ckits are already on top without the special case. if( ca->team == TEAM_ALIENS ) { - if( ca->curWeaponClass == PCL_ALIEN_BUILDER0_UPG || + if( ca->curWeaponClass == PCL_ALIEN_BUILDER0_UPG || cb->curWeaponClass == PCL_ALIEN_BUILDER0_UPG || - ca->curWeaponClass == PCL_ALIEN_BUILDER0 || + ca->curWeaponClass == PCL_ALIEN_BUILDER0 || cb->curWeaponClass == PCL_ALIEN_BUILDER0 ) { out = -out; @@ -1778,9 +1892,9 @@ static void CG_DrawTeamOverlay( rectDef_t *rect, float scale, vec4_t color ) displayClients[ maxDisplayCount++ ] = i; else { - if( ci->curWeaponClass == PCL_ALIEN_BUILDER0 || + if( ci->curWeaponClass == PCL_ALIEN_BUILDER0 || ci->curWeaponClass == PCL_ALIEN_BUILDER0_UPG || - ci->curWeaponClass == PCL_ALIEN_LEVEL1 || + ci->curWeaponClass == PCL_ALIEN_LEVEL1 || ci->curWeaponClass == PCL_ALIEN_LEVEL1_UPG || ci->curWeaponClass == WP_HBUILD ) { @@ -1798,7 +1912,7 @@ static void CG_DrawTeamOverlay( rectDef_t *rect, float scale, vec4_t color ) vec3_t relOrigin = { 0.0f, 0.0f, 0.0f }; int team = cent->currentState.misc & 0x00FF; - if( cent->currentState.eType != ET_PLAYER || + if( cent->currentState.eType != ET_PLAYER || team != pci->team || cent->currentState.eFlags & EF_DEAD ) { @@ -1871,7 +1985,7 @@ static void CG_DrawTeamOverlay( rectDef_t *rect, float scale, vec4_t color ) { if( ci->upgrade != UP_NONE ) { - CG_DrawPic( x + iconSize + leftMargin, y, iconSize, + CG_DrawPic( x + iconSize + leftMargin, y, iconSize, iconSize, cg_upgrades[ ci->upgrade ].upgradeIcon ); } } @@ -1880,7 +1994,7 @@ static void CG_DrawTeamOverlay( rectDef_t *rect, float scale, vec4_t color ) if( curWeapon == WP_ABUILD2 || curWeapon == WP_ALEVEL1_UPG || curWeapon == WP_ALEVEL2_UPG || curWeapon == WP_ALEVEL3_UPG ) { - CG_DrawPic( x + iconSize + leftMargin, y, iconSize, + CG_DrawPic( x + iconSize + leftMargin, y, iconSize, iconSize, cgs.media.upgradeClassIconShader ); } } @@ -1894,13 +2008,13 @@ static void CG_DrawTeamOverlay( rectDef_t *rect, float scale, vec4_t color ) trap_R_SetColor( NULL ); nameMaxX = nameMaxXCp = x + 2.0f * iconSize + leftMargin + midSep + nameWidth; - UI_Text_Paint_Limit( &nameMaxXCp, x + 2.0f * iconSize + leftMargin + midSep, + UI_Text_Paint_Limit( &nameMaxXCp, x + 2.0f * iconSize + leftMargin + midSep, y + iconSize - iconTopMargin, fontScale, tcolor, name, 0, 0 ); maxXCp = maxX; - UI_Text_Paint_Limit( &maxXCp, nameMaxX, y + iconSize - iconTopMargin, + UI_Text_Paint_Limit( &maxXCp, nameMaxX, y + iconSize - iconTopMargin, fontScale, tcolor, s, 0, 0 ); y += iconSize; displayCount++; @@ -2919,6 +3033,9 @@ void CG_OwnerDraw( float x, float y, float w, float h, float text_x, case CG_PLAYER_CROSSHAIR: CG_DrawCrosshair( &rect, foreColor ); break; + case CG_TEAM_STATUS: + CG_DrawTeamStatus( &rect, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle ); + break; case CG_STAGE_REPORT_TEXT: CG_DrawStageReport( &rect, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle ); break; @@ -2934,28 +3051,28 @@ void CG_OwnerDraw( float x, float y, float w, float h, float text_x, CG_DrawLevelShot( &rect ); break; case CG_LOAD_MEDIA: - CG_DrawMediaProgress( &rect, foreColor, scale, align, textalign, textStyle, + CG_DrawMediaProgress( &rect, foreColor, backColor, scale, align, textalign, textStyle, borderSize ); break; case CG_LOAD_MEDIA_LABEL: CG_DrawMediaProgressLabel( &rect, text_x, text_y, foreColor, scale, textalign, textvalign ); break; case CG_LOAD_BUILDABLES: - CG_DrawBuildablesProgress( &rect, foreColor, scale, align, textalign, + CG_DrawBuildablesProgress( &rect, foreColor, backColor, scale, align, textalign, textStyle, borderSize ); break; case CG_LOAD_BUILDABLES_LABEL: CG_DrawBuildablesProgressLabel( &rect, text_x, text_y, foreColor, scale, textalign, textvalign ); break; case CG_LOAD_CHARMODEL: - CG_DrawCharModelProgress( &rect, foreColor, scale, align, textalign, + CG_DrawCharModelProgress( &rect, foreColor, backColor, scale, align, textalign, textStyle, borderSize ); break; case CG_LOAD_CHARMODEL_LABEL: CG_DrawCharModelProgressLabel( &rect, text_x, text_y, foreColor, scale, textalign, textvalign ); break; case CG_LOAD_OVERALL: - CG_DrawOverallProgress( &rect, foreColor, scale, align, textalign, textStyle, + CG_DrawOverallProgress( &rect, foreColor, backColor, scale, align, textalign, textStyle, borderSize ); break; case CG_LOAD_LEVELNAME: @@ -3314,16 +3431,16 @@ static void CG_DrawVote( team_t team ) if( cg_tutorial.integer ) { - Com_sprintf( yeskey, sizeof( yeskey ), "[%s]", + Com_sprintf( yeskey, sizeof( yeskey ), "[%s]", CG_KeyBinding( va( "%svote yes", team == TEAM_NONE ? "" : "team" ) ) ); - Com_sprintf( nokey, sizeof( nokey ), "[%s]", + Com_sprintf( nokey, sizeof( nokey ), "[%s]", CG_KeyBinding( va( "%svote no", team == TEAM_NONE ? "" : "team" ) ) ); } if( team != TEAM_NONE ) offset = 80; - s = va( "%sVOTE(%i): %s", + s = va( "%sVOTE(%i): %s", team == TEAM_NONE ? "" : "TEAM", sec, cgs.voteString[ team ] ); UI_Text_Paint( 8, 300 + offset, 0.3f, white, s, 0, 0, diff --git a/src/cgame/cg_drawtools.c b/src/cgame/cg_drawtools.c index cc8533a43..b6d1abc96 100644 --- a/src/cgame/cg_drawtools.c +++ b/src/cgame/cg_drawtools.c @@ -99,23 +99,6 @@ void CG_AdjustFrom640( float *x, float *y, float *w, float *h ) *h *= cgs.screenYScale; } -/* -================ -CG_FillRect - -Coordinates are 640*480 virtual values -================= -*/ -void CG_FillRect( float x, float y, float width, float height, const float *color ) -{ - trap_R_SetColor( color ); - - CG_AdjustFrom640( &x, &y, &width, &height ); - trap_R_DrawStretchPic( x, y, width, height, 0, 0, 0, 0, cgs.media.whiteShader ); - - trap_R_SetColor( NULL ); -} - /* ================ @@ -144,6 +127,56 @@ void CG_DrawTopBottom( float x, float y, float w, float h, float size ) trap_R_DrawStretchPic( x, y + h - size, w, size, 0, 0, 0, 0, cgs.media.whiteShader ); } +static void CG_DrawCorners( float x, float y, float w, float h, float size, const float *style, qhandle_t *pic ) +{ + float hs, vs; + CG_AdjustFrom640( &x, &y, &w, &h ); + hs = size * cgs.screenXScale; + vs = size * cgs.screenYScale; + + trap_R_DrawStretchPic( x, y, hs , vs, 0, 0, 0.5, 0.5, pic[(int)(style[0])] ); + trap_R_DrawStretchPic( x + w - hs, y, hs, vs, 0.5, 0, 1, 0.5, pic[(int)(style[1])] ); + trap_R_DrawStretchPic( x + w - hs, y + h - vs, hs, vs, 0.5, 0.5, 1, 1, pic[(int)(style[2])] ); + trap_R_DrawStretchPic( x, y + h - vs, hs, vs, 0, 0.5, 0.5, 1, pic[(int)(style[3])] ); +} + + +/* +================ +CG_FillRect + +Coordinates are 640*480 virtual values +================= +*/ +void CG_FillRect( float x, float y, float width, float height, const float *color ) +{ + trap_R_SetColor( color ); + + CG_AdjustFrom640( &x, &y, &width, &height ); + trap_R_DrawStretchPic( x, y, width, height, 0, 0, 0, 0, cgs.media.whiteShader ); + + trap_R_SetColor( NULL ); +} + + +/* +================ +CG_FillRoundedRect +Coordinates are 640*480 virtual values +================= +*/ +void CG_FillRoundedRect( float x, float y, float width, float height, float size, const float *style, const float *color ) +{ + CG_FillRect( x, y + size * 3, width, height - size * 6, color ); + + trap_R_SetColor( color ); + + CG_DrawTopBottom( x + size * 3, y, width - size * 6, height, size * 3 ); + CG_DrawCorners( x - size, y - size, width + size * 2, height + size * 2, size * 4, style, cgDC.Assets.cornerIn ); + + trap_R_SetColor( NULL ); +} + /* ================ @@ -163,6 +196,24 @@ void CG_DrawRect( float x, float y, float width, float height, float size, const } +/* +================ +CG_DrawRoundedRect +Coordinates are 640*480 virtual values +================= +*/ +void CG_DrawRoundedRect( float x, float y, float width, float height, float size, const float *style, const float *color ) +{ + trap_R_SetColor( color ); + + CG_DrawTopBottom( x + size * 4, y, width - size * 8, height, size ); + CG_DrawSides( x, y + size * 3, width, height - size * 6, size ); + CG_DrawCorners( x, y, width, height, size * 4, style, cgDC.Assets.cornerOut); + + trap_R_SetColor( NULL ); +} + + /* ================ CG_DrawPic diff --git a/src/cgame/cg_ents.c b/src/cgame/cg_ents.c index 4008e56a2..3a711b41f 100644 --- a/src/cgame/cg_ents.c +++ b/src/cgame/cg_ents.c @@ -364,7 +364,7 @@ static void CG_WeaponDrop( centity_t *cent ) + wi->weaponMidpoint[1] * ent.axis[1][2] + wi->weaponMidpoint[2] * ent.axis[2][2]; cent->lerpOrigin[2] += 8; // an extra height boost - + #if 0 if( item->giType == IT_WEAPON && item->giTag == WP_RAILGUN ) { clientInfo_t *ci = &cgs.clientinfo[cg.snap->ps.clientNum]; @@ -1086,12 +1086,12 @@ static void CG_CalcEntityLerpPositions( centity_t *cent ) { trace_t tr; vec3_t lastOrigin; - + BG_EvaluateTrajectory( ¢->currentState.pos, cg.time, lastOrigin ); - + CG_Trace( &tr, lastOrigin, vec3_origin, vec3_origin, cent->lerpOrigin, cent->currentState.number, MASK_SHOT ); - + // don't let the projectile go through the floor if( tr.fraction < 1.0f ) VectorLerp2( tr.fraction, lastOrigin, cent->lerpOrigin, cent->lerpOrigin ); @@ -1279,6 +1279,7 @@ void CG_AddPacketEntities( void ) int num; centity_t *cent; playerState_t *ps; + entityState_t *es; // set cg.frameInterpolation if( cg.nextSnap ) @@ -1341,6 +1342,9 @@ void CG_AddPacketEntities( void ) else if( !cent->valid && cent->oldValid ) CG_CEntityPVSLeave( cent ); + if( cent->valid != cent->oldValid ) + cent->validTime = cg.time; + cent->oldValid = cent->valid; } @@ -1351,6 +1355,25 @@ void CG_AddPacketEntities( void ) CG_AddCEntity( cent ); } + if ( cg_rangeMarkerForBlueprint.integer ) + { + // Keep range marker for hidding animation + for( num = 0; num < MAX_GENTITIES; num++ ) + { + cent = &cg_entities[ num ]; + + if( !cent->valid && cent->currentState.eType == ET_BUILDABLE + && cg.time - cent->validTime < RM_ANIM_TIME) + { + es = ¢->currentState; + // only light up the powered buildables. + if ( es->eFlags & EF_B_POWERED ) + CG_GhostBuildableRangeMarker( es->modelindex, cent->buildableCache.cachedOrigin, cent->buildableCache.cachedNormal, + CG_RangeMarkerAnimation( cent ) ); + } + } + } + //make an attempt at drawing bounding boxes of selected entity types if( cg_drawBBOX.integer ) { diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h index ecdf02d09..f7e5fd157 100644 --- a/src/cgame/cg_local.h +++ b/src/cgame/cg_local.h @@ -84,6 +84,8 @@ along with Tremulous; if not, see #define TEAM_OVERLAY_MAXNAME_WIDTH 12 #define TEAM_OVERLAY_MAXLOCATION_WIDTH 16 +#define RM_ANIM_TIME 1000 + typedef enum { FOOTSTEP_NORMAL, @@ -321,7 +323,7 @@ typedef struct baseParticle_s qboolean overdrawProtection; qboolean realLight; qboolean cullOnStartSolid; - + float scaleWithCharge; } baseParticle_t; @@ -367,7 +369,7 @@ typedef struct particleSystem_s //for PMT_LAST_NORMAL and PMT_OPPORTUNISTIC_NORMAL qboolean lastNormalIsCurrent; vec3_t lastNormal; - + int charge; } particleSystem_t; @@ -476,7 +478,7 @@ typedef struct baseTrailBeam_s // the time it takes for a beam to fade out (double attached only) int fadeOutTime; - + char shaderName[ MAX_QPATH ]; qhandle_t shader; @@ -694,7 +696,8 @@ typedef struct centity_s int muzzleTSDeathTime; qboolean valid; - qboolean oldValid; + qboolean oldValid; + int validTime; struct centity_s *nextLocation; } centity_t; @@ -742,7 +745,7 @@ typedef struct int score; // updated by score servercmds int location; // location index for team mode int health; // you only get this info about your teammates - int upgrade; + int upgrade; int curWeaponClass; // sends current weapon for H, current class for A // when clientinfo is changed, the loading of models/skins/sounds @@ -1156,13 +1159,13 @@ typedef struct playerState_t savedPmoveStates[ NUM_SAVED_STATES ]; int stateHead, stateTail; int ping; - + float chargeMeterAlpha; float chargeMeterValue; qhandle_t lastHealthCross; float healthCrossFade; int nearUsableBuildable; - + int nextWeaponClickTime; // binary shaders - by /dev/humancontroller int numBinaryShadersUsed; @@ -1178,6 +1181,8 @@ typedef struct qhandle_t level2ZapTS; qhandle_t balloonShader; + qhandle_t aliensBalloonShader; + qhandle_t humansBalloonShader; qhandle_t connectionShader; qhandle_t viewBloodShader; @@ -1187,6 +1192,8 @@ typedef struct qhandle_t creepShader; + qhandle_t creepAnimationShader[550]; + qhandle_t scannerShader; qhandle_t scannerBlipShader; qhandle_t scannerLineShader; @@ -1384,6 +1391,9 @@ typedef struct int alienNextStageThreshold; int humanNextStageThreshold; + alienStates_t alienStates; + humanStates_t humanStates; + // // locally derived information from gamestate // @@ -1550,6 +1560,8 @@ extern vmCvar_t cg_rangeMarkerForBlueprint; extern vmCvar_t cg_rangeMarkerBuildableTypes; extern vmCvar_t cg_binaryShaderScreenScale; +extern vmCvar_t cg_animatedCreep; + extern vmCvar_t cg_painBlendUpRate; extern vmCvar_t cg_painBlendDownRate; extern vmCvar_t cg_painBlendMax; @@ -1564,7 +1576,11 @@ extern vmCvar_t cg_debugVoices; extern vmCvar_t ui_currentClass; extern vmCvar_t ui_carriage; +extern vmCvar_t ui_credit; +extern vmCvar_t ui_ammoFull; extern vmCvar_t ui_stages; +extern vmCvar_t ui_alienStates; +extern vmCvar_t ui_humanStates; extern vmCvar_t ui_dialog; extern vmCvar_t ui_voteActive; extern vmCvar_t ui_alienTeamVoteActive; @@ -1647,6 +1663,7 @@ void CG_OffsetShoulderView( void ); void CG_DrawPlane( vec3_t origin, vec3_t down, vec3_t right, qhandle_t shader ); void CG_AdjustFrom640( float *x, float *y, float *w, float *h ); void CG_FillRect( float x, float y, float width, float height, const float *color ); +void CG_FillRoundedRect( float x, float y, float width, float height, float size, const float *style, const float *color ); void CG_DrawPic( float x, float y, float width, float height, qhandle_t hShader ); void CG_DrawFadePic( float x, float y, float width, float height, vec4_t fcolor, vec4_t tcolor, float amount, qhandle_t hShader ); @@ -1659,6 +1676,7 @@ float *CG_FadeColor( int startMsec, int totalMsec ); void CG_TileClear( void ); void CG_ColorForHealth( vec4_t hcolor ); void CG_DrawRect( float x, float y, float width, float height, float size, const float *color ); +void CG_DrawRoundedRect( float x, float y, float width, float height, float size, const float *style, const float *color ); void CG_DrawSides(float x, float y, float w, float h, float size); void CG_DrawTopBottom(float x, float y, float w, float h, float size); qboolean CG_WorldToScreen( vec3_t point, float *x, float *y ); @@ -1669,7 +1687,8 @@ void CG_DrawSphericalCone( const vec3_t tip, const vec3_t rotation, float qboolean a240, int customShader, const float *shaderRGBA ); void CG_DrawRangeMarker( rangeMarkerType_t rmType, const vec3_t origin, const float *angles, float range, qboolean drawSurface, qboolean drawIntersection, qboolean drawFrontline, - const vec3_t rgb, float surfaceOpacity, float lineOpacity, float lineThickness ); + const vec3_t rgb, float surfaceOpacity, float lineOpacity, float lineThickness, + float animation ); // // cg_draw.c @@ -1778,6 +1797,7 @@ void CG_RangeMarker( centity_t *cent ); // // cg_weapons.c // +void CG_AutoSelectWeapon_f( void ); void CG_NextWeapon_f( void ); void CG_PrevWeapon_f( void ); void CG_Weapon_f( void ); @@ -1930,10 +1950,12 @@ qboolean CG_GetRangeMarkerPreferences( qboolean *drawSurface, qboolean *drawI // cg_drawtools.c void CG_DrawRangeMarker( rangeMarkerType_t rmType, const vec3_t origin, const float *angles, float range, qboolean drawSurface, qboolean drawIntersection, qboolean drawFrontline, - const vec3_t rgb, float surfaceOpacity, float lineOpacity, float lineThickness ); + const vec3_t rgb, float surfaceOpacity, float lineOpacity, float lineThickness, + float animation); // cg_buildable.c +float CG_RangeMarkerAnimation(centity_t *cent); qboolean CG_GetBuildableRangeMarkerProperties( buildable_t bType, rangeMarkerType_t *rmType, float *range, vec3_t rgb ); -void CG_GhostBuildableRangeMarker( buildable_t buildable, const vec3_t origin, const vec3_t normal ); +void CG_GhostBuildableRangeMarker( buildable_t buildable, const vec3_t origin, const vec3_t normal, float animation ); // cg_ents.c void CG_RangeMarker( centity_t *cent ); diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c index 7ec4ae9b3..6627740a4 100644 --- a/src/cgame/cg_main.c +++ b/src/cgame/cg_main.c @@ -204,6 +204,8 @@ vmCvar_t cg_rangeMarkerForBlueprint; vmCvar_t cg_rangeMarkerBuildableTypes; vmCvar_t cg_binaryShaderScreenScale; +vmCvar_t cg_animatedCreep; + vmCvar_t cg_painBlendUpRate; vmCvar_t cg_painBlendDownRate; vmCvar_t cg_painBlendMax; @@ -218,7 +220,11 @@ vmCvar_t cg_debugVoices; vmCvar_t ui_currentClass; vmCvar_t ui_carriage; +vmCvar_t ui_credit; +vmCvar_t ui_ammoFull; vmCvar_t ui_stages; +vmCvar_t ui_alienStates; +vmCvar_t ui_humanStates; vmCvar_t ui_dialog; vmCvar_t ui_voteActive; vmCvar_t ui_alienTeamVoteActive; @@ -308,7 +314,7 @@ static cvarTable_t cvarTable[ ] = { &cg_noVoiceText, "cg_noVoiceText", "0", CVAR_ARCHIVE }, { &cg_drawSurfNormal, "cg_drawSurfNormal", "0", CVAR_CHEAT }, { &cg_drawBBOX, "cg_drawBBOX", "0", CVAR_CHEAT }, - { &cg_wwSmoothTime, "cg_wwSmoothTime", "300", CVAR_ARCHIVE }, + { &cg_wwSmoothTime, "cg_wwSmoothTime", "225", CVAR_ARCHIVE }, { NULL, "cg_wwFollow", "1", CVAR_ARCHIVE|CVAR_USERINFO }, { NULL, "cg_wwToggle", "1", CVAR_ARCHIVE|CVAR_USERINFO }, { NULL, "cg_disableBlueprintErrors", "0", CVAR_ARCHIVE|CVAR_USERINFO }, @@ -317,7 +323,7 @@ static cvarTable_t cvarTable[ ] = { &cg_unlagged, "cg_unlagged", "1", CVAR_ARCHIVE|CVAR_USERINFO }, { NULL, "cg_flySpeed", "600", CVAR_ARCHIVE|CVAR_USERINFO }, { &cg_depthSortParticles, "cg_depthSortParticles", "1", CVAR_ARCHIVE }, - { &cg_bounceParticles, "cg_bounceParticles", "0", CVAR_ARCHIVE }, + { &cg_bounceParticles, "cg_bounceParticles", "1", CVAR_ARCHIVE }, { &cg_consoleLatency, "cg_consoleLatency", "3000", CVAR_ARCHIVE }, { &cg_lightFlare, "cg_lightFlare", "3", CVAR_ARCHIVE }, { &cg_debugParticles, "cg_debugParticles", "0", CVAR_CHEAT }, @@ -331,8 +337,8 @@ static cvarTable_t cvarTable[ ] = { &cg_tutorial, "cg_tutorial", "1", CVAR_ARCHIVE }, { &cg_rangeMarkerDrawSurface, "cg_rangeMarkerDrawSurface", "1", CVAR_ARCHIVE }, - { &cg_rangeMarkerDrawIntersection, "cg_rangeMarkerDrawIntersection", "1", CVAR_ARCHIVE }, - { &cg_rangeMarkerDrawFrontline, "cg_rangeMarkerDrawFrontline", "1", CVAR_ARCHIVE }, + { &cg_rangeMarkerDrawIntersection, "cg_rangeMarkerDrawIntersection", "0", CVAR_ARCHIVE }, + { &cg_rangeMarkerDrawFrontline, "cg_rangeMarkerDrawFrontline", "0", CVAR_ARCHIVE }, { &cg_rangeMarkerSurfaceOpacity, "cg_rangeMarkerSurfaceOpacity", "0.08", CVAR_ARCHIVE }, { &cg_rangeMarkerLineOpacity, "cg_rangeMarkerLineOpacity", "0.4", CVAR_ARCHIVE }, { &cg_rangeMarkerLineThickness, "cg_rangeMarkerLineThickness", "4.0", CVAR_ARCHIVE }, @@ -341,6 +347,8 @@ static cvarTable_t cvarTable[ ] = { NULL, "cg_buildableRangeMarkerMask", "", CVAR_USERINFO }, { &cg_binaryShaderScreenScale, "cg_binaryShaderScreenScale", "1.0", CVAR_ARCHIVE }, + { &cg_animatedCreep, "cg_animatedCreep", "2", CVAR_ARCHIVE }, + { &cg_hudFiles, "cg_hudFiles", "ui/hud.txt", CVAR_ARCHIVE}, { NULL, "cg_alienConfig", "", CVAR_ARCHIVE }, { NULL, "cg_humanConfig", "", CVAR_ARCHIVE }, @@ -351,20 +359,24 @@ static cvarTable_t cvarTable[ ] = { &cg_painBlendMax, "cg_painBlendMax", "0.7", 0 }, { &cg_painBlendScale, "cg_painBlendScale", "7.0", 0 }, { &cg_painBlendZoom, "cg_painBlendZoom", "0.65", 0 }, - + { &cg_debugVoices, "cg_debugVoices", "0", 0 }, // communication cvars set by the cgame to be read by ui { &ui_currentClass, "ui_currentClass", "0", CVAR_ROM }, { &ui_carriage, "ui_carriage", "", CVAR_ROM }, + { &ui_credit, "ui_credit", "0", CVAR_ROM }, + { &ui_ammoFull, "ui_ammoFull", "1", CVAR_ROM }, { &ui_stages, "ui_stages", "0 0", CVAR_ROM }, + { &ui_alienStates, "ui_alienStates", "0 0 0 0 0", CVAR_ROM }, + { &ui_humanStates, "ui_humanStates", "0 0 0 0 0 0", CVAR_ROM }, { &ui_dialog, "ui_dialog", "Text not set", CVAR_ROM }, { &ui_voteActive, "ui_voteActive", "0", CVAR_ROM }, { &ui_humanTeamVoteActive, "ui_humanTeamVoteActive", "0", CVAR_ROM }, { &ui_alienTeamVoteActive, "ui_alienTeamVoteActive", "0", CVAR_ROM }, { &cg_debugRandom, "cg_debugRandom", "0", 0 }, - + { &cg_optimizePrediction, "cg_optimizePrediction", "1", CVAR_ARCHIVE }, { &cg_projectileNudge, "cg_projectileNudge", "1", CVAR_ARCHIVE }, @@ -383,7 +395,7 @@ static cvarTable_t cvarTable[ ] = { &pmove_fixed, "pmove_fixed", "0", 0}, { &pmove_msec, "pmove_msec", "8", 0}, { &cg_noTaunt, "cg_noTaunt", "0", CVAR_ARCHIVE}, - + { &cg_voice, "voice", "default", CVAR_USERINFO|CVAR_ARCHIVE}, { &cg_emoticons, "cg_emoticons", "1", CVAR_LATCH|CVAR_ARCHIVE}, @@ -424,6 +436,23 @@ void CG_RegisterCvars( void ) cgs.localServer = atoi( var ); } +/* +=============== +CG_DoNeedAmmo +=============== +*/ +static qboolean CG_DoNeedAmmo( playerState_t *ps ) +{ + weapon_t weapon = ps->stats[ STAT_WEAPON ]; + + if (weapon == WP_NONE) + return (qfalse); + if (BG_Weapon( weapon )->infiniteAmmo) + return (qfalse); + if (BG_WeaponIsFull( weapon, ps->stats, ps->ammo, ps->clips )) + return (qfalse); + return (qtrue); +} /* =============== @@ -436,10 +465,15 @@ static void CG_SetUIVars( void ) { int i; char carriageCvar[ MAX_TOKEN_CHARS ]; + int credit; + playerState_t *ps; + alienStates_t *alienStates = &cgs.alienStates; + humanStates_t *humanStates = &cgs.humanStates; if( !cg.snap ) return; + ps = &cg.snap->ps; *carriageCvar = 0; //determine what the player is carrying @@ -456,7 +490,18 @@ static void CG_SetUIVars( void ) trap_Cvar_Set( "ui_carriage", carriageCvar ); + credit = ps->persistant[ PERS_CREDIT ]; + trap_Cvar_Set( "ui_credit", va( "%d", credit > -1 ? credit : 0 ) ); + + trap_Cvar_Set( "ui_ammoFull", va( "%d", !CG_DoNeedAmmo(ps))); + trap_Cvar_Set( "ui_stages", va( "%d %d", cgs.alienStage, cgs.humanStage ) ); + + trap_Cvar_Set( "ui_alienStates", va( "%d %d %d %d %d", alienStates->omBuilding, alienStates->omHealth, + alienStates->spawns, alienStates->builders, alienStates->boosters ) ); + + trap_Cvar_Set( "ui_humanStates", va( "%d %d %d %d %d %d %d", humanStates->rcBuilding, humanStates->rcHealth, + humanStates->spawns, humanStates->builders, humanStates->armourys, humanStates->medicals, humanStates->computers ) ); } /* @@ -497,7 +542,7 @@ static void CG_SetPVars( void ) trap_Cvar_Set( "team_stage", va( "%d", cgs.humanStage+1 ) ); break; } - + trap_Cvar_Set( "player_credits", va( "%d", cg.snap->ps.persistant[ PERS_CREDIT ] ) ); trap_Cvar_Set( "player_score", va( "%d", cg.snap->ps.persistant[ PERS_SCORE ] ) ); @@ -800,6 +845,7 @@ static void CG_RegisterSounds( void ) //=================================================================================== +#define CREEP_FRAMES 550 /* ================= CG_RegisterGraphics @@ -810,6 +856,8 @@ This function may execute for a couple of minutes with a slow disk. static void CG_RegisterGraphics( void ) { int i; + int animatedCreep = cg_animatedCreep.integer; + static char *sb_nums[ 11 ] = { "gfx/2d/numbers/zero_32b", @@ -852,6 +900,19 @@ static void CG_RegisterGraphics( void ) cgs.media.creepShader = trap_R_RegisterShader( "creep" ); + if (animatedCreep > 0) + { + CG_UpdateMediaFraction( 0.67f ); + for ( i = 0; i < CREEP_FRAMES; i++ ) + { + if (i % animatedCreep == 0 || i == CREEP_FRAMES - 1) + cgs.media.creepAnimationShader[ i ] = trap_R_RegisterShader( va( "creep%d", i ) ); + else + cgs.media.creepAnimationShader[ i ] = cgs.media.creepAnimationShader[ (i / animatedCreep) * animatedCreep ]; + } + CG_UpdateMediaFraction( 0.685f ); + } + cgs.media.scannerBlipShader = trap_R_RegisterShader( "gfx/2d/blip" ); cgs.media.scannerLineShader = trap_R_RegisterShader( "gfx/2d/stalk" ); @@ -876,10 +937,12 @@ static void CG_RegisterGraphics( void ) cgs.media.healthCross3X = trap_R_RegisterShader( "ui/assets/neutral/cross3.tga" ); cgs.media.healthCrossMedkit = trap_R_RegisterShader( "ui/assets/neutral/cross_medkit.tga" ); cgs.media.healthCrossPoisoned = trap_R_RegisterShader( "ui/assets/neutral/cross_poison.tga" ); - + cgs.media.upgradeClassIconShader = trap_R_RegisterShader( "icons/icona_upgrade.tga" ); - + cgs.media.balloonShader = trap_R_RegisterShader( "gfx/sprites/chatballoon" ); + cgs.media.aliensBalloonShader = trap_R_RegisterShader( "gfx/sprites/aliens_chatballoon" ); + cgs.media.humansBalloonShader = trap_R_RegisterShader( "gfx/sprites/humans_chatballoon" ); cgs.media.disconnectPS = CG_RegisterParticleSystem( "disconnectPS" ); @@ -905,7 +968,7 @@ static void CG_RegisterGraphics( void ) cgs.media.humanBuildableDestroyedPS = CG_RegisterParticleSystem( "humanBuildableDestroyedPS" ); cgs.media.alienBuildableDestroyedPS = CG_RegisterParticleSystem( "alienBuildableDestroyedPS" ); - cgs.media.humanBuildableBleedPS = CG_RegisterParticleSystem( "humanBuildableBleedPS"); + cgs.media.humanBuildableBleedPS = CG_RegisterParticleSystem( "humanBuildableBleedPS"); cgs.media.alienBuildableBleedPS = CG_RegisterParticleSystem( "alienBuildableBleedPS" ); cgs.media.alienBleedPS = CG_RegisterParticleSystem( "alienBleedPS" ); @@ -930,7 +993,7 @@ static void CG_RegisterGraphics( void ) CG_BuildableStatusParse( "ui/assets/human/buildstat.cfg", &cgs.humanBuildStat ); CG_BuildableStatusParse( "ui/assets/alien/buildstat.cfg", &cgs.alienBuildStat ); - + // register the inline models cgs.numInlineModels = trap_CM_NumInlineModels( ); @@ -1757,7 +1820,9 @@ void CG_LoadHudMenu( void ) cgDC.registerModel = &trap_R_RegisterModel; cgDC.modelBounds = &trap_R_ModelBounds; cgDC.fillRect = &CG_FillRect; + cgDC.fillRoundedRect = &CG_FillRoundedRect; cgDC.drawRect = &CG_DrawRect; + cgDC.drawRoundedRect = &CG_DrawRoundedRect; cgDC.drawSides = &CG_DrawSides; cgDC.drawTopBottom = &CG_DrawTopBottom; cgDC.clearScene = &trap_R_ClearScene; @@ -1820,9 +1885,17 @@ void CG_AssetCache( void ) cgDC.Assets.scrollBarArrowLeft = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWLEFT ); cgDC.Assets.scrollBarArrowRight = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWRIGHT ); cgDC.Assets.scrollBarThumb = trap_R_RegisterShaderNoMip( ASSET_SCROLL_THUMB ); + cgDC.Assets.showMoreArrow = trap_R_RegisterShaderNoMip( ASSET_SHOWMORE_ARROW ); cgDC.Assets.sliderBar = trap_R_RegisterShaderNoMip( ASSET_SLIDER_BAR ); cgDC.Assets.sliderThumb = trap_R_RegisterShaderNoMip( ASSET_SLIDER_THUMB ); + cgDC.Assets.cornerIn[BORDER_SQUARE] = trap_R_RegisterShaderNoMip( ASSET_CORNERIN_SQUARE ); + cgDC.Assets.cornerOut[BORDER_SQUARE] = trap_R_RegisterShaderNoMip( ASSET_CORNEROUT_SQUARE ); + cgDC.Assets.cornerIn[BORDER_ROUNDED] = trap_R_RegisterShaderNoMip( ASSET_CORNERIN_ROUNDED ); + cgDC.Assets.cornerOut[BORDER_ROUNDED] = trap_R_RegisterShaderNoMip( ASSET_CORNEROUT_ROUNDED ); + cgDC.Assets.cornerIn[BORDER_FOLD] = trap_R_RegisterShaderNoMip( ASSET_CORNERIN_FOLD ); + cgDC.Assets.cornerOut[BORDER_FOLD] = trap_R_RegisterShaderNoMip( ASSET_CORNEROUT_FOLD ); + if( cg_emoticons.integer ) { cgDC.Assets.emoticonCount = BG_LoadEmoticons( cgDC.Assets.emoticons, @@ -1942,7 +2015,7 @@ void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum ) CG_UpdateMediaFraction( 1.0f ); CG_InitBuildables( ); - + cgs.voices = BG_VoiceInit( ); BG_PrintVoices( cgs.voices, cg_debugVoices.integer ); diff --git a/src/cgame/cg_rangemarker.c b/src/cgame/cg_rangemarker.c index 2810b904f..b2d029bbb 100644 --- a/src/cgame/cg_rangemarker.c +++ b/src/cgame/cg_rangemarker.c @@ -145,7 +145,24 @@ void CG_UpdateBuildableRangeMarkerMask( void ) } } -// cg_drawtools.c +float CG_RangeMarkerAnimation(centity_t *cent) +{ + int msec = cg.time - cent->validTime; + float ratio = (float)msec / RM_ANIM_TIME; + + // It would be fine if we could avoid animation when teleported + if (msec > RM_ANIM_TIME) + return (1.0f); + else + { + if (cent->valid) + return 1.0f - (fabs(sin(pow(ratio, 2) * M_PI * 3)/pow(ratio, 2))) / 9.425f; + else + return (1.0f - ratio); + } +} + +// cg_drawtools.c // /* ================ @@ -221,7 +238,8 @@ CG_DrawRangeMarker */ void CG_DrawRangeMarker( rangeMarkerType_t rmType, const vec3_t origin, const float *angles, float range, qboolean drawSurface, qboolean drawIntersection, qboolean drawFrontline, - const vec3_t rgb, float surfaceOpacity, float lineOpacity, float lineThickness ) + const vec3_t rgb, float surfaceOpacity, float lineOpacity, float lineThickness, + float animation) { if( drawSurface ) { @@ -230,7 +248,7 @@ void CG_DrawRangeMarker( rangeMarkerType_t rmType, const vec3_t origin, const fl pcsh = cgs.media.plainColorShader; VectorCopy( rgb, rgba ); - rgba[ 3 ] = surfaceOpacity; + rgba[ 3 ] = surfaceOpacity * animation; switch( rmType ) { @@ -297,7 +315,7 @@ void CG_DrawRangeMarker( rangeMarkerType_t rmType, const vec3_t origin, const fl bshs = &cg.binaryShaderSettings[ cg.numBinaryShadersUsed ]; for( i = 0; i < 3; ++i ) - bshs->color[ i ] = 255 * lineOpacity * rgb[ i ]; + bshs->color[ i ] = 255 * lineOpacity * animation * rgb[ i ]; bshs->drawIntersection = drawIntersection; bshs->drawFrontline = drawFrontline; @@ -348,7 +366,7 @@ qboolean CG_GetBuildableRangeMarkerProperties( buildable_t bType, rangeMarkerTyp CG_GhostBuildableRangeMarker ================ */ -void CG_GhostBuildableRangeMarker( buildable_t buildable, const vec3_t origin, const vec3_t normal ) +void CG_GhostBuildableRangeMarker( buildable_t buildable, const vec3_t origin, const vec3_t normal, float animation ) { qboolean drawS, drawI, drawF; float so, lo, th; @@ -370,7 +388,7 @@ void CG_GhostBuildableRangeMarker( buildable_t buildable, const vec3_t origin, c vectoangles( normal, angles ); CG_DrawRangeMarker( rmType, localOrigin, ( rmType != RMT_SPHERE ? angles : NULL ), - range, drawS, drawI, drawF, rgb, so, lo, th ); + range, drawS, drawI, drawF, rgb, so, lo, th, animation ); } } @@ -392,8 +410,8 @@ void CG_RangeMarker( centity_t *cent ) if( CG_GetRangeMarkerPreferences( &drawS, &drawI, &drawF, &so, &lo, &th ) && CG_GetBuildableRangeMarkerProperties( cent->currentState.modelindex, &rmType, &range, rgb ) ) { + // Allways draw range marker send by the server directly CG_DrawRangeMarker( rmType, cent->lerpOrigin, ( rmType > 0 ? cent->lerpAngles : NULL ), - range, drawS, drawI, drawF, rgb, so, lo, th ); + range, drawS, drawI, drawF, rgb, so, lo, th, 1.0f ); } } - diff --git a/src/cgame/cg_scanner.c b/src/cgame/cg_scanner.c index a7df03054..b0455cc64 100644 --- a/src/cgame/cg_scanner.c +++ b/src/cgame/cg_scanner.c @@ -182,7 +182,9 @@ static void CG_DrawDir( rectDef_t *rect, vec3_t origin, vec4_t colour ) vec3_t up = { 0.0f, 0.0f, 1.0f }; vec3_t top = { 0.0f, -1.0f, 0.0f }; float angle; + float distanceRatio; playerState_t *ps = &cg.snap->ps; + vec4_t drawColor; BG_GetClientNormal( ps, normal ); @@ -205,7 +207,12 @@ static void CG_DrawDir( rectDef_t *rect, vec3_t origin, vec4_t colour ) RotatePointAroundVector( drawOrigin, up, top, angle ); - trap_R_SetColor( colour ); + Vector4Copy(colour, drawColor); + // simplified circular easing out + distanceRatio = Distance(view, origin) / ALIENSENSE_RANGE; + drawColor[3] *= sqrt( 1 - distanceRatio * distanceRatio); + + trap_R_SetColor( drawColor ); CG_DrawPic( rect->x + ( rect->w / 2 ) - ( BLIPX2 / 2 ) - drawOrigin[ 0 ] * ( rect->w / 2 ), rect->y + ( rect->h / 2 ) - ( BLIPY2 / 2 ) + drawOrigin[ 1 ] * ( rect->h / 2 ), BLIPX2, BLIPY2, cgs.media.scannerBlipShader ); @@ -222,11 +229,33 @@ void CG_AlienSense( rectDef_t *rect ) int i; vec3_t origin; vec3_t relOrigin; - vec4_t buildable = { 1.0f, 0.0f, 0.0f, 0.7f }; - vec4_t client = { 0.0f, 0.0f, 1.0f, 0.7f }; + vec4_t abuildable = { 0.5f, 0.55f, 0.02f, 0.7f }; + vec4_t aclient = { 0.325f, 0.55f, 0.025f, 0.7f }; + vec4_t hbuildable = { 1.0f, 0.0f, 0.0f, 0.7f }; + vec4_t hclient = { 0.0f, 0.0f, 1.0f, 0.7f }; VectorCopy( entityPositions.origin, origin ); + //draw alien buildables + for( i = 0; i < entityPositions.numAlienBuildables; i++ ) + { + VectorClear( relOrigin ); + VectorSubtract( entityPositions.alienBuildablePos[ i ], origin, relOrigin ); + + if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) + CG_DrawDir( rect, relOrigin, abuildable ); + } + + //draw alien clients + for( i = 0; i < entityPositions.numAlienClients; i++ ) + { + VectorClear( relOrigin ); + VectorSubtract( entityPositions.alienClientPos[ i ], origin, relOrigin ); + + if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) + CG_DrawDir( rect, relOrigin, aclient ); + } + //draw human buildables for( i = 0; i < entityPositions.numHumanBuildables; i++ ) { @@ -234,7 +263,7 @@ void CG_AlienSense( rectDef_t *rect ) VectorSubtract( entityPositions.humanBuildablePos[ i ], origin, relOrigin ); if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) - CG_DrawDir( rect, relOrigin, buildable ); + CG_DrawDir( rect, relOrigin, hbuildable ); } //draw human clients @@ -244,7 +273,7 @@ void CG_AlienSense( rectDef_t *rect ) VectorSubtract( entityPositions.humanClientPos[ i ], origin, relOrigin ); if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) - CG_DrawDir( rect, relOrigin, client ); + CG_DrawDir( rect, relOrigin, hclient ); } } @@ -382,7 +411,7 @@ void THZ_DrawScanner( rectDef_t *rect ) // Draw cross CG_FillRect( rect->x + (rect->w/2), - rect->y, + rect->y, 1, rect->h, color ); diff --git a/src/cgame/cg_servercmds.c b/src/cgame/cg_servercmds.c index 4de7586f7..14addea76 100644 --- a/src/cgame/cg_servercmds.c +++ b/src/cgame/cg_servercmds.c @@ -146,6 +146,44 @@ static void CG_ParseWarmup( void ) cg.warmupTime = warmup; } +/* +================== +CG_ParseAlienStates +================== +*/ +static void CG_ParseAlienStates( void ) +{ + const char *alienStates = CG_ConfigString( CS_ALIEN_STATUS ); + alienStates_t *state = &cgs.alienStates; + + if( alienStates[0] ) + { + sscanf( alienStates, "%d %d %d %d %d", &state->omBuilding, &state->omHealth, + &state->spawns, &state->builders, &state->boosters ); + } + else + state->omBuilding = state->omHealth = state->spawns = state->builders = state->boosters = 0; +} + +/* +================== +CG_ParseAliensStates +================== +*/ +static void CG_ParseHumanStates( void ) +{ + const char *humanStates = CG_ConfigString( CS_HUMAN_STATUS ); + humanStates_t *state = &cgs.humanStates; + + if( humanStates[0] ) + { + sscanf( humanStates, "%d %d %d %d %d %d %d", &state->rcBuilding, &state->rcHealth, + &state->spawns, &state->builders, &state->armourys, &state->medicals, &state->computers ); + } + else + state->rcBuilding = state->rcHealth = state->spawns = state->builders = state->armourys = state->medicals = 0; +} + /* ================ CG_SetConfigValues @@ -175,6 +213,9 @@ void CG_SetConfigValues( void ) else cgs.humanStage = cgs.humanCredits = cgs.humanNextStageThreshold = 0; + CG_ParseAlienStates(); + CG_ParseHumanStates(); + cgs.levelStartTime = atoi( CG_ConfigString( CS_LEVEL_START_TIME ) ); cg.warmupTime = atoi( CG_ConfigString( CS_WARMUP ) ); } @@ -319,6 +360,10 @@ static void CG_ConfigStringModified( void ) cgs.humanStage = cgs.humanCredits = cgs.humanNextStageThreshold = 0; } } + else if( num == CS_ALIEN_STATUS ) + CG_ParseAlienStates( ); + else if( num == CS_HUMAN_STATUS ) + CG_ParseHumanStates( ); else if( num == CS_LEVEL_START_TIME ) cgs.levelStartTime = atoi( str ); else if( num >= CS_VOTE_TIME && num < CS_VOTE_TIME + NUM_TEAMS ) @@ -432,7 +477,7 @@ void CG_Menu( int menu, int arg ) const char *shortMsg = NULL; // non-modal version of message const char *dialog; dialogType_t type = 0; // controls which cg_disable var will switch it off - + switch( cg.snap->ps.stats[ STAT_TEAM ] ) { case TEAM_ALIENS: @@ -521,7 +566,7 @@ void CG_Menu( int menu, int arg ) //=============================== // Since cheating commands have no default binds, they will often be done - // via console. In light of this, perhaps opening a menu is + // via console. In light of this, perhaps opening a menu is // counterintuitive case MN_CMD_CHEAT: //longMsg = "This action is considered cheating. It can only be used " @@ -570,7 +615,7 @@ void CG_Menu( int menu, int arg ) //=============================== - + case MN_B_NOROOM: longMsg = "There is no room to build here. Move until the structure turns " "translucent green, indicating a valid build location."; @@ -804,7 +849,7 @@ void CG_Menu( int menu, int arg ) break; case MN_A_CANTEVOLVE: - shortMsg = va( "You cannot evolve into a %s", + shortMsg = va( "You cannot evolve into a %s", BG_ClassConfig( arg )->humanName ); type = DT_ARMOURYEVOLVE; break; @@ -818,13 +863,13 @@ void CG_Menu( int menu, int arg ) shortMsg = "Unknown class"; type = DT_ARMOURYEVOLVE; break; - + case MN_A_CLASSNOTSPAWN: - shortMsg = va( "You cannot spawn as a %s", + shortMsg = va( "You cannot spawn as a %s", BG_ClassConfig( arg )->humanName ); type = DT_ARMOURYEVOLVE; break; - + case MN_A_CLASSNOTALLOWED: shortMsg = va( "The %s is not allowed", BG_ClassConfig( arg )->humanName ); @@ -841,7 +886,7 @@ void CG_Menu( int menu, int arg ) default: Com_Printf( "cgame: debug: no such menu %d\n", menu ); } - + if( type == DT_ARMOURYEVOLVE && cg_disableUpgradeDialogs.integer ) return; @@ -997,7 +1042,7 @@ static void CG_Say( int clientNum, saymode_t mode, const char *text ) #endif if( !ignore[0] ) { - CG_CenterPrint( va( "%sPrivate message from: " S_COLOR_WHITE "%s", + CG_CenterPrint( va( "%sPrivate message from: " S_COLOR_WHITE "%s", color, name ), 200, GIANTCHAR_WIDTH * 4 ); if( clientNum < 0 || clientNum >= MAX_CLIENTS ) clientNum = cg.clientNum; @@ -1024,7 +1069,7 @@ static void CG_Say( int clientNum, saymode_t mode, const char *text ) trap_S_StartLocalSound( cgs.media.humanTalkSound, CHAN_LOCAL_SOUND ); break; } - default: + default: trap_S_StartLocalSound( cgs.media.talkSound, CHAN_LOCAL_SOUND ); } } @@ -1108,7 +1153,7 @@ static void CG_ParseVoice( void ) track = CG_VoiceTrack( ci->voice, atoi( CG_Argv( 3 ) ), atoi( CG_Argv( 4 ) ) ); // keep track of how long the player will be speaking - // assume it takes 3s to say "*unintelligible gibberish*" + // assume it takes 3s to say "*unintelligible gibberish*" if( track ) ci->voiceTime = cg.time + track->duration; else @@ -1121,8 +1166,8 @@ static void CG_ParseVoice( void ) else Q_strncpyz( sayText, "*unintelligible gibberish*", sizeof( sayText ) ); } - - if( !cg_noVoiceText.integer ) + + if( !cg_noVoiceText.integer ) { switch( vChan ) { @@ -1158,7 +1203,7 @@ static void CG_ParseVoice( void ) break; default: break; - } + } } /* diff --git a/src/cgame/cg_tutorial.c b/src/cgame/cg_tutorial.c index e9dbcd690..efbfc3ded 100644 --- a/src/cgame/cg_tutorial.c +++ b/src/cgame/cg_tutorial.c @@ -176,7 +176,7 @@ CG_AlienBuilderText */ static void CG_AlienBuilderText( char *text, playerState_t *ps ) { - buildable_t buildable = ps->stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT; + buildable_t buildable = ps->stats[ STAT_BUILDABLE ] & SB_BUILDABLE_MASK; entityState_t *es; if( buildable > BA_NONE ) @@ -190,6 +190,13 @@ static void CG_AlienBuilderText( char *text, playerState_t *ps ) va( "Press %s to cancel placing the %s\n", CG_KeyNameForCommand( "+button5" ), BG_Buildable( buildable )->humanName ) ); + + Q_strcat( text, MAX_TUTORIAL_TEXT, + va( "Press %s or %s to rotate the %s and %s to reset\n", + CG_KeyNameForCommand( "rotatebuildleft" ), + CG_KeyNameForCommand( "rotatebuildright" ), + BG_Buildable( buildable )->humanName, + CG_KeyNameForCommand( "rotatebuild" ) ) ); } else { @@ -223,7 +230,7 @@ static void CG_AlienBuilderText( char *text, playerState_t *ps ) } } - if( ( ps->stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT ) == BA_NONE ) + if( ( ps->stats[ STAT_BUILDABLE ] & SB_BUILDABLE_MASK ) == BA_NONE ) { Q_strcat( text, MAX_TUTORIAL_TEXT, va( "Press %s to swipe\n", @@ -352,7 +359,7 @@ CG_HumanCkitText */ static void CG_HumanCkitText( char *text, playerState_t *ps ) { - buildable_t buildable = ps->stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT; + buildable_t buildable = ps->stats[ STAT_BUILDABLE ] & SB_BUILDABLE_MASK; entityState_t *es; if( buildable > BA_NONE ) @@ -366,6 +373,13 @@ static void CG_HumanCkitText( char *text, playerState_t *ps ) va( "Press %s to cancel placing the %s\n", CG_KeyNameForCommand( "+button5" ), BG_Buildable( buildable )->humanName ) ); + + Q_strcat( text, MAX_TUTORIAL_TEXT, + va( "Press %s or %s to rotate the %s and %s to reset\n", + CG_KeyNameForCommand( "rotatebuildleft" ), + CG_KeyNameForCommand( "rotatebuildright" ), + BG_Buildable( buildable )->humanName, + CG_KeyNameForCommand( "rotatebuild" ) ) ); } else { @@ -588,7 +602,7 @@ static void CG_SpectatorText( char *text, playerState_t *ps ) va( "Press %s to spawn\n", CG_KeyNameForCommand( "+attack" ) ) ); } - else + else { Q_strcat( text, MAX_TUTORIAL_TEXT, va( "Press %s to join a team\n", diff --git a/src/cgame/cg_weapons.c b/src/cgame/cg_weapons.c index fc88606f1..d61d3a229 100644 --- a/src/cgame/cg_weapons.c +++ b/src/cgame/cg_weapons.c @@ -1254,8 +1254,8 @@ void CG_AddViewWeapon( playerState_t *ps ) return; // draw a prospective buildable infront of the player - if( ( ps->stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT ) > BA_NONE ) - CG_GhostBuildable( ps->stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT ); + if( ( ps->stats[ STAT_BUILDABLE ] & SB_BUILDABLE_MASK ) > BA_NONE ) + CG_GhostBuildable( ps->stats[ STAT_BUILDABLE ] & SB_BUILDABLE_MASK ); // no gun if in third person view if( cg.renderingThirdPerson ) @@ -1407,20 +1407,7 @@ void CG_DrawItemSelect( rectDef_t *rect, vec4_t color ) if( cg.predictedPlayerState.stats[ STAT_HEALTH ] <= 0 ) return; - if( !( cg.snap->ps.pm_flags & PMF_FOLLOW ) ) - { - // first make sure that whatever it selected is actually selectable - if( cg.weaponSelect < 32 ) - { - if( !CG_WeaponSelectable( cg.weaponSelect ) ) - CG_NextWeapon_f( ); - } - else - { - if( !CG_UpgradeSelectable( cg.weaponSelect - 32 ) ) - CG_NextWeapon_f( ); - } - } + CG_AutoSelectWeapon_f( ); // showing weapon select clears pickup item display, but not the blend blob cg.itemPickupTime = 0; @@ -1577,6 +1564,46 @@ void CG_DrawItemSelectText( rectDef_t *rect, float scale, int textStyle ) } +/* +=============== +CG_AutoSelectWeapon_f +=============== +*/ +void CG_AutoSelectWeapon_f( void ) +{ + static weapon_t oldWeapon; + weapon_t weapon; + playerState_t *ps; + + if( ( cg.snap->ps.pm_flags & PMF_FOLLOW ) ) + return; + + ps = &cg.snap->ps; + + weapon = BG_GetPlayerWeapon( ps ); + + // Allways reset cursor on current weapon + if ( weapon != oldWeapon ) + { + oldWeapon = weapon; + if( cg.weaponSelect != weapon && CG_WeaponSelectable ( weapon ) ) + cg.weaponSelect = weapon; + } + + // make sure that whatever it selected is actually selectable + if( cg.weaponSelect < 32 ) + { + if( !CG_WeaponSelectable( cg.weaponSelect ) ) + CG_NextWeapon_f( ); + } + else + { + if( !CG_UpgradeSelectable( cg.weaponSelect - 32 ) ) + CG_NextWeapon_f( ); + } +} + + /* =============== CG_NextWeapon_f @@ -1875,7 +1902,7 @@ void CG_MissileHitEntity( weapon_t weaponNum, weaponMode_t weaponMode, } else sound = IMPACTSOUND_DEFAULT; - + CG_MissileHitWall( weaponNum, weaponMode, 0, origin, dir, sound, charge ); } } diff --git a/src/client/cl_keys.cpp b/src/client/cl_keys.cpp index 82f56668f..733a3105c 100644 --- a/src/client/cl_keys.cpp +++ b/src/client/cl_keys.cpp @@ -1089,6 +1089,10 @@ void Key_Bind_f (void) strcat (cmd, " "); } + // Autoconvert boost to +button8 + if (strcmp(cmd, "boost") == 0) + return Key_SetBinding (b, "+button8"); + Key_SetBinding (b, cmd); } diff --git a/src/client/cl_main.cpp b/src/client/cl_main.cpp index 8b33acd93..434b68382 100644 --- a/src/client/cl_main.cpp +++ b/src/client/cl_main.cpp @@ -2007,6 +2007,7 @@ void CL_NextDownload(void) char *remoteName, *localName; bool useCURL = false; int prompt; + int remaining; // A download has finished, check whether this matches a referenced checksum if (*clc.downloadName && !clc.activeCURLNotGameRelated) @@ -2023,6 +2024,16 @@ void CL_NextDownload(void) // We are looking to start a download here if (*clc.downloadList) { + // Calculated + remaining = 1; // 1 to be rounded up, '@' may not be in pair + s = clc.downloadList; + while (*s) + if (*(s++) == '@') + remaining++; + remaining /= 2; + clc.downloadDone = clc.downloadTotal - remaining; + Cvar_SetValue("cl_downloadDone", clc.downloadDone); + // Prompt if we do not allow automatic downloads prompt = com_downloadPrompt->integer; if (!(prompt & DLP_TYPE_MASK) && !(cl_allowDownload->integer & DLF_ENABLE)) @@ -2221,6 +2232,8 @@ and determine if we need to download them */ void CL_InitDownloads(void) { + char *s; + if (FS_ComparePaks(clc.downloadList, sizeof(clc.downloadList), true)) { Com_Printf("Need paks: %s\n", clc.downloadList); @@ -2228,10 +2241,20 @@ void CL_InitDownloads(void) Cvar_Set("com_downloadPrompt", "0"); if (*clc.downloadList) { + clc.downloadDone = 0; + clc.downloadTotal = 0; + s = clc.downloadList; + while (*s) + if (*(s++) == '@') + clc.downloadTotal++; + clc.downloadTotal /= 2; + // if autodownloading is not enabled on the server clc.state = CA_CONNECTED; *clc.downloadTempName = *clc.downloadName = 0; Cvar_Set("cl_downloadName", ""); + Cvar_Set("cl_downloadDone", "0"); + Cvar_SetValue("cl_downloadTotal", clc.downloadTotal); CL_NextDownload(); return; } @@ -4687,7 +4710,7 @@ static void CL_InitRef(void) Com_Printf("----- Initializing Renderer ----\n"); #ifdef USE_RENDERER_DLOPEN - cl_renderer = Cvar_Get("cl_renderer", "opengl2", CVAR_ARCHIVE | CVAR_LATCH); + cl_renderer = Cvar_Get("cl_renderer", "opengl1", CVAR_ARCHIVE | CVAR_LATCH); Com_sprintf(dllName, sizeof(dllName), "renderer_%s" DLL_EXT, cl_renderer->string); diff --git a/src/client/client.h b/src/client/client.h index 2474a3da4..ba99d0826 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -284,7 +284,9 @@ struct clientConnection_t { int sv_allowDownload; char sv_dlURL[MAX_CVAR_VALUE_STRING]; - int downloadNumber; + int downloadNumber; // Unused ?? + int downloadTotal; + int downloadDone; int downloadBlock; // block we are waiting for int downloadCount; // how many bytes we got int downloadSize; // how many bytes we got diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c index e30a754f4..ebd9ed9a1 100644 --- a/src/game/bg_misc.c +++ b/src/game/bg_misc.c @@ -1345,7 +1345,7 @@ int BG_ClassCanEvolveFromTo( class_t fclass, for( j = 0; j < 3; j++ ) { int thruClass, evolveCost; - + thruClass = bg_classList[ i ].children[ j ]; if( thruClass == PCL_NONE || !BG_ClassAllowedInStage( thruClass, stage ) || !BG_ClassIsAllowed( thruClass ) ) @@ -2959,7 +2959,7 @@ void BG_PlayerStateToEntityState( playerState_t *ps, entityState_t *s, qboolean if( s->generic1 <= WPM_NONE || s->generic1 >= WPM_NUM_WEAPONMODES ) s->generic1 = WPM_PRIMARY; - s->otherEntityNum = ps->otherEntityNum; + s->otherEntityNum = ps->otherEntityNum; } @@ -3085,7 +3085,7 @@ qboolean BG_WeaponIsFull( weapon_t weapon, int stats[ ], int ammo, int clips ) maxAmmo = BG_Weapon( weapon )->maxAmmo; maxClips = BG_Weapon( weapon )->maxClips; - if( BG_InventoryContainsUpgrade( UP_BATTPACK, stats ) ) + if( BG_InventoryContainsUpgrade( UP_BATTPACK, stats ) && BG_Weapon( weapon )->usesEnergy) maxAmmo = (int)( (float)maxAmmo * BATTPACK_MODIFIER ); return ( maxAmmo == ammo ) && ( maxClips == clips ); @@ -3107,6 +3107,33 @@ qboolean BG_InventoryContainsWeapon( int weapon, int stats[ ] ) return ( stats[ STAT_WEAPON ] == weapon ); } +/* +======================== +BG_GetConflictingWithInventory + +Calculate conflicting's item name slots with sended slots +======================== +*/ +void BG_GetConflictingWithInventory( int refSlots, int stats[ ], int conflictingWP[WP_NUM_WEAPONS - 1], + int conflictingUP[UP_NUM_UPGRADES - 1] ) +{ + int i, j = 0; + + if ( BG_Weapon( stats[ STAT_WEAPON ] )->slots & refSlots ) + conflictingWP[j++] = stats[ STAT_WEAPON ]; + if( stats[ STAT_TEAM ] == TEAM_HUMANS && (BG_Weapon( WP_BLASTER )->slots & refSlots) ) + conflictingWP[j++] = WP_BLASTER; + conflictingWP[j] = 0; + j = 0; + for( i = UP_NONE; i < UP_NUM_UPGRADES; i++ ) + { + if( BG_InventoryContainsUpgrade( i, stats ) && ( BG_Upgrade( i )->slots & refSlots ) ) + conflictingUP[j++] = i; + } + conflictingUP[j] = 0; +} + + /* ======================== BG_SlotsForInventory @@ -3298,6 +3325,25 @@ void BG_GetClientViewOrigin( const playerState_t *ps, vec3_t viewOrigin ) VectorMA( ps->origin, ps->viewheight, normal, viewOrigin ); } +/* +=============== +BG_GetBuildableRotation + +Read the custom rotation added by the player +=============== +*/ +static int BG_GetBuildableRotation( const playerState_t *ps ) +{ + int angle = 0; + + // Get the angle in hexadecimal with value from 0 to 15 + angle = (ps->stats[ STAT_BUILDABLE ] & SB_ROTATION_MASK) / SB_ROTATION_UNIT; + // Convert to degree + angle = (int)((float)angle * 360.0f/16.0f); + + return (angle); +} + /* =============== BG_PositionBuildableRelativeToPlayer @@ -3311,7 +3357,7 @@ void BG_PositionBuildableRelativeToPlayer( const playerState_t *ps, const vec3_t, const vec3_t, int, int ), vec3_t outOrigin, vec3_t outAngles, trace_t *tr ) { - vec3_t forward, entityOrigin, targetOrigin; + vec3_t forward, rotated, entityOrigin, targetOrigin; vec3_t angles, playerOrigin, playerNormal; float buildDist; @@ -3325,6 +3371,7 @@ void BG_PositionBuildableRelativeToPlayer( const playerState_t *ps, ProjectPointOnPlane( forward, forward, playerNormal ); VectorNormalize( forward ); + // Move the build to `buildDist` distance forwaring the player VectorMA( playerOrigin, buildDist, forward, entityOrigin ); VectorCopy( entityOrigin, targetOrigin ); @@ -3338,7 +3385,10 @@ void BG_PositionBuildableRelativeToPlayer( const playerState_t *ps, // The mask is MASK_DEADSOLID on purpose to avoid collisions with other entities (*trace)( tr, entityOrigin, mins, maxs, targetOrigin, ps->clientNum, MASK_DEADSOLID ); VectorCopy( tr->endpos, outOrigin ); - vectoangles( forward, outAngles ); + + // Create a rotated vector from the forwarding. The norrnal was calculated from `trace` + RotatePointAroundVector(rotated, tr->plane.normal, forward, BG_GetBuildableRotation(ps)); + vectoangles( rotated, outAngles ); } /* @@ -3401,7 +3451,7 @@ int BG_PlayerPoisonCloudTime( playerState_t *ps ) time -= HELMET_PCLOUD_PROTECTION; if( BG_InventoryContainsUpgrade( UP_LIGHTARMOUR, ps->stats ) ) time -= LIGHTARMOUR_PCLOUD_PROTECTION; - + return time; } diff --git a/src/game/bg_public.h b/src/game/bg_public.h index f850a5d2c..ba96b4cae 100644 --- a/src/game/bg_public.h +++ b/src/game/bg_public.h @@ -72,7 +72,7 @@ enum CS_VOTE_YES = CS_VOTE_STRING + NUM_TEAMS, CS_VOTE_NO = CS_VOTE_YES + NUM_TEAMS, CS_VOTE_CALLER = CS_VOTE_NO + NUM_TEAMS, - + CS_GAME_VERSION = CS_VOTE_CALLER + NUM_TEAMS, CS_LEVEL_START_TIME, // so the timer only shows the current level CS_INTERMISSION, // when 1, fraglimit/timelimit has been hit and intermission will start in a second or two @@ -83,6 +83,8 @@ enum CS_ALIEN_STAGES, CS_HUMAN_STAGES, + CS_ALIEN_STATUS, + CS_HUMAN_STATUS, CS_MODELS, CS_SOUNDS = CS_MODELS + MAX_MODELS, @@ -259,7 +261,10 @@ typedef enum #define SS_HEALING_2X 0x00000800 // medkit or double healing rate #define SS_HEALING_3X 0x00001000 // triple healing rate -#define SB_VALID_TOGGLEBIT 0x00002000 +#define SB_BUILDABLE_MASK 0x000000ff +#define SB_ROTATION_MASK 0x0000f000 +#define SB_ROTATION_UNIT 0x00001000 +#define SB_VALID_TOGGLEBIT 0x00000200 // player_state->persistant[] indexes // these fields are the only part of player_state that isn't @@ -1030,7 +1035,7 @@ typedef struct qboolean dccTest; qboolean transparentTest; qboolean uniqueTest; - + int value; } buildableAttributes_t; @@ -1103,8 +1108,31 @@ typedef struct team_t team; } upgradeAttributes_t; +// Teams status provided by the server, also a remplacement for /teamstatus +typedef struct +{ + int omBuilding; + int omHealth; + int spawns; + int builders; + int boosters; +} alienStates_t; + +typedef struct +{ + int rcBuilding; + int rcHealth; + int spawns; + int builders; + int armourys; + int medicals; + int computers; +} humanStates_t; + qboolean BG_WeaponIsFull( weapon_t weapon, int stats[ ], int ammo, int clips ); qboolean BG_InventoryContainsWeapon( int weapon, int stats[ ] ); +void BG_GetConflictingWithInventory( int refSlots, int stats[ ], int conflictingWP[WP_NUM_WEAPONS - 1], + int conflictingUP[UP_NUM_UPGRADES - 1] ); int BG_SlotsForInventory( int stats[ ] ); void BG_AddUpgradeToInventory( int item, int stats[ ] ); void BG_RemoveUpgradeFromInventory( int item, int stats[ ] ); diff --git a/src/game/g_active.c b/src/game/g_active.c index d978a4aa6..207b86922 100644 --- a/src/game/g_active.c +++ b/src/game/g_active.c @@ -218,7 +218,7 @@ static void ClientShove( gentity_t *ent, gentity_t *victim ) vec3_t dir, push; float force; int entMass, vicMass; - + // Don't push if the entity is not trying to move if( !ent->client->pers.cmd.rightmove && !ent->client->pers.cmd.forwardmove && !ent->client->pers.cmd.upmove ) @@ -227,7 +227,7 @@ static void ClientShove( gentity_t *ent, gentity_t *victim ) // Cannot push enemy players unless they are walking on the player if( !OnSameTeam( ent, victim ) && victim->client->ps.groundEntityNum != ent - g_entities ) - return; + return; // Shove force is scaled by relative mass entMass = GetClientMass( ent ); @@ -245,7 +245,7 @@ static void ClientShove( gentity_t *ent, gentity_t *victim ) VectorNormalizeFast( dir ); VectorScale( dir, force, push ); VectorAdd( victim->client->ps.velocity, push, victim->client->ps.velocity ); - + // Set the pmove timer so that the other client can't cancel // out the movement immediately if( !victim->client->ps.pm_time ) @@ -401,8 +401,8 @@ void SpectatorThink( gentity_t *ent, usercmd_t *ucmd ) attack1 = ( client->buttons & BUTTON_ATTACK ) && !( client->oldbuttons & BUTTON_ATTACK ); - - // We are in following mode only if we are following a non-spectating client + + // We are in following mode only if we are following a non-spectating client following = client->sess.spectatorState == SPECTATOR_FOLLOW; if( following ) { @@ -412,7 +412,7 @@ void SpectatorThink( gentity_t *ent, usercmd_t *ucmd ) g_entities[ clientNum ].client->sess.spectatorState != SPECTATOR_NOT ) following = qfalse; } - + // Check to see if we are in the spawn queue if( client->pers.teamSelection == TEAM_ALIENS ) queued = G_SearchSpawnQueue( &level.alienSpawnQueue, ent - g_entities ); @@ -596,7 +596,7 @@ void ClientTimerActions( gentity_t *ent, int msec ) while ( client->time100 >= 100 ) { weapon_t weapon = BG_GetPlayerWeapon( &client->ps ); - + client->time100 -= 100; // Restore or subtract stamina @@ -607,7 +607,7 @@ void ClientTimerActions( gentity_t *ent, int msec ) client->ps.stats[ STAT_STAMINA ] -= STAMINA_SPRINT_TAKE; else if( walking || crouched ) client->ps.stats[ STAT_STAMINA ] += STAMINA_WALK_RESTORE; - + // Check stamina limits if( client->ps.stats[ STAT_STAMINA ] > STAMINA_MAX ) client->ps.stats[ STAT_STAMINA ] = STAMINA_MAX; @@ -630,16 +630,16 @@ void ClientTimerActions( gentity_t *ent, int msec ) case WP_ABUILD: case WP_ABUILD2: case WP_HBUILD: - + // Set validity bit on buildable - if( ( client->ps.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT ) > BA_NONE ) + if( ( client->ps.stats[ STAT_BUILDABLE ] & SB_BUILDABLE_MASK ) > BA_NONE ) { int dist = BG_Class( ent->client->ps.stats[ STAT_CLASS ] )->buildDist; - vec3_t dummy, dummy2; - int dummy3; + vec3_t dummy, dummy2, dummy3; + int dummy4; - if( G_CanBuild( ent, client->ps.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT, - dist, dummy, dummy2, &dummy3 ) == IBE_NONE ) + if( G_CanBuild( ent, client->ps.stats[ STAT_BUILDABLE ] & SB_BUILDABLE_MASK, + dist, dummy, dummy2, dummy3, &dummy4 ) == IBE_NONE ) client->ps.stats[ STAT_BUILDABLE ] |= SB_VALID_TOGGLEBIT; else client->ps.stats[ STAT_BUILDABLE ] &= ~SB_VALID_TOGGLEBIT; @@ -664,7 +664,7 @@ void ClientTimerActions( gentity_t *ent, int msec ) break; } - if( ent->client->pers.teamSelection == TEAM_HUMANS && + if( ent->client->pers.teamSelection == TEAM_HUMANS && ( client->ps.stats[ STAT_STATE ] & SS_HEALING_2X ) ) { int remainingStartupTime = MEDKIT_STARTUP_TIME - ( level.time - client->lastMedKitTime ); @@ -1539,7 +1539,7 @@ void ClientThink_real( gentity_t *ent ) ent->flags &= ~FL_FORCE_GESTURE; ent->client->pers.cmd.buttons |= BUTTON_GESTURE; } - + // clear fall velocity before every pmove client->pmext.fallVelocity = 0.0f; diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index 05135c498..76f166009 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -247,7 +247,7 @@ qboolean G_FindPower( gentity_t *self, qboolean searchUnspawned ) // TODO: handle combined power zones here } - } + } else { // Dummy buildables don't need to look for zones @@ -483,7 +483,7 @@ int G_FindDCC( gentity_t *self ) distance = VectorLength( temp_v ); if( distance < DC_RANGE && ent->powered ) { - foundDCC++; + foundDCC++; } } } @@ -535,7 +535,7 @@ The code here will break if more than one reactor or overmind is allowed, even if one of them is dead/unspawned ================ */ -static gentity_t *G_FindBuildable( buildable_t buildable ); +static gentity_t *G_FindBuildable( buildable_t buildable ); gentity_t *G_Reactor( void ) { @@ -596,7 +596,7 @@ qboolean G_FindCreep( gentity_t *self ) if( ent->s.eType != ET_BUILDABLE ) continue; - if( ( ent->s.modelindex == BA_A_SPAWN || + if( ( ent->s.modelindex == BA_A_SPAWN || ent->s.modelindex == BA_A_OVERMIND ) && ent->spawned && ent->health > 0 ) { @@ -843,7 +843,7 @@ void AGeneric_Pain( gentity_t *self, gentity_t *attacker, int damage ) { if( self->health <= 0 ) return; - + // Alien buildables only have the first pain animation defined G_SetBuildableAnim( self, BANIM_PAIN1, qfalse ); } @@ -872,8 +872,8 @@ void ASpawn_Think( gentity_t *self ) if( ( ent = G_CheckSpawnPoint( self->s.number, self->r.currentOrigin, self->s.origin2, BA_A_SPAWN, NULL ) ) != NULL ) { - // If the thing blocking the spawn is a buildable, kill it. - // If it's part of the map, kill self. + // If the thing blocking the spawn is a buildable, kill it. + // If it's part of the map, kill self. if( ent->s.eType == ET_BUILDABLE ) { // don't queue the bp from this @@ -1200,9 +1200,9 @@ void AAcidTube_Think( gentity_t *self ) G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse ); G_AddEvent( self, EV_ALIEN_ACIDTUBE, DirToByte( self->s.origin2 ) ); } - + G_SelectiveRadiusDamage( self->s.pos.trBase, self, ACIDTUBE_DAMAGE, - ACIDTUBE_RANGE, self, MOD_ATUBE, TEAM_ALIENS ); + ACIDTUBE_RANGE, self, MOD_ATUBE, TEAM_ALIENS ); self->nextthink = level.time + ACIDTUBE_REPEAT; return; } @@ -1692,8 +1692,8 @@ void HSpawn_Think( gentity_t *self ) if( ( ent = G_CheckSpawnPoint( self->s.number, self->r.currentOrigin, self->s.origin2, BA_H_SPAWN, NULL ) ) != NULL ) { - // If the thing blocking the spawn is a buildable, kill it. - // If it's part of the map, kill self. + // If the thing blocking the spawn is a buildable, kill it. + // If it's part of the map, kill self. if( ent->s.eType == ET_BUILDABLE ) { G_Damage( ent, NULL, NULL, NULL, NULL, self->health, 0, MOD_SUICIDE ); @@ -2056,7 +2056,7 @@ void HMedistat_Think( gentity_t *self ) //if active use the healing idle if( self->active ) G_SetIdleBuildableAnim( self, BANIM_IDLE2 ); - + //check if a previous occupier is still here num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); for( i = 0; i < num; i++ ) @@ -2065,7 +2065,7 @@ void HMedistat_Think( gentity_t *self ) if( player->flags & FL_NOTARGET ) continue; // notarget cancels even beneficial effects? - + //remove poison from everyone, not just the healed player if( player->client && player->client->ps.stats[ STAT_STATE ] & SS_POISONED ) player->client->ps.stats[ STAT_STATE ] &= ~SS_POISONED; @@ -2173,7 +2173,7 @@ qboolean HMGTurret_CheckTarget( gentity_t *self, gentity_t *target, if( target->flags & FL_NOTARGET ) return qfalse; - + if( !los_check ) return qtrue; @@ -2266,7 +2266,7 @@ void HMGTurret_FindEnemy( gentity_t *self ) int start; self->enemy = NULL; - + // Look for targets in a box around the turret VectorSet( range, MGTURRET_RANGE, MGTURRET_RANGE, MGTURRET_RANGE ); VectorAdd( self->r.currentOrigin, range, maxs ); @@ -2323,7 +2323,7 @@ static qboolean HMGTurret_State( gentity_t *self, int state ) else self->speed *= 1.25f; - self->s.angles2[ PITCH ] = + self->s.angles2[ PITCH ] = MIN( MGTURRET_VERTICALCAP, angle + self->speed ); return qtrue; } @@ -2354,7 +2354,7 @@ Think function for MG turret */ void HMGTurret_Think( gentity_t *self ) { - self->nextthink = level.time + + self->nextthink = level.time + BG_Buildable( self->s.modelindex )->nextthink; // Turn off client side muzzle flashes @@ -2378,7 +2378,7 @@ void HMGTurret_Think( gentity_t *self ) } if( !self->spawned ) return; - + // If the current target is not valid find a new enemy if( !HMGTurret_CheckTarget( self, self->enemy, qtrue ) ) { @@ -2411,7 +2411,7 @@ void HMGTurret_Think( gentity_t *self ) // Not firing or haven't spun up yet if( !self->active || self->turretSpinupTime > level.time ) return; - + // Fire repeat delay if( self->timestamp > level.time ) return; @@ -2552,7 +2552,7 @@ void G_QueueBuildPoints( gentity_t *self ) if( !queuePoints ) return; - + switch( self->buildableTeam ) { default: @@ -3266,7 +3266,7 @@ static itemBuildError_t G_SufficientBPAvailable( buildable_t buildable, // than we have now due to mismatches between priority and BP amounts // by repeatedly testing if we can chop off the first thing that isn't // required by rules of collision/uniqueness, which are always at the head - while( changed && level.numBuildablesForRemoval > 1 && + while( changed && level.numBuildablesForRemoval > 1 && level.numBuildablesForRemoval > numRequired ) { int pointsUnYielded = 0; @@ -3280,7 +3280,7 @@ static itemBuildError_t G_SufficientBPAvailable( buildable_t buildable, pointsYielded -= pointsUnYielded; memmove( &level.markedBuildables[ numRequired ], &level.markedBuildables[ numRequired + 1 ], - ( level.numBuildablesForRemoval - numRequired ) + ( level.numBuildablesForRemoval - numRequired ) * sizeof( gentity_t * ) ); level.numBuildablesForRemoval--; changed = qtrue; @@ -3351,9 +3351,8 @@ Checks to see if a buildable can be built ================ */ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance, - vec3_t origin, vec3_t normal, int *groundEntNum ) + vec3_t origin, vec3_t normal, vec3_t angles, int *groundEntNum ) { - vec3_t angles; vec3_t entity_origin; vec3_t mins, maxs; trace_t tr1, tr2, tr3; @@ -3435,7 +3434,7 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance tempent = G_Reactor( ); if( tempent == NULL ) // No reactor - reason = IBE_RPTNOREAC; + reason = IBE_RPTNOREAC; else if( g_markDeconstruct.integer && G_IsPowered( entity_origin ) == BA_H_REACTOR ) reason = IBE_RPTPOWERHERE; else if( !g_markDeconstruct.integer && G_IsPowered( entity_origin ) ) @@ -3797,15 +3796,15 @@ G_BuildIfValid qboolean G_BuildIfValid( gentity_t *ent, buildable_t buildable ) { float dist; - vec3_t origin, normal; + vec3_t origin, normal, angles; int groundEntNum; dist = BG_Class( ent->client->ps.stats[ STAT_CLASS ] )->buildDist; - switch( G_CanBuild( ent, buildable, dist, origin, normal, &groundEntNum ) ) + switch( G_CanBuild( ent, buildable, dist, origin, normal, angles, &groundEntNum ) ) { case IBE_NONE: - G_Build( ent, buildable, origin, normal, ent->s.apos.trBase, groundEntNum ); + G_Build( ent, buildable, origin, normal, angles, groundEntNum ); return qtrue; case IBE_NOALIENBP: @@ -4567,7 +4566,7 @@ void G_BuildLogRevert( int id ) builder->nextthink = level.time + FRAMETIME; // Number of thinks before giving up and killing players in the way - builder->suicideTime = 30; + builder->suicideTime = 30; if( log->fate == BF_DESTROY || log->fate == BF_TEAMKILL ) { diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index 4dccf6af0..1059bdc85 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -400,8 +400,8 @@ static void Give_Class( gentity_t *ent, char *s ) return; } - ent->client->pers.evolveHealthFraction - = (float)ent->client->ps.stats[ STAT_HEALTH ] + ent->client->pers.evolveHealthFraction + = (float)ent->client->ps.stats[ STAT_HEALTH ] / (float)BG_Class( currentClass )->health; if( ent->client->pers.evolveHealthFraction < 0.0f ) @@ -466,7 +466,7 @@ void Cmd_Give_f( gentity_t *ent ) if( trap_Argc( ) < 2 ) { ADMP( "^3give: ^7usage: give [what]\n" - "health, funds , stamina, poison, gas, ammo, " + "health, funds , stamina, poison, gas, ammo, " "^3level0, level1, level1upg, level2, level2upg, level3, level3upg, level4, builder, builderupg, " "human_base, human_bsuit, " "^5blaster, rifle, psaw, shotgun, lgun, mdriver, chaingun, flamer, prifle, grenade, lockblob, " @@ -494,7 +494,7 @@ void Cmd_Give_f( gentity_t *ent ) else { credits = atof( name + 6 ) * - ( ent->client->pers.teamSelection == + ( ent->client->pers.teamSelection == TEAM_ALIENS ? ALIEN_CREDITS_PER_KILL : 1.0f ); // clamp credits manually, as G_AddCreditToClient() expects a short int @@ -761,7 +761,7 @@ void Cmd_Team_f( gentity_t *ent ) humans--; // stop team join spam - if( ent->client->pers.teamChangeTime && + if( ent->client->pers.teamChangeTime && level.time - ent->client->pers.teamChangeTime < 1000 ) return; @@ -1410,8 +1410,8 @@ void Cmd_CallVote_f( gentity_t *ent ) G_AdminMessage( NULL, va( S_COLOR_WHITE "%s" S_COLOR_YELLOW " attempted %s %s" " on immune admin " S_COLOR_WHITE "%s" S_COLOR_YELLOW " for: %s", - ent->client->pers.netname, cmd, vote, - g_entities[ clientNum ].client->pers.netname, + ent->client->pers.netname, cmd, vote, + g_entities[ clientNum ].client->pers.netname, reason[ 0 ] ? reason : "no reason" ) ); return; } @@ -1692,9 +1692,9 @@ void Cmd_CallVote_f( gentity_t *ent ) } else if( G_admin_permission( &g_entities[ i ], ADMF_ADMINCHAT ) ) { - trap_SendServerCommand( i, va( "chat -1 %d \"" S_COLOR_YELLOW "%s" + trap_SendServerCommand( i, va( "chat -1 %d \"" S_COLOR_YELLOW "%s" S_COLOR_YELLOW " called a team vote (%ss): %s\"", SAY_ADMINS, - ent->client->pers.netname, BG_TeamName( team ), + ent->client->pers.netname, BG_TeamName( team ), level.voteDisplayString[ team ] ) ); } } @@ -2273,6 +2273,187 @@ void Cmd_ToggleItem_f( gentity_t *ent ) trap_SendServerCommand( ent-g_entities, va( "print \"You don't have the %s\n\"", s ) ); } +/* +================= +G_CanClientSellWeapon +================= +*/ +qboolean G_CanClientSellWeapon( gentity_t *ent, weapon_t weapon ) +{ + //no armoury nearby + if( !G_BuildableRange( ent->client->ps.origin, 100, BA_H_ARMOURY ) ) + { + G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOARMOURYHERE ); + return (qfalse); + } + + if( !BG_PlayerCanChangeWeapon( &ent->client->ps ) ) + return (qfalse); + + //are we /allowed/ to sell this? + if( !BG_Weapon( weapon )->purchasable ) + { + trap_SendServerCommand( ent-g_entities, "print \"You can't sell this weapon\n\"" ); + return (qfalse); + } + + if( BG_InventoryContainsWeapon( weapon, ent->client->ps.stats ) ) + { + //guard against selling the HBUILD weapons exploit + if( weapon == WP_HBUILD && ent->client->ps.stats[ STAT_MISC ] > 0 ) + { + G_TriggerMenu( ent->client->ps.clientNum, MN_H_ARMOURYBUILDTIMER ); + return (qfalse); + } + return (qtrue); + } + + return (qfalse); +} + +/* +================= +G_SellClientWeapon +Must test G_CanClientSellWeapon +================= +*/ +void G_SellClientWeapon( gentity_t *ent, weapon_t weapon ) +{ + weapon_t selected = BG_GetPlayerWeapon( &ent->client->ps ); + + ent->client->ps.stats[ STAT_WEAPON ] = WP_NONE; + // Cancel ghost buildables + ent->client->ps.stats[ STAT_BUILDABLE ] = BA_NONE; + + //add to funds + G_AddCreditToClient( ent->client, (short)BG_Weapon( weapon )->price, qfalse ); + + //if we have this weapon selected, force a new selection + if( weapon == selected ) + G_ForceWeaponChange( ent, WP_BLASTER ); +} + +/* +================= +G_CanClientSellUpgrade +================= +*/ +qboolean G_CanClientSellUpgrade( gentity_t *ent, upgrade_t upgrade ) +{ + //no armoury nearby + if( !G_BuildableRange( ent->client->ps.origin, 100, BA_H_ARMOURY ) ) + { + G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOARMOURYHERE ); + return (qfalse); + } + + //are we /allowed/ to sell this? + if( !BG_Upgrade( upgrade )->purchasable ) + { + trap_SendServerCommand( ent-g_entities, "print \"You can't sell this item\n\"" ); + return (qfalse); + } + + if( BG_InventoryContainsUpgrade( upgrade, ent->client->ps.stats ) ) + { + // shouldn't really need to test for this, but just to be safe + if( upgrade == UP_BATTLESUIT ) + { + vec3_t newOrigin; + + if( !G_RoomForClassChange( ent, PCL_HUMAN, newOrigin ) ) + { + G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOROOMBSUITOFF ); + return (qfalse); + } + } + + return (qtrue); + } + + return (qfalse); +} + +/* +================= +G_SellClientUpgrade +Must test G_CanClientSellUpgrade +================= +*/ +void G_SellClientUpgrade( gentity_t *ent, upgrade_t upgrade ) +{ + // shouldn't really need to test for this, but just to be safe + if( upgrade == UP_BATTLESUIT ) + { + vec3_t newOrigin; + + if( !G_RoomForClassChange( ent, PCL_HUMAN, newOrigin ) ) + { + G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOROOMBSUITOFF ); + return ; + } + VectorCopy( newOrigin, ent->client->ps.origin ); + ent->client->ps.stats[ STAT_CLASS ] = PCL_HUMAN; + ent->client->pers.classSelection = PCL_HUMAN; + ent->client->ps.eFlags ^= EF_TELEPORT_BIT; + } + + //add to inventory + BG_RemoveUpgradeFromInventory( upgrade, ent->client->ps.stats ); + + if( upgrade == UP_BATTPACK ) + G_GiveClientMaxAmmo( ent, qtrue ); + + //add to funds + G_AddCreditToClient( ent->client, (short)BG_Upgrade( upgrade )->price, qfalse ); +} + +/* +================= +G_PriceOfClientItems +================= +*/ +static int G_PriceOfClientItems( int conflictingWP[WP_NUM_WEAPONS - 1], int conflictingUP[UP_NUM_UPGRADES - 1] ) +{ + int i; + int price = 0; + + i = 0; + while (conflictingWP[i]) + price += BG_Weapon(conflictingWP[i++])->price; + i = 0; + while (conflictingUP[i]) + price += BG_Upgrade(conflictingUP[i++])->price; + return (price); +} +/* +================= +G_SellClientItems +================= +*/ +static qboolean G_SellClientItems( gentity_t *ent, int conflictingWP[WP_NUM_WEAPONS - 1], int conflictingUP[UP_NUM_UPGRADES - 1] ) +{ + int i; + + i = 0; + while (conflictingWP[i]) + if (!G_CanClientSellWeapon(ent, conflictingWP[i++])) + return (qfalse); + i = 0; + while (conflictingUP[i]) + if (!G_CanClientSellUpgrade(ent, conflictingUP[i++])) + return (qfalse); + + i = 0; + while (conflictingWP[i]) + G_SellClientWeapon(ent, conflictingWP[i++]); + i = 0; + while (conflictingUP[i]) + G_SellClientUpgrade(ent, conflictingUP[i++]); + + return (qtrue); +} + /* ================= Cmd_Buy_f @@ -2280,10 +2461,12 @@ Cmd_Buy_f */ void Cmd_Buy_f( gentity_t *ent ) { - char s[ MAX_TOKEN_CHARS ]; + char s[ MAX_TOKEN_CHARS ]; weapon_t weapon; upgrade_t upgrade; qboolean energyOnly; + int conflictingWP[WP_NUM_WEAPONS - 1]; + int conflictingUP[UP_NUM_UPGRADES - 1]; trap_Argv( 1, s, sizeof( s ) ); @@ -2338,18 +2521,23 @@ void Cmd_Buy_f( gentity_t *ent ) return; } + BG_GetConflictingWithInventory(BG_Weapon( weapon )->slots, ent->client->ps.stats, conflictingWP, conflictingUP); + //can afford this? - if( BG_Weapon( weapon )->price > (short)ent->client->pers.credit ) + if( BG_Weapon( weapon )->price > (short)ent->client->pers.credit + G_PriceOfClientItems(conflictingWP, conflictingUP) ) { G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOFUNDS ); return; } - //have space to carry this? + //have space to carry this? try to remove conflicting items, or cancel if( BG_Weapon( weapon )->slots & BG_SlotsForInventory( ent->client->ps.stats ) ) { - G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOSLOTS ); - return; + if (!G_SellClientItems(ent, conflictingWP, conflictingUP)) + { + G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOSLOTS ); + return ; + } } // In some instances, weapons can't be changed @@ -2374,27 +2562,22 @@ void Cmd_Buy_f( gentity_t *ent ) } else if( upgrade != UP_NONE ) { - //already got this? + //already got this? try to remove conflicting items, or cancel if( BG_InventoryContainsUpgrade( upgrade, ent->client->ps.stats ) ) { G_TriggerMenu( ent->client->ps.clientNum, MN_H_ITEMHELD ); return; } + BG_GetConflictingWithInventory(BG_Upgrade( upgrade )->slots, ent->client->ps.stats, conflictingWP, conflictingUP); + //can afford this? - if( BG_Upgrade( upgrade )->price > (short)ent->client->pers.credit ) + if( BG_Upgrade( upgrade )->price > (short)ent->client->pers.credit + G_PriceOfClientItems(conflictingWP, conflictingUP) ) { G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOFUNDS ); return; } - //have space to carry this? - if( BG_Upgrade( upgrade )->slots & BG_SlotsForInventory( ent->client->ps.stats ) ) - { - G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOSLOTS ); - return; - } - // Only humans can buy stuff if( BG_Upgrade( upgrade )->team != TEAM_HUMANS ) { @@ -2416,6 +2599,16 @@ void Cmd_Buy_f( gentity_t *ent ) return; } + //have space to carry this? + if( BG_Upgrade( upgrade )->slots & BG_SlotsForInventory( ent->client->ps.stats ) ) + { + if (!G_SellClientItems(ent, conflictingWP, conflictingUP)) + { + G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOSLOTS ); + return ; + } + } + if( upgrade == UP_AMMO ) G_GiveClientMaxAmmo( ent, energyOnly ); else @@ -2471,13 +2664,6 @@ void Cmd_Sell_f( gentity_t *ent ) trap_Argv( 1, s, sizeof( s ) ); - //no armoury nearby - if( !G_BuildableRange( ent->client->ps.origin, 100, BA_H_ARMOURY ) ) - { - G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOARMOURYHERE ); - return; - } - if( !Q_stricmpn( s, "weapon", 6 ) ) weapon = ent->client->ps.stats[ STAT_WEAPON ]; else @@ -2487,110 +2673,20 @@ void Cmd_Sell_f( gentity_t *ent ) if( weapon != WP_NONE ) { - weapon_t selected = BG_GetPlayerWeapon( &ent->client->ps ); - - if( !BG_PlayerCanChangeWeapon( &ent->client->ps ) ) - return; - - //are we /allowed/ to sell this? - if( !BG_Weapon( weapon )->purchasable ) - { - trap_SendServerCommand( ent-g_entities, "print \"You can't sell this weapon\n\"" ); - return; - } - - //remove weapon if carried - if( BG_InventoryContainsWeapon( weapon, ent->client->ps.stats ) ) - { - //guard against selling the HBUILD weapons exploit - if( weapon == WP_HBUILD && ent->client->ps.stats[ STAT_MISC ] > 0 ) - { - G_TriggerMenu( ent->client->ps.clientNum, MN_H_ARMOURYBUILDTIMER ); - return; - } - - ent->client->ps.stats[ STAT_WEAPON ] = WP_NONE; - // Cancel ghost buildables - ent->client->ps.stats[ STAT_BUILDABLE ] = BA_NONE; - - //add to funds - G_AddCreditToClient( ent->client, (short)BG_Weapon( weapon )->price, qfalse ); - } - - //if we have this weapon selected, force a new selection - if( weapon == selected ) - G_ForceWeaponChange( ent, WP_BLASTER ); + if (G_CanClientSellWeapon(ent, weapon)) + G_SellClientWeapon(ent, weapon); } else if( upgrade != UP_NONE ) { - //are we /allowed/ to sell this? - if( !BG_Upgrade( upgrade )->purchasable ) - { - trap_SendServerCommand( ent-g_entities, "print \"You can't sell this item\n\"" ); - return; - } - //remove upgrade if carried - if( BG_InventoryContainsUpgrade( upgrade, ent->client->ps.stats ) ) - { - // shouldn't really need to test for this, but just to be safe - if( upgrade == UP_BATTLESUIT ) - { - vec3_t newOrigin; - - if( !G_RoomForClassChange( ent, PCL_HUMAN, newOrigin ) ) - { - G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOROOMBSUITOFF ); - return; - } - VectorCopy( newOrigin, ent->client->ps.origin ); - ent->client->ps.stats[ STAT_CLASS ] = PCL_HUMAN; - ent->client->pers.classSelection = PCL_HUMAN; - ent->client->ps.eFlags ^= EF_TELEPORT_BIT; - } - - //add to inventory - BG_RemoveUpgradeFromInventory( upgrade, ent->client->ps.stats ); - - if( upgrade == UP_BATTPACK ) - G_GiveClientMaxAmmo( ent, qtrue ); - - //add to funds - G_AddCreditToClient( ent->client, (short)BG_Upgrade( upgrade )->price, qfalse ); - } + if (G_CanClientSellUpgrade(ent, upgrade)) + G_SellClientUpgrade(ent, upgrade); } else if( !Q_stricmp( s, "upgrades" ) ) { for( i = UP_NONE + 1; i < UP_NUM_UPGRADES; i++ ) { - //remove upgrade if carried - if( BG_InventoryContainsUpgrade( i, ent->client->ps.stats ) && - BG_Upgrade( i )->purchasable ) - { - - // shouldn't really need to test for this, but just to be safe - if( i == UP_BATTLESUIT ) - { - vec3_t newOrigin; - - if( !G_RoomForClassChange( ent, PCL_HUMAN, newOrigin ) ) - { - G_TriggerMenu( ent->client->ps.clientNum, MN_H_NOROOMBSUITOFF ); - continue; - } - VectorCopy( newOrigin, ent->client->ps.origin ); - ent->client->ps.stats[ STAT_CLASS ] = PCL_HUMAN; - ent->client->pers.classSelection = PCL_HUMAN; - ent->client->ps.eFlags ^= EF_TELEPORT_BIT; - } - - BG_RemoveUpgradeFromInventory( i, ent->client->ps.stats ); - - if( i == UP_BATTPACK ) - G_GiveClientMaxAmmo( ent, qtrue ); - - //add to funds - G_AddCreditToClient( ent->client, (short)BG_Upgrade( i )->price, qfalse ); - } + if (G_CanClientSellUpgrade(ent, i)) + G_SellClientUpgrade(ent, i); } } else @@ -2615,7 +2711,7 @@ void Cmd_Build_f( gentity_t *ent ) char s[ MAX_TOKEN_CHARS ]; buildable_t buildable; float dist; - vec3_t origin, normal; + vec3_t origin, normal, angles; int groundEntNum; team_t team; @@ -2659,7 +2755,7 @@ void Cmd_Build_f( gentity_t *ent ) dist = BG_Class( ent->client->ps.stats[ STAT_CLASS ] )->buildDist; //these are the errors displayed when the builder first selects something to use - switch( G_CanBuild( ent, buildable, dist, origin, normal, &groundEntNum ) ) + switch( G_CanBuild( ent, buildable, dist, origin, normal, angles, &groundEntNum ) ) { // can place right away, set the blueprint and the valid togglebit case IBE_NONE: @@ -2735,6 +2831,83 @@ void Cmd_Build_f( gentity_t *ent ) G_TriggerMenu( ent->client->ps.clientNum, MN_B_CANNOT ); } + +/* +================= +Cmd_RotateBuild +================= +*/ +static void Cmd_RotateBuild( gentity_t *ent, int unit, qboolean add ) +{ + int currentAngle; + int finalAngle; + + if ( !ent->client || ent->client->ps.stats[ STAT_BUILDABLE ] & SB_BUILDABLE_MASK == 0 ) + return; + + if (add == qtrue) + { + currentAngle = + (ent->client->ps.stats[ STAT_BUILDABLE ] & SB_ROTATION_MASK) + / SB_ROTATION_UNIT; + finalAngle = currentAngle + unit; + } + else + { + finalAngle = unit; + } + finalAngle %= 16; + if (finalAngle < 0) + finalAngle -= 16; + + ent->client->ps.stats[ STAT_BUILDABLE ] &= ~SB_ROTATION_MASK; // Earse rotation data + ent->client->ps.stats[ STAT_BUILDABLE ] |= SB_ROTATION_UNIT * finalAngle; // Write rotation data +} + + +/* +================= +Cmd_RotateBuild_f +================= +*/ +void Cmd_RotateBuild_f( gentity_t *ent ) +{ + int unit; + char arg[16]; + char *argcpy; + + trap_Argv( 1, arg, sizeof( arg ) ); + argcpy = arg; + while (*argcpy && isspace(*argcpy)) + argcpy++; + unit = atoi(arg); + + Cmd_RotateBuild( ent, unit, *argcpy == '-' || *argcpy == '+' ); +} + + +/* +================= +Cmd_RotateBuildLeft_f +================= +*/ +void Cmd_RotateBuildLeft_f( gentity_t *ent ) +{ + Cmd_RotateBuild( ent, -1, qtrue ); +} + + +/* +================= +Cmd_RotateBuildRight_f +================= +*/ +void Cmd_RotateBuildRight_f( gentity_t *ent ) +{ + Cmd_RotateBuild( ent, 1, qtrue ); +} + + /* ================= Cmd_Reload_f @@ -3451,6 +3624,9 @@ commands_t cmds[ ] = { { "noclip", CMD_CHEAT_TEAM, Cmd_Noclip_f }, { "notarget", CMD_CHEAT|CMD_TEAM|CMD_ALIVE, Cmd_Notarget_f }, { "reload", CMD_HUMAN|CMD_ALIVE, Cmd_Reload_f }, + { "rotatebuild", CMD_TEAM|CMD_ALIVE, Cmd_RotateBuild_f }, + { "rotatebuildleft", CMD_TEAM|CMD_ALIVE, Cmd_RotateBuildLeft_f }, + { "rotatebuildright", CMD_TEAM|CMD_ALIVE, Cmd_RotateBuildRight_f }, { "say", CMD_MESSAGE|CMD_INTERMISSION, Cmd_Say_f }, { "say_area", CMD_MESSAGE|CMD_TEAM|CMD_ALIVE, Cmd_SayArea_f }, { "say_team", CMD_MESSAGE|CMD_INTERMISSION, Cmd_Say_f }, diff --git a/src/game/g_local.h b/src/game/g_local.h index f894ec24a..9d8ab251f 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -675,7 +675,7 @@ typedef struct emoticon_t emoticons[ MAX_EMOTICONS ]; int emoticonCount; - + char *playerModel[ MAX_PLAYER_MODEL ]; int playerModelCount; @@ -795,7 +795,7 @@ void G_BuildableThink( gentity_t *ent, int msec ); qboolean G_BuildableRange( vec3_t origin, float r, buildable_t buildable ); void G_ClearDeconMarks( void ); itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance, - vec3_t origin, vec3_t normal, int *groundEntNum ); + vec3_t origin, vec3_t normal, vec3_t angles, int *groundEntNum ); qboolean G_BuildIfValid( gentity_t *ent, buildable_t buildable ); void G_SetBuildableAnim( gentity_t *ent, buildableAnimNumber_t anim, qboolean force ); void G_SetIdleBuildableAnim( gentity_t *ent, buildableAnimNumber_t anim ); diff --git a/src/game/g_main.c b/src/game/g_main.c index f0f215817..1a0ab1bde 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -1394,6 +1394,90 @@ void G_CalculateStages( void ) humanNextStageThreshold ) ); } +/* +============ +G_CalculateStates +============ +*/ +void G_CalculateStates( void ) +{ + int i; + int abuilders = 0; + int hbuilders = 0; + int arm = 0, medi = 0, dcc = 0, boost = 0; + int om = 0, rc = 0; + qboolean ombuild = qfalse, rcbuild = qfalse; + gentity_t *ent; + + // Objects counter + for ( i = 1, ent = g_entities + i; i < level.num_entities; i++, ent++ ) + { + if( !ent->inuse || ent->s.eType != ET_BUILDABLE || ent->health <= 0 ) + continue; + + switch (ent->s.modelindex) { + + case BA_A_OVERMIND: + om = ent->health; + ombuild = !ent->spawned; + break; + + case BA_H_REACTOR: + rc = ent->health; + rcbuild = !ent->spawned; + break; + + case BA_A_BOOSTER: + boost++; + break; + + case BA_H_MEDISTAT: + medi++; + break; + + case BA_H_ARMOURY: + arm++; + break; + + case BA_H_DCC: + dcc++; + break; + + } + } + + // Builder counter + for( i = 0; i < level.maxclients; i++ ) + { + ent = &g_entities[ i ]; + if( !ent->client || ent->client->pers.connected != CON_CONNECTED + || ent->client->pers.teamSelection == TEAM_NONE || ent->client->sess.spectatorState == SPECTATOR_FOLLOW ) + continue; + + if( ent->client->ps.stats[ STAT_CLASS ] == PCL_ALIEN_BUILDER0 || + ent->client->ps.stats[ STAT_CLASS ] == PCL_ALIEN_BUILDER0_UPG ) + abuilders++; + else if( BG_InventoryContainsWeapon( WP_HBUILD, ent->client->ps.stats ) ) + hbuilders++; + } + + + trap_SetConfigstring( CS_ALIEN_STATUS, va( "%d %d %d %d %d", + ombuild, + ( om > 0 ) ? om : 0, + level.numAlienSpawns, + abuilders, + boost ) ); + trap_SetConfigstring( CS_HUMAN_STATUS, va( "%d %d %d %d %d %d %d", + rcbuild, + ( rc > 0 ) ? rc : 0, + level.numHumanSpawns, + hbuilders, + arm, + medi, + dcc ) ); +} + /* ============ CalculateAvgPlayers @@ -2003,8 +2087,8 @@ void CheckExitRules( void ) { //humans win level.lastWin = TEAM_HUMANS; - trap_SendServerCommand( -1, "print \"Humans win\n\""); - trap_SetConfigstring( CS_WINNER, "Humans Win" ); + trap_SendServerCommand( -1, "print \"Humans win [human]\n\""); + trap_SetConfigstring( CS_WINNER, "^5 Humans Win [human]" ); LogExit( "Humans win." ); } else if( level.uncondAlienWin || @@ -2014,8 +2098,8 @@ void CheckExitRules( void ) { //aliens win level.lastWin = TEAM_ALIENS; - trap_SendServerCommand( -1, "print \"Aliens win\n\""); - trap_SetConfigstring( CS_WINNER, "Aliens Win" ); + trap_SendServerCommand( -1, "print \"Aliens win [dragoon]\n\""); + trap_SetConfigstring( CS_WINNER, "^1 Aliens Win [dragoon]" ); LogExit( "Aliens win." ); } } @@ -2306,7 +2390,7 @@ void G_RunFrame( int levelTime ) trap_SendServerCommand( -1, "cp \"The game has been paused. Please wait.\"" ); if( level.pausedTime >= 110000 && level.pausedTime <= 119000 ) - trap_SendServerCommand( -1, va( "print \"Server: Game will auto-unpause in %d seconds\n\"", + trap_SendServerCommand( -1, va( "print \"Server: Game will auto-unpause in %d seconds\n\"", (int) ( (float) ( 120000 - level.pausedTime ) / 1000.0f ) ) ); } @@ -2443,6 +2527,7 @@ void G_RunFrame( int levelTime ) { G_CalculateBuildPoints( ); G_CalculateStages( ); + G_CalculateStates( ); G_SpawnClients( TEAM_ALIENS ); G_SpawnClients( TEAM_HUMANS ); G_CalculateAvgPlayers( ); diff --git a/src/game/g_team.c b/src/game/g_team.c index 4af62354d..15dfdd199 100644 --- a/src/game/g_team.c +++ b/src/game/g_team.c @@ -135,6 +135,8 @@ void G_UpdateTeamConfigStrings( void ) trap_SetConfigstringRestrictions( CS_ALIEN_STAGES, &humanTeam ); trap_SetConfigstringRestrictions( CS_HUMAN_STAGES, &alienTeam ); + trap_SetConfigstringRestrictions( CS_ALIEN_STATUS, &humanTeam ); + trap_SetConfigstringRestrictions( CS_HUMAN_STATUS, &alienTeam ); } /* @@ -293,7 +295,7 @@ void TeamplayInfoMessage( gentity_t *ent ) { char entry[ 17 ], string[ ( MAX_CLIENTS - 1 ) * ( sizeof( entry ) - 1 ) + 1 ]; - int i, j; + int i, j; int team, stringlength; gentity_t *player; gclient_t *cl; @@ -445,14 +447,14 @@ void CheckTeamStatus( void ) level.numTeamImbalanceWarnings < 3 && !level.restarted ) { level.lastTeamImbalancedTime = level.time; - if( level.numAlienSpawns > 0 && + if( level.numAlienSpawns > 0 && level.numHumanClients - level.numAlienClients > 2 ) { trap_SendServerCommand( -1, "print \"Teams are imbalanced. " "Humans have more players.\n\""); level.numTeamImbalanceWarnings++; } - else if( level.numHumanSpawns > 0 && + else if( level.numHumanSpawns > 0 && level.numAlienClients - level.numHumanClients > 2 ) { trap_SendServerCommand ( -1, "print \"Teams are imbalanced. " diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c index 302c47e63..306b22946 100644 --- a/src/game/g_weapon.c +++ b/src/game/g_weapon.c @@ -445,8 +445,8 @@ void massDriverFire( gentity_t *ent ) SnapVectorTowards( tr.endpos, muzzle ); // send impact - if( traceEnt->takedamage && - (traceEnt->s.eType == ET_BUILDABLE || + if( traceEnt->takedamage && + (traceEnt->s.eType == ET_BUILDABLE || traceEnt->s.eType == ET_PLAYER ) ) { BloodSpurt( ent, traceEnt, &tr ); @@ -493,7 +493,7 @@ void hiveFire( gentity_t *ent ) // Fire from the hive tip, not the center VectorMA( muzzle, ent->r.maxs[ 2 ], ent->s.origin2, origin ); - + fire_hive( ent, origin, forward ); } @@ -535,7 +535,7 @@ void flamerFire( gentity_t *ent ) { vec3_t origin; - // Correct muzzle so that the missile does not start in the ceiling + // Correct muzzle so that the missile does not start in the ceiling VectorMA( muzzle, -7.0f, up, origin ); // Correct muzzle so that the missile fires from the player's hand @@ -592,8 +592,8 @@ void lasGunFire( gentity_t *ent ) SnapVectorTowards( tr.endpos, muzzle ); // send impact - if( traceEnt->takedamage && - (traceEnt->s.eType == ET_BUILDABLE || + if( traceEnt->takedamage && + (traceEnt->s.eType == ET_BUILDABLE || traceEnt->s.eType == ET_PLAYER ) ) { BloodSpurt( ent, traceEnt, &tr ); @@ -799,7 +799,7 @@ buildFire void buildFire( gentity_t *ent, dynMenu_t menu ) { buildable_t buildable = ( ent->client->ps.stats[ STAT_BUILDABLE ] - & ~SB_VALID_TOGGLEBIT ); + & SB_BUILDABLE_MASK ); if( buildable > BA_NONE ) { @@ -1286,7 +1286,7 @@ qboolean CheckPounceAttack( gentity_t *ent ) if( !traceEnt->takedamage ) return qfalse; - + // Deal damage timeMax = ent->client->ps.weapon == WP_ALEVEL3 ? LEVEL3_POUNCE_TIME : LEVEL3_POUNCE_TIME_UPG; @@ -1388,7 +1388,7 @@ void G_CrushAttack( gentity_t *ent, gentity_t *victim ) if( damage < 0 ) damage = 0; - + // Players also get damaged periodically if( victim->client && ent->client->lastCrushTime + LEVEL4_CRUSH_REPEAT < level.time ) @@ -1396,7 +1396,7 @@ void G_CrushAttack( gentity_t *ent, gentity_t *victim ) ent->client->lastCrushTime = level.time; damage += LEVEL4_CRUSH_DAMAGE; } - + if( damage < 1 ) return; @@ -1517,7 +1517,7 @@ void FireWeapon( gentity_t *ent ) { // set aiming directions AngleVectors( ent->client->ps.viewangles, forward, right, up ); - CalcMuzzlePoint( ent, forward, right, up, muzzle ); + CalcMuzzlePoint( ent, forward, right, up, muzzle ); } else { diff --git a/src/game/tremulous.h b/src/game/tremulous.h index f5f5e1695..a0269ad6f 100644 --- a/src/game/tremulous.h +++ b/src/game/tremulous.h @@ -97,7 +97,7 @@ along with Tremulous; if not, see #define LEVEL3_CLAW_DMG ADM(80) #define LEVEL3_CLAW_RANGE 80.0f -#define LEVEL3_CLAW_UPG_RANGE LEVEL3_CLAW_RANGE + 3.0f +#define LEVEL3_CLAW_UPG_RANGE LEVEL3_CLAW_RANGE + 3.0f #define LEVEL3_CLAW_WIDTH 12.0f #define LEVEL3_CLAW_REPEAT 900 #define LEVEL3_CLAW_K_SCALE 1.0f @@ -109,7 +109,7 @@ along with Tremulous; if not, see #define LEVEL3_POUNCE_WIDTH 14.0f #define LEVEL3_POUNCE_TIME 800 // msec for full Dragoon pounce #define LEVEL3_POUNCE_TIME_UPG 800 // msec for full Adv. Dragoon pounce -#define LEVEL3_POUNCE_TIME_MIN 200 // msec before which pounce cancels +#define LEVEL3_POUNCE_TIME_MIN 200 // msec before which pounce cancels #define LEVEL3_POUNCE_REPEAT 400 // msec before a new pounce starts #define LEVEL3_POUNCE_SPEED_MOD 0.75f // walking speed modifier for pounce charging #define LEVEL3_POUNCE_JUMP_MAG 700 // Dragoon pounce jump power @@ -675,7 +675,7 @@ along with Tremulous; if not, see #define DAMAGE_FRACTION_FOR_KILL 0.5f //how much damage players (versus structures) need to //do to increment the stage kill counters - + #define MAXIMUM_BUILD_TIME 20000 // used for pie timer #endif diff --git a/src/qcommon/qfiles.h b/src/qcommon/qfiles.h index 91bcf04cf..549302219 100644 --- a/src/qcommon/qfiles.h +++ b/src/qcommon/qfiles.h @@ -39,7 +39,7 @@ along with Tremulous; if not, see #endif // surface geometry should not exceed these limits -#define SHADER_MAX_VERTEXES 1000 +#define SHADER_MAX_VERTEXES 3000 #define SHADER_MAX_INDEXES (6 * SHADER_MAX_VERTEXES) // the maximum size of game relative pathnames diff --git a/src/renderergl1/tr_init.cpp b/src/renderergl1/tr_init.cpp index cbd5095c1..c92999536 100644 --- a/src/renderergl1/tr_init.cpp +++ b/src/renderergl1/tr_init.cpp @@ -191,11 +191,11 @@ static void InitOpenGL( void ) // - r_ignorehwgamma // - r_gamma // - + if ( glConfig.vidWidth == 0 ) { GLint temp; - + GLimp_Init( qfalse ); strcpy( renderer_buffer, glConfig.renderer_string ); @@ -206,7 +206,7 @@ static void InitOpenGL( void ) glConfig.maxTextureSize = temp; // stubbed or broken drivers may have reported 0... - if ( glConfig.maxTextureSize <= 0 ) + if ( glConfig.maxTextureSize <= 0 ) { glConfig.maxTextureSize = 0; } @@ -260,10 +260,10 @@ void GL_CheckErrors( void ) { } -/* -============================================================================== - - SCREEN SHOTS +/* +============================================================================== + + SCREEN SHOTS NOTE TTimo some thoughts about the screenshots system: @@ -276,11 +276,11 @@ we use statics to store a count and start writing the first screenshot/screensho (with FS_FileExists / FS_FOpenFileWrite calls) FIXME: the statics don't get a reinit between fs_game changes -============================================================================== -*/ +============================================================================== +*/ -/* -================== +/* +================== RB_ReadPixels Reads an image but takes care of alignment issues for reading RGB images. @@ -293,50 +293,50 @@ alignment of packAlign to ensure efficient copying. Stores the length of padding after a line of pixels to address padlen Return value must be freed with ri.Hunk_FreeTempMemory() -================== -*/ +================== +*/ byte *RB_ReadPixels(int x, int y, int width, int height, size_t *offset, int *padlen) { byte *buffer, *bufstart; int padwidth, linelen; GLint packAlign; - + qglGetIntegerv(GL_PACK_ALIGNMENT, &packAlign); - + linelen = width * 3; padwidth = PAD(linelen, packAlign); - + // Allocate a few more bytes so that we can choose an alignment we like buffer = (byte*)ri.Hunk_AllocateTempMemory(padwidth * height + *offset + packAlign - 1); - + bufstart = (byte*)PADP((intptr_t) buffer + *offset, packAlign); qglReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, bufstart); - + *offset = bufstart - buffer; *padlen = padwidth - linelen; - + return buffer; } -/* -================== +/* +================== RB_TakeScreenshot -================== -*/ +================== +*/ void RB_TakeScreenshot(int x, int y, int width, int height, char *fileName) { byte *allbuf, *buffer; byte *srcptr, *destptr; byte *endline, *endmem; byte temp; - + int linelen, padlen; size_t offset = 18, memcount; - + allbuf = RB_ReadPixels(x, y, width, height, &offset, &padlen); buffer = allbuf + offset - 18; - + Com_Memset (buffer, 0, 18); buffer[2] = 2; // uncompressed type buffer[12] = width & 255; @@ -347,10 +347,10 @@ void RB_TakeScreenshot(int x, int y, int width, int height, char *fileName) // swap rgb to bgr and remove padding from line endings linelen = width * 3; - + srcptr = destptr = allbuf + offset; endmem = srcptr + (linelen + padlen) * height; - + while(srcptr < endmem) { endline = srcptr + linelen; @@ -361,10 +361,10 @@ void RB_TakeScreenshot(int x, int y, int width, int height, char *fileName) *destptr++ = srcptr[2]; *destptr++ = srcptr[1]; *destptr++ = temp; - + srcptr += 3; } - + // Skip the pad srcptr += padlen; } @@ -380,10 +380,10 @@ void RB_TakeScreenshot(int x, int y, int width, int height, char *fileName) ri.Hunk_FreeTempMemory(allbuf); } -/* -================== +/* +================== RB_TakeScreenshotJPEG -================== +================== */ void RB_TakeScreenshotJPEG(int x, int y, int width, int height, char *fileName) @@ -410,15 +410,15 @@ RB_TakeScreenshotCmd */ const void *RB_TakeScreenshotCmd( const void *data ) { const screenshotCommand_t *cmd; - + cmd = (const screenshotCommand_t *)data; - + if (cmd->jpeg) RB_TakeScreenshotJPEG( cmd->x, cmd->y, cmd->width, cmd->height, cmd->fileName); else RB_TakeScreenshot( cmd->x, cmd->y, cmd->width, cmd->height, cmd->fileName); - - return (const void *)(cmd + 1); + + return (const void *)(cmd + 1); } /* @@ -445,11 +445,11 @@ void R_TakeScreenshot( int x, int y, int width, int height, char *name, bool jpe cmd->jpeg = jpeg; } -/* -================== +/* +================== R_ScreenshotFilename -================== -*/ +================== +*/ void R_ScreenshotFilename( int lastNumber, char *fileName ) { int a,b,c,d; @@ -470,11 +470,11 @@ void R_ScreenshotFilename( int lastNumber, char *fileName ) { , a, b, c, d ); } -/* -================== +/* +================== R_ScreenshotFilename -================== -*/ +================== +*/ void R_ScreenshotFilenameJPEG( int lastNumber, char *fileName ) { int a,b,c,d; @@ -562,8 +562,8 @@ void R_LevelShot( void ) { ri.Printf( PRINT_ALL, "Wrote %s\n", checkname ); } -/* -================== +/* +================== R_ScreenShot_f screenshot @@ -572,8 +572,8 @@ screenshot [levelshot] screenshot [filename] Doesn't print the pacifier message if there is a second arg -================== -*/ +================== +*/ void R_ScreenShot_f (void) { char checkname[MAX_OSPATH]; static int lastNumber = -1; @@ -613,7 +613,7 @@ void R_ScreenShot_f (void) { } if ( lastNumber >= 9999 ) { - ri.Printf (PRINT_ALL, "ScreenShot: Couldn't create a file\n"); + ri.Printf (PRINT_ALL, "ScreenShot: Couldn't create a file\n"); return; } @@ -625,7 +625,7 @@ void R_ScreenShot_f (void) { if ( !silent ) { ri.Printf (PRINT_ALL, "Wrote %s\n", checkname); } -} +} void R_ScreenShotJPEG_f (void) { char checkname[MAX_OSPATH]; @@ -666,7 +666,7 @@ void R_ScreenShotJPEG_f (void) { } if ( lastNumber == 10000 ) { - ri.Printf (PRINT_ALL, "ScreenShot: Couldn't create a file\n"); + ri.Printf (PRINT_ALL, "ScreenShot: Couldn't create a file\n"); return; } @@ -678,7 +678,7 @@ void R_ScreenShotJPEG_f (void) { if ( !silent ) { ri.Printf (PRINT_ALL, "Wrote %s\n", checkname); } -} +} //============================================================================ @@ -694,9 +694,9 @@ const void *RB_TakeVideoFrameCmd( const void *data ) size_t memcount, linelen; int padwidth, avipadwidth, padlen, avipadlen; GLint packAlign; - + cmd = (const videoFrameCommand_t *)data; - + qglGetIntegerv(GL_PACK_ALIGNMENT, &packAlign); linelen = cmd->width * 3; @@ -709,7 +709,7 @@ const void *RB_TakeVideoFrameCmd( const void *data ) avipadlen = avipadwidth - linelen; cBuf = (byte*)PADP(cmd->captureBuffer, packAlign); - + qglReadPixels(0, 0, cmd->width, cmd->height, GL_RGB, GL_UNSIGNED_BYTE, cBuf); @@ -730,11 +730,11 @@ const void *RB_TakeVideoFrameCmd( const void *data ) { byte *lineend, *memend; byte *srcptr, *destptr; - + srcptr = cBuf; destptr = cmd->encodeBuffer; memend = srcptr + memcount; - + // swap R and B and remove line paddings while(srcptr < memend) { @@ -746,17 +746,17 @@ const void *RB_TakeVideoFrameCmd( const void *data ) *destptr++ = srcptr[0]; srcptr += 3; } - + Com_Memset(destptr, '\0', avipadlen); destptr += avipadlen; - + srcptr += padlen; } - + ri.CL_WriteAVIVideoFrame(cmd->encodeBuffer, avipadwidth * cmd->height); } - return (const void *)(cmd + 1); + return (const void *)(cmd + 1); } //============================================================================ @@ -833,7 +833,7 @@ void R_PrintLongString(const char *string) { GfxInfo_f ================ */ -void GfxInfo_f( void ) +void GfxInfo_f( void ) { const char *enablestrings[] = { @@ -927,11 +927,11 @@ void GfxInfo_f( void ) R_Register =============== */ -void R_Register( void ) +void R_Register( void ) { #ifdef USE_RENDERER_DLOPEN com_altivec = ri.Cvar_Get("com_altivec", "1", CVAR_ARCHIVE); - #endif + #endif // // latched and archived variables @@ -945,7 +945,7 @@ void R_Register( void ) r_picmip = ri.Cvar_Get ("r_picmip", GENERIC_HW_R_PICMIP_DEFAULT, CVAR_ARCHIVE | CVAR_LATCH ); r_ext_texture_filter_anisotropic = ri.Cvar_Get( "r_ext_texture_filter_anisotropic", - "0", CVAR_ARCHIVE | CVAR_LATCH ); + "1", CVAR_ARCHIVE | CVAR_LATCH ); r_ext_max_anisotropy = ri.Cvar_Get( "r_ext_max_anisotropy", "2", CVAR_ARCHIVE | CVAR_LATCH ); r_roundImagesDown = ri.Cvar_Get ("r_roundImagesDown", "1", CVAR_ARCHIVE | CVAR_LATCH ); @@ -1090,7 +1090,7 @@ void R_Register( void ) R_Init =============== */ -void R_Init( void ) { +void R_Init( void ) { int err; int i; byte *ptr; @@ -1183,7 +1183,7 @@ void R_Init( void ) { RE_Shutdown =============== */ -void RE_Shutdown( bool destroyWindow ) { +void RE_Shutdown( bool destroyWindow ) { ri.Printf( PRINT_ALL, "RE_Shutdown( %i )\n", destroyWindow ); @@ -1249,7 +1249,7 @@ refexport_t *GetRefAPI ( int apiVersion, refimport_t *rimp ) { Com_Memset( &re, 0, sizeof( re ) ); if ( apiVersion != REF_API_VERSION ) { - ri.Printf(PRINT_ALL, "Mismatched REF_API_VERSION: expected %i, got %i\n", + ri.Printf(PRINT_ALL, "Mismatched REF_API_VERSION: expected %i, got %i\n", REF_API_VERSION, apiVersion ); return NULL; } diff --git a/src/renderergl1/tr_model.cpp b/src/renderergl1/tr_model.cpp index 5afd51d05..809fb80dd 100644 --- a/src/renderergl1/tr_model.cpp +++ b/src/renderergl1/tr_model.cpp @@ -61,6 +61,17 @@ qhandle_t R_RegisterMD3(const char *name, model_t *mod) fext++; } + if(strcmp(fext, "md3") == 0) + { + char name3000[MAX_QPATH]; + qhandle_t md3000; + + strcpy(name3000, filename); + strncat(name3000, ".md3000", MAX_QPATH); + if(md3000 = R_RegisterMD3(name3000, mod)) + return md3000; + } + for (lod = MD3_MAX_LODS - 1 ; lod >= 0 ; lod--) { if(lod) @@ -71,13 +82,13 @@ qhandle_t R_RegisterMD3(const char *name, model_t *mod) ri.FS_ReadFile( namebuf, &buf.v ); if(!buf.u) continue; - + ident = LittleLong(* (unsigned *) buf.u); if (ident == MD3_IDENT) loaded = R_LoadMD3(mod, lod, buf.u, name); else ri.Printf(PRINT_WARNING,"R_RegisterMD3: unknown fileid for %s\n", name); - + ri.FS_FreeFile(buf.v); if(loaded) @@ -129,20 +140,20 @@ qhandle_t R_RegisterMDR(const char *name, model_t *mod) mod->type = MOD_BAD; return 0; } - + ident = LittleLong(*(unsigned *)buf.u); if(ident == MDR_IDENT) loaded = R_LoadMDR(mod, buf.u, filesize, name); ri.FS_FreeFile (buf.v); - + if(!loaded) { ri.Printf(PRINT_WARNING,"R_RegisterMDR: couldn't load mdr file %s\n", name); mod->type = MOD_BAD; return 0; } - + return mod->index; } @@ -166,18 +177,18 @@ qhandle_t R_RegisterIQM(const char *name, model_t *mod) mod->type = MOD_BAD; return 0; } - + loaded = R_LoadIQM(mod, buf.u, filesize, name); ri.FS_FreeFile (buf.v); - + if(!loaded) { ri.Printf(PRINT_WARNING,"R_RegisterIQM: couldn't load iqm file %s\n", name); mod->type = MOD_BAD; return 0; } - + return mod->index; } @@ -412,7 +423,7 @@ static bool R_LoadMD3 (model_t *mod, int lod, void *buffer, const char *mod_name ri.Printf( PRINT_WARNING, "R_LoadMD3: %s has no frames\n", mod_name ); return false; } - + // swap all the frames frame = (md3Frame_t *) ( (byte *)mod->md3[lod] + mod->md3[lod]->ofsFrames ); for ( i = 0 ; i < mod->md3[lod]->numFrames ; i++, frame++) { @@ -450,7 +461,7 @@ static bool R_LoadMD3 (model_t *mod, int lod, void *buffer, const char *mod_name LL(surf->ofsSt); LL(surf->ofsXyzNormals); LL(surf->ofsEnd); - + if ( surf->numVerts >= SHADER_MAX_VERTEXES ) { ri.Printf(PRINT_WARNING, "R_LoadMD3: %s has more than %i verts on %s (%i).\n", mod_name, SHADER_MAX_VERTEXES - 1, surf->name[0] ? surf->name : "a surface", @@ -463,7 +474,7 @@ static bool R_LoadMD3 (model_t *mod, int lod, void *buffer, const char *mod_name surf->numTriangles ); return false; } - + // change to surface identifier surf->ident = SF_MD3; @@ -507,7 +518,7 @@ static bool R_LoadMD3 (model_t *mod, int lod, void *buffer, const char *mod_name // swap all the XyzNormals xyz = (md3XyzNormal_t *) ( (byte *)surf + surf->ofsXyzNormals ); - for ( j = 0 ; j < surf->numVerts * surf->numFrames ; j++, xyz++ ) + for ( j = 0 ; j < surf->numVerts * surf->numFrames ; j++, xyz++ ) { xyz->xyz[0] = LittleShort( xyz->xyz[0] ); xyz->xyz[1] = LittleShort( xyz->xyz[1] ); @@ -520,7 +531,7 @@ static bool R_LoadMD3 (model_t *mod, int lod, void *buffer, const char *mod_name // find the next surface surf = (md3Surface_t *)( (byte *)surf + surf->ofsEnd ); } - + return true; } @@ -531,7 +542,7 @@ static bool R_LoadMD3 (model_t *mod, int lod, void *buffer, const char *mod_name R_LoadMDR ================= */ -static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod_name ) +static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod_name ) { int i, j, k, l; mdrHeader_t *pinmodel, *mdr; @@ -548,20 +559,20 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod pinmodel = (mdrHeader_t *)buffer; pinmodel->version = LittleLong(pinmodel->version); - if (pinmodel->version != MDR_VERSION) + if (pinmodel->version != MDR_VERSION) { ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has wrong version (%i should be %i)\n", mod_name, pinmodel->version, MDR_VERSION); return false; } size = LittleLong(pinmodel->ofsEnd); - + if(size > filesize) { ri.Printf(PRINT_WARNING, "R_LoadMDR: Header of %s is broken. Wrong filesize declared!\n", mod_name); return false; } - + mod->type = MOD_MDR; LL(pinmodel->numFrames); @@ -577,7 +588,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod // now add enough space for the uncompressed bones. size += pinmodel->numFrames * pinmodel->numBones * ((sizeof(mdrBone_t) - sizeof(mdrCompBone_t))); } - + // simple bounds check if(pinmodel->numBones < 0 || sizeof(*mdr) + pinmodel->numFrames * (sizeof(*frame) + (pinmodel->numBones - 1) * sizeof(*frame->bones)) > size) @@ -590,7 +601,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod mod->modelData = mdr = (mdrHeader_t*)ri.Hunk_Alloc( size, h_low ); // Copy all the values over from the file and fix endian issues in the process, if necessary. - + mdr->ident = LittleLong(pinmodel->ident); mdr->version = pinmodel->version; // Don't need to swap byte order on this one, we already did above. Q_strncpyz(mdr->name, pinmodel->name, sizeof(mdr->name)); @@ -602,7 +613,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod mod->numLods = mdr->numLODs; - if ( mdr->numFrames < 1 ) + if ( mdr->numFrames < 1 ) { ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has no frames\n", mod_name); return false; @@ -611,14 +622,14 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod /* The first frame will be put into the first free space after the header */ frame = (mdrFrame_t *)(mdr + 1); mdr->ofsFrames = (int)((byte *) frame - (byte *) mdr); - + if (pinmodel->ofsFrames < 0) { mdrCompFrame_t *cframe; - - // compressed model... + + // compressed model... cframe = (mdrCompFrame_t *)((byte *) pinmodel - pinmodel->ofsFrames); - + for(i = 0; i < mdr->numFrames; i++) { for(j = 0; j < 3; j++) @@ -630,7 +641,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod frame->radius = LittleFloat(cframe->radius); frame->name[0] = '\0'; // No name supplied in the compressed version. - + for(j = 0; j < mdr->numBones; j++) { for(k = 0; k < (sizeof(cframe->bones[j].Comp) / 2); k++) @@ -638,15 +649,15 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod // Do swapping for the uncompressing functions. They seem to use shorts // values only, so I assume this will work. Never tested it on other // platforms, though. - + ((unsigned short *)(cframe->bones[j].Comp))[k] = LittleShort( ((unsigned short *)(cframe->bones[j].Comp))[k] ); } - + /* Now do the actual uncompressing */ MC_UnCompress(frame->bones[j].matrix, cframe->bones[j].Comp); } - + // Next Frame... cframe = (mdrCompFrame_t *) &cframe->bones[j]; frame = (mdrFrame_t *) &frame->bones[j]; @@ -655,14 +666,14 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod else { mdrFrame_t *curframe; - + // uncompressed model... // - + curframe = (mdrFrame_t *)((byte *) pinmodel + pinmodel->ofsFrames); - + // swap all the frames - for ( i = 0 ; i < mdr->numFrames ; i++) + for ( i = 0 ; i < mdr->numFrames ; i++) { for(j = 0; j < 3; j++) { @@ -670,26 +681,26 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod frame->bounds[1][j] = LittleFloat(curframe->bounds[1][j]); frame->localOrigin[j] = LittleFloat(curframe->localOrigin[j]); } - + frame->radius = LittleFloat(curframe->radius); Q_strncpyz(frame->name, curframe->name, sizeof(frame->name)); - - for (j = 0; j < (int) (mdr->numBones * sizeof(mdrBone_t) / 4); j++) + + for (j = 0; j < (int) (mdr->numBones * sizeof(mdrBone_t) / 4); j++) { ((float *)frame->bones)[j] = LittleFloat( ((float *)curframe->bones)[j] ); } - + curframe = (mdrFrame_t *) &curframe->bones[mdr->numBones]; frame = (mdrFrame_t *) &frame->bones[mdr->numBones]; } } - + // frame should now point to the first free address after all frames. lod = (mdrLOD_t *) frame; mdr->ofsLODs = (int) ((byte *) lod - (byte *)mdr); - + curlod = (mdrLOD_t *)((byte *) pinmodel + LittleLong(pinmodel->ofsLODs)); - + // swap all the LOD's for ( l = 0 ; l < mdr->numLODs ; l++) { @@ -701,12 +712,12 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod } lod->numSurfaces = LittleLong(curlod->numSurfaces); - + // swap all the surfaces surf = (mdrSurface_t *) (lod + 1); lod->ofsSurfaces = (int)((byte *) surf - (byte *) lod); cursurf = (mdrSurface_t *) ((byte *)curlod + LittleLong(curlod->ofsSurfaces)); - + for ( i = 0 ; i < lod->numSurfaces ; i++) { // simple bounds check @@ -717,26 +728,26 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod } // first do some copying stuff - + surf->ident = SF_MDR; Q_strncpyz(surf->name, cursurf->name, sizeof(surf->name)); Q_strncpyz(surf->shader, cursurf->shader, sizeof(surf->shader)); - + surf->ofsHeader = (byte *) mdr - (byte *) surf; - + surf->numVerts = LittleLong(cursurf->numVerts); surf->numTriangles = LittleLong(cursurf->numTriangles); // numBoneReferences and BoneReferences generally seem to be unused - + // now do the checks that may fail. - if ( surf->numVerts >= SHADER_MAX_VERTEXES ) + if ( surf->numVerts >= SHADER_MAX_VERTEXES ) { ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has more than %i verts on %s (%i).\n", mod_name, SHADER_MAX_VERTEXES - 1, surf->name[0] ? surf->name : "a surface", surf->numVerts ); return false; } - if ( surf->numTriangles*3 >= SHADER_MAX_INDEXES ) + if ( surf->numTriangles*3 >= SHADER_MAX_INDEXES ) { ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has more than %i triangles on %s (%i).\n", mod_name, ( SHADER_MAX_INDEXES / 3 ) - 1, surf->name[0] ? surf->name : "a surface", @@ -753,16 +764,16 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod } else { surf->shaderIndex = sh->index; } - + // now copy the vertexes. v = (mdrVertex_t *) (surf + 1); surf->ofsVerts = (int)((byte *) v - (byte *) surf); curv = (mdrVertex_t *) ((byte *)cursurf + LittleLong(cursurf->ofsVerts)); - + for(j = 0; j < surf->numVerts; j++) { LL(curv->numWeights); - + // simple bounds check if(curv->numWeights < 0 || (byte *) (v + 1) + (curv->numWeights - 1) * sizeof(*weight) > (byte *) mdr + size) { @@ -773,37 +784,37 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod v->normal[0] = LittleFloat(curv->normal[0]); v->normal[1] = LittleFloat(curv->normal[1]); v->normal[2] = LittleFloat(curv->normal[2]); - + v->texCoords[0] = LittleFloat(curv->texCoords[0]); v->texCoords[1] = LittleFloat(curv->texCoords[1]); - + v->numWeights = curv->numWeights; weight = &v->weights[0]; curweight = &curv->weights[0]; - + // Now copy all the weights for(k = 0; k < v->numWeights; k++) { weight->boneIndex = LittleLong(curweight->boneIndex); weight->boneWeight = LittleFloat(curweight->boneWeight); - + weight->offset[0] = LittleFloat(curweight->offset[0]); weight->offset[1] = LittleFloat(curweight->offset[1]); weight->offset[2] = LittleFloat(curweight->offset[2]); - + weight++; curweight++; } - + v = (mdrVertex_t *) weight; curv = (mdrVertex_t *) curweight; } - + // we know the offset to the triangles now: tri = (mdrTriangle_t *) v; surf->ofsTriangles = (int)((byte *) tri - (byte *) surf); curtri = (mdrTriangle_t *)((byte *) cursurf + LittleLong(cursurf->ofsTriangles)); - + // simple bounds check if(surf->numTriangles < 0 || (byte *) (tri + surf->numTriangles) > (byte *) mdr + size) { @@ -816,11 +827,11 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod tri->indexes[0] = LittleLong(curtri->indexes[0]); tri->indexes[1] = LittleLong(curtri->indexes[1]); tri->indexes[2] = LittleLong(curtri->indexes[2]); - + tri++; curtri++; } - + // tri now points to the end of the surface. surf->ofsEnd = (byte *) tri - (byte *) surf; surf = (mdrSurface_t *) tri; @@ -836,7 +847,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod // find the next LOD. curlod = (mdrLOD_t *)((byte *) curlod + LittleLong(curlod->ofsEnd)); } - + // lod points to the first tag now, so update the offset too. tag = (mdrTag_t *) lod; mdr->ofsTags = (int)((byte *) tag - (byte *) mdr); @@ -848,21 +859,21 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has broken structure.\n", mod_name); return false; } - + for (i = 0 ; i < mdr->numTags ; i++) { tag->boneIndex = LittleLong(curtag->boneIndex); Q_strncpyz(tag->name, curtag->name, sizeof(tag->name)); - + tag++; curtag++; } - + // And finally we know the real offset to the end. mdr->ofsEnd = (int)((byte *) tag - (byte *) mdr); // phew! we're done. - + return true; } @@ -966,14 +977,14 @@ static md3Tag_t *R_GetTag( md3Header_t *mod, int frame, const char *tagName ) { return NULL; } -md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3Tag_t * dest) +md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3Tag_t * dest) { int i, j, k; int frameSize; mdrFrame_t *frame; mdrTag_t *tag; - if ( framenum >= mod->numFrames ) + if ( framenum >= mod->numFrames ) { // it is possible to have a bad frame while changing models, so don't error framenum = mod->numFrames - 1; @@ -999,7 +1010,7 @@ md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3 dest->origin[0] = frame->bones[tag->boneIndex].matrix[0][3]; dest->origin[1] = frame->bones[tag->boneIndex].matrix[1][3]; - dest->origin[2] = frame->bones[tag->boneIndex].matrix[2][3]; + dest->origin[2] = frame->bones[tag->boneIndex].matrix[2][3]; return dest; } @@ -1013,7 +1024,7 @@ md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3 R_LerpTag ================ */ -int R_LerpTag( orientation_t *tag, qhandle_t handle, int startFrame, int endFrame, +int R_LerpTag( orientation_t *tag, qhandle_t handle, int startFrame, int endFrame, float frac, const char *tagName ) { md3Tag_t *start, *end; md3Tag_t start_space, end_space; @@ -1078,7 +1089,7 @@ void R_ModelBounds( qhandle_t handle, vec3_t mins, vec3_t maxs ) { if(model->type == MOD_BRUSH) { VectorCopy( model->bmodel->bounds[0], mins ); VectorCopy( model->bmodel->bounds[1], maxs ); - + return; } else if (model->type == MOD_MESH) { md3Header_t *header; @@ -1089,7 +1100,7 @@ void R_ModelBounds( qhandle_t handle, vec3_t mins, vec3_t maxs ) { VectorCopy( frame->bounds[0], mins ); VectorCopy( frame->bounds[1], maxs ); - + return; } else if (model->type == MOD_MDR) { mdrHeader_t *header; @@ -1100,11 +1111,11 @@ void R_ModelBounds( qhandle_t handle, vec3_t mins, vec3_t maxs ) { VectorCopy( frame->bounds[0], mins ); VectorCopy( frame->bounds[1], maxs ); - + return; } else if(model->type == MOD_IQM) { iqmData_t *iqmData; - + iqmData = (iqmData_t*)model->modelData; if(iqmData->bounds) diff --git a/src/renderergl2/tr_init.cpp b/src/renderergl2/tr_init.cpp index 12e46a2de..8d27c3867 100644 --- a/src/renderergl2/tr_init.cpp +++ b/src/renderergl2/tr_init.cpp @@ -257,11 +257,11 @@ static void InitOpenGL( void ) // - r_ignorehwgamma // - r_gamma // - + if ( glConfig.vidWidth == 0 ) { GLint temp; - + GLimp_Init( qtrue ); GLimp_InitExtraExtensions(); @@ -273,7 +273,7 @@ static void InitOpenGL( void ) glConfig.maxTextureSize = temp; // stubbed or broken drivers may have reported 0... - if ( glConfig.maxTextureSize <= 0 ) + if ( glConfig.maxTextureSize <= 0 ) { glConfig.maxTextureSize = 0; } @@ -327,10 +327,10 @@ void GL_CheckErrs( const char *file, int line ) { } -/* -============================================================================== - - SCREEN SHOTS +/* +============================================================================== + + SCREEN SHOTS NOTE TTimo some thoughts about the screenshots system: @@ -343,11 +343,11 @@ we use statics to store a count and start writing the first screenshot/screensho (with FS_FileExists / FS_FOpenFileWrite calls) FIXME: the statics don't get a reinit between fs_game changes -============================================================================== -*/ +============================================================================== +*/ -/* -================== +/* +================== RB_ReadPixels Reads an image but takes care of alignment issues for reading RGB images. @@ -360,51 +360,51 @@ alignment of packAlign to ensure efficient copying. Stores the length of padding after a line of pixels to address padlen Return value must be freed with ri.Hunk_FreeTempMemory() -================== -*/ +================== +*/ byte *RB_ReadPixels(int x, int y, int width, int height, size_t *offset, int *padlen) { byte *buffer, *bufstart; int padwidth, linelen; GLint packAlign; - + qglGetIntegerv(GL_PACK_ALIGNMENT, &packAlign); - + linelen = width * 3; padwidth = PAD(linelen, packAlign); - + // Allocate a few more bytes so that we can choose an alignment we like buffer = (byte*)ri.Hunk_AllocateTempMemory(padwidth * height + *offset + packAlign - 1); - + bufstart = (byte*)PADP((intptr_t) buffer + *offset, packAlign); qglReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, bufstart); - + *offset = bufstart - buffer; *padlen = padwidth - linelen; - + return buffer; } -/* -================== +/* +================== RB_TakeScreenshot -================== -*/ +================== +*/ void RB_TakeScreenshot(int x, int y, int width, int height, char *fileName) { byte *allbuf, *buffer; byte *srcptr, *destptr; byte *endline, *endmem; byte temp; - + int linelen, padlen; size_t offset = 18, memcount; - + allbuf = RB_ReadPixels(x, y, width, height, &offset, &padlen); buffer = allbuf + offset - 18; - + Com_Memset (buffer, 0, 18); buffer[2] = 2; // uncompressed type buffer[12] = width & 255; @@ -415,10 +415,10 @@ void RB_TakeScreenshot(int x, int y, int width, int height, char *fileName) // swap rgb to bgr and remove padding from line endings linelen = width * 3; - + srcptr = destptr = allbuf + offset; endmem = srcptr + (linelen + padlen) * height; - + while(srcptr < endmem) { endline = srcptr + linelen; @@ -429,10 +429,10 @@ void RB_TakeScreenshot(int x, int y, int width, int height, char *fileName) *destptr++ = srcptr[2]; *destptr++ = srcptr[1]; *destptr++ = temp; - + srcptr += 3; } - + // Skip the pad srcptr += padlen; } @@ -448,10 +448,10 @@ void RB_TakeScreenshot(int x, int y, int width, int height, char *fileName) ri.Hunk_FreeTempMemory(allbuf); } -/* -================== +/* +================== RB_TakeScreenshotJPEG -================== +================== */ void RB_TakeScreenshotJPEG(int x, int y, int width, int height, char *fileName) @@ -478,7 +478,7 @@ RB_TakeScreenshotCmd */ const void *RB_TakeScreenshotCmd( const void *data ) { const screenshotCommand_t *cmd; - + cmd = (const screenshotCommand_t *)data; // finish any 2D drawing if needed @@ -489,8 +489,8 @@ const void *RB_TakeScreenshotCmd( const void *data ) { RB_TakeScreenshotJPEG( cmd->x, cmd->y, cmd->width, cmd->height, cmd->fileName); else RB_TakeScreenshot( cmd->x, cmd->y, cmd->width, cmd->height, cmd->fileName); - - return (const void *)(cmd + 1); + + return (const void *)(cmd + 1); } /* @@ -517,11 +517,11 @@ void R_TakeScreenshot( int x, int y, int width, int height, char *name, bool jpe cmd->jpeg = jpeg; } -/* -================== +/* +================== R_ScreenshotFilename -================== -*/ +================== +*/ void R_ScreenshotFilename( int lastNumber, char *fileName ) { int a,b,c,d; @@ -542,11 +542,11 @@ void R_ScreenshotFilename( int lastNumber, char *fileName ) { , a, b, c, d ); } -/* -================== +/* +================== R_ScreenshotFilename -================== -*/ +================== +*/ void R_ScreenshotFilenameJPEG( int lastNumber, char *fileName ) { int a,b,c,d; @@ -634,8 +634,8 @@ void R_LevelShot( void ) { ri.Printf( PRINT_ALL, "Wrote %s\n", checkname ); } -/* -================== +/* +================== R_ScreenShot_f screenshot @@ -644,8 +644,8 @@ screenshot [levelshot] screenshot [filename] Doesn't print the pacifier message if there is a second arg -================== -*/ +================== +*/ void R_ScreenShot_f (void) { char checkname[MAX_OSPATH]; static int lastNumber = -1; @@ -685,7 +685,7 @@ void R_ScreenShot_f (void) { } if ( lastNumber >= 9999 ) { - ri.Printf (PRINT_ALL, "ScreenShot: Couldn't create a file\n"); + ri.Printf (PRINT_ALL, "ScreenShot: Couldn't create a file\n"); return; } @@ -697,7 +697,7 @@ void R_ScreenShot_f (void) { if ( !silent ) { ri.Printf (PRINT_ALL, "Wrote %s\n", checkname); } -} +} void R_ScreenShotJPEG_f (void) { char checkname[MAX_OSPATH]; @@ -738,7 +738,7 @@ void R_ScreenShotJPEG_f (void) { } if ( lastNumber == 10000 ) { - ri.Printf (PRINT_ALL, "ScreenShot: Couldn't create a file\n"); + ri.Printf (PRINT_ALL, "ScreenShot: Couldn't create a file\n"); return; } @@ -750,7 +750,7 @@ void R_ScreenShotJPEG_f (void) { if ( !silent ) { ri.Printf (PRINT_ALL, "Wrote %s\n", checkname); } -} +} //============================================================================ @@ -801,7 +801,7 @@ const void *RB_TakeVideoFrameCmd( const void *data ) RB_EndSurface(); cmd = (const videoFrameCommand_t *)data; - + qglGetIntegerv(GL_PACK_ALIGNMENT, &packAlign); linelen = cmd->width * 3; @@ -814,7 +814,7 @@ const void *RB_TakeVideoFrameCmd( const void *data ) avipadlen = avipadwidth - linelen; cBuf = (byte*)PADP(cmd->captureBuffer, packAlign); - + qglReadPixels(0, 0, cmd->width, cmd->height, GL_RGB, GL_UNSIGNED_BYTE, cBuf); @@ -835,11 +835,11 @@ const void *RB_TakeVideoFrameCmd( const void *data ) { byte *lineend, *memend; byte *srcptr, *destptr; - + srcptr = cBuf; destptr = cmd->encodeBuffer; memend = srcptr + memcount; - + // swap R and B and remove line paddings while(srcptr < memend) { @@ -851,17 +851,17 @@ const void *RB_TakeVideoFrameCmd( const void *data ) *destptr++ = srcptr[0]; srcptr += 3; } - + Com_Memset(destptr, '\0', avipadlen); destptr += avipadlen; - + srcptr += padlen; } - + ri.CL_WriteAVIVideoFrame(cmd->encodeBuffer, avipadwidth * cmd->height); } - return (const void *)(cmd + 1); + return (const void *)(cmd + 1); } //============================================================================ @@ -946,7 +946,7 @@ void R_PrintLongString(const char *string) { GfxInfo_f ================ */ -void GfxInfo_f( void ) +void GfxInfo_f( void ) { const char *enablestrings[] = { @@ -1014,7 +1014,7 @@ void GfxInfo_f( void ) GfxMemInfo_f ================ */ -void GfxMemInfo_f( void ) +void GfxMemInfo_f( void ) { switch (glRefConfig.memInfo) { @@ -1066,11 +1066,11 @@ void GfxMemInfo_f( void ) R_Register =============== */ -void R_Register( void ) +void R_Register( void ) { #ifdef USE_RENDERER_DLOPEN com_altivec = ri.Cvar_Get("com_altivec", "1", CVAR_ARCHIVE); - #endif + #endif // // latched and archived variables @@ -1083,13 +1083,13 @@ void R_Register( void ) r_ext_framebuffer_object = ri.Cvar_Get( "r_ext_framebuffer_object", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_texture_float = ri.Cvar_Get( "r_ext_texture_float", "1", CVAR_ARCHIVE | CVAR_LATCH); - r_ext_framebuffer_multisample = ri.Cvar_Get( "r_ext_framebuffer_multisample", "0", CVAR_ARCHIVE | CVAR_LATCH); + r_ext_framebuffer_multisample = ri.Cvar_Get( "r_ext_framebuffer_multisample", "16", CVAR_ARCHIVE | CVAR_LATCH); r_arb_seamless_cube_map = ri.Cvar_Get( "r_arb_seamless_cube_map", "0", CVAR_ARCHIVE | CVAR_LATCH); r_arb_vertex_array_object = ri.Cvar_Get( "r_arb_vertex_array_object", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_direct_state_access = ri.Cvar_Get("r_ext_direct_state_access", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_texture_filter_anisotropic = ri.Cvar_Get( "r_ext_texture_filter_anisotropic", - "0", CVAR_ARCHIVE | CVAR_LATCH ); + "1", CVAR_ARCHIVE | CVAR_LATCH ); r_ext_max_anisotropy = ri.Cvar_Get( "r_ext_max_anisotropy", "2", CVAR_ARCHIVE | CVAR_LATCH ); r_picmip = ri.Cvar_Get ("r_picmip", "1", CVAR_ARCHIVE | CVAR_LATCH ); @@ -1309,7 +1309,7 @@ void R_ShutDownQueries(void) R_Init =============== */ -void R_Init( void ) { +void R_Init( void ) { int err; int i; byte *ptr; @@ -1411,7 +1411,7 @@ void R_Init( void ) { RE_Shutdown =============== */ -void RE_Shutdown( bool destroyWindow ) { +void RE_Shutdown( bool destroyWindow ) { ri.Printf( PRINT_ALL, "RE_Shutdown( %i )\n", destroyWindow ); @@ -1484,7 +1484,7 @@ refexport_t *GetRefAPI ( int apiVersion, refimport_t *rimp ) { Com_Memset( &re, 0, sizeof( re ) ); if ( apiVersion != REF_API_VERSION ) { - ri.Printf(PRINT_ALL, "Mismatched REF_API_VERSION: expected %i, got %i\n", + ri.Printf(PRINT_ALL, "Mismatched REF_API_VERSION: expected %i, got %i\n", REF_API_VERSION, apiVersion ); return NULL; } diff --git a/src/renderergl2/tr_model.cpp b/src/renderergl2/tr_model.cpp index 6e3b984f7..9b0927bfe 100644 --- a/src/renderergl2/tr_model.cpp +++ b/src/renderergl2/tr_model.cpp @@ -62,6 +62,17 @@ qhandle_t R_RegisterMD3(const char *name, model_t *mod) fext++; } + if(strcmp(fext, "md3") == 0) + { + char name3000[MAX_QPATH]; + qhandle_t md3000; + + strcpy(name3000, filename); + strncat(name3000, ".md3000", MAX_QPATH); + if(md3000 = R_RegisterMD3(name3000, mod)) + return md3000; + } + for (lod = MD3_MAX_LODS - 1 ; lod >= 0 ; lod--) { if(lod) @@ -72,13 +83,13 @@ qhandle_t R_RegisterMD3(const char *name, model_t *mod) size = ri.FS_ReadFile( namebuf, &buf.v ); if(!buf.u) continue; - + ident = LittleLong(* (unsigned *) buf.u); if (ident == MD3_IDENT) loaded = R_LoadMD3(mod, lod, buf.u, size, name); else ri.Printf(PRINT_WARNING,"R_RegisterMD3: unknown fileid for %s\n", name); - + ri.FS_FreeFile(buf.v); if(loaded) @@ -130,20 +141,20 @@ qhandle_t R_RegisterMDR(const char *name, model_t *mod) mod->type = MOD_BAD; return 0; } - + ident = LittleLong(*(unsigned *)buf.u); if(ident == MDR_IDENT) loaded = R_LoadMDR(mod, buf.u, filesize, name); ri.FS_FreeFile (buf.v); - + if(!loaded) { ri.Printf(PRINT_WARNING,"R_RegisterMDR: couldn't load mdr file %s\n", name); mod->type = MOD_BAD; return 0; } - + return mod->index; } @@ -167,18 +178,18 @@ qhandle_t R_RegisterIQM(const char *name, model_t *mod) mod->type = MOD_BAD; return 0; } - + loaded = R_LoadIQM(mod, buf.u, filesize, name); ri.FS_FreeFile (buf.v); - + if(!loaded) { ri.Printf(PRINT_WARNING,"R_RegisterIQM: couldn't load iqm file %s\n", name); mod->type = MOD_BAD; return 0; } - + return mod->index; } @@ -763,7 +774,7 @@ static bool R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize, cons vaoSurf->mdvSurface = surf; vaoSurf->numIndexes = surf->numIndexes; vaoSurf->numVerts = surf->numVerts; - + vaoSurf->minIndex = 0; vaoSurf->maxIndex = surf->numVerts - 1; @@ -824,7 +835,7 @@ static bool R_LoadMD3(model_t * mod, int lod, void *buffer, int bufferSize, cons R_LoadMDR ================= */ -static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod_name ) +static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod_name ) { int i, j, k, l; mdrHeader_t *pinmodel, *mdr; @@ -841,20 +852,20 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod pinmodel = (mdrHeader_t *)buffer; pinmodel->version = LittleLong(pinmodel->version); - if (pinmodel->version != MDR_VERSION) + if (pinmodel->version != MDR_VERSION) { ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has wrong version (%i should be %i)\n", mod_name, pinmodel->version, MDR_VERSION); return false; } size = LittleLong(pinmodel->ofsEnd); - + if(size > filesize) { ri.Printf(PRINT_WARNING, "R_LoadMDR: Header of %s is broken. Wrong filesize declared!\n", mod_name); return false; } - + mod->type = MOD_MDR; LL(pinmodel->numFrames); @@ -870,7 +881,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod // now add enough space for the uncompressed bones. size += pinmodel->numFrames * pinmodel->numBones * ((sizeof(mdrBone_t) - sizeof(mdrCompBone_t))); } - + // simple bounds check if(pinmodel->numBones < 0 || sizeof(*mdr) + pinmodel->numFrames * (sizeof(*frame) + (pinmodel->numBones - 1) * sizeof(*frame->bones)) > size) @@ -883,7 +894,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod mod->modelData = mdr = (mdrHeader_t*)ri.Hunk_Alloc( size, h_low ); // Copy all the values over from the file and fix endian issues in the process, if necessary. - + mdr->ident = LittleLong(pinmodel->ident); mdr->version = pinmodel->version; // Don't need to swap byte order on this one, we already did above. Q_strncpyz(mdr->name, pinmodel->name, sizeof(mdr->name)); @@ -895,7 +906,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod mod->numLods = mdr->numLODs; - if ( mdr->numFrames < 1 ) + if ( mdr->numFrames < 1 ) { ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has no frames\n", mod_name); return false; @@ -904,14 +915,14 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod /* The first frame will be put into the first free space after the header */ frame = (mdrFrame_t *)(mdr + 1); mdr->ofsFrames = (int)((byte *) frame - (byte *) mdr); - + if (pinmodel->ofsFrames < 0) { mdrCompFrame_t *cframe; - - // compressed model... + + // compressed model... cframe = (mdrCompFrame_t *)((byte *) pinmodel - pinmodel->ofsFrames); - + for(i = 0; i < mdr->numFrames; i++) { for(j = 0; j < 3; j++) @@ -923,7 +934,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod frame->radius = LittleFloat(cframe->radius); frame->name[0] = '\0'; // No name supplied in the compressed version. - + for(j = 0; j < mdr->numBones; j++) { for(k = 0; k < (sizeof(cframe->bones[j].Comp) / 2); k++) @@ -931,15 +942,15 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod // Do swapping for the uncompressing functions. They seem to use shorts // values only, so I assume this will work. Never tested it on other // platforms, though. - + ((unsigned short *)(cframe->bones[j].Comp))[k] = LittleShort( ((unsigned short *)(cframe->bones[j].Comp))[k] ); } - + /* Now do the actual uncompressing */ MC_UnCompress(frame->bones[j].matrix, cframe->bones[j].Comp); } - + // Next Frame... cframe = (mdrCompFrame_t *) &cframe->bones[j]; frame = (mdrFrame_t *) &frame->bones[j]; @@ -948,14 +959,14 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod else { mdrFrame_t *curframe; - + // uncompressed model... // - + curframe = (mdrFrame_t *)((byte *) pinmodel + pinmodel->ofsFrames); - + // swap all the frames - for ( i = 0 ; i < mdr->numFrames ; i++) + for ( i = 0 ; i < mdr->numFrames ; i++) { for(j = 0; j < 3; j++) { @@ -963,26 +974,26 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod frame->bounds[1][j] = LittleFloat(curframe->bounds[1][j]); frame->localOrigin[j] = LittleFloat(curframe->localOrigin[j]); } - + frame->radius = LittleFloat(curframe->radius); Q_strncpyz(frame->name, curframe->name, sizeof(frame->name)); - - for (j = 0; j < (int) (mdr->numBones * sizeof(mdrBone_t) / 4); j++) + + for (j = 0; j < (int) (mdr->numBones * sizeof(mdrBone_t) / 4); j++) { ((float *)frame->bones)[j] = LittleFloat( ((float *)curframe->bones)[j] ); } - + curframe = (mdrFrame_t *) &curframe->bones[mdr->numBones]; frame = (mdrFrame_t *) &frame->bones[mdr->numBones]; } } - + // frame should now point to the first free address after all frames. lod = (mdrLOD_t *) frame; mdr->ofsLODs = (int) ((byte *) lod - (byte *)mdr); - + curlod = (mdrLOD_t *)((byte *) pinmodel + LittleLong(pinmodel->ofsLODs)); - + // swap all the LOD's for ( l = 0 ; l < mdr->numLODs ; l++) { @@ -994,12 +1005,12 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod } lod->numSurfaces = LittleLong(curlod->numSurfaces); - + // swap all the surfaces surf = (mdrSurface_t *) (lod + 1); lod->ofsSurfaces = (int)((byte *) surf - (byte *) lod); cursurf = (mdrSurface_t *) ((byte *)curlod + LittleLong(curlod->ofsSurfaces)); - + for ( i = 0 ; i < lod->numSurfaces ; i++) { // simple bounds check @@ -1010,26 +1021,26 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod } // first do some copying stuff - + surf->ident = SF_MDR; Q_strncpyz(surf->name, cursurf->name, sizeof(surf->name)); Q_strncpyz(surf->shader, cursurf->shader, sizeof(surf->shader)); - + surf->ofsHeader = (byte *) mdr - (byte *) surf; - + surf->numVerts = LittleLong(cursurf->numVerts); surf->numTriangles = LittleLong(cursurf->numTriangles); // numBoneReferences and BoneReferences generally seem to be unused - + // now do the checks that may fail. - if ( surf->numVerts >= SHADER_MAX_VERTEXES ) + if ( surf->numVerts >= SHADER_MAX_VERTEXES ) { ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has more than %i verts on %s (%i).\n", mod_name, SHADER_MAX_VERTEXES - 1, surf->name[0] ? surf->name : "a surface", surf->numVerts ); return false; } - if ( surf->numTriangles*3 >= SHADER_MAX_INDEXES ) + if ( surf->numTriangles*3 >= SHADER_MAX_INDEXES ) { ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has more than %i triangles on %s (%i).\n", mod_name, ( SHADER_MAX_INDEXES / 3 ) - 1, surf->name[0] ? surf->name : "a surface", @@ -1046,16 +1057,16 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod } else { surf->shaderIndex = sh->index; } - + // now copy the vertexes. v = (mdrVertex_t *) (surf + 1); surf->ofsVerts = (int)((byte *) v - (byte *) surf); curv = (mdrVertex_t *) ((byte *)cursurf + LittleLong(cursurf->ofsVerts)); - + for(j = 0; j < surf->numVerts; j++) { LL(curv->numWeights); - + // simple bounds check if(curv->numWeights < 0 || (byte *) (v + 1) + (curv->numWeights - 1) * sizeof(*weight) > (byte *) mdr + size) { @@ -1066,37 +1077,37 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod v->normal[0] = LittleFloat(curv->normal[0]); v->normal[1] = LittleFloat(curv->normal[1]); v->normal[2] = LittleFloat(curv->normal[2]); - + v->texCoords[0] = LittleFloat(curv->texCoords[0]); v->texCoords[1] = LittleFloat(curv->texCoords[1]); - + v->numWeights = curv->numWeights; weight = &v->weights[0]; curweight = &curv->weights[0]; - + // Now copy all the weights for(k = 0; k < v->numWeights; k++) { weight->boneIndex = LittleLong(curweight->boneIndex); weight->boneWeight = LittleFloat(curweight->boneWeight); - + weight->offset[0] = LittleFloat(curweight->offset[0]); weight->offset[1] = LittleFloat(curweight->offset[1]); weight->offset[2] = LittleFloat(curweight->offset[2]); - + weight++; curweight++; } - + v = (mdrVertex_t *) weight; curv = (mdrVertex_t *) curweight; } - + // we know the offset to the triangles now: tri = (mdrTriangle_t *) v; surf->ofsTriangles = (int)((byte *) tri - (byte *) surf); curtri = (mdrTriangle_t *)((byte *) cursurf + LittleLong(cursurf->ofsTriangles)); - + // simple bounds check if(surf->numTriangles < 0 || (byte *) (tri + surf->numTriangles) > (byte *) mdr + size) { @@ -1109,11 +1120,11 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod tri->indexes[0] = LittleLong(curtri->indexes[0]); tri->indexes[1] = LittleLong(curtri->indexes[1]); tri->indexes[2] = LittleLong(curtri->indexes[2]); - + tri++; curtri++; } - + // tri now points to the end of the surface. surf->ofsEnd = (byte *) tri - (byte *) surf; surf = (mdrSurface_t *) tri; @@ -1129,7 +1140,7 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod // find the next LOD. curlod = (mdrLOD_t *)((byte *) curlod + LittleLong(curlod->ofsEnd)); } - + // lod points to the first tag now, so update the offset too. tag = (mdrTag_t *) lod; mdr->ofsTags = (int)((byte *) tag - (byte *) mdr); @@ -1141,21 +1152,21 @@ static bool R_LoadMDR( model_t *mod, void *buffer, int filesize, const char *mod ri.Printf(PRINT_WARNING, "R_LoadMDR: %s has broken structure.\n", mod_name); return false; } - + for (i = 0 ; i < mdr->numTags ; i++) { tag->boneIndex = LittleLong(curtag->boneIndex); Q_strncpyz(tag->name, curtag->name, sizeof(tag->name)); - + tag++; curtag++; } - + // And finally we know the real offset to the end. mdr->ofsEnd = (int)((byte *) tag - (byte *) mdr); // phew! we're done. - + return true; } @@ -1276,7 +1287,7 @@ mdvTag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, mdv mdrFrame_t *frame; mdrTag_t *tag; - if ( framenum >= mod->numFrames ) + if ( framenum >= mod->numFrames ) { // it is possible to have a bad frame while changing models, so don't error framenum = mod->numFrames - 1; @@ -1300,7 +1311,7 @@ mdvTag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, mdv dest->origin[0] = frame->bones[tag->boneIndex].matrix[0][3]; dest->origin[1] = frame->bones[tag->boneIndex].matrix[1][3]; - dest->origin[2] = frame->bones[tag->boneIndex].matrix[2][3]; + dest->origin[2] = frame->bones[tag->boneIndex].matrix[2][3]; return dest; } @@ -1314,7 +1325,7 @@ mdvTag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, mdv R_LerpTag ================ */ -int R_LerpTag( orientation_t *tag, qhandle_t handle, int startFrame, int endFrame, +int R_LerpTag( orientation_t *tag, qhandle_t handle, int startFrame, int endFrame, float frac, const char *tagName ) { mdvTag_t *start, *end; mdvTag_t start_space, end_space; @@ -1377,7 +1388,7 @@ void R_ModelBounds( qhandle_t handle, vec3_t mins, vec3_t maxs ) { if(model->type == MOD_BRUSH) { VectorCopy( model->bmodel->bounds[0], mins ); VectorCopy( model->bmodel->bounds[1], maxs ); - + return; } else if (model->type == MOD_MESH) { mdvModel_t *header; @@ -1388,7 +1399,7 @@ void R_ModelBounds( qhandle_t handle, vec3_t mins, vec3_t maxs ) { VectorCopy( frame->bounds[0], mins ); VectorCopy( frame->bounds[1], maxs ); - + return; } else if (model->type == MOD_MDR) { mdrHeader_t *header; @@ -1399,11 +1410,11 @@ void R_ModelBounds( qhandle_t handle, vec3_t mins, vec3_t maxs ) { VectorCopy( frame->bounds[0], mins ); VectorCopy( frame->bounds[1], maxs ); - + return; } else if(model->type == MOD_IQM) { iqmData_t *iqmData; - + iqmData = (iqmData_t*)model->modelData; if(iqmData->bounds) diff --git a/src/sdl/sdl_glimp.cpp b/src/sdl/sdl_glimp.cpp index 9ecd224be..9ea4034f4 100644 --- a/src/sdl/sdl_glimp.cpp +++ b/src/sdl/sdl_glimp.cpp @@ -195,6 +195,11 @@ static void GLimp_DetectAvailableModes(void) numModes++; } + // Adding automatic mode + modes[numModes].w = 0; + modes[numModes].h = 0; + numModes++; + if( numModes > 1 ) qsort( modes, numModes, sizeof( SDL_Rect ), GLimp_CompareModes ); @@ -462,7 +467,7 @@ static int GLimp_SetMode( bool failSafe, bool fullscreen, bool noborder, bool co glConfig.stereoEnabled = qfalse; SDL_GL_SetAttribute(SDL_GL_STEREO, 0); } - + SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); #if 0 // if multisampling is enabled on X11, this causes create window to fail. diff --git a/src/sdl/sdl_input.cpp b/src/sdl/sdl_input.cpp index 1e1056afe..13923b0a7 100644 --- a/src/sdl/sdl_input.cpp +++ b/src/sdl/sdl_input.cpp @@ -211,8 +211,11 @@ static keyNum_t IN_TranslateSDLToQ3Key( SDL_Keysym *keysym, bool down ) // These happen to match the ASCII chars key = (keyNum_t)keysym->sym; } - else + else if (!(keysym->sym >= SDLK_KP_1 && keysym->sym <= SDLK_KP_9 + && ((SDL_GetModState() & KMOD_NUM) == (KMOD_NUM)))) { + // Don't send K_KP_DOWNARROW and others if numpad is activated + switch( keysym->sym ) { case SDLK_PAGEUP: key = K_PGUP; break; @@ -979,7 +982,7 @@ static void IN_JoyMove( void ) { Sint16 axis = SDL_JoystickGetAxis(stick, i); float f = ( (float) abs(axis) ) / 32767.0f; - + if( f < in_joystickThreshold->value ) axis = 0; if ( axis != stick_state.oldaaxes[i] ) diff --git a/src/server/sv_snapshot.cpp b/src/server/sv_snapshot.cpp index 07dd21005..a0e53e984 100644 --- a/src/server/sv_snapshot.cpp +++ b/src/server/sv_snapshot.cpp @@ -418,6 +418,15 @@ static void SV_AddEntitiesVisibleFromPoint(vec3_t origin, clientSnapshot_t *fram continue; } + // Doing this have two utility: + // - Keep sound, alien sense, and range marker behave well + // - Load builds progressivly on the client, avoiding short freeze on low end computer + if (Distance(origin, ent->r.currentOrigin) < 1500) + { + SV_AddEntToSnapshot(svEnt, ent, eNums); + continue; + } + // ignore if not touching a PV leaf // check area if (!CM_AreasConnected(clientarea, svEnt->areanum)) diff --git a/src/ui/ui_atoms.c b/src/ui/ui_atoms.c index b70d34ddf..37ed24fd9 100644 --- a/src/ui/ui_atoms.c +++ b/src/ui/ui_atoms.c @@ -189,7 +189,7 @@ static void UI_Me_f(void) struct uicmd { char *cmd; void (*function)(void); -} commands[] = +} commands[] = { {"closemenus", UI_CloseMenus_f}, {"me", UI_Me_f}, @@ -239,7 +239,7 @@ void UI_DrawHandlePic(float x, float y, float w, float h, qhandle_t hShader) float t1; if (w < 0) - { + { // flip about vertical w = -w; s0 = 1; @@ -252,7 +252,7 @@ void UI_DrawHandlePic(float x, float y, float w, float h, qhandle_t hShader) } if (h < 0) - { + { // flip about horizontal h = -h; t0 = 1; @@ -285,4 +285,23 @@ void UI_FillRect(float x, float y, float width, float height, const float *color trap_R_SetColor(NULL); } +/* +================ +UI_FillRoundedRect + +Coordinates are 640*480 virtual values +================= +*/ +void UI_FillRoundedRect( float x, float y, float width, float height, float size, const float *style, const float *color ) +{ + UI_FillRect( x, y + size * 3, width, height - size * 6, color ); + + trap_R_SetColor( color ); + + UI_DrawTopBottom( x + size * 3, y, width - size * 6, height, size * 3 ); + UI_DrawCorners( x - size, y - size, width + size * 2, height + size * 2, size * 4, style, uiInfo.uiDC.Assets.cornerIn ); + + trap_R_SetColor( NULL ); +} + void UI_SetColor(const float *rgba) { trap_R_SetColor(rgba); } diff --git a/src/ui/ui_local.h b/src/ui/ui_local.h index 936c414a3..fe53af3cc 100644 --- a/src/ui/ui_local.h +++ b/src/ui/ui_local.h @@ -177,6 +177,26 @@ typedef struct { } v; } menuItem_t; +typedef struct { + char *parentTagName; + int parentIndex; +} menuItemModelParent_t; + +typedef struct { + qhandle_t asset[4]; + int assetCount; + qhandle_t skin[4]; + int frame[4]; + int animation[4][2]; + float animationFPS[4]; + menuItemModelParent_t parent[3]; + float scale; + float zOffset; + float cameraDist; + qboolean autoAdjust; + qboolean forceCentering; +} menuItemModel_t; + typedef struct { int w; int h; @@ -218,18 +238,22 @@ typedef struct { int previewMovie; menuItem_t teamList[4]; + menuItemModel_t teamListModel[4]; int teamCount; int teamIndex; menuItem_t alienClassList[3]; + menuItemModel_t alienClassListModel[3]; int alienClassCount; int alienClassIndex; menuItem_t humanItemList[3]; + menuItemModel_t humanItemListModel[3]; int humanItemCount; int humanItemIndex; menuItem_t humanArmouryBuyList[32]; + menuItemModel_t humanArmouryBuyListModel[WP_NUM_WEAPONS + UP_NUM_UPGRADES]; int humanArmouryBuyCount; int humanArmouryBuyIndex; @@ -238,14 +262,17 @@ typedef struct { int humanArmourySellIndex; menuItem_t alienUpgradeList[16]; + menuItemModel_t alienUpgradeListModel[PCL_NUM_CLASSES]; int alienUpgradeCount; int alienUpgradeIndex; menuItem_t alienBuildList[32]; + menuItemModel_t alienBuildListModel[32]; int alienBuildCount; int alienBuildIndex; menuItem_t humanBuildList[32]; + menuItemModel_t humanBuildListModel[32]; int humanBuildCount; int humanBuildIndex; @@ -300,8 +327,11 @@ char *UI_Cvar_VariableString(const char *var_name); void UI_SetColor(const float *rgba); void UI_AdjustFrom640(float *x, float *y, float *w, float *h); void UI_Refresh(int time); +void UI_DrawCorners( float x, float y, float w, float h, float size, const float *style, qhandle_t *pic ); void UI_DrawHandlePic(float x, float y, float w, float h, qhandle_t hShader); +void UI_DrawTopBottom(float x, float y, float w, float h, float size); void UI_FillRect(float x, float y, float width, float height, const float *color); +void UI_FillRoundedRect( float x, float y, float width, float height, float size, const float *style, const float *color ); // // ui_syscalls.c diff --git a/src/ui/ui_main.c b/src/ui/ui_main.c index ec7c0aabe..03bce7cf0 100644 --- a/src/ui/ui_main.c +++ b/src/ui/ui_main.c @@ -199,9 +199,17 @@ void AssetCache(void) uiInfo.uiDC.Assets.scrollBarArrowLeft = trap_R_RegisterShaderNoMip(ASSET_SCROLLBAR_ARROWLEFT); uiInfo.uiDC.Assets.scrollBarArrowRight = trap_R_RegisterShaderNoMip(ASSET_SCROLLBAR_ARROWRIGHT); uiInfo.uiDC.Assets.scrollBarThumb = trap_R_RegisterShaderNoMip(ASSET_SCROLL_THUMB); + uiInfo.uiDC.Assets.showMoreArrow = trap_R_RegisterShaderNoMip(ASSET_SHOWMORE_ARROW); uiInfo.uiDC.Assets.sliderBar = trap_R_RegisterShaderNoMip(ASSET_SLIDER_BAR); uiInfo.uiDC.Assets.sliderThumb = trap_R_RegisterShaderNoMip(ASSET_SLIDER_THUMB); + uiInfo.uiDC.Assets.cornerIn[BORDER_SQUARE] = trap_R_RegisterShaderNoMip( ASSET_CORNERIN_SQUARE ); + uiInfo.uiDC.Assets.cornerOut[BORDER_SQUARE] = trap_R_RegisterShaderNoMip( ASSET_CORNEROUT_SQUARE ); + uiInfo.uiDC.Assets.cornerIn[BORDER_ROUNDED] = trap_R_RegisterShaderNoMip( ASSET_CORNERIN_ROUNDED ); + uiInfo.uiDC.Assets.cornerOut[BORDER_ROUNDED] = trap_R_RegisterShaderNoMip( ASSET_CORNEROUT_ROUNDED ); + uiInfo.uiDC.Assets.cornerIn[BORDER_FOLD] = trap_R_RegisterShaderNoMip( ASSET_CORNERIN_FOLD ); + uiInfo.uiDC.Assets.cornerOut[BORDER_FOLD] = trap_R_RegisterShaderNoMip( ASSET_CORNEROUT_FOLD ); + if (ui_emoticons.integer) { uiInfo.uiDC.Assets.emoticonCount = BG_LoadEmoticons(uiInfo.uiDC.Assets.emoticons, MAX_EMOTICONS); @@ -218,14 +226,11 @@ void AssetCache(void) void UI_DrawSides(float x, float y, float w, float h, float size) { - float sizeY; - UI_AdjustFrom640(&x, &y, &w, &h); - sizeY = size * uiInfo.uiDC.yscale; size *= uiInfo.uiDC.xscale; - trap_R_DrawStretchPic(x, y + sizeY, size, h - (sizeY * 2.0f), 0, 0, 0, 0, uiInfo.uiDC.whiteShader); - trap_R_DrawStretchPic(x + w - size, y + sizeY, size, h - (sizeY * 2.0f), 0, 0, 0, 0, uiInfo.uiDC.whiteShader); + trap_R_DrawStretchPic(x, y, size, h, 0, 0, 0, 0, uiInfo.uiDC.whiteShader); + trap_R_DrawStretchPic(x + w - size, y, size, h, 0, 0, 0, 0, uiInfo.uiDC.whiteShader); } void UI_DrawTopBottom(float x, float y, float w, float h, float size) @@ -236,6 +241,19 @@ void UI_DrawTopBottom(float x, float y, float w, float h, float size) trap_R_DrawStretchPic(x, y + h - size, w, size, 0, 0, 0, 0, uiInfo.uiDC.whiteShader); } +void UI_DrawCorners( float x, float y, float w, float h, float size, const float *style, qhandle_t *pic ) +{ + float hs, vs; + UI_AdjustFrom640( &x, &y, &w, &h ); + hs = size * uiInfo.uiDC.xscale; + vs = size * uiInfo.uiDC.yscale; + + trap_R_DrawStretchPic( x, y, hs, vs, 0, 0, 0.5, 0.5, pic[(int)(style[0])] ); + trap_R_DrawStretchPic( x + w - hs, y, hs, vs, 0.5, 0, 1, 0.5, pic[(int)(style[1])] ); + trap_R_DrawStretchPic( x + w - hs, y + h - vs, hs, vs, 0.5, 0.5, 1, 1, pic[(int)(style[2])] ); + trap_R_DrawStretchPic( x, y + h - vs, hs, vs, 0, 0.5, 0.5, 1, pic[(int)(style[3])] ); +} + /* ================ UI_DrawRect @@ -243,16 +261,43 @@ UI_DrawRect Coordinates are 640*480 virtual values ================= */ -void UI_DrawRect(float x, float y, float width, float height, float size, const float *color) +void UI_DrawRect(float x, float y, float w, float h, float size, const float *color) { + float sizeY, sizeX; + + UI_AdjustFrom640(&x, &y, &w, &h); + sizeY = size * uiInfo.uiDC.yscale; + sizeX = size * uiInfo.uiDC.xscale; + trap_R_SetColor(color); - UI_DrawTopBottom(x, y, width, height, size); - UI_DrawSides(x, y, width, height, size); + trap_R_DrawStretchPic(x, y, w, sizeY, 0, 0, 0, 0, uiInfo.uiDC.whiteShader); + trap_R_DrawStretchPic(x, y + h - sizeY, w, sizeY, 0, 0, 0, 0, uiInfo.uiDC.whiteShader); + + trap_R_DrawStretchPic(x, y + sizeY, sizeX, h - (sizeY * 2.0f), 0, 0, 0, 0, uiInfo.uiDC.whiteShader); + trap_R_DrawStretchPic(x + w - sizeX, y + sizeY, sizeX, h - (sizeY * 2.0f), 0, 0, 0, 0, uiInfo.uiDC.whiteShader); trap_R_SetColor(NULL); } +/* +================ +UI_DrawRoundedRect + +Coordinates are 640*480 virtual values +================= +*/ +void UI_DrawRoundedRect( float x, float y, float width, float height, float size, const float *style, const float *color ) +{ + trap_R_SetColor( color ); + + UI_DrawTopBottom( x + size * 4, y, width - size * 8, height, size ); + UI_DrawSides( x, y + size * 4, width, height - size * 8, size ); + UI_DrawCorners( x, y, width, height, size * 4, style, uiInfo.uiDC.Assets.cornerOut ); + + trap_R_SetColor( NULL ); +} + /* ================== UI_ServerInfoIsValid @@ -1772,6 +1817,144 @@ static stage_t UI_GetCurrentHumanStage(void) return stage; } +/* +=============== +UI_alienStates +=============== +*/ +static void UI_alienStates(alienStates_t *state) +{ + char alienStates[MAX_TOKEN_CHARS]; + + trap_Cvar_VariableStringBuffer("ui_alienStates", alienStates, sizeof(alienStates)); + + sscanf( alienStates, "%d %d %d %d %d", &state->omBuilding, &state->omHealth, + &state->spawns, &state->builders, &state->boosters ); +} + +/* +=============== +UI_humanStates +=============== +*/ +static void UI_humanStates(humanStates_t *state) +{ + char humanStates[MAX_TOKEN_CHARS]; + + trap_Cvar_VariableStringBuffer("ui_humanStates", humanStates, sizeof(humanStates)); + + sscanf( humanStates, "%d %d %d %d %d %d %d", &state->rcBuilding, &state->rcHealth, + &state->spawns, &state->builders, &state->armourys, &state->medicals, &state->computers ); +} + +/* +=============== +UI_GetStageText +=============== +*/ +static char *UI_GetStageText(int stages) +{ + if (stages == (( 1 << S1 )|( 1 << S2 )|( 1 << S3 ))) + return "from stage 1"; + else if (stages == (( 1 << S2 )|( 1 << S3 ))) + return "from stage 2"; + else if (stages == (( 1 << S1 )|( 1 << S3 ))) + return "at stages 1 and 3"; + else if (stages == (( 1 << S1 )|( 1 << S2 ))) + return "at stages 1 and 2"; + else if (stages == (( 1 << S3 ))) + return "at stage 3"; + else if (stages == ( 1 << S1 )) + return "at stage 1"; + else if (stages == ( 1 << S2 )) + return "at stage 2"; + else + return "nevertime"; +} + +/* +=============== +UI_DrawNewProgressBar +=============== +*/ +static void UI_DrawNewProgressBar( rectDef_t *rect, vec4_t color, + vec4_t backColor, float scale, int align, + int textalign, int textStyle, float borderSize, + float progress ) +{ + float rimWidth; + float doneWidth, leftWidth; + float tx, ty; + char textBuffer[ 8 ]; + float borderStyle[ 4 ]; + int w, h; + + borderStyle[0] = BORDER_FOLD; + borderStyle[1] = BORDER_FOLD; + borderStyle[2] = BORDER_FOLD; + borderStyle[3] = BORDER_FOLD; + + if( borderSize >= 0.0f ) + rimWidth = borderSize; + else + { + rimWidth = rect->h / 20.0f; + if( rimWidth < 0.6f ) + rimWidth = 0.6f; + } + + if( progress < 0.0f ) + progress = 0.0f; + else if( progress > 1.0f ) + progress = 1.0f; + + doneWidth = ( rect->w - (8 + 6) * rimWidth ) * progress + 6 * rimWidth; + + //draw rim and bar + UI_DrawRoundedRect(rect->x, rect->y, rect->w, rect->h, rimWidth, borderStyle, color); + UI_FillRoundedRect( + rect->x + rimWidth * 4, + rect->y + rimWidth * 4, + doneWidth, + rect->h - rimWidth * 8, + rimWidth, borderStyle, backColor); + + + //draw text + if( scale > 0.0 ) + { + Com_sprintf( textBuffer, sizeof( textBuffer ), "%d%%", (int)( progress * 100 ) ); + w = UI_Text_Width(textBuffer, scale); + h = UI_Text_Height(textBuffer, scale); + UI_Text_Paint( rect->x + (rect->w - w ) / 2.0, rect->y + h + ( rect->h - h ) / 2.0f, scale, color, textBuffer, 0, 0, textStyle ); + } +} + +/* +=============== +UI_DrawDownloadOverall +=============== +*/ +static void UI_DrawDownloadOverall( rectDef_t *rect, vec4_t color, vec4_t backColor, float scale, + int align, int textalign, int textStyle, + float borderSize ) +{ + char downloadName[MAX_INFO_VALUE]; + int downloadSize, downloadCount, downloadTotal, downloadDone; + + trap_Cvar_VariableStringBuffer("cl_downloadName", downloadName, sizeof(downloadName)); + if (!*downloadName) + return; + + downloadSize = trap_Cvar_VariableValue("cl_downloadSize"); + downloadCount = trap_Cvar_VariableValue("cl_downloadCount"); + downloadTotal = trap_Cvar_VariableValue("cl_downloadTotal"); + downloadDone = trap_Cvar_VariableValue("cl_downloadDone"); + + UI_DrawNewProgressBar( rect, color, backColor, scale, align, textalign, textStyle, borderSize, + (downloadSize ? ((float)downloadCount / downloadSize / downloadTotal) : 0) + (float)downloadDone / downloadTotal ); +} + /* =============== UI_DrawInfoPane @@ -1803,47 +1986,48 @@ static void UI_DrawInfoPane(menuItem_t *item, rectDef_t *rect, float text_x, flo ALIEN_CREDITS_PER_KILL - 1) / ALIEN_CREDITS_PER_KILL; - if (value < 1) - { - s = va("%s\n\n%s", BG_ClassConfig(item->v.pclass)->humanName, BG_Class(item->v.pclass)->info); - } - else - { - s = va("%s\n\n%s\n\nFrags: %d", BG_ClassConfig(item->v.pclass)->humanName, - BG_Class(item->v.pclass)->info, value); - } + s = va("%s\n\n%s\nAvailable %s.%s", + BG_ClassConfig(item->v.pclass)->humanName, + BG_Class(item->v.pclass)->info, + UI_GetStageText(BG_Class(item->v.pclass)->stages), + ( + (value > 0) ? + va("\n\nFrags: %d", value) : + "" + ) + ); break; case INFOTYPE_WEAPON: value = BG_Weapon(item->v.weapon)->price; - if (value == 0) - { - s = va( - "%s\n\n%s\n\nCredits: Free", BG_Weapon(item->v.weapon)->humanName, BG_Weapon(item->v.weapon)->info); - } - else - { - s = va("%s\n\n%s\n\nCredits: %d", BG_Weapon(item->v.weapon)->humanName, BG_Weapon(item->v.weapon)->info, - value); - } + s = va("%s\n\n%s\nAvailable %s.\n\nCredits: %s", + BG_Weapon(item->v.weapon)->humanName, + BG_Weapon(item->v.weapon)->info, + UI_GetStageText(BG_Weapon(item->v.weapon)->stages), + ( + (value > 0) ? + va("%d", value) : + "Free" + ) + ); break; case INFOTYPE_UPGRADE: value = BG_Upgrade(item->v.upgrade)->price; - if (value == 0) - { - s = va("%s\n\n%s\n\nCredits: Free", BG_Upgrade(item->v.upgrade)->humanName, - BG_Upgrade(item->v.upgrade)->info); - } - else - { - s = va("%s\n\n%s\n\nCredits: %d", BG_Upgrade(item->v.upgrade)->humanName, - BG_Upgrade(item->v.upgrade)->info, value); - } + s = va("%s\n\n%s\nAvailable %s.\n\nCredits: %s", + BG_Upgrade(item->v.upgrade)->humanName, + BG_Upgrade(item->v.upgrade)->info, + UI_GetStageText(BG_Upgrade(item->v.upgrade)->stages), + ( + (value > 0) ? + va("%d", value) : + "Free" + ) + ); break; @@ -1864,15 +2048,16 @@ static void UI_DrawInfoPane(menuItem_t *item, rectDef_t *rect, float text_x, flo break; } - if (value == 0) - { - s = va("%s\n\n%s", BG_Buildable(item->v.buildable)->humanName, BG_Buildable(item->v.buildable)->info); - } - else - { - s = va("%s\n\n%s\n\n%s: %d", BG_Buildable(item->v.buildable)->humanName, - BG_Buildable(item->v.buildable)->info, string, value); - } + s = va("%s\n\n%s\nAvailable %s.%s", + BG_Buildable(item->v.buildable)->humanName, + BG_Buildable(item->v.buildable)->info, + UI_GetStageText(BG_Buildable(item->v.buildable)->stages), + ( + (value > 0) ? + va("\n\n%s: %d", string, value) : + "" + ) + ); break; } @@ -1880,6 +2065,180 @@ static void UI_DrawInfoPane(menuItem_t *item, rectDef_t *rect, float text_x, flo UI_DrawTextBlock(rect, text_x, text_y, color, scale, textalign, textvalign, textStyle, s); } +static void UI_PositionRotatedEntityOnTag( refEntity_t *entity, const refEntity_t *parent, + qhandle_t parentModel, char *tagName ) // Imported from cg_ents.c +{ + int i; + orientation_t lerped; + vec3_t tempAxis[ 3 ]; + +//AxisClear( entity->axis ); + // lerp the tag + uiInfo.uiDC.lerpTag( &lerped, parentModel, parent->oldframe, parent->frame, + 1.0 - parent->backlerp, tagName ); + + // FIXME: allow origin offsets along tag? + VectorCopy( parent->origin, entity->origin ); + for( i = 0; i < 3; i++ ) + VectorMA( entity->origin, lerped.origin[ i ], parent->axis[ i ], entity->origin ); + + // had to cast away the const to avoid compiler problems... + MatrixMultiply( entity->axis, lerped.axis, tempAxis ); + MatrixMultiply( tempAxis, ( (refEntity_t *)parent )->axis, entity->axis ); +} + +static void UI_DrawInfoPaneModel(menuItemModel_t *model, rectDef_t *rect) +{ + float x, y, w, h; + refdef_t refdef; + refEntity_t ent[4]; + vec3_t tmpMins, tmpMaxs; + vec3_t mins, maxs; + vec3_t origin; + vec3_t angles; + float suggestedDist; + int i; + int millisPerDeg = 100; // 36s = 1 turn + float tmpFrame; + + if (model->assetCount == 0) + return; + + // setup the refdef + memset(&refdef, 0, sizeof(refdef)); + + refdef.rdflags = RDF_NOWORLDMODEL; + + AxisClear(refdef.viewaxis); + + x = rect->x; + y = rect->y; + w = rect->w; + h = rect->h; + + UI_AdjustFrom640(&x, &y, &w, &h); + + refdef.x = x; + refdef.y = y; + refdef.width = w; + refdef.height = h; + + if (model->autoAdjust) + { + uiInfo.uiDC.modelBounds(model->asset[0], mins, maxs); + for (i = 1; i < model->assetCount; i++) // Maybe there are already a function for this ? + { + uiInfo.uiDC.modelBounds(model->asset[i], tmpMins, tmpMaxs); + if (tmpMins[0] < mins[0]) + mins[0] = tmpMins[0]; + if (tmpMins[1] < mins[1]) + mins[1] = tmpMins[1]; + if (tmpMins[2] < mins[2]) + mins[2] = tmpMins[2]; + if (tmpMaxs[0] > maxs[0]) + maxs[0] = tmpMaxs[0]; + if (tmpMaxs[1] > maxs[1]) + maxs[1] = tmpMaxs[1]; + if (tmpMaxs[2] > maxs[2]) + maxs[2] = tmpMaxs[2]; + } + + origin[1] = 0.5 * (mins[1] + maxs[1]); + suggestedDist = ((0.5 * (maxs[2]*model->scale - mins[2]*model->scale)) / 0.268); // len / tan( fov/2 ) + + if (model->forceCentering) + { + origin[0] = suggestedDist * 2.0; + origin[2] = -0.5 * (mins[2] + maxs[2]); + } + else + { + origin[0] = suggestedDist * 0.5 + model->cameraDist * 0.5; + origin[2] = model->zOffset * 0.2 + (-0.5 * (mins[2] + maxs[2])) * 0.8; + } + } + else + { + origin[0] = model->cameraDist; + origin[1] = 0; + origin[2] = model->zOffset; + } + + + refdef.fov_x = (int)((float)refdef.width / 640.0f * 90.0f); + refdef.fov_y = atan2( + refdef.height, + refdef.width / tan( refdef.fov_x / 360 * M_PI ) + ); + refdef.fov_y *= ( 360 / M_PI ); + + refdef.fov_x *= 2; + refdef.fov_y *= 2; + + uiInfo.uiDC.clearScene(); + + refdef.time = uiInfo.uiDC.realTime; + + // add the model + + VectorSet(angles, 0, + ( + (float)(uiInfo.uiDC.realTime % (360 * millisPerDeg)) / (float)(millisPerDeg) + ), 0); + + for (i = 0; i < model->assetCount; i++) + { + memset(&(ent[i]), 0, sizeof(ent[i])); + + if( model->scale != 1.0f ) + { + VectorScale( ent[i].axis[ 0 ], model->scale, ent[i].axis[ 0 ] ); + VectorScale( ent[i].axis[ 1 ], model->scale, ent[i].axis[ 1 ] ); + VectorScale( ent[i].axis[ 2 ], model->scale, ent[i].axis[ 2 ] ); + + ent[i].nonNormalizedAxes = qtrue; + } + else + ent[i].nonNormalizedAxes = qfalse; + + ent[i].hModel = model->asset[i]; + if (model->skin[i]) + ent[i].customSkin = model->skin[i]; + if (model->frame[i] == -1) + { + // Animate + tmpFrame = (uiInfo.uiDC.realTime * model->animationFPS[i]) / 1000; + ent[i].backlerp = 1.0f - (tmpFrame - floor(tmpFrame)); + tmpFrame = (int)tmpFrame % (model->animation[i][1] - model->animation[i][0]) + + model->animation[i][0]; + ent[i].frame = tmpFrame + 1; + ent[i].oldframe = tmpFrame; + } + else + { + // Static + ent[i].frame = model->frame[i]; + ent[i].oldframe = model->frame[i]; + } + if (i && strlen(model->parent[i - 1].parentTagName)) + { + AxisClear(ent[i].axis); + UI_PositionRotatedEntityOnTag(&(ent[i]), &(ent[model->parent[i - 1].parentIndex]), model->asset[model->parent[i - 1].parentIndex], model->parent[i - 1].parentTagName); + } + else + { + VectorCopy(origin, ent[i].origin); + VectorCopy(origin, ent[i].lightingOrigin); + VectorCopy(ent[i].origin, ent[i].oldorigin); + AnglesToAxis(angles, ent[i].axis); + } + + ent[i].renderfx = RF_LIGHTING_ORIGIN | RF_NOSHADOW; + uiInfo.uiDC.addRefEntityToScene(&(ent[i])); + } + uiInfo.uiDC.renderScene(&refdef); +} + static void UI_DrawServerMapPreview(rectDef_t *rect, float scale, vec4_t color) { if (uiInfo.serverStatus.currentServerCinematic >= 0) @@ -2073,7 +2432,7 @@ static void UI_BuildPlayerList(void) static void UI_DrawGLInfo(rectDef_t *rect, float scale, int textalign, int textvalign, vec4_t color, int textStyle, float text_x, float text_y) { - char buffer[4096]; + char buffer[8192]; Com_sprintf(buffer, sizeof(buffer), "VENDOR: %s\nVERSION: %s\n" @@ -2099,11 +2458,20 @@ static void UI_OwnerDraw(float x, float y, float w, float h, float text_x, float switch (ownerDraw) { + case UI_DOWNLOAD_OVERALL: + UI_DrawDownloadOverall(&rect, foreColor, backColor, scale, align, textalign, + textStyle, borderSize ); + break; + case UI_TEAMINFOPANE: UI_DrawInfoPane(&uiInfo.teamList[uiInfo.teamIndex], &rect, text_x, text_y, scale, textalign, textvalign, foreColor, textStyle); break; + case UI_TEAMINFOPANEMODEL: + UI_DrawInfoPaneModel(&uiInfo.teamListModel[uiInfo.teamIndex], &rect); + break; + case UI_VOICECMDINFOPANE: UI_DrawInfoPane(&uiInfo.voiceCmdList[uiInfo.voiceCmdIndex], &rect, text_x, text_y, scale, textalign, textvalign, foreColor, textStyle); @@ -2114,21 +2482,43 @@ static void UI_OwnerDraw(float x, float y, float w, float h, float text_x, float textvalign, foreColor, textStyle); break; + case UI_ACLASSINFOPANEMODEL: + UI_DrawInfoPaneModel(&uiInfo.alienClassListModel[uiInfo.alienClassIndex], &rect); + break; + case UI_AUPGRADEINFOPANE: UI_DrawInfoPane(&uiInfo.alienUpgradeList[uiInfo.alienUpgradeIndex], &rect, text_x, text_y, scale, textalign, textvalign, foreColor, textStyle); break; + case UI_AUPGRADEINFOPANEMODEL: + UI_DrawInfoPaneModel(&uiInfo.alienUpgradeListModel[ + uiInfo.alienUpgradeList[uiInfo.alienUpgradeIndex].v.pclass + ], &rect); + break; + case UI_HITEMINFOPANE: UI_DrawInfoPane(&uiInfo.humanItemList[uiInfo.humanItemIndex], &rect, text_x, text_y, scale, textalign, textvalign, foreColor, textStyle); break; + case UI_HITEMINFOPANEMODEL: + UI_DrawInfoPaneModel(&uiInfo.humanItemListModel[uiInfo.humanItemIndex], &rect); + break; + case UI_HBUYINFOPANE: UI_DrawInfoPane(&uiInfo.humanArmouryBuyList[uiInfo.humanArmouryBuyIndex], &rect, text_x, text_y, scale, textalign, textvalign, foreColor, textStyle); break; + case UI_HBUYINFOPANEMODEL: + UI_DrawInfoPaneModel(&uiInfo.humanArmouryBuyListModel[ + uiInfo.humanArmouryBuyList[uiInfo.humanArmouryBuyIndex].type == INFOTYPE_WEAPON ? + uiInfo.humanArmouryBuyList[uiInfo.humanArmouryBuyIndex].v.weapon : + (uiInfo.humanArmouryBuyList[uiInfo.humanArmouryBuyIndex].v.upgrade + WP_NUM_WEAPONS) + ], &rect); + break; + case UI_HSELLINFOPANE: UI_DrawInfoPane(&uiInfo.humanArmourySellList[uiInfo.humanArmourySellIndex], &rect, text_x, text_y, scale, textalign, textvalign, foreColor, textStyle); @@ -2139,10 +2529,23 @@ static void UI_OwnerDraw(float x, float y, float w, float h, float text_x, float textvalign, foreColor, textStyle); break; + case UI_ABUILDINFOPANEMODEL: + UI_DrawInfoPaneModel(&uiInfo.alienBuildListModel[ + uiInfo.alienBuildList[uiInfo.alienBuildIndex].v.buildable + ], &rect); + break; + case UI_HBUILDINFOPANE: UI_DrawInfoPane(&uiInfo.humanBuildList[uiInfo.humanBuildIndex], &rect, text_x, text_y, scale, textalign, textvalign, foreColor, textStyle); break; + break; + + case UI_HBUILDINFOPANEMODEL: + UI_DrawInfoPaneModel(&uiInfo.humanBuildListModel[ + uiInfo.humanBuildList[uiInfo.humanBuildIndex].v.buildable + ], &rect); + break; case UI_HELPINFOPANE: UI_DrawInfoPane(&uiInfo.helpList[uiInfo.helpIndex], &rect, text_x, text_y, scale, textalign, textvalign, @@ -2352,6 +2755,9 @@ UI_LoadTeams */ static void UI_LoadTeams(void) { + class_t alienPreviewClass = PCL_ALIEN_LEVEL0; + + memset(&(uiInfo.teamListModel), 0, sizeof(uiInfo.teamListModel)); uiInfo.teamCount = 4; uiInfo.teamList[0].text = "Aliens"; @@ -2364,6 +2770,14 @@ static void UI_LoadTeams(void) "of abilities including basic melee attacks, movement-" "crippling poisons and more."; + uiInfo.teamListModel[0].asset[0] = uiInfo.uiDC.registerModel(va("models/players/%s/nonseg.md3", BG_ClassConfig(alienPreviewClass)->modelName)); + uiInfo.teamListModel[0].assetCount = 1; + uiInfo.teamListModel[0].skin[0] = uiInfo.uiDC.registerSkin(va("models/players/%s/nonseg_%s.skin", BG_ClassConfig(alienPreviewClass)->modelName, BG_ClassConfig(alienPreviewClass)->skinName)); + uiInfo.teamListModel[0].scale = BG_ClassConfig(alienPreviewClass)->modelScale; + uiInfo.teamListModel[0].zOffset = BG_ClassConfig(alienPreviewClass)->zOffset; + uiInfo.teamListModel[0].cameraDist = 100; + uiInfo.teamListModel[0].autoAdjust = qtrue; + uiInfo.teamList[1].text = "Humans"; uiInfo.teamList[1].cmd = "cmd team humans\n"; uiInfo.teamList[1].type = INFOTYPE_TEXT; @@ -2374,6 +2788,25 @@ static void UI_LoadTeams(void) "ensures they stay built. A wide range of upgrades and " "weapons are available to the humans, each contributing " "to eradicate the alien threat."; + uiInfo.teamListModel[1].assetCount = 4; + uiInfo.teamListModel[1].asset[0] = uiInfo.uiDC.registerModel("models/players/human_base/lower.md3"); + uiInfo.teamListModel[1].asset[1] = uiInfo.uiDC.registerModel("models/players/human_base/upper.md3"); + uiInfo.teamListModel[1].asset[2] = uiInfo.uiDC.registerModel("models/players/human_base/head.md3"); + uiInfo.teamListModel[1].asset[3] = uiInfo.uiDC.registerModel("models/weapons/rifle/rifle.md3"); + uiInfo.teamListModel[1].skin[0] = uiInfo.uiDC.registerSkin("models/players/human_base/lower_default.skin"); + uiInfo.teamListModel[1].skin[1] = uiInfo.uiDC.registerSkin("models/players/human_base/upper_default.skin"); + uiInfo.teamListModel[1].skin[2] = uiInfo.uiDC.registerSkin("models/players/human_base/head_default.skin"); + uiInfo.teamListModel[1].frame[0] = 157; + uiInfo.teamListModel[1].frame[1] = 151; + uiInfo.teamListModel[1].parent[0].parentTagName = "tag_torso"; + // uiInfo.teamListModel[1].parent[0].parentIndex = 0; + uiInfo.teamListModel[1].parent[1].parentTagName = "tag_head"; + uiInfo.teamListModel[1].parent[1].parentIndex = 1; + uiInfo.teamListModel[1].parent[2].parentTagName = "tag_weapon"; + uiInfo.teamListModel[1].parent[2].parentIndex = 1; + uiInfo.teamListModel[1].cameraDist = 75; + uiInfo.teamListModel[1].zOffset = -16; + uiInfo.teamListModel[1].scale = 1.0; uiInfo.teamList[2].text = "Spectate"; uiInfo.teamList[2].cmd = "cmd team spectate\n"; @@ -2392,14 +2825,22 @@ UI_AddClass =============== */ -static void UI_AddClass(class_t class) +static void UI_AddClass(class_t class, char *prefix) { - uiInfo.alienClassList[uiInfo.alienClassCount].text = BG_ClassConfig(class)->humanName; + uiInfo.alienClassList[uiInfo.alienClassCount].text = String_Alloc(va("%s%s", prefix, BG_ClassConfig(class)->humanName)); uiInfo.alienClassList[uiInfo.alienClassCount].cmd = String_Alloc(va("cmd class %s\n", BG_Class(class)->name)); uiInfo.alienClassList[uiInfo.alienClassCount].type = INFOTYPE_CLASS; uiInfo.alienClassList[uiInfo.alienClassCount].v.pclass = class; + uiInfo.alienClassListModel[uiInfo.alienClassCount].asset[0] = uiInfo.uiDC.registerModel(va("models/players/%s/nonseg.md3", BG_ClassConfig(class)->modelName)); + uiInfo.alienClassListModel[uiInfo.alienClassCount].assetCount = 1; + uiInfo.alienClassListModel[uiInfo.alienClassCount].skin[0] = uiInfo.uiDC.registerSkin(va("models/players/%s/nonseg_%s.skin", BG_ClassConfig(class)->modelName, BG_ClassConfig(class)->skinName)); + uiInfo.alienClassListModel[uiInfo.alienClassCount].scale = BG_ClassConfig(class)->modelScale; + uiInfo.alienClassListModel[uiInfo.alienClassCount].zOffset = BG_ClassConfig(class)->zOffset; + uiInfo.alienClassListModel[uiInfo.alienClassCount].cameraDist = 100; + uiInfo.alienClassListModel[uiInfo.alienClassCount].autoAdjust = qtrue; + uiInfo.alienClassCount++; } @@ -2410,16 +2851,29 @@ UI_LoadAlienClasses */ static void UI_LoadAlienClasses(void) { + alienStates_t state; + stage_t stage; + char *prefix; + + memset(&(uiInfo.alienClassListModel), 0, sizeof(uiInfo.alienClassListModel)); uiInfo.alienClassCount = 0; + UI_alienStates(&state); + stage = UI_GetCurrentAlienStage(); + + if ( ( !state.omHealth || !state.spawns || BG_BuildableAllowedInStage(BA_A_BOOSTER, stage) && !state.boosters ) + && !state.builders ) + prefix = "[!] "; + else + prefix = ""; if (BG_ClassIsAllowed(PCL_ALIEN_LEVEL0)) - UI_AddClass(PCL_ALIEN_LEVEL0); + UI_AddClass(PCL_ALIEN_LEVEL0, ""); if (BG_ClassIsAllowed(PCL_ALIEN_BUILDER0_UPG) && BG_ClassAllowedInStage(PCL_ALIEN_BUILDER0_UPG, UI_GetCurrentAlienStage())) - UI_AddClass(PCL_ALIEN_BUILDER0_UPG); + UI_AddClass(PCL_ALIEN_BUILDER0_UPG, prefix); else if (BG_ClassIsAllowed(PCL_ALIEN_BUILDER0)) - UI_AddClass(PCL_ALIEN_BUILDER0); + UI_AddClass(PCL_ALIEN_BUILDER0, prefix); } /* @@ -2427,13 +2881,20 @@ static void UI_LoadAlienClasses(void) UI_AddItem =============== */ -static void UI_AddItem(weapon_t weapon) +static void UI_AddItem(weapon_t weapon, char *prefix) { - uiInfo.humanItemList[uiInfo.humanItemCount].text = BG_Weapon(weapon)->humanName; + uiInfo.humanItemList[uiInfo.humanItemCount].text = String_Alloc(va("%s%s", prefix, BG_Weapon(weapon)->humanName)); uiInfo.humanItemList[uiInfo.humanItemCount].cmd = String_Alloc(va("cmd class %s\n", BG_Weapon(weapon)->name)); uiInfo.humanItemList[uiInfo.humanItemCount].type = INFOTYPE_WEAPON; uiInfo.humanItemList[uiInfo.humanItemCount].v.weapon = weapon; + uiInfo.humanItemListModel[uiInfo.humanItemCount].asset[0] = uiInfo.uiDC.registerModel(va("models/weapons/%s/%s.md3", BG_Weapon(weapon)->name, BG_Weapon(weapon)->name)); + uiInfo.humanItemListModel[uiInfo.humanItemCount].assetCount = 1; + uiInfo.humanItemListModel[uiInfo.humanItemCount].scale = 1.0; + uiInfo.humanItemListModel[uiInfo.humanItemCount].cameraDist = 0.0; + uiInfo.humanItemListModel[uiInfo.humanItemCount].autoAdjust = qtrue; + uiInfo.humanItemListModel[uiInfo.humanItemCount].forceCentering = qtrue; + uiInfo.humanItemCount++; } @@ -2444,13 +2905,28 @@ UI_LoadHumanItems */ static void UI_LoadHumanItems(void) { + humanStates_t state; + stage_t stage; + char *prefix; + + memset(&(uiInfo.humanItemListModel), 0, sizeof(uiInfo.humanItemListModel)); uiInfo.humanItemCount = 0; + UI_humanStates(&state); + stage = UI_GetCurrentHumanStage(); + + if ( ( !state.rcHealth || !state.spawns || BG_BuildableAllowedInStage(BA_H_ARMOURY, stage) && !state.armourys + || BG_BuildableAllowedInStage(BA_H_MEDISTAT, stage) && !state.medicals + || BG_BuildableAllowedInStage(BA_H_DCC, stage) && !state.computers ) + && !state.builders ) + prefix = "[!] "; + else + prefix = ""; if (BG_WeaponIsAllowed(WP_MACHINEGUN)) - UI_AddItem(WP_MACHINEGUN); + UI_AddItem(WP_MACHINEGUN, ""); if (BG_WeaponIsAllowed(WP_HBUILD)) - UI_AddItem(WP_HBUILD); + UI_AddItem(WP_HBUILD, prefix); } /* @@ -2511,64 +2987,404 @@ static void UI_ParseCarriageList(void) /* =============== -UI_LoadHumanArmouryBuys +UI_GetCurrentCredits =============== */ -static void UI_LoadHumanArmouryBuys(void) +static int UI_GetCurrentCredits(void) { - int i, j = 0; - stage_t stage = UI_GetCurrentHumanStage(); - int slots = 0; + char creditCvar[MAX_TOKEN_CHARS]; - UI_ParseCarriageList(); + trap_Cvar_VariableStringBuffer("ui_credit", creditCvar, sizeof(creditCvar)); + return (atoi(creditCvar)); +} + +/* +=============== +UI_GetConflictingUpgradeBudget + +Calculate a reduction of what will be sold when buying the upgrade +=============== +*/ +static int UI_GetConflictingUpgradeBudget( upgrade_t upgrade ) +{ + int budget = 0; + int i; + int refSlots = BG_Upgrade(upgrade)->slots; + + for (i = UP_NONE + 1; i < UP_NUM_UPGRADES; i++) + if (uiInfo.upgrades & (1 << i) && BG_Upgrade(i)->slots & refSlots) + budget += BG_Upgrade(i)->price; + + return (budget); +} + +/* +=============== +UI_IsAmmoFull +=============== +*/ +static qboolean UI_IsAmmoFull(void) +{ + char ammoFullCvar[MAX_TOKEN_CHARS]; + + trap_Cvar_VariableStringBuffer("ui_ammoFull", ammoFullCvar, sizeof(ammoFullCvar)); + return (atoi(ammoFullCvar)); +} +/* +=============== +UI_CanUpgradeToWeapon +=============== +*/ +static qboolean UI_CanUpgradeToWeapon(weapon_t weapon, int sellingBudget, int credits) +{ + return (BG_Weapon(weapon)->price <= sellingBudget + credits); +} + +/* +=============== +UI_IsBetterWeapon +=============== +*/ +static qboolean UI_IsBetterWeapon(weapon_t weapon, int sellingBudget) +{ + return (BG_Weapon(weapon)->price > sellingBudget); +} + +/* +=============== +UI_CanGotUpgrade +=============== +*/ +static qboolean UI_CanGotUpgrade(upgrade_t upgrade, int credits) +{ + credits += UI_GetConflictingUpgradeBudget( upgrade ); + return (BG_Upgrade(upgrade)->price <= credits); +} + +/* +=============== +UI_IsUpgradeBetter +=============== +*/ +static qboolean UI_IsUpgradeBetter(upgrade_t upgrade, int slots) +{ + return (!(BG_Upgrade(upgrade)->slots & slots) || upgrade == UP_BATTLESUIT); +} + +/* +=============== +UI_LoadHumanArmouryModels +=============== +*/ +static void UI_LoadHumanArmouryModels(void) +{ + int i, j = 0; + + memset(&(uiInfo.humanArmouryBuyListModel), 0, sizeof(uiInfo.humanArmouryBuyListModel)); for (i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++) { - if (uiInfo.weapons & (1 << i)) - slots |= BG_Weapon(i)->slots; + uiInfo.humanArmouryBuyListModel[i].assetCount = 0; + if (BG_Weapon(i)->team == TEAM_HUMANS && BG_Weapon(i)->purchasable) + { + uiInfo.humanArmouryBuyListModel[i].asset[0] = uiInfo.uiDC.registerModel(va("models/weapons/%s/%s.md3", BG_Weapon(i)->name, BG_Weapon(i)->name)); + uiInfo.humanArmouryBuyListModel[i].assetCount = 1; + uiInfo.humanArmouryBuyListModel[i].scale = 1.0; + uiInfo.humanArmouryBuyListModel[i].autoAdjust = qtrue; + uiInfo.humanArmouryBuyListModel[i].forceCentering = qtrue; + } } - for (i = UP_NONE + 1; i < UP_NUM_UPGRADES; i++) { - if (uiInfo.upgrades & (1 << i)) - slots |= BG_Upgrade(i)->slots; + j = WP_NUM_WEAPONS + i; + uiInfo.humanArmouryBuyListModel[j].assetCount = 0; + + if (BG_Upgrade(i)->team == TEAM_HUMANS && BG_Upgrade(i)->purchasable) + { + uiInfo.humanArmouryBuyListModel[j].assetCount = 1; + uiInfo.humanArmouryBuyListModel[j].scale = 1.0; + switch (i) { + case UP_LIGHTARMOUR: + uiInfo.humanArmouryBuyListModel[j].assetCount = 3; + uiInfo.humanArmouryBuyListModel[j].asset[0] = uiInfo.uiDC.registerModel("models/players/human_base/lower.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[1] = uiInfo.uiDC.registerModel("models/players/human_base/upper.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[2] = uiInfo.uiDC.registerModel("models/players/human_base/head.md3"); + uiInfo.humanArmouryBuyListModel[j].skin[0] = uiInfo.uiDC.registerSkin("models/players/human_base/lower_light.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[1] = uiInfo.uiDC.registerSkin("models/players/human_base/upper_light.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[2] = uiInfo.uiDC.registerSkin("models/players/human_base/head_default.skin"); + uiInfo.humanArmouryBuyListModel[j].frame[0] = 157; + uiInfo.humanArmouryBuyListModel[j].frame[1] = 151; + uiInfo.humanArmouryBuyListModel[j].parent[0].parentTagName = "tag_torso"; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentTagName = "tag_head"; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentIndex = 1; + uiInfo.humanArmouryBuyListModel[j].cameraDist = 40; + uiInfo.humanArmouryBuyListModel[j].zOffset = -15; + break; + case UP_HELMET: + uiInfo.humanArmouryBuyListModel[j].assetCount = 3; + uiInfo.humanArmouryBuyListModel[j].asset[0] = uiInfo.uiDC.registerModel("models/players/human_base/lower.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[1] = uiInfo.uiDC.registerModel("models/players/human_base/upper.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[2] = uiInfo.uiDC.registerModel("models/players/human_base/head.md3"); + uiInfo.humanArmouryBuyListModel[j].skin[0] = uiInfo.uiDC.registerSkin("models/players/human_base/lower_default.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[1] = uiInfo.uiDC.registerSkin("models/players/human_base/upper_default.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[2] = uiInfo.uiDC.registerSkin("models/players/human_base/head_light.skin"); + uiInfo.humanArmouryBuyListModel[j].frame[0] = 157; + uiInfo.humanArmouryBuyListModel[j].frame[1] = 151; + uiInfo.humanArmouryBuyListModel[j].parent[0].parentTagName = "tag_torso"; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentTagName = "tag_head"; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentIndex = 1; + uiInfo.humanArmouryBuyListModel[j].cameraDist = 32; + uiInfo.humanArmouryBuyListModel[j].zOffset = -28; + break; + case UP_MEDKIT: + // Should get the red cross of medical station + break; + case UP_BATTPACK: + uiInfo.humanArmouryBuyListModel[j].assetCount = 4; + uiInfo.humanArmouryBuyListModel[j].asset[0] = uiInfo.uiDC.registerModel("models/players/human_base/lower.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[1] = uiInfo.uiDC.registerModel("models/players/human_base/upper.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[2] = uiInfo.uiDC.registerModel("models/players/human_base/head.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[3] = uiInfo.uiDC.registerModel("models/players/human_base/battpack.md3"); + uiInfo.humanArmouryBuyListModel[j].skin[0] = uiInfo.uiDC.registerSkin("models/players/human_base/lower_default.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[1] = uiInfo.uiDC.registerSkin("models/players/human_base/upper_default.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[2] = uiInfo.uiDC.registerSkin("models/players/human_base/head_default.skin"); + uiInfo.humanArmouryBuyListModel[j].frame[0] = 157; + uiInfo.humanArmouryBuyListModel[j].frame[1] = 151; + uiInfo.humanArmouryBuyListModel[j].parent[0].parentTagName = "tag_torso"; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentTagName = "tag_head"; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentIndex = 1; + uiInfo.humanArmouryBuyListModel[j].parent[2].parentTagName = "tag_head"; + uiInfo.humanArmouryBuyListModel[j].parent[2].parentIndex = 1; + uiInfo.humanArmouryBuyListModel[j].cameraDist = 40; + uiInfo.humanArmouryBuyListModel[j].zOffset = -22; + break; + case UP_JETPACK: + uiInfo.humanArmouryBuyListModel[j].assetCount = 4; + uiInfo.humanArmouryBuyListModel[j].asset[0] = uiInfo.uiDC.registerModel("models/players/human_base/lower.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[1] = uiInfo.uiDC.registerModel("models/players/human_base/upper.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[2] = uiInfo.uiDC.registerModel("models/players/human_base/head.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[3] = uiInfo.uiDC.registerModel("models/players/human_base/jetpack.md3"); + uiInfo.humanArmouryBuyListModel[j].skin[0] = uiInfo.uiDC.registerSkin("models/players/human_base/lower_default.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[1] = uiInfo.uiDC.registerSkin("models/players/human_base/upper_default.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[2] = uiInfo.uiDC.registerSkin("models/players/human_base/head_default.skin"); + uiInfo.humanArmouryBuyListModel[j].frame[0] = 157; + uiInfo.humanArmouryBuyListModel[j].frame[1] = 151; + uiInfo.humanArmouryBuyListModel[j].parent[0].parentTagName = "tag_torso"; + uiInfo.humanArmouryBuyListModel[j].parent[0].parentIndex = 0; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentTagName = "tag_head"; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentIndex = 1; + uiInfo.humanArmouryBuyListModel[j].parent[2].parentTagName = "tag_head"; + uiInfo.humanArmouryBuyListModel[j].parent[2].parentIndex = 1; + uiInfo.humanArmouryBuyListModel[j].cameraDist = 40; + uiInfo.humanArmouryBuyListModel[j].zOffset = -22; + break; + case UP_BATTLESUIT: + uiInfo.humanArmouryBuyListModel[j].assetCount = 3; + uiInfo.humanArmouryBuyListModel[j].asset[0] = uiInfo.uiDC.registerModel("models/players/human_bsuit/lower.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[1] = uiInfo.uiDC.registerModel("models/players/human_bsuit/upper.md3"); + uiInfo.humanArmouryBuyListModel[j].asset[2] = uiInfo.uiDC.registerModel("models/players/human_bsuit/head.md3"); + uiInfo.humanArmouryBuyListModel[j].skin[0] = uiInfo.uiDC.registerSkin("models/players/human_bsuit/lower_default.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[1] = uiInfo.uiDC.registerSkin("models/players/human_bsuit/upper_default.skin"); + uiInfo.humanArmouryBuyListModel[j].skin[2] = uiInfo.uiDC.registerSkin("models/players/human_bsuit/head_default.skin"); + uiInfo.humanArmouryBuyListModel[j].frame[0] = 166; + uiInfo.humanArmouryBuyListModel[j].frame[1] = 151; + uiInfo.humanArmouryBuyListModel[j].parent[0].parentTagName = "tag_torso"; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentTagName = "tag_head"; + uiInfo.humanArmouryBuyListModel[j].parent[1].parentIndex = 1; + uiInfo.humanArmouryBuyListModel[j].cameraDist = 100; + uiInfo.humanArmouryBuyListModel[j].zOffset = -25; + break; + case UP_GRENADE: + uiInfo.humanArmouryBuyListModel[j].asset[0] = uiInfo.uiDC.registerModel("models/weapons/grenade/grenade.md3"); + uiInfo.humanArmouryBuyListModel[j].cameraDist = 15; + break; + case UP_AMMO: + uiInfo.humanArmouryBuyListModel[j].asset[0] = uiInfo.uiDC.registerModel("models/weapons/shells/rifle-shell.md3"); + uiInfo.humanArmouryBuyListModel[j].cameraDist = 15; + break; + } + } } +} - uiInfo.humanArmouryBuyCount = 0; +/* +=============== +UI_LoadHumanArmouryBuysWeapon +=============== +*/ +static void UI_LoadHumanArmouryBuysWeapon(int priority, int *j, int stage, int sellingBudget, + int credits, qboolean criticalBuilds) +{ + int i = 0; + qboolean addWeapon; + char *prefix; + + for (i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++) + { + if (BG_Weapon(i)->team == TEAM_HUMANS && BG_Weapon(i)->purchasable && + BG_WeaponIsAllowed(i) && !(uiInfo.weapons & (1 << i))) + { + addWeapon = qfalse; + switch (priority) { + case 0: + if (criticalBuilds == qtrue && i == WP_HBUILD) // If there are critical builds to build + { + addWeapon = qtrue; + prefix = "[!] "; + } + break; + case 1: + if (BG_WeaponAllowedInStage(i, stage) && UI_CanUpgradeToWeapon(i, sellingBudget, credits) + && !(criticalBuilds == qtrue && i == WP_HBUILD)) + { + addWeapon = qtrue; + prefix = UI_IsBetterWeapon(i, sellingBudget) ? "[upgrade] " : ""; + } + break; + case 2: + if (BG_WeaponAllowedInStage(i, stage) && !UI_CanUpgradeToWeapon(i, sellingBudget, credits)) + { + addWeapon = qtrue; + prefix = "^0"; + } + break; + case 3: + if (!BG_WeaponAllowedInStage(i, stage)) + { + addWeapon = qtrue; + prefix = "[locked] ^0"; + } + break; + } - for (i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++) - { - if (BG_Weapon(i)->team == TEAM_HUMANS && BG_Weapon(i)->purchasable && BG_WeaponAllowedInStage(i, stage) && - BG_WeaponIsAllowed(i) && !(BG_Weapon(i)->slots & slots) && !(uiInfo.weapons & (1 << i))) - { - uiInfo.humanArmouryBuyList[j].text = BG_Weapon(i)->humanName; - uiInfo.humanArmouryBuyList[j].cmd = String_Alloc(va("cmd buy %s\n", BG_Weapon(i)->name)); - uiInfo.humanArmouryBuyList[j].type = INFOTYPE_WEAPON; - uiInfo.humanArmouryBuyList[j].v.weapon = i; + if (addWeapon == qtrue) + { + uiInfo.humanArmouryBuyList[*j].text = String_Alloc(va("%s%s", prefix, BG_Weapon(i)->humanName)); + uiInfo.humanArmouryBuyList[*j].cmd = String_Alloc(va("cmd buy %s\n", BG_Weapon(i)->name)); + uiInfo.humanArmouryBuyList[*j].type = INFOTYPE_WEAPON; + uiInfo.humanArmouryBuyList[*j].v.weapon = i; - j++; + (*j)++; + uiInfo.humanArmouryBuyCount++; + } + } + } +} - uiInfo.humanArmouryBuyCount++; - } - } + +/* +=============== +UI_LoadHumanArmouryBuysUpgrade +=============== +*/ +static void UI_LoadHumanArmouryBuysUpgrade(int priority, int *j, int stage, int upgrSlots, int credits) +{ + int i = 0; + qboolean addUpgrade; + char *prefix; for (i = UP_NONE + 1; i < UP_NUM_UPGRADES; i++) { - if (BG_Upgrade(i)->team == TEAM_HUMANS && BG_Upgrade(i)->purchasable && BG_UpgradeAllowedInStage(i, stage) && - BG_UpgradeIsAllowed(i) && !(BG_Upgrade(i)->slots & slots) && !(uiInfo.upgrades & (1 << i))) + if (BG_Upgrade(i)->team == TEAM_HUMANS && BG_Upgrade(i)->purchasable && + BG_UpgradeIsAllowed(i) && !(uiInfo.upgrades & (1 << i))) { - uiInfo.humanArmouryBuyList[j].text = BG_Upgrade(i)->humanName; - uiInfo.humanArmouryBuyList[j].cmd = String_Alloc(va("cmd buy %s\n", BG_Upgrade(i)->name)); - uiInfo.humanArmouryBuyList[j].type = INFOTYPE_UPGRADE; - uiInfo.humanArmouryBuyList[j].v.upgrade = i; + addUpgrade = qfalse; + switch (priority) { + case 0: + if (i == UP_AMMO && !UI_IsAmmoFull()) + { + addUpgrade = qtrue; + prefix = "[!] "; + } + break; + case 1: + if (i != UP_AMMO && BG_UpgradeAllowedInStage(i, stage) && UI_CanGotUpgrade(i, credits)) + { + addUpgrade = qtrue; + prefix = UI_IsUpgradeBetter(i, upgrSlots) ? "[upgrade] " : ""; + } + break; + case 2: + if ((BG_UpgradeAllowedInStage(i, stage) && !UI_CanGotUpgrade(i, credits)) + || (i == UP_AMMO && UI_IsAmmoFull())) + { + addUpgrade = qtrue; + prefix = "^0"; + } + break; + case 3: + if (!BG_UpgradeAllowedInStage(i, stage)) + { + addUpgrade = qtrue; + prefix = "[locked] ^0"; + } + break; + } - j++; + if (addUpgrade == qtrue) + { + uiInfo.humanArmouryBuyList[*j].text = String_Alloc(va("%s%s", prefix, BG_Upgrade(i)->humanName)); + uiInfo.humanArmouryBuyList[*j].cmd = String_Alloc(va("cmd buy %s\n", BG_Upgrade(i)->name)); + uiInfo.humanArmouryBuyList[*j].type = INFOTYPE_UPGRADE; + uiInfo.humanArmouryBuyList[*j].v.upgrade = i; - uiInfo.humanArmouryBuyCount++; + (*j)++; + uiInfo.humanArmouryBuyCount++; + } } } } +/* +=============== +UI_LoadHumanArmouryBuys +=============== +*/ +static void UI_LoadHumanArmouryBuys(void) +{ + int i, j = 0; + humanStates_t state; + qboolean criticalBuilds; + stage_t stage = UI_GetCurrentHumanStage(); + int sellingBudget = 0; + int upgrSlots = 0; + int credits = UI_GetCurrentCredits(); + + UI_humanStates(&state); + UI_ParseCarriageList(); + + for (i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++) + if (uiInfo.weapons & (1 << i)) + sellingBudget += BG_Weapon(i)->price; + + for (i = UP_NONE + 1; i < UP_NUM_UPGRADES; i++) + if (uiInfo.upgrades & (1 << i)) + upgrSlots |= BG_Upgrade(i)->slots; + + criticalBuilds = ( ( !state.rcHealth || !state.spawns || BG_BuildableAllowedInStage(BA_H_ARMOURY, stage) && !state.armourys + || BG_BuildableAllowedInStage(BA_H_MEDISTAT, stage) && !state.medicals + || BG_BuildableAllowedInStage(BA_H_DCC, stage) && !state.computers ) + && !state.builders ); + + uiInfo.humanArmouryBuyCount = 0; + + // Critical (ammo mainly) + UI_LoadHumanArmouryBuysWeapon(0, &j, stage, sellingBudget, credits, criticalBuilds); + UI_LoadHumanArmouryBuysUpgrade(0, &j, stage, upgrSlots, credits); + + // Available to buy + UI_LoadHumanArmouryBuysWeapon(1, &j, stage, sellingBudget, credits, criticalBuilds); + UI_LoadHumanArmouryBuysUpgrade(1, &j, stage, upgrSlots, credits); + + // Unlocked but no enough funds + UI_LoadHumanArmouryBuysWeapon(2, &j, stage, sellingBudget, credits, criticalBuilds); + UI_LoadHumanArmouryBuysUpgrade(2, &j, stage, upgrSlots, credits); + + // Locked + UI_LoadHumanArmouryBuysWeapon(3, &j, stage, sellingBudget, credits, criticalBuilds); + UI_LoadHumanArmouryBuysUpgrade(3, &j, stage, upgrSlots, credits); +} + /* =============== UI_LoadHumanArmourySells @@ -2619,6 +3435,7 @@ UI_ArmouryRefreshCb */ static void UI_ArmouryRefreshCb(void *data) { + static int oldFullAmmo = -1; int oldWeapons = uiInfo.weapons; int oldUpgrades = uiInfo.upgrades; @@ -2630,6 +3447,91 @@ static void UI_ArmouryRefreshCb(void *data) UI_LoadHumanArmourySells(); UI_RemoveCaptureFunc(); } + else if (UI_IsAmmoFull() != oldFullAmmo) + { + UI_LoadHumanArmouryBuys(); + } + oldFullAmmo = UI_IsAmmoFull(); +} + +/* +=============== +UI_LoadAlienUpgradesModels +=============== +*/ +static void UI_LoadAlienUpgradesModels(void) +{ + int i; + + memset(&(uiInfo.alienUpgradeListModel), 0, sizeof(uiInfo.alienUpgradeListModel)); + // No clean way found to determin is class is aliens one + for (i = PCL_NONE + 1; i < PCL_HUMAN; i++) + { + uiInfo.alienUpgradeListModel[i].asset[0] = uiInfo.uiDC.registerModel(va("models/players/%s/nonseg.md3", BG_ClassConfig(i)->modelName)); + uiInfo.alienUpgradeListModel[i].assetCount = 1; + uiInfo.alienUpgradeListModel[i].skin[0] = uiInfo.uiDC.registerSkin(va("models/players/%s/nonseg_%s.skin", BG_ClassConfig(i)->modelName, BG_ClassConfig(i)->skinName)); + uiInfo.alienUpgradeListModel[i].scale = BG_ClassConfig(i)->modelScale; + uiInfo.alienUpgradeListModel[i].zOffset = BG_ClassConfig(i)->zOffset; + uiInfo.alienUpgradeListModel[i].cameraDist = 100; + uiInfo.alienUpgradeListModel[i].autoAdjust = qtrue; + } +} + +/* +=============== +UI_LoadAlienUpgradesClass +=============== +*/ +static void UI_LoadAlienUpgradesClass(int priority, int *j, int class, int credits, int stage) +{ + int i = 0; + qboolean addClass; + char *prefix; + + // No clean way found to determin is class is aliens one + for (i = PCL_NONE + 1; i < PCL_HUMAN; i++) + { + addClass = qfalse; + if (BG_ClassIsAllowed(i)) + { + switch (priority) { + case 1: + if (BG_ClassCanEvolveFromTo(class, i, credits, stage, 0) >= 0) + { + addClass = qtrue; + // Is it stage 1 or is it newer in current stage, or is level0 (cause no adv dretch) + prefix = (!stage || !BG_ClassAllowedInStage( i, 0 ) + || i == PCL_ALIEN_LEVEL0) ? "[upgrade] " : ""; + } + break; + case 2: + if (BG_ClassCanEvolveFromTo(class, i, credits, stage, 0) < 0 && BG_ClassAllowedInStage( i, stage )) + { + addClass = qtrue; + prefix = "^0"; + } + break; + case 3: + if (BG_ClassCanEvolveFromTo(class, i, credits, stage, 0) < 0 && !BG_ClassAllowedInStage( i, stage )) + { + addClass = qtrue; + prefix = "[locked] ^0"; + } + break; + } + } + + if (addClass == qtrue) + { + uiInfo.alienUpgradeList[*j].text = String_Alloc(va("%s%s", prefix, BG_ClassConfig(i)->humanName)); + uiInfo.alienUpgradeList[*j].cmd = String_Alloc(va("cmd class %s\n", BG_Class(i)->name)); + uiInfo.alienUpgradeList[*j].type = INFOTYPE_CLASS; + uiInfo.alienUpgradeList[*j].v.pclass = i; + + (*j)++; + uiInfo.alienUpgradeCount++; + } + } } /* @@ -2640,7 +3542,6 @@ UI_LoadAlienUpgrades static void UI_LoadAlienUpgrades(void) { int i, j = 0; - int class, credits; char ui_currentClass[MAX_STRING_CHARS]; stage_t stage = UI_GetCurrentAlienStage(); @@ -2651,18 +3552,104 @@ static void UI_LoadAlienUpgrades(void) uiInfo.alienUpgradeCount = 0; - for (i = PCL_NONE + 1; i < PCL_NUM_CLASSES; i++) + // UI_LoadAlienUpgradesClass(0, &j, class, credits, stage); + UI_LoadAlienUpgradesClass(1, &j, class, credits, stage); + UI_LoadAlienUpgradesClass(2, &j, class, credits, stage); + UI_LoadAlienUpgradesClass(3, &j, class, credits, stage); +} + +/* +=============== +UI_LoadAlienBuildsModels +=============== +*/ +static void UI_LoadAlienBuildsModels(void) +{ + int i; + fileHandle_t h; + char *modelFile; + + memset(&(uiInfo.alienBuildListModel), 0, sizeof(uiInfo.alienBuildListModel)); + for (i = BA_NONE + 1; i < BA_NUM_BUILDABLES; i++) + { + if (BG_Buildable(i)->team == TEAM_ALIENS && BG_BuildableIsAllowed(i)) + { + uiInfo.alienBuildListModel[i].assetCount = 0; + for( h = 0; h < MAX_BUILDABLE_MODELS; h++ ) + { + modelFile = BG_BuildableConfig( i )->models[ h ]; + if( strlen( modelFile ) > 0 ) + uiInfo.alienBuildListModel[i].asset[ uiInfo.alienBuildListModel[i].assetCount++ ] + = uiInfo.uiDC.registerModel( modelFile ); + } + uiInfo.alienBuildListModel[i].scale = BG_BuildableConfig( i )->modelScale; + uiInfo.alienBuildListModel[i].zOffset = BG_BuildableConfig( i )->zOffset; + uiInfo.alienBuildListModel[i].cameraDist = 100; + uiInfo.alienBuildListModel[i].autoAdjust = qtrue; + } + } +} + +/* +=============== +UI_LoadAlienBuildsItems +=============== +*/ +static void UI_LoadAlienBuildsItems(int priority, int *j, int stage) +{ + int i = 0; + qboolean addItem; + char *prefix; + qboolean critical; + alienStates_t state; + + UI_alienStates(&state); + + for (i = BA_NONE + 1; i < BA_NUM_BUILDABLES; i++) { - if (BG_ClassCanEvolveFromTo(class, i, credits, stage, 0) >= 0) + addItem = qfalse; + critical = qfalse; + if (BG_Buildable(i)->team == TEAM_ALIENS && BG_BuildableIsAllowed(i)) { - uiInfo.alienUpgradeList[j].text = BG_ClassConfig(i)->humanName; - uiInfo.alienUpgradeList[j].cmd = String_Alloc(va("cmd class %s\n", BG_Class(i)->name)); - uiInfo.alienUpgradeList[j].type = INFOTYPE_CLASS; - uiInfo.alienUpgradeList[j].v.pclass = i; + switch (priority) { + case 0: + break; + case 1: + if (BG_BuildableAllowedInStage(i, stage)) + { + addItem = qtrue; + if (i == BA_A_SPAWN && !state.spawns + || i == BA_A_BOOSTER && !state.boosters + || i == BA_A_OVERMIND && !state.omHealth ) + critical = qtrue; + prefix = (char*)(va( + "%s%s%s%s", + ( (!state.omHealth || state.omBuilding) && i != BA_A_OVERMIND ) ? "[overmind] " : "", // Show an overmind if it need it + ( !state.omHealth && i != BA_A_OVERMIND ) ? "^0" : "", // Grey out the item if om is not building too + ( !(BG_Buildable(i)->buildWeapon & uiInfo.weapons) ) ? "[upgrade][advgranger]^0 " : "", // Grey out and ask to upgrade if adv granger is needed + ( critical ) ? "[!] " : "" // Inform if this item is important + )); + } + break; + case 2: + if (!BG_BuildableAllowedInStage(i, stage)) + { + addItem = qtrue; + prefix = "[locked] ^0"; + } + break; + } - j++; + if (addItem == qtrue) + { + uiInfo.alienBuildList[*j].text = String_Alloc(va("%s%s", prefix, BG_Buildable(i)->humanName)); + uiInfo.alienBuildList[*j].cmd = String_Alloc(va("cmd build %s\n", BG_Buildable(i)->name)); + uiInfo.alienBuildList[*j].type = INFOTYPE_BUILDABLE; + uiInfo.alienBuildList[*j].v.buildable = i; - uiInfo.alienUpgradeCount++; + (*j)++; + uiInfo.alienBuildCount++; + } } } } @@ -2682,19 +3669,104 @@ static void UI_LoadAlienBuilds(void) uiInfo.alienBuildCount = 0; + // UI_LoadAlienBuildsItems(0, &j, stage); + UI_LoadAlienBuildsItems(1, &j, stage); + UI_LoadAlienBuildsItems(2, &j, stage); +} + +/* +=============== +UI_LoadHumansBuildsModels +=============== +*/ +static void UI_LoadHumansBuildsModels(void) +{ + int i; + fileHandle_t h; + char *modelFile; + + memset(&(uiInfo.humanBuildListModel), 0, sizeof(uiInfo.humanBuildListModel)); + for (i = BA_NONE + 1; i < BA_NUM_BUILDABLES; i++) + { + if (BG_Buildable(i)->team == TEAM_HUMANS && BG_BuildableIsAllowed(i)) + { + for( h = 0; h < MAX_BUILDABLE_MODELS; h++ ) + { + modelFile = BG_BuildableConfig( i )->models[ h ]; + if( strlen( modelFile ) > 0 ) + uiInfo.humanBuildListModel[i].asset[ uiInfo.humanBuildListModel[i].assetCount++ ] + = uiInfo.uiDC.registerModel( modelFile ); + } + uiInfo.humanBuildListModel[i].scale = BG_BuildableConfig( i )->modelScale; + uiInfo.humanBuildListModel[i].zOffset = BG_BuildableConfig( i )->zOffset; + uiInfo.humanBuildListModel[i].cameraDist = 160; + uiInfo.humanBuildListModel[i].autoAdjust = qtrue; + } + } +} + +/* +=============== +UI_LoadHumanBuildsItems +=============== +*/ +static void UI_LoadHumanBuildsItems(int priority, int *j, int stage) +{ + int i = 0; + qboolean addItem; + char *prefix; + qboolean critical; + humanStates_t state; + + UI_humanStates(&state); + for (i = BA_NONE + 1; i < BA_NUM_BUILDABLES; i++) { - if (BG_Buildable(i)->team == TEAM_ALIENS && BG_Buildable(i)->buildWeapon & uiInfo.weapons && - BG_BuildableAllowedInStage(i, stage) && BG_BuildableIsAllowed(i)) + addItem = qfalse; + critical = qfalse; + if (BG_Buildable(i)->team == TEAM_HUMANS && BG_BuildableIsAllowed(i)) { - uiInfo.alienBuildList[j].text = BG_Buildable(i)->humanName; - uiInfo.alienBuildList[j].cmd = String_Alloc(va("cmd build %s\n", BG_Buildable(i)->name)); - uiInfo.alienBuildList[j].type = INFOTYPE_BUILDABLE; - uiInfo.alienBuildList[j].v.buildable = i; + switch (priority) { + case 0: + break; + case 1: + if (BG_BuildableAllowedInStage(i, stage)) + { + addItem = qtrue; + if (i == BA_H_SPAWN && !state.spawns + || i == BA_H_ARMOURY && !state.armourys + || i == BA_H_MEDISTAT && !state.medicals + || i == BA_H_DCC && !state.computers + || i == BA_H_REACTOR && !state.rcHealth ) + critical = qtrue; + prefix = (char*)(va( + "%s%s%s%s", + ( (!state.rcHealth || state.rcBuilding) && i != BA_H_REACTOR ) ? "[reactor] " : "", // Show a reactor if it need it + ( !state.rcHealth && i != BA_H_REACTOR ) ? "^0" : "", // Grey out the item if om is not building too + ( !(BG_Buildable(i)->buildWeapon & uiInfo.weapons) ) ? "[upgrade][ckit]^0 " : "", // Grey out and ask to upgrade if adv ckit is needed. Now Ckit = AdvCkit (keep for compatibility) + ( critical ) ? "[!] " : "" // Inform if this item is important + )); + } + break; + case 2: + if (!BG_BuildableAllowedInStage(i, stage)) + { + addItem = qtrue; + prefix = "[locked] ^0"; + } + break; + } - j++; + if (addItem == qtrue) + { + uiInfo.humanBuildList[*j].text = String_Alloc(va("%s%s", prefix, BG_Buildable(i)->humanName)); + uiInfo.humanBuildList[*j].cmd = String_Alloc(va("cmd build %s\n", BG_Buildable(i)->name)); + uiInfo.humanBuildList[*j].type = INFOTYPE_BUILDABLE; + uiInfo.humanBuildList[*j].v.buildable = i; - uiInfo.alienBuildCount++; + (*j)++; + uiInfo.humanBuildCount++; + } } } } @@ -2707,6 +3779,8 @@ UI_LoadHumanBuilds static void UI_LoadHumanBuilds(void) { int i, j = 0; + fileHandle_t h; + char *modelFile; stage_t stage; UI_ParseCarriageList(); @@ -2714,21 +3788,10 @@ static void UI_LoadHumanBuilds(void) uiInfo.humanBuildCount = 0; - for (i = BA_NONE + 1; i < BA_NUM_BUILDABLES; i++) - { - if (BG_Buildable(i)->team == TEAM_HUMANS && BG_Buildable(i)->buildWeapon & uiInfo.weapons && - BG_BuildableAllowedInStage(i, stage) && BG_BuildableIsAllowed(i)) - { - uiInfo.humanBuildList[j].text = BG_Buildable(i)->humanName; - uiInfo.humanBuildList[j].cmd = String_Alloc(va("cmd build %s\n", BG_Buildable(i)->name)); - uiInfo.humanBuildList[j].type = INFOTYPE_BUILDABLE; - uiInfo.humanBuildList[j].v.buildable = i; - - j++; - uiInfo.humanBuildCount++; - } - } + // UI_LoadHumanBuildsItems(0, &j, stage); + UI_LoadHumanBuildsItems(1, &j, stage); + UI_LoadHumanBuildsItems(2, &j, stage); } /* @@ -3151,7 +4214,10 @@ static void UI_RunMenuScript(char **args) trap_Cmd_ExecuteText(EXEC_APPEND, cmd); } else if (Q_stricmp(name, "LoadHumanArmouryBuys") == 0) + { + UI_LoadHumanArmouryModels(); UI_LoadHumanArmouryBuys(); + } else if (Q_stricmp(name, "BuyFromArmoury") == 0) { if ((cmd = uiInfo.humanArmouryBuyList[uiInfo.humanArmouryBuyIndex].cmd)) @@ -3170,6 +4236,7 @@ static void UI_RunMenuScript(char **args) } else if (Q_stricmp(name, "LoadAlienUpgrades") == 0) { + UI_LoadAlienUpgradesModels(); UI_LoadAlienUpgrades(); } else if (Q_stricmp(name, "UpgradeToNewClass") == 0) @@ -3178,14 +4245,20 @@ static void UI_RunMenuScript(char **args) trap_Cmd_ExecuteText(EXEC_APPEND, cmd); } else if (Q_stricmp(name, "LoadAlienBuilds") == 0) - UI_LoadAlienBuilds(); + { + UI_LoadAlienBuildsModels(); + UI_LoadAlienBuilds(); + } else if (Q_stricmp(name, "BuildAlienBuildable") == 0) { if ((cmd = uiInfo.alienBuildList[uiInfo.alienBuildIndex].cmd)) trap_Cmd_ExecuteText(EXEC_APPEND, cmd); } else if (Q_stricmp(name, "LoadHumanBuilds") == 0) - UI_LoadHumanBuilds(); + { + UI_LoadHumansBuildsModels(); + UI_LoadHumanBuilds(); + } else if (Q_stricmp(name, "BuildHumanBuildable") == 0) { if ((cmd = uiInfo.humanBuildList[uiInfo.humanBuildIndex].cmd)) @@ -3734,6 +4807,7 @@ static const char *UI_FeederItemText(int feederID, int index, int column, qhandl static int lastColumn = -1; static int lastTime = 0; int ping; + char *cleanedcpy; if (lastColumn != column || lastTime > uiInfo.uiDC.realTime + 5000) { @@ -3756,15 +4830,19 @@ static const char *UI_FeederItemText(int feederID, int index, int column, qhandl { static char hostname[1024]; + // Strip leading whitespace + cleanedcpy = cleaned; + while (*cleanedcpy != '\0' && isspace(*cleanedcpy)) + cleanedcpy++; + if (ui_netSource.integer == AS_LOCAL) { - Com_sprintf(hostname, sizeof(hostname), "%s [%s]", cleaned, + Com_sprintf(hostname, sizeof(hostname), "^7%s [%s]", cleaned, netnames[atoi(Info_ValueForKey(info, "nettype"))]); return hostname; } else { - char *text; char *label; label = Info_ValueForKey(info, "label"); @@ -3773,20 +4851,14 @@ static const char *UI_FeederItemText(int feederID, int index, int column, qhandl // First char of the label response is a sorting tag. Skip it. label += 1; - Com_sprintf(hostname, sizeof(hostname), "%s %s", label, cleaned); + Com_sprintf(hostname, sizeof(hostname), "^7%s %s", label, cleaned); } else { - Com_sprintf(hostname, sizeof(hostname), "%s", cleaned); + Com_sprintf(hostname, sizeof(hostname), "^7%s", cleaned); } - // Strip leading whitespace - text = hostname; - - while (*text != '\0' && *text == ' ') - text++; - - return text; + return hostname; } } @@ -3911,7 +4983,23 @@ static const char *UI_FeederItemText(int feederID, int index, int column, qhandl else if (feederID == FEEDER_TREMHUMANARMOURYSELL) { if (index >= 0 && index < uiInfo.humanArmourySellCount) - return uiInfo.humanArmourySellList[index].text; + { + // If conflicting with selected + if ( + ( + uiInfo.humanArmouryBuyList[uiInfo.humanArmouryBuyIndex].type == INFOTYPE_WEAPON ? + BG_Weapon(uiInfo.humanArmouryBuyList[uiInfo.humanArmouryBuyIndex].v.weapon)->slots : + BG_Upgrade(uiInfo.humanArmouryBuyList[uiInfo.humanArmouryBuyIndex].v.upgrade)->slots + ) & ( + uiInfo.humanArmourySellList[index].type == INFOTYPE_WEAPON ? + BG_Weapon(uiInfo.humanArmourySellList[index].v.weapon)->slots : + BG_Upgrade(uiInfo.humanArmourySellList[index].v.upgrade)->slots + ) + ) + return (va("[!] %s", uiInfo.humanArmourySellList[index].text)); + else + return uiInfo.humanArmourySellList[index].text; + } } else if (feederID == FEEDER_TREMALIENUPGRADE) { @@ -3938,7 +5026,10 @@ static const char *UI_FeederItemText(int feederID, int index, int column, qhandl w = uiInfo.resolutions[index].w; h = uiInfo.resolutions[index].h; - Com_sprintf(resolution, sizeof(resolution), "%dx%d (%s)", w, h, UI_DisplayAspectString(w, h)); + if (w == 0 && h == 0) + Com_sprintf(resolution, sizeof(resolution), "Automatic"); + else + Com_sprintf(resolution, sizeof(resolution), "%dx%d (%s)", w, h, UI_DisplayAspectString(w, h)); return resolution; } @@ -4203,6 +5294,7 @@ UI_Init void UI_Init(qboolean inGameLoad) { BG_InitClassConfigs(); + BG_InitBuildableConfigs(); BG_InitAllowedGameElements(); uiInfo.inGameLoad = inGameLoad; @@ -4229,9 +5321,13 @@ void UI_Init(qboolean inGameLoad) uiInfo.uiDC.drawHandlePic = &UI_DrawHandlePic; uiInfo.uiDC.drawStretchPic = &trap_R_DrawStretchPic; uiInfo.uiDC.registerModel = &trap_R_RegisterModel; + uiInfo.uiDC.registerSkin = &trap_R_RegisterSkin; uiInfo.uiDC.modelBounds = &trap_R_ModelBounds; + uiInfo.uiDC.lerpTag = &trap_CM_LerpTag; uiInfo.uiDC.fillRect = &UI_FillRect; + uiInfo.uiDC.fillRoundedRect = &UI_FillRoundedRect; uiInfo.uiDC.drawRect = &UI_DrawRect; + uiInfo.uiDC.drawRoundedRect = &UI_DrawRoundedRect; uiInfo.uiDC.drawSides = &UI_DrawSides; uiInfo.uiDC.drawTopBottom = &UI_DrawTopBottom; uiInfo.uiDC.clearScene = &trap_R_ClearScene; @@ -4243,6 +5339,7 @@ void UI_Init(qboolean inGameLoad) uiInfo.uiDC.ownerDrawVisible = &UI_OwnerDrawVisible; uiInfo.uiDC.runScript = &UI_RunMenuScript; uiInfo.uiDC.setCVar = trap_Cvar_Set; + uiInfo.uiDC.resetCVar = trap_Cvar_Reset; uiInfo.uiDC.getCVarString = trap_Cvar_VariableStringBuffer; uiInfo.uiDC.getCVarValue = trap_Cvar_VariableValue; uiInfo.uiDC.setOverstrikeMode = &trap_Key_SetOverstrikeMode; @@ -4553,7 +5650,7 @@ static void UI_DisplayDownloadInfo(const char *downloadName, float centerPoint, static char etaText[] = "Estimated time left:"; static char xferText[] = "Transfer rate:"; - int downloadSize, downloadCount, downloadTime; + int downloadSize, downloadCount, downloadTime, downloadTotal, downloadDone; char dlSizeBuf[64], totalSizeBuf[64], xferRateBuf[64], dlTimeBuf[64]; int xferRate; int leftWidth; @@ -4562,6 +5659,8 @@ static void UI_DisplayDownloadInfo(const char *downloadName, float centerPoint, downloadSize = trap_Cvar_VariableValue("cl_downloadSize"); downloadCount = trap_Cvar_VariableValue("cl_downloadCount"); downloadTime = trap_Cvar_VariableValue("cl_downloadTime"); + downloadTotal = trap_Cvar_VariableValue("cl_downloadTotal"); + downloadDone = trap_Cvar_VariableValue("cl_downloadDone"); leftWidth = 320; @@ -4571,7 +5670,7 @@ static void UI_DisplayDownloadInfo(const char *downloadName, float centerPoint, Text_PaintCenter(centerPoint, yStart + 248, scale, colorWhite, xferText, 0); if (downloadSize > 0) - s = va("%s (%d%%)", downloadName, (int)((float)downloadCount * 100.0f / downloadSize)); + s = va("%s (%d%%, %d/%d)", downloadName, (int)((float)downloadCount * 100.0f / downloadSize), downloadDone + 1, downloadTotal); else s = downloadName; diff --git a/src/ui/ui_shared.c b/src/ui/ui_shared.c index 8b6225e0b..9a964af70 100644 --- a/src/ui/ui_shared.c +++ b/src/ui/ui_shared.c @@ -1000,8 +1000,8 @@ static void Window_Paint(Window *w, float fadeAmount, float fadeClamp, float fad { fillRect.x += w->borderSize; fillRect.y += w->borderSize; - fillRect.w -= w->borderSize + 1; - fillRect.h -= w->borderSize + 1; + fillRect.w -= w->borderSize * 2; + fillRect.h -= w->borderSize * 2; } if (w->style == WINDOW_STYLE_FILLED) @@ -1015,6 +1015,8 @@ static void Window_Paint(Window *w, float fadeAmount, float fadeClamp, float fad DC->drawHandlePic(fillRect.x, fillRect.y, fillRect.w, fillRect.h, w->background); DC->setColor(NULL); } + else if( w->border == WINDOW_BORDER_ROUNDED ) + DC->fillRoundedRect( fillRect.x, fillRect.y, fillRect.w, fillRect.h, w->borderSize, w->borderStyle, w->backColor ); else DC->fillRect(fillRect.x, fillRect.y, fillRect.w, fillRect.h, w->backColor); } @@ -1082,6 +1084,11 @@ static void Border_Paint(Window *w) r.y = w->rect.y + w->rect.h - 1; GradientBar_Paint(&r, w->borderColor); } + else if( w->border == WINDOW_BORDER_ROUNDED ) + { + // rounded, style depending of borderStyle + DC->drawRoundedRect( w->rect.x, w->rect.y, w->rect.w, w->rect.h, w->borderSize, w->borderStyle, w->borderColor ); + } } void Item_SetScreenCoords(itemDef_t *item, float x, float y) @@ -2170,6 +2177,39 @@ static void UI_Text_Paint_Generic(float x, float y, float scale, float gapAdjust float yadj = useScale * glyph->top; DC->setColor(NULL); + + if (style == ITEM_TEXTSTYLE_SHADOWED || style == ITEM_TEXTSTYLE_SHADOWEDMORE) + { + int ofs; + + if (style == ITEM_TEXTSTYLE_SHADOWED) + ofs = 1; + else + ofs = 2; + + colorBlack[3] = newColor[3] * 4 / 8 / 6; + DC->setColor(colorBlack); + DC->drawHandlePic(x + ofs - 0.2f, y + ofs - 0.2f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + DC->drawHandlePic(x + ofs + 0.2f, y + ofs - 0.2f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + DC->drawHandlePic(x + ofs - 0.2f, y + ofs + 0.2f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + DC->drawHandlePic(x + ofs + 0.2f, y + ofs + 0.2f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + colorBlack[3] = newColor[3] * 3 / 8 / 6; + DC->setColor(colorBlack); + DC->drawHandlePic(x + ofs - 0.4f, y + ofs - 0.4f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + DC->drawHandlePic(x + ofs + 0.4f, y + ofs - 0.4f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + DC->drawHandlePic(x + ofs - 0.4f, y + ofs + 0.4f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + DC->drawHandlePic(x + ofs + 0.4f, y + ofs + 0.4f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + colorBlack[3] = newColor[3] * 1 / 8 / 6; + DC->setColor(colorBlack); + DC->drawHandlePic(x + ofs - 0.6f, y + ofs - 0.6f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + DC->drawHandlePic(x + ofs + 0.6f, y + ofs - 0.6f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + DC->drawHandlePic(x + ofs - 0.6f, y + ofs + 0.6f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + DC->drawHandlePic(x + ofs + 0.6f, y + ofs + 0.6f - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); + + DC->setColor(NULL); + colorBlack[3] = 1.0f; + } + DC->drawHandlePic(x, y - yadj, (emoticonW * emoticonWidth), emoticonH, emoticonHandle); DC->setColor(newColor); x += (emoticonW * emoticonWidth) + gapAdjust; @@ -2188,9 +2228,26 @@ static void UI_Text_Paint_Generic(float x, float y, float scale, float gapAdjust ofs = 1; else ofs = 2; - colorBlack[3] = newColor[3]; + + colorBlack[3] = newColor[3] * 4 / 8 / 6; + DC->setColor(colorBlack); + UI_Text_PaintChar(x + ofs - 0.2f, y + ofs - 0.2f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs + 0.2f, y + ofs - 0.2f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs - 0.2f, y + ofs + 0.2f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs + 0.2f, y + ofs + 0.2f, useScale, glyph, 0.0f); + colorBlack[3] = newColor[3] * 3 / 8 / 6; DC->setColor(colorBlack); - UI_Text_PaintChar(x + ofs, y + ofs, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs - 0.4f, y + ofs - 0.4f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs + 0.4f, y + ofs - 0.4f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs - 0.4f, y + ofs + 0.4f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs + 0.4f, y + ofs + 0.4f, useScale, glyph, 0.0f); + colorBlack[3] = newColor[3] * 1 / 8 / 6; + DC->setColor(colorBlack); + UI_Text_PaintChar(x + ofs - 0.6f, y + ofs - 0.6f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs + 0.6f, y + ofs - 0.6f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs - 0.6f, y + ofs + 0.6f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + ofs + 0.6f, y + ofs + 0.6f, useScale, glyph, 0.0f); + DC->setColor(newColor); colorBlack[3] = 1.0f; } @@ -2199,13 +2256,30 @@ static void UI_Text_Paint_Generic(float x, float y, float scale, float gapAdjust vec4_t glow; memcpy(&glow[0], &newColor[0], sizeof(vec4_t)); - glow[3] *= 0.2f; DC->setColor(glow); - UI_Text_PaintChar(x, y, useScale, glyph, 6.0f); - UI_Text_PaintChar(x, y, useScale, glyph, 4.0f); - DC->setColor(newColor); - UI_Text_PaintChar(x, y, useScale, glyph, 2.0f); + UI_Text_PaintChar(x - 0.1f, y - 0.1f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + 0.1f, y - 0.1f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x - 0.1f, y + 0.1f, useScale, glyph, 0.0f); + UI_Text_PaintChar(x + 0.1f, y + 0.1f, useScale, glyph, 0.0f); + glow[3] = newColor[3] * 4 / 8 / 4; + DC->setColor(glow); + UI_Text_PaintChar(x - 0.2f, y - 0.2f, useScale, glyph, 0.4f); + UI_Text_PaintChar(x + 0.2f, y - 0.2f, useScale, glyph, 0.4f); + UI_Text_PaintChar(x - 0.2f, y + 0.2f, useScale, glyph, 0.4f); + UI_Text_PaintChar(x + 0.2f, y + 0.2f, useScale, glyph, 0.4f); + glow[3] = newColor[3] * 3 / 8 / 4; + DC->setColor(glow); + UI_Text_PaintChar(x - 0.4f, y - 0.4f, useScale, glyph, 0.4f); + UI_Text_PaintChar(x + 0.4f, y - 0.4f, useScale, glyph, 0.4f); + UI_Text_PaintChar(x - 0.4f, y + 0.4f, useScale, glyph, 0.4f); + UI_Text_PaintChar(x + 0.4f, y + 0.4f, useScale, glyph, 0.4f); + glow[3] = newColor[3] * 1 / 8 / 4; + DC->setColor(glow); + UI_Text_PaintChar(x - 0.8f, y - 0.8f, useScale, glyph, 0.8f); + UI_Text_PaintChar(x + 0.8f, y - 0.8f, useScale, glyph, 0.8f); + UI_Text_PaintChar(x - 0.8f, y + 0.8f, useScale, glyph, 0.8f); + UI_Text_PaintChar(x + 0.8f, y + 0.8f, useScale, glyph, 0.8f); DC->setColor(colorWhite); } @@ -2947,6 +3021,10 @@ qboolean Item_YesNo_HandleKey(itemDef_t *item, int key) DC->setCVar(item->cvar, va("%i", !DC->getCVarValue(item->cvar))); return qtrue; } + else if (key == K_BACKSPACE || key == K_DEL) + { + DC->resetCVar(item->cvar); + } } return qfalse; @@ -3080,6 +3158,10 @@ qboolean Item_Multi_HandleKey(itemDef_t *item, int key) current = (Item_Multi_FindCvarByValue(item) + max - 1) % max; changed = qtrue; } + else if (key == K_BACKSPACE || key == K_DEL) + { + DC->resetCVar(item->cvar); + } if (changed) { @@ -3492,28 +3574,35 @@ qboolean Item_Slider_HandleKey(itemDef_t *item, int key, qboolean down) if (item->window.flags & WINDOW_HASFOCUS && item->cvar && Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory)) { - if (item->typeData.edit && (key == K_ENTER || key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3)) + if (item->typeData.edit) { - rectDef_t testRect; - width = SLIDER_WIDTH; + if (key == K_ENTER || key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) + { + rectDef_t testRect; + width = SLIDER_WIDTH; - if (item->text) - x = item->textRect.x + item->textRect.w + ITEM_VALUE_OFFSET; - else - x = item->window.rect.x; + if (item->text) + x = item->textRect.x + item->textRect.w + ITEM_VALUE_OFFSET; + else + x = item->window.rect.x; - testRect = item->window.rect; - value = (float)SLIDER_THUMB_WIDTH / 2; - testRect.x = x - value; - testRect.w = SLIDER_WIDTH + value; + testRect = item->window.rect; + value = (float)SLIDER_THUMB_WIDTH / 2; + testRect.x = x - value; + testRect.w = SLIDER_WIDTH + value; - if (Rect_ContainsPoint(&testRect, DC->cursorx, DC->cursory)) + if (Rect_ContainsPoint(&testRect, DC->cursorx, DC->cursory)) + { + value = (float)(DC->cursorx - x) / width; + value *= (item->typeData.edit->maxVal - item->typeData.edit->minVal); + value += item->typeData.edit->minVal; + DC->setCVar(item->cvar, va("%f", value)); + return qtrue; + } + } + else if (key == K_BACKSPACE || key == K_DEL) { - value = (float)(DC->cursorx - x) / width; - value *= (item->typeData.edit->maxVal - item->typeData.edit->minVal); - value += item->typeData.edit->minVal; - DC->setCVar(item->cvar, va("%f", value)); - return qtrue; + DC->resetCVar(item->cvar); } } } @@ -4790,11 +4879,14 @@ static bind_t g_bindings[] = {{"+scores", K_TAB, -1, -1, -1, -1}, {"+button2", K {"reload", 'r', -1, -1, -1, -1}, // reload {"buy ammo", 'b', -1, -1, -1, -1}, // buy ammo {"itemact medkit", 'm', -1, -1, -1, -1}, // use medkit + {"rotatebuildleft", ',', -1, -1, -1, -1}, // Rotate ghost build to left + {"rotatebuildright", '.', -1, -1, -1, -1}, // Rotate ghost build to right + {"rotatebuild", 'l', -1, -1, -1, -1}, // Reset ghost build rotation {"+button7", 'q', -1, -1, -1, -1}, // buildable use {"deconstruct", 'e', -1, -1, -1, -1}, // buildable destroy {"weapprev", '[', -1, -1, -1, -1}, {"weapnext", ']', -1, -1, -1, -1}, {"+button3", K_MOUSE3, -1, -1, -1, -1}, {"+button4", K_MOUSE4, -1, -1, -1, -1}, {"vote yes", K_F1, -1, -1, -1, -1}, {"vote no", K_F2, -1, -1, -1, -1}, - {"teamvote yes", K_F3, -1, -1, -1, -1}, {"teamvote no", K_F4, -1, -1, -1, -1}, + {"teamvote yes", K_F3, -1, -1, -1, -1}, {"teamvote no", K_F4, -1, -1, -1, -1}, {"ready", K_F5, -1, -1, -1, -1}, {"scoresUp", K_KP_PGUP, -1, -1, -1, -1}, {"scoresDown", K_KP_PGDN, -1, -1, -1, -1}, {"screenshotJPEG", -1, -1, -1, -1, -1}, {"messagemode", -1, -1, -1, -1, -1}, {"messagemode2", -1, -1, -1, -1, -1}}; @@ -5229,6 +5321,8 @@ void Item_ListBoxRow_Paint(itemDef_t *item, int row, int renderPos, qboolean hig listBoxDef_t *listPtr = item->typeData.list; menuDef_t *menu = (menuDef_t *)item->parent; float one, two; + rectDef_t itemRect; + vec4_t hightlightColor; one = 1.0f * DC->aspectScale; two = 2.0f * DC->aspectScale; @@ -5237,8 +5331,15 @@ void Item_ListBoxRow_Paint(itemDef_t *item, int row, int renderPos, qboolean hig y = SCROLLBAR_Y(item) + (listPtr->elementHeight * renderPos); w = item->window.rect.w - (two * item->window.borderSize); + itemRect.x = x; + itemRect.y = y; + itemRect.w = w; + itemRect.h = listPtr->elementHeight; + + highlight = highlight && row == item->cursorPos; + if (scrollbar) - w -= SCROLLBAR_ARROW_WIDTH; + w -= SCROLLBAR_ARROW_WIDTH + 1.0f; if (listPtr->elementStyle == LISTBOX_IMAGE) { @@ -5249,7 +5350,7 @@ void Item_ListBoxRow_Paint(itemDef_t *item, int row, int renderPos, qboolean hig if (image) DC->drawHandlePic(x + one, y + 1.0f, listPtr->elementWidth - two, listPtr->elementHeight - 2.0f, image); - if (highlight && row == item->cursorPos) + if (highlight) { DC->drawRect( x, y, listPtr->elementWidth, listPtr->elementHeight, item->window.borderSize, item->window.borderColor); @@ -5262,6 +5363,17 @@ void Item_ListBoxRow_Paint(itemDef_t *item, int row, int renderPos, qboolean hig const float m = UI_Text_EmHeight(item->textscale); char text[MAX_STRING_CHARS]; qhandle_t optionalImage; + Vector4Copy(item->window.outlineColor, hightlightColor); + + if (highlight || Rect_ContainsPoint(&itemRect, DC->cursorx, DC->cursory)) + { + if (!highlight) + hightlightColor[3] *= 0.55f; + if( item->window.border == WINDOW_BORDER_ROUNDED ) + DC->fillRoundedRect(x, y, w, listPtr->elementHeight, item->window.borderSize, item->window.borderStyle, hightlightColor); + else + DC->fillRect(x, y, w, listPtr->elementHeight, hightlightColor); + } if (listPtr->numColumns > 0) { @@ -5317,7 +5429,7 @@ void Item_ListBoxRow_Paint(itemDef_t *item, int row, int renderPos, qboolean hig } UI_Text_Paint(x + columnPos + alignOffset, y + m + ((listPtr->elementHeight - m) / 2.0f), - item->textscale, item->window.foreColor, text, 0, 0, item->textStyle); + item->textscale, (highlight ? menu->focusColor : item->window.foreColor), text, 0, 0, item->textStyle); } UI_ClearClipRegion(); @@ -5341,14 +5453,11 @@ void Item_ListBoxRow_Paint(itemDef_t *item, int row, int renderPos, qboolean hig else if (text[0]) { UI_Text_Paint(x + offset, y + m + ((listPtr->elementHeight - m) / 2.0f), item->textscale, - item->window.foreColor, text, 0, 0, item->textStyle); + (highlight ? menu->focusColor : item->window.foreColor), text, 0, 0, item->textStyle); } UI_ClearClipRegion(); } - - if (highlight && row == item->cursorPos) - DC->fillRect(x, y, w, listPtr->elementHeight, item->window.outlineColor); } } @@ -5397,7 +5506,7 @@ void Item_ComboBox_Paint(itemDef_t *item) h = item->window.rect.h - 2.0f; // Down arrow - DC->drawHandlePic(x, y, SCROLLBAR_ARROW_WIDTH, h, DC->Assets.scrollBarArrowDown); + DC->drawHandlePic(x, y, SCROLLBAR_ARROW_WIDTH, h, DC->Assets.showMoreArrow); Item_ListBoxRow_Paint(item, item->cursorPos, 0, qfalse, qtrue); if (g_comboBoxItem != NULL) { @@ -6651,6 +6760,22 @@ qboolean ItemParse_bordercolor(itemDef_t *item, int handle) return qtrue; } +qboolean ItemParse_borderstyle(itemDef_t *item, int handle) +{ + int i; + float f; + + for (i = 0; i < 4; i++) + { + if (!PC_Float_Parse(handle, &f)) + return qfalse; + + item->window.borderStyle[i] = f; + } + + return qtrue; +} + qboolean ItemParse_outlinecolor(itemDef_t *item, int handle) { if (!PC_Color_Parse(handle, &item->window.outlineColor)) @@ -7010,7 +7135,8 @@ keywordHash_t itemParseKeywords[] = {{"name", ItemParse_name, TYPE_ANY, NULL}, { {"textalignx", ItemParse_textalignx, TYPE_ANY, NULL}, {"textaligny", ItemParse_textaligny, TYPE_ANY, NULL}, {"textscale", ItemParse_textscale, TYPE_ANY, NULL}, {"textstyle", ItemParse_textstyle, TYPE_ANY, NULL}, {"backcolor", ItemParse_backcolor, TYPE_ANY, NULL}, {"forecolor", ItemParse_forecolor, TYPE_ANY, NULL}, - {"bordercolor", ItemParse_bordercolor, TYPE_ANY, NULL}, {"outlinecolor", ItemParse_outlinecolor, TYPE_ANY, NULL}, + {"bordercolor", ItemParse_bordercolor, TYPE_ANY, NULL}, {"borderstyle", ItemParse_borderstyle, TYPE_ANY, NULL}, + {"outlinecolor", ItemParse_outlinecolor, TYPE_ANY, NULL}, {"background", ItemParse_background, TYPE_ANY, NULL}, {"onFocus", ItemParse_onFocus, TYPE_ANY, NULL}, {"leaveFocus", ItemParse_leaveFocus, TYPE_ANY, NULL}, {"mouseEnter", ItemParse_mouseEnter, TYPE_ANY, NULL}, {"mouseExit", ItemParse_mouseExit, TYPE_ANY, NULL}, {"mouseEnterText", ItemParse_mouseEnterText, TYPE_ANY, NULL}, @@ -7319,6 +7445,23 @@ qboolean MenuParse_bordercolor(itemDef_t *item, int handle) return qtrue; } +qboolean MenuParse_borderstyle(itemDef_t *item, int handle) +{ + int i; + float f; + menuDef_t *menu = (menuDef_t *)item; + + for (i = 0; i < 4; i++) + { + if (!PC_Float_Parse(handle, &f)) + return qfalse; + + menu->window.borderStyle[i] = f; + } + + return qtrue; +} + qboolean MenuParse_focuscolor(itemDef_t *item, int handle) { int i; @@ -7499,6 +7642,7 @@ keywordHash_t menuParseKeywords[] = {{"font", MenuParse_font, 0, NULL}, {"name", {"onClose", MenuParse_onClose, 0, NULL}, {"onESC", MenuParse_onESC, 0, NULL}, {"border", MenuParse_border, 0, NULL}, {"borderSize", MenuParse_borderSize, 0, NULL}, {"backcolor", MenuParse_backcolor, 0, NULL}, {"forecolor", MenuParse_forecolor, 0, NULL}, {"bordercolor", MenuParse_bordercolor, 0, NULL}, + {"borderstyle", MenuParse_borderstyle, 0, NULL}, {"focuscolor", MenuParse_focuscolor, 0, NULL}, {"disablecolor", MenuParse_disablecolor, 0, NULL}, {"outlinecolor", MenuParse_outlinecolor, 0, NULL}, {"background", MenuParse_background, 0, NULL}, {"ownerdraw", MenuParse_ownerdraw, 0, NULL}, {"ownerdrawFlag", MenuParse_ownerdrawFlag, 0, NULL}, diff --git a/src/ui/ui_shared.h b/src/ui/ui_shared.h index 470792c85..4da0123ab 100644 --- a/src/ui/ui_shared.h +++ b/src/ui/ui_shared.h @@ -37,7 +37,7 @@ along with Tremulous; if not, see #define MAX_MENUDEFFILE 4096 #define MAX_MENUFILE 32768 #define MAX_MENUS 256 -#define MAX_MENUITEMS 128 +#define MAX_MENUITEMS 256 #define MAX_COLOR_RANGES 10 #define MAX_OPEN_MENUS 16 @@ -97,8 +97,15 @@ along with Tremulous; if not, see #define ASSET_SCROLLBAR_ARROWLEFT "ui/assets/scrollbar_arrow_left.tga" #define ASSET_SCROLLBAR_ARROWRIGHT "ui/assets/scrollbar_arrow_right.tga" #define ASSET_SCROLL_THUMB "ui/assets/scrollbar_thumb.tga" -#define ASSET_SLIDER_BAR "ui/assets/slider2.tga" -#define ASSET_SLIDER_THUMB "ui/assets/sliderbutt_1.tga" +#define ASSET_SHOWMORE_ARROW "ui/assets/showmore_arrow.tga" +#define ASSET_SLIDER_BAR "ui/assets/slider.png" +#define ASSET_SLIDER_THUMB "ui/assets/sliderbutt.png" +#define ASSET_CORNERIN_SQUARE "ui/assets/cornerIn_square" +#define ASSET_CORNEROUT_SQUARE "ui/assets/cornerOut_square" +#define ASSET_CORNERIN_ROUNDED "ui/assets/cornerIn_rounded" +#define ASSET_CORNEROUT_ROUNDED "ui/assets/cornerOut_rounded" +#define ASSET_CORNERIN_FOLD "ui/assets/cornerIn_fold" +#define ASSET_CORNEROUT_FOLD "ui/assets/cornerOut_fold" #define SCROLLBAR_ARROW_SIZE 16.0f #define SCROLLBAR_ARROW_WIDTH (SCROLLBAR_ARROW_SIZE * DC->aspectScale) @@ -114,7 +121,7 @@ along with Tremulous; if not, see #define SLIDER_WIDTH (96.0f * DC->aspectScale) #define SLIDER_HEIGHT 16.0f -#define SLIDER_THUMB_WIDTH (12.0f * DC->aspectScale) +#define SLIDER_THUMB_WIDTH (10.0f * DC->aspectScale) #define SLIDER_THUMB_HEIGHT 20.0f #define NUM_CROSSHAIRS 10 @@ -155,6 +162,7 @@ typedef struct { vec4_t foreColor; // text color vec4_t backColor; // border color vec4_t borderColor; // border color + vec4_t borderStyle; // border style, for rounded border style (Top left, top right, bottom right, bottom left) vec4_t outlineColor; // border color qhandle_t background; // background asset } Window; @@ -322,11 +330,14 @@ typedef struct { qhandle_t scrollBarArrowRight; qhandle_t scrollBar; qhandle_t scrollBarThumb; + qhandle_t showMoreArrow; qhandle_t buttonMiddle; qhandle_t buttonInside; qhandle_t solidBox; qhandle_t sliderBar; qhandle_t sliderThumb; + qhandle_t cornerOut[16]; + qhandle_t cornerIn[16]; sfxHandle_t menuEnterSound; sfxHandle_t menuExitSound; sfxHandle_t menuBuzzSound; @@ -355,9 +366,13 @@ typedef struct { void (*drawStretchPic)( float x, float y, float w, float h, float s1, float t1, float s2, float t2, qhandle_t hShader); qhandle_t (*registerModel)(const char *p); + qhandle_t (*registerSkin)(const char *p); void (*modelBounds)(qhandle_t model, vec3_t min, vec3_t max); + int (*lerpTag)(orientation_t *tag, clipHandle_t mod, int startFrame, int endFrame, float frac, const char *tagName); void (*fillRect)(float x, float y, float w, float h, const vec4_t color); void (*drawRect)(float x, float y, float w, float h, float size, const vec4_t color); + void (*drawRoundedRect) (float x, float y, float w, float h, float size, const vec4_t style, const vec4_t color); + void (*fillRoundedRect) (float x, float y, float w, float h, float size, const vec4_t style, const vec4_t color); void (*drawSides)(float x, float y, float w, float h, float size); void (*drawTopBottom)(float x, float y, float w, float h, float size); void (*clearScene)(void); @@ -373,6 +388,7 @@ typedef struct { void (*getCVarString)(const char *cvar, char *buffer, int bufsize); float (*getCVarValue)(const char *cvar); void (*setCVar)(const char *cvar, const char *value); + void (*resetCVar)(const char *cvar); void (*drawTextWithCursor)(float x, float y, float scale, vec4_t color, const char *text, int cursorPos, char cursor, int limit, int style); void (*setOverstrikeMode)(qboolean b);