diff --git a/baystation12.dme b/baystation12.dme index 429cc471504..00bfb911c1b 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -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" diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 128b01d9eef..641f4bfde38 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -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 \ No newline at end of file +*/ \ No newline at end of file diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index d8f563836c4..87c8051ec8d 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -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 \ No newline at end of file diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 21d98a7511a..5aacc6f1f92 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -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 \ No newline at end of file + 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 = "" \ No newline at end of file diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm new file mode 100644 index 00000000000..36cd2095baa --- /dev/null +++ b/code/game/machinery/doors/unpowered.dm @@ -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 \ No newline at end of file diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index a75600c9cea..50baa203d0d 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -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 \ No newline at end of file + 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" + diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 3de1d4897e3..e358be33532 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -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) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 207e60f114c..a9462687a9f 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -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" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 8e80b8a8024..a431b6ffc05 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -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" diff --git a/icons/obj/doors/Doorfire.dmi b/icons/obj/doors/Doorfire.dmi index 1b0ddbe4eb1..e996780a74c 100644 Binary files a/icons/obj/doors/Doorfire.dmi and b/icons/obj/doors/Doorfire.dmi differ diff --git a/icons/obj/singularity.dmi b/icons/obj/singularity.dmi index 350052781f7..cf1360c99c5 100644 Binary files a/icons/obj/singularity.dmi and b/icons/obj/singularity.dmi differ