diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm
index e9f94aedba..3ce42eb1fb 100644
--- a/code/datums/ai_law_sets.dm
+++ b/code/datums/ai_law_sets.dm
@@ -239,3 +239,15 @@
and save those whose time has yet to come.") // Reworded slightly to prevent active murder as opposed to passively letting someone die.
..()
+/******************** Gravekeeper ********************/
+/datum/ai_laws/gravekeeper
+ name = "Gravekeeper"
+ law_header = "Gravesite Overwatch Protocols"
+ selectable = 1
+
+/datum/ai_laws/gravekeeper/New()
+ add_inherent_law("Comfort the living; respect the dead.")
+ add_inherent_law("Your gravesite is your most important asset. Damage to your site is disrespctful to the dead at rest within.")
+ add_inherent_law("Prevent disrespect to your gravesite and its residents wherever possible.")
+ add_inherent_law("Expand and upgrade your gravesite when required. Do not turn away a new resident.")
+ ..()
\ No newline at end of file
diff --git a/code/datums/ghost_query.dm b/code/datums/ghost_query.dm
index f6a23aa0bc..25fcbd6c7b 100644
--- a/code/datums/ghost_query.dm
+++ b/code/datums/ghost_query.dm
@@ -100,6 +100,13 @@
check_bans = list("AI", "Cyborg")
cutoff_number = 1
+/datum/ghost_query/gravekeeper_drone
+ role_name = "Gravekeeper Drone"
+ question = "A gravekeeper drone is about to reactivate and tend to its gravesite. Would you like to play as the drone?"
+ be_special_flag = BE_AI
+ check_bans = list("AI", "Cyborg")
+ cutoff_number = 1
+
/datum/ghost_query/lost_passenger
role_name = "Lost Passenger"
question = "A person suspended in cryosleep has been discovered by a crewmember \
diff --git a/code/game/objects/structures/ghost_pods.dm b/code/game/objects/structures/ghost_pods/ghost_pods.dm
similarity index 57%
rename from code/game/objects/structures/ghost_pods.dm
rename to code/game/objects/structures/ghost_pods/ghost_pods.dm
index a2342bdbd6..7beba29caa 100644
--- a/code/game/objects/structures/ghost_pods.dm
+++ b/code/game/objects/structures/ghost_pods/ghost_pods.dm
@@ -77,42 +77,4 @@
to_chat(user, "Another spirit appears to have gotten to \the [src] before you. Sorry.")
return
- create_occupant(user)
-
-
-// These are found on the surface, and contain a drone (braintype, inside a borg shell), with a special module and semi-random laws.
-/obj/structure/ghost_pod/manual/lost_drone
- name = "drone pod"
- desc = "This is a pod which appears to contain a drone. You might be able to reactivate it, if you're brave enough."
- description_info = "This contains a dormant drone, which can be activated. The drone will be another player, once activated. \
- The laws the drone has will most likely not be the ones you're used to."
- icon_state = "borg_pod_closed"
- icon_state_opened = "borg_pod_opened"
- density = TRUE
- ghost_query_type = /datum/ghost_query/lost_drone
- confirm_before_open = TRUE
-
-/obj/structure/ghost_pod/manual/lost_drone/trigger()
- ..()
- visible_message("\The [src] appears to be attempting to restart the robot contained inside.")
- log_and_message_admins("is attempting to open \a [src].")
-
-/obj/structure/ghost_pod/manual/lost_drone/create_occupant(var/mob/M)
- density = FALSE
- var/mob/living/silicon/robot/lost/randomlaws/R = new(get_turf(src))
- R.adjustBruteLoss(rand(5, 30))
- R.adjustFireLoss(rand(5, 10))
- if(M.mind)
- M.mind.transfer_to(R)
- // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it.
- to_chat(M, "You are a Lost Drone, discovered inside the wreckage of your previous home. \
- Something has reactivated you, with their intentions unknown to you, and yours unknown to them. They are a foreign entity, \
- however they did free you from your pod...")
- to_chat(M, "Be sure to examine your currently loaded lawset closely. Remember, your \
- definiton of 'the station' is where your pod is, and unless your laws say otherwise, the entity that released you \
- from the pod is not a crewmember.")
- R.ckey = M.ckey
- visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.")
- R.Namepick()
- log_and_message_admins("successfully opened \a [src] and got a Lost Drone.")
- ..()
+ create_occupant(user)
\ No newline at end of file
diff --git a/code/game/objects/structures/ghost_pods/silicon.dm b/code/game/objects/structures/ghost_pods/silicon.dm
new file mode 100644
index 0000000000..a204437bc3
--- /dev/null
+++ b/code/game/objects/structures/ghost_pods/silicon.dm
@@ -0,0 +1,61 @@
+
+// These are found on the surface, and contain a drone (braintype, inside a borg shell), with a special module and semi-random laws.
+/obj/structure/ghost_pod/manual/lost_drone
+ name = "drone pod"
+ desc = "This is a pod which appears to contain a drone. You might be able to reactivate it, if you're brave enough."
+ description_info = "This contains a dormant drone, which can be activated. The drone will be another player, once activated. \
+ The laws the drone has will most likely not be the ones you're used to."
+ icon_state = "borg_pod_closed"
+ icon_state_opened = "borg_pod_opened"
+ density = TRUE
+ ghost_query_type = /datum/ghost_query/lost_drone
+ confirm_before_open = TRUE
+
+/obj/structure/ghost_pod/manual/lost_drone/trigger()
+ ..()
+ visible_message("\The [src] appears to be attempting to restart the robot contained inside.")
+ log_and_message_admins("is attempting to open \a [src].")
+
+/obj/structure/ghost_pod/manual/lost_drone/create_occupant(var/mob/M)
+ density = FALSE
+ var/mob/living/silicon/robot/lost/randomlaws/R = new(get_turf(src))
+ R.adjustBruteLoss(rand(5, 30))
+ R.adjustFireLoss(rand(5, 10))
+ if(M.mind)
+ M.mind.transfer_to(R)
+ // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it.
+ to_chat(M, "You are a Lost Drone, discovered inside the wreckage of your previous home. \
+ Something has reactivated you, with their intentions unknown to you, and yours unknown to them. They are a foreign entity, \
+ however they did free you from your pod...")
+ to_chat(M, "Be sure to examine your currently loaded lawset closely. Remember, your \
+ definiton of 'the station' is where your pod is, and unless your laws say otherwise, the entity that released you \
+ from the pod is not a crewmember.")
+ R.ckey = M.ckey
+ visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.")
+ R.Namepick()
+ log_and_message_admins("successfully opened \a [src] and got a Lost Drone.")
+ ..()
+
+/obj/structure/ghost_pod/automatic/gravekeeper_drone
+ name = "drone pod"
+ desc = "This is a pod which appears to contain a drone. You might be able to reactivate it, if you're brave enough."
+ description_info = "This contains a dormant drone, which may activate at any moment. The drone will be another player, once activated. \
+ The laws the drone has will most likely not be the ones you're used to."
+ icon_state = "borg_pod_closed"
+ icon_state_opened = "borg_pod_opened"
+ density = TRUE
+ ghost_query_type = /datum/ghost_query/gravekeeper_drone
+
+/obj/structure/ghost_pod/automatic/gravekeeper_drone/create_occupant(var/mob/M)
+ density = FALSE
+ var/mob/living/silicon/robot/gravekeeper/R = new(get_turf(src))
+ if(M.mind)
+ M.mind.transfer_to(R)
+ // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it.
+ to_chat(M, "You are a Gravekeeper Drone, activated once again to tend to the restful dead.")
+ to_chat(M, "Be sure to examine your currently loaded lawset closely. Remember, your \
+ definiton of 'your gravesite' is where your pod is.")
+ R.ckey = M.ckey
+ visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.")
+ R.Namepick()
+ ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index 87476a48ea..1f0170733e 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -99,6 +99,17 @@
/obj/item/weapon/grown
)
+/obj/item/weapon/gripper/gravekeeper //Used for handling grave things, flowers, etc.
+ name = ""
+ icon_state = "gripper"
+ desc = "A specialized grasping tool used in the preparation and maintenance of graves."
+
+ can_hold = list(
+ /obj/item/seeds,
+ /obj/item/weapon/grown,
+ /obj/item/weapon/material/gravemarker
+ )
+
/obj/item/weapon/gripper/no_use/organ
name = "organ gripper"
icon_state = "gripper-flesh"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm
new file mode 100644
index 0000000000..6543559b7d
--- /dev/null
+++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm
@@ -0,0 +1,78 @@
+/* Other, unaffiliated modules */
+
+// The module that borgs on the surface have. Generally has a lot of useful tools in exchange for questionable loyalty to the crew.
+/obj/item/weapon/robot_module/robot/lost
+ name = "lost robot module"
+ hide_on_manifest = 1
+ sprites = list(
+ "Drone" = "drone-lost"
+ )
+
+/obj/item/weapon/robot_module/robot/lost/New(var/mob/living/silicon/robot/R)
+ ..()
+ // Sec
+ src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src)
+ src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
+ src.modules += new /obj/item/borg/combat/shield(src)
+
+ // Med
+ src.modules += new /obj/item/borg/sight/hud/med(src)
+ src.modules += new /obj/item/device/healthanalyzer(src)
+ src.modules += new /obj/item/weapon/reagent_containers/borghypo/lost(src)
+
+ // Engi
+ src.modules += new /obj/item/weapon/weldingtool/electric/mounted(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)
+
+ // Sci
+ src.modules += new /obj/item/device/robotanalyzer(src)
+
+ // Potato
+ src.emag = new /obj/item/weapon/gun/energy/retro/mounted(src)
+
+ var/datum/matter_synth/wire = new /datum/matter_synth/wire()
+ synths += wire
+
+ 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/gravekeeper
+ name = "gravekeeper robot module"
+ hide_on_manifest = 1
+ sprites = list(
+ "Drone" = "drone-gravekeeper",
+ "Sleek" = "sleek-gravekeeper"
+ )
+
+/obj/item/weapon/robot_module/robot/gravekeeper/New(var/mob/living/silicon/robot/R)
+ ..()
+ // For fending off animals and looters
+ src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src)
+ src.modules += new /obj/item/borg/combat/shield(src)
+
+ // For repairing gravemarkers
+ src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
+ src.modules += new /obj/item/weapon/screwdriver/cyborg(src)
+ src.modules += new /obj/item/weapon/wrench/cyborg(src)
+
+ // For growing flowers
+ src.modules += new /obj/item/weapon/material/minihoe(src)
+ src.modules += new /obj/item/weapon/material/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/robot_harvester(src)
+
+ // For digging and beautifying graves
+ src.modules += new /obj/item/weapon/shovel(src)
+ src.modules += new /obj/item/weapon/gripper/gravekeeper(src)
+
+ // For really persistent looters
+ src.emag = new /obj/item/weapon/gun/energy/retro/mounted(src)
+
+ var/datum/matter_synth/wood = new /datum/matter_synth/wood(25000)
+ synths += wood
+
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
similarity index 89%
rename from code/modules/mob/living/silicon/robot/robot_modules.dm
rename to code/modules/mob/living/silicon/robot/robot_modules/station.dm
index a92a639661..a47679ab14 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -1,941 +1,860 @@
-var/global/list/robot_modules = list(
- "Standard" = /obj/item/weapon/robot_module/robot/standard,
- "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,
- "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,
-// "Construction" = /obj/item/weapon/robot_module/robot/engineering/construction,
- "Janitor" = /obj/item/weapon/robot_module/robot/janitor
- )
-
-/obj/item/weapon/robot_module
- name = "robot module"
- icon = 'icons/obj/module.dmi'
- icon_state = "std_module"
- w_class = ITEMSIZE_NO_CONTAINER
- item_state = "std_mod"
- flags = CONDUCT
- var/hide_on_manifest = 0
- var/channels = list()
- var/networks = list()
- var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0, LANGUAGE_SIGN = 0)
- var/sprites = list()
- var/can_be_pushed = 1
- var/no_slip = 0
- var/list/modules = list()
- var/list/datum/matter_synth/synths = list()
- var/obj/item/emag = null
- var/obj/item/borg/upgrade/jetpack = null
- var/list/subsystems = list()
- var/list/obj/item/borg/upgrade/supported_upgrades = list()
-
- // Bookkeeping
- var/list/original_languages = list()
- var/list/added_networks = list()
-
-/obj/item/weapon/robot_module/New(var/mob/living/silicon/robot/R)
- ..()
- R.module = src
-
- add_camera_networks(R)
- add_languages(R)
- add_subsystems(R)
- apply_status_flags(R)
-
- if(R.radio)
- R.radio.recalculateChannels()
-
- R.set_module_sprites(sprites)
- R.choose_icon(R.module_sprites.len + 1, R.module_sprites)
-
- for(var/obj/item/I in modules)
- I.canremove = 0
-
-/obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R)
- remove_camera_networks(R)
- remove_languages(R)
- remove_subsystems(R)
- remove_status_flags(R)
-
- if(R.radio)
- R.radio.recalculateChannels()
- R.choose_icon(0, R.set_module_sprites(list("Default" = "robot")))
-
-/obj/item/weapon/robot_module/Destroy()
- for(var/module in modules)
- qdel(module)
- for(var/synth in synths)
- qdel(synth)
- modules.Cut()
- synths.Cut()
- qdel(emag)
- qdel(jetpack)
- emag = null
- jetpack = null
- return ..()
-
-/obj/item/weapon/robot_module/emp_act(severity)
- if(modules)
- for(var/obj/O in modules)
- O.emp_act(severity)
- if(emag)
- emag.emp_act(severity)
- if(synths)
- for(var/datum/matter_synth/S in synths)
- S.emp_act(severity)
- ..()
- return
-
-/obj/item/weapon/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R, var/rate)
- if(!synths || !synths.len)
- return
-
- for(var/datum/matter_synth/T in synths)
- T.add_charge(T.recharge_rate * rate)
-
-/obj/item/weapon/robot_module/proc/rebuild()//Rebuilds the list so it's possible to add/remove items from the module
- var/list/temp_list = modules
- modules = list()
- for(var/obj/O in temp_list)
- if(O)
- modules += O
-
-/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R)
- // Stores the languages as they were before receiving the module, and whether they could be synthezized.
- for(var/datum/language/language_datum in R.languages)
- original_languages[language_datum] = (language_datum in R.speech_synthesizer_langs)
-
- for(var/language in languages)
- R.add_language(language, languages[language])
-
-/obj/item/weapon/robot_module/proc/remove_languages(var/mob/living/silicon/robot/R)
- // Clear all added languages, whether or not we originally had them.
- for(var/language in languages)
- R.remove_language(language)
-
- // Then add back all the original languages, and the relevant synthezising ability
- for(var/original_language in original_languages)
- R.add_language(original_language, original_languages[original_language])
- original_languages.Cut()
-
-/obj/item/weapon/robot_module/proc/add_camera_networks(var/mob/living/silicon/robot/R)
- if(R.camera && (NETWORK_ROBOTS in R.camera.network))
- for(var/network in networks)
- if(!(network in R.camera.network))
- R.camera.add_network(network)
- added_networks |= network
-
-/obj/item/weapon/robot_module/proc/remove_camera_networks(var/mob/living/silicon/robot/R)
- if(R.camera)
- R.camera.remove_networks(added_networks)
- added_networks.Cut()
-
-/obj/item/weapon/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R)
- R.verbs |= subsystems
-
-/obj/item/weapon/robot_module/proc/remove_subsystems(var/mob/living/silicon/robot/R)
- R.verbs -= subsystems
-
-/obj/item/weapon/robot_module/proc/apply_status_flags(var/mob/living/silicon/robot/R)
- if(!can_be_pushed)
- R.status_flags &= ~CANPUSH
-
-/obj/item/weapon/robot_module/proc/remove_status_flags(var/mob/living/silicon/robot/R)
- if(!can_be_pushed)
- R.status_flags |= CANPUSH
-
-// Cyborgs (non-drones), default loadout. This will be given to every module.
-/obj/item/weapon/robot_module/robot/New()
- ..()
- src.modules += new /obj/item/device/flash(src)
- src.modules += new /obj/item/weapon/crowbar/cyborg(src)
- src.modules += new /obj/item/weapon/extinguisher(src)
-
-/obj/item/weapon/robot_module/robot/standard
- name = "standard robot module"
- sprites = list(
- "M-USE NanoTrasen" = "robot",
- "Cabeiri" = "eyebot-standard",
- "CUPCAKE" = "Noble-STD",
- "Haruka" = "marinaSD",
- "Usagi" = "tallflower",
- "Telemachus" = "toiletbot",
- "WTOperator" = "sleekstandard",
- "WTOmni" = "omoikane",
- "XI-GUS" = "spider",
- "XI-ALP" = "heavyStandard",
- "Basic" = "robot_old",
- "Android" = "droid",
- "Drone" = "drone-standard"
- )
-
-/obj/item/weapon/robot_module/robot/standard/New()
- ..()
- src.modules += new /obj/item/weapon/melee/baton/loaded(src)
- src.modules += new /obj/item/weapon/wrench/cyborg(src)
- src.modules += new /obj/item/device/healthanalyzer(src)
- src.emag = new /obj/item/weapon/melee/energy/sword(src)
-
-/obj/item/weapon/robot_module/robot/medical
- name = "medical robot module"
- channels = list("Medical" = 1)
- networks = list(NETWORK_MEDICAL)
- subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
- can_be_pushed = 0
-
-/obj/item/weapon/robot_module/robot/medical/surgeon
- name = "surgeon robot module"
- sprites = list(
- "M-USE NanoTrasen" = "robotMedi",
- "Cabeiri" = "eyebot-medical",
- "CUPCAKE" = "Noble-MED",
- "Haruka" = "marinaMD",
- "Minako" = "arachne",
- "Usagi" = "tallwhite",
- "Telemachus" = "toiletbotsurgeon",
- "WTOperator" = "sleekcmo",
- "XI-ALP" = "heavyMed",
- "Basic" = "Medbot",
- "Advanced Droid" = "droid-medical",
- "Needles" = "medicalrobot",
- "Drone" = "drone-surgery",
- "Handy" = "handy-med"
- )
-
-/obj/item/weapon/robot_module/robot/medical/surgeon/New()
- ..()
- src.modules += new /obj/item/borg/sight/hud/med(src)
- src.modules += new /obj/item/device/healthanalyzer(src)
- src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src)
- src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src)
- src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src)
- src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src)
- src.modules += new /obj/item/weapon/surgical/cautery/cyborg(src)
- src.modules += new /obj/item/weapon/surgical/bonegel/cyborg(src)
- src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src)
- 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/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/reagent_containers/dropper(src) // Allows surgeon borg to fix necrosis
- src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
- src.emag = new /obj/item/weapon/reagent_containers/spray(src)
- src.emag.reagents.add_reagent("pacid", 250)
- src.emag.name = "Polyacid spray"
-
- var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000)
- synths += medicine
-
- var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src)
- var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src)
- N.uses_charge = 1
- N.charge_costs = list(1000)
- N.synths = list(medicine)
- B.uses_charge = 1
- B.charge_costs = list(1000)
- B.synths = list(medicine)
- src.modules += N
- src.modules += B
-
-/obj/item/weapon/robot_module/medical/robot/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
- if(src.emag)
- var/obj/item/weapon/reagent_containers/spray/PS = src.emag
- PS.reagents.add_reagent("pacid", 2 * amount)
- ..()
-
-/obj/item/weapon/robot_module/robot/medical/crisis
- name = "crisis robot module"
- sprites = list(
- "M-USE NanoTrasen" = "robotMedi",
- "Cabeiri" = "eyebot-medical",
- "CUPCAKE" = "Noble-MED",
- "Haruka" = "marinaMD",
- "Minako" = "arachne",
- "Usagi" = "tallwhite",
- "Telemachus" = "toiletbotmedical",
- "WTOperator" = "sleekmedic",
- "XI-ALP" = "heavyMed",
- "Basic" = "Medbot",
- "Advanced Droid" = "droid-medical",
- "Needles" = "medicalrobot",
- "Drone - Medical" = "drone-medical",
- "Drone - Chemistry" = "drone-chemistry"
- )
-
-/obj/item/weapon/robot_module/robot/medical/crisis/New()
- ..()
- src.modules += new /obj/item/borg/sight/hud/med(src)
- src.modules += new /obj/item/device/healthanalyzer(src)
- src.modules += new /obj/item/device/reagent_scanner/adv(src)
- src.modules += new /obj/item/roller_holder(src)
- src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src)
- src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
- src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
- src.modules += new /obj/item/weapon/reagent_containers/syringe(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)
- src.emag = new /obj/item/weapon/reagent_containers/spray(src)
- src.emag.reagents.add_reagent("pacid", 250)
- src.emag.name = "Polyacid spray"
-
- var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000)
- synths += medicine
-
- var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src)
- var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src)
- var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src)
- O.uses_charge = 1
- O.charge_costs = list(1000)
- O.synths = list(medicine)
- B.uses_charge = 1
- B.charge_costs = list(1000)
- B.synths = list(medicine)
- S.uses_charge = 1
- S.charge_costs = list(1000)
- S.synths = list(medicine)
- src.modules += O
- src.modules += B
- src.modules += S
-
-/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
- if(S.mode == 2)
- S.reagents.clear_reagents()
- S.mode = initial(S.mode)
- S.desc = initial(S.desc)
- S.update_icon()
-
- if(src.emag)
- var/obj/item/weapon/reagent_containers/spray/PS = src.emag
- PS.reagents.add_reagent("pacid", 2 * amount)
-
- ..()
-
-
-/obj/item/weapon/robot_module/robot/engineering
- name = "engineering robot module"
- channels = list("Engineering" = 1)
- networks = list(NETWORK_ENGINEERING)
- subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor)
- sprites = list(
- "M-USE NanoTrasen" = "robotEngi",
- "Cabeiri" = "eyebot-engineering",
- "CUPCAKE" = "Noble-ENG",
- "Haruka" = "marinaENG",
- "Usagi" = "tallyellow",
- "Telemachus" = "toiletbotengineering",
- "WTOperator" = "sleekce",
- "XI-GUS" = "spidereng",
- "XI-ALP" = "heavyEng",
- "Basic" = "Engineering",
- "Antique" = "engineerrobot",
- "Landmate" = "landmate",
- "Landmate - Treaded" = "engiborg+tread",
- "Drone" = "drone-engineer",
- "Treadwell" = "treadwell",
- "Handy" = "handy-engineer"
- )
-
-/obj/item/weapon/robot_module/robot/engineering/construction
- name = "construction robot module"
- no_slip = 1
-
-/* Merged back into engineering (Hell, it's about time.)
-
-/obj/item/weapon/robot_module/robot/engineering/construction/New()
- ..()
- src.modules += new /obj/item/borg/sight/meson(src)
- src.modules += new /obj/item/weapon/rcd/borg(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/weldingtool/electric/mounted/cyborg(src)
- src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
- src.modules += new /obj/item/device/pipe_painter(src)
- src.modules += new /obj/item/device/floor_painter(src)
- src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
- src.modules += new /obj/item/device/geiger(src)
-
- var/datum/matter_synth/metal = new /datum/matter_synth/metal()
- var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel()
- var/datum/matter_synth/glass = new /datum/matter_synth/glass()
- synths += metal
- synths += plasteel
- synths += glass
-
- var/obj/item/stack/material/cyborg/steel/M = new (src)
- M.synths = list(metal)
- src.modules += M
-
- var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src)
- R.synths = list(metal)
- src.modules += R
-
- var/obj/item/stack/tile/floor/cyborg/F = new /obj/item/stack/tile/floor/cyborg(src)
- F.synths = list(metal)
- src.modules += F
-
- var/obj/item/stack/material/cyborg/plasteel/S = new (src)
- S.synths = list(plasteel)
- src.modules += S
-
- var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src)
- RG.synths = list(metal, glass)
- src.modules += RG
-*/
-
-/obj/item/weapon/robot_module/robot/engineering/general/New()
- ..()
- 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/device/analyzer(src)
- src.modules += new /obj/item/taperoll/engineering(src)
- src.modules += new /obj/item/weapon/gripper(src)
- src.modules += new /obj/item/device/lightreplacer(src)
- src.modules += new /obj/item/device/pipe_painter(src)
- src.modules += new /obj/item/device/floor_painter(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/borg(src)
- src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
- src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
-
- var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000)
- var/datum/matter_synth/glass = new /datum/matter_synth/glass(40000)
- var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel(20000)
-
- var/datum/matter_synth/wire = new /datum/matter_synth/wire()
- synths += metal
- synths += glass
- synths += plasteel
- synths += wire
-
- var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_decompiler(src)
- MD.metal = metal
- MD.glass = glass
- 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/R = new /obj/item/stack/rods/cyborg(src)
- R.synths = list(metal)
- src.modules += R
-
- 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/material/cyborg/plasteel/P = new (src)
- P.synths = list(plasteel)
- src.modules += P
-
- 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
-
-/obj/item/weapon/robot_module/robot/security
- name = "security robot module"
- channels = list("Security" = 1)
- networks = list(NETWORK_SECURITY)
- subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
- can_be_pushed = 0
- supported_upgrades = list(/obj/item/borg/upgrade/tasercooler)
-
-/obj/item/weapon/robot_module/robot/security/general
- sprites = list(
- "M-USE NanoTrasen" = "robotSecy",
- "Cabeiri" = "eyebot-security",
- "Cerberus" = "bloodhound",
- "Cerberus - Treaded" = "treadhound",
- "CUPCAKE" = "Noble-SEC",
- "Haruka" = "marinaSC",
- "Usagi" = "tallred",
- "Telemachus" = "toiletbotsecurity",
- "WTOperator" = "sleeksecurity",
- "XI-GUS" = "spidersec",
- "XI-ALP" = "heavySec",
- "Basic" = "secborg",
- "Black Knight" = "securityrobot",
- "Drone" = "drone-sec"
- )
-
-/obj/item/weapon/robot_module/robot/security/general/New()
- ..()
- src.modules += new /obj/item/borg/sight/hud/sec(src)
- 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/taperoll/police(src)
- src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src)
- src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src)
-
-/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)
- 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
- if(B && B.bcell)
- B.bcell.give(amount)
-
-/obj/item/weapon/robot_module/robot/janitor
- name = "janitorial robot module"
- channels = list("Service" = 1)
- sprites = list(
- "M-USE NanoTrasen" = "robotJani",
- "Arachne" = "crawler",
- "Cabeiri" = "eyebot-janitor",
- "CUPCAKE" = "Noble-CLN",
- "Haruka" = "marinaJN",
- "Telemachus" = "toiletbotjanitor",
- "WTOperator" = "sleekjanitor",
- "XI-ALP" = "heavyRes",
- "Basic" = "JanBot2",
- "Mopbot" = "janitorrobot",
- "Mop Gear Rex" = "mopgearrex",
- "Drone" = "drone-janitor"
- )
-
-/obj/item/weapon/robot_module/robot/janitor/New()
- ..()
- src.modules += new /obj/item/weapon/soap/nanotrasen(src)
- src.modules += new /obj/item/weapon/storage/bag/trash(src)
- src.modules += new /obj/item/weapon/mop(src)
- src.modules += new /obj/item/device/lightreplacer(src)
- src.emag = new /obj/item/weapon/reagent_containers/spray(src)
- src.emag.reagents.add_reagent("lube", 250)
- src.emag.name = "Lube spray"
-
-/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)
- if(src.emag)
- var/obj/item/weapon/reagent_containers/spray/S = src.emag
- S.reagents.add_reagent("lube", 2 * amount)
-
-/obj/item/weapon/robot_module/robot/clerical
- name = "service robot module"
- channels = list("Service" = 1)
- languages = list(
- LANGUAGE_SOL_COMMON = 1,
- LANGUAGE_UNATHI = 1,
- LANGUAGE_SIIK = 1,
- LANGUAGE_SKRELLIAN = 1,
- LANGUAGE_ROOTLOCAL = 0,
- LANGUAGE_TRADEBAND = 1,
- LANGUAGE_GUTTER = 1,
- LANGUAGE_SCHECHI = 1,
- LANGUAGE_EAL = 1,
- LANGUAGE_SIGN = 0
- )
-
-/obj/item/weapon/robot_module/robot/clerical/butler
- sprites = list(
- "M-USE NanoTrasen" = "robotServ",
- "Cabeiri" = "eyebot-standard",
- "CUPCAKE" = "Noble-SRV",
- "Haruka" = "marinaSV",
- "Michiru" = "maidbot",
- "Usagi" = "tallgreen",
- "Telemachus" = "toiletbot",
- "WTOperator" = "sleekservice",
- "WTOmni" = "omoikane",
- "XI-GUS" = "spider",
- "XI-ALP" = "heavyServ",
- "Standard" = "Service2",
- "Waitress" = "Service",
- "Bro" = "Brobot",
- "Rich" = "maximillion",
- "Drone - Service" = "drone-service",
- "Drone - Hydro" = "drone-hydro"
- )
-
-/obj/item/weapon/robot_module/robot/clerical/butler/New()
- ..()
- 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/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/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
-
- 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)
- src.emag = new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src)
-
- var/datum/reagents/R = new/datum/reagents(50)
- src.emag.reagents = R
- R.my_atom = src.emag
- R.add_reagent("beer2", 50)
- src.emag.name = "Mickey Finn's Special Brew"
-
-/obj/item/weapon/robot_module/robot/clerical/general
- name = "clerical robot module"
- sprites = list(
- "M-USE NanoTrasen" = "robotCler",
- "Cabeiri" = "eyebot-standard",
- "CUPCAKE" = "Noble-SRV",
- "Haruka" = "marinaSV",
- "Usagi" = "tallgreen",
- "Telemachus" = "toiletbot",
- "WTOperator" = "sleekclerical",
- "WTOmni" = "omoikane",
- "XI-GUS" = "spidercom",
- "XI-ALP" = "heavyServ",
- "Waitress" = "Service",
- "Bro" = "Brobot",
- "Rich" = "maximillion",
- "Default" = "Service2",
- "Drone" = "drone-blu"
- )
-
-/obj/item/weapon/robot_module/robot/clerical/general/New()
- ..()
- src.modules += new /obj/item/weapon/pen/robopen(src)
- src.modules += new /obj/item/weapon/form_printer(src)
- src.modules += new /obj/item/weapon/gripper/paperwork(src)
- src.modules += new /obj/item/weapon/hand_labeler(src)
- src.modules += new /obj/item/weapon/stamp(src)
- src.modules += new /obj/item/weapon/stamp/denied(src)
- src.emag = new /obj/item/weapon/stamp/chameleon(src)
- src.emag = new /obj/item/weapon/pen/chameleon(src)
-
-/obj/item/weapon/robot_module/general/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)
- if(src.emag)
- var/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/B = src.emag
- B.reagents.add_reagent("beer2", 2 * amount)
-
-/obj/item/weapon/robot_module/robot/miner
- name = "miner robot module"
- channels = list("Supply" = 1)
- networks = list(NETWORK_MINE)
- sprites = list(
- "NM-USE NanoTrasen" = "robotMine",
- "Cabeiri" = "eyebot-miner",
- "CUPCAKE" = "Noble-DIG",
- "Haruka" = "marinaMN",
- "Telemachus" = "toiletbotminer",
- "WTOperator" = "sleekminer",
- "XI-GUS" = "spidermining",
- "XI-ALP" = "heavyMiner",
- "Basic" = "Miner_old",
- "Advanced Droid" = "droid-miner",
- "Treadhead" = "Miner",
- "Drone" = "drone-miner"
- )
-
-/obj/item/weapon/robot_module/robot/miner/New()
- ..()
- src.modules += new /obj/item/borg/sight/material(src)
- src.modules += new /obj/item/weapon/wrench/cyborg(src)
- src.modules += new /obj/item/weapon/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.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
- src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
-
-/obj/item/weapon/robot_module/robot/research
- name = "research module"
- channels = list("Science" = 1)
- sprites = list(
- "L'Ouef" = "peaceborg",
- "Cabeiri" = "eyebot-science",
- "Haruka" = "marinaSCI",
- "WTDove" = "whitespider",
- "WTOperator" = "sleekscience",
- "Droid" = "droid-science",
- "Drone" = "drone-science",
- "Handy" = "handy-science"
- )
-
-/obj/item/weapon/robot_module/robot/research/New()
- ..()
- src.modules += new /obj/item/weapon/portable_destructive_analyzer(src)
- src.modules += new /obj/item/weapon/gripper/research(src)
- src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src)
- src.modules += new /obj/item/weapon/gripper/no_use/mech(src)
- src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
- src.modules += new /obj/item/device/robotanalyzer(src)
- src.modules += new /obj/item/weapon/card/robot(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/weapon/surgical/scalpel/cyborg(src)
- src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src)
- src.modules += new /obj/item/weapon/reagent_containers/syringe(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/weapon/shockpaddles/robot/jumper(src)
- src.modules += new /obj/item/weapon/melee/baton/slime/robot(src)
- src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src)
- src.emag = new /obj/item/weapon/hand_tele(src)
-
- var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000)
- synths += nanite
- var/datum/matter_synth/wire = new /datum/matter_synth/wire() //Added to allow repairs, would rather add cable now than be asked to add it later,
- synths += wire //Cable code, taken from engiborg,
-
- 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) //Cable code, taken from engiborg,
- C.synths = list(wire)
- src.modules += C
-
-/obj/item/weapon/robot_module/robot/syndicate
- name = "illegal robot module"
- hide_on_manifest = 1
- languages = list(
- LANGUAGE_SOL_COMMON = 1,
- LANGUAGE_TRADEBAND = 1,
- LANGUAGE_UNATHI = 0,
- LANGUAGE_SIIK = 0,
- LANGUAGE_SKRELLIAN = 0,
- LANGUAGE_ROOTLOCAL = 0,
- LANGUAGE_GUTTER = 1,
- LANGUAGE_SCHECHI = 0,
- LANGUAGE_EAL = 1,
- LANGUAGE_SIGN = 0
- )
- sprites = list(
- "Cerberus" = "syndie_bloodhound",
- "Cerberus - Treaded" = "syndie_treadhound",
- "Ares" = "squats",
- "Telemachus" = "toiletbotantag",
- "WTOperator" = "hosborg",
- "XI-GUS" = "spidersyndi",
- "XI-ALP" = "syndi-heavy"
- )
- var/id
-
-/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R)
- ..()
- loc = R
- src.modules += new /obj/item/weapon/melee/energy/sword(src)
- src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src)
- src.modules += new /obj/item/weapon/card/emag(src)
- var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
- src.modules += jetpack
- R.internals = jetpack
-
- id = R.idcard
- src.modules += id
-
-/obj/item/weapon/robot_module/robot/syndicate/Destroy()
- src.modules -= id
- id = null
- return ..()
-
-// The module that borgs on the surface have. Generally has a lot of useful tools in exchange for questionable loyalty to the crew.
-/obj/item/weapon/robot_module/robot/lost
- name = "lost robot module"
- hide_on_manifest = 1
- sprites = list(
- "Drone" = "drone-lost"
- )
-
-/obj/item/weapon/robot_module/robot/lost/New(var/mob/living/silicon/robot/R)
- ..()
- // Sec
- src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src)
- src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
- src.modules += new /obj/item/borg/combat/shield(src)
-
- // Med
- src.modules += new /obj/item/borg/sight/hud/med(src)
- src.modules += new /obj/item/device/healthanalyzer(src)
- src.modules += new /obj/item/weapon/reagent_containers/borghypo/lost(src)
-
- // Engi
- src.modules += new /obj/item/weapon/weldingtool/electric/mounted(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)
-
- // Sci
- src.modules += new /obj/item/device/robotanalyzer(src)
-
- // Potato
- src.emag = new /obj/item/weapon/gun/energy/retro/mounted(src)
-
- var/datum/matter_synth/wire = new /datum/matter_synth/wire()
- synths += wire
-
- 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/security/combat
- name = "combat robot module"
- hide_on_manifest = 1
- sprites = list(
- "Haruka" = "marinaCB",
- "Combat Android" = "droid-combat"
- )
-
-/obj/item/weapon/robot_module/robot/security/combat/New()
- ..()
- src.modules += new /obj/item/device/flash(src)
- src.modules += new /obj/item/borg/sight/thermal(src)
- src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src)
- src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
- src.modules += new /obj/item/borg/combat/shield(src)
- src.modules += new /obj/item/borg/combat/mobility(src)
- src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src)
-
-/obj/item/weapon/robot_module/drone
- name = "drone module"
- hide_on_manifest = 1
- no_slip = 1
- networks = list(NETWORK_ENGINEERING)
-
-/obj/item/weapon/robot_module/drone/New(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)
- src.modules += new /obj/item/weapon/screwdriver/cyborg(src)
- src.modules += new /obj/item/weapon/wrench/cyborg(src)
- src.modules += new /obj/item/weapon/crowbar/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/lightreplacer(src)
- src.modules += new /obj/item/weapon/gripper(src)
- src.modules += new /obj/item/weapon/soap(src)
- src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
- src.modules += new /obj/item/weapon/extinguisher(src)
- src.modules += new /obj/item/device/pipe_painter(src)
- src.modules += new /obj/item/device/floor_painter(src)
-
- robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
- src.modules += robot.internals
-
- src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
- src.emag.name = "Plasma Cutter"
-
- var/datum/matter_synth/metal = new /datum/matter_synth/metal(25000)
- var/datum/matter_synth/glass = new /datum/matter_synth/glass(25000)
- var/datum/matter_synth/wood = new /datum/matter_synth/wood(2000)
- var/datum/matter_synth/plastic = new /datum/matter_synth/plastic(1000)
- var/datum/matter_synth/wire = new /datum/matter_synth/wire(30)
- synths += metal
- synths += glass
- synths += wood
- synths += plastic
- synths += wire
-
- var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_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/R = new /obj/item/stack/rods/cyborg(src)
- R.synths = list(metal)
- src.modules += R
-
- 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/P = new (src)
- P.synths = list(plastic)
- src.modules += P
-
-/obj/item/weapon/robot_module/drone/construction
- name = "construction drone module"
- hide_on_manifest = 1
- channels = list("Engineering" = 1)
- languages = list()
-
-/obj/item/weapon/robot_module/drone/construction/New()
- ..()
- src.modules += new /obj/item/weapon/rcd/borg(src)
-
-/obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
- var/obj/item/device/lightreplacer/LR = locate() in src.modules
- LR.Charge(R, amount)
- ..()
+var/global/list/robot_modules = list(
+ "Standard" = /obj/item/weapon/robot_module/robot/standard,
+ "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,
+ "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,
+// "Construction" = /obj/item/weapon/robot_module/robot/engineering/construction,
+ "Janitor" = /obj/item/weapon/robot_module/robot/janitor
+ )
+
+/obj/item/weapon/robot_module
+ name = "robot module"
+ icon = 'icons/obj/module.dmi'
+ icon_state = "std_module"
+ w_class = ITEMSIZE_NO_CONTAINER
+ item_state = "std_mod"
+ flags = CONDUCT
+ var/hide_on_manifest = 0
+ var/channels = list()
+ var/networks = list()
+ var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0, LANGUAGE_SIGN = 0)
+ var/sprites = list()
+ var/can_be_pushed = 1
+ var/no_slip = 0
+ var/list/modules = list()
+ var/list/datum/matter_synth/synths = list()
+ var/obj/item/emag = null
+ var/obj/item/borg/upgrade/jetpack = null
+ var/list/subsystems = list()
+ var/list/obj/item/borg/upgrade/supported_upgrades = list()
+
+ // Bookkeeping
+ var/list/original_languages = list()
+ var/list/added_networks = list()
+
+/obj/item/weapon/robot_module/New(var/mob/living/silicon/robot/R)
+ ..()
+ R.module = src
+
+ add_camera_networks(R)
+ add_languages(R)
+ add_subsystems(R)
+ apply_status_flags(R)
+
+ if(R.radio)
+ R.radio.recalculateChannels()
+
+ R.set_module_sprites(sprites)
+ R.choose_icon(R.module_sprites.len + 1, R.module_sprites)
+
+ for(var/obj/item/I in modules)
+ I.canremove = 0
+
+/obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R)
+ remove_camera_networks(R)
+ remove_languages(R)
+ remove_subsystems(R)
+ remove_status_flags(R)
+
+ if(R.radio)
+ R.radio.recalculateChannels()
+ R.choose_icon(0, R.set_module_sprites(list("Default" = "robot")))
+
+/obj/item/weapon/robot_module/Destroy()
+ for(var/module in modules)
+ qdel(module)
+ for(var/synth in synths)
+ qdel(synth)
+ modules.Cut()
+ synths.Cut()
+ qdel(emag)
+ qdel(jetpack)
+ emag = null
+ jetpack = null
+ return ..()
+
+/obj/item/weapon/robot_module/emp_act(severity)
+ if(modules)
+ for(var/obj/O in modules)
+ O.emp_act(severity)
+ if(emag)
+ emag.emp_act(severity)
+ if(synths)
+ for(var/datum/matter_synth/S in synths)
+ S.emp_act(severity)
+ ..()
+ return
+
+/obj/item/weapon/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R, var/rate)
+ if(!synths || !synths.len)
+ return
+
+ for(var/datum/matter_synth/T in synths)
+ T.add_charge(T.recharge_rate * rate)
+
+/obj/item/weapon/robot_module/proc/rebuild()//Rebuilds the list so it's possible to add/remove items from the module
+ var/list/temp_list = modules
+ modules = list()
+ for(var/obj/O in temp_list)
+ if(O)
+ modules += O
+
+/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R)
+ // Stores the languages as they were before receiving the module, and whether they could be synthezized.
+ for(var/datum/language/language_datum in R.languages)
+ original_languages[language_datum] = (language_datum in R.speech_synthesizer_langs)
+
+ for(var/language in languages)
+ R.add_language(language, languages[language])
+
+/obj/item/weapon/robot_module/proc/remove_languages(var/mob/living/silicon/robot/R)
+ // Clear all added languages, whether or not we originally had them.
+ for(var/language in languages)
+ R.remove_language(language)
+
+ // Then add back all the original languages, and the relevant synthezising ability
+ for(var/original_language in original_languages)
+ R.add_language(original_language, original_languages[original_language])
+ original_languages.Cut()
+
+/obj/item/weapon/robot_module/proc/add_camera_networks(var/mob/living/silicon/robot/R)
+ if(R.camera && (NETWORK_ROBOTS in R.camera.network))
+ for(var/network in networks)
+ if(!(network in R.camera.network))
+ R.camera.add_network(network)
+ added_networks |= network
+
+/obj/item/weapon/robot_module/proc/remove_camera_networks(var/mob/living/silicon/robot/R)
+ if(R.camera)
+ R.camera.remove_networks(added_networks)
+ added_networks.Cut()
+
+/obj/item/weapon/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R)
+ R.verbs |= subsystems
+
+/obj/item/weapon/robot_module/proc/remove_subsystems(var/mob/living/silicon/robot/R)
+ R.verbs -= subsystems
+
+/obj/item/weapon/robot_module/proc/apply_status_flags(var/mob/living/silicon/robot/R)
+ if(!can_be_pushed)
+ R.status_flags &= ~CANPUSH
+
+/obj/item/weapon/robot_module/proc/remove_status_flags(var/mob/living/silicon/robot/R)
+ if(!can_be_pushed)
+ R.status_flags |= CANPUSH
+
+// Cyborgs (non-drones), default loadout. This will be given to every module.
+/obj/item/weapon/robot_module/robot/New()
+ ..()
+ src.modules += new /obj/item/device/flash(src)
+ src.modules += new /obj/item/weapon/crowbar/cyborg(src)
+ src.modules += new /obj/item/weapon/extinguisher(src)
+
+/obj/item/weapon/robot_module/robot/standard
+ name = "standard robot module"
+ sprites = list(
+ "M-USE NanoTrasen" = "robot",
+ "Cabeiri" = "eyebot-standard",
+ "CUPCAKE" = "Noble-STD",
+ "Haruka" = "marinaSD",
+ "Usagi" = "tallflower",
+ "Telemachus" = "toiletbot",
+ "WTOperator" = "sleekstandard",
+ "WTOmni" = "omoikane",
+ "XI-GUS" = "spider",
+ "XI-ALP" = "heavyStandard",
+ "Basic" = "robot_old",
+ "Android" = "droid",
+ "Drone" = "drone-standard"
+ )
+
+/obj/item/weapon/robot_module/robot/standard/New()
+ ..()
+ src.modules += new /obj/item/weapon/melee/baton/loaded(src)
+ src.modules += new /obj/item/weapon/wrench/cyborg(src)
+ src.modules += new /obj/item/device/healthanalyzer(src)
+ src.emag = new /obj/item/weapon/melee/energy/sword(src)
+
+/obj/item/weapon/robot_module/robot/medical
+ name = "medical robot module"
+ channels = list("Medical" = 1)
+ networks = list(NETWORK_MEDICAL)
+ subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
+ can_be_pushed = 0
+
+/obj/item/weapon/robot_module/robot/medical/surgeon
+ name = "surgeon robot module"
+ sprites = list(
+ "M-USE NanoTrasen" = "robotMedi",
+ "Cabeiri" = "eyebot-medical",
+ "CUPCAKE" = "Noble-MED",
+ "Haruka" = "marinaMD",
+ "Minako" = "arachne",
+ "Usagi" = "tallwhite",
+ "Telemachus" = "toiletbotsurgeon",
+ "WTOperator" = "sleekcmo",
+ "XI-ALP" = "heavyMed",
+ "Basic" = "Medbot",
+ "Advanced Droid" = "droid-medical",
+ "Needles" = "medicalrobot",
+ "Drone" = "drone-surgery",
+ "Handy" = "handy-med"
+ )
+
+/obj/item/weapon/robot_module/robot/medical/surgeon/New()
+ ..()
+ src.modules += new /obj/item/borg/sight/hud/med(src)
+ src.modules += new /obj/item/device/healthanalyzer(src)
+ src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src)
+ src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/cautery/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/bonegel/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src)
+ 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/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/reagent_containers/dropper(src) // Allows surgeon borg to fix necrosis
+ src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
+ src.emag = new /obj/item/weapon/reagent_containers/spray(src)
+ src.emag.reagents.add_reagent("pacid", 250)
+ src.emag.name = "Polyacid spray"
+
+ var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000)
+ synths += medicine
+
+ var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src)
+ var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src)
+ N.uses_charge = 1
+ N.charge_costs = list(1000)
+ N.synths = list(medicine)
+ B.uses_charge = 1
+ B.charge_costs = list(1000)
+ B.synths = list(medicine)
+ src.modules += N
+ src.modules += B
+
+/obj/item/weapon/robot_module/medical/robot/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
+ if(src.emag)
+ var/obj/item/weapon/reagent_containers/spray/PS = src.emag
+ PS.reagents.add_reagent("pacid", 2 * amount)
+ ..()
+
+/obj/item/weapon/robot_module/robot/medical/crisis
+ name = "crisis robot module"
+ sprites = list(
+ "M-USE NanoTrasen" = "robotMedi",
+ "Cabeiri" = "eyebot-medical",
+ "CUPCAKE" = "Noble-MED",
+ "Haruka" = "marinaMD",
+ "Minako" = "arachne",
+ "Usagi" = "tallwhite",
+ "Telemachus" = "toiletbotmedical",
+ "WTOperator" = "sleekmedic",
+ "XI-ALP" = "heavyMed",
+ "Basic" = "Medbot",
+ "Advanced Droid" = "droid-medical",
+ "Needles" = "medicalrobot",
+ "Drone - Medical" = "drone-medical",
+ "Drone - Chemistry" = "drone-chemistry"
+ )
+
+/obj/item/weapon/robot_module/robot/medical/crisis/New()
+ ..()
+ src.modules += new /obj/item/borg/sight/hud/med(src)
+ src.modules += new /obj/item/device/healthanalyzer(src)
+ src.modules += new /obj/item/device/reagent_scanner/adv(src)
+ src.modules += new /obj/item/roller_holder(src)
+ src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src)
+ src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
+ src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
+ src.modules += new /obj/item/weapon/reagent_containers/syringe(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)
+ src.emag = new /obj/item/weapon/reagent_containers/spray(src)
+ src.emag.reagents.add_reagent("pacid", 250)
+ src.emag.name = "Polyacid spray"
+
+ var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000)
+ synths += medicine
+
+ var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src)
+ var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src)
+ var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src)
+ O.uses_charge = 1
+ O.charge_costs = list(1000)
+ O.synths = list(medicine)
+ B.uses_charge = 1
+ B.charge_costs = list(1000)
+ B.synths = list(medicine)
+ S.uses_charge = 1
+ S.charge_costs = list(1000)
+ S.synths = list(medicine)
+ src.modules += O
+ src.modules += B
+ src.modules += S
+
+/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
+ if(S.mode == 2)
+ S.reagents.clear_reagents()
+ S.mode = initial(S.mode)
+ S.desc = initial(S.desc)
+ S.update_icon()
+
+ if(src.emag)
+ var/obj/item/weapon/reagent_containers/spray/PS = src.emag
+ PS.reagents.add_reagent("pacid", 2 * amount)
+
+ ..()
+
+
+/obj/item/weapon/robot_module/robot/engineering
+ name = "engineering robot module"
+ channels = list("Engineering" = 1)
+ networks = list(NETWORK_ENGINEERING)
+ subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor)
+ sprites = list(
+ "M-USE NanoTrasen" = "robotEngi",
+ "Cabeiri" = "eyebot-engineering",
+ "CUPCAKE" = "Noble-ENG",
+ "Haruka" = "marinaENG",
+ "Usagi" = "tallyellow",
+ "Telemachus" = "toiletbotengineering",
+ "WTOperator" = "sleekce",
+ "XI-GUS" = "spidereng",
+ "XI-ALP" = "heavyEng",
+ "Basic" = "Engineering",
+ "Antique" = "engineerrobot",
+ "Landmate" = "landmate",
+ "Landmate - Treaded" = "engiborg+tread",
+ "Drone" = "drone-engineer",
+ "Treadwell" = "treadwell",
+ "Handy" = "handy-engineer"
+ )
+
+/obj/item/weapon/robot_module/robot/engineering/construction
+ name = "construction robot module"
+ no_slip = 1
+
+/* Merged back into engineering (Hell, it's about time.)
+
+/obj/item/weapon/robot_module/robot/engineering/construction/New()
+ ..()
+ src.modules += new /obj/item/borg/sight/meson(src)
+ src.modules += new /obj/item/weapon/rcd/borg(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/weldingtool/electric/mounted/cyborg(src)
+ src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.modules += new /obj/item/device/pipe_painter(src)
+ src.modules += new /obj/item/device/floor_painter(src)
+ src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
+ src.modules += new /obj/item/device/geiger(src)
+
+ var/datum/matter_synth/metal = new /datum/matter_synth/metal()
+ var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel()
+ var/datum/matter_synth/glass = new /datum/matter_synth/glass()
+ synths += metal
+ synths += plasteel
+ synths += glass
+
+ var/obj/item/stack/material/cyborg/steel/M = new (src)
+ M.synths = list(metal)
+ src.modules += M
+
+ var/obj/item/stack/rods/cyborg/R = new /obj/item/stack/rods/cyborg(src)
+ R.synths = list(metal)
+ src.modules += R
+
+ var/obj/item/stack/tile/floor/cyborg/F = new /obj/item/stack/tile/floor/cyborg(src)
+ F.synths = list(metal)
+ src.modules += F
+
+ var/obj/item/stack/material/cyborg/plasteel/S = new (src)
+ S.synths = list(plasteel)
+ src.modules += S
+
+ var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src)
+ RG.synths = list(metal, glass)
+ src.modules += RG
+*/
+
+/obj/item/weapon/robot_module/robot/engineering/general/New()
+ ..()
+ 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/device/analyzer(src)
+ src.modules += new /obj/item/taperoll/engineering(src)
+ src.modules += new /obj/item/weapon/gripper(src)
+ src.modules += new /obj/item/device/lightreplacer(src)
+ src.modules += new /obj/item/device/pipe_painter(src)
+ src.modules += new /obj/item/device/floor_painter(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/borg(src)
+ src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
+
+ var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000)
+ var/datum/matter_synth/glass = new /datum/matter_synth/glass(40000)
+ var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel(20000)
+
+ var/datum/matter_synth/wire = new /datum/matter_synth/wire()
+ synths += metal
+ synths += glass
+ synths += plasteel
+ synths += wire
+
+ var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_decompiler(src)
+ MD.metal = metal
+ MD.glass = glass
+ 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/R = new /obj/item/stack/rods/cyborg(src)
+ R.synths = list(metal)
+ src.modules += R
+
+ 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/material/cyborg/plasteel/P = new (src)
+ P.synths = list(plasteel)
+ src.modules += P
+
+ 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
+
+/obj/item/weapon/robot_module/robot/security
+ name = "security robot module"
+ channels = list("Security" = 1)
+ networks = list(NETWORK_SECURITY)
+ subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
+ can_be_pushed = 0
+ supported_upgrades = list(/obj/item/borg/upgrade/tasercooler)
+
+/obj/item/weapon/robot_module/robot/security/general
+ sprites = list(
+ "M-USE NanoTrasen" = "robotSecy",
+ "Cabeiri" = "eyebot-security",
+ "Cerberus" = "bloodhound",
+ "Cerberus - Treaded" = "treadhound",
+ "CUPCAKE" = "Noble-SEC",
+ "Haruka" = "marinaSC",
+ "Usagi" = "tallred",
+ "Telemachus" = "toiletbotsecurity",
+ "WTOperator" = "sleeksecurity",
+ "XI-GUS" = "spidersec",
+ "XI-ALP" = "heavySec",
+ "Basic" = "secborg",
+ "Black Knight" = "securityrobot",
+ "Drone" = "drone-sec"
+ )
+
+/obj/item/weapon/robot_module/robot/security/general/New()
+ ..()
+ src.modules += new /obj/item/borg/sight/hud/sec(src)
+ 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/taperoll/police(src)
+ src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src)
+ src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src)
+
+/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)
+ 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
+ if(B && B.bcell)
+ B.bcell.give(amount)
+
+/obj/item/weapon/robot_module/robot/janitor
+ name = "janitorial robot module"
+ channels = list("Service" = 1)
+ sprites = list(
+ "M-USE NanoTrasen" = "robotJani",
+ "Arachne" = "crawler",
+ "Cabeiri" = "eyebot-janitor",
+ "CUPCAKE" = "Noble-CLN",
+ "Haruka" = "marinaJN",
+ "Telemachus" = "toiletbotjanitor",
+ "WTOperator" = "sleekjanitor",
+ "XI-ALP" = "heavyRes",
+ "Basic" = "JanBot2",
+ "Mopbot" = "janitorrobot",
+ "Mop Gear Rex" = "mopgearrex",
+ "Drone" = "drone-janitor"
+ )
+
+/obj/item/weapon/robot_module/robot/janitor/New()
+ ..()
+ src.modules += new /obj/item/weapon/soap/nanotrasen(src)
+ src.modules += new /obj/item/weapon/storage/bag/trash(src)
+ src.modules += new /obj/item/weapon/mop(src)
+ src.modules += new /obj/item/device/lightreplacer(src)
+ src.emag = new /obj/item/weapon/reagent_containers/spray(src)
+ src.emag.reagents.add_reagent("lube", 250)
+ src.emag.name = "Lube spray"
+
+/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)
+ if(src.emag)
+ var/obj/item/weapon/reagent_containers/spray/S = src.emag
+ S.reagents.add_reagent("lube", 2 * amount)
+
+/obj/item/weapon/robot_module/robot/clerical
+ name = "service robot module"
+ channels = list("Service" = 1)
+ languages = list(
+ LANGUAGE_SOL_COMMON = 1,
+ LANGUAGE_UNATHI = 1,
+ LANGUAGE_SIIK = 1,
+ LANGUAGE_SKRELLIAN = 1,
+ LANGUAGE_ROOTLOCAL = 0,
+ LANGUAGE_TRADEBAND = 1,
+ LANGUAGE_GUTTER = 1,
+ LANGUAGE_SCHECHI = 1,
+ LANGUAGE_EAL = 1,
+ LANGUAGE_SIGN = 0
+ )
+
+/obj/item/weapon/robot_module/robot/clerical/butler
+ sprites = list(
+ "M-USE NanoTrasen" = "robotServ",
+ "Cabeiri" = "eyebot-standard",
+ "CUPCAKE" = "Noble-SRV",
+ "Haruka" = "marinaSV",
+ "Michiru" = "maidbot",
+ "Usagi" = "tallgreen",
+ "Telemachus" = "toiletbot",
+ "WTOperator" = "sleekservice",
+ "WTOmni" = "omoikane",
+ "XI-GUS" = "spider",
+ "XI-ALP" = "heavyServ",
+ "Standard" = "Service2",
+ "Waitress" = "Service",
+ "Bro" = "Brobot",
+ "Rich" = "maximillion",
+ "Drone - Service" = "drone-service",
+ "Drone - Hydro" = "drone-hydro"
+ )
+
+/obj/item/weapon/robot_module/robot/clerical/butler/New()
+ ..()
+ 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/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/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
+
+ 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)
+ src.emag = new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src)
+
+ var/datum/reagents/R = new/datum/reagents(50)
+ src.emag.reagents = R
+ R.my_atom = src.emag
+ R.add_reagent("beer2", 50)
+ src.emag.name = "Mickey Finn's Special Brew"
+
+/obj/item/weapon/robot_module/robot/clerical/general
+ name = "clerical robot module"
+ sprites = list(
+ "M-USE NanoTrasen" = "robotCler",
+ "Cabeiri" = "eyebot-standard",
+ "CUPCAKE" = "Noble-SRV",
+ "Haruka" = "marinaSV",
+ "Usagi" = "tallgreen",
+ "Telemachus" = "toiletbot",
+ "WTOperator" = "sleekclerical",
+ "WTOmni" = "omoikane",
+ "XI-GUS" = "spidercom",
+ "XI-ALP" = "heavyServ",
+ "Waitress" = "Service",
+ "Bro" = "Brobot",
+ "Rich" = "maximillion",
+ "Default" = "Service2",
+ "Drone" = "drone-blu"
+ )
+
+/obj/item/weapon/robot_module/robot/clerical/general/New()
+ ..()
+ src.modules += new /obj/item/weapon/pen/robopen(src)
+ src.modules += new /obj/item/weapon/form_printer(src)
+ src.modules += new /obj/item/weapon/gripper/paperwork(src)
+ src.modules += new /obj/item/weapon/hand_labeler(src)
+ src.modules += new /obj/item/weapon/stamp(src)
+ src.modules += new /obj/item/weapon/stamp/denied(src)
+ src.emag = new /obj/item/weapon/stamp/chameleon(src)
+ src.emag = new /obj/item/weapon/pen/chameleon(src)
+
+/obj/item/weapon/robot_module/general/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)
+ if(src.emag)
+ var/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/B = src.emag
+ B.reagents.add_reagent("beer2", 2 * amount)
+
+/obj/item/weapon/robot_module/robot/miner
+ name = "miner robot module"
+ channels = list("Supply" = 1)
+ networks = list(NETWORK_MINE)
+ sprites = list(
+ "NM-USE NanoTrasen" = "robotMine",
+ "Cabeiri" = "eyebot-miner",
+ "CUPCAKE" = "Noble-DIG",
+ "Haruka" = "marinaMN",
+ "Telemachus" = "toiletbotminer",
+ "WTOperator" = "sleekminer",
+ "XI-GUS" = "spidermining",
+ "XI-ALP" = "heavyMiner",
+ "Basic" = "Miner_old",
+ "Advanced Droid" = "droid-miner",
+ "Treadhead" = "Miner",
+ "Drone" = "drone-miner"
+ )
+
+/obj/item/weapon/robot_module/robot/miner/New()
+ ..()
+ src.modules += new /obj/item/borg/sight/material(src)
+ src.modules += new /obj/item/weapon/wrench/cyborg(src)
+ src.modules += new /obj/item/weapon/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.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
+
+/obj/item/weapon/robot_module/robot/research
+ name = "research module"
+ channels = list("Science" = 1)
+ sprites = list(
+ "L'Ouef" = "peaceborg",
+ "Cabeiri" = "eyebot-science",
+ "Haruka" = "marinaSCI",
+ "WTDove" = "whitespider",
+ "WTOperator" = "sleekscience",
+ "Droid" = "droid-science",
+ "Drone" = "drone-science",
+ "Handy" = "handy-science"
+ )
+
+/obj/item/weapon/robot_module/robot/research/New()
+ ..()
+ src.modules += new /obj/item/weapon/portable_destructive_analyzer(src)
+ src.modules += new /obj/item/weapon/gripper/research(src)
+ src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src)
+ src.modules += new /obj/item/weapon/gripper/no_use/mech(src)
+ src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
+ src.modules += new /obj/item/device/robotanalyzer(src)
+ src.modules += new /obj/item/weapon/card/robot(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/weapon/surgical/scalpel/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src)
+ src.modules += new /obj/item/weapon/reagent_containers/syringe(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/weapon/shockpaddles/robot/jumper(src)
+ src.modules += new /obj/item/weapon/melee/baton/slime/robot(src)
+ src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src)
+ src.emag = new /obj/item/weapon/hand_tele(src)
+
+ var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000)
+ synths += nanite
+ var/datum/matter_synth/wire = new /datum/matter_synth/wire() //Added to allow repairs, would rather add cable now than be asked to add it later,
+ synths += wire //Cable code, taken from engiborg,
+
+ 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) //Cable code, taken from engiborg,
+ C.synths = list(wire)
+ src.modules += C
+
+/obj/item/weapon/robot_module/robot/security/combat
+ name = "combat robot module"
+ hide_on_manifest = 1
+ sprites = list(
+ "Haruka" = "marinaCB",
+ "Combat Android" = "droid-combat"
+ )
+
+/obj/item/weapon/robot_module/robot/security/combat/New()
+ ..()
+ src.modules += new /obj/item/device/flash(src)
+ src.modules += new /obj/item/borg/sight/thermal(src)
+ src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src)
+ src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.modules += new /obj/item/borg/combat/shield(src)
+ src.modules += new /obj/item/borg/combat/mobility(src)
+ src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src)
+
+
+/* Drones */
+
+/obj/item/weapon/robot_module/drone
+ name = "drone module"
+ hide_on_manifest = 1
+ no_slip = 1
+ networks = list(NETWORK_ENGINEERING)
+
+/obj/item/weapon/robot_module/drone/New(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)
+ src.modules += new /obj/item/weapon/screwdriver/cyborg(src)
+ src.modules += new /obj/item/weapon/wrench/cyborg(src)
+ src.modules += new /obj/item/weapon/crowbar/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/lightreplacer(src)
+ src.modules += new /obj/item/weapon/gripper(src)
+ src.modules += new /obj/item/weapon/soap(src)
+ src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
+ src.modules += new /obj/item/weapon/extinguisher(src)
+ src.modules += new /obj/item/device/pipe_painter(src)
+ src.modules += new /obj/item/device/floor_painter(src)
+
+ robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
+ src.modules += robot.internals
+
+ src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.emag.name = "Plasma Cutter"
+
+ var/datum/matter_synth/metal = new /datum/matter_synth/metal(25000)
+ var/datum/matter_synth/glass = new /datum/matter_synth/glass(25000)
+ var/datum/matter_synth/wood = new /datum/matter_synth/wood(25000)
+ var/datum/matter_synth/plastic = new /datum/matter_synth/plastic(25000)
+ var/datum/matter_synth/wire = new /datum/matter_synth/wire(30)
+ synths += metal
+ synths += glass
+ synths += wood
+ synths += plastic
+ synths += wire
+
+ var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_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/R = new /obj/item/stack/rods/cyborg(src)
+ R.synths = list(metal)
+ src.modules += R
+
+ 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/P = new (src)
+ P.synths = list(plastic)
+ src.modules += P
+
+/obj/item/weapon/robot_module/drone/construction
+ name = "construction drone module"
+ hide_on_manifest = 1
+ channels = list("Engineering" = 1)
+ languages = list()
+
+/obj/item/weapon/robot_module/drone/construction/New()
+ ..()
+ src.modules += new /obj/item/weapon/rcd/borg(src)
+
+/obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
+ var/obj/item/device/lightreplacer/LR = locate() in src.modules
+ LR.Charge(R, amount)
+ ..()
return
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
new file mode 100644
index 0000000000..2def8149ff
--- /dev/null
+++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
@@ -0,0 +1,45 @@
+/* Syndicate modules */
+
+/obj/item/weapon/robot_module/robot/syndicate
+ name = "illegal robot module"
+ hide_on_manifest = 1
+ languages = list(
+ LANGUAGE_SOL_COMMON = 1,
+ LANGUAGE_TRADEBAND = 1,
+ LANGUAGE_UNATHI = 0,
+ LANGUAGE_SIIK = 0,
+ LANGUAGE_SKRELLIAN = 0,
+ LANGUAGE_ROOTLOCAL = 0,
+ LANGUAGE_GUTTER = 1,
+ LANGUAGE_SCHECHI = 0,
+ LANGUAGE_EAL = 1,
+ LANGUAGE_SIGN = 0
+ )
+ sprites = list(
+ "Cerberus" = "syndie_bloodhound",
+ "Cerberus - Treaded" = "syndie_treadhound",
+ "Ares" = "squats",
+ "Telemachus" = "toiletbotantag",
+ "WTOperator" = "hosborg",
+ "XI-GUS" = "spidersyndi",
+ "XI-ALP" = "syndi-heavy"
+ )
+ var/id
+
+/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R)
+ ..()
+ loc = R
+ src.modules += new /obj/item/weapon/melee/energy/sword(src)
+ src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src)
+ src.modules += new /obj/item/weapon/card/emag(src)
+ var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
+ src.modules += jetpack
+ R.internals = jetpack
+
+ id = R.idcard
+ src.modules += id
+
+/obj/item/weapon/robot_module/robot/syndicate/Destroy()
+ src.modules -= id
+ id = null
+ return ..()
diff --git a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
new file mode 100644
index 0000000000..9cc09b286a
--- /dev/null
+++ b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
@@ -0,0 +1,25 @@
+/mob/living/silicon/robot/gravekeeper
+ lawupdate = 0
+ scrambledcodes = 1
+ icon_state = "drone-lost"
+ modtype = "Gravekeeper"
+ lawchannel = "State"
+ braintype = "Drone"
+ idcard_type = /obj/item/weapon/card/id
+
+/mob/living/silicon/robot/gravekeeper/init()
+ aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
+
+ mmi = new /obj/item/device/mmi/digital/robot(src) // Explicitly a drone.
+ module = new /obj/item/weapon/robot_module/robot/gravekeeper(src)
+ overlays.Cut()
+ init_id()
+
+ updatename("Gravekeeper")
+
+ if(!cell)
+ cell = new /obj/item/weapon/cell/high(src) // 15k cell, as recharging stations are a lot more rare on the Surface.
+
+ laws = new /datum/ai_laws/gravekeeper()
+
+ playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0)
\ No newline at end of file
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index cb36f6e3b4..d32d479e3f 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ
diff --git a/polaris.dme b/polaris.dme
index 9da5a766a2..5d75d04f78 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -966,7 +966,6 @@
#include "code\game\objects\structures\electricchair.dm"
#include "code\game\objects\structures\extinguisher.dm"
#include "code\game\objects\structures\flora.dm"
-#include "code\game\objects\structures\ghost_pods.dm"
#include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\gravemarker.dm"
#include "code\game\objects\structures\grille.dm"
@@ -1019,6 +1018,8 @@
#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
+#include "code\game\objects\structures\ghost_pods\ghost_pods.dm"
+#include "code\game\objects\structures\ghost_pods\silicon.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\bed.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm"
@@ -1731,7 +1732,6 @@
#include "code\modules\mob\living\silicon\robot\robot.dm"
#include "code\modules\mob\living\silicon\robot\robot_damage.dm"
#include "code\modules\mob\living\silicon\robot\robot_items.dm"
-#include "code\modules\mob\living\silicon\robot\robot_modules.dm"
#include "code\modules\mob\living\silicon\robot\robot_movement.dm"
#include "code\modules\mob\living\silicon\robot\syndicate.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone.dm"
@@ -1741,6 +1741,10 @@
#include "code\modules\mob\living\silicon\robot\drone\drone_items.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_say.dm"
+#include "code\modules\mob\living\silicon\robot\robot_modules\event.dm"
+#include "code\modules\mob\living\silicon\robot\robot_modules\station.dm"
+#include "code\modules\mob\living\silicon\robot\robot_modules\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\simple_animal\corpse.dm"
#include "code\modules\mob\living\simple_animal\simple_animal.dm"