diff --git a/code/game/machinery/poweredfans/fan_assembly.dm b/code/game/machinery/poweredfans/fan_assembly.dm new file mode 100644 index 0000000000..651b3342ac --- /dev/null +++ b/code/game/machinery/poweredfans/fan_assembly.dm @@ -0,0 +1,100 @@ +/obj/machinery/fan_assembly + name = "fan assembly" + desc = "A basic microfan assembly." + icon = 'icons/obj/poweredfans.dmi' + icon_state = "mfan_assembly" + max_integrity = 150 + use_power = NO_POWER_USE + power_channel = ENVIRON + idle_power_usage = 0 + active_power_usage = 0 + layer = ABOVE_NORMAL_TURF_LAYER + anchored = FALSE + density = FALSE + CanAtmosPass = ATMOS_PASS_YES + stat = 1 + var/buildstacktype = /obj/item/stack/sheet/plasteel + var/buildstackamount = 5 + /* + 1 = Wrenched in place + 2 = Welded in place + 3 = Wires attached to it, this makes it change to the full thing. + */ + +/obj/machinery/fan_assembly/attackby(obj/item/W, mob/living/user, params) + switch(stat) + if(1) + // Stat 1 + if(istype(W, /obj/item/weldingtool)) + if(weld(W, user)) + to_chat(user, "You weld the fan assembly securely into place.") + setAnchored(TRUE) + stat = 2 + update_icon_state() + return + if(2) + // Stat 2 + if(istype(W, /obj/item/stack/cable_coil)) + if(!W.tool_start_check(user, amount=2)) + to_chat(user, "You need two lengths of cable to wire the fan assembly!") + return + to_chat(user, "You start to add wires to the assembly...") + if(W.use_tool(src, user, 30, volume=50, amount=2)) + to_chat(user, "You add wires to the fan assembly.") + stat = 3 + var/obj/machinery/poweredfans/F = new(loc, src) + forceMove(F) + F.setDir(src.dir) + return + else if(istype(W, /obj/item/weldingtool)) + if(weld(W, user)) + to_chat(user, "You unweld the fan assembly from its place.") + stat = 1 + update_icon_state() + setAnchored(FALSE) + return + return ..() + +/obj/machinery/fan_assembly/wrench_act(mob/user, obj/item/I) + if(stat != 1) + return FALSE + user.visible_message("[user] disassembles [src].", + "You start to disassemble [src]...", "You hear wrenching noises.") + if(I.use_tool(src, user, 30, volume=50)) + deconstruct() + return TRUE + +/obj/machinery/fan_assembly/proc/weld(obj/item/weldingtool/W, mob/living/user) + if(!W.tool_start_check(user, amount=0)) + return FALSE + switch(stat) + if(1) + to_chat(user, "You start to weld \the [src]...") + if(2) + to_chat(user, "You start to unweld \the [src]...") + if(W.use_tool(src, user, 30, volume=50)) + return TRUE + return FALSE + +/obj/machinery/fan_assembly/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + new buildstacktype(loc,buildstackamount) + qdel(src) + +/obj/machinery/fan_assembly/examine(mob/user) + . = ..() + switch(stat) + if(1) + to_chat(user, "The fan assembly seems to be unwelded and loose.") + if(2) + to_chat(user, "The fan assembly seems to be welded, but missing wires.") + if(3) + to_chat(user, "The outer plating is wired firmly in place.") + +/obj/machinery/fan_assembly/update_icon_state() + . = ..() + switch(stat) + if(1) + icon_state = "mfan_assembly" + if(2) + icon_state = "mfan_welded" diff --git a/code/game/machinery/poweredfans/poweredfans.dm b/code/game/machinery/poweredfans/poweredfans.dm new file mode 100644 index 0000000000..3349a6894e --- /dev/null +++ b/code/game/machinery/poweredfans/poweredfans.dm @@ -0,0 +1,56 @@ +/obj/machinery/poweredfans + icon = 'icons/obj/poweredfans.dmi' + icon_state = "mfan_powered" + name = "micro powered fan" + desc = "A handmade fan, releasing a thin gust of air." + use_power = ACTIVE_POWER_USE + power_channel = ENVIRON + idle_power_usage = 5 + active_power_usage = 10 + max_integrity = 150 + layer = ABOVE_NORMAL_TURF_LAYER + anchored = TRUE + density = FALSE + CanAtmosPass = ATMOS_PASS_NO + var/obj/machinery/fan_assembly/assembly + +/obj/machinery/poweredfans/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + if(!assembly) + assembly = new() + assembly.forceMove(drop_location()) + assembly.stat = 2 + assembly.setAnchored(TRUE) + assembly.setDir(dir) + assembly = null + new /obj/item/stack/cable_coil(loc, 2) + qdel(src) + +/obj/machinery/poweredfans/wirecutter_act(mob/living/user, obj/item/I) + user.visible_message("[user] removes the wires from the [src].", + "You start to remove the wires from the [src]...", "You hear clanking and banging noises.") + if(I.use_tool(src, user, 30, volume=50)) + deconstruct() + return TRUE + +/obj/machinery/poweredfans/Initialize(mapload, obj/machinery/fan_assembly/FA) + . = ..() + if(FA) + assembly = FA + else + assembly = new(src) + assembly.stat = 3 + air_update_turf(1) + +/obj/machinery/poweredfans/power_change() + ..() + if(powered()) + icon_state = "mfan_powered" + CanAtmosPass = ATMOS_PASS_NO + air_update_turf(1) + else + icon_state = "mfan_unpowered" + CanAtmosPass = ATMOS_PASS_YES + air_update_turf(1) + update_icon_state() + diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index c3028c2fd5..fa52ec4520 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -179,6 +179,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = TRUE), \ new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 50), \ + new/datum/stack_recipe("micro powered fan assembly", /obj/machinery/fan_assembly, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ new /datum/stack_recipe_list("crates", list( \ new /datum/stack_recipe("gray crate", /obj/structure/closet/crate, 5, time = 50, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("internals crate", /obj/structure/closet/crate/internals, 5, time = 50, one_per_turf = 1, on_floor = 1), \ diff --git a/icons/obj/poweredfans.dmi b/icons/obj/poweredfans.dmi new file mode 100644 index 0000000000..9df1a4f816 Binary files /dev/null and b/icons/obj/poweredfans.dmi differ diff --git a/tgstation.dme b/tgstation.dme index c781c9893a..143f66a656 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -808,6 +808,8 @@ #include "code\game\machinery\mass_driver.dm" #include "code\game\machinery\navbeacon.dm" #include "code\game\machinery\PDApainter.dm" +#include "code\game\machinery\poweredfans\fan_assembly.dm" +#include "code\game\machinery\poweredfans\poweredfans.dm" #include "code\game\machinery\quantum_pad.dm" #include "code\game\machinery\recharger.dm" #include "code\game\machinery\rechargestation.dm"