Merge pull request #5038 from Citadel-Station-13/upstream-merge-34466

[MIRROR] Fake nuclear disks are even more convincing
This commit is contained in:
LetterJay
2018-01-25 13:41:02 -06:00
committed by GitHub
6 changed files with 48 additions and 39 deletions
+38 -32
View File
@@ -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
+3
View File
@@ -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