Files
Bubberstation/code/game/objects/structures/holosign.dm
SkyratBot 36ac91b093 [MIRROR] Engineering, janitor and medical holosign projector changes. Much faster, more capacity, less integrity. [MDB IGNORE] (#21542)
* Engineering, janitor and medical holosign projector changes. Much faster, more capacity, less integrity. (#75543)

## About The Pull Request
The engineering, janitor and medical holosign projectors can project
their holosigns in 1 second. The holosign integrity has been reduced to
1. Engineering max capacity increased to 12, medical to 6.
## Why It's Good For The Game
The long time to project made these projectors, especially the
engineering ones, impractical to use during an emergency that warrents
their usage. Medical capacity increase allows them to block off a
typical hallway, which could be used if there's a biohazard (60 gibbed
monkeys, or botanist). Engineering capacity increase is warrented due to
the nature of breaches and how large they can get.

The integrity reduction should help prevent them from being used to
Fortnite people.
## Changelog
🆑
balance: Engineering, janitor and medical holosign projector projection
time reduced to 1 second.
balance: Engineering, janitor, and medical holosign integrity reduced to
1.
balance: Engineering holosign projector max capacity increased to 12.
balance: Medical holosign projector max capacity increased to 6.
/🆑

* Engineering, janitor and medical holosign projector changes. Much faster, more capacity, less integrity.

---------

Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
2023-05-31 23:21:09 +12:00

233 lines
7.3 KiB
Plaintext

//holographic signs and barriers
/obj/structure/holosign
name = "holo sign"
icon = 'icons/effects/effects.dmi'
anchored = TRUE
max_integrity = 1
armor_type = /datum/armor/structure_holosign
// How can you freeze a trick of the light?
resistance_flags = FREEZE_PROOF
var/obj/item/holosign_creator/projector
var/use_vis_overlay = TRUE
/datum/armor/structure_holosign
bullet = 50
laser = 50
energy = 50
fire = 20
acid = 20
/obj/structure/holosign/Initialize(mapload, source_projector)
. = ..()
var/turf/our_turf = get_turf(src)
if(use_vis_overlay)
alpha = 0
SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE_UPPER, our_turf), dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
if(source_projector)
projector = source_projector
LAZYADD(projector.signs, src)
/obj/structure/holosign/Destroy()
if(projector)
LAZYREMOVE(projector.signs, src)
projector = null
return ..()
/obj/structure/holosign/attack_hand(mob/living/user, list/modifiers)
. = ..()
if(.)
return
attack_holosign(user, modifiers)
/obj/structure/holosign/proc/attack_holosign(mob/living/user, list/modifiers)
user.do_attack_animation(src, ATTACK_EFFECT_PUNCH)
user.changeNext_move(CLICK_CD_MELEE)
take_damage(5 , BRUTE, MELEE, 1)
/obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE)
if(BURN)
playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE)
/obj/structure/holosign/wetsign
name = "wet floor sign"
desc = "The words flicker as if they mean nothing."
icon = 'icons/effects/effects.dmi'
icon_state = "holosign"
/obj/structure/holosign/barrier
name = "holobarrier"
desc = "A short holographic barrier which can only be passed by walking."
icon_state = "holosign_sec"
pass_flags_self = PASSTABLE | PASSGRILLE | PASSGLASS | LETPASSTHROW
density = TRUE
max_integrity = 20
var/allow_walk = TRUE //can we pass through it on walk intent
/obj/structure/holosign/barrier/CanAllowThrough(atom/movable/mover, border_dir)
. = ..()
if(.)
return
if(iscarbon(mover))
var/mob/living/carbon/C = mover
if(C.stat) // Lets not prevent dragging unconscious/dead people.
return TRUE
if(allow_walk && C.m_intent == MOVE_INTENT_WALK)
return TRUE
/obj/structure/holosign/barrier/wetsign
name = "wet floor holobarrier"
desc = "When it says walk it means walk."
icon = 'icons/effects/effects.dmi'
icon_state = "holosign"
max_integrity = 1
/obj/structure/holosign/barrier/wetsign/CanAllowThrough(atom/movable/mover, border_dir)
. = ..()
if(iscarbon(mover))
var/mob/living/carbon/C = mover
if(C.stat) // Lets not prevent dragging unconscious/dead people.
return TRUE
if(allow_walk && C.m_intent != MOVE_INTENT_WALK)
return FALSE
/obj/structure/holosign/barrier/engineering
icon_state = "holosign_engi"
rad_insulation = RAD_LIGHT_INSULATION
max_integrity = 1
/obj/structure/holosign/barrier/atmos
name = "holofirelock"
desc = "A holographic barrier resembling a firelock. Though it does not prevent solid objects from passing through, gas is kept out."
icon_state = "holo_firelock"
density = FALSE
anchored = TRUE
can_atmos_pass = ATMOS_PASS_NO
alpha = 150
rad_insulation = RAD_LIGHT_INSULATION
resistance_flags = FIRE_PROOF | FREEZE_PROOF
/obj/structure/holosign/barrier/atmos/sturdy
name = "sturdy holofirelock"
max_integrity = 150
/obj/structure/holosign/barrier/atmos/tram
name = "tram atmos barrier"
max_integrity = 150
icon_state = "holo_tram"
/obj/structure/holosign/barrier/atmos/Initialize(mapload)
. = ..()
air_update_turf(TRUE, TRUE)
AddElement(/datum/element/trait_loc, TRAIT_FIREDOOR_STOP)
/obj/structure/holosign/barrier/atmos/block_superconductivity() //Didn't used to do this, but it's "normal", and will help ease heat flow transitions with the players.
return TRUE
/obj/structure/holosign/barrier/atmos/Destroy()
air_update_turf(TRUE, FALSE)
return ..()
/obj/structure/holosign/barrier/cyborg
name = "Energy Field"
desc = "A fragile energy field that blocks movement. Excels at blocking lethal projectiles."
density = TRUE
max_integrity = 10
allow_walk = FALSE
/obj/structure/holosign/barrier/cyborg/bullet_act(obj/projectile/P)
take_damage((P.damage / 5) , BRUTE, MELEE, 1) //Doesn't really matter what damage flag it is.
if(istype(P, /obj/projectile/energy/electrode))
take_damage(10, BRUTE, MELEE, 1) //Tasers aren't harmful.
if(istype(P, /obj/projectile/beam/disabler))
take_damage(5, BRUTE, MELEE, 1) //Disablers aren't harmful.
return BULLET_ACT_HIT
/obj/structure/holosign/barrier/medical
name = "\improper PENLITE holobarrier"
desc = "A holobarrier that uses biometrics to detect human viruses. Denies passing to personnel with easily-detected, malicious viruses. Good for quarantines."
icon_state = "holo_medical"
alpha = 125 //lazy :)
max_integrity = 1
var/force_allaccess = FALSE
var/buzzcd = 0
/obj/structure/holosign/barrier/medical/examine(mob/user)
. = ..()
. += span_notice("The biometric scanners are <b>[force_allaccess ? "off" : "on"]</b>.")
/obj/structure/holosign/barrier/medical/CanAllowThrough(atom/movable/mover, border_dir)
. = ..()
if(force_allaccess)
return TRUE
if(istype(mover, /obj/vehicle/ridden))
for(var/M in mover.buckled_mobs)
if(ishuman(M))
if(!CheckHuman(M))
return FALSE
if(ishuman(mover))
return CheckHuman(mover)
return TRUE
/obj/structure/holosign/barrier/medical/Bumped(atom/movable/AM)
. = ..()
icon_state = "holo_medical"
if(ishuman(AM) && !CheckHuman(AM))
if(buzzcd < world.time)
playsound(get_turf(src),'sound/machines/buzz-sigh.ogg',65,TRUE,4)
buzzcd = (world.time + 60)
icon_state = "holo_medical-deny"
/obj/structure/holosign/barrier/medical/proc/CheckHuman(mob/living/carbon/human/sickboi)
var/threat = sickboi.check_virus()
if(get_disease_severity_value(threat) > get_disease_severity_value(DISEASE_SEVERITY_MINOR))
return FALSE
return TRUE
/obj/structure/holosign/barrier/medical/attack_hand(mob/living/user, list/modifiers)
if(!user.combat_mode && CanPass(user, get_dir(src, user)))
force_allaccess = !force_allaccess
to_chat(user, span_warning("You [force_allaccess ? "deactivate" : "activate"] the biometric scanners.")) //warning spans because you can make the station sick!
else
return ..()
/obj/structure/holosign/barrier/cyborg/hacked
name = "Charged Energy Field"
desc = "A powerful energy field that blocks movement. Energy arcs off it."
max_integrity = 20
var/shockcd = 0
/obj/structure/holosign/barrier/cyborg/hacked/bullet_act(obj/projectile/P)
take_damage(P.damage, BRUTE, MELEE, 1) //Yeah no this doesn't get projectile resistance.
return BULLET_ACT_HIT
/obj/structure/holosign/barrier/cyborg/hacked/proc/cooldown()
shockcd = FALSE
/obj/structure/holosign/barrier/cyborg/hacked/attack_hand(mob/living/user, list/modifiers)
. = ..()
if(.)
return
if(!shockcd)
if(ismob(user))
var/mob/living/M = user
M.electrocute_act(15,"Energy Barrier")
shockcd = TRUE
addtimer(CALLBACK(src, PROC_REF(cooldown)), 5)
/obj/structure/holosign/barrier/cyborg/hacked/Bumped(atom/movable/AM)
if(shockcd)
return
if(!ismob(AM))
return
var/mob/living/M = AM
M.electrocute_act(15,"Energy Barrier")
shockcd = TRUE
addtimer(CALLBACK(src, PROC_REF(cooldown)), 5)