-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathasw_gamerules.cpp
More file actions
10381 lines (9029 loc) · 359 KB
/
asw_gamerules.cpp
File metadata and controls
10381 lines (9029 loc) · 359 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#include "cbase.h"
#include "ammodef.h"
#ifdef CLIENT_DLL
#include "c_asw_marine.h"
#include "c_asw_pickup.h"
#include "c_asw_marine_resource.h"
#include "c_asw_flare_projectile.h"
#include "c_asw_weapon.h"
#include "c_asw_game_resource.h"
#include "c_asw_player.h"
#include "asw_shareddefs.h"
#include "c_asw_campaign_save.h"
#include "c_asw_ammo.h"
#include "voice_status.h"
#include "gamestringpool.h"
#include "c_user_message_register.h"
#define CASW_Equip_Req C_ASW_Equip_Req
#include "asw_equip_req.h"
#define CASW_Weapon C_ASW_Weapon
#define CAI_BaseNPC C_AI_BaseNPC
#define CASW_Flare_Projectile C_ASW_Flare_Projectile
#define CASW_Campaign_Save C_ASW_Campaign_Save
#define CASW_Ammo C_ASW_Ammo
#include "c_asw_steamstats.h"
#include "rd_rich_presence.h"
#include "c_world.h"
#include "rd_player_reporting.h"
#include "asw_util_shared.h"
#include "asw_hud_minimap.h"
#else
#include "asw_marine_resource.h"
#include "player.h"
#include "game.h"
#include "gamerules.h"
#include "teamplay_gamerules.h"
#include "asw_player.h"
#include "voice_gamemgr.h"
#include "globalstate.h"
#include "ai_basenpc.h"
#include "asw_game_resource.h"
#include "asw_marine.h"
#include "asw_spawner.h"
#include "asw_pickup.h"
#include "asw_flare_projectile.h"
#include "asw_weapon.h"
#include "asw_ammo.h"
#include "asw_mission_manager.h"
#include "asw_marine_speech.h"
#include "asw_gamestats.h"
#include "ai_networkmanager.h"
#include "ai_initutils.h"
#include "ai_network.h"
#include "ai_navigator.h"
#include "ai_node.h"
#include "ai_link.h"
#include "asw_campaign_save.h"
#include "asw_egg.h"
#include "asw_alien_goo_shared.h"
#include "asw_parasite.h"
#include "asw_harvester.h"
#include "asw_drone_advanced.h"
#include "asw_shieldbug.h"
#include "asw_parasite.h"
#include "asw_medals.h"
#include "asw_mine.h"
#include "asw_burning.h"
#include "asw_triggers.h"
#include "asw_use_area.h"
#include "asw_grenade_vindicator.h"
#include "asw_sentry_top.h"
#include "asw_sentry_base.h"
#include "asw_radiation_volume.h"
#include "missionchooser/iasw_mission_chooser_source.h"
#include "asw_objective.h"
#include "asw_debrief_stats.h"
#include "props.h"
#include "vgui/ILocalize.h"
#include "inetchannelinfo.h"
#include "asw_util_shared.h"
#include "filesystem.h"
#include "asw_intro_control.h"
#include "asw_tutorial_spawning.h"
#include "asw_equip_req.h"
#include "asw_map_scores.h"
#include "world.h"
#include "asw_bloodhound.h"
#include "asw_fire.h"
#include "engine/IEngineSound.h"
#include "asw_pickup_weapon.h"
#include "asw_fail_advice.h"
#include "asw_spawn_manager.h"
#include "asw_path_utils.h"
#include "EntityFlame.h"
#include "asw_buffgrenade_projectile.h"
#include "asw_achievements.h"
#include "asw_director.h"
#include "team.h"
#include "asw_pickup_equipment.h"
#include "Sprite.h"
#include "highres_timer.h"
#include "env_tonemap_controller.h"
#include "asw_marine_hint.h"
#include "eventqueue.h"
#include "ai_dynamiclink.h"
#include "asw_spawn_selection.h"
#include "asw_door.h"
#include "ScriptGameEventListener.h"
#include "cdll_int.h"
#include "iconsistency.h"
#include "rd_crafting_defs.h"
#endif
#include "fmtstr.h"
#include "game_timescale_shared.h"
#include "asw_gamerules.h"
#include "asw_equipment_list.h"
#include "asw_marine_profile.h"
#include "asw_weapon_parse.h"
#include "asw_weapon_ammo_bag_shared.h"
#include "takedamageinfo.h"
#include "asw_holdout_mode.h"
#include "asw_deathmatch_mode.h"
#include "asw_powerup_shared.h"
#include "missionchooser/iasw_mission_chooser.h"
#include "missionchooser/iasw_random_missions.h"
#include "missionchooser/iasw_map_builder.h"
#include "rd_challenges_shared.h"
#include "rd_missions_shared.h"
#include "rd_workshop.h"
#include "rd_lobby_utils.h"
#include "rd_loadout.h"
#include "matchmaking/imatchframework.h"
#include <ctime>
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
extern ConVar old_radius_damage;
#define ASW_LAUNCHING_STEP 0.25f // time between each stage of launching
#define ASW_DEFAULT_COMMANDER_FACE "briefing/face_pilot"
#ifndef CLIENT_DLL
extern IConsistency *consistency;
extern ConVar asw_debug_alien_damage;
extern ConVar asw_medal_lifesaver_dist;
extern ConVar asw_medal_lifesaver_kills;
extern ConVar asw_tutorial_save_stage;
extern ConVar asw_horde;
extern ConVar asw_director_controls_spawns;
extern ConVar asw_medal_barrel_kills;
extern ConVar rd_killingspree_time_limit;
extern ConVar rd_quake_sounds;
ConVar asw_objective_slowdown_time( "asw_objective_slowdown_time", "1.8", FCVAR_CHEAT, "Length of time that the slowdown effect lasts." );
ConVar asw_marine_explosion_protection("asw_marine_explosion_protection", "0.5", FCVAR_CHEAT, "Reduction of explosion radius against marines");
ConVar asw_door_explosion_boost("asw_door_explosion_boost", "2.0", FCVAR_CHEAT, "Sets damage scale for grenades vs doors");
// Alien modifiers for difficulty level
// Base mission difficulty is:
// Easy = 3
// Normal = 5
// Hard = 7
// Insane = 10
// With campaign map modifers affecting this number (-2 to +2)
// Alien health and damage modifiers are applied for every step away from
// the base mission difficulty level of 5.
// 20% extra health for every difficulty above 5
ConVar asw_difficulty_alien_health_step("asw_difficulty_alien_health_step", "0.2", FCVAR_CHEAT, "How much alien health is changed per mission difficulty level");
// 20% extra damage for every difficulty above 5
ConVar asw_difficulty_alien_damage_step("asw_difficulty_alien_damage_step", "0.2", FCVAR_CHEAT, "How much alien damage is changed per mission difficulty level");
ConVar asw_ww_chatter_interval_min("asw_ww_chatter_interval_min", "200", 0, "Min time between wildcat and wolfe conversation");
ConVar asw_ww_chatter_interval_max("asw_ww_chatter_interval_max", "260", 0, "Max time between wildcat and wolfe conversation");
ConVar asw_compliment_chatter_interval_min("asw_compliment_chatter_interval_min", "180", 0, "Min time between kill compliments");
ConVar asw_compliment_chatter_interval_max("asw_compliment_chatter_interval_max", "240", 0, "Max time between kill compliments");
ConVar asw_default_campaign("asw_default_campaign", "jacob", FCVAR_ARCHIVE, "Default campaign used when dedicated server restarts");
ConVar rd_max_marines( "rd_max_marines", "-1", FCVAR_NONE, "Sets how many marines can be selected" );
ConVar asw_campaign_wounding("asw_campaign_wounding", "0", FCVAR_NONE, "Whether marines are wounded in the roster if a mission is completed with the marine having taken significant damage");
ConVar asw_drop_powerups("asw_drop_powerups", "0", FCVAR_CHEAT, "Do aliens drop powerups?");
ConVar asw_adjust_difficulty_by_number_of_marines( "asw_adjust_difficulty_by_number_of_marines", "1", FCVAR_CHEAT, "If enabled, difficulty will be reduced when there are only 3 or 2 marines." );
ConVar rd_increase_difficulty_by_number_of_marines( "rd_increase_difficulty_by_number_of_marines", "0", FCVAR_CHEAT, "If enabled, difficulty will be increased when there are more than 4 marines." );
ConVar sv_vote_kick_ban_duration("sv_vote_kick_ban_duration", "5", 0, "How long should a kick vote ban someone from the server? (in minutes)");
ConVar sv_timeout_when_fully_connected( "sv_timeout_when_fully_connected", "30", FCVAR_NONE, "Once fully connected, player will be kicked if he doesn't send a network message within this interval." );
ConVar mm_swarm_state( "mm_swarm_state", "ingame", FCVAR_DEVELOPMENTONLY );
ConVar rd_request_experience("rd_request_experience", "1", FCVAR_DEVELOPMENTONLY, "For dev, if 1 RequestExperience function is called. Used for standard coop");
ConVar rd_reassign_marines("rd_reassign_marines", "1", FCVAR_NONE, "For dev, if 1 ReassignMarines function will be called");
ConVar rd_ready_mark_override("rd_ready_mark_override", "0", FCVAR_NONE, "If set to 1 all players will be auto ready, the green ready mark will be set to checked state");
ConVar rd_server_shutdown_when_empty( "rd_server_shutdown_when_empty", "0", FCVAR_NONE, "Server will shutdown after last player left." );
ConVar rd_auto_kick_low_level_player( "rd_auto_kick_low_level_player", "0", FCVAR_CHEAT, "Server auto kicks players below level 30 from challenges which have this cvar set to 1. This cvar is meant for players who use dedicated server browser to join games, since Public Games window already restricts filters to max Hard difficulty and challenge being disabled" );
ConVar rd_auto_kick_low_level_player_if_brutal_or_challenge( "rd_auto_kick_low_level_player_if_brutal_or_challenge", "0", FCVAR_CHEAT, "Server auto kicks players below level 30 if difficulty is brutal or a challenge is active" );
ConVar rd_auto_kick_low_level_player_if_brutal_or_asbi( "rd_auto_kick_low_level_player_if_brutal_or_asbi", "0", FCVAR_NONE, "Server auto kicks players below level 30 if difficulty is brutal or official asbi is active" );
ConVar rd_auto_kick_high_ping_player( "rd_auto_kick_high_ping_player", "0", FCVAR_CHEAT, "Server auto kick players with pings higher than this cvar." );
ConVar rd_clearhouse_on_mission_complete( "rd_clearhouse_on_mission_complete", "0", FCVAR_NONE, "If 1 all NPCs will be removed from map on round end" );
ConVar rd_sentry_block_aliens( "rd_sentry_block_aliens", "1", FCVAR_CHEAT, "If 0 sentries don't collide with aliens" );
ConVar rd_auto_fast_restart( "rd_auto_fast_restart", "0", FCVAR_NONE, "Set to 1 to restart mission on fail automatically" );
static void RDAAutoMissionFailedInstantRestartChanged( IConVar *pConVar, const char *szOldValue, float flOldValue )
{
Warning( "rda_auto_mission_failed_instant_restart is deprecated and may be removed in a future version - use rd_auto_fast_restart instead.\n" );
rd_auto_fast_restart.SetValue( ConVarRef( pConVar ).GetString() );
}
ConVar rda_auto_mission_failed_instant_restart( "rda_auto_mission_failed_instant_restart", "0", FCVAR_HIDDEN, "", &RDAAutoMissionFailedInstantRestartChanged );
ConVar rd_adjust_mod_dont_load_vertices("rd_adjust_mod_dont_load_vertices", "1", FCVAR_NONE, "Automatically disables loading of vertex data.", true, 0, true, 1);
ConVar rd_dedicated_high_resolution_timer_ms( "rd_dedicated_high_resolution_timer_ms", "0.01", FCVAR_NONE, "Acquire timer with specified resolution in ms" );
ConVar rd_radial_damage_no_falloff_distance( "rd_radial_damage_no_falloff_distance", "16", FCVAR_CHEAT, "Distance from an explosion where damage starts to decrease based on distance.", true, 0, false, 0 );
ConVar rda_marine_allow_strafe("rda_marine_allow_strafe", "0", FCVAR_CHEAT, "Allow marines to use strafe command");
// 0 = vote only, 1 = loop, 2 = shuffle
ConVar rd_mapcycle_deathmatch( "rd_mapcycle_deathmatch", "1", FCVAR_ARCHIVE, "Automatically select the next Deathmatch mission." );
ConVar rd_mapcycle_endless( "rd_mapcycle_endless", "0", FCVAR_ARCHIVE, "Automatically select the next Endless mission." );
ConVar rd_mapcycle_bonus( "rd_mapcycle_bonus", "1", FCVAR_ARCHIVE, "Automatically select the next Bonus mission." );
ConVar rd_mapcycle_ignore( "rd_mapcycle_ignore", "", FCVAR_ARCHIVE, "Comma-separated list of map filenames (no .bsp) that cannot be selected by map cycle." );
// allow updateing the high res timer realtime
inline void HighResTimerChangeCallback( IConVar* pConVar, const char* pOldString, float flOldValue )
{
// on change apply timer resolution immediately
highres_timer_set( rd_dedicated_high_resolution_timer_ms.GetFloat() );
}
static void EnforceWeaponClassRestriction( IConVar *pConVar = NULL, const char *pOldValue = NULL, float flOldValue = 0.0f )
{
// don't do anything if the new value is the same as the old value
if ( !V_strcmp( ConVarRef( pConVar ).GetString(), pOldValue ) )
return;
ConVarRef rd_weapons_regular_class_unrestricted( "rd_weapons_regular_class_unrestricted" );
ConVarRef rd_weapons_extra_class_unrestricted( "rd_weapons_extra_class_unrestricted" );
if ( rd_weapons_regular_class_unrestricted.GetInt() == -2 && rd_weapons_extra_class_unrestricted.GetInt() == -2 )
return;
if ( ASWGameRules() && ASWGameResource() && ASWGameRules()->GetGameState() == ASW_GS_BRIEFING )
{
for ( int i = 0; i < ASW_MAX_MARINE_RESOURCES; i++ )
{
CASW_Marine_Resource *pMR = ASWGameResource()->GetMarineResource( i );
if ( !pMR )
continue;
CASW_Player *pPlayer = pMR->GetCommander();
CASW_Marine_Profile *pProfile = pMR->GetProfile();
if ( !pPlayer || !pProfile )
continue;
engine->ClientCommand( pPlayer->edict(), "cl_loadoutm %d %d %d %d\n", i, ASW_INVENTORY_SLOT_PRIMARY, ReactiveDropLoadout::DefaultLoadout.Marines[pProfile->m_iDefaultLoadoutIndex].Primary, -1 );
engine->ClientCommand( pPlayer->edict(), "cl_loadoutm %d %d %d %d\n", i, ASW_INVENTORY_SLOT_SECONDARY, ReactiveDropLoadout::DefaultLoadout.Marines[pProfile->m_iDefaultLoadoutIndex].Secondary, -1 );
engine->ClientCommand( pPlayer->edict(), "cl_loadoutm %d %d %d %d\n", i, ASW_INVENTORY_SLOT_EXTRA, ReactiveDropLoadout::DefaultLoadout.Marines[pProfile->m_iDefaultLoadoutIndex].Extra, -1 );
}
}
}
// reactivedrop: this callback function is called when rd_weapons_<slot>_allowed cvar is
// changed. It checks whether marine has not allowed weapons selected and replaces them
// with an allowed alternative. Such as replace all weapons with rifles for Rifle Mod
static void EnforceWeaponSelectionRules( IConVar *pConVar = NULL, const char *pOldValue = NULL, float flOldValue = 0.0f )
{
if ( ASWGameRules() && ASWGameResource() )
{
for ( int i = 0; i < ASW_MAX_MARINE_RESOURCES; i++ )
{
CASW_Marine_Resource *pMR = ASWGameResource()->GetMarineResource( i );
if ( !pMR )
{
continue;
}
for ( int j = 0; j < ASW_MAX_EQUIP_SLOTS; j++ )
{
pMR->m_iWeaponsInSlots.Set( j, ASWGameRules()->ApplyWeaponSelectionRules( j, pMR->m_iWeaponsInSlots.Get( j ) ) );
}
}
}
}
// reactivedrop: this callback function is called when rd_player_bots_allowed cvar is
// changed. If the value is 0 it will remove all bots from the briefing
static void DeselectMarineBots( IConVar *pConVar, const char *pOldValue, float flOldValue )
{
extern ConVar rd_player_bots_allowed;
if ( rd_player_bots_allowed.GetBool() )
return;
if ( !ASWGameRules() || ASWGameRules()->GetGameState() != ASW_GS_BRIEFING )
return;
CASW_Game_Resource *pGameResource = ASWGameResource();
if ( !pGameResource )
return;
CUtlVector<CASW_Marine_Resource *> toDelete;
for ( int i = 1; i <= gpGlobals->maxClients; i++ )
{
CBasePlayer *pPlayer = UTIL_PlayerByIndex( i );
if ( !pPlayer )
continue;
bool bHaveMarine = false;
for ( int j = 0; j < ASW_MAX_MARINE_RESOURCES; j++ )
{
CASW_Marine_Resource *pMR = pGameResource->GetMarineResource( j );
if ( !pMR )
continue;
if ( pMR->GetCommander() != pPlayer )
continue;
if ( !bHaveMarine )
{
bHaveMarine = true;
continue;
}
toDelete.AddToTail( pMR );
}
}
DevMsg( "Removing %d bot marines from the lobby.\n", toDelete.Count() );
FOR_EACH_VEC( toDelete, i )
{
pGameResource->DeleteMarineResource( toDelete[i] );
}
}
#endif
static void UpdateMatchmakingTagsCallback( IConVar *pConVar, const char *pOldValue, float flOldValue )
{
#ifdef GAME_DLL
// don't allow changing challenge convars from their desired values
if ( pConVar && ASWGameRules() )
{
const CUtlVectorAutoPurge<StringKeyValue_t *> &saved = ASWGameRules()->m_SavedConvars_Challenge;
FOR_EACH_VEC( saved, i )
{
if ( saved[i]->m_Key == pConVar->GetName() )
{
const char *pszDesiredValue = saved[i]->m_Value;
if ( V_strcmp( ConVarRef( pConVar ).GetString(), pszDesiredValue ) )
{
pConVar->SetValue( pszDesiredValue );
return;
}
break;
}
}
}
// update sv_tags to force an update of the matchmaking tags
static ConVarRef sv_tags( "sv_tags" );
if ( sv_tags.IsValid() )
{
char buffer[1024];
Q_snprintf( buffer, sizeof( buffer ), "%s", sv_tags.GetString() );
sv_tags.SetValue( buffer );
}
#else
C_AlienSwarm *pAlienSwarm = ASWGameRules();
if ( !pAlienSwarm )
return;
g_ReactiveDropWorkshop.CheckForRequiredAddons();
g_RD_Player_Reporting.UpdateServerInfo();
if ( !UTIL_RD_IsLobbyOwner() )
return;
KeyValues *pSettings = g_pMatchFramework->GetMatchSession()->GetSessionSettings();
// The matchmaking library knows if we're on a dedicated server but does not automatically add that information to the Steam lobby.
if ( V_strcmp( pSettings->GetString( "server/server" ), pSettings->GetString( "options/server" ) ) )
{
KeyValues::AutoDelete pUpdate( "update" );
pUpdate->SetString( "update/options/server", pSettings->GetString( "server/server" ) );
if ( !V_strcmp( pSettings->GetString( "server/server" ), "dedicated" ) )
{
// If we're on a dedicated server, add its IP to the lobby info so we can deduplicate it in the lobby browser.
pUpdate->SetString( "update/system/rd_dedicated_server", pSettings->GetString( "server/adronline" ) );
}
g_pMatchFramework->GetMatchSession()->UpdateSessionSettings( pUpdate );
}
// mm_max_players gets updated after it's read for the lobby, so we need to update the slot count here as well.
SteamMatchmaking()->SetLobbyMemberLimit( UTIL_RD_GetCurrentLobbyID(), gpGlobals->maxClients );
UTIL_RD_UpdateCurrentLobbyData( "members:numSlots", gpGlobals->maxClients );
{
HACK_GETLOCALPLAYER_GUARD( "need minimap for hostname" );
CASWHudMinimap *pMinimap = GET_HUDELEMENT( CASWHudMinimap );
Assert( pMinimap );
if ( pMinimap )
{
UTIL_RD_UpdateCurrentLobbyData( "system:hostname", pMinimap->m_szServerName );
}
}
PublishedFileId_t missionAddonID = pAlienSwarm->m_iMissionWorkshopID.Get();
if ( missionAddonID == k_PublishedFileIdInvalid )
{
UTIL_RD_RemoveCurrentLobbyData( "game:missioninfo:workshop" );
}
else
{
UTIL_RD_UpdateCurrentLobbyData( "game:missioninfo:workshop", missionAddonID );
}
if ( g_ASW_Steamstats.IsOfficialCampaign() )
{
UTIL_RD_UpdateCurrentLobbyData( "game:missioninfo:official", "1" );
}
else
{
UTIL_RD_RemoveCurrentLobbyData( "game:missioninfo:official" );
}
static ConVarRef sv_consistency( "sv_consistency" );
UTIL_RD_UpdateCurrentLobbyData( "system:game_version", engine->GetProductVersionString() );
UTIL_RD_UpdateCurrentLobbyData( "system:map_version", GetClientWorldEntity()->m_nMapVersion );
UTIL_RD_UpdateCurrentLobbyData( "system:server_version", uint64_t( pAlienSwarm->m_iServerVersion ) );
UTIL_RD_UpdateCurrentLobbyData( "system:pure", sv_consistency.GetInt() );
if ( ISteamApps *pSteamApps = SteamApps() )
{
UTIL_RD_UpdateCurrentLobbyData( "system:game_build", pSteamApps->GetAppBuildId() );
char szBranch[256]{};
pSteamApps->GetCurrentBetaName( szBranch, sizeof( szBranch ) );
UTIL_RD_UpdateCurrentLobbyData( "system:game_branch", szBranch );
KeyValues::AutoDelete pUpdate( "update" );
pUpdate->SetString( "update/system/game_version", engine->GetProductVersionString() );
pUpdate->SetInt( "update/system/map_version", GetClientWorldEntity()->m_nMapVersion );
pUpdate->SetInt( "update/system/game_build", pSteamApps->GetAppBuildId() );
pUpdate->SetString( "update/system/game_branch", szBranch );
g_pMatchFramework->GetMatchSession()->UpdateSessionSettings( pUpdate );
}
else
{
UTIL_RD_RemoveCurrentLobbyData( "system:game_build" );
UTIL_RD_RemoveCurrentLobbyData( "system:game_branch" );
}
if ( C_ASW_Deathmatch_Mode *pDeathmatch = ASWDeathmatchMode() )
{
switch ( pDeathmatch->GetGameMode() )
{
case GAMEMODE_DEATHMATCH:
UTIL_RD_UpdateCurrentLobbyData( "game:deathmatch", "deathmatch" );
break;
case GAMEMODE_INSTAGIB:
UTIL_RD_UpdateCurrentLobbyData( "game:deathmatch", "instagib" );
break;
case GAMEMODE_GUNGAME:
UTIL_RD_UpdateCurrentLobbyData( "game:deathmatch", "gungame" );
break;
case GAMEMODE_TEAMDEATHMATCH:
UTIL_RD_UpdateCurrentLobbyData( "game:deathmatch", "teamdeathmatch" );
break;
default:
AssertOnce( !"Unhandled deathmatch mode" );
UTIL_RD_UpdateCurrentLobbyData( "game:deathmatch", CFmtStr( "unknown_%d", pDeathmatch->GetGameMode() ) );
break;
}
}
else
{
UTIL_RD_RemoveCurrentLobbyData( "game:deathmatch" );
}
extern ConVar rd_challenge;
if ( !V_strcmp( rd_challenge.GetString(), "0" ) )
{
UTIL_RD_UpdateCurrentLobbyData( "game:challenge", "0" );
UTIL_RD_RemoveCurrentLobbyData( "game:challengeinfo:workshop" );
UTIL_RD_RemoveCurrentLobbyData( "game:challengeinfo:displaytitle" );
}
else
{
UTIL_RD_UpdateCurrentLobbyData( "game:challenge", rd_challenge.GetString() );
PublishedFileId_t challengeAddonID = ReactiveDropChallenges::WorkshopID( rd_challenge.GetString() );
if ( challengeAddonID == k_PublishedFileIdInvalid )
{
UTIL_RD_RemoveCurrentLobbyData( "game:challengeinfo:workshop" );
}
else
{
UTIL_RD_UpdateCurrentLobbyData( "game:challengeinfo:workshop", challengeAddonID );
}
UTIL_RD_UpdateCurrentLobbyData( "game:challengeinfo:displaytitle", ReactiveDropChallenges::DisplayName( rd_challenge.GetString() ) );
}
UTIL_RD_UpdateCurrentLobbyData( "game:onslaught", pAlienSwarm->IsOnslaught() ? "1" : "0" );
UTIL_RD_UpdateCurrentLobbyData( "game:hardcoreFF", pAlienSwarm->IsHardcoreFF() ? "1" : "0" );
CUtlVector<PublishedFileId_t> RequiredAddons;
g_ReactiveDropWorkshop.GetRequiredAddons( RequiredAddons );
char szRequiredAddons[1024]{};
FOR_EACH_VEC( RequiredAddons, i )
{
if ( i )
V_snprintf( szRequiredAddons, sizeof( szRequiredAddons ), "%s,%llX", szRequiredAddons, RequiredAddons[i] );
else
V_snprintf( szRequiredAddons, sizeof( szRequiredAddons ), "%llX", RequiredAddons[i] );
}
UTIL_RD_UpdateCurrentLobbyData( "game:required_workshop_items", szRequiredAddons );
#endif
}
// moved here for deathmatch
ConVar asw_marine_names("asw_marine_names", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "Whether to show the marine name");
ConVar asw_world_healthbars("asw_world_healthbars", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "Shows health bars in the game world");
ConVar asw_world_usingbars("asw_world_usingbars", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "Shows using bars in the game world");
ConVar rd_show_arrow_to_marine("rd_show_arrow_to_marine", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 then arrows show where marines are");
//
// also for deathmatch
ConVar rd_show_others_laser_pointer("rd_show_others_laser_pointer", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "Allows to show laser pointers of other marines, not my marine");
ConVar rd_paint_marine_blips("rd_paint_marine_blips", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 marines' position and facing is shown on minimap");
ConVar rd_paint_scanner_blips("rd_paint_scanner_blips", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 scanner blips are shown on minimap");
ConVar rd_deathmatch_loadout_allowed("rd_deathmatch_loadout_allowed", "0", FCVAR_REPLICATED, "If set to 1 players can choose weapons they spawn with");
ConVar rd_respawn_time( "rd_respawn_time", "0.2", FCVAR_REPLICATED, "Number of seconds after you can respawn in Deathmatch", true, 0.2f, false, 1000.0f);
ConVar rd_ground_shooting( "rd_ground_shooting", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "1 enable ground shooting, 0 disabled" );
ConVar asw_cam_marine_pitch( "asw_cam_marine_pitch", "60", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: pitch." );
ConVar asw_cam_marine_dist( "asw_cam_marine_dist", "412", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: Distance from marine." );
ConVar asw_cam_marine_pitch_rate( "asw_cam_marine_pitch_rate", "1000", FCVAR_CHEAT | FCVAR_REPLICATED );
ConVar rd_cam_marine_yaw_rate( "rd_cam_marine_yaw_rate", "0.1", FCVAR_CHEAT | FCVAR_REPLICATED, "Time in seconds needed to change camera yaw" );
ConVar asw_cam_marine_dist_rate( "asw_cam_marine_dist_rate", "50", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: Distance from marine." );
ConVar asw_cam_marine_dist_death( "asw_cam_marine_dist_death", "200", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: Distance from marine as he dies." );
ConVar asw_cam_marine_pitch_death( "asw_cam_marine_pitch_death", "50", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: pitch when he dies." );
ConVar asw_cam_marine_yaw_death_rate( "asw_cam_marine_yaw_death_rate", "35.0", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: yaw rotate rate when he dies." );
ConVar asw_cam_marine_shift_z_death( "asw_cam_marine_shift_z_death", "-30.0", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: Shift camera vertically when he dies." );
ConVar asw_cam_marine_shift_ratex( "asw_cam_marine_shift_ratex", "1000", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: How far the camera pans east/west as you move the mouse." );
ConVar asw_cam_marine_shift_ratey( "asw_cam_marine_shift_ratey", "650", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: How far the camera pans north as you move the mouse." );
ConVar asw_cam_marine_shift_ratey_south( "asw_cam_marine_shift_ratey_south", "2000", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: How far the camera pans south as you move the mouse." );
ConVar asw_cam_marine_shift_maxx( "asw_cam_marine_shift_maxx", "300", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: How far the camera pans east/west as you move the mouse." );
ConVar asw_cam_marine_shift_maxy( "asw_cam_marine_shift_maxy", "200", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: How far the camera pans north as you move the mouse." );
ConVar asw_cam_marine_shift_maxy_south( "asw_cam_marine_shift_maxy_south", "380", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: How far the camera pans south as you move the mouse." );
ConVar asw_cam_marine_shift_deadspace( "asw_cam_marine_shift_deadspace", "64", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: Deadspace around the marine before camera shifting starts." );
ConVar asw_cam_marine_blend( "asw_cam_marine_blend", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "Marine Camera: Whether camera should blend Z movement changes." );
ConVar asw_cam_marine_test( "asw_cam_marine_test", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "Camera Test." );
ConVar asw_cam_marine_sphere_min( "asw_cam_marine_sphere_min", "32", FCVAR_CHEAT | FCVAR_REPLICATED, "Test" );
ConVar asw_cam_marine_sphere_max( "asw_cam_marine_sphere_max", "400", FCVAR_CHEAT | FCVAR_REPLICATED, "Test" );
ConVar asw_cam_marine_spring_vel_max( "asw_cam_marine_spring_vel_max", "35.0", FCVAR_CHEAT | FCVAR_REPLICATED, "Camera max velocity." );
ConVar asw_cam_marine_spring_const( "asw_cam_marine_spring_const", "0.75", FCVAR_CHEAT | FCVAR_REPLICATED, "Camera spring constant." );
ConVar asw_cam_marine_spring_dampening( "asw_cam_marine_spring_dampening", "3.0", FCVAR_CHEAT | FCVAR_REPLICATED, "Camera spring dampening." );
ConVar asw_cam_marine_yshift_static( "asw_cam_marine_yshift_static", "75.0f", FCVAR_CHEAT | FCVAR_REPLICATED, "Camera y-shift value." );
// Vehicle Camera ConVars.
ConVar asw_vehicle_cam_height( "asw_vehicle_cam_height", "0", FCVAR_CHEAT | FCVAR_REPLICATED );
ConVar asw_vehicle_cam_pitch( "asw_vehicle_cam_pitch", "5", FCVAR_CHEAT | FCVAR_REPLICATED );
ConVar asw_vehicle_cam_dist( "asw_vehicle_cam_dist", "380", FCVAR_CHEAT | FCVAR_REPLICATED );
ConVar asw_vehicle_cam_speed( "asw_vehicle_cam_speed", "200", FCVAR_CHEAT | FCVAR_REPLICATED );
ConVar asw_vehicle_cam_shift_enable( "asw_vehicle_cam_shift_enable", "0", FCVAR_CHEAT | FCVAR_REPLICATED );
ConVar asw_cam_marine_dist_2( "asw_cam_marine_dist_2", "80", FCVAR_CHEAT | FCVAR_REPLICATED, "offset of camera in asw_controls 2" );
ConVar asw_cam_marine_pitch_2( "asw_cam_marine_pitch_2", "10", FCVAR_CHEAT | FCVAR_REPLICATED, "pitch offset of camera in asw_controls 2" );
ConVar asw_cam_marine_yaw_2( "asw_cam_marine_yaw_2", "20", FCVAR_CHEAT | FCVAR_REPLICATED, "yaw offset of camera in asw_controls 2" );
ConVar asw_cam_marine_speed_2( "asw_cam_marine_speed_2", "50", FCVAR_CHEAT | FCVAR_REPLICATED, "speed going back to full distance of camera in asw_controls 2" );
ConVar rd_allow_afk( "rd_allow_afk", "1", FCVAR_REPLICATED, "If set to 0 players cannot use asw_afk command or Esc - Take a Break" );
// for deathmatch
ConVar asw_vote_duration("asw_vote_duration", "20", FCVAR_REPLICATED, "Time allowed to vote on a map/campaign/saved game change.");
#ifdef GAME_DLL
ConVar asw_vote_cooldown_duration("asw_vote_cooldown_duration", "75", FCVAR_NONE, "For how long to impose a cooldown to a player who has started map votes too often. Cooldown resets on map change.");
ConVar asw_vote_limit("asw_vote_limit", "2", FCVAR_NONE, "How many recent map votes are considered to be vote spam and cooldown kicks in.", true, 2.0f, false, 1000.0f);
ConVar asw_vote_spam_time("asw_vote_spam_time", "30", FCVAR_NONE, "How much time has to pass from previous map vote from the same user so that the next map vote does not count as recent (spam).", true, 1.0f, false, 1000.0f);
#endif
ConVar rd_restrict_aspect_width( "rd_restrict_aspect_width", "-1", FCVAR_REPLICATED, "Limit aspect ratio width-to-height ratio by clamping the mouse position and optionally blocking vision of the sides of the screen. Zero or negative means no restriction. 1.7777777 is 16:9." );
ConVar rd_draw_restricted_rectangles_coop( "rd_draw_restricted_rectangles_coop", "0", FCVAR_REPLICATED, "Fill extra side FOVs with black on ultra-wide resolution in coop mode." );
ConVar rd_draw_restricted_rectangles_dm( "rd_draw_restricted_rectangles_dm", "0", FCVAR_REPLICATED, "Fill extra side FOVs with black on ultra-wide resolution in deathmatch mode." );
#ifdef CLIENT_DLL
ConVar asw_marine_death_cam("asw_marine_death_cam", "1", FCVAR_ARCHIVE | FCVAR_DEMO, "Use death cam");
#else
static void UpdateGameRulesDeathCamSlowdown( IConVar *var, const char *pOldValue, float flOldValue );
ConVar asw_marine_death_cam_slowdown( "asw_marine_death_cam_slowdown", "1", FCVAR_ARCHIVE, "Slow down time when a marine dies", &UpdateGameRulesDeathCamSlowdown );
static void UpdateGameRulesDeathCamSlowdown( IConVar *var, const char *pOldValue, float flOldValue )
{
CAlienSwarm *pASW = ASWGameRules();
if ( pASW )
{
pASW->m_bDeathCamSlowdown = asw_marine_death_cam_slowdown.GetBool();
}
}
#endif
ConVar asw_marine_death_cam_time_interp("asw_marine_death_cam_time_interp", "0.5", FCVAR_CHEAT | FCVAR_REPLICATED, "Time to blend into the death cam");
ConVar asw_marine_death_cam_time_interp_out("asw_marine_death_cam_time_interp_out", "0.75", FCVAR_CHEAT | FCVAR_REPLICATED, "Time to blend out of the death cam");
ConVar asw_marine_death_cam_time("asw_marine_death_cam_time", "0.4", FCVAR_CHEAT | FCVAR_REPLICATED, "Time to do the slowdown death cam");
ConVar asw_marine_death_cam_hold("asw_marine_death_cam_time_hold", "1.75", FCVAR_CHEAT | FCVAR_REPLICATED, "Time to hold on the dying marine at time ramps back up");
ConVar asw_marine_death_cam_time_local_hold("asw_marine_death_cam_time_local_hold", "5.0", FCVAR_CHEAT | FCVAR_REPLICATED, "Time to hold on the dying marine at time ramps back up if they died");
ConVar asw_marine_death_cam_time_scale("asw_marine_death_cam_time_scale", "0.035", FCVAR_CHEAT | FCVAR_REPLICATED, "Time scale during death cam");
ConVar asw_campaign_death("asw_campaign_death", "0", FCVAR_REPLICATED, "Whether marines are killed in the roster if a mission is completed with the marine dead");
ConVar asw_stim_time_scale("asw_stim_time_scale", "0.35", FCVAR_REPLICATED | FCVAR_CHEAT, "Time scale during stimpack slomo");
ConVar asw_time_scale_delay("asw_time_scale_delay", "0.15", FCVAR_REPLICATED | FCVAR_CHEAT, "Delay before timescale changes to give a chance for the client to comply and predict.");
ConVar asw_ignore_need_two_player_requirement("asw_ignore_need_two_player_requirement", "1", FCVAR_REPLICATED, "If set to 1, ignores the mission setting that states two players are needed to start the mission.");
ConVar mp_gamemode( "mp_gamemode", "campaign", FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY, "Current game mode for matchmaking.dll." );
ConVar sv_gametypes( "sv_gametypes", "campaign,bonus_mission,endless,deathmatch", FCVAR_REPLICATED, "Game modes that can be selected on this server." );
// this cvar is tricky if we want to have lobbies with different number of slots(e.g. 4 or 8)
// when client creates a lobby it sets the number of slots for lobby
// when client searches for lobbies and this cvar is set to 3 then all 4+ player lobbies will be unjoinable, the join button will be greyed out
// when client connects to a dedicated server which has lobbies enabled, the new lobby with this number of slots will be created, no matter what maxplayers value server has, so the client desides how big the lobby will be
ConVar mm_max_players( "mm_max_players", "32", FCVAR_REPLICATED, "Max players for matchmaking system" );
ConVar asw_sentry_friendly_fire_scale( "asw_sentry_friendly_fire_scale", "0", FCVAR_REPLICATED, "Damage scale for sentry gun friendly fire", UpdateMatchmakingTagsCallback );
ConVar asw_marine_ff_absorption( "asw_marine_ff_absorption", "1", FCVAR_REPLICATED, "Friendly fire absorption style (0=none 1=ramp up 2=ramp down)", UpdateMatchmakingTagsCallback );
ConVar asw_horde_override( "asw_horde_override", "0", FCVAR_REPLICATED, "Forces hordes to spawn", UpdateMatchmakingTagsCallback );
ConVar asw_wanderer_override( "asw_wanderer_override", "0", FCVAR_REPLICATED, "Forces wanderers to spawn", UpdateMatchmakingTagsCallback );
ConVar rd_challenge( "rd_challenge", "0", FCVAR_REPLICATED | FCVAR_DEMO, "Activates a challenge by ID", UpdateMatchmakingTagsCallback );
ConVar rd_challenge_changing( "rd_challenge_changing", "0", FCVAR_GAMEDLL | FCVAR_CHEAT | FCVAR_HIDDEN, "Internally used for diagnostics during challenge transitions" );
ConVar rd_lock_difficulty( "rd_lock_difficulty", "0", FCVAR_REPLICATED, "If 1, the lobby leader cannot change the difficulty level." );
ConVar rd_lock_onslaught( "rd_lock_onslaught", "0", FCVAR_REPLICATED, "If 1, the lobby leader cannot change the onslaught setting." );
ConVar rd_lock_hardcoreff( "rd_lock_hardcoreff", "0", FCVAR_REPLICATED, "If 1, the lobby leader cannot change the hardcore friendly fire setting." );
ConVar rd_lock_challenge( "rd_lock_challenge", "0", FCVAR_REPLICATED, "If 1, the lobby leader cannot change the challenge." );
ConVar rd_techreq( "rd_techreq", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "If 0 tech will be not required to start a mission. Mission will not restart if tech dies. 1 is default" );
ConVar rd_hackall( "rd_hackall", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 all marines can hack doors and computers" );
ConVar rd_weapons_show_hidden( "rd_weapons_show_hidden", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 will show the hidden weapons and extra items at briefing" );
ConVar rd_weapons_regular_class_unrestricted( "rd_weapons_regular_class_unrestricted", "-1", FCVAR_CHEAT | FCVAR_REPLICATED, "Space separated array of unrestricted class weapon IDs: 1 3 16. See asw_list_equipment. -2 value will un-restrict all regular weapons"
#ifdef GAME_DLL
, EnforceWeaponClassRestriction );
#else
);
#endif
ConVar rd_weapons_extra_class_unrestricted( "rd_weapons_extra_class_unrestricted", "-1", FCVAR_CHEAT | FCVAR_REPLICATED, "Space separated array of unrestricted class weapon IDs: 11 17. See asw_list_equipment. -2 value will un-restrict all extra weapons"
#ifdef GAME_DLL
, EnforceWeaponClassRestriction );
#else
);
#endif
ConVar rd_weapons_regular_allowed( "rd_weapons_regular_allowed", "-1", FCVAR_CHEAT | FCVAR_REPLICATED, "Space separated array of allowed weapon IDs: 0 6 9 15. See asw_list_equipment" );
ConVar rd_weapons_extra_allowed( "rd_weapons_extra_allowed", "-1", FCVAR_CHEAT | FCVAR_REPLICATED, "Space separated array of allowed extra items IDs: 1 2 7 12. See asw_list_equipment" );
ConVar rd_weapons_regular_allowed_inverted( "rd_weapons_regular_allowed_inverted", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 inverts the allowed weapons for rd_weapons_regular_allowed" );
ConVar rd_weapons_extra_allowed_inverted( "rd_weapons_extra_allowed_inverted", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 inverts the allowed weapons for rd_weapons_extra_allowed");
ConVar rd_weapon_requirement_override( "rd_weapon_requirement_override", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "0 = asw_equip_req wins, 1 = rd_weapons_<slot>_allowed wins"
#ifdef GAME_DLL
, EnforceWeaponSelectionRules );
#else
);
#endif
ConVar rd_carnage_scale( "rd_carnage_scale", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "the factor used to scale the amount of aliens in each drone spawner" );
ConVar rd_heavy_scale( "rd_heavy_scale", "1.0", FCVAR_CHEAT | FCVAR_REPLICATED, "the factor used to scale aliens' health" );
ConVar rd_alien_speed_scale( "rd_alien_speed_scale", "1.0", FCVAR_CHEAT | FCVAR_REPLICATED, "the factor used to scale aliens' speed" );
ConVar rd_refill_secondary( "rd_refill_secondary", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "0 = false, 1 = true. If true the secondary ammo is picked up too" );
ConVar rd_allow_revive( "rd_allow_revive", "0", FCVAR_CHEAT | FCVAR_REPLICATED );
ConVar rd_revive_duration( "rd_revive_duration", "2.0", FCVAR_CHEAT | FCVAR_REPLICATED, "How long it takes to revive an incapacitated marine" );
ConVar rd_revive_health( "rd_revive_health", "10", FCVAR_CHEAT | FCVAR_REPLICATED, "How much health a revived marine gets" );
ConVar rd_hp_regen( "rd_hp_regen", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "0 disable marines' health regeneration" );
ConVar rd_add_bots( "rd_add_bots", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "1 add bots to fill free slots, 0 don't add" );
ConVar rd_ammo_bonus( "rd_ammo_bonus", "0", FCVAR_CHEAT | FCVAR_REPLICATED );
ConVar asw_bonus_charges( "asw_bonus_charges", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "Bonus ammo given to starting equipment" );
ConVar rd_infinite_spawners( "rd_infinite_spawners", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 all spawners will be set to infinitely spawn aliens" );
ConVar rd_hud_hide_clips( "rd_hud_hide_clips", "0", FCVAR_CHEAT | FCVAR_REPLICATED );
ConVar rd_biomass_ignite_from_explosions( "rd_biomass_ignite_from_explosions", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1, biomass will ignite from blast damage" );
ConVar rd_spawn_medkits( "rd_spawn_medkits", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "Will spawn a med kit from 31st killed alien is set to 31" );
ConVar rd_spawn_ammo( "rd_spawn_ammo", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "Will spawn an ammo box from 51st killed alien if set to 51" );
ConVar rd_alien_num_min_players( "rd_alien_num_min_players", "4", FCVAR_REPLICATED | FCVAR_CHEAT, "with this many or fewer players, alien number scale will use the minimum value" );
ConVar rd_alien_num_max_players( "rd_alien_num_max_players", "8", FCVAR_REPLICATED | FCVAR_CHEAT, "with this many or more players, alien number scale will use the maximum value" );
ConVar rd_alien_num_min_scale( "rd_alien_num_min_scale", "1", FCVAR_REPLICATED | FCVAR_CHEAT, "the minimum alien number scale for co-op" );
ConVar rd_alien_num_max_scale( "rd_alien_num_max_scale", "2", FCVAR_REPLICATED | FCVAR_CHEAT, "the maximum alien number scale for co-op" );
// this cvar is used by client only, but, to support it in challenges we need to make it replicated and set it from server
ConVar rd_ray_trace_distance( "rd_ray_trace_distance", "3000", FCVAR_REPLICATED | FCVAR_CHEAT, "Increase this parameter for huge maps for grenade launcher to properly aim to far away distances" );
ConVar rd_leaderboard_enabled( "rd_leaderboard_enabled", "1", FCVAR_REPLICATED, "If 0 player leaderboard scores will not be updated on mission complete. Use this for modded servers." );
ConVar rd_aim_marines( "rd_aim_marines", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 marines can aim at marines that are on different Z level" );
ConVar rd_points_delay( "rd_points_delay", "1.5", FCVAR_REPLICATED, "Number of seconds after the score changes before it starts decaying.", true, 0, false, 0 );
ConVar rd_points_delay_max( "rd_points_delay_max", "5", FCVAR_REPLICATED, "Maximum number of seconds that the score can remain still without decaying.", true, 0, false, 0 );
ConVar rd_points_decay( "rd_points_decay", "0.97", FCVAR_REPLICATED, "Amount that score change decays by per tick.", true, 0, true, 0.999 );
ConVar rd_points_decay_tick( "rd_points_decay_tick", "0.01", FCVAR_REPLICATED, "Number of seconds between score decay ticks.", true, 0, false, 0 );
ConVar asw_marines_max( "asw_marines_max", "8", FCVAR_REPLICATED | FCVAR_CHEAT, "Maximum number of marines in a co-op mission" );
ConVar asw_marines_max_per_profile( "asw_marines_max_per_profile", "1", FCVAR_REPLICATED | FCVAR_CHEAT, "Number of copies of each marine to allow in co-op" );
ConVar asw_marines_max_by_class[NUM_MARINE_CLASSES]
{
{ "asw_marines_max_officer", "2", FCVAR_REPLICATED | FCVAR_CHEAT, "Maximum number of Officer-class marines in a co-op mission" },
{ "asw_marines_max_special_weapons", "2", FCVAR_REPLICATED | FCVAR_CHEAT, "Maximum number of Special Weapons-class marines in a co-op mission" },
{ "asw_marines_max_medic", "2", FCVAR_REPLICATED | FCVAR_CHEAT, "Maximum number of Medic-class marines in a co-op mission" },
{ "asw_marines_max_tech", "2", FCVAR_REPLICATED | FCVAR_CHEAT, "Maximum number of Tech-class marines in a co-op mission" },
};
ConVar _rd_traitors_challenge_enabled( "_rd_traitors_challenge_enabled", "0", FCVAR_REPLICATED | FCVAR_CHEAT | FCVAR_DEVELOPMENTONLY, "An internal convar to indicate whether the traitors challenge is enabled or not. This is used to determine whether the traitor emotes should be shown or not." );
#ifdef CLIENT_DLL
ConVar rd_skip_all_dialogue( "rd_skip_all_dialogue", "0", FCVAR_ARCHIVE | FCVAR_USERINFO, "Tell the server not to send audio from asw_voiceover_dialogue." );
ConVar rd_write_config_on_mission_start( "rd_write_config_on_mission_start", "1", FCVAR_ARCHIVE, "Update config.cfg when entering the in-game mission state. Useful for saving loadouts." );
#endif
// ASW Weapons
// Rifle (5 clips, 98 per)
ConVar sk_plr_dmg_asw_r( "sk_plr_dmg_asw_r", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_r( "sk_npc_dmg_asw_r", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_r( "sk_max_asw_r", "490", FCVAR_REPLICATED | FCVAR_CHEAT );
// Rifle Grenade (5 def 8 max)
ConVar sk_plr_dmg_asw_r_g( "sk_plr_dmg_asw_r_g", "100", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_r_g( "sk_npc_dmg_asw_r_g", "100", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_r_g( "sk_max_asw_r_g", "8", FCVAR_REPLICATED | FCVAR_CHEAT );
// Autogun (1 clip max on this)
ConVar sk_plr_dmg_asw_ag( "sk_plr_dmg_asw_ag", "9", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_ag( "sk_npc_dmg_asw_ag", "9", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_ag( "sk_max_asw_ag", "250", FCVAR_REPLICATED | FCVAR_CHEAT );
// Shotgun (12 clips, 4 per)
ConVar sk_plr_dmg_asw_sg( "sk_plr_dmg_asw_sg", "10", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_sg( "sk_npc_dmg_asw_sg", "10", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_sg( "sk_max_asw_sg", "48", FCVAR_REPLICATED | FCVAR_CHEAT );
// Shotgun (secondary)
ConVar sk_plr_dmg_asw_sg_g( "sk_plr_dmg_asw_sg_g", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_sg_g( "sk_npc_dmg_asw_sg_g", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_sg_g( "sk_max_asw_sg_g", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Vindicator (5 clips, 14 per)
ConVar sk_plr_dmg_asw_asg( "sk_plr_dmg_asw_asg", "10", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_asg( "sk_npc_dmg_asw_asg", "10", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_asg( "sk_max_asw_asg", "70", FCVAR_REPLICATED | FCVAR_CHEAT );
// Flamer (5 clips, 80 per)
ConVar sk_plr_dmg_asw_f( "sk_plr_dmg_asw_f", "5", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_f( "sk_npc_dmg_asw_f", "5", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_f( "sk_max_asw_f", "400", FCVAR_REPLICATED | FCVAR_CHEAT );
// Pistol (10 clips, 32 per)
ConVar sk_plr_dmg_asw_p( "sk_plr_dmg_asw_p", "22", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_p( "sk_npc_dmg_asw_p", "22", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_p( "sk_max_asw_p", "240", FCVAR_REPLICATED | FCVAR_CHEAT );
// Mining laser
ConVar sk_plr_dmg_asw_ml( "sk_plr_dmg_asw_ml", "50", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_ml( "sk_npc_dmg_asw_ml", "50", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_ml( "sk_max_asw_ml", "250", FCVAR_REPLICATED | FCVAR_CHEAT );
// Tesla CANNON
ConVar sk_plr_dmg_asw_tg( "sk_plr_dmg_asw_tg", "50", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_tg( "sk_npc_dmg_asw_tg", "50", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_tg( "sk_max_asw_tg", "260", FCVAR_REPLICATED | FCVAR_CHEAT );
// Chainsaw
ConVar sk_plr_dmg_asw_cs( "sk_plr_dmg_asw_cs", "8", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_cs( "sk_npc_dmg_asw_cs", "8", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_cs( "sk_max_asw_cs", "1111", FCVAR_REPLICATED | FCVAR_CHEAT );
// Railgun
ConVar sk_plr_dmg_asw_rg( "sk_plr_dmg_asw_rg", "45", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_rg( "sk_npc_dmg_asw_rg", "45", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_rg( "sk_max_asw_rg", "72", FCVAR_REPLICATED | FCVAR_CHEAT );
// Flares
ConVar sk_plr_dmg_asw_flares( "sk_plr_dmg_asw_flares", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_flares( "sk_npc_dmg_asw_flares", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_flares( "sk_max_asw_flares", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Medkit
ConVar sk_plr_dmg_asw_medkit( "sk_plr_dmg_asw_medkit", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_medkit( "sk_npc_dmg_asw_medkit", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_medkit( "sk_max_asw_medkit", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Med Satchel
ConVar sk_plr_dmg_asw_medsat( "sk_plr_dmg_asw_medsat", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_medsat( "sk_npc_dmg_asw_medsat", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_medsat( "sk_max_asw_medsat", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Med Satchel self heal secondary fire
ConVar sk_plr_dmg_asw_medself( "sk_plr_dmg_asw_medself", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_medself( "sk_npc_dmg_asw_medself", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_medself( "sk_max_asw_medself", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Med Stim
ConVar sk_plr_dmg_asw_stim( "sk_plr_dmg_asw_stim", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_stim( "sk_npc_dmg_asw_stim", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_stim( "sk_max_asw_stim", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Welder
ConVar sk_plr_dmg_asw_welder( "sk_plr_dmg_asw_welder", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_welder( "sk_npc_dmg_asw_welder", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_welder( "sk_max_asw_welder", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Extinguisher
ConVar sk_plr_dmg_asw_ext( "sk_plr_dmg_asw_ext", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_ext( "sk_npc_dmg_asw_ext", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_ext( "sk_max_asw_ext", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Mines
ConVar sk_plr_dmg_asw_mines( "sk_plr_dmg_asw_mines", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_mines( "sk_npc_dmg_asw_mines", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_mines( "sk_max_asw_mines", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// PDW (6 clips, 80 per)
ConVar sk_plr_dmg_asw_pdw( "sk_plr_dmg_asw_pdw", "4", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_pdw( "sk_npc_dmg_asw_pdw", "4", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_pdw( "sk_max_asw_pdw", "480", FCVAR_REPLICATED | FCVAR_CHEAT );
// Hand Grenades
ConVar sk_npc_dmg_asw_hg( "sk_npc_dmg_asw_hg", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_hg( "sk_max_asw_hg", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Grenade launcher
ConVar sk_npc_dmg_asw_gl( "sk_npc_dmg_asw_gl", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_gl( "sk_max_asw_gl", "18", FCVAR_REPLICATED | FCVAR_CHEAT );
// Sniper Rifle
ConVar sk_npc_dmg_asw_sniper( "sk_npc_dmg_asw_sniper", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_sniper( "sk_max_asw_sniper", "60", FCVAR_REPLICATED | FCVAR_CHEAT );
// Bulldog (9 clips, 7 per)
ConVar sk_plr_dmg_asw_deagle( "sk_plr_dmg_asw_deagle", "75", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_deagle( "sk_npc_dmg_asw_deagle", "75", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_deagle( "sk_max_asw_deagle", "63", FCVAR_REPLICATED | FCVAR_CHEAT );
// Devastator Automated Heavy Shotgun (1 clip, 70 per)
ConVar sk_plr_dmg_asw_devastator( "sk_plr_dmg_asw_devastator", "10", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_devastator( "sk_npc_dmg_asw_devastator", "10", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_devastator( "sk_max_asw_devastator", "70", FCVAR_REPLICATED | FCVAR_CHEAT );
// 50 Cal Machine Gun
ConVar sk_plr_dmg_asw_50calmg( "sk_plr_dmg_asw_50calmg", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_50calmg( "sk_npc_dmg_asw_50calmg", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_50calmg( "sk_max_asw_50calmg", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Gas_Grenades
ConVar sk_plr_dmg_asw_gas_grenades( "sk_plr_dmg_asw_gas_grenades", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_gas_grenades( "sk_npc_dmg_asw_gas_grenades", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_gas_grenades( "sk_max_asw_gas_grenades", "0", FCVAR_REPLICATED | FCVAR_CHEAT );
// Heavy Rifle
ConVar sk_plr_dmg_asw_hr( "sk_plr_dmg_asw_hr", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_hr( "sk_npc_dmg_asw_hr", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_hr( "sk_max_asw_hr", "490", FCVAR_REPLICATED | FCVAR_CHEAT );
// Heavy Rifle (secondary)
ConVar sk_plr_dmg_asw_hr_g( "sk_plr_dmg_asw_hr_g", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_hr_g( "sk_npc_dmg_asw_hr_g", "1", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_hr_g( "sk_max_asw_hr_g", "5", FCVAR_REPLICATED | FCVAR_CHEAT );
// Med Rifle (7 clips, 72 per)
ConVar sk_plr_dmg_asw_medrifle( "sk_plr_dmg_asw_medrifle", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_medrifle( "sk_npc_dmg_asw_medrifle", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_medrifle( "sk_max_asw_medrifle", "504", FCVAR_REPLICATED | FCVAR_CHEAT );
// AR2 (6 clips, 30 per)
ConVar sk_plr_dmg_ar2( "sk_plr_dmg_ar2", "15", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_ar2( "sk_npc_dmg_ar2", "5", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_ar2( "sk_max_ar2", "180", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_ar2_altfire( "sk_max_ar2_altfire", "3", FCVAR_REPLICATED | FCVAR_CHEAT );
// Flechette Launcher (7 clips, 60 per)
ConVar sk_plr_dmg_asw_flechette( "sk_plr_dmg_asw_flechette", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_flechette( "sk_npc_dmg_asw_flechette", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_flechette( "sk_max_asw_flechette", "420", FCVAR_REPLICATED | FCVAR_CHEAT );
// Cryo Cannon (7 clips, 50 per)
ConVar sk_plr_dmg_asw_cryo( "sk_plr_dmg_asw_cryo", "2", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_cryo( "sk_npc_dmg_asw_cryo", "2", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_cryo( "sk_max_asw_cryo", "300", FCVAR_REPLICATED | FCVAR_CHEAT );
// Plasma Thrower (3 clips, 200 per)
ConVar sk_plr_dmg_asw_plasma( "sk_plr_dmg_asw_plasma", "2", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_plasma( "sk_npc_dmg_asw_plasma", "2", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_plasma( "sk_max_asw_plasma", "400", FCVAR_REPLICATED | FCVAR_CHEAT );
// Energy Shield alt fire (5 default 8 max)
ConVar sk_plr_dmg_asw_eshield( "sk_plr_dmg_asw_eshield", "10", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_eshield( "sk_npc_dmg_asw_eshield", "10", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_eshield( "sk_max_asw_eshield", "8", FCVAR_REPLICATED | FCVAR_CHEAT );
// Burst Rifle (5 clips, 99 per)
ConVar sk_plr_dmg_asw_r_burst( "sk_plr_dmg_asw_r_burst", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_npc_dmg_asw_r_burst( "sk_npc_dmg_asw_r_burst", "7", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_max_asw_r_burst( "sk_max_asw_r_burst", "495", FCVAR_REPLICATED | FCVAR_CHEAT );
ConVar sk_asw_parasite_infest_dmg_easy( "sk_asw_parasite_infest_dmg_easy", "175", FCVAR_REPLICATED | FCVAR_CHEAT, "Total damage from parasite infestation" );
ConVar sk_asw_parasite_infest_dmg_normal( "sk_asw_parasite_infest_dmg_normal", "225", FCVAR_REPLICATED | FCVAR_CHEAT, "Total damage from parasite infestation" );
ConVar sk_asw_parasite_infest_dmg_hard( "sk_asw_parasite_infest_dmg_hard", "270", FCVAR_REPLICATED | FCVAR_CHEAT, "Total damage from parasite infestation" );
ConVar sk_asw_parasite_infest_dmg_insane( "sk_asw_parasite_infest_dmg_insane", "280", FCVAR_REPLICATED | FCVAR_CHEAT, "Total damage from parasite infestation" );
ConVar sk_asw_parasite_infest_dmg_brutal( "sk_asw_parasite_infest_dmg_brutal", "280", FCVAR_REPLICATED | FCVAR_CHEAT, "Total damage from parasite infestation" );
// reactivedrop: adding these weapon damage overrides for PvP
ConVar rd_shotgun_dmg_base("rd_shotgun_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of shotgun", true, 0, false, 0);
ConVar rd_rifle_dmg_base("rd_rifle_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of rifle", true, 0, false, 0);
ConVar rd_prifle_dmg_base("rd_prifle_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of prototype rifle", true, 0, false, 0);
ConVar rd_autogun_dmg_base("rd_autogun_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of shotgun", true, 0, false, 0);
ConVar rd_vindicator_dmg_base("rd_vindicator_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of vindicator", true, 0, false, 0);
ConVar rd_pistol_dmg_base("rd_pistol_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of twin pistols", true, 0, false, 0);
ConVar rd_railgun_dmg_base("rd_railgun_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of railgun", true, 0, false, 0);
ConVar rd_pdw_dmg_base("rd_pdw_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of PDW", true, 0, false, 0);
ConVar rd_flamer_dmg_base("rd_flamer_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of flamer", true, 0, false, 0);
ConVar rd_minigun_dmg_base("rd_minigun_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of minigun", true, 0, false, 0);
ConVar rd_sniper_dmg_base("rd_sniper_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of sniper rifle", true, 0, false, 0);
ConVar rd_chainsaw_dmg_base("rd_chainsaw_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of chainsaw", true, 0, false, 0);
ConVar rd_grenade_launcher_dmg_base("rd_grenade_launcher_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of grenade launcher", true, 0, false, 0);
ConVar rd_mininglaser_dmg_base("rd_mininglaser_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of mining laser", true, 0, false, 0);
ConVar rd_deagle_dmg_base("rd_deagle_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of deagle", true, 0, false, 0);
ConVar rd_devastator_dmg_base("rd_devastator_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of devastator", true, 0, false, 0);
ConVar rd_combat_rifle_dmg_base("rd_combat_rifle_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of combat rifle", true, 0, false, 0);
ConVar rd_heavy_rifle_dmg_base("rd_heavy_rifle_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of heavy rifle", true, 0, false, 0);
ConVar rd_medrifle_dmg_base("rd_medrifle_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of medical rifle", true, 0, false, 0);
ConVar rd_grenades_dmg_base( "rd_grenades_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of hand grenades", true, 0, false, 0);
ConVar rd_ar2_dmg_base( "rd_ar2_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of AR2", true, 0, false, 0 );
ConVar rd_shield_rifle_dmg_base( "rd_shield_rifle_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of shield rifle", true, 0, false, 0 );
ConVar rd_cryo_cannon_dmg_base( "rd_cryo_cannon_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of cryo cannon", true, 0, false, 0 );
ConVar rd_plasma_thrower_dmg_base( "rd_plasma_thrower_dmg_base", "0", FCVAR_REPLICATED | FCVAR_CHEAT, "Base damage of plasma thrower", true, 0, false, 0 );
ConVar asw_flare_autoaim_radius("asw_flare_autoaim_radius", "250", FCVAR_REPLICATED | FCVAR_CHEAT, "Radius of autoaim effect from flares");
ConVar asw_vote_kick_fraction("asw_vote_kick_fraction", "0.6", FCVAR_REPLICATED, "Fraction of players needed to activate a kick vote");
ConVar asw_vote_leader_fraction("asw_vote_leader_fraction", "0.6", FCVAR_REPLICATED, "Fraction of players needed to activate a leader vote");
ConVar asw_vote_map_fraction("asw_vote_map_fraction", "0.6", FCVAR_REPLICATED, "Fraction of players needed to activate a map vote");
ConVar asw_marine_collision("asw_marine_collision", "0", FCVAR_REPLICATED, "Whether marines collide with each other or not, in a multiplayer game");
ConVar asw_skill( "asw_skill","2", FCVAR_REPLICATED, "Game skill level (1-5).", true, 1, true, 5 );
ConVar asw_money( "asw_money", "0", FCVAR_REPLICATED, "Can players collect money?" );
ConVar asw_client_build_maps( "asw_client_build_maps", "0", FCVAR_REPLICATED, "Whether clients compile random maps rather than getting sent them" );
ConVar rd_deathmatch_ending_time( "rd_deathmatch_ending_time", "10.0", FCVAR_REPLICATED, "Period of time after which the round ends after somebody has won" );
ConVar rd_jumpjet_knockdown_marines( "rd_jumpjet_knockdown_marines", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "If 1 Jump Jet knock down marines" );
ConVar rd_default_weapon( "rd_default_weapon", "0", FCVAR_CHEAT | FCVAR_REPLICATED, "Index of the weapon that is given to marine after he spawns" );
ConVar asw_player_avoidance( "asw_player_avoidance", "1", FCVAR_CHEAT | FCVAR_REPLICATED, "Enable/Disable player avoidance." );
#ifdef GAME_DLL
static void UpdateGameRulesOverrideAllowRotateCamera( IConVar *var, const char *pOldValue, float flOldValue );
ConVar rd_override_allow_rotate_camera( "rd_override_allow_rotate_camera", "-1", FCVAR_NONE, "-1(default)-uses asw_gamerules setting, 0-disable rotation, 1-enable rotation", true, -1, true, 1, &UpdateGameRulesOverrideAllowRotateCamera );
static void UpdateGameRulesOverrideAllowRotateCamera( IConVar *var, const char *pOldValue, float flOldValue )
{
CAlienSwarm *pASW = ASWGameRules();
if ( pASW )
{
pASW->m_iOverrideAllowRotateCamera = rd_override_allow_rotate_camera.GetInt();
}
}
#endif
ConVar rd_player_bots_allowed( "rd_player_bots_allowed", "1", FCVAR_REPLICATED, "If 0 will prevent players from adding bots"
#ifdef GAME_DLL
, DeselectMarineBots );
#else
);
#endif
#ifdef GAME_DLL
ConVar rd_slowmo( "rd_slowmo", "1", FCVAR_NONE, "If 0 env_slomo will be deleted from map on round start(if present)" );
#endif
ConVar rd_queen_hud_suppress_time( "rd_queen_hud_suppress_time", "-1.0", FCVAR_CHEAT | FCVAR_REPLICATED, "Hides the Swarm Queen's health HUD if not damaged for this long (-1 to always show)" );
ConVar rd_anniversary_week_debug( "rd_anniversary_week_debug", "-1", FCVAR_CHEAT | FCVAR_REPLICATED, "Set to 1 to force anniversary week logic (requires sv_cheats); 0 to force off" );
static void SoundPitchScaleChanged( IConVar *var, const char *pOldValue, float flOldValue )
{
#ifdef CLIENT_DLL
ConVarRef cv( var );
if ( engine && engine->IsConnected() )
{
// if we're in slomo, this will cause a tiny anomaly in the pitch which will get corrected by the local player's ClientThink.
engine->SetPitchScale( cv.GetFloat() );
}
#endif
}
ConVar rd_sound_pitch_scale( "rd_sound_pitch_scale", "1.0", FCVAR_CHEAT | FCVAR_REPLICATED, "Global audio pitch modifier.", SoundPitchScaleChanged );
extern ConVar asw_stats_verbose;
#define ADD_STAT( field, amount ) \
if ( asw_stats_verbose.GetBool() ) \
{ \
DevMsg( "marine %d (%s %d+%d)\n", ASWGameResource()->GetMarineResourceIndex( pMR ), #field, pMR->field, amount ); \
} \
pMR->field += amount;
REGISTER_GAMERULES_CLASS( CAlienSwarm );
BEGIN_NETWORK_TABLE_NOBASE( CAlienSwarm, DT_ASWGameRules )
#ifdef CLIENT_DLL
RecvPropInt(RECVINFO(m_iGameState)),
RecvPropBool(RECVINFO(m_bMissionSuccess)),
RecvPropBool(RECVINFO(m_bMissionFailed)),
RecvPropInt(RECVINFO(m_nFailAdvice)),
RecvPropInt(RECVINFO(m_iMissionDifficulty) ),
RecvPropInt(RECVINFO(m_iSkillLevel) ),
RecvPropInt(RECVINFO(m_iOutstandingExecutionStatus)),
RecvPropBool(RECVINFO(m_bVoteStartedIngame) ),
RecvPropInt(RECVINFO(m_iCurrentVoteYes) ),
RecvPropInt(RECVINFO(m_iCurrentVoteNo) ),
RecvPropInt(RECVINFO(m_iCurrentVoteType) ),
RecvPropString(RECVINFO(m_szCurrentVoteDescription) ),
RecvPropString(RECVINFO(m_szCurrentVoteMapName) ),
RecvPropString(RECVINFO(m_szCurrentVoteCampaignName) ),
RecvPropFloat(RECVINFO(m_fVoteEndTime)),
RecvPropFloat(RECVINFO(m_fBriefingStartedTime) ),
RecvPropBool(RECVINFO(m_bMissionRequiresTech)),
RecvPropBool(RECVINFO(m_bCheated)),
RecvPropEHandle(RECVINFO(m_hStartStimPlayer)),
RecvPropFloat(RECVINFO(m_flStimEndTime)),
RecvPropFloat(RECVINFO(m_flStimStartTime)),
RecvPropFloat(RECVINFO(m_flRestartingMissionTime)),
RecvPropFloat(RECVINFO(m_fPreventStimMusicTime)),
RecvPropBool(RECVINFO(m_bForceStylinCam)),
RecvPropBool(RECVINFO(m_bShowCommanderFace)),
RecvPropEHandle(RECVINFO(m_hCurrentStylinCam)),
RecvPropFloat(RECVINFO(m_fMarineDeathTime)),
RecvPropVector(RECVINFO(m_vMarineDeathPos)),
RecvPropInt(RECVINFO(m_nMarineForDeathCam)),
RecvPropFloat(RECVINFO(m_fMissionStartedTime)),
RecvPropInt(RECVINFO(m_iMissionWorkshopID)),
RecvPropBool(RECVINFO(m_bDeathCamSlowdown)),
RecvPropInt(RECVINFO(m_iOverrideAllowRotateCamera)),
RecvPropString(RECVINFO(m_szApproximatePingLocation)),
RecvPropInt(RECVINFO(m_iCosmeticRandomSeed)),
RecvPropInt( RECVINFO( m_iCosmeticFlags ) ),
RecvPropString(RECVINFO(m_szBriefingVideo)),
RecvPropEHandle(RECVINFO(m_hBriefingCamera)),
RecvPropString( RECVINFO( m_szDeathmatchWinnerName ) ),
RecvPropString( RECVINFO( m_szCycleNextMap ) ),
RecvPropString( RECVINFO( m_szStatsMusicOverride ) ),
RecvPropArray3( RECVINFO_ARRAY( m_iKickVotes ), RecvPropInt( RECVINFO( m_iKickVotes[0] ) ) ),
RecvPropArray3( RECVINFO_ARRAY( m_iLeaderVotes ), RecvPropInt( RECVINFO( m_iLeaderVotes[0] ) ) ),
RecvPropInt( RECVINFO( m_iServerTypeFlags ) ),
RecvPropInt( RECVINFO( m_iServerVersion ) ),
#else
SendPropInt(SENDINFO(m_iGameState), 8, SPROP_UNSIGNED ),
SendPropBool(SENDINFO(m_bMissionSuccess)),
SendPropBool(SENDINFO(m_bMissionFailed)),
SendPropInt(SENDINFO(m_nFailAdvice)),
SendPropInt(SENDINFO(m_iMissionDifficulty) ),
SendPropInt(SENDINFO(m_iSkillLevel) ),
SendPropInt(SENDINFO(m_iOutstandingExecutionStatus) ),
SendPropInt(SENDINFO(m_bVoteStartedIngame) ),