Files
Bubberstation/code/modules/power/singularity/containment_field.dm
T
GandalfandGitHub f9e3b58ecd Aesthetic Overhaul V3.0[SEMI-MODULAR][READY] (#1245)
* Begin

* few fixes

* WINDOWS

* Update airlock.dm

* Update status_display.dm

* Fixes plus rusty walls.

* Update walls.dm

* air alarm, intercom, apc updates, plasma windows, tinted, firealarm(todo)

* Update airlock.dm

* FINALLY FIXES THE DOORS

* Update airlock.dm

* firealarm and fixes.

* fixes

* mining vendor and washing machine

* firedoor

* blastdoor

* firealarm sound, shutters sound, blast door sounds.

* Delete window.dm

* Revert "Delete window.dm"

This reverts commit 4737c539eb9b49a526c784f45161c3189505ac57.

* fixes

* Update 2.0

newscaster DONE
bookshelf DONE
disposals chute DONE
chairs DONE
stools DONE
beds - Will upgrade later.
requests console DONE
light switch DONE
roller bed DONE
nanomed DONE
extinguisher cabnets DONE
extinguishers DONE
buttons
shield generators DONE
space heater DONE
emitter DONE
field generator DONE
rad collector DONE
cameras DONE
morgue units DONE
watercooler
bench Will upgrade later
E-N (corgi) port? Will do later.
plastic flaps Done
Guns - later

* fiox

* l o g i c

* Update extinguisher.dm

* V2.5

* racks and fixws

* computer typing noise

* gun sprite updates

* Update guns.dmi

* air alarm light mask

* better light overlays

* floors!

* gaygun, bench

* lasergun sounds - remove gun balance.

* no decals.

* Update intercom.dmi

* better directionals

* lasercannon, nucgun,

* Update laser.dm

* aaa

* aaa

* some sprite updates

* aaa

* shotgun suppressor+sound

* Update airlock.dm

* Update shieldgen.dmi

* chair fix, tools too.

* Update chairs.dmi
2020-11-01 16:35:39 +01:00

144 lines
3.8 KiB
Plaintext

/obj/machinery/field/containment
name = "containment field"
desc = "An energy field."
icon = 'icons/obj/singularity.dmi' //ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
icon_state = "Contain_F"
density = FALSE
move_resist = INFINITY
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
use_power = NO_POWER_USE
interaction_flags_atom = NONE
interaction_flags_machine = NONE
CanAtmosPass = ATMOS_PASS_NO
light_range = 4
layer = ABOVE_OBJ_LAYER
var/obj/machinery/field/generator/FG1 = null
var/obj/machinery/field/generator/FG2 = null
/obj/machinery/field/containment/Initialize()
. = ..()
air_update_turf(TRUE)
/obj/machinery/field/containment/Destroy()
FG1.fields -= src
FG2.fields -= src
CanAtmosPass = ATMOS_PASS_YES
air_update_turf(TRUE)
return ..()
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/machinery/field/containment/attack_hand(mob/user)
if(get_dist(src, user) > 1)
return FALSE
else
shock(user)
return TRUE
/obj/machinery/field/containment/attackby(obj/item/W, mob/user, params)
shock(user)
return TRUE
/obj/machinery/field/containment/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BURN)
playsound(loc, 'sound/effects/empulse.ogg', 75, TRUE)
if(BRUTE)
playsound(loc, 'sound/effects/empulse.ogg', 75, TRUE)
/obj/machinery/field/containment/blob_act(obj/structure/blob/B)
return FALSE
/obj/machinery/field/containment/ex_act(severity, target)
return FALSE
/obj/machinery/field/containment/attack_animal(mob/living/simple_animal/M)
if(!FG1 || !FG2)
qdel(src)
return
if(ismegafauna(M))
M.visible_message("<span class='warning'>[M] glows fiercely as the containment field flickers out!</span>")
FG1.calc_power(INFINITY) //rip that 'containment' field
M.adjustHealth(-M.obj_damage)
else
return ..()
/obj/machinery/field/containment/Crossed(atom/movable/AM)
. = ..()
if(isliving(AM))
shock(AM)
if(ismachinery(AM) || isstructure(AM) || ismecha(AM))
bump_field(AM)
/obj/machinery/field/containment/proc/set_master(master1,master2)
if(!master1 || !master2)
return FALSE
FG1 = master1
FG2 = master2
return TRUE
/obj/machinery/field/containment/shock(mob/living/user)
if(!FG1 || !FG2)
qdel(src)
return FALSE
..()
/obj/machinery/field/containment/Move()
qdel(src)
return FALSE
// Abstract Field Class
// Used for overriding certain procs
/obj/machinery/field
var/hasShocked = FALSE //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second.
/obj/machinery/field/Bumped(atom/movable/mover)
if(hasShocked)
return
if(isliving(mover))
shock(mover)
return
if(ismachinery(mover) || isstructure(mover) || ismecha(mover))
bump_field(mover)
return
/obj/machinery/field/CanAllowThrough(atom/movable/mover, turf/target)
. = ..()
if(hasShocked || isliving(mover) || ismachinery(mover) || isstructure(mover) || ismecha(mover))
return FALSE
/obj/machinery/field/proc/shock(mob/living/user)
var/shock_damage = min(rand(30,40),rand(30,40))
if(iscarbon(user))
user.Paralyze(300)
user.electrocute_act(shock_damage, src, 1)
else if(issilicon(user))
if(prob(20))
user.Stun(40)
user.take_overall_damage(0, shock_damage)
user.visible_message("<span class='danger'>[user.name] is shocked by the [src.name]!</span>", \
"<span class='userdanger'>Energy pulse detected, system damaged!</span>", \
"<span class='hear'>You hear an electrical crack.</span>")
user.updatehealth()
bump_field(user)
/obj/machinery/field/proc/clear_shock()
hasShocked = FALSE
/obj/machinery/field/proc/bump_field(atom/movable/AM as mob|obj)
if(hasShocked)
return FALSE
hasShocked = TRUE
do_sparks(5, TRUE, AM.loc)
var/atom/target = get_edge_target_turf(AM, get_dir(src, get_step_away(AM, src)))
AM.throw_at(target, 200, 4)
addtimer(CALLBACK(src, .proc/clear_shock), 5)