diff --git a/code/game/communications.dm b/code/game/communications.dm
index 0608c47f703..aac6202bc16 100644
--- a/code/game/communications.dm
+++ b/code/game/communications.dm
@@ -113,6 +113,7 @@ var/list/radiochannels = list(
var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1349,1347)
var/const/COMM_FREQ = 1353 //command, colored gold in chat window
var/const/SYND_FREQ = 1213
+var/NUKE_FREQ = 1199 //Never accessable except on nuke rounds.
#define TRANSMISSION_WIRE 0
#define TRANSMISSION_RADIO 1
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 2318c4a6d7d..9795c495b66 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -6,7 +6,7 @@
name = "nuclear emergency"
config_tag = "nuclear"
required_players = 3
- required_enemies = 3
+ required_enemies = 2
var/const/agents_possible = 5 //If we ever need more syndicate agents.
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
@@ -110,6 +110,9 @@
var/nuke_code = "[rand(10000, 99999)]"
var/leader_selected = 0
+ var/freq = random_radio_frequency()
+ radiochannels += list("Nuclear" = freq)
+ NUKE_FREQ = freq
//var/agent_number = 1
for(var/datum/mind/synd_mind in syndicates)
@@ -126,7 +129,7 @@
//synd_mind.current.real_name = "[syndicate_name()] Operative #[agent_number]"
//agent_number++
- equip_syndicate(synd_mind.current)
+ equip_syndicate(synd_mind.current,freq)
update_synd_icons_added(synd_mind)
update_all_synd_icons()
@@ -182,7 +185,7 @@
P.loc = H.loc
else
- nuke_code = "code will be proveded later"
+ nuke_code = "code will be provided later"
synd_mind.current << "Nuclear Explosives 101:\n\tHello and thank you for choosing the Syndicate for your nuclear information needs.\nToday's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.\nFirst and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.\nPressing any button on the compacted bomb will cause it to extend and bolt itself into place.\nIf this is done to unbolt it one must compeltely log in which at this time may not be possible.\nTo make the device functional:\n1. Place bomb in designated detonation zone\n2. Extend and anchor bomb (attack with hand).\n3. Insert Nuclear Auth. Disk into slot.\n4. Type numeric code into keypad ([nuke_code]).\n\tNote: If you make a mistake press R to reset the device.\n5. Press the E button to log onto the device\nYou now have activated the device. To deactivate the buttons at anytime for example when\nyou've already prepped the bomb for detonation remove the auth disk OR press the R ont he keypad.\nNow the bomb CAN ONLY be detonated using the timer. A manual det. is not an option.\n\tNote: Nanotrasen is a pain in the neck.\nToggle off the SAFETY.\n\tNote: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step\nSo use the - - and + + to set a det time between 5 seconds and 10 minutes.\nThen press the timer toggle button to start the countdown.\nNow remove the auth. disk so that the buttons deactivate.\n\tNote: THE BOMB IS STILL SET AND WILL DETONATE\nNow before you remove the disk if you need to move the bomb you can:\nToggle off the anchor, move it, and re-anchor.\n\nGood luck. Remember the order:\nDisk, Code, Safety, Timer, Disk, RUN!\nIntelligence Analysts believe that they are hiding the disk in the bridge. Your space ship will not leave until the bomb is armed and timing.\nGood luck!"
return
@@ -204,16 +207,17 @@
/datum/game_mode/proc/random_radio_frequency()
- return 1337
-
-
-/datum/game_mode/proc/equip_syndicate(mob/living/carbon/human/synd_mob)
- var/radio_freq = random_radio_frequency()
+ var/tempfreq = 1459
+ do
+ tempfreq = rand(1400,1600)
+ while(tempfreq in radiochannels || (tempfreq > 1441 && tempfreq < 1489))
+ return tempfreq
+/datum/game_mode/proc/equip_syndicate(mob/living/carbon/human/synd_mob,radio_freq)
var/obj/item/device/radio/R = new /obj/item/device/radio/headset(synd_mob)
R.set_frequency(radio_freq)
+ R.freerange = 1
synd_mob.equip_if_possible(R, synd_mob.slot_ears)
-
synd_mob.equip_if_possible(new /obj/item/clothing/under/syndicate(synd_mob), synd_mob.slot_w_uniform)
synd_mob.equip_if_possible(new /obj/item/clothing/shoes/black(synd_mob), synd_mob.slot_shoes)
synd_mob.equip_if_possible(new /obj/item/clothing/suit/armor/vest(synd_mob), synd_mob.slot_wear_suit)
@@ -225,9 +229,10 @@
synd_mob.equip_if_possible(new /obj/item/ammo_magazine/a12mm(synd_mob), synd_mob.slot_in_backpack)
synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack)
synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), synd_mob.slot_belt)
- var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(synd_mob)
+ var/obj/item/weapon/implant/dexplosive/E = new/obj/item/weapon/implant/dexplosive(synd_mob)
E.imp_in = synd_mob
E.implanted = 1
+
return 1
diff --git a/code/game/objects/devices/PDA/uplink.dm b/code/game/objects/devices/PDA/uplink.dm
index 6c77009d990..7186c52d2e8 100644
--- a/code/game/objects/devices/PDA/uplink.dm
+++ b/code/game/objects/devices/PDA/uplink.dm
@@ -49,6 +49,7 @@
//When given the choice, people have been P2W
menu_message += "Sleepy Pen (4)
" //Terrible -Pete.
menu_message += "
"
+ menu_message += "Explosive Implant (with injector) (6)
"
menu_message += "Detomatix Cartridge (3)
"
menu_message += "Plastic Explosives (2)
"
menu_message += "Power Sink (5)
"
@@ -144,6 +145,13 @@
uses -= 10
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda))
O.imp = new /obj/item/weapon/implant/uplink(O)
+ if("imp_exp")
+ if (src.uses >= 6)
+ src.uses -= 6
+ var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda))
+ O.imp = new /obj/item/weapon/implant/explosive(O)
+ O.name = "(BIO-HAZARD) BIO-detpack"
+ O.update()
if("sleepypen")
if (uses >= 4)
uses -= 4
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 106106d1b96..ff360919317 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -6,12 +6,12 @@
/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/))
+ if (istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || ismob(target))
return
user << "Planting explosives..."
- if(ismob(target))
+/* if(ismob(target))
user.attack_log += "\[[time_stamp()]\] [user.real_name] tried planting [name] on [target:real_name] ([target:ckey])"
- user.visible_message("\red [user.name] is trying to plant some kind of explosive on [target.name]!")
+ 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()
target = target
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index 010711a0769..b52cde554a0 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -45,8 +45,9 @@
implanted(mob/source as mob)
- source.mind.store_memory("Uplink implant can be activated by using the [activation_emote] emote, say *[activation_emote] to attempt to activate.", 0, 0)
- source << "The implanted uplink implant can be activated by using the [activation_emote] emote, say *[activation_emote] to attempt to activate."
+ activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
+ source.mind.store_memory("Uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0)
+ source << "The implanted uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate."
return
@@ -82,11 +83,15 @@ Implant Specifics:
"}
return dat
-
-/obj/item/weapon/implant/explosive
+//Nuke Agent Explosive
+/obj/item/weapon/implant/dexplosive
name = "explosive"
desc = "And boom goes the weasel."
+ var/activation_emote = "deathgasp"
+ var/coded = 0
+ New()
+ verbs += /obj/item/weapon/implant/dexplosive/proc/set_emote
get_data()
var/dat = {"
@@ -103,7 +108,7 @@ Implant Specifics:
"}
trigger(emote, source as mob)
- if(emote == "deathgasp")
+ if(emote == activation_emote)
src.activate("death")
return
@@ -114,6 +119,20 @@ Implant Specifics:
"}
if(src.imp_in)
src.imp_in.gib()
+ proc/set_emote()
+ set name = "Set Emote"
+ set category = "Object"
+ set src in usr
+ if(coded != 0)
+ usr << "You've already set up your implant!"
+ return
+ activation_emote = input("Choose activation emote:") in list("deathgasp","blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
+ usr.mind.store_memory("Explosive implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0)
+ usr << "The implanted explosive implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate."
+ coded = 1
+ verbs -= /obj/item/weapon/implant/dexplosive/proc/set_emote
+ return
+
/obj/item/weapon/implant/chem
@@ -195,3 +214,40 @@ the implant may become unstable and either pre-maturely inject the subject or si
ticker.mode:remove_revolutionary(H.mind)
H << "\blue You feel a surge of loyalty towards NanoTrasen."
return
+
+
+//BS12 Explosive
+/obj/item/weapon/implant/explosive
+ name = "explosive"
+ desc = "And boom goes the weasel."
+ var/phrase = "die"
+
+
+ get_data()
+ var/dat = {"
+Implant Specifications:
+Name: Robust Corp RX-78 Intimidation Class Implant
+Life: Activates upon codephrase.
+Important Notes: Explodes
+