mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-20 11:40:07 +01:00
* 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
144 lines
3.8 KiB
Plaintext
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)
|