diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index a319e2d2c39..172daf92e1e 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -1266,6 +1266,7 @@ Total SMES charging rate should not exceed total power generation rate, or an ov var/uses = 10.0 var/selfdestruct = 0.0 var/traitor_frequency = 0.0 + var/mob/currentUser = null var/obj/item/device/radio/origradio = null flags = FPRINT | TABLEPASS | CONDUCT | ONBELT w_class = 2.0 diff --git a/code/game/objects/devices/PDA/uplink.dm b/code/game/objects/devices/PDA/uplink.dm index 8f1345e6300..15550991425 100644 --- a/code/game/objects/devices/PDA/uplink.dm +++ b/code/game/objects/devices/PDA/uplink.dm @@ -40,6 +40,7 @@ menu_message += "Voice-Changer (4)
" menu_message += "
" menu_message += "Freedom Implant (with injector) (3)
" + menu_message += "Uplink Implant (4 crystals inside) (10)
" menu_message += "Paralysis Pen (3)
" menu_message += "Sleepy Pen (5)
" menu_message += "
" @@ -121,6 +122,11 @@ uses -= 3 var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(get_turf(hostpda)) O.imp = new /obj/item/weapon/implant/freedom(O) + if("imp_uplink") + if (uses >= 10) + 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("sleepypen") if (uses >= 5) uses -= 5 @@ -170,7 +176,6 @@ if(uses >= 3) uses -= 3 new /obj/machinery/singularity_beacon/syndicate(get_turf(hostpda)) - if("toolbox") if(uses) uses-- @@ -190,4 +195,4 @@ if (hostpda.mode==1) hostpda.mode = 0 hostpda.updateDialog() - return + return \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants.dm b/code/game/objects/items/weapons/implants.dm index b7d0e6cb0dc..64d169d399d 100644 --- a/code/game/objects/items/weapons/implants.dm +++ b/code/game/objects/items/weapons/implants.dm @@ -310,3 +310,21 @@ the implant may become unstable and either pre-maturely inject the subject or si src.imp = null user.show_message("\red You implanted the implant into [M].") src.icon_state = "implanter0" + + +/obj/item/weapon/implant/uplink + var/activation_emote = "chuckle" + var/obj/item/weapon/syndicate_uplink/uplink = null + + New() + activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") + uplink = new /obj/item/weapon/syndicate_uplink/implanted(src) + ..() + + 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." + + trigger(emote, mob/source as mob) + if(emote == activation_emote) + uplink.attack_self(source) \ No newline at end of file diff --git a/code/game/objects/items/weapons/uplinks.dm b/code/game/objects/items/weapons/uplinks.dm index 5539954b521..020bd33eef0 100644 --- a/code/game/objects/items/weapons/uplinks.dm +++ b/code/game/objects/items/weapons/uplinks.dm @@ -3,6 +3,9 @@ CONTAINS: SYNDICATE UPLINK */ +/obj/item/weapon/syndicate_uplink/implanted + uses = 4 + /obj/item/weapon/syndicate_uplink/proc/explode() var/turf/location = get_turf(src.loc) if(location) @@ -15,6 +18,7 @@ SYNDICATE UPLINK return /obj/item/weapon/syndicate_uplink/attack_self(mob/user as mob) + currentUser = user user.machine = src var/dat if (src.selfdestruct) @@ -54,6 +58,8 @@ SYNDICATE UPLINK dat += "
" dat += "Binary Translator (3)
" dat += "Hacked AI Module (7)
" + dat += "
" + dat += "Syndicate Toolbox (Includes various tools) (1)
" dat += "
" if (src.origradio) @@ -66,13 +72,14 @@ SYNDICATE UPLINK /obj/item/weapon/syndicate_uplink/Topic(href, href_list) ..() - if (usr.stat || usr.restrained()) + if(!currentUser) return - var/mob/living/carbon/human/H = usr - if (!( istype(H, /mob/living/carbon/human))) - return 1 - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) - usr.machine = src + if (currentUser.stat || currentUser.restrained()) + return + if (!( istype(currentUser, /mob/living/carbon/human))) + return + if ((currentUser.contents.Find(src) || (in_range(src, currentUser) && istype(src.loc, /turf))) || istype(src,/obj/item/weapon/syndicate_uplink/implanted)) + currentUser.machine = src if (href_list["buy_item"]) switch(href_list["buy_item"]) if("revolver") @@ -127,7 +134,7 @@ SYNDICATE UPLINK if("cloak") if (src.uses >= 4) if (ticker.mode.config_tag!="nuclear" || \ - (input("Spawning a cloak in nuke is generally regarded as entirely dumb, are you sure?") in list("Confirm", "Abort")) == "Confirm" \ + (input(currentUser,"Spawning a cloak in nuke is generally regarded as entirely dumb, are you sure?") in list("Confirm", "Abort")) == "Confirm" \ ) if (src.uses >= 4) src.uses -= 4 @@ -161,6 +168,10 @@ SYNDICATE UPLINK if (src.uses >= 3) src.uses -= 3 new /obj/item/device/radio/headset/traitor(get_turf(src)) + if("toolbox") + if(uses) + uses-- + new /obj/item/weapon/storage/toolbox/syndicate(get_turf(src)) else if (href_list["lock"] && src.origradio) // presto chango, a regular radio again! (reset the freq too...) shutdown_uplink() diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index d24eabd1504..64c7fe8c0f2 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index b673729d61d..131a3591028 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ