//Items for nuke theft, supermatter theft traitor objective // STEALING THE NUKE //the nuke core - objective item /obj/item/nuke_core name = "plutonium core" desc = "Extremely radioactive. Wear goggles." icon = 'icons/obj/nuke_tools.dmi' icon_state = "plutonium_core" inhand_icon_state = "plutoniumcore" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/pulse = 0 var/cooldown = 0 var/pulseicon = "plutonium_core_pulse" /obj/item/nuke_core/Initialize() . = ..() START_PROCESSING(SSobj, src) /obj/item/nuke_core/Destroy() STOP_PROCESSING(SSobj, src) return ..() /obj/item/nuke_core/attackby(obj/item/nuke_core_container/container, mob/user) if(istype(container)) container.load(src, user) else return ..() /obj/item/nuke_core/process() if(cooldown < world.time - 60) cooldown = world.time flick(pulseicon, src) radiation_pulse(src, 400, 2) /obj/item/nuke_core/suicide_act(mob/user) user.visible_message("[user] is rubbing [src] against [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!") return (TOXLOSS) //nuke core box, for carrying the core /obj/item/nuke_core_container name = "nuke core container" desc = "Solid container for radioactive objects." icon = 'icons/obj/nuke_tools.dmi' icon_state = "core_container_empty" inhand_icon_state = "tile" lefthand_file = 'icons/mob/inhands/misc/tiles_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/tiles_righthand.dmi' var/obj/item/nuke_core/core /obj/item/nuke_core_container/Destroy() QDEL_NULL(core) return ..() /obj/item/nuke_core_container/proc/load(obj/item/nuke_core/ncore, mob/user) if(core || !istype(ncore)) return FALSE ncore.forceMove(src) core = ncore icon_state = "core_container_loaded" to_chat(user, "Container is sealing...") addtimer(CALLBACK(src, .proc/seal), 50) return TRUE /obj/item/nuke_core_container/proc/seal() if(istype(core)) STOP_PROCESSING(SSobj, core) icon_state = "core_container_sealed" playsound(src, 'sound/items/deconstruct.ogg', 60, TRUE) if(ismob(loc)) to_chat(loc, "[src] is permanently sealed, [core]'s radiation is contained.") /obj/item/nuke_core_container/attackby(obj/item/nuke_core/core, mob/user) if(istype(core)) if(!user.temporarilyRemoveItemFromInventory(core)) to_chat(user, "The [core] is stuck to your hand!") return else load(core, user) else return ..() //snowflake screwdriver, works as a key to start nuke theft, traitor only /obj/item/screwdriver/nuke name = "screwdriver" desc = "A screwdriver with an ultra thin tip that's carefully designed to boost screwing speed." icon = 'icons/obj/nuke_tools.dmi' icon_state = "screwdriver_nuke" inhand_icon_state = "screwdriver_nuke" toolspeed = 0.5 random_color = FALSE /obj/item/paper/guides/antag/nuke_instructions info = "How to break into a Nanotrasen self-destruct terminal and remove its plutonium core:
\ " // STEALING SUPERMATTER /obj/item/paper/guides/antag/supermatter_sliver info = "How to safely extract a supermatter sliver:
\ " /obj/item/nuke_core/supermatter_sliver name = "supermatter sliver" desc = "A tiny, highly volatile sliver of a supermatter crystal. Do not handle without protection!" icon_state = "supermatter_sliver" inhand_icon_state = "supermattersliver" pulseicon = "supermatter_sliver_pulse" /obj/item/nuke_core/supermatter_sliver/attack_tk(mob/user) // no TK dusting memes return /obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes return FALSE /obj/item/nuke_core/supermatter_sliver/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/hemostat/supermatter)) var/obj/item/hemostat/supermatter/tongs = W if (tongs.sliver) to_chat(user, "\The [tongs] is already holding a supermatter sliver!") return FALSE forceMove(tongs) tongs.sliver = src tongs.update_appearance() to_chat(user, "You carefully pick up [src] with [tongs].") else if(istype(W, /obj/item/scalpel/supermatter) || istype(W, /obj/item/nuke_core_container/supermatter/)) // we don't want it to dust return else to_chat(user, "As it touches \the [src], both \the [src] and \the [W] burst into dust!") radiation_pulse(user, 100) playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) qdel(W) qdel(src) /obj/item/nuke_core/supermatter_sliver/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(!isliving(hit_atom)) return ..() var/mob/living/victim = hit_atom if(victim.incorporeal_move || victim.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions return ..() if(throwingdatum?.thrower) var/mob/user = throwingdatum.thrower log_combat(throwingdatum?.thrower, hit_atom, "consumed", src) message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)], thrown by [key_name_admin(user)].") investigate_log("has consumed [key_name(victim)], thrown by [key_name(user)]", INVESTIGATE_SUPERMATTER) else message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)] via throw impact.") investigate_log("has consumed [key_name(victim)] via throw impact.", INVESTIGATE_SUPERMATTER) victim.visible_message("As [victim] is hit by [src], both flash into dust and silence fills the room...",\ "You're hit by [src] and everything suddenly goes silent.\n[src] flashes into dust, and soon as you can register this, you do as well.",\ "Everything suddenly goes silent.") victim.dust() radiation_pulse(src, 500, 2) playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) qdel(src) /obj/item/nuke_core/supermatter_sliver/pickup(mob/living/user) ..() if(!isliving(user) || user.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions return FALSE user.visible_message("[user] reaches out and tries to pick up [src]. [user.p_their()] body starts to glow and bursts into flames before flashing into dust!",\ "You reach for [src] with your hands. That was dumb.",\ "Everything suddenly goes silent.") radiation_pulse(user, 500, 2) playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) user.dust() /obj/item/nuke_core_container/supermatter name = "supermatter bin" desc = "A tiny receptacle that releases an inert hyper-noblium mix upon sealing, allowing a sliver of a supermatter crystal to be safely stored." var/obj/item/nuke_core/supermatter_sliver/sliver /obj/item/nuke_core_container/supermatter/Destroy() QDEL_NULL(sliver) return ..() /obj/item/nuke_core_container/supermatter/load(obj/item/hemostat/supermatter/T, mob/user) if(!istype(T) || !T.sliver) return FALSE T.sliver.forceMove(src) sliver = T.sliver T.sliver = null T.icon_state = "supermatter_tongs" icon_state = "core_container_loaded" to_chat(user, "Container is sealing...") addtimer(CALLBACK(src, .proc/seal), 50) return TRUE /obj/item/nuke_core_container/supermatter/seal() if(istype(sliver)) STOP_PROCESSING(SSobj, sliver) icon_state = "core_container_sealed" playsound(src, 'sound/items/Deconstruct.ogg', 60, TRUE) if(ismob(loc)) to_chat(loc, "[src] is permanently sealed, [sliver] is safely contained.") /obj/item/nuke_core_container/supermatter/attackby(obj/item/hemostat/supermatter/tongs, mob/user) if(istype(tongs)) //try to load shard into core load(tongs, user) else return ..() /obj/item/scalpel/supermatter name = "supermatter scalpel" desc = "A scalpel with a fragile tip of condensed hyper-noblium gas, searingly cold to the touch, that can safely shave a sliver off a supermatter crystal." icon = 'icons/obj/nuke_tools.dmi' icon_state = "supermatter_scalpel" toolspeed = 0.5 damtype = BURN usesound = 'sound/weapons/bladeslice.ogg' var/usesLeft /obj/item/scalpel/supermatter/Initialize() . = ..() usesLeft = rand(2, 4) /obj/item/hemostat/supermatter name = "supermatter extraction tongs" desc = "A pair of tongs made from condensed hyper-noblium gas, searingly cold to the touch, that can safely grip a supermatter sliver." icon = 'icons/obj/nuke_tools.dmi' icon_state = "supermatter_tongs" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' inhand_icon_state = "supermatter_tongs" toolspeed = 0.75 damtype = BURN var/obj/item/nuke_core/supermatter_sliver/sliver /obj/item/hemostat/supermatter/Destroy() QDEL_NULL(sliver) return ..() /obj/item/hemostat/supermatter/update_icon_state() icon_state = "supermatter_tongs[sliver ? "_loaded" : null]" inhand_icon_state = "supermatter_tongs[sliver ? "_loaded" : null]" return ..() /obj/item/hemostat/supermatter/afterattack(atom/O, mob/user, proximity) . = ..() if(!sliver) return if(proximity && ismovable(O) && O != sliver) Consume(O, user) /obj/item/hemostat/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // no instakill supermatter javelins if(sliver) sliver.forceMove(loc) visible_message("\The [sliver] falls out of \the [src] as it hits the ground.") sliver = null update_appearance() return ..() /obj/item/hemostat/supermatter/proc/Consume(atom/movable/AM, mob/living/user) if(ismob(AM)) if(!isliving(AM)) return var/mob/living/victim = AM if(victim.incorporeal_move || victim.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions return victim.dust() message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)].") investigate_log("has consumed [key_name(victim)].", INVESTIGATE_SUPERMATTER) else if(istype(AM, /obj/singularity)) return else investigate_log("has consumed [AM].", INVESTIGATE_SUPERMATTER) qdel(AM) if (user) log_combat(user, AM, "consumed", sliver, "via [src]") user.visible_message("As [user] touches [AM] with \the [src], both flash into dust and silence fills the room...",\ "You touch [AM] with [src], and everything suddenly goes silent.\n[AM] and [sliver] flash into dust, and soon as you can register this, you do as well.",\ "Everything suddenly goes silent.") user.dust() radiation_pulse(src, 500, 2) playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) QDEL_NULL(sliver) update_appearance()