Merge pull request #5038 from Citadel-Station-13/upstream-merge-34466
[MIRROR] Fake nuclear disks are even more convincing
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -73,6 +73,9 @@
|
||||
difficulty = 5
|
||||
excludefromjob = list("Captain")
|
||||
|
||||
/datum/objective_item/steal/nukedisc/check_special_completion(obj/item/disk/nuclear/N)
|
||||
return !N.fake
|
||||
|
||||
/datum/objective_item/steal/reflector
|
||||
name = "a reflector vest."
|
||||
targetitem = /obj/item/clothing/suit/armor/laserproof
|
||||
|
||||
Reference in New Issue
Block a user