mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-11 17:35:05 +00:00
major cleanup of modules/atmospherics folder and all related files, still many missing -cleanup of procs name -cleanup of vars name -documentation of some of the procs -minor changes to some for() logic (no in game changes just early continue or as anything checks) No in game changes, only code and docs
219 lines
7.1 KiB
Plaintext
219 lines
7.1 KiB
Plaintext
|
|
//holographic signs and barriers
|
|
|
|
/obj/structure/holosign
|
|
name = "holo sign"
|
|
icon = 'icons/effects/effects.dmi'
|
|
anchored = TRUE
|
|
max_integrity = 1
|
|
armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 20)
|
|
var/obj/item/holosign_creator/projector
|
|
var/use_vis_overlay = TRUE
|
|
|
|
/obj/structure/holosign/Initialize(mapload, source_projector)
|
|
. = ..()
|
|
if(use_vis_overlay)
|
|
alpha = 0
|
|
SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, 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"
|
|
|
|
/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"
|
|
flags_1 = RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1
|
|
rad_insulation = RAD_LIGHT_INSULATION
|
|
|
|
/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
|
|
flags_1 = RAD_PROTECT_CONTENTS_1 | RAD_NO_CONTAMINATE_1
|
|
rad_insulation = RAD_LIGHT_INSULATION
|
|
|
|
/obj/structure/holosign/barrier/atmos/sturdy
|
|
name = "sturdy holofirelock"
|
|
max_integrity = 150
|
|
|
|
/obj/structure/holosign/barrier/atmos/Initialize(mapload)
|
|
. = ..()
|
|
var/turf/local = get_turf(loc)
|
|
ADD_TRAIT(local, TRAIT_FIREDOOR_STOP, TRAIT_GENERIC)
|
|
air_update_turf(TRUE, TRUE)
|
|
|
|
/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()
|
|
var/turf/local = get_turf(loc)
|
|
REMOVE_TRAIT(local, TRAIT_FIREDOOR_STOP, TRAIT_GENERIC)
|
|
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 :)
|
|
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/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/cooldown), 5)
|