diff --git a/code/datums/autolathe/engineering.dm b/code/datums/autolathe/engineering.dm index fd907ba5f8..e2ff93b797 100644 --- a/code/datums/autolathe/engineering.dm +++ b/code/datums/autolathe/engineering.dm @@ -50,6 +50,10 @@ name = "keycard authenticator electronics" path =/obj/item/weapon/circuitboard/keycard_auth +/datum/category_item/autolathe/engineering/geiger_wall + name = "wall-mounted geiger counter electronics" + path =/obj/item/weapon/circuitboard/geiger + /datum/category_item/autolathe/engineering/photocopier name = "photocopier electronics" path =/obj/item/weapon/circuitboard/photocopier diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm index 601d65a616..d2ee11fbf8 100644 --- a/code/game/machinery/frame.dm +++ b/code/game/machinery/frame.dm @@ -214,6 +214,14 @@ x_offset = 24 y_offset = 24 +/datum/frame/frame_types/geiger + name = "Geiger Counter" + frame_class = FRAME_CLASS_ALARM + frame_size = 2 + frame_style = FRAME_STYLE_WALL + x_offset = 28 + y_offset = 28 + ////////////////////////////// // Frame Object (Structure) ////////////////////////////// diff --git a/code/game/objects/items/devices/geiger.dm b/code/game/objects/items/devices/geiger.dm index 62c1f7d1ed..99a5bc5fdd 100644 --- a/code/game/objects/items/devices/geiger.dm +++ b/code/game/objects/items/devices/geiger.dm @@ -85,3 +85,84 @@ icon_state = "geiger_on_4" if(RAD_LEVEL_VERY_HIGH to INFINITY) icon_state = "geiger_on_5" + +/////////////////////// + +/obj/item/device/geiger/wall + name = "mounted geiger counter" + desc = "A wall mounted device used for detecting and measuring radiation in an area." + icon = 'icons/obj/device.dmi' + icon_state = "geiger_wall" + item_state = "geiger_wall" + anchored = 1 + scanning = 1 + radiation_count = 0 + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + w_class = ITEMSIZE_LARGE + flags = NOBLOODY + var/circuit = /obj/item/weapon/circuitboard/geiger + var/number = 0 + var/last_tick //used to delay the powercheck + var/wiresexposed = 0 + +/obj/item/device/geiger/wall/Initialize() + START_PROCESSING(SSobj, src) + soundloop = new(list(src), FALSE) + return ..() + +/obj/item/device/geiger/wall/Destroy() + STOP_PROCESSING(SSobj, src) + QDEL_NULL(soundloop) + return ..() + +/obj/item/device/geiger/wall/attack_self(var/mob/user) + scanning = !scanning + update_icon() + update_sound() + to_chat(user, "\icon[src] You switch [scanning ? "on" : "off"] \the [src].") + +/obj/item/device/geiger/wall/update_icon() + if(!scanning) + icon_state = "geiger_wall-p" + return 1 + + switch(radiation_count) + if(null) + icon_state = "geiger_level_1" + if(-INFINITY to RAD_LEVEL_LOW) + icon_state = "geiger_level_1" + if(RAD_LEVEL_LOW to RAD_LEVEL_MODERATE) + icon_state = "geiger_level_2" + if(RAD_LEVEL_MODERATE to RAD_LEVEL_HIGH) + icon_state = "geiger_level_3" + if(RAD_LEVEL_HIGH to RAD_LEVEL_VERY_HIGH) + icon_state = "geiger_level_4" + if(RAD_LEVEL_VERY_HIGH to INFINITY) + icon_state = "geiger_level_5" + +/obj/item/device/geiger/wall/attack_ai(mob/user as mob) + src.add_fingerprint(user) + spawn (0) + attack_self(user) + +/obj/item/device/geiger/wall/attack_hand(mob/user as mob) + src.add_fingerprint(user) + spawn (0) + attack_self(user) + +/obj/item/device/geiger/wall/north + pixel_y = 28 + dir = SOUTH + +/obj/item/device/geiger/wall/south + pixel_y = -28 + dir = NORTH + +/obj/item/device/geiger/wall/east + pixel_x = 28 + dir = EAST + +/obj/item/device/geiger/wall/west + pixel_x = -28 + dir = WEST \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm index 1b95cc131e..36effbbbb6 100644 --- a/code/game/objects/items/weapons/circuitboards/frame.dm +++ b/code/game/objects/items/weapons/circuitboards/frame.dm @@ -68,6 +68,12 @@ board_type = new /datum/frame/frame_types/keycard_authenticator matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50, MAT_COPPER = 100) +/obj/item/weapon/circuitboard/geiger + name = T_BOARD("geiger counter") + build_path = /obj/item/device/geiger/wall + board_type = new /datum/frame/frame_types/geiger + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + //Computer /obj/item/weapon/circuitboard/holopad diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index f30cf9a9fe..60088c1e96 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -634,6 +634,7 @@ /obj/item/weapon/circuitboard/atm, /obj/item/weapon/circuitboard/guestpass, /obj/item/weapon/circuitboard/keycard_auth, + /obj/item/weapon/circuitboard/geiger, /obj/item/weapon/circuitboard/photocopier, /obj/item/weapon/circuitboard/fax, /obj/item/weapon/circuitboard/request, diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index b66e5111d8..8750603de4 100644 Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ