diff --git a/modular_citadel/code/modules/crafting/recipes.dm b/modular_citadel/code/modules/crafting/recipes.dm index 6c6001b0..22253ec8 100644 --- a/modular_citadel/code/modules/crafting/recipes.dm +++ b/modular_citadel/code/modules/crafting/recipes.dm @@ -8,4 +8,15 @@ name = "Potat-OS" reqs = list(/obj/item/stack/cable_coil = 1, /obj/item/stack/rods = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/aicard = 1 ) result = /obj/item/aicard/potato - category = CAT_ROBOT \ No newline at end of file + category = CAT_ROBOT + +/datum/crafting_recipe/milker + name = "Milking Machine" + reqs = list(/obj/item/stack/cable_coil = 5, /obj/item/stack/sheet/plastic = 2, /obj/item/stack/rods = 2, /obj/item/stack/sheet/cardboard = 1, /obj/item/reagent_containers/glass/beaker = 2, /obj/item/stock_parts/manipulator = 1) + result = /obj/item/milker + tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + +/datum/crafting_recipe/milker/penis + name = "Penis Milking Machine" + reqs = list(/obj/item/stack/cable_coil = 5, /obj/item/stack/sheet/plastic = 2, /obj/item/stack/rods = 1, /obj/item/stack/sheet/cardboard = 1, /obj/item/reagent_containers/glass/beaker/large = 1, /obj/item/stock_parts/manipulator = 1) + result = /obj/item/milker/penis diff --git a/modular_citadel/code/modules/reagents/reagent container/milking machine.dm b/modular_citadel/code/modules/reagents/reagent container/milking machine.dm new file mode 100644 index 00000000..3f070be4 --- /dev/null +++ b/modular_citadel/code/modules/reagents/reagent container/milking machine.dm @@ -0,0 +1,83 @@ +/obj/item/milker + icon = 'modular_citadel/icons/obj/milking machine.dmi' + name = "milking machine" + icon_state = "Off" + item_state = "Off" + desc = "A pocket sized pump and tubing assembly designed to collect and store products from mammary glands." + + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET + + var/on = FALSE + var/obj/item/reagent_containers/glass/inserted_item = null + + var/transfer_rate = 0.25 // How much we transfer every 2 seconds + var/target_organ = "breasts" // What organ we are transfering from + +/obj/item/milker/examine(mob/user) + . = ..() + to_chat(user, "[src] is currently [on ? "on" : "off"].") + if (inserted_item) + to_chat(user, "[inserted_item] contains [inserted_item.reagents.total_volume]/[inserted_item.reagents.maximum_volume] units") + +/obj/item/milker/attackby(obj/item/W, mob/user, params) + add_fingerprint(user) + if(istype(W, /obj/item/reagent_containers/glass) && !inserted_item) + if(!user.transferItemToLoc(W, src)) + return ..() + inserted_item = W + UpdateIcon() + else + return ..() + +/obj/item/milker/interact(mob/user) + if(!isAI(user) && inserted_item) + add_fingerprint(user) + on = !on + if (on) + to_chat(user, "You turn [src] on.") + START_PROCESSING(SSobj, src) + else + to_chat(user, "You turn [src] off.") + STOP_PROCESSING(SSobj, src) + UpdateIcon() + else + ..() + +/obj/item/milker/proc/UpdateIcon() + icon_state = "[on ? "On" : "Off"][inserted_item ? "Beaker" : ""]" + item_state = icon_state + + +/obj/item/milker/AltClick(mob/living/user) + add_fingerprint(user) + user.put_in_hands(inserted_item) + inserted_item = null + on = FALSE + STOP_PROCESSING(SSobj, src) + UpdateIcon() + +/obj/item/milker/process() + var/mob/living/carbon/W = loc + if (W) + var/obj/item/organ/genital/breasts/O = W.getorganslot(target_organ) + if (O) + if (O.reagents.total_volume >= transfer_rate * 2) + if (inserted_item.reagents.total_volume < inserted_item.reagents.maximum_volume) + O.reagents.trans_to(inserted_item.reagents, amount = transfer_rate) + else + to_chat(W, "[src] stops pumping. [inserted_item] is full.") + on = FALSE + STOP_PROCESSING(SSobj, src) + UpdateIcon() + +/obj/item/milker/penis + name = "penis milking machine" + icon_state = "PenisOff" + item_state = "PenisOff" + desc = "A pocket sized pump and tubing assembly designed to collect and store products from the penis." + + target_organ = "testicles" // Since semen is stored in the balls + +/obj/item/milker/penis/UpdateIcon() + icon_state = "Penis[on ? "On" : "Off"][inserted_item ? "Beaker" : ""]" + item_state = icon_state diff --git a/modular_citadel/icons/obj/milking machine.dmi b/modular_citadel/icons/obj/milking machine.dmi new file mode 100644 index 00000000..8e8ccd73 Binary files /dev/null and b/modular_citadel/icons/obj/milking machine.dmi differ