diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 9bdde812c9c..c44c2402afd 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -310,6 +310,13 @@ if (wait_desc) to_chat(user, wait_desc) +/obj/item/conversion_kit + name = "conversion kit" + desc = "A strange box containing wood working tools and an instruction paper to turn stun batons into something else." + icon = 'icons/obj/storage.dmi' + icon_state = "uk" + custom_price = 450 + /obj/item/melee/classic_baton/telescopic name = "telescopic baton" desc = "A compact yet robust personal defense weapon. Can be concealed when folded." diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index fc0578889da..96085e30adc 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -21,6 +21,7 @@ var/hitcost = 1000 var/throw_hit_chance = 35 var/preload_cell_type //if not empty the baton starts with this type of cell + var/convertable = TRUE //if it can converted with a conversion kit /obj/item/melee/baton/get_cell() return cell @@ -37,13 +38,26 @@ else cell = new preload_cell_type(src) update_icon() + RegisterSignal(src, COMSIG_PARENT_ATTACKBY, .proc/convert) /obj/item/melee/baton/Destroy() if(cell) QDEL_NULL(cell) + UnregisterSignal(src, COMSIG_PARENT_ATTACKBY) return ..() +/obj/item/melee/baton/proc/convert(datum/source, obj/item/I, mob/user) + if(istype(I,/obj/item/conversion_kit) && convertable) + var/turf/T = get_turf(src) + var/obj/item/melee/classic_baton/B = new /obj/item/melee/classic_baton (T) + B.alpha = 20 + playsound(T, 'sound/items/drill_use.ogg', 80, TRUE, -1) + animate(src, alpha = 0, time = 10) + animate(B, alpha = 255, time = 10) + qdel(I) + qdel(src) + /obj/item/melee/baton/handle_atom_del(atom/A) if(A == cell) cell = null @@ -51,7 +65,6 @@ update_icon() return ..() - /obj/item/melee/baton/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) ..() //Only mob/living types have stun handling @@ -235,6 +248,7 @@ hitcost = 2000 throw_hit_chance = 10 slot_flags = ITEM_SLOT_BACK + convertable = FALSE var/obj/item/assembly/igniter/sparkler = 0 /obj/item/melee/baton/cattleprod/Initialize() @@ -261,6 +275,7 @@ throw_range = 5 hitcost = 2000 throw_hit_chance = 99 //Have you prayed today? + convertable = FALSE custom_materials = list(/datum/material/iron = 10000, /datum/material/glass = 4000, /datum/material/silver = 10000, /datum/material/gold = 2000) /obj/item/melee/baton/boomerang/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 60eecbe39c7..79834ac103d 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -407,6 +407,17 @@ /obj/item/storage/box/wall_flash) crate_name = "wall-mounted flash crate" +/datum/supply_pack/security/constable + name = "Traditional Equipment Crate" + desc = "Spare equipment found in a warehouse." + cost = 1100 + contraband = TRUE + contains = list(/obj/item/clothing/under/rank/security/constable, + /obj/item/clothing/head/helmet/constable, + /obj/item/clothing/gloves/color/white, + /obj/item/clothing/mask/whistle, + /obj/item/conversion_kit) + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Armory ////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 763443bd7a4..67eb8435656 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -174,6 +174,7 @@ desc = "These look pretty fancy." icon_state = "white" item_state = "wgloves" + custom_price = 200 /obj/effect/spawner/lootdrop/gloves name = "random gloves" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index c917b3e2bc3..06aa84ec612 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -163,6 +163,16 @@ icon_state = "policehelm" dynamic_hair_suffix = "" +/obj/item/clothing/head/helmet/constable + name = "constable helmet" + desc = "A british looking helmet." + mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' + icon_state = "constable" + item_state = "constable" + worn_x_dimension = 64 + worn_y_dimension = 64 + custom_price = 350 + /obj/item/clothing/head/helmet/swat/nanotrasen name = "\improper SWAT helmet" desc = "An extremely robust, space-worthy helmet with the Nanotrasen logo emblazoned on the top." diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 7ddccf1b1bc..e997a3c0b42 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -176,6 +176,21 @@ GLOBAL_LIST_INIT(hailer_phrases, list( /obj/item/clothing/mask/gas/sechailer/proc/reset_overuse_cooldown() overuse_cooldown = FALSE +/obj/item/clothing/mask/whistle + name = "police whistle" + desc = "A police whistle for when you need to make sure the criminals hear you." + icon_state = "whistle" + item_state = "whistle" + slot_flags = ITEM_SLOT_MASK|ITEM_SLOT_NECK + custom_price = 150 + actions_types = list(/datum/action/item_action/halt) + +/obj/item/clothing/mask/whistle/ui_action_click(mob/user, action) + if(cooldown < world.time - 100) + usr.audible_message("HALT!") + playsound(src.loc, "sound/misc/whistle.ogg", 100, FALSE, 4) + cooldown = world.time + #undef PHRASE_COOLDOWN #undef OVERUSE_COOLDOWN #undef AGGR_GOOD_COP diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 43e6172956c..e59d5e325cd 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -53,6 +53,14 @@ item_state = "officerblueclothes" alt_covers_chest = TRUE +/obj/item/clothing/under/rank/security/constable + name = "constable outfit" + desc = "A british looking outfit." + icon_state = "constable" + item_state = "constable" + can_adjust = FALSE + custom_price = 200 + /obj/item/clothing/under/rank/security/warden name = "security suit" desc = "A formal security suit for officers complete with Nanotrasen belt buckle." diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index c8e324d4bd2..7ae1fd2c793 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/under/security.dmi b/icons/mob/clothing/under/security.dmi index f9c6683dc27..3e5313fa30e 100644 Binary files a/icons/mob/clothing/under/security.dmi and b/icons/mob/clothing/under/security.dmi differ diff --git a/icons/mob/large-worn-icons/64x64/head.dmi b/icons/mob/large-worn-icons/64x64/head.dmi index feaf64a9284..63e87d5e04d 100644 Binary files a/icons/mob/large-worn-icons/64x64/head.dmi and b/icons/mob/large-worn-icons/64x64/head.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index a8fb053b44f..f01c4718fd2 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 7ef6e5fe38a..370d8369a93 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/under/security.dmi b/icons/obj/clothing/under/security.dmi index 9150de27481..8c38d7df5a7 100644 Binary files a/icons/obj/clothing/under/security.dmi and b/icons/obj/clothing/under/security.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 504e7e6c2c8..ac12e293d22 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/sound/misc/whistle.ogg b/sound/misc/whistle.ogg new file mode 100644 index 00000000000..52d80a2c716 Binary files /dev/null and b/sound/misc/whistle.ogg differ