diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 05a57102c4a..759833cd5b9 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -15,6 +15,8 @@ var/list/uplink_items = list()
continue
if(I.gamemodes.len && ticker && !(ticker.mode.name in I.gamemodes))
continue
+ if(I.excludefrom.len && ticker && (ticker.mode.name in I.excludefrom))
+ continue
if(I.last)
last += I
continue
@@ -44,6 +46,7 @@ var/list/uplink_items = list()
var/last = 0 // Appear last
var/abstract = 0
var/list/gamemodes = list() // Empty list means it is in all the gamemodes. Otherwise place the gamemode name here.
+ var/list/excludefrom = list() //Empty list does nothing. Place the name of gamemode you don't want this item to be available in here. This is so you dont have to list EVERY mode to exclude something.
var/list/job = null
/datum/uplink_item/proc/spawn_item(var/turf/loc, var/obj/item/device/uplink/U)
@@ -233,6 +236,7 @@ var/list/uplink_items = list()
desc = "A miniature energy crossbow that is small enough both to fit into a pocket and to slip into a backpack unnoticed by observers. Fires bolts tipped with toxin, a poisonous substance that is the product of a living organism. Stuns enemies for a short period of time. Recharges automatically."
item = /obj/item/weapon/gun/energy/crossbow
cost = 12
+ excludefrom = list("nuclear emergency")
/datum/uplink_item/dangerous/sword
name = "Energy Sword"
@@ -345,6 +349,7 @@ var/list/uplink_items = list()
desc = "A syringe disguised as a functional pen, filled with a neuromuscular-blocking drug that renders a target mute on injection that will eventually cause them to pass out. The pen holds one dose of paralyzing agent,though it can be refilled."
item = /obj/item/weapon/pen/paralysis
cost = 8
+ excludefrom = list("nuclear emergency")
/datum/uplink_item/stealthy_weapons/soap
name = "Syndicate Soap"
@@ -449,7 +454,7 @@ var/list/uplink_items = list()
/datum/uplink_item/device_tools/space_suit
name = "Space Suit"
- desc = "The red syndicate space suit is less encumbering than Nanotrasen variants, fits inside bags, and has a weapon slot. Nanotrasen crewmembers are trained to report red space suit sightings."
+ desc = "The red and black syndicate space suit is less encumbering than Nanotrasen variants, fits inside bags, and has a weapon slot. Nanotrasen crewmembers are trained to report red space suit sightings."
item = /obj/item/weapon/storage/box/syndie_kit/space
cost = 5
@@ -475,7 +480,7 @@ var/list/uplink_items = list()
name = "Binary Translator Key"
desc = "A key, that when inserted into a radio headset, allows you to listen to and talk with artificial intelligences and cybernetic organisms in binary."
item = /obj/item/device/encryptionkey/binary
- cost = 6
+ cost = 5
/datum/uplink_item/device_tools/cipherkey
name = "Centcomm Encryption Key"
@@ -491,7 +496,7 @@ var/list/uplink_items = list()
/datum/uplink_item/device_tools/plastic_explosives
name = "Composition C-4"
- desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls, attach it to organisms to destroy them, or connect a signaler to its wiring to make it remotely detonable. It has a modifiable timer with a minimum setting of 10 seconds."
+ desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect a signaler to its wiring to make it remotely detonable. It has a modifiable timer with a minimum setting of 10 seconds."
item = /obj/item/weapon/plastique
cost = 1
@@ -599,6 +604,7 @@ var/list/uplink_items = list()
desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 10 telecrystals, but you do not know which specialisation you will receive."
item = /obj/item/weapon/storage/box/syndicate
cost = 20
+ excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/badass/syndiecards
name = "Syndicate Playing Cards"
@@ -606,6 +612,7 @@ var/list/uplink_items = list()
You can also play card games with them."
item = /obj/item/toy/cards/deck/syndicate
cost = 1
+ excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/badass/balloon
name = "For showing that you are The Boss"
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 9ad0aa95d7b..662aa81b1e7 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -128,7 +128,7 @@ proc/issyndicate(mob/living/M as mob)
for(var/datum/mind/synd_mind in syndicates)
if(spawnpos > synd_spawn.len)
- spawnpos = 1
+ spawnpos = 2
synd_mind.current.loc = synd_spawn[spawnpos]
forge_syndicate_objectives(synd_mind)
@@ -162,6 +162,18 @@ proc/issyndicate(mob/living/M as mob)
spawn(1)
// NukeNameAssign(nukelastname(synd_mind.current),syndicates) //allows time for the rest of the syndies to be chosen
synd_mind.current.real_name = "[pick(first_names_male)] [pick(last_names)]"
+ synd_mind.current << "You are the Syndicate leader for this mission. You are responsible for the distribution of telecrystals and your ID is the only one who can open the launch bay doors."
+ synd_mind.current << "If you feel you are not up to this task, give your ID to another operative."
+
+ var/list/foundIDs = synd_mind.current.search_contents_for(/obj/item/weapon/card/id)
+
+ if(foundIDs.len)
+ for(var/obj/item/weapon/card/id/ID in foundIDs)
+ ID.name = "lead agent card"
+ ID.access += access_syndicate_leader
+ else
+ message_admins("Warning: Nuke Ops spawned without access to leave their spawn area!")
+
if (nuke_code)
synd_mind.store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0)
synd_mind.current << "The nuclear authorization code is: [nuke_code]"
@@ -215,13 +227,15 @@ proc/issyndicate(mob/living/M as mob)
if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(synd_mob), slot_back)
if(synd_mob.backbag == 3) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(synd_mob), slot_back)
if(synd_mob.backbag == 4) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(synd_mob), slot_back)
- synd_mob.equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m10mm(synd_mob), slot_in_backpack)
- synd_mob.equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m10mm(synd_mob), slot_in_backpack)
- synd_mob.equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m10mm(synd_mob), slot_in_backpack)
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), slot_in_backpack)
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol(synd_mob), slot_belt)
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(synd_mob.back), slot_in_backpack)
+ var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(synd_mob)
+ U.hidden_uplink.uplink_owner="[synd_mob.key]"
+ U.hidden_uplink.uses = 20
+ synd_mob.equip_to_slot_or_del(U, slot_in_backpack)
+
var/obj/item/clothing/suit/space/rig/syndi/new_suit = new(synd_mob)
var/obj/item/clothing/head/helmet/space/rig/syndi/new_helmet = new(synd_mob)
@@ -370,6 +384,9 @@ proc/issyndicate(mob/living/M as mob)
text += "(Syndicates used [TC_uses] TC) [purchases]"
+ if(TC_uses==0 && station_was_nuked && !is_operatives_are_dead())
+ text += "
"
+
world << text
return 1
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 93bc5207d32..979cc63ed27 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -101,6 +101,7 @@
//The Syndicate
/var/const/access_syndicate = 150//General Syndicate Access
+/var/const/access_syndicate_leader = 151//Nuke Op Leader Access
//MONEY
/var/const/access_crate_cash = 200
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index d98b7378fcf..ab30fab2269 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -15,7 +15,7 @@
wreckage = /obj/effect/decal/mecha_wreckage/gygax
internal_damage_threshold = 35
max_equip = 3
- maxsize = 1
+ maxsize = 2
force = 10
step_energy_drain = 3
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index c624668a019..8176d23258d 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -55,6 +55,8 @@
/obj/item/weapon/plastique/attack_self(mob/user as mob)
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
+ if(newtime < 10)
+ newtime = 10
if(newtime > 60000)
newtime = 60000
timer = newtime
@@ -64,16 +66,9 @@
/obj/item/weapon/plastique/afterattack(atom/target as obj|turf, mob/user as mob, flag)
if (!flag)
return
- if (istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/machinery/door/airlock/hatch/gamma))
+ if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/machinery/door/airlock/hatch/gamma))
return
user << "Planting explosives..."
- if(ismob(target))
- user.attack_log += "\[[time_stamp()]\] [user.real_name] tried planting [name] on [target:real_name] ([target:ckey])"
- if(target:ckey)
- msg_admin_attack("[user.real_name] ([user.ckey]) tried planting [name] on [target:real_name] ([target:ckey]) (JMP)")
-
- user.visible_message("\red [user.name] is trying to plant some kind of explosive on [target.name]!")
-
if(do_after(user, 50) && in_range(user, target))
user.drop_item()
@@ -102,11 +97,12 @@
if(!target)
target = src
if(location)
- explosion(location, 0, 1, 3, 6)
+ explosion(location, -1, -1, 4, 4)
if(target)
if (istype(target, /turf/simulated/wall))
- target:dismantle_wall(1)
+ var/turf/simulated/wall/W = target
+ W.dismantle_wall(1)
else
target.ex_act(1)
if (isobj(target))
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index ed301d100b3..ccbafe8f8bd 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -109,12 +109,14 @@
return
/obj/item/weapon/storage/box/syndie_kit/space
- name = "Space Suit and Helmet"
+ name = "Boxed Space Suit and Helmet"
+ can_hold = list(/obj/item/clothing/suit/space/syndicate/black/red, /obj/item/clothing/head/helmet/space/syndicate/black/red)
+ max_w_class = 3
/obj/item/weapon/storage/box/syndie_kit/space/New()
..()
- new /obj/item/clothing/suit/space/syndicate(src)
- new /obj/item/clothing/head/helmet/space/syndicate(src)
+ new /obj/item/clothing/suit/space/syndicate/black/red(src)
+ new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
return
/obj/item/weapon/storage/box/syndie_kit/surveillance
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index fd230f382ca..15c0e29ae58 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -10,44 +10,50 @@
desc = "It's a storage unit for operative gear."
/obj/structure/closet/syndicate/personal/New()
+ ..()
+ sleep(2)
+ new /obj/item/clothing/under/syndicate(src)
+ new /obj/item/clothing/suit/armor/vest(src)
+ new /obj/item/clothing/head/helmet/swat(src)
+ new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/weapon/storage/belt/military(src)
+ new /obj/item/weapon/crowbar/red(src)
+ new /obj/item/clothing/glasses/night(src)
+
+/obj/structure/closet/syndicate/suits
+ desc = "It's a storage unit for operative space gear. Not fancy..."
+
+/obj/structure/closet/syndicate/suits/New()
..()
sleep(2)
new /obj/item/weapon/tank/jetpack/oxygen(src)
new /obj/item/clothing/mask/gas/syndicate(src)
- new /obj/item/clothing/under/syndicate(src)
- new /obj/item/clothing/head/helmet/space/rig/syndi(src)
- new /obj/item/clothing/suit/space/rig/syndi(src)
- new /obj/item/weapon/crowbar/red(src)
- new /obj/item/weapon/cell/high(src)
- new /obj/item/weapon/card/id/syndicate(src)
- new /obj/item/device/multitool(src)
new /obj/item/clothing/shoes/magboots(src)
-
/obj/structure/closet/syndicate/nuclear
- desc = "It's a storage unit for nuclear-operative gear."
+ desc = "It's a storage unit for a Syndicate boarding party.."
/obj/structure/closet/syndicate/nuclear/New()
..()
sleep(2)
- new /obj/item/ammo_box/magazine/m12mm(src)
- new /obj/item/ammo_box/magazine/m12mm(src)
- new /obj/item/weapon/storage/box/handcuffs(src)
+ new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/weapon/storage/box/teargas(src)
new /obj/item/weapon/storage/box/flashbangs(src)
- new /obj/item/weapon/gun/energy/gun(src)
- new /obj/item/weapon/gun/energy/gun(src)
- new /obj/item/weapon/gun/energy/gun(src)
- new /obj/item/weapon/gun/energy/gun(src)
- new /obj/item/weapon/gun/energy/gun(src)
+ new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
+ new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
+ new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
+ new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
+ new /obj/item/weapon/gun/projectile/automatic/bulldog(src)
new /obj/item/weapon/pinpointer/nukeop(src)
new /obj/item/weapon/pinpointer/nukeop(src)
new /obj/item/weapon/pinpointer/nukeop(src)
new /obj/item/weapon/pinpointer/nukeop(src)
new /obj/item/weapon/pinpointer/nukeop(src)
new /obj/item/device/pda/syndicate(src)
- var/obj/item/device/radio/uplink/U = new(src)
- U.hidden_uplink.uses = 120
return
/obj/structure/closet/syndicate/resources/
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 4ed8bac88aa..cf9500ad64e 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -76,9 +76,9 @@
loose = 80 // allowing for awkward come-ons when he/she drops his/her hat and you get it for him/her.
/obj/item/clothing/head/syndicatefake
- name = "red space-helmet replica"
- icon_state = "syndicate"
- item_state = "syndicate"
+ name = "black and red space-helmet replica"
+ icon_state = "syndicate-helm-black-red"
+ item_state = "syndicate-helm-black-red"
desc = "A plastic replica of a syndicate agent's space helmet, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index b3a83a9dc20..6461a41c688 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -112,9 +112,9 @@
/obj/item/clothing/suit/syndicatefake
- name = "red space suit replica"
- icon_state = "syndicate"
- item_state = "space_suit_syndicate"
+ name = "black and red space suit replica"
+ icon_state = "syndicate-black-red"
+ item_state = "syndicate-black-red"
desc = "A plastic replica of the syndicate space suit, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
w_class = 3
flags = FPRINT | TABLEPASS
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 3ab8d34b3ff..7b8084d7c1a 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1336,6 +1336,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
O.process_hud(src)
if(!druggy)
see_invisible = SEE_INVISIBLE_LIVING
+ if(istype(O,/obj/item/clothing/glasses/hud/security/night) || istype(O,/obj/item/clothing/glasses/hud/health/night))
+ see_invisible = SEE_INVISIBLE_MINIMUM
else if(!seer)
see_in_dark = species.darksight
see_invisible = SEE_INVISIBLE_LIVING
diff --git a/icons/BadAss.dmi b/icons/BadAss.dmi
new file mode 100644
index 00000000000..fcf27d53e60
Binary files /dev/null and b/icons/BadAss.dmi differ