mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-30 19:41:56 +00:00
cl cacogen balance: Space cleaner in spray bottles travels 5 tiles instead of 3 (doesn't affect other reagents) balance: Trash bag fits in exosuit slot of janitor biosuit balance: All soaps are faster balance: Soaps now clean all decals on a tile instead of just one balance: Soap now has limited uses (100 for most, 300 for NT brand which janitor gets) balance: Mops are considerably faster balance: Basic mop holds twice the reagents balance: Janitorial cart now refills mops completely with one click balance: Basic and advanced mops are more robust (8 force and 12 force) balance: Galoshes no longer leave bloody footprints balance: Chameleon noslips no longer leave bloody footprints fix: Bulb boxes can be used on light replacers refill them in bulk balance: Light replacer can be used in-hand to change all bulbs on a tile add: Custodial barrier projector which creates solid wet floor signs that force people to walk to pass (available through service protolathe) /cl Janitor's been an exercise in futility for years, and the job is made redundant by janitor cyborgs who can't even keep up with the mess themselves. Spreading blood is instant, but takes a lot longer to clean. The goal here is to make it easier to keep up with the mess and make the controls less finicky while avoiding affecting combat too much (the mop and spray bottle are is a good weapons after all).
181 lines
5.7 KiB
Plaintext
181 lines
5.7 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
|
|
|
|
/obj/structure/holosign/New(loc, source_projector)
|
|
if(source_projector)
|
|
projector = source_projector
|
|
projector.signs += src
|
|
..()
|
|
|
|
/obj/structure/holosign/Destroy()
|
|
if(projector)
|
|
projector.signs -= src
|
|
projector = null
|
|
return ..()
|
|
|
|
/obj/structure/holosign/attack_hand(mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
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, 1)
|
|
if(BURN)
|
|
playsound(loc, 'sound/weapons/egloves.ogg', 80, 1)
|
|
|
|
/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 = LETPASSTHROW
|
|
density = TRUE
|
|
max_integrity = 20
|
|
var/allow_walk = 1 //can we pass through it on walk intent
|
|
|
|
/obj/structure/holosign/barrier/CanPass(atom/movable/mover, turf/target)
|
|
if(!density)
|
|
return 1
|
|
if(mover.pass_flags & (PASSGLASS|PASSTABLE|PASSGRILLE))
|
|
return 1
|
|
if(iscarbon(mover))
|
|
var/mob/living/carbon/C = mover
|
|
if(allow_walk && C.m_intent == MOVE_INTENT_WALK)
|
|
return 1
|
|
|
|
/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/engineering
|
|
icon_state = "holosign_engi"
|
|
|
|
/obj/structure/holosign/barrier/engineering/ComponentInitialize()
|
|
. = ..()
|
|
AddComponent(/datum/component/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
|
|
layer = ABOVE_MOB_LAYER
|
|
anchored = TRUE
|
|
CanAtmosPass = ATMOS_PASS_NO
|
|
layer = ABOVE_MOB_LAYER
|
|
alpha = 150
|
|
|
|
/obj/structure/holosign/barrier/atmos/Initialize()
|
|
. = ..()
|
|
air_update_turf(TRUE)
|
|
|
|
/obj/structure/holosign/barrier/atmos/ComponentInitialize()
|
|
. = ..()
|
|
AddComponent(/datum/component/rad_insulation, RAD_LIGHT_INSULATION)
|
|
|
|
/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 = 0
|
|
|
|
/obj/structure/holosign/barrier/cyborg/bullet_act(obj/item/projectile/P)
|
|
take_damage((P.damage / 5) , BRUTE, "melee", 1) //Doesn't really matter what damage flag it is.
|
|
if(istype(P, /obj/item/projectile/energy/electrode))
|
|
take_damage(10, BRUTE, "melee", 1) //Tasers aren't harmful.
|
|
if(istype(P, /obj/item/projectile/beam/disabler))
|
|
take_damage(5, BRUTE, "melee", 1) //Disablers aren't harmful.
|
|
|
|
/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 :)
|
|
layer = ABOVE_MOB_LAYER
|
|
var/force_allaccess = FALSE
|
|
var/buzzcd = 0
|
|
|
|
/obj/structure/holosign/barrier/medical/examine(mob/user)
|
|
..()
|
|
to_chat(user,"<span class='notice'>The biometric scanners are <b>[force_allaccess ? "off" : "on"]</b>.</span>")
|
|
|
|
/obj/structure/holosign/barrier/medical/CanPass(atom/movable/mover, turf/target)
|
|
icon_state = "holo_medical"
|
|
if(force_allaccess)
|
|
return TRUE
|
|
if(ishuman(mover))
|
|
var/mob/living/carbon/human/sickboi = mover
|
|
var/threat = sickboi.check_virus()
|
|
switch(threat)
|
|
if(DISEASE_SEVERITY_MINOR, DISEASE_SEVERITY_MEDIUM, DISEASE_SEVERITY_HARMFUL, DISEASE_SEVERITY_DANGEROUS, DISEASE_SEVERITY_BIOHAZARD)
|
|
if(buzzcd < world.time)
|
|
playsound(get_turf(src),'sound/machines/buzz-sigh.ogg',65,1,4)
|
|
buzzcd = (world.time + 60)
|
|
icon_state = "holo_medical-deny"
|
|
return FALSE
|
|
else
|
|
return TRUE //nice or benign diseases!
|
|
return TRUE
|
|
|
|
/obj/structure/holosign/barrier/medical/attack_hand(mob/living/user)
|
|
if(CanPass(user) && user.a_intent == INTENT_HELP)
|
|
force_allaccess = !force_allaccess
|
|
to_chat(user, "<span class='warning'>You [force_allaccess ? "deactivate" : "activate"] the biometric scanners.</span>") //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/item/projectile/P)
|
|
take_damage(P.damage, BRUTE, "melee", 1) //Yeah no this doesn't get projectile resistance.
|
|
|
|
/obj/structure/holosign/barrier/cyborg/hacked/proc/cooldown()
|
|
shockcd = FALSE
|
|
|
|
/obj/structure/holosign/barrier/cyborg/hacked/attack_hand(mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
if(!shockcd)
|
|
if(ismob(user))
|
|
var/mob/living/M = user
|
|
M.electrocute_act(15,"Energy Barrier", safety=1)
|
|
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", safety=1)
|
|
shockcd = TRUE
|
|
addtimer(CALLBACK(src, .proc/cooldown), 5) |