From: LegendaryGuard Date: Sat, 8 May 2021 14:46:11 +0000 (+0200) Subject: Copy all stuff from LegendaryGuard/armorizing_and_dark_nades branch X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=2887be0532bd2b59c4771c3c1ec4147bbd5cc61c;p=xonotic%2Fxonotic-data.pk3dir.git Copy all stuff from LegendaryGuard/armorizing_and_dark_nades branch --- diff --git a/effectinfo.txt b/effectinfo.txt index 7fc732b7d..0f9f2f23c 100644 --- a/effectinfo.txt +++ b/effectinfo.txt @@ -6825,6 +6825,93 @@ effect nade_neutral trailspacing 16 underwater velocityjitter 16 16 16 +effect nade_green + type smoke + alpha 100 100 250 + color 0x40ff9b 0x40ff9b + sizeincrease -1 + size 3 3 + tex 65 65 + trailspacing 1 +effect nade_green + type smoke + alpha 30 30 150 + color 0xff0000 0xffa2a2 + notunderwater + sizeincrease -10 + size 15 25 + tex 65 65 + trailspacing 8 +effect nade_green + type bubble + alpha 256 256 256 + bounce 1.500000 + color 0x40ff9b 0x40ff9b + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + underwater + velocityjitter 16 16 16 +effect nade_brown + type smoke + alpha 100 100 250 + color 0xa85400 0xa85400 + sizeincrease -1 + size 3 3 + tex 65 65 + trailspacing 1 +effect nade_brown + type smoke + alpha 30 30 150 + color 0xff0000 0xffa2a2 + notunderwater + sizeincrease -10 + size 15 25 + tex 65 65 + trailspacing 8 +effect nade_brown + type bubble + alpha 256 256 256 + bounce 1.500000 + color 0xa85400 0xa85400 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + underwater + velocityjitter 16 16 16 +effect nade_purple + type smoke + alpha 100 100 250 + color 0x540054 0x540054 + sizeincrease -1 + size 3 3 + tex 65 65 + trailspacing 1 +effect nade_purple + type smoke + alpha 30 30 150 + color 0xff0000 0xffa2a2 + notunderwater + sizeincrease -10 + size 15 25 + tex 65 65 + trailspacing 8 +effect nade_purple + type bubble + alpha 256 256 256 + bounce 1.500000 + color 0x540054 0x540054 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + underwater + velocityjitter 16 16 16 effect nade_red_burn type smoke alpha 100 100 250 @@ -7025,6 +7112,126 @@ effect nade_neutral_burn tex 71 73 trailspacing 16 velocityjitter 10 10 10 +effect nade_green_burn + type smoke + alpha 100 100 250 + color 0x40ff9b 0xff3c00 + sizeincrease -1 + size 5 5 + tex 65 65 + trailspacing 1 +effect nade_green_burn + type smoke + alpha 200 200 1000 + color 0xff0000 0xffa2a2 + notunderwater + sizeincrease -30 + size 45 25 + tex 65 65 + trailspacing 64 +effect nade_green_burn + type bubble + alpha 256 256 256 + bounce 1.500000 + color 0x40ff9b 0xff3c00 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + underwater + velocityjitter 16 16 16 +effect nade_green_burn + type smoke + alpha 300 900 1500 + color 0x40ff9b 0xff3c00 + originjitter 2 2 2 + rotate -180 180 20 -20 + sizeincrease -40 + size 15 25 + tex 71 73 + trailspacing 16 + velocityjitter 10 10 10 +effect nade_brown_burn + type smoke + alpha 100 100 250 + color 0xa85400 0xff3c00 + sizeincrease -1 + size 5 5 + tex 65 65 + trailspacing 1 +effect nade_brown_burn + type smoke + alpha 200 200 1000 + color 0xff0000 0xffa2a2 + notunderwater + sizeincrease -30 + size 45 25 + tex 65 65 + trailspacing 64 +effect nade_brown_burn + type bubble + alpha 256 256 256 + bounce 1.500000 + color 0xa85400 0xff3c00 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + underwater + velocityjitter 16 16 16 +effect nade_brown_burn + type smoke + alpha 300 900 1500 + color 0xa85400 0xff3c00 + originjitter 2 2 2 + rotate -180 180 20 -20 + sizeincrease -40 + size 15 25 + tex 71 73 + trailspacing 16 + velocityjitter 10 10 10 +effect nade_purple_burn + type smoke + alpha 100 100 250 + color 0x540054 0xff3c00 + sizeincrease -1 + size 5 5 + tex 65 65 + trailspacing 1 +effect nade_purple_burn + type smoke + alpha 200 200 1000 + color 0xff0000 0xffa2a2 + notunderwater + sizeincrease -30 + size 45 25 + tex 65 65 + trailspacing 64 +effect nade_purple_burn + type bubble + alpha 256 256 256 + bounce 1.500000 + color 0x540054 0xff3c00 + gravity -0.125000 + liquidfriction 4 + size 1 1 + tex 62 62 + trailspacing 16 + underwater + velocityjitter 16 16 16 +effect nade_purple_burn + type smoke + alpha 300 900 1500 + color 0x540054 0xff3c00 + originjitter 2 2 2 + rotate -180 180 20 -20 + sizeincrease -40 + size 15 25 + tex 71 73 + trailspacing 16 + velocityjitter 10 10 10 effect nade_blue_explode type decal alpha 256 256 0 @@ -7575,6 +7782,336 @@ effect nade_neutral_explode size 20 40 tex 71 73 velocityjitter 324 324 324 +effect nade_green_explode + type decal + alpha 256 256 0 + countabsolute 1 + lightcolor 100 20 20 + lightradiusfade 1500 + lightradius 300 + originjitter 26 26 26 + size 88 88 + tex 8 16 +effect nade_green_explode + type smoke + alpha 80 80 650 + color 0xff0000 0xffa2a2 + countabsolute 1 + sizeincrease 1800 + size 32 32 + tex 33 33 + velocitymultiplier 44 +effect nade_green_explode + type smoke + airfriction 30 + alpha 400 656 2000 + color 0x40ff9b 0xa647d3 + count 16 + notunderwater + originjitter 50 50 50 + rotate -180 180 -9 9 + sizeincrease 555 + size 20 24 + tex 48 55 + velocityjitter 320 320 320 +effect nade_green_explode + type spark + airfriction -9 + alpha 1500 3000 13000 + color 0x40ff9b 0xff4200 + count 8 + sizeincrease 40 + size 60 90 + stretchfactor 80 + tex 48 55 + velocityjitter 30 30 30 +effect nade_green_explode + type smoke + airfriction 0.040000 + alpha 128 328 390 + blend alpha + color 0x222222 0x000000 + count 32 + gravity 0.400000 + originjitter 50 50 10 + rotate -180 180 2 -2 + sizeincrease 50 + size 60 30 + tex 0 7 + velocityjitter 200 200 200 + velocityoffset 0 0 180 +effect nade_green_explode + type bubble + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 6 + tex 62 62 + underwater + velocityjitter 196 196 196 +effect nade_green_explode + type spark + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0xff0000 0xffa2a2 + count 8 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 2 + tex 40 40 + velocityjitter 424 424 624 + velocityoffset 0 0 80 +effect nade_green_explode + type spark + airfriction 0.700000 + alpha 644 956 684 + color 0xff0000 0xffa2a2 + count 16 + gravity 0.500000 + liquidfriction 0.800000 + originjitter 16 16 16 + size 1 2 + tex 40 40 + velocityjitter 424 424 624 + velocityoffset 0 0 80 +effect nade_green_explode + type smoke + alpha 644 956 2500 + color 0xff0000 0xffa2a2 + count 8 + notunderwater + originjitter 64 64 64 + rotate -180 180 -100 100 + size 20 40 + tex 71 73 + velocityjitter 324 324 324 +effect nade_brown_explode + type decal + alpha 256 256 0 + countabsolute 1 + lightcolor 100 20 20 + lightradiusfade 1500 + lightradius 300 + originjitter 26 26 26 + size 88 88 + tex 8 16 +effect nade_brown_explode + type smoke + alpha 80 80 650 + color 0xff0000 0xffa2a2 + countabsolute 1 + sizeincrease 1800 + size 32 32 + tex 33 33 + velocitymultiplier 44 +effect nade_brown_explode + type smoke + airfriction 30 + alpha 400 656 2000 + color 0xa85400 0xa647d3 + count 16 + notunderwater + originjitter 50 50 50 + rotate -180 180 -9 9 + sizeincrease 555 + size 20 24 + tex 48 55 + velocityjitter 320 320 320 +effect nade_brown_explode + type spark + airfriction -9 + alpha 1500 3000 13000 + color 0xa85400 0xff4200 + count 8 + sizeincrease 40 + size 60 90 + stretchfactor 80 + tex 48 55 + velocityjitter 30 30 30 +effect nade_brown_explode + type smoke + airfriction 0.040000 + alpha 128 328 390 + blend alpha + color 0x222222 0x000000 + count 32 + gravity 0.400000 + originjitter 50 50 10 + rotate -180 180 2 -2 + sizeincrease 50 + size 60 30 + tex 0 7 + velocityjitter 200 200 200 + velocityoffset 0 0 180 +effect nade_brown_explode + type bubble + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 6 + tex 62 62 + underwater + velocityjitter 196 196 196 +effect nade_brown_explode + type spark + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0xff0000 0xffa2a2 + count 8 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 2 + tex 40 40 + velocityjitter 424 424 624 + velocityoffset 0 0 80 +effect nade_brown_explode + type spark + airfriction 0.700000 + alpha 644 956 684 + color 0xff0000 0xffa2a2 + count 16 + gravity 0.500000 + liquidfriction 0.800000 + originjitter 16 16 16 + size 1 2 + tex 40 40 + velocityjitter 424 424 624 + velocityoffset 0 0 80 +effect nade_brown_explode + type smoke + alpha 644 956 2500 + color 0xff0000 0xffa2a2 + count 8 + notunderwater + originjitter 64 64 64 + rotate -180 180 -100 100 + size 20 40 + tex 71 73 + velocityjitter 324 324 324 +effect nade_purple_explode + type decal + alpha 256 256 0 + countabsolute 1 + lightcolor 100 20 20 + lightradiusfade 1500 + lightradius 300 + originjitter 26 26 26 + size 88 88 + tex 8 16 +effect nade_purple_explode + type smoke + alpha 80 80 650 + color 0xff0000 0xffa2a2 + countabsolute 1 + sizeincrease 1800 + size 32 32 + tex 33 33 + velocitymultiplier 44 +effect nade_purple_explode + type smoke + airfriction 30 + alpha 400 656 2000 + color 0x540054 0xa647d3 + count 16 + notunderwater + originjitter 50 50 50 + rotate -180 180 -9 9 + sizeincrease 555 + size 20 24 + tex 48 55 + velocityjitter 320 320 320 +effect nade_purple_explode + type spark + airfriction -9 + alpha 1500 3000 13000 + color 0x540054 0xff4200 + count 8 + sizeincrease 40 + size 60 90 + stretchfactor 80 + tex 48 55 + velocityjitter 30 30 30 +effect nade_purple_explode + type smoke + airfriction 0.040000 + alpha 128 328 390 + blend alpha + color 0x222222 0x000000 + count 32 + gravity 0.400000 + originjitter 50 50 10 + rotate -180 180 2 -2 + sizeincrease 50 + size 60 30 + tex 0 7 + velocityjitter 200 200 200 + velocityoffset 0 0 180 +effect nade_purple_explode + type bubble + alpha 128 256 64 + bounce 1.500000 + color 0x404040 0x808080 + count 32 + gravity -0.125000 + liquidfriction 0.250000 + originjitter 16 16 16 + size 3 6 + tex 62 62 + underwater + velocityjitter 196 196 196 +effect nade_purple_explode + type spark + airfriction 1 + alpha 644 956 484 + bounce 1.600000 + color 0xff0000 0xffa2a2 + count 8 + gravity 1 + liquidfriction 0.800000 + notunderwater + originjitter 16 16 16 + size 1 2 + tex 40 40 + velocityjitter 424 424 624 + velocityoffset 0 0 80 +effect nade_purple_explode + type spark + airfriction 0.700000 + alpha 644 956 684 + color 0xff0000 0xffa2a2 + count 16 + gravity 0.500000 + liquidfriction 0.800000 + originjitter 16 16 16 + size 1 2 + tex 40 40 + velocityjitter 424 424 624 + velocityoffset 0 0 80 +effect nade_purple_explode + type smoke + alpha 644 956 2500 + color 0xff0000 0xffa2a2 + count 8 + notunderwater + originjitter 64 64 64 + rotate -180 180 -100 100 + size 20 40 + tex 71 73 + velocityjitter 324 324 324 effect shockwave_attack type spark airfriction 1 diff --git a/qcsrc/common/effects/all.inc b/qcsrc/common/effects/all.inc index 60f33f38e..31abb0daf 100644 --- a/qcsrc/common/effects/all.inc +++ b/qcsrc/common/effects/all.inc @@ -161,6 +161,9 @@ EFFECT(0, SPAWN_BLUE, "spawn_event_blue") EFFECT(0, SPAWN_YELLOW, "spawn_event_yellow") EFFECT(0, SPAWN_PINK, "spawn_event_pink") EFFECT(0, SPAWN_NEUTRAL, "spawn_event_neutral") +EFFECT(0, SPAWN_GREEN, "spawn_event_green") +EFFECT(0, SPAWN_BROWN, "spawn_event_brown") +EFFECT(0, SPAWN_PURPLE, "spawn_event_purple") entity EFFECT_SPAWN(int teamid) { switch (teamid) { diff --git a/qcsrc/common/effects/effectinfo_nades.inc b/qcsrc/common/effects/effectinfo_nades.inc index 9c655579a..b8af3fbf2 100644 --- a/qcsrc/common/effects/effectinfo_nades.inc +++ b/qcsrc/common/effects/effectinfo_nades.inc @@ -54,6 +54,9 @@ nade(red, "0xff0000", "0xff3c00", "0xff0000", "0xffa2a2") nade(yellow, "0xFFFF0F", "0xFFFF0F", "0xFFFF0F", "0xFFFF0F") nade(pink, "0xFF0FFF", "0xFF0FFF", "0xFF0FFF", "0xFF0FFF") nade(neutral, "0xFFFFFF", "0xFFFFFF", "0xFFFFFF", "0xFFFFFF") +nade(green, "0x40ff9b", "0x40ff9b", "0x40ff9b", "0xffa2a2") +nade(brown, "0xa85400", "0xa85400", "0xa85400", "0xffa2a2") +nade(purple, "0x540054", "0x540054", "0x540054", "0xffa2a2") #undef nade #define nade_burn(name, colormin1, colormax1, colormin2, colormax2) \ @@ -132,6 +135,9 @@ nade_burn(blue, "0x006cff", "0x0600ff", "0x0600ff", "0x9794ff") nade_burn(yellow, "0xFFFF0F", "0xFFFF0F", "0xFFFF0F", "0xFFFF0F") nade_burn(pink, "0xFF0FFF", "0xFF0FFF", "0xFF0FFF", "0xFF0FFF") nade_burn(neutral, "0xFFFFFF", "0xFFFFFF", "0xFFFFFF", "0xFFFFFF") +nade_burn(green, "0x40ff9b", "0x40ff9b", "0x40ff9b", "0xffa2a2") +nade_burn(brown, "0xa85400", "0xa85400", "0xa85400", "0xffa2a2") +nade_burn(purple, "0x540054", "0x540054", "0x540054", "0xffa2a2") #undef nade_burn #define nade_explode(name, colorlight, colormin1, colormax1, colormin2, colormax2, colormin3, colormax3) \ @@ -313,4 +319,7 @@ nade_explode(red, '100.0 20.0 20.0', "0xff0000", "0xffa2a2", "0xff0000", " nade_explode(yellow, '100.0 20.0 20.0', "0xff0000", "0xffa2a2", "0xFFFF0F", "0xFFFF0F", "0xff0000", "0xffa2a2") nade_explode(pink, '100.0 20.0 20.0', "0xff0000", "0xffa2a2", "0xFF0FFF", "0xFF0FFF", "0xff0000", "0xffa2a2") nade_explode(neutral, '100.0 20.0 20.0', "0xff0000", "0xffa2a2", "0xFFFFFF", "0xFFFFFF", "0xff0000", "0xffa2a2") +nade_explode(green, '100.0 20.0 20.0', "0x40ff9b", "0xffa2a2", "0x40ff9b", "0x40ff9b", "0xff0000", "0xffa2a2") +nade_explode(brown, '100.0 20.0 20.0', "0xa85400", "0xffa2a2", "0xa85400", "0xa85400", "0xff0000", "0xffa2a2") +nade_explode(purple, '100.0 20.0 20.0', "0x540054", "0xffa2a2", "0x540054", "0x540054", "0xff0000", "0xffa2a2") #undef nade_explode diff --git a/qcsrc/common/mutators/mutator/nades/effects.inc b/qcsrc/common/mutators/mutator/nades/effects.inc index 83cf74247..19bc67e5f 100644 --- a/qcsrc/common/mutators/mutator/nades/effects.inc +++ b/qcsrc/common/mutators/mutator/nades/effects.inc @@ -1,10 +1,16 @@ #include - +//LegendGuard adds purple nade parts 08-02-2021 +//LegendGuard adds green nade parts 11-02-2021 +//LegendGuard adds brown nade parts 13-02-2021 EFFECT(0, NADE_EXPLODE_RED, "nade_red_explode") EFFECT(0, NADE_EXPLODE_BLUE, "nade_blue_explode") EFFECT(0, NADE_EXPLODE_YELLOW, "nade_yellow_explode") EFFECT(0, NADE_EXPLODE_PINK, "nade_pink_explode") EFFECT(0, NADE_EXPLODE_NEUTRAL, "nade_neutral_explode") +EFFECT(0, NADE_EXPLODE_GREEN, "nade_green_explode") +EFFECT(0, NADE_EXPLODE_BROWN, "nade_brown_explode") +EFFECT(0, NADE_EXPLODE_PURPLE, "nade_purple_explode") + entity EFFECT_NADE_EXPLODE(int teamid) { switch (teamid) { @@ -21,6 +27,9 @@ EFFECT(1, NADE_TRAIL_BLUE, "nade_blue") EFFECT(1, NADE_TRAIL_YELLOW, "nade_yellow") EFFECT(1, NADE_TRAIL_PINK, "nade_pink") EFFECT(1, NADE_TRAIL_NEUTRAL, "nade_neutral") +EFFECT(1, NADE_TRAIL_GREEN, "nade_green") +EFFECT(1, NADE_TRAIL_BROWN, "nade_brown") +EFFECT(1, NADE_TRAIL_PURPLE, "nade_purple") entity EFFECT_NADE_TRAIL(int teamid) { switch (teamid) { @@ -37,6 +46,9 @@ EFFECT(1, NADE_TRAIL_BURN_BLUE, "nade_blue_burn") EFFECT(1, NADE_TRAIL_BURN_YELLOW, "nade_yellow_burn") EFFECT(1, NADE_TRAIL_BURN_PINK, "nade_pink_burn") EFFECT(1, NADE_TRAIL_BURN_NEUTRAL, "nade_neutral_burn") +EFFECT(1, NADE_TRAIL_BURN_GREEN, "nade_green_burn") +EFFECT(1, NADE_TRAIL_BURN_BROWN, "nade_brown_burn") +EFFECT(1, NADE_TRAIL_BURN_PURPLE, "nade_purple_burn") entity EFFECT_NADE_TRAIL_BURN(int teamid) { switch (teamid) { diff --git a/qcsrc/common/mutators/mutator/nades/nades.inc b/qcsrc/common/mutators/mutator/nades/nades.inc index 3270e719f..ae69d682b 100644 --- a/qcsrc/common/mutators/mutator/nades/nades.inc +++ b/qcsrc/common/mutators/mutator/nades/nades.inc @@ -93,3 +93,36 @@ REGISTER_NADE(VEIL) { NADE_PROJECTILE(1, PROJECTILE_NADE_VEIL_BURN, EFFECT_NADE_TRAIL_BURN_NEUTRAL); #endif } + +//LegendGuard writes Emerald nade code 01-03-2021 +REGISTER_NADE(EMERALD) { + this.m_color = '0.33 1 0.66'; + this.m_name = _("Emerald grenade"); + this.m_icon = "nade_emerald"; +#ifdef GAMEQC + NADE_PROJECTILE(0, PROJECTILE_NADE_EMERALD, EFFECT_NADE_TRAIL_GREEN); + NADE_PROJECTILE(1, PROJECTILE_NADE_EMERALD_BURN, EFFECT_NADE_TRAIL_BURN_GREEN); +#endif +} + +//LegendGuard writes Ammo nade code 13-02-2021 +REGISTER_NADE(AMMO) { + this.m_color = '0.66 0.33 0'; + this.m_name = _("Ammo grenade"); + this.m_icon = "nade_ammo"; +#ifdef GAMEQC + NADE_PROJECTILE(0, PROJECTILE_NADE_AMMO, EFFECT_NADE_TRAIL_BROWN); + NADE_PROJECTILE(1, PROJECTILE_NADE_AMMO_BURN, EFFECT_NADE_TRAIL_BURN_BROWN); +#endif +} + +//LegendGuard writes Dark nade code 08-02-2021 +REGISTER_NADE(DARK) { + this.m_color = '0.23 0 0.23'; + this.m_name = _("Dark grenade"); + this.m_icon = "nade_dark"; +#ifdef GAMEQC + NADE_PROJECTILE(0, PROJECTILE_NADE_DARK, EFFECT_NADE_TRAIL_PURPLE); + NADE_PROJECTILE(1, PROJECTILE_NADE_DARK_BURN, EFFECT_Null); +#endif +} \ No newline at end of file diff --git a/qcsrc/common/mutators/mutator/nades/nades.qc b/qcsrc/common/mutators/mutator/nades/nades.qc index e71c61855..966886733 100644 --- a/qcsrc/common/mutators/mutator/nades/nades.qc +++ b/qcsrc/common/mutators/mutator/nades/nades.qc @@ -61,6 +61,18 @@ MUTATOR_HOOKFUNCTION(cl_nades, HUD_Draw_overlay) M_ARGV(1, float) = STAT(VEIL_ORB_ALPHA); return true; } + if (STAT(AMMUNITIONING_ORB) > time) //LegendGuard adds new nade STAT ORB (keep in mind: qcsrc/common/stats.qh) 13-02-2021 + { + M_ARGV(0, vector) = NADE_TYPE_AMMO.m_color; + M_ARGV(1, float) = STAT(AMMUNITIONING_ORB_ALPHA); + return true; + } + if (STAT(DARK_ORB) > time) //LegendGuard adds new nade STAT ORB (keep in mind: qcsrc/common/stats.qh) 08-02-2021 + { + M_ARGV(0, vector) = NADE_TYPE_DARK.m_color; + M_ARGV(1, float) = STAT(DARK_ORB_ALPHA); + return true; + } return false; } MUTATOR_HOOKFUNCTION(cl_nades, Ent_Projectile) @@ -700,7 +712,472 @@ void nade_veil_boom(entity this) settouch(orb, nade_veil_touch); orb.colormod = NADE_TYPE_VEIL.m_color; } +/**************LEGENDGUARD NEW NADES: EMERALD, AMMO AND DARK NADES functions "cl_nade_type 10", "cl_nade_type 11" and "cl_nade_type 12" *** //more ideas: SPAWNING MINI SPIDERS NADE, SPARKING NADE ***********************/ +// All nade icons are in these directories, samples: gfx/hud/default/nade_emerald.tga and gfx/hud/luma/nade_emerald.tga 02-03-2021 +// Mario suggests to rename itemdrop nade name to "emerald" nade 02-03-2021 +void nade_emerald_dropitem(entity e, vector org, entity itm) +{ + Item_SetLoot(e, true); + e.reset = SUB_Remove; + e.noalign = true; + StartItem(e, itm); + e.gravity = 1; + setorigin(e, org); + e.velocity = randomvec() * 175 + '0 0 325'; + e.item_spawnshieldtime = time + 0.7; + SUB_SetFade(e, time + autocvar_g_nades_emerald_lifetime, 1); + Send_Effect(EFFECT_SMOKE_LARGE, e.origin, '0 0 0', 1); + //EFFECT_SMOKE_LARGE is like a small white smoke + //See effect MACROS in qcsrc/common/effects/all.inc +} + +void nade_emerald_randomitem(entity e, vector org) +{ + float a = random(); + float b = random(); + float c = random(); + float d = random(); + + if (a > b) + { + if (a > 0.5) + nade_emerald_dropitem(e, org, ((random() > 0.5) ? ITEM_ArmorSmall : ITEM_HealthSmall)); + else + nade_emerald_dropitem(e, org, ((random() > 0.5) ? ITEM_Shells : ITEM_Bullets)); + } + else if (c > d) + { + if (c > 0.5) + nade_emerald_dropitem(e, org, ((random() > 0.5) ? ITEM_Shells : ITEM_Bullets)); + else + nade_emerald_dropitem(e, org, ((random() > 0.5) ? ITEM_Rockets : ITEM_Cells)); + } + else if (autocvar_g_nades_emerald_powerupjetpack_randomdrop) + { + if (a < 0.5) + nade_emerald_dropitem(e, org, ((random() > 0.5) ? ITEM_Jetpack : ITEM_JetpackFuel)); + else + nade_emerald_dropitem(e, org, ((random() > 0.5) ? ITEM_Shield : ITEM_Strength)); + } + else + return; +} + +void nade_emerald_allammoitemdrop(entity e, vector org) +{ + float wa = random(); + float wb = random(); + + if (wa > wb) + { + if (wa > 0.5) + nade_emerald_dropitem(e, org, ((random() > 0.5) ? ITEM_Shells : ITEM_Bullets)); + else + nade_emerald_dropitem(e, org, ((random() > 0.5) ? ITEM_Rockets : ITEM_Cells)); + } + else + return; +} + +void nade_emerald_dropping(vector org) +{ + //look item MACROS in qcsrc/server/items/items.qc + //ITEM_Shells; ITEM_Bullets; ITEM_Rockets; ITEM_Cells; ITEM_Plasma; ITEM_JetpackFuel; + //ITEM_Strength; ITEM_Shield; + int itemcount = autocvar_g_nades_emerald_spawncount; + for(int j = 0; j < itemcount; ++j) + { + entity e = spawn(); + e.spawnfunc_checked = true; + //int cvar which manages the ONLY dropping per each type of item 14-03-2021 + + switch (autocvar_g_nades_emerald_dropitemselect) + { + case 0: nade_emerald_randomitem(e, org); return; + case 1: nade_emerald_dropitem(e, org, ITEM_HealthSmall); return; + case 2: nade_emerald_dropitem(e, org, ITEM_ArmorSmall); return; + case 3: nade_emerald_allammoitemdrop(e, org); return; + case 4: nade_emerald_dropitem(e, org, ITEM_Shells); return; + case 5: nade_emerald_dropitem(e, org, ITEM_Bullets); return; + case 6: nade_emerald_dropitem(e, org, ITEM_Rockets); return; + case 7: nade_emerald_dropitem(e, org, ITEM_Cells); return; + case 8: nade_emerald_dropitem(e, org, ITEM_Jetpack); return; + case 9: nade_emerald_dropitem(e, org, ITEM_JetpackFuel); return; + case 10: nade_emerald_dropitem(e, org, ITEM_Shield); return; + case 11: nade_emerald_dropitem(e, org, ITEM_Strength); return; + default: nade_emerald_randomitem(e, org); return; + } + } +} + +void emerald_ball_think(entity this) +{ + if(round_handler_IsActive()) + if(!round_handler_IsRoundStarted()) + { + delete(this); + return; + } + + if(time > this.pushltime) + { + delete(this); + return; + } + + vector midpoint = ((this.absmin + this.absmax) * 0.5); + if(pointcontents(midpoint) == CONTENT_WATER) + { + this.velocity = this.velocity * 0.5; + + if(pointcontents(midpoint + '0 0 16') == CONTENT_WATER) + { this.velocity_z = 200; } + } + + this.angles = vectoangles(this.velocity); + + nade_emerald_dropping(this.origin); + + this.nextthink = time + 0.1; +} + +void nade_emerald_ball(entity this) +{ + entity proj; + vector kick; + + spamsound(this, CH_SHOTS, SND_FIREBALL_FIRE, VOL_BASE, ATTEN_NORM); + + proj = new(grenade); + proj.bot_dodge = true; + set_movetype(proj, MOVETYPE_BOUNCE); + setmodel(proj, MDL_Null); + proj.scale = 1;//0.5; + setsize(proj, '-4 -4 -4', '4 4 4'); + setorigin(proj, this.origin); + setthink(proj, emerald_ball_think); + proj.nextthink = time; + proj.effects = EF_LOWPRECISION; + + kick.x =(random() - 0.5) * 2 * autocvar_g_nades_emerald_ball_spread; + kick.y = (random() - 0.5) * 2 * autocvar_g_nades_emerald_ball_spread; + kick.z = (random()/2+0.5) * autocvar_g_nades_emerald_ball_spread; + proj.velocity = kick; + + proj.pushltime = time + autocvar_g_nades_emerald_ball_lifetime; + + proj.angles = vectoangles(proj.velocity); + proj.flags = FL_PROJECTILE; + IL_PUSH(g_projectiles, proj); + IL_PUSH(g_bot_dodge, proj); + proj.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_ARC; + + //CSQCProjectile(proj, true, PROJECTILE_NAPALM_FIRE, true); +} + + +void emerald_fountain_think(entity this) +{ + if(round_handler_IsActive()) + if(!round_handler_IsRoundStarted()) + { + delete(this); + return; + } + + if(time >= this.ltime) + { + Send_Effect(EFFECT_SMOKE_SMALL, this.origin + '0 0 1', '0 0 0', 1); + sound(this, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); + + delete(this); + return; + } + + vector midpoint = ((this.absmin + this.absmax) * 0.5); + if(pointcontents(midpoint) == CONTENT_WATER) + { + this.velocity = this.velocity * 0.5; + + if(pointcontents(midpoint + '0 0 16') == CONTENT_WATER) + { this.velocity_z = 200; } + + UpdateCSQCProjectile(this); + } + + this.nextthink = time + 0.1; + if(time >= this.nade_special_time) + { + this.nade_special_time = time + autocvar_g_nades_emerald_fountain_delay; + nade_emerald_ball(this); + } +} + +void nade_emerald_boom(entity this) +{ + for (int c = 0; c < autocvar_g_nades_emerald_ball_count; c++) + nade_emerald_ball(this); + + entity fountain = new(nade_emerald_fountain); + fountain.owner = this.owner; + fountain.realowner = this.realowner; + fountain.origin = this.origin; + fountain.flags = FL_PROJECTILE; + IL_PUSH(g_projectiles, fountain); + IL_PUSH(g_bot_dodge, fountain); + setorigin(fountain, fountain.origin); + setthink(fountain, emerald_fountain_think); + fountain.nextthink = time; + fountain.ltime = time + autocvar_g_nades_emerald_fountain_lifetime; + fountain.pushltime = fountain.ltime; + fountain.team = this.team; + + //nade model maintaining + setmodel(fountain, MDL_PROJECTILE_GRENADE); + entity timer = new(nade_timer); + setmodel(timer, MDL_NADE_TIMER); + setattachment(timer, fountain, ""); + timer.colormap = this.colormap; + timer.glowmod = this.glowmod; + setthink(timer, nade_timer_think); + timer.nextthink = time; + timer.wait = fountain.ltime; + timer.owner = fountain; + timer.skin = 10; + + set_movetype(fountain, MOVETYPE_TOSS); + fountain.bot_dodge = true; + fountain.nade_special_time = time; + setsize(fountain, '-16 -16 -16', '16 16 16'); + CSQCProjectile(fountain, true, PROJECTILE_NADE_EMERALD_BURN, true); + nade_emerald_dropping(fountain.origin); +} + +/***********************************************************************************/ +//LegendGuard develops ammo nade 13-02-2021 +void nade_ammo_touch(entity this, entity toucher) +{ + float maxammo = 999; + float ammo_factor; + float amshells = GetResource(toucher, RES_SHELLS); + float ambullets = GetResource(toucher, RES_BULLETS); + float amrockets = GetResource(toucher, RES_ROCKETS); + float amcells = GetResource(toucher, RES_CELLS); + float amplasma = GetResource(toucher, RES_PLASMA); + if(IS_PLAYER(toucher) || IS_MONSTER(toucher)) + if(!IS_DEAD(toucher)) + if(!STAT(FROZEN, toucher)) + { + ammo_factor = autocvar_g_nades_ammo_rate*frametime/2; + if ( toucher != this.realowner ) + { + if ( SAME_TEAM(toucher,this) ) + { + ammo_factor *= autocvar_g_nades_ammo_friend; + } + else + { + ammo_factor *= autocvar_g_nades_ammo_foe; + } + } + if ( ammo_factor > 0 ) + { + if (amshells < maxammo) + { + GiveResourceWithLimit(toucher, RES_SHELLS, ammo_factor, maxammo); + } + + if (ambullets < maxammo) + { + GiveResourceWithLimit(toucher, RES_BULLETS, ammo_factor, maxammo); + } + + if (amrockets < maxammo) + { + GiveResourceWithLimit(toucher, RES_ROCKETS, ammo_factor, maxammo); + } + + if (amcells < maxammo) + { + GiveResourceWithLimit(toucher, RES_CELLS, ammo_factor, maxammo); + } + + if (amplasma < maxammo) + { + GiveResourceWithLimit(toucher, RES_PLASMA, ammo_factor, maxammo); + } + + if (this.nade_show_particles) + { + Send_Effect(EFFECT_HEALING, toucher.origin, '0 0 0', 1); + } + } + else if ( ammo_factor < 0 ) + { + //Foe drops ammo points + if (amshells > 0) + { + SetResource(toucher, RES_SHELLS, amshells + ammo_factor); + } + + if (ambullets > 0) + { + SetResource(toucher, RES_BULLETS, ambullets + ammo_factor); + } + + if (amrockets > 0) + { + SetResource(toucher, RES_ROCKETS, amrockets + ammo_factor); + } + + if (amcells > 0) + { + SetResource(toucher, RES_CELLS, amcells + ammo_factor); + } + + if (amplasma > 0) + { + SetResource(toucher, RES_PLASMA, amplasma + ammo_factor); + } + return; + } + } + + if ( IS_REAL_CLIENT(toucher) || IS_VEHICLE(toucher) ) + { + entity show_brown = (IS_VEHICLE(toucher)) ? toucher.owner : toucher; + STAT(AMMUNITIONING_ORB, show_brown) = time+0.1; + STAT(AMMUNITIONING_ORB_ALPHA, show_brown) = 0.75 * (this.ltime - time) / this.orb_lifetime; + } +} + +void nade_ammo_boom(entity this) +{ + entity orb = nades_spawn_orb(this.owner, this.realowner, this.origin, autocvar_g_nades_ammo_time, autocvar_g_nades_nade_radius); + + settouch(orb, nade_ammo_touch); + orb.colormod = '0.66 0.33 0'; +} +/***********************************************************************************/ +//remember to put an image in gfx/hud/luma and gfx/hud/default per each nade_blabla.tga +//dark nade does damage like a normal nade but the damage is minor +//TODO: add Dark smoke effect when exploded 28-02-2021 +void dark_damage(entity this, float radius, float damage) +{ + entity e; + + if ( damage < 0 ) + return; + + for(e = WarpZone_FindRadius(this.origin, radius, true); e; e = e.chain) + if(!IS_DEAD(e)) + if(e.takedamage == DAMAGE_AIM) + if(!IS_PLAYER(e) || !this.realowner || DIFF_TEAM(e, this) || !IS_MONSTER(e)) + if(!STAT(FROZEN, e)) + { + Damage(this, this, this.realowner, damage, DEATH_NADE.m_id, DMG_NOWEP, this.origin, '0 0 0'); + Damage_DamageInfo(this.origin, damage, autocvar_g_nades_nade_edgedamage, + radius, '1 1 1' * 0, DEATH_NADE.m_id, 0, this); + } +} + +void nade_dark_fountain_think(entity this) +{ + if(round_handler_IsActive()) + if(!round_handler_IsRoundStarted()) + { + delete(this); + return; + } + + if(time >= this.ltime) + { + Send_Effect(EFFECT_SMOKE_SMALL, this.origin + '0 0 1', '0 0 0', 1); + delete(this); + return; + } + + this.nextthink = time + 0.1; + + // gaussian + float randomr; + randomr = random(); + randomr = exp(-5*randomr*randomr)*autocvar_g_nades_dark_radius; + float randomw; + randomw = random()*M_PI*2; + vector randomp; + randomp.x = randomr*cos(randomw); + randomp.y = randomr*sin(randomw); + randomp.z = 1; + Send_Effect(EFFECT_SMOKE_SMALL, this.origin + randomp, '0 0 0', 1); + + if(time >= this.nade_special_time) + { + this.nade_special_time = time + 0.7; + Send_Effect(EFFECT_SMOKE_SMALL, this.origin, '0 0 0', 1); + } +} + +void DarkBlinking(entity e); +//copy of the special.qc function contents for DarkBlinking +void nade_dark_touch(entity this, entity toucher) +{ + if ( IS_REAL_CLIENT(toucher) || IS_VEHICLE(toucher) || IS_MONSTER(toucher) ) + { + entity show_tint = (IS_VEHICLE(toucher)) ? toucher.owner : toucher; + float tint_alpha = 0.75; + if(SAME_TEAM(toucher, this.realowner) || SAME_TEAM(toucher, this)) + { + tint_alpha = 0.45; + if(!STAT(DARK_ORB, show_tint)) + { + toucher.nade_dark_prevalpha = toucher.alpha; + toucher.alpha = 1; + } + } + else + { + tint_alpha = 0.45; + if(!STAT(DARK_ORB, show_tint)) + { + DarkBlinking(toucher); + dark_damage(toucher, autocvar_g_nades_dark_radius, autocvar_g_nades_dark_damage); + } + } + + STAT(DARK_ORB, show_tint) = time + 0.1; + STAT(DARK_ORB_ALPHA, show_tint) = tint_alpha * (this.ltime - time) / this.orb_lifetime; + } +} + +void nade_dark_boom(entity this) +{ + entity orb = nades_spawn_orb(this.owner, this.realowner, this.origin, autocvar_g_nades_dark_time, autocvar_g_nades_dark_radius); + entity fountain = new(nade_dark_fountain); + + fountain.owner = this.owner; + fountain.realowner = this.realowner; + fountain.origin = this.origin; + fountain.flags = FL_PROJECTILE; + IL_PUSH(g_projectiles, fountain); + IL_PUSH(g_bot_dodge, fountain); + setorigin(fountain, fountain.origin); + setthink(fountain, nade_dark_fountain_think); + fountain.nextthink = time; + fountain.ltime = time + autocvar_g_nades_dark_time; + fountain.pushltime = fountain.wait = fountain.ltime; + fountain.team = this.team; + fountain.bot_dodge = false; + setsize(fountain, '-16 -16 -16', '16 16 16'); + fountain.nade_special_time = time + 0.3; + fountain.angles = this.angles; + + settouch(orb, nade_dark_touch); + orb.colormod = NADE_TYPE_DARK.m_color; + //CSQCProjectile(fountain, true, PROJECTILE_NADE_DARK_BURN, true); +} +/***********************************************************************************/ void nade_boom(entity this) { entity expef = NULL; @@ -745,6 +1222,21 @@ void nade_boom(entity this) nade_blast = false; expef = EFFECT_SPAWN_NEUTRAL; break; + + case NADE_TYPE_EMERALD: //LegendGuard adds nade case 11-02-2021 + nade_blast = false; + expef = EFFECT_EXPLOSION_SMALL; + break; + + case NADE_TYPE_AMMO: //LegendGuard adds nade case 13-02-2021 + nade_blast = false; + expef = EFFECT_SPAWN_BROWN; + break; + + case NADE_TYPE_DARK: //LegendGuard adds nade case 08-02-2021 + nade_blast = false; + expef = EFFECT_SPAWN_PURPLE;//expef = EFFECT_EXPLOSION_MEDIUM; + break; default: case NADE_TYPE_NORMAL: @@ -778,6 +1270,9 @@ void nade_boom(entity this) case NADE_TYPE_MONSTER: nade_monster_boom(this); break; case NADE_TYPE_ENTRAP: nade_entrap_boom(this); break; case NADE_TYPE_VEIL: nade_veil_boom(this); break; + case NADE_TYPE_EMERALD: nade_emerald_boom(this); break; //LegendGuard adds the register of new nade 11-02-2021 + case NADE_TYPE_AMMO: nade_ammo_boom(this); break; //LegendGuard adds the register of new nade 13-02-2021 + case NADE_TYPE_DARK: nade_dark_boom(this); break; //LegendGuard adds the register of new nade 08-02-2021 } IL_EACH(g_projectiles, it.classname == "grapplinghook" && it.aiment == this, @@ -1339,6 +1834,15 @@ MUTATOR_HOOKFUNCTION(nades, PlayerPreThink) else player.alpha = player.nade_veil_prevalpha; } + //LegendGuard adds nade if STAT DARK_ORB 08-02-2021 + if(STAT(DARK_ORB, player) && STAT(DARK_ORB, player) <= time) + { + STAT(DARK_ORB, player) = 0; + if(player.vehicle) + player.vehicle.alpha = player.vehicle.nade_dark_prevalpha; + else + player.alpha = player.nade_dark_prevalpha; + } } if (!(frametime && IS_PLAYER(player))) @@ -1424,6 +1928,12 @@ MUTATOR_HOOKFUNCTION(nades, MonsterMove) mon.alpha = mon.nade_veil_prevalpha; STAT(VEIL_ORB, mon) = 0; } + //LegendGuard adds nade if STAT ORB 08-02-2021 + if (STAT(DARK_ORB, mon) && STAT(DARK_ORB, mon) <= time) + { + mon.alpha = mon.nade_dark_prevalpha; + STAT(DARK_ORB, mon) = 0; + } } MUTATOR_HOOKFUNCTION(nades, PlayerSpawn) @@ -1561,6 +2071,10 @@ MUTATOR_HOOKFUNCTION(nades, SpectateCopy) STAT(ENTRAP_ORB_ALPHA, client) = STAT(ENTRAP_ORB_ALPHA, spectatee); STAT(VEIL_ORB, client) = STAT(VEIL_ORB, spectatee); STAT(VEIL_ORB_ALPHA, client) = STAT(VEIL_ORB_ALPHA, spectatee); + STAT(AMMUNITIONING_ORB, client) = STAT(AMMUNITIONING_ORB, spectatee); //LegendGuard adds nade STAT client 13-02-2021 + STAT(AMMUNITIONING_ORB_ALPHA, client) = STAT(AMMUNITIONING_ORB_ALPHA, spectatee); + STAT(DARK_ORB, client) = STAT(DARK_ORB, spectatee); //LegendGuard adds nade STAT client 08-02-2021 + STAT(DARK_ORB_ALPHA, client) = STAT(DARK_ORB_ALPHA, spectatee); } MUTATOR_HOOKFUNCTION(nades, BuildMutatorsString) diff --git a/qcsrc/common/mutators/mutator/nades/nades.qh b/qcsrc/common/mutators/mutator/nades/nades.qh index c07882270..b9f971f9e 100644 --- a/qcsrc/common/mutators/mutator/nades/nades.qh +++ b/qcsrc/common/mutators/mutator/nades/nades.qh @@ -64,6 +64,22 @@ float autocvar_g_nades_entrap_radius = 500; float autocvar_g_nades_entrap_time = 10; float autocvar_g_nades_veil_time = 8; float autocvar_g_nades_veil_radius = 300; +float autocvar_g_nades_emerald_lifetime = 5; //LegendGuard adds new nade cvars 28-02-2021 +float autocvar_g_nades_emerald_spawncount = 1; +float autocvar_g_nades_emerald_ball_spread = 0.5; +float autocvar_g_nades_emerald_ball_lifetime = 1; //if much time, many items will spawn +float autocvar_g_nades_emerald_fountain_delay = 5; +float autocvar_g_nades_emerald_ball_count = 3; +float autocvar_g_nades_emerald_fountain_lifetime = 1; //if much time, fountain will remain +bool autocvar_g_nades_emerald_powerupjetpack_randomdrop = 0; +int autocvar_g_nades_emerald_dropitemselect = 0; //admin/user selects which item wants to drop in-game, if not will be random +float autocvar_g_nades_ammo_time = 5; //LegendGuard adds new nade cvars 13-02-2021 +float autocvar_g_nades_ammo_rate = 30; +float autocvar_g_nades_ammo_friend = 1; +float autocvar_g_nades_ammo_foe = -2; +float autocvar_g_nades_dark_damage = 25; //LegendGuard adds new nade cvars 08-02-2021 +float autocvar_g_nades_dark_time = 13; +float autocvar_g_nades_dark_radius = 700; string autocvar_g_nades_pokenade_monster_type; float autocvar_g_nades_pokenade_monster_lifetime; #endif @@ -86,6 +102,12 @@ const int PROJECTILE_NADE_ENTRAP = 84; const int PROJECTILE_NADE_ENTRAP_BURN = 85; const int PROJECTILE_NADE_VEIL = 86; const int PROJECTILE_NADE_VEIL_BURN = 87; +const int PROJECTILE_NADE_EMERALD = 88; //LegendGuard adds new nade MACROS 11-02-2021 +const int PROJECTILE_NADE_EMERALD_BURN = 89; +const int PROJECTILE_NADE_AMMO = 90; //LegendGuard adds new nade MACROS 13-02-2021 +const int PROJECTILE_NADE_AMMO_BURN = 91; +const int PROJECTILE_NADE_DARK = 92; //LegendGuard adds new nade MACROS 08-02-2021 +const int PROJECTILE_NADE_DARK_BURN = 93; REGISTRY(Nades, BITS(4)) REGISTER_REGISTRY(Nades) @@ -142,6 +164,7 @@ Nade Nade_FromProjectile(int proj) .float toss_time; .float nade_show_particles; .float nade_veil_prevalpha; +.float nade_dark_prevalpha; //LegendGuard adds new nade .variable 08-02-2021 bool orb_send(entity this, entity to, int sf); @@ -166,9 +189,174 @@ MUTATOR_HOOKABLE(Nade_Damage, EV_Nade_Damage); #endif +REGISTER_NET_TEMP(TE_CSQC_DARKBLINKING); //LegendGuard registers dark blinking nade feature 09-02-2021 + #ifdef CSQC float cvar_cl_nade_type; string cvar_cl_pokenade_type; +//LegendGuard sets variables for dark nade 09-02-2021 +float autocvar_hud_panel_darkradar_maximised_zoom_scale = 1; +float dark_appeartime; +float dark_fadetime; +/***************************************************************/ +void HUD_DarkBlinking() +{ + // vectors for top right, bottom right, bottom and bottom left corners + //vector topright = vec2(vid_conwidth, 0); + //vector bottom = vec2(vid_conwidth / 2, vid_conheight); + vector bottomright = vec2(vid_conwidth, vid_conheight); + //vector bottomleft = vec2(0, vid_conheight); + + /* + drawfill function parameters (qcsrc/dpdefs/menudefs.qc): + float drawfill(vector position, vector size, vector rgb, float alpha, float flag) + */ + drawfill('0 0 0', bottomright, '0.23 0 0.23', 0.98, DRAWFLAG_NORMAL); +} + +#elif defined(SVQC) +void DarkBlinking(entity e) +{ + if(e == NULL) + return; + + int accepted = VerifyClientEntity(e, true, false); + + if(accepted > 0) + { + msg_entity = e; + WriteHeader(MSG_ONE, TE_CSQC_DARKBLINKING); + } +} +#endif + +#ifdef CSQC +const int MAX_QUADRATIC2 = 25; +vector quadratic2_slots[MAX_QUADRATIC2]; +vector quadratic2_dirs[MAX_QUADRATIC2]; +const float QUADRATIC2_SPEED = 150; +const float QUADRATIC2_TURNSPEED = 0.35; +const float QUADRATIC2_SIZE = 24; +const float QUADRATIC2_CHANCE = 0.35; +float quadratic2_spawntime, quadratic2_fadetime; +bool quadratic2; +void HUD_Quadratic2() +{ + for(int j = MAX_QUADRATIC2 - 1; j >= 0; --j) + { + vector slot = quadratic2_slots[j]; + vector dirs = quadratic2_dirs[j]; + float oldz = slot.z; + if(slot) + slot += quadratic2_dirs[j] * QUADRATIC2_SPEED * frametime; + slot.z = oldz; + //if(slot.z) + //slot.z = sin(QUADRATIC2_TURNSPEED * M_PI * time); + if(slot.y > vid_conheight || slot.x > vid_conwidth) + slot = '0 0 0'; + + if(slot == '0 0 0') + { + if(time > quadratic2_spawntime && random() <= QUADRATIC2_CHANCE) // low chance to spawn! + { + slot.x = bound(0, (random() * vid_conwidth + 1), vid_conwidth); + slot.y = bound(0, (random() * vid_conheight + 1), vid_conheight); + slot.z = 0; + dirs = vec2(randomvec()); + quadratic2_spawntime = time + bound(0.05, random() * 0.5, 0.4); // prevent spawning another one for this amount of time! + } + } + else + { + vector splash_size = vec2(QUADRATIC2_SIZE, QUADRATIC2_SIZE); + if(time > dirs.z) + { + if(random() <= 0.05) + slot.z = -1; + else + slot.z = floor(random() * 9) + 1; + dirs.z = time + QUADRATIC2_TURNSPEED; + } + string chosen_number = ((slot.z == -1) ? "NOOB" : ftos(rint(slot.z))); + draw_beginBoldFont(); + drawcolorcodedstring(vec2(slot), chosen_number, splash_size, 0.95, DRAWFLAG_NORMAL); + draw_endBoldFont(); + } + + quadratic2_slots[j] = slot; + quadratic2_dirs[j] = dirs; + } +} + +bool darkblink; + +STATIC_INIT_LATE(cl_darkblink_override) +{ + localcmd("\nalias solve_quadratic2 \"cl_cmd solve_quadratic2 ${* ?}\"\n"); +} + +REGISTER_MUTATOR(cl_darkblink, true); + +MUTATOR_HOOKFUNCTION(cl_darkblink, DrawScoreboard) +{ + return darkblink; +} + +MUTATOR_HOOKFUNCTION(cl_darkblink, HUD_Draw_overlay) +{ + if(!darkblink && !quadratic2) + return false; + + if(time <= dark_fadetime && autocvar_hud_panel_darkradar_maximised_zoom_scale == 1) + { + HUD_DarkBlinking(); + return false; + } + else + darkblink = false; + + if(time <= quadratic2_fadetime) + { + HUD_Quadratic2(); + // don't return true, we want regular HUD effects! + } + else + quadratic2 = false; + + return false; +} + +MUTATOR_HOOKFUNCTION(cl_darkblink, CSQC_ConsoleCommand) +{ + if(MUTATOR_RETURNVALUE) // command was already handled? + return; + + string cmd_name = M_ARGV(0, string); + //int cmd_argc = M_ARGV(2, int); + + if(cmd_name == "solve_quadratic2") + { + quadratic2 = true; + quadratic2_fadetime = time + 5; + return true; + } +} + +NET_HANDLE(TE_CSQC_DARKBLINKING, bool isNew) +{ + return = true; + + if(darkblink) + return; + + localcmd("play2 sound/misc/blind\n"); + darkblink = true; + dark_appeartime = time; + dark_fadetime = time + 9; +} +#endif +/***************************************************************/ +#ifdef CSQC bool Projectile_isnade(int proj); // TODO: remove void DrawAmmoNades(vector myPos, vector mySize, bool draw_expanding, float expand_time); // TODO: mutator diff --git a/qcsrc/common/stats.qh b/qcsrc/common/stats.qh index 576279112..b21833885 100644 --- a/qcsrc/common/stats.qh +++ b/qcsrc/common/stats.qh @@ -129,8 +129,8 @@ REGISTER_STAT(RESPAWN_TIME, float) REGISTER_STAT(ROUNDSTARTTIME, float, round_starttime) REGISTER_STAT(OVERTIMESTARTTIME, float, overtime_starttime) REGISTER_STAT(OVERTIMESADDED, float, checkrules_overtimesadded) -//REGISTER_STAT(MONSTERS_TOTAL, int) -//REGISTER_STAT(MONSTERS_KILLED, int) +REGISTER_STAT(MONSTERS_TOTAL, int) +REGISTER_STAT(MONSTERS_KILLED, int) REGISTER_STAT(BUFFS, int) REGISTER_STAT(NADE_BONUS, float) REGISTER_STAT(NADE_BONUS_TYPE, int) @@ -150,6 +150,11 @@ REGISTER_STAT(ITEMSTIME, int, autocvar_sv_itemstime) REGISTER_STAT(KILL_TIME, float) REGISTER_STAT(VEIL_ORB, float) REGISTER_STAT(VEIL_ORB_ALPHA, float) +REGISTER_STAT(AMMUNITIONING_ORB, float) //LegendGuard registers new STAT 11-02-2021 +REGISTER_STAT(AMMUNITIONING_ORB_ALPHA, float) +REGISTER_STAT(DARK_ORB, float) //LegendGuard registers new STAT 08-02-2021 +REGISTER_STAT(DARK_ORB_ALPHA, float) + #ifdef SVQC float autocvar_sv_showfps = 0; #endif