diff options
219 files changed, 5773 insertions, 355 deletions
diff --git a/assets/credits.txt b/assets/credits.txt index 58fdcdb..d0c5a44 100644 --- a/assets/credits.txt +++ b/assets/credits.txt @@ -6,6 +6,27 @@ Cuboid - a Tremulous 1.2 mod focused on cuboids and fixing balance issues. Version Release date ______________________________________________________________________________________________ +0.1.6 Jan 19 2013 +GAMEPLAY: +- Introduced the Basivision (Activate Upgrade, +button2). While enabled, Basilisks can see in dark and see humans and their buildings through walls. +- Zap damage was corrected. +- Admins can choose to limit the maximum health for cuboids (g_cuboidHealthLimit). +- Lava and slime now deal damage smoothly. +- Reworked the jumping-out-of-water system: Tyrants and Dragoons should now be able to exit water easily. +- Dretches, Basislisk and Tyrants are no longer calculated as "out of water" if on the bottom of a liquid tank (removes a lot of exploits, notably walking on the bottom of Ancient Remains lava pool). +- Non-cuboids that haven't finished building are no longer removed after builder's death. +NON-GAMEPLAY: +- Various new images, particle systems and sounds. +- Cleaned up the cuboid protocol (thing responsible for the green/yellow/red preview while placing a cuboid). +- One of the loading bars no longer stops at 75%. +- Announcer can be disabled (cg_announcer or the Options menu). +- Turret angles are now interpolated (smooth). +- Removed the mod tutorial system (which didn't work at all). +- /register now forces a write to disk after registering. The server should no longer "forget" about registrations. +- New weapon.cfg weapon mode keyword: "impactMarkAlphaFade" - if it's defined, the weapon's impact mark fades out using alpha compositing (so it can properly fade out alphaFunc shaders). +- Added camera shake effect near explosions (magnitude controlled by cg_cameraShakeMagnitude, set to 0 to disable). +- Added /cuboidSize <x> <y> <z> which makes it possible to resize the cuboid via console commands. + 0.1.5 Sep 12 2013 GAMEPLAY: - Reverted both Lucifer Cannon and Advanced Marauder zap back to the GPP state. @@ -84,15 +105,12 @@ NON-GAMEPLAY: CREDITS Programming: -theinvsblman (lead programmer) -ViruS (a.k.a. ZdrytchX) (implementing CPMA physics) +theinvsblman +ViruS (a.k.a. ZdrytchX) +DolceTriade Source code and assets are available at https://github.com/enneract/cuboid under the terms of the GNU GPL. This mod is based on Tremulous (Darklegion Development), which is based on Quake III: Arena (id Software). - - Art -Pikachu, http//spiney.me/ (sounds) -theinvsblman (Cuboid-related stuff) Below is the full list of all resources used by the mod. @@ -103,6 +121,19 @@ credits.txt theinvsblman cuboid/logo_1.tga - logo_15.tga theinvsblman cc-by cuboid/logo_left.tga, logo_right.tga Bitstream Bistream Vera Fonts Copyright emoticons/* theinvsblman cc-by +gfx/2d/basivision_*.jpg theinvsblman cc-by +gfx/blood/* Pikachu cc0 +gfx/cuboid/* theinvsblman cc-by +gfx/fire/* Pikachu cc0 +gfx/fireball/* Pikachu cc0 +gfx/flash/* Pikachu cc0 +gfx/gas/* Pikachu cc0 +gfx/lcannon/* Pikachu cc0 +gfx/misc/*build.tga Pikachu cc0 +gfx/misc/creep.tga Darklegion Development, Pikachu cc-by-sa +gfx/smoke/* Pikachu cc0 +gfx/spark/* Pikachu cc0 +gfx/sprites/* Pikachu cc0 icons/iconu_biokit.tga Purga cc0 icons/iconu_helmet_mk2.tga Darklegion Development, theinvsblman cc-by-sa models/cuboid/concrete/concrete.jpg Randy Reddig @ shaderlab.com shaderlab* @@ -121,6 +152,10 @@ models/cuboid/slime/slime.jpg theinvsblman models/players/human_base/h_helmet... Darklegion Development, cron cc-by-sa models/players/human_base/head_mk2... Darklegion Development, cron cc-by-sa models/players/human_base/head_lig... Darklegion Development, theinvsblman cc-by-sa +models/weapons/abuildupg/weapon.cfg Darklegion Development, theinvsblman cc-by-sa +models/weapons/blaster/flash0.wav Quake2World gpl2 +models/weapons/blaster/hit.wav Pikachu cc0 +models/weapons/blaster/weapon.cfg Darklegion Development, theinvsblman cc-by-sa models/weapons/flamer/fireloop_qui... Darklegion Development, theinvsblman cc-by-sa models/weapons/flamer/weapon.cfg Darklegion Development, theinvsblman cc-by-sa models/weapons/level4/weapon.cfg Darklegion Development, theinvsblman cc-by-sa @@ -129,6 +164,8 @@ scripts/cuboid.particle Darklegion Development, theinvsblman sound/buildables/mgturret/spinup_a... Darklegion Development, Pikachu cc-by-sa sound/buildables/mgturret/spinup_b... Darklegion Development, Pikachu cc-by-sa sound/buildables/mgturret/turretki... Pikachu cc0 +sound/buildables/acid_tube/acidspl... Pikachu cc0 +sound/buildables/tesla/idle1.wav Darklegion Development, Pikachu cc-by-sa sound/cuboid/axischange.wav Ongitak @ freesound.org cc-by sound/cuboid/concrete/dstr0.wav Michael Manzke @ freesound.org cc-by-nc sound/cuboid/concrete/pain0.wav Benboncan @ freesound.org cc-by @@ -159,6 +196,7 @@ sound/cuboid/slime/pain1.wav anechoix @ freesound.org sound/feedback/*.wav Pikachu cc0 sound/player/alienhatch.wav Darklegion Development, theinvsblman cc-by-sa sound/player/alienfailedhatch.wav Darklegion Development, theinvsblman cc-by-sa +sound/player/human_bsuit/* Darklegion Development, Pikachu cc-by-sa sound/upgrades/jetpack/hi.wav Pikachu cc0 sound/upgrades/jetpack/idle.wav Pikachu cc0 sound/upgrades/jetpack/low.wav Pikachu cc0 diff --git a/assets/gfx/2d/basivision_1.jpg b/assets/gfx/2d/basivision_1.jpg Binary files differnew file mode 100644 index 0000000..a9a94df --- /dev/null +++ b/assets/gfx/2d/basivision_1.jpg diff --git a/assets/gfx/2d/basivision_blip.jpg b/assets/gfx/2d/basivision_blip.jpg Binary files differnew file mode 100644 index 0000000..e087678 --- /dev/null +++ b/assets/gfx/2d/basivision_blip.jpg diff --git a/assets/gfx/2d/basivision_flare.jpg b/assets/gfx/2d/basivision_flare.jpg Binary files differnew file mode 100644 index 0000000..0fa17f7 --- /dev/null +++ b/assets/gfx/2d/basivision_flare.jpg diff --git a/assets/gfx/blood/blood01frame01.tga b/assets/gfx/blood/blood01frame01.tga Binary files differnew file mode 100644 index 0000000..66b8ff4 --- /dev/null +++ b/assets/gfx/blood/blood01frame01.tga diff --git a/assets/gfx/blood/blood01frame02.tga b/assets/gfx/blood/blood01frame02.tga Binary files differnew file mode 100644 index 0000000..196541b --- /dev/null +++ b/assets/gfx/blood/blood01frame02.tga diff --git a/assets/gfx/blood/blood01frame03.tga b/assets/gfx/blood/blood01frame03.tga Binary files differnew file mode 100644 index 0000000..49bde52 --- /dev/null +++ b/assets/gfx/blood/blood01frame03.tga diff --git a/assets/gfx/blood/blood01frame04.tga b/assets/gfx/blood/blood01frame04.tga Binary files differnew file mode 100644 index 0000000..86be0e5 --- /dev/null +++ b/assets/gfx/blood/blood01frame04.tga diff --git a/assets/gfx/blood/blood01frame05.tga b/assets/gfx/blood/blood01frame05.tga Binary files differnew file mode 100644 index 0000000..b21b11e --- /dev/null +++ b/assets/gfx/blood/blood01frame05.tga diff --git a/assets/gfx/blood/blood01frame06.tga b/assets/gfx/blood/blood01frame06.tga Binary files differnew file mode 100644 index 0000000..1590f3a --- /dev/null +++ b/assets/gfx/blood/blood01frame06.tga diff --git a/assets/gfx/blood/blood01frame07.tga b/assets/gfx/blood/blood01frame07.tga Binary files differnew file mode 100644 index 0000000..5b8bf9c --- /dev/null +++ b/assets/gfx/blood/blood01frame07.tga diff --git a/assets/gfx/blood/blood01frame08.tga b/assets/gfx/blood/blood01frame08.tga Binary files differnew file mode 100644 index 0000000..82a1189 --- /dev/null +++ b/assets/gfx/blood/blood01frame08.tga diff --git a/assets/gfx/blood/blood02frame01.tga b/assets/gfx/blood/blood02frame01.tga Binary files differnew file mode 100644 index 0000000..414b1e9 --- /dev/null +++ b/assets/gfx/blood/blood02frame01.tga diff --git a/assets/gfx/blood/blood02frame02.tga b/assets/gfx/blood/blood02frame02.tga Binary files differnew file mode 100644 index 0000000..3aa75a4 --- /dev/null +++ b/assets/gfx/blood/blood02frame02.tga diff --git a/assets/gfx/blood/blood02frame03.tga b/assets/gfx/blood/blood02frame03.tga Binary files differnew file mode 100644 index 0000000..758c401 --- /dev/null +++ b/assets/gfx/blood/blood02frame03.tga diff --git a/assets/gfx/blood/blood02frame04.tga b/assets/gfx/blood/blood02frame04.tga Binary files differnew file mode 100644 index 0000000..21675a4 --- /dev/null +++ b/assets/gfx/blood/blood02frame04.tga diff --git a/assets/gfx/blood/blood02frame05.tga b/assets/gfx/blood/blood02frame05.tga Binary files differnew file mode 100644 index 0000000..5aee6e0 --- /dev/null +++ b/assets/gfx/blood/blood02frame05.tga diff --git a/assets/gfx/blood/blood03frame01 copy.tga b/assets/gfx/blood/blood03frame01 copy.tga Binary files differnew file mode 100644 index 0000000..08511c9 --- /dev/null +++ b/assets/gfx/blood/blood03frame01 copy.tga diff --git a/assets/gfx/blood/blood03frame02 copy.tga b/assets/gfx/blood/blood03frame02 copy.tga Binary files differnew file mode 100644 index 0000000..4c51642 --- /dev/null +++ b/assets/gfx/blood/blood03frame02 copy.tga diff --git a/assets/gfx/blood/blood03frame03 copy.tga b/assets/gfx/blood/blood03frame03 copy.tga Binary files differnew file mode 100644 index 0000000..9f4a827 --- /dev/null +++ b/assets/gfx/blood/blood03frame03 copy.tga diff --git a/assets/gfx/blood/blood03frame04 copy.tga b/assets/gfx/blood/blood03frame04 copy.tga Binary files differnew file mode 100644 index 0000000..6f8459d --- /dev/null +++ b/assets/gfx/blood/blood03frame04 copy.tga diff --git a/assets/gfx/blood/blood03frame05 copy.tga b/assets/gfx/blood/blood03frame05 copy.tga Binary files differnew file mode 100644 index 0000000..b2122f0 --- /dev/null +++ b/assets/gfx/blood/blood03frame05 copy.tga diff --git a/assets/gfx/blood/blood03frame06 copy.tga b/assets/gfx/blood/blood03frame06 copy.tga Binary files differnew file mode 100644 index 0000000..bd604fc --- /dev/null +++ b/assets/gfx/blood/blood03frame06 copy.tga diff --git a/assets/gfx/blood/blood03frame07 copy.tga b/assets/gfx/blood/blood03frame07 copy.tga Binary files differnew file mode 100644 index 0000000..ca57745 --- /dev/null +++ b/assets/gfx/blood/blood03frame07 copy.tga diff --git a/assets/gfx/blood/blood04frame01 copy.tga b/assets/gfx/blood/blood04frame01 copy.tga Binary files differnew file mode 100644 index 0000000..a3ff49e --- /dev/null +++ b/assets/gfx/blood/blood04frame01 copy.tga diff --git a/assets/gfx/blood/blood04frame02 copy.tga b/assets/gfx/blood/blood04frame02 copy.tga Binary files differnew file mode 100644 index 0000000..ca6ec09 --- /dev/null +++ b/assets/gfx/blood/blood04frame02 copy.tga diff --git a/assets/gfx/blood/blood04frame03 copy.tga b/assets/gfx/blood/blood04frame03 copy.tga Binary files differnew file mode 100644 index 0000000..c2b90c6 --- /dev/null +++ b/assets/gfx/blood/blood04frame03 copy.tga diff --git a/assets/gfx/blood/blood04frame04 copy.tga b/assets/gfx/blood/blood04frame04 copy.tga Binary files differnew file mode 100644 index 0000000..9fa3fc3 --- /dev/null +++ b/assets/gfx/blood/blood04frame04 copy.tga diff --git a/assets/gfx/blood/blood04frame05 copy.tga b/assets/gfx/blood/blood04frame05 copy.tga Binary files differnew file mode 100644 index 0000000..f3b2680 --- /dev/null +++ b/assets/gfx/blood/blood04frame05 copy.tga diff --git a/assets/gfx/blood/blood04frame06 copy.tga b/assets/gfx/blood/blood04frame06 copy.tga Binary files differnew file mode 100644 index 0000000..59a75d6 --- /dev/null +++ b/assets/gfx/blood/blood04frame06 copy.tga diff --git a/assets/gfx/blood/blood05frame01 copy.tga b/assets/gfx/blood/blood05frame01 copy.tga Binary files differnew file mode 100644 index 0000000..93afa3b --- /dev/null +++ b/assets/gfx/blood/blood05frame01 copy.tga diff --git a/assets/gfx/blood/blood05frame02 copy.tga b/assets/gfx/blood/blood05frame02 copy.tga Binary files differnew file mode 100644 index 0000000..a72b0d4 --- /dev/null +++ b/assets/gfx/blood/blood05frame02 copy.tga diff --git a/assets/gfx/blood/blood05frame03 copy.tga b/assets/gfx/blood/blood05frame03 copy.tga Binary files differnew file mode 100644 index 0000000..74fe936 --- /dev/null +++ b/assets/gfx/blood/blood05frame03 copy.tga diff --git a/assets/gfx/blood/blood05frame04 copy.tga b/assets/gfx/blood/blood05frame04 copy.tga Binary files differnew file mode 100644 index 0000000..0920225 --- /dev/null +++ b/assets/gfx/blood/blood05frame04 copy.tga diff --git a/assets/gfx/blood/blood05frame05 copy.tga b/assets/gfx/blood/blood05frame05 copy.tga Binary files differnew file mode 100644 index 0000000..1e6b389 --- /dev/null +++ b/assets/gfx/blood/blood05frame05 copy.tga diff --git a/assets/gfx/blood/blood05frame06 copy.tga b/assets/gfx/blood/blood05frame06 copy.tga Binary files differnew file mode 100644 index 0000000..ffe9c45 --- /dev/null +++ b/assets/gfx/blood/blood05frame06 copy.tga diff --git a/assets/gfx/blood/blood05frame07 copy.tga b/assets/gfx/blood/blood05frame07 copy.tga Binary files differnew file mode 100644 index 0000000..031fd8b --- /dev/null +++ b/assets/gfx/blood/blood05frame07 copy.tga diff --git a/assets/gfx/blood/blood05frame08 copy.tga b/assets/gfx/blood/blood05frame08 copy.tga Binary files differnew file mode 100644 index 0000000..4dac09c --- /dev/null +++ b/assets/gfx/blood/blood05frame08 copy.tga diff --git a/assets/gfx/blood/greenblood01frame01.tga b/assets/gfx/blood/greenblood01frame01.tga Binary files differnew file mode 100644 index 0000000..da576d3 --- /dev/null +++ b/assets/gfx/blood/greenblood01frame01.tga diff --git a/assets/gfx/blood/greenblood01frame02.tga b/assets/gfx/blood/greenblood01frame02.tga Binary files differnew file mode 100644 index 0000000..3597e8d --- /dev/null +++ b/assets/gfx/blood/greenblood01frame02.tga diff --git a/assets/gfx/blood/greenblood01frame03.tga b/assets/gfx/blood/greenblood01frame03.tga Binary files differnew file mode 100644 index 0000000..6e3b4a6 --- /dev/null +++ b/assets/gfx/blood/greenblood01frame03.tga diff --git a/assets/gfx/blood/greenblood01frame04.tga b/assets/gfx/blood/greenblood01frame04.tga Binary files differnew file mode 100644 index 0000000..6bf3dd1 --- /dev/null +++ b/assets/gfx/blood/greenblood01frame04.tga diff --git a/assets/gfx/blood/greenblood01frame05.tga b/assets/gfx/blood/greenblood01frame05.tga Binary files differnew file mode 100644 index 0000000..4282e9c --- /dev/null +++ b/assets/gfx/blood/greenblood01frame05.tga diff --git a/assets/gfx/blood/greenblood01frame06.tga b/assets/gfx/blood/greenblood01frame06.tga Binary files differnew file mode 100644 index 0000000..ad815ff --- /dev/null +++ b/assets/gfx/blood/greenblood01frame06.tga diff --git a/assets/gfx/blood/greenblood01frame07.tga b/assets/gfx/blood/greenblood01frame07.tga Binary files differnew file mode 100644 index 0000000..5a18f71 --- /dev/null +++ b/assets/gfx/blood/greenblood01frame07.tga diff --git a/assets/gfx/blood/greenblood01frame08.tga b/assets/gfx/blood/greenblood01frame08.tga Binary files differnew file mode 100644 index 0000000..4aaf680 --- /dev/null +++ b/assets/gfx/blood/greenblood01frame08.tga diff --git a/assets/gfx/blood/greenblood03frame01.tga b/assets/gfx/blood/greenblood03frame01.tga Binary files differnew file mode 100644 index 0000000..201a9df --- /dev/null +++ b/assets/gfx/blood/greenblood03frame01.tga diff --git a/assets/gfx/blood/greenblood03frame02.tga b/assets/gfx/blood/greenblood03frame02.tga Binary files differnew file mode 100644 index 0000000..5feabbd --- /dev/null +++ b/assets/gfx/blood/greenblood03frame02.tga diff --git a/assets/gfx/blood/greenblood03frame03.tga b/assets/gfx/blood/greenblood03frame03.tga Binary files differnew file mode 100644 index 0000000..bc02867 --- /dev/null +++ b/assets/gfx/blood/greenblood03frame03.tga diff --git a/assets/gfx/blood/greenblood03frame04.tga b/assets/gfx/blood/greenblood03frame04.tga Binary files differnew file mode 100644 index 0000000..a5ed762 --- /dev/null +++ b/assets/gfx/blood/greenblood03frame04.tga diff --git a/assets/gfx/blood/greenblood03frame05.tga b/assets/gfx/blood/greenblood03frame05.tga Binary files differnew file mode 100644 index 0000000..83d533d --- /dev/null +++ b/assets/gfx/blood/greenblood03frame05.tga diff --git a/assets/gfx/blood/greenblood03frame06.tga b/assets/gfx/blood/greenblood03frame06.tga Binary files differnew file mode 100644 index 0000000..ade7cde --- /dev/null +++ b/assets/gfx/blood/greenblood03frame06.tga diff --git a/assets/gfx/blood/greenblood03frame07.tga b/assets/gfx/blood/greenblood03frame07.tga Binary files differnew file mode 100644 index 0000000..b29b2ba --- /dev/null +++ b/assets/gfx/blood/greenblood03frame07.tga diff --git a/assets/gfx/blood/greenblood04frame01.tga b/assets/gfx/blood/greenblood04frame01.tga Binary files differnew file mode 100644 index 0000000..fcacebd --- /dev/null +++ b/assets/gfx/blood/greenblood04frame01.tga diff --git a/assets/gfx/blood/greenblood04frame02.tga b/assets/gfx/blood/greenblood04frame02.tga Binary files differnew file mode 100644 index 0000000..beff604 --- /dev/null +++ b/assets/gfx/blood/greenblood04frame02.tga diff --git a/assets/gfx/blood/greenblood04frame03.tga b/assets/gfx/blood/greenblood04frame03.tga Binary files differnew file mode 100644 index 0000000..afe2b4d --- /dev/null +++ b/assets/gfx/blood/greenblood04frame03.tga diff --git a/assets/gfx/blood/greenblood04frame04.tga b/assets/gfx/blood/greenblood04frame04.tga Binary files differnew file mode 100644 index 0000000..9c03a3d --- /dev/null +++ b/assets/gfx/blood/greenblood04frame04.tga diff --git a/assets/gfx/blood/greenblood04frame05.tga b/assets/gfx/blood/greenblood04frame05.tga Binary files differnew file mode 100644 index 0000000..7183e86 --- /dev/null +++ b/assets/gfx/blood/greenblood04frame05.tga diff --git a/assets/gfx/blood/greenblood04frame06.tga b/assets/gfx/blood/greenblood04frame06.tga Binary files differnew file mode 100644 index 0000000..a8cd043 --- /dev/null +++ b/assets/gfx/blood/greenblood04frame06.tga diff --git a/assets/gfx/blood/greenblood05frame08.tga b/assets/gfx/blood/greenblood05frame08.tga Binary files differnew file mode 100644 index 0000000..ecfb9bb --- /dev/null +++ b/assets/gfx/blood/greenblood05frame08.tga diff --git a/assets/gfx/blood/greensplat.tga b/assets/gfx/blood/greensplat.tga Binary files differnew file mode 100644 index 0000000..e2933a0 --- /dev/null +++ b/assets/gfx/blood/greensplat.tga diff --git a/assets/gfx/fire/fire00.jpg b/assets/gfx/fire/fire00.jpg Binary files differnew file mode 100644 index 0000000..e75edfa --- /dev/null +++ b/assets/gfx/fire/fire00.jpg diff --git a/assets/gfx/fire/fire01.jpg b/assets/gfx/fire/fire01.jpg Binary files differnew file mode 100644 index 0000000..61f1a13 --- /dev/null +++ b/assets/gfx/fire/fire01.jpg diff --git a/assets/gfx/fire/fire02.jpg b/assets/gfx/fire/fire02.jpg Binary files differnew file mode 100644 index 0000000..15241a7 --- /dev/null +++ b/assets/gfx/fire/fire02.jpg diff --git a/assets/gfx/fire/fire03.jpg b/assets/gfx/fire/fire03.jpg Binary files differnew file mode 100644 index 0000000..99b1e00 --- /dev/null +++ b/assets/gfx/fire/fire03.jpg diff --git a/assets/gfx/fire/fire04.jpg b/assets/gfx/fire/fire04.jpg Binary files differnew file mode 100644 index 0000000..19ffc89 --- /dev/null +++ b/assets/gfx/fire/fire04.jpg diff --git a/assets/gfx/fire/fire05.jpg b/assets/gfx/fire/fire05.jpg Binary files differnew file mode 100644 index 0000000..3074bad --- /dev/null +++ b/assets/gfx/fire/fire05.jpg diff --git a/assets/gfx/fire/fire06.jpg b/assets/gfx/fire/fire06.jpg Binary files differnew file mode 100644 index 0000000..ff7cd35 --- /dev/null +++ b/assets/gfx/fire/fire06.jpg diff --git a/assets/gfx/fire/fire07.jpg b/assets/gfx/fire/fire07.jpg Binary files differnew file mode 100644 index 0000000..07a22b4 --- /dev/null +++ b/assets/gfx/fire/fire07.jpg diff --git a/assets/gfx/fire/fire08.jpg b/assets/gfx/fire/fire08.jpg Binary files differnew file mode 100644 index 0000000..471628e --- /dev/null +++ b/assets/gfx/fire/fire08.jpg diff --git a/assets/gfx/fire/fire09.jpg b/assets/gfx/fire/fire09.jpg Binary files differnew file mode 100644 index 0000000..626cbf8 --- /dev/null +++ b/assets/gfx/fire/fire09.jpg diff --git a/assets/gfx/fire/fire10.jpg b/assets/gfx/fire/fire10.jpg Binary files differnew file mode 100644 index 0000000..d60a449 --- /dev/null +++ b/assets/gfx/fire/fire10.jpg diff --git a/assets/gfx/fire/fire11.jpg b/assets/gfx/fire/fire11.jpg Binary files differnew file mode 100644 index 0000000..c99d085 --- /dev/null +++ b/assets/gfx/fire/fire11.jpg diff --git a/assets/gfx/fire/fire12.jpg b/assets/gfx/fire/fire12.jpg Binary files differnew file mode 100644 index 0000000..89faf80 --- /dev/null +++ b/assets/gfx/fire/fire12.jpg diff --git a/assets/gfx/fire/fire13.jpg b/assets/gfx/fire/fire13.jpg Binary files differnew file mode 100644 index 0000000..3146f15 --- /dev/null +++ b/assets/gfx/fire/fire13.jpg diff --git a/assets/gfx/fire/fire14.jpg b/assets/gfx/fire/fire14.jpg Binary files differnew file mode 100644 index 0000000..5fef77a --- /dev/null +++ b/assets/gfx/fire/fire14.jpg diff --git a/assets/gfx/fire/fire15.jpg b/assets/gfx/fire/fire15.jpg Binary files differnew file mode 100644 index 0000000..164ce36 --- /dev/null +++ b/assets/gfx/fire/fire15.jpg diff --git a/assets/gfx/fire/fire16.jpg b/assets/gfx/fire/fire16.jpg Binary files differnew file mode 100644 index 0000000..2ee406b --- /dev/null +++ b/assets/gfx/fire/fire16.jpg diff --git a/assets/gfx/fire/fire17.jpg b/assets/gfx/fire/fire17.jpg Binary files differnew file mode 100644 index 0000000..8fe1668 --- /dev/null +++ b/assets/gfx/fire/fire17.jpg diff --git a/assets/gfx/fire/fire18.jpg b/assets/gfx/fire/fire18.jpg Binary files differnew file mode 100644 index 0000000..08250eb --- /dev/null +++ b/assets/gfx/fire/fire18.jpg diff --git a/assets/gfx/fire/fire19.jpg b/assets/gfx/fire/fire19.jpg Binary files differnew file mode 100644 index 0000000..fa6f9fc --- /dev/null +++ b/assets/gfx/fire/fire19.jpg diff --git a/assets/gfx/fireball/fireball00.jpg b/assets/gfx/fireball/fireball00.jpg Binary files differnew file mode 100644 index 0000000..613b695 --- /dev/null +++ b/assets/gfx/fireball/fireball00.jpg diff --git a/assets/gfx/fireball/fireball01.jpg b/assets/gfx/fireball/fireball01.jpg Binary files differnew file mode 100644 index 0000000..0f46ccf --- /dev/null +++ b/assets/gfx/fireball/fireball01.jpg diff --git a/assets/gfx/fireball/fireball02.jpg b/assets/gfx/fireball/fireball02.jpg Binary files differnew file mode 100644 index 0000000..04b9326 --- /dev/null +++ b/assets/gfx/fireball/fireball02.jpg diff --git a/assets/gfx/fireball/fireball03.jpg b/assets/gfx/fireball/fireball03.jpg Binary files differnew file mode 100644 index 0000000..5211565 --- /dev/null +++ b/assets/gfx/fireball/fireball03.jpg diff --git a/assets/gfx/fireball/fireball04.jpg b/assets/gfx/fireball/fireball04.jpg Binary files differnew file mode 100644 index 0000000..99d5ca6 --- /dev/null +++ b/assets/gfx/fireball/fireball04.jpg diff --git a/assets/gfx/fireball/fireball05.jpg b/assets/gfx/fireball/fireball05.jpg Binary files differnew file mode 100644 index 0000000..607c5ab --- /dev/null +++ b/assets/gfx/fireball/fireball05.jpg diff --git a/assets/gfx/fireball/fireball06.jpg b/assets/gfx/fireball/fireball06.jpg Binary files differnew file mode 100644 index 0000000..4c1d30d --- /dev/null +++ b/assets/gfx/fireball/fireball06.jpg diff --git a/assets/gfx/fireball/fireball07.jpg b/assets/gfx/fireball/fireball07.jpg Binary files differnew file mode 100644 index 0000000..f338632 --- /dev/null +++ b/assets/gfx/fireball/fireball07.jpg diff --git a/assets/gfx/fireball/fireball08.jpg b/assets/gfx/fireball/fireball08.jpg Binary files differnew file mode 100644 index 0000000..2d47087 --- /dev/null +++ b/assets/gfx/fireball/fireball08.jpg diff --git a/assets/gfx/fireball/fireball09.jpg b/assets/gfx/fireball/fireball09.jpg Binary files differnew file mode 100644 index 0000000..a8f5ad2 --- /dev/null +++ b/assets/gfx/fireball/fireball09.jpg diff --git a/assets/gfx/fireball/fireball10.jpg b/assets/gfx/fireball/fireball10.jpg Binary files differnew file mode 100644 index 0000000..3cc018f --- /dev/null +++ b/assets/gfx/fireball/fireball10.jpg diff --git a/assets/gfx/fireball/fireball11.jpg b/assets/gfx/fireball/fireball11.jpg Binary files differnew file mode 100644 index 0000000..5cf7e63 --- /dev/null +++ b/assets/gfx/fireball/fireball11.jpg diff --git a/assets/gfx/fireball/fireball12.jpg b/assets/gfx/fireball/fireball12.jpg Binary files differnew file mode 100644 index 0000000..b304086 --- /dev/null +++ b/assets/gfx/fireball/fireball12.jpg diff --git a/assets/gfx/fireball/fireball13.jpg b/assets/gfx/fireball/fireball13.jpg Binary files differnew file mode 100644 index 0000000..a5b28af --- /dev/null +++ b/assets/gfx/fireball/fireball13.jpg diff --git a/assets/gfx/fireball/fireball14.jpg b/assets/gfx/fireball/fireball14.jpg Binary files differnew file mode 100644 index 0000000..9b22b1b --- /dev/null +++ b/assets/gfx/fireball/fireball14.jpg diff --git a/assets/gfx/fireball/fireball15.jpg b/assets/gfx/fireball/fireball15.jpg Binary files differnew file mode 100644 index 0000000..4cb838d --- /dev/null +++ b/assets/gfx/fireball/fireball15.jpg diff --git a/assets/gfx/fireball/fireball16.jpg b/assets/gfx/fireball/fireball16.jpg Binary files differnew file mode 100644 index 0000000..948b2c0 --- /dev/null +++ b/assets/gfx/fireball/fireball16.jpg diff --git a/assets/gfx/fireball/fireball17.jpg b/assets/gfx/fireball/fireball17.jpg Binary files differnew file mode 100644 index 0000000..79c89a6 --- /dev/null +++ b/assets/gfx/fireball/fireball17.jpg diff --git a/assets/gfx/fireball/fireball18.jpg b/assets/gfx/fireball/fireball18.jpg Binary files differnew file mode 100644 index 0000000..644e608 --- /dev/null +++ b/assets/gfx/fireball/fireball18.jpg diff --git a/assets/gfx/fireball/fireball19.jpg b/assets/gfx/fireball/fireball19.jpg Binary files differnew file mode 100644 index 0000000..214c11c --- /dev/null +++ b/assets/gfx/fireball/fireball19.jpg diff --git a/assets/gfx/flash/explosionflash.jpg b/assets/gfx/flash/explosionflash.jpg Binary files differnew file mode 100644 index 0000000..c80ef7d --- /dev/null +++ b/assets/gfx/flash/explosionflash.jpg diff --git a/assets/gfx/gas/gas01.tga b/assets/gfx/gas/gas01.tga Binary files differnew file mode 100644 index 0000000..0c9693c --- /dev/null +++ b/assets/gfx/gas/gas01.tga diff --git a/assets/gfx/gas/gas02.tga b/assets/gfx/gas/gas02.tga Binary files differnew file mode 100644 index 0000000..040dcd0 --- /dev/null +++ b/assets/gfx/gas/gas02.tga diff --git a/assets/gfx/gas/gas03.tga b/assets/gfx/gas/gas03.tga Binary files differnew file mode 100644 index 0000000..6a7ff54 --- /dev/null +++ b/assets/gfx/gas/gas03.tga diff --git a/assets/gfx/gas/gas04.tga b/assets/gfx/gas/gas04.tga Binary files differnew file mode 100644 index 0000000..90e67cb --- /dev/null +++ b/assets/gfx/gas/gas04.tga diff --git a/assets/gfx/gas/gas05.tga b/assets/gfx/gas/gas05.tga Binary files differnew file mode 100644 index 0000000..30585ff --- /dev/null +++ b/assets/gfx/gas/gas05.tga diff --git a/assets/gfx/gas/gas06.tga b/assets/gfx/gas/gas06.tga Binary files differnew file mode 100644 index 0000000..cb337e5 --- /dev/null +++ b/assets/gfx/gas/gas06.tga diff --git a/assets/gfx/gas/gas07.tga b/assets/gfx/gas/gas07.tga Binary files differnew file mode 100644 index 0000000..2a41733 --- /dev/null +++ b/assets/gfx/gas/gas07.tga diff --git a/assets/gfx/gas/gas08.tga b/assets/gfx/gas/gas08.tga Binary files differnew file mode 100644 index 0000000..1546015 --- /dev/null +++ b/assets/gfx/gas/gas08.tga diff --git a/assets/gfx/gas/gas09.tga b/assets/gfx/gas/gas09.tga Binary files differnew file mode 100644 index 0000000..162c283 --- /dev/null +++ b/assets/gfx/gas/gas09.tga diff --git a/assets/gfx/gas/gas10.tga b/assets/gfx/gas/gas10.tga Binary files differnew file mode 100644 index 0000000..8804c4a --- /dev/null +++ b/assets/gfx/gas/gas10.tga diff --git a/assets/gfx/gas/gas11.tga b/assets/gfx/gas/gas11.tga Binary files differnew file mode 100644 index 0000000..f1f28be --- /dev/null +++ b/assets/gfx/gas/gas11.tga diff --git a/assets/gfx/gas/gas12.tga b/assets/gfx/gas/gas12.tga Binary files differnew file mode 100644 index 0000000..e8e6808 --- /dev/null +++ b/assets/gfx/gas/gas12.tga diff --git a/assets/gfx/gas/gas13.tga b/assets/gfx/gas/gas13.tga Binary files differnew file mode 100644 index 0000000..e56d4ce --- /dev/null +++ b/assets/gfx/gas/gas13.tga diff --git a/assets/gfx/gas/gas14.tga b/assets/gfx/gas/gas14.tga Binary files differnew file mode 100644 index 0000000..0b96bb8 --- /dev/null +++ b/assets/gfx/gas/gas14.tga diff --git a/assets/gfx/gas/gas15.tga b/assets/gfx/gas/gas15.tga Binary files differnew file mode 100644 index 0000000..85dd3d8 --- /dev/null +++ b/assets/gfx/gas/gas15.tga diff --git a/assets/gfx/gas/gas16.tga b/assets/gfx/gas/gas16.tga Binary files differnew file mode 100644 index 0000000..34a7254 --- /dev/null +++ b/assets/gfx/gas/gas16.tga diff --git a/assets/gfx/lcannon/primary_1.jpg b/assets/gfx/lcannon/primary_1.jpg Binary files differnew file mode 100644 index 0000000..262b3dd --- /dev/null +++ b/assets/gfx/lcannon/primary_1.jpg diff --git a/assets/gfx/lcannon/primary_2.jpg b/assets/gfx/lcannon/primary_2.jpg Binary files differnew file mode 100644 index 0000000..5536496 --- /dev/null +++ b/assets/gfx/lcannon/primary_2.jpg diff --git a/assets/gfx/lcannon/primary_3.jpg b/assets/gfx/lcannon/primary_3.jpg Binary files differnew file mode 100644 index 0000000..12961b3 --- /dev/null +++ b/assets/gfx/lcannon/primary_3.jpg diff --git a/assets/gfx/lcannon/primary_4.jpg b/assets/gfx/lcannon/primary_4.jpg Binary files differnew file mode 100644 index 0000000..0624736 --- /dev/null +++ b/assets/gfx/lcannon/primary_4.jpg diff --git a/assets/gfx/lcannon/radial01.jpg b/assets/gfx/lcannon/radial01.jpg Binary files differnew file mode 100644 index 0000000..624d9ad --- /dev/null +++ b/assets/gfx/lcannon/radial01.jpg diff --git a/assets/gfx/lcannon/radial02.jpg b/assets/gfx/lcannon/radial02.jpg Binary files differnew file mode 100644 index 0000000..7f93896 --- /dev/null +++ b/assets/gfx/lcannon/radial02.jpg diff --git a/assets/gfx/lcannon/radial03.jpg b/assets/gfx/lcannon/radial03.jpg Binary files differnew file mode 100644 index 0000000..52c01f1 --- /dev/null +++ b/assets/gfx/lcannon/radial03.jpg diff --git a/assets/gfx/lcannon/radial04.jpg b/assets/gfx/lcannon/radial04.jpg Binary files differnew file mode 100644 index 0000000..1919265 --- /dev/null +++ b/assets/gfx/lcannon/radial04.jpg diff --git a/assets/gfx/lcannon/radial05.jpg b/assets/gfx/lcannon/radial05.jpg Binary files differnew file mode 100644 index 0000000..ff098cf --- /dev/null +++ b/assets/gfx/lcannon/radial05.jpg diff --git a/assets/gfx/lcannon/radial06.jpg b/assets/gfx/lcannon/radial06.jpg Binary files differnew file mode 100644 index 0000000..f719b35 --- /dev/null +++ b/assets/gfx/lcannon/radial06.jpg diff --git a/assets/gfx/misc/creep.tga b/assets/gfx/misc/creep.tga Binary files differnew file mode 100644 index 0000000..b437dd0 --- /dev/null +++ b/assets/gfx/misc/creep.tga diff --git a/assets/gfx/misc/greenbuild.tga b/assets/gfx/misc/greenbuild.tga Binary files differnew file mode 100644 index 0000000..7c626f5 --- /dev/null +++ b/assets/gfx/misc/greenbuild.tga diff --git a/assets/gfx/misc/redbuild.tga b/assets/gfx/misc/redbuild.tga Binary files differnew file mode 100644 index 0000000..e7db833 --- /dev/null +++ b/assets/gfx/misc/redbuild.tga diff --git a/assets/gfx/smoke/smoke01.tga b/assets/gfx/smoke/smoke01.tga Binary files differnew file mode 100644 index 0000000..220b5ad --- /dev/null +++ b/assets/gfx/smoke/smoke01.tga diff --git a/assets/gfx/smoke/smoke02.tga b/assets/gfx/smoke/smoke02.tga Binary files differnew file mode 100644 index 0000000..8941945 --- /dev/null +++ b/assets/gfx/smoke/smoke02.tga diff --git a/assets/gfx/smoke/smoke03.tga b/assets/gfx/smoke/smoke03.tga Binary files differnew file mode 100644 index 0000000..c119d74 --- /dev/null +++ b/assets/gfx/smoke/smoke03.tga diff --git a/assets/gfx/smoke/smoke04.tga b/assets/gfx/smoke/smoke04.tga Binary files differnew file mode 100644 index 0000000..e59fad3 --- /dev/null +++ b/assets/gfx/smoke/smoke04.tga diff --git a/assets/gfx/smoke/smoke05.tga b/assets/gfx/smoke/smoke05.tga Binary files differnew file mode 100644 index 0000000..aec8a94 --- /dev/null +++ b/assets/gfx/smoke/smoke05.tga diff --git a/assets/gfx/smoke/smoke06.tga b/assets/gfx/smoke/smoke06.tga Binary files differnew file mode 100644 index 0000000..aa9c1fb --- /dev/null +++ b/assets/gfx/smoke/smoke06.tga diff --git a/assets/gfx/smoke/smoke07.tga b/assets/gfx/smoke/smoke07.tga Binary files differnew file mode 100644 index 0000000..c8de9f6 --- /dev/null +++ b/assets/gfx/smoke/smoke07.tga diff --git a/assets/gfx/smoke/smoke08.tga b/assets/gfx/smoke/smoke08.tga Binary files differnew file mode 100644 index 0000000..15a3111 --- /dev/null +++ b/assets/gfx/smoke/smoke08.tga diff --git a/assets/gfx/smoke/smoke09.tga b/assets/gfx/smoke/smoke09.tga Binary files differnew file mode 100644 index 0000000..23a398f --- /dev/null +++ b/assets/gfx/smoke/smoke09.tga diff --git a/assets/gfx/smoke/smoke10.tga b/assets/gfx/smoke/smoke10.tga Binary files differnew file mode 100644 index 0000000..b1e6dcd --- /dev/null +++ b/assets/gfx/smoke/smoke10.tga diff --git a/assets/gfx/smoke/smoke11.tga b/assets/gfx/smoke/smoke11.tga Binary files differnew file mode 100644 index 0000000..e093178 --- /dev/null +++ b/assets/gfx/smoke/smoke11.tga diff --git a/assets/gfx/smoke/smoke12.tga b/assets/gfx/smoke/smoke12.tga Binary files differnew file mode 100644 index 0000000..172e87a --- /dev/null +++ b/assets/gfx/smoke/smoke12.tga diff --git a/assets/gfx/smoke/smoke13.tga b/assets/gfx/smoke/smoke13.tga Binary files differnew file mode 100644 index 0000000..80a097b --- /dev/null +++ b/assets/gfx/smoke/smoke13.tga diff --git a/assets/gfx/smoke/smoke14.tga b/assets/gfx/smoke/smoke14.tga Binary files differnew file mode 100644 index 0000000..37938dc --- /dev/null +++ b/assets/gfx/smoke/smoke14.tga diff --git a/assets/gfx/smoke/smoke15.tga b/assets/gfx/smoke/smoke15.tga Binary files differnew file mode 100644 index 0000000..c0bbd10 --- /dev/null +++ b/assets/gfx/smoke/smoke15.tga diff --git a/assets/gfx/smoke/smoke16.tga b/assets/gfx/smoke/smoke16.tga Binary files differnew file mode 100644 index 0000000..ff3ed3f --- /dev/null +++ b/assets/gfx/smoke/smoke16.tga diff --git a/assets/gfx/spark/spark00.jpg b/assets/gfx/spark/spark00.jpg Binary files differnew file mode 100644 index 0000000..674d6f1 --- /dev/null +++ b/assets/gfx/spark/spark00.jpg diff --git a/assets/gfx/spark/spark01frame01.jpg b/assets/gfx/spark/spark01frame01.jpg Binary files differnew file mode 100644 index 0000000..67ada87 --- /dev/null +++ b/assets/gfx/spark/spark01frame01.jpg diff --git a/assets/gfx/spark/spark01frame02.jpg b/assets/gfx/spark/spark01frame02.jpg Binary files differnew file mode 100644 index 0000000..fa18fb1 --- /dev/null +++ b/assets/gfx/spark/spark01frame02.jpg diff --git a/assets/gfx/spark/spark01frame03.jpg b/assets/gfx/spark/spark01frame03.jpg Binary files differnew file mode 100644 index 0000000..e440522 --- /dev/null +++ b/assets/gfx/spark/spark01frame03.jpg diff --git a/assets/gfx/sprites/smoke.tga b/assets/gfx/sprites/smoke.tga Binary files differnew file mode 100644 index 0000000..6dd30be --- /dev/null +++ b/assets/gfx/sprites/smoke.tga diff --git a/assets/gfx/sprites/smoke_blue.tga b/assets/gfx/sprites/smoke_blue.tga Binary files differnew file mode 100644 index 0000000..c0b1fae --- /dev/null +++ b/assets/gfx/sprites/smoke_blue.tga diff --git a/assets/gfx/sprites/smoke_green.tga b/assets/gfx/sprites/smoke_green.tga Binary files differnew file mode 100644 index 0000000..cdc531a --- /dev/null +++ b/assets/gfx/sprites/smoke_green.tga diff --git a/assets/models/weapons/abuildupg/weapon.cfg b/assets/models/weapons/abuildupg/weapon.cfg new file mode 100644 index 0000000..17d346b --- /dev/null +++ b/assets/models/weapons/abuildupg/weapon.cfg @@ -0,0 +1,20 @@ +disableIn3rdPerson +crosshair 15 gfx/2d/crosshair-alien_s + +icon icons/icona_builder + +secondary +{ + flashSound 0 models/weapons/abuildupg/flash0.wav + impactFleshSound 0 models/weapons/abuildupg/impactflesh0.wav + alwaysImpact +} + +tertiary +{ + missileModel models/weapons/level3upg/missile.md3 + + impactMark 64 creep + impactMarkAlphaFade + impactSound 0 sound/misc/organic_bounce.wav +} diff --git a/assets/models/weapons/blaster/flash0.wav b/assets/models/weapons/blaster/flash0.wav Binary files differnew file mode 100644 index 0000000..950120a --- /dev/null +++ b/assets/models/weapons/blaster/flash0.wav diff --git a/assets/models/weapons/blaster/hit.wav b/assets/models/weapons/blaster/hit.wav Binary files differnew file mode 100644 index 0000000..cd2db9e --- /dev/null +++ b/assets/models/weapons/blaster/hit.wav diff --git a/assets/models/weapons/blaster/weapon.cfg b/assets/models/weapons/blaster/weapon.cfg new file mode 100644 index 0000000..76a2f79 --- /dev/null +++ b/assets/models/weapons/blaster/weapon.cfg @@ -0,0 +1,16 @@ +weaponModel models/weapons/blaster/blaster.md3
+
+icon icons/iconw_blaster
+crosshair 24 gfx/2d/crosshair-prifle_s
+
+primary
+{
+ missileSprite 4 gfx/blaster/orange_particle
+ missileParticleSystem models/weapons/blaster/missilePS
+
+ flashDlightColor 1.0 1.0 0.0
+ flashSound 0 models/weapons/blaster/flash0.wav
+
+ impactMark 4 gfx/marks/burn_mrk
+ impactSound 0 models/weapons/blaster/hit.wav
+}
diff --git a/assets/scripts/core.shader b/assets/scripts/core.shader new file mode 100644 index 0000000..e80aa10 --- /dev/null +++ b/assets/scripts/core.shader @@ -0,0 +1,190 @@ +// 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 *white
+ 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 gfx/colors/black.tga
+ }
+}
+
+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 *white
+ 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
+ }
+}
diff --git a/assets/scripts/cuboid.shader b/assets/scripts/cuboid.shader index e75ef7d..fc5a764 100644 --- a/assets/scripts/cuboid.shader +++ b/assets/scripts/cuboid.shader @@ -254,3 +254,33 @@ gfx/cuboid/prebuild_alien } } +gfx/2d/basivision +{ + { + map gfx/2d/basivision_1.jpg + blendFunc GL_ONE_MINUS_DST_COLOR GL_ONE_MINUS_SRC_COLOR + } +} + +gfx/2d/basivisionBlip +{ + { + clampmap gfx/2d/basivision_blip.jpg + blendFunc add + tcMod rotate 26 + } + { + clampmap gfx/2d/basivision_blip.jpg + blendFunc add + tcMod rotate -49 + } +} + +gfx/2d/basivisionFlare +{ + { + clampmap gfx/2d/basivision_flare.jpg + tcMod stretch sin 1 0.1 0 140 + blendFunc add + } +} diff --git a/assets/scripts/g_alienattackfx.particle b/assets/scripts/g_alienattackfx.particle new file mode 100644 index 0000000..b6e7710 --- /dev/null +++ b/assets/scripts/g_alienattackfx.particle @@ -0,0 +1,135 @@ +// Basilisk Gas
+
+models/weapons/level1upg/muzzlePS
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gas01 gas02 gas03 gas04 gas05 gas06 gas07 gas08 gas09 gas10 gas11 gas12 gas13 gas14 gas15 gas16
+
+ displacement 0 0 0 0
+
+ parentVelocityFraction 0.5
+
+ velocityType cent
+ velocityDir linear
+ velocityMagnitude 80
+ velocity 0 0 0 ~50
+
+ radius 0 5 35
+ alpha 150 0.5 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 1200
+ }
+
+ count 40
+ delay 0
+ period 10 - 0
+ }
+}
+
+poisonCloudedPS
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gas01 gas02 gas03 gas04 gas05 gas06 gas07 gas08 gas09 gas10 gas11 gas12 gas13 gas14 gas15 gas16
+
+ displacement 0 0 0 ~6
+
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 60
+ velocity 0 0 0 ~50
+
+ radius 0 4 12
+ alpha 100 0.25 0
+ rotation 0 ~360 -
+
+ lifeTime 800
+ }
+
+ count 100
+ delay 0
+ period 50 200 0
+ }
+}
+
+firstPersonPoisonCloudPS
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gas01 gas02 gas03 gas04 gas05 gas06 gas07 gas08 gas09 gas10 gas11 gas12 gas13 gas14 gas15 gas16
+
+ displacement 0 0 0 ~32
+
+ parentVelocityFraction 1.0
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 16
+ velocity 0 0 1 0
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 300
+ acceleration 0 0 1 0
+
+ radius 0 10 40
+ alpha 0 0.5 0
+ rotation 0 ~360 -
+ bounce 0.5
+
+ lifeTime 1000
+ }
+
+ count 400
+ delay 0
+ period 20 - 0
+ }
+}
+
+
+
+
+
+// Dragoon Barb
+
+models/weapons/level3upg/impactPS
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/level3upg/barb_splash
+
+ displacement 0 0 0 ~8
+
+ velocityType normal
+ velocityDir linear
+ velocityMagnitude 800
+ velocity 0 0 1 ~80
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 800
+ acceleration 0 0 -1 0
+
+ radius 0 3~2 0
+ alpha 0 10 1
+ rotation 0 ~360 -
+ bounce 0.4~100%
+
+ lifeTime 175
+ }
+
+ count 12
+ delay 0
+ period 0 - 0
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_alienattackfx.shader b/assets/scripts/g_alienattackfx.shader new file mode 100644 index 0000000..7564d3a --- /dev/null +++ b/assets/scripts/g_alienattackfx.shader @@ -0,0 +1,145 @@ +// marauder zap in g_lightning.trail
+
+gas01
+{
+ nopicmip
+ {
+ map gfx/gas/gas01.tga
+ blendFunc Blend
+ }
+}
+
+gas02
+{
+ nopicmip
+ {
+ map gfx/gas/gas02.tga
+ blendFunc Blend
+ }
+}
+
+gas03
+{
+ nopicmip
+ {
+ map gfx/gas/gas03.tga
+ blendFunc Blend
+ }
+}
+
+gas04
+{
+ nopicmip
+ {
+ map gfx/gas/gas04.tga
+ blendFunc Blend
+ }
+}
+
+gas05
+{
+ nopicmip
+ {
+ map gfx/gas/gas05.tga
+ blendFunc Blend
+ }
+}
+
+gas06
+{
+ nopicmip
+ {
+ map gfx/gas/gas06.tga
+ blendFunc Blend
+ }
+}
+
+gas07
+{
+ nopicmip
+ {
+ map gfx/gas/gas07.tga
+ blendFunc Blend
+ }
+}
+
+gas08
+{
+ nopicmip
+ {
+ map gfx/gas/gas08.tga
+ blendFunc Blend
+ }
+}
+
+gas09
+{
+ nopicmip
+ {
+ map gfx/gas/gas09.tga
+ blendFunc Blend
+ }
+}
+
+gas10
+{
+ nopicmip
+ {
+ map gfx/gas/gas10.tga
+ blendFunc Blend
+ }
+}
+
+gas11
+{
+ nopicmip
+ {
+ map gfx/gas/gas11.tga
+ blendFunc Blend
+ }
+}
+
+gas12
+{
+ nopicmip
+ {
+ map gfx/gas/gas12.tga
+ blendFunc Blend
+ }
+}
+
+gas13
+{
+ nopicmip
+ {
+ map gfx/gas/gas13.tga
+ blendFunc Blend
+ }
+}
+
+gas14
+{
+ nopicmip
+ {
+ map gfx/gas/gas14.tga
+ blendFunc Blend
+ }
+}
+
+gas15
+{
+ nopicmip
+ {
+ map gfx/gas/gas15.tga
+ blendFunc Blend
+ }
+}
+
+gas16
+{
+ nopicmip
+ {
+ map gfx/gas/gas16.tga
+ blendFunc Blend
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_alienblood.particle b/assets/scripts/g_alienblood.particle new file mode 100644 index 0000000..0d627ad --- /dev/null +++ b/assets/scripts/g_alienblood.particle @@ -0,0 +1,334 @@ +alienBleedPS // alien blood +{ + ejector + { + particle + { + shader sync greenblood01frame01 greenblood01frame02 greenblood01frame03 greenblood01frame04 greenblood01frame05 greenblood01frame06 greenblood01frame07 greenblood01frame08 + + displacement 0 0 0 ~8 + + radius 0 6~2 9~2 + alpha 0 1 0 + rotation 0 ~360 - + bounce 0 + + lifeTime 250~50 + } + count 1 + delay 0 + period 0 - 0 + } + thirdPersonOnly +} + +alienBuildableBleedPS // alien building blood +{ + ejector + { + particle + { + shader sync greenblood01frame01 greenblood01frame02 greenblood01frame03 greenblood01frame04 greenblood01frame05 greenblood01frame06 greenblood01frame07 greenblood01frame08 + + displacement 0 0 0 ~8 + + radius 0 6~2 9~2 + alpha 0 1 0 + rotation 0 ~360 - + bounce 0 + + lifeTime 250~50 + } + count 1 + delay 0 + period 0 - 0 + } + thirdPersonOnly +} + +alienBuildableDamagedPS // alien building almost destroyed +{ + ejector + { + particle + { + shader sync greenblood03frame01 greenblood03frame02 greenblood03frame03 greenblood03frame04 greenblood03frame05 greenblood03frame06 greenblood03frame07 + + displacement 0 0 0 ~4 + + velocityType normal + velocityDir linear + velocityMagnitude 100 + velocity 0 0 0 ~20 + + accelerationType static + accelerationDir linear + accelerationMagnitude 200 + acceleration 0 0 -2 0 + + radius 0 4 12~6 + alpha 0 1 1 + rotation 0 ~360 - + + lifeTime 300~50% + } + + particle + { + shader sync greenblood01frame01 greenblood01frame02 greenblood01frame03 greenblood01frame04 greenblood01frame05 greenblood01frame06 greenblood01frame07 greenblood01frame08 + + displacement 0 0 0 ~6 + + velocityType normal + velocityDir linear + velocityMagnitude 100 + velocity 0 0 0 ~20 + + accelerationType static + accelerationDir linear + accelerationMagnitude 200 + acceleration 0 0 -2 0 + + radius 0 4 12~4 + alpha 0 1 1 + rotation 0 ~360 - + + lifeTime 300~50% + } + count infinite + delay 0 + period 600 - 0 + } + + ejector + { + particle + { + shader sync greenblood01frame01 greenblood01frame02 greenblood01frame03 greenblood01frame04 greenblood01frame05 greenblood01frame06 greenblood01frame07 greenblood01frame08 + + displacement 0 0 0 ~20 + + velocityType normal + velocityDir linear + velocityMagnitude 100 + velocity 0 0 0 ~20 + + accelerationType static + accelerationDir linear + accelerationMagnitude 200 + acceleration 0 0 -2 0 + + radius 0 4.0 4.0 + alpha 0 1 1 + rotation 0 ~360 - + + lifeTime 300~50% + } + + particle + { + shader sync greenblood01frame01 greenblood01frame02 greenblood01frame03 greenblood01frame04 greenblood01frame05 greenblood01frame06 greenblood01frame07 greenblood01frame08 + + displacement 0 0 0 ~20 + + velocityType normal + velocityDir linear + velocityMagnitude 100 + velocity 0 0 0 ~20 + + accelerationType static + accelerationDir linear + accelerationMagnitude 200 + acceleration 0 0 -2 0 + + radius 0 4 4 + alpha 0 1 1 + rotation 0 ~360 - + + lifeTime 300~50% + } + count infinite + delay 300 + period 600 - 0 + } +} + +alienBuildableDestroyedPS // alien building destroyed +{ + ejector + { + particle + { + shader sync greenblood01frame01 greenblood01frame02 greenblood01frame03 greenblood01frame04 greenblood01frame05 greenblood01frame06 greenblood01frame07 greenblood01frame08 + + displacement 0 0 0 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 0.05 ~40 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -2 0 + + radius 0 10 15 + alpha 0 1 1 + rotation 0 ~360 - + bounce cull + + lifeTime 600 + } + + count 32 + delay 0 + period 0 - 0 + } + ejector + { + particle + { + shader sync greenblood03frame01 + + displacement 0 0 30 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 1 ~40 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -2 0 + + radius 600 8 0 + alpha 0 1 1 + rotation 0 ~360 - + bounce 0.1 + bouncemark 1 24~8 greensplat2 + + lifeTime 1200 + } + + particle + { + shader sync greenblood03frame01 + + displacement 0 0 30 0 + + velocityType static + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 1 ~40 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -2 0 + + radius 600 8 0 + alpha 0 1 1 + rotation 0 ~360 - + bounce 0.1 + bouncemark 1 24~8 greensplat3 + + lifeTime 1200 + } + + particle + { + shader sync greenblood03frame01 + + displacement 0 0 30 0 + + velocityType static + velocityDir linear + velocityMagnitude 300~75% + velocity 0 0 1 ~40 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -2 0 + + radius 500 10 0 + alpha 0 1 1 + rotation 0 ~360 - + bounce 0.1 + bouncemark 1 24~8 greensplat4 + + lifeTime 1000 + } + + count 3 + delay 0 + period 0 - 0 + } + ejector // gibs + { + 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~20 0~20 40~10 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 2000 1 0 + bounce 0.2 + bounceMark 1~1 24 greensplat3 + bounceSound ~1 sound/misc/organic_bounce.wav + + lifeTime 3000~500 + } + + count 3 + delay 0 + period 0 - 0 + } +} + +alienEvolvePS // alien evolution blood +{ + ejector + { + particle + { + shader sync greenblood01frame01 greenblood01frame02 greenblood01frame03 greenblood01frame04 greenblood01frame05 greenblood01frame06 greenblood01frame07 greenblood01frame08 + + displacement 0 0 0 ~0 + + velocityType static + velocityDir linear + velocityMagnitude 150~75% + velocity 0 0 1 ~50 + + accelerationType static + accelerationDir linear + accelerationMagnitude 800 + acceleration 0 0 -1 0 + + radius 0 5 30 + alpha 0 1 0 + rotation 0 ~360 - + bounce 0.2 + + lifeTime 1000 + } + + count 30 + delay 0 + period 5 - 0 + } + thirdPersonOnly +}
\ No newline at end of file diff --git a/assets/scripts/g_alienblood.shader b/assets/scripts/g_alienblood.shader new file mode 100644 index 0000000..f6c39e4 --- /dev/null +++ b/assets/scripts/g_alienblood.shader @@ -0,0 +1,163 @@ +// blood decals are in g_decals.shader
+
+greenblood01frame01
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood01frame01.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood01frame02
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood01frame02.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood01frame03
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood01frame03.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood01frame04
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood01frame04.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood01frame05
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood01frame05.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood01frame06
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood01frame06.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood01frame07
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood01frame07.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood01frame08
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood01frame08.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood03frame01
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood03frame01.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood03frame02
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood03frame02.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood03frame03
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood03frame03.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood03frame04
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood03frame04.tga
+ blendfunc gl_one gl_one_minus_src_color
+
+ }
+}
+
+greenblood03frame05
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood03frame05.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood03frame06
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood03frame06.tga
+ blendfunc gl_one gl_one_minus_src_color
+
+ }
+}
+
+greenblood03frame07
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood03frame07.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
+
+greenblood03frame08
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/greenblood03frame08.tga
+ blendfunc gl_one gl_one_minus_src_color
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_alienbuildablefx.particle b/assets/scripts/g_alienbuildablefx.particle new file mode 100644 index 0000000..a946351 --- /dev/null +++ b/assets/scripts/g_alienbuildablefx.particle @@ -0,0 +1,105 @@ +alienAcidTubePS // Acid Tube
+{
+ ejector // acid spray
+ {
+ particle
+ {
+ shader sync greenblood01frame01 greenblood01frame02 greenblood01frame03 greenblood01frame04 greenblood01frame05 greenblood01frame06 greenblood01frame07 greenblood01frame08
+
+ displacement 0 0 0 ~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 20
+ alpha 0 1.0 0
+ rotation 0 ~360 -
+ bounce 0.2
+
+ lifeTime 600~50%
+ }
+
+ count 50
+ delay 0
+ period 5 - 0
+ }
+
+ ejector // acid decals
+ {
+ particle
+ {
+ shader sync greenblood01frame01
+
+ displacement 0 0 0 0
+ normalDisplacement 0
+
+ velocityType normal
+ velocityDir linear
+ velocityMagnitude 300~75%
+ velocity 0 0 1 ~10
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 900
+ acceleration 0 0 -1 ~30
+
+ radius 0 0 0
+ alpha 0 0 0
+ rotation 0 ~360 -
+
+ bounce 0.3
+ bounceMark 0~1 32~8 greensplat
+ bounceSound 1 sound/buildables/acid_tube/acidsplat.wav
+
+ onDeathSystem alienBuildableBleedPS
+
+ lifeTime 1000~50%
+ }
+
+ count 1
+ delay 0
+ period 5 - 0
+ }
+}
+
+models/weapons/hive/missilePS // Hive
+{
+ ejector
+ {
+ particle
+ {
+ shader 20 models/weapons/hive/sprite1.tga models/weapons/hive/sprite2.tga
+
+ displacement 0 0 0 ~4
+
+ parentVelocityFraction 0.5
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 100
+ velocity 0 0 1 ~180
+
+ accelerationType cent
+ accelerationDir point
+ accelerationMagnitude 2000
+
+ rotation 0 -20~40 -20~40
+ radius 0 2 2
+ alpha 0 1 0
+ bounce 0.5
+
+ lifeTime 4000
+ }
+
+ count infinite
+ delay 0
+ period 100 - 0
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_alienmodelshaders.shader b/assets/scripts/g_alienmodelshaders.shader new file mode 100644 index 0000000..3a8b854 --- /dev/null +++ b/assets/scripts/g_alienmodelshaders.shader @@ -0,0 +1,229 @@ +// Advanced Marauder
+
+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
+ }
+}
+
+models/players/level2/electric_s
+{
+ {
+ map models/players/level2/electric.jpg
+ blendfunc add
+ tcMod scroll 10 0.5
+ }
+}
+
+
+
+
+
+// Booster
+
+models/buildables/booster/booster_head
+{
+ {
+ map models/buildables/booster/booster_head.tga
+ rgbGen lightingDiffuse
+ }
+ {
+ 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
+ }
+}
+models/buildables/booster/pod_strands
+{
+ cull disable
+ {
+ map models/buildables/barricade/pod_strands.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+models/buildables/hovel/pod_strands
+{
+ cull disable
+ {
+ map models/buildables/barricade/pod_strands.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+
+
+
+
+
+// Egg
+
+models/buildables/eggpod/pod_body
+{
+ nopicmip
+ cull disable
+ {
+ map models/buildables/eggpod/pod_body.tga
+ rgbGen lightingDiffuse
+ }
+}
+
+models/buildables/eggpod/pod_tip
+{
+ nopicmip
+ cull disable
+ {
+ map models/buildables/eggpod/pod_tip.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+
+models/buildables/eggpod/pod_tendrils
+{
+ nopicmip
+ cull disable
+ {
+ map models/buildables/eggpod/pod_tendrils.tga
+ rgbGen lightingDiffuse
+ }
+}
+
+models/buildables/eggpod/pod_strands
+{
+ nopicmip
+ cull disable
+ {
+ map models/buildables/eggpod/pod_strands.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+
+models/buildables/barricade/pod_strands
+{
+ nopicmip
+ cull disable
+ {
+ map models/buildables/barricade/pod_strands.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+models/buildables/barricade/alien_spike
+{
+ nopicmip
+ {
+ map models/buildables/barricade/alien_spike.tga
+ rgbGen lightingDiffuse
+ }
+}
+
+models/buildables/acid_tube/pod_strands
+{
+ nopicmip
+ cull disable
+ {
+ map models/buildables/eggpod/pod_strands.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+
+
+
+
+
+// Hive
+
+models/buildables/hive/hive_strands_s
+{
+ cull disable
+ {
+ map models/buildables/hive/hive_strands.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+
+
+
+
+
+// Overmind
+
+models/buildables/overmind/pod_strands
+{
+ cull disable
+ {
+ map models/buildables/eggpod/pod_strands.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+
+models/buildables/overmind/over_spike
+{
+ {
+ map models/buildables/overmind/over_spike.tga
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/buildables/overmind/ref2.tga
+ blendfunc filter
+ rgbGen identity
+ tcGen environment
+ }
+}
+
+
+
+
+
+// Trapper
+
+models/buildables/trapper/trapper_gills
+{
+nopicmip
+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
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_buildmarker.shader b/assets/scripts/g_buildmarker.shader new file mode 100644 index 0000000..bae10ae --- /dev/null +++ b/assets/scripts/g_buildmarker.shader @@ -0,0 +1,17 @@ +gfx/misc/redbuild
+{
+ cull disable
+ {
+ map gfx/misc/redbuild.tga
+ blendfunc add
+ }
+}
+
+gfx/misc/greenbuild
+{
+ cull disable
+ {
+ map gfx/misc/greenbuild.tga
+ blendfunc add
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_decals.shader b/assets/scripts/g_decals.shader new file mode 100644 index 0000000..71096b6 --- /dev/null +++ b/assets/scripts/g_decals.shader @@ -0,0 +1,114 @@ +gfx/marks/shadow // blob shadow
+{
+ polygonOffset
+ {
+ map gfx/marks/shadow.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+gfx/marks/wake // foamy water around swimming players
+{
+ 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 // bullet decal
+{
+ polygonOffset
+ {
+ map gfx/marks/bullet_mrk.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+gfx/marks/burn_mrk // burn mark
+{
+ polygonOffset
+ {
+ map gfx/marks/burn_mrk.tga
+ blendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
+ rgbGen exactVertex
+ }
+}
+
+gfx/marks/plasma_mrk // plasma decal
+{
+ polygonOffset
+ {
+ map gfx/marks/plasma_mrk.tga
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ rgbGen vertex
+ alphaGen vertex
+ }
+}
+
+creep // alien creep texture
+{
+ nopicmip
+ polygonoffset
+ {
+ clampmap gfx/misc/creep.tga
+ blendfunc blend
+ rgbGen identityLighting
+ alphaGen Vertex
+ }
+}
+
+greensplat // alien acid/blood decal
+{
+ nopicmip
+ polygonoffset
+ {
+ map gfx/blood/greensplat.tga
+ blendfunc blend
+ }
+}
+
+greensplat2 // alien acid/blood decal
+{
+ nopicmip
+ polygonoffset
+ {
+ map gfx/blood/greenblood01frame08.tga
+ blendfunc blend
+ }
+}
+
+greensplat3 // alien acid/blood decal
+{
+ nopicmip
+ polygonoffset
+ {
+ map gfx/blood/greenblood01frame07.tga
+ blendfunc blend
+ }
+}
+
+greensplat4 // alien acid/blood decal
+{
+ nopicmip
+ polygonoffset
+ {
+ map gfx/blood/greenblood03frame07.tga
+ blendfunc blend
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_disconnect.particle b/assets/scripts/g_disconnect.particle new file mode 100644 index 0000000..e7ba0c1 --- /dev/null +++ b/assets/scripts/g_disconnect.particle @@ -0,0 +1,25 @@ +disconnectPS +{ + ejector + { + particle + { + shader sync gfx/sprites/bubble + displacement 0 0 0 ~60 + + velocityType static + velocityDir linear + velocityMagnitude 15 + velocity 0 0 1 ~90 + + radius 0 24 32 + alpha 0 1 - + + lifeTime 1000~300 + } + + count 3 + delay 0 + period 0 - 0 + } +}
\ No newline at end of file diff --git a/assets/scripts/g_fire.shader b/assets/scripts/g_fire.shader new file mode 100644 index 0000000..1dc86f0 --- /dev/null +++ b/assets/scripts/g_fire.shader @@ -0,0 +1,459 @@ +flame1
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame00.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame2
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame01.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame3
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame02.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame4
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame03.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame5
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame04.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame6
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame05.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame7
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame06.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame8
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame07.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame9
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame08.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame10
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame09.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame11
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame10.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame12
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame11.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame13
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame12.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame14
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame13.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame15
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame14.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame16
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame15.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame17
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame16.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame18
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame17.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame19
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame18.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame20
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame19.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame21
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame20.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame22
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame21.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame23
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame22.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame24
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame23.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+flame25
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flame/flame24.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire00
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire00.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire01
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire01.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire02
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire02.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire03
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire03.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire04
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire04.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire05
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire05.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire06
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire06.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire07
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire07.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire08
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire08.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire09
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire09.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire10
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire10.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire11
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire11.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire12
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire12.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire13
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire13.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire14
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire14.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire15
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire15.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire16
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire16.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire17
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire17.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire18
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire18.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+fire19
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/fire/fire19.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+explosionflash
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/flash/explosionflash.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_humanblood.particle b/assets/scripts/g_humanblood.particle new file mode 100644 index 0000000..d537c27 --- /dev/null +++ b/assets/scripts/g_humanblood.particle @@ -0,0 +1,35 @@ +humanBleedPS +{ + ejector + { + particle + { + shader sync blood01frame01 blood01frame02 blood01frame03 blood01frame04 blood01frame05 blood01frame06 blood01frame07 blood01frame08 + + displacement 0 0 0 0 + + velocityType normal + velocityDir linear + velocityMagnitude 15 + velocity 0 0 0 ~35 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 8 + alpha 250 .75 0 + rotation 0 ~-15 ~15 + bounce cull + + lifeTime 400~100 + } + + count 1 + delay 0 + period 0 - 0 + } + + thirdPersonOnly +}
\ No newline at end of file diff --git a/assets/scripts/g_humanblood.shader b/assets/scripts/g_humanblood.shader new file mode 100644 index 0000000..f5ffb02 --- /dev/null +++ b/assets/scripts/g_humanblood.shader @@ -0,0 +1,79 @@ +blood01frame01
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/blood01frame01.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+blood01frame02
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/blood01frame02.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+blood01frame03
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/blood01frame03.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+blood01frame04
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/blood01frame04.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+blood01frame05
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/blood01frame05.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+blood01frame06
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/blood01frame06.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+blood01frame07
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/blood01frame07.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+blood01frame08
+{
+ nopicmip
+ cull disable
+ {
+ map gfx/blood/blood01frame08.tga
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_humanbuildablefx.particle b/assets/scripts/g_humanbuildablefx.particle new file mode 100644 index 0000000..24fce14 --- /dev/null +++ b/assets/scripts/g_humanbuildablefx.particle @@ -0,0 +1,413 @@ +humanBuildableBleedPS +{ + ejector + { + particle // residual sparks + { + shader sync spark00 + + displacement 0 0 0 ~1 + normalDisplacement -8 + + velocityType static + velocityDir linear + velocityMagnitude 200 + velocity 0 0 0.2 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 500 + acceleration 0~360 0~360 -1 0 + + radius 0 1.5~1 0 + alpha 0 1 1 + rotation 0 ~360 - + bounce 0.6 + + lifeTime 600~20% + } + + count 1~2 + delay 0 + period 0 - 0 + } + + ejector // impact sparks + { + particle + { + shader sync spark01frame01 spark01frame03 + + displacement 0 0 0 4 + + normalDisplacement 15 + + velocityType static + accelerationType static + + radius 0 10~60% 0~4 + alpha 0 1 0 + rotation 0 ~360 - + bounce 0 + + lifeTime 100 + } + + count 1~1 + delay 0 + period 0 - 0 + } +} + +humanBuildableDamagedPS +{ + ejector + { + particle + { + shader sync gfx/sprites/smoke + + displacement 0 0 16 0 + + velocityType static + velocityDir linear + velocityMagnitude 25 + velocity 0 0 1 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 25 + acceleration 0 0 1 0 + + radius 0 10 50 + alpha 0 0.6 0 + rotation 0 ~360 - + bounce 0.5 + + lifeTime 1000~25% + } + + count infinite + delay 0 + period 100 - 0 + } + + ejector + { + particle + { + shader sync spark00 + + 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 + alpha 0 1 0 + rotation 0 ~360 - + bounce 0.6 + + lifeTime 1500~50% + } + + count infinite + delay 0 + period 700 - 0 + } +} + +humanBuildableDestroyedTrailPS +{ + ejector // fire trail + { + particle + { + shader sync fire09 fire10 fire11 fire12 fire13 fire14 fire15 fire16 fire17 fire18 fire19 + + displacement 0 0 6 0 + + velocityType static + velocityDir linear + velocityMagnitude 30 + velocity 0 0 0 ~60 + + radius 0 5 15 + alpha 150 1 0 + rotation 0 ~360 - + bounce 0.3 + + lifeTime 200 + } + count 110 + delay 0 + period 10 - 0 + } + + ejector // smoke trail + { + particle + { + shader sync gfx/sprites/smoke + + displacement 0 0 15 0 + + velocityType static + velocityDir linear + velocityMagnitude 30 + velocity 0 0 0 ~60 + + accelerationType static + accelerationDir linear + accelerationMagnitude 25 + acceleration 0 0 0.2 0 + + radius 0 4 20~5 + alpha 0 0.250.1 0 + rotation 0 ~360 - + bounce 0.3 + + lifeTime 450~100 + } + count 70 + delay 15 + period 10 - 0 + } + + ejector // debris upward fire + { + particle + { + shader sync fire08 fire09 fire10 fire11 fire12 fire13 fire14 fire15 fire16 fire17 fire18 fire19 + + displacement 0~4 0~4 6 0 + + velocityType static + velocityDir linear + velocityMagnitude 40~5 + velocity 0.1 0.1 0.5~1 0.1 + + accelerationType static + accelerationDir linear + accelerationMagnitude 50 + acceleration 0 0 -0.3 0 + + radius 0 6~2 11~2 + rotation 0 ~360 - + bounce 0 + + lifeTime 700~100 + } + + count 50~10 + delay 200 + period 100~40 - 0 + } + + ejector // debris base fire + { + particle + { + shader sync fire05 fire06 fire07 fire08 fire09 fire10 fire11 fire12 fire13 fire14 fire15 fire16 fire17 fire18 fire19 + + displacement 0 0 6 0 + + velocityType static + velocityDir linear + velocityMagnitude 1 + velocity 0 0 0 0 + + accelerationType static + accelerationDir linear + accelerationMagnitude 1 + acceleration 0 0 0 0 + + radius 0 8 16 + rotation 0 ~360 - + bounce 0 + + lifeTime 1000~100 + } + + count 40 + delay 1300 + period 112~40% - 0 + } +} + +humanBuildableDestroyedPS +{ + ejector // boom + { + particle // light up environment + { + dynamicLight 0 300 0 { 1 0.75 0 } + lifeTime 600~100 + } + + particle // explosion ring 1 + { + shader sync radialblast01 radialblast02 radialblast03 radialblast04 radialblast05 + + displacement 0 0 0 0 + + normalDisplacement 15 + + velocityType static + accelerationType static + + radius 0 40 150 + alpha 0 1 0 + rotation 0 ~360 - + bounce 0 + + scaleWithCharge 0.1 + + lifeTime 200 + } + + particle // explosion ring 2 + { + shader sync radialblast03 radialblast03 radialblast03 radialblast03 radialblast04 radialblast05 + + displacement 0 0 0 0 + + normalDisplacement 15 + + velocityType static + accelerationType static + + radius 0 0 100 + alpha 0 1 0 + rotation 0 ~360 - + bounce 0 + + scaleWithCharge 0.10 + + lifeTime 100 + } + + particle // explosion flash + { + shader sync explosionflash + + displacement 0 0 0 0 + + normalDisplacement 100 + + velocityType static + accelerationType static + + radius 0 100 0 + alpha 80 1 0 + rotation 0 ~360 - + bounce 0 + + scaleWithCharge 0.1 + + lifeTime 200 + } + + count 1 + delay 0 + period 0 - ~0% + } + + ejector // sparks + { + particle // spam some sparks + { + shader sync spark00 + + 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 2 0 + alpha 0 1 0 + rotation 0 ~360 - + bounce 0.4~100% + + lifeTime 3000~90% + } + + count 50 + delay 0 + period 0 - 0 + } + + ejector // debris + { + particle // metal gib models with child trail + { + 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_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 5900 1~30% 0 + bounce 0.2 + bounceMark 1~1 16 gfx/marks/burn_mrk + bounceSound ~1 sound/buildables/human/fragmentbounce.wav + + lifeTime 7000~1000 + childSystem humanBuildableDestroyedTrailPS + } + + count 3~1 + delay 0 + period 10 - 0 + } + + ejector // quick large puffy explosion clouds + { + particle + { + shader sync smoke01 smoke02 smoke03 smoke04 smoke05 smoke06 smoke07 smoke08 smoke09 smoke10 smoke11 smoke12 smoke13 smoke14 smoke15 smoke16 + + displacement ~20 ~20 ~20 10 + + parentVelocityFraction 0.5 + + velocityType static + velocityDir linear + velocityMagnitude 150 + velocity ~1 ~1 0.2 ~50 + + radius 0 5~20 200~20 + alpha 0 0.4 0 + rotation 0 ~360 - + bounce 0 + + lifeTime 600 + } + + count 6 + delay 0 + period 0 - 0 + } +}
\ No newline at end of file diff --git a/assets/scripts/g_humanbuildablefx.shader b/assets/scripts/g_humanbuildablefx.shader new file mode 100644 index 0000000..413205d --- /dev/null +++ b/assets/scripts/g_humanbuildablefx.shader @@ -0,0 +1,192 @@ +metal_gibs
+{
+ {
+ map models/fx/metal_gibs/metal_gibs.tga
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/fx/metal_gibs/hot_gibs.tga
+ blendfunc add
+ rgbGen wave sin 0 1 0 0.0625
+ }
+}
+
+smoke01
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke01.tga
+ blendFunc Blend
+ }
+}
+
+smoke02
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke02.tga
+ blendFunc Blend
+ }
+}
+
+smoke03
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke03.tga
+ blendFunc Blend
+ }
+}
+
+smoke04
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke04.tga
+ blendFunc Blend
+ }
+}
+
+smoke05
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke05.tga
+ blendFunc Blend
+ }
+}
+
+smoke06
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke06.tga
+ blendFunc Blend
+ }
+}
+
+smoke07
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke07.tga
+ blendFunc Blend
+ }
+}
+
+smoke08
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke08.tga
+ blendFunc Blend
+ }
+}
+
+smoke09
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke09.tga
+ blendFunc Blend
+ }
+}
+
+smoke10
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke10.tga
+ blendFunc Blend
+ }
+}
+
+smoke11
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke11.tga
+ blendFunc Blend
+ }
+}
+
+smoke12
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke12.tga
+ blendFunc Blend
+ }
+}
+
+smoke13
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke13.tga
+ blendFunc Blend
+ }
+}
+
+smoke14
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke14.tga
+ blendFunc Blend
+ }
+}
+
+smoke15
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke15.tga
+ blendFunc Blend
+ }
+}
+
+smoke16
+{
+ nopicmip
+ {
+ map gfx/smoke/smoke16.tga
+ blendFunc Blend
+ }
+}
+
+spark00
+{
+ nopicmip
+ {
+ map gfx/spark/spark00.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+spark01frame01
+{
+ nopicmip
+ {
+ map gfx/spark/spark01frame01.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+spark01frame02
+{
+ nopicmip
+ {
+ map gfx/spark/spark01frame02.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
+
+spark01frame03
+{
+ nopicmip
+ {
+ map gfx/spark/spark01frame03.jpg
+ blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_humanmodelshaders.shader b/assets/scripts/g_humanmodelshaders.shader new file mode 100644 index 0000000..25ac489 --- /dev/null +++ b/assets/scripts/g_humanmodelshaders.shader @@ -0,0 +1,653 @@ +// Human Player Model
+
+models/players/human_base/h_base
+{
+ cull disable
+ {
+ map models/players/human_base/h_base.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+
+models/players/human_base/h_helmet
+{
+ cull disable
+ {
+ map models/players/human_base/h_helmet.tga
+ rgbGen lightingDiffuse
+ alphaFunc GE128
+ }
+}
+
+
+
+
+
+// Jetpack
+
+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
+ }
+}
+
+
+
+
+
+// Defense Computer
+
+models/buildables/dcc/comp_pipes
+{
+ {
+ map models/buildables/dcc/comp_pipes.tga
+ rgbGen lightingDiffuse
+ tcGen environment
+ }
+}
+
+models/buildables/dcc/comp_display
+{
+ {
+ map models/buildables/dcc/comp_grad.tga
+ rgbGen identity
+ tcMod scroll 0 1
+ }
+ {
+ map models/buildables/dcc/comp_display.tga
+ blendfunc gl_one gl_src_alpha
+ rgbGen identity
+ }
+}
+
+
+
+
+
+// Medipad
+
+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
+
+ {
+ map models/buildables/medistat/medi_cone.jpg
+ blendfunc add
+ rgbGen lightingDiffuse
+ tcMod scroll 1 0
+ }
+ {
+ map 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
+ }
+}
+
+
+
+
+
+// Reactor Core
+
+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
+ }
+}
+
+models/buildables/reactor/reactor_meter
+{
+ {
+ map models/buildables/reactor/reactor_meter.tga
+ rgbGen lightingDiffuse
+ }
+}
+
+models/buildables/reactor/reactor_display
+{
+ {
+ map models/buildables/reactor/reactor_display.tga
+ rgbGen identity
+ }
+}
+
+models/buildables/reactor/reactor_bolt
+{
+ cull disable
+ {
+ map models/buildables/reactor/reactor_bolt.tga
+ blendfunc add
+ rgbGen identity
+ tcMod scroll 2 0
+ }
+}
+
+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
+ }
+}
+
+models/buildables/arm/arm_panel2
+{
+ {
+ map models/buildables/arm/arm_panel2.tga
+ rgbGen identity
+ }
+}
+
+models/buildables/arm/arm_panel3
+{
+ {
+ map models/buildables/arm/arm_panel3.tga
+ rgbGen identity
+ }
+}
+
+
+
+
+
+// Stasis
+
+models/mapobjects/stasis/chamber
+{
+ {
+ map models/mapobjects/stasis/chamber.tga
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/stasis/lifemeter
+{
+ {
+ map models/mapobjects/stasis/lifemeter.tga
+ rgbGen vertex
+ }
+}
+
+models/mapobjects/stasis/lifemeter2
+{
+ {
+ map models/mapobjects/stasis/meters.tga
+ rgbGen identityLighting
+ tcMod scroll 0.5 0
+ }
+ {
+ map models/mapobjects/stasis/lifemeter2.tga
+ alphaFunc GE128
+ }
+}
+
+models/mapobjects/stasis/window
+{
+ {
+ map models/mapobjects/stasis/window.tga
+ blendfunc filter
+ }
+ {
+ map models/mapobjects/stasis/bubbles.tga
+ blendfunc add
+
+ tcMod scroll 0 0.2
+ tcMod scale 2 1
+ }
+}
+
+models/mapobjects/stasis/flowpipe
+{
+ {
+ map models/mapobjects/stasis/flowpipe.tga
+
+ tcMod scale 5 5
+ tcMod scroll 1 0
+ }
+ {
+ map models/buildables/overmind/ref2.tga
+ blendfunc filter
+
+ tcGen environment
+ }
+}
+
+models/mapobjects/stasis/bubbles
+{
+ {
+ map models/mapobjects/stasis/bubbles.tga
+ rgbGen wave noise 0 1 0 1
+ tcMod scroll 0 0.5
+ }
+}
+
+
+
+
+
+// Telenode
+
+models/buildables/telenode/telenode_top
+{
+ {
+ map models/buildables/telenode/telenode_top.tga
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/buildables/overmind/ref2.tga
+ blendfunc filter
+ rgbGen identity
+ tcGen environment
+ }
+}
+
+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/overmind/ref2.tga
+ blendfunc filter
+ rgbGen identity
+ tcGen environment
+ }
+}
+
+
+
+
+
+// Tesla Generator
+
+models/buildables/tesla/tesla_main
+{
+ {
+ map models/buildables/tesla/tesla_main.tga
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/buildables/overmind/ref2.tga
+ blendfunc filter
+ rgbGen identity
+ tcGen environment
+ }
+}
+
+models/buildables/tesla/tesla_ball
+{
+ {
+ map models/buildables/tesla/tesla_ball.tga
+ rgbGen lightingDiffuse
+ tcGen environment
+ }
+}
+
+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
+ }
+}
+
+
+
+
+
+// Turret
+
+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
+ }
+}
+
+models/buildables/mgturret/turret_shiny
+{
+ {
+ map models/buildables/mgturret/turret_shiny.tga
+ rgbGen lightingDiffuse
+ }
+ {
+ map models/buildables/mgturret/ref_map.tga
+ blendfunc filter
+ rgbGen identity
+ tcGen environment
+ }
+}
+
+
+
+
+
+// Construction Kit //
+
+models/weapons/ckit/rep_cyl
+{
+ cull disable
+ {
+ map models/weapons/ckit/rep_cyl.jpg
+ blendfunc add
+ tcMod scroll 0.2 0
+ }
+ {
+ map models/weapons/ckit/lines2.jpg
+ blendfunc add
+ tcMod scroll 0 -0.2
+ }
+}
+
+models/weapons/ckit/screen
+{
+ {
+ map models/weapons/ckit/screen.jpg
+ }
+
+ {
+ map models/weapons/ckit/scroll.jpg
+ blendfunc add
+ tcMod scroll 10 -0.4
+ }
+}
+
+models/weapons/ackit/rep_cyl
+{
+ cull disable
+ {
+ map models/weapons/ackit/rep_cyl.jpg
+ blendfunc add
+ tcMod scroll 0.2 0
+ }
+ {
+ map models/weapons/ackit/lines2.jpg
+ blendfunc add
+ tcMod scroll 0 -0.2
+ }
+}
+
+models/weapons/ackit/advscreen
+{
+ {
+ map models/weapons/ackit/advscreen.jpg
+ }
+
+ {
+ map models/weapons/ackit/scroll.jpg
+ blendfunc add
+ tcMod scroll 10 -0.4
+ }
+}
+
+
+
+
+
+// Advanced Construction Kit
+
+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/particle
+{
+ cull disable
+ {
+ map models/weapons/ackit/particle.jpg
+ blendfunc add
+ rgbGen identity
+ tcMod scroll 0.02 -0.4
+ }
+}
+
+models/weapons/ackit/screen
+{
+ {
+ map models/weapons/ackit/screen.jpg
+ }
+
+ {
+ map models/weapons/ackit/scroll.jpg
+ blendfunc add
+ rgbGen lightingDiffuse
+ tcMod scroll 10.0 -0.2
+ }
+}
+
+models/weapons/ackit/screen2
+{
+ {
+ map models/weapons/ackit/screen2.jpg
+ }
+
+ {
+ map models/weapons/ackit/scroll2.jpg
+ blendfunc add
+ rgbGen lightingDiffuse
+ tcMod scroll 0.2 -10.0
+ }
+}
+
+
+
+
+
+// Flamer
+
+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
+ surfaceparm trans
+ {
+ map models/weapons/flamer/flamer.tga
+ depthWrite
+ alphaFunc GE128
+ rgbGen lightingDiffuse
+ blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
+ }
+}
+
+
+
+
+
+// Grenade
+
+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
+ }
+}
+
+
+
+
+
+// Mass Driver
+
+models/weapons/mdriver/glow
+{
+ cull disable
+ {
+ map models/weapons/mdriver/glow.jpg
+ blendfunc GL_ONE GL_ONE
+ tcMod scroll -9.0 9.0
+ }
+}
+
+
+
+
+
+// Pain Saw
+
+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
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_humanweaponfx.particle b/assets/scripts/g_humanweaponfx.particle new file mode 100644 index 0000000..89f0b9e --- /dev/null +++ b/assets/scripts/g_humanweaponfx.particle @@ -0,0 +1,907 @@ +models/weapons/blaster/missilePS // Blaster // Projectile
+{
+ ejector // projectile
+ {
+ particle
+ {
+ shader sync spark00
+
+ parentVelocityFraction 0
+
+ radius 0 4 4
+ alpha 0 1 1
+ bounce cull
+
+ lifeTime 40
+ }
+
+ count infinite
+ delay 0
+ period 1 - 0
+ }
+ ejector // impact sound hack
+ {
+ particle
+ {
+ shader sync spark00
+
+ parentVelocityFraction 1
+
+ radius 0 0 0
+ alpha 0 0 0
+ bounce 1
+ bounceSound 1 models/weapons/blaster/hit.wav
+
+ lifeTime 4000
+ }
+
+ count 1
+ delay 0
+ period 4000 - 0
+ }
+}
+
+models/weapons/chaingun/muzzlePS // Chaingun // Shell Casings
+{
+ ejector
+ {
+ particle
+ {
+ model models/weapons/shells/rifle-shell.md3
+
+ displacement -5 -3 0 ~0.0
+
+ parentVelocityFraction 0.85
+
+ velocityType static_transform
+ velocityDir linear
+ velocityMagnitude 200
+ velocity 0 -1 3 ~10
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 800
+ acceleration 0 0 -1 0
+
+ rotation 0 ~360 -
+ radius 4800 1.0 0
+ bounce 0.6
+
+ lifeTime 5000
+ }
+
+ count 1
+ delay 0
+ period 0 - ~0%
+ }
+}
+
+models/weapons/flamer/muzzlePS // Flamer
+{
+ ejector
+ {
+ particle
+ {
+ shader sync 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 0 0
+
+ parentVelocityFraction 0.65
+
+ velocityType cent
+ velocityDir linear
+ velocityMagnitude 200
+ velocity 0 0 0 ~0
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 50
+ acceleration 0 0 1 ~0
+
+ radius 40 2 40
+ alpha 0 1 0
+ rotation 0 ~180 -
+ bounce 0.1
+
+ lifeTime 900
+ }
+ count infinite
+ delay 0
+ period 20 - 0
+ }
+}
+
+models/weapons/grenade/impactPS // Grenade
+{
+ ejector
+ {
+ particle
+ {
+ shader sync 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 11 ~0
+
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 200~75%
+ velocity 0 0 1 ~10
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 300
+ acceleration 0 0 -1 0
+
+ radius 0 20 120
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 500
+
+ childSystem models/weapons/grenade/impactTrailPS
+ }
+
+ count 5
+ delay 50
+ period 10 - ~0%
+ }
+
+ ejector
+ {
+ particle // fast smoke
+ {
+ shader sync smoke01 smoke02 smoke03 smoke04 smoke05 smoke06 smoke07 smoke08 smoke09 smoke10 smoke11 smoke12 smoke13 smoke14 smoke15 smoke16
+
+ displacement ~20 ~20 ~20 10
+
+ parentVelocityFraction 0.5
+
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 150
+ velocity ~1 ~1 0.2 ~50
+
+ radius 0 5~20 200~20
+ alpha 0 0.4 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 1000
+ }
+
+ particle // ring 1
+ {
+ shader sync radialblast01 radialblast02 radialblast03 radialblast04 radialblast05
+
+ displacement 0 0 0 0
+
+ normalDisplacement 15
+
+ velocityType static
+ accelerationType static
+
+ radius 0 40 150
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 200
+ }
+
+ particle // ring 2
+ {
+ shader sync radialblast03 radialblast03 radialblast03 radialblast03 radialblast04 radialblast05
+
+ displacement 0 0 0 0
+
+ normalDisplacement 15
+
+ velocityType static
+ accelerationType static
+
+ radius 0 0 100
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 100
+ }
+
+ particle // explosion flash
+ {
+ shader sync explosionflash
+
+ displacement 0 0 0 0
+
+ normalDisplacement 100
+
+ velocityType static
+ accelerationType static
+
+ radius 0 100 0
+ alpha 80 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ scaleWithCharge 0.1
+ onDeathSystem models/weapons/grenade/impactTrailPS
+
+ lifeTime 200
+ }
+
+ count 1
+ delay 0
+ period 0 - 0
+ }
+
+ ejector // sparks
+ {
+ particle // spam some sparks
+ {
+ shader sync spark00
+
+ 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 2 0
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0.4~100%
+
+ lifeTime 3000~90%
+ }
+
+ count 100
+ delay 0
+ period 0 - 0
+ }
+}
+
+models/weapons/grenade/impactTrailPS // Grenade
+{
+ ejector
+ {
+ particle
+ {
+ shader sync 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 0 ~16
+
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 30
+ velocity 0 0 -1 0
+
+ radius 0 30 10
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 500
+ }
+
+ count 5
+ delay 10
+ period 40 - 0
+ }
+}
+
+models/weapons/lasgun/impactPS
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/lasgun/purple_particle
+
+ displacement 0 0 0 ~2
+ normalDisplacement 7
+
+ velocityType normal
+ velocityDir linear
+ velocityMagnitude 100
+ velocity 0 0 0 ~90
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 600
+ acceleration 0 0 -1 ~10
+
+ radius 0 3~2 0
+ alpha 0 1 1
+ rotation 0 ~360 -
+ bounce 0.5
+
+ lifeTime 500
+ }
+
+ count 3
+ delay 0
+ period 0 - 0
+ }
+}
+
+models/weapons/lcannon/missilePS // Lucifer Cannon // Primary Projectile
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/blaster/orange_particle
+
+ displacement 0 0 0 ~3
+
+ parentVelocityFraction 1
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 120
+ velocity 0 0 1 ~360
+
+ radius 0 6~20% 1
+ alpha 0 1 1
+ bounce cull
+
+ lifeTime 1000
+ }
+
+ count infinite
+ delay 0
+ period 50 - 0
+ }
+}
+
+models/weapons/lcannon/secondaryMissilePS // Lucifer Cannon // Secondary Projectile
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/blaster/orange_particle
+
+ displacement 0 0 0 ~3
+
+ parentVelocityFraction 0.5
+
+ radius 0 2 0
+ alpha 0 1 0
+ bounce cull
+
+ lifeTime 400
+ }
+
+ count infinite
+ delay 0
+ period 25 - 0
+ }
+}
+
+models/weapons/lcannon/impactPS // Lucifer Cannon // Primary Impact
+{
+ ejector // air particles
+ {
+ particle
+ {
+ shader sync spark00
+
+ displacement 0 0 0 ~2
+
+ normalDisplacement 20
+
+ velocityType normal
+ velocityDir linear
+ velocityMagnitude 300
+ velocity 0 0 0 ~160
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 1
+ acceleration 0 0 0 0
+
+ radius 0 5~75% 0
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0.8
+
+ lifeTime 1200
+ }
+
+ count 20
+ delay 0
+ period 0 - 0
+ }
+ ejector // blast fx
+ {
+ particle // ring 1
+ {
+ shader sync radialblast01 radialblast02 radialblast03 radialblast04 radialblast05
+
+ displacement 0 0 0 0
+
+ normalDisplacement 15
+
+ velocityType static
+ accelerationType static
+
+ radius 0 40 150
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ scaleWithCharge 0.1
+
+ lifeTime 200
+ }
+
+ particle // ring 2
+ {
+ shader sync radialblast03 radialblast03 radialblast03 radialblast03 radialblast04 radialblast05
+
+ displacement 0 0 0 0
+
+ normalDisplacement 15
+
+ velocityType static
+ accelerationType static
+
+ radius 0 0 100
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ scaleWithCharge 0.10
+
+ lifeTime 100
+ }
+
+ particle // flash
+ {
+ shader sync explosionflash
+
+ displacement 0 0 0 0
+
+ normalDisplacement 100
+
+ velocityType static
+ accelerationType static
+
+ radius 0 100 0
+ alpha 80 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ scaleWithCharge 0.1
+
+ lifeTime 200
+ }
+
+ count 1
+ delay 0
+ period 0 - 0
+ }
+}
+
+models/weapons/lcannon/secondaryImpactPS // Lucifer Cannon // Secondary Impact
+{
+ ejector // air particles
+ {
+ particle
+ {
+ shader sync spark00
+
+ displacement 0 0 0 ~2
+
+ normalDisplacement 20
+
+ velocityType normal
+ velocityDir linear
+ velocityMagnitude 300
+ velocity 0 0 0 ~160
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 1
+ acceleration 0 0 0 0
+
+ radius 0 4~75% 0
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0.8
+
+ lifeTime 800
+ }
+ count 10
+ delay 0
+ period 0 - 0
+ }
+
+ ejector // blast fx
+ {
+ particle // ring 1
+ {
+ shader sync radialblast01 radialblast02 radialblast03 radialblast04 radialblast05
+
+ displacement 0 0 0 0
+
+ normalDisplacement 15
+
+ velocityType static
+ accelerationType static
+
+ radius 0 20 75
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ scaleWithCharge 0.1
+
+ lifeTime 200
+ }
+
+ particle // ring 2
+ {
+ shader sync radialblast03 radialblast03 radialblast03 radialblast03 radialblast04 radialblast05
+
+ displacement 0 0 0 0
+
+ normalDisplacement 15
+
+ velocityType static
+ accelerationType static
+
+ radius 0 0 50
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ scaleWithCharge 0.10
+
+ lifeTime 100
+ }
+
+ particle // flash
+ {
+ shader sync explosionflash
+
+ displacement 0 0 0 0
+
+ normalDisplacement 100
+
+ velocityType static
+ accelerationType static
+
+ radius 0 50 0
+ alpha 80 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ scaleWithCharge 0.1
+
+ lifeTime 200
+ }
+
+ count 1
+ delay 0
+ period 0 - 0
+ }
+}
+
+models/weapons/mdriver/impactPS // Mass Driver
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/mdriver/green_particle
+
+ displacement 0 0 0 ~2
+
+ normalDisplacement 10
+
+ velocityType normal
+ velocityDir linear
+ velocityMagnitude 400
+ velocity 0 0 0 ~80
+
+ accelerationType normal
+ accelerationDir linear
+ accelerationMagnitude 200
+ acceleration 0 0 1 ~360
+
+ radius 0 6 4
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0.5
+
+ lifeTime 1000
+ }
+
+ count 10
+ delay 0
+ period 0 - 0
+ }
+}
+
+models/weapons/psaw/impactPS // Painsaw // Blue Particles
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/psaw/blue_particle
+
+ displacement 0 0 10 ~2
+
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 300
+ velocity 0 0 1 ~300
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 800
+ acceleration 0 0 -1 ~10
+
+ radius 0 5~2 0
+ alpha 0 1 1
+ rotation 0 ~360 -
+ bounce 0.5
+
+ lifeTime 1750
+ }
+
+ count 1
+ delay 0
+ period 0 - 0
+ }
+}
+
+models/weapons/prifle/impactPS
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/prifle/red_blob
+
+ radius 0 3 6
+ alpha 70 1 0
+ rotation 0 ~360 -
+
+ lifeTime 140
+ }
+
+ count 1
+ delay 0
+ period 0 - 0
+ }
+}
+
+models/weapons/prifle/missilePS // Pulse Rifle // Projectile
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/prifle/red_blob
+
+ parentVelocityFraction 0.8
+
+ radius 0 2 1.5
+ alpha 0 8 0
+ bounce 0.01
+
+ lifeTime 400
+ }
+
+ count infinite
+ delay 0
+ period 10 - 0
+ }
+}
+
+models/weapons/rifle/impactPS // Rifle // Impact FX
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/rifle/verysmallrock
+
+ displacement 0 0 0 ~4
+
+ velocityType normal
+ velocityDir linear
+ velocityMagnitude 100
+ velocity 0 0 1 ~20
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 600
+ acceleration 0 0 -1 0
+
+ radius 0 1 1
+ alpha 0 1 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 350
+ }
+
+ count 0~2
+ delay ~100
+ period 0 - 0
+ }
+
+ ejector
+ {
+ particle
+ {
+ shader sync smoke08 smoke09 smoke10 smoke11 smoke12 smoke14 smoke15 smoke16
+
+ normalDisplacement ~100
+
+ velocityType normal
+ velocityDir linear
+ velocityMagnitude 30
+ velocity 0 0 1 0
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 30
+ acceleration 0 0 -1 0
+
+ radius 0 6 12
+ alpha 0 0.5 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 500
+ }
+
+ count 4
+ delay 0
+ period 5 - 0
+ }
+}
+
+models/weapons/rifle/muzzlePS // Rifle
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/sprites/smoke
+
+ displacement 0 0 0 0
+
+ parentVelocityFraction 0.9
+
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 20
+ velocity 0 0 0 0
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 300
+ acceleration 0 0 1 0
+
+ radius 0 2 4
+ alpha 0 0.4 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 200
+ }
+
+ count 1
+ delay 0
+ period 0 - 0
+ }
+
+ ejector // shell casings
+ {
+ particle
+ {
+ model models/weapons/shells/rifle-shell.md3
+
+ displacement -5 -3 0 0
+
+ parentVelocityFraction 0.85
+
+ velocityType static_transform
+ velocityDir linear
+ velocityMagnitude 200
+ velocity 0 -1 3 ~10
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 800
+ acceleration 0 0 -1 0
+
+ radius 0 1.0 -
+ bounce 0.5
+
+ lifeTime 5000
+ }
+
+ count 1
+ delay 0
+ period 0 - 0
+ }
+}
+
+models/weapons/shotgun/muzzlePS // Shotgun
+{
+ ejector
+ {
+ particle
+ {
+ shader sync gfx/sprites/smoke
+
+ displacement 0 0 0 0
+
+ parentVelocityFraction 0.9
+
+ velocityType static
+ velocityDir linear
+ velocityMagnitude 20
+ velocity 0 0 0 0
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 300
+ acceleration 0 0 1 0
+
+ radius 0 2 4
+ alpha 0 0.4 0
+ rotation 0 ~360 -
+ bounce 0
+
+ lifeTime 200
+ }
+
+ count 1
+ delay 0
+ period 0 - 0
+ }
+
+ ejector // shell casings
+ {
+ particle
+ {
+ model models/weapons/shells/shotgun-shell.md3
+
+ displacement -5 -3 0 ~0.0
+
+ parentVelocityFraction 0.85
+
+ velocityType static_transform
+ velocityDir linear
+ velocityMagnitude 200
+ velocity 0 -1 3 ~10
+
+ accelerationType static
+ accelerationDir linear
+ accelerationMagnitude 800
+ acceleration 0 0 -1 0
+
+ radius 0 1 -
+ bounce 0.5
+
+ lifeTime 5000
+ }
+
+ count 1
+ delay 0
+ period 0 - 0
+ }
+}
\ No newline at end of file diff --git a/assets/scripts/g_humanweaponfx.shader b/assets/scripts/g_humanweaponfx.shader new file mode 100644 index 0000000..fe22dc4 --- /dev/null +++ b/assets/scripts/g_humanweaponfx.shader @@ -0,0 +1,142 @@ +gfx/blaster/orange_particle +{ + cull disable + { + map gfx/blaster/orange_particle.jpg + blendFunc Add + alphaGen vertex + rgbGen vertex + } +} + +gfx/mdriver/green_particle +{ + cull disable + { + map gfx/mdriver/green_particle.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + } +} + +gfx/mdriver/trail +{ + nomipmaps + cull disable + { + map gfx/mdriver/trail.tga + blendFunc blend + } +} + +gfx/psaw/blue_particle +{ + cull disable + { + map gfx/psaw/blue_particle.jpg + blendFunc GL_ONE GL_ONE + alphaGen vertex + rgbGen vertex + } +} + +gfx/rifle/verysmallrock +{ + cull disable + { + map gfx/rifle/verysmallrock.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + alphaGen vertex + rgbGen vertex + } +} + +gfx/prifle/red_blob +{ + cull disable + { + map gfx/prifle/red_blob.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + alphaGen vertex + } +} + +gfx/prifle/red_streak +{ + nomipmaps + cull disable + { + map gfx/prifle/red_streak.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + alphaGen vertex + } +} + +gfx/lcannon/primary +{ + cull disable + { + animmap 24 gfx/lcannon/primary_1.jpg gfx/lcannon/primary_2.jpg gfx/lcannon/primary_3.jpg gfx/lcannon/primary_4.jpg + blendFunc GL_ONE GL_ONE + } +} + +gfx/lasgun/purple_particle +{ + cull disable + { + map gfx/lasgun/purple_particle.tga + blendFunc GL_ONE GL_ONE + } +} + +radialblast01 +{ + cull disable + nopicmip + { + map gfx/lcannon/radial01.jpg + blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR + } +} + +radialblast02 +{ + cull disable + nopicmip + { + map gfx/lcannon/radial02.jpg + blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR + } +} + +radialblast03 +{ + cull disable + nopicmip + { + map gfx/lcannon/radial03.jpg + blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR + } +} + +radialblast04 +{ + cull disable + nopicmip + { + map gfx/lcannon/radial04.jpg + blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR + } +} + +radialblast05 +{ + cull disable + nopicmip + { + map gfx/lcannon/radial05.jpg + blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR + } +}
\ No newline at end of file diff --git a/assets/scripts/g_humanweaponfx.trail b/assets/scripts/g_humanweaponfx.trail new file mode 100644 index 0000000..75d5711 --- /dev/null +++ b/assets/scripts/g_humanweaponfx.trail @@ -0,0 +1,25 @@ +models/weapons/mdriver/fireTS +{ + beam + { + shader gfx/mdriver/trail + width 3.0 3.0 + textureType stretch 0.94 0.03 + } + lifeTime 70 +} + +models/weapons/prifle/missileTS +{ + beam + { + shader gfx/prifle/red_streak + + segments 2 + width 6.0 4.0 + alpha 1.0 0.1 + segmentTime 120 + + textureType stretch 0.0 1.0 + } +}
\ No newline at end of file diff --git a/assets/scripts/g_jetpack.particle b/assets/scripts/g_jetpack.particle new file mode 100644 index 0000000..398aafa --- /dev/null +++ b/assets/scripts/g_jetpack.particle @@ -0,0 +1,95 @@ +jetPackDescendPS +{ + ejector + { + particle + { + shader sync gfx/sprites/smoke_blue + displacement 0 0 0 0 + + velocityType static + velocityDir linear + velocityMagnitude 50 + velocity 0 0 -1 ~15 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 40 + alpha 250 .15 0 + rotation 0 ~360 ~360 + bounce 0.0 + + lifeTime 1000 + } + count infinite + delay 0 + period 45 - ~0% + } +} + +jetPackAscendPS +{ + ejector + { + particle + { + shader sync gfx/sprites/smoke_blue + displacement 0 0 0 0 + + velocityType static + velocityDir linear + velocityMagnitude 50 + velocity 0 0 -1 ~15 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 40 + alpha 250 .30 0 + rotation 0 ~360 ~360 + bounce 0.0 + + lifeTime 2000 + } + count infinite + delay 0 + period 45 - ~0% + } +} + +jetPackHoverPS +{ + ejector + { + particle + { + shader sync gfx/sprites/smoke_blue + displacement 0 0 0 0 + + velocityType static + velocityDir linear + velocityMagnitude 50 + velocity 0 0 -1 ~15 + + accelerationType static + accelerationDir linear + acceleration 0 0 -1 ~5 + accelerationMagnitude 25 + + radius 0 5 40 + alpha 250 .20 0 + rotation 0 ~360 ~360 + bounce 0.0 + + lifeTime 1500 + } + count infinite + delay 0 + period 45 - ~0% + } +}
\ No newline at end of file diff --git a/assets/scripts/g_lightning.trail b/assets/scripts/g_lightning.trail new file mode 100644 index 0000000..0dafd8d --- /dev/null +++ b/assets/scripts/g_lightning.trail @@ -0,0 +1,61 @@ +models/buildables/tesla/zap // Tesla Generator Lightning +{ + beam + { + shader models/ammo/tesla/tesla_bolt + + segments 9 + width 8 8 + color { 0.75 0.5 1 } - + + textureType repeat front 100 + + jitter 12 200 + jitter 2 20 + } + + beam + { + shader models/ammo/tesla/tesla_bolt + + segments 9 + width 8 8 + color { 0.5 0.8 1 } - + + textureType repeat back 50 + + jitter 12 150 + jitter 2 30 + } +} + +models/weapons/lev2zap/lightning // Advanced Marauder Lightning +{ + beam + { + shader models/ammo/tesla/tesla_bolt + + segments 5 + width 16.0 16.0 + color { 0.8 0.8 0.8 } - + + textureType repeat front 100.0 + + jitter 4 200 + jitter 1 20 + } + + beam + { + shader models/ammo/tesla/tesla_bolt + + segments 8 + width 5 5 + color { 0.5 0.8 1 } - + + textureType repeat back 50 + + jitter 2 150 + jitter 1 30 + } +}
\ No newline at end of file diff --git a/assets/scripts/g_misc.shader b/assets/scripts/g_misc.shader new file mode 100644 index 0000000..bafde0a --- /dev/null +++ b/assets/scripts/g_misc.shader @@ -0,0 +1,141 @@ +// unsorted stuff + +gfx/misc/tracer +{ + cull none + { + map gfx/sprites/spark.tga + blendFunc blend + } +} + +gfx/damage/fullscreen_painblend +{ + { + map gfx/damage/fullscreen_painblend.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + tcMod rotate 90 + } + + { + map gfx/damage/fullscreen_painblend.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + tcMod rotate -90 + } +} + +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/misc/nopower +{ + { + map gfx/misc/nopower.tga + blendfunc add + rgbGen identity + } +} + +models/mapobjects/plant_life/fern_leaf +{ + cull disable + nopicmip + { + map models/mapobjects/plant_life/fern_leaf.tga + alphaFunc GE128 + depthWrite + rgbGen vertex + } +} + +models/mapobjects/plant_life/palm_leaf +{ + cull disable + nopicmip + { + map models/mapobjects/plant_life/palm_leaf.tga + alphaFunc GE128 + depthWrite + rgbGen vertex + } +} + +models/mapobjects/plant_life/grass +{ + cull disable + nopicmip + { + map models/mapobjects/plant_life/grass.tga + alphaFunc GE128 + depthWrite + rgbGen vertex + } +}
\ No newline at end of file diff --git a/assets/scripts/g_muzzleflashes.shader b/assets/scripts/g_muzzleflashes.shader new file mode 100644 index 0000000..2a3e7b4 --- /dev/null +++ b/assets/scripts/g_muzzleflashes.shader @@ -0,0 +1,101 @@ +models/weapons/rifle/flash // Rifle
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/rifle/flash.jpg
+ tcMod rotate 3000
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons/chaingun/flash // Chaingun
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/chaingun/flash.jpg
+ tcMod rotate 3000
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons/flamer/flash // Flamer
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/flamer/flash.jpg
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons/lgun/flash // Lasgun
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/lgun/flash.jpg
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons/lcannon/flash // Lucifer Cannon
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/lcannon/flash.jpg
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons/mdriver/flash // Mass Driver
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/mdriver/flash.jpg
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons/psaw/flash // Pain Saw
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/psaw/flash.jpg
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons/prifle/flash // Pulse Rifle
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/prifle/flash.jpg
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons/shotgun/flash // Shotgun
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/shotgun/flash.jpg
+ blendfunc GL_ONE GL_ONE
+ }
+}
+
+models/weapons/blaster/flash // Blaster
+{
+ sort additive
+ cull disable
+ {
+ map models/weapons/blaster/flash.jpg
+ blendfunc GL_ONE GL_ONE
+ }
+}
diff --git a/assets/scripts/particles_reference.txt b/assets/scripts/particles_reference.txt new file mode 100644 index 0000000..612c162 --- /dev/null +++ b/assets/scripts/particles_reference.txt @@ -0,0 +1,58 @@ +Particle system variables
+--------------------------------------------------------------------------------
+
+shader <fps> | sync <shader1> <shader2> ... <shaderN> - this specifies the shaders to use for the particle. The frame rate can be set to a static rate or the sync parameter can be used in which case the frame rate will be synchronised to the lifetime of the particle such that the first frame is displayed on birth and the last frame is displayed immediately before death.
+model <model1> <model2> ... <modelN> - use one of the specified models as the particle. This cannot be used in conjunction with the shader keyword.
+modelAnmation <firstFrame> <numFrames> <loopFrames> <fps> | sync - animation parameters to use when model particles are employed.
+
+lifeTime <time> - the lifetime of the particle.
+
+radius <delay> <initial> <final> - the size of the particle throughout its lifetime. The delay parameter specifies the time in msec before radius scaling begins. The initial and final parameters specify the radii of the particle in quake units.
+alpha <delay> <initial> <final> - the opacity of the particle throughout its lifetime. The delay parameter specifies the time in msec before alpha scaling begins. The initial and final parameters specify the alpha of the particle where 1.0 is totally opaque and 0.0 is totally transparent.
+rotation <delay> <initial> <final> - the rotation of the particle throughout its lifetime. The delay parameter specifies the time in msec before the rotation begins. The initial and final parameters specify the rotation of the particle in degrees.
+
+displacement <x> <y> <z> <variance> - a static displacement about the attachment point. The variance parameter specifies a random displacement in all axes.
+normalDisplacement <displacement> - for particle systems that have their normal set (impact particle systems for example) this specifies the magnitude of a displacement along the normal.
+
+velocityType static | static_transform |tag |cent |normal - this specifies how the particle will compute its initial velocity. static means it is specified statically in the .particle file, static_transform means the same, except that it is transformed by the orientation matrix of what it is attached to, tag means the velocity is in the direction of the tag it is attached to, cent means the velocity is in the direction of the cent it is attached to and normal means the velocity is in the direction of the particle system normal.
+velocityDir linear | point - this specifies whether the initial velocity is computed as a simple direction or as the direction towards a secondary point (defined by velocityPoint or dynamically through velocityType cent).
+velocity <x> <y> <z> <variance> - for when velocityType static is present this specifies the direction. The variance here is specified in degrees e.g. "~5" - up to 5 degrees deviation.
+velocityMagnitude <magnitude> - the magnitude of the velocity.
+velocityPoint <x> <y> <z> <variance> - for when velocityType static and velocityDir point are present this specifies the point to move towards.
+parentVelocityFraction <fraction> - for when the particle system is attached to a cent this specifies the fraction of the cent’s velocity that is added to the particle’s velocity.
+
+accelerationType static | static_transform | tag | cent | normal - this specifies how the particle will compute its acceleration. static means it is specified statically in the .particle file, static_transform means the same, except that it is transformed by the orientation matrix of what it is attached to, tag means the acceleration is in the direction of the tag it is attached to, cent means the acceleration is in the direction of the cent it is attached to and normal means the acceleration is in the direction of the particle system normal.
+accelerationDir linear | point - this specifies whether the acceleration is computed as a simple direction or as the direction towards a secondary point (defined by accelerationPoint or dynamically through accelerationType cent).
+acceleration <x> <y> <z> <variance> - for when accelerationType static is present this specifies the direction. The variance here is specified in degrees e.g. "~5" - up to 5 degrees deviation.
+accelerationMagnitude <magnitude> - the magnitude of the acceleration.
+accelerationPoint <x> <y> <z> <variance> - for when accelerationType static and accelerationDir point are present this specifies the point to move towards.
+bounce <fraction> | cull - the fraction of velocity that is reflected when a particle collides. If this is set to 0.0 the particle won’t collide. When cull is used particles are culled as soon as they collide with objects.
+bounceMark <count> <radius> <shader> - make a mark at each bounce point for up to <count> bounces.
+bounceSound <count> <sound> - make a sound at each bounce point for up to <count> bounces.
+
+dynamicLight <delayRadius> <startRadius> <endRadius> { <r> <g> <b> } - attach a dynamic light to this particle.
+color <delay> { <ir> <ig> <ib> } { <fr> <fg> <fb> } - color the particle where <i.> refers to the initial color component and <f.> refers to the final color component.
+
+childSystem <particle system> - specifies a particle system to attach to this particle.
+childTrailSystem <trail system> - specifies a trail system to attach to this particle.
+onDeathSystem <particle system> - specifies a particle system to spawn at the point where this particle died.
+
+overdrawProtection - cull particles that occupy a large amount of screen space.
+realLight - light particles using the lightgrid instead of fullbright.
+cullOnStartSolid - cull particles that are spawned inside brushes.
+
+--------------------------------------------------------------------------------
+
+
+Notes:
+------
+
+* '|' means 'or'
+* setting magnitude to 0 might cause issues
+
+
+Numerical operators
+-------------------
+~ random
+- unspecified
+% percentage
\ No newline at end of file diff --git a/assets/scripts/ui_crosshairs.shader b/assets/scripts/ui_crosshairs.shader new file mode 100644 index 0000000..278a296 --- /dev/null +++ b/assets/scripts/ui_crosshairs.shader @@ -0,0 +1,96 @@ +gfx/2d/crosshair-alien_s +{ + nopicmip + { + map gfx/2d/crosshair-alien.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-rifle_s +{ + nopicmip + { + map gfx/2d/crosshair-rifle.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-prifle_s +{ + nopicmip + { + map gfx/2d/crosshair-prifle.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-chaingun_s +{ + nopicmip + { + map gfx/2d/crosshair-chaingun.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-mdriver_s +{ + nopicmip + { + map gfx/2d/crosshair-mdriver.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-lcannon_s +{ + nopicmip + { + map gfx/2d/crosshair-lcannon.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-lgun_s +{ + nopicmip + { + map gfx/2d/crosshair-lgun.tga + blendfunc blend + rgbGen vertex + } +} + +gfx/2d/crosshair-flamer_s +{ + nopicmip + { + clampmap gfx/2d/crosshair-flamer1.tga + blendfunc blend + tcmod rotate 5 + rgbGen vertex + } + { + clampmap gfx/2d/crosshair-flamer1.tga + blendfunc blend + tcmod rotate -5 + rgbGen vertex + } +} + +gfx/2d/crosshair-psaw +{ + nopicmip + { + map gfx/2d/crosshair-psaw.tga + blendfunc blend + rgbGen vertex + } +}
\ No newline at end of file diff --git a/assets/scripts/ui_hud.shader b/assets/scripts/ui_hud.shader new file mode 100644 index 0000000..f970d56 --- /dev/null +++ b/assets/scripts/ui_hud.shader @@ -0,0 +1,38 @@ +ui/assets/neutral/squad_h +{ + nopicmip + { + map ui/assets/neutral/squad_h.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbgen vertex + } +} + +ui/assets/neutral/squad_v +{ + nopicmip + { + map ui/assets/neutral/squad_v.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbgen vertex + } +} + +gfx/damage/fullscreen_painblend +{ + { + map gfx/damage/fullscreen_painblend.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + tcMod rotate 90 + } + + { + map gfx/damage/fullscreen_painblend.tga + blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA + rgbGen vertex + alphaGen vertex + tcMod rotate -90 + } +}
\ No newline at end of file diff --git a/assets/scripts/ui_mainmenu.shader b/assets/scripts/ui_mainmenu.shader new file mode 100644 index 0000000..3664f3c --- /dev/null +++ b/assets/scripts/ui_mainmenu.shader @@ -0,0 +1,43 @@ +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/trem_black
+{
+ nopicmip
+ {
+ map ui/assets/title.tga
+ blendfunc blend
+ //alphaFunc GE128
+ rgbGen identity
+ }
+}
+
diff --git a/assets/scripts/water.shader b/assets/scripts/water.shader new file mode 100644 index 0000000..ff306cd --- /dev/null +++ b/assets/scripts/water.shader @@ -0,0 +1,57 @@ +//deep ocean
+textures/misc/dark_water
+{
+ {
+ map textures/misc/dark_water.tga
+ tcMod rotate 1
+ }
+ {
+ map textures/misc/caustic.tga
+ blendfunc add
+ rgbGen wave sin 0 1 0 0.05
+ tcMod scale 0.5 0.5
+ tcMod rotate 1
+ }
+ {
+ map textures/misc/caustic.tga
+ blendfunc add
+ rgbGen wave sin 0 1 0 -0.05
+ tcMod scale -0.5 -0.5
+ tcMod rotate 1
+ }
+}
+
+//tank bubbles
+textures/misc/bubbles
+{
+ cull disable
+ {
+ map textures/misc/bubbles.tga
+ blendfunc add
+ rgbGen wave noise 0 1 0 0.02
+ tcMod scroll -0.01 0.05
+ tcMod scale 2 2
+ }
+ {
+ map textures/misc/bubbles.tga
+ blendfunc add
+ rgbGen wave noise 0 1 0 0.02
+ tcMod scroll 0.01 0.02
+ tcMod scale -2 2
+ }
+}
+
+//foamy water top
+textures/misc/foam
+{
+ surfaceparm nonsolid
+ surfaceparm trans
+ surfaceparm water
+ deformVertexes wave 128 sin 0 5 6 0.5
+ tessSize 32
+ cull disable
+ {
+ map textures/misc/foam.tga
+ blendfunc add
+ }
+}
\ No newline at end of file diff --git a/assets/sound/buildables/acid_tube/acidsplat.wav b/assets/sound/buildables/acid_tube/acidsplat.wav Binary files differnew file mode 100644 index 0000000..d885e4d --- /dev/null +++ b/assets/sound/buildables/acid_tube/acidsplat.wav diff --git a/assets/sound/buildables/tesla/idle1.wav b/assets/sound/buildables/tesla/idle1.wav Binary files differnew file mode 100644 index 0000000..83f456e --- /dev/null +++ b/assets/sound/buildables/tesla/idle1.wav diff --git a/assets/sound/player/human_bsuit/step1.wav b/assets/sound/player/human_bsuit/step1.wav Binary files differnew file mode 100644 index 0000000..ecb8226 --- /dev/null +++ b/assets/sound/player/human_bsuit/step1.wav diff --git a/assets/sound/player/human_bsuit/step2.wav b/assets/sound/player/human_bsuit/step2.wav Binary files differnew file mode 100644 index 0000000..9aaa92c --- /dev/null +++ b/assets/sound/player/human_bsuit/step2.wav diff --git a/assets/sound/player/human_bsuit/step3.wav b/assets/sound/player/human_bsuit/step3.wav Binary files differnew file mode 100644 index 0000000..6392746 --- /dev/null +++ b/assets/sound/player/human_bsuit/step3.wav diff --git a/assets/sound/player/human_bsuit/step4.wav b/assets/sound/player/human_bsuit/step4.wav Binary files differnew file mode 100644 index 0000000..413affd --- /dev/null +++ b/assets/sound/player/human_bsuit/step4.wav diff --git a/assets/sound/upgrades/jetpack/lowfuel.wav b/assets/sound/upgrades/jetpack/lowfuel.wav Binary files differindex b6080d7..47cdf75 100644 --- a/assets/sound/upgrades/jetpack/lowfuel.wav +++ b/assets/sound/upgrades/jetpack/lowfuel.wav diff --git a/assets/ui/ingame_options.menu b/assets/ui/ingame_options.menu index e8b7d48..8a52f6f 100644 --- a/assets/ui/ingame_options.menu +++ b/assets/ui/ingame_options.menu @@ -310,6 +310,27 @@ } } + itemDef + { + name player + group optionsGrp + type ITEM_TYPE_MULTI + text "Announcer:" + cvar "cg_announcer" + cvarFloatList { "Enabled" 1 "Disabled" 0 } + rect CONTENT_X (CONTENT_Y+(8*ELEM_H)) CONTENT_W ELEM_H + textalign ALIGN_RIGHT + textvalign VALIGN_CENTER + textalignx CONTENT_OFF + textscale .25 + forecolor 1 1 1 1 + visible MENU_FALSE + action + { + play "sound/misc/menu1.wav"; + } + } + //////// HUD itemDef @@ -1604,7 +1625,7 @@ name cuboid group optionsGrp type ITEM_TYPE_MULTI - text "Resizing rate::" + text "Resizing rate:" cvar "cg_cuboidResizeRate" cvarFloatList { "0.1" 0.1 "0.2" 0.2 "0.5" 0.5 "1" 1 "2" 2 "5" 5 "10" 10 } rect SCONTENT_X (SCONTENT_Y+(2*ELEM_H)) SCONTENT_W ELEM_H diff --git a/src/cgame/cg_buildable.c b/src/cgame/cg_buildable.c index 20d88df..0c851b0 100644 --- a/src/cgame/cg_buildable.c +++ b/src/cgame/cg_buildable.c @@ -1024,19 +1024,20 @@ void CG_GhostBuildable( buildable_t buildable, vec3_t dims ) if(BG_Buildable(buildable, NULL)->cuboid) { - qhandle_t shader, ashader; - - CG_Cuboid_Send(); //NOTE: CG_Cuboid_Send has its own timer so we don't spam server with commands every frame - - if(cg.forbidCuboids) - shader=cgs.media.cuboidYellowBuildShader; - else if(ps->stats[STAT_BUILDABLE]&SB_VALID_TOGGLEBIT) - shader=cgs.media.cuboidGreenBuildShader; - else - shader=cgs.media.cuboidRedBuildShader; - CG_DrawCuboid(entity_origin,dims,shader,0); - CG_DrawCuboidAxis(entity_origin,dims,cg_cuboidResizeAxis.integer,cgs.media.cuboidAxis); - return; + qhandle_t shader, ashader; + + CG_Cuboid_Send( ); //NOTE: CG_Cuboid_Send has its own timer so we don't spam server with commands every frame + + if( cg.waitForCB ) + shader = cgs.media.cuboidYellowBuildShader; + else if( cg.cuboidValid && ps->stats[ STAT_BUILDABLE ] & SB_VALID_TOGGLEBIT ) + shader = cgs.media.cuboidGreenBuildShader; + else + shader = cgs.media.cuboidRedBuildShader; + + CG_DrawCuboid( entity_origin, dims, shader, 0 ); + CG_DrawCuboidAxis( entity_origin, dims, cg_cuboidResizeAxis.integer, cgs.media.cuboidAxis ); + return; } VectorCopy(ps->viewangles,viewangles); @@ -1896,7 +1897,16 @@ void CG_Buildable( centity_t *cent ) CG_PositionEntityOnTag( &turretBarrel, &ent, ent.hModel, "tag_turret" ); VectorCopy( cent->lerpOrigin, turretBarrel.lightingOrigin ); - AnglesToAxis( es->angles2, flatAxis ); + + { + vec3_t interpolated; + int i; + + for( i = 0; i < 3 ; i++ ) + interpolated[ i ] = LerpAngle( es->angles2[ i ], cent->nextState.angles2[ i ], cg.frameInterpolation ); + + AnglesToAxis( interpolated, flatAxis ); + } RotatePointAroundVector( turretBarrel.axis[ 0 ], xNormal, flatAxis[ 0 ], -rotAngle ); RotatePointAroundVector( turretBarrel.axis[ 1 ], xNormal, flatAxis[ 1 ], -rotAngle ); @@ -2090,32 +2100,36 @@ Send the cuboid selection via commands. */ void CG_Cuboid_Send(void) { - static qboolean init=qfalse; + static qboolean init = qfalse; static int lastupdate; static vec3_t lastcuboid; - if(!BG_Buildable(cg.predictedPlayerState.stats[STAT_BUILDABLE]&~SB_VALID_TOGGLEBIT,NULL)->cuboid) - return; + if( !BG_Buildable( cg.predictedPlayerState.stats[ STAT_BUILDABLE ] &~ SB_VALID_TOGGLEBIT, NULL)->cuboid) + return; - if(!init) + if( !init ) { - lastupdate=cg.time; - VectorCopy(cg.cuboidSelection,lastcuboid); - init=qtrue; + lastupdate = cg.time; + VectorCopy( cg.cuboidSelection, lastcuboid ); + init = qtrue; } - if(lastupdate+100>cg.time) - return; + if( lastupdate + 100 > cg.time ) + return; - if(!VectorCompareEpsilon(lastcuboid,cg.cuboidSelection,1e-3)) + if( !VectorCompareEpsilon( lastcuboid, cg.cuboidSelection, 1e-3 ) ) { - cg.latestCBNumber++; - cg.latestCBNumber%=100; - trap_SendClientCommand(va("cb %i %f %f %f\n",cg.latestCBNumber,cg.cuboidSelection[0],cg.cuboidSelection[1],cg.cuboidSelection[2])); - cg.forbidCuboids=qtrue; //wait for response + cg.latestCBNumber++; + cg.latestCBNumber %= 100; + trap_SendClientCommand( va("cb %i %f %f %f\n", + cg.latestCBNumber, + cg.cuboidSelection[ 0 ], + cg.cuboidSelection[ 1 ], + cg.cuboidSelection[ 2 ] ) ); + cg.waitForCB = qtrue; //wait for response } - lastupdate=cg.time; - VectorCopy(cg.cuboidSelection,lastcuboid); + lastupdate = cg.time; + VectorCopy( cg.cuboidSelection, lastcuboid ); } /* @@ -2127,47 +2141,55 @@ Server responded to our cb with either cb2 or cb3. */ void CG_Cuboid_Response(void) { - // cb2 <a> <b> <c> : server sets client-side cuboid - // cb3 <echo> : server agrees on player's cuboid - // cb3 <echo> <a> <b> <c> : server doesnt agree on player's cuboid and corrects it - static qboolean init = qfalse; + // cb2 <a> <b> <c> : server sets client-side cuboid + // cb3 <echo> : server agrees on player's cuboid + // cb4 <echo> : server disagrees on player's cuboid + int offs; if( !BG_Buildable( cg.predictedPlayerState.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT, NULL )->cuboid ) return; if( !Q_stricmp( CG_Argv( 0 ), "cb2" ) && trap_Argc( ) == 4 ) { - cg.cuboidSelection[ 0 ] = atof( CG_Argv( 1 ) ); - cg.cuboidSelection[ 1 ] = atof( CG_Argv( 2 ) ); - cg.cuboidSelection[ 2 ] = atof( CG_Argv( 3 ) ); - return; + if( trap_Argc( ) == 4 || + ( offs = 1, trap_Argc() == 5 && atoi( CG_Argv( 1 ) ) == cg.latestCBNumber ) ) + { + cg.cuboidValid = qtrue; + cg.cuboidSelection[ 0 ] = atof( CG_Argv( 1 + offs ) ); + cg.cuboidSelection[ 1 ] = atof( CG_Argv( 2 + offs ) ); + cg.cuboidSelection[ 2 ] = atof( CG_Argv( 3 + offs ) ); + return; + } } else if( !Q_stricmp( CG_Argv( 0 ), "cb3" ) ) { if( trap_Argc( ) == 2 ) { if( atoi( CG_Argv( 1 ) ) == cg.latestCBNumber ) - cg.forbidCuboids = qfalse; + cg.waitForCB = qfalse; + cg.cuboidValid = qtrue; return; } - else if( trap_Argc() == 5) + } + else if( !Q_stricmp( CG_Argv( 0 ), "cb4" ) ) + { + if( trap_Argc() == 2 ) { - cg.cuboidSelection[ 0 ] = atof( CG_Argv( 2 ) ); - cg.cuboidSelection[ 1 ] = atof( CG_Argv( 3 ) ); - cg.cuboidSelection[ 2 ] = atof( CG_Argv( 4 ) ); if( atoi( CG_Argv( 1 ) ) == cg.latestCBNumber ) - { - cg.forbidCuboids = qfalse; + { + cg.waitForCB = qfalse; + cg.cuboidValid = qfalse; + if( cg.lastCuboidError + 250 < cg.time ) { trap_S_StartLocalSound( cgs.media.cuboidErrorSound, CHAN_LOCAL_SOUND ); cg.lastCuboidError = cg.time; - } + } } - return; + return; } } - Com_Printf( "^3warning: wrong cb2/cb3 from server\n" ); + Com_Printf( "^3warning: wrong cb from server\n" ); } /* @@ -2237,7 +2259,6 @@ void CG_CuboidRotate_f(void) break; } trap_S_StartLocalSound( cgs.media.cuboidRotateSound, CHAN_LOCAL_SOUND ); - CG_Cuboid_Send( ); } /* @@ -2257,7 +2278,7 @@ void CG_CuboidAxis_f(void) axis = cg_cuboidResizeAxis.integer; if( !BG_Buildable( cg.predictedPlayerState.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT, NULL )->cuboid) return; - if( !CG_Argv( 1 ) ) + if( trap_Argc( ) < 2 ) { Com_Printf( "cuboidAxis next|0|1|2 : set axis on which you want to resize your cuboid selection (0 - X, 1 - Y, 2 - Z)\n" ); return; @@ -2272,20 +2293,51 @@ void CG_CuboidAxis_f(void) /* ====================== +CG_CuboidSize_f + +Set the cuboid selection +Syntax: + cuboidAxis x y z +====================== +*/ +void CG_CuboidSize_f(void) +{ + int axis; + + if( trap_Argc( ) < 4 ) + { + Com_Printf( "cuboidAxis x y z : set the cuboid selection\n" ); + return; + } + + VectorSet( cg.cuboidSelection, + atof( CG_Argv( 1 ) ), + atof( CG_Argv( 2 ) ), + atof( CG_Argv( 3 ) ) ); + + trap_S_StartLocalSound( cgs.media.cuboidResizeSoundA, CHAN_LOCAL_SOUND ); +} + +/* +====================== CG_CuboidAttack_f Replaces +attack/-attack. If building a cuboid and the selection is somehow invalid, play an error sound. -Otherwise send the normal +attack / -attack; +Otherwise send the normal +attack / -attack. ====================== */ void CG_CuboidAttack_f(void) { - if( BG_Buildable( cg.predictedPlayerState.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT, NULL )->cuboid && - cg.forbidCuboids ) + if( BG_Buildable( cg.predictedPlayerState.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT, NULL )->cuboid ) { - trap_S_StartLocalSound( cgs.media.cuboidErrorSound, CHAN_LOCAL_SOUND ); - return; + if( cg.waitForCB ) + return; + else if( !cg.cuboidValid ) + { + trap_S_StartLocalSound( cgs.media.cuboidErrorSound, CHAN_LOCAL_SOUND ); + return; + } } trap_SendClientCommand( va( "%s", CG_Argv(0) ) ); } diff --git a/src/cgame/cg_consolecmds.c b/src/cgame/cg_consolecmds.c index 0f1a3cf..cf3996d 100644 --- a/src/cgame/cg_consolecmds.c +++ b/src/cgame/cg_consolecmds.c @@ -195,6 +195,7 @@ static consoleCommand_t commands[ ] = { "clientlist", CG_ClientList_f }, { "cuboidAxis", CG_CuboidAxis_f }, { "cuboidRotate", CG_CuboidRotate_f }, + { "cuboidSize", CG_CuboidSize_f }, { "destroyTestPS", CG_DestroyTestPS_f }, { "destroyTestTS", CG_DestroyTestTS_f }, { "nextframe", CG_TestModelNextFrame_f }, diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c index 84c49a5..aa6df3d 100644 --- a/src/cgame/cg_draw.c +++ b/src/cgame/cg_draw.c @@ -2468,7 +2468,7 @@ CG_DrawTutorial static void CG_DrawTutorial( rectDef_t *rect, float text_x, float text_y, vec4_t color, float scale, int textalign, int textvalign, int textStyle ) { - if( !cg_tutorial.integer && !cg_modTutorial.integer ) + if( !cg_tutorial.integer ) return; UI_DrawTextBlock( rect, text_x, text_y, color, scale, textalign, textvalign, textStyle, CG_TutorialText( ) ); @@ -2630,6 +2630,8 @@ static void CG_ScanForCrosshairEntity( void ) CG_Trace( &trace, start, vec3_origin, vec3_origin, end, cg.snap->ps.clientNum, CONTENTS_SOLID|CONTENTS_BODY ); + cg.crosshairDistance = Distance( start, trace.endpos ); + // if the player is in fog, don't show it content = trap_CM_PointContents( trace.endpos, 0 ); if( content & CONTENTS_FOG ) @@ -3108,6 +3110,9 @@ static void CG_DrawLighting( void ) CG_DrawPic( 0, 0, 640, 480, cgs.media.whiteShader ); trap_R_SetColor( NULL ); } + + if( BG_UpgradeIsActive( UP_NIGHTVISION, cg.predictedPlayerState.stats ) ) + CG_DrawPic( 0, 0, 640, 480, cgs.media.basivisionShader ); } /* @@ -3525,9 +3530,9 @@ void CG_DrawSplash( void ) trap_R_SetColor( color ); ts = 0.33f; - tw = UI_Text_Width( MODVER_TITLE, ts ); - th = UI_Text_Height( MODVER_TITLE, ts ); - UI_Text_Paint( x + w/2 - tw/2, y + h + th, ts, color, MODVER_TITLE, 0, 0, ITEM_TEXTSTYLE_SHADOWEDMORE ); + tw = UI_Text_Width( SPLASH_VERSION, ts ); + th = UI_Text_Height( SPLASH_VERSION, ts ); + UI_Text_Paint( x + w/2 - tw/2, y + h + th, ts, color, SPLASH_VERSION, 0, 0, ITEM_TEXTSTYLE_SHADOWEDMORE ); } color[ 3 ] = ( t > 3.0f ) ? 4.0f - t : 1.0f; diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h index a8316c5..a81d1df 100644 --- a/src/cgame/cg_local.h +++ b/src/cgame/cg_local.h @@ -809,6 +809,7 @@ typedef struct weaponInfoMode_s qhandle_t impactParticleSystem; qhandle_t impactMark; qhandle_t impactMarkSize; + qboolean impactMarkAlphaFade; sfxHandle_t impactSound[ 4 ]; //random impact sound sfxHandle_t impactFleshSound[ 4 ]; //random impact sound } weaponInfoMode_t; @@ -1056,6 +1057,7 @@ typedef struct int lastKillTime; // crosshair client ID + float crosshairDistance; int crosshairBuildable; int crosshairClientNum; int crosshairClientTime; @@ -1184,9 +1186,10 @@ typedef struct int nextWeaponClickTime; vec3_t cuboidSelection; - qboolean forbidCuboids; //if true then dont let player build a cuboid - int latestCBNumber; //wait for this number from server before building a cuboid - int lastCuboidError; //last time error sound was played + qboolean waitForCB; + qboolean cuboidValid; + int latestCBNumber; // for syncing with the server + int lastCuboidError; // last time an error sound was played qhandle_t announcerStack[ MAX_ANNOUNCER_STACK ]; int announcerStackPos; @@ -1371,6 +1374,10 @@ typedef struct qhandle_t alienHatchPS; sfxHandle_t alienHatchSound; sfxHandle_t alienFailedHatchSound; + + qhandle_t basivisionShader; + qhandle_t basivisionBlipShader; + qhandle_t basivisionFlareShader; } cgMedia_t; typedef struct @@ -1582,10 +1589,6 @@ extern vmCvar_t cg_disableCommandDialogs; extern vmCvar_t cg_disableScannerPlane; extern vmCvar_t cg_tutorial; -extern vmCvar_t cg_modTutorial; -extern vmCvar_t cg_modTutorialReference; -extern vmCvar_t cg_lastModVersion; - extern vmCvar_t cg_painBlendUpRate; extern vmCvar_t cg_painBlendDownRate; extern vmCvar_t cg_painBlendMax; @@ -1627,6 +1630,10 @@ extern vmCvar_t cg_fuelInfoX; extern vmCvar_t cg_fuelInfoY; extern vmCvar_t cg_fuelInfoScale; +extern vmCvar_t cg_announcer; + +extern vmCvar_t cg_cameraShakeMagnitude; + // // cg_main.c // @@ -1748,6 +1755,7 @@ void CG_HumanBuildableExplosion( vec3_t origin, vec3_t dir ); void CG_AlienBuildableExplosion( vec3_t origin, vec3_t dir ); void CG_CuboidAxis_f(void); void CG_CuboidRotate_f(void); +void CG_CuboidSize_f(void); void CG_Cuboid_Send(void); void CG_Cuboid_Response(void); void CG_CuboidResize( qboolean enlarge ); @@ -2185,15 +2193,4 @@ typedef enum // mod version data -#define MODVER_CURRENT 6 -#define MODVER_C2_0_1_5 6 -#define MODVER_C2_0_1_4 5 -#define MODVER_C2_0_1_3 4 -#define MODVER_C2_0_1_2 3 -#define MODVER_C2_0_1_1 2 -#define MODVER_C2_0_1_0 1 -#define MODVER_TITLE "0.1.5 (Sep 12)" - - - - +#define SPLASH_VERSION "0.1.6 (Jan 19)" diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c index c1c7a0d..ff3d567 100644 --- a/src/cgame/cg_main.c +++ b/src/cgame/cg_main.c @@ -192,10 +192,6 @@ vmCvar_t cg_disableCommandDialogs; vmCvar_t cg_disableScannerPlane; vmCvar_t cg_tutorial; -vmCvar_t cg_modTutorial; -vmCvar_t cg_modTutorialReference; -vmCvar_t cg_lastModVersion; - vmCvar_t cg_painBlendUpRate; vmCvar_t cg_painBlendDownRate; vmCvar_t cg_painBlendMax; @@ -237,6 +233,10 @@ vmCvar_t cg_fuelInfoX; vmCvar_t cg_fuelInfoY; vmCvar_t cg_fuelInfoScale; +vmCvar_t cg_announcer; + +vmCvar_t cg_cameraShakeMagnitude; + typedef struct { vmCvar_t *vmCvar; @@ -366,27 +366,26 @@ 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}, { &cg_chatTeamPrefix, "cg_chatTeamPrefix", "1", CVAR_ARCHIVE }, - + { &cg_cuboidResizeAxis, "cg_cuboidResizeAxis", "2", 0 }, { &cg_cuboidResizeRate, "cg_cuboidResizeRate", "5", CVAR_ARCHIVE }, { &cg_cuboidPSQuality, "cg_cuboidPSQuality", "3", CVAR_ARCHIVE }, - + { &cg_cuboidInfoX, "cg_cuboidInfoX" ,"0", CVAR_ARCHIVE }, { &cg_cuboidInfoY, "cg_cuboidInfoY" ,"150", CVAR_ARCHIVE }, - - { &cg_modTutorial, "cg_modTutorial", "1", CVAR_ARCHIVE }, - { &cg_modTutorialReference, "cg_modTutorialReference", "0", CVAR_ARCHIVE }, - { &cg_lastModVersion, "cg_lastModVersion", "0", CVAR_ARCHIVE }, - + { &cg_fuelInfoX, "cg_fuelInfoX" ,"0", CVAR_ARCHIVE }, { &cg_fuelInfoY, "cg_fuelInfoY" ,"150", CVAR_ARCHIVE }, - { &cg_fuelInfoScale, "cg_fuelInfoScale" ,"0.5", CVAR_ARCHIVE } + { &cg_fuelInfoScale, "cg_fuelInfoScale" ,"0.5", CVAR_ARCHIVE }, + { &cg_announcer, "cg_announcer", "1", CVAR_ARCHIVE }, + + { &cg_cameraShakeMagnitude, "cg_cameraShakeMagnitude", "1", CVAR_ARCHIVE } }; static int cvarTableSize = sizeof( cvarTable ) / sizeof( cvarTable[0] ); @@ -819,26 +818,30 @@ static void CG_RegisterGraphics( void ) cgs.media.greenBuildShader = trap_R_RegisterShader("gfx/misc/greenbuild" ); cgs.media.redBuildShader = trap_R_RegisterShader("gfx/misc/redbuild" ); cgs.media.humanSpawningShader = trap_R_RegisterShader("models/buildables/telenode/rep_cyl" ); - + for( i = 0; i < CUBOID_CRACK_TEXTURES - 1; i++ ) cgs.media.cuboidCracks[ i ] = trap_R_RegisterShader( va( "models/cuboid/cracks_%i", i ) ); - + cgs.media.cuboidModel = trap_R_RegisterModel( "models/cuboid/cuboid.md3" ); cgs.media.cuboidRedBuildShader = trap_R_RegisterShader( "gfx/cuboid/build_red" ); cgs.media.cuboidYellowBuildShader = trap_R_RegisterShader( "gfx/cuboid/build_yellow" ); cgs.media.cuboidGreenBuildShader = trap_R_RegisterShader( "gfx/cuboid/build_green" ); cgs.media.cuboidAxis = trap_R_RegisterShader( "gfx/cuboid/build_axis" ); cgs.media.cuboidAlienPrebuild = trap_R_RegisterShader( "gfx/cuboid/prebuild_alien" ); - - cg.forbidCuboids=qfalse; - cg.latestCBNumber=0; - + + cg.waitForCB = qfalse; + cg.cuboidValid = qfalse; + cg.latestCBNumber = 0; + for( i = 0; i < 15; i++ ) cgs.media.splashLogo[ i ] = trap_R_RegisterShader( va( "cuboid/logo_%i.tga", i ) ); cgs.media.splashLeft = trap_R_RegisterShader( "cuboid/logo_left.tga" ); cgs.media.splashRight = trap_R_RegisterShader( "cuboid/logo_right.tga" ); - - + + cgs.media.basivisionShader = trap_R_RegisterShader( "gfx/2d/basivision" ); + cgs.media.basivisionBlipShader = trap_R_RegisterShader( "gfx/2d/basivisionBlip" ); + cgs.media.basivisionFlareShader = trap_R_RegisterShader( "gfx/2d/basivisionFlare" ); + for( i = 0; i < 8; i++ ) cgs.media.buildWeaponTimerPie[ i ] = trap_R_RegisterShader( buildWeaponTimerPieShaders[ i ] ); diff --git a/src/cgame/cg_players.c b/src/cgame/cg_players.c index 99f9f9e..63464e1 100644 --- a/src/cgame/cg_players.c +++ b/src/cgame/cg_players.c @@ -1428,9 +1428,35 @@ static void CG_PlayerUpgrades( centity_t *cent, refEntity_t *torso ) held = es->modelindex; active = es->modelindex2; - + jetjump = ( cent->jetPackJumpTime + 100 > cg.time && !( active & ( 1 << UP_JETPACK ) ) ); + if( es->number == cg.snap->ps.clientNum ) + { + static int lastTime=0; + static float last=0.0f; + + if( active & ( 1 << UP_NIGHTVISION ) ) + { + float dt, cur, target; + dt = 0.001f * ( cg.time - lastTime ); + target = sqrt( cg.crosshairDistance * 3.0f ); + cur = last + ( target - last ) * dt * 15.0f; + + last = cur; + lastTime = cg.time; + + cur = pow( cur, 2 ); + trap_R_AddAdditiveLightToScene( cent->lerpOrigin, cur, 1, 1, 1 ); + } + else + { + lastTime = cg.time; + last = 0.0f; + } + } + + if( held & ( 1 << UP_JETPACK ) ) { memset( &jetpack, 0, sizeof( jetpack ) ); diff --git a/src/cgame/cg_scanner.c b/src/cgame/cg_scanner.c index 3941956..821c8bf 100644 --- a/src/cgame/cg_scanner.c +++ b/src/cgame/cg_scanner.c @@ -62,9 +62,9 @@ void CG_UpdateEntityPositions( void ) !( cent->currentState.eFlags & EF_DEAD ) ) { if( BG_Buildable(cent->currentState.modelindex,NULL)->cuboid ) - if( !BG_CuboidAttributes(cent->currentState.modelindex)->detectable ) - continue; //forget about undetectable cuboids - + if( !BG_CuboidAttributes(cent->currentState.modelindex)->detectable ) + continue; //forget about undetectable cuboids + // add to list of item positions (for creep) if( cent->currentState.modelindex2 == TEAM_ALIENS ) { @@ -218,6 +218,29 @@ static void CG_DrawDir( rectDef_t *rect, vec3_t origin, vec4_t colour ) /* ============= +CG_BasivisionBlip +============= +*/ +void CG_BasivisionBlip( vec3_t origin, float size, qhandle_t shader, float flareSize, qhandle_t flare ) +{ + float x, y, s; + + if( !CG_WorldToScreen( origin, &x, &y ) ) + return; + + size = size * 1000 / Distance( origin, entityPositions.origin ); + + if( shader ) + CG_DrawPic( x - ( size * cgDC.aspectScale ) / 2, y - size / 2, size * cgDC.aspectScale, size, + cgs.media.basivisionBlipShader ); + + if( flare ) + CG_DrawPic( x - ( flareSize * cgDC.aspectScale ) / 2, y - flareSize / 2, flareSize * cgDC.aspectScale, flareSize, + cgs.media.basivisionFlareShader ); +} + +/* +============= CG_AlienSense ============= */ @@ -231,24 +254,39 @@ void CG_AlienSense( rectDef_t *rect ) VectorCopy( entityPositions.origin, origin ); - //draw human buildables - for( i = 0; i < entityPositions.numHumanBuildables; i++ ) + if( BG_UpgradeIsActive( UP_NIGHTVISION, cg.predictedPlayerState.stats ) ) { - VectorClear( relOrigin ); - VectorSubtract( entityPositions.humanBuildablePos[ i ], origin, relOrigin ); - - if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) - CG_DrawDir( rect, relOrigin, buildable ); + for( i = 0; i < entityPositions.numHumanBuildables; i++ ) + CG_BasivisionBlip( entityPositions.humanBuildablePos[ i ], + 0, 0, + 150, cgs.media.basivisionBlipShader ); + + for( i = 0; i < entityPositions.numHumanClients; i++ ) + CG_BasivisionBlip( entityPositions.humanClientPos[ i ], + 60, cgs.media.basivisionBlipShader, + 80, cgs.media.basivisionFlareShader ); } - - //draw human clients - for( i = 0; i < entityPositions.numHumanClients; i++ ) + else { - VectorClear( relOrigin ); - VectorSubtract( entityPositions.humanClientPos[ i ], origin, relOrigin ); + //draw human buildables + for( i = 0; i < entityPositions.numHumanBuildables; i++ ) + { + VectorClear( relOrigin ); + VectorSubtract( entityPositions.humanBuildablePos[ i ], origin, relOrigin ); + + if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) + CG_DrawDir( rect, relOrigin, buildable ); + } - if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) - CG_DrawDir( rect, relOrigin, client ); + //draw human clients + for( i = 0; i < entityPositions.numHumanClients; i++ ) + { + VectorClear( relOrigin ); + VectorSubtract( entityPositions.humanClientPos[ i ], origin, relOrigin ); + + if( VectorLength( relOrigin ) < ALIENSENSE_RANGE ) + CG_DrawDir( rect, relOrigin, client ); + } } } diff --git a/src/cgame/cg_servercmds.c b/src/cgame/cg_servercmds.c index 2a71b62..cf820c0 100644 --- a/src/cgame/cg_servercmds.c +++ b/src/cgame/cg_servercmds.c @@ -634,8 +634,8 @@ void CG_Menu( int menu, int arg ) case MN_B_CUBOID_MODE1: longMsg = "On this map noone is allowed to build a cuboid before reaching " - "stage 2 to prevent players from cheating."; - shortMsg = "Cuboids are disabled on stage 1"; + "Stage 2 to prevent players from cheating."; + shortMsg = "Cuboids are disabled on Stage 1"; break; case MN_B_CUBOID_MODE2: @@ -650,6 +650,14 @@ void CG_Menu( int menu, int arg ) shortMsg = "Buildable density is too high here"; break; + case MN_B_INVALIDSIZE: + longMsg = "You cannot build a cuboid of the selected size." + "Most likely the size is too big, too small or " + "invalid. Keep changing it until the preview " + "turns green."; + shortMsg = "Invalid cuboid size"; + break; + //=============================== case MN_H_NOBP: @@ -1274,12 +1282,13 @@ void CG_ProcessAnnouncer( void ) if( last + ANNOUNCER_DELAY > cg.time ) return; - + cg.announcerStackPos++; cg.announcerStackPos %= MAX_ANNOUNCER_STACK; - - trap_S_StartLocalSound( cg.announcerStack[ cg.announcerStackPos ], CHAN_VOICE ); - + + if( cg_announcer.integer ) + trap_S_StartLocalSound( cg.announcerStack[ cg.announcerStackPos ], CHAN_VOICE ); + last = cg.time; } @@ -1293,12 +1302,15 @@ Play an announcer sound static void CG_Announce( void ) { const char *event, *soundName; - + + if( !cg_announcer.integer ) + return; + if( trap_Argc( ) != 2 ) return; - + event = CG_Argv( 1 ); - + if( !Q_stricmp( event, "votenow" ) || !Q_stricmp( event, "votecancelled" ) || !Q_stricmp( event, "votefailed" ) || @@ -1347,8 +1359,9 @@ static void CG_GameCmds_f( void ) static consoleCommand_t svcommands[ ] = { { "announce", CG_Announce }, - { "cb2", CG_Cuboid_Response }, // set local cuboid - { "cb3", CG_Cuboid_Response }, // set local cuboid and print a "limit exceeded" warning + { "cb2", CG_Cuboid_Response }, + { "cb3", CG_Cuboid_Response }, + { "cb4", CG_Cuboid_Response }, { "chat", CG_Chat_f }, { "clientLevelShot", CG_ClientLevelShot_f }, { "cmds", CG_GameCmds_f }, diff --git a/src/cgame/cg_tutorial.c b/src/cgame/cg_tutorial.c index f68d070..212db33 100644 --- a/src/cgame/cg_tutorial.c +++ b/src/cgame/cg_tutorial.c @@ -639,21 +639,6 @@ const char *CG_TutorialText( void ) playerState_t *ps; static char text[ MAX_TUTORIAL_TEXT ]; static int refreshBindings = 0; - static qboolean checkedUpdate = qfalse; - - // force mod tutorial if new version - if( !checkedUpdate ) - { - trap_Cvar_Update( &cg_lastModVersion ); - - if( cg_lastModVersion.integer < MODVER_CURRENT ) - { - trap_Cvar_Set( "cg_modTutorial", "1" ); - trap_Cvar_Set( "cg_modTutorialReference", va( "%i", cg_lastModVersion.integer ) ); - trap_Cvar_Set( "cg_lastModVersion", va( "%i", MODVER_CURRENT ) ); - } - checkedUpdate = qtrue; - } if( refreshBindings == 0 ) CG_GetBindings( ); @@ -663,14 +648,11 @@ const char *CG_TutorialText( void ) text[ 0 ] = '\0'; ps = &cg.snap->ps; - if( cg_modTutorial.integer ) - { - CG_NewText( text, ps ); - - if( !cg_tutorial.integer ) - return text; - } - + CG_NewText( text, ps ); + + if( !cg_tutorial.integer ) + return text; + if( !cg.intermissionStarted && !cg.demoPlayback ) { if( ps->persistant[ PERS_SPECSTATE ] != SPECTATOR_NOT || @@ -800,38 +782,31 @@ static void CG_CuboidText( char *text, playerState_t *ps ) static void CG_NewText( char *text, playerState_t *ps ) { - int reference; - - reference = cg_modTutorialReference.integer; - if( !cg.intermissionStarted && !cg.demoPlayback ) { if( ps->persistant[ PERS_SPECSTATE ] == SPECTATOR_NOT && !( ps->pm_flags & PMF_FOLLOW ) && ps->stats[ STAT_HEALTH ] > 0 ) { - if( reference >= MODVER_C2_0_1_0 ) + if( BG_InventoryContainsUpgrade( UP_JETPACK, ps->stats ) ) { - if( BG_InventoryContainsUpgrade( UP_JETPACK, ps->stats ) ) + if( ps->stats[ STAT_FUEL ] > JETPACK_FUEL_JUMP ) { - if( ps->stats[ STAT_FUEL ] > JETPACK_FUEL_JUMP ) - { - Q_strcat( text, MAX_TUTORIAL_TEXT, - va( "Press %s to perform a jetpack-aided jump. It uses fuel instead of stamina\n", - CG_KeyNameForCommand( "+moveup" ) ) ); - } - if( ps->stats[ STAT_FUEL ] <= JETPACK_FUEL_LOW ) - { - Q_strcat( text, MAX_TUTORIAL_TEXT, - va( "You are running low on jet fuel. Find an Armoury and press %s to refuel\n", - CG_KeyNameForCommand( "buy ammo" ) ) ); - } - else if( ps->stats[ STAT_FUEL ] <= 0 ) - { - Q_strcat( text, MAX_TUTORIAL_TEXT, - va( "You are out of jet fuel. You can no longer fly. Find an Armoury and press %s to refuel\n", - CG_KeyNameForCommand( "buy ammo" ) ) ); - } + Q_strcat( text, MAX_TUTORIAL_TEXT, + va( "Press %s to perform a jetpack-aided jump. It uses fuel instead of stamina\n", + CG_KeyNameForCommand( "+moveup" ) ) ); + } + if( ps->stats[ STAT_FUEL ] <= JETPACK_FUEL_LOW ) + { + Q_strcat( text, MAX_TUTORIAL_TEXT, + va( "You are running low on jet fuel. Find an Armoury and press %s to refuel\n", + CG_KeyNameForCommand( "buy ammo" ) ) ); + } + else if( ps->stats[ STAT_FUEL ] <= 0 ) + { + Q_strcat( text, MAX_TUTORIAL_TEXT, + va( "You are out of jet fuel. You can no longer fly. Find an Armoury and press %s to refuel\n", + CG_KeyNameForCommand( "buy ammo" ) ) ); } } @@ -840,22 +815,18 @@ static void CG_NewText( char *text, playerState_t *ps ) case WP_ABUILD: case WP_ABUILD2: case WP_HBUILD: - if( reference >= MODVER_C2_0_1_0 ) - { - CG_CuboidText( text, ps ); - if( ps->weapon == WP_ABUILD2 ) - Q_strcat( text, MAX_TUTORIAL_TEXT, - "Spitting at a human has a chance of impregnating him\n" - "with an alien egg. After a certain amount of time,\n" - "the egg can be spawned from by aliens, killing the human.\n" ); - } + CG_CuboidText( text, ps ); + if( ps->weapon == WP_ABUILD2 ) + Q_strcat( text, MAX_TUTORIAL_TEXT, + "Spitting at a human has a chance of impregnating him\n" + "with an alien egg. After a certain amount of time,\n" + "the egg can be spawned from by aliens, killing the human.\n" ); break; case WP_ALEVEL4: - if( reference >= MODVER_C2_0_1_0 ) - Q_strcat( text, MAX_TUTORIAL_TEXT, - va( "Press %s to drop a Tyrant Bomb. It can be regerated by touching a Booster.\n", - CG_KeyNameForCommand( "+button2" ) ) ); + Q_strcat( text, MAX_TUTORIAL_TEXT, + va( "Press %s to drop a Tyrant Bomb. It can be regerated by touching a Booster.\n", + CG_KeyNameForCommand( "+button2" ) ) ); break; } } diff --git a/src/cgame/cg_view.c b/src/cgame/cg_view.c index 4b2b254..97b7582 100644 --- a/src/cgame/cg_view.c +++ b/src/cgame/cg_view.c @@ -578,6 +578,18 @@ void CG_OffsetFirstPersonView( void ) origin[ 2 ] += cg.predictedPlayerState.viewheight; return; } + // camera shake effect + else if( cg.snap->ps.stats[ STAT_SHAKE ] > 0 ) + { + float fac, mag; + + fac = (float) cg.snap->ps.stats[ STAT_SHAKE ] * + cg_cameraShakeMagnitude.value * 0.15f; + + angles[ 0 ] += crandom() * fac; + angles[ 1 ] += crandom() * fac; + angles[ 2 ] += crandom() * fac; + } // add angles based on damage kick if( cg.damageTime ) diff --git a/src/cgame/cg_weapons.c b/src/cgame/cg_weapons.c index f844f81..7e22baf 100644 --- a/src/cgame/cg_weapons.c +++ b/src/cgame/cg_weapons.c @@ -414,6 +414,11 @@ static qboolean CG_ParseWeaponModeSection( weaponInfoMode_t *wim, char **text_p continue; } + else if( !Q_stricmp( token, "impactMarkAlphaFade" ) ) + { + wim->impactMarkAlphaFade = qtrue; + continue; + } else if( !Q_stricmp( token, "}" ) ) return qtrue; //reached the end of this weapon section else @@ -1253,6 +1258,10 @@ static qboolean CG_WeaponSelectable( weapon_t weapon ) if( !BG_InventoryContainsWeapon( weapon, cg.snap->ps.stats ) ) return qfalse; + // needed for basilisk nightvision + if( BG_Weapon( weapon )->team != TEAM_HUMANS ) + return qfalse; + return qtrue; } @@ -1742,7 +1751,8 @@ void CG_MissileHitWall( weapon_t weaponNum, weaponMode_t weaponMode, int clientN // impact mark // if( radius > 0.0f ) - CG_ImpactMark( mark, origin, dir, random( ) * 360, 1, 1, 1, 1, qfalse, radius, qfalse ); + CG_ImpactMark( mark, origin, dir, random( ) * 360, 1, 1, 1, 1, + weapon->wim[ weaponMode ].impactMarkAlphaFade, radius, qfalse ); } diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c index b96c8a9..a416ecb 100644 --- a/src/game/bg_misc.c +++ b/src/game/bg_misc.c @@ -2804,6 +2804,19 @@ static const upgradeAttributes_t bg_upgrades[ ] = qtrue, //qboolean purchasable qfalse, //qboolean usable TEAM_HUMANS //team_t team; + }, + { + UP_NIGHTVISION, //int upgradeNum; + 0, //int price; + 0, //int stages + SLOT_NONE, //int slots; + "nightvision", //char *upgradeName; + "", //char *humanName; + "", + 0, + qfalse, //qboolean purchasable + qtrue, //qboolean usable + TEAM_ALIENS //team_t team; } }; diff --git a/src/game/bg_pmove.c b/src/game/bg_pmove.c index 3b53dc9..d5719a5 100644 --- a/src/game/bg_pmove.c +++ b/src/game/bg_pmove.c @@ -672,6 +672,9 @@ static qboolean PM_CheckWallJump( void ) float upFraction = 1.5f; trace_t trace; + if( pm->waterlevel ) + return qfalse; + if( !( BG_Class( pm->ps->stats[ STAT_CLASS ] )->abilities & SCA_WALLJUMPER ) ) return qfalse; @@ -935,27 +938,45 @@ static qboolean PM_CheckWaterJump( void ) vec3_t spot; int cont; vec3_t flatforward; + vec3_t mins, maxs; + float a, r; if( pm->ps->pm_time ) return qfalse; - // check for water jump - if( pm->waterlevel != 2 ) + if( pm->cmd.upmove < 10 ) + // not holding jump return qfalse; + // check for water jump + //if( pm->waterlevel != 2 ) + // return qfalse; + flatforward[ 0 ] = pml.forward[ 0 ]; flatforward[ 1 ] = pml.forward[ 1 ]; flatforward[ 2 ] = 0; VectorNormalize( flatforward ); - VectorMA( pm->ps->origin, 30, flatforward, spot ); - spot[ 2 ] += 4; + BG_ClassBoundingBox( pm->ps->stats[ STAT_CLASS ], mins, maxs, NULL, NULL, NULL ); + + // bbox bottom + spot[ 0 ] = pm->ps->origin[ 0 ]; + spot[ 1 ] = pm->ps->origin[ 1 ]; + spot[ 2 ] = pm->ps->origin[ 2 ] + mins[ 2 ]; + + // project the flatforward vector onto the bbox (just a bit longer, so we'll actually hit a wall) + // then add it to spot + #define fmod(a,n) ((a)-(n)*floor((a)/(n))) + a = pm->ps->viewangles[ YAW ] / ( 180.0f / M_PI ); + r = ( maxs[ 0 ] + 1 ) * 1.0f / cos( fmod( a+0.25f*M_PI, 0.5f*M_PI ) - 0.25f*M_PI ); + VectorMA( spot, r, flatforward, spot ); + cont = pm->pointcontents( spot, pm->ps->clientNum ); if( !( cont & CONTENTS_SOLID ) ) return qfalse; - spot[ 2 ] += 16; + spot[ 2 ] = pm->ps->origin[ 2 ] + maxs[ 2 ]; cont = pm->pointcontents( spot, pm->ps->clientNum ); if( cont ) @@ -2409,32 +2430,35 @@ static void PM_SetWaterLevel( void ) int cont; int sample1; int sample2; + vec3_t mins; // // get waterlevel, accounting for ducking // pm->waterlevel = 0; pm->watertype = 0; + + BG_ClassBoundingBox( pm->ps->stats[ STAT_CLASS ], mins, NULL, NULL, NULL, NULL ); point[ 0 ] = pm->ps->origin[ 0 ]; point[ 1 ] = pm->ps->origin[ 1 ]; - point[ 2 ] = pm->ps->origin[ 2 ] + MINS_Z + 1; + point[ 2 ] = pm->ps->origin[ 2 ] + mins[2] + 1; cont = pm->pointcontents( point, pm->ps->clientNum ); if( cont & MASK_WATER ) { - sample2 = pm->ps->viewheight - MINS_Z; + sample2 = pm->ps->viewheight - mins[2]; sample1 = sample2 / 2; pm->watertype = cont; pm->waterlevel = 1; - point[ 2 ] = pm->ps->origin[ 2 ] + MINS_Z + sample1; + point[ 2 ] = pm->ps->origin[ 2 ] + mins[2] + sample1; cont = pm->pointcontents( point, pm->ps->clientNum ); if( cont & MASK_WATER ) { pm->waterlevel = 2; - point[ 2 ] = pm->ps->origin[ 2 ] + MINS_Z + sample2; + point[ 2 ] = pm->ps->origin[ 2 ] + mins[2] + sample2; cont = pm->pointcontents( point, pm->ps->clientNum ); if( cont & MASK_WATER ) diff --git a/src/game/bg_public.h b/src/game/bg_public.h index 64ce615..e06015d 100644 --- a/src/game/bg_public.h +++ b/src/game/bg_public.h @@ -233,8 +233,9 @@ typedef enum STAT_BUILDABLE, // which ghost model to display for building STAT_FALLDIST, // the distance the player fell STAT_VIEWLOCK, // direction to lock the view in - STAT_FUEL // jetpacks - // netcode has space for 2 more + STAT_FUEL, // jetpacks + STAT_SHAKE // camera shake + // netcode has space for 1 more } statIndex_t; #define SCA_WALLCLIMBER 0x00000001 @@ -397,6 +398,8 @@ typedef enum UP_BIORES, UP_AMMO, + + UP_NIGHTVISION, // aliens UP_NUM_UPGRADES } upgrade_t; @@ -630,6 +633,7 @@ typedef enum MN_B_CUBOID_MODE1, MN_B_CUBOID_MODE2, MN_B_TOODENSE, + MN_B_INVALIDSIZE, //alien build MN_A_ONEOVERMIND, diff --git a/src/game/g_active.c b/src/game/g_active.c index 05bda16..1fa0caa 100644 --- a/src/game/g_active.c +++ b/src/game/g_active.c @@ -168,6 +168,19 @@ void P_WorldEffects( gentity_t *ent ) ent->client->airOutTime = level.time + 12000; ent->damage = 2; } +} + +void P_WorldEffects_Fast( gentity_t *ent ) +{ + int waterlevel; + + if( ent->client->noclip ) + { + ent->client->airOutTime = level.time + 12000; // don't need air + return; + } + + waterlevel = ent->waterlevel; // // check for sizzle damage (move to pmove?) @@ -175,26 +188,24 @@ void P_WorldEffects( gentity_t *ent ) if( waterlevel && ( ent->watertype & ( CONTENTS_LAVA | CONTENTS_SLIME ) ) ) { - if( ent->health > 0 && - ent->pain_debounce_time <= level.time ) + if( ent->health > 0 ) { if( ent->watertype & CONTENTS_LAVA ) { G_Damage( ent, NULL, NULL, NULL, NULL, - 30 * waterlevel, 0, MOD_LAVA ); + 3 * waterlevel, 0, MOD_LAVA ); } if( ent->watertype & CONTENTS_SLIME ) { G_Damage( ent, NULL, NULL, NULL, NULL, - 10 * waterlevel, 0, MOD_SLIME ); + 1 * waterlevel, 0, MOD_SLIME ); } } } } - /* =============== G_SetClientSound @@ -629,6 +640,8 @@ void ClientTimerActions( gentity_t *ent, int msec ) weapon_t weapon = BG_GetPlayerWeapon( &client->ps ); client->time100 -= 100; + + P_WorldEffects_Fast( ent ); // Restore or subtract stamina if( stopped || client->ps.pm_type == PM_JETPACK ) @@ -757,13 +770,16 @@ void ClientTimerActions( gentity_t *ent, int msec ) if( ent->client->bioresHealTimer >= 100 ) { int delta; - + delta = ent->client->bioresHealTimer / 100; ent->health = MAX( MIN( ent->health+delta, ent->client->ps.stats[ STAT_MAX_HEALTH ] ), 1 ); - + ent->client->bioresHealTimer %= 100; } - + + ent->client->ps.stats[ STAT_SHAKE ] *= 0.77f; + if( ent->client->ps.stats[ STAT_SHAKE ] < 0 ) + ent->client->ps.stats[ STAT_SHAKE ] = 0; } while( client->time1000 >= 1000 ) diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 25e3e9b..90f42c8 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -641,7 +641,7 @@ static void admin_default_levels( void ) l->level = level++; Q_strncpyz( l->name, "^4Unknown Player", sizeof( l->name ) ); Q_strncpyz( l->flags, - "listplayers admintest adminhelp time", + "listplayers admintest adminhelp time register", sizeof( l->flags ) ); l = l->next = BG_Alloc( sizeof( g_admin_level_t ) ); @@ -3498,6 +3498,8 @@ qboolean G_admin_register( gentity_t *ent ) Q_strncpyz( ent->client->pers.admin->name, ent->client->pers.netname, sizeof( ent->client->pers.admin->name ) ); - + + admin_writeconfig( ); + return qtrue; } diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index b13c54a..0039ccd 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -2524,39 +2524,46 @@ void Cuboid_Think(gentity_t *self) } //Cuboids need a new die function because of the cuboid explosion effects. -void Cuboid_Die(gentity_t *self,gentity_t *inflictor,gentity_t *attacker,int damage,int mod) +void Cuboid_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod ) { vec3_t dir; - qboolean event=qfalse; + qboolean event = qfalse; const cuboidAttributes_t *cuboid; - cuboid=BG_CuboidAttributes(self->s.modelindex); - G_SetBuildableAnim(self,BANIM_DESTROY1,qtrue); // just for sound - self->die=nullDieFunction; - self->killedBy=attacker-g_entities; - self->powered=qfalse; - self->s.eFlags&=~EF_FIRING; - G_LogDestruction(self,attacker,mod); - dir[0]=dir[1]=0; - dir[2]=1; + cuboid = BG_CuboidAttributes( self->s.modelindex ); + G_SetBuildableAnim( self, BANIM_DESTROY1, qtrue ); // just for sound + self->die = nullDieFunction; + self->killedBy = attacker - g_entities; + self->powered = qfalse; + self->s.eFlags &= ~EF_FIRING; + G_LogDestruction( self, attacker, mod ); + dir[ 0 ] = + dir[ 1 ] = 0; + dir[ 2 ] = 1; self->timestamp = level.time; - G_QueueBuildPoints(self); - if(mod!=MOD_DECONSTRUCT&&self->spawned) + G_QueueBuildPoints( self ); + + if( mod != MOD_DECONSTRUCT && self->spawned ) { - G_RewardAttackers(self); - G_RadiusDamage(self->s.pos.trBase,g_entities+self->killedBy,self->splashDamage,self->splashRadius,self,self->splashMethodOfDeath); + G_RewardAttackers( self ); + G_RadiusDamage( self->s.pos.trBase, + g_entities + self->killedBy, + self->splashDamage, + self->splashRadius, + self, + self->splashMethodOfDeath ); //NOTE: all cuboid info is already packed - self->s.eType=ET_EVENTS+EV_CUBOID_EXPLOSION; + self->s.eType = ET_EVENTS + EV_CUBOID_EXPLOSION; self->freeAfterEvent = qtrue; - G_AddEvent(self,EV_HUMAN_BUILDABLE_EXPLOSION,DirToByte(dir)); - event=qtrue; - self->r.contents=0; - trap_LinkEntity(self); + G_AddEvent( self, EV_HUMAN_BUILDABLE_EXPLOSION, DirToByte( dir ) ); + event = qtrue; + self->r.contents = 0; + trap_LinkEntity( self ); } else { - self->s.eType=0; - G_FreeEntity(self); + self->s.eType = 0; + G_FreeEntity( self ); } } @@ -3440,12 +3447,18 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance int contents; playerState_t *ps = &ent->client->ps; - if( BG_Buildable(buildable,NULL)->cuboid ) - BG_CuboidBBox(cuboidSize,mins,maxs); + if( BG_Buildable( buildable, NULL )->cuboid ) + { + if( !G_CheckCuboidSize( cuboidSize, buildable ) ) + return IBE_INVALIDSIZE; + BG_CuboidBBox( cuboidSize, mins, maxs ); + } else BG_BuildableBoundingBox( buildable, mins, maxs ); - - if(!BG_PositionBuildableRelativeToPlayer( ps, BG_Buildable(buildable,NULL)->cuboid, mins, maxs, trap_Trace, entity_origin, angles, &tr1 )) + + if( !BG_PositionBuildableRelativeToPlayer( + ps, BG_Buildable( buildable, NULL )->cuboid, + mins, maxs, trap_Trace, entity_origin, angles, &tr1 ) ) return IBE_NOSURF; trap_Trace( &tr2, entity_origin, mins, maxs, entity_origin, -1, MASK_PLAYERSOLID ); trap_Trace( &tr3, ps->origin, NULL, NULL, entity_origin, ent->s.number, MASK_PLAYERSOLID ); @@ -3964,15 +3977,19 @@ qboolean G_BuildIfValid( gentity_t *ent, buildable_t buildable, vec3_t cuboidSiz case IBE_LASTSPAWN: G_TriggerMenu( ent->client->ps.clientNum, MN_B_LASTSPAWN ); return qfalse; - + case IBE_NOSURF: G_TriggerMenu( ent->client->ps.clientNum, MN_B_NOSURF ); return qfalse; - + case IBE_TOODENSE: G_TriggerMenu( ent->client->ps.clientNum, MN_B_TOODENSE ); return qfalse; + case IBE_INVALIDSIZE: + G_TriggerMenu( ent->client->ps.clientNum, MN_B_INVALIDSIZE ); + return qfalse; + default: break; } @@ -4577,7 +4594,10 @@ void G_RemoveUnbuiltBuildables( gentity_t *self ) if( ent->builtBy != self->client->ps.clientNum ) continue; - + + if( ent->s.modelindex < CUBOID_FIRST ) + continue; + G_Damage( ent, self, NULL, dir, dir, ent->health, 0, MOD_DECONSTRUCT ); } } diff --git a/src/game/g_client.c b/src/game/g_client.c index c8421f0..7596ea1 100644 --- a/src/game/g_client.c +++ b/src/game/g_client.c @@ -1397,7 +1397,7 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn, vec3_t origin, vec3_t angles // try to unblock the player if( tr.startsolid ) { - Com_Printf("DEBUG: player is stuck!\n"); + //Com_Printf("DEBUG: player is stuck!\n"); for( i = 0; i < 16*2; i++ ) { float a, r; @@ -1414,7 +1414,7 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn, vec3_t origin, vec3_t angles if( !tr.startsolid ) { - Com_Printf("DEBUG: player position fixed at iteration %i\n",i); + //Com_Printf("DEBUG: player position fixed at iteration %i\n",i); VectorCopy( neworigin, spawn_origin ); break; } @@ -1547,6 +1547,11 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn, vec3_t origin, vec3_t angles else weapon = WP_NONE; + // give nightvision to basilisks + if( ent->client->pers.classSelection == PCL_ALIEN_LEVEL1 || + ent->client->pers.classSelection == PCL_ALIEN_LEVEL1_UPG ) + BG_AddUpgradeToInventory( UP_NIGHTVISION, client->ps.stats ); + maxAmmo = BG_Weapon( weapon )->maxAmmo; maxClips = BG_Weapon( weapon )->maxClips; client->ps.stats[ STAT_WEAPON ] = weapon; diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index 468dde0..2c15638 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -2527,21 +2527,30 @@ void Cmd_Sell_f( gentity_t *ent ) /* ================= -Cmd_CheckCuboidSize +G_CheckCuboidSize Check if the specified dimensions are valid. ================= */ -qboolean Cmd_CheckCuboidSize(vec3_t dims) +qboolean G_CheckCuboidSize( vec3_t dims, buildable_t type ) { - if(g_cuboidSizeLimit.integer) - if(dims[0]>g_cuboidSizeLimit.integer||dims[1]>g_cuboidSizeLimit.integer||dims[2]>g_cuboidSizeLimit.integer) - return qfalse; - if(dims[0]*dims[1]*dims[2]<CUBOID_MINVOLUME) - return qfalse; - if(dims[0]<1||dims[1]<1||dims[2]<1) - return qfalse; - return qtrue; + if( g_cuboidSizeLimit.integer ) + if( dims[ 0 ] > g_cuboidSizeLimit.integer || + dims[ 1 ] > g_cuboidSizeLimit.integer || + dims[ 2 ] > g_cuboidSizeLimit.integer ) + return qfalse; + + if( dims[ 0 ] * dims[ 1 ] * dims[ 2 ] < CUBOID_MINVOLUME) + return qfalse; + + if( dims[ 0 ] < 1 || dims[ 1 ] < 1 || dims[ 2 ] < 1 ) + return qfalse; + + if( g_cuboidHealthLimit.integer ) + if( BG_Buildable( type, dims )->health > g_cuboidHealthLimit.integer ) + return qfalse; + + return qtrue; } /* @@ -2554,33 +2563,32 @@ Update player's cuboid selection (after validation) with data sent over network. */ void Cmd_Cb_f(gentity_t *ent) { - char s[MAX_TOKEN_CHARS]; - int echo; - vec3_t dims; + char s[MAX_TOKEN_CHARS]; + int echo; + vec3_t dims; - if(trap_Argc()!=5) - return; - trap_Argv(1,s,sizeof(s)); - echo=atoi(s); - trap_Argv(2,s,sizeof(s)); - dims[0]=atof(s); - trap_Argv(3,s,sizeof(s)); - dims[1]=atof(s); - trap_Argv(4,s,sizeof(s)); - dims[2]=atof(s); - if(Cmd_CheckCuboidSize(dims)) - { - VectorCopy(dims,ent->client->cuboidSelection); - trap_SendServerCommand(ent->client-level.clients,va("cb3 %i\n",echo)); - G_RelayCuboidToSpectators(ent->client); - } - else - { - if(Cmd_CheckCuboidSize(ent->client->cuboidSelection)) - trap_SendServerCommand(ent->client-level.clients,va("cb3 %i %f %f %f\n",echo,ent->client->cuboidSelection[0],ent->client->cuboidSelection[1],ent->client->cuboidSelection[2])); + if( trap_Argc( ) != 5 ) + return; + + trap_Argv( 1, s, sizeof( s ) ); + echo = atoi( s ); + trap_Argv( 2, s, sizeof( s ) ); + dims[ 0 ] = atof( s ); + trap_Argv( 3, s, sizeof( s ) ); + dims[ 1 ] = atof( s ); + trap_Argv( 4, s, sizeof( s ) ); + dims[ 2 ] = atof( s ); + + VectorCopy( dims, ent->client->cuboidSelection ); + G_RelayCuboidToSpectators( ent->client ); + + if( G_CheckCuboidSize( dims, ent->client->ps.stats[ STAT_BUILDABLE ] & ~SB_VALID_TOGGLEBIT ) ) + trap_SendServerCommand( ent->client - level.clients, va( "cb3 %i\n", echo ) ); else - trap_SendServerCommand(ent->client-level.clients,va("cb3 %i %f %f %f\n",echo,g_cuboidSizeLimit.integer,g_cuboidSizeLimit.integer,g_cuboidSizeLimit.integer)); - } + { + trap_SendServerCommand( ent->client - level.clients, va( "cb4 %i\n", echo ) ); + ent->client->ps.stats[ STAT_BUILDABLE ] &= ~SB_VALID_TOGGLEBIT; + } } @@ -2627,37 +2635,35 @@ void Cmd_Build_f( gentity_t *ent ) { if( trap_Argc() >= 5 ) { - trap_Argv(2,s,sizeof(s)); - dims[0]=MAX(1,atof(s)); - trap_Argv(3,s,sizeof(s)); - dims[1]=MAX(1,atof(s)); - trap_Argv(4,s,sizeof(s)); - dims[2]=MAX(1,atof(s)); - if(!Cmd_CheckCuboidSize(dims)) + trap_Argv( 2, s, sizeof( s ) ); + dims[ 0 ] = MAX( 1, atof( s ) ); + trap_Argv( 3, s, sizeof( s ) ); + dims[ 1 ] = MAX( 1, atof( s ) ); + trap_Argv( 4, s, sizeof( s ) ); + dims[ 2 ] = MAX( 1, atof( s ) ); + if( !G_CheckCuboidSize( dims, buildable ) ) { - Com_sprintf(buf,sizeof(buf),"print \"^1error: invalid cuboid size (min volume: %i, max size: %s)\n\"", - CUBOID_MINVOLUME,(g_cuboidSizeLimit.integer?va("%ix%ix%i",g_cuboidSizeLimit.integer,g_cuboidSizeLimit.integer, g_cuboidSizeLimit.integer):"no limit")); - trap_SendServerCommand(ent->client-level.clients,buf); + G_TriggerMenu( ent->client->ps.clientNum, MN_B_INVALIDSIZE ); return; } - VectorCopy(dims,ent->client->cuboidSelection); + VectorCopy( dims, ent->client->cuboidSelection ); } // client is building a cuboid for the first time so reset the selection to default - if(!Cmd_CheckCuboidSize(ent->client->cuboidSelection)) + if( !G_CheckCuboidSize(ent->client->cuboidSelection, buildable) ) { - ent->client->cuboidSelection[0]=32; - ent->client->cuboidSelection[1]=32; - ent->client->cuboidSelection[2]=32; - trap_SendServerCommand(ent->client-level.clients,"cb2 32 32 32"); - G_RelayCuboidToSpectators(ent->client); + ent->client->cuboidSelection[ 0 ] = 30; + ent->client->cuboidSelection[ 1 ] = 30; + ent->client->cuboidSelection[ 2 ] = 30; + trap_SendServerCommand( ent->client-level.clients, "cb2 30 30 30" ); + G_RelayCuboidToSpectators( ent->client ); } - if(!BG_CuboidAllowed((team==TEAM_ALIENS?g_alienStage.integer:g_humanStage.integer))) + if( !BG_CuboidAllowed( ( team == TEAM_ALIENS ? g_alienStage.integer : g_humanStage.integer ) ) ) { - if(BG_CuboidMode()==1) - G_TriggerMenu(ent->client->ps.clientNum,MN_B_CUBOID_MODE1); + if( BG_CuboidMode() == 1 ) + G_TriggerMenu(ent->client->ps.clientNum, MN_B_CUBOID_MODE1 ); else - G_TriggerMenu(ent->client->ps.clientNum,MN_B_CUBOID_MODE2); + G_TriggerMenu(ent->client->ps.clientNum, MN_B_CUBOID_MODE2 ); return; } } @@ -2751,12 +2757,13 @@ void Cmd_Build_f( gentity_t *ent ) if( err == MN_NONE || ent->client->pers.disableBlueprintErrors ) { - trap_SendServerCommand(ent->client-level.clients,va("cb2 %f %f %f\n", - ent->client->cuboidSelection[0], - ent->client->cuboidSelection[1], - ent->client->cuboidSelection[2])); - G_RelayCuboidToSpectators(ent->client); - ent->client->ps.stats[ STAT_BUILDABLE ] |= buildable; + trap_SendServerCommand( ent->client - level.clients, + va( "cb2 %f %f %f\n", + ent->client->cuboidSelection[ 0 ], + ent->client->cuboidSelection[ 1 ], + ent->client->cuboidSelection[ 2 ] ) ); + G_RelayCuboidToSpectators( ent->client ); + ent->client->ps.stats[ STAT_BUILDABLE ] |= buildable; } else G_TriggerMenu( ent->client->ps.clientNum, err ); @@ -3298,12 +3305,7 @@ Cmd_Debug1_f */ void Cmd_Debug1_f( gentity_t *other ) { - other->client->isImpregnated = qtrue; - other->client->isImplantMature = qfalse; - other->client->impregnationTime = level.time; - other->client->impregnatedBy = -1; - other->client->isImplantMature = qtrue; - other->client->ps.stats[ STAT_STATE ] |= SS_IMPLANTED; + other->client->ps.stats[ STAT_SHAKE ] += 70; } /* diff --git a/src/game/g_combat.c b/src/game/g_combat.c index 1b6708f..fe5d607 100644 --- a/src/game/g_combat.c +++ b/src/game/g_combat.c @@ -1329,7 +1329,7 @@ G_RadiusDamage qboolean G_RadiusDamage( vec3_t origin, gentity_t *attacker, float damage, float radius, gentity_t *ignore, int mod ) { - float points, dist; + float points, dist, shake; gentity_t *ent; int entityList[ MAX_GENTITIES ]; int numListedEntities; @@ -1389,6 +1389,31 @@ qboolean G_RadiusDamage( vec3_t origin, gentity_t *attacker, float damage, } } + for( i = 0; i < 3; i++ ) + { + mins[ i ] = origin[ i ] - radius * 2; + maxs[ i ] = origin[ i ] + radius * 2; + } + + numListedEntities = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); + + for( e = 0; e < numListedEntities; e++ ) + { + ent = g_entities + entityList[ e ]; + + if( ent == ignore ) + continue; + + if( !ent->client ) + continue; + + if( !ent->takedamage ) + continue; + + shake = damage * 10 / Distance( origin, ent->r.currentOrigin ); + ent->client->ps.stats[ STAT_SHAKE ] += (int) shake; + } + return hitClient; } diff --git a/src/game/g_local.h b/src/game/g_local.h index 3bd8642..001c7d9 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -790,6 +790,7 @@ typedef enum IBE_LASTSPAWN, IBE_NOSURF, IBE_TOODENSE, + IBE_INVALIDSIZE, IBE_MAXERRORS } itemBuildError_t; @@ -1221,6 +1222,7 @@ extern vmCvar_t g_censorship; extern vmCvar_t g_unlimited; extern vmCvar_t g_instantBuild; extern vmCvar_t g_cuboidSizeLimit; +extern vmCvar_t g_cuboidHealthLimit; extern vmCvar_t g_buildableDensityLimit; extern vmCvar_t g_buildableDensityLimitRange; diff --git a/src/game/g_main.c b/src/game/g_main.c index 8f43d81..0f9c31c 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -152,6 +152,7 @@ vmCvar_t g_tag; vmCvar_t g_unlimited; vmCvar_t g_instantBuild; vmCvar_t g_cuboidSizeLimit; +vmCvar_t g_cuboidHealthLimit; vmCvar_t g_cuboidMode; vmCvar_t g_buildableDensityLimit; @@ -295,11 +296,12 @@ static cvarTable_t gameCvarTable[ ] = { &g_unlimited, "g_unlimited", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse }, { &g_instantBuild, "g_instantBuild", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse }, - { &g_cuboidSizeLimit, "g_cuboidSizeLimit", "0", CVAR_ARCHIVE, 0, qfalse }, + { &g_cuboidSizeLimit, "g_cuboidSizeLimit", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse }, + { &g_cuboidHealthLimit, "g_cuboidHealthLimit", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse }, { &g_cuboidMode, "g_cuboidMode", "0", CVAR_ARCHIVE, 0, qfalse }, - { &g_buildableDensityLimit, "g_buildableDensityLimit", "0", CVAR_ARCHIVE, 0, qfalse }, - { &g_buildableDensityLimitRange, "g_buildableDensityLimitRange", "0", CVAR_ARCHIVE, 0, qfalse } + { &g_buildableDensityLimit, "g_buildableDensityLimit", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse }, + { &g_buildableDensityLimitRange, "g_buildableDensityLimitRange", "0", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse } }; static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[ 0 ] ); diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c index 42c85b5..4a28083 100644 --- a/src/game/g_weapon.c +++ b/src/game/g_weapon.c @@ -45,7 +45,7 @@ void G_ForceWeaponChange( gentity_t *ent, weapon_t weapon ) ps->weaponTime = 250; ps->weaponstate = WEAPON_READY; } - + if( weapon == WP_NONE || !BG_InventoryContainsWeapon( weapon, ps->stats ) ) { @@ -76,7 +76,7 @@ void G_GiveClientMaxAmmo( gentity_t *ent, qboolean buyingEnergyAmmo ) for( i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++ ) { qboolean energyWeapon; - + energyWeapon = BG_Weapon( i )->usesEnergy; if( !BG_InventoryContainsWeapon( i, ent->client->ps.stats ) || BG_Weapon( i )->infiniteAmmo || @@ -84,10 +84,10 @@ void G_GiveClientMaxAmmo( gentity_t *ent, qboolean buyingEnergyAmmo ) ent->client->ps.ammo, ent->client->ps.clips ) || ( buyingEnergyAmmo && !energyWeapon ) ) continue; - + maxAmmo = BG_Weapon( i )->maxAmmo; maxClips = BG_Weapon( i )->maxClips; - + // Apply battery pack modifier if( energyWeapon && BG_InventoryContainsUpgrade( UP_BATTPACK, ent->client->ps.stats ) ) @@ -142,7 +142,7 @@ static void G_WideTrace( trace_t *tr, gentity_t *ent, float range, vec3_t end; VectorSet( mins, -width, -width, -height ); - VectorSet( maxs, width, width, height ); + VectorSet( maxs, width, width, width ); *target = NULL; @@ -459,8 +459,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 ); @@ -507,7 +507,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 ); } @@ -549,7 +549,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 @@ -606,8 +606,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 ); @@ -771,9 +771,9 @@ void CheckCkitRepair( gentity_t *ent ) if(BG_Buildable(traceEnt->s.modelindex,NULL)->cuboid) if(!BG_CuboidAttributes(traceEnt->s.modelindex)->repairable) return; - + bHealth = BG_Buildable( traceEnt->s.modelindex, traceEnt->cuboidSize )->health; - + if( traceEnt->health < bHealth ) { traceEnt->health += HBUILD_HEALRATE; @@ -960,7 +960,7 @@ void CheckGrabAttack( gentity_t *ent ) if( traceEnt->client->ps.stats[ STAT_HEALTH ] <= 0 ) return; - + if( !( traceEnt->client->ps.stats[ STAT_STATE ] & SS_GRABBED ) ) { AngleVectors( traceEnt->client->ps.viewangles, dir, NULL, NULL ); @@ -1001,7 +1001,7 @@ void poisonCloud( gentity_t *ent ) for( i = 0; i < num; i++ ) { humanPlayer = &g_entities[ entityList[ i ] ]; - + if( humanPlayer->client && humanPlayer->client->pers.teamSelection == TEAM_HUMANS ) { @@ -1066,13 +1066,12 @@ static void G_FindZapChainTargets( zap_t *zap ) distance = Distance( ent->s.origin, enemy->s.origin ); - if ( ( enemy->client - && - enemy->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS) || - ( enemy->s.eType == ET_BUILDABLE && BG_Buildable( enemy->s.modelindex, NULL )->team == TEAM_HUMANS && - ( !BG_Buildable(enemy->s.modelindex,NULL)->cuboid||BG_CuboidAttributes( enemy->s.modelindex )->zappable ) ) && - enemy->health > 0 && distance <= LEVEL2_AREAZAP_CHAIN_RANGE ) + if((enemy->client&&enemy->client->ps.stats[STAT_TEAM]==TEAM_HUMANS) || + (enemy->s.eType==ET_BUILDABLE&&BG_Buildable(enemy->s.modelindex,NULL)->team==TEAM_HUMANS && + (!BG_Buildable(enemy->s.modelindex,NULL)->cuboid||BG_CuboidAttributes(enemy->s.modelindex)->zappable)) && + enemy->health>0 && distance <= LEVEL2_AREAZAP_CHAIN_RANGE) { + // world-LOS check: trace against the world, ignoring other BODY entities trap_Trace( &tr, ent->s.origin, NULL, NULL, enemy->s.origin, ent->s.number, CONTENTS_SOLID ); @@ -1147,7 +1146,7 @@ static void G_CreateNewZap( gentity_t *creator, gentity_t *target ) { G_Damage( zap->targets[ i ], target, zap->creator, forward, target->s.origin, LEVEL2_AREAZAP_DMG * ( 1 - pow( (zap->distances[ i ] / - LEVEL2_AREAZAP_CHAIN_RANGE ), LEVEL2_AREAZAP_CHAIN_FALLOFF ) ) + 1, + LEVEL2_AREAZAP_CHAIN_RANGE ) , LEVEL2_AREAZAP_CHAIN_FALLOFF ) ) + 1, DAMAGE_NO_KNOCKBACK | DAMAGE_NO_LOCDAMAGE, MOD_LEVEL2_ZAP ); } @@ -1163,7 +1162,6 @@ static void G_CreateNewZap( gentity_t *creator, gentity_t *target ) } - /* =============== G_UpdateZaps @@ -1253,9 +1251,9 @@ void areaZapFire( gentity_t *ent ) if( traceEnt == NULL ) return; - if( ( ( traceEnt->client && traceEnt->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS ) || + if( ( traceEnt->client && traceEnt->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS ) || ( traceEnt->s.eType == ET_BUILDABLE && - BG_Buildable( traceEnt->s.modelindex, NULL )->team == TEAM_HUMANS ) ) && + BG_Buildable( traceEnt->s.modelindex, NULL )->team == TEAM_HUMANS ) && ( !BG_Buildable( traceEnt->s.modelindex, NULL )->cuboid || BG_CuboidAttributes( traceEnt->s.modelindex )->zappable ) ) { @@ -1309,7 +1307,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; @@ -1411,7 +1409,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 ) @@ -1419,7 +1417,7 @@ void G_CrushAttack( gentity_t *ent, gentity_t *victim ) ent->client->lastCrushTime = level.time; damage += LEVEL4_CRUSH_DAMAGE; } - + if( damage < 1 ) return; @@ -1527,7 +1525,7 @@ void FireWeapon2( gentity_t *ent ) case WP_ALEVEL2_UPG: areaZapFire( ent ); break; - + case WP_ABUILD: case WP_ABUILD2: case WP_HBUILD: @@ -1549,7 +1547,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 7f8836f..bf60cd0 100644 --- a/src/game/tremulous.h +++ b/src/game/tremulous.h @@ -95,7 +95,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #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 @@ -107,7 +107,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #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 @@ -139,7 +139,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define LEVEL4_CRUSH_REPEAT 500 // player damage repeat #define LEVEL4_BOMB_DMG 150 -#define LEVEL4_BOMB_RADIUS 400 +#define LEVEL4_BOMB_RADIUS 400 #define LEVEL4_BOMB_SPEED 500.0f #define LEVEL4_BOMB_REGEN 120000 // minimum time between getting a bomb @@ -692,7 +692,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #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 /* @@ -715,5 +715,5 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define ALIEN_IMPLANT_MATURING_CHANCE 0.05f //chance of maturing (every second) #define ALIEN_HATCHING_VELOCITY 250.0f -#define ALIEN_HATCHING_MAX_BATTLESUIT_HEALTH 80 // alien dies if tried to spawn from a battlesuit at least this healthy +#define ALIEN_HATCHING_MAX_BATTLESUIT_HEALTH 80 // alien dies if tried to spawn from a battlesuit at least this healthy #define ALIEN_FAILED_HATCH_DAMAGE 65 // shouldn't be higher than the value above |