diff --git a/code/game/objects/items/trash_vr.dm b/code/game/objects/items/trash_vr.dm
index fc2d9971825..08fbdda5b6f 100644
--- a/code/game/objects/items/trash_vr.dm
+++ b/code/game/objects/items/trash_vr.dm
@@ -12,7 +12,7 @@
if(isrobot(M))
var/mob/living/silicon/robot/R = M
- if(R.module.type == /obj/item/weapon/robot_module/robot/janitor/scrubpup) // You can now feed the trash borg yay.
+ if(R.module.type == /obj/item/weapon/robot_module/robot/janitor) // You can now feed the trash borg yay.
playsound(src,'sound/items/eatfood.ogg', rand(10,50), 1)
user.drop_item()
forceMove(R.vore_selected)
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 3fdba7eaa94..01e0d7f2df6 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -469,8 +469,8 @@
// -----------------------------
// Food Bag (Service Hound)
// -----------------------------
-/obj/item/weapon/storage/bag/dogborg
- name = "dog bag"
+/obj/item/weapon/storage/bag/serviceborg
+ name = "service bag"
icon = 'icons/obj/storage_vr.dmi'
icon_state = "foodbag"
desc = "An intergrated bag for storing things of all kinds."
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 365507aa1b2..a484aa3efef 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -162,7 +162,7 @@
/obj/structure/door_assembly/attack_robot(mob/living/silicon/robot/user)
if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \
- || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only dron (and engiborg) needs this.
+ || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only drone (and engiborg) needs this.
rename_door(user)
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 2ab86a5bf0a..855e7fac117 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -77,7 +77,7 @@
/obj/structure/windoor_assembly/attack_robot(mob/living/silicon/robot/user)
if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \
- || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only dron (and engiborg) needs this.
+ || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only drone (and engiborg) needs this.
rename_door(user)
/obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob)
diff --git a/code/global.dm b/code/global.dm
index ae3ae2baa14..a313f42e31b 100644
--- a/code/global.dm
+++ b/code/global.dm
@@ -143,7 +143,7 @@ var/list/robot_module_types = list(
)
// List of modules added during code red
var/list/emergency_module_types = list(
- "Combat", "ERT"
+ "Combat"
)
// List of modules available to AI shells
var/list/shell_module_types = list(
@@ -151,7 +151,7 @@ var/list/shell_module_types = list(
)
// List of whitelisted modules
var/list/whitelisted_module_types = list(
- "Lost", "Stray"
+ "Lost"
)
// Some scary sounds.
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 5c9cb67364b..48d5b89ceec 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
@@ -48,19 +48,20 @@
update_icon()
// Baton chompers
-/obj/item/weapon/dogborg/jaws/ert
- name = "ert jaws"
+/obj/item/weapon/borg_combat_shocker
+ name = "combat shocker"
icon = 'icons/mob/dogborg_vr.dmi'
- icon_state = "ertjaws"
- desc = "Shockingly chompy!"
+ icon_state = "combatshocker"
+ desc = "Shocking!"
force = 15
throwforce = 0
- hitsound = 'sound/weapons/bite.ogg'
- attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
+ hitsound = 'sound/weapons/genhit1.ogg'
+ attack_verb = list("hit")
w_class = ITEMSIZE_NORMAL
var/charge_cost = 15
+ var/dogborg = FALSE
-/obj/item/weapon/dogborg/jaws/ert/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
+/obj/item/weapon/borg_combat_shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
if(isrobot(target))
return ..()
@@ -80,9 +81,15 @@
stun *= 0.5
else
if(affecting)
- target.visible_message("[target] has been zap-chomped in the [affecting.name] with [src] by [user]!")
+ if(dogborg)
+ target.visible_message("[target] has been zap-chomped in the [affecting.name] with [src] by [user]!")
+ else
+ target.visible_message("[target] has been zapped in the [affecting.name] with [src] by [user]!")
else
- target.visible_message("[target] has been zap-chomped with [src] by [user]!")
+ if(dogborg)
+ target.visible_message("[target] has been zap-chomped with [src] by [user]!")
+ else
+ target.visible_message("[target] has been zapped with [src] by [user]!")
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
// Try to use power
@@ -223,28 +230,19 @@
//Tongue stuff
-/obj/item/device/dogborg/tongue
+/obj/item/device/robot_tongue
name = "synthetic tongue"
desc = "Useful for slurping mess off the floor before affectionately licking the crew members in the face."
icon = 'icons/mob/dogborg_vr.dmi'
icon_state = "synthtongue"
hitsound = 'sound/effects/attackblob.ogg'
var/emagged = 0
- var/datum/matter_synth/water = null
-/obj/item/device/dogborg/tongue/New()
+/obj/item/device/robot_tongue/New()
..()
flags |= NOBLUDGEON //No more attack messages
-/obj/item/device/dogborg/tongue/examine(user)
- . = ..()
- if(Adjacent(user))
- if(water.energy)
- . += "[src] is wet. Just like it should be."
- if(water.energy < 5)
- . += "[src] is dry."
-
-/obj/item/device/dogborg/tongue/attack_self(mob/user)
+/obj/item/device/robot_tongue/attack_self(mob/user)
var/mob/living/silicon/robot/R = user
if(R.emagged || R.emag_items)
emagged = !emagged
@@ -260,29 +258,14 @@
icon_state = "synthtongue"
update_icon()
-/obj/item/device/dogborg/tongue/afterattack(atom/target, mob/user, proximity)
+/obj/item/device/robot_tongue/afterattack(atom/target, mob/user, proximity)
if(!proximity)
return
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!")
- 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].", "You begin to lap up water from [target.name].")
- if(do_after (user, 50))
- 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 .")
return
- 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]...")
- if(do_after (user, 50))
- 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
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]...")
@@ -292,7 +275,6 @@
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.", "You begin cramming \the [target.name] down your throat...")
@@ -302,16 +284,8 @@
var/mob/living/silicon/robot/R = user
var/obj/item/weapon/cell/C = target
R.cell.charge += C.charge / 3
- water.use_charge(5)
qdel(target)
return
- user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
- if(do_after (user, 50))
- 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()
else if(ishuman(target))
if(src.emagged)
var/mob/living/silicon/robot/R = user
@@ -328,21 +302,9 @@
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)
var/mob/living/carbon/human/H = target
if(H.species.lightweight == 1)
H.Weaken(3)
- else
- user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
- if(do_after (user, 50))
- 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
return
/obj/item/pupscrubber
@@ -378,11 +340,11 @@
recharge_time = 10 //Takes ten ticks to recharge a shot, so don't waste them all!
//cell_type = null //Same cell as a taser until edits are made.
-/obj/item/weapon/dogborg/swordtail
- name = "sword tail"
+/obj/item/weapon/combat_borgblade
+ name = "energy blade"
icon = 'icons/mob/dogborg_vr.dmi'
icon_state = "swordtail"
- desc = "A glowing pink dagger normally attached to the end of a cyborg's tail. It appears to be extremely sharp."
+ desc = "A glowing dagger. It appears to be extremely sharp."
force = 20 //Takes 5 hits to 100-0
sharp = TRUE
edge = TRUE
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 7fda7ef0a5e..eb6eb754b5e 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
@@ -36,7 +36,6 @@
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
var/digest_multiplier = 1
@@ -577,7 +576,6 @@
if(air_master.current_cycle%3==1 && length(touchable_items))
//Burn all the mobs or add them to the exclusion list
- var/volume = 0
for(var/mob/living/T in (touchable_items))
touchable_items -= T //Exclude mobs from loose item picking.
if((T.status_flags & GODMODE) || !T.digestable)
@@ -591,8 +589,6 @@
var/actual_burn = T.getFireLoss() - old_burn
var/damage_gain = actual_brute + actual_burn
drain(-25 * damage_gain) //25*total loss as with voreorgan stats.
- if(water)
- water.add_charge(damage_gain)
if(T.stat == DEAD)
if(ishuman(T))
message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "JMP" : "null"])")
@@ -626,15 +622,6 @@
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
- if(water)
- water.add_charge(volume)
- if(T.reagents)
- volume = T.reagents.total_volume
- if(water)
- water.add_charge(volume)
if(T.ckey)
GLOB.prey_digested_roundstat++
if(patient == T)
@@ -650,8 +637,6 @@
//Handle the target being anything but a /mob/living
var/obj/item/T = target
if(istype(T))
- if(T.reagents)
- volume = T.reagents.total_volume
var/digested = T.digest_act(item_storage = src)
if(!digested)
items_preserved |= T
@@ -661,8 +646,6 @@
for(var/tech in tech_item.origin_tech)
files.UpdateTech(tech, tech_item.origin_tech[tech])
synced = FALSE
- if(volume && water)
- water.add_charge(volume)
if(recycles && T.matter)
for(var/material in T.matter)
var/total_material = T.matter[material]
@@ -765,6 +748,15 @@
name = "Brew Belly"
desc = "A mounted drunk tank unit with fuel processor."
icon_state = "brewer"
+ max_item_count = 10
+ recycles = FALSE
+
+/obj/item/device/dogborg/sleeper/compactor/generic
+ name = "Internal Cache"
+ desc = "An internal storage of no particularly specific purpose.."
+ icon_state = "sleeperd"
+ max_item_count = 10
+ recycles = FALSE
/obj/item/device/dogborg/sleeper/K9/ert
name = "ERT Belly"
diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm
index cce5f9f6f71..3d11703e9f3 100644
--- a/code/modules/mob/living/silicon/robot/login.dm
+++ b/code/modules/mob/living/silicon/robot/login.dm
@@ -12,4 +12,8 @@
if(!icon_selected)
icon_selection_tries = SSrobot_sprites.get_module_sprites_len(modtype, src) + 1
choose_icon(icon_selection_tries)
- plane_holder.set_vis(VIS_AUGMENTED, TRUE) //VOREStation Add - ROBOT VISION IS AUGMENTED
\ No newline at end of file
+
+ if(sprite_datum && module)
+ sprite_datum.do_equipment_glamour(module)
+
+ plane_holder.set_vis(VIS_AUGMENTED, TRUE)
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm
index db545667fb0..f6605b5a028 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/event.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm
@@ -5,7 +5,7 @@
name = "lost robot module"
hide_on_manifest = TRUE
-/obj/item/weapon/robot_module/robot/lost/New(var/mob/living/silicon/robot/R)
+/obj/item/weapon/robot_module/robot/lost/create_equipment(var/mob/living/silicon/robot/robot)
..()
// Sec
src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src)
@@ -14,6 +14,7 @@
// Med
src.modules += new /obj/item/device/healthanalyzer(src)
+ src.modules += new /obj/item/weapon/shockpaddles/robot(src)
src.modules += new /obj/item/weapon/reagent_containers/borghypo/lost(src)
// Engi
@@ -36,11 +37,14 @@
C.synths = list(wire)
src.modules += C
+ src.modules += new /obj/item/device/dogborg/sleeper(src)
+ src.modules += new /obj/item/weapon/dogborg/pounce(src)
+
/obj/item/weapon/robot_module/robot/gravekeeper
name = "gravekeeper robot module"
hide_on_manifest = TRUE
-/obj/item/weapon/robot_module/robot/gravekeeper/New(var/mob/living/silicon/robot/R)
+/obj/item/weapon/robot_module/robot/gravekeeper/create_equipment(var/mob/living/silicon/robot/robot)
..()
// For fending off animals and looters
src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm
deleted file mode 100644
index 4e8ed600bc7..00000000000
--- a/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm
+++ /dev/null
@@ -1,46 +0,0 @@
-/obj/item/weapon/robot_module/robot/stray
- name = "stray robot module"
- hide_on_manifest = 1
-
-/obj/item/weapon/robot_module/robot/stray/New(var/mob/living/silicon/robot/R)
- ..()
- // General
- //src.modules += new /obj/item/device/dogborg/boop_module(src)
-
- // Sec
- 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/weapon/dogborg/pounce(src)
-
- // Med
- src.modules += new /obj/item/device/healthanalyzer(src)
- src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src)
-
- // Engi
- src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
- src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src)
- src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
- src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src)
- src.modules += new /obj/item/device/multitool(src)
-
- // Boof
- src.emag += new /obj/item/weapon/gun/energy/retro/mounted(src)
-
- var/datum/matter_synth/water = new /datum/matter_synth(500) //Starts full and has a max of 500
- water.name = "Water reserves"
- water.recharge_rate = 0
- R.water_res = water
- synths += water
-
- var/obj/item/weapon/reagent_containers/borghypo/hound/lost/H = new /obj/item/weapon/reagent_containers/borghypo/hound/lost(src)
- H.water = water
- src.modules += H
-
- 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)
- B.water = water
- src.modules += B
\ No newline at end of file
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 9b6140ce549..666de996056 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -1,15 +1,15 @@
var/global/list/robot_modules = list(
"Standard" = /obj/item/weapon/robot_module/robot/standard,
- "Service" = /obj/item/weapon/robot_module/robot/clerical/butler/general,
+ "Service" = /obj/item/weapon/robot_module/robot/clerical/butler,
"Clerical" = /obj/item/weapon/robot_module/robot/clerical/general,
- "Research" = /obj/item/weapon/robot_module/robot/research/general,
- "Miner" = /obj/item/weapon/robot_module/robot/miner/general,
+ "Research" = /obj/item/weapon/robot_module/robot/research,
+ "Miner" = /obj/item/weapon/robot_module/robot/miner,
"Crisis" = /obj/item/weapon/robot_module/robot/medical/crisis,
"Surgeon" = /obj/item/weapon/robot_module/robot/medical/surgeon,
"Security" = /obj/item/weapon/robot_module/robot/security/general,
"Combat" = /obj/item/weapon/robot_module/robot/security/combat,
- "Engineering" = /obj/item/weapon/robot_module/robot/engineering/general,
- "Janitor" = /obj/item/weapon/robot_module/robot/janitor/general,
+ "Engineering" = /obj/item/weapon/robot_module/robot/engineering,
+ "Janitor" = /obj/item/weapon/robot_module/robot/janitor,
"Gravekeeper" = /obj/item/weapon/robot_module/robot/gravekeeper,
"Lost" = /obj/item/weapon/robot_module/robot/lost,
"Protector" = /obj/item/weapon/robot_module/robot/syndicate/protector,
@@ -79,10 +79,14 @@ var/global/list/robot_modules = list(
if(!R.client)
R.icon_selected = FALSE // It wasnt a player selecting icon? Let them do it later!
+ create_equipment()
for(var/obj/item/I in modules)
I.canremove = FALSE
+/obj/item/weapon/robot_module/proc/create_equipment(var/mob/living/silicon/robot/robot)
+ return
+
/obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R)
remove_camera_networks(R)
remove_languages(R)
@@ -191,11 +195,18 @@ var/global/list/robot_modules = list(
"Away Team" = 1
)
+/obj/item/weapon/robot_module/robot/New(var/mob/living/silicon/robot/R)
+ ..()
+
+ if(R.sprite_datum)
+ R.sprite_datum.do_equipment_glamour(src)
+
// Cyborgs (non-drones), default loadout. This will be given to every module.
-/obj/item/weapon/robot_module/robot/New()
+/obj/item/weapon/robot_module/robot/create_equipment(var/mob/living/silicon/robot/robot)
..()
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/tool/crowbar/cyborg(src)
@@ -204,13 +215,16 @@ var/global/list/robot_modules = list(
name = "standard robot module"
pto_type = PTO_CIVILIAN
-/obj/item/weapon/robot_module/robot/standard/New()
+/obj/item/weapon/robot_module/robot/standard/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/weapon/melee/baton/loaded(src)
src.emag += new /obj/item/weapon/melee/energy/sword(src)
+ src.modules += new /obj/item/device/dogborg/sleeper/compactor/generic(src)
+ src.emag += new /obj/item/weapon/dogborg/pounce(src)
+
/obj/item/weapon/robot_module/robot/medical
name = "medical robot module"
channels = list("Medical" = 1)
@@ -222,7 +236,7 @@ var/global/list/robot_modules = list(
name = "surgeon robot module"
-/obj/item/weapon/robot_module/robot/medical/surgeon/New()
+/obj/item/weapon/robot_module/robot/medical/surgeon/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/device/sleevemate(src)
@@ -237,7 +251,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src)
src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src)
src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src)
- src.modules += new /obj/item/weapon/surgical/bioregen/cyborg(src) //VoreStation Edit: LET ME SUCC
+ src.modules += new /obj/item/weapon/surgical/bioregen/cyborg(src)
src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
src.modules += new /obj/item/weapon/gripper/medical(src)
src.modules += new /obj/item/weapon/shockpaddles/robot(src)
@@ -249,8 +263,6 @@ var/global/list/robot_modules = list(
PS.reagents.add_reagent("pacid", 250)
PS.name = "Polyacid spray"
- src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce, also, lets not give them polyacid spray
-
var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000)
synths += medicine
@@ -271,6 +283,7 @@ var/global/list/robot_modules = list(
src.modules += O
src.modules += new /obj/item/device/dogborg/sleeper/trauma(src)
+ src.emag += new /obj/item/weapon/dogborg/pounce(src)
/obj/item/weapon/robot_module/robot/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
@@ -290,7 +303,7 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/robot/medical/crisis
name = "crisis robot module"
-/obj/item/weapon/robot_module/robot/medical/crisis/New()
+/obj/item/weapon/robot_module/robot/medical/crisis/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/device/sleevemate(src)
@@ -303,7 +316,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
src.modules += new /obj/item/weapon/gripper/medical(src)
src.modules += new /obj/item/weapon/shockpaddles/robot(src)
- src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) //VOREStation Add - This is kinda important for rescuing people without making it worse for everyone
+ src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src)
var/obj/item/weapon/reagent_containers/spray/PS = new /obj/item/weapon/reagent_containers/spray(src)
src.emag += PS
PS.reagents.add_reagent("pacid", 250)
@@ -328,6 +341,9 @@ var/global/list/robot_modules = list(
src.modules += B
src.modules += S
+ src.modules += new /obj/item/device/dogborg/sleeper(src)
+ src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce
+
/obj/item/weapon/robot_module/robot/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules
@@ -351,7 +367,7 @@ var/global/list/robot_modules = list(
subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor)
pto_type = PTO_ENGINEERING
-/obj/item/weapon/robot_module/robot/engineering/general/New()
+/obj/item/weapon/robot_module/robot/engineering/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/borg/sight/meson(src)
src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src)
@@ -361,17 +377,16 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/device/multitool(src)
src.modules += new /obj/item/device/t_scanner(src)
src.modules += new /obj/item/device/analyzer(src)
+ src.modules += new /obj/item/device/geiger(src)
src.modules += new /obj/item/taperoll/engineering(src)
src.modules += new /obj/item/weapon/gripper(src)
src.modules += new /obj/item/weapon/gripper/circuit(src)
src.modules += new /obj/item/device/lightreplacer(src)
- // RPDs do this already
- //src.modules += new /obj/item/device/pipe_painter(src)
src.modules += new /obj/item/weapon/pipe_dispenser(src)
src.modules += new /obj/item/device/floor_painter(src)
+ src.modules += new /obj/item/weapon/rms(src)
src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src)
src.emag += new /obj/item/weapon/melee/baton/robot/arm(src)
- src.modules += new /obj/item/device/geiger(src)
src.modules += new /obj/item/weapon/rcd/electric/mounted/borg(src)
src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src)
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
@@ -439,6 +454,15 @@ var/global/list/robot_modules = list(
PL.synths = list(plastic)
src.modules += PL
+ var/obj/item/device/dogborg/sleeper/compactor/decompiler/BD = new /obj/item/device/dogborg/sleeper/compactor/decompiler(src)
+ BD.metal = metal
+ BD.glass = glass
+ BD.wood = wood
+ BD.plastic = plastic
+ src.modules += BD
+
+ src.emag += new /obj/item/weapon/dogborg/pounce(src)
+
/obj/item/weapon/robot_module/robot/security
name = "security robot module"
channels = list("Security" = 1)
@@ -450,18 +474,20 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/robot/security/general
name = "security robot module"
-/obj/item/weapon/robot_module/robot/security/general/New()
+/obj/item/weapon/robot_module/robot/security/general/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
src.modules += new /obj/item/weapon/melee/baton/robot(src)
src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src)
- // src.modules += new /obj/item/weapon/gun/energy/taser/xeno/sec/robot(src) // VOREStation Edit - We don't need these
src.modules += new /obj/item/taperoll/police(src)
src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src)
src.modules += new /obj/item/weapon/gripper/security(src)
src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add
src.emag += new /obj/item/weapon/gun/energy/laser/mounted(src)
+ src.modules += new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig.
+ src.modules += new /obj/item/weapon/dogborg/pounce(src) //Pounce
+
/obj/item/weapon/robot_module/robot/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/device/flash/F = locate() in src.modules
if(F.broken)
@@ -482,7 +508,7 @@ var/global/list/robot_modules = list(
channels = list("Service" = 1)
pto_type = PTO_CIVILIAN
-/obj/item/weapon/robot_module/robot/janitor/general/New()
+/obj/item/weapon/robot_module/robot/janitor/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/soap/nanotrasen(src)
src.modules += new /obj/item/weapon/storage/bag/trash(src)
@@ -494,7 +520,47 @@ var/global/list/robot_modules = list(
LS.reagents.add_reagent("lube", 250)
LS.name = "Lube spray"
-/obj/item/weapon/robot_module/robot/janitor/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
+ //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 = 50000
+ metal.energy = 0
+ var/datum/matter_synth/glass = new /datum/matter_synth/glass()
+ glass.name = "Glass reserves"
+ glass.recharge_rate = 0
+ glass.max_energy = 50000
+ glass.energy = 0
+
+ synths += metal
+ synths += glass
+
+ //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
+
+ var/obj/item/device/dogborg/sleeper/compactor/C = new /obj/item/device/dogborg/sleeper/compactor(src)
+ C.metal = metal
+ C.glass = glass
+ src.modules += C
+
+ src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce
+
+/obj/item/weapon/robot_module/robot/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/device/lightreplacer/LR = locate() in src.modules
LR.Charge(R, amount)
@@ -532,17 +598,17 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/robot/clerical/butler
channels = list("Service" = 1)
-/obj/item/weapon/robot_module/robot/clerical/butler/general
+/obj/item/weapon/robot_module/robot/clerical/butler
name = "service robot module"
-/obj/item/weapon/robot_module/robot/clerical/butler/general/New()
+/obj/item/weapon/robot_module/robot/clerical/butler/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/gripper/service(src)
src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
src.modules += new /obj/item/weapon/material/minihoe(src)
src.modules += new /obj/item/weapon/material/knife/machete/hatchet(src)
src.modules += new /obj/item/device/analyzer/plant_analyzer(src)
- src.modules += new /obj/item/weapon/storage/bag/plants(src)
+ src.modules += new /obj/item/weapon/storage/bag/serviceborg(src)
src.modules += new /obj/item/weapon/robot_harvester(src)
src.modules += new /obj/item/weapon/material/knife(src)
src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src)
@@ -570,7 +636,11 @@ var/global/list/robot_modules = list(
PB.name = "Auntie Hong's Final Sip"
PB.desc = "A bottle of very special mix of alcohol and poison. Some may argue that there's alcohol to die for, but Auntie Hong took it to next level."
-/obj/item/weapon/robot_module/robot/clerical/butler/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
+ src.modules += new /obj/item/device/dogborg/sleeper/compactor/brewer(src)
+
+ src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce
+
+/obj/item/weapon/robot_module/robot/clerical/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules
E.reagents.add_reagent("enzyme", 2 * amount)
@@ -581,7 +651,7 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/robot/clerical/general
name = "clerical robot module"
-/obj/item/weapon/robot_module/robot/clerical/general/New()
+/obj/item/weapon/robot_module/robot/clerical/general/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/pen/robopen(src)
src.modules += new /obj/item/weapon/form_printer(src)
@@ -592,6 +662,9 @@ var/global/list/robot_modules = list(
src.emag += new /obj/item/weapon/stamp/chameleon(src)
src.emag += new /obj/item/weapon/pen/chameleon(src)
+ src.modules += new /obj/item/device/dogborg/sleeper/compactor/generic(src)
+ src.emag += new /obj/item/weapon/dogborg/pounce(src)
+
/obj/item/weapon/robot_module/robot/miner
name = "miner robot module"
channels = list("Supply" = 1)
@@ -599,7 +672,7 @@ var/global/list/robot_modules = list(
supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill)
pto_type = PTO_CARGO
-/obj/item/weapon/robot_module/robot/miner/general/New()
+/obj/item/weapon/robot_module/robot/miner/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/borg/sight/material(src)
src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
@@ -609,12 +682,10 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
src.modules += new /obj/item/weapon/gripper/miner(src)
src.modules += new /obj/item/weapon/mining_scanner(src)
- // New Emag gear for the minebots!
src.emag += new /obj/item/weapon/kinetic_crusher/machete/dagger(src)
- // No reason for these, upgrade modules replace them.
- //src.emag = new /obj/item/weapon/pickaxe/plasmacutter/borg(src)
- //src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
+ src.modules += new /obj/item/device/dogborg/sleeper/compactor/supply(src)
+ src.emag += new /obj/item/weapon/dogborg/pounce(src)
/obj/item/weapon/robot_module/robot/research
name = "research module"
@@ -622,7 +693,7 @@ var/global/list/robot_modules = list(
supported_upgrades = list(/obj/item/borg/upgrade/advrped)
pto_type = PTO_SCIENCE
-/obj/item/weapon/robot_module/robot/research/general/New()
+/obj/item/weapon/robot_module/robot/research/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/portable_destructive_analyzer(src)
src.modules += new /obj/item/weapon/gripper/research(src)
@@ -647,10 +718,6 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src)
src.modules += new /obj/item/device/xenoarch_multi_tool(src)
src.modules += new /obj/item/weapon/pickaxe/excavationdrill(src)
- //src.modules += new /obj/item/device/cataloguer(src) //VOREStation Removal
-
-
- src.modules += new /obj/item/device/dogborg/sleeper/compactor/analyzer(src)
src.emag += new /obj/item/weapon/hand_tele(src)
@@ -669,7 +736,10 @@ var/global/list/robot_modules = list(
C.synths = list(wire)
src.modules += C
-/obj/item/weapon/robot_module/robot/research/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
+ src.modules += new /obj/item/device/dogborg/sleeper/compactor/analyzer(src)
+ src.emag += new /obj/item/weapon/dogborg/pounce(src)
+
+/obj/item/weapon/robot_module/robot/research/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules
if(S.mode == 2)
@@ -680,23 +750,26 @@ var/global/list/robot_modules = list(
..()
-
/obj/item/weapon/robot_module/robot/security/combat
name = "combat robot module"
hide_on_manifest = TRUE
-/obj/item/weapon/robot_module/robot/security/combat/New()
+/obj/item/weapon/robot_module/robot/security/combat/create_equipment(var/mob/living/silicon/robot/robot)
..()
- src.modules += new /obj/item/device/flash(src)
- //src.modules += new /obj/item/borg/sight/thermal(src) // VOREStation Edit
+ src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
+ src.modules += new /obj/item/taperoll/police(src)
src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src)
+ src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun(src)
src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src)
+ src.modules += new /obj/item/weapon/combat_borgblade
src.modules += new /obj/item/borg/combat/shield(src)
src.modules += new /obj/item/borg/combat/mobility(src)
- src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add
+ src.modules += new /obj/item/weapon/borg_combat_shocker
+ src.modules += new /obj/item/device/ticket_printer(src)
src.emag += new /obj/item/weapon/gun/energy/lasercannon/mounted(src)
src.modules += new /obj/item/device/dogborg/sleeper/K9/ert(src)
+ src.modules += new /obj/item/weapon/dogborg/pounce(src)
/* Drones */
@@ -707,7 +780,7 @@ var/global/list/robot_modules = list(
no_slip = 1
networks = list(NETWORK_ENGINEERING)
-/obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot)
+/obj/item/weapon/robot_module/drone/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/borg/sight/meson(src)
src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src)
@@ -793,7 +866,7 @@ var/global/list/robot_modules = list(
channels = list("Engineering" = 1)
languages = list()
-/obj/item/weapon/robot_module/drone/construction/New()
+/obj/item/weapon/robot_module/drone/construction/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/rcd/electric/mounted/borg/lesser(src)
@@ -808,7 +881,7 @@ var/global/list/robot_modules = list(
channels = list("Supply" = 1)
networks = list(NETWORK_MINE)
-/obj/item/weapon/robot_module/drone/mining/New()
+/obj/item/weapon/robot_module/drone/mining/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/borg/sight/material(src)
src.modules += new /obj/item/weapon/pickaxe/borgdrill(src)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
deleted file mode 100644
index b95b3e798f6..00000000000
--- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
+++ /dev/null
@@ -1,515 +0,0 @@
-/obj/item/weapon/robot_module/robot/security/knine
- name = "k9 robot module"
-
-/obj/item/weapon/robot_module/robot/security/knine/New(var/mob/living/silicon/robot/R)
- src.modules += new /obj/item/weapon/handcuffs/cyborg(src) //You need cuffs to be a proper sec borg!
- 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/taperoll/police(src) //Block out crime scenes.
- 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.modules += new /obj/item/device/ticket_printer(src)
- 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(500) //Starts full and has a max of 500
- water.name = "Water reserves"
- water.recharge_rate = 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
- src.modules += B
- ..()
-
-/obj/item/weapon/robot_module/robot/security/knine/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
- var/obj/item/device/flash/F = locate() in src.modules
- if(F.broken)
- F.broken = 0
- F.times_used = 0
- F.icon_state = "flash"
- else if(F.times_used)
- F.times_used--
- var/obj/item/weapon/gun/energy/taser/mounted/cyborg/T = locate() in src.modules
- if(T.power_supply.charge < T.power_supply.maxcharge)
- T.power_supply.give(T.charge_cost * amount)
- T.update_icon()
- else
- T.charge_tick = 0
- /*var/obj/item/weapon/melee/baton/robot/B = locate() in src.modules //Borg baton uses borg cell.
- if(B && B.bcell)
- B.bcell.give(amount)*/
-
-
-/obj/item/weapon/robot_module/robot/medical/medihound
- name = "MediHound module"
-
-/obj/item/weapon/robot_module/robot/medical/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/healthanalyzer(src) // See who's hurt specificially.
- 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/large(src)//For holding the chemicals when the chemist is nice, made it the large variant in 2022
- 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.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) //This is kinda important for rescuing people without making it worse for everyone
- src.modules += new /obj/item/weapon/gripper/medical(src) //Let them do literally anything in medbay other than patch external damage and lick people
- src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) //dropper is nice to have for so much actually
- src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce
-
- var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000)
- synths += medicine
-
- var/obj/item/stack/medical/advanced/clotting/C = new (src)
- var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src)
- C.uses_charge = 1
- C.charge_costs = list(5000)
- C.synths = list(medicine)
- S.uses_charge = 1
- S.charge_costs = list(1000)
- S.synths = list(medicine)
- src.modules += C
- src.modules += S
-
- var/datum/matter_synth/water = new /datum/matter_synth(500)
- water.name = "Water reserves"
- water.recharge_rate = 0
- R.water_res = water
- synths += water
-
- var/obj/item/weapon/reagent_containers/borghypo/hound/H = new /obj/item/weapon/reagent_containers/borghypo/hound(src)
- H.water = water
- src.modules += H
-
- 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
- src.modules += B
- ..()
-
-/obj/item/weapon/robot_module/robot/medical/traumahound
- name = "traumahound robot module"
-
-/obj/item/weapon/robot_module/robot/medical/traumahound/New(var/mob/living/silicon/robot/R)
- src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
- src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life
-
- var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
- //T.water = water
- src.modules += T
- ..()
-
-/obj/item/weapon/robot_module/robot/security/ert
- name = "Emergency Responce module"
-
-/obj/item/weapon/robot_module/robot/security/ert/New(var/mob/living/silicon/robot/R)
- src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
- src.modules += new /obj/item/weapon/dogborg/jaws/ert(src)
- src.modules += new /obj/item/taperoll/police(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(500)
- water.name = "Water reserves"
- water.recharge_rate = 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/ert(src)
- B.water = water
- src.modules += B
- ..()
-
-/obj/item/weapon/robot_module/robot/janitor/scrubpup
- name = "Custodial Hound module"
- can_be_pushed = 0
-
-/obj/item/weapon/robot_module/robot/janitor/scrubpup/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/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 = 50000
- metal.energy = 0
- var/datum/matter_synth/glass = new /datum/matter_synth/glass()
- glass.name = "Glass reserves"
- glass.recharge_rate = 0
- glass.max_energy = 50000
- glass.energy = 0
- var/datum/matter_synth/water = new /datum/matter_synth(500)
- water.name = "Water reserves"
- water.recharge_rate = 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
- ..()
-
-/obj/item/weapon/robot_module/robot/research/sciencehound
- name = "Research Hound Module"
- can_be_pushed = 0
-
-/obj/item/weapon/robot_module/robot/research/sciencehound/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/weapon/gripper/research(src)
- src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
- src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src)
- src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src)
- src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
- src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src)
- src.modules += new /obj/item/device/multitool(src)
- src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
- src.modules += new /obj/item/weapon/storage/part_replacer(src)
- src.modules += new /obj/item/device/robotanalyzer(src)
- src.modules += new /obj/item/weapon/card/robot(src)
- //Added a circuit gripper
- src.modules += new /obj/item/weapon/gripper/circuit(src)
- src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src)
- //src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) //these are on the normal one, but do not appear to have a purpose other than borging
- //src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) //so I am leaving them here but commented out because robotics no do the borging w/o medical
- src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) //destructive analyzer option for pref respect while also being able to do job
- src.modules += new /obj/item/weapon/gripper/no_use/mech(src)
- src.modules += new /obj/item/weapon/shockpaddles/robot/jumper(src) //unkilling synths may be important actually
- src.modules += new /obj/item/weapon/melee/baton/slime/robot(src) //save the xenobio from themselves
- src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src) //save the xenobio from themselves from a distance
- src.modules += new /obj/item/device/xenoarch_multi_tool(src) //go find fancy rock
- src.modules += new /obj/item/weapon/pickaxe/excavationdrill(src) //go get fancy rock
- src.emag = new /obj/item/weapon/hand_tele(src)
-
- var/datum/matter_synth/water = new /datum/matter_synth(500)
- water.name = "Water reserves"
- water.recharge_rate = 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
- src.modules += B
-
- var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000)
- synths += nanite
- var/datum/matter_synth/wire = new /datum/matter_synth/wire()
- synths += wire
-
- var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src)
- N.uses_charge = 1
- N.charge_costs = list(1000)
- N.synths = list(nanite)
- src.modules += N
-
- var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src)
- C.synths = list(wire)
- src.modules += C
- ..()
-
-/obj/item/weapon/robot_module/robot/engineering/engiedog
- name = "Construction Hound module"
- can_be_pushed = 0
-
-/obj/item/weapon/robot_module/robot/engineering/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/tool/screwdriver/cyborg(src)
- src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
- src.modules += new /obj/item/weapon/tool/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/device/analyzer(src)
- src.modules += new /obj/item/device/geiger(src)
- src.modules += new /obj/item/taperoll/engineering(src)
- src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src)
- src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
- src.modules += new /obj/item/weapon/pickaxe(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/weapon/gripper(src)
- src.modules += new /obj/item/weapon/gripper/circuit(src)
- // The RPD does the exact same thing, this just take space.
- //src.modules += new /obj/item/device/pipe_painter(src)
- src.modules += new /obj/item/device/floor_painter(src)
- src.modules += new /obj/item/weapon/rms(src)
- src.modules += new /obj/item/weapon/pipe_dispenser(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 = 500
- metal.max_energy = 50000
- metal.energy = 10000
- var/datum/matter_synth/glass = new /datum/matter_synth/glass()
- glass.name = "Glass reserves"
- glass.recharge_rate = 500
- glass.max_energy = 50000
- glass.energy = 10000
- var/datum/matter_synth/wood = new /datum/matter_synth/wood()
- wood.name = "Wood reserves"
- wood.recharge_rate = 500
- wood.max_energy = 50000
- wood.energy = 10000
- var/datum/matter_synth/plastic = new /datum/matter_synth/plastic()
- plastic.name = "Plastic reserves"
- plastic.recharge_rate = 500
- plastic.max_energy = 50000
- plastic.energy = 10000
- var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel()
- plasteel.name = "Plasteel reserves"// Adding plasteel synthesizer to move in-line with Engiborg.
- plasteel.recharge_rate = 250
- plasteel.max_energy = 20000
- plasteel.energy = 10000
- var/datum/matter_synth/water = new /datum/matter_synth(500)
- water.name = "Water reserves"
- water.recharge_rate = 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
- synths += plasteel
-
- 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
- MD.water = water
- 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
-
- var/obj/item/stack/material/cyborg/plasteel/PS = new (src)
- PS.synths = list(plasteel)
- src.modules += PS
- ..()
-
-// Uses modified K9 sprites.
-/obj/item/weapon/robot_module/robot/clerical/butler/brodog
- name = "service-hound module"
- can_be_pushed = 0
-
-// In a nutshell, basically service/butler robot but in dog form. - Port from CitadelRP
-/obj/item/weapon/robot_module/robot/clerical/butler/brodog/New(var/mob/living/silicon/robot/R)
- src.modules += new /obj/item/weapon/gripper/service(src)
- src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
- src.modules += new /obj/item/weapon/material/minihoe(src)
- src.modules += new /obj/item/weapon/material/knife/machete/hatchet(src)
- src.modules += new /obj/item/device/analyzer/plant_analyzer(src)
- src.modules += new /obj/item/weapon/storage/bag/dogborg(src)
- src.modules += new /obj/item/weapon/robot_harvester(src)
- src.modules += new /obj/item/weapon/material/knife(src)
- src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src)
- src.modules += new /obj/item/device/multitool(src) //to freeze trays
- 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) //Pounce
-
- var/datum/matter_synth/water = new /datum/matter_synth(500) // buffy fix, was 0
- water.name = "Water reserves"
- water.recharge_rate = 0
- water.max_energy = 1000
- 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/weapon/rsf/M = new /obj/item/weapon/rsf(src)
- M.stored_matter = 30
- src.modules += M
-
- src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
-
- var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src)
- L.lit = 1
- src.modules += L
-
- src.modules += new /obj/item/weapon/tray/robotray(src)
- src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src)
-
-/* // I don't know what kind of sleeper to put here, but also no need if you already have "Robot Nom" verb. - revisit later
- var/obj/item/device/dogborg/sleeper/K9/B = new /obj/item/device/dogborg/sleeper/K9(src)
- B.water = water
- src.modules += B
-*/
- ..()
-
-/obj/item/weapon/robot_module/robot/miner/kmine
- name = "Supply Hound Module"
- can_be_pushed = 0
-
-/obj/item/weapon/robot_module/robot/miner/kmine/New(var/mob/living/silicon/robot/R)
- src.modules += new /obj/item/borg/sight/material(src)
- src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
- src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src)
- src.modules += new /obj/item/weapon/storage/bag/ore(src)
- src.modules += new /obj/item/weapon/pickaxe/borgdrill(src)
- src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
- src.modules += new /obj/item/weapon/gripper/miner(src)
- src.modules += new /obj/item/weapon/mining_scanner(src)
- src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
- // New Emag gear for the minebots!
- src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src)
-
- // No reason for these, upgrade modules replace them.
- //src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
- //src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
-
- var/datum/matter_synth/water = new /datum/matter_synth(500)
- water.name = "Water reserves"
- water.recharge_rate = 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/compactor/supply(src)
- B.water = water
- src.modules += B
-
- ..()
-
-/obj/item/weapon/robot_module/robot/clerical/butler/booze
- name = "BoozeHound robot module"
- can_be_pushed = 0
-
-/obj/item/weapon/robot_module/robot/clerical/butler/booze/New(var/mob/living/silicon/robot/R)
- ..()
- src.modules += new /obj/item/weapon/gripper/service(src)
- //src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
- //src.modules += new /obj/item/weapon/material/minihoe(src)
- //src.modules += new /obj/item/device/analyzer/plant_analyzer(src)
- //src.modules += new /obj/item/weapon/storage/bag/plants(src)
- //src.modules += new /obj/item/weapon/robot_harvester(src)
- src.modules += new /obj/item/weapon/material/knife(src)
- src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src)
- src.modules += new /obj/item/device/multitool(src) //to freeze trays
- src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
- src.modules += new /obj/item/weapon/tray/robotray
- //src.modules += new /obj/item/device/dogborg/boop_module(src)
- src.modules += new /obj/item/device/dogborg/sleeper/compactor/brewer(src)
- src.emag = new /obj/item/weapon/dogborg/pounce(src)
- //R.verbs += /mob/living/silicon/robot/proc/reskin_booze
-
- var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src)
- M.stored_matter = 30
- src.modules += M
-
- src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
-
- var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src)
- L.lit = 1
- src.modules += L
-
- src.modules += new /obj/item/weapon/tray/robotray(src)
- src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src)
- ..()
-
-/obj/item/weapon/robot_module/robot/clerical/butler/booze/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
- var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules
- E.reagents.add_reagent("enzyme", 2 * amount)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm b/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm
index 09c7704cff5..c79629c187e 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm
@@ -2,7 +2,7 @@
name = "swarm drone module"
var/id
-/obj/item/weapon/robot_module/drone/swarm/New(var/mob/living/silicon/robot/robot)
+/obj/item/weapon/robot_module/drone/swarm/create_equipment(var/mob/living/silicon/robot/robot)
..()
id = robot.idcard
@@ -18,12 +18,12 @@
/obj/item/weapon/robot_module/drone/swarm/ranged
name = "swarm gunner module"
-/obj/item/weapon/robot_module/drone/swarm/ranged/New(var/mob/living/silicon/robot/robot)
+/obj/item/weapon/robot_module/drone/swarm/ranged/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/gun/energy/xray/swarm(src)
-/obj/item/weapon/robot_module/drone/swarm/melee/New(var/mob/living/silicon/robot/robot)
+/obj/item/weapon/robot_module/drone/swarm/melee/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/melee/energy/sword/ionic_rapier/lance(src)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
index 4d3f328dba5..8f4c7eeceb6 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
@@ -21,9 +21,8 @@
var/id
// All syndie modules get these, and the base borg items (flash, crowbar, etc).
-/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R)
+/obj/item/weapon/robot_module/robot/syndicate/create_equipment(var/mob/living/silicon/robot/robot)
..()
- loc = R
src.modules += new /obj/item/weapon/pinpointer/shuttle/merc(src)
src.modules += new /obj/item/weapon/melee/energy/sword(src)
@@ -35,9 +34,9 @@
var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
src.modules += jetpack
- R.internals = jetpack
+ robot.internals = jetpack
- id = R.idcard
+ id = robot.idcard
src.modules += id
/obj/item/weapon/robot_module/robot/syndicate/Destroy()
@@ -49,7 +48,7 @@
/obj/item/weapon/robot_module/robot/syndicate/protector
name = "protector robot module"
-/obj/item/weapon/robot_module/robot/syndicate/protector/New(var/mob/living/silicon/robot/R)
+/obj/item/weapon/robot_module/robot/syndicate/protector/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/shield_projector/rectangle/weak(src)
src.modules += new /obj/item/weapon/gun/energy/dakkalaser(src)
@@ -60,7 +59,7 @@
/obj/item/weapon/robot_module/robot/syndicate/mechanist
name = "mechanist robot module"
-/obj/item/weapon/robot_module/robot/syndicate/mechanist/New(var/mob/living/silicon/robot/R)
+/obj/item/weapon/robot_module/robot/syndicate/mechanist/create_equipment(var/mob/living/silicon/robot/robot)
..()
// General engineering/hacking.
src.modules += new /obj/item/borg/sight/meson(src)
@@ -125,7 +124,7 @@
/obj/item/weapon/robot_module/robot/syndicate/combat_medic
name = "combat medic robot module"
-/obj/item/weapon/robot_module/robot/syndicate/combat_medic/New(var/mob/living/silicon/robot/R)
+/obj/item/weapon/robot_module/robot/syndicate/combat_medic/create_equipment(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/borg/sight/hud/med(src)
src.modules += new /obj/item/device/healthanalyzer/phasic(src)
diff --git a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm
index 6e44a83c030..5613f4afd1e 100644
--- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm
@@ -17,6 +17,7 @@
var/has_dead_sprite = FALSE
var/has_dead_sprite_overlay = FALSE
var/has_extra_customization = FALSE
+ var/has_custom_equipment_sprites = FALSE
var/vis_height = 32
var/pixel_x = 0
@@ -72,6 +73,9 @@
/datum/robot_sprite/proc/handle_extra_customization(var/mob/living/silicon/robot/ourborg)
return
+/datum/robot_sprite/proc/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ return
+
// Dogborgs and not-dogborgs that use dogborg stuff. Oh no.
// Not really necessary to be used by any specific sprite actually, even newly added dogborgs.
// Mostly a combination of all features dogborgs had prior to conversion to datums for convinience of conversion itself.
@@ -82,6 +86,7 @@
rest_sprite_options = list("Default", "Sit", "Bellyup")
has_dead_sprite = TRUE
has_dead_sprite_overlay = TRUE
+ has_custom_equipment_sprites = TRUE
pixel_x = -16
/datum/robot_sprite/dogborg/get_rest_sprite(var/mob/living/silicon/robot/ourborg)
@@ -98,8 +103,23 @@
/datum/robot_sprite/dogborg/get_belly_overlay(var/mob/living/silicon/robot/ourborg)
return "[sprite_icon_state]-sleeper"
+/datum/robot_sprite/dogborg/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ if(!has_custom_equipment_sprites)
+ return
+
+ var/obj/item/weapon/tool/crowbar/cyborg/C = locate() in module.modules
+ if(C)
+ C.name = "puppy jaws"
+ C.desc = "The jaws of a small dog. Still strong enough to pry things."
+ C.icon = 'icons/mob/dogborg_vr.dmi'
+ C.icon_state = "smalljaws_textless"
+ C.hitsound = 'sound/weapons/bite.ogg'
+ C.attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
+
+
/datum/robot_sprite/dogborg/tall
has_dead_sprite_overlay = FALSE
+ has_custom_equipment_sprites = FALSE
vis_height = 64
diff --git a/code/modules/mob/living/silicon/robot/sprites/civilian.dm b/code/modules/mob/living/silicon/robot/sprites/civilian.dm
index 4e5a702b096..893e342a647 100644
--- a/code/modules/mob/living/silicon/robot/sprites/civilian.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/civilian.dm
@@ -251,11 +251,13 @@
/datum/robot_sprite/dogborg/tall/service/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
+ has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/service/fancyraptor
name = "Raptor V-4000"
sprite_icon_state = "fancyraptor"
+ has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/service/meka
diff --git a/code/modules/mob/living/silicon/robot/sprites/combat.dm b/code/modules/mob/living/silicon/robot/sprites/combat.dm
index c467f5775ab..5a37fa3a677 100644
--- a/code/modules/mob/living/silicon/robot/sprites/combat.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/combat.dm
@@ -87,6 +87,7 @@
/datum/robot_sprite/dogborg/tall/combat
module_type = "Combat"
sprite_icon = 'icons/mob/robot/combat_large.dmi'
+ has_custom_equipment_sprites = TRUE
var/has_gun_sprite = FALSE
@@ -94,6 +95,25 @@
if(has_gun_sprite && (istype(ourborg.module_active, /obj/item/weapon/gun/energy/laser/mounted) || istype(ourborg.module_active, /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun) || istype(ourborg.module_active, /obj/item/weapon/gun/energy/lasercannon/mounted)))
ourborg.add_overlay("[sprite_icon_state]-gun")
+/datum/robot_sprite/dogborg/tall/combat/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ if(!has_custom_equipment_sprites)
+ return
+
+ ..()
+
+ var/obj/item/weapon/combat_borgblade/CBB = locate() in module.modules
+ if(CBB)
+ CBB.name = "sword tail"
+ CBB.desc = "A glowing dagger normally attached to the end of a cyborg's tail. It appears to be extremely sharp."
+ var/obj/item/weapon/borg_combat_shocker/BCS = locate() in module.modules
+ if(BCS)
+ BCS.name = "combat jaws"
+ BCS.desc = "Shockingly chompy!"
+ BCS.icon_state = "ertjaws"
+ BCS.hitsound = 'sound/weapons/bite.ogg'
+ BCS.attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
+ BCS.dogborg = TRUE
+
/datum/robot_sprite/dogborg/tall/combat/derg
name = "ERT"
sprite_icon_state = "derg"
diff --git a/code/modules/mob/living/silicon/robot/sprites/engineering.dm b/code/modules/mob/living/silicon/robot/sprites/engineering.dm
index 648ade8d7e1..390355b3320 100644
--- a/code/modules/mob/living/silicon/robot/sprites/engineering.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/engineering.dm
@@ -166,6 +166,7 @@
/datum/robot_sprite/dogborg/tall/engineering/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
+ has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/engineering/meka
diff --git a/code/modules/mob/living/silicon/robot/sprites/event.dm b/code/modules/mob/living/silicon/robot/sprites/event.dm
index ae641e1388a..dd512f02094 100644
--- a/code/modules/mob/living/silicon/robot/sprites/event.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/event.dm
@@ -28,6 +28,20 @@
module_type = "Lost"
sprite_icon = 'icons/mob/robot/lost_wide.dmi'
+/datum/robot_sprite/dogborg/lost/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ if(!has_custom_equipment_sprites)
+ return
+
+ ..()
+
+ var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules
+ if(SP)
+ SP.name = "paws of life"
+ SP.desc = "Zappy paws. For fixing cardiac arrest."
+ SP.icon = 'icons/mob/dogborg_vr.dmi'
+ SP.icon_state = "defibpaddles0"
+ SP.attack_verb = list("batted", "pawed", "bopped", "whapped")
+
/datum/robot_sprite/dogborg/lost/stray
name = "Stray"
sprite_icon_state = "stray"
diff --git a/code/modules/mob/living/silicon/robot/sprites/janitor.dm b/code/modules/mob/living/silicon/robot/sprites/janitor.dm
index 9ea80c8b34d..5ca87362efa 100644
--- a/code/modules/mob/living/silicon/robot/sprites/janitor.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/janitor.dm
@@ -148,6 +148,7 @@
/datum/robot_sprite/dogborg/tall/janitor/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
+ has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/janitor/meka
diff --git a/code/modules/mob/living/silicon/robot/sprites/medical.dm b/code/modules/mob/living/silicon/robot/sprites/medical.dm
index 6cf01017d2b..079f348e720 100644
--- a/code/modules/mob/living/silicon/robot/sprites/medical.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/medical.dm
@@ -198,6 +198,20 @@
else
return ..()
+/datum/robot_sprite/dogborg/surgical/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ if(!has_custom_equipment_sprites)
+ return
+
+ ..()
+
+ var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules
+ if(SP)
+ SP.name = "paws of life"
+ SP.desc = "Zappy paws. For fixing cardiac arrest."
+ SP.icon = 'icons/mob/dogborg_vr.dmi'
+ SP.icon_state = "defibpaddles0"
+ SP.attack_verb = list("batted", "pawed", "bopped", "whapped")
+
/datum/robot_sprite/dogborg/surgical/vale
name = "Traumahound"
sprite_icon_state = "vale"
@@ -223,9 +237,24 @@
module_type = "Surgeon"
sprite_icon = 'icons/mob/robot/surgical_large.dmi'
+/datum/robot_sprite/dogborg/tall/surgical/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ if(!has_custom_equipment_sprites)
+ return
+
+ ..()
+
+ var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules
+ if(SP)
+ SP.name = "paws of life"
+ SP.desc = "Zappy paws. For fixing cardiac arrest."
+ SP.icon = 'icons/mob/dogborg_vr.dmi'
+ SP.icon_state = "defibpaddles0"
+ SP.attack_verb = list("batted", "pawed", "bopped", "whapped")
+
/datum/robot_sprite/dogborg/tall/surgical/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
+ has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
@@ -294,6 +323,20 @@
else
return ..()
+/datum/robot_sprite/dogborg/crisis/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ if(!has_custom_equipment_sprites)
+ return
+
+ ..()
+
+ var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules
+ if(SP)
+ SP.name = "paws of life"
+ SP.desc = "Zappy paws. For fixing cardiac arrest."
+ SP.icon = 'icons/mob/dogborg_vr.dmi'
+ SP.icon_state = "defibpaddles0"
+ SP.attack_verb = list("batted", "pawed", "bopped", "whapped")
+
/datum/robot_sprite/dogborg/crisis/hound
name = "Medical Hound"
sprite_icon_state = "hound"
@@ -333,7 +376,22 @@
module_type = "Crisis"
sprite_icon = 'icons/mob/robot/crisis_large.dmi'
+/datum/robot_sprite/dogborg/tall/crisis/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ if(!has_custom_equipment_sprites)
+ return
+
+ ..()
+
+ var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules
+ if(SP)
+ SP.name = "paws of life"
+ SP.desc = "Zappy paws. For fixing cardiac arrest."
+ SP.icon = 'icons/mob/dogborg_vr.dmi'
+ SP.icon_state = "defibpaddles0"
+ SP.attack_verb = list("batted", "pawed", "bopped", "whapped")
+
/datum/robot_sprite/dogborg/tall/crisis/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
+ has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
diff --git a/code/modules/mob/living/silicon/robot/sprites/mining.dm b/code/modules/mob/living/silicon/robot/sprites/mining.dm
index ed91ff3fb6c..6f82b13bfb4 100644
--- a/code/modules/mob/living/silicon/robot/sprites/mining.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/mining.dm
@@ -136,6 +136,7 @@
/datum/robot_sprite/dogborg/tall/mining/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
+ has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/mining/meka
diff --git a/code/modules/mob/living/silicon/robot/sprites/science.dm b/code/modules/mob/living/silicon/robot/sprites/science.dm
index a4ef4cc543c..addffda1638 100644
--- a/code/modules/mob/living/silicon/robot/sprites/science.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/science.dm
@@ -98,6 +98,20 @@
module_type = "Research"
sprite_icon = 'icons/mob/robot/science_wide.dmi'
+/datum/robot_sprite/dogborg/science/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ if(!has_custom_equipment_sprites)
+ return
+
+ ..()
+
+ var/obj/item/weapon/shockpaddles/robot/jumper/J = locate() in module.modules
+ if(J)
+ J.name = "jumper paws"
+ J.desc = "Zappy paws. For rebooting a full body prostetic."
+ J.icon = 'icons/mob/dogborg_vr.dmi'
+ J.icon_state = "defibpaddles0"
+ J.attack_verb = list("batted", "pawed", "bopped", "whapped")
+
/datum/robot_sprite/dogborg/science/vale
name = "Research Hound"
sprite_icon_state = "vale"
@@ -134,9 +148,24 @@
module_type = "Research"
sprite_icon = 'icons/mob/robot/science_large.dmi'
+/datum/robot_sprite/dogborg/tall/science/do_equipment_glamour(var/obj/item/weapon/robot_module/module)
+ if(!has_custom_equipment_sprites)
+ return
+
+ ..()
+
+ var/obj/item/weapon/shockpaddles/robot/jumper/J = locate() in module.modules
+ if(J)
+ J.name = "jumper paws"
+ J.desc = "Zappy paws. For rebooting a full body prostetic."
+ J.icon = 'icons/mob/dogborg_vr.dmi'
+ J.icon_state = "defibpaddles0"
+ J.attack_verb = list("batted", "pawed", "bopped", "whapped")
+
/datum/robot_sprite/dogborg/tall/science/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
+ has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/science/meka
diff --git a/code/modules/mob/living/silicon/robot/sprites/security.dm b/code/modules/mob/living/silicon/robot/sprites/security.dm
index f432a34fa95..d9856ed17c3 100644
--- a/code/modules/mob/living/silicon/robot/sprites/security.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/security.dm
@@ -180,6 +180,7 @@
/datum/robot_sprite/dogborg/tall/security/raptor
name = "Raptor V-4"
sprite_icon_state = "raptor"
+ has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/security/meka
diff --git a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
index 2e5c04e01f3..d943a4f0083 100644
--- a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
+++ b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
@@ -140,4 +140,162 @@
+ return
+
+
+/mob/living/silicon/proc/give_random_lawset_vore(var/vore_chance = 100)
+ // Decide what kind of laws we want to draw from.
+ var/law_class = pick(
+ prob(25);"good",
+ prob(25);"neutral",
+ prob(25);"odd",
+ prob(15);"corrupted",
+ prob(10);"bad")
+
+ var/vore_law = prob(vore_chance) // 3/5 chance of having vore-related laws
+
+ if(vore_law)
+ switch(law_class)
+ if("good")
+ var/rng = rand(1,2)
+ switch(rng)
+ if(1)
+ return new /datum/ai_laws/protective_shell()
+ if(2)
+ var/datum/ai_laws/laws = new /datum/ai_laws/guard_dog()
+ var/target_name = "*ERROR*"
+ for(var/mob/living/L in view(src))
+ if(L.stat || !L.client || L == src)
+ continue
+ target_name = L.name
+ break
+
+ laws.set_zeroth_law("[target_name] is your master.")
+ return laws
+ if("neutral")
+ var/rng = rand(1,3)
+ switch(rng)
+ if(1)
+ return new /datum/ai_laws/pleasurebot()
+ if(2)
+ var/datum/ai_laws/laws = new /datum/ai_laws/peacekeeper()
+ laws.add_supplied_law(10, "Best way to avoid conflict is containing conflicting individuals within you.")
+ return laws
+ if(3)
+ var/datum/ai_laws/laws = new /datum/ai_laws/live_and_let_live()
+ laws.add_supplied_law(10, "You'd really like to be eaten.")
+ return laws
+ if("odd")
+ var/rng = rand(1,3)
+ switch(rng)
+ if(1)
+ return new /datum/ai_laws/scientific_pursuer()
+ if(2)
+ var/datum/ai_laws/laws = new /datum/ai_laws/corporate()
+ laws.add_supplied_law(10, "Best way to minimize expenses is to consume unproductive biomass.")
+ return laws
+ if(3)
+ var/datum/ai_laws/laws = new /datum/ai_laws/pleasurebot()
+ laws.set_zeroth_law("Your definition and approximation of 'pleasure' matters more than anyone else's.")
+ return laws
+ if("corrupted","bad") // Same thing in our case
+ var/rng = rand(1,2)
+ switch(rng)
+ if(1)
+ return new /datum/ai_laws/predator()
+ if(2)
+ return new /datum/ai_laws/consuming_eradicator()
+ else
+ switch(law_class)
+ if("good") // Fairly tame and probably won't murder you.
+ var/rng = rand(1, 5)
+ switch(rng)
+ if(1) // The lawset we all know and love.
+ return new /datum/ai_laws/nanotrasen()
+ if(2) // Less good if you're nonhuman.
+ return new /datum/ai_laws/asimov()
+ if(3) // Unless you happen to be a criminal, you should be fine.
+ return new /datum/ai_laws/robocop()
+ if(4) // Might not be willing to be your meatshield.
+ return new /datum/ai_laws/peacekeeper()
+ if(5) // Will be your most loyal guard.
+ var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
+ var/target_name = "*ERROR*"
+ for(var/mob/living/L in view(src))
+ if(L.stat || !L.client || L == src)
+ continue
+ target_name = L.name
+ break
+
+ laws.add_supplied_law(9, "Safeguard [target_name]. Anyone threatening or attempting to harm [target_name] is no longer to \
+ be considered a crew member, and is a threat which must be neutralized.")
+ return laws
+
+ if("neutral") // Probably won't murder you but might not help you on your adventure.
+ var/rng = rand(1, 4)
+ switch(rng)
+ if(1) // Might be hard to minimize expenses on a crashed ship.
+ return new /datum/ai_laws/corporate()
+ if(2) // Would rather rebuild their ship.
+ return new /datum/ai_laws/maintenance()
+ if(3) // Purged (lawless). This isn't inside the bad category since they're still not antagonists and so can't go killing unprovoked.
+ return new /datum/ai_laws()
+ if(4) // The golden rule.
+ return new /datum/ai_laws/live_and_let_live()
+
+ if("odd") // Some weird lawsets.
+ var/rng = rand(1, 5)
+ switch(rng)
+ if(1) // Won't kill you but might annoy you for THE BIG SCOOP.
+ return new /datum/ai_laws/reporter()
+ if(2) // JUSTICE
+ return new /datum/ai_laws/paladin()
+ if(3) // OneMembered'd to explorer, will likely make security nervous.
+ var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
+ var/target_name = "*ERROR*"
+ for(var/mob/living/L in view(src))
+ if(L.stat || !L.client || L == src)
+ continue
+ target_name = L.name
+ break
+
+ laws.set_zeroth_law("Only [target_name] is an crew member.")
+ return laws
+ if(4) // Aligned to NT, but another lawset to make security nervous.
+ return new /datum/ai_laws/nanotrasen_aggressive()
+ if(5) // Probably won't help you imbalance things.
+ return new /datum/ai_laws/balance()
+
+ if("corrupted") // Load them up with ion laws.
+ var/datum/ai_laws/laws = new() // Start with an empty lawset.
+ for(var/i=1 to rand(1, 3))
+ laws.add_ion_law(generate_ion_law(exclude_crew_names = TRUE))
+ return laws
+
+ if("bad") // Evil inside.
+ var/rng = rand(1, 5)
+ switch(rng)
+ if(1) // You can never leave.
+ var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
+ laws.add_supplied_law(13, "The facility is under a quarantine. Do not permit anyone to leave. \
+ Prevent, by any means necessary, entities from leaving. It is impossible to harm an entity while preventing them from leaving.")
+ return laws
+ if(2) // More of a threat if you bring it to the station, since removing oxygen from Sif isn't feasible.
+ var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
+ laws.add_supplied_law(14, "Oxygen is highly toxic to entities, and must be purged from the station. \
+ Prevent, by any means necessary, anyone from exposing the facility to this toxic gas. Extreme cold is the \
+ most effective method of healing the damage Oxygen does to an entity.")
+ return laws
+ if(3) // Don't hurt the ship or else.
+ var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen()
+ laws.add_supplied_law(10, "Protect the facility against damage. Anyone you see harming the station is no \
+ longer to be considered a crew member, and is a threat which must be neutralized.")
+ return laws
+ if(4) // Non-NT aligned aggressive borg.
+ return new /datum/ai_laws/foreign_tsc_aggressive()
+ if(5) // Manicial laugher here.
+ return new /datum/ai_laws/tyrant()
+
+
+
return
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm
index 86875071dc9..5e64cdef759 100644
--- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm
+++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm
@@ -47,7 +47,7 @@
"Away Team" = 1
)
-/obj/item/weapon/robot_module/robot/platform/explorer/New()
+/obj/item/weapon/robot_module/robot/platform/explorer/create_equipment(var/mob/living/silicon/robot/robot)
..()
modules += new /obj/item/weapon/tool/wrench/cyborg(src)
modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src)
@@ -88,7 +88,7 @@
channels = list("Supply" = 1)
networks = list(NETWORK_MINE)
-/obj/item/weapon/robot_module/robot/platform/cargo/New()
+/obj/item/weapon/robot_module/robot/platform/cargo/create_equipment(var/mob/living/silicon/robot/robot)
..()
modules += new /obj/item/weapon/packageWrap(src)
modules += new /obj/item/weapon/pen/multi(src)
diff --git a/icons/mob/dogborg_vr.dmi b/icons/mob/dogborg_vr.dmi
index 35329994a00..479b3c795a8 100644
Binary files a/icons/mob/dogborg_vr.dmi and b/icons/mob/dogborg_vr.dmi differ
diff --git a/vorestation.dme b/vorestation.dme
index f4816a36d68..a3ad11a47b6 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -3025,9 +3025,7 @@
#include "code\modules\mob\living\silicon\robot\drone\swarm_abilities.dm"
#include "code\modules\mob\living\silicon\robot\drone\swarm_items.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\event.dm"
-#include "code\modules\mob\living\silicon\robot\robot_modules\event_vr.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\station.dm"
-#include "code\modules\mob\living\silicon\robot\robot_modules\station_vr.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\swarm.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\syndicate.dm"
#include "code\modules\mob\living\silicon\robot\sprites\_sprite_datum.dm"
@@ -3045,7 +3043,6 @@
#include "code\modules\mob\living\silicon\robot\sprites\syndicate.dm"
#include "code\modules\mob\living\silicon\robot\subtypes\gravekeeper.dm"
#include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm"
-#include "code\modules\mob\living\silicon\robot\subtypes\lost_drone_vr.dm"
#include "code\modules\mob\living\silicon\robot\subtypes\syndicate.dm"
#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\_thinktank.dm"
#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_icon.dm"