mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-10 08:54:15 +00:00
Adds a simple way to quarantine individuals but doesn't make it roundstart, as it has potential to make 2 antags have a very difficult time: Bad virologists and (mainly) sentient diseases. Uses a sliver of silver because of this. It uses the exact same proc as the MEDHUD, so it CAN be countered by buffing stealth. Virologists can also activate the free-access so long as they do it while not infected with anything bad. That said, it has a build delay and is relatively easy to destroy. Think of it as a more obvious visual for people without huds to know "hey, I should probably avoid everyone else until I get better" and not necessarily an actual barrier device. sprites edited by me if you like them, by someone else if you don't!
134 lines
4.5 KiB
Plaintext
134 lines
4.5 KiB
Plaintext
/obj/item/holosign_creator
|
|
name = "holographic sign projector"
|
|
desc = "A handy-dandy holographic projector that displays a janitorial sign."
|
|
icon = 'icons/obj/device.dmi'
|
|
icon_state = "signmaker"
|
|
item_state = "electronic"
|
|
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
|
force = 0
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
throwforce = 0
|
|
throw_speed = 3
|
|
throw_range = 7
|
|
item_flags = NOBLUDGEON
|
|
var/list/signs = list()
|
|
var/max_signs = 10
|
|
var/creation_time = 0 //time to create a holosign in deciseconds.
|
|
var/holosign_type = /obj/structure/holosign/wetsign
|
|
var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once
|
|
|
|
/obj/item/holosign_creator/afterattack(atom/target, mob/user, flag)
|
|
. = ..()
|
|
if(flag)
|
|
if(!check_allowed_items(target, 1))
|
|
return
|
|
var/turf/T = get_turf(target)
|
|
var/obj/structure/holosign/H = locate(holosign_type) in T
|
|
if(H)
|
|
to_chat(user, "<span class='notice'>You use [src] to deactivate [H].</span>")
|
|
qdel(H)
|
|
else
|
|
if(!is_blocked_turf(T, TRUE)) //can't put holograms on a tile that has dense stuff
|
|
if(holocreator_busy)
|
|
to_chat(user, "<span class='notice'>[src] is busy creating a hologram.</span>")
|
|
return
|
|
if(signs.len < max_signs)
|
|
playsound(src.loc, 'sound/machines/click.ogg', 20, 1)
|
|
if(creation_time)
|
|
holocreator_busy = TRUE
|
|
if(!do_after(user, creation_time, target = target))
|
|
holocreator_busy = FALSE
|
|
return
|
|
holocreator_busy = FALSE
|
|
if(signs.len >= max_signs)
|
|
return
|
|
if(is_blocked_turf(T, TRUE)) //don't try to sneak dense stuff on our tile during the wait.
|
|
return
|
|
H = new holosign_type(get_turf(target), src)
|
|
to_chat(user, "<span class='notice'>You create \a [H] with [src].</span>")
|
|
else
|
|
to_chat(user, "<span class='notice'>[src] is projecting at max capacity!</span>")
|
|
|
|
/obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user)
|
|
return
|
|
|
|
/obj/item/holosign_creator/attack_self(mob/user)
|
|
if(signs.len)
|
|
for(var/H in signs)
|
|
qdel(H)
|
|
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
|
|
|
|
|
|
/obj/item/holosign_creator/security
|
|
name = "security holobarrier projector"
|
|
desc = "A holographic projector that creates holographic security barriers."
|
|
icon_state = "signmaker_sec"
|
|
holosign_type = /obj/structure/holosign/barrier
|
|
creation_time = 30
|
|
max_signs = 6
|
|
|
|
/obj/item/holosign_creator/engineering
|
|
name = "engineering holobarrier projector"
|
|
desc = "A holographic projector that creates holographic engineering barriers."
|
|
icon_state = "signmaker_engi"
|
|
holosign_type = /obj/structure/holosign/barrier/engineering
|
|
creation_time = 30
|
|
max_signs = 6
|
|
|
|
/obj/item/holosign_creator/atmos
|
|
name = "ATMOS holofan projector"
|
|
desc = "A holographic projector that creates holographic barriers that prevent changes in atmosphere conditions."
|
|
icon_state = "signmaker_engi"
|
|
holosign_type = /obj/structure/holosign/barrier/atmos
|
|
creation_time = 0
|
|
max_signs = 3
|
|
|
|
/obj/item/holosign_creator/medical
|
|
name = "\improper PENLITE barrier projector"
|
|
desc = "A holographic projector that creates PENLITE holobarriers. Useful during quarantines since they halt those with malicious diseases."
|
|
icon_state = "signmaker_med"
|
|
holosign_type = /obj/structure/holosign/barrier/medical
|
|
creation_time = 30
|
|
max_signs = 3
|
|
|
|
/obj/item/holosign_creator/cyborg
|
|
name = "Energy Barrier Projector"
|
|
desc = "A holographic projector that creates fragile energy fields."
|
|
creation_time = 15
|
|
max_signs = 9
|
|
holosign_type = /obj/structure/holosign/barrier/cyborg
|
|
var/shock = 0
|
|
|
|
/obj/item/holosign_creator/cyborg/attack_self(mob/user)
|
|
if(iscyborg(user))
|
|
var/mob/living/silicon/robot/R = user
|
|
|
|
if(shock)
|
|
to_chat(user, "<span class='notice'>You clear all active holograms, and reset your projector to normal.</span>")
|
|
holosign_type = /obj/structure/holosign/barrier/cyborg
|
|
creation_time = 5
|
|
if(signs.len)
|
|
for(var/H in signs)
|
|
qdel(H)
|
|
shock = 0
|
|
return
|
|
else if(R.emagged&&!shock)
|
|
to_chat(user, "<span class='warning'>You clear all active holograms, and overload your energy projector!</span>")
|
|
holosign_type = /obj/structure/holosign/barrier/cyborg/hacked
|
|
creation_time = 30
|
|
if(signs.len)
|
|
for(var/H in signs)
|
|
qdel(H)
|
|
shock = 1
|
|
return
|
|
else
|
|
if(signs.len)
|
|
for(var/H in signs)
|
|
qdel(H)
|
|
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
|
|
if(signs.len)
|
|
for(var/H in signs)
|
|
qdel(H)
|
|
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
|