diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 43a2cc90e4f..2441c741073 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -720,6 +720,18 @@ color="pink" icon = 'power_cond_pink.dmi' +/obj/structure/cable/orange + color="orange" + icon = 'power_cond_orange.dmi' + +/obj/structure/cable/cyan + color="cyan" + icon = 'power_cond_cyan.dmi' + +/obj/structure/cable/white + color="white" + icon = 'power_cond_white.dmi' + /obj/effect/manifest name = "manifest" icon = 'screen1.dmi' diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 020b93dd222..a13ae184f41 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -794,6 +794,18 @@ color = "pink" icon_state = "coil_pink" +/obj/item/weapon/cable_coil/orange + color = "orange" + icon_state = "coil_orange" + +/obj/item/weapon/cable_coil/cyan + color = "cyan" + icon_state = "coil_cyan" + +/obj/item/weapon/cable_coil/white + color = "white" + icon_state = "coil_white" + /obj/item/weapon/cable_coil/random/New() color = pick("red","yellow","green","blue","pink") icon_state = "coil_[color]" @@ -972,14 +984,41 @@ m_amt = 500 origin_tech = "materials=1" var/dispenser = 0 - -/obj/item/weapon/handcuffs/cyborg - dispenser = 1 + var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes /obj/item/weapon/handcuffs/cable name = "cable restraints" desc = "Looks like some cables tied together. Could be used to tie something up." icon_state = "cuff_red" + breakouttime = 300 //Deciseconds = 30s + +/obj/item/weapon/handcuffs/cable/red + icon_state = "cuff_red" + +/obj/item/weapon/handcuffs/cable/yellow + icon_state = "cuff_yellow" + +/obj/item/weapon/handcuffs/cable/blue + icon_state = "cuff_blue" + +/obj/item/weapon/handcuffs/cable/green + icon_state = "cuff_green" + +/obj/item/weapon/handcuffs/cable/pink + icon_state = "cuff_pink" + +/obj/item/weapon/handcuffs/cable/orange + icon_state = "cuff_orange" + +/obj/item/weapon/handcuffs/cable/cyan + icon_state = "cuff_cyan" + +/obj/item/weapon/handcuffs/cable/white + icon_state = "cuff_white" + +/obj/item/weapon/handcuffs/cyborg + dispenser = 1 + /obj/item/weapon/locator name = "locator" diff --git a/code/game/objects/closets/firecloset.dm b/code/game/objects/closets/firecloset.dm index c3a6ad2fbc5..245991be54d 100644 --- a/code/game/objects/closets/firecloset.dm +++ b/code/game/objects/closets/firecloset.dm @@ -60,11 +60,11 @@ if(prob(20)) new /obj/item/weapon/storage/belt/utility(src) if(prob(30)) - new /obj/item/weapon/cable_coil(src) + new /obj/item/weapon/cable_coil/random(src) if(prob(30)) - new /obj/item/weapon/cable_coil(src) + new /obj/item/weapon/cable_coil/random(src) if(prob(30)) - new /obj/item/weapon/cable_coil(src) + new /obj/item/weapon/cable_coil/random(src) if(prob(20)) new /obj/item/device/multitool(src) if(prob(5)) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 38918eb1725..e420545917a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -23,8 +23,10 @@ for(var/mob/O in viewers(user, null)) O.show_message("\red [user] is trying to put handcuffs on [M]!", 1) spawn(30) + if(!M) return if(p_loc == user.loc && p_loc_m == M.loc) M.handcuffed = new /obj/item/weapon/handcuffs(M) + M.update_inv_handcuffed() else if ((CLUMSY in usr.mutations) && prob(50)) @@ -64,8 +66,10 @@ M.requests += O spawn( 0 ) if(istype(src, /obj/item/weapon/handcuffs/cable)) +// feedback_add_details("handcuffs","C") playsound(src.loc, 'cablecuff.ogg', 30, 1, -2) else +// feedback_add_details("handcuffs","H") playsound(src.loc, 'handcuffs.ogg', 30, 1, -2) O.process() return diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 4bc4a25de19..723d9afa816 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -397,11 +397,11 @@ WELDINGTOOOL /obj/item/weapon/wirecutters/attack(mob/M as mob, mob/user as mob) if((M.handcuffed) && (istype(M:handcuffed, /obj/item/weapon/handcuffs/cable))) - M.visible_message("You cut \the [M]'s restraints with \the [src]!",\ - "\The [usr] cuts \the [M]'s restraints with \the [src]!",\ + usr.visible_message("\The [usr] cuts \the [M]'s restraints with \the [src]!",\ + "You cut \the [M]'s restraints with \the [src]!",\ "You hear cable being cut.") M.handcuffed = null - M.update_clothing() + M.update_inv_handcuffed() return else - ..() + ..() \ No newline at end of file diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm index fc5c1aa2f7e..b707c10fc41 100644 --- a/code/game/objects/storage/belt.dm +++ b/code/game/objects/storage/belt.dm @@ -9,33 +9,33 @@ max_w_class = 3 max_combined_w_class = 21 - proc/can_use() - if(!ismob(loc)) return 0 - var/mob/M = loc - if(src in M.get_equipped_items()) - return 1 +/obj/item/weapon/storage/belt/proc/can_use() + if(!ismob(loc)) return 0 + var/mob/M = loc + if(src in M.get_equipped_items()) + return 1 + else + return 0 + + +/obj/item/weapon/storage/belt/MouseDrop(obj/over_object as obj, src_location, over_location) + var/mob/M = usr + if(!istype(over_object, /obj/screen)) + return ..() + playsound(src.loc, "rustle", 50, 1, -5) + if (!M.restrained() && !M.stat && can_use()) + if (over_object.name == "r_hand") + if (!( M.r_hand )) + M.u_equip(src) + M.r_hand = src else - return 0 - - - MouseDrop(obj/over_object as obj, src_location, over_location) - var/mob/M = usr - if(!istype(over_object, /obj/screen)) - return ..() - playsound(src.loc, "rustle", 50, 1, -5) - if (!M.restrained() && !M.stat && can_use()) - if (over_object.name == "r_hand") - if (!( M.r_hand )) + if (over_object.name == "l_hand") + if (!( M.l_hand )) M.u_equip(src) - M.r_hand = src - else - if (over_object.name == "l_hand") - if (!( M.l_hand )) - M.u_equip(src) - M.l_hand = src - M.update_clothing() - src.add_fingerprint(usr) - return + M.l_hand = src + M.update_clothing() + src.add_fingerprint(usr) + return @@ -65,7 +65,7 @@ new /obj/item/weapon/weldingtool(src) new /obj/item/weapon/crowbar(src) new /obj/item/weapon/wirecutters(src) - new /obj/item/weapon/cable_coil(src,30,pick("red","yellow")) + new /obj/item/weapon/cable_coil(src,30,pick("red","yellow","orange")) /obj/item/weapon/storage/belt/utility/atmostech/New() diff --git a/code/game/objects/storage/toolbox.dm b/code/game/objects/storage/toolbox.dm index 846aafcec41..512d8ef88de 100644 --- a/code/game/objects/storage/toolbox.dm +++ b/code/game/objects/storage/toolbox.dm @@ -17,7 +17,7 @@ /obj/item/weapon/storage/toolbox/electrical/New() ..() - var/color = pick("red","yellow","green","blue") + var/color = pick("red","yellow","green","blue","pink","orange","cyan","white") new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wirecutters(src) new /obj/item/device/t_scanner(src) @@ -31,7 +31,7 @@ /obj/item/weapon/storage/toolbox/syndicate/New() ..() - var/color = pick("red","yellow","green","blue") + var/color = pick("red","yellow","green","blue","pink","orange","cyan","white") new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm index 726f141841a..06a21173169 100644 --- a/code/modules/mob/screen.dm +++ b/code/modules/mob/screen.dm @@ -694,6 +694,10 @@ if(resisting) for(var/mob/O in viewers(usr, null)) O.show_message(text("\red [] resists!", usr), 1) + + + + //breaking out of handcuffs if(usr:handcuffed && usr:canmove && (usr.last_special <= world.time)) var/breakouttime = 1200 var/displaytime = 2 @@ -716,10 +720,13 @@ del(usr:handcuffed) usr:handcuffed = null else - if(istype(usr:handcuffed, /obj/item/weapon/handcuffs/cable)) - breakouttime = 300 - displaytime = 0.5 - usr << "\red You attempt to remove \the [usr:handcuffed]. (This will take around [displaytime] minutes and you need to stand still)" + var/obj/item/weapon/handcuffs/HC = usr:handcuffed + var/breakouttime = 1200 //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/handcuffs type + var/displaytime = 2 //Minutes to display in the "this will take X minutes." + if(istype(HC)) //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future... + breakouttime = HC.breakouttime + displaytime = breakouttime / 600 //Minutes + usr << "\red You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)" for(var/mob/O in viewers(usr)) O.show_message(text("\red [] attempts to remove \the [usr:handcuffed]!", usr), 1) spawn(0) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index ce87f5a4caf..a94ae012ae4 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -246,19 +246,18 @@ set name = "Make Cable Restraints" set category = "Object" var/mob/M = usr - if (istype(M, /mob/dead/)) return - if (usr.stat) return - if(!istype(usr.loc,/turf)) return - if(src.amount <= 14) - usr << "\red You need at least 15 lengths to make restraints!" - return - var/obj/item/weapon/handcuffs/cable/B = new /obj/item/weapon/handcuffs/cable(usr.loc) - usr << "\blue You wind some cable together to make some restraints." - if(src.amount == 15) - del(src) + + if(ishuman(M) && !M.restrained() && !M.stat && !M.paralysis && ! M.stunned) + if(!istype(usr.loc,/turf)) return + if(src.amount <= 14) + usr << "\red You need at least 15 lengths to make restraints!" + return + var/obj/item/weapon/handcuffs/cable/B = new /obj/item/weapon/handcuffs/cable(usr.loc) + B.icon_state = "cuff_[color]" + usr << "\blue You wind some cable together to make some restraints." + src.use(15) else - src.amount -= 15 - B.layer = 20 + usr << "\blue You cannot do that." ..() /obj/item/weapon/cable_coil/attackby(obj/item/weapon/W, mob/user) @@ -561,3 +560,11 @@ obj/structure/cable/proc/cableColor(var/colorC) icon = 'power_cond_green.dmi' if("blue") icon = 'power_cond_blue.dmi' + if("pink") + icon = 'power_cond_pink.dmi' + if("orange") + icon = 'power_cond_orange.dmi' + if("cyan") + icon = 'power_cond_cyan.dmi' + if("white") + icon = 'power_cond_white.dmi' diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 79293e5ab56..e3f5eab968e 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index a95d01cdff9..d424877853b 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ diff --git a/icons/obj/power_cond_cyan.dmi b/icons/obj/power_cond_cyan.dmi new file mode 100644 index 00000000000..6e1fa1238e6 Binary files /dev/null and b/icons/obj/power_cond_cyan.dmi differ diff --git a/icons/obj/power_cond_orange.dmi b/icons/obj/power_cond_orange.dmi new file mode 100644 index 00000000000..e3c3d0aa8c8 Binary files /dev/null and b/icons/obj/power_cond_orange.dmi differ diff --git a/icons/obj/power_cond_white.dmi b/icons/obj/power_cond_white.dmi new file mode 100644 index 00000000000..9036341ee13 Binary files /dev/null and b/icons/obj/power_cond_white.dmi differ