diff --git a/code/datums/autolathe/engineering.dm b/code/datums/autolathe/engineering.dm index ce6b5f07b5..0921806ac0 100644 --- a/code/datums/autolathe/engineering.dm +++ b/code/datums/autolathe/engineering.dm @@ -58,6 +58,10 @@ name = "fax machine electronics" path =/obj/item/weapon/circuitboard/fax +/datum/category_item/autolathe/engineering/papershredder + name = "paper shredder electronics" + path =/obj/item/weapon/circuitboard/papershredder + /datum/category_item/autolathe/engineering/microwave name = "microwave electronics" path =/obj/item/weapon/circuitboard/microwave diff --git a/code/game/objects/items/weapons/circuitboards/machinery/papershredder.dm b/code/game/objects/items/weapons/circuitboards/machinery/papershredder.dm new file mode 100644 index 0000000000..ef4575bafb --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/papershredder.dm @@ -0,0 +1,13 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/papershredder + name = T_BOARD("papershredder") + build_path = /obj/machinery/papershredder + board_type = new /datum/frame/frame_types/machine + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + /obj/item/weapon/stock_parts/motor = 1, + /obj/item/weapon/stock_parts/gear = 2, + /obj/item/weapon/stock_parts/micro_laser = 1) diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index 48e95071c5..3283e67f7d 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -1,10 +1,19 @@ +// +// Paper Shredder Machine +// /obj/machinery/papershredder name = "paper shredder" desc = "For those documents you don't want seen." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "papershredder0" + icon = 'icons/obj/papershredder.dmi' + icon_state = "shredder-off" + var/shred_anim = "shredder-shredding" density = 1 anchored = 1 + use_power = 1 + idle_power_usage = 10 + active_power_usage = 200 + power_channel = EQUIP + circuit = /obj/item/weapon/circuitboard/papershredder var/max_paper = 10 var/paperamount = 0 var/list/shred_amounts = list( @@ -16,17 +25,40 @@ /obj/item/weapon/paper_bundle = 3, ) +/obj/machinery/papershredder/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + RefreshParts() + update_icon() + /obj/machinery/papershredder/attackby(var/obj/item/W, var/mob/user) if(istype(W, /obj/item/weapon/storage)) empty_bin(user, W) return + else if(istype(W, /obj/item/weapon/wrench)) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + anchored = !anchored + user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + return + else if(default_part_replacement(user, W)) + return + else if(default_deconstruction_screwdriver(user, W)) + return + else if(default_deconstruction_crowbar(user, W)) + return else var/paper_result for(var/shred_type in shred_amounts) if(istype(W, shred_type)) paper_result = shred_amounts[shred_type] if(paper_result) + if(inoperable()) + return // Need powah! if(paperamount == max_paper) user << "\The [src] is full; please empty it before you continue." return @@ -34,6 +66,7 @@ user.drop_from_inventory(W) qdel(W) playsound(src.loc, 'sound/items/pshred.ogg', 75, 1) + flick(shred_anim, src) if(paperamount > max_paper) user <<"\The [src] was too full, and shredded paper goes everywhere!" for(var/i=(paperamount-max_paper);i>0;i--) @@ -92,8 +125,40 @@ paperamount-- return PoolOrNew(/obj/item/weapon/shreddedp, get_turf(src)) +/obj/machinery/papershredder/power_change() + ..() + spawn(rand(0,15)) + update_icon() + /obj/machinery/papershredder/update_icon() - icon_state = "papershredder[max(0,min(5,Floor(paperamount/2)))]" + overlays.Cut() + if(operable()) + icon_state = "shredder-on" + else + icon_state = "shredder-off" + // Fullness overlay + overlays += "shredder-[max(0,min(5,Floor(paperamount/max_paper*5)))]" + if (panel_open) + overlays += "panel_open" + +// +// Shredded Paper Item +// + +/obj/item/weapon/shreddedp + name = "shredded paper" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "shredp" + throwforce = 0 + w_class = ITEMSIZE_TINY + throw_range = 3 + throw_speed = 1 + +/obj/item/weapon/shreddedp/New() + ..() + pixel_x = rand(-5,5) + pixel_y = rand(-5,5) + if(prob(65)) color = pick("#BABABA","#7F7F7F") /obj/item/weapon/shreddedp/attackby(var/obj/item/W as obj, var/mob/user) if(istype(W, /obj/item/weapon/flame/lighter)) @@ -122,18 +187,3 @@ M.drop_from_inventory(src) PoolOrNew(/obj/effect/decal/cleanable/ash,get_turf(src)) qdel(src) - -/obj/item/weapon/shreddedp - name = "shredded paper" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "shredp" - throwforce = 0 - w_class = ITEMSIZE_TINY - throw_range = 3 - throw_speed = 1 - -/obj/item/weapon/shreddedp/New() - ..() - pixel_x = rand(-5,5) - pixel_y = rand(-5,5) - if(prob(65)) color = pick("#BABABA","#7F7F7F") diff --git a/icons/obj/papershredder.dmi b/icons/obj/papershredder.dmi new file mode 100644 index 0000000000..36764945df Binary files /dev/null and b/icons/obj/papershredder.dmi differ diff --git a/polaris.dme b/polaris.dme index ad53ed1052..46dbd389f4 100644 --- a/polaris.dme +++ b/polaris.dme @@ -862,6 +862,7 @@ #include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\papershredder.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\power.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\recharge_station.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\research.dm"