mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 21:48:21 +01:00
TG: Added Invisty's Emitter sprites.
Cleaned up part of the door code and moved some defines to their proper files. Firelocks can now be welded open and now shows the welded overlay properly. Borgs can now properly mess with door wiring. r2895
This commit is contained in:
+1
-1
@@ -318,7 +318,6 @@
|
||||
#include "code\defines\obj\clothing.dm"
|
||||
#include "code\defines\obj\computer.dm"
|
||||
#include "code\defines\obj\decal.dm"
|
||||
#include "code\defines\obj\door.dm"
|
||||
#include "code\defines\obj\hydro.dm"
|
||||
#include "code\defines\obj\machinery.dm"
|
||||
#include "code\defines\obj\radio.dm"
|
||||
@@ -548,6 +547,7 @@
|
||||
#include "code\game\machinery\doors\firedoor.dm"
|
||||
#include "code\game\machinery\doors\poddoor.dm"
|
||||
#include "code\game\machinery\doors\shutters.dm"
|
||||
#include "code\game\machinery\doors\unpowered.dm"
|
||||
#include "code\game\machinery\doors\windowdoor.dm"
|
||||
#include "code\game\machinery\embedded_controller\access_controller.dm"
|
||||
#include "code\game\machinery\embedded_controller\airlock_controller.dm"
|
||||
|
||||
+273
-388
@@ -1,195 +1,287 @@
|
||||
/obj/machinery/door/Bumped(atom/AM)
|
||||
if(p_open || operating) return
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
if(world.time - AM.last_bumped <= 60) return //NOTE do we really need that?
|
||||
if(M.client && !M:handcuffed)
|
||||
bumpopen(M)
|
||||
else if(istype(AM, /obj/machinery/bot))
|
||||
var/obj/machinery/bot/bot = AM
|
||||
if(src.check_access(bot.botcard))
|
||||
if(density)
|
||||
open()
|
||||
else if(istype(AM, /obj/effect/critter))
|
||||
var/obj/effect/critter/critter = AM
|
||||
if(critter.opensdoors) return
|
||||
if(src.check_access_list(critter.access_list))
|
||||
if(density)
|
||||
open()
|
||||
// else if(istype(AM, /obj/effect/alien/facehugger))
|
||||
// if(src.check_access(null))
|
||||
// if(density)
|
||||
// open()
|
||||
else if(istype(AM, /obj/mecha))
|
||||
var/obj/mecha/mecha = AM
|
||||
/obj/machinery/door
|
||||
name = "Door"
|
||||
desc = "It opens and closes."
|
||||
icon = 'doorint.dmi'
|
||||
icon_state = "door1"
|
||||
opacity = 1
|
||||
density = 1
|
||||
layer = 2.7
|
||||
anchored = 1
|
||||
var/secondsElectrified = 0
|
||||
var/visible = 1
|
||||
var/p_open = 0
|
||||
var/operating = 0
|
||||
var/autoclose = 0
|
||||
var/glass = 0
|
||||
var/forcecrush = 0
|
||||
var/holdopen = 0
|
||||
|
||||
proc/bumpopen(mob/user as mob)
|
||||
proc/update_nearby_tiles(need_rebuild)
|
||||
proc/requiresID() return 1
|
||||
proc/animate(animation)
|
||||
proc/open()
|
||||
proc/close()
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
if(density)
|
||||
if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access)))
|
||||
layer = 3.1 //Above most items if closed
|
||||
else
|
||||
layer = 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
return
|
||||
|
||||
|
||||
Del()
|
||||
update_nearby_tiles()
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
Bumped(atom/AM)
|
||||
if(p_open || operating) return
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
if(world.time - M.last_bumped <= 60) return
|
||||
if(M.client && !M:handcuffed)
|
||||
bumpopen(M)
|
||||
return
|
||||
|
||||
if(istype(AM, /obj/machinery/bot))
|
||||
var/obj/machinery/bot/bot = AM
|
||||
if(src.check_access(bot.botcard))
|
||||
if(density)
|
||||
open()
|
||||
return
|
||||
|
||||
if(istype(AM, /obj/effect/critter))
|
||||
var/obj/effect/critter/critter = AM
|
||||
if(critter.opensdoors) return
|
||||
if(src.check_access_list(critter.access_list))
|
||||
if(density)
|
||||
open()
|
||||
return
|
||||
|
||||
if(istype(AM, /obj/mecha))
|
||||
var/obj/mecha/mecha = AM
|
||||
if(density)
|
||||
if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access)))
|
||||
open()
|
||||
else
|
||||
flick("door_deny", src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group) return 0
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return !opacity
|
||||
return !density
|
||||
|
||||
|
||||
bumpopen(mob/user as mob)
|
||||
if(operating) return
|
||||
src.add_fingerprint(user)
|
||||
if(!src.requiresID())
|
||||
user = null
|
||||
|
||||
if(allowed(user) && density)
|
||||
open()
|
||||
else if(density)
|
||||
flick("door_deny", src)
|
||||
return
|
||||
|
||||
meteorhit(obj/M as obj)
|
||||
src.open()
|
||||
return
|
||||
|
||||
|
||||
attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
return src.attackby(user, user)
|
||||
|
||||
|
||||
attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(src.operating) return
|
||||
src.add_fingerprint(user)
|
||||
if(!src.requiresID())
|
||||
user = null
|
||||
if(src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)))
|
||||
flick("door_spark", src)
|
||||
sleep(6)
|
||||
open()
|
||||
operating = -1
|
||||
return 1
|
||||
if(src.allowed(user))
|
||||
if(src.density)
|
||||
open()
|
||||
else
|
||||
flick("door_deny", src)
|
||||
|
||||
|
||||
/obj/machinery/door/proc/bumpopen(mob/user as mob)
|
||||
if (src.operating)
|
||||
close()
|
||||
return
|
||||
if(src.density)
|
||||
flick("door_deny", src)
|
||||
return
|
||||
//if(world.timeofday-last_used <= 10)
|
||||
// return
|
||||
src.add_fingerprint(user)
|
||||
if (!src.requiresID())
|
||||
//don't care who they are or what they have, act as if they're NOTHING
|
||||
user = null
|
||||
|
||||
if (src.allowed(user))
|
||||
if (src.density)
|
||||
//last_used = world.timeofday
|
||||
|
||||
blob_act()
|
||||
if(prob(40))
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
emp_act(severity)
|
||||
if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) )
|
||||
open()
|
||||
else if (src.density)
|
||||
flick("door_deny", src)
|
||||
return
|
||||
if(prob(40/severity))
|
||||
if(secondsElectrified == 0)
|
||||
secondsElectrified = -1
|
||||
spawn(300)
|
||||
secondsElectrified = 0
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group) return 0
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return !opacity
|
||||
return !density
|
||||
|
||||
/obj/machinery/door/proc/update_nearby_tiles(need_rebuild)
|
||||
if(!air_master) return 0
|
||||
|
||||
var/turf/simulated/source = loc
|
||||
var/turf/simulated/north = get_step(source,NORTH)
|
||||
var/turf/simulated/south = get_step(source,SOUTH)
|
||||
var/turf/simulated/east = get_step(source,EAST)
|
||||
var/turf/simulated/west = get_step(source,WEST)
|
||||
|
||||
if(need_rebuild)
|
||||
if(istype(source)) //Rebuild/update nearby group geometry
|
||||
if(source.parent)
|
||||
air_master.groups_to_rebuild += source.parent
|
||||
else
|
||||
air_master.tiles_to_update += source
|
||||
if(istype(north))
|
||||
if(north.parent)
|
||||
air_master.groups_to_rebuild += north.parent
|
||||
else
|
||||
air_master.tiles_to_update += north
|
||||
if(istype(south))
|
||||
if(south.parent)
|
||||
air_master.groups_to_rebuild += south.parent
|
||||
else
|
||||
air_master.tiles_to_update += south
|
||||
if(istype(east))
|
||||
if(east.parent)
|
||||
air_master.groups_to_rebuild += east.parent
|
||||
else
|
||||
air_master.tiles_to_update += east
|
||||
if(istype(west))
|
||||
if(west.parent)
|
||||
air_master.groups_to_rebuild += west.parent
|
||||
else
|
||||
air_master.tiles_to_update += west
|
||||
else
|
||||
if(istype(source)) air_master.tiles_to_update += source
|
||||
if(istype(north)) air_master.tiles_to_update += north
|
||||
if(istype(south)) air_master.tiles_to_update += south
|
||||
if(istype(east)) air_master.tiles_to_update += east
|
||||
if(istype(west)) air_master.tiles_to_update += west
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/New()
|
||||
..()
|
||||
if(density)
|
||||
layer = 3.1 //Above most items if closed
|
||||
else
|
||||
layer = 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
|
||||
/obj/machinery/door/Del()
|
||||
update_nearby_tiles()
|
||||
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/door/meteorhit(obj/M as obj)
|
||||
src.open()
|
||||
return
|
||||
|
||||
/obj/machinery/door/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/door/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/door/attack_hand(mob/user as mob)
|
||||
return src.attackby(user, user)
|
||||
|
||||
/obj/machinery/door/proc/requiresID()
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/device/detective_scanner))
|
||||
return ..()
|
||||
if (src.operating || isrobot(user))
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
if (!src.requiresID())
|
||||
//don't care who they are or what they have, act as if they're NOTHING
|
||||
user = null
|
||||
if (src.density && (istype(I, /obj/item/weapon/card/emag) ||istype(I, /obj/item/weapon/melee/energy/blade)))
|
||||
if(istype(I, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
src.operating = -1
|
||||
if(istype(I, /obj/item/weapon/melee/energy/blade))
|
||||
if(istype(src, /obj/machinery/door/airlock))
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src.loc)
|
||||
spark_system.start()
|
||||
playsound(src.loc, 'blade1.ogg', 50, 1)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
O.show_message(text("\blue The door has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
|
||||
if((!src:arePowerSystemsOn()) || (stat & NOPOWER) || src:isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
|
||||
var/obj/structure/door_assembly/temp
|
||||
var/failsafe=0
|
||||
switch(src:doortype)
|
||||
if(0) temp=new/obj/structure/door_assembly/door_assembly_0(src.loc)
|
||||
if(1) temp=new/obj/structure/door_assembly/door_assembly_com(src.loc)
|
||||
if(2) temp=new/obj/structure/door_assembly/door_assembly_sec(src.loc)
|
||||
if(3) temp=new/obj/structure/door_assembly/door_assembly_eng(src.loc)
|
||||
if(4) temp=new/obj/structure/door_assembly/door_assembly_med(src.loc)
|
||||
if(5) temp=new/obj/structure/door_assembly/door_assembly_mai(src.loc)
|
||||
if(6) temp=new/obj/structure/door_assembly/door_assembly_ext(src.loc)
|
||||
if(7) temp=new/obj/structure/door_assembly/door_assembly_g(src.loc)
|
||||
else failsafe=1
|
||||
if(!failsafe)
|
||||
temp.anchored=0
|
||||
step_away(temp,usr,15)
|
||||
else del(temp)
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
if(2.0)
|
||||
if(prob(25))
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
src:welded = 0
|
||||
src:locked = 0
|
||||
update_icon()
|
||||
flick("door_spark", src)
|
||||
sleep(6)
|
||||
open()
|
||||
return 1
|
||||
if (src.allowed(user))
|
||||
if (src.density)
|
||||
open()
|
||||
if(3.0)
|
||||
if(prob(80))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, src)
|
||||
s.start()
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
if(density)
|
||||
icon_state = "door1"
|
||||
else
|
||||
close()
|
||||
else if (src.density)
|
||||
flick("door_deny", src)
|
||||
icon_state = "door0"
|
||||
return
|
||||
|
||||
|
||||
animate(animation)
|
||||
switch(animation)
|
||||
if("opening")
|
||||
if(p_open)
|
||||
flick("o_doorc0", src)
|
||||
else
|
||||
flick("doorc0", src)
|
||||
if("closing")
|
||||
if(p_open)
|
||||
flick("o_doorc1", src)
|
||||
else
|
||||
flick("doorc1", src)
|
||||
if("deny")
|
||||
flick("door_deny", src)
|
||||
return
|
||||
|
||||
|
||||
open()
|
||||
if(!density) return 1
|
||||
if(operating > 0) return
|
||||
if(!ticker) return 0
|
||||
if(!operating) operating = 1
|
||||
|
||||
animate("opening")
|
||||
sleep(10)
|
||||
src.layer = 2.7
|
||||
src.density = 0
|
||||
update_icon()
|
||||
src.sd_SetOpacity(0)
|
||||
update_nearby_tiles()
|
||||
|
||||
if(operating) operating = 0
|
||||
|
||||
if(autoclose)
|
||||
spawn(150)
|
||||
autoclose()
|
||||
return 1
|
||||
|
||||
|
||||
close()
|
||||
if(density) return 1
|
||||
if(operating) return
|
||||
operating = 1
|
||||
|
||||
animate("closing")
|
||||
src.density = 1
|
||||
src.layer = 3.1
|
||||
sleep(10)
|
||||
update_icon()
|
||||
|
||||
if(visible && !glass)
|
||||
src.sd_SetOpacity(1)
|
||||
operating = 0
|
||||
update_nearby_tiles()
|
||||
return
|
||||
|
||||
|
||||
update_nearby_tiles(need_rebuild)
|
||||
if(!air_master) return 0
|
||||
|
||||
var/turf/simulated/source = loc
|
||||
var/turf/simulated/north = get_step(source,NORTH)
|
||||
var/turf/simulated/south = get_step(source,SOUTH)
|
||||
var/turf/simulated/east = get_step(source,EAST)
|
||||
var/turf/simulated/west = get_step(source,WEST)
|
||||
|
||||
if(need_rebuild)
|
||||
if(istype(source)) //Rebuild/update nearby group geometry
|
||||
if(source.parent)
|
||||
air_master.groups_to_rebuild += source.parent
|
||||
else
|
||||
air_master.tiles_to_update += source
|
||||
if(istype(north))
|
||||
if(north.parent)
|
||||
air_master.groups_to_rebuild += north.parent
|
||||
else
|
||||
air_master.tiles_to_update += north
|
||||
if(istype(south))
|
||||
if(south.parent)
|
||||
air_master.groups_to_rebuild += south.parent
|
||||
else
|
||||
air_master.tiles_to_update += south
|
||||
if(istype(east))
|
||||
if(east.parent)
|
||||
air_master.groups_to_rebuild += east.parent
|
||||
else
|
||||
air_master.tiles_to_update += east
|
||||
if(istype(west))
|
||||
if(west.parent)
|
||||
air_master.groups_to_rebuild += west.parent
|
||||
else
|
||||
air_master.tiles_to_update += west
|
||||
else
|
||||
if(istype(source)) air_master.tiles_to_update += source
|
||||
if(istype(north)) air_master.tiles_to_update += north
|
||||
if(istype(south)) air_master.tiles_to_update += south
|
||||
if(istype(east)) air_master.tiles_to_update += east
|
||||
if(istype(west)) air_master.tiles_to_update += west
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/door/proc/autoclose()
|
||||
var/obj/machinery/door/airlock/A = src
|
||||
if(!A.density && !A.operating && !A.locked && !A.welded)
|
||||
close()
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
/obj/machinery/door/airlock/proc/ion_act()
|
||||
if(src.z == 1 && src.density)
|
||||
if(length(req_access) > 0 && !(12 in req_access))
|
||||
@@ -216,211 +308,4 @@
|
||||
else
|
||||
close()
|
||||
return
|
||||
|
||||
/obj/machinery/door/blob_act()
|
||||
if(prob(40))
|
||||
del(src)
|
||||
|
||||
/obj/machinery/door/emp_act(severity)
|
||||
if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) )
|
||||
open()
|
||||
if(prob(40/severity))
|
||||
if(secondsElectrified == 0)
|
||||
secondsElectrified = -1
|
||||
spawn(300)
|
||||
secondsElectrified = 0
|
||||
..()
|
||||
|
||||
/obj/machinery/door/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
if(2.0)
|
||||
if(prob(25))
|
||||
del(src)
|
||||
if(3.0)
|
||||
if(prob(80))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, src)
|
||||
s.start()
|
||||
|
||||
/obj/machinery/door/update_icon()
|
||||
if(density)
|
||||
icon_state = "door1"
|
||||
else
|
||||
icon_state = "door0"
|
||||
return
|
||||
|
||||
/obj/machinery/door/proc/animate(animation)
|
||||
switch(animation)
|
||||
if("opening")
|
||||
if(p_open)
|
||||
flick("o_doorc0", src)
|
||||
else
|
||||
flick("doorc0", src)
|
||||
if("closing")
|
||||
if(p_open)
|
||||
flick("o_doorc1", src)
|
||||
else
|
||||
flick("doorc1", src)
|
||||
if("deny")
|
||||
flick("door_deny", src)
|
||||
return
|
||||
|
||||
/obj/machinery/door/proc/open()
|
||||
if(!density)
|
||||
return 1
|
||||
if (src.operating == 1) //doors can still open when emag-disabled
|
||||
return
|
||||
if (!ticker)
|
||||
return 0
|
||||
if(!src.operating) //in case of emag
|
||||
src.operating = 1
|
||||
|
||||
animate("opening")
|
||||
sleep(10)
|
||||
src.layer = 2.7
|
||||
src.density = 0
|
||||
update_icon()
|
||||
|
||||
src.sd_SetOpacity(0)
|
||||
update_nearby_tiles()
|
||||
|
||||
if(operating == 1) //emag again
|
||||
src.operating = 0
|
||||
|
||||
if(autoclose)
|
||||
spawn(150)
|
||||
autoclose()
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/proc/close()
|
||||
if(density)
|
||||
return 1
|
||||
if (src.operating)
|
||||
return
|
||||
src.operating = 1
|
||||
|
||||
var/X = src:x
|
||||
var/Y = src:y
|
||||
var/Z = src:z
|
||||
var/held = 1
|
||||
|
||||
if(src.holdopen && !forcecrush)
|
||||
while(held == 1 && holdopen && !forcecrush) //If it is no longer hold open, it should close.
|
||||
sleep(held? 10:40)
|
||||
held = 0
|
||||
var/list/objects = locate(X,Y,Z)
|
||||
for(var/obj/T in objects)
|
||||
if(!istype(T,/obj/machinery/door) && !(istype(T,/obj/machinery) && T.anchored == 1) && !istype(T,/obj/structure/cable) && !istype(T,/obj/structure/disposalpipe) && !(T.loc == get_turf(src)))
|
||||
held = 1
|
||||
for(var/mob/living/T in objects) //Geez, ghosts were OP.
|
||||
held = 1
|
||||
animate("closing")
|
||||
src.density = 1
|
||||
spawn(4)
|
||||
if(!istype(src, /obj/machinery/door/window))
|
||||
for(var/mob/living/L in src.loc) // Crush mobs and move them out of the way
|
||||
|
||||
if(src.forcecrush) // Save an AI, crush a limb
|
||||
var/limbname = pick("l_arm", "r_arm", "l_hand","r_hand", "l_foot", "r_foot")
|
||||
var/limbdisplay
|
||||
|
||||
for(var/organ in L:organs)
|
||||
var/datum/organ/external/temp = L:organs["[organ]"]
|
||||
if (istype(temp, /datum/organ/external) && temp.name == limbname)
|
||||
limbdisplay = temp.display_name // Take the name for down below
|
||||
temp.take_damage(rand(50,80), 0) //OH GOD IT HURTS
|
||||
break
|
||||
|
||||
L << "\red The airlock crushes your [limbdisplay]!"
|
||||
for(var/mob/O in viewers(L, null))
|
||||
if(O == L)
|
||||
continue
|
||||
O.show_message("\red The airlock crushes [L.name]'s [limbdisplay]!", 1)
|
||||
sleep(rand(2,8))
|
||||
|
||||
L << "\red The airlock forces you out of the way!" //Lucky you
|
||||
for(var/mob/O in viewers(L, null))
|
||||
O.show_message("\red The airlock pushes [L.name] out of the way!", 1)
|
||||
var/list/lst = list(NORTH,SOUTH,EAST,WEST)
|
||||
var/turf/T = get_random_turf(L, lst)
|
||||
if(T)
|
||||
L.loc = T
|
||||
|
||||
if(!src.forcecrush)
|
||||
for(var/obj/item/I in src.loc) // Move items out of the way
|
||||
if(!I.anchored)
|
||||
var/list/lst = list(NORTH,SOUTH,EAST,WEST)
|
||||
var/turf/T = get_random_turf(I, lst)
|
||||
if(T)
|
||||
I.loc = T
|
||||
|
||||
sleep(6)
|
||||
update_icon()
|
||||
|
||||
if(src.visible && (!src.glass))
|
||||
src.sd_SetOpacity(1)
|
||||
if(operating == 1)
|
||||
operating = 0
|
||||
update_nearby_tiles()
|
||||
|
||||
/obj/machinery/door/proc/autoclose()
|
||||
var/obj/machinery/door/airlock/A = src
|
||||
if ((!A.density) && !( A.operating ) && !(A.locked) && !( A.welded ))
|
||||
close()
|
||||
else return
|
||||
|
||||
/////////////////////////////////////////////////// Unpowered doors
|
||||
|
||||
/obj/machinery/door/unpowered/Bumped(atom/AM)
|
||||
if(p_open || operating) return
|
||||
if (src.locked)
|
||||
return
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
if(world.time - AM.last_bumped <= 60) return
|
||||
if(M.client && !M:handcuffed)
|
||||
bumpopen(M)
|
||||
else if(istype(AM, /obj/machinery/bot))
|
||||
var/obj/machinery/bot/bot = AM
|
||||
if(src.check_access(bot.botcard))
|
||||
if(density)
|
||||
open()
|
||||
// else if(istype(AM, /obj/effect/alien/facehugger))
|
||||
// if(src.check_access(null))
|
||||
// if(density)
|
||||
// open()
|
||||
|
||||
/obj/machinery/door/unpowered
|
||||
autoclose = 0
|
||||
var/locked = 0
|
||||
|
||||
/obj/machinery/door/unpowered/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/door/unpowered/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/door/unpowered/attack_hand(mob/user as mob)
|
||||
return src.attackby(null, user)
|
||||
|
||||
/obj/machinery/door/unpowered/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if (src.operating)
|
||||
return
|
||||
if (src.locked)
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
if (src.allowed(user))
|
||||
if (src.density)
|
||||
open()
|
||||
else
|
||||
close()
|
||||
return
|
||||
|
||||
/obj/machinery/door/unpowered/shuttle
|
||||
icon = 'shuttle.dmi'
|
||||
name = "door"
|
||||
icon_state = "door1"
|
||||
opacity = 1
|
||||
density = 1
|
||||
*/
|
||||
@@ -1,73 +1,95 @@
|
||||
/var/const/OPEN = 1
|
||||
/var/const/CLOSED = 2
|
||||
|
||||
/obj/machinery/door/firedoor/Bumped(atom/AM)
|
||||
if(p_open || operating)
|
||||
return
|
||||
if(!density)
|
||||
return ..()
|
||||
else
|
||||
|
||||
/obj/machinery/door/firedoor
|
||||
name = "Firelock"
|
||||
desc = "Apply crowbar"
|
||||
icon = 'Doorfire.dmi'
|
||||
icon_state = "door_open"
|
||||
var/blocked = 0
|
||||
opacity = 0
|
||||
density = 0
|
||||
var/nextstate = null
|
||||
|
||||
|
||||
Bumped(atom/AM)
|
||||
if(p_open || operating) return
|
||||
if(!density) return ..()
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/door/firedoor/power_change()
|
||||
if( powered(ENVIRON) )
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
stat |= NOPOWER
|
||||
power_change()
|
||||
if(powered(ENVIRON))
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
stat |= NOPOWER
|
||||
return
|
||||
|
||||
/obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
|
||||
var/obj/item/weapon/weldingtool/W = C
|
||||
if(W.remove_fuel(0, user))
|
||||
src.blocked = !src.blocked
|
||||
user << text("\red You [blocked?"welded":"unwelded"] the [src]")
|
||||
update_icon()
|
||||
return
|
||||
if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/fireaxe) && C.wielded == 1) )
|
||||
if (!src.blocked && !src.operating)
|
||||
|
||||
attackby(obj/item/weapon/C as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if(operating) return//Already doing something.
|
||||
if(istype(C, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/W = C
|
||||
if(W.remove_fuel(0, user))
|
||||
src.blocked = !src.blocked
|
||||
user << text("\red You [blocked?"welded":"unwelded"] the [src]")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/fireaxe) && C.wielded == 1))
|
||||
if(blocked || operating) return
|
||||
if(src.density)
|
||||
spawn( 0 )
|
||||
src.operating = 1
|
||||
|
||||
animate("opening")
|
||||
sleep(15)
|
||||
layer = 2.7
|
||||
src.density = 0
|
||||
update_icon()
|
||||
|
||||
src.sd_SetOpacity(0)
|
||||
src.operating = 0
|
||||
spawn(0)
|
||||
open()
|
||||
return
|
||||
else //close it up again
|
||||
spawn( 0 )
|
||||
src.operating = 1
|
||||
|
||||
animate("closing")
|
||||
src.density = 1
|
||||
layer = 3.1
|
||||
sleep(15)
|
||||
update_icon()
|
||||
|
||||
src.sd_SetOpacity(1)
|
||||
src.operating = 0
|
||||
spawn(0)
|
||||
close()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/door/firedoor/process()
|
||||
if(src.operating)
|
||||
return
|
||||
if(src.nextstate)
|
||||
if(src.nextstate == OPEN && src.density)
|
||||
spawn()
|
||||
src.open()
|
||||
else if(src.nextstate == CLOSED && !src.density)
|
||||
spawn()
|
||||
src.close()
|
||||
src.nextstate = null
|
||||
|
||||
|
||||
process()
|
||||
if(operating || stat & NOPOWER || !nextstate) return
|
||||
switch(nextstate)
|
||||
if(OPEN)
|
||||
spawn()
|
||||
open()
|
||||
if(CLOSED)
|
||||
spawn()
|
||||
close()
|
||||
nextstate = null
|
||||
return
|
||||
|
||||
|
||||
animate(animation)
|
||||
switch(animation)
|
||||
if("opening")
|
||||
flick("door_opening", src)
|
||||
if("closing")
|
||||
flick("door_closing", src)
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
overlays = null
|
||||
if(density)
|
||||
icon_state = "door_closed"
|
||||
if(blocked)
|
||||
overlays += "welded"
|
||||
else
|
||||
icon_state = "door_open"
|
||||
if(blocked)
|
||||
overlays += "welded_open"
|
||||
return
|
||||
|
||||
|
||||
|
||||
//border_only fire doors are special when it comes to air groups
|
||||
/obj/machinery/door/firedoor/border_only
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group)
|
||||
var/direction = get_dir(src,target)
|
||||
@@ -78,9 +100,9 @@
|
||||
return (dir != direction)
|
||||
else
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
update_nearby_tiles(need_rebuild)
|
||||
if(!air_master) return 0
|
||||
|
||||
@@ -98,9 +120,7 @@
|
||||
air_master.groups_to_rebuild += destination.parent
|
||||
else
|
||||
air_master.tiles_to_update += destination
|
||||
|
||||
else
|
||||
if(istype(source)) air_master.tiles_to_update += source
|
||||
if(istype(destination)) air_master.tiles_to_update += destination
|
||||
|
||||
return 1
|
||||
@@ -1,9 +1,10 @@
|
||||
//cael - added this for the lockdown computer
|
||||
/obj/machinery/door/poddoor/Topic(href, href_list)
|
||||
if(href_list["close"])
|
||||
close()
|
||||
if(href_list["open"])
|
||||
open()
|
||||
/obj/machinery/door/poddoor
|
||||
name = "Podlock"
|
||||
desc = "A type of powerful blast door."
|
||||
icon = 'rapid_pdoor.dmi'
|
||||
icon_state = "pdoor1"
|
||||
var/id = 1.0
|
||||
var/networkTag = ""
|
||||
|
||||
/obj/machinery/door/poddoor/Bumped(atom/AM)
|
||||
if(!density)
|
||||
@@ -270,4 +271,107 @@
|
||||
|
||||
sleep(10)
|
||||
src.operating = 0
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/machinery/door/poddoor/two_tile_hor
|
||||
var/obj/machinery/door/poddoor/filler_object/f1
|
||||
var/obj/machinery/door/poddoor/filler_object/f2
|
||||
icon = '1x2blast_hor.dmi'
|
||||
|
||||
New()
|
||||
..()
|
||||
f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
|
||||
f2 = new/obj/machinery/door/poddoor/filler_object (get_step(src,EAST))
|
||||
f1.density = density
|
||||
f2.density = density
|
||||
f1.sd_SetOpacity(opacity)
|
||||
f2.sd_SetOpacity(opacity)
|
||||
|
||||
Del()
|
||||
del f1
|
||||
del f2
|
||||
..()
|
||||
|
||||
/obj/machinery/door/poddoor/two_tile_ver
|
||||
var/obj/machinery/door/poddoor/filler_object/f1
|
||||
var/obj/machinery/door/poddoor/filler_object/f2
|
||||
icon = '1x2blast_vert.dmi'
|
||||
|
||||
New()
|
||||
..()
|
||||
f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
|
||||
f2 = new/obj/machinery/door/poddoor/filler_object (get_step(src,NORTH))
|
||||
f1.density = density
|
||||
f2.density = density
|
||||
f1.sd_SetOpacity(opacity)
|
||||
f2.sd_SetOpacity(opacity)
|
||||
|
||||
Del()
|
||||
del f1
|
||||
del f2
|
||||
..()
|
||||
|
||||
/obj/machinery/door/poddoor/four_tile_hor
|
||||
var/obj/machinery/door/poddoor/filler_object/f1
|
||||
var/obj/machinery/door/poddoor/filler_object/f2
|
||||
var/obj/machinery/door/poddoor/filler_object/f3
|
||||
var/obj/machinery/door/poddoor/filler_object/f4
|
||||
icon = '1x4blast_hor.dmi'
|
||||
|
||||
New()
|
||||
..()
|
||||
f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
|
||||
f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,EAST))
|
||||
f3 = new/obj/machinery/door/poddoor/filler_object (get_step(f2,EAST))
|
||||
f4 = new/obj/machinery/door/poddoor/filler_object (get_step(f3,EAST))
|
||||
f1.density = density
|
||||
f2.density = density
|
||||
f3.density = density
|
||||
f4.density = density
|
||||
f1.sd_SetOpacity(opacity)
|
||||
f2.sd_SetOpacity(opacity)
|
||||
f4.sd_SetOpacity(opacity)
|
||||
f3.sd_SetOpacity(opacity)
|
||||
|
||||
Del()
|
||||
del f1
|
||||
del f2
|
||||
del f3
|
||||
del f4
|
||||
..()
|
||||
|
||||
/obj/machinery/door/poddoor/four_tile_ver
|
||||
var/obj/machinery/door/poddoor/filler_object/f1
|
||||
var/obj/machinery/door/poddoor/filler_object/f2
|
||||
var/obj/machinery/door/poddoor/filler_object/f3
|
||||
var/obj/machinery/door/poddoor/filler_object/f4
|
||||
icon = '1x4blast_vert.dmi'
|
||||
|
||||
New()
|
||||
..()
|
||||
f1 = new/obj/machinery/door/poddoor/filler_object (src.loc)
|
||||
f2 = new/obj/machinery/door/poddoor/filler_object (get_step(f1,NORTH))
|
||||
f3 = new/obj/machinery/door/poddoor/filler_object (get_step(f2,NORTH))
|
||||
f4 = new/obj/machinery/door/poddoor/filler_object (get_step(f3,NORTH))
|
||||
f1.density = density
|
||||
f2.density = density
|
||||
f3.density = density
|
||||
f4.density = density
|
||||
f1.sd_SetOpacity(opacity)
|
||||
f2.sd_SetOpacity(opacity)
|
||||
f4.sd_SetOpacity(opacity)
|
||||
f3.sd_SetOpacity(opacity)
|
||||
|
||||
Del()
|
||||
del f1
|
||||
del f2
|
||||
del f3
|
||||
del f4
|
||||
..()
|
||||
|
||||
/obj/machinery/door/poddoor/filler_object
|
||||
name = ""
|
||||
icon_state = ""
|
||||
@@ -0,0 +1,25 @@
|
||||
/obj/machinery/door/unpowered
|
||||
autoclose = 0
|
||||
var/locked = 0
|
||||
|
||||
|
||||
Bumped(atom/AM)
|
||||
if(src.locked) return
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)) return
|
||||
if(src.locked) return
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/machinery/door/unpowered/shuttle
|
||||
icon = 'shuttle.dmi'
|
||||
name = "door"
|
||||
icon_state = "door1"
|
||||
opacity = 1
|
||||
density = 1
|
||||
@@ -1,3 +1,14 @@
|
||||
/obj/machinery/door/window
|
||||
name = "interior door"
|
||||
desc = "A door made from a window, yet it can not break nor be depowered."
|
||||
icon = 'windoor.dmi'
|
||||
icon_state = "left"
|
||||
var/base_state = "left"
|
||||
visible = 0.0
|
||||
flags = ON_BORDER
|
||||
opacity = 0
|
||||
|
||||
|
||||
/obj/machinery/door/window/update_nearby_tiles(need_rebuild)
|
||||
if(!air_master) return 0
|
||||
|
||||
@@ -147,4 +158,81 @@
|
||||
close()
|
||||
else if (src.density)
|
||||
flick(text("[]deny", src.base_state), src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/machinery/door/window/brigdoor
|
||||
name = "Brig Door"
|
||||
icon = 'windoor.dmi'
|
||||
icon_state = "leftsecure"
|
||||
base_state = "leftsecure"
|
||||
req_access = list(access_security)
|
||||
var/id = null
|
||||
|
||||
|
||||
/obj/machinery/door/window/northleft
|
||||
dir = NORTH
|
||||
|
||||
/obj/machinery/door/window/eastleft
|
||||
dir = EAST
|
||||
|
||||
/obj/machinery/door/window/westleft
|
||||
dir = WEST
|
||||
|
||||
/obj/machinery/door/window/southleft
|
||||
dir = SOUTH
|
||||
|
||||
/obj/machinery/door/window/northright
|
||||
dir = NORTH
|
||||
icon_state = "right"
|
||||
base_state = "right"
|
||||
|
||||
/obj/machinery/door/window/eastright
|
||||
dir = EAST
|
||||
icon_state = "right"
|
||||
base_state = "right"
|
||||
|
||||
/obj/machinery/door/window/westright
|
||||
dir = WEST
|
||||
icon_state = "right"
|
||||
base_state = "right"
|
||||
|
||||
/obj/machinery/door/window/southright
|
||||
dir = SOUTH
|
||||
icon_state = "right"
|
||||
base_state = "right"
|
||||
|
||||
|
||||
/obj/machinery/door/window/brigdoor/northleft
|
||||
dir = NORTH
|
||||
|
||||
/obj/machinery/door/window/brigdoor/eastleft
|
||||
dir = EAST
|
||||
|
||||
/obj/machinery/door/window/brigdoor/westleft
|
||||
dir = WEST
|
||||
|
||||
/obj/machinery/door/window/brigdoor/southleft
|
||||
dir = SOUTH
|
||||
|
||||
/obj/machinery/door/window/brigdoor/northright
|
||||
dir = NORTH
|
||||
icon_state = "rightsecure"
|
||||
base_state = "rightsecure"
|
||||
|
||||
/obj/machinery/door/window/brigdoor/eastright
|
||||
dir = EAST
|
||||
icon_state = "rightsecure"
|
||||
base_state = "rightsecure"
|
||||
|
||||
/obj/machinery/door/window/brigdoor/westright
|
||||
dir = WEST
|
||||
icon_state = "rightsecure"
|
||||
base_state = "rightsecure"
|
||||
|
||||
/obj/machinery/door/window/brigdoor/southright
|
||||
dir = SOUTH
|
||||
icon_state = "rightsecure"
|
||||
base_state = "rightsecure"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Emitter"
|
||||
desc = "A heavy duty industrial laser"
|
||||
icon = 'singularity.dmi'
|
||||
icon_state = "Emitter"
|
||||
icon_state = "emitter"
|
||||
anchored = 0
|
||||
density = 1
|
||||
req_access = list(access_engine)
|
||||
@@ -39,9 +39,9 @@
|
||||
|
||||
update_icon()
|
||||
if (active && !(stat & (NOPOWER|BROKEN)))
|
||||
icon_state = "Emitter +a"
|
||||
icon_state = "emitter_+a"
|
||||
else
|
||||
icon_state = "Emitter"
|
||||
icon_state = "emitter"
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
origin_tech = "combat=3;magnets=2"
|
||||
projectile_type = "/obj/item/projectile/beam"
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/practice
|
||||
name = "practice laser gun"
|
||||
desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice."
|
||||
projectile_type = "/obj/item/projectile/beam/practice"
|
||||
|
||||
|
||||
obj/item/weapon/gun/energy/laser/retro
|
||||
name ="\improper Retro Laser"
|
||||
|
||||
@@ -47,6 +47,15 @@
|
||||
spawn(0)
|
||||
del(src)
|
||||
|
||||
/obj/item/projectile/beam/practice
|
||||
name = "laser"
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
flag = "laser"
|
||||
eyeblur = 2
|
||||
|
||||
/obj/item/projectile/beam/heavylaser
|
||||
name = "\improper Heavy Laser"
|
||||
icon_state = "heavylaser"
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 33 KiB |
Reference in New Issue
Block a user