diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index ba73a8faf8..1f4d5138e4 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -397,6 +397,12 @@
var/obj/item/I = O
if(!I || !istype(I,/obj/item)) return
+ //CHOMPAdd Start
+ if(istype(I, /obj/item/device/robot_tongue) && isrobot(user))
+ var/obj/item/device/robot_tongue/J = I
+ if(J.water.energy < J.water.max_energy) return
+ //CHOMPAdd End
+
to_chat(usr, "You start washing \the [I].")
busy = 1
@@ -433,4 +439,4 @@
/obj/structure/sink/puddle/attackby(obj/item/O as obj, mob/user as mob)
icon_state = "puddle-splash"
..()
- icon_state = "puddle"
\ No newline at end of file
+ icon_state = "puddle"
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
index cfdea2fc86..d74b7e9183 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
@@ -241,6 +241,8 @@
icon_state = "synthtongue"
hitsound = 'sound/effects/attackblob.ogg'
var/emagged = 0
+ var/datum/matter_synth/water = null //CHOMPAdd readds water
+ var/busy = 0 //CHOMPAdd prevents abuse
/obj/item/device/robot_tongue/New()
..()
@@ -269,16 +271,49 @@
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(user.client && (target in user.client.screen))
to_chat(user, "You need to take \the [target.name] off before cleaning it!")
+ //CHOMPADD Start
+ if(busy)
+ to_chat(user, "You are already licking something else.")
return
+ if(istype(target, /obj/structure/sink) || istype(target, /obj/structure/toilet)) //Dog vibes.
+ if (water.energy == water.max_energy && istype(target, /obj/structure/sink)) return
+ if (water.energy == water.max_energy && istype(target, /obj/structure/toilet))
+ to_chat(user, "You refrain from lapping water from the [target.name] with your reserves filled.")
+ return
+ user.visible_message("[user] begins to lap up water from [target.name].", "You begin to lap up water from [target.name].")
+ busy = 1
+ if(do_after(user, 50))
+ busy = 0
+ water.add_charge(50)
+ to_chat(src, "You refill some of your water reserves.")
+ else if(water.energy < 5)
+ to_chat(user, "Your mouth feels dry. You should drink up some water .")
+ //CHOMPADD End
+ return
+ //CHOMPADD Start
+ else if(istype(target,/obj/effect/decal/cleanable))
+ user.visible_message("[user] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...")
+ busy = 1
+ if(do_after(user, 50))
+ busy = 0
+ to_chat(user, "You finish licking off \the [target.name].")
+ water.use_charge(5)
+ qdel(target)
+ var/mob/living/silicon/robot/R = user
+ R.cell.charge += 50
+ //CHOMPADD End
else if(istype(target,/obj/item))
if(istype(target,/obj/item/trash))
user.visible_message("[user] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...")
+ busy = 1 //CHOMPAdd prevents abuse
if(do_after (user, 50))
+ busy = 0 //CHOMPAdd prevents abuse
user.visible_message("[user] finishes eating \the [target.name].", "You finish eating \the [target.name].")
to_chat(user, "You finish off \the [target.name].")
qdel(target)
var/mob/living/silicon/robot/R = user
R.cell.charge += 250
+ water.use_charge(5) //CHOMPAdd
return
if(istype(target,/obj/item/weapon/reagent_containers/food))
user.visible_message("[user] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...")
@@ -291,14 +326,28 @@
return
if(istype(target,/obj/item/weapon/cell))
user.visible_message("[user] begins cramming \the [target.name] down its throat.", "You begin cramming \the [target.name] down your throat...")
+ busy = 1 //CHOMPAdd prevents abuse
if(do_after (user, 50))
+ busy = 0 //CHOMPAdd prevents abuse
user.visible_message("[user] finishes gulping down \the [target.name].", "You finish swallowing \the [target.name].")
to_chat(user, "You finish off \the [target.name], and gain some charge!")
var/mob/living/silicon/robot/R = user
var/obj/item/weapon/cell/C = target
R.cell.charge += C.charge / 3
+ water.use_charge(5) //CHOMPAdd
qdel(target)
return
+ //CHOMPAdd Start
+ user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
+ busy = 1
+ if(do_after(user, 50, exclusive = TRUE))
+ busy = 0
+ to_chat(user, "You clean \the [target.name].")
+ water.use_charge(5)
+ var/obj/effect/decal/cleanable/C = locate() in target
+ qdel(C)
+ target.clean_blood()
+ //CHOMPADD End
else if(ishuman(target))
if(src.emagged)
var/mob/living/silicon/robot/R = user
@@ -315,9 +364,26 @@
else
user.visible_message("\The [user] affectionately licks all over \the [target]'s face!", "You affectionately lick all over \the [target]'s face!")
playsound(src, 'sound/effects/attackblob.ogg', 50, 1)
+ water.use_charge(5) //CHOMPAdd
var/mob/living/carbon/human/H = target
if(H.species.lightweight == 1)
H.Weaken(3)
+ //CHOMPAdd Start
+ else
+ user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
+ busy = 1
+ if(do_after(user, 50))
+ busy = 0
+ to_chat(user, "You clean \the [target.name].")
+ var/obj/effect/decal/cleanable/C = locate() in target
+ qdel(C)
+ target.clean_blood()
+ water.use_charge(5)
+ if(istype(target, /turf/simulated))
+ var/turf/simulated/T = target
+ T.dirt = 0
+ busy = 0
+ //CHOMPADD End
return
/obj/item/pupscrubber
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
index e0fcab3fa6..de07fac4cf 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
@@ -37,6 +37,7 @@
var/datum/matter_synth/glass = null
var/datum/matter_synth/wood = null
var/datum/matter_synth/plastic = null
+ var/datum/matter_synth/water = null //CHOMPAdd readd water
var/digest_brute = 2
var/digest_burn = 3
var/digest_multiplier = 1
@@ -583,6 +584,7 @@
if(air_master.current_cycle%3==1 && length(touchable_items))
//Burn all the mobs or add them to the exclusion list
+ var/volume = 0 //CHOMPAdd
for(var/mob/living/T in (touchable_items))
touchable_items -= T //Exclude mobs from loose item picking.
if((T.status_flags & GODMODE) || !T.digestable)
@@ -596,6 +598,10 @@
var/actual_burn = T.getFireLoss() - old_burn
var/damage_gain = actual_brute + actual_burn
hound.nutrition += 2.5 * damage_gain //drain(-25 * damage_gain) //25*total loss as with voreorgan stats.//CHOMPEdit
+ //CHOMPAdd Start
+ if(water)
+ water.add_charge(damage_gain)
+ //CHOMPAdd End
if(T.stat == DEAD)
if(ishuman(T))
log_admin("[key_name(hound)] has digested [key_name(T)] with a cyborg belly. ([hound ? "JMP" : "null"])")
@@ -629,6 +635,17 @@
items_preserved |= brain
else
T.drop_from_inventory(I, src)
+ //CHOMPAdd Start
+ if(ishuman(T))
+ var/mob/living/carbon/human/Prey = T
+ volume = (Prey.bloodstr.total_volume + Prey.ingested.total_volume + Prey.touching.total_volume + Prey.weight) * Prey.size_multiplier
+ if(water)
+ water.add_charge(volume)
+ if(T.reagents)
+ volume = T.reagents.total_volume
+ if(water)
+ water.add_charge(volume)
+ //CHOMPAdd End
if(T.ckey)
GLOB.prey_digested_roundstat++
if(patient == T)
@@ -644,6 +661,10 @@
//Handle the target being anything but a /mob/living
var/obj/item/T = target
if(istype(T))
+ //CHOMPAdd Start
+ if(T.reagents)
+ volume = T.reagents.total_volume
+ //CHOMPAdd End
var/digested = T.digest_act(item_storage = src)
if(!digested)
items_preserved |= T
@@ -653,6 +674,10 @@
for(var/tech in tech_item.origin_tech)
files.UpdateTech(tech, tech_item.origin_tech[tech])
synced = FALSE
+ //CHOMPAdd Start
+ if(volume && water)
+ water.add_charge(volume)
+ //CHOMPAdd End
if(recycles && T.matter)
for(var/material in T.matter)
var/total_material = T.matter[material]
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 5ac9f900f4..054167cc75 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -108,6 +108,7 @@
/mob/living/silicon/robot/proc/sensor_mode,
/mob/living/silicon/robot/proc/robot_checklaws,
/mob/living/silicon/robot/proc/robot_mount,
+ /mob/living/silicon/robot/proc/ex_reserve_refill, //CHOMPEdit re-adds the extinquisher refill from water
/mob/living/proc/toggle_rider_reins,
/mob/living/proc/shred_limb
)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
index d6dc67c4b0..26465af10a 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -205,9 +205,19 @@ var/global/list/robot_modules = list(
// Cyborgs (non-drones), default loadout. This will be given to every module.
/obj/item/weapon/robot_module/robot/create_equipment(var/mob/living/silicon/robot/robot)
..()
+ //CHOMPEdit Start
+ var/datum/matter_synth/water = new /datum/matter_synth(500)
+ water.name = "Water reserves"
+ water.recharge_rate = 10
+ water.max_energy = 1000
+ robot.water_res = water
+ synths += water
+ var/obj/item/device/robot_tongue/T = new /obj/item/device/robot_tongue(src)
+ T.water = water
+ src.modules += T
+ //CHOMPEdit End
src.modules += new /obj/item/device/gps/robot(src)
src.modules += new /obj/item/device/boop_module(src)
- src.modules += new /obj/item/device/robot_tongue(src)
src.modules += new /obj/item/device/flash/robot(src)
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/gripper/scene(src) //CHOMPEdit - Give all borgs a scene gripper
diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm
index 579c2fd9a2..adc49d3e50 100644
--- a/code/modules/mob/living/silicon/robot/robot_vr.dm
+++ b/code/modules/mob/living/silicon/robot/robot_vr.dm
@@ -1,6 +1,3 @@
-/mob/living/silicon/robot //ChompEDIT
- var/sleeper_resting = FALSE //CHOMPEdit - Enable resting belly sprites for dogborgs that have the sprites
-
/mob/living/silicon/robot/verb/robot_nom(var/mob/living/T in living_mobs(1))
set name = "Robot Nom"
set category = "IC"
@@ -126,4 +123,4 @@
if(nutrition >= 1 * CYBORG_POWER_USAGE_MULTIPLIER)
nutrition -= 1 * CYBORG_POWER_USAGE_MULTIPLIER
cell.charge += 10 * CYBORG_POWER_USAGE_MULTIPLIER
- ..()
\ No newline at end of file
+ ..()
diff --git a/modular_chomp/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm b/modular_chomp/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm
new file mode 100644
index 0000000000..e734db35c2
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/silicon/robot/dogborg/dog_modules.dm
@@ -0,0 +1,7 @@
+/obj/item/device/robot_tongue/examine(user)
+ . = ..()
+ if(Adjacent(user))
+ if(water.energy)
+ . += "[src] is wet. Just like it should be."
+ if(water.energy < 5)
+ . += "[src] is dry."
diff --git a/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm b/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm
index d231124508..d9f3588b4d 100644
--- a/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm
+++ b/modular_chomp/code/modules/mob/living/silicon/robot/robot.dm
@@ -1,3 +1,7 @@
+/mob/living/silicon/robot
+ var/sleeper_resting = FALSE //Enable resting belly sprites for dogborgs that have the sprites
+ var/datum/matter_synth/water_res = null //Enable water for lick clean
+
/mob/living/silicon/robot/verb/purge_nutrition()
set name = "Purge Nutrition"
set category = "IC"
@@ -8,3 +12,19 @@
nutrition = 1000
to_chat(src, "You have purged most of the nutrition lingering in your systems.")
return TRUE
+
+/mob/living/silicon/robot/proc/ex_reserve_refill()
+ set name = "Refill Extinguisher"
+ set category = "Object"
+ var/datum/matter_synth/water = water_res
+ for(var/obj/item/weapon/extinguisher/E in module.modules)
+ if(E.reagents.total_volume < E.max_water)
+ if(water && water.energy > 0)
+ var/amount = E.max_water - E.reagents.total_volume
+ if(water.energy < amount)
+ amount = water.energy
+ water.use_charge(amount)
+ E.reagents.add_reagent("water", amount)
+ to_chat(src, "You refill the extinguisher using your water reserves.")
+ else
+ to_chat(src, "Insufficient water reserves.")
diff --git a/vorestation.dme b/vorestation.dme
index 4cd5eeb3f4..0f053ed0d4 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -4738,6 +4738,7 @@
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\xenomorph_hybrid_trait.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\robot.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\robot_movement.dm"
+#include "modular_chomp\code\modules\mob\living\silicon\robot\dogborg\dog_modules.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\drone\drone_items.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\civilian.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\sprites\clown.dm"