-
-
Notifications
You must be signed in to change notification settings - Fork 444
/
Copy pathuplink_items.dm
3596 lines (3125 loc) · 157 KB
/
uplink_items.dm
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
GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/proc/get_uplink_items(antagonist = null, allow_sales = TRUE, allow_restricted = TRUE, uplink_type = "Uplink")
var/list/filtered_uplink_items = list()
var/list/sale_items = list()
for(var/path in GLOB.uplink_items)
var/datum/uplink_item/I = new path
if(!I.item)
continue
if(I.include_uplinks.len && !(uplink_type in I.include_uplinks))
continue
if(antagonist)
if(I.include_antags.len)
if(!(antagonist in I.include_antags))
continue
if(I.exclude_antags.len)
if(antagonist in I.exclude_antags)
continue
if(I.player_minimum && I.player_minimum > GLOB.joined_player_list.len)
continue
if (I.restricted && !allow_restricted)
continue
if(!filtered_uplink_items[I.category])
filtered_uplink_items[I.category] = list()
filtered_uplink_items[I.category][I.name] = I
if(I.limited_stock < 0 && !I.cant_discount && I.item && I.cost > 1)
sale_items += I
if(allow_sales)
var/datum/team/nuclear/nuclear_team
if (antagonist == ROLE_OPERATIVE) // uplink code kind of needs a redesign
nuclear_team = locate() in GLOB.antagonist_teams // the team discounts could be a in a GLOB with this design but it would make sense for them to be team specific...
if (!nuclear_team)
create_uplink_sales(3, "Discounted Gear", 1, sale_items, filtered_uplink_items)
else
if (!nuclear_team.team_discounts)
// create 5 unlimited stock discounts
create_uplink_sales(5, "Discounted Team Gear", -1, sale_items, filtered_uplink_items)
// Create 10 limited stock discounts
create_uplink_sales(10, "Limited Stock Team Gear", 1, sale_items, filtered_uplink_items)
nuclear_team.team_discounts = list("Discounted Team Gear" = filtered_uplink_items["Discounted Team Gear"], "Limited Stock Team Gear" = filtered_uplink_items["Limited Stock Team Gear"])
else
for(var/cat in nuclear_team.team_discounts)
for(var/item in nuclear_team.team_discounts[cat])
var/datum/uplink_item/D = nuclear_team.team_discounts[cat][item]
var/datum/uplink_item/O = filtered_uplink_items[initial(D.category)][initial(D.name)]
O.refundable = FALSE
filtered_uplink_items["Discounted Team Gear"] = nuclear_team.team_discounts["Discounted Team Gear"]
filtered_uplink_items["Limited Stock Team Gear"] = nuclear_team.team_discounts["Limited Stock Team Gear"]
return filtered_uplink_items
/proc/create_uplink_sales(num, category_name, limited_stock, sale_items, uplink_items)
if (num <= 0)
return
if(!uplink_items[category_name])
uplink_items[category_name] = list()
for (var/i in 1 to num)
var/datum/uplink_item/I = pick_n_take(sale_items)
var/datum/uplink_item/A = new I.type
var/discount = A.get_discount()
var/list/disclaimer = list("Void where prohibited.", "Not recommended for children.", "Contains small parts.", "Check local laws for legality in region.", "Do not taunt.", "Not responsible for direct, indirect, incidental or consequential damages resulting from any defect, error or failure to perform.", "Keep away from fire or flames.", "Product is provided \"as is\" without any implied or expressed warranties.", "As seen on TV.", "For recreational use only.", "Use only as directed.", "16% sales tax will be charged for orders originating within Space Nebraska.")
A.limited_stock = limited_stock
if(A.cost >= 20) //Tough love for nuke ops
discount *= 0.5
A.category = category_name
A.cost = max(round(A.cost * discount),1)
A.name += " ([round(((initial(A.cost)-A.cost)/initial(A.cost))*100)]% off!)"
A.desc += " Normally costs [initial(A.cost)] TC. All sales final. [pick(disclaimer)]"
A.item = I.item
uplink_items[category_name][A.name] = A
/**
* Uplink Items
*
* Items that can be spawned from an uplink. Can be limited by gamemode.
**/
/datum/uplink_item
var/name = "item name"
var/category = "item category"
var/desc = "item description"
var/item = null // Path to the item to spawn.
var/refund_path = null // Alternative path for refunds, in case the item purchased isn't what is actually refunded (ie: holoparasites).
var/cost = 0
var/refund_amount = 0 // specified refund amount in case there needs to be a TC penalty for refunds.
var/refundable = FALSE
var/surplus = 100 // Chance of being included in the surplus crate.
var/cant_discount = FALSE
var/limited_stock = -1 //Setting this above zero limits how many times this item can be bought by the same traitor in a round, -1 is unlimited
var/list/include_uplinks = list("Uplink") // Uplink types this is in
var/list/include_antags = list() // Game modes to allow this item in.
var/list/exclude_antags = list() // Game modes to disallow this item from.
var/list/restricted_roles = list() //If this uplink item is only available to certain roles. Roles are dependent on the frequency chip or stored ID.
var/player_minimum //The minimum crew size needed for this item to be added to uplinks.
var/purchase_log_vis = TRUE // Visible in the purchase log?
var/restricted = FALSE // Adds restrictions for VR/Events
var/list/restricted_species //Limits items to a specific species. Hopefully.
var/illegal_tech = TRUE // Can this item be deconstructed to unlock certain techweb research nodes?
/// the manufacturer of the item. Gives up to a 20% discount if you're from that corporation
var/datum/corporation/manufacturer
/datum/uplink_item/proc/get_discount()
return pick(4;0.75,2;0.5,1;0.25)
/datum/uplink_item/proc/purchase(mob/user, datum/component/uplink/U)
var/atom/A = spawn_item(item, user, U)
if(refundable)
var/refund = cost
if(manufacturer && user.mind.is_employee(manufacturer))
refund = CEILING(cost*0.8, 1)
A.AddComponent(/datum/component/refundable, user.mind, refund)
if(purchase_log_vis && U.purchase_log)
U.purchase_log.LogPurchase(A, src, cost)
/datum/uplink_item/proc/spawn_item(spawn_path, mob/user, datum/component/uplink/U)
if(!spawn_path)
return
var/atom/A
if(ispath(spawn_path))
A = new spawn_path(get_turf(user))
else
A = spawn_path
if(ishuman(user) && istype(A, /obj/item))
var/mob/living/carbon/human/H = user
if(H.put_in_hands(A))
to_chat(H, "[A] materializes into your hands!")
return A
to_chat(user, "[A] materializes onto the floor.")
return A
//Discounts (dynamically filled above)
/datum/uplink_item/discounts
category = UPLINK_CATEGORY_DISCOUNTS
//All bundles and telecrystals
/datum/uplink_item/bundles_TC
category = UPLINK_CATEGORY_BUNDLES
surplus = 0
cant_discount = TRUE
/datum/uplink_item/bundles_TC/chemical
name = "Bioterror bundle"
desc = "For the madman: Contains a handheld Bioterror chem sprayer, a Bioterror foam grenade, a box of lethal chemicals, a dart pistol, \
box of syringes, Donksoft assault rifle, and some riot darts. Remember: Seal suit and equip internals before use."
item = /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
cost = 30 // normally 42
manufacturer = /datum/corporation/traitor/donkco
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/bundles_TC/bulldog
name = "Bulldog bundle"
desc = "Lean and mean: Optimized for people that want to get up close and personal. Contains the popular \
Bulldog shotgun, two 12g buckshot drums, and a pair of Thermal imaging goggles."
item = /obj/item/storage/backpack/duffelbag/syndie/bulldogbundle
cost = 13 // normally 16
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/bundles_TC/c20r
name = "C-20r bundle"
desc = "Old Faithful: The classic C-20r, bundled with two magazines and a (surplus) suppressor at discount price."
item = /obj/item/storage/backpack/duffelbag/syndie/c20rbundle
cost = 14 // normally 16
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/bundles_TC/cyber_implants
name = "Cybernetic Implants Bundle"
desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. Comes with an autosurgeon."
item = /obj/item/storage/box/cyber_implants
cost = 40
manufacturer = /datum/corporation/traitor/cybersun
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/bundles_TC/medical
name = "Medical bundle"
desc = "The support specialist: Aid your fellow operatives with this medical bundle. Contains a tactical medkit, \
a Donksoft LMG, a box of riot darts and a pair of magboots to rescue your friends in no-gravity environments."
item = /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
cost = 15 // normally 20
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/bundles_TC/sniper
name = "Sniper bundle"
desc = "Elegant and refined: Contains a collapsed sniper rifle in an expensive carrying case, \
two soporific knockout magazines, a free surplus suppressor, and a sharp-looking tactical turtleneck suit. \
We'll throw in a free red tie if you order NOW."
item = /obj/item/storage/briefcase/sniperbundle
cost = 20 // normally 26
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/bundles_TC/firestarter
name = "Spetsnaz Pyro bundle"
desc = "For systematic suppression of carbon lifeforms in close quarters: Contains a lethal New Russian backpack spray, Elite hardsuit, \
Stechkin APS pistol, two magazines, a minibomb and a stimulant syringe. \
Order NOW and comrade Boris will throw in an extra tracksuit."
item = /obj/item/storage/backpack/duffelbag/syndie/firestarter
cost = 30
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/bundles_TC/contract_kit
name = "Contract Kit"
desc = "The Syndicate have offered you the chance to become a contractor, take on kidnapping contracts for TC and cash payouts. Upon purchase, \
you'll be granted your own contract uplink embedded within the supplied tablet computer. Additionally, you'll be granted \
standard contractor gear to help with your mission - comes supplied with the tablet, specialised space suit, chameleon jumpsuit and mask, \
agent card, specialised contractor baton, and three randomly selected low cost items. Can include otherwise unobtainable items."
item = /obj/item/storage/box/syndicate/contract_kit
cost = 20
player_minimum = 20
exclude_antags = list(ROLE_OPERATIVE, ROLE_CLOWNOP, ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/bundles_TC/contract_kit/spawn_item(spawn_path, mob/user, datum/component/uplink/U)
if(is_species(user, /datum/species/plasmaman))
spawn_path = /obj/item/storage/box/syndicate/contract_kit/plasmaman
..()
/datum/uplink_item/bundles_TC/bundle_A
name = "Syndi-kit Tactical"
desc = "Syndicate Bundles, also known as Syndi-Kits, are specialized groups of items that arrive in a plain box. \
These items are collectively worth more than 20 telecrystals, but you do not know which specialization \
you will receive. May contain discontinued and/or exotic items."
item = /obj/item/storage/box/syndicate/bundle_A
cost = 20 //These are 20 TC for a reason; sacrifice modularity for a pre-determined kit that will define your strategy
exclude_antags = list(ROLE_OPERATIVE, ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/bundles_TC/bundle_B
name = "Syndi-kit Special"
desc = "Syndicate Bundles, also known as Syndi-Kits, are specialized groups of items that arrive in a plain box. \
In Syndi-kit Special, you will receive items used by famous Syndicate agents of the past. Collectively worth more than 20 telecrystals, the Syndicate loves a good throwback."
item = /obj/item/storage/box/syndicate/bundle_B
cost = 20 //See above
exclude_antags = list(ROLE_OPERATIVE, ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/bundles_TC/surplus
name = "Syndicate Surplus Crate"
desc = "A dusty crate from the back of the Syndicate warehouse. Rumored to contain a valuable assortment of items, \
but you never know. Contents are sorted to always be worth 50 TC."
item = /obj/structure/closet/crate
cost = 20
player_minimum = 25
exclude_antags = list(ROLE_OPERATIVE, ROLE_CLOWNOP, ROLE_INFILTRATOR) // yogs: infiltration
var/starting_crate_value = 50
/datum/uplink_item/bundles_TC/surplus/super
name = "Super Surplus Crate"
desc = "A dusty SUPER-SIZED from the back of the Syndicate warehouse. Rumored to contain a valuable assortment of items, \
but you never know. Contents are sorted to always be worth 125 TC."
cost = 40
player_minimum = 40
starting_crate_value = 125
/datum/uplink_item/bundles_TC/surplus/spawn_item(spawn_path, mob/user, datum/component/uplink/U)
. = ..()
var/obj/structure/closet/crate/spawned_crate = .
var/list/uplink_items = get_uplink_items(null, FALSE)
var/crate_value = starting_crate_value
while(crate_value)
var/category = pick(uplink_items)
var/item = pick(uplink_items[category])
var/datum/uplink_item/I = uplink_items[category][item]
if(!I.surplus || prob(100 - I.surplus))
continue
if(crate_value < I.cost)
continue
crate_value -= I.cost
var/obj/goods = new I.item(spawned_crate)
if(U.purchase_log)
U.purchase_log.LogPurchase(goods, I, 0)
return spawned_crate
/datum/uplink_item/bundles_TC/random
name = "Random Item"
desc = "Picking this will purchase a random item. Useful if you have some TC to spare or if you haven't decided on a strategy yet."
item = /obj/item/stack/sheet/cardboard
cost = 0
illegal_tech = FALSE
/datum/uplink_item/bundles_TC/random/purchase(mob/user, datum/component/uplink/U)
var/list/uplink_items = U.uplink_items
var/list/possible_items = list()
for(var/category in uplink_items)
for(var/item in uplink_items[category])
var/datum/uplink_item/I = uplink_items[category][item]
if(src == I || !I.item)
continue
if(U.telecrystals < I.cost)
continue
if(I.limited_stock == 0)
continue
possible_items += I
if(possible_items.len)
var/datum/uplink_item/I = pick(possible_items)
SSblackbox.record_feedback("tally", "traitor_random_uplink_items_gotten", 1, initial(I.name))
U.MakePurchase(user, I)
/datum/uplink_item/bundles_TC/telecrystal
name = "1 Raw Telecrystal"
desc = "A telecrystal in its rawest and purest form; can be utilized on active uplinks to increase their telecrystal count."
item = /obj/item/stack/telecrystal
cost = 1
// Don't add telecrystals to the purchase_log since
// it's just used to buy more items (including itself!)
purchase_log_vis = FALSE
/datum/uplink_item/bundles_TC/telecrystal/five
name = "5 Raw Telecrystals"
desc = "Five telecrystals in their rawest and purest form; can be utilized on active uplinks to increase their telecrystal count."
item = /obj/item/stack/telecrystal/five
cost = 5
/datum/uplink_item/bundles_TC/telecrystal/twenty
name = "20 Raw Telecrystals"
desc = "Twenty telecrystals in their rawest and purest form; can be utilized on active uplinks to increase their telecrystal count."
item = /obj/item/stack/telecrystal/twenty
cost = 20
// Dangerous Items
/datum/uplink_item/dangerous
category = UPLINK_CATEGORY_CONSPICUOUS
/datum/uplink_item/dangerous/busterarm
name = "Buster Arm"
desc = "A box containing a combat-focused prosthetic left arm that can be attached on contact; It is intended for close combat and possesses immense strength. With it, the user\
can send people and heavy objects flying and even tear down solid objects like they're wet paper. To close the distance with ranged opponents, a grappling hook can be ejected\
from the arm which momentarily keeps victims in place. Due to its unorthodox nature, the box includes 3 monkey cubes to familiarize the user with the arm functions. Users are \
warned that the arm renders them unable to wear gloves and sticks out of most outerwear."
item = /obj/item/storage/box/syndie_kit/buster
cost = 15
manufacturer = /datum/corporation/traitor/cybersun
surplus = 0
/datum/uplink_item/dangerous/gasharpoon
name = "GasHarpoon"
desc = "A repurposed space-whaling tool attached to a glove, can be used as a sturdy weapon in both hands, or worn as a glove to allow access to its harpoon."
item = /obj/item/clothing/gloves/gasharpoon
cost = 10
surplus = 0
/datum/uplink_item/dangerous/rawketlawnchair
name = "84mm Rocket Propelled Grenade Launcher"
desc = "A reusable rocket propelled grenade launcher preloaded with a low-yield 84mm HE round. \
Guaranteed to send your target out with a bang or your money back!"
item = /obj/item/gun/ballistic/rocketlauncher
cost = 8
surplus = 30
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/pie_cannon
name = "Banana Cream Pie Cannon"
desc = "A special pie cannon for a special clown, this gadget can hold up to 20 pies and automatically fabricates one every two seconds!"
cost = 10
manufacturer = /datum/corporation/traitor/waffleco
item = /obj/item/pneumatic_cannon/pie/selfcharge
surplus = 0
include_antags = list(ROLE_CLOWNOP)
/datum/uplink_item/dangerous/bananashield
name = "Bananium Energy Shield"
desc = "A clown's most powerful defensive weapon, this personal shield provides near immunity to ranged energy attacks \
by bouncing them back at the ones who fired them. It can also be thrown to bounce off of people, slipping them, \
and returning to you even if you miss. WARNING: DO NOT ATTEMPT TO STAND ON SHIELD WHILE DEPLOYED, EVEN IF WEARING ANTI-SLIP SHOES."
item = /obj/item/shield/energy/bananium
cost = 16
surplus = 0
include_antags = list(ROLE_CLOWNOP)
/datum/uplink_item/dangerous/clownsword
name = "Bananium Energy Sword"
desc = "An energy sword that is incapable of physical harm, but will slip anyone it contacts, be it by melee attack, thrown \
impact, or just stepping on it. Beware friendly fire, as even anti-slip shoes will not protect against it."
item = /obj/item/melee/transforming/energy/sword/bananium
cost = 3
surplus = 0
include_antags = list(ROLE_CLOWNOP)
/datum/uplink_item/dangerous/bioterror
name = "Biohazardous Chemical Sprayer"
desc = "A handheld chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by Vahlen \
Pharmaceuticals, the deadly blend it comes stocked with will disorient, damage, and disable your foes... \
Use with extreme caution, to prevent exposure to yourself and your fellow operatives."
item = /obj/item/reagent_containers/spray/chemsprayer/bioterror
cost = 20
surplus = 0
include_antags = list(ROLE_OPERATIVE, ROLE_CLOWNOP)
/datum/uplink_item/dangerous/throwingweapons
name = "Box of Throwing Weapons"
desc = "A box of shurikens and reinforced bolas from ancient Earth martial arts. They are highly effective \
throwing weapons. The bolas can knock a target down and the shurikens will embed into limbs."
item = /obj/item/storage/box/syndie_kit/throwing_weapons
cost = 3
/datum/uplink_item/dangerous/shotgun
name = "Bulldog Shotgun"
desc = "A fully-loaded semi-automatic drum-fed shotgun. Compatible with all 12g rounds. Designed for close \
quarter anti-personnel engagements."
item = /obj/item/gun/ballistic/shotgun/bulldog
cost = 8
surplus = 40
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/smg
name = "C-20r Submachine Gun"
desc = "A fully-loaded Scarborough Arms bullpup submachine gun. The C-20r fires .45 rounds with a \
24-round magazine and is compatible with suppressors."
item = /obj/item/gun/ballistic/automatic/c20r
cost = 10
surplus = 40
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/doublesword
name = "Double-Bladed Energy Sword"
desc = "The double-bladed energy sword does slightly more damage than a standard energy sword and will deflect \
all energy projectiles, but requires two hands to wield."
item = /obj/item/melee/dualsaber
player_minimum = 25
cost = 16
include_antags = list(ROLE_OPERATIVE) // yogs: infiltration
/datum/uplink_item/dangerous/doublesword/get_discount()
return pick(4;0.8,2;0.65,1;0.5)
/datum/uplink_item/dangerous/sword
name = "Energy Sword"
desc = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be \
pocketed when inactive. Activating it produces a loud, distinctive noise."
item = /obj/item/melee/transforming/energy/sword/saber
cost = 8
exclude_antags = list(ROLE_CLOWNOP, ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/dangerous/backstab
name = "Backstabbing Switchblade"
desc = "This switchblade has a unique shape that makes it especially lethal when lodged in someone's backside. \
Still does a moderate amount of damage when applied from the front."
item = /obj/item/switchblade/backstab
cost = 3
// backstabs are pretty funny, clown ops can have this one
/datum/uplink_item/dangerous/bostaff
name = "Bo Staff"
desc = "A wielded wooden staff that can be used to incapacitate opponents if intending to disarm."
item = /obj/item/melee/bostaff
cost = 8
exclude_antags = list(ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/dangerous/shield
name = "Energy Shield"
desc = "An incredibly useful personal shield projector, capable of reflecting energy projectiles and defending \
against other attacks. Pair with an Energy Sword for a killer combination."
item = /obj/item/shield/energy
cost = 16
surplus = 20
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/flamethrower
name = "Flamethrower"
desc = "A flamethrower, fueled by a portion of highly flammable biotoxins stolen previously from Nanotrasen \
stations. Make a statement by roasting the filth in their own greed. Use with caution."
item = /obj/item/gun/flamethrower/full
cost = 4
surplus = 40
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/rapid
name = "Gloves of the North Star"
desc = "These gloves let the user punch people very fast. Does not improve weapon attack speed or the meaty fists of a hulk."
item = /obj/item/clothing/gloves/rapid
cost = 8
exclude_antags = list(ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/dangerous/guardian
name = "Holoparasites"
desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an \
organic host as a home base and source of fuel. Holoparasites come in various types and share damage with their host."
item = /obj/item/guardiancreator/tech
cost = 15
manufacturer = /datum/corporation/traitor/cybersun
surplus = 0
exclude_antags = list(ROLE_INFILTRATOR, ROLE_INTERNAL_AFFAIRS)
player_minimum = 25
restricted = TRUE
refundable = TRUE
// nukies don't get the 3 TC discount
/datum/uplink_item/dangerous/guardian/nuclear
cost = 15
include_antags = list(ROLE_OPERATIVE, ROLE_CLOWNOP)
exclude_antags = list()
/datum/uplink_item/dangerous/machinegun
name = "L6 Squad Automatic Weapon"
desc = "A fully-loaded Aussec Armoury belt-fed machine gun. \
This deadly weapon has a massive 50-round magazine of devastating 7.12x82mm ammunition."
item = /obj/item/gun/ballistic/automatic/l6_saw
cost = 20
surplus = 0
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/minigun
name = "M-546 Osprey"
desc = "A fully-loaded minigun which packs a big punch. \
This deadly giant weapon has a massive 500-round magazine of devastating 5.46mm caseless ammunition.\
Slaughter your enemies through sheer force, prone to overheating with extended use. We made this gun so advanced that it fires the whole bullet.\
Thats 60% more bullet per bullet and no more useless casings!"
item = /obj/item/minigunbackpack
cost = 30
surplus = 0
cant_discount = TRUE
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/rifle
name = "M-90gl Rifle"
desc = "A fully-loaded, specialized three-round burst rifle that fires 5.56mm ammunition from a 30 round magazine \
with a toggleable 40mm underbarrel grenade launcher."
item = /obj/item/gun/ballistic/automatic/m90
cost = 18
surplus = 50
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/powerfist
name = "Power Fist"
desc = "The power-fist is a metal gauntlet with a built-in piston-ram powered by an external gas supply.\
Upon hitting a target, the piston-ram will extend forward to make contact for some serious damage. \
Using a wrench on the piston valve will allow you to tweak the amount of gas used per punch to \
deal extra damage and hit targets further. Use a screwdriver to take out any attached tanks."
item = /obj/item/clothing/gloves/powerfist
cost = 6
manufacturer = /datum/corporation/traitor/waffleco
exclude_antags = list(ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/dangerous/vxtvulhammer
name = "Vxtvul Hammer"
desc = "The Vxtvul Hammer is a sledgehammer once utilized by the ancient Vxtrin species. \
This weapon must be wielded in two hands to be used effectively, but possesses high armor penetration. \
In addition, the user can charge the hammer to enable a thunderous blow that will decimate construction in a single hit, \
do sizeable damage to mechs, or shatter people off of their feet. The battery is charged by the user's concentration."
item = /obj/item/melee/vxtvulhammer
cost = 8
include_antags = list(ROLE_OPERATIVE) //Only traitor preterni can buy the implant version
/datum/uplink_item/dangerous/nukiedmr
name = "K-41s Designated Marksman Rifle"
desc = "A long-range rifle that fires powerful 7.62 rounds from an 11-round magazine. It possesses \
a short-range scope to better see over distances."
item = /obj/item/gun/ballistic/automatic/k41s
cost = 12
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/sniper
name = "Sniper Rifle"
desc = "Ranged fury, Syndicate style. Guaranteed to cause shock and awe or your TC back!"
item = /obj/item/gun/ballistic/rifle/sniper_rifle/syndicate
cost = 16
surplus = 25
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/pistol
name = "Stechkin Pistol"
desc = "A small, easily concealable handgun that uses 10mm auto rounds in 10-round magazines and is compatible \
with suppressors. Ammo is included"
item = /obj/item/gun/ballistic/automatic/pistol
cost = 5
exclude_antags = list(ROLE_CLOWNOP)
/datum/uplink_item/dangerous/pistol/spawn_item(spawn_path, mob/user, datum/component/uplink/U)
if(HAS_TRAIT_FROM(user, TRAIT_PACIFISM, ROUNDSTART_TRAIT))
spawn_path = /obj/item/gun/ballistic/automatic/pistol/pacifist
to_chat(user, span_notice("Your employer has loaded your purchased weapon with non-lethal ammunition"))
..()
/datum/uplink_item/dangerous/bolt_action
name = "Surplus Rifle"
desc = "A horribly outdated bolt action weapon. You've got to be desperate to use this."
item = /obj/item/gun/ballistic/rifle/boltaction
cost = 1
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/dangerous/revolver
name = "Syndicate Revolver"
desc = "A brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers."
item = /obj/item/gun/ballistic/revolver
cost = 6
surplus = 50
/datum/uplink_item/dangerous/foamsmg
name = "Toy Submachine Gun"
desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade darts with a 20-round magazine."
item = /obj/item/gun/ballistic/automatic/c20r/toy
cost = 5
manufacturer = /datum/corporation/traitor/donkco
surplus = 0
include_antags = list(ROLE_OPERATIVE, ROLE_CLOWNOP)
/datum/uplink_item/dangerous/foammachinegun
name = "Toy Machine Gun"
desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating \
riot grade darts, that can briefly incapacitate someone in just one volley."
item = /obj/item/gun/ballistic/automatic/l6_saw/toy
cost = 10
manufacturer = /datum/corporation/traitor/donkco
surplus = 0
include_antags = list(ROLE_OPERATIVE, ROLE_CLOWNOP)
/datum/uplink_item/dangerous/foampistol
name = "Toy Pistol with Riot Darts"
desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade \
darts effective at incapacitating a target."
item = /obj/item/gun/ballistic/automatic/toy/pistol/riot
cost = 1
manufacturer = /datum/corporation/traitor/donkco
surplus = 10
/datum/uplink_item/dangerous/watergun
name = "Extended Capacity Hyper-Soaker"
desc = "A simple yet effective way of applying chemicals to a target's skin. \
Comes with a high-power nozzle and larger tank."
item = /obj/item/gun/water/syndicate
cost = 2
manufacturer = /datum/corporation/traitor/donkco
surplus = 10
/datum/uplink_item/dangerous/hardlightbow
name = "Hardlight Bow"
desc = "A modern bow that can fabricate hardlight arrows, designed for silent takedowns of targets."
item = /obj/item/gun/ballistic/bow/energy/syndicate
cost = 6
player_minimum = 25
surplus = 25
exclude_antags = list(ROLE_CLOWNOP)
/datum/uplink_item/dangerous/nuclear_energy_fire_axe
name = "Energy Fire Axe"
desc = "A terrifying axe with a blade of pure energy, able to tear down structures with ease. \
Easier to store than a standard fire axe while inactive."
item = /obj/item/fireaxe/energy
cost = 10
include_antags = list(ROLE_OPERATIVE)
surplus = 0
// Stealthy Weapons
/datum/uplink_item/stealthy_weapons
category = UPLINK_CATEGORY_STEALTH_WEAPONS
/datum/uplink_item/stealthy_weapons/combatglovesplus
name = "Combat Gloves Plus"
desc = "A pair of gloves that are fireproof and shock resistant, however unlike the regular Combat Gloves this one uses nanotechnology \
to learn the abilities of krav maga to the wearer."
item = /obj/item/clothing/gloves/krav_maga/combatglovesplus
cost = 5
include_antags = list(ROLE_OPERATIVE, ROLE_CLOWNOP)
surplus = 0
/datum/uplink_item/stealthy_weapons/cqc
name = "CQC Manual"
desc = "A manual that teaches a single user tactical Close-Quarters Combat before self-destructing."
item = /obj/item/book/granter/martial/cqc
cost = 13
surplus = 0
/datum/uplink_item/stealthy_weapons/dart_pistol
name = "Dart Pistol"
desc = "A miniaturized version of a normal syringe gun. It is very quiet when fired and can fit into any \
space a small item can."
item = /obj/item/gun/syringe/syndicate
manufacturer = /datum/corporation/traitor/vahlen
cost = 4
surplus = 50
/datum/uplink_item/stealthy_weapons/dehy_carp
name = "Dehydrated Space Carp"
desc = "Looks like a plush toy carp, but just add water and it becomes a real-life space carp! Activate in \
your hand before use so it knows not to kill you."
item = /obj/item/toy/plush/carpplushie/dehy_carp
cost = 1
manufacturer = /datum/corporation/traitor/donkco
exclude_antags = list(ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/stealthy_weapons/derringer
name = "Derringer Pistol"
desc = "A concealable double-chamber pistol loaded with individual .357 rounds. Fits in boots."
item = /obj/item/gun/ballistic/revolver/derringer
cost = 3
manufacturer = /datum/corporation/traitor/donkco
exclude_antags = list(ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/stealthy_weapons/edagger
name = "Energy Dagger"
desc = "A dagger made of energy that looks and functions as a pen when off."
item = /obj/item/pen/red/edagger
cost = 2
manufacturer = /datum/corporation/traitor/donkco
/datum/uplink_item/stealthy_weapons/donkbat
name = "Toy Baseball Bat"
desc = "A weighted solid plastic baseball bat, perfect for knocking the wind out of people."
item = /obj/item/melee/classic_baton/donkbat
cost = 6
manufacturer = /datum/corporation/traitor/donkco
surplus = 0
/datum/uplink_item/stealthy_weapons/martialarts
name = "Martial Arts Scroll"
desc = "This scroll contains the secrets of an ancient martial arts technique known as Sleeping Carp. You will master unarmed combat, \
deflecting all ranged weapon fire when throwmode is enabled, but you also refuse to use dishonorable ranged weaponry."
item = /obj/item/book/granter/martial/carp
cost = 14
player_minimum = 20
surplus = 0
exclude_antags = list(ROLE_OPERATIVE, ROLE_CLOWNOP, ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/stealthy_weapons/crossbow
name = "Miniature Energy Crossbow"
desc = "A short bow mounted across a tiller in miniature. \
Small enough to fit into a pocket or slip into a bag unnoticed. \
It will synthesize and fire bolts tipped with some debilitating \
toxins that will irradiate and tire, causing them to \
be silenced. It can produce an infinite number \
of bolts, but takes time to automatically recharge after each shot."
item = /obj/item/gun/energy/kinetic_accelerator/crossbow
cost = 5
surplus = 30
exclude_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/stealthy_weapons/origami_kit
name = "Boxed Origami Kit"
desc = "This box contains a guide on how to craft masterful works of origami, allowing you to transform normal pieces of paper into \
perfectly aerodynamic (and potentially lethal) paper airplanes."
item = /obj/item/storage/box/syndie_kit/origami_bundle
cost = 14
manufacturer = /datum/corporation/traitor/waffleco
surplus = 0
exclude_antags = list(ROLE_OPERATIVE) //clown ops intentionally left in, because that seems like some s-tier shenanigans.
/datum/uplink_item/stealthy_weapons/traitor_chem_bottle
name = "Poison Kit"
desc = "An assortment of deadly and illegal chemicals packed into a compact box. Comes prepackaged in large syringes for more precise application."
item = /obj/item/storage/box/syndie_kit/chemical
manufacturer = /datum/corporation/traitor/vahlen
cost = 5
surplus = 50
/datum/uplink_item/stealthy_weapons/romerol_kit
name = "Romerol"
desc = "A highly experimental bioterror agent which creates dormant nodules to be etched into the grey matter of the brain. \
On death, these nodules take control of the dead body, causing limited revivification, \
along with slurred speech, aggression, and the ability to infect others with this agent."
item = /obj/item/storage/box/syndie_kit/romerol
cost = 25
surplus = 0 //Hijack-only, don't let this exist in surplus
cant_discount = TRUE
exclude_antags = list(ROLE_INFILTRATOR) // yogs: infiltration
/datum/uplink_item/stealthy_weapons/sleepy_pen
name = "Sleepy Pen"
desc = "A syringe disguised as a functional pen, filled with a potent mix of drugs, including a \
strong anesthetic and a chemical that prevents the target from speaking. \
The pen holds one dose of the mixture. Note that before the target \
falls asleep, they will be able to move and act."
item = /obj/item/pen/blue/sleepy
cost = 4
manufacturer = /datum/corporation/traitor/waffleco
exclude_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/stealthy_weapons/suppressor
name = "Suppressor"
desc = "This suppressor will silence the shots of the weapon it is attached to for increased stealth and superior ambushing capability. It is compatible with many small ballistic guns including the Stechkin and C-20r, but not revolvers or energy guns."
item = /obj/item/suppressor
cost = 1
surplus = 10
exclude_antags = list(ROLE_CLOWNOP)
// Ammunition
/datum/uplink_item/ammo
category = UPLINK_CATEGORY_AMMO
surplus = 40
/datum/uplink_item/ammo/pistol
name = "Pair of 10mm Handgun Magazines"
desc = "A box that contains two additional 10-round 10mm magazines; compatible with the Stechkin Pistol."
item = /obj/item/storage/box/syndie_kit/pistolammo
cost = 1
exclude_antags = list(ROLE_CLOWNOP)
/datum/uplink_item/ammo/pistol/random
name = "Random 10mm Handgun Magazines"
desc = "A box that contains four random 10-round 10mm magazines at a discount; compatible with the Stechkin Pistol."
item = /obj/item/storage/box/syndie_kit/pistolammo/random
cost = 2 // same mentality as the 357. You can get 4 mags for 2-4 TC, so giving in to the random chance give you a deal
/datum/uplink_item/ammo/pistol/cs
name = "Pair of 10mm Caseless Magazines"
desc = "A box that contains two additional 10-round 10mm magazines; compatible with the Stechkin Pistol. \
These rounds will leave no casings behind when fired."
item = /obj/item/storage/box/syndie_kit/pistolcaselessammo
/datum/uplink_item/ammo/pistol/ap
name = "10mm Armor-Piercing Magazine"
desc = "An additional 10-round 10mm magazine; compatible with the Stechkin Pistol. \
These rounds are less effective at injuring the target but penetrate protective gear."
item = /obj/item/ammo_box/magazine/m10mm/ap
/datum/uplink_item/ammo/pistol/hp
name = "10mm Hollow-Point Magazine"
desc = "An additional 10-round 10mm magazine; compatible with the Stechkin Pistol. \
These rounds are more damaging but ineffective against armour."
item = /obj/item/ammo_box/magazine/m10mm/hp
/datum/uplink_item/ammo/pistol/sleepy
name = "Pair of 10mm Soporific Magazines"
desc = "A box that contains 2 additional 10-round 10mm magazines; compatible with the Stechkin Pistol. \
These rounds will deliver small doses of tranqulizers on hit, knocking the target out after a few successive hits."
item = /obj/item/storage/box/syndie_kit/pistolsleepyammo
/datum/uplink_item/ammo/pistol/fire
name = "10mm Incendiary Magazine"
desc = "An additional 10-round 10mm magazine; compatible with the Stechkin Pistol. \
Loaded with incendiary rounds which inflict reduced damage, but ignite the target."
item = /obj/item/ammo_box/magazine/m10mm/fire
/datum/uplink_item/ammo/pistol/emp
name = "10mm EMP Magazine"
desc = "An additional 10-round 10mm magazine; compatible with the Stechkin pistol. \
Loaded with bullets which release micro-electromagnetic pulses on hit, disrupting electronics on the target hit."
item = /obj/item/ammo_box/magazine/m10mm/emp
/datum/uplink_item/ammo/pistol/emp/New()
..()
if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
cost *= 3
/datum/uplink_item/ammo/shotgun
cost = 2
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/ammo/shotgun/bag
name = "12g Ammo Duffel Bag"
desc = "A duffel bag containing three 12g buckshot drums, three 12g slug drums, and two 12g flechette drums for the Bulldog shotgun, bundled together at a discount."
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun
cost = 12 //Instead of 18
/datum/uplink_item/ammo/shotgun/bag/random
name = "Randomized 12g Ammo Duffel Bag"
desc = "A duffel bag containing 10 random drum mags for the Bulldog shotgun, bundled together at a big discount."
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/random
cost = 10 // Random ammo, so its cheaper?
/datum/uplink_item/ammo/shotgun/buck
name = "12g Buckshot Drum"
desc = "An additional 8-round buckshot magazine for use with the Bulldog shotgun.\
Front towards enemy."
item = /obj/item/ammo_box/magazine/m12g
/datum/uplink_item/ammo/shotgun/dragon
name = "12g Dragon's Breath Drum"
desc = "An alternative 8-round dragon's breath magazine for use in the Bulldog shotgun. \
'I'm a fire starter, twisted fire starter!'"
item = /obj/item/ammo_box/magazine/m12g/dragon
/datum/uplink_item/ammo/shotgun/frag
name = "12g Frag-12 Drum"
desc = "An alternative 8-round frag-12 magazine for use in the Bulldog shotgun. \
'Collateral is my favorite kind of damage!'"
cost = 3
item = /obj/item/ammo_box/magazine/m12g/frag
/datum/uplink_item/ammo/shotgun/meteor
name = "12g Meteorslug Shells"
desc = "An alternative 8-round meteorslug magazine for use in the Bulldog shotgun. \
Great for blasting airlocks off their frames and knocking down enemies."
item = /obj/item/ammo_box/magazine/m12g/meteor
/datum/uplink_item/ammo/shotgun/slug
name = "12g Slug Drum"
desc = "An additional 8-round slug magazine for use with the Bulldog shotgun. \
Now 8 times less likely to shoot your pals."
item = /obj/item/ammo_box/magazine/m12g/slug
/datum/uplink_item/ammo/shotgun/flechette
name = "12g Flechette Drum"
desc = "An alternative 8-round flechette magazine for use with the Bulldog shotgun. \
Tighter spread and armor penetration; make 'em bleed."
cost = 3
item = /obj/item/ammo_box/magazine/m12g/flechette
/datum/uplink_item/ammo/revolver
name = ".357 Speed Loader Box"
desc = "A box with two .357 speed loaders. These speed loaders contain seven .357 rounds each; usable with the Syndicate revolver."
item = /obj/item/storage/box/syndie_kit/revolverammo
cost = 1
exclude_antags = list(ROLE_CLOWNOP)
illegal_tech = FALSE
/datum/uplink_item/ammo/revolver/random
name = "Random .357 Speed Loader Box"
desc = "A box with four random .357 speed loaders. Who knows what fun toys you might get?"
item = /obj/item/storage/box/syndie_kit/revolverammo/random
cost = 2// four would cost between 2 and 4 TC, so i think its fair
/datum/uplink_item/ammo/revolver/ironfeather
name = ".357 Ironfeather Speed Loader Box"
desc = "A box with two .357 Ironfeather speed loaders. These speed loaders contain seven .357 Ironfeather shells; usable with the Syndicate revolver. \
Ironfeather shells contain six pellets which are less damaging than buckshot but mildly better over range."
item = /obj/item/storage/box/syndie_kit/revolvershotgunammo
/datum/uplink_item/ammo/revolver/nutcracker
name = ".357 Nutcracker Speed Loader"
desc = "A speed loader that contains seven .357 Nutcracker rounds; usable with the Syndicate revolver. \
These rounds lose moderate stopping power in exchange for being able to rapidly destroy doors and windows."
item = /obj/item/ammo_box/a357/nutcracker
/datum/uplink_item/ammo/revolver/metalshock
name = ".357 Metalshock Speed Loader"
desc = "A speed loader that contains seven .357 Metalshock rounds; usable with the Syndicate revolver. \
These rounds convert some lethality into an electric payload, which can bounce between targets."
item = /obj/item/ammo_box/a357/metalshock
/datum/uplink_item/ammo/revolver/heartpiercer
name = ".357 Heartpiercer Speed Loader"
desc = "A speed loader that contains seven .357 Heartpiercer rounds; usable with the Syndicate revolver. \
These rounds are less damaging, but penetrate through armor and up to two bodies at once."
item = /obj/item/ammo_box/a357/heartpiercer
/datum/uplink_item/ammo/revolver/wallstake
name = ".357 Wallstake Speed Loader"
desc = "A speed loader that contains seven .357 Wallstake rounds; usable with the Syndicate revolver. \
These blunt rounds are slightly less damaging but can knock people against walls."
item = /obj/item/ammo_box/a357/wallstake
/datum/uplink_item/ammo/rifle
name = "5.56mm Toploader Magazine"
desc = "An additional 30-round 5.56mm magazine; suitable for use with the M-90gl rifle. \
These bullets pack less punch than 7.12x82mm rounds, but they still offer more power than .45 ammo."
item = /obj/item/ammo_box/magazine/m556
cost = 4
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/ammo/rifle/ap
name = "5.56mm Armor-Piercing Toploader Magazine"
desc = "An additional 30-round 5.56mm magazine; suitable for use with the M-90gl rifle. \
These rounds are less damaging but puncture through armor easily."
item = /obj/item/ammo_box/magazine/m556/ap
cost = 6
/datum/uplink_item/ammo/rifle/inc
name = "5.56mm Incendiary Toploader Magazine"
desc = "An additional 30-round 5.56mm magazine; suitable for use with the M-90gl rifle. \
These rounds are less damaging but ignite targets."
item = /obj/item/ammo_box/magazine/m556/inc
/datum/uplink_item/ammo/a40mm
name = "40mm Grenade"
desc = "A 40mm HE grenade for use with the M-90gl's under-barrel grenade launcher. \
Your teammates will ask you to not shoot these down small hallways."
item = /obj/item/ammo_casing/a40mm
cost = 2
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/ammo/smg/bag
name = ".45 Ammo Duffel Bag"
desc = "A duffel bag containing five standard .45 magazines, two AP .45 magazines, and two HP .45 magazines for the C-20r submachine gun, bundled together at a discount."
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/smg
cost = 20 //instead of 29 TC
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/ammo/smg/bag/random
name = "Randomized .45 Ammo Duffel Bag"
desc = "A duffel bag containing eleven randomly picked, standard .45 magazines for the C-20r submachine gun, bundled together at a big discount."
cost = 18 // bit cheaper for more random crap
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/smg/random
/datum/uplink_item/ammo/smg
name = ".45 SMG Magazine"
desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun."
item = /obj/item/ammo_box/magazine/smgm45
cost = 3
include_antags = list(ROLE_OPERATIVE)
/datum/uplink_item/ammo/smg/ap
name = ".45 Armor-Piercing SMG Magazine"
desc = "An additional 24-round armor-piercing .45 magazine suitable for use with the C-20r submachine gun. \
These rounds deal reduced damage but will bypass most protective gear."
item = /obj/item/ammo_box/magazine/smgm45/ap
cost = 4
/datum/uplink_item/ammo/smg/hp
name = ".45 Hollow-Point SMG Magazine"
desc = "An additional 24-round hollow-point .45 magazine suitable for use with the C-20r submachine gun. \
These rounds deal high damage but are weak against body armor."
item = /obj/item/ammo_box/magazine/smgm45/hp
/datum/uplink_item/ammo/smg/venom
name = ".45 Venom SMG Magazine"
desc = "An additional 24-round venom .45 magazine suitable for use with the C-20r submachine gun. \
These rounds deal reduced damage but inject venom into targets."