diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 0df10cd97c4..7417889dcab 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -48,4 +48,4 @@ /obj/effect/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap)) return - ..() + ..() diff --git a/code/game/objects/items/weapons/mop_deploy.dm b/code/game/objects/items/weapons/mop_deploy.dm new file mode 100644 index 00000000000..b8eb201b5c1 --- /dev/null +++ b/code/game/objects/items/weapons/mop_deploy.dm @@ -0,0 +1,73 @@ +/obj/item/weapon/mop_deploy + name = "mop" + desc = "Deployable mop." + icon_state = "mop" + force = 3 + anchored = 1 // Never spawned outside of inventory, should be fine. + throwforce = 1 //Throwing or dropping the item deletes it. + throw_speed = 1 + throw_range = 1 + w_class = 4.0//So you can't hide it in your pocket or some such. + attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") + var/mob/living/creator + var/mopping = 0 + var/mopcount = 0 + + +/obj/item/weapon/mop_deploy/New() + create_reagents(5) + processing_objects |= src + +/turf/proc/clean_deploy(atom/source) + if(source.reagents.has_reagent("water", 1)) + clean_blood() + if(istype(src, /turf/simulated)) + var/turf/simulated/T = src + T.dirt = 0 + for(var/obj/effect/O in src) + if(istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay)) + del(O) + source.reagents.reaction(src, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly. + source.reagents.remove_any(1) //reaction() doesn't use up the reagents + +/obj/item/weapon/mop_deploy/afterattack(atom/A, mob/user, proximity) + if(!proximity) return + if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) + user.visible_message("[user] begins to clean \the [get_turf(A)].") + + if(do_after(user, 40)) + var/turf/T = get_turf(A) + if(T) + T.clean_deploy(src) + user << "You have finished mopping!" + +/obj/effect/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/mop_deploy) || istype(I, /obj/item/weapon/soap)) + return + ..() + +/obj/item/weapon/mop_deploy/Del() + processing_objects -= src + ..() + +/obj/item/weapon/mop_deploy/attack_self(mob/user as mob) + user.drop_from_inventory(src) + spawn(1) if(src) del(src) + +/obj/item/weapon/mop_deploy/dropped() + spawn(1) if(src) del(src) + +/obj/item/weapon/mop_deploy/process() + if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + // Tidy up a bit. + if(istype(loc,/mob/living)) + var/mob/living/carbon/human/host = loc + if(istype(host)) + for(var/obj/item/organ/external/organ in host.organs) + for(var/obj/item/O in organ.implants) + if(O == src) + organ.implants -= src + host.pinned -= src + host.embedded -= src + host.drop_from_inventory(src) + spawn(1) if(src) del(src) \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm index d40f74202ef..94df5a92443 100644 --- a/code/modules/clothing/spacesuits/rig/modules/combat.dm +++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm @@ -5,6 +5,7 @@ * /obj/item/rig_module/mounted/taser * /obj/item/rig_module/shield * /obj/item/rig_module/fabricator + * /obj/item/rig_module/mounted/energy_blade */ /obj/item/rig_module/grenade_launcher diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 79abda20ccb..a5bb19e43d4 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -12,6 +12,8 @@ * /obj/item/rig_module/chem_dispenser * /obj/item/rig_module/chem_dispenser/injector * /obj/item/rig_module/voice + * /obj/item/rig_module/mounted/mop + * /obj/item/rig_module/cleaner_launcher */ /obj/item/rig_module/device @@ -377,4 +379,154 @@ jets.holder = null jets.ion_trail.set_up(jets) -/obj/item/rig_module/foam_sprayer \ No newline at end of file +/obj/item/rig_module/foam_sprayer + + +//Deployable Mop + +/obj/item/rig_module/mounted/mop + + name = "mop projector" + desc = "A powerful mop projector." + icon_state = "mop" + + activate_string = "Project Mop" + deactivate_string = "Cancel Mop" + + interface_name = "mop projector" + interface_desc = "A mop that can be deployed from the hand of the wearer." + + usable = 0 + selectable = 1 + toggleable = 1 + use_power_cost = 0 + active_power_cost = 0 + passive_power_cost = 0 + + gun = /obj/item/weapon/reagent_containers/spray/cleaner + +//obj/item/weapon/reagent_containers/spray/cleaner +// spary = + +/obj/item/rig_module/mounted/engage(atom/target) + + if(!..()) + return 0 + + if(!target) + gun.attack_self(holder.wearer) + return 1 + + gun.Fire(target,holder.wearer) + return 1 + +/obj/item/rig_module/mounted/mop/process() + + if(holder && holder.wearer) + if(!(locate(/obj/item/weapon/mop_deploy) in holder.wearer)) + deactivate() + return 0 + + return ..() + +/obj/item/rig_module/mounted/mop/activate() + + ..() + + var/mob/living/M = holder.wearer + + if(M.l_hand && M.r_hand) + M << "Your hands are full." + deactivate() + return + + var/obj/item/weapon/mop_deploy/blade = new(M) + blade.creator = M + M.put_in_hands(blade) + +/obj/item/rig_module/mounted/mop/deactivate() + + ..() + + var/mob/living/M = holder.wearer + + if(!M) + return + + for(var/obj/item/weapon/mop_deploy/blade in M.contents) + M.drop_from_inventory(blade) + del(blade) + + + //Space Cleaner Launcher + +/obj/item/rig_module/cleaner_launcher + + name = "mounted space cleaner launcher" + desc = "A shoulder-mounted micro-cleaner dispenser." + selectable = 1 + icon_state = "grenade_launcher" + + interface_name = "integrated cleaner launcher" + interface_desc = "Discharges loaded cleaner grenades against the wearer's location." + + var/fire_force = 30 + var/fire_distance = 10 + + charges = list( + list("cleaner grenade", "cleaner grenade", /obj/item/weapon/grenade/chem_grenade/cleaner, 9), + ) + +/obj/item/rig_module/cleaner_launcher/accepts_item(var/obj/item/input_device, var/mob/living/user) + + if(!istype(input_device) || !istype(user)) + return 0 + + var/datum/rig_charge/accepted_item + for(var/charge in charges) + var/datum/rig_charge/charge_datum = charges[charge] + if(input_device.type == charge_datum.product_type) + accepted_item = charge_datum + break + + if(!accepted_item) + return 0 + + if(accepted_item.charges >= 5) + user << "Another grenade of that type will not fit into the module." + return 0 + + user << "You slot \the [input_device] into the suit module." + user.drop_from_inventory(input_device) + del(input_device) + accepted_item.charges++ + return 1 + +/obj/item/rig_module/cleaner_launcher/engage(atom/target) + + if(!..()) + return 0 + + if(!target) + return 0 + + var/mob/living/carbon/human/H = holder.wearer + + if(!charge_selected) + H << "You have not selected a grenade type." + return 0 + + var/datum/rig_charge/charge = charges[charge_selected] + + if(!charge) + return 0 + + if(charge.charges <= 0) + H << "Insufficient grenades!" + return 0 + + charge.charges-- + var/obj/item/weapon/grenade/new_grenade = new charge.product_type(get_turf(H)) + H.visible_message("[H] launches \a [new_grenade]!") + new_grenade.activate(H) + new_grenade.throw_at(target,fire_force,fire_distance) diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm index 70c21d51089..43d62bffa81 100644 --- a/code/modules/clothing/spacesuits/rig/suits/ert.dm +++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm @@ -43,6 +43,19 @@ name = "insulated gauntlets" siemens_coefficient = 0 +/obj/item/weapon/rig/ert/janitor + name = "ERT-J suit control module" + desc = "A suit worn by the janitor division of a NanoTrasen Emergency Response Team. Has purple highlights. Armoured and space ready." + suit_type = "ERT Janitor" + icon_state = "ert_janitor_rig" + + initial_modules = list( + /obj/item/rig_module/ai_container, + /obj/item/rig_module/maneuvering_jets, + /obj/item/rig_module/mounted/mop, + /obj/item/rig_module/cleaner_launcher, + ) + /obj/item/weapon/rig/ert/medical name = "ERT-M suit control module" desc = "A suit worn by the medical division of a NanoTrasen Emergency Response Team. Has white highlights. Armoured and space ready." diff --git a/icons/mob/back - Janitor.dmi b/icons/mob/back - Janitor.dmi new file mode 100644 index 00000000000..32c69ba50c1 Binary files /dev/null and b/icons/mob/back - Janitor.dmi differ diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 8322b7b4f58..f7810eccb3d 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/feet - Janitor.dmi b/icons/mob/feet - Janitor.dmi new file mode 100644 index 00000000000..45d85ddece8 Binary files /dev/null and b/icons/mob/feet - Janitor.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index ed60b1fa86a..6fd9af00565 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/hands - Janitor.dmi b/icons/mob/hands - Janitor.dmi new file mode 100644 index 00000000000..bcc177b110c Binary files /dev/null and b/icons/mob/hands - Janitor.dmi differ diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index f79c6641cb0..ccc60d443ad 100644 Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ diff --git a/icons/mob/head - Janitor.dmi b/icons/mob/head - Janitor.dmi new file mode 100644 index 00000000000..66ad58cff65 Binary files /dev/null and b/icons/mob/head - Janitor.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 8038dc3d785..85047f6e417 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/rig_back - Janitor.dmi b/icons/mob/rig_back - Janitor.dmi new file mode 100644 index 00000000000..eec7222637f Binary files /dev/null and b/icons/mob/rig_back - Janitor.dmi differ diff --git a/icons/mob/rig_back.dmi b/icons/mob/rig_back.dmi index fdd761de541..6703e80bf2c 100644 Binary files a/icons/mob/rig_back.dmi and b/icons/mob/rig_back.dmi differ diff --git a/icons/mob/suit - Janitor.dmi b/icons/mob/suit - Janitor.dmi new file mode 100644 index 00000000000..8fb5ce9a97a Binary files /dev/null and b/icons/mob/suit - Janitor.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index afb8b523618..90628b2bd75 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/gloves - Janitor.dmi b/icons/obj/clothing/gloves - Janitor.dmi new file mode 100644 index 00000000000..5b730bff103 Binary files /dev/null and b/icons/obj/clothing/gloves - Janitor.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 6399acfc15d..a60d90a2559 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/hats - Janitor.dmi b/icons/obj/clothing/hats - Janitor.dmi new file mode 100644 index 00000000000..68222ffa2d7 Binary files /dev/null and b/icons/obj/clothing/hats - Janitor.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index ec29f0ce41b..c0c80082945 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/shoes - Janitor.dmi b/icons/obj/clothing/shoes - Janitor.dmi new file mode 100644 index 00000000000..22a75fd2b48 Binary files /dev/null and b/icons/obj/clothing/shoes - Janitor.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 50981432711..93641b1f90f 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits - Janitor.dmi b/icons/obj/clothing/suits - Janitor.dmi new file mode 100644 index 00000000000..bb5dd01fc86 Binary files /dev/null and b/icons/obj/clothing/suits - Janitor.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index b8156cad06d..e8291f37531 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/rig_modules.dmi b/icons/obj/rig_modules.dmi index 02af395159d..a85b89a10bc 100644 Binary files a/icons/obj/rig_modules.dmi and b/icons/obj/rig_modules.dmi differ diff --git a/polaris.dme b/polaris.dme index 7e0a81494b8..d995318db74 100644 --- a/polaris.dme +++ b/polaris.dme @@ -5,6 +5,70 @@ // END_INTERNALS // BEGIN_FILE_DIR #define FILE_DIR . +#define FILE_DIR "html" +#define FILE_DIR "html/images" +#define FILE_DIR "icons" +#define FILE_DIR "icons/48x48" +#define FILE_DIR "icons/atmos" +#define FILE_DIR "icons/effects" +#define FILE_DIR "icons/mecha" +#define FILE_DIR "icons/misc" +#define FILE_DIR "icons/mob" +#define FILE_DIR "icons/mob/human_races" +#define FILE_DIR "icons/mob/human_races/cyberlimbs" +#define FILE_DIR "icons/mob/human_races/masks" +#define FILE_DIR "icons/mob/human_races/monkeys" +#define FILE_DIR "icons/mob/human_races/xenos" +#define FILE_DIR "icons/mob/items" +#define FILE_DIR "icons/mob/species" +#define FILE_DIR "icons/mob/species/skrell" +#define FILE_DIR "icons/mob/species/tajaran" +#define FILE_DIR "icons/mob/species/unathi" +#define FILE_DIR "icons/mob/species/vox" +#define FILE_DIR "icons/NTOS" +#define FILE_DIR "icons/NTOS/battery_icons" +#define FILE_DIR "icons/obj" +#define FILE_DIR "icons/obj/assemblies" +#define FILE_DIR "icons/obj/atmospherics" +#define FILE_DIR "icons/obj/clothing" +#define FILE_DIR "icons/obj/clothing/species" +#define FILE_DIR "icons/obj/clothing/species/skrell" +#define FILE_DIR "icons/obj/clothing/species/tajaran" +#define FILE_DIR "icons/obj/clothing/species/unathi" +#define FILE_DIR "icons/obj/doors" +#define FILE_DIR "icons/obj/flora" +#define FILE_DIR "icons/obj/machines" +#define FILE_DIR "icons/obj/pipes" +#define FILE_DIR "icons/pda_icons" +#define FILE_DIR "icons/spideros_icons" +#define FILE_DIR "icons/Testing" +#define FILE_DIR "icons/turf" +#define FILE_DIR "icons/vending_icons" +#define FILE_DIR "maps" +#define FILE_DIR "maps/overmap" +#define FILE_DIR "maps/overmap/bearcat" +#define FILE_DIR "nano" +#define FILE_DIR "nano/images" +#define FILE_DIR "sound" +#define FILE_DIR "sound/AI" +#define FILE_DIR "sound/ambience" +#define FILE_DIR "sound/effects" +#define FILE_DIR "sound/effects/turret" +#define FILE_DIR "sound/effects/wind" +#define FILE_DIR "sound/hallucinations" +#define FILE_DIR "sound/items" +#define FILE_DIR "sound/machines" +#define FILE_DIR "sound/mecha" +#define FILE_DIR "sound/misc" +#define FILE_DIR "sound/music" +#define FILE_DIR "sound/piano" +#define FILE_DIR "sound/violin" +#define FILE_DIR "sound/voice" +#define FILE_DIR "sound/voice/Serithi" +#define FILE_DIR "sound/weapons" +#define FILE_DIR "tools" +#define FILE_DIR "tools/AddToChangelog" +#define FILE_DIR "tools/AddToChangelog/AddToChangelog" // END_FILE_DIR // BEGIN_PREFERENCES #define DEBUG @@ -620,6 +684,7 @@ #include "code\game\objects\items\weapons\kitchen.dm" #include "code\game\objects\items\weapons\manuals.dm" #include "code\game\objects\items\weapons\mop.dm" +#include "code\game\objects\items\weapons\mop_deploy.dm" #include "code\game\objects\items\weapons\paint.dm" #include "code\game\objects\items\weapons\paiwire.dm" #include "code\game\objects\items\weapons\policetape.dm"