mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-21 19:16:22 +01:00
Merge pull request #3499 from Verkister/engibork
New dogborg + Recycling update + Wet Dogborgs update
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
|
||||
/obj/item/weapon/dogborg/jaws/small/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot.R = user
|
||||
if(R.emagged)
|
||||
if(R.emagged || R.emag_items)
|
||||
emagged = !emagged
|
||||
if(emagged)
|
||||
name = "combat jaws"
|
||||
@@ -140,7 +140,7 @@
|
||||
combat = 1
|
||||
attack_verb = list("batted", "pawed", "bopped", "whapped")
|
||||
chargecost = 500
|
||||
|
||||
|
||||
/obj/item/weapon/shockpaddles/robot/hound/jumper
|
||||
name = "paws of life"
|
||||
icon = 'icons/mob/dogborg_vr.dmi'
|
||||
@@ -159,6 +159,7 @@
|
||||
icon_state = "synthtongue"
|
||||
hitsound = 'sound/effects/attackblob.ogg'
|
||||
var/emagged = 0
|
||||
var/datum/matter_synth/water = null
|
||||
|
||||
/obj/item/device/dogborg/tongue/New()
|
||||
..()
|
||||
@@ -166,7 +167,7 @@
|
||||
|
||||
/obj/item/device/dogborg/tongue/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot.R = user
|
||||
if(R.emagged)
|
||||
if(R.emagged || R.emag_items)
|
||||
emagged = !emagged
|
||||
if(emagged)
|
||||
name = "hacked tongue of doom"
|
||||
@@ -187,14 +188,15 @@
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(user.client && (target in user.client.screen))
|
||||
to_chat(user, "<span class='warning'>You need to take \the [target.name] off before cleaning it!</span>")
|
||||
else if(istype(target,/obj/effect/decal/cleanable))
|
||||
else if(istype(target,/obj/effect/decal/cleanable) && water.energy >= 5)
|
||||
user.visible_message("[user] begins to lick off \the [target.name].", "<span class='notice'>You begin to lick off \the [target.name]...</span>")
|
||||
if(do_after (user, 50))
|
||||
to_chat(user, "<span class='notice'>You finish licking off \the [target.name].</span>")
|
||||
water.use_charge(5)
|
||||
qdel(target)
|
||||
var/mob/living/silicon/robot.R = user
|
||||
R.cell.charge += 50
|
||||
else if(istype(target,/obj/item))
|
||||
else if(istype(target,/obj/item) && water.energy >= 5)
|
||||
if(istype(target,/obj/item/trash))
|
||||
user.visible_message("[user] nibbles away at \the [target.name].", "<span class='notice'>You begin to nibble away at \the [target.name]...</span>")
|
||||
if(do_after (user, 50))
|
||||
@@ -203,6 +205,7 @@
|
||||
qdel(target)
|
||||
var/mob/living/silicon/robot.R = user
|
||||
R.cell.charge += 250
|
||||
water.use_charge(5)
|
||||
return
|
||||
if(istype(target,/obj/item/weapon/cell))
|
||||
user.visible_message("[user] begins cramming \the [target.name] down its throat.", "<span class='notice'>You begin cramming \the [target.name] down your throat...</span>")
|
||||
@@ -212,11 +215,13 @@
|
||||
var/mob/living/silicon/robot.R = user
|
||||
var/obj/item/weapon/cell.C = target
|
||||
R.cell.charge += C.maxcharge / 3
|
||||
water.use_charge(5)
|
||||
qdel(target)
|
||||
return
|
||||
user.visible_message("[user] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after (user, 50))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
water.use_charge(5)
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.clean_blood()
|
||||
@@ -226,35 +231,66 @@
|
||||
var/mob/living/L = target
|
||||
if(R.cell.charge <= 666)
|
||||
return
|
||||
L.Stun(4) // normal stunbaton is force 7 gimme a break good sir!
|
||||
L.Weaken(4)
|
||||
L.apply_effect(STUTTER, 4)
|
||||
L.Stun(1)
|
||||
L.Weaken(1)
|
||||
L.apply_effect(STUTTER, 1)
|
||||
L.visible_message("<span class='danger'>[user] has shocked [L] with its tongue!</span>", \
|
||||
"<span class='userdanger'>[user] has shocked you with its tongue! You can feel the betrayal.</span>")
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
R.cell.charge -= 666
|
||||
else
|
||||
else if(water.energy >= 5)
|
||||
user.visible_message("<span class='notice'>\the [user] affectionally licks all over \the [target]'s face!</span>", "<span class='notice'>You affectionally lick all over \the [target]'s face!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
water.use_charge(5)
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.species.lightweight == 1)
|
||||
H.Weaken(3)
|
||||
return
|
||||
else if(istype(target, /obj/structure/window))
|
||||
else if(istype(target, /obj/structure/window) && water.energy >= 1)
|
||||
user.visible_message("[user] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after (user, 50))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
water.use_charge(5)
|
||||
target.color = initial(target.color)
|
||||
//target.SetOpacity(initial(target.opacity)) //Apparantly this doesn't work?
|
||||
else
|
||||
else if(istype(target, /obj/structure/sink) || istype(target, /obj/structure/toilet)) //Dog vibes.
|
||||
user.visible_message("[user] begins to lap up water from [target.name].", "<span class='notice'>You begin to lap up water from [target.name].</span>")
|
||||
if(do_after (user, 50))
|
||||
water.add_charge(100)
|
||||
else if(water.energy >= 5)
|
||||
user.visible_message("[user] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after (user, 50))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
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
|
||||
return
|
||||
|
||||
/obj/item/pupscrubber
|
||||
name = "floor scrubber"
|
||||
desc = "Toggles floor scrubbing."
|
||||
icon = 'icons/mob/dogborg_vr.dmi'
|
||||
icon_state = "scrub0"
|
||||
var/enabled = FALSE
|
||||
|
||||
/obj/item/pupscrubber/New()
|
||||
..()
|
||||
flags |= NOBLUDGEON
|
||||
|
||||
/obj/item/pupscrubber/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot.R = user
|
||||
if(!enabled)
|
||||
R.scrubbing = TRUE
|
||||
enabled = TRUE
|
||||
icon_state = "scrub1"
|
||||
else
|
||||
R.scrubbing = FALSE
|
||||
enabled = FALSE
|
||||
icon_state = "scrub0"
|
||||
|
||||
/obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun //Not a taser, but it's being used as a base so it takes energy and actually works.
|
||||
name = "disabler"
|
||||
desc = "A small and nonlethal gun produced by NT.."
|
||||
@@ -284,25 +320,23 @@
|
||||
name = "light replacer"
|
||||
desc = "A device to automatically replace lights. This version is capable to produce a few replacements using your internal matter reserves."
|
||||
max_uses = 16
|
||||
uses = 10
|
||||
var/cooldown = 0
|
||||
var/datum/matter_synth/glass = null
|
||||
|
||||
/obj/item/device/lightreplacer/dogborg/proc/AddUses(var/amount = 1)
|
||||
uses = min(max(uses + amount, 0), max_uses)
|
||||
|
||||
/obj/item/device/lightreplacer/dogborg/attack_self(mob/user)//Boo recharger fill is slow as shit and removes all the extra cyberfat gains you worked so hard for!
|
||||
/obj/item/device/lightreplacer/dogborg/attack_self(mob/user)//Recharger refill is so last season. Now we recycle without magic!
|
||||
if(uses >= max_uses)
|
||||
to_chat(user, "<span class='warning'>[src.name] is full.</span>")
|
||||
return
|
||||
if(uses < max_uses && cooldown == 0)
|
||||
var/mob/living/silicon/robot.R = user
|
||||
if(R.cell.charge <= 1000)
|
||||
to_chat(user, "<span class='warning'>Insufficient power reserves. Please recharge.</span>")
|
||||
if(glass.energy < 125)
|
||||
to_chat(user, "<span class='warning'>Insufficient material reserves.</span>")
|
||||
return
|
||||
to_chat(user, "It has [uses] lights remaining. Attempting to fabricate a replacement. Please stand still.")
|
||||
cooldown = 1
|
||||
if(do_after(user, 50))
|
||||
R.cell.charge -= 800
|
||||
AddUses(1)
|
||||
glass.use_charge(125)
|
||||
add_uses(1)
|
||||
cooldown = 0
|
||||
else
|
||||
cooldown = 0
|
||||
@@ -324,7 +358,7 @@
|
||||
flags |= NOBLUDGEON
|
||||
|
||||
/obj/item/weapon/dogborg/pounce/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot.R = user
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.leap()
|
||||
|
||||
/mob/living/silicon/robot/proc/leap()
|
||||
@@ -385,5 +419,5 @@
|
||||
var/armor_block = run_armor_check(T, "melee")
|
||||
var/armor_soak = get_armor_soak(T, "melee")
|
||||
T.apply_damage(20, HALLOSS,, armor_block, armor_soak)
|
||||
if(prob(25))
|
||||
if(prob(33))
|
||||
T.apply_effect(3, WEAKEN, armor_block)
|
||||
|
||||
@@ -18,11 +18,17 @@
|
||||
var/UI_open = FALSE
|
||||
var/compactor = FALSE
|
||||
var/analyzer = FALSE
|
||||
var/decompiler = FALSE
|
||||
var/datum/research/techonly/files //Analyzerbelly var.
|
||||
var/synced = FALSE
|
||||
var/startdrain = 500
|
||||
var/max_item_count = 1
|
||||
var/gulpsound = 'sound/vore/gulp.ogg'
|
||||
var/datum/matter_synth/metal = null
|
||||
var/datum/matter_synth/glass = null
|
||||
var/datum/matter_synth/wood = null
|
||||
var/datum/matter_synth/plastic = null
|
||||
var/datum/matter_synth/water = null
|
||||
var/digest_brute = 2
|
||||
var/digest_burn = 3
|
||||
|
||||
@@ -518,6 +524,7 @@
|
||||
|
||||
//Pick a random item to deal with (if there are any)
|
||||
var/atom/target = pick(touchable_items)
|
||||
var/volume = 0
|
||||
|
||||
//Handle the target being a mob
|
||||
if(isliving(target))
|
||||
@@ -559,6 +566,13 @@
|
||||
items_preserved += brain
|
||||
else
|
||||
T.drop_from_inventory(I, src)
|
||||
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
|
||||
water.add_charge(volume)
|
||||
if(T.reagents)
|
||||
volume = T.reagents.total_volume
|
||||
water.add_charge(volume)
|
||||
qdel(T)
|
||||
update_patient()
|
||||
if(UI_open == TRUE)
|
||||
@@ -568,26 +582,45 @@
|
||||
else
|
||||
var/obj/item/T = target
|
||||
if(istype(T))
|
||||
if(analyzer == TRUE)
|
||||
var/obj/item/tech_item = T
|
||||
for(var/tech in tech_item.origin_tech)
|
||||
files.UpdateTech(tech, tech_item.origin_tech[tech])
|
||||
synced = FALSE
|
||||
if(T.reagents)
|
||||
volume = T.reagents.total_volume
|
||||
var/digested = T.digest_act(item_storage = src)
|
||||
if(!digested)
|
||||
items_preserved |= T
|
||||
else
|
||||
drain(-50 * digested)
|
||||
if(analyzer && digested)
|
||||
var/obj/item/tech_item = T
|
||||
for(var/tech in tech_item.origin_tech)
|
||||
files.UpdateTech(tech, tech_item.origin_tech[tech])
|
||||
synced = FALSE
|
||||
drain(-50 * digested)
|
||||
if(volume)
|
||||
water.add_charge(volume)
|
||||
if(!analyzer && compactor && T.matter)
|
||||
for(var/material in T.matter)
|
||||
var/total_material = T.matter[material]
|
||||
if(istype(T,/obj/item/stack))
|
||||
var/obj/item/stack/stack = T
|
||||
total_material *= stack.get_amount()
|
||||
if(material == DEFAULT_WALL_MATERIAL)
|
||||
metal.add_charge(total_material)
|
||||
if(material == "glass")
|
||||
glass.add_charge(total_material)
|
||||
if(decompiler)
|
||||
if(material == "plastic")
|
||||
plastic.add_charge(total_material)
|
||||
if(material == "wood")
|
||||
wood.add_charge(total_material)
|
||||
else
|
||||
drain(-50 * digested)
|
||||
else if(istype(target,/obj/effect/decal/remains))
|
||||
qdel(target)
|
||||
drain(-100)
|
||||
else
|
||||
items_preserved |= target
|
||||
|
||||
if(UI_open == TRUE)
|
||||
update_patient()
|
||||
sleeperUI(hound)
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/dogborg/sleeper/process()
|
||||
@@ -632,3 +665,10 @@
|
||||
max_item_count = 1
|
||||
startdrain = 100
|
||||
analyzer = TRUE
|
||||
|
||||
/obj/item/device/dogborg/sleeper/compactor/decompiler
|
||||
name = "Matter Decompiler"
|
||||
desc = "A mounted matter decompiling unit with fuel processor."
|
||||
icon_state = "decompiler"
|
||||
max_item_count = 10
|
||||
decompiler = TRUE
|
||||
@@ -42,6 +42,7 @@
|
||||
robot_modules["ERT"] = /obj/item/weapon/robot_module/robot/ert
|
||||
robot_modules["Janihound"] = /obj/item/weapon/robot_module/robot/scrubpup
|
||||
robot_modules["Sci-borg"] = /obj/item/weapon/robot_module/robot/science
|
||||
robot_modules["Pupdozer"] = /obj/item/weapon/robot_module/robot/engiedog
|
||||
return 1
|
||||
|
||||
//Just add a new proc with the robot_module type if you wish to run some other vore code
|
||||
@@ -139,21 +140,35 @@
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/big(src) //In case there's some kind of hostile mob.
|
||||
src.modules += new /obj/item/weapon/melee/baton/robot(src) //Since the pounce module refused to work, they get a stunbaton instead.
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop people on the nose.
|
||||
src.modules += new /obj/item/device/dogborg/tongue(src) //This is so they can clean up bloody evidence after it's examined, and so they can lick crew.
|
||||
src.modules += new /obj/item/taperoll/police(src) //Block out crime scenes.
|
||||
src.modules += new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig.
|
||||
src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) //They /are/ a security borg, after all.
|
||||
src.modules += new /obj/item/weapon/dogborg/pounce(src) //Pounce
|
||||
src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) //Emag. Not a big problem.
|
||||
|
||||
var/datum/matter_synth/water = new /datum/matter_synth()
|
||||
water.name = "Water reserves"
|
||||
water.recharge_rate = 0
|
||||
water.max_energy = 1000
|
||||
water.energy = 0
|
||||
R.water_res = water
|
||||
synths += water
|
||||
|
||||
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
|
||||
T.water = water
|
||||
src.modules += T
|
||||
|
||||
var/obj/item/device/dogborg/sleeper/K9/B = new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig.
|
||||
B.water = water
|
||||
|
||||
R.icon = 'icons/mob/widerobot_vr.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
//R.icon_state = "k9"
|
||||
R.pixel_x = -16
|
||||
R.old_x = -16
|
||||
R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/knine/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
@@ -190,24 +205,38 @@
|
||||
/obj/item/weapon/robot_module/robot/medihound/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src) //In case a patient is being attacked by carp.
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop the crew.
|
||||
src.modules += new /obj/item/device/dogborg/tongue(src) //Clean up bloody items by licking them, and eat rubbish for minor energy.
|
||||
src.modules += new /obj/item/device/healthanalyzer(src) // See who's hurt specificially.
|
||||
src.modules += new /obj/item/device/dogborg/sleeper(src) //So they can nom people and heal them
|
||||
src.modules += new /obj/item/weapon/reagent_containers/borghypo(src)//So medi-hounds aren't nearly useless
|
||||
src.modules += new /obj/item/weapon/reagent_containers/syringe(src) //In case the chemist is nice!
|
||||
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker(src)//For holding the chemicals when the chemist is nice
|
||||
src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people.
|
||||
src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life
|
||||
src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce
|
||||
|
||||
var/datum/matter_synth/water = new /datum/matter_synth()
|
||||
water.name = "Water reserves"
|
||||
water.recharge_rate = 0
|
||||
water.max_energy = 1000
|
||||
water.energy = 0
|
||||
R.water_res = water
|
||||
synths += water
|
||||
|
||||
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
|
||||
T.water = water
|
||||
src.modules += T
|
||||
|
||||
var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper(src) //So they can nom people and heal them
|
||||
B.water = water
|
||||
|
||||
R.icon = 'icons/mob/widerobot_vr.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
//R.icon_state = "medihound"
|
||||
R.pixel_x = -16
|
||||
R.old_x = -16
|
||||
R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/ert
|
||||
@@ -223,12 +252,26 @@
|
||||
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/big(src)
|
||||
src.modules += new /obj/item/weapon/melee/baton/robot(src)
|
||||
src.modules += new /obj/item/device/dogborg/tongue(src)
|
||||
src.modules += new /obj/item/taperoll/police(src)
|
||||
src.modules += new /obj/item/device/dogborg/sleeper/K9(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun(src)
|
||||
src.modules += new /obj/item/weapon/dogborg/swordtail(src)
|
||||
src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src)
|
||||
|
||||
var/datum/matter_synth/water = new /datum/matter_synth()
|
||||
water.name = "Water reserves"
|
||||
water.recharge_rate = 0
|
||||
water.max_energy = 1000
|
||||
water.energy = 0
|
||||
R.water_res = water
|
||||
synths += water
|
||||
|
||||
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
|
||||
T.water = water
|
||||
src.modules += T
|
||||
|
||||
var/obj/item/device/dogborg/sleeper/K9/B = new /obj/item/device/dogborg/sleeper/K9(src)
|
||||
B.water = water
|
||||
|
||||
R.icon = 'icons/mob/64x64robot_vr.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
@@ -237,6 +280,7 @@
|
||||
R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/scrubpup
|
||||
@@ -248,27 +292,76 @@
|
||||
can_be_pushed = 0
|
||||
|
||||
/obj/item/weapon/robot_module/robot/scrubpup/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/device/lightreplacer/dogborg(src)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src)
|
||||
src.modules += new /obj/item/device/dogborg/tongue(src)
|
||||
src.modules += new /obj/item/device/dogborg/sleeper/compactor(src)
|
||||
src.modules += new /obj/item/pupscrubber(src)
|
||||
src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce
|
||||
|
||||
//Starts empty. Can only recharge with recycled material.
|
||||
var/datum/matter_synth/metal = new /datum/matter_synth/metal()
|
||||
metal.name = "Steel reserves"
|
||||
metal.recharge_rate = 0
|
||||
metal.max_energy = 100000
|
||||
metal.energy = 0
|
||||
var/datum/matter_synth/glass = new /datum/matter_synth/glass()
|
||||
glass.name = "Glass reserves"
|
||||
glass.recharge_rate = 0
|
||||
glass.max_energy = 100000
|
||||
glass.energy = 0
|
||||
var/datum/matter_synth/water = new /datum/matter_synth()
|
||||
water.name = "Water reserves"
|
||||
water.recharge_rate = 0
|
||||
water.max_energy = 1000
|
||||
water.energy = 0
|
||||
R.water_res = water
|
||||
|
||||
synths += metal
|
||||
synths += glass
|
||||
synths += water
|
||||
|
||||
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
|
||||
T.water = water
|
||||
src.modules += T
|
||||
|
||||
var/obj/item/device/lightreplacer/dogborg/LR = new /obj/item/device/lightreplacer/dogborg(src)
|
||||
LR.glass = glass
|
||||
src.modules += LR
|
||||
|
||||
var/obj/item/device/dogborg/sleeper/compactor/C = new /obj/item/device/dogborg/sleeper/compactor(src)
|
||||
C.metal = metal
|
||||
C.glass = glass
|
||||
C.water = water
|
||||
src.modules += C
|
||||
|
||||
//Sheet refiners can only produce raw sheets.
|
||||
var/obj/item/stack/material/cyborg/steel/M = new (src)
|
||||
M.name = "steel recycler"
|
||||
M.desc = "A device that refines recycled steel into sheets."
|
||||
M.synths = list(metal)
|
||||
M.recipes = list()
|
||||
M.recipes += new/datum/stack_recipe("steel sheet", /obj/item/stack/material/steel, 1, 1, 20)
|
||||
src.modules += M
|
||||
|
||||
var/obj/item/stack/material/cyborg/glass/G = new (src)
|
||||
G.name = "glass recycler"
|
||||
G.desc = "A device that refines recycled glass into sheets."
|
||||
G.material = get_material_by_name("placeholder") //Hacky shit but we want sheets, not windows.
|
||||
G.synths = list(glass)
|
||||
G.recipes = list()
|
||||
G.recipes += new/datum/stack_recipe("glass sheet", /obj/item/stack/material/glass, 1, 1, 20)
|
||||
src.modules += G
|
||||
|
||||
R.icon = 'icons/mob/widerobot_vr.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
//R.icon_state = "scrubpup"
|
||||
R.pixel_x = -16
|
||||
R.old_x = -16
|
||||
R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/scrubpup/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
var/obj/item/device/lightreplacer/LR = locate() in src.modules
|
||||
LR.Charge(R, amount)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/science
|
||||
name = "Research Hound Module"
|
||||
sprites = list(
|
||||
@@ -280,24 +373,160 @@
|
||||
/obj/item/weapon/robot_module/robot/science/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src)
|
||||
src.modules += new /obj/item/device/dogborg/tongue(src)
|
||||
src.modules += new /obj/item/device/dogborg/sleeper/compactor/analyzer(src)
|
||||
//src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) //Belly works now.
|
||||
src.modules += new /obj/item/weapon/gripper/research(src)
|
||||
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
|
||||
src.modules += new /obj/item/weapon/screwdriver/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
|
||||
src.modules += new /obj/item/weapon/storage/part_replacer(src)
|
||||
src.emag = new /obj/item/weapon/hand_tele(src)
|
||||
|
||||
var/datum/matter_synth/water = new /datum/matter_synth()
|
||||
water.name = "Water reserves"
|
||||
water.recharge_rate = 0
|
||||
water.max_energy = 1000
|
||||
water.energy = 0
|
||||
R.water_res = water
|
||||
synths += water
|
||||
|
||||
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
|
||||
T.water = water
|
||||
src.modules += T
|
||||
|
||||
var/obj/item/device/dogborg/sleeper/compactor/analyzer/B = new /obj/item/device/dogborg/sleeper/compactor/analyzer(src)
|
||||
B.water = water
|
||||
|
||||
R.icon = 'icons/mob/widerobot_vr.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
//R.icon_state = "science"
|
||||
R.pixel_x = -16
|
||||
R.old_x = -16
|
||||
R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/engiedog
|
||||
name = "Construction Hound module"
|
||||
sprites = list(
|
||||
"Pupdozer" = "pupdozer",
|
||||
)
|
||||
channels = list("Engineering" = 1)
|
||||
networks = list(NETWORK_ENGINEERING)
|
||||
subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor)
|
||||
can_be_pushed = 0
|
||||
|
||||
/obj/item/weapon/robot_module/robot/engiedog/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/borg/sight/meson(src)
|
||||
src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/screwdriver/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/wrench/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/wirecutters/cyborg(src)
|
||||
src.modules += new /obj/item/device/multitool(src)
|
||||
src.modules += new /obj/item/device/t_scanner(src)
|
||||
src.modules += new /obj/item/taperoll/engineering(src)
|
||||
src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src)
|
||||
src.modules += new /obj/item/device/geiger(src)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
src.modules += new /obj/item/device/dogborg/boop_module(src)
|
||||
src.emag = new /obj/item/weapon/dogborg/pounce(src)
|
||||
|
||||
//Painfully slow charger regen but high capacity. Also starts with low amount.
|
||||
var/datum/matter_synth/metal = new /datum/matter_synth/metal()
|
||||
metal.name = "Steel reserves"
|
||||
metal.recharge_rate = 50
|
||||
metal.max_energy = 100000
|
||||
metal.energy = 5000
|
||||
var/datum/matter_synth/glass = new /datum/matter_synth/glass()
|
||||
glass.name = "Glass reserves"
|
||||
glass.recharge_rate = 50
|
||||
glass.max_energy = 100000
|
||||
glass.energy = 5000
|
||||
var/datum/matter_synth/wood = new /datum/matter_synth/wood()
|
||||
wood.name = "Wood reserves"
|
||||
wood.recharge_rate = 50
|
||||
wood.max_energy = 100000
|
||||
wood.energy = 5000
|
||||
var/datum/matter_synth/plastic = new /datum/matter_synth/plastic()
|
||||
plastic.name = "Plastic reserves"
|
||||
plastic.recharge_rate = 50
|
||||
plastic.max_energy = 100000
|
||||
plastic.energy = 5000
|
||||
var/datum/matter_synth/water = new /datum/matter_synth()
|
||||
water.name = "Water reserves"
|
||||
water.recharge_rate = 0
|
||||
water.max_energy = 1000
|
||||
water.energy = 0
|
||||
R.water_res = water
|
||||
|
||||
var/datum/matter_synth/wire = new /datum/matter_synth/wire()
|
||||
synths += metal
|
||||
synths += glass
|
||||
synths += wood
|
||||
synths += plastic
|
||||
synths += wire
|
||||
synths += water
|
||||
|
||||
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
|
||||
T.water = water
|
||||
src.modules += T
|
||||
|
||||
var/obj/item/device/lightreplacer/dogborg/LR = new /obj/item/device/lightreplacer/dogborg(src)
|
||||
LR.glass = glass
|
||||
src.modules += LR
|
||||
|
||||
var/obj/item/device/dogborg/sleeper/compactor/decompiler/MD = new /obj/item/device/dogborg/sleeper/compactor/decompiler(src)
|
||||
MD.metal = metal
|
||||
MD.glass = glass
|
||||
MD.wood = wood
|
||||
MD.plastic = plastic
|
||||
src.modules += MD
|
||||
|
||||
var/obj/item/stack/material/cyborg/steel/M = new (src)
|
||||
M.synths = list(metal)
|
||||
src.modules += M
|
||||
|
||||
var/obj/item/stack/material/cyborg/glass/G = new (src)
|
||||
G.synths = list(glass)
|
||||
src.modules += G
|
||||
|
||||
var/obj/item/stack/rods/cyborg/RD = new /obj/item/stack/rods/cyborg(src)
|
||||
RD.synths = list(metal)
|
||||
src.modules += RD
|
||||
|
||||
var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src)
|
||||
C.synths = list(wire)
|
||||
src.modules += C
|
||||
|
||||
var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src)
|
||||
S.synths = list(metal)
|
||||
src.modules += S
|
||||
|
||||
var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src)
|
||||
RG.synths = list(metal, glass)
|
||||
src.modules += RG
|
||||
|
||||
var/obj/item/stack/tile/wood/cyborg/WT = new /obj/item/stack/tile/wood/cyborg(src)
|
||||
WT.synths = list(wood)
|
||||
src.modules += WT
|
||||
|
||||
var/obj/item/stack/material/cyborg/wood/W = new (src)
|
||||
W.synths = list(wood)
|
||||
src.modules += W
|
||||
|
||||
var/obj/item/stack/material/cyborg/plastic/PL = new (src)
|
||||
PL.synths = list(plastic)
|
||||
src.modules += PL
|
||||
|
||||
R.icon = 'icons/mob/widerobot_vr.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
R.pixel_x = -16
|
||||
R.old_x = -16
|
||||
R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/Reset(var/mob/living/silicon/robot/R)
|
||||
@@ -308,4 +537,6 @@
|
||||
R.wideborg = FALSE
|
||||
R.ui_style_vr = FALSE
|
||||
R.default_pixel_x = initial(pixel_x)
|
||||
R.scrubbing = FALSE
|
||||
R.verbs -= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
@@ -7,6 +7,8 @@
|
||||
var/leap_at
|
||||
var/dogborg = FALSE //Dogborg special features (overlays etc.)
|
||||
var/wideborg = FALSE //When the borg simply doesn't use standard 32p size.
|
||||
var/scrubbing = FALSE //Floor cleaning enabled
|
||||
var/datum/matter_synth/water_res = null
|
||||
var/notransform
|
||||
var/original_icon = 'icons/mob/robots.dmi'
|
||||
var/ui_style_vr = FALSE //Do we use our hud icons?
|
||||
@@ -64,13 +66,13 @@
|
||||
add_overlay("wreck-overlay")
|
||||
|
||||
/mob/living/silicon/robot/Move(a, b, flag)
|
||||
|
||||
. = ..()
|
||||
|
||||
if(module)
|
||||
if(module.type == /obj/item/weapon/robot_module/robot/scrubpup)//no water reserve mechanics yet.
|
||||
if(scrubbing)
|
||||
var/datum/matter_synth/water = water_res
|
||||
if(water && water.energy >= 1)
|
||||
var/turf/tile = loc
|
||||
if(isturf(tile))
|
||||
water.use_charge(1)
|
||||
tile.clean_blood()
|
||||
if(istype(tile, /turf/simulated))
|
||||
var/turf/simulated/T = tile
|
||||
@@ -95,7 +97,6 @@
|
||||
cleaned_human.update_inv_shoes(0)
|
||||
cleaned_human.clean_blood(1)
|
||||
cleaned_human << "<span class='warning'>[src] cleans your face!</span>"
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/proc/vr_sprite_check()
|
||||
@@ -107,3 +108,19 @@
|
||||
icon = 'icons/mob/robots_vr.dmi'
|
||||
else if(!(icon_state in vr_icons))
|
||||
icon = original_icon
|
||||
|
||||
/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.")
|
||||
Reference in New Issue
Block a user