summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Redman <trem.redman@gmail.com>2014-01-19 11:44:43 +0100
committerPaweł Redman <trem.redman@gmail.com>2014-01-19 11:44:43 +0100
commitf9a8b76c0f912cea66eacf71162a3090fda698d8 (patch)
tree02b97139346540ba9b1d324f5717ee4bc37f332c
parent0f00273fe1b2c7044dd23512408632eae6e0dca6 (diff)
0.1.6
-rw-r--r--assets/credits.txt50
-rw-r--r--assets/gfx/2d/basivision_1.jpgbin0 -> 8885 bytes
-rw-r--r--assets/gfx/2d/basivision_blip.jpgbin0 -> 7552 bytes
-rw-r--r--assets/gfx/2d/basivision_flare.jpgbin0 -> 7071 bytes
-rw-r--r--assets/gfx/blood/blood01frame01.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood01frame02.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood01frame03.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood01frame04.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood01frame05.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood01frame06.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood01frame07.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood01frame08.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood02frame01.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood02frame02.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood02frame03.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood02frame04.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood02frame05.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood03frame01 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood03frame02 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood03frame03 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood03frame04 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood03frame05 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood03frame06 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood03frame07 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood04frame01 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood04frame02 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood04frame03 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood04frame04 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood04frame05 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood04frame06 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood05frame01 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood05frame02 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood05frame03 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood05frame04 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood05frame05 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood05frame06 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood05frame07 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/blood05frame08 copy.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood01frame01.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood01frame02.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood01frame03.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood01frame04.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood01frame05.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood01frame06.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood01frame07.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood01frame08.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood03frame01.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood03frame02.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood03frame03.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood03frame04.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood03frame05.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood03frame06.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood03frame07.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood04frame01.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood04frame02.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood04frame03.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood04frame04.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood04frame05.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood04frame06.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greenblood05frame08.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/blood/greensplat.tgabin0 -> 72755 bytes
-rw-r--r--assets/gfx/fire/fire00.jpgbin0 -> 23246 bytes
-rw-r--r--assets/gfx/fire/fire01.jpgbin0 -> 25202 bytes
-rw-r--r--assets/gfx/fire/fire02.jpgbin0 -> 27274 bytes
-rw-r--r--assets/gfx/fire/fire03.jpgbin0 -> 28192 bytes
-rw-r--r--assets/gfx/fire/fire04.jpgbin0 -> 28515 bytes
-rw-r--r--assets/gfx/fire/fire05.jpgbin0 -> 28401 bytes
-rw-r--r--assets/gfx/fire/fire06.jpgbin0 -> 28600 bytes
-rw-r--r--assets/gfx/fire/fire07.jpgbin0 -> 28421 bytes
-rw-r--r--assets/gfx/fire/fire08.jpgbin0 -> 26885 bytes
-rw-r--r--assets/gfx/fire/fire09.jpgbin0 -> 24753 bytes
-rw-r--r--assets/gfx/fire/fire10.jpgbin0 -> 24379 bytes
-rw-r--r--assets/gfx/fire/fire11.jpgbin0 -> 23449 bytes
-rw-r--r--assets/gfx/fire/fire12.jpgbin0 -> 21637 bytes
-rw-r--r--assets/gfx/fire/fire13.jpgbin0 -> 19357 bytes
-rw-r--r--assets/gfx/fire/fire14.jpgbin0 -> 17830 bytes
-rw-r--r--assets/gfx/fire/fire15.jpgbin0 -> 15812 bytes
-rw-r--r--assets/gfx/fire/fire16.jpgbin0 -> 13833 bytes
-rw-r--r--assets/gfx/fire/fire17.jpgbin0 -> 11710 bytes
-rw-r--r--assets/gfx/fire/fire18.jpgbin0 -> 11178 bytes
-rw-r--r--assets/gfx/fire/fire19.jpgbin0 -> 11092 bytes
-rw-r--r--assets/gfx/fireball/fireball00.jpgbin0 -> 17026 bytes
-rw-r--r--assets/gfx/fireball/fireball01.jpgbin0 -> 17178 bytes
-rw-r--r--assets/gfx/fireball/fireball02.jpgbin0 -> 18248 bytes
-rw-r--r--assets/gfx/fireball/fireball03.jpgbin0 -> 24452 bytes
-rw-r--r--assets/gfx/fireball/fireball04.jpgbin0 -> 24235 bytes
-rw-r--r--assets/gfx/fireball/fireball05.jpgbin0 -> 23865 bytes
-rw-r--r--assets/gfx/fireball/fireball06.jpgbin0 -> 17903 bytes
-rw-r--r--assets/gfx/fireball/fireball07.jpgbin0 -> 18059 bytes
-rw-r--r--assets/gfx/fireball/fireball08.jpgbin0 -> 18805 bytes
-rw-r--r--assets/gfx/fireball/fireball09.jpgbin0 -> 18616 bytes
-rw-r--r--assets/gfx/fireball/fireball10.jpgbin0 -> 18647 bytes
-rw-r--r--assets/gfx/fireball/fireball11.jpgbin0 -> 24150 bytes
-rw-r--r--assets/gfx/fireball/fireball12.jpgbin0 -> 17694 bytes
-rw-r--r--assets/gfx/fireball/fireball13.jpgbin0 -> 23935 bytes
-rw-r--r--assets/gfx/fireball/fireball14.jpgbin0 -> 23433 bytes
-rw-r--r--assets/gfx/fireball/fireball15.jpgbin0 -> 16591 bytes
-rw-r--r--assets/gfx/fireball/fireball16.jpgbin0 -> 23481 bytes
-rw-r--r--assets/gfx/fireball/fireball17.jpgbin0 -> 17685 bytes
-rw-r--r--assets/gfx/fireball/fireball18.jpgbin0 -> 18056 bytes
-rw-r--r--assets/gfx/fireball/fireball19.jpgbin0 -> 17568 bytes
-rw-r--r--assets/gfx/flash/explosionflash.jpgbin0 -> 52728 bytes
-rw-r--r--assets/gfx/gas/gas01.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas02.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas03.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas04.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas05.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas06.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas07.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas08.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas09.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas10.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas11.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas12.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas13.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas14.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas15.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/gas/gas16.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/lcannon/primary_1.jpgbin0 -> 38607 bytes
-rw-r--r--assets/gfx/lcannon/primary_2.jpgbin0 -> 41021 bytes
-rw-r--r--assets/gfx/lcannon/primary_3.jpgbin0 -> 39236 bytes
-rw-r--r--assets/gfx/lcannon/primary_4.jpgbin0 -> 38450 bytes
-rw-r--r--assets/gfx/lcannon/radial01.jpgbin0 -> 101395 bytes
-rw-r--r--assets/gfx/lcannon/radial02.jpgbin0 -> 92436 bytes
-rw-r--r--assets/gfx/lcannon/radial03.jpgbin0 -> 85187 bytes
-rw-r--r--assets/gfx/lcannon/radial04.jpgbin0 -> 66716 bytes
-rw-r--r--assets/gfx/lcannon/radial05.jpgbin0 -> 33331 bytes
-rw-r--r--assets/gfx/lcannon/radial06.jpgbin0 -> 16101 bytes
-rw-r--r--assets/gfx/misc/creep.tgabin0 -> 1048620 bytes
-rw-r--r--assets/gfx/misc/greenbuild.tgabin0 -> 556 bytes
-rw-r--r--assets/gfx/misc/redbuild.tgabin0 -> 556 bytes
-rw-r--r--assets/gfx/smoke/smoke01.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke02.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke03.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke04.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke05.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke06.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke07.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke08.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke09.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke10.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke11.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke12.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke13.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke14.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke15.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/smoke/smoke16.tgabin0 -> 16428 bytes
-rw-r--r--assets/gfx/spark/spark00.jpgbin0 -> 13797 bytes
-rw-r--r--assets/gfx/spark/spark01frame01.jpgbin0 -> 27425 bytes
-rw-r--r--assets/gfx/spark/spark01frame02.jpgbin0 -> 20159 bytes
-rw-r--r--assets/gfx/spark/spark01frame03.jpgbin0 -> 16348 bytes
-rw-r--r--assets/gfx/sprites/smoke.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/sprites/smoke_blue.tgabin0 -> 65580 bytes
-rw-r--r--assets/gfx/sprites/smoke_green.tgabin0 -> 49196 bytes
-rw-r--r--assets/models/weapons/abuildupg/weapon.cfg20
-rw-r--r--assets/models/weapons/blaster/flash0.wavbin0 -> 39544 bytes
-rw-r--r--assets/models/weapons/blaster/hit.wavbin0 -> 36736 bytes
-rw-r--r--assets/models/weapons/blaster/weapon.cfg16
-rw-r--r--assets/scripts/core.shader190
-rw-r--r--assets/scripts/cuboid.shader30
-rw-r--r--assets/scripts/g_alienattackfx.particle135
-rw-r--r--assets/scripts/g_alienattackfx.shader145
-rw-r--r--assets/scripts/g_alienblood.particle334
-rw-r--r--assets/scripts/g_alienblood.shader163
-rw-r--r--assets/scripts/g_alienbuildablefx.particle105
-rw-r--r--assets/scripts/g_alienmodelshaders.shader229
-rw-r--r--assets/scripts/g_buildmarker.shader17
-rw-r--r--assets/scripts/g_decals.shader114
-rw-r--r--assets/scripts/g_disconnect.particle25
-rw-r--r--assets/scripts/g_fire.shader459
-rw-r--r--assets/scripts/g_humanblood.particle35
-rw-r--r--assets/scripts/g_humanblood.shader79
-rw-r--r--assets/scripts/g_humanbuildablefx.particle413
-rw-r--r--assets/scripts/g_humanbuildablefx.shader192
-rw-r--r--assets/scripts/g_humanmodelshaders.shader653
-rw-r--r--assets/scripts/g_humanweaponfx.particle907
-rw-r--r--assets/scripts/g_humanweaponfx.shader142
-rw-r--r--assets/scripts/g_humanweaponfx.trail25
-rw-r--r--assets/scripts/g_jetpack.particle95
-rw-r--r--assets/scripts/g_lightning.trail61
-rw-r--r--assets/scripts/g_misc.shader141
-rw-r--r--assets/scripts/g_muzzleflashes.shader101
-rw-r--r--assets/scripts/particles_reference.txt58
-rw-r--r--assets/scripts/ui_crosshairs.shader96
-rw-r--r--assets/scripts/ui_hud.shader38
-rw-r--r--assets/scripts/ui_mainmenu.shader43
-rw-r--r--assets/scripts/water.shader57
-rw-r--r--assets/sound/buildables/acid_tube/acidsplat.wavbin0 -> 107446 bytes
-rw-r--r--assets/sound/buildables/tesla/idle1.wavbin0 -> 454566 bytes
-rw-r--r--assets/sound/player/human_bsuit/step1.wavbin0 -> 70746 bytes
-rw-r--r--assets/sound/player/human_bsuit/step2.wavbin0 -> 70746 bytes
-rw-r--r--assets/sound/player/human_bsuit/step3.wavbin0 -> 70746 bytes
-rw-r--r--assets/sound/player/human_bsuit/step4.wavbin0 -> 70746 bytes
-rw-r--r--assets/sound/upgrades/jetpack/lowfuel.wavbin66242 -> 14482 bytes
-rw-r--r--assets/ui/ingame_options.menu23
-rw-r--r--src/cgame/cg_buildable.c164
-rw-r--r--src/cgame/cg_consolecmds.c1
-rw-r--r--src/cgame/cg_draw.c13
-rw-r--r--src/cgame/cg_local.h35
-rw-r--r--src/cgame/cg_main.c45
-rw-r--r--src/cgame/cg_players.c28
-rw-r--r--src/cgame/cg_scanner.c72
-rw-r--r--src/cgame/cg_servercmds.c35
-rw-r--r--src/cgame/cg_tutorial.c91
-rw-r--r--src/cgame/cg_view.c12
-rw-r--r--src/cgame/cg_weapons.c12
-rw-r--r--src/game/bg_misc.c13
-rw-r--r--src/game/bg_pmove.c42
-rw-r--r--src/game/bg_public.h8
-rw-r--r--src/game/g_active.c32
-rw-r--r--src/game/g_admin.c6
-rw-r--r--src/game/g_buildable.c78
-rw-r--r--src/game/g_client.c9
-rw-r--r--src/game/g_cmds.c138
-rw-r--r--src/game/g_combat.c27
-rw-r--r--src/game/g_local.h2
-rw-r--r--src/game/g_main.c8
-rw-r--r--src/game/g_weapon.c9
-rw-r--r--src/game/tremulous.h2
219 files changed, 5745 insertions, 328 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
new file mode 100644
index 0000000..a9a94df
--- /dev/null
+++ b/assets/gfx/2d/basivision_1.jpg
Binary files differ
diff --git a/assets/gfx/2d/basivision_blip.jpg b/assets/gfx/2d/basivision_blip.jpg
new file mode 100644
index 0000000..e087678
--- /dev/null
+++ b/assets/gfx/2d/basivision_blip.jpg
Binary files differ
diff --git a/assets/gfx/2d/basivision_flare.jpg b/assets/gfx/2d/basivision_flare.jpg
new file mode 100644
index 0000000..0fa17f7
--- /dev/null
+++ b/assets/gfx/2d/basivision_flare.jpg
Binary files differ
diff --git a/assets/gfx/blood/blood01frame01.tga b/assets/gfx/blood/blood01frame01.tga
new file mode 100644
index 0000000..66b8ff4
--- /dev/null
+++ b/assets/gfx/blood/blood01frame01.tga
Binary files differ
diff --git a/assets/gfx/blood/blood01frame02.tga b/assets/gfx/blood/blood01frame02.tga
new file mode 100644
index 0000000..196541b
--- /dev/null
+++ b/assets/gfx/blood/blood01frame02.tga
Binary files differ
diff --git a/assets/gfx/blood/blood01frame03.tga b/assets/gfx/blood/blood01frame03.tga
new file mode 100644
index 0000000..49bde52
--- /dev/null
+++ b/assets/gfx/blood/blood01frame03.tga
Binary files differ
diff --git a/assets/gfx/blood/blood01frame04.tga b/assets/gfx/blood/blood01frame04.tga
new file mode 100644
index 0000000..86be0e5
--- /dev/null
+++ b/assets/gfx/blood/blood01frame04.tga
Binary files differ
diff --git a/assets/gfx/blood/blood01frame05.tga b/assets/gfx/blood/blood01frame05.tga
new file mode 100644
index 0000000..b21b11e
--- /dev/null
+++ b/assets/gfx/blood/blood01frame05.tga
Binary files differ
diff --git a/assets/gfx/blood/blood01frame06.tga b/assets/gfx/blood/blood01frame06.tga
new file mode 100644
index 0000000..1590f3a
--- /dev/null
+++ b/assets/gfx/blood/blood01frame06.tga
Binary files differ
diff --git a/assets/gfx/blood/blood01frame07.tga b/assets/gfx/blood/blood01frame07.tga
new file mode 100644
index 0000000..5b8bf9c
--- /dev/null
+++ b/assets/gfx/blood/blood01frame07.tga
Binary files differ
diff --git a/assets/gfx/blood/blood01frame08.tga b/assets/gfx/blood/blood01frame08.tga
new file mode 100644
index 0000000..82a1189
--- /dev/null
+++ b/assets/gfx/blood/blood01frame08.tga
Binary files differ
diff --git a/assets/gfx/blood/blood02frame01.tga b/assets/gfx/blood/blood02frame01.tga
new file mode 100644
index 0000000..414b1e9
--- /dev/null
+++ b/assets/gfx/blood/blood02frame01.tga
Binary files differ
diff --git a/assets/gfx/blood/blood02frame02.tga b/assets/gfx/blood/blood02frame02.tga
new file mode 100644
index 0000000..3aa75a4
--- /dev/null
+++ b/assets/gfx/blood/blood02frame02.tga
Binary files differ
diff --git a/assets/gfx/blood/blood02frame03.tga b/assets/gfx/blood/blood02frame03.tga
new file mode 100644
index 0000000..758c401
--- /dev/null
+++ b/assets/gfx/blood/blood02frame03.tga
Binary files differ
diff --git a/assets/gfx/blood/blood02frame04.tga b/assets/gfx/blood/blood02frame04.tga
new file mode 100644
index 0000000..21675a4
--- /dev/null
+++ b/assets/gfx/blood/blood02frame04.tga
Binary files differ
diff --git a/assets/gfx/blood/blood02frame05.tga b/assets/gfx/blood/blood02frame05.tga
new file mode 100644
index 0000000..5aee6e0
--- /dev/null
+++ b/assets/gfx/blood/blood02frame05.tga
Binary files differ
diff --git a/assets/gfx/blood/blood03frame01 copy.tga b/assets/gfx/blood/blood03frame01 copy.tga
new file mode 100644
index 0000000..08511c9
--- /dev/null
+++ b/assets/gfx/blood/blood03frame01 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood03frame02 copy.tga b/assets/gfx/blood/blood03frame02 copy.tga
new file mode 100644
index 0000000..4c51642
--- /dev/null
+++ b/assets/gfx/blood/blood03frame02 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood03frame03 copy.tga b/assets/gfx/blood/blood03frame03 copy.tga
new file mode 100644
index 0000000..9f4a827
--- /dev/null
+++ b/assets/gfx/blood/blood03frame03 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood03frame04 copy.tga b/assets/gfx/blood/blood03frame04 copy.tga
new file mode 100644
index 0000000..6f8459d
--- /dev/null
+++ b/assets/gfx/blood/blood03frame04 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood03frame05 copy.tga b/assets/gfx/blood/blood03frame05 copy.tga
new file mode 100644
index 0000000..b2122f0
--- /dev/null
+++ b/assets/gfx/blood/blood03frame05 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood03frame06 copy.tga b/assets/gfx/blood/blood03frame06 copy.tga
new file mode 100644
index 0000000..bd604fc
--- /dev/null
+++ b/assets/gfx/blood/blood03frame06 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood03frame07 copy.tga b/assets/gfx/blood/blood03frame07 copy.tga
new file mode 100644
index 0000000..ca57745
--- /dev/null
+++ b/assets/gfx/blood/blood03frame07 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood04frame01 copy.tga b/assets/gfx/blood/blood04frame01 copy.tga
new file mode 100644
index 0000000..a3ff49e
--- /dev/null
+++ b/assets/gfx/blood/blood04frame01 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood04frame02 copy.tga b/assets/gfx/blood/blood04frame02 copy.tga
new file mode 100644
index 0000000..ca6ec09
--- /dev/null
+++ b/assets/gfx/blood/blood04frame02 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood04frame03 copy.tga b/assets/gfx/blood/blood04frame03 copy.tga
new file mode 100644
index 0000000..c2b90c6
--- /dev/null
+++ b/assets/gfx/blood/blood04frame03 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood04frame04 copy.tga b/assets/gfx/blood/blood04frame04 copy.tga
new file mode 100644
index 0000000..9fa3fc3
--- /dev/null
+++ b/assets/gfx/blood/blood04frame04 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood04frame05 copy.tga b/assets/gfx/blood/blood04frame05 copy.tga
new file mode 100644
index 0000000..f3b2680
--- /dev/null
+++ b/assets/gfx/blood/blood04frame05 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood04frame06 copy.tga b/assets/gfx/blood/blood04frame06 copy.tga
new file mode 100644
index 0000000..59a75d6
--- /dev/null
+++ b/assets/gfx/blood/blood04frame06 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood05frame01 copy.tga b/assets/gfx/blood/blood05frame01 copy.tga
new file mode 100644
index 0000000..93afa3b
--- /dev/null
+++ b/assets/gfx/blood/blood05frame01 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood05frame02 copy.tga b/assets/gfx/blood/blood05frame02 copy.tga
new file mode 100644
index 0000000..a72b0d4
--- /dev/null
+++ b/assets/gfx/blood/blood05frame02 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood05frame03 copy.tga b/assets/gfx/blood/blood05frame03 copy.tga
new file mode 100644
index 0000000..74fe936
--- /dev/null
+++ b/assets/gfx/blood/blood05frame03 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood05frame04 copy.tga b/assets/gfx/blood/blood05frame04 copy.tga
new file mode 100644
index 0000000..0920225
--- /dev/null
+++ b/assets/gfx/blood/blood05frame04 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood05frame05 copy.tga b/assets/gfx/blood/blood05frame05 copy.tga
new file mode 100644
index 0000000..1e6b389
--- /dev/null
+++ b/assets/gfx/blood/blood05frame05 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood05frame06 copy.tga b/assets/gfx/blood/blood05frame06 copy.tga
new file mode 100644
index 0000000..ffe9c45
--- /dev/null
+++ b/assets/gfx/blood/blood05frame06 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood05frame07 copy.tga b/assets/gfx/blood/blood05frame07 copy.tga
new file mode 100644
index 0000000..031fd8b
--- /dev/null
+++ b/assets/gfx/blood/blood05frame07 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/blood05frame08 copy.tga b/assets/gfx/blood/blood05frame08 copy.tga
new file mode 100644
index 0000000..4dac09c
--- /dev/null
+++ b/assets/gfx/blood/blood05frame08 copy.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood01frame01.tga b/assets/gfx/blood/greenblood01frame01.tga
new file mode 100644
index 0000000..da576d3
--- /dev/null
+++ b/assets/gfx/blood/greenblood01frame01.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood01frame02.tga b/assets/gfx/blood/greenblood01frame02.tga
new file mode 100644
index 0000000..3597e8d
--- /dev/null
+++ b/assets/gfx/blood/greenblood01frame02.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood01frame03.tga b/assets/gfx/blood/greenblood01frame03.tga
new file mode 100644
index 0000000..6e3b4a6
--- /dev/null
+++ b/assets/gfx/blood/greenblood01frame03.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood01frame04.tga b/assets/gfx/blood/greenblood01frame04.tga
new file mode 100644
index 0000000..6bf3dd1
--- /dev/null
+++ b/assets/gfx/blood/greenblood01frame04.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood01frame05.tga b/assets/gfx/blood/greenblood01frame05.tga
new file mode 100644
index 0000000..4282e9c
--- /dev/null
+++ b/assets/gfx/blood/greenblood01frame05.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood01frame06.tga b/assets/gfx/blood/greenblood01frame06.tga
new file mode 100644
index 0000000..ad815ff
--- /dev/null
+++ b/assets/gfx/blood/greenblood01frame06.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood01frame07.tga b/assets/gfx/blood/greenblood01frame07.tga
new file mode 100644
index 0000000..5a18f71
--- /dev/null
+++ b/assets/gfx/blood/greenblood01frame07.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood01frame08.tga b/assets/gfx/blood/greenblood01frame08.tga
new file mode 100644
index 0000000..4aaf680
--- /dev/null
+++ b/assets/gfx/blood/greenblood01frame08.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood03frame01.tga b/assets/gfx/blood/greenblood03frame01.tga
new file mode 100644
index 0000000..201a9df
--- /dev/null
+++ b/assets/gfx/blood/greenblood03frame01.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood03frame02.tga b/assets/gfx/blood/greenblood03frame02.tga
new file mode 100644
index 0000000..5feabbd
--- /dev/null
+++ b/assets/gfx/blood/greenblood03frame02.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood03frame03.tga b/assets/gfx/blood/greenblood03frame03.tga
new file mode 100644
index 0000000..bc02867
--- /dev/null
+++ b/assets/gfx/blood/greenblood03frame03.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood03frame04.tga b/assets/gfx/blood/greenblood03frame04.tga
new file mode 100644
index 0000000..a5ed762
--- /dev/null
+++ b/assets/gfx/blood/greenblood03frame04.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood03frame05.tga b/assets/gfx/blood/greenblood03frame05.tga
new file mode 100644
index 0000000..83d533d
--- /dev/null
+++ b/assets/gfx/blood/greenblood03frame05.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood03frame06.tga b/assets/gfx/blood/greenblood03frame06.tga
new file mode 100644
index 0000000..ade7cde
--- /dev/null
+++ b/assets/gfx/blood/greenblood03frame06.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood03frame07.tga b/assets/gfx/blood/greenblood03frame07.tga
new file mode 100644
index 0000000..b29b2ba
--- /dev/null
+++ b/assets/gfx/blood/greenblood03frame07.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood04frame01.tga b/assets/gfx/blood/greenblood04frame01.tga
new file mode 100644
index 0000000..fcacebd
--- /dev/null
+++ b/assets/gfx/blood/greenblood04frame01.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood04frame02.tga b/assets/gfx/blood/greenblood04frame02.tga
new file mode 100644
index 0000000..beff604
--- /dev/null
+++ b/assets/gfx/blood/greenblood04frame02.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood04frame03.tga b/assets/gfx/blood/greenblood04frame03.tga
new file mode 100644
index 0000000..afe2b4d
--- /dev/null
+++ b/assets/gfx/blood/greenblood04frame03.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood04frame04.tga b/assets/gfx/blood/greenblood04frame04.tga
new file mode 100644
index 0000000..9c03a3d
--- /dev/null
+++ b/assets/gfx/blood/greenblood04frame04.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood04frame05.tga b/assets/gfx/blood/greenblood04frame05.tga
new file mode 100644
index 0000000..7183e86
--- /dev/null
+++ b/assets/gfx/blood/greenblood04frame05.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood04frame06.tga b/assets/gfx/blood/greenblood04frame06.tga
new file mode 100644
index 0000000..a8cd043
--- /dev/null
+++ b/assets/gfx/blood/greenblood04frame06.tga
Binary files differ
diff --git a/assets/gfx/blood/greenblood05frame08.tga b/assets/gfx/blood/greenblood05frame08.tga
new file mode 100644
index 0000000..ecfb9bb
--- /dev/null
+++ b/assets/gfx/blood/greenblood05frame08.tga
Binary files differ
diff --git a/assets/gfx/blood/greensplat.tga b/assets/gfx/blood/greensplat.tga
new file mode 100644
index 0000000..e2933a0
--- /dev/null
+++ b/assets/gfx/blood/greensplat.tga
Binary files differ
diff --git a/assets/gfx/fire/fire00.jpg b/assets/gfx/fire/fire00.jpg
new file mode 100644
index 0000000..e75edfa
--- /dev/null
+++ b/assets/gfx/fire/fire00.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire01.jpg b/assets/gfx/fire/fire01.jpg
new file mode 100644
index 0000000..61f1a13
--- /dev/null
+++ b/assets/gfx/fire/fire01.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire02.jpg b/assets/gfx/fire/fire02.jpg
new file mode 100644
index 0000000..15241a7
--- /dev/null
+++ b/assets/gfx/fire/fire02.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire03.jpg b/assets/gfx/fire/fire03.jpg
new file mode 100644
index 0000000..99b1e00
--- /dev/null
+++ b/assets/gfx/fire/fire03.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire04.jpg b/assets/gfx/fire/fire04.jpg
new file mode 100644
index 0000000..19ffc89
--- /dev/null
+++ b/assets/gfx/fire/fire04.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire05.jpg b/assets/gfx/fire/fire05.jpg
new file mode 100644
index 0000000..3074bad
--- /dev/null
+++ b/assets/gfx/fire/fire05.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire06.jpg b/assets/gfx/fire/fire06.jpg
new file mode 100644
index 0000000..ff7cd35
--- /dev/null
+++ b/assets/gfx/fire/fire06.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire07.jpg b/assets/gfx/fire/fire07.jpg
new file mode 100644
index 0000000..07a22b4
--- /dev/null
+++ b/assets/gfx/fire/fire07.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire08.jpg b/assets/gfx/fire/fire08.jpg
new file mode 100644
index 0000000..471628e
--- /dev/null
+++ b/assets/gfx/fire/fire08.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire09.jpg b/assets/gfx/fire/fire09.jpg
new file mode 100644
index 0000000..626cbf8
--- /dev/null
+++ b/assets/gfx/fire/fire09.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire10.jpg b/assets/gfx/fire/fire10.jpg
new file mode 100644
index 0000000..d60a449
--- /dev/null
+++ b/assets/gfx/fire/fire10.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire11.jpg b/assets/gfx/fire/fire11.jpg
new file mode 100644
index 0000000..c99d085
--- /dev/null
+++ b/assets/gfx/fire/fire11.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire12.jpg b/assets/gfx/fire/fire12.jpg
new file mode 100644
index 0000000..89faf80
--- /dev/null
+++ b/assets/gfx/fire/fire12.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire13.jpg b/assets/gfx/fire/fire13.jpg
new file mode 100644
index 0000000..3146f15
--- /dev/null
+++ b/assets/gfx/fire/fire13.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire14.jpg b/assets/gfx/fire/fire14.jpg
new file mode 100644
index 0000000..5fef77a
--- /dev/null
+++ b/assets/gfx/fire/fire14.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire15.jpg b/assets/gfx/fire/fire15.jpg
new file mode 100644
index 0000000..164ce36
--- /dev/null
+++ b/assets/gfx/fire/fire15.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire16.jpg b/assets/gfx/fire/fire16.jpg
new file mode 100644
index 0000000..2ee406b
--- /dev/null
+++ b/assets/gfx/fire/fire16.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire17.jpg b/assets/gfx/fire/fire17.jpg
new file mode 100644
index 0000000..8fe1668
--- /dev/null
+++ b/assets/gfx/fire/fire17.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire18.jpg b/assets/gfx/fire/fire18.jpg
new file mode 100644
index 0000000..08250eb
--- /dev/null
+++ b/assets/gfx/fire/fire18.jpg
Binary files differ
diff --git a/assets/gfx/fire/fire19.jpg b/assets/gfx/fire/fire19.jpg
new file mode 100644
index 0000000..fa6f9fc
--- /dev/null
+++ b/assets/gfx/fire/fire19.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball00.jpg b/assets/gfx/fireball/fireball00.jpg
new file mode 100644
index 0000000..613b695
--- /dev/null
+++ b/assets/gfx/fireball/fireball00.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball01.jpg b/assets/gfx/fireball/fireball01.jpg
new file mode 100644
index 0000000..0f46ccf
--- /dev/null
+++ b/assets/gfx/fireball/fireball01.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball02.jpg b/assets/gfx/fireball/fireball02.jpg
new file mode 100644
index 0000000..04b9326
--- /dev/null
+++ b/assets/gfx/fireball/fireball02.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball03.jpg b/assets/gfx/fireball/fireball03.jpg
new file mode 100644
index 0000000..5211565
--- /dev/null
+++ b/assets/gfx/fireball/fireball03.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball04.jpg b/assets/gfx/fireball/fireball04.jpg
new file mode 100644
index 0000000..99d5ca6
--- /dev/null
+++ b/assets/gfx/fireball/fireball04.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball05.jpg b/assets/gfx/fireball/fireball05.jpg
new file mode 100644
index 0000000..607c5ab
--- /dev/null
+++ b/assets/gfx/fireball/fireball05.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball06.jpg b/assets/gfx/fireball/fireball06.jpg
new file mode 100644
index 0000000..4c1d30d
--- /dev/null
+++ b/assets/gfx/fireball/fireball06.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball07.jpg b/assets/gfx/fireball/fireball07.jpg
new file mode 100644
index 0000000..f338632
--- /dev/null
+++ b/assets/gfx/fireball/fireball07.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball08.jpg b/assets/gfx/fireball/fireball08.jpg
new file mode 100644
index 0000000..2d47087
--- /dev/null
+++ b/assets/gfx/fireball/fireball08.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball09.jpg b/assets/gfx/fireball/fireball09.jpg
new file mode 100644
index 0000000..a8f5ad2
--- /dev/null
+++ b/assets/gfx/fireball/fireball09.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball10.jpg b/assets/gfx/fireball/fireball10.jpg
new file mode 100644
index 0000000..3cc018f
--- /dev/null
+++ b/assets/gfx/fireball/fireball10.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball11.jpg b/assets/gfx/fireball/fireball11.jpg
new file mode 100644
index 0000000..5cf7e63
--- /dev/null
+++ b/assets/gfx/fireball/fireball11.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball12.jpg b/assets/gfx/fireball/fireball12.jpg
new file mode 100644
index 0000000..b304086
--- /dev/null
+++ b/assets/gfx/fireball/fireball12.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball13.jpg b/assets/gfx/fireball/fireball13.jpg
new file mode 100644
index 0000000..a5b28af
--- /dev/null
+++ b/assets/gfx/fireball/fireball13.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball14.jpg b/assets/gfx/fireball/fireball14.jpg
new file mode 100644
index 0000000..9b22b1b
--- /dev/null
+++ b/assets/gfx/fireball/fireball14.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball15.jpg b/assets/gfx/fireball/fireball15.jpg
new file mode 100644
index 0000000..4cb838d
--- /dev/null
+++ b/assets/gfx/fireball/fireball15.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball16.jpg b/assets/gfx/fireball/fireball16.jpg
new file mode 100644
index 0000000..948b2c0
--- /dev/null
+++ b/assets/gfx/fireball/fireball16.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball17.jpg b/assets/gfx/fireball/fireball17.jpg
new file mode 100644
index 0000000..79c89a6
--- /dev/null
+++ b/assets/gfx/fireball/fireball17.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball18.jpg b/assets/gfx/fireball/fireball18.jpg
new file mode 100644
index 0000000..644e608
--- /dev/null
+++ b/assets/gfx/fireball/fireball18.jpg
Binary files differ
diff --git a/assets/gfx/fireball/fireball19.jpg b/assets/gfx/fireball/fireball19.jpg
new file mode 100644
index 0000000..214c11c
--- /dev/null
+++ b/assets/gfx/fireball/fireball19.jpg
Binary files differ
diff --git a/assets/gfx/flash/explosionflash.jpg b/assets/gfx/flash/explosionflash.jpg
new file mode 100644
index 0000000..c80ef7d
--- /dev/null
+++ b/assets/gfx/flash/explosionflash.jpg
Binary files differ
diff --git a/assets/gfx/gas/gas01.tga b/assets/gfx/gas/gas01.tga
new file mode 100644
index 0000000..0c9693c
--- /dev/null
+++ b/assets/gfx/gas/gas01.tga
Binary files differ
diff --git a/assets/gfx/gas/gas02.tga b/assets/gfx/gas/gas02.tga
new file mode 100644
index 0000000..040dcd0
--- /dev/null
+++ b/assets/gfx/gas/gas02.tga
Binary files differ
diff --git a/assets/gfx/gas/gas03.tga b/assets/gfx/gas/gas03.tga
new file mode 100644
index 0000000..6a7ff54
--- /dev/null
+++ b/assets/gfx/gas/gas03.tga
Binary files differ
diff --git a/assets/gfx/gas/gas04.tga b/assets/gfx/gas/gas04.tga
new file mode 100644
index 0000000..90e67cb
--- /dev/null
+++ b/assets/gfx/gas/gas04.tga
Binary files differ
diff --git a/assets/gfx/gas/gas05.tga b/assets/gfx/gas/gas05.tga
new file mode 100644
index 0000000..30585ff
--- /dev/null
+++ b/assets/gfx/gas/gas05.tga
Binary files differ
diff --git a/assets/gfx/gas/gas06.tga b/assets/gfx/gas/gas06.tga
new file mode 100644
index 0000000..cb337e5
--- /dev/null
+++ b/assets/gfx/gas/gas06.tga
Binary files differ
diff --git a/assets/gfx/gas/gas07.tga b/assets/gfx/gas/gas07.tga
new file mode 100644
index 0000000..2a41733
--- /dev/null
+++ b/assets/gfx/gas/gas07.tga
Binary files differ
diff --git a/assets/gfx/gas/gas08.tga b/assets/gfx/gas/gas08.tga
new file mode 100644
index 0000000..1546015
--- /dev/null
+++ b/assets/gfx/gas/gas08.tga
Binary files differ
diff --git a/assets/gfx/gas/gas09.tga b/assets/gfx/gas/gas09.tga
new file mode 100644
index 0000000..162c283
--- /dev/null
+++ b/assets/gfx/gas/gas09.tga
Binary files differ
diff --git a/assets/gfx/gas/gas10.tga b/assets/gfx/gas/gas10.tga
new file mode 100644
index 0000000..8804c4a
--- /dev/null
+++ b/assets/gfx/gas/gas10.tga
Binary files differ
diff --git a/assets/gfx/gas/gas11.tga b/assets/gfx/gas/gas11.tga
new file mode 100644
index 0000000..f1f28be
--- /dev/null
+++ b/assets/gfx/gas/gas11.tga
Binary files differ
diff --git a/assets/gfx/gas/gas12.tga b/assets/gfx/gas/gas12.tga
new file mode 100644
index 0000000..e8e6808
--- /dev/null
+++ b/assets/gfx/gas/gas12.tga
Binary files differ
diff --git a/assets/gfx/gas/gas13.tga b/assets/gfx/gas/gas13.tga
new file mode 100644
index 0000000..e56d4ce
--- /dev/null
+++ b/assets/gfx/gas/gas13.tga
Binary files differ
diff --git a/assets/gfx/gas/gas14.tga b/assets/gfx/gas/gas14.tga
new file mode 100644
index 0000000..0b96bb8
--- /dev/null
+++ b/assets/gfx/gas/gas14.tga
Binary files differ
diff --git a/assets/gfx/gas/gas15.tga b/assets/gfx/gas/gas15.tga
new file mode 100644
index 0000000..85dd3d8
--- /dev/null
+++ b/assets/gfx/gas/gas15.tga
Binary files differ
diff --git a/assets/gfx/gas/gas16.tga b/assets/gfx/gas/gas16.tga
new file mode 100644
index 0000000..34a7254
--- /dev/null
+++ b/assets/gfx/gas/gas16.tga
Binary files differ
diff --git a/assets/gfx/lcannon/primary_1.jpg b/assets/gfx/lcannon/primary_1.jpg
new file mode 100644
index 0000000..262b3dd
--- /dev/null
+++ b/assets/gfx/lcannon/primary_1.jpg
Binary files differ
diff --git a/assets/gfx/lcannon/primary_2.jpg b/assets/gfx/lcannon/primary_2.jpg
new file mode 100644
index 0000000..5536496
--- /dev/null
+++ b/assets/gfx/lcannon/primary_2.jpg
Binary files differ
diff --git a/assets/gfx/lcannon/primary_3.jpg b/assets/gfx/lcannon/primary_3.jpg
new file mode 100644
index 0000000..12961b3
--- /dev/null
+++ b/assets/gfx/lcannon/primary_3.jpg
Binary files differ
diff --git a/assets/gfx/lcannon/primary_4.jpg b/assets/gfx/lcannon/primary_4.jpg
new file mode 100644
index 0000000..0624736
--- /dev/null
+++ b/assets/gfx/lcannon/primary_4.jpg
Binary files differ
diff --git a/assets/gfx/lcannon/radial01.jpg b/assets/gfx/lcannon/radial01.jpg
new file mode 100644
index 0000000..624d9ad
--- /dev/null
+++ b/assets/gfx/lcannon/radial01.jpg
Binary files differ
diff --git a/assets/gfx/lcannon/radial02.jpg b/assets/gfx/lcannon/radial02.jpg
new file mode 100644
index 0000000..7f93896
--- /dev/null
+++ b/assets/gfx/lcannon/radial02.jpg
Binary files differ
diff --git a/assets/gfx/lcannon/radial03.jpg b/assets/gfx/lcannon/radial03.jpg
new file mode 100644
index 0000000..52c01f1
--- /dev/null
+++ b/assets/gfx/lcannon/radial03.jpg
Binary files differ
diff --git a/assets/gfx/lcannon/radial04.jpg b/assets/gfx/lcannon/radial04.jpg
new file mode 100644
index 0000000..1919265
--- /dev/null
+++ b/assets/gfx/lcannon/radial04.jpg
Binary files differ
diff --git a/assets/gfx/lcannon/radial05.jpg b/assets/gfx/lcannon/radial05.jpg
new file mode 100644
index 0000000..ff098cf
--- /dev/null
+++ b/assets/gfx/lcannon/radial05.jpg
Binary files differ
diff --git a/assets/gfx/lcannon/radial06.jpg b/assets/gfx/lcannon/radial06.jpg
new file mode 100644
index 0000000..f719b35
--- /dev/null
+++ b/assets/gfx/lcannon/radial06.jpg
Binary files differ
diff --git a/assets/gfx/misc/creep.tga b/assets/gfx/misc/creep.tga
new file mode 100644
index 0000000..b437dd0
--- /dev/null
+++ b/assets/gfx/misc/creep.tga
Binary files differ
diff --git a/assets/gfx/misc/greenbuild.tga b/assets/gfx/misc/greenbuild.tga
new file mode 100644
index 0000000..7c626f5
--- /dev/null
+++ b/assets/gfx/misc/greenbuild.tga
Binary files differ
diff --git a/assets/gfx/misc/redbuild.tga b/assets/gfx/misc/redbuild.tga
new file mode 100644
index 0000000..e7db833
--- /dev/null
+++ b/assets/gfx/misc/redbuild.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke01.tga b/assets/gfx/smoke/smoke01.tga
new file mode 100644
index 0000000..220b5ad
--- /dev/null
+++ b/assets/gfx/smoke/smoke01.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke02.tga b/assets/gfx/smoke/smoke02.tga
new file mode 100644
index 0000000..8941945
--- /dev/null
+++ b/assets/gfx/smoke/smoke02.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke03.tga b/assets/gfx/smoke/smoke03.tga
new file mode 100644
index 0000000..c119d74
--- /dev/null
+++ b/assets/gfx/smoke/smoke03.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke04.tga b/assets/gfx/smoke/smoke04.tga
new file mode 100644
index 0000000..e59fad3
--- /dev/null
+++ b/assets/gfx/smoke/smoke04.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke05.tga b/assets/gfx/smoke/smoke05.tga
new file mode 100644
index 0000000..aec8a94
--- /dev/null
+++ b/assets/gfx/smoke/smoke05.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke06.tga b/assets/gfx/smoke/smoke06.tga
new file mode 100644
index 0000000..aa9c1fb
--- /dev/null
+++ b/assets/gfx/smoke/smoke06.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke07.tga b/assets/gfx/smoke/smoke07.tga
new file mode 100644
index 0000000..c8de9f6
--- /dev/null
+++ b/assets/gfx/smoke/smoke07.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke08.tga b/assets/gfx/smoke/smoke08.tga
new file mode 100644
index 0000000..15a3111
--- /dev/null
+++ b/assets/gfx/smoke/smoke08.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke09.tga b/assets/gfx/smoke/smoke09.tga
new file mode 100644
index 0000000..23a398f
--- /dev/null
+++ b/assets/gfx/smoke/smoke09.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke10.tga b/assets/gfx/smoke/smoke10.tga
new file mode 100644
index 0000000..b1e6dcd
--- /dev/null
+++ b/assets/gfx/smoke/smoke10.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke11.tga b/assets/gfx/smoke/smoke11.tga
new file mode 100644
index 0000000..e093178
--- /dev/null
+++ b/assets/gfx/smoke/smoke11.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke12.tga b/assets/gfx/smoke/smoke12.tga
new file mode 100644
index 0000000..172e87a
--- /dev/null
+++ b/assets/gfx/smoke/smoke12.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke13.tga b/assets/gfx/smoke/smoke13.tga
new file mode 100644
index 0000000..80a097b
--- /dev/null
+++ b/assets/gfx/smoke/smoke13.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke14.tga b/assets/gfx/smoke/smoke14.tga
new file mode 100644
index 0000000..37938dc
--- /dev/null
+++ b/assets/gfx/smoke/smoke14.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke15.tga b/assets/gfx/smoke/smoke15.tga
new file mode 100644
index 0000000..c0bbd10
--- /dev/null
+++ b/assets/gfx/smoke/smoke15.tga
Binary files differ
diff --git a/assets/gfx/smoke/smoke16.tga b/assets/gfx/smoke/smoke16.tga
new file mode 100644
index 0000000..ff3ed3f
--- /dev/null
+++ b/assets/gfx/smoke/smoke16.tga
Binary files differ
diff --git a/assets/gfx/spark/spark00.jpg b/assets/gfx/spark/spark00.jpg
new file mode 100644
index 0000000..674d6f1
--- /dev/null
+++ b/assets/gfx/spark/spark00.jpg
Binary files differ
diff --git a/assets/gfx/spark/spark01frame01.jpg b/assets/gfx/spark/spark01frame01.jpg
new file mode 100644
index 0000000..67ada87
--- /dev/null
+++ b/assets/gfx/spark/spark01frame01.jpg
Binary files differ
diff --git a/assets/gfx/spark/spark01frame02.jpg b/assets/gfx/spark/spark01frame02.jpg
new file mode 100644
index 0000000..fa18fb1
--- /dev/null
+++ b/assets/gfx/spark/spark01frame02.jpg
Binary files differ
diff --git a/assets/gfx/spark/spark01frame03.jpg b/assets/gfx/spark/spark01frame03.jpg
new file mode 100644
index 0000000..e440522
--- /dev/null
+++ b/assets/gfx/spark/spark01frame03.jpg
Binary files differ
diff --git a/assets/gfx/sprites/smoke.tga b/assets/gfx/sprites/smoke.tga
new file mode 100644
index 0000000..6dd30be
--- /dev/null
+++ b/assets/gfx/sprites/smoke.tga
Binary files differ
diff --git a/assets/gfx/sprites/smoke_blue.tga b/assets/gfx/sprites/smoke_blue.tga
new file mode 100644
index 0000000..c0b1fae
--- /dev/null
+++ b/assets/gfx/sprites/smoke_blue.tga
Binary files differ
diff --git a/assets/gfx/sprites/smoke_green.tga b/assets/gfx/sprites/smoke_green.tga
new file mode 100644
index 0000000..cdc531a
--- /dev/null
+++ b/assets/gfx/sprites/smoke_green.tga
Binary files differ
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
new file mode 100644
index 0000000..950120a
--- /dev/null
+++ b/assets/models/weapons/blaster/flash0.wav
Binary files differ
diff --git a/assets/models/weapons/blaster/hit.wav b/assets/models/weapons/blaster/hit.wav
new file mode 100644
index 0000000..cd2db9e
--- /dev/null
+++ b/assets/models/weapons/blaster/hit.wav
Binary files differ
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
new file mode 100644
index 0000000..d885e4d
--- /dev/null
+++ b/assets/sound/buildables/acid_tube/acidsplat.wav
Binary files differ
diff --git a/assets/sound/buildables/tesla/idle1.wav b/assets/sound/buildables/tesla/idle1.wav
new file mode 100644
index 0000000..83f456e
--- /dev/null
+++ b/assets/sound/buildables/tesla/idle1.wav
Binary files differ
diff --git a/assets/sound/player/human_bsuit/step1.wav b/assets/sound/player/human_bsuit/step1.wav
new file mode 100644
index 0000000..ecb8226
--- /dev/null
+++ b/assets/sound/player/human_bsuit/step1.wav
Binary files differ
diff --git a/assets/sound/player/human_bsuit/step2.wav b/assets/sound/player/human_bsuit/step2.wav
new file mode 100644
index 0000000..9aaa92c
--- /dev/null
+++ b/assets/sound/player/human_bsuit/step2.wav
Binary files differ
diff --git a/assets/sound/player/human_bsuit/step3.wav b/assets/sound/player/human_bsuit/step3.wav
new file mode 100644
index 0000000..6392746
--- /dev/null
+++ b/assets/sound/player/human_bsuit/step3.wav
Binary files differ
diff --git a/assets/sound/player/human_bsuit/step4.wav b/assets/sound/player/human_bsuit/step4.wav
new file mode 100644
index 0000000..413affd
--- /dev/null
+++ b/assets/sound/player/human_bsuit/step4.wav
Binary files differ
diff --git a/assets/sound/upgrades/jetpack/lowfuel.wav b/assets/sound/upgrades/jetpack/lowfuel.wav
index b6080d7..47cdf75 100644
--- a/assets/sound/upgrades/jetpack/lowfuel.wav
+++ b/assets/sound/upgrades/jetpack/lowfuel.wav
Binary files differ
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 b1d40b0..0c851b0 100644
--- a/src/cgame/cg_buildable.c
+++ b/src/cgame/cg_buildable.c
@@ -683,7 +683,7 @@ void CG_InitBuildables( void )
}
}
- cg.buildablesFraction = (float)i / (float)( BA_NUM_BUILDABLES - 1 );
+ cg.buildablesFraction = (float)i / (float)( CUBOID_FIRST - 1 );
trap_UpdateScreen( );
}
@@ -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..4893060 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 14)"
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 11d4892..4a28083 100644
--- a/src/game/g_weapon.c
+++ b/src/game/g_weapon.c
@@ -1136,9 +1136,7 @@ static void G_CreateNewZap( gentity_t *creator, gentity_t *target )
if( target->health > 0 )
{
G_Damage( target, creator, creator, forward,
- target->s.origin, LEVEL2_AREAZAP_DMG *
- ( ( target->s.eType == ET_BUILDABLE )
- ? LEVEL2_AREAZAP_DMG_MOD : 1.0f ),
+ target->s.origin, LEVEL2_AREAZAP_DMG,
DAMAGE_NO_KNOCKBACK | DAMAGE_NO_LOCDAMAGE,
MOD_LEVEL2_ZAP );
@@ -1147,9 +1145,8 @@ static void G_CreateNewZap( gentity_t *creator, gentity_t *target )
for( i = 1; i < zap->numTargets; i++ )
{
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 )
- * ( ( zap->targets[ i ]->s.eType == ET_BUILDABLE ) ? LEVEL2_AREAZAP_DMG_MOD : 1.0f ),
+ LEVEL2_AREAZAP_DMG * ( 1 - pow( (zap->distances[ i ] /
+ LEVEL2_AREAZAP_CHAIN_RANGE ) , LEVEL2_AREAZAP_CHAIN_FALLOFF ) ) + 1,
DAMAGE_NO_KNOCKBACK | DAMAGE_NO_LOCDAMAGE,
MOD_LEVEL2_ZAP );
}
diff --git a/src/game/tremulous.h b/src/game/tremulous.h
index a44a306..bf60cd0 100644
--- a/src/game/tremulous.h
+++ b/src/game/tremulous.h
@@ -82,7 +82,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define LEVEL2_CLAW_K_SCALE 1.0f
#define LEVEL2_CLAW_U_REPEAT 400
#define LEVEL2_CLAW_U_K_SCALE 1.0f
-#define LEVEL2_AREAZAP_DMG 6 //ADM(60)
+#define LEVEL2_AREAZAP_DMG ADM(60)
#define LEVEL2_AREAZAP_RANGE 200.0f
#define LEVEL2_AREAZAP_CHAIN_RANGE 150.0f
#define LEVEL2_AREAZAP_CHAIN_FALLOFF 8.0f