//NOT using the existing /obj/machinery/door type, since that has some complications on its own, mainly based on its //machineryness /obj/structure/mineral_door name = "mineral door" density = 1 anchored = 1 opacity = 1 icon = 'icons/obj/doors/mineral_doors.dmi' icon_state = "metal" var/mineralType = "metal" var/state = 0 //closed, 1 == open var/isSwitchingStates = 0 var/close_delay = -1 //-1 if does not auto close. var/hardness = 1 var/oreAmount = 7 var/openSound = 'sound/effects/stonedoor_openclose.ogg' var/closeSound = 'sound/effects/stonedoor_openclose.ogg' /obj/structure/mineral_door/New(location) ..() icon_state = mineralType name = "[mineralType] door" air_update_turf(1) return /obj/structure/mineral_door/Destroy() density = 0 air_update_turf(1) return ..() /obj/structure/mineral_door/Move() var/turf/T = loc ..() move_update_air(T) /obj/structure/mineral_door/Bumped(atom/user) ..() if(!state) return TryToSwitchState(user) return /obj/structure/mineral_door/attack_ai(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral if(isAI(user)) //so the AI can't open it return else if(isrobot(user)) //but cyborgs can if(get_dist(user,src) <= 1) //not remotely though return TryToSwitchState(user) /obj/structure/mineral_door/attack_paw(mob/user) return TryToSwitchState(user) /obj/structure/mineral_door/attack_hand(mob/user) return TryToSwitchState(user) /obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover, /obj/effect/beam)) return !opacity return !density /obj/structure/mineral_door/CanAtmosPass() return !density /obj/structure/mineral_door/proc/TryToSwitchState(atom/user) if(isSwitchingStates) return if(isliving(user)) var/mob/living/M = user if(world.time - M.last_bumped <= 60) return //NOTE do we really need that? if(M.client) if(iscarbon(M)) var/mob/living/carbon/C = M if(!C.handcuffed) SwitchState() else SwitchState() else if(istype(user, /obj/mecha)) SwitchState() /obj/structure/mineral_door/proc/SwitchState() if(state) Close() else Open() /obj/structure/mineral_door/proc/Open() isSwitchingStates = 1 playsound(loc, openSound, 100, 1) flick("[mineralType]opening",src) sleep(10) density = 0 opacity = 0 state = 1 air_update_turf(1) update_icon() isSwitchingStates = 0 if(close_delay != -1) spawn(close_delay) if(!isSwitchingStates && state == 1) Close() /obj/structure/mineral_door/proc/Close() var/turf/T = get_turf(src) for(var/mob/living/L in T) return isSwitchingStates = 1 playsound(loc, closeSound, 100, 1) flick("[mineralType]closing",src) sleep(10) density = 1 opacity = 1 state = 0 air_update_turf(1) update_icon() isSwitchingStates = 0 /obj/structure/mineral_door/update_icon() if(state) icon_state = "[mineralType]open" else icon_state = mineralType /obj/structure/mineral_door/attackby(obj/item/weapon/W, mob/user, params) if(istype(W,/obj/item/weapon/pickaxe)) var/obj/item/weapon/pickaxe/digTool = W user << "You start digging the [name]..." if(do_after(user,digTool.digspeed*hardness, target = src) && src) user << "You finish digging." Dismantle() else if(user.a_intent != "harm") attack_hand(user) else return ..() /obj/structure/mineral_door/attacked_by(obj/item/I, mob/user) ..() if(I.damtype != STAMINA) hardness -= I.force/100 CheckHardness() /obj/structure/mineral_door/bullet_act(obj/item/projectile/Proj) hardness -= Proj.damage ..() CheckHardness() return /obj/structure/mineral_door/proc/CheckHardness() if(hardness <= 0) Dismantle(1) /obj/structure/mineral_door/proc/Dismantle(devastated = 0) if(!devastated) if (mineralType == "metal") var/ore = /obj/item/stack/sheet/metal for(var/i = 1, i <= oreAmount, i++) new ore(get_turf(src)) else var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") for(var/i = 1, i <= oreAmount, i++) new ore(get_turf(src)) else if (mineralType == "metal") var/ore = /obj/item/stack/sheet/metal for(var/i = 3, i <= oreAmount, i++) new ore(get_turf(src)) else var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") for(var/i = 3, i <= oreAmount, i++) new ore(get_turf(src)) qdel(src) /obj/structure/mineral_door/ex_act(severity = 1) switch(severity) if(1) Dismantle(1) if(2) if(prob(20)) Dismantle(1) else hardness-- CheckHardness() if(3) hardness -= 0.1 CheckHardness() return /obj/structure/mineral_door/iron mineralType = "metal" hardness = 3 /obj/structure/mineral_door/silver mineralType = "silver" hardness = 3 /obj/structure/mineral_door/gold mineralType = "gold" /obj/structure/mineral_door/uranium mineralType = "uranium" hardness = 3 luminosity = 2 /obj/structure/mineral_door/sandstone mineralType = "sandstone" hardness = 0.5 /obj/structure/mineral_door/transparent opacity = 0 /obj/structure/mineral_door/transparent/Close() ..() opacity = 0 /obj/structure/mineral_door/transparent/plasma mineralType = "plasma" /obj/structure/mineral_door/transparent/plasma/attackby(obj/item/weapon/W, mob/user, params) if(W.is_hot()) message_admins("Plasma mineral door ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma mineral door ignited by [key_name(user)] in ([x],[y],[z])") TemperatureAct(100) else return ..() /obj/structure/mineral_door/transparent/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) TemperatureAct(exposed_temperature) /obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct(temperature) atmos_spawn_air("plasma=500;TEMP=1000") hardness = 0 CheckHardness() /obj/structure/mineral_door/transparent/diamond mineralType = "diamond" hardness = 10 /obj/structure/mineral_door/wood mineralType = "wood" hardness = 1 openSound = 'sound/effects/doorcreaky.ogg' closeSound = 'sound/effects/doorcreaky.ogg' burn_state = FLAMMABLE burntime = 30 /obj/structure/mineral_door/wood/Dismantle(devastated = 0) if(!devastated) for(var/i = 1, i <= oreAmount, i++) new/obj/item/stack/sheet/mineral/wood(get_turf(src)) qdel(src)