diff --git a/code/game/objects/items/weapons/keys.dm b/code/game/objects/items/weapons/keys.dm new file mode 100644 index 0000000000..fc13449767 --- /dev/null +++ b/code/game/objects/items/weapons/keys.dm @@ -0,0 +1,10 @@ +/obj/item/weapon/simple_key + name = "key" + desc = "A plain, old-timey key, as one might use to unlock a door." + icon = 'icons/obj/keys.dmi' + icon_state = "key_basetype" + drop_sound = 'sound/items/drop/ring.ogg' + pickup_sound = 'sound/items/pickup/ring.ogg' + w_class = ITEMSIZE_TINY + var/keyverb = "uses" //so simple_keys can be keycards instead, if desired + var/key_id = "placeholder_DONOTUSE" //needs to match the associated door's LOCK_ID var \ No newline at end of file diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm index f54abd7439..f032855e3a 100644 --- a/code/game/objects/structures/simple_doors.dm +++ b/code/game/objects/structures/simple_doors.dm @@ -16,6 +16,10 @@ var/knock_sound = 'sound/machines/door/knock_glass.ogg' var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg' + var/locked = FALSE //has the door been locked? + var/lock_id = null //does the door have an associated key? + var/keysound = 'sound/items/toolbelt_equip.ogg' + /obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) TemperatureAct(exposed_temperature) @@ -97,6 +101,9 @@ var/mob/M = user if(!material.can_open_material_door(user)) return + if(locked && state == 0) + to_chat(M,"It's locked!") + return if(world.time - user.last_bumped <= 60) return if(M.client) @@ -147,13 +154,24 @@ /obj/structure/simple_door/attackby(obj/item/weapon/W as obj, mob/user as mob) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(istype(W,/obj/item/weapon/pickaxe)) + if(istype(W,/obj/item/weapon/simple_key)) + var/obj/item/weapon/simple_key/key = W + if(state) + to_chat(user,"\The [src] must be closed in order for you to lock it.") + else if(key.key_id != src.lock_id) + to_chat(user,"The [key] doesn't fit \the [src]'s lock!") + else if(key.key_id == src.lock_id) + visible_message("[user] [key.keyverb] \the [key] and [locked ? "unlocks" : "locks"] \the [src].") + locked = !locked + playsound(src, keysound,100, 1) + return + if(istype(W,/obj/item/weapon/pickaxe) && breakable) var/obj/item/weapon/pickaxe/digTool = W visible_message("[user] starts digging [src]!") if(do_after(user,digTool.digspeed*hardness) && src) visible_message("[user] finished digging [src]!") Dismantle() - else if(istype(W,/obj/item/weapon)) //not sure, can't not just weapons get passed to this proc? + else if(istype(W,/obj/item/weapon) && breakable) //not sure, can't not just weapons get passed to this proc? hardness -= W.force/10 visible_message("[user] hits [src] with [W]!") if(material == get_material_by_name("resin")) @@ -163,7 +181,7 @@ else playsound(src, 'sound/weapons/smash.ogg', 50, 1) CheckHardness() - else if(istype(W,/obj/item/weapon/weldingtool)) + else if(istype(W,/obj/item/weapon/weldingtool) && breakable) var/obj/item/weapon/weldingtool/WT = W if(material.ignition_point && WT.remove_fuel(0, user)) TemperatureAct(150) diff --git a/icons/obj/keys.dmi b/icons/obj/keys.dmi new file mode 100644 index 0000000000..cd301f910d Binary files /dev/null and b/icons/obj/keys.dmi differ diff --git a/vorestation.dme b/vorestation.dme index d45f0f0880..ca8966d122 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1305,6 +1305,7 @@ #include "code\game\objects\items\weapons\handcuffs_vr.dm" #include "code\game\objects\items\weapons\improvised_components.dm" #include "code\game\objects\items\weapons\inducer_vr.dm" +#include "code\game\objects\items\weapons\keys.dm" #include "code\game\objects\items\weapons\manuals.dm" #include "code\game\objects\items\weapons\manuals_vr.dm" #include "code\game\objects\items\weapons\mop.dm"