diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 31a72c2a65c..fe46f4e01b3 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -398,6 +398,13 @@ var/list/uplink_items = list() cost = 5 excludefrom = list(/datum/game_mode/traitor/double_agents) +/datum/uplink_item/device_tools/rad_laser + name = "Radioactive Microlaser" + desc = "A radioactive microlaser disguised as a standard Nanotrasen health analyzer. When used, it emits a powerful burst of radiation, which, after a short delay, can incapitate all but the most protected of humanoids. \ + It has two settings: intensity, which controls the power of the radiation, and wavelength, which controls how long the radiation delay is." + item = /obj/item/device/rad_laser + cost = 4 + /datum/uplink_item/device_tools/syndicate_detonator name = "Syndicate Detonator" desc = "The Syndicate Detonator is a companion device to the Syndicate Bomb. Simply press the included button and an encrypted radio frequency will instruct all live syndicate bombs to detonate. \ diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 695fd3105aa..eb5a33d17d3 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -4,6 +4,7 @@ Miscellaneous traitor devices BATTERER +RADIOACTIVE MICROLASER */ @@ -56,6 +57,90 @@ effective or pretty fucking useless. if(times_used >= max_uses) icon_state = "battererburnt" +/* + The radioactive microlaser, a device disguised as a health analyzer used to irradiate people. + The strength of the radiation is determined by the 'intensity' setting, while the delay between + the scan and the irradiation kicking in is determined by the wavelength. + Each scan will cause the microlaser to have a brief cooldown period. Higher intensity will increase + the cooldown, while higher wavelength will decrease it. + Wavelength is also slightly increased by the intensity as well. +*/ + +/obj/item/device/rad_laser + name = "health analyzer" + icon_state = "health" + item_state = "analyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject. A strange microlaser is hooked on to the scanning end." + flags = CONDUCT + slot_flags = SLOT_BELT + throwforce = 3 + w_class = 1.0 + throw_speed = 3 + throw_range = 7 + m_amt = 400 + origin_tech = "magnets=3;biotech=5;syndicate=3" + var/intensity = 5 // how much damage the radiation does + var/wavelength = 10 // time it takes for the radiation to kick in, in seconds + var/used = 0 // is it cooling down? + +/obj/item/device/rad_laser/attack(mob/living/M as mob, mob/living/user as mob) + if(!used) + ..() + user.visible_message(text("[] has analyzed []'s vitals.", user, M)) + var/cooldown = round(max(100,(((intensity*8)-(wavelength/2))+(intensity*2))*10)) + used = 1 + icon_state = "health1" + handle_cooldown(cooldown) // splits off to handle the cooldown while handling wavelength + spawn((wavelength+(intensity*4))*10) + if(M) + if(intensity >= 5) + M.apply_effect(round(intensity/1.5), PARALYZE) + M.apply_effect(intensity*10, IRRADIATE) + else + user << "The radioactive microlaser is still recharging." + +/obj/item/device/rad_laser/proc/handle_cooldown(var/cooldown) + spawn(cooldown) + used = 0 + icon_state = "health" + +/obj/item/device/rad_laser/attack_self(mob/user as mob) + ..() + interact(user) + +/obj/item/device/rad_laser/interact(mob/user as mob) + user.set_machine(src) + + var/cooldown = round(max(10,((intensity*8)-(wavelength/2))+(intensity*2))) + var/dat = {" + Radiation Intensity: -- [intensity] ++
+ Radiation Wavelength: -- [(wavelength+(intensity*4))] ++
+ Laser Cooldown: [cooldown] Seconds
+ "} + + var/datum/browser/popup = new(user, "radlaser", "Radioactive Microlaser Interface", 400, 240) + popup.set_content(dat) + popup.open() + +/obj/item/device/rad_laser/Topic(href, href_list) + if(!usr.canUseTopic(src)) + return 1 + + usr.set_machine(src) + + if(href_list["radint"]) + var/amount = text2num(href_list["radint"]) + amount += intensity + intensity = max(1,(min(10,amount))) + + else if(href_list["radwav"]) + var/amount = text2num(href_list["radwav"]) + amount += wavelength + wavelength = max(1,(min(120,amount))) + + updateUsrDialog() + add_fingerprint(usr) + return \ No newline at end of file diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 1e3090a1c63..db879f05ce4 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ