diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index 269d71e68b4..adb73f87d40 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -68,6 +68,7 @@ /obj/item/mod/module/flashlight, /obj/item/mod/module/t_ray, /obj/item/mod/module/magboot, + /obj/item/mod/module/firefighting_tank, ) default_pins = list( /obj/item/mod/module/magboot, diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index 87d079af7e9..2f07adbc495 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -151,3 +151,110 @@ QDEL_NULL(chain) return ..() +/// Atmos water tank module + +/obj/item/mod/module/firefighting_tank + name = "MOD firefighting tank" + desc = "A refrigerated and pressurized module tank with an extinguisher nozzle, intended to fight fires. Swaps between extinguisher, nanofrost launcher, and metal foam dispenser for breaches. Nanofrost converts plasma in the air to nitrogen, but only if it is combusting at the time." + icon_state = "firefighting_tank" + module_type = MODULE_ACTIVE + complexity = 2 + active_power_cost = DEFAULT_CHARGE_DRAIN * 3 + device = /obj/item/extinguisher/mini/mod + +#define EXTINGUISHER 0 +#define NANOFROST 1 +#define METAL_FOAM 2 + +/obj/item/extinguisher/mini/mod + name = "modsuit extinguisher nozzle" + desc = "A heavy duty nozzle attached to a modsuit's internal tank." + icon = 'icons/obj/watertank.dmi' + icon_state = "atmos_nozzle_1" + item_state = "nozzleatmos" + safety = 0 + max_water = 500 + power = 8 + precision = 1 + cooling_power = 5 + w_class = WEIGHT_CLASS_HUGE + flags = NODROP // Necessary to ensure that the nozzle and tank never seperate + var/nozzle_mode = EXTINGUISHER + var/metal_synthesis_charge = 5 + COOLDOWN_DECLARE(nanofrost_cooldown) + +/obj/item/extinguisher/mini/mod/attack_self(mob/user) + switch(nozzle_mode) + if(EXTINGUISHER) + nozzle_mode = NANOFROST + to_chat(user, "Swapped to nanofrost launcher.") + if(NANOFROST) + nozzle_mode = METAL_FOAM + to_chat(user, "Swapped to metal foam synthesizer.") + if(METAL_FOAM) + nozzle_mode = EXTINGUISHER + to_chat(user, "Swapped to water extinguisher.") + update_icon(UPDATE_ICON_STATE) + +/obj/item/extinguisher/mini/mod/update_icon_state() + switch(nozzle_mode) + if(EXTINGUISHER) + icon_state = "atmos_nozzle_1" + if(NANOFROST) + icon_state = "atmos_nozzle_2" + if(METAL_FOAM) + icon_state = "atmos_nozzle_3" + +/obj/item/extinguisher/mini/mod/examine(mob/user) + . = ..() + switch(nozzle_mode) + if(EXTINGUISHER) + . += "[src] is currently set to extinguishing mode." + if(NANOFROST) + . += "[src] is currently set to nanofrost mode." + if(METAL_FOAM) + . += "[src] is currently set to metal foam mode." + +/obj/item/extinguisher/mini/mod/afterattack(atom/target, mob/user) + var/is_adjacent = user.Adjacent(target) + if(is_adjacent && AttemptRefill(target, user)) + return + switch(nozzle_mode) + if(EXTINGUISHER) + ..() + + if(NANOFROST) + if(reagents.total_volume < 100) + to_chat(user, "You need at least 100 units of water to use the nanofrost launcher!") + return + if(!COOLDOWN_FINISHED(src, nanofrost_cooldown)) + to_chat(user, "Nanofrost launcher is still recharging.") + return + COOLDOWN_START(src, nanofrost_cooldown, 10 SECONDS) + reagents.remove_any(100) + var/obj/effect/nanofrost_container/A = new /obj/effect/nanofrost_container(get_turf(src)) + log_game("[key_name(user)] used Nanofrost at [get_area(user)] ([user.x], [user.y], [user.z]).") + playsound(src, 'sound/items/syringeproj.ogg', 40, 1) + for(var/counter in 1 to 5) + step_towards(A, target) + sleep(2) + A.Smoke() + + if(METAL_FOAM) + if(!is_adjacent|| !isturf(target)) + return + if(metal_synthesis_charge <= 0) + to_chat(user, "Metal foam mix is still being synthesized.") + return + var/obj/effect/particle_effect/foam/F = new/obj/effect/particle_effect/foam(get_turf(target), 1) + F.amount = 0 + reagents.remove_any(10) + metal_synthesis_charge-- + addtimer(CALLBACK(src, PROC_REF(decrease_metal_charge)), 5 SECONDS) + +/obj/item/extinguisher/mini/mod/proc/decrease_metal_charge() + metal_synthesis_charge++ + +#undef EXTINGUISHER +#undef NANOFROST +#undef METAL_FOAM diff --git a/icons/obj/clothing/modsuit/mod_modules.dmi b/icons/obj/clothing/modsuit/mod_modules.dmi index 37e377f952c..382401bffcb 100644 Binary files a/icons/obj/clothing/modsuit/mod_modules.dmi and b/icons/obj/clothing/modsuit/mod_modules.dmi differ diff --git a/icons/obj/watertank.dmi b/icons/obj/watertank.dmi index 0c0278d69ce..2ec36339d92 100644 Binary files a/icons/obj/watertank.dmi and b/icons/obj/watertank.dmi differ