mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-16 20:16:09 +00:00
## About The Pull Request Renames m_intent to move_intent and moves it to the living level renames tod to station_timestamp_timeofdeath removes stun_absorption and see_override as one was unused and the other was never actually implemented ## Why It's Good For The Game Many vars on the mob and living level were intended to be on the living and carbon level, but weren't for one reason or another. Generally it was out of laziness to ensure the mobs being checked for these vars were the intended mobs, and there's some todo comments on how they want it changed in the future, though it never happened. I'm hoping to get these all down in the future, I originally wanted to move ``stat`` from mob to living but it had hundreds of errors so I didn't want to do it all here. ## Changelog Nothing player-facing.
234 lines
7.3 KiB
Plaintext
234 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.move_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.move_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)
|
|
var/static/list/turf_traits = list(TRAIT_FIREDOOR_STOP)
|
|
AddElement(/datum/element/give_turf_traits, turf_traits)
|
|
|
|
/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)
|