Merge pull request #5038 from Citadel-Station-13/upstream-merge-34466
[MIRROR] Fake nuclear disks are even more convincing
This commit is contained in:
@@ -7662,7 +7662,7 @@
|
||||
/obj/item/bikehorn/golden,
|
||||
/obj/item/ammo_box/a357,
|
||||
/obj/item/tank/internals/plasma/full,
|
||||
/obj/item/disk/fakenucleardisk,
|
||||
/obj/item/disk/nuclear/fake,
|
||||
/obj/item/ore/diamond,
|
||||
/obj/item/gun/energy/disabler,
|
||||
/turf/open/floor/plasteel/vault{
|
||||
@@ -50545,7 +50545,7 @@
|
||||
/area/library)
|
||||
"czp" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/disk/fakenucleardisk,
|
||||
/obj/item/disk/nuclear/fake,
|
||||
/obj/item/barcodescanner,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/library)
|
||||
|
||||
@@ -7657,7 +7657,7 @@
|
||||
/obj/item/bikehorn/golden,
|
||||
/obj/item/ammo_box/a357,
|
||||
/obj/item/tank/internals/plasma/full,
|
||||
/obj/item/disk/fakenucleardisk,
|
||||
/obj/item/disk/nuclear/fake,
|
||||
/obj/item/ore/diamond,
|
||||
/obj/item/gun/energy/disabler,
|
||||
/turf/open/floor/plasteel/vault{
|
||||
@@ -50503,7 +50503,7 @@
|
||||
/area/library)
|
||||
"czp" = (
|
||||
/obj/structure/table/wood,
|
||||
/obj/item/disk/fakenucleardisk,
|
||||
/obj/item/disk/nuclear/fake,
|
||||
/obj/item/barcodescanner,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/library)
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
/datum/antagonist/nukeop/proc/assign_nuke()
|
||||
if(nuke_team && !nuke_team.tracked_nuke)
|
||||
nuke_team.memorized_code = random_nukecode()
|
||||
var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list
|
||||
var/obj/machinery/nuclearbomb/syndicate/nuke = locate() in GLOB.nuke_list
|
||||
if(nuke)
|
||||
nuke_team.tracked_nuke = nuke
|
||||
if(nuke.r_code == "ADMIN")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -807,8 +807,8 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
|
||||
|
||||
/datum/uplink_item/stealthy_tools/fakenucleardisk
|
||||
name = "Decoy Nuclear Authentication Disk"
|
||||
desc = "It's just a normal disk. Visually it's identical to the real deal, but it won't hold up under closer scrutiny. Don't try to give this to us to complete your objective, we know better!"
|
||||
item = /obj/item/disk/fakenucleardisk
|
||||
desc = "It's just a normal disk. Visually it's identical to the real deal, but it won't hold up under closer scrutiny by the Captain. Don't try to give this to us to complete your objective, we know better!"
|
||||
item = /obj/item/disk/nuclear/fake
|
||||
cost = 1
|
||||
surplus = 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user