|
|
|
@@ -79,17 +79,8 @@
|
|
|
|
|
anchored = TRUE //stops it being moved
|
|
|
|
|
|
|
|
|
|
/obj/machinery/nuclearbomb/syndicate
|
|
|
|
|
datum_flags = DF_USE_TAG
|
|
|
|
|
//ui_style = "syndicate" // actually the nuke op bomb is a stole nt bomb
|
|
|
|
|
|
|
|
|
|
/obj/machinery/nuclearbomb/syndicate/GenerateTag()
|
|
|
|
|
var/obj/machinery/nuclearbomb/existing = locate("syndienuke") in GLOB.nuke_list
|
|
|
|
|
if(existing)
|
|
|
|
|
stack_trace("Attempted to spawn a syndicate nuke while one already exists at [COORD(existing.loc)]")
|
|
|
|
|
datum_flags &= ~DF_USE_TAG
|
|
|
|
|
return
|
|
|
|
|
tag = "syndienuke"
|
|
|
|
|
|
|
|
|
|
/obj/machinery/nuclearbomb/syndicate/get_cinematic_type(off_station)
|
|
|
|
|
var/datum/game_mode/nuclear/NM = SSticker.mode
|
|
|
|
|
switch(off_station)
|
|
|
|
@@ -104,8 +95,17 @@
|
|
|
|
|
return CINEMATIC_NUKE_FAR
|
|
|
|
|
return CINEMATIC_NUKE_FAR
|
|
|
|
|
|
|
|
|
|
/obj/machinery/nuclearbomb/proc/disk_check(obj/item/disk/nuclear/D)
|
|
|
|
|
if(D.fake)
|
|
|
|
|
say("Authentication failure; disk not recognised.")
|
|
|
|
|
return FALSE
|
|
|
|
|
else
|
|
|
|
|
return TRUE
|
|
|
|
|
|
|
|
|
|
/obj/machinery/nuclearbomb/attackby(obj/item/I, mob/user, params)
|
|
|
|
|
if (istype(I, /obj/item/disk/nuclear))
|
|
|
|
|
if(!disk_check(I))
|
|
|
|
|
return
|
|
|
|
|
if(!user.transferItemToLoc(I, src))
|
|
|
|
|
return
|
|
|
|
|
auth = I
|
|
|
|
@@ -313,7 +313,7 @@
|
|
|
|
|
if("insert_disk")
|
|
|
|
|
if(!auth)
|
|
|
|
|
var/obj/item/I = usr.is_holding_item_of_type(/obj/item/disk/nuclear)
|
|
|
|
|
if(I && usr.transferItemToLoc(I, src))
|
|
|
|
|
if(I && disk_check(I) && usr.transferItemToLoc(I, src))
|
|
|
|
|
auth = I
|
|
|
|
|
. = TRUE
|
|
|
|
|
if("keypad")
|
|
|
|
@@ -519,18 +519,37 @@ This is here to make the tiles around the station mininuke change when it's arme
|
|
|
|
|
name = "nuclear authentication disk"
|
|
|
|
|
desc = "Better keep this safe."
|
|
|
|
|
icon_state = "nucleardisk"
|
|
|
|
|
persistence_replacement = /obj/item/disk/fakenucleardisk
|
|
|
|
|
persistence_replacement = /obj/item/disk/nuclear/fake
|
|
|
|
|
max_integrity = 250
|
|
|
|
|
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100)
|
|
|
|
|
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
|
|
|
|
var/fake = FALSE
|
|
|
|
|
|
|
|
|
|
/obj/item/disk/nuclear/New()
|
|
|
|
|
..()
|
|
|
|
|
GLOB.poi_list |= src
|
|
|
|
|
set_stationloving(TRUE, inform_admins=TRUE)
|
|
|
|
|
/obj/item/disk/nuclear/Initialize()
|
|
|
|
|
. = ..()
|
|
|
|
|
var/tell_the_admins
|
|
|
|
|
// Only tell the admins if a REAL nuke disk is relocated
|
|
|
|
|
if(fake)
|
|
|
|
|
tell_the_admins = FALSE
|
|
|
|
|
else
|
|
|
|
|
GLOB.poi_list |= src
|
|
|
|
|
tell_the_admins = TRUE
|
|
|
|
|
|
|
|
|
|
set_stationloving(TRUE, inform_admins=tell_the_admins)
|
|
|
|
|
|
|
|
|
|
/obj/item/disk/nuclear/examine(mob/user)
|
|
|
|
|
. = ..()
|
|
|
|
|
if(!fake)
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
var/ghost = isobserver(user)
|
|
|
|
|
var/captain = user.mind && user.mind.assigned_role == "Captain"
|
|
|
|
|
var/nukie = user.mind && user.mind.has_antag_datum(/datum/antagonist/nukeop)
|
|
|
|
|
if(ghost || captain || nukie)
|
|
|
|
|
to_chat(user, "<span class='warning'>The serial numbers on [src] are incorrect.</span>")
|
|
|
|
|
|
|
|
|
|
/obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params)
|
|
|
|
|
if(istype(I, /obj/item/claymore/highlander))
|
|
|
|
|
if(istype(I, /obj/item/claymore/highlander) && !fake)
|
|
|
|
|
var/obj/item/claymore/highlander/H = I
|
|
|
|
|
if(H.nuke_disk)
|
|
|
|
|
to_chat(user, "<span class='notice'>Wait... what?</span>")
|
|
|
|
@@ -557,24 +576,11 @@ This is here to make the tiles around the station mininuke change when it's arme
|
|
|
|
|
addtimer(CALLBACK(src, .proc/manual_suicide, user), 101)
|
|
|
|
|
return MANUAL_SUICIDE
|
|
|
|
|
|
|
|
|
|
/obj/item/disk/proc/manual_suicide(mob/living/user)
|
|
|
|
|
/obj/item/disk/nuclear/proc/manual_suicide(mob/living/user)
|
|
|
|
|
user.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
|
|
|
|
|
user.visible_message("<span class='suicide'>[user] was destroyed by the nuclear blast!</span>")
|
|
|
|
|
user.adjustOxyLoss(200)
|
|
|
|
|
user.death(0)
|
|
|
|
|
|
|
|
|
|
/obj/item/disk/fakenucleardisk
|
|
|
|
|
name = "nuclear authentication disk"
|
|
|
|
|
desc = "Better keep this safe."
|
|
|
|
|
icon_state = "nucleardisk"
|
|
|
|
|
|
|
|
|
|
/obj/item/disk/fakenucleardisk/suicide_act(mob/user)
|
|
|
|
|
user.visible_message("<span class='suicide'>[user] is pretending to go delta! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
|
|
|
|
playsound(src, 'sound/machines/alarm.ogg', 30, -1, 1)
|
|
|
|
|
addtimer(CALLBACK(src, .proc/manual_suicide, user), 101)
|
|
|
|
|
return MANUAL_SUICIDE
|
|
|
|
|
|
|
|
|
|
/obj/item/disk/fakenucleardisk/examine(mob/user)
|
|
|
|
|
..()
|
|
|
|
|
if(Adjacent(user))
|
|
|
|
|
to_chat(user, "<span class='warning'>Wait, this is a fake!</span>")
|
|
|
|
|
/obj/item/disk/nuclear/fake
|
|
|
|
|
fake = TRUE
|
|
|
|
|