mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-27 18:12:00 +00:00
* holosign little refractor (#54287) * holosign little refractor Co-authored-by: Ghilker <42839747+Ghilker@users.noreply.github.com>
134 lines
4.7 KiB
Plaintext
134 lines
4.7 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"
|
|
inhand_icon_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
|
|
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, proximity_flag)
|
|
. = ..()
|
|
if(!proximity_flag)
|
|
return
|
|
if(!check_allowed_items(target, not_inside = TRUE))
|
|
return
|
|
var/turf/target_turf = get_turf(target)
|
|
var/obj/structure/holosign/target_holosign = locate(holosign_type) in target_turf
|
|
if(target_holosign)
|
|
to_chat(user, "<span class='notice'>You use [src] to deactivate [target_holosign].</span>")
|
|
qdel(target_holosign)
|
|
return
|
|
if(target_turf.is_blocked_turf(TRUE)) //can't put holograms on a tile that has dense stuff
|
|
return
|
|
if(holocreator_busy)
|
|
to_chat(user, "<span class='notice'>[src] is busy creating a hologram.</span>")
|
|
return
|
|
if(LAZYLEN(signs) >= max_signs)
|
|
to_chat(user, "<span class='notice'>[src] is projecting at max capacity!</span>")
|
|
return
|
|
playsound(loc, 'sound/machines/click.ogg', 20, TRUE)
|
|
if(creation_time)
|
|
holocreator_busy = TRUE
|
|
if(!do_after(user, creation_time, target = target))
|
|
holocreator_busy = FALSE
|
|
return
|
|
holocreator_busy = FALSE
|
|
if(LAZYLEN(signs) >= max_signs)
|
|
return
|
|
if(target_turf.is_blocked_turf(TRUE)) //don't try to sneak dense stuff on our tile during the wait.
|
|
return
|
|
target_holosign = new holosign_type(get_turf(target), src)
|
|
to_chat(user, "<span class='notice'>You create \a [target_holosign] with [src].</span>")
|
|
|
|
/obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user)
|
|
return
|
|
|
|
/obj/item/holosign_creator/attack_self(mob/user)
|
|
if(LAZYLEN(signs))
|
|
for(var/H in signs)
|
|
qdel(H)
|
|
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
|
|
|
|
/obj/item/holosign_creator/janibarrier
|
|
name = "custodial holobarrier projector"
|
|
desc = "A holographic projector that creates hard light wet floor barriers."
|
|
holosign_type = /obj/structure/holosign/barrier/wetsign
|
|
creation_time = 20
|
|
max_signs = 12
|
|
|
|
/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_atmos"
|
|
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
|
|
for(var/sign in signs)
|
|
qdel(sign)
|
|
shock = 0
|
|
return
|
|
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
|
|
for(var/sign in signs)
|
|
qdel(sign)
|
|
shock = 1
|
|
return
|
|
for(var/sign in signs)
|
|
qdel(sign)
|
|
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
|